Release Notes > Release Notes for ThingWorx Platform 9.4 > What's New in ThingWorx Platform 9.4.0
What's New in ThingWorx Platform 9.4.0
Platform
File repository
Added a new functionality to upload and extract the content of a ZIP file to a file repository. For more information, see Uploading and Extracting a zip File to a File Repository.
Persistence provider
Added new configurations and services to log the stacktraces for all threads which are consuming the database connection. For more information, see Persistence Provider Services.
Thing event
A new event DynamicSubscriptionInvalidated is added. For more information, see Thing Events.
Service parameter
A new parameter isSortFirst is added to the QueryImplementingThings service. For more information, see Using the QueryImplementingThings Service
RedHat9 prerequisites
Added prerequisites for running the installer over RedHat9 to prevent missing of UI items. The user will now see essential UI items, such as the PTC logo, buttons, and so on. For more information, see ThingWorx Foundation Installer for Linux.
Installation error message
Added an error message guiding the user to the installer logs if the installation fails during an upgrade.
Permissions
Gave the user full control permissions to the local user account of the virtual machine on the tomcat9.exe file, and set the user as the logon user in Windows Apache Tomcat Service. This prevents a deployment failure for the second ThingWorx instance. For more information, see ThingWorx Foundation File Storage.
Configuring the AKKA TLS Communication for ThingWorx
Added a new topic, Configuring the AKKA TLS Communication for ThingWorx. This new topic guides the user through configuring AKKA in a Docker compose environment. For more information, see Configuring the Akka TLS Communication for ThingWorx.
Configuring SSL/TLS for AKKA
Added a new topic, Configuring SSL/TLS for AKKA. This new topic guides the user through configuring SSL/TLS for AKKA in an on-premise environment. For more information, see Configuring SSL/TLS for Akka.
Installation step
Added an installation step to provide full permissions if running the installation on Red Hat Linux. This will enable the user to deploy ThingWorx using the most up-to-date versions of supported third-party software. For more information, see Configuring ThingWorx Foundation for Clustering.
Added and updated installation steps for ThingWorx Ubuntu installation to prevent an on-premise deployment failure. This will enable the user to deploy ThingWorx using the most up-to-date versions of supported third-party software. For more information, see Install Java, Apache Tomcat, and ThingWorx.
Updated instructions
Updated instructions for Docker Files, which specify the Ubuntu version to use as BASE_IMAGE. For more information, see Setting Up ThingWorx Docker Builds.
Influx2PersistenceProviderPackage Improvements
Influx2PersistenceProviderPackage improvements
Modified writeAPIs to avoid a data loss at a high-speed data ingestion with Influx2PersistenceProviderPackage. PTC makes sure that no data loss occurs if the hardware or software limits are not reached.
Improved log information to make sure that all value-stream write errors are logged to ThingWorx error log with the failure reason.
Corrected Number of failed batch writes to stream and Number of stream entries that have been performed value stream monitoring metrics to count correctly the failed batch writes.
Added 2 new metrics for better monitoring and fine-tuning of batch size configuration in Influx2PersistenceProviderPackage: Number of stream entries sent per batch to write to database and Time consumed (nanosecond) per batch to write to database.
Modified a data stream import process to make sure that all data is successfully written by controlling the imported data to InfluxDB Cloud when data limits are reached.
Simplified the Influx2PersistenceProviderPackage configuration by obsoleting the Batch Size and Flush Interval options previously used by the asynchronous API. These remain in the configuration table for backward compatibility but have no effect on the functionality.
Provided the necessary control over the value stream queue and batch sizes in Influx2PersistenceProviderPackage configuration. Now the existing Max Wait Time Before Flushing Stream Buffer (millisec), Max no. of Items Before Flushing Stream Buffer, and Max number of Value Stream Writes in Process Block options are in direct control over the batch size and flush interval.
Data Export is now supported with Influx2PersistenceProviderPackage improvements.
* 
For users using InfluxDB OSS 2.0 (leveraging Influx2PersistenceProviderPackage), to upgrade to ThingWorx 9.4.0 and later, the user must first upgrade to ThingWorx 9.3.8 to move to InfluxDB OSS v2.6 as an export is required prior to the upgrade to InfluxDB v2.6.
Increased reliability by not creating unnecessary RxNewThreadScheduler threads that were slowing ThingWorx server.
Configuration requirements when working with InfluxDB Cloud
To get better throughput with InfluxDB Cloud it is recommend to increase the Number of Processing Threads to 20 to reach a throughput of 40,000 wps, and Time for Write Timeout to 20 seconds.
PTC will work with InfluxData on the InfluxDB cloud performance and reliability, and provide configuration details for achieving desired throughput with less threads.
High Availability (HA) Clustering
High Availability (HA) clustering
Distributed Subscription Processing at Scale
From ThingWorx 9.4 and later, PTC provides the ability to distribute subscriptions across ThingWorx cluster nodes. This is useful for distributing the processing load across cluster nodes to achieve scale and better resource utilization when an event triggers many instances of subscriptions. For example, timer and scheduler-based subscriptions. You can define whether a subscription is executed in distributed mode (horizontally scalable across the nodes) or not by selecting the Distribute checkbox under the Subscription tab.
The distributed subscriptions approach only applies in High Availability environments with multiple nodes. The standard procedure for installing a high availability (HA) system enables this capability and does not require additional installation procedures. For more information regarding related configuration information, see the following:
For on-premises, see Configuring SSL/TLS for Akka.
For the Docker environment, see Configuring the Akka TLS Communication for ThingWorx.
Mashup Builder
New widgets
Combo Chart—Visualize data using a combination of bars, lines, shaded line, and data point visualizations. This widget Replaces the legacy Label Chart widget. For more information, see Combo Chart Widget (Themable).
Pie Chart—Visualize data from multiple categories by dividing a circle into proportional segments. You can apply padding, specify start and end angles, and apply state formatting. For more information, see Pie Chart Widget (Themable).
User interface
Enhanced the user interface of the localization token picker on the Properties panels. You can now filter tokens and preview token values in multiple languages.
For more information, see Widget Localization.
Style themes and style properties
Removed redundant style properties for Bar, Line, Pareto, Waterfall, Schedule chart widgets. For more information, see Removed Style Properties.
Updated the style theme preview mashup by adding the Menu Bar, Tree Grid, Pie Chart, and Combo Chart widgets. You can now preview style theme changes to these widgets on the Styles tab of style theme entities.
Mashup migration
Added review and summary tabs to the Mashup Migration dialog box. You can now review the list of affected widgets and functions before migrating. For more information, see Migrating a Mashup.
Added support for migrating non-secure functions using the Mashup Migration dialog box.
Moved the following widgets from the Legacy category to the Standard category:
Blog
Wiki
Tag Cloud
Preferences
In future releases of ThingWorx, only widgets with a standard replacement will be moved to the Legacy category.
PTC will keep legacy widgets available in ThingWorx and not require any migrations through April 2024. You can migrate from legacy widgets to their replacements at your pace. To benefit from the latest features and enhancements, PTC strongly recommends that you use standard widgets when creating new mashups. You can migrate legacy widgets in your current mashups using the Mashup Migration dialog box. For more information, see Legacy Widgets and Layouts and Migrating Legacy Mashups.
Mashup layouts
Added a Beta enhanced positioning mode that replaces legacy uses of absolute positioning with relative positioning. This mode fixes layout issues where responsive widgets may not display properly at run time. For more information, see Using Enhanced Positioning within Responsive Layouts in ThingWorx 9.4 (Beta).
* 
The Collection widget may not display properly when this mode is enabled.
Mashup runtime
In previous versions of ThingWorx, Composer and Mashup Builder used the Bluebird JavaScript library as a polyfill for promises. This library is now removed because modern browsers and Node.js version 10 or higher include native support for promises that is functional and performant. Custom widgets and extensions that use this library may not work properly when you upgrade to ThingWorx 9.4.
Dynamic subscriptions
Added a Show Subscription Messagecheck box to the Data Properties panel of the GetProperties service. You can select this check box to notify users when a subscription becomes invalid at runtime.
Functions
Added a Data Export function that replaced the legacy Data Export widget. You can now export data to a CSV file using any type of event in a mashup.
For more information, see Data Export.
Web component SDK
Lit has now replaced Polymer as the main framework used within the SDK library. Multiple web components within the SDK are migrated to use Lit.
Updated the web component and widget extension samples that are used in the Getting Started tutorial. You can now create widget extensions using Lit web components.
For more information, refer to the ThingWorx Web Component SDK Help Center.
Widget focus and accessibility
The widget focus box is now displayed only when using the keyboard to interact with widgets at runtime. In previous versions, the focus box is displayed when using the mouse or the keyboard. You can configure this behavior using the LegacyFocus property on the mashup. For more information, see Enabling Legacy Focus in a Mashup.
Added support for applying auto focus when a mashup is loaded. You can apply auto focus to one of the following widgets in a mashup: Check Box, Chip-based Data Filter, File Upload, Link, Text Area, and Text Field widgets. For more information, see Configuring Auto Focus.
To improve the user experience, some widgets now behave differently when using the keyboard to interact with a mashup. For more information about the changes, see Changes to Keyboard Navigation in ThingWorx 9.4 and Later.
Chart widgets (Themable)
Added a SampleSize property that enables you to configure data sampling for the Line Chart widget. For more information, see Configuring Data Sampling for Charts.
Added properties that enable you to customize the default messages and icons of various charts, such as Bar Chart, Line Chart, and Schedule Chart. For more information, see Customizing Error and Loading Messages for Charts.
Updated the chart anatomy to include a toolbar region that contains actions such as buttons that are used to zoom or reset the chart at run time.
Date Time Picker widget
Added validation properties that enable you to set the maximum number of days users can select when range a selection is enabled.
Dropdown widget
Added ListMaxWidth property that enables you to set the maximum width of the drop-down list.
Fore more information, see Dropdown Widget (Themable).
Gauge widget
Added support for dynamically setting the number of decimals in the chart value and label using a binding.
Fore more information, see Gauge Widget.
For more information, see Grid Widget (Themable).
Grid widget
Added support for adding custom actions such as buttons, toggle buttons, drop-down lists, and links to the grid toolbar. For more information, see Adding Custom Actions to the Grid Toolbar.
Added support for highlighting new rows that are added to the grid. You can enable this feature to make it easier for users to find new rows at runtime. For more information, see Adding and Deleting Rows on the Grid.
Added a Boolean property RowSelected that returns True when one or more rows are selected.
Added an infotable property that contains the row IDs of all selected items on all pages. The row IDs enable you to keep the selected row IDs when the grid is paginated and the page is changed.
You can now trigger an event instead of opening a URL when a hyperlink is clicked. For example, you can pass the link data and navigate to a mashup.
Menu bar
The required configurations for the widget container are now applied automatically when you add a menu bar to a mashup. In previous versions of ThingWorx, you must use a mashup template or configure the container manually.
Added support for Menu entity items that are set to logout.
For more information, see Menu Bar Widget (Themable).
Link widget
Added a Clicked event to the widget. You can now use the event to trigger services when a link is clicked at run time.
Fore more information, see Link Widget (Themable).
List shuttle widget
Added validation properties on the Validation panel. You can now validate the number of selected items in the target list.
Added a NumberOfSelectedItems property that returns the number of selected items in the list shuttle.
For more information, see List Shuttle Widget (Themable).
Pagination widget
The color of the selected page is changed from blue to gray to improve the user experience.
For more information, see Pagination Widget (Themable).
Integration Runtime 8.0.14
New parameter
Added a new parameter type to the GetEndpointDefinition services. This returns the information whether the object is EntityType or ComplexType.
New option
Added a new option Fetch Legacy Data for the Integration Connectors. For more information, see Creating Integration Connectors.
Changes in Behavior
Platform
Change to the API toValueCollection() of the Class MenuItem
The API toValueCollection() returns the value collection. A new attribute groupReferences is added to the response of toValueCollection(). This attribute holds the groups for a particular menuItem.
Pending Service Deletion
Platform
There is a known issue with API SetGlobalSessionInfoTableValue, where the infotable value is not stored correctly. This API will be deprecated and removed in a future release; issue will not be fixed.
Update your applications appropriately.
Was this helpful?