SmartClient V14.0

Released: Mar 29, 2025

V14.0 中的更新

特性

  • Added automatic aggregation and grouping for generic (custom) dataSources.
  • Improved relation-field editing and display:
    • When editing a field that is marked as multiple:true and has a foreign key (a one-to-many relation field), default to the MultiPickerItem as editor for the field.
    • Improved detection of relation fields that are not multiple:true (one-to-one/many-to-one relation fields) to ensure a SelectItem is shown as the default editor for such fields.
    • Ensured that clientOnly dataSources with multiple:true foreign key relationships and multiple:true includeFrom fields pick up the field value from the set of related records as an array, matching behavior for SQL-backed dataSources.
    • Backcompat Notes: This change ensures that a field with a specified foreign key referring to a field within another dataSource will show an appropriate editor for a relation field - either a SelectItem or a MultiPickerItem depending on whether the field is marked as being multiple:true. Prior to this change, rather than checking dsField.foreign key and dsField.multiple, a SelectItem would be shown for any field with dsField.displayField specified. In effect this would commonly behave the same way as the new code for fields that are not multiple:true but there are some differences. Developers wishing to avoid showing these default editors may specify an explicit editorType for the field in question.
  • Added a mechanism to limit access to Realtime Messaging on a per channel basis.
  • Added support for ValuesManager contributing the full set of values to RuleContext as <ds>.
  • A number of changes around MultiPickerItem, SetFilterItem and editing of dataSource relation fields:
    • Added new attribute dynamicForm.multipleRelationFieldEditorType "MultiPickerItem".
    • For relation fields within a dataSource where multiple=true, this editor will be used by default for editing. This means using a multipicker item when editing one-to-many or many-to-many relation fields by default.
    • Added new attribute dynamicForm.largeValueMapFilterEditorType "SetFilterItem".
    • For valueMapped fields with many entries, or fields deriving their options from an optionDataSource, this editor will be used in SearchForms or filter editors when generating filter criteria for the field. See also the related "largeValueMapFilterEditorThreshold" property - this governs how many options a valueMap will hold before switching from a SelectItem to this editorType in a SearchForm.
    • Note: This editor will only be used if the SearchForm target dataSource supports inSet/notInSet filter operators.
    • Changed FilterBuilder to use the MultiPickerItem when generating inSet/notInSet clauses for relation fields. Uses standard single select item for other filter operators (equals, etc).
    • Backcompat Notes: The default editor for relation fields (dataSource fields defined with a foreign key), and the default filterEditor for relationFields and fields with specified valueMap have changed to make use of MultiPickerItem and SetFilterItem where possible.
  • You can now allow Timeline Zone canvases to be limited to a particular horizontal lane, by setting zone.lane.
  • Added new Calendar attributes fixedEventHeight and minLaneHeight, which allow Timeline events to be rendered at a fixed height rather than a portion of their Lane-height, and clamp new Lane-autosizing behavior to a minimum height.
  • Added new API, Page.isDarkSkin().

