2017 June Release

Defining forms and form pagesPermanent link for this heading

Forms and form pages will be used in many situations in Fabasoft Folio.

  • Forms determine which properties should be displayed in the attribute editor when the Edit Properties or Read Properties menu item is invoked by the user
  • Forms determine which properties are available in the search dialog when the user invokes the Find menu item.
  • Forms determine which object lists are displayed for Compound Objects in the Fabasoft Folio clients when browsing the object hierarchy (this is called Explore mode). In Fabasoft Folio Compound Objects may have multiple lists. This lists are presented to the user either in a dashboard view or via multiple tabs depending upon the user interface used.
  • Forms determine which object lists should be used as child nodes of a Compound Object in the Navigation tool (tree view).
  • Forms determine which properties may be added to as columns to the detail view of an object list.
  • Forms determine which properties should be shown in the IntelliHelp window.
  • Forms are used to define which properties should be shown in the Card, Content or Preview view.
  • And finally forms and pages are used in dialogs.

Note: The Fabasoft app.ducx user interface language distinguishes two types of forms. The default are forms that consist of one or multiple form pages (form and formpage). This forms can be used for all situations described above. Alternatively there are so called desk forms (deskform) which only define a dataset and can only be used for restricting the lists displayed in explore mode and in the tree view. It is not recommended to use this desk forms anymore.

Defining a formPermanent link for this heading

Syntax

form reference {
  audience = audience;
  // New form pages can be defined inline
  formpage reference {
    audience = audience;
    dataset {
      class;
      property;
      ...
    }
  }
  // Existing form pages can be reused by adding their references to the
  // form block in the order they should appear on the form

  reference;
}


A form consists of form pages holding the properties that should be displayed. Form pages can either be defined inline or existing form pages can be reused.

The form keyword is used to define a form. It must be followed by a reference and curly braces.

Defining the audience for a formPermanent link for this heading

The audience keyword is used to define the target audience of a form. The next table shows the possible values that can be assigned to audience. When audience is not specified implicitly enduser is the target audience.

Audience

Description

enduser

The form is usable by all users. The ACL COOSYSTEM@1.1:DefaultAdministratorACL is assigned to the form.

administrator

The form is usable by administrators only. The ACL COOSYSTEM@1.1:DefaultDeveloperACL is assigned to the form.

Table 11: Audience of a form or form page

Defining the title, a heading and a description for a formPermanent link for this heading

When a form is used in a dialog or in the attribute editor (which uses dialogs for reading and changing properties, too) you may define a title for the form, a page headline and a page description. In a confirm dialog only a title and a description will be displayed.

For more information about title, heading and descriptions in dialogs please refer to chapter “Defining the title, a heading and a description of a dialog”.

The property formcaption stores the multilingual text that may be displayed as title. It stores one string for each supported language. An entry in the multilingual files is only generated if explicitly used.

The property formpagelabel stores the multilingual text that may be displayed as name of a tab in multi-tab dialogs or as headline in a single tab dialog. It stores one string for each supported language. An entry in the multilingual files is generated automatically.

The property formpagedescription stores the multilingual text that explains the data shown on the form page in more detail. It stores one string for each supported language. An entry in the multilingual files is only generated if explicitly used.

Example

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;

  form FormInvoice {
    formcaption = {}
    formpage PageInvoiceData {
      formpagedescription = {}
      ...
  }
}

Adding form pages to a formPermanent link for this heading

Each form can consist of multiple form pages that can either be reused or defined inside the form block.

The formpage keyword is used to define a new form page inside the form block. For reusing an existing form page, you just need to provide the reference of the form page followed by a semicolon.

The order of the form pages in the form block also determines their order on the form when it is displayed in the user interface.

Enabling the generic viewPermanent link for this heading

When enabling the generic view, properties that are not explicitly assigned to a form page are displayed on a system-generated form page. The name of the system-generated form page corresponds to the name of the object class the properties belong to.

