Release Notes > Version 9.0.0 Release Notes
Version 9.0.0 Release Notes
The following feature enhancements, bug fixes, known issues and limitations, and end-of-support information are part of ThingWorx 9.0.0.
Enhancements
Security
Fixed potential security issues, including items proactively identified by vulnerability scanning software or PTC Quality Assurance testing. Please upgrade as soon as possible to take advantage of these important improvements
ThingWorx 9.0 is certified against Microsoft Edge Chromium, but does not support non-Chromium variants of Microsoft Edge. If you are currently using Microsoft Edge as your web browser, PTC strongly recommends upgrading to Edge Chromium 81.0 or later to take advantage of important security improvements.
Installer
The ThingWorx Foundation installer now provides an automated upgrade for existing installer-run installations of ThingWorx 8.5 or later, eliminating the need to reconfigure setup or reenter much of the same information again. For more information, see Using the Installer to Upgrade ThingWorx Foundation .
If you have ThingWorx Foundation 8.5.3 or earlier installed, you can run the ThingWorx Foundation Upgrade-Ready Utility, which is available on the PTC Software Download page for ThingWorx Foundation, before using the installer to upgrade. It determines if your system is ready to be upgraded to 9.0.
Platform
You need to request a new license file in order to run ThingWorx 9.0 in cluster mode. For more information about licensing, see Licensing for ThingWorx Platform . For more information about running ThingWorx in cluster mode, see Overview of ThingWorx High Availability Clustering .
A new API GetThingPropertyValues was added in EntityResources to retrieve bulk property values from an infotable list of Thing names. This API is designed to work with the QueryImplementingThings API, which can be used to generate the list of Things. For more information, see Using the QueryImplementingThings Service .
Thing Groups are a new named referenceable entity type that allow for Things and other Thing Groups as members in a Thing Group hierarchy. Thing Groups are mainly used for managing visibility permissions at scale, to control the exposure of Things to only those that require access, but can also be used for other run-time operations. Thing Groups are intended to be a building block used in other applications. Refer to Thing Groups for more information.
All configuration tables are now persistent. The persist flag on the API is ignored.
Added support for the following special characters in entity names: < and >. See Naming Entities for more information.
The base type for the ThingworxMetric Data Shape has been changed from NUMBER to VARIANT to allow for greater flexibility. The data type field (NumberPrimitive, StringPrimitive, or BooleanPrimitive) will be determined based on the data input by a user who is creating an entity with a service that has an infotable output tied to a ThingworxMetric Data Shape. For more information, see the Known Issues and Limitations section below.
The system now has a simple endpoint for health and an endpoint for which you can determine if the server is ready to accept requests. Neither endpoint requires authentication. Both will return 200 if true or 503 if false.
A new endpoint /Thingworx/Metrics is available to retrieve metric information for the system. It can be used to collect all system metrics, including subsystem performance metrics. It requires authentication.
When the server is being shut down, the system will attempt to drain all data queues before forcing shutdown. This will only occur when the system is cleanly stopped.
The application key and remote instance binding identifier for metrics reporting are now stored in the keystore. The application key for metrics reporting is no longer available in the Platform Subsystem configuration in Composer.
The Support Subsystem replaces the PTC Support Tools , in which its functionality has been merged into the ThingWorx Platform. Therefore, do not attempt to import this into ThingWorx 9.0 or later.
The SessionUpdateDelay setting and two settings for platform metrics logging, MetricsLoggingFrequency and MetricsLoggingLevel, are now available in the platform-settings.json file. For more information about these new settings, see platform-settings.json Configuration Details .
Audit Subsystem
The Audit Subsystem provides two distinct implementations:
Direct Persistence, which is new with ThingWorx Platform 9
Data Table, the original audit subsystem implementation
Additional changes for the Direct Persistence implementation of the Audit Subsystem include:
Support for PostgreSQL and MSSQL as the persistence provider for the Audit Subsystem, using native data base functionality for improved overall performance.
Querying is configurable to adapt to the needs and use cases of different organizations. The query services accept localization tokens for the category parameter of a query.
The ability to create custom audit categories and audit messages through Java s.
Four options for audit security configuration:
Administrator: The Administrator can see all Audit messages and execute all Audit services
Non-administrative users: By default, these users can neither see Audit messages nor execute Audit services. An Administrator should give non-admins the run-time permissions they need to execute the QueryAuditHistory() service on the Things for which they are responsible. With those permissions, the non-admin users can see all Audit messages associated with their user name and with the Things they monitor.
Auditors User Group: This predefined user group is for non-administrative users who, when given access to the QueryAuditHistory() service on their Things, should see all Audit messages associated with their Things, not just the ones associated with their User Account and the Things.
Custom Security Permissions: Administrators can provide specific security permissions to non-administrative users, depending on the user cases.
A new message category, called AUDIT, to track the execution of the services of the Audit Subsystem.
Additional audit entries to track the addition and removal of users or user groups as members of other user groups as well as user logouts
The ability to constrain queries by context, whether user or Thing.
The ability to export only online audit data (Direct Persistence only).
ThingStart disabled for auditing by default due to the increase load during startup or restart of the ThingWorx Platform.
Thing Group-related Audit messages are available in the new Audit category, THINGGROUPMEMBERSHIPS as well as in the existing Audit category, SECURITY CONFIGURATION. While the Audit messages for the THINGGROUPMEMBERSHIPS are disabled by default, the messages for the SECURITY CONFIGURATION are enabled by default.
For details on the Audit Subsystem, refer to the section, Audit Subsystem in this help center.
You can easily copy an application key's Key ID to the clipboard.
Added the Exclude Invalid Users and User Groups in Imports option to the Platform Subsystem .
High Availability (HA) Clustering
For information about ThingWorx High Availability Clustering and its configuration, see the Overview of ThingWorx High Availability Clustering section.
The supported persistence providers are as follows:
PostgreSQL
Microsoft SQL Server
Microsoft Azure SQL
InfluxDB
The following connectivity tools are supported:
ThingWorx Edge SDK versions that support SNI, which is required for Cloud-hosted HA clusters:
C SDK: v.2.2.9 and later.
.NET SDK: v.5.8.2 and later
Java SDK: any version used with Java SE 7 Development Kit (or later). Note that OpenJDK is not currently supported. Refer to Java SE 7 Security Enhancements.
For on-premise ThingWorx HA Clusters, SNI may or may not be required. It depends on how the network is set up. For information on SNI, refer to the article, What Is SNI? How TLS Server Name Indication Works on the Cloudflare site.
ThingWorx Edge MicroServer (EMS) v.5.4.8, 5.4.9, and later, provide SNI support. Earlier versions do not. However, v.5.4.4 has been certified in an HA environment.
ThingWorx Connection Server (AlwaysOn), v.9.0.0 is required for a ThingWorx HA Clustering environment.
ThingWorx eMessage Connector v.2.0.0 is required for a ThingWorx HA Clustering environment.
ThingWorx Kepware Server
ThingWorx Kepware Edge
For information about configuring the Connection Server and the eMessage Connector for operation in a High Availability Cluster, refer to the HA configuration topics in their related help centers:
Connection Server: High Availability Configuration
ThingWorx HA clustering is available for deployment in a Docker environment. In order to build ThingWorx Docker images in an HA cluster, additional images for Apache Ignite and ThingWorx Connection Server must be deployed first. For more information, see Using ThingWorx Docker in an HA Clustering Environment .
A new mode is available that sets the server so that the /ready endpoint will return false to help remove the server from load balancers. This allows the server to stop receiving new requests but not shut down, which can be used for troubleshooting. The system will attempt to drain any information in its data queues.
JavaScript service states are now kept in a cache layer, which can be local or remote. The new system creates a one-way proxy from the JavaScript object back to the original object. Therefore, every change to the JavaScript object triggers a full update of the property in the original object. And, changes to the original object are not reflected in the JavaScript object.
When running ThingWorx in cluster mode, model changes are eventually made consistent across the cluster. For more information, see Eventual Consistency .
Logging configuration is done using logback.xml configuration. Asynchronous logging is used for better performance, even at high log levels. For more information, see Configuring Logging .
Extensions
The lifecycle extension APIs startSubsystem and stopSubsystem in Subsystems.java have been replaced with startSubsystem(ContextType) and stopSubsystem(ContextType). The context type allows the method to work in a HA environment where changes are made on server A and then have to be synced to other servers. The context type allows the method to know if it is or is not part of a sync process, and if it is, perform a create, update, or delete. For information, see Lifecycle API Changes .
A new extension metadata attribute, haCompatible, was added to identify if an extension is compatible with ThingWorx High Availability Clustering. For more information, see Best Practices for Packaging and Deploying ThingWorx Solutions .
There is a new Extension Package Import Policy setting in the platform-settings.json file that can restrict the import of extensions to only those that have the haCompatibility flag set to true in the extension metadata. For more information, see platform-settings.json Configuration Details .
Mashup Builder
Creating Layouts
You can now overlay containers in responsive layouts when expanding and collapsing containers in a responsive mashup. See Expanding and Collapsing Containers .
Added the ability to cut, copy, and paste containers and their contents using toolbar commands and keyboard shortcuts. This helps you build layouts more quickly by copying containers instead of widgets. For more information about this feature, see Managing Items on the Canvas.
Added settings for configuring the viewport display settings in a responsive mashup. After you create a mashup, you use these settings to adjust the layout for mobile devices. These settings are available on the Mobile Settings tab of mashup entities. For more information, see Optimizing a Mashup for Mobile Devices .
User Interface
Added support for undo and redo when editing a mashup. You can also view the history of edits to a mashup in a session. These commands are available on the canvas toolbar. See Using Undo and Redo in a Mashup .
The Connections panel has been updated and renamed to Bindings. For more information about the new panel, see Viewing Bindings in a Mashup .
The To-Do panel is renamed to Reminders.
Binding configuration dialogs for widgets and services have been updated and enhanced. You can now configure bindings and find binding sources and targets within the mashup more easily. For more information, see Configuring Bindings in a Mashup and Configuring Data Services.
Added a category filter to the list of widget properties on the Properties panel based on functional categories. You now quickly filter the list of properties for categories such as size and position, configuration, data, and bindings.
Data Services and Bindings
Added the ability to configure bindings for functions using the bindings configuration window. For more information, see Functions .
Updated the Data panel and redesigned the Add Data dialog box. You can now find entities and add data services to a mashup more easily. For more information, see Adding Data Services to a Mashup.
Added a right-click menu that enables you to create bindings between data properties on data panels. For more information, see Creating Bindings in a Mashup .
Style Themes
Added the ability to define style properties for the following elements on the Styles tab of a Style Theme entity:
Layout containers used in a mashup.
Tooltips that are used by widgets in a mashup.
The preview mashup on the Styles tab has been updated. You can select your own mashups to preview style theme changes.
For more information, see Using the Styles Tab .
Added three new widgets: Bar Chart, Line Chart, and Schedule Chart, in the Platform. These widgets are also available as web components. For information about the widgets, see:
You can migrate mashups with the legacy versions of these widgets. For more information about the migration, see Legacy Widgets and Layouts.
Web component widgets are now released as part of the ThingWorx Web Component SDK. You can use the SDK to build your own custom widgets.
You can now create widget extensions from web components using the ThingWorx Web Component SDK Utility. These web component widgets are added to Mashup Builder when you import your widget extension.
Added support for adding images as icons for buttons on the Confirmation dialog box. You enter a URL or select a media entity to specify an image.
Organized all widgets as Standard or Legacy in the help center. For more information, see:
You can find the different Widget Categories in the Widgets panel, in the Platform.
Updated the Date Time Picker widget with new date range selection feature. For information about the properties that are newly added, see: Date Time Picker Widget (Themable) .
ThingWorx Flow
Expanded capabilities for deployment
ThingWorx Flow is compliant with ThingWorx Active-Active cluster environment. Most of the ThingWorx Flow components can be scaled; however, ThingWorx Flow High Availability is not supported. For more information, see ThingWorx Flow in ThingWorx HA .
ThingWorx Flow Dockerfiles and supporting Composer files are available to build ThingWorx Flow on Docker environment. You can deploy ThingWorx Flow along with ThingWorx Docker images for both single ThingWorx mode and HA cluster ThingWorx mode.
ThingWorx Flow automated upgrade installer is available to upgrade from a fresh installation of ThingWorx Flow 8.5.x and later to 9.0.
You cannot use this upgrade installer to upgrade from a fresh installation of 8.4.x. Even if you have manually upgraded ThingWorx Flow from a fresh installation of 8.4.x to an 8.5.x version, you cannot use this automated upgrade installer. In this case, you must migrate ThingWorx Flow .
Enhanced infrastructure functionality
Compared to previous releases that supported predefined fixed accounts only, you can now use a user’s identity in ThingWorx Flow connectors. This ability is essential for secure production use for many applications and enables fetching different content for different users. Two-Way SSL and OAuth( Session User) connection types were introduced to enable this capability. For more information, see Connector types .
You can switch a connection type for the selected connector, which helps in easy maintenance of workflows. The Switch option is available only if the third-party service supports more than one connector type.
You can map connection variables in a workflow, which allows using the same action or workflow for different environments of third-party services. For more information, see Map connector.
ThingWorx media entities can use ThingWorx Flow connectors for authorization. For more information, see ThingWorx Flow configuration in media entities .
Multiple action forms have been updated where you can choose Form to provide inputs for individual input fields listed in the form, or choose Assign JSON to specify a single JSON with all required inputs. Using Assign JSON shortens the forms, and also removes the limit on the length of the items of arrays.
The following services have been added to the WorkflowSubsystem in ThingWorx Composer:
The LoadOAuthConfiguration service must be used to load OAuth configurations to the ThingWorx Flow server. This service provides a default template in the preconfigured format for all third-party services that support OAuth.
The DeleteOAuthConfiguration or GetOAuthConfiguration services must be used to delete or retrieve OAuth configurations from the ThingWorx Flow server.
With the DeleteOAuthAccessToken DeleteOAuthAccessToken service, you can delete OAuth access tokens of a user for the specified OAuth provider or delete OAuth access tokens for all users for the specified OAuth provider.
The RefreshMetadata service caches Windchill OData information to improve performance.
User interface
The ThingWorx Flow dashboard has been redesigned to navigate easily to workflows, connectors, triggers, custom actions, and activity logs.
New actions
Added the Sync action under Developer Tools to consolidate results of previous actions in multiple paths to the Sync action. It demonstrates the logical AND or OR operation.
Added the Return Result action under Developer Tools to return the output of any executed action in the workflow to the synchronous ThingWorx service or webhook invoker, during workflow execution.
Added Create Entity , Delete Entity , Get Properties, and Update Entity actions under SAP OData to query and manipulate datasets in your SAP system through CRUD (create, read, update, and delete) operations.
SAP OData actions support the Basic and OAuth connector types.
Added Execute BAPI action under SAP RFC to execute default or custom BAPIs. The input form dynamically changes according to the BAPI that you provide.
Added Execute Swagger API action under Windchill to execute Windchill Swagger APIs.
Added Download Content action under Windchill to download content from the Windchill server.
Added Upload Content action under Windchill to upload content in the form of a file, stream, or string to the Windchill server.
Added Execute Stored Procedure action under SQL Connector to execute an SQL stored procedure.
Updates to existing third-party services and actions
All third-party services that previously supported predefined, fixed OAuth accounts, OAuth (Named User) have been enhanced to additionally use the current session user’s identity. This new connector type is called OAuth (Session User). For more information, see Connector types.
The HTTP Request action supports the basic connector type.
Ability to add custom headers to actions that have HTTP-based interactions.
Gitlab , JIRA , and ThingWorx support the OAuth connection types, OAuth (Named User) and OAuth (Session User).
While loop added to the Loop action.
All Bitly and Dialogflow actions have been updated.
SQL Connector
Ability to create and update multiple rows in the Create Rows and Update Rows actions.
The Distinct check box provides the ability to return unique values in the column for the Get Rows and Get Rows with Join actions.
Ability to add free-form SQL in the Where Clause and Join Clause input fields for Delete Rows , Get Rows , Get Rows with Join, and Update Rows actions.
Dynamics 365 CRM
The Include Reference Domains check box in Execute Actions and Execute Functions actions provides the ability to display actions and functions that are described by ActionImport and FunctionImport in the referenced domains, respectively.
Ability to include referenced navigation properties for Create Record and Update Record actions. The input form dynamically changes according to the entity set that you select.
Ability to filter object properties through a Form-Based Query, Discrete Query, or Raw Query for Execute Actions , Execute Functions , and Get Records actions.
OData
The Include Reference Domains check box in Execute Actions and Execute Functions actions provides the ability to display actions and functions that are described by ActionImport and FunctionImport in the referenced domains, respectively.
Ability to include referenced navigation properties for Create Entity and Update Entity actions. The input form dynamically changes according to the entity set that you select.
Ability to filter object properties through a Form-Based Query, Discrete Query, or Raw Query for Execute Actions, Execute Functions , and Get Properties actions.
Windchill
The Include Reference Domains check box in Execute Actions and Execute Functions actions provides the ability to display actions and functions that are described by ActionImport and FunctionImport in the referenced domains, respectively.
Ability to include referenced navigation properties for Create Entity and Update Entity actions. The input form dynamically changes according to the entity type that you select.
Ability to filter object properties through a Form-Based Query, Discrete Query, or Raw Query for Execute Actions, Execute Functions , Get Entities by ID , and Get Entities by Query actions.
Bug Fixes
Platform
Tracking Number
Deprecated the DeleteDataTableEntriesWithQuery service and added the DeleteDataTableEntriesWithQueryCriteria service as a replacement. The DeleteDataTableEntriesWithQueryCriteria service does not accept the location and sourcetype parameters, although they can be added to the query parameter.
TW-14728
Deprecated the EnableSubscription and DisableSubscription services. Replacement services EnableSubscription and DisableSubscription were created and contain the subscriptionName input parameter. Refer to this topic for more information.
TW-66112
Fixed an issue with Industrial Things that was causing remote properties to always display as ReadEdgeValue even when they were set as UseDefaultValue.
TW-76929
Changed the Enabled label for timers and schedulers to Automatically Enable Timer on Startup.
TW-75596
Added two APIs to EntityServices: GetEntityListByRegex and GetEntityListWithPermissionMaskByRegEx. Each of these API’s use REGEX expressions (only) instead of SQL search strings to filter and list entities. The original API, GetEntityList, remains unchanged.
TW-75206
Fixed an issue that was causing an import to fail if it contained an entity with orphaned subscriptions (such as a missing referenced event, property, or source). To fix this issue, imports will succeed by disabling the subscription. An error message will be logged in this situation.
TW-74824
Fixed an issue that was causing errors when executing asynchronous services with SSO.
TW-73693
Fixed an issue that was preventing alert data from showing in the Alert history after changing the persistence provider.
TW-73656
Fixed an issue that was causing a NPE to get logged when executing services.
TW-73624
Fixed an issue with inconsistent service outputs for ThingWorx Analytics services.
TW-73451
Fixed an issue that was causing purge services to fail if there was a dot character in the Thing name when using InfluxDB as the persistence provider.
TW-73166
Added additional audit entries for when a user is added or removed from a user group.
TW-73086
Fixed an issue that was preventing a solution from being downloaded from Solution Central.
TW-73074
Fixed an issue that was causing the csvDecimalDelimiter localization token value for the French locale to be invalid.
TW-72859
Fixed an issue that was preventing HTTP Byte Serving via the ranges header from working with files stored in a ThingWorx repository.
TW-72614
Fixed an issue that was preventing user group permissions from being edited.
TW-72437
Fixed an issue that was preventing the service implementation from being removed after invoking RemoveServiceDefinition.
TW-71789
Fixed an issue that was causing a service to return all Thing properties instead of the one specified in the infotable.
TW-71223
Fixed an issue where the last modified date was not updated when the user was locked or unlocked as configured in Account Lockout Settings.
TW-71207
Fixed an issue that was causing the QueryImplementingThingsWithData service to return properties not defined on a Thing Shape.
TW-70763
Fixed an issue that was causing a NullPointerException in Script logs for any database related issue.
TW-70070
Fixed an issue that was preventing the downloadLink column in a FileRepository Thing from being a hyperlink.
TW-69493
Fixed an issue that was causing the GetFileInfo service to return a path twice.
TW-69429
Fixed an issue that was causing a remote property to shows good quality (thumbs up icon) for a source that didn't exist.
TW-69026
Fixed an issue that was causing a Chrome browser to use more than 2GB of memory when executing a SQL query service with more than 300000 rows of data.
TW-68338
Fixed an issue that was preventing Form Login from being used if the mashup name contained Chinese characters.
TW-67517
Fixed an issue that was changing < and > characters in state definitions.
TW-67228
Fixed an issue that was preventing log files from being added to the archive folder.
TW-67040
Fixed an issue that was causing an imported Industrial Thing with remote bindings to fail.
TW-65621
Fixed an issue that was preventing a configuration table with field definitions that contained special characters from being updated after importing an extension.
TW-63646
Fixed an issue that was causing tags with special characters to get handled incorrectly in Industrial Connector.
TW-62586
Fixed an issue that was causing a user name to display twice in Composer if it contained a backslash character.
TW-58563
Added visual feedback on a Thing if a value stream is specified on a Thing Template.
TW-58277
Fixed an issue that was causing the time column schema on the stream table to change from 'timestamp without time zone' to 'timestamp with time zone' in PostgreSQL.
TW-35605
Fixed an issue that was preventing syntax checking from working correctly.
TW-35371
Fixed an issue that was allowing system localization table tokens to be deleted.
TW-33567
Fixed an issue that was preventing the ListDirectories service from listing directories based on the nameMask parameter.
TW-14413
Fixed an issue that was preventing system start up after an import if there was a lost encryption key in the import. To fix this issue, an Administrator will be able to start up a system in this case, but they will not be able to import encrypted information (PASSWORD properties) to the system. The import process will ignore any PASSWORD type initialization errors in order to allow startup after import. The following error message will be logged:
During import property [Prop1] on thing [Thing1] initialization error occured,
skipping property initialization. Error message [Unable To Convert From java.lang.String to PASSWORD]
TW-75158
Fixed the inability to package a Solution if the Project contained a MediaEntity with dynamic content URL.
TW-73874
Mashup Builder
Tracking Number
Fixed an issue with the Collection widget that was causing images within to change from absolute to relative.
TW-75614
Fixed an issue that was preventing the Choose Files label on the Upload File widget from being localized.
TW-75542
Fixed an issue with the Numeric Entry widget that was preventing the "nothing" value from working after being initially set.
TW-75477
Added the CellAlternateStyle style property to the Collection widget to allow for alternate cell background colors.
TW-75459
Fixed an issue with the Label chart that was preventing the XAxisLabelRotation from being applied if the chart was horizontal.
TW-75281
Fixed issues with the tab sequence between widgets.
TW-75279, TW-74292
Fixed an issue with web components that was preventing a dropdown list from closing if it was in a pop up window.
TW-74971
Fixed an issue with the Collection widget that was preventing selected rows from being retained when data was triggered on auto refresh.
TW-74748
Fixed an issue with the Layout widget that was preventing mashups from displaying correctly in design time.
TW-74454
Added the ability to edit the Data Shape property, if an events router is being edited. The property is displayed conditionally when the Data Type property is set to INFOTABLE.
TW-74276
Fixed an issue that was causing errors on the ThingWorx console at mashup run time.
TW-74219
Fixed an issue that was preventing the auto-scroll on the Data Panel from working when dragging a binding.
TW-74165
Fixed an issue with the Collection widget that was preventing the sort from rendering the output when bound to a check box.
TW-73903
Fixed an issue with the Checkbox web component that was causing it to be offset from its label.
TW-73902
Fixed an issue that was preventing the custom class of a flex container from being updated correctly.
TW-73545
Fixed an issue that was preventing media entities with certain name formats to be recognized in Mashup Builder.
TW-73377
Fixed an issue with the Navigation widget that was preventing Japanese characters from displaying correctly.
TW-73302
Fixed an issue that was preventing the ability to modify padding in a dynamic panel that contained a Collection widget.
TW-73230
Fixed an issue that was preventing legacy widgets from being visible after upgrading.
TW-72883
Fixed an issue that was preventing the cell alignment in grids from working when using Style Theme.
TW-72466
Fixed an issue that was causing an error to get logged when accessing mashups on a Mac.
TW-72270
Fixed an issue that was causing the date picker to appear behind the popup window when using the Advanced Grid.
TW-72205
Fixed an issue that was causing the Dashboard widget to stay invisible when the Visible property was selected.
TW-72145
Fixed an issue with the Date Time Picker web component that was causing a Changed event to be triggered before a value update.
TW-72112
Fixed an issue that was causing JSON session variable to return undefined when bound to expressions, validators, or services.
TW-72105
Fixed an issue that was causing a scroll bar to get automatically added when enabling properties in a responsive mashup .
TW-72013
Fixed an issue with the List widget that was causing a selected row value to get retained from a previous selection.
TW-72009
Fixed an issue that was causing custom CSS bound to a parent tag to also get applied to the child tag.
TW-71845
Fixed an issue that was causing auto-refresh to keep firing after a mashup was closed or if the tab was not in focus in Composer.
TW-72305
Fixed an issue with the Value Display widget that was causing "Not a Date" to display in place of the date in run time.
TW-71647
Fixed an issue that was causing an additional binding to get created when binding an event to an expression service.
TW-71193
Fixed an issue with the Upload widget that was causing special characters to get encoded as HTML.
TW-71072
Fixed an issue with the Advanced Grid widget that was preventing records from being deleted.
TW-70997
Fixed an issue with the Collection widget that was preventing double clicking from working correctly.
TW-70937
Fixed an issue with the Text Field web component widget that was preventing the tab sequence from working correctly.
TW-70303
Fixed an issue with the Button widget that was preventing the Disabled property to be changed if it was bound from an expression.
TW-69883
Fixed an issue with the Chart widgets that was preventing them from drawing correctly when the StackSeries property was set to true.
TW-69412
Fixed an issue with Text Field and Text Area widgets that was causing double bracket characters to get converted into question mark characters.
TW-69149
Fixed an issue with the Image widget that was preventing the SourceURL from working if there was a period in the entity name.
TW-69114
Fixed an issue with the Data Filter widget that was preventing a location from being pinned in Google Maps.
TW-68977
Fixed an issue with the Value Display web component that was preventing styles from being set.
TW-68027
Fixed an issue with the Navigation web component that was preventing bindings to TargetMashup and TargetMashupType parameters from getting applied.
TW-67708
Fixed an issue that prevented a button width from being set below 41px.
TW-67124
Fixed an issue with the web components that was preventing a dropdown list from closing if it was in a popup window.
TW-65497
Fixed an issue that was preventing content in pop ups from being visible when zooming into smaller resolutions.
TW-52677
Known Issues and Limitations
The following known issues and limitations exist in ThingWorx 9.0.0:
Platform
If you are using InfluxDB as your database and the ThingworxMetric data shape, and you created entities, such as data tables or streams, with that data shape, they may not work in 9.0. Its base type was changed from NUMBER to VARIANT. Therefore, you must create and use a new data shape with the same fields for those entities.
Mashup Builder
After you migrate a mashup, the Text Field and Text Area widgets do not keep the text style that is set using the font-weight style property. In ThingWorx 8.5, the font-weight style property was incorrectly listed under the text-box part of the widget instead of text-value. When you migrate a mashup to 9.0, the style property remains visible, but it does not affect the widgets. To apply styling to the widget text, set the style property under the text-value part. When you create a new mashup, the style property is listed correctly under the text-value part on the Style Properties panel.
When you migrate a mashup to 9.0, the Value property of the Text Field widget is removed from the list on the Properties panel. The property is now deprecated and any bindings to it are removed. This affects any mashup where the widget property is used. To work around this issue, recreate the bindings using the Text property instead.
On the Custom CSS tab of mashup and style theme entities, CSS variables are incorrectly highlighted as syntax errors when linting is enabled. These variables are used to style widgets that you can apply a style theme to. To work around the issue, disable linting in the editor, or ignore the warning message and save your changes to the entity. The CSS variables are applied to widgets at run time.
End-of-Support Information
End-of-Support Information
As part of a wide-ranging product review for this release of ThingWorx, PTC has removed a range of functionality due both to limited market adoption and a continuing effort to harden the security of the ThingWorx platform. For ThingWorx 9.0, the following capabilities are no longer supported:
The ability to use rich text in the Composer Documentation field (existing rich text will be displayed as raw HTML).
The ability to use rich text in blogs and wikis in Mashup Builder (existing rich text will be displayed as raw HTML).
The ability to edit HTML text in Mashups. ThingWorx users will still be able to display HTML content without editing. Content will be sanitized and must be well-formed using supported HTML tags.