修补程序

  • Fixed some cases where MultiPickerItem would fail to show correct displayField for options derived from an option dataSource.
  • Fixed support validators with applyWhen criteria when defined in the DataSource but not used on any member forms in a ValuesManager.
  • Fixed handling of multi-tenant DS lookup from a FileSource DataSource if the server config property datasources.enableUpToDateCheck is set false (e.g. in production).
  • Fixed a couple of issues regarding MultiPickerItems deriving their options from an explicit valueMap.
  • Fixed an issue where a SetFilterItem or MultiPickerItem for a dataSource field with a valueMap could fail to show the correct options in its drop-down.
  • Fixed issue with copy/pasting nodes in an EditContext.
  • Fixed showEventDialog() running twice on a click in a Calendar MonthView cell.
  • Fixed selection-checkboxes not showing up in TreeGrids in some skins.
  • Fixed failure of an unexpected "date" validator on MiniDateRangeItems.
  • Fixed a 1-3px misalignment of the "Select All" checkbox in grid-headers in some skins.
  • Fixed over, selected and focused stateful styles for ToolStripButtons in the Shiva skin.
  • Fixed an issue where some interactions with components that showed a hover could lead to a JS error if the Forms module was not loaded.
  • Fixed an issue where printHTML could render incorrectly in a large, scrolled ListGrid, if printMaxRows was exceeded.
  • Fixed a bug where, for a CheckboxItem with labelAsTitle set and in a form with top-oriented titles and "*"-sized columns, title-height was miscalculated, resulting in extra space below the checkbox image.
  • Fixed an issue where rollover controls could appear slightly misaligned vertically with certain user interactions.
  • Fixed so that ToggleSwitch.valueChanged() only fires from user-interactions.
  • Fixed an issue where a read only multiPickerItem with static appearance would fail to vertically center its text.
  • Reinstate default value for "float"-type fields during SQL table creation.
  • Fixed the value of ToggleItems not being properly updated in form.values in some cases.
  • Fixed issue where a DataSource's database connection was getting unexpectedly closed in some cases.
  • Recompiled the Shiva skin's live CSS file, which is used by the Skin Editor.
  • If a MultiPickerItem or SetFilterItem is deriving its options from a valueMap, ensure that explicit null may be selected if allowEmptyValue is true.
  • Fixed an issue where the MultiPickerItem with a displayField specified and deriveUniqueValues set to true could issue an ungrouped fetch against the option dataSource, potentially returning a large number of records from the dataSource in an attempt to pick up the displayField value for the selected value(s) in the item.
  • Fixed range-validation for equal To and From fixed Date instances in DateRangeItem.
  • Fixed a bug where applying an icon to a ToolStripButton after draw() could include "images/" twice in the path.
  • Fixed an issue where HiliteEditor would render regular Hilites as if they were advanced.
  • Fixed an issue where HiliteEditor didn't properly handle isOneOf criteria for text fields.
  • Fixed sizing and styling for the text and icons in Advanced Hilite-Rules.
  • Fixed issue for singleCellValue records in ListGrids in regards to ignoring special styles from the field, including the expansionField.
  • Fixed Timeline.canReorderLanes.
  • Fixed issue to ensure correct handling of includeFrom fields that are marked multiple:true but are not relation fields.
  • Fixed an issue where embedded components in Menus could be mis-positioned on some mobile devices.
  • Demoted an overly aggressive warning log to info level.
  • Fixed an order-of-operation bug that was causing DSResponse.getData() to return null in a very specific, custom edge case scenario.
  • Fixed unexpected size of FormItems with a cellStyle that applies horizontal padding.
  • Fixed a regression where a CalendarEvent starting at exactly the visible startDate of the monthView would not be rendered as a link in that view.
  • Fixed issue where a menuItem with embeddedComponent would be misplaced in the toolstrip.
  • Fixed issue where after an embeddedComponent item is shown in the menu it will not show inline.
  • Fixed FilterBuilder so that validOperators applied directly to a foreign key field or its simpleType are respected in the operator picker - if no validOperators are provided, a limited operator-list applicable for foreign keys is still applied.
  • Fixed a regression that meant that RadioGroupItem.textBoxStyle no longer affected the value-text in some skins.
  • Fixed a bug where setting the Timeline-specific property showZones on a regular Calendar would cause a crash as views were rendered.
  • Fixed a bug where entering a manual URL into an ImagePicker without first selecting one in the icon-grid would crash comparing your entered value against a null icon-record.
  • Fixed a crash in the Skin Editor caused by outdated metadata.
  • Exposed DataSourceField.storeWithHash value "none" to specify that no hash should be used, where if left null a default algorithm might be applied (such as if the DataSourceField has type "password", which defaults to the "bcrypt" algorithm).
  • Made the AI Docs a bit clearer about what's required to enable AI as a feature.
  • Clarified that ListGrid.dataArrived() is called for data arriving from DataSource.