To enable the generic view for a form, COOATTREDIT@1.1:formgeneric can be set to true. In this case, it is not necessary to define any form pages as all properties of the object class of the current object are displayed in a generic manner. In the generic view, the order of the properties on the system-generated form page is determined by the object class definition.

Inheriting form pages from base classesPermanent link for this heading

When setting inherit to true, the form pages inherited from the base classes are displayed after the form pages defined in the current form.

When setting inheritfrom to a class, the form pages inherited from this class and its base classes are displayed. This setting is evaluated after the property inherit.

Example

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;

  form FormInvoice {
    audience = enduser;
    inherit = true;
    inheritfrom = CompoundObject;

    formpage PageInvoiceGeneral {
      audience = enduser;
      symbol = SymbolInvoice;
      dataset {
        invoicestate;
        invoiceorder;
      }
    }

    formpage PageInvoiceDates {
      audience = enduser;
      symbol = SymbolInvoiceDates;
      dataset {
        invoicedate;
        invoicepaymentdate;
      }
    }
  }
}

Defining a form pagePermanent link for this heading

A form page is defined in a formpage block that must be nested within a form block. The formpage keyword must be followed by the reference of the form page and curly braces.

A form page consists of a dataset block holding the properties and classes which can be used in the layout definitionto be displayed, an optional layout definition, and some general settings concerning the symbol displayed on the tab and the target audience.

Reuse an existing form pagePermanent link for this heading

If an existing form page should be reused open the Software Component References folder and select Copy Layout from the context menu of a form page. If the selected form page has no XML layout an error message is shown.

To insert the layout of the selected form page, switch to the form designer and select Paste Layout in the context menu of the destination form page.

Assigning a symbol to a form pagePermanent link for this heading

The symbol keyword is used to assign a symbol to a form page. The symbol referenced by the symbol assignment is displayed on the tab of the form page.

Note:

  • On the first page of the property editor form always the symbol of the corresponding object class is displayed, regardless which symbol is defined for the form page. Thus form pages can easily be reused for different object classes.
  • The Fabasoft app.ducx resource language must be used for defining custom symbols. However, you can also reuse existing symbols. For further information on defining symbols, refer to chapter “Defining symbols”.

Defining the audience for a form pagePermanent link for this heading

As is the case for a form, the audience keyword is used to define the target audience of a form page. For the possible values that can be assigned to audience see chapter “Defining the audience for a form”.

Please note that when a form is presented to an end-user that contains a form page with audience set to administrator, the form page in question is not displayed.

Adding properties to a form pagePermanent link for this heading

The dataset keyword is used to assign properties or fields to a form page.

All properties displayed on a form page must be listed in the dataset block nested within the formpage block. Semicolons must be used to separate multiple entries.

If a class has been added to the dataset block, all defined properties of only this class can be used in the layout. Inherited properties have to be added explicitly.

Adding fields to a form pagePermanent link for this heading

Fabasoft app.ducx also allows you to reference fields in the dataset block nested within the formpage block. You may only use fields that have been defined in a fields block using the Fabasoft app.ducx object model language, and each field referenced in the dataset block must be preceded by the keyword field.

Fields may be utilized to temporarily compute values that should not be stored persistently.

The optional get and set keywords allow you to define get and set expressions for calculating the field value. The get expression is evaluated before a field is displayed. The set expression is calculated when leaving the form page displaying a field or when clicking a branch (e.g. Apply).

When a get or set expression of a field is evaluated, the local scope this contains the vApp state dictionary. The global scope ::this contains a dictionary holding the keys listed in the next table.

Key

Description

root

The root key stores the current object.

attribute

The attribute key stores the object representing the field.

parent

The parent key stores the parent object of the current object.

value

The value key stores the current value of the field.

Note: This key is only available for set expressions.

isedit

The isedit key is true if the field is evaluated on an editable form page.

isvalue

The isvalue key is true if the field is evaluated on a standard form page, not a form page for a search.

