正在创建触发器
在已连接系统中发生订阅事件时,触发器将启动工作流。这样,您就可以使复杂的业务流程自动执行,而无需每次都手动运行工作流。
例如,下图显示了可以从项目创建的触发器列表。
触发器的类型有两种:
轮询触发器
Webhook 触发器
轮询触发器
轮询触发器定期检查更新。在触发器列表中,所有轮询触发器都标有时钟图标。要创建轮询触发器,请执行以下操作:
1. 在命令提示符处执行以下命令:
a. cd <user project root directory>
b. flow add trigger -p
以下选项也适用于添加触发器命令。
选项
说明
数据类型
--version
显示版本号。
[布尔型]
--help
显示帮助。
[布尔型]
--parentDir,-d
项目的父项目录。
[默认:"."]
--polling,-p
指示这是轮询触发器。
[默认:false]
-- artifactVersion,-v
要创建的构件版本。
[默认:"v1"]
2. 执行 add trigger 命令以创建包含输入和输出的元数据文件 trigger.json 以及包含代码逻辑的 JavaScript 文件 index.js。将在目录 <projectDir>\trigger\poll\<triggername>\v1 下创建这些文件。
* 
默认情况下,将创建 Webhook 触发器。使用 -p 选项创建一个轮询触发器。
有关格式化输入和输出架构的信息,请参阅 创建操作主题下方的注解。以下是截断和简化架构。
trigger.json 文件中的选项如下表所述:
trigger.json 文件
选项
说明
类型 (必填)
最外层对象的类型必须是对象。
标题 (必填)
允许选择触发器的列表的标签。
说明
触发器的简短说明。
属性
用于定义触发器配置的输入表单字段。其中包含下列定义:
要在触发器配置窗口中显示的输入字段
要在触发器服务列表中显示的事件名称。
触发器定义以一组常用属性 (例如 authentication 和 customFilters) 以及所有触发器事件共用的任何其他属性开始。所有属性都具有类型、标题和说明属性。外部系统通常会显示许多事件,事件必须以 oneOf 表示。oneOf 内部的每个对象均对应于单一事件。如果系统呈现单一事件,则不需要 oneOf 块。
oneOf 数组包含一个或多个事件。每个事件都是一个 JSON 对象。以下示例适用于具有 2 个事件 Event1 和 Event2 的服务。请注意,每个事件可能需要不同数量和类型的输入。
[{
"type": "object",
"title": "Event1",
"description": "Event 1 description",
"properties": {
"event": {
"type": "string",
"title": "Trigger",
"enum": [
"Event1"
],
"propertyOrder": 2,
"options": {
"hidden": true
}
},
"input_for_event1": {
"title": "input for event 1 ",
"minLength": 1,
"type": "string",
"propertyOrder": 3,
"description": "input required by event 1"
}
}
},
{
"type": "object",
"title": "Event2",
"description": "Event 2 description",
"properties": {
"event": {
"type": "string",
"title": "Trigger",
"enum": [
"Event1"
],
"propertyOrder": 4,
"options": {
"hidden": true
}
},
"input_for_event2": {
"title": "input for event 2 ",
"minLength": 1,
"type": "string",
"propertyOrder": 5,
"description": "input required by event 2"
}
}
}
]


