4.7.4
Release Date: September 28, 2009
Workflow
Various enhancements have been done, in order to make the workflow interfaces more intuitive. Areas for improvement are:
-
New tools: workflow now provides built-in scripts and conditions.
-
Reusability: it is possible to declare libraries of scripts, conditions and UI services.
-
Ergonomics: services and beans that are declared in libraries can be documented along with their properties; thanks to these declarations, users are guided through the definition screens, with a localized documentation.
-
Reliability: parameters are dynamically displayed from declarations in definition screens; in this way, many user mistakes are avoided.
Libraries of Beans
Built-in and declared beans are automatically proposed in the drop-down list of definition screens. When a user selects a bean, the associated parameters are dynamically displayed.
For more information, see Built-in scripts and Built-in conditions .
Except when they are built-in, beans must be declared in
module.xml
file: see
Library script example
and
Library condition example
.
Libraries of UI Services
Module services are already defined in
module.xml
file. This declaration can be completed: it is now possible to define the labels, descriptions, input parameters and output parameters to be displayed in a user task definition. For adaptation services, a tag
serviceLink
is available to declare its parameters. It is also possible to extend an existing service declaration in
module.xml
file.
For more information, see Specific UI services and InteractionHelper .
New checks before workflow publication
The adaptation of a workflow definition must be activated before publication, and must contain no validation errors (new warning).
For more information, see publication documentation .
New completion strategy
A new completion strategy is available: "terminate current tasks when all work items are completed". This new strategy is useful when associated to the built-in condition "check if last user task was accepted". When this strategy is selected for a user task definition, the workflow progresses when all work items are completed (even though a work item is rejected). In this way, the workflow checks the condition "last user task accepted" and redirects to the next task depending on the last decisions.
Optional 'Reject' button
In a user task definition, 'reject' is now optional. If it is not enabled, the 'reject' button is not displayed to the end-user.
For more information, see Optional reject .
Activation of the 'Accept' button
The 'Accept' button is displayed only when the work item is declared as completed.
Temporal tasks
Fields are added in definition user task for checking that tasks are executed on time. There are two check levels: mail reminder and deadline.
For more information, see Temporal tasks .
Mail CC for user task
A new field is available in user task definition:
mail CC
. If this field is not empty, all mails are CC'ed to the specified user or role.
New mail for deleted work items
A new field is available in user task definition:
notification mail for deleted work items
. When an incomplete work item is deleted, a mail is sent to the concerned users.
New mail variables:
-
${workflow.lastDecision}: this variable displays the last user task decisions, by user (for each work item). -
${system.date}: this variable displays the current date. -
${user.fullName}: this variable displays the full name of the concerned user, with his salutation.
Compatibility
Scripts and conditions
Compatibility is complete, except for tasks which used input parameters . In this case, the process instance does not perform. The developer can use the new interfaces or use only data context. For all the other cases, compatibility is complete. Old scripts and conditions are displayed as specific beans in the definition screen, and processes execution performs.
User tasks
Compatibility is complete. Old publish processes perform. Old definition of user tasks are always valid too. When a user edits an old user task, the Manager offers the matching service declaration if one is found. If the user selects it, the display is updated and the parameter values are retrieved. If the user does not select it, he can update parameters value, but he cannot add or delete parameters. For that purpose, a service declaration is required.
Graphical User Interface
Enumerations and null value
The input components for the enumeration facets (drop-down list and advanced component) now offers an "empty" choice for selection. If the facet already offers empty values, the input component behavior does not change. Otherwise, empty values are converted to
null
.
Number of records by page
The number of records displayed by page is now saved in user preferences.
Data Model
A new element
<osd:information>
has been defined for specifying additional information on schema nodes. This information can then be used by integration code for specific purposes.
Data Model Assistant
The user interface has been enhanced for various components. Concerning the support of JavaBeans specification, it is now possible to define localized parameters inside rules and business objects.
For more information, see Rules and business objects and Java bean
Directory (default)
Facet pattern (
[A-Za-z0-9]{1,20}
) on login has been removed from the default directory implementation.
In the default directory implementation, max length for a specific role name was 20 and is now 80.
Validation
Various optimizations have been performed in the internal incremental validation framework:
-
Nodes defining an inherited attribute (
osd:inheritance) are now concerned by the incremental validation by means of explicit dependencies. That is, a node of this kind will be subject to revalidation only if it is modified, if its source node is updated, or if any intermediate record is updated. -
Constraints associated with a node are not all revalidated when a dependent node is modified. That is, if a constraint defines an explicit dependency to another node, then when an update occurs on this last node, only the dependent constraint will be revalidated.
Data Model API
Introspection API has been extensively completed:
-
Interface
SchemaNodeInformationhas been added. It represents theosd:informationelement linked to a node in a schema.For more information see SchemaNodeInformation
-
Interfaces
SchemaFacet*have been added. It is a hierarchy of interfaces for querying the facets associated with a node.For more information see SchemaFacet
-
Interface
SelectionLinkhas been added. It represents the information related to anosd:selectelement.For more information, see SelectionLink
-
The method
SchemaNode.isValueFunction()has been added. It returnstrueif the node holds a function.For more information, see SchemaNode.isValueFunction()
Directory API
Class Directory
A new method is available to display a user with salutation.
For more information, see Directory
Validation API
Class Adaptation
-
Method
getValidationReport()has been enhanced. It now allows to get an up-to-date validation report of a record.For more information, see Adaptation.getValidationReport()
-
New method:
getValidationReportForNode(SchemaNode aNode). It returns the up-to-date validation report of a specified adaptation node.For more information, see Adaptation.getValidationReportForNode(SchemaNode aNode)
Class AdaptationTable
New method:
getValidationReport()
. It returns the up-to-date validation report associated with a table.
For more information, see AdaptationTable.getValidationReport()
Interface ConstraintContext
Methods
addDependency*
have been improved for defining finer dependency links between nodes.
For more information, see ConstraintContext
Interface ValidationReportItemSubjectForAdaptation
Represents a subject of a validation report item in the context of an adaptation.
For more information, see ValidationReportItemSubjectForAdaptation
Interface ValidationReportItem
New method:
getSubjectForAdaptation()
. It returns the adaptation associated with a validation item.
For more information, see ValidationReportItem.getSubjectForAdaptation()
Workflow API
Class CompletionStrategy
New strategy: ALL_WORK_ITEMS_COMPLETED. A user task is considered completed when all its work items are completed (ignore reject/accept).
For more information, see CompletionStrategy
Interface UserTaskResult
Represents a user task result (workitems list, decisions).
For more information, see UserTaskResult
Interface WorkItem
New methods:
-
getUserReference: returns user reference work item.
-
getComment: returns work item comment (check strategy).
For more information, see WorkItem
Abstract class ScriptTaskBean
The class to extend in order to declare a new library script Task bean.
For more information, see ScriptTaskBean
Interface ScriptTaskBeanContext
Like ScriptTaskContext without dataContext access.
For more information, see ScriptTaskBeanContext
Interface ConditionContext
New method: getLastUserTaskResult: returns the UserTaskResult of the last user task (workitems list and workitems informations)
For more information, see ConditionContext
Abstract class ConditionBean
The class to extend in order to declare a new library condition bean.
For more information, see ConditionBean
Interface ConditionBeanContext
Like ConditionContext without dataContext access.
For more information, see ConditionBeanContext
Data Services and Workflow
It is now possible to start and to end a workflow process instance through Data Services.
Testing Environment API
A new API class, TestHelper allows to write unit tests or integration tests. The class can be executed in a "server-less" EBX.Platform environment. In such an environment (java process), no application server is needed.
Bug Fixes
-
[01941] EBX.Manager does not display all changes during an archive import with change set; updated records are missing.
-
[01942] EBX.Manager advanced graphical component may not retrieve enumeration values in tabular edition mode.
-
[01943] When creating a record with an already used primary key, UIHttpManagerComponent redirects the user to an "Access denied" page. The usual EBX.Manager behavior is expected (stay in same page with an error display).
-
[01944] When a user tries to create a new record with an already existing primary key, on "submit and close", he is redirected to the table view with the error message "Cannot create record since primary key is already used". Then, the user has lost all input values and must restart the creation process.
-
[01945] A manager component called to create a record in a table displays the table grid after canceling creation, instead of closing the manager component pane.
-
[01946] Cannot access a table record from validation report, if the table is filtered and the record does not match the applied filter.
-
[01950] It is not allowed to delete reusable complex types in the data types table. Some problems may occur, for example when the name of a reusable data type does not match the syntax restriction; In this case, it is not possible to fix the error.
-
[01951] TableRef with display patterns are not correctly sorted when they are displayed.
-
[01952] The "GetChanges" operator showed all records as differences instead of none.
-
[01953] When a UIBean is declared on a simple type with a defined default value, then, at display, the UIResponseContext can erroneously return the default value instead of
null(happens if the current value isnulland a validation error is associated to the displayed node).
-
[01954] When a validation error is associated to the displayed node and this node inherits its value, then, at display, the component is no longer in "inherit" mode, but in "defined value" mode.
-
[01956] A user can modify his profile info even if access right are read only for him.
-
[01959] With advanced input component, concurrent access is not managed properly.
-
[01960] Defining a conversion error message in a type overrides the formatting policy.
-
[01961] A user takes and starts a task. Admin tries to delegate this work item to an other user (through Workflow Executions -> Executions -> Executions of processes and history -> Work Items). The user selects a user in 'allocate' field and empties the offered field. This change is processed successfully, but after the new user tries to execute the task, he gets the error message "An unexpected error has occurred".
-
[01692] When a trigger raises an error on a user data submit, the user is unable to resubmit the corrected data once again
-
[01963]
TableReffilter defined on anosd:tableRefis not applied when the advanced input component is used within EBX.Manager.
-
[01964] Facet
totalDigistdoes not checkxs:decimalas expected: Digits are omitted.
-
[01965]
UIResponse.addUIListSearch()with a specificNomenclaturedisplays current value instead of current label.
-
[01966]
UIResponse.addUIListSearch()with a specificNomenclaturethrow aClassCastExceptionif node type is notxs:string.
-
[01968] Exclude values constraint is displayed on complex nodes.
-
[01969] INA properties is displayed in DMA on non-terminal nodes.
-
[01970] History may not report all updates in case of intermediate commits in a
Procedure.
-
[01971] When a modification has to create a new revision, the Manager does not replace selected content in its session context by the new revision. Then, even if modifications are persisted, user will not be able to see them if he does not change content selection. Moreover, if the user performs another modification after the first one, in the same page, the error message 'Failed to apply modifications. Reason: A concurrent update has been made.' is displayed and modifications are rejected.
-
[01972] A non-owner of an instance cannot activate nor deactivate adaptation, even if a permission has been set.
-
[01973] A child branch or a child version does not share a table bloc with its parent branch, event if this bloc has not been modified.
-
[01974] Duplicating a node in DMA does not increment the position of the duplicated node, The same position is kept.
-
[01975] When deleting a node in DMA the positions of the nodes at the same level are not updated.
-
[01976] ProcedureContext.doImportArchive does not import properly when containing a change set.