isdashboard

The isdashboard key is true if the field is evaluated in a dashboard view.

Table 12: Global scope for get and set expressions of fields

Laying out properties on a form pagePermanent link for this heading

A formpage block can contain an optional layout block that allows you to define a specific layout of controls on the form page.

The layout block contains row blocks. A row may have several columns. A standard control consists of four columns, one column for the label and three columns to display the data. You can use the keywords listed in the next table to influence the way the property is displayed and behaves.

Keyword

Description

rowspan

The rowspan keyword is used to define how many rows the control spans.

colspan

The colspan keyword is used to define how many columns the control spans (default is four; one column for the label and three columns for the data).

valign

The valign keyword is used to define the vertical alignment of text within the control (top, middle or bottom).

halign

The halign keyword is used to define the horizontal alignment of text within the control (left, center or right).

fontfamily

The fontfamily keyword is used to specify the name of a font family used within a control with a CSS conformant string, i.e.: fontfamily = "verdana, sans-serif".

Note: Some controls override the used font, so that this element is ignored. This element is available in Version 2013 Spring Release or later.

fontcolor

The fontcolor keyword is used to define the color of text within the control (hexadecimal value).

fontsize

The fontsize keyword is used to define the size of text within the control (pt, px, em).

labeltext

The labeltext keyword is used to reference a string object that will provide the text of the label.

labelvisible

The labelvisible keyword is used to define whether the label is visible (true or false).

labelrowspan

The labelrowspan keyword is used to define how many rows the label spans.

labelcolspan

The labelcolspan keyword is used to define how many columns the label spans.

labelposition

The labelposition keyword is used to define the position of the label (top, bottom, left or right).

labelvalign

The labelvalign keyword is used to define the vertical alignment of a label (top, middle or bottom).

labelhalign

The labelhalign keyword is used to define the horizontal alignment of a label (left, center or right).

labelfontfamily

The labelfontfamily keyword is used to specify the name of a font family used for the label text of a control with a CSS conformant string, i.e.: labelfontfamily = "verdana, sans-serif".

Note: This element is available in Version 2013 Spring Release or later

labelfontcolor

The labelfontcolor keyword is used to define the color of the label text (hexadecimal value).

labelfontsize

The labelfontsize keyword is used to define the size of the label text (pt, px, em).

detail

The detail keyword is used to define the columns of an aggregate or object pointer list. This can be either a layout block:

detail = layout {...}

or a reference to form page:

detail = PageDetails;

simple

The simple keyword is used to define the columns of an aggregate that should be displayed in the simple view for in-place editing. With object pointer lists the columns in the overview are specified. This can be either a layout block:

simple = layout {...}

This block can specify a filter to be used in the simple view.

or a reference to form page:

simple = PageSimple;

empty

The empty keyword is used to define a cell in the grid layout without content.
Usage: empty; or empty { colspan = ...; }

filter

The filter property is used to apply a filter function to an object list property. A filter is an instance of COOSYSTEM@1.1:FilterExpression.

aggregation

The aggregation property is used to apply a function on a column. Predefined values in Fabasoft Folio are MenuSum, MenuAverage or MenuCount.

sort

The sort property sorts values in a column of a list. Available modes are up and down. When specifying such a value, a unique index should be set, too.

group

The group property allows to group values in a column of a list. Available modes are unique, alpha, year, quarter, month, week, day and hour. When specifying such a value, a unique index should be set, too.

index

The order of grouped and sorted columns is defined by index. This value should always be set when sort or group are specified.

fixed

The fixed property allows to make a column not horizontal scrollable. There are at least three columns necessary and it will not work on the last two columns. The column index starts with 1.

width

The width property is used to define the width of a column. There is no measure used. app.ducx removes added measures automatically.

height

The height property is used to define the height of a column. There is no measure used. app.ducx removes added measures automatically. The height of a row in a detail layout cannot be changed.

Table 13: Elements allowed within a layout block