这些事件中的每一个都应在 output 属性中具有相应的输出架构。例如,如果存在上述 2 个事件,则 output 对于 Event1 和 Event2 应当各有一个架构,如下所示:
"output": {
"Event1": {
"type": "object",
"properties": {
"opfield1": {
"type": "string",
"title": "Output field 1"
},
"opfield2": {
"type": "string",
"title": "Output field 2"
}
}
},
"Event2": {
"type": "object",
"properties": {
"opfield3": {
"type": "string",
"title": "Output field 3"
},
"opfield4": {
"type": "string",
"title": "Output field 4"
}
}
}
}
轮询触发器的 index.js 文件具有以下结构:
module.exports = Trigger
Trigger.execute = function (input, options, output) {
}
Trigger.validate = function (input, options, output) {
}
Trigger.activate = (input, options, output) {
}
validate 方法的代码类似于 execute 方法的代码。请参阅示例来查看此代码。
以下是轮询触发器中使用的方法:
execute 方法 - 定期调用。间隔是 ThingWorx Flow 服务器的一种配置。execute 方法使用输入中的连接信息,然后连接到外部系统,并从 ThingWorx Flow 服务器获取数据。此方法可以使用 options 对象的 API 来缓存有关已获取对象的信息,以确定是否有新信息可用。
options 对象具有 meta 属性,用于保留 execute 方法调用的可用信息。
有关常用 API 的详细信息,请参阅 ThingWorx Flow 连接器 SDK 部分。
options 对象的 setMeta 方法可用于将当前或先前执行的相关信息保留在数据库中。例如,它可用于存储上次执行方法的时间。也可用于存储计算先前和当前结果之间增量所需的信息。输出参数是遵循节点的错误优先约定的回调。如果发生错误,则应将其作为第一个参数返回,否则第一个参数应为空,并将符合输出架构的结果作为第二个参数返回。
validate 方法 - 将触发器保存到数据库之前,通过 ThingWorx Flow 服务器调用。如果验证失败,则触发器不会得到保存。此方法可用于验证输入、与服务的连接等。
activate 方法 - 现有触发器与其他工作流相关联时调用。在大多数情况下,通过该方法运行验证便已足够。下面为实施 activate 方法的一个示例:
function activate(input, options, output){
return output(null,true)
}
要访问触发器的选定事件,请使用 input 对象的 event 属性 (input.event)。document 对象包含来自表单的输入字段。输入字段包含常用属性,如 connection 和 access_token,以及输入表单中的任何其他字段。例如,要访问 connection 对象的 user_name 属性,可使用如下表达式 document.input.connection.user_name
Webhook 触发器
这些触发器是基于订阅的触发器。在已连接系统中的事件上创建订阅,并且当已连接系统中发生事件时,使用事件有效负载调用 Webhook URL。连接的系统必须支持 Webhook 方可使此类触发器正常工作。它会将数据实时发送到 ThingWorx Flow 引擎,使您的工作流能够在外部应用程序或服务中发生指定事件时立即运行。
您可以使用以下命令创建 Webhook 触发器:
flow add trigger
执行命令即可创建
元数据文件 trigger.json - 包含输入和输出
index.js JavaScript 文件 - 包含代码逻辑
将在目录 <projectDir>\trigger\webhook\<triggername>\v1 下创建这些文件。完成 Webhook 触发器的 trigger.json 文件的过程与轮询触发器的相应过程类似。但是,代码有明显的不同。
Webhook 触发器的 index.js 文件具有以下结构:
module.exports = Trigger;
Trigger.execute = function execute(input, data, output) {
}
Trigger.activate = function execute(input, data, output) {
}
Trigger.register = function register(document, callback) {
}
Trigger.unregister = function unregister(document, callback) {
}
以下是 Webhook 触发器中使用的方法:
activate 方法 - 可执行简单的无操作实施,如下所示:
function activate(input, options, output) {
return output(null, true);
}
register 方法 - 用于将 ThingWorx Flow 服务器提供的 Webhook URL 注册到外部服务。register 方法接收具有包含 Webhook URL 的属性的文档对象。document 对象的属性如下所示:
webhook_name - webhook 对象的名称。
webhook - webhook URL。
input - 包含触发器输入表单中其他属性 (例如:connection、access_token 和任何其他字段) 的 input 对象。
方法的输出作为 hook_response 属性存储在 document 对象上。在许多情况下,此 hook_reponse 包含目标系统提供的触发器的 ID。在尝试从其注销 webhook 时,通常会将此 id 发送回目标系统。
unregister 方法 - 发送取消注册请求以移除 Webhook 订阅,该订阅创建于对连接的系统进行注册调用时。使用 document.hook_response 及其属性来获取用于取消注册的信息。
将触发器的代码编写完整之后,您可以继续为触发器创建身份验证。
execute 方法 - 使用如下:
用于将表单中的服务数据转换为适合在工作流中使用的表单或与定义的输出架构相匹配的表单。
在某些情况下,该服务无法提供足够的信息。在此类情况下,可以查询服务的其他信息。
有关触发器的详细信息和示例,请参阅 ThingWorx Flow 连接器 SDK 教程