Wiki Markup | ||||
---|---|---|---|---|
Div | ||||
| }
||||
DO NOT EDIT THE CONTENT OF THIS PAGE DIRECTLY (EXCEPT INSIDE THE DIV BELOW WITH ID=DESCRIPTION), UNLESS YOU KNOW WHAT YOU'RE DOING.
STRUCTURE OF THE CONTENT IS VITAL IN BEING ABLE TO AUTO UPDATE THE CONTENT THROUGH THE DOC GENERATOR. \\ \\ Enter additional information related to this
inside the \{div} macro with 'id=description' {div} {div:id=description}h3.Relations By default, relations join together two datasources, for example a CUSTOMERS (source) and a ORDERS (destination) table. Through [RelationItems|RelationItem] the nature of the link between the datasources is defined, for example to link the CUSTOMERS and ORDERS table based on the customer_id column. At runtime a relation is an object of type [JSFoundset]. Relations are used in Solutions to display related data, for example using a [Field], a [TabPanel] or a [Portal] or to work with related data in business logic. h3.Special Relations Next to the default relations that link two datasources together, there are several other types of relations, based on how the relation is setup. h6.Global relations Relations that contain only RelationItems based on global variables on the source side, thus no dependency on the source table are considered global relations. Global relations can be used to get a limited FoundSet, for example all active customers, by adding a relation item that specifies that the "active" flag in the CUSTOMERS table has to be equal to a certain global variable. For example, if the CUSTOMERS table (used as destination datasource) contains a column called "is_active" of type INTEGER and a default value of 1 (indicating it is an active record), the following would create a global relation that returns a FoundSet with all active customers: {code:title=Setup a global variable}var ACTIVE = 1;{code} !Global Relation Item.JPG|border=1! h6.Container relations If the source and destination datasources are equal and the relation does not contain any RelationItems, it becomes a Container relation. A Container relation returns it originating FoundSet. A Container relation can be used to set the FoundSet of the parent form into the Form displayed in a TabPanel. h6.Selfjoins Relations can use the same datasource as source and destination datasource. Depending on the setup of the the RelationItems the relation can point back to the originating record or one or more different records. h3.Relation options Relations have several settings that influence the behavior of the Relation under different circumstances. h6.Join Types Join types determine the behavior of sorting when there are no related records and the sort is performed on related fields. *Inner join*: When sorting records on related dataproviders over a relation that uses the "inner join" type, if a parent record does not have any related records, the parent record is excluded from the foundset *Left outer join*: When sorting records on related dataproviders over a relation that uses the "left outer join" type, if a parent record does not have any related records, the parent record remains in the foundset {tip:title=Use Left outer join}In most scenario's the "Left outer join" type is the join type to use for relations{tip} h6.Record creation *Allow creation of related records*: This property indicates if the relation can be used to create new related records - true: the execution of the newRecord() method on the relation (for example |
Div | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
RelationsBy default, relations join together two datasources, for example a CUSTOMERS (source) and a ORDERS (destination) table. Through RelationItems the nature of the link between the datasources is defined, for example to link the CUSTOMERS and ORDERS table based on the customer_id column. At runtime a relation is an object of type JSFoundset. Relations are used in Solutions to display related data, for example using a Field, a TabPanel or a Portal or to work with related data in business logic. Special RelationsNext to the default relations that link two datasources together, there are several other types of relations, based on how the relation is setup. Global relationsRelations that contain only RelationItems based on global variables on the source side, thus no dependency on the source table are considered global relations. Global relations can be used to get a limited FoundSet, for example all active customers, by adding a relation item that specifies that the "active" flag in the CUSTOMERS table has to be equal to a certain global variable. For example, if the CUSTOMERS table (used as destination datasource) contains a column called "is_active" of type INTEGER and a default value of 1 (indicating it is an active record), the following would create a global relation that returns a FoundSet with all active customers:
Container relationsIf the source and destination datasources are equal and the relation does not contain any RelationItems, it becomes a Container relation. A Container relation returns it originating FoundSet. A Container relation can be used to set the FoundSet of the parent form into the Form displayed in a TabPanel. SelfjoinsRelations can use the same datasource as source and destination datasource. Depending on the setup of the the RelationItems the relation can point back to the originating record or one or more different records. Relation optionsRelations have several settings that influence the behavior of the Relation under different circumstances. Join TypesJoin types determine the behavior of sorting when there are no related records and the sort is performed on related fields. Inner join: When sorting records on related dataproviders over a relation that uses the "inner join" type, if a parent record does not have any related records, the parent record is excluded from the foundset
Record creationAllow creation of related records: This property indicates if the relation can be used to create new related records
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
...
|
...
Record |
...
deletion |
...
Allow |
...
parent |
...
delete |
...
when |
...
having |
...
related |
...
records |
...
: |
...
This |
...
property |
...
indicates |
...
if |
...
the |
...
parent |
...
record |
...
can |
...
be |
...
deleted |
...
if |
...
it |
...
has |
...
related |
...
records |
...
over |
...
this |
...
relation |
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
...
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
Delete related records: This property indicates if child records should be automatically deleted when the parent record is deleted
Example 1: A simple scenario If an attempt is made to delete a customer record which has order and the orders have orderitems, when the relations are setup as described above the customer record will be deleted, all the orders related to the customer are deleted and all orderitems related to the orders of the customer will be deleted. As Relation 3 has the deleteRelatedRecords property set to false, no attempt will be made to delete the product record related to the orderitems that are to be deleted. Example 2: Implementing business logic enforcement in the data layer This setup is mostly the same as example 1, except for the additional fourth relation. This relation from the orders table to the invoices defines that the order record cannot be deleted if it has a related invoice record. In this setup, when an attempt is made to delete a customer record the delete is blocked if the customer has a related order that has a related invoice record. |
HTML Table | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
HTML Table | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|