A behavior influences the appearance of a property when displayed in a form page. Behaviors defined in the layout overwrite behaviors defined at the property level (see 5.1.3 Defining miscellaneous object class aspects).

Keyword

Description

visible

The property is only visible in the user interface, if the expression returns true. If the expression returns null or throws an error, the default visibility applies (i.e. invisible defined for the attribute). If a row in the layout does not contain any visible property, the whole row is removed.
If the visible expression is used to hide a column of an object list or aggregate list (possible in simple or detail layout), the grouping and sorting of this column is still considered.
Usage: visible = expression {...}

changeable

The property is changeable in the user interface, if the expression returns true. If the expression returns null or throws an error, the default behavior applies (i.e. readonly or readonly(ui) defined for the attribute).
Usage: changeable = expression {...}

mustbedef

The property must contain a value, if the expression returns true. If the expression returns null or throws an error, the default behavior applies (i.e. not null defined for the attribute).
Usage: mustbedef = expression {...}

validate

The expression is used to check whether the value entered in the property is valid. If an error occurs when evaluating the expression, this error is shown. If the expression returns false, a standard error is displayed.
Usage: validate = expression {...}

change

If the value of the property gets changed, the expression is executed. If an error occurs when evaluating the expression, this error is shown. The result of the expression is not relevant.
Usage: change = expression {...}

searchchange

If the value of the property gets changed in context of a search form, the expression is executed. If an error occurs when evaluating the expression, this error is shown. The result of the expression is not relevant.
Usage: searchchange = expression {...}

accset

The accset property is an expression which returns a list of access types (COOSYSTEM@1.1:AccessType). The current user must have access to the current object via at least one of these access types (based on the ACL evaluation of the Fabasoft Folio Kernel) in order to change the value of this property.
Usage: accset = expression {...}

accsetline

The accsetline property is an expression which returns a list of access types (COOSYSTEM@1.1:AccessType). This expression is evaluated for each line in an aggregate list, so that special access rights can be applied for each line in the list. The current user must have access to the current object via at least one of these access types (based on the ACL evaluation of the Fabasoft Folio Kernel) in order to change the value of the line.
Usage: accsetline = expression {...}

weight

The value of the weight property is an expression which has to return one of the enumeration values defined in COOATTREDIT@1.1:HighlightType. The weight of a form page element is used to draw the user’s attention to this particular element.
Usage: weight = expression {...}

controlstyle

The value of the controlstyle property is an expression which returns either a list of control styles (enumeration type COOATTREDIT@1.1:ControlStyle) or a control style definition (object of object class COOATTREDIT@1.1:ControlStyleDefinition). If the expression returns null or throws an error, the default behavior applies.

A control style definition references specific control styles.

The following control styles are supported:

  • CTRLSTYLE_DISPLAYREFERENCE: display reference of languages, software components, software products and component objects in an object pointer property
  • CTRLSTYLE_DISABLECONTEXTMENU: disable context menu on objects in object pointer property
  • CTRLSTYLE_DISABLECREATE: disable create button for single object pointer property
  • CTRLSTYLE_DISABLESEARCH: disable search button for single object pointer property
  • CTRLSTYLE_DISABLEQUICKSEARCH: disable quick search field for object list property
  • CTRLSTYLE_DISABLEINPLACECHANGE: disable F2 inplace editing in an aggregate property
  • CTRLSTYLE_DISABLEDRAGTARGET
  • CTRLSTYLE_AUTONUMERATE
  • CTRLSTYLE_IGNOREDBYTREE

Usage: controlstyle = expression {...}

controloptions

The value of the controlstyle property is an expression, which returns additional options for a control as a dictionary. Please refer to the white paper “Fabasoft Folio Controls” for a description of possible options for specific controls. If the expression returns null or throws an error, the default behavior applies (i.e control arguments specified as parameters to the control or the control arguments specified at the attribute using COOATTREDIT@1.1:attrrepresentation).
Usage: controloptions = expression {...}

