Find out more about new features and improvements in the Fabasoft app.ducx 2016 September Release.
The restrictions for organization models as whole have been changed to restrictions for single elements in the organizational language.
Restriction | Restricted Element | Severity |
Defining organizational structure model is not allowed. | Acctype | Error |
Defining organizational structure model is not allowed. | orgunit | Error |
Defining organizational structure model is not allowed. | position | Error |
If there are multiple use cases with the same parameters, it is possible to define the parameters once as prototype with the keyword prototype. A prototype specifies the arguments of a use case, including the type, the name and the in/out settings.
Example |
prototype AttrSetDatePrototype ( AttributeDefinition attrdef, ref datetime value, datetime oldvalue ); |
There is also the possibility to specify expression parameters with the key words expression prototype.
Example |
expression prototype boolean LogPrototype ( string data, out string line ) |
To supply just an implementation without use case mapping, the keyword method can be used.
Example |
method MDUpdateOwner { impl = expression { cooobj.ObjectLock(true, true); cooobj.objowner = coouser; } ) method MDEmpty { impl = empty; } ) |
The execution engine supports injection of actions before or after any action. This is implemented with app.ducx by using the keyword prewrapper and postwrapper inside the parameter list of an action or usecase.
The given action is called before or after the wrapped one, providing a way to modify the result of the action call.
Example |
action ObjectCreateWrapper(postwrapper of ObjectCreate) { impl = expression { cooobj.objname = "Created at" + coonow; } ) |
The element displayview in ducx-ui transforms column information into objects of the object class COOSYSTEM@1.1:DefaultDisplayView.
Example |
objmodel APPDUCXSAMPLE@200.200 displayview UserView { freeze { objfirstname; } objcreatedat; groupby { objcreatedat day; } sortby { objsurname; objfirstname desc; } displaymodes { LISTVIEW_DETAILS } } } } |
An expression property now can have additional information regarding the evaluation context.
Example |
objmodel APPDUCXSAMPLE@200.200 class StatusLog : BasicObject { expression boolean logexpr(string data, out string line) { scope = PARSCOPE_GLOBALSCOPEWITHOBJECT; } |
This expression property describes an expression with the following behavior:
When displaying object lists in the web client, the default columns should be specified in the object class. This can now be accomplished by using the keyword columns.
Syntax |
extend class reference { column1; } …. column1; } sortby { column2 desc; … } displaymodes { modes } } |
Comments starting with /** are used to create a reference documentation for the component object behind the comment. This follows the Javadoc recommendations.
Additionally there is the possibility to tag source code with <expr> and </expr>. Code will be formatted with a fixed space font.
There are new predefined constants for the role of the current user:
The compiler has been extended by the following additional checks:
The shortcut for firing any expression is now Alt + X.
When evaluating an expression, a tracer session is automatically started and the “Tracer” view is displayed. This view works asynchronously and collects all traces until the expression is completed. This view orders all traces by threads and is especially aware of the call stack information.
The result of the expression evaluation is displayed in an “Expression Result” view.
When compiled without tracing, now calls of the built-in functions DUCX.trace, DUCX.traceEnter and DUCX.traceLeave are removed from the Java byte code, too.
The ant library has been extended by a task to persist the running coverage session.
Handling of Kernel Interfaces has been improved extensively.
In the case of a software component member in a new aggregate line, this member is initialized automatically with the current software component. The member has to be set by the developer only if the software component is a different one.
The context menu entry “Find References” with the shortcut Ctrl + Shift + G finds all references of an entity in the project.
To reduce indentation levels, a new syntax for menu bindings has been introduced.
Example |
userinterface APPDUCXSAMPLE@200.200 menus for Package { TaskpaneSelectedExpansion, MenuContextExpansion.objchildren { priority = 100; condition = expression { !cooobj.isencrypted } } condition = expression { cooobj.isencrypted } } } MenuContextExpansion.trchildren { priority = 100; condition = expression { !cooobj.isencrypted } } condition = expression { cooobj.isencrypted } } } |
There are a few new features implemented:
The recommended names of the menus have been harmonized and aliases for the task panes have been added:
Keyword | Description |
mainmenu | With the mainmenu keyword, a menu root can be assigned to an object class that is used as its main menu. |
contextmenu | With the contextmenu keyword, a menu root can be assigned to an object class that is used as its context menu. |
windowmenu | With the windowmenu keyword, a menu root can be assigned to an object class that is used as its background menu. |
independentmenu | With the independentmenu keyword, a menu root can be assigned to an object class that is used as its container independent menu. |
tasks | With the tasks keyword a taskpane can be assigned to an object class. |
selectedtasks | With the selectedtasks keyword a taskpane can be assigned to an object class that contains menu entries of the selected objects. |
To reduce indentation levels, a new syntax for form bindings has been introduced.
Example |
userinterface APPDUCXSAMPLE@200.200 forms for Order {
|