[]
        
(Showing Draft Content)

View with Relationships

A View can include fields from related tables.

This allows you to present joined data without merging tables manually.

Cross-table access requires a defined relationship.

Prerequisite: Define a Relationship

Before using related fields in a View, define a relationship between tables.

Example:

dataManager.addRelationship(
    orderTable,          // source table
    "CustomerId",        // source key
    "customer",          // navigation property name
    customerTable,       // target table
    "Id",                // target key
    "orders"             // reverse navigation name
);

After defining the relationship:

  • orderTable can access customer

  • customerTable can access orders

Using Related Fields in a View

Once the relationship exists, related fields can be referenced using dot notation.

Example:

var orderView = orderTable.addView("orderView", [
    { value: "orderId", width: 100 },
    { value: "orderDate", width: 150 },
    { value: "customer.companyName", caption: "Company", width: 200 },
    { value: "customer.contactName", caption: "Contact", width: 150 }
]);

The View now displays fields from:

  • The host table (orderIdorderDate)

  • The related table (customer.companyNamecustomer.contactName)

No data duplication occurs.

The View resolves related values dynamically.

Using Related Data in Formatters

Related fields can also be used in templates or formulas.

Example:

var addressStyle = {
    formatter: 'The detailed ship address: {{=CONCAT(@.shipAddress, ", ", @.shipCity)}}'
};

var orderView = orderTable.addView("orderView", [
    { value: "orderId", width: 100 },
    { value: "=[@]", caption: "Address", style: addressStyle, width: "3*" }
]);

Formatters can reference:

  • Host table fields

  • Related table fields

  • Entire row context via @

Layout with Related Fields

Star sizing works normally with related fields:

var orderView = orderTable.addView("orderView", [
    { value: "customer.companyName", width: "2*" },
    { value: "customer.contactName", width: "*" }
]);

Column layout behavior is independent of whether data comes from the host or related table.

Binding Joined Views

After defining the view:

orderView.fetch().then(function () {
    tableSheet.setDataView(orderView);
});

The sheet renders the joined structure as defined by the view.

Key Characteristics

  • A View always belongs to one host table.

  • Related fields are accessed through defined relationships.

  • Dot notation is used to reference related fields.

  • No manual join logic is required.

  • Data remains normalized at the table level.