Table 14: Behaviors allowed within a layout block

When one of the abov behavior expressions is evaluated, the local scope this contains the vApp state dictionary. The global scope ::this contains a dictionary holding the keys listed in the next table.

Key

Description

root

The root key stores the current object.

attribute

The attribute key stores the object representing the property or field.

value

The value key stores the current value of the property or field.

isedit

The isedit key is true if the property or field is evaluated on an editable form page.

isvalue

The isvalue key is true if the property or field is evaluated on a standard form page, not a form page for a search.

isdashboard

The isdashboard key is true if the property or field is evaluated in a dashboard view.

Table 15: Global scope for behavoir expressions

In a row block, the reference of a property or field can be preceded by the reference of a control. The control determines the behavior as well as the look and feel of this property or field.

Table 16 provides a list of available controls. For detailed information on controls and the associated parameters, please refer to the white paper “Fabasoft Folio Controls”.

Control

Description

COOATTREDIT@1.1:CTRLAcl

This control is used to display and edit access control lists.

COOATTREDIT@1.1:CTRLAttrpath

This control is used to display a property path.

COOATTREDIT@1.1:CTRLBase

This control is used for simple data types like integer, float, string and object pointers.

COOATTREDIT@1.1:CTRLCont

This control is used to upload content.

COOATTREDIT@1.1:CTRLCurr

This control is used to display and edit currency properties.

COOATTREDIT@1.1:CTRLDateTime

This control is used to display date and datetime properties.

COOATTREDIT@1.1:CTRLMLName

This control is used to display and edit multilingual strings (using the compound type COOSYSTEM@1.1:LanguageStringList).

COOATTREDIT@1.1:CTRLObjNav

This control is used to display and edit an object pointer describing a hierarchical relationship.

COOATTREDIT@1.1:CTRLPassword

This control is used for entering passwords.

COOATTREDIT@1.1:CTRLPhone

This control is used to display and edit telephone numbers.

COOATTREDIT@1.1:CTRLPick

This control is used to display a list of enumeration entries or a list of objects as a group of radio buttons or checkboxes.

FSCVENV@1.1001:CTRLRating

This control is used to display a star rating.

COOATTREDIT@1.1:CTRLResearch

This control is used to display the input field for a research term.

COOATTREDIT@1.1:CTRLStrList

This control is used to display a list of strings in a combo box.

COOATTREDIT@1.1:CTRLText

This control is used to enable multiline text input for string lists.

COOATTREDIT@1.1:CTRLTimespan

This control is used to display and edit a time span in days, hours, minutes and seconds.

COOATTREDIT@1.1:CTRLTimestamp

This control is used to display and edit a time stamp in hours, minutes and seconds.

COOATTREDIT@1.1:CTRLTree

This control is used to display the tree.

COOATTREDIT@1.1:CTRLViewCont

This control is used to display content.

COOATTREDIT@1.1:CTRLXMLAttr

This control is used to display attributes of an XML document.

FSCDOX@1.1001:CTRLHtmlEditor

This control is used to attach an HTML editor to a string, string list, content or content aggregate.

FSCSIMLIST@1.1001:CTRLSimList

This control is used to display a simple object list, comparable to the Microsoft Outlook mail-add field.

FSCVENV@1.1001:CTRLDictionary

This control is used to display dictionaries.

FSCVENV@1.1001:CTRLInstantiate

This control is used to display the creatable objects and templates in the dialog box displayed when creating a new object.

FSCVENV@1.1001:CTRLPict

This control is used to display and upload pictures.

FSCVENV@1.1001:CTRLProgress

This control is used to display a progress bar.

FSCVENV@1.1001:CTRLRawText

This control is used to transfer the contents of script component objects to the web browser and can be used for injecting HTML code into the current page.

FSCVENV@1.1001:CTRLURLNav

This control is used to display and edit a URL and can be attached to a string property.

Table 16: Predefined controls in Fabasoft Folio

