Skip to content

2.0.9

Key updates November, December 2024

CXBOX (Demo)

Added: AdditionalList widget - new display mode

Now, Additional List widget supports two display modes.

  • (NEW) Default: each row in Additional List is rendered using the default List-like style.
  • (OLD) If options -> read is populated with AdditionalInfo widget name: each row is rendered as specified AdditionalInfo widget.

additionalListNoReadWithTitle.png

additionalListWithRead.png

Added: Notifications - drilldown to objects

We have enhanced the Notifications popup to support multiple drilldown links.

  • The notification banner now displays number of links:

notificationBannerAfter.png

notificationBannerBefore.png

  • Clicking the bell icon opens the Notifications popup, where all hyperlinks to related objects are listed.

notificationsBellLinks.png

notificationsBellNoLinks.png

Added: FormPopup widget - gridWidth support

We now support gridWidth for FormPopup. You can now directly indicate the width using view.json -> widgets -> gridWidth and the width now dynamically adjusts based on the following factors:

  • The state of the menu (collapsed or expanded)

formPopupGridWidth12.png

formPopupGridWidth12MenuCollapsed.png

  • The presence or absence of the additional widget on the view.

formPopupGridWidth12.png

formPopupGridWidth12WithAdditional.png

These changes ensure that the gridWidth option for usual widget and for FormPopup widget has the same meaning (e.g. generates widgets of same width).

Note! Before this release value of gridWidth was ignored, e.g. popup widget was constant. After release one can set gridWidth = 9 to remain old popup sizes.

See the detailed description in the updated formPopup article.

Added: Dictionary field - Administration UI

  • A new Administration Screen has been added to the UI, allowing you to configure dictionaries directly from the interface
  • Changes made through the UI are applied instantly via Clear Cache (experimental feature, does not support cluster)
  • You can now export dictionary data to a CSV file using the Export. Exported file format is same as used in Liquibase migration (see next paragraph) which makes migration process easier without any manual adjustments
  • A new CSV migration with Liquibase - ensures effortless pre-filling and data transfer between environments (production ready)

dictionaryAdministration.png

See details in the updated Dictionary article:

  • section Administration Dictionary
  • How to add? sections in this article now have snippets with Dictionary usage (instead of deprecated LOV)

Added: Role-Based Model - MultiRole Support

BEFORE (multi-role-enabled: false):

  • Login Behavior. The backend returned an activeRole parameter indicating the user's active role (e.g., "activeRole": "CXBOX_USER").
  • UI Behavior. The UI displayed a checkbox for the active role, and users can switch roles.

AFTER (multi-role-enabled: true):

  • Login Behavior. The backend sends activeRole: null, and the UI ignores this value. All roles available to the user are sent in the roles list. The content of requests includes all views accessible by any of the user's roles. If the view is available for at least one role, it means that the view is available for user in the multirole mode.
  • UI Behavior. Checkboxes for all roles are displayed but are disabled, preventing role switching. Requests to the backend for role switching are no longer triggered.

multiroleTrue.png

multiroleFalse.png

Added: Role-Based Model - View Responsibilities Administration UI

BEFORE (view-allowed-roles-enabled: true):

  • view responsibilities are configured in view.json -> rolesAllowed.
  • Database management of the Responsibilities table is only possible through view.json.

AFTER (view-allowed-roles-enabled: false):

  • A new Administration Screen has been introduced in the UI for configuring view responsibilities
  • Any updates made in the UI are applied instantly via Clear Cache (experimental feature, does not support cluster)
  • You can now export view responsibilities data to a CSV file using the Export. Exported file format is same as used in Liquibase migration (see next paragraph) which makes migration process easier without any manual adjustments
  • A new CSV migration with Liquibase - ensures effortless pre-filling and data transfer between environments (production ready)

viewResponsibilitiesAdministration.png

Added: Role-Based Model - Action Responsibilities Support

BEFORE (corresponds to widget-action-groups-enabled: true):

  • UI Layer: Action visibility (e.g., buttons on widgets) is managed in widget.json -> actionGroups -> include.

AFTER (widget-action-groups-enabled: false)

  • The UI now includes an Administration Screen for configuring action responsibilities directly. Additionally, a database table (responsibilities_action) has been introduced to store action responsibilities data.
  • Any updates made in the UI are applied instantly via Clear Cache (experimental feature, does not support cluster)
  • You can now export action responsibilities data to a CSV file using the Export. Exported file format is same as used in Liquibase migration (see next paragraph) which makes migration process easier without any manual adjustments
  • A new CSV migration with Liquibase - ensures effortless pre-filling and data transfer between environments (production ready)

actionResponsibilitiesAdministration.png

We have introduced automatic migration of widget.json -> actionGroups -> include configuration to responsibilities_action. Application fills table on start based on widget information if widget-action-groups-enabled: true. Only widget.json -> actionGroups -> include is supported - one should migrate manually if widget.json -> actionGroups -> exclude is used

Also, two migration modes introduced

If you indicate widget-action-groups-compact: true the responsibilities_action data will be filled in a compact way. Under this parameter, the asterisk (*) means that the responsibility is relevant for all roles and all views. This is especially helpful during migration process so that you don't have to handle with numerous data rows and just display them in a collapsed way instead.
compactTrue.png

