2024 December Release

PrerequisitesPermanent link for this heading

It is assumed that you have some level of familiarity with the topics outlined in chapter “Customization Options”. More in-depth information about these topics can be found in the user help:

https://help.cloud.fabasoft.com/index.php?topic=doc/User-Help-Fabasoft-Cloud-eng/index.htm: new window

In some cases, customizations require the use of Fabasoft app.ducx expressions. General information about Fabasoft app.ducx expressions can be found in the following document. Note that the document is intended for solution development, so not all concepts described are applicable for the purpose of customization.

https://help.cloud.fabasoft.com/index.php?topic=doc/Fabasoft-appducx-Expressions/index.htm: new window

The following hints regarding Fabasoft app.ducx expressions may be helpful:

  • Predefined values that can be accessed during the evaluation of an expression are provided in the local scope (this) or global scope (::this). Consult the reference documentation to find out which values are available in these scopes. The following document provides a link to the corresponding reference documentation for each expression property:.
    https://help.cloud.fabasoft.com/index.php?topic=doc/Reference-Documentation/customprops-overview.htm: new window
  • In most cases, a scope is either an object or a dictionary (key value pairs).
  • In most cases, the keyword this can be omitted. If this is an object, this.objname is the same as objname.
  • The software component COOSYSTEM@1.1 can be omitted. COOSYSTEM@1.1:objname is the same as objname.
  • If you want to use the short reference for other software components than COOSYSTEM@1.1 as well, you can use the import keyword (e.g. import FSCUSERFORMS@1.1001;).
  • If you need to refer to a component object, you must prefix its reference with # (e.g. #objname).
  • To declare your own variables for necessary computations, the temporary scope (@) is available (e.g. @availability = 2).
  • If you define a compound type you can use the programming name of the corresponding property to define the type of a variable (for example, in the Expression for Computing the Value field).
    myaggrlist[] @result = [];
    instead of
    FormAggregate_2_3505[] @result = [];
  • CheckGetSecured and CheckSetSecured can be used to check secured get or set access for a property of an object (e.g. useful for user properties).
    Example:
    User @customer = cooobj.[#customer];
    if (@customer.CheckGetSecured(#usersurname)) {
      @customer.usersurname;

    }

    else {
      
    "Unknown";
    }
  • Only properties and actions that are tagged as secure can be used in the expressions described in this document. An overview of secure properties and actions can be found here:
    https://help.cloud.fabasoft.com/index.php?topic=doc/Reference-Documentation/index.htm: new window
  • The code editor shows whether the language server that validates the entered expression is available (green dot).

When you use expressions for calculation or validation, it can sometimes be difficult to identify errors in the expressions. To simplify the analysis, you can write trace output to the web browser console. To do this, you must go to the context menu of the Teamroom in which the object is used, choose “Tools” > “Activate Trace Outputs” and allow trace output.

Call in expressions:

  • cooobj.Trace("string");
  • cooobj.Trace("string", value);

Output:

The output is a JSON data record.

  • c
    Context of the call (Teamroom).
  • d
    Current time.
  • s
    Section of the expression (if available).
  • t
    The text to be traced (first parameter of the trace call).
  • u
    Current user.
  • v
    The value to be traced (second parameter of the trace call).