In this blog I will be testing with the WindchillSwaggerConnector, but most of the steps also apply to the generic SwaggerConnector.
The WindchillSwaggerConnector enables the connection to the Windchill REST endpoints through the Swagger (OpenAPI) specification. It is a specialized implementation of the SwaggerConnector. See Integration Connectors for documentation.
It relies on three components :
Currently, in 7.4, the WindchillSwaggerConnector does not support SSO with Windchill (it is more targeted for a "gateway type" integration). Note that the PTC Navigate PDM apps are using the WindchillConnector and not the WindchillSwaggerConnector.
The ThingWorx Integration Runtime is a microservice that runs outside of ThingWorx. It can run on the ThingWorx server or a remote machine. It is available for download from the ThingWorx Marketplace (Windows or Linux). The installation media contains 2 files : 1 JAR and 1 JSON configuration file.
For this demo, I'm installing the Integration Runtime on a remote machine and will not be using SSL.
1. Prerequisite for the Integration Runtime : Oracle Jre 8 (and of course a ThingWorx 7.4 platform server accessible)
2. Create an ApplicationKey in the composer for the Integration Runtime to use for communication to the ThingWorx platform.
3. Configure the Integration Runtime communication - ThingWorx host, port, appKey, ... - this is done on the Integration Runtime server via the JSON configuration file.
My integrationRuntime-settings.json (sslEnable=false, storagePath is ignored) :
{
"traceRoutes": "true",
"storagePath": "/ThingworxStorage",
"Thingworx": {
"appKey": "1234abcd-xxxx-yyyy-zzzz-5678efgh",
"host": "twx74neo",
"port": "8080",
"basePath": "/Thingworx",
"sslEnable": "false",
"ignoreSSLErrors": "true"
}
}
Note : It is important to completely remove the "SSL": {} block when not using SSL
4. Launch the Integration Runtime service (update the JAR and JSON filenames if needed)
java -DconfigFile=integrationRuntime-settings.json -jar integration-runtime-7.4.0-b12.jar
The Integration Runtime service uses Web Socket to communicate with the ThingWorx platform (similar to EMS). It registers itself with the ThingWorx platform.
In the ThingWorx composer : Monitoring > Subsystems > Integration Subsystem
SMAINENTE1D1 is the hostname of my Integration Runtime server.
Use the New Composer UI (some setting, such as API maps, are not available in the ThingWorx legacy composer)
1. Create a DataShape that is used to map the attributes being retrieved from Windchill
2. Create a Thing named WNC11Connector that uses WindchillSwaggerConnector as Thing Template
3. Setup the Windchill connection under WNC11Connector > Configuration
4. Create an API maps under WNC11Connector > Services and API Maps > API Maps (New Composer only)
After pressing [done] verify that the API ID is '/objects GET' (and not /structure/objects - otherwise recreate the mapping and choose the other findObjects endpoint).
5. Create a "Route" service under WNC11Connector > Services and API Maps > Services (New Composer only)
Test the WNC11Connector::FindBasicObjects service
Note that the id (oid) and typeId (type) are returned by default by the /objects REST API - objName has to be explicitly requested.
In the ThingWorx composer : Monitoring > Integration Connectors