2017 June Release

GeneralPermanent link for this heading

PreGUIPermanent link for this heading

The customization point PreGUI allows initializing values before the constructor form is displayed.

Syntax

customize PreGUI<objectclass> {
  steps = expression {...}
}


Description:

  • objectclass
    The customization applies to objects of the defined object class.
  • steps
    Defines a Fabasoft app.ducx Expression that is executed.

Example

app.ducx Object Model Language

instance ComponentState StateCaptured {
}

instance ComponentState StateApproved {
}

instance ComponentState StateRejected {
}

instance ComponentDocumentCategory PreGUICategory {
  dcshortform = "PreGui";
  dcstate = { StateCaptured,
              StateApproved,
              StateRejected }
}

app.ducx Customization Language

customize PreGUI<Incoming> {
  steps = expression {
    this.COOSYSTEM@1.1:ObjectLock(true, true);
    this.FSCFOLIO@1.1001:bostate = #StateCaptured;
    this.FSCFOLIO@1.1001:InitPreGUI();
    this.FSCFOLIO@1.1001:InitWithCategory(#PreGUICategory);
  }
}


Note:
In the Fabasoft Folio Domain the customization gets defined in the template configuration.

InitWithStatePermanent link for this heading

The customization point InitWithState is a specialization of the customization point PreGUI.

Syntax

customize InitWithState<objectclass, state, category> {}


Description:

  • objectclass
    The customization applies to objects of the defined object class.
  • state
    Defines a state that is assigned to FSCFOLIO@1.1001:bostate.
  • category
    Defines a category that is used for FSCFOLIO@1.1001:InitWithCategory(#category).

Example

customize InitWithState<Incoming, StateCaptured, PreGUICategory> {}


Note:
In the Fabasoft Folio Domain the customization gets defined in the template configuration.

PostGUIPermanent link for this heading

The customization point PostGUI allows executing a Fabasoft app.ducx Expression after the user clicked “Next” or “Apply” of a constructor form.

Syntax

customize PostGUI<objectclass> {
  steps = expression {...}
}


Description:

  • objectclass
    The customization applies to objects of the defined object class.
  • steps
    Defines a Fabasoft app.ducx Expression that is executed.

Example

customize PostGUI<NoteObject> {
  steps = expression {
    this.COOSYSTEM@1.1:ObjectLock(true, true);
    this.COOSYSTEM@1.1:objsubject = "MySubject";
  }
}


Note:
In the Fabasoft Folio Domain the customization gets defined in the template configuration.

IncreaseOrdinalPermanent link for this heading

The customization point IncreaseOrdinal allows increasing a key numerator at PostGUI.

Syntax

customize IncreaseOrdinal<objectclass, property> {}


Description:

  • objectclass
    The customization applies to objects of the defined object class.
  • property
    Defines the numerator property that should be used.

Example

app.ducx Object Model Language

class ObjOrdinal : Document {
  KeyNumerator ordinal {
    /*
     * Specifies amount of preallocation

     */

    allocamount = 101;
    KeyEntryList<NUMERATOR@1.1001:objclass, keyattrlist> = {
      { ObjOrdinal, { documentyear } }
    }
  }
}

app.ducx Customization Language

customize IncreaseOrdinal<ObjOrdinal, ordinal> {}


Note:
The parameter alloc has a default value of true. To create a numerator without preallocation you must explicitly specifiy alloc = false.

Note: In the Fabasoft Folio Domain the customization gets defined in the template configuration. This means that overrides objects from FSCVTC@1.1001 for all applications responsible for creation of must be provided:

Example

// Application executed when an object is created via menu or
// button in an object list

override FSCVENV@1.1001:InitializeCreatedObject {
  variant objectclass {
    impl = FSCVTC@1.1001:InitializeCreatedObjectApp;
  }
}

// Application executed when an object is created inside of
// an object pointer property
override FSCVENV@1.1001:InitializeCreatedObjectDoDefault {
  variant objectclass {
    impl = FSCVTC@1.1001:InitializeCreatedObjectApp;
  }
}

// Application executed when an object is created from
// a template
override FSCVENV@1.1001:InitializeTemplateCreatedObject {
  variant objectclass {
    impl = FSCVTC@1.1001:InitializeCreatedObjectApp;
  }
}

ACLConfigurationPermanent link for this heading

The customization point ACLConfiguration allows defining tenant specific ACLs that should be assigned to objects. The ACL is evaluated using following steps. The first step that returns an ACL defines the used ACL. Step and can be configured by the customization point.

  1. Use a tenant specific ACL for an object, if a customization is defined for the corresponding object class (object class hierarchy gets considered).
    Trigger: COOSYSTEM@1.1001:classdefaultacl
  2. Use an ACL that is defined for the object class (ACLs created in a corresponding tenant are preferred).
  3. Use an ACL that is defined in the group of the user (Default ACL for New Objects, ACL Objects).
  4. Use a tenant specific default ACL for an object, if a customization is defined for the corresponding object class (object class hierarchy gets considered).
    Trigger: COOSYSTEM@1.1001:objaclobj
  5. Hard-coded: If the steps before do not return an ACL, finally one of these ACLs is used based on the object class: “Default ACL”, “ACL for Administration Objects” or “ACL for Developer Objects”.

Syntax

customize ACLConfiguration<cfgobjclass, trigger> {
  acl = ...
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • trigger
    If step should be customized, COOSYSTEM@1.1001:classdefaultacl has to be used. If step should be customized, COOSYSTEM@1.1001:objaclobj has to be used.
  • acl
    Defines the ACL that should be assigned.

Example

customize ACLConfiguration<Folder, classdefaultacl> {
  acl = COOSYSTEM@1.1:DefaultGlobalACL;
}


Note:
In the Fabasoft Folio Domain the customization gets defined in the administration configuration.

ImageTypeConfigurationPermanent link for this heading

The customization point ImageTypeConfiguration allows defining parameters for thumbnails and preview images.

Syntax

customize ImageTypeConfiguration<imgclass, imgtype> {
  imgwidth = ...
  imgheight = ...
  imgformat = ...
  imgpages = ...
  imgdstattrdef = ...
  imgdefaultthumbexpr = expression {...}
}


Description:

  • imgclass
    The customization applies to objects of the defined object class.
  • imgtype
    Defines whether the customization applies to thumbnails (“tn”) or preview images (“pv”).
  • imgwidth
    Defines the maximum width in pixel of the displayed image (e.g. 512).
  • imgheight
    Defines the maximum height in pixel of the displayed image (e.g. 256).
  • imgformat
    Defines the format of the displayed image (default: “jpg”; possible values: “gif”, “png”).
  • imgpages
    Defines how many pages of a document should be available as image.
  • imgdstattrdef
    Defines the property where the image should be cached (e.g. COODESK@1.1:objthumbnailimage or COODESK@1.1:objpreviews).
  • imgdefaultthumbexpr
    Defines an expression that is used to evaluate a fallback image, if the actual image is not available (e.g. cooobj.FSCVENV@1.1001:GetObjectImageFallback(imgtype)).

Example

customize ImageTypeConfiguration<Object, "tn"> {
  imgwidth = 512;
  imgheight = 256;
  imgdstattrdef = objthumbnailimage;
  imgdefaultthumbexpr = expression {
    cooobj.GetObjectImageFallback(imgtype)
  }
}


Note: In the Fabasoft Folio Domain the customization gets defined in the conversion configuration.

ContentConfigurationPermanent link for this heading

The customization point ContentConfiguration defines in which property the desired content can be found (e.g. content for the thumbnail or preview image generation).

Syntax

customize ContentConfiguration<contclass> {
  contsrcexpr = expression {...}
}


Description:

  • contclass
    The customization applies to objects of the defined object class.
  • contsrcexpr
    Defines the expression that is used to evaluate the desired content (e.g. for the thumbnail and preview image generation or for conversion tasks).

Example

customize ContentConfiguration<ContentObject> {
  contsrcexpr = expression { cooobj.classinitcont }
}


Note:
In the Fabasoft Folio Domain the customization gets defined in the conversion configuration.

CPSymbolsPermanent link for this heading

The customization point CPSymbols is used to define the symbol of objects from a certain object class.

Syntax

customize CPSymbols<cfgobjclass> {
  cfgicexpression = expression {...}
  objmicon = ...;
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • cfgicexpression
    If this expression returns “true”, the symbol objmicon is used. Alternatively the expression itself can return a symbol to be used.
  • objmicon
    Defines the symbol that is assigned to COODESK@1.1:Symbol.

Example

customize CPSymbols<User> {
  cfgicexpression = expression {
    return cooobj.useractive;
  }
  objmicon = SymbolUserAccepted;
}


Note:
In the Fabasoft Folio Domain the customization gets defined in the administration configuration.

Note: This customization point gets evaluated in the FSCCONFIG@1.1001:MethodGenericIconGet method, which is used to implement the COODESK@1.1001:AttrObjMiniIconGet action for the appropriate object class cfgobjclass.

CPValidationExpressionPermanent link for this heading

The customization point CPValidationExpression is used for the validation of an entered value. The customization point gets evaluated in the FSCCONFIG@1.1001:MethodValidateSet method, which can be called in the FSCCONFIG@1.1001:AttrValidateSet action.

The local scope contains the current object and the global scope contains a dictionary with the old value and the new value.

Syntax

customize CPValidationExpression<cfgobjclass, trigger, context> {
  cfgexpression = expression {...}
  errorobject = ...;
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • trigger
    The key for the evaluation of the output parameter.
  • context
    The optional key for the evaluation of the output parameter.
  • cfgexpression
    If this expression returns “true”, the error (errorobject) is displayed. Alternatively the expression itself can display an error.
  • errorobject
    The error message that is displayed in case of an error.

Example

customize CPValidationExpression<User, DialogUserPasswordForgot, objname> {
  cfgexpression = expression {
    return true;
  }
  errorobject = ErrActivateUserFound;
}


Note: In the Fabasoft Folio Domain the customization gets defined in the administration configuration.

CPContextExpressionsPermanent link for this heading

The customization point CPContextExpressions returns an expression, depending on the input parameters trigger and context.

The customization point gets evaluated in the FSCCONFIG@1.1001:EvaluateExpression action. This action has to be called for the appropriate object class (cfgobjclass) with the input parameters trigger and optionally context.

Syntax

customize CPContextExpressions<cfgobjclass, trigger, context> {
  cfgexpression = expression {...}
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • trigger
    The key for the evaluation of the output parameter.
  • context
    The optional key for the evaluation of the output parameter.
  • cfgexpression
    The expression to be returned.

Example

customize CPContextExpressions<User, DialogUserPasswordForgot, objname> {
  cfgexpression = expression {
    return true;
  }
}


Note:
In the Fabasoft Folio Domain the customization gets defined in the administration configuration.

CPDocStateValidateConfigPermanent link for this heading

The customization point CPDocStateValidateConfig is used for validating state changes of documents.

To evaluate the customization point, the FSCFOLIO@1.1001:ValidateDocStateChange action has to be called for an object of the appropriate object class (dsvcobjclass). By means of the state change (dsvcoldstate, dsvcnewstate) this action determines the respective expression (dsvcvalidateexpr) and evaluates it. Optionally the defined signature type (dsvcsigntype) can be executed.

Syntax

customize CPDocStateValidateConfig<dsvobjclass, dsvcoldstate, dsvcnewstate> {
  dsvcvalidateexpr = expression {...}
  dsvcsigntype = ...;
}


Description:

  • dsvcobjclass
    The customization applies to objects of the defined object class.
  • dsvcoldstate
    The state of the document, before the state change.
  • dsvcnewstate
    The state of the document, after the state change.
  • dsvcvalidateexpr
    An optional Fabasoft app.ducx Expression that has to be apply.
  • dsvcsigntype
    Defines the Signature Type (FSCFOLIO@1.1001:dsvcsigntype) that has to be used after the state changed.

Example

customize CPDocStateValidateConfig<Case, DS_EDIT, DS_CLOSED> {
  dsvcvalidateexpr = expression {
    return true;
  }
  dsvcsigntype = SIGN_CLOSE;
}


Note:
In the Fabasoft Folio Domain this customization gets defined in the Folio configuration.

CPRestrictClassesPermanent link for this heading

The customization point CPRestrictClasses is used to restrict createable and searchable classes. In an expression all restricted classes are returned.

Syntax

customize CPRestrictClasses<cfgobjclass, cfgattrdef, cfgcamode> {
  cfgcpexpression = expression {...}
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • cfgattrdef
    The property, to which the customization applies.
  • cfgcamode
    The validation mode for allowed classes.
  • cfgcpexpression
    The expression to be returned. This expression contains restricted classes.

Example

customize CPRestrictClasses<Object, objchildren, null> {
cfgcpexpression = expression {
    return [#AppProject];
  }
}


Note:
For the expression, the values attrdef, mode, restriction, allowedclasses, notallowedclasses are available in the global scope.

FilterDispViewListActionPermanent link for this heading

The customization point FilterDispViewListAction determines the filter action for the display view settings for the given object class.

Syntax

customize FilterDispViewListAction<objclass> {
  filteraction = expression {...}
}


Description:

  • objclass
    The customization applies to objects of the defined object class.
  • filteraction
    This action is used to verify or override the resulting display view list. The action uses the prototype COODESK@1.1:FilterDispViewListPrototype.

Example

app.ducx Customization Language

customize FilterDispViewListAction<Folder> {
  filteraction = expression {
    return #MYCUSTOMIZE@1.1065:FolderDispViewListFolder
  }
}

app.ducx Use Case Language

usecase FolderDispViewListFolder(parameters as FilterDispViewListPrototype) {
  variant Folder {
    impl = expression {
      if (writelocation >= 0) {
        // write columns: prevent saving settings
        throw #COOSTERR_CANCEL;
      }
      else {
        // read columns: fixed set of display columns
        DisplayColumnList[] mycolumns;
        mycolumns += coort.CreateAggregate(#DisplayColumnList);
        mycolumns += coort.CreateAggregate(#DisplayColumnList);
        mycolumns += coort.CreateAggregate(#DisplayColumnList);
        mycolumns[0].dispattribute = #objname;
        mycolumns[1].dispattribute = #objcreatedby;
        mycolumns[2].dispattribute = #objaclobj;
        displaylist.dispcolumns = mycolumns;
      }
    }
  }
}

AggregationOverridePermanent link for this heading

The customization point AggregationOverride replaces an aggregation action for the given object class and is available in the software component FSCVENVUI@1.1001.

Syntax

customize AggregationOverride<objclass, attrdef, aggract> {
  aggroverride = expression {...}
}


Description:

  • objclass
    The customization applies to objects of the defined object class.
  • attrdef
    The property, to which the customization applies.
  • aggract
    The aggregation action, which is to be overridden.
  • aggroverride
    This action is used to override the aggregation action. The action uses the prototype COODESK@1.1:AggregationPrototype.

Example

app.ducx Customization Language

customize AggregationOverride<Object, objcontsize, GetSum> {
  aggroverride = expression {
    //calculates the sum of the values and adds a “KB” suffix
    return #FSCVENVUI@1.1001:GetSumContSize
  }
}

GetLogoContainerPermanent link for this heading

The customization point GetLogoContainer defines which logo is displayed based on the object class of the selected object.

Syntax

customize GetLogoContainer<objclass> {
  cont = expression {...}
}


Description:

  • objclass
    The customization applies to objects of the defined object class.
  • cont
    Defines a Fabasoft app.ducx Expression to calculate the object that contains the logo (COODESK@1.1:objlogoimage) that should be displayed.

Example

app.ducx Customization Language

customize GetLogoContainer<Object> {
  cont = expression {
    if (cooobj.HasClass(#TeamRoom)) {
      cooobj;
    }
    else {
      cooobj.objteamroom != null ? cooobj.objteamroom : null;
    }
  }
}

CreatePortalConfigurationPermanent link for this heading

The customization point CreatePortalConfiguration defines the template for creating a portal entry if an object is dragged to the portal list.

Syntax

customize CreatePortalConfiguration<cfgobjclass> {
  portalentry = ….;
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • portalentry
    Defines the template to be used to create the portal entry.

Example

app.ducx Customization Language

customize CreatePortalConfiguration<Object> {
  portalentry = PaneDesk;
}

CPAllowedAttrDefPermanent link for this heading

The customization point CPAllowedAttrDef allows redefining object pointer properties in the current domain for checking and filtering allowed object classes.

Syntax

customize CPAllowedAttrDef<cfgobjclass,cfgattrdef,cfgcamode> {
  cfgrefattrdef = ….;
  cfgexpression = ….;
}


Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • cfgattrdef
    References the object pointer property definition to be redefined.
  • cfgcamode
    Defines the mode for checking or filtering allowed objectclasses.
  • cfgrefattrdef
    Defines the new object pointer property for checking or filtering allowed object classes.
  • cfgexpression
    Conditional expression to be executed to check if the replace has to be done.

Example

app.ducx Customization Language

customize CPAllowedAttrDef<Story,objchildren,null> {
  cfgrefattrdef = scrumdocuments;
}

ListOptionPermanent link for this heading

The customization point ListOption allows overriding the SimList control parameters.

Syntax

customize ListOption<objclass,attrdef> {
  createapplication = expression {...}
  createsymbol = expression {...}
  createtext = expression {...}
  searchtext = expression {...}
  typetext = expression {...}
  showicon = expression {...}
  showunderline = expression {...}
  wildcardsearch = expression {...}
  separator = expression {...}
  listseparator = expression {...}
}

Description:

  • objclass
    The customization applies to objects of the defined object class.
  • attrdef
    References the object pointer property definition to be redefined.
  • createapplication
    Defines an expression to get the application for creating objects in the control.
  • createsymbol
    Defines an expression to get the symbol for creating objects in the control.
  • createtext
    Defines an expression to get the description for creating objects in the control.
  • searchtext
    Defines an expression to get the search text for creating objects in the control.
  • typetext
    Defines an expression to get the data entry instruction of the control.
  • showicon
    Defines an expression to set a symbol for an entry.
  • showunderline
    Defines an expression to set an unterline representation for an entry.
  • wildcardsearch
    Defines an expression to allow wild card search in the control.
  • separator
    Defines an expression to get the string that should be used between the objects.
  • listseparator
    Defines an expression to get the string that should be used between the objects in cells.

Example

app.ducx Customization Language

customize ListOption<TransmissionLog,tlinvitedusers> {
  createapplication = expression {
    return #CreateObjectApp;
  }
  createsymbol = expression {
    return (cootx.isCreated(cooobj) ? #SymbolAdd : #MiniIconObjectCreate );
  }
  createtext = expression {
    return (cootx.isCreated(cooobj) ? #StrAddFavorite : #StrCreate);
  }
  typetext = expression {
    return #StrTypeText;
  }
  showicon = expression {
    return cootx.isCreated(cooobj);
  }

  showunderline = expression {
    return cooobj.tlinvitationcategory == #MC_TeamRoom;
  }

}

For detailed information on the control parameters of the FSCSIMLIST@1.1001:ListOption control refer to [Faba10c]

CPStateDisplayPermanent link for this heading

The customization point CPStateDisplay allows defining visualizations for objects depending on the object state.

Syntax

customize CPStateDisplay<cfgobjclass> {
  cfgstatedisplayexpression = expression {...}
}

Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • cfgstatedisplayexpression
    Defines an expression to get the FSCVAPP@1.1001:ObjectStateDisplay.

Example

app.ducx Customization Language

customize CPStateDisplay<ContentObject> {
  cfgstatedisplayexpression = expression {
    Content $cont;
    object $obj = this.object;
    $obj.DirectAttributeGet(#content, &$cont);

    if (null != $cont) {
      EncryptionKind $contencryption = $cont.contencryption;

      if (null != $contencryption) {
        string $encryptstr=#EncryptionKind.typeenumvalues[typeenumval ==
          :>$contencryption].GetAttributeString(cootx, #typeenumtext);
       ObjectStateDisplay $encdisplaystate = coort.CreateAggregate(#ObjectStateDisplay);

       if ($encdisplaystate) {
         $encdisplaystate.objectstatedisplaysymbol = #UISymbolEncrypt;
         $encdisplaystate.objectstatedisplaydescription=encryptstr;
        }

        return $encdisplaystate;
     }
   }
}
}

CPGetArchivingConfigPermanent link for this heading

The customization point CPGetArchivingConfig allows simple archiving of a property. The archives will be added to a property and the objects will be moved into the archives. To start the archiving ObjectListSetArchiveWrapper has to be called. It is usually called by the set action of the property that should be archived (attrdef).

Syntax

customize CPGetArchivingConfig <cfgobjclass, attrdef > {
  cfgobjstomove = expression {...}
  cfgtargetobj = expression {...}
  cfgtargetobjattrdef = expression {...}
  cfgarchiveclass = expression {...}
  cgfarchivespan = expression {...}
  cfgarchiveattrdef = expression {...}
}

Description:

  • cfgobjclass
    The customization applies to objects of the defined object class.
  • attrdef
    Defines the property that should be archived.
  • cfgobjstomove
    Defines the objects that should be moved into the archives.
  • cfgtargetobj
    Defines the object where the cfgobjstomove should be archived
  • cfgtargetobjattrdef
    Defines the property of the cfgtargetobj that should store the archives
  • cfgarchiveclass
    Defines the object class of the archive. Has to be a derived form DefaultArchive
  • cgfarchivespan
    Defines if new archives should be created yearly, quarterly or monthly
  • cfgarchiveattrdef
    Defines the date property for evaluating the archive for an object (e. g. objcreated, objmodifiedat). Has to be a datetime

Example

app.ducx Customization Language

customize CPGetArchivingConfig<ProjectReport, prreports> {

      cfgobjstomove = expression {

       datetime limit = coonow;

        limit.month -= 1;

        return cfgobjstoarchive[objcreated <= limit];

      }

      

      cfgtargetobj = expression { cooobj };

      

      cfgtargetobjattrdef = expression { #prreports };

      

      cfgarchiveclass = expression { #ScrumReportArchive };

      

      cgfarchivespan = expression { ArchiveSpan(AS_QUARTER) };

      

      cfgarchiveattrdef = expression { # objcreated };

    }