The following example demonstrates how to use the form page layout elements discussed in this chapter.

Example

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;

  form OrderForm {
    audience = enduser;
    inherit = true;

    formpage OrderGeneralPage {
      audience = enduser;
      symbol = SymbolOrder;
      dataset {
        orderstate;
        orderinvoice;
        orderdate;
        orderapproved;
        field orderagent {
          get = expression {
            coouser;
          }
        }
        field ordertotal;
      }
      layout {
        // APPDUCXSAMPLE@200.200:orderstate and APPDUCXSAMPLE@200.200:ordertotal
        // should be displayed side-by-side

        row {
         APPDUCXSAMPLE@200.200:orderdate {
            colspan = 4;
            labelposition = left;
            labeltext = StrOrderdateLabel;
          }

         APPDUCXSAMPLE@200.200:ordertotal {
            colspan = 4;
            labelposition = left;
          }
        }
        // APPDUCXSAMPLE@200.200:orderdate spans two rows, uses as many
        // columns as orderstate and ordertotal together and no label

        // is displayed

        row {
         APPDUCXSAMPLE@200.200:orderdate {
            rowspan = 2;
            colspan = 8;
            labelvisible = false;
          }
        }
        row {
        }
        // APPDUCXSAMPLE@200.200:orderapproved uses the control
        // COOATTREDIT@1.1:CTRLBase in order to be displayed as a group

        // of radio buttons

        row {
          COOATTREDIT@1.1:CTRLBase("UseRadio=true") orderapproved {
            colspan = 8;
            labelposition = left;
          }
        }
        row {
          orderagent {
            colspan = 8;
            labelposition = left;
          }
        }
      }
    }
    formpage OrderPositionsPage {
      audience = enduser;
      symbol = SymbolOrderPositions;
      dataset {
        user;
        orderpositions;
      }
    }
  }
}


The following example demonstrates how to define a form page and apply the COOATTREDIT@1.1:CTRLObjNav control to the FSCFOLIO@1.1001:orgindustry property of an organization to allow the user to select an industry from a hierarchical list of industries.

Note: In Fabasoft Folio, industries are represented as instances of object class FSCFOLIO@1.1001:FunctionTerm. The root object for the available industries is FSCFOLIO@1.1001:TermIndustry, where the top-level industries must be referenced in the FSCTERM@1.1001:narrowercompterms property. Subordinated industries must be referenced in the FSCTERM@1.1001:narrowercompterms property of the FSCFOLIO@1.1001:FunctionTerm object describing an industry.

The control parameters Root and Lists of the COOATTREDIT@1.1:CTRLObjNav control must be initialized with the addresses of the corresponding expression objects responsible for determining the root object of the hierarchy and the lists describing the hierarchy. To find out the address of the expression objects, refer to the “Address Assignment” list in the Eclipse Project Explorer.

For detailed information on the control parameters of the COOATTREDIT@1.1:CTRLObjNav control refer to the white paper “Fabasoft Folio Controls”.

Example

app.ducx Object Model Language

objmodel APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;
  import FSCFOLIO@1.1001;
  import FSCTERM@1.1001;

  // Assuming that APPDUCXSAMPLE@200.200:ExprTermRoot is assigned the address
  // COO.
200.200.1.100 in the address assignment list
  instance Expression ExprTermRoot {
    exprtext = expression {
      #TermIndustry;
    }
  }

  // Assuming that APPDUCXSAMPLE@200.200:ExprTermList is assigned the address
  // COO.
200.200.1.101 in the address assignment list
  instance Expression ExprTermList {
    exprtext = expression {
      dictionary @list = {
        cls = #TermComponentObject,
        attrs = #narrowercompterms
      };

      return dictionary @treelist = {
        destattr = #orgindustry,
        lists = @list
      };
    }
  }
}