If you indicate widget-action-groups-compact: false the data will be filled for each role and each view separately.
compactFalse.png

Added: suggestionPickList field - backend query on click

We have optimized the functionality of suggestionPickList by removing the character limit for backend queries. Now, when users click on the field, a request is sent to the backend immediately, displaying all available data without the need to type any characters.

suggestionPickListQueryOnFirstClick.gif

Added: Notifications - Bearer Token authentication for WebSockets

We have added support for Bearer token authentication when connecting to WebSocket endpoints for notifications. Now, the Bearer token is included in the request header for secure access to the following endpoints: /api/v1/websocketnotification/ and /api/v1/notification.

Added: Drilldown - tooltip

drilldowns now has tooltip that appears on hover, offering two options:

  • Open in a New Tab: Open the drilldown link in a new browser tab.
  • Copy Link Address: Copy the drilldown link to the clipboard.

Feature can be turned on with cxbox.ui.drill-down-tooltip: newAndCopy.

tooltipTrue.png

tooltipFalse.png

Limitations:

  • drilldowns of to-view-with-fields-filtration type are currently not supported for the "Open in a New Tab" option.
  • tooltip is not yet supported for the Stats Block widget.

Added: FormPopup widget - forceActive

We have introduced the forceActive feature for FormPopup, allowing a backend request to be triggered before the modal window is opened. This ensures that the data within the popup is dynamically updated before being displayed, providing users with the most up-to-date information.

formPopupForceActive.gif

Fixed: List widget - improved inline create logic

We enhanced the behavior of inline creation in List widgets. When adding a new row, it now automatically opens in edit mode, allowing users to immediately input data without extra clicks.

inlineCreate.png

Other Changes

see cxbox-demo changelog

CXBOX (Core Ui)

We have released a new CORE UI version (2.4.2).

Other Changes

see cxbox-ui changelog

CXBOX 4.0.0-M12 (Core)

Added: Dictionary class - LOV (deprecated) replacement.

We have replaced the LOV strongly typed Dictionary class for managing configurable dictionaries. New Dictionary class uses specific subclasses to represent different types of dictionaries. It also has unified handling of dictionaries across Entity and DTO layers, ensuring consistency in compile time. Also, we enabled storing constants within subclasses for streamlines use in business logic.

All details are provided in the updated Dictionary article (see "Dictionary" tabs in all examples).

dictionaryTab.png

Other Changes

Breaking changes have appeared! See cxbox changelog

CXBOX documentation

Added: Grouping Hierarchy

We have added a full description of Grouping Hierarchy.

Added: Export Excel

We have provided a detailed description of Export to Excel function.

Added: Page Limit

Default limit page (available for List and Grouping Hierarchy) is now described in the article.

Added: Checkbox - placeholder

See all the details about a Checkbox placeholder in our updated article.

Added: Customization of displayed columns

We have described the process of customization of displayed columns.

CXBOX plugin

New: Intellij 2024.3+ support

Intellij 2024.3+ support

New: Autocomplete, Ctrl-click navigation and inspection for @SearchParameter

Autocomplete, Ctrl-click navigation and inspection for @SearchParameter name parameter containing path to Hibernate entity field. Inspection highlights 2 simple but usefully cases: not existing fields references (most common error) and not finished path (expression not ending with hibernate @Column field)

  • Autocomplete: autocomplete.gif

  • Ctrl-click navigation navigation.gif

  • Inspection inspection.gif

  • Refactoring refactor.gif

New. Actions in .widget.json

Autocomplete, Ctrl-click navigation and inspection for Actions in .widget.json -> options -> actionGroups -> include. Now available without downloading sources with maven!

Plus icon and code generation

We can now generate java boilerplate for new action and navigate to it immediately! actions.gif

Actions - string in .widget.json support:
Ctrl-click navigation

Service -> .widget.json, .widget.json -> Service: navigation_action.gif

Autocomplete

autocomplete_action.gif

Inspection

inspection_action.gif

Refactoring

refactoring_action_string.gif

Actions - Enum in .widget.json support:
Ctrl-click navigation.

Service -> .widget.json, .widget.json -> Service: navigation_action_enum.gif

Autocomplete

autocomplete_action_enum.gif

Inspection

inspection_action_enum.gif

Refactoring

refactoring_action_enum.gif

Actions - java constant in .widget.json support:
Ctrl-click navigation

Only .widget.json -> Service : navigation_action_java_const.gif

Autocomplete

autocomplete_java_const.gif

Inspection

inspection_java_const.gif

New. Inspection viewName

Inspection that checks viewName is unique per screen unique_view.png

Inspection that checks viewName is unique per screen (.screen.json -> navigation correctness), when type = standard is set (we skip this checks in other cases for backward compatibility with project customizations). We check:

New. Inspection that checks popupBcName in widget.json -> fields

picklist.png

Inspection that checks popupBcName in widget.json -> fields must be child for owning widget bc. Inspection checks this only for fields with type picklist

New. Inspection that checks actionGroups in widget.json

action_group.png

Inspection that checks actionGroups in widget.json location (e.g. it is located in options tag)

Other Changes

Other minor fixes: when AssocListPopup is code generated title and name order was reverted; when multipleSelect is code generated @CollectionTable name is made more unique (field name + bc); title required inspection is turned off - now we have widgets, that use empty titles by design