Release date: April 3, 2017
This release has a particular focus on the user experience improvement, either through built-in components or enhanced customization capabilities. Some of the most notable features are:
Grid edit | This new feature allows to edit records directly in a tabular view. It can be enabled from any custom tabular view. |
New user service API | A complete new API is available to provide custom user services integrated in the standard look and feel and benefiting from the existing widget library based on rich data typing. This new API also overcomes the existing limitations by allowing the edition of multiple records, datasets and even non-persistent applicative objects. |
Hiding and disabling user services | Thanks to the evolutions of permission rules, it is now possible to dynamically hide the button or the menu item launching a built-in user service, such as 'Create record'. Furthermore, for any user service, either built-in or custom, the permission rule context is richer, hence allowing more precise criteria to hide it in some toolbars or menus, or to completely disable it. |
Before proceeding with the upgrade of an existing environment, ensure that you have carefully read the Version upgrade section.
On a custom tabular view activating the feature, the end-user can now switch to grid edit, by clicking on the button shown below.
The grid edit has a similar look and feel as common spreadsheet software, but it takes advantage of the rich typing and validation feature offered by EBX® to automatically display the relevant user interface widgets and to perform the standard data validation on the fly on user submit.
This new feature currently has some limitations: creation and deletion are not supported; only simple fields can be edited (not groups nor lists); the loaded page size is not yet optimized; the grid edit is not available on a child dataset.
The combo-box widget has been improved with regards to the display and behavior of available choices:
the height of the drop-down list now adapts to the number of available choices; if many choices are available, the list takes all the available height; it has also been bounded in order to never cover the footer;
the end-user can resize the drop-down, in which case the size is maintained as long as the user remains on the same data model (if the user opens a combo box in a dataset using another data model or logs out, size preferences are reset);
the first match of choices is now pre-selected;
the next choices are automatically loaded when reaching the end of the list.
The collaborative management and sharing of custom views has been improved in this release.
Permissions | A new administration section is available to configure fine-grained permissions relative to custom views, for instance to define who is able to share views. See Views permissions for more information. Due to this new permission system, the default permission for publishing views has changed. See Backward compatibility for more information. |
Edition | It is now possible to modify custom views directly from the 'Views' administration screen. The following information can be directly updated: the view's label and description, its owner, its group and the 'Share with' field. See Views for more information. |
Pagination size | It is now possible to configure a page size limit for custom tabular views. When such a limit is set, the pagination values offered to users will be capped by the specified value. This can be used to keep users from having large tables, thus improving the overall reactivity, in particular for the grid edit. |
Users can now define their favorite perspective: if a favorite perspective has been defined, then this perspective will be selected by default when logging in.
It is now also possible for a perspective administrator to define recommended perspectives by profile: when a user logs in, the recommended perspective will be displayed if no favorite one is defined.
For more information, see Favorite perspectives and Recommended perspectives.
Apply last modifications on association tables | The 'Apply last modification(s)' service is now available on association tables. This action will display in the 'Actions' menu of the association table, provided that a record has been modified. |
Displaying a service as a view | A new built-in group is available for user services: |
Page redisplay on form submit | On a form submit, if the page is not closed, it will try to redisplay itself in the same state as before hitting the save button. More precisely, the state of the following elements is now preserved on the redisplay: the selected tab, the last focused input element and the groups expanded/collapsed state (except for groups inside a list). For more information, see |
Sorting criteria | The sorting criteria applied on a tabular view are now kept in session so that, when navigating back to the view, its former sorting criteria are preserved. |
Web component for record validation | A validation service is now also available on a record selection if it is called as a Web component. |
A new Java API is available to build powerful custom user services that provide a custom graphical user interface (GUI) and allow users to access specific or advanced functionalities.
For detailed information, see the user service documentation.
Main features are:
Standard EBX® look and feel | It is now straightforward to develop user services with the same look and feel as standard EBX® graphical user interfaces. |
Multiple pages and navigation callbacks | A single user service may include multiple pages and control the display and the navigation between these pages, depending on the context (user input, persisted data, etc.). For example, it is possible to implement "wizard"-like user services where the user enters data in a given sequence. |
Graphics | This API is not restricted to developing forms and can be used to display graphics, or to mix graphics and forms, according to navigation callbacks. |
Toolbars | User services can programmatically define their own toolbars or reuse the toolbars defined in a data model. |
Built-in widgets | All widgets available with the |
Custom widgets | The new custom widget API is fully supported. For backward compatibility, the legacy |
Data validation | User services now fully support automatic input data validation based on data models. The same page can aggregate data from more than one data model. |
Multiple records | The same user interface may display multiple records, some for the update and others for creation. These can be from different tables, data sets or dataspaces. |
Dataset fields | Display and update of dataset fields is supported. These can be from different datasets or dataspaces. |
Dynamic objects | User services now support dynamic objects. This requires programmatically defining a schema. For more information, see |
JavaBeans | Displaying form fields mapped to Java Bean attributes is supported. This requires programmatically defining a schema. For more information, see |
Heterogeneous data display | The same user interface may display fields from multiple records, datasets, dynamic objects or Java Beans. |
Programmatically defined schema | It is necessary to programmatically define a schema when using a dynamic object or a Java Beans. Most features available with standard EBX® data models are available: types, labels, descriptions, constraints, validation error messages... For more information, see |
Model driven forms | Methods are provided to build totally or partially model-driven forms, that is forms whose layout is the one defined by a schema. For more information, see |
Database updates | Methods are provided to easily persist data managed by the user service in a single or multiple transaction(s) depending on business needs. For more information, see |
Pagination | A new Java class allows to build paginated views from a request and a page size. This class offers methods such as getting the first and the last pages, or getting the page preceding or following a given record. For more information, see |
Ajax | A user service can implement Ajax callbacks. A client calls an Ajax callback using an URL generated by EBX®. To facilitate the use of Ajax components, EBX® provides JavaScript methods for sending the request and handling the response. For more information, see Ajax. |
File upload | A user service can display file input fields. HTML forms that allow uploading files are multi-part. For more information see File upload. |
File download | A user service can display URLs or buttons to download files. The actual downloading of a file is under the control of the user service. For more information, see File download. |
Hierarchies and associations | The API now provides more detailed information on the current context for services working on hierarchy views and associations. |
Life cycle and threading model | The user service implementation class is instantiated on the first HTTP request and discarded when the current page goes out of scope or when the session times out. Access to the class is synchronized by EBX®. Therefore, the class does not need to be thread-safe. For more information, see Life cycle and threading model. |
Workflows and perspectives | A user service developed with this API can be part of a perspective or a workflow. It can access information on the current workflow provided by the session interaction. |
For more information, see Overview and UserService
.
A new Java API allows to declare user services easily and consistently. In previous versions, user services had to be declared and extended by modifying either the data model (XSD), or the module.xml
file. While those XML-based ways remain supported for legacy services, the new user service API has given the opportunity to declare any service in a more consistent, simple and modular way.
Main features and benefits of this new approach:
Better modularity | The service is declared by implementing interface |
Centralized definition | The service's unique identifier needs to be defined only once in the Java code (there is no need to duplicate its definition in XML). |
Static activation rules | A declaration can easily specify where the user service is activated (namely available) using various criteria. For instance, the declaration of a service working on a record allows to specify inclusions and exclusions criteria on dataspaces, datasets and tables, either by explicit identifiers or by patterns. |
Dynamic activation rules | When static activation rules are not sufficient, it is possible to specify rules based on the current context using the new activation and permission rules API. For more information, see |
Simplified declaration for EBX® as a web component, perspectives and workflows | Declaring a user service for reuse as a Web Component in the workflow or in perspectives is now much more straightforward: default built-in input parameters are automatically fed according to its nature; if the service works on a dataset element, it is no longer required to add a |
For more information, see UserServiceDeclaration
.
As detailed below, the Java API used to dynamically enable / disable user services according to the context has been enhanced.
New concept of activation rule | It is now possible to dynamically disable a user service according to the current data space and/or dataset by specifying an activation rule. When disabled through its activation rule, a user service is completely disabled and never displayed in the specified context; for example in the screen to manage user-defined permission rules. Declaring such rules is only possible with the new user service declaration API. See |
Richer context for new programmatic permission rules | The new Java interface Declaring such rules is only possible through the new user service declaration API, or by attaching the permission rule to data model elements (see next item). |
Attachment of a permission rule to data model elements | The new API also allows to specify, on data model elements, an additional programmatic permission rule for a given built-in or custom user service. Similarly to |
See user service permission resolution for more information
A new API to define graphical components, namely custom widgets, is available. A custom widget can be used to customize the look and feel of groups and fields in data models or programmatically defined schemas. This API replaces UIBeanEditor
that had many limitations.
Common framework for custom and built-in widgets | For better reuse and integration in EBX®, custom and built-in widgets implement interfaces that inherit from the same |
Custom layouts | A custom widget can be specifically instantiated and embedded in custom form layouts ( |
Data models and programmatically defined schemas | A custom widget can be specified as the default view of an element (a field or a group that is terminal or under a terminal group) from a data model or a programmatically defined schema. In addition, thanks to the fact that a factory is now specified, it becomes possible to control whether the specified widget is compatible with the relevant element. If this is not the case, an error can be added at the data model level or at the schema compilation time. See the |
List elements | To facilitate developments, custom widgets for list elements are now handled by a distinct interface, |
Schema introspection | To introspect a schema, the new method |
For more information, see UICustomWidget
and Default view Widget.
The old UIBeanEditor
is now deprecated
The custom layouts (UIForm
) and the new user service API (UserService
) share the common interface UIFormWriter
. It has been enriched with the following features:
It is now possible to quickly build a model-driven form part to be rendered as in a standard EBX® form. See UIFormWriter.addFormRowOrGroup
for more information.
A method has been added to retrieve the display mode of a path in a standard form. Possibles values are: none, inline, expanded/collapsed, link and tab. See UIFormWriter.getDisplayMode
for more information.
Additionally, the last selected tab of a tabbed pane can now be retrieved by invoking the method getPreviousTabSelected
on one of the following interfaces: UIFormContext
, UserServiceSetupDisplayContext
or UserServicePaneWriter
.
Three new button icons are available in the UIButtonIcon
API, underlined in the screenshot below.
See UIButtonIcon
for more information.
When the user accepts or rejects the work item, but the mandatory comment is unset, the comment pop-up is now automatically opened. A new button is available in the comment pop-up to directly terminate the work item according to the initial decision.
The life cycle of work items can now be managed directly by means of the Java API. It allows to allocate work items, start them, and accept or reject them, under certain conditions. The following methods have been added:
Thanks to this new API, many scenarios bypassing the standard workflow inbox can be considered. For example, from a domain-related table and in a single action, the user is able to accept or reject multiple work items (a record in this table having a link to its associated work item through the persisted work item key).
The method ProcessInstanceHistory.getTerminationType
has been added. This method allows to know if a workflow has been terminated normally or forced to terminate (by an administration action).
The method WorkflowEngine.getProcessInstanceComments
has been added. This method allows to directly get all the comments of a workflow (including comments of its sub workflows recursively).
Dataspace reference | The new data type See osd:dataspaceKey for more information. |
Dataset reference | The new data type See osd:datasetName for more information. |
Color value | The new data type See osd:color for more information. |
Based on the replication units defined in the data model, replica tables are generated in the database schema. The replication API has been enhanced so as to retrieve information related to these tables.
See Replica
for more information.
The ReplicationUnit
API has been improved to be able to retrieve the refresh policy of a replication unit.
See ReplicationUnit.getRefreshPolicy
for more information.
The built-in RESTful services have been improved for the following operations:
Delete operation | The 'delete' operation now supports multiple rows of records in the request body. This operation will delete several existing records in a single transaction. See Delete operation for more information. |
History operations | A new 'history' category is now supported. Several new operations are available for selecting and counting the history content of datasets, table records and record fields. See Operation category for more information. |
Select operation | The 'select' operation on table now allows applying:
See Table parameters for more information. |
Simple data types | The new built-in data types: See Content of simple type for more information. |
Java API | Provides Java utility methods for REST encoding. See |
If two tables had the same name in the data model, for instance, /root/domain1/product
and /root/domain2/product
, then it was not possible to generate the WSDL from the data model because of naming conflicts (bug #5308). In the data model, it is now possible to assign a unique name to any table, so that this name will be used to generate the associated data service operations, by suffixing the operation name.
See Data services for more information.
SOAP operations have been improved for the following operations:
Customizing the WSDL target namespace | A new technical parameter allows to change the value of the
|
Comparing generated WSDLs | The content of two WSDL generations can now be compared, in the following order:
|
Simple data types | The new built-in data types: |
It is now possible for a user to modify the separators that appear in the formatted numbers by defining the attributes groupingSeparator
and decimalSeparator
in the formatting policy file frontEndFormattingPolicy.xml
.
See Value formatting policies for more information.
Decimals having zero fraction digits are now formatted differently when using the method SchemaNode.formatToXsString(Object aValue)
. The following zero(s) of the fractional part are omitted. This formatting is compliant with the W3C XML Schema type for performing the Decimal-to-String conversion.
Two new XPath functions are now available:
osd:contains-record-label
allows filtering records by their label
osd:is-neither-empty-nor-nil
checks if the string is neither empty nor null
See XPath supported syntax for more information.
The setLocale
and setSession
methods have been added to the Request
interface.
They allow activating the permission rules on Record
, as well as sorting localized labels according to a given user's locale.
This feature has been implemented since version 5.5.0 and has been in use since then. It had been omitted from the release note at the time of that release.
Because the only method provided to bypass permissions in the Trigger and Procedure contexts was the setAllPrivileges()
method, developers had to disable permission checks for all nodes as soon as they wanted to set a technical value.
A new method ValueContextForUpdate.setPrivilegeForNode
has been added to grant privileges, only for required nodes.
Since version 5.6.1, duplicating a read-only field was not possible, since fields without write access were cleared at the end of the handlNewContext
trigger.
When used in the handlNewContext
trigger, the new method ValueContextForUpdate.setPrivilegeForNode
allows to bypass this behavior, only for required nodes. This evolution corrects the bug #23037.
The property ebx.validation.constraints.messages.threshold
has been added to the EBX® main configuration file (ebx.properties
). It allows to specify a validation message threshold that is applied to each constraint of a data model. The benefit of this new property is to not stop the validation of a dataset when this threshold is raised by a constraint.
This evolution corrects the bug #17839; as a consequence, the property ebx.validation.messages.threshold
is no longer supported. See Backward compatibility for more information.
The ValidationReport
API has also been enhanced to provide information about the constraints that have reached the threshold. See ValidationReport.hasConstraintsWithTooManyMessages
for more information.
In addition to the information provided in this release note, the following chapter provides an exhaustive list of the new Java APIs published since the release of the 5.7.1 version.
The chapter Supported environments has been updated to reflect the necessary upgrades detailed below. The two first items concern the application server.
Java 6 | Java Runtime Environment requirement becomes JRE 1.6 or higher versions. The JavaBeans Activation Framework is now included in the JRE; as a consequence, the third-party library named activation.jar should be removed from the 5.8.0 installation environment. |
Servlet 3.0 | The deployment descriptor (web.xml) for EBX® web applications has been modified to comply with the Servlet 3.0 or higher versions specifications. |
SQL Server 2008R2 | The database SQL Server 2008 is no longer supported, the minimum required version for SQL Server has been upgraded to 2008R2. |
Firefox ESR 45 | Firefox ESR 38 is no longer supported since June 7, 2016. The currently supported version is Firefox ESR 45. As a consequence and from this version of EBX®, the officially supported version of Firefox ESR is 45. See Mozilla Firefox ESR for more information. |
Custom view publication | As a consequence of the introduction of the new permission system for custom views, non-admin users can no longer publish their own views. Previously, a built-in administrator could publish any view while other users could only publish their own views. With the new permission system, a user can be allowed to either share any view or zero view of a given data model. If no permission is set for a given user, the default permission is defined as follows: built-in administrators can publish all views while other users cannot publish views. |
Method | The method UIContext.getWebNameForPath(Path) supports only relative paths for record nodes. Path to record nodes must always be relative to the current one. Absolute paths are interpreted as paths to instance nodes. For more information, see |
Workflow - Accept and Reject by API | As a consequence of the bug fix #24899, the accept and reject actions by API can be unauthorized for the following reasons: a mandatory comment is unset, a specific constraint is not valid or a workflow trigger throws an exception. These checks were not performed in previous versions (5.7.1 fix D and later), this is why a change of behavior may be noticed. |
Workflow - mails | As a consequence of the bug fix #22568, the URL parameter set in the workflow configuration shall be reviewed. |
Technical configuration for emails | As a consequence of the requirement of Java Runtime Environment JRE 1.6, issues may occur when sending emails. The migration from JRE 1.4 to JRE 1.6 and above, if not specified, will take into account IPV6 routes for mails instead of IPV4 (default configuration of JDK 1.4 for the JavaMail libraries). In that case, it is necessary to double-check the network configuration in order to ensure IPV6 is enabled. Another solution would be to indicate to the JVM to explicitly use IPV4 instead, by setting the following JVM argument to true: |
User services in the Data Model Assistant | It is now recommended to use the new |
Data services - SOAP delete operation | When the predicate does not match any record, a data service exception is returned with a dedicated message, instead of the value code |
Data services - improved checks for SOAP table operations | As a consequence of the bug fix #24590, the table node permission for the request session is now checked when performing an operation on a table via SOAP. Although this check should have been implemented from the beginning, existing data services could be impacted by this change in behaviour. |
Dependencies on inherited fields | As a consequence of the bug fix #24862, constraints defined on inherited fields are now automatically set to the Unknown dependencies mode. Consequently, if existing data models define some constraints that attempt to specify an explicit dependency to an inherited field, an |
History on inherited fields | As a consequence of bug fixes #24504 and #24504, the history no longer stores inherited values. Both dataset inheritance and field inheritance are concerned. In the graphical interface, inherited values are replaced by an appropriate label, which shows that a field had an inherited value when an operation on a record was historized. In the database, inherited values are replaced by nulls. The user can deduce, by looking at the operation code associated with the functional field, if the null denotes an inherited value. The change will not affect history records that are already historized and stored in the repository. |
Validation message threshold | As a consequence of the bug fix #17839, the property |
In order to upgrade your version of EBX®, perform the following steps:
Backup your repository, including the RDBMS and the directory ebx.repository.directory
.
Replace the *.war
and ebx.jar
files on your application server.
If using EBX® add-ons, ensure that the versions of the add-ons are compatible with EBX® version 5.8.0 before upgrading. For the backward compatibility of the add-ons themselves, consult the release note of each add-on.
Once an EBX® repository has been used with this version, using it with a previous version is not supported. Consequently, you must create a backup before upgrading, as described above, in order to maintain the possibility of downgrading later.
[19621]UIFormPaneWriter.addWidget
does not properly manage the inheritance button.
When using many UIFormPaneWriter.addWidget
in a single form row with at least one widget with an inheritance button for each widget, when one overwrite button is enabled, all widgets are set to 'Overwrite'.
[20960] Changing the primary key definition may lead to inconsistent duplicates.
Some changes in the primary key definition can lead to duplicate records when the data model is published. This can occur when a field is removed from the primary key, or if a field in the definition is changed to another field.
If a dataspace or snapshot contains such duplicates, then inconsistencies are observed: 1/ the table size displayed in the user interface does not correspond to the size of a full export with no specific sort; 2/ if a request result uses a secondary index, the content can contain duplicates that do not appear on a request result using the primary key index.
[22233] Performance issues due to a low level lock when many users are connected to EBX®.
When many users are connected to EBX® or when many operations are run concurrently, a performance degradation is observed. It is due to the fact that the standard Java class ReentrantReadWriteLock
has an inefficient implementation if its readLock
is aggressively acquired by multiple concurrent threads.
[22385] Poor performance when displaying a table view with the focus on a specific record.
[22800] Missing value for the multi-valued HTML content field when using the TabularView.getColumnsIterator()
method.
The TabularView.getColumnsIterator()
method does not return a column which is multi-valued HTML in the returned iterator.
[22900] Poor performance is observed while parsing XML in some environments.
Unnecessary calls to the Class.forName()
method in the XML parser can lead to poor performance in some environments.
[23015] Provide the documentation related to the configuration of a module logger.
The documentation regarding the configuration of a module logger is missing.
[23031] Permissions are evaluated on every record of the associated table while accessing an association.
The table needs to be filtered on the table reference field used by the association prior to calling the permissions.
[23035] Improve the error message for the infinite cycle in inherited fields with no set field.
If the inheritance relationship defines a cycle in which no field is set, then an internal StackOverflowError
is thrown and the end-user does not receive a useful explanation.
[23259]osd:isEmpty
returns the wrong result.
osd:is-empty
returns false when applied to an empty string.
A new XPath function osd:is-neither-empty-nor-nil
added.
[23279] An error can occur when executing the repository purge.
A java.lang.StackOverflowError
error can occur when executing the repository purge.
[23318] An error occurs while deleting dataspaces and their history.
A ConcurrentModificationException
error occurs while deleting dataspaces and their history due to the deletion method being recursive on children dataspaces.
[23387] The Request.setOrderByPrimaryKey
method is ineffective.
[23463] Improve the transaction management during the replica refresh.
A transaction issue can occur because the replica cleanup is performed in a dedicated transaction which is independent from the transaction of the refresh.
[23551] An error occurs while accessing the history of a table in "current dataspace and merged children".
An error occurs while accessing the history of a table in "current dataspace and merged children" when there were transactions to retrieve in thousands of dataspaces.
[23819] Dataspace creation fails in certain conditions resulting in a "Service associated module could not be found" error.
When permissions have been set upon child dataspace creation for dataspace services of a missing module, an error occurs when creating a dataspace, resulting in the following error message: "Service associated module could not be found".
[24266] An error occurs when closing dataspaces or versions.
An error occurs when closing dataspaces or versions. The displayed message indicates NullPointerException
as the root cause.
[24504] Historization on inherited attributes can lead to erroneous historized data.
Historization on inherited attributes can lead to erroneous historized data or cycles in the resolution of inherited values.
[24756] An error can occur when executing the purge with more than 100,000 table arrays to delete.
The purge fails with an exception when there are more than 100,000 table arrays to delete.
[25046] When executing the "apply last modification" service, the update of inherited fields may lead to inappropriate updates.
[15955] A default value made only of space characters is not saved in the schema generated for the data model.
[22005] Wrong group displayed in the predicate of a validation rule if the group uses a complex data type used by other groups.
A validation rule error occurs when the user creates a rule containing different groups using the same complex data type. The elements of the first group always display in the validation rule predicate even if the user selects other groups.
[22058] Auto-increment facets in "Simple data types" are not imported when importing an XSD in the data modeler.
[22112] The severity of the blocking constraint is ignored when importing an XSD in the data modeler.
When importing a model with the severity for a blocking constraint set to 'Info' or to 'Warning', the severity is replaced by 'Error'.
[22249] 'Apply last modifications policy' is ignored when importing an XSD file in the data model.
When importing a model with the 'Apply last modifications policy' property set to 'Default' or 'Ignored', the property is then set to 'not defined'.
[22425] The blocking constraints message is displayed incorrectly when importing an XSD in the data modeler.
When importing an XSD model with the severity for the enumeration set to 'Warning' or to 'Information' with a 'Default'message, the message is replaced by the 'Localized message'.
[22723] Regular expressions for the replication unit name should be validated at creation time.
When the user creates a replication unit name with an invalid regular expression, no error is displayed. The name is only validated upon publication.
[22731] The version name is modified after mapping a new version with a new publication.
On a data model, the selected version name is modified after publishing a data model with a new publication.
[22744] No table has been associated with the toolbar when using included complex data types.
This issue happens on a table in a data model that is included from another model.
When the user associates a toolbar with tables, the table is not displayed in the list of tables to be associated.
[22812] The 'Trim white spaces' field is not reused from a simple data type.
Set Yes/No for the 'Trim white space' field of a simple data type. This setting is not reused on the current data model.
[22851] "Function (computed value)" in "Simple data types" is not imported when importing an XSD in the data modeler.
[22948] Importing a data model in the data modeler should not trigger the data model compilation.
[23046] Block on the waiting screen when the user edits a view of an association object which contains sorted columns.
This issue occurs with an association object containing sorted columns. The system displays a waiting screen when the user deletes the sorted field in the model and then tries to edit the default view.
[23145] Cannot select multi-value groups when defining the name of auxiliary tables in replication.
In the data model, when defining a name for the auxiliary table in replication, the user cannot select multi-value groups in the 'Path' field. It is possible to define the name of this auxiliary table by entering it manually.
[23930] Blank page displayed when editing a computation rule.
When the user edits a computation rule using a condition and a formula, a blank page is displayed.
[24163] The value of the 'Severity' field is incorrectly duplicated after running the 'Duplicate' service on a validation rule.
Currently, the value of the 'Severity' field on duplication rules is always 'Error' after running the 'Duplicate' service.
[24261] An error occurs when a trigger is defined on a field with an auto-increment.
A "Duplicate index declaration" error is raised when a trigger is defined on a field with an auto-increment.
[24290] The 'Maximum length' box does not disappear after creating a 'Resource' data type in a historized table.
In a historized table, after creating a child with the 'Resource' data type, the 'Maximum length' box does not disappear.
If the user sets a value for the 'Maximum length' of the 'Resource' data type and publishes the model, the error message displays and the model cannot be published.
[24308] A selection issue occurs when setting the Component library parameters.
The first item is checked/unchecked when users repetitively click on another item in the list.
[24593] Unexpected error message displayed when entering an invalid value into the catalog of User Defined Attributes.
When creating a new field with the 'User defined attributes' type, then entering an invalid value into the catalog of User Defined Attributes, an unexpected error message displays.
[5308] Data services SOAP operation fail on duplicate table names as table paths are ignored.
If the user generates a WSDL when multiple tables with the same name exist, an error occurs when using the resulting WSDL operation because the paths to the tables are not taken into account.
[22230] Improve the documentation for the REST 'update' operation.
The documentation contains no sample to help the developers.
[22933] REST table pagination context is missing when includeContent
is set to 'false'.
When a 'select' operation request on a table is invoked with the includeContent
parameter set to 'false', the table pagination context is not available in the response.
[24590] SOAP write operations do not check the table node permission.
When a third party system invokes one of the write operations (such as 'insert', 'update' or 'delete'), the table node permission is not checked. If the user has the read-only permission for the table node, no error message is returned and the write operation is executed successfully.
[24760] Records that do not exist can be deleted in SOAP.
In SOAP, when executing a 'delete' operation on a record that does not exist, a successfully completed message is still displayed.
[24769] An exception is thrown when invoking the 'delete' SOAP operation.
When invoking the 'delete' SOAP operation, if the dataspace does not exist, a NullPointerException
is thrown. An appropriate error message should be returned instead.
[21044] A fatal error occurs when the history of a table contains an enumeration field with a widget.
When the user sets a widget for the enumeration field of a table and there is no label on the enumeration values; the history of that table cannot be seen.
[17839] Table validation report is erroneous if the validation threshold has been reached.
If the threshold defined by the property ebx.validation.messages.threshold
has been reached, the validation report at the table level can be erroneous. It can give false information and display that there is no error, while there are actually errors.
Additionally, the validation filter on the table can also return a wrong result, for the same reason: the validation has not been evaluated on the table.
[17895] Constraints on tables with a record level check and no dependencies are always blocking upon user input.
Constraints on tables that have a record level check are always blocking.
[21656] The validation report is formatted for the log even if it is not written in the log.
As a consequence, if the validation report contains numerous items, this can lead to a large memory consumption.
[21797] The severity of a foreign key constraint is ignored while importing an XSD in the data modeler.
After importing the XSD, the severity of the constraint is forced to "ERROR", regardless of the value of the severity in the XSD file.
[22126] The mandatory facet on a foreign key with a default value is not evaluated with a given persisted value.
The mandatory facet on a foreign key with a default value is not evaluated when the persisted value is AdaptationValue.INHERIT
.
[23285] Poor performance is observed in an incremental validation when many updates need to be validated.
Poor performance is observed in an incremental validation due to the use of LinkedList
.
[24206]ConstraintOntablewithRecordlevelcheck
is not called on submit when a dependency to the current table exists.
A constraint on a table with a record level check is not called when submitting a form if it defines only a dependency to the current table.
[24224] Unnecessary calls to computed fields while executing the validation.
The validation will retrieve the value of a computed decimal field even when there is no constraint to evaluate on this field.
It happens when the computed field is inside a mapped table.
[24862] The validation status of a constraint depending on an inherited field is not updated when the inherited field is modified.
[8471] Not redirected to history table after exporting its contents.
After exporting records from a history table and closing the resulting pop-up, the user interface does not go back to the history table view.
[17415] Filter incorrectly applied to a table after redirecting to another page.
This issue occurs when applying a view with a filter on a table, navigating to another page then coming back to this table. The default view with all the records is displayed even though the state of the table is 'filtered'.
[18822] [All browsers] The position of the icon changes when the user clicks on the 'Icon' table.
On the 'Icon' table, when opening a record view and clicking on the screen, the position of the icon changes.
[19210] When a record creation fails, the help button is missing in the workspace.
When a record creation fails in the UI manager, the context-sensitive help button is missing in the workspace.
[19217] [All browsers] Alignment issue on 'service' fields in the child perspective.
When the user creates an action on a parent perspective then accesses its child perspective, the 'service' field is not vertically aligned.
[19367] A white page appears when accessing a table with a defined toolbar that has no icon of service.
This issue occurs when the user defines a toolbar for a table with no icon of service, a white page appears when accessing the table.
[22567] The 'Apply last modification(s)' service is missing after modifying records on a hierarchy view.
When modifying a record on a hierarchy view, the 'Apply last modification(s)' service is not displayed under the 'Actions' button.
[22870] An error occurs when modifying a custom view when a D3 dataspace contains a foreign key referring to the current table.
An exception occurs when modifying a custom view when a D3 dataspace contains a foreign key referring to the current table.
[23321] Special characters are not correctly escaped when defining a hierarchical view.
[23585] An error occurs when the user executes sorting and filtering on a foreign key.
An error occurs when the user sorts the foreign key column of a table. When creating a filter criterion on this field, an 'undefined' error displays.
[23703] The confirmation parameter is uneffective on user interface services declared on tables.
The default confirmation message "Confirm before launch" is not displayed when the user runs this service in a dataset.
[23717] Multiple calls to access rules when accessing the hierarchy through UIHttpManagerComponent
.
When accessing a hierarchy view through UIHttpManagerComponent
, the number of access rules is high compared to a simple access through EBX® manager.
[23721] Access rules called several times when accessing the default hierarchy through UIHttpManagerComponent
.
When accessing a hierarchy defined as the default/favorite view through UIHttpManagerComponent
, the number of access rules is high compared to a simple access through EBX® manager.
[24253] An error occurs when selecting a hierarchy node.
If the hierarchy root dimension level is recursive and the target level is based on a link table, a ClassCastException
occurs when selecting a hierarchy node.
[24305] Redundant dimension when creating a hierarchy view based on the recursive link that is a simple foreign key model.
When the users create a hierarchy view based on a recursive link that is a simple foreign key table, an extra foreign key dimension is displayed in the 'View creation' page.
[24430] Computed values are ignored if they are the only differences between two dataspaces or snapshots.
The comparison in resolved mode ignores computed values if they are the only differences between two dataspaces or snapshots.
[24546] Performance issues on hierarchies on pruned recursive case.
A decrease in performance is observed on hierarchies if there is a big volume of recursive root leaves on search or pruned mode.
[24886] Hierarchy pagination display error on large volume.
On pruned or search modes, the root hierarchy page is sometimes displayed without its members.
[21287] Silent error when launching a workflow process instance.
If an error occurs while launching a workflow, in some cases, there is no message in the logs and there is no way to understand the problem.
[21477] A first hidden task is not correctly unselected in the workflow graphical view.
The bug occurs only for a hidden step in the first position, which is not the current step. When the graphical workflow view is displayed, when "show hidden tasks" is disabled, the first hidden step is correctly hidden, but the information about it is still displayed. For a hidden step in another position, it is unselected (no step selected, no information displayed). The same behavior should be applied for the first hidden step.
[22568] The URL parameter set in the workflow configuration is ignored when generating a work item URL.
When computing a work item URL, the 'Entry Policy Login' URL value takes precedence over the one set in the URL definition in the workflows' e-mail configuration.
[22682] Email variables using a profile display the identifier instead of the label.
When an email is sent for a workflow notification with a variable using a profile, the variable returns the role identifier of the profile instead of its label.
[22965] Optimize the Java API to get the session interactions and input parameters.
When an AccessRule
is set on a large table, if this rule invokes Session.getInteraction
or Session.getInputParameterValue
in the context of a workflow, the access to the table is too slow.
[23559] The list returned by the method ProcessInstance.getCurrentSubWorkflows
can contain null
elements.
[23719] Service "Force termination of this workflow" fails with an incomprehensible error.
The service "Force termination of this workflow" fails with the following error:
"Service [ Force termination of this workflow ] not available for the content [ Workflows ]."
The message is incomprehensible and should detail the reason of the error.
[24899] When a work item is accepted or rejected by API, preprocessings are not performed.
The behavior of Accept and Reject by API is not similar to the behavior of Accept and Reject by user interface. Preprocessings should be performed when a work item is accepted or rejected by API too.
[23051] A Java error during a broadcast to a slave node is not returned to the master.
If a Java error is thrown during a broadcast to a slave node, it is not returned in the service operation response. For the same context, the master user service "Check all slave node information" displays a white page.
[23052] A federation broadcast retry can abort on the master node.
A broadcast in federation can abort on retry if the 'archive file' generated for the broadcast context has been deleted during the federation delay and retry process.
[23053] Adds D3 node information to each operation log message.
When a service operation is written in the D3 log, the node information (ID and label) is not always available. Adding this information would facilitate the analysis, particularly when a large number of slave nodes are registered to the master one.
[23243] The D3 broadcast fails on the slave node if the dataspace already exists outside of the D3 Reference dataspace.
[21726] The Javadoc of ActionPermission
is incorrect.
The Javadoc of ActionPermission
is incorrect. It should mention that the "disabled" ActionPermission
has the same effect as the "hidden" one.
[21905] An error occurs while exporting the content of the "Dataspaces/snapshots" technical table using the "user friendly" mode.
An exception occurs while exporting in XML the content of the "Dataspaces/snapshots" technical table using the "user-friendly" mode.
[21949] The error message during a CSV import indicates wrong line and column numbers.
When importing a CSV file, the error message indicates wrong line and column numbers.
[22828] Default option value 'Import/Export' is not applied to the perspective action.
The default 'Import/Export' option set in the 'Advanced perspective' settings in the Administration area is not applied to the perspective action.
[23839] Impossible to import a CSV file with 'CRLF' as the list separator.
It is impossible to import a CSV file with 'CRLF' as the list separator.
[25223] The content of the i18n sample folder is incorrect.
The content of the i18N sample folder (i18n_xx.zip) provided through the online documentation is incorrect.
[22025] It is not possible to change the specification of a task if the module is no longer available.
In the task scheduler, if a task has been created in a module that is no longer available, it is not possible to change the specification of the task.
[22222] The internal file 'module.xml'
is not valid.
The internal file 'module.xml'
is not valid because the new wizard 'firstCallDisplay'
is not defined in the associated file descriptor.
[12286]UIFormPaneWriter.addWidget
does not properly manage the inheritance button.
When using many UIFormPaneWriter.addWidget
in a single form row with at least one widget with an inheritance button for each widget, when one overwrite button is enabled, all widgets are set to 'Overwrite'.
[19386] Erroneous display of associations in collapsed groups.
An association belonging to a collapsed group is not displayed correctly.
[19919] The WYSIWYG editor for html fields can be slow.
Depending on the content, the WYSIWYG editor for html fields can take a long time to load.
[19987] Defining an erroneous configuration for an action prevents from editing a perspective.
If an erroneous configuration is set for an action, the perspective menu it belongs to can no longer be edited.
[21468] [IE 11] Performance issues when scrolling vertically a table view.
Performance issues when scrolling vertically a table view on IE 11.
[21529] An error occurs when deleting a record from the "Tasks" table of the scheduler.
If there is no user defined in the task configuration, a NullPointerException
error occurs at task deletion.
[21567] An error occurs when launching a service on a record selection from a manager component.
If the selection path of the manager component is a relative path, when executing the UIService
, the record selection is lost and an error occurs.
[21732] An error can occur while accessing a tabular view.
While accessing a custom tabular view with a long filter expression, a StackOverFlowError
can occur and a blank screen is then displayed.
[21752] An error occurs while accessing the work item inbox with a user filter saved on it.
A PathAccessException
occurs while accessing the work item inbox with a user filter saved on it.
[21861] The "create" action is forbidden when the "+" button is hidden.
When the "+" button of the table view is hidden, for example when using the hideAllViewFeatures
method of UIHTTPManagerComponent
, the "CREATE" built-in action is no longer available.
[21914]UIFormWriter.startFormGroup(Path)
display is not model-driven.
When the group starts with UIFormWriter.startFormGroup(Path)
, the initial state of the group (expanded or collapsed) is not model-driven as expected (and as specified in the Javadoc).
[21990] "Access denied" when comparing two datasets in a workflow user task with the built-in comparison service.
An error message "Access denied" is displayed when comparing two datasets in a workflow user task with the built-in comparison service.
[22045] In the comments of a work item, EBX® displays the identifier of the user instead of their salutation.
In the comments of a work item, EBX® displays the identifier of the user who wrote the comment instead of their salutation.
[22127] User is logged out after accessing a work item from a perspective.
The user is logged out after completing and accepting a work item he had previously accessed from a perspective.
[22260] An error occurs when accessing a foreign key selector with a specific view in a perspective.
When a specific view has been defined for a foreign key combo-box selector,
a fatal error occurs when accessing the selector in a perspective.
It disappears if the selector has been used in the 'Advanced perspective'.
[22707] The label of a combo box remains highlighted even when it loses the focus.
When the content of a combo box is filled using the selector, the label remains highlighted even when the focus moves to another field.
[22780] Unnecessary permissions are evaluated on views.
While accessing a table view, permissions are evaluated upon all views defined for the instance data model, regardless of the table concerned by the view.
[23068] When accessing a hidden record, the custom reason message should be displayed.
When trying to access a record hidden by a custom access rule, and if this access rule defines a reason, this reason should be displayed to the end-user instead of the default message.
[23380] The parameter "viewFeatures=hide:create" is uneffective if the manager component opens a hierarchical view.
The parameter "viewFeatures=hide:create" does not hide the "create a record" service if the manager component opens a hierarchical view.
[23502] The confirmation message is not displayed when a service is called from a perspective.
When a custom service with a confirmation message is called from an action in the perspective menu, the confirmation message is not shown.
[23615] The tracking information is not propagated to sub-sessions while accessing a manager component URL.
[23722] On a perspective display, a blank page is displayed if the perspective includes a custom user service.
If a custom user service is declared on a data model and is used in a perspective, then a blank page is displayed on the perspective screen. An IllegalArgumentException
is also logged.
[23860] When a dialog box is displayed in an internal pop-up, the escape key no longer closes the internal pop-up.
In an internal pop-up, when the user sees a dialog box (for example when opening a UserService
with confirmation), the internal pop-up can't be closed by using the escape key anymore.
The user must click on the close button or click on the gray transparent background on the top of the screen to close the internal popup.
The escape key must work on the internal pop-up even if a dialog box has previously appeared on the screen.
[23972] Tables are not displayed correctly on Chrome when the zoom is set to 90%.
Tables are not displayed correctly on Chrome when the zoom is set to 90%.
It happens when the table has too many columns and is too large for the browser window.
[24009] Unnecessary Expand/Collapse icon under the group type on a Perspective.
On the Perspectives, an Expand/Collapse icon is displayed for the group although there is nothing under it.
[24259] In a web component on a dataset node, the "Breadcrumb" feature option is no longer used and should be deprecated.
[24301] The label of the 'Marked for history purge' column is missing in the 'Deleted dataspaces/snapshots' table.
In the 'Deleted dataspaces/snapshots' table of the 'Dataspaces' dataset in the Administration area, the 'Marked for history purge' column displays its code name instead of its label.
[24345] Redundant confirmation pop-up appears when running a service that is set to 'Confirm before launch'.
This issue occurs when running a service that needs to be confirmed before launch, two pop-ups with the same content display consecutively.
[24409] The returned date is a month later than the date entered when using UIFormWriter.addJS_getNodeValue(Path)
.
The JavaScript public API to get the value of a form field has an issue for fields of the date and date-time types.
The returned date is a month later than the date entered in the field.
[24889]UIContext.getWebNameForPath(Path)
returns the same value for two different fields.
UIContext.getWebNameForPath(Path)
returns the same value for instance fields and record fields that have the same path in the adaptation.
[24966] An error occurs while exporting data through standard user interface actions.
An error of the NullPointerException
type occurs while exporting data through standard user interface actions.
[24998] An error occurs while switching from a table view to another.
An error of the ConcurrentModificationException
type occurs while switching from a table view to another.
[19510] When a user has access to the administration tab, it is impossible to block access to development tools.
When a user has access to the administration tab through global permissions, it is impossible to block the user access to development tools.
This access should be under the control of the 'Repository management' permission option.
[20030] Any user is able to see the dataset level permissions changes while comparing 2 dataspaces.
Even if a user does not have access to the dataset permissions table, while comparing 2 dataspaces, they are able to see the differences between permissions in the 2 compared dataspaces.
[21177] Administrators should be allowed to manage all views.
When a view neither has the dataset owner nor an administrator in the list of its authorized profiles, it becomes unmanageable. Administrators should always be allowed to manage all views.
[21390] Permissions are not taken into account when displaying a field in a specific form in a child dataset.
[21616] It is not possible to add a custom UIService
to an association on a top toolbar.
[21653] Some cycles in role inclusions are not detected.
[21884] An "Access denied" error occurs while accessing a workflow user task from a perspective.
If a workflow user task is executed from a perspective, and if the user task service is of the "workflow" type, an error appears stating that the user has no right to execute the service.
[21918] An error occurs when importing an archive with a change set.
In the user interface, a NullPointerException
error occurs while importing an archive with a change set. This bug is due to the correction of the bug #14899 whose purpose was to hide the tables to be imported if the end-user had no access right.
[22055] It is not possible to add a custom UIService
to a row toolbar.
[22056] Users cannot edit their own avatar information.
[22098] Warnings are displayed in the logs about the DMA and workflow schema extensions (internal schemas).
When EBX® starts and refreshes schemas, several warnings are displayed in the logs about the DMA and workflow schema extensions.
[22196] Improve error messages on the WSDL wizard.
When a user generates a new WSDL for a dataset in the UI, the error message "[{dataset}] is not a valid dataset." is displayed, if the dataset exists and is hidden or contains at least one severe error.
[22198] If a field used in a table label is hidden through permissions, it is no longer visible in foreign key labels.
[22297] Parameters for built-in scheduled tasks are hidden.
It is no longer possible to edit the parameters of built-in scheduled tasks since they are hidden when accessing the record form in the "Tasks" table.
[22466] An error occurs when creating a dataspace programmatically in a sub-session.
[22770] When a perspective is activated for the "owner" built-in role, it becomes unavailable for other profiles.
[22771] Specific service permissions can be erroneous for an owner profile after a dataspace creation.
When there are several permission records defined for a profile in the parent dataspace: if a service permission is set to "default (enabled)" for one of these records and all the others are set to "disabled", the service permission computed in the children dataspaces for the owner profile is set to "disabled" instead of "enabled".
[23037] Since 5.6.1, it is no longer possible to set a value for a field with no write permission in handleNewContext()
.
Since bugfix #13813 (delivered in 5.6.1), it is no longer possible to set a value for a field with no write permission in handleNewContext()
.
This prevents the record duplication when a user has read-only or hidden fields, even by using triggers.
[23421] An error occurs when creating a dataspace after removing a specific declaration from module.xml
.
An error occurs when creating a dataspace after removing a specific user service declaration from module.xml
.
[23805] Records in the 'Users' table are incorrectly duplicated.
In the 'Users' table under Directory in the Administration, when duplicating a record, the values under 'Built-in roles' and 'Specific roles' are not duplicated.
[24106] The 'Compare' service should not be displayed in the toolbar of the 'Tabular view row'.
The 'Compare' service should not be displayed under the 'Action' menu of each row.
[24168] Permissions are evaluated on the wrong table when working with associations based on a link table.
Permissions are evaluated on the wrong table when working with associations based on a link table in cases where the target table of the association is in another dataspace.
[24227] The 'View history' service still displays on the record form although it is set to 'disabled' in 'Common services'.
After defining permissions for a user on a dataset and setting the 'View history' service to 'Disabled' in 'Common services', this service is still available on the record form.
[24336] A user with read-only access to a table is still able to modify this table.
Currently, low level permissions for table actions CREATE, OVERWRITE, INHERIT, OCCULT and DELETE does not take into account the user write permission on the table.
This check is only performed by the related built-in user service when called in the user interface.
This issue has the following consequences:
- A programmatic procedure can perform these table actions, even when the related session has no write permission to the table. This also concerns table triggers.
- Data services can perform insert and delete on readonly tables.
- Public API methods from SessionPermissions
also ignore the user write permission to the table, so fixing the issue will change the result of these methods. A backward compatibility note is required here.
[24555] Dataspace creation fails in certain conditions resulting in a "Service associated module could not be found" error.
When permissions have been set upon child dataspace creation for dataspace services of a missing module, an error occurs when creating a dataspace, resulting in the following error message: "Service associated module could not be found".
[24657] Updating a user via the API corrupts the password.
DirectoryDefaultHelper.newUser(DirectoryDefaultHelper.findUser(UserReference, DirectoryDefault), DirectoryDefault)
encrypts the already encrypted password of the user.
[25129] Erroneous permission resolution for the descendants of a terminal node.
When resolving permissions on nodes which are under a terminal node, access rights defined on this terminal node should be returned. Currently, access rights for the table node are returned if the terminal node is under a table node. If not, the default access right is returned.