2017 June Release

Fabasoft app.ducx 2016 September ReleasePermanent link for this heading

Find out more about new features and improvements in the Fabasoft app.ducx 2016 September Release.

Cloud Profile RestrictionsPermanent link for this heading

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

Defining a PrototypePermanent link for this heading

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

)

Defining a Method DefinitionPermanent link for this heading

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;

  }

)

Defining WrappersPermanent link for this heading

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;

  }

)

Defining Display ViewsPermanent link for this heading

The element displayview in ducx-ui transforms column information into objects of the object class COOSYSTEM@1.1:DefaultDisplayView.

Example

objmodel APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;

  displayview UserView {
    // Expression property
    columns objsecuser {

      freeze {

        objfirstname;
        objsurname;

      }

      objcreatedat;

      groupby {

        objcreatedat day;

      }

      sortby {

        objsurname;

        objfirstname desc;

      }

      displaymodes {

        LISTVIEW_DETAILS

      }

    }

  }

}

Extensions to Expression PropertiesPermanent link for this heading

An expression property now can have additional information regarding the evaluation context.

Example

objmodel APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;

  class StatusLog : BasicObject {

    expression boolean logexpr(string data, out string line) {

      scope = PARSCOPE_GLOBALSCOPEWITHOBJECT;

  }
}

This expression property describes an expression with the following behavior:

  • It operates on an object.
  • It gets a string value data in the global scope.
  • It creates a string value line in the global scope.
  • It returns true or false.

Assigning Default Column Settings to an Object ClassPermanent link for this heading

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 {
  columns attrdef {
    freeze {

      column1;
      column2;

    }

    ….
    groupby {

      column1;

    }

    sortby {

      column2 desc;

      …

    }

    displaymodes {

      modes

    }

  }
}

Reference DocumentationPermanent link for this heading

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.

Kernel Constants coogroup and coopositionPermanent link for this heading

There are new predefined constants for the role of the current user:

  • The coogroup variable holds the group object of the role of the current user.
  • The cooposition variable holds the position object of the role of the current user.

Stronger ChecksPermanent link for this heading

The compiler has been extended by the following additional checks:

  • Terms in if, while and for statements must be Boolean.
  • Terms in case statements must match the term in the switch statement.
  • All elements of arrays must have the same type.
  • In the expression implementation of use cases the variable cooobj has the correct object class.
  • Kernel Interface calls return the correct object class.

Expression Tester ImprovementsPermanent link for this heading

Shortcut Alt + XPermanent link for this heading

The shortcut for firing any expression is now Alt + X.

TracerPermanent link for this heading

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.

Result WindowsPermanent link for this heading

The result of the expression evaluation is displayed in an “Expression Result” view.

Java TracingPermanent link for this heading

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.

Ant Task coverage-persistPermanent link for this heading

The ant library has been extended by a task to persist the running coverage session.

Kernel InterfacesPermanent link for this heading

Handling of Kernel Interfaces has been improved extensively.

  • Parameters and result types are considered in expressions.
  • Kernel constants are known to the editor.
  • Tooltips for all interfaces is displayed.
  • Code completion for kernel flags is implemented.
  • Kernel constants are marked as keywords.

Extending Component Objects with AggregatesPermanent link for this heading

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.

Find ReferencesPermanent link for this heading

The context menu entry “Find References” with the shortcut Ctrl + Shift + G finds all references of an entity in the project.

Menu Bindings SyntaxPermanent link for this heading

To reduce indentation levels, a new syntax for menu bindings has been introduced.

Example

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;
  import COODESK@1.1;
  import FSCTEAMROOM@1.1001;

  menus for Package {

    TaskpaneSelectedExpansion, MenuContextExpansion.objchildren {

      priority = 100;
      MenuEncryptObject {

        condition = expression { !cooobj.isencrypted }

      }
      MenuDecryptObject {

        condition = expression { cooobj.isencrypted }

      }

    }
    scope DomainTypeFolioCloud {

      MenuContextExpansion.trchildren {

        priority = 100;
        MenuEncryptObject {

         condition = expression { !cooobj.isencrypted }

        }
        MenuDecryptObject {

         condition = expression { cooobj.isencrypted }

        }

      }
    }
  }
}

There are a few new features implemented:

  • After the for-statement one or more object classes are listed.

  • The menu block can be surrounded with a scope block
  • A target can be specified by adding “.” And the reverence of the view to the expansion point
  • Menu items can be listed directly
  • In menu item blocks there can be some generic assignments. These override the assignments in the outer block

Menu Binding NamesPermanent link for this heading

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.

Form Bindings SyntaxPermanent link for this heading

To reduce indentation levels, a new syntax for form bindings has been introduced.

Example

userinterface APPDUCXSAMPLE@200.200
{
  import COOSYSTEM@1.1;
  import COODESK@1.1;
  import COOATTREDIT@1.1;
  import COOSEARCH@1.1;
  import COOTC@1.1001;

  forms for Order {
    OpenObject, ReadObjectAttributes, EditObjectAttributes {
      OrderAdminForm;
      OrderUserForm;
    }
    SearchObjects {
      OrderSearchForm;
    }
    ObjectConstructor {
      OrderCreateForm;
    }
  }


}