2.0.11
Key updates January, February 2025
CXBOX (Demo)
Added: GroupingHierarchy widget - support for aggregate rows
We have added aggregate rows to display the aggregates on hierarchy levels. You can configure in widget.json -> options -> groupMode: compact/ aggregate
.
With groupMode: aggregate
the widget displays aggregate rows at the grouping field level.
With this mode you can:
1) Define the columns to display aggregate values in
2) Specify at which hierarchy levels aggregates should appear
3) Select an aggregation function for calculations. Currently, we support standard functions: sum, min, max, avg.
4) Configure which columns will be used for aggregation calculations, including values from other columns.
Info
We will soon provide a detailed description of Aggregate mode in the updated GroupingHierarchy
article (Aggregate section)
With groupMode: compact
the widget appears in a compact view, where grouping fields and their content are displayed on the same row.
Added: waitUntil and drillDownAndWaitUntil PostAction
waitUntil
This mechanism allows the program to wait until a certain condition is met. For example, "Wait until the task status becomes 'Done'."
This is useful when you have long-running operations (e.g., waiting for a response from a third-party system), and you want the user to see what’s happening and know when everything is finished.
drillDownAndWaitUntil
This is a mechanism that allows the program to navigate to another screen and then wait until a specific condition is met. For example, "Go to this screen, wait until the status becomes 'Done', and show the user what’s happening."
This is helpful in scenarios where you need to navigate to another screen (e.g., to view details or results).
Added: Pie1D widget - New widget type!
We have added a new widget type Pie1D
to display data in a circular format.
Key features include:
- Inner radius control
- Tooltips' display
- Legend display
- Center text/aggregate display
Functionality includes:
Click on a segment to drilldown to the filtered data displayed in a table.
Switch from chart mode to table mode to view data in a tabular format.
Click on legend values to add or remove segments from the chart. The aggregate value in the center of the chart will be recalculated as you interact with the legend values.
Added: Column2D widget - New widget type!
We have introduced a new widget type Column2D
to display data using X and Y axes.
Key features include:
- Axes' scale/ step control
- Grouped bars' display
- Tooltips' display
Functionality includes:
Click on xAxis values to drilldown to the filtered data displayed in a table.
Switch from column mode to table mode to view data in a tabular format.
Click on legend values to add or remove bars from the plot.
Added: AssocListPopup widget - support for creating a row
Now, you can create a new row directly in the AssocListPopup
. When you click the Add button, a new row appears inside the popup, allowing you to enter data and immediately select it as a value for a field.
Added: Info widget - consistent field highlighting
We have improved the logic of field highlighting in the Info widget. Hidden fields are not highlighted at all.
For visible fields, a line is added above and below, except:
- The first row (no line on top)
- The last row (no line at the bottom)
Added: inlinePickList field - restrictions in FormPopup widget
We have added a restriction for the inlinePickList field in FormPopup to prevent opening a popup within a popup, as this functionality is not supported. The folder icon has been removed, so the popup can no longer be triggered. All the available values will be displayed in the dropdown list.
Info
We recommend to use InlinePickList (and to avoid pickList) in FormPopup, as inlinePickList displays values in the dropdown list, while the popup functionality for pickList will not work due to the restriction.
Added: FormPopup widget - improved required fields' handling
We have updated the logic for checking required fields when they are present in the FormPopup: the required fields in the FormPopup and on the main form are now validated separately.
Added: SIEM
-
Added login system logging.
-
For
invoke
events, log the action name. -
Log access
Responsibility View
иResponsibility Action
changes in SIEM (with WARN level).WARN o.d.c.c.extension.siem.SecurityLogger : SIEM event. Operation: UPDATE, endpoint (resource): responsibilities (1100342), user: DEMO (CXBOX_USER,BUSINESS_ADMIN), session: F2DBA42C1BAED2599339101D5FA3280F, ipAddress: 0:0:0:0:0:0:0:1, data: {"id":"1100342","vstamp":1,"internalRoleCD":"BUSINESS_ADMIN","view":"meetingview","viewWidgets":[{"id":"meetingViewButtons","value":"'/api/v1/../meeting' by widget 'meetingViewButtons'","options":{}},{"id":"meetingEditViewHeader","value":"'/api/v1/../meetingEdit' by widget 'meetingEditViewHeader'","options":{}},{"id":"meetingDocumentsFormForList","value":"'/api/v1/../meetingDocumentEdit' by widget 'meetingDocumentsFormForList'","options":{}},{"id":"meetingView","value":"'/api/v1/../meeting' by widget 'meetingView'","options":{}},{"id":"meetingDocumentsList","value":"'/api/v1/../meetingDocumentEdit' by widget 'meetingDocumentsList'","options":{}},{"id":"meetingViewClientInfo","value":"'/api/v1/../meeting' by widget 'meetingViewClientInfo'","options":{}},{"id":"SecondLevelMenu","value":"'/api/v1/../null' by widget 'SecondLevelMenu'","options":{}},{"id":"meetingViewResult","value":"'/api/v1/../meeting' by widget 'meetingViewResult'","options":{}}]}
In the project code, in SiemCrudmaEventListener, you can customize the settings:
-
Configure log only the IDs:
public static final boolean SIEM_CONFIG_LOG_DATA_ID_ONLY = false;
-
Configure which CRUD-MA actions to log:
public static final Map<CrudmaActionType, Boolean> SIEM_CONFIG_LOG_CRUDMA_ACTION_TYPES = Map.of( CrudmaActionType.INVOKE, true, CrudmaActionType.FIND, true, CrudmaActionType.GET, true, CrudmaActionType.UPDATE, true, CrudmaActionType.PREVIEW, false, CrudmaActionType.DELETE, true, CrudmaActionType.COUNT, false, CrudmaActionType.ASSOCIATE, true, CrudmaActionType.META, false, CrudmaActionType.CREATE, true );
-
Configure which BC + CRUD-MA pairs to log with a WARN level (by default, it is set for administration screens: responsibility and action responsibility):
public static final Map<EnumBcIdentifier, List<CrudmaActionType>> SIEM_CONFIG_LOG_LEVEL_WARN = Map.of( CxboxRestController.responsibilities, Arrays.stream(CrudmaActionType.values()).filter(e -> !e.isReadOnly()).toList(), CxboxRestController.responsibilitiesAction, Arrays.stream(CrudmaActionType.values()).filter(e -> !e.isReadOnly()).toList() );
Fixed: dictionary field - filtering logic
We have improved the filtering logic for Dictionary fields. Now, when all selected values are unchecked and Apply is clicked, the filter is properly cleared, and all data is displayed without requiring an additional Clear Filter action.
Fixed: consistent handling of field keys
We have updated the logic for processing field keys. Previously, widget.json -> fields -> key: number
would lead to errors in data handling on the frontend, because the "key" value was misinterpreted as a custom type. Now, the new logic prevents errors and guarantees proper interpretation of fields.
Other Changes
CXBOX (Core Ui)
We have released a new CORE UI version (2.5.0).
Other Changes
CXBOX 4.0.0-M15 (Core)
Added: @RequiredArgsConstructor
Use Lombok’s @RequiredArgsConstructor and @Getter (meta,dao) for AnySourceVersionAwareResponseService and @Getter (meta) VersionAwareResponseService instead of explicitly writing a constructor. This makes the code cleaner and reduces boilerplate.
@SuppressWarnings({"java:S1170"})
@Service
@RequiredArgsConstructor
public class ResponsibilitiesActionAdminService extends
VersionAwareResponseService<ResponsibilitiesActionAdminDTO, ResponsibilitiesAction> {
private final MetaAdminServiceExt metaAdminServiceExt;
private final JpaDao jpaDao;
private final CxboxFileService cxboxFileService;
@Getter(onMethod_ = @Override)
private final Class<ResponsibilitiesActionAdminMeta> meta = ResponsibilitiesActionAdminMeta.class;
@Service
public class ResponsibilitiesActionAdminService extends
VersionAwareResponseService<ResponsibilitiesActionAdminDTO, ResponsibilitiesAction> {
private final MetaAdminServiceExt metaAdminServiceExt;
private final JpaDao jpaDao;
private final CxboxFileService cxboxFileService;
public ResponsibilitiesActionAdminService(MetaAdminServiceExt metaAdminServiceExt, JpaDao jpaDao,
CxboxFileService cxboxFileService) {
super(
ResponsibilitiesActionAdminDTO.class,
ResponsibilitiesAction.class,
null,
ResponsibilitiesActionAdminMeta.class
);
this.metaAdminServiceExt = metaAdminServiceExt;
this.jpaDao = jpaDao;
this.cxboxFileService = cxboxFileService;
}
Other Changes
We have released two CORE versions! See cxbox 4.0.0-M14 changelog and cxbox 4.0.0-M15 changelog.
CXBOX documentation
Added: waitUntil and drillDownAndWaitUntil
We have added a full description of waitUntil and drillDownAndWaitUntil postActions
Added: pickListPopup widget - standard actions and additional properties description
We have provided a full description of pickListPopup widget's standard actions and additional properties.
Added: assocListPopup widget - standard actions and additional properties description
We have provided a full description of assocListPopup widget's standard actions and additional properties.
Added: filtration - by personal filter group
We have added a description of filtration by personal filter group.
Added: sorting - field level
We have updated the sorting article with the information on fields' sorting.
Added: multipleSelect field - method update
We have updated the article on multipleSelect field and provided the information on setConcreteValues
method.