2017 June Release

Using customizationsPermanent link for this heading

Customizations can be used in expression blocks.


// The result is assigned to @tmp
impl = expression {
  cooobj.GetObjHint(cooobj.objclass, @suffix, &@tmp);

// build is declared as retval, thus the result can be assigned directly
= expression {
  string @tmp = cooobj.GetObjHint(cooobj.objclass, @suffix);

// The result is a list of matching customizations assigned to @result
impl = expression {
  GetAllowedAttrDef[] @result = cooobj. GetAllowedAttrDef(cooobj.objclass, null)[...];


  • The key parameters are used to evaluate which customization should be used. If a parameter is an object class, the inheritance is taken into account (best match).
  • If a parameter is defined as retval direct assignments are possible.
  • If an output parameter is omitted, its value is not calculated due to performance reasons.
  • If you need to access all matching configuration entries you can access this list by using “[…]” to qualify the result of the customization point.

Concise examplePermanent link for this heading

This concise example subsumes the concepts described in the above chapters. The goal is to customize the hint that is displayed when moving the mouse over a content object.


app.ducx Customization Language

  key ObjectClass objclass,
  string suffix,
  retval string hint

customize GetObjHint<ContentObject> {
  hint = expression {
      cooobj.GetHTMLLine(#objname, cooobj.objname) +
      cooobj.GetHTMLLine(#objowner, cooobj.objowner.objname);

app.ducx Use Case Language

// Override COOATTREDIT@1.1:GetObjectHint
GetObjectHint {
  variant ContentObject {
    impl = expression {
      // Call customization point
      cooobj.GetObjHint(cooobj.objclass, null, &text);

GetHTMLLine(AttributeDefinition attrdef, any value, retval string line) {
  variant Object {
    impl = expression {
      line  = "<b>";
      line += attrdef.objname;
      line += ":</b> ";
      line += STRING(value);
      line += "</br>";
      return line;