app.ducx User Interface Language

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;
  import FSCFOLIO@1.1001;

  form FormOrgIndustry {
    audience = enduser;
    inherit = false;

    formpage PageOrgIndustry {
      audience = enduser;
      dataset {
        orgindustry;
      }
      layout {
        row {
          // Assuming that APPDUCXSAMPLE@200.200:ExprTermRoot is assigned the address
          // COO.
200.200.1.100 and APPDUCXSAMPLE@200.200:ExprTermList
          //
is assigned the address COO.200.200.1.101 in the address assignment list
          COOATTREDIT@1.1:CTRLObjNav("Root=COO.200.200.1.100 Lists=COO.200.200.1.101
            IgnoreCompoundFlag=true") FSCFOLIO@1.1001:orgindustry {
            colspan = 4;
            labelposition = left;
          }
        }
      }
    }
  }
}

Special layout elements on a form pagePermanent link for this heading

Besides properties there are other elements available as row elements:

  • empty is just a place holder for one or more empty cells.
  • hrule is a shortcut for a property displayed with CtrlStatic with the mode parameter set to “hr”, resulting in a horizontal line over all specified cells
  • static is a shortcut for a property displayed with CtrlStatic with the mode parameter set to “text”, resulting in the display of a static string over all specified cells

Example

app.ducx User Interface Language

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;
  import FSCFOLIO@1.1001;

  form FormOrgIndustry {
    audience = enduser;
    inherit = false;

    formpage PageOrgIndustry {
      audience = enduser;
      dataset {
        orgindustry;
      }
      layout {
        row {

          empty;

          hrule {

            colspan = 2;
          }

          static StrTxt;

        }

        row {
          // Assuming that APPDUCXSAMPLE@200.200:ExprTermRoot is assigned the address
          // COO.200.200.1.100 and APPDUCXSAMPLE@200.200:ExprTermList

          //
is assigned the address COO.200.200.1.101 in the address assignment list
          COOATTREDIT@1.1:CTRLObjNav("Root=COO.200.200.1.100 Lists=COO.200.200.1.101
            IgnoreCompoundFlag=true") FSCFOLIO@1.1001:orgindustry {
            colspan = 4;
            labelposition = left;
          }
        }
      }
    }
  }
}

Using the form designerPermanent link for this heading

The layout can be defined using the provided graphical form designer. You can switch from the Code pane to the Form Pages pane. The Palette contains all properties that are defined in the dataset.

The form designer provides following features:

  • The properties can be adjusted within the form page by drag-and-drop.
  • Labels and fields can be spanned horizontally or vertically over multiple columns or lines.
  • Pressing the Alt key allows to select the label and to adjust it within the field. A label can be positioned left, right, at the top or at the bottom of a field.
  • A horizontal rule can be inserted by selecting it from the “Static Controls”.
  • To filter the available component objects use the Filter field. Clicking “x” deletes the filter.
  • Use the context menu to define a specific control for a property.

Note: Starting with version 17 the form designer generates a quite simple default layout to support the responsive design.

Figure 15: Example of a form page

Defining a desk formPermanent link for this heading

Syntax

deskform reference {
  audience = audience;
  dataset {
    property;
    ...
  }
}


Desk forms are special types of forms, used for displaying object list properties of compound objects in the so called explore view.

For instance, a desk form is used for displaying the object list properties shown in the list view on the right-hand side when you select an instance of object class Person in the tree view of the desk.

The deskform keyword is used to define a desk form. It must be followed by a reference and curly braces.

Defining the audience for a desk formPermanent link for this heading

Inside a deskform block, the audience keyword can be used for defining the audience for a desk form. For further information concerning the audience keyword please refer to chapter “Defining the audience for a form page”.

Adding properties to a desk formPermanent link for this heading

All object list properties displayed on a desk form must be listed in a dataset block nested within the deskform block. Semicolons must be used to separate multiple entries.

The order of the properties in the dataset block also determines their order on the desk form.

Example

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;

  deskform CustomerDeskForm {
    audience = enduser;

    dataset {
      customerorders;
    }
  }
}