事物服务
事物服务是指事物可执行的功能。每个事物都可以有一个或多个服务。可以在“事物形态”、“事物模板”或“事物”级别定义服务。服务的一个简单示例是为数据库事物编写的查询。
对于服务而言,有几种实现方法或处理程序,具体取决于所使用的模板。处理程序的示例包括脚本、SQL 查询和 SQL 命令。根据事物 (例如 Edge 事物) 的特定功能,还可以使用其他处理程序。
用户定义服务的具体实现是通过服务器端脚本 (目前通过 SQL 或 JavaScript) 完成的。然后,可以通过 URL、REST 客户端支持的应用程序或 ThingWorx 中的其他服务调用该服务。
创建新服务时,可以定义输入属性和输出。输入和输出可以是任何标准 ThingWorx 数据类型。每个服务还可以在服务定义中定义单独的运行时权限。服务不必包含输入或输出,但通常存在其中的一个或两者都存在。例如,如果要将交付计划发送到卡车,那么卡车事物可能会有一个服务,其中包含名为 DeliverySchedule 的输入且类型为 XML。该服务可以接收传入的数据并将卡车的事物属性放入数据表中。
如果想要将输出直接发送到混搭小组件,则应选择 INFOTABLE 基本类型的输出。如果选择输出信息表,则需要选择数据形状。应用程序利用数据形状确定将返回哪些列和数据类型,以便用其显示数据。您也可以视需要选择任意数量的输入。例如,您的输出可以是针对将数据返回到混搭的数据库所执行的 SQL 查询。该服务会自动成为 ThingWorx 应用程序服务器的 REST API 的一部分 (与您模型中的所有定义相同)。可以通过来自其他应用程序或混搭中的 REST 调用来使用该服务。
调用服务时,如果将输出定义为信息表,则可以使用 URL 调用和 Accept URL 参数来请求 HTML、JSON 或 XML 形式的结果集 (有关详细信息,请参阅 REST API)。由于这种灵活性且混搭环境能够轻松使用信息表,建议您使用此格式作为默认设计模式。可根据需要解决特定需求,如 XML 架构输出。
定义了脚本函数接口后,您便可以通过单击该服务的“处理程序”列来实现该服务。这将打开服务实现编辑器。在实现编辑器中,请选择处理程序 (SQL 查询或脚本)。SQL 查询仅适用于数据库实体。脚本实现是服务器端 Java 脚本引擎。
借助 SQL 查询,可使用源数据库所用的语法编写查询。可以使用服务输入作为查询中的参数,就像使用预处理语句一样。如果输出属性是一个信息表,则不需要操控结果。查询结果将显示在信息表中,并可作为输出。
脚本处理程序是利用服务器上所有数据、事物和服务来满足应用程序需求的一种强大方式。可以执行计算和查找、调用服务或从模型中的其他事物访问属性。选择将脚本作为处理程序后,便会看到多个脚本帮助程序。可以看到当前所编辑事物的脚本、属性、服务和事件的输入,可通过双击将这些输入粘贴到脚本窗口中。还可以浏览系统中任何其他实体的属性、服务和事件。可将所有模型功能都组合在您的服务中。
* 
如果脚本是从网页或 URL 调用的,则它会在已登录用户的上下文中运行。如果用户无权访问脚本中任何实体的运行时服务、属性或事件,则该脚本可能会失败。
脚本实现编辑器还具有语法帮助程序和代码片段,可更轻松地创建脚本。
* 
默认情况下,ThingWorx Platform 上的脚本超时设置为 30 秒。如果脚本运行时间超过此时间限制,则平台会终止执行。ThingWorx 管理员可以在 platform-settings.json 文件的基本设置部分配置脚本超时。
异步服务
异步服务将在其自己的线程中创建和执行。异步服务不能具有返回值,原因在于当其运行时,将创建线程且该线程会在平台上独立运行。如果从另一个服务中调用,则正在调用的服务不会等待异步服务完成。这对于长时间运行的服务非常有用,尤其是那些更新后台数据结构或执行系统维护任务的计时器上的服务更是如此。
如果在“新建服务”编辑器中选择异步,则会显示“排队调用”选项。此选项适用于远程绑定的服务,如果未连接远程事物,则会对服务执行进行排队。ThingWorx 会对每个服务执行尝试进行排队,然后在远程事物重新连接后按顺序执行它们。
服务的统计数据
效用子系统用于收集因超时而终止的 JavaScript 服务的指标。有关详细信息,请参阅 有关因超时而终止脚本执行的统计数据