트리거 만들기
트리거는 연결된 시스템에서 구독된 이벤트가 발생할 때 워크플로를 시작합니다. 이를 통해 매번 워크플로를 수동으로 실행하지 않아도 복잡한 비즈니스 프로세스를 자동화할 수 있습니다.
예를 들어, 다음 그림에는 프로젝트에서 만들 수 있는 트리거의 목록이 표시되어 있습니다.
다음과 같은 두 가지 유형의 트리거가 있습니다.
폴링 트리거
웹후크 트리거
폴링 트리거
폴링 트리거는 정기적/주기적으로 업데이트를 확인합니다. 트리거 목록에 있는 모든 폴링 트리거에 클럭 아이콘이 표시됩니다. 폴링 트리거를 만들려면 다음을 수행합니다.
1. 명령 프롬프트에서 다음 명령을 실행합니다.
a. cd <user project root directory>
b. flow add trigger -p
다음은 add trigger 명령에 사용할 수 있는 옵션입니다.
옵션
설명
데이터 유형
--version
버전 번호를 표시합니다.
[부울]
--help
도움말을 표시합니다.
[부울]
--parentDir,-d
프로젝트에 대한 상위 디렉터리입니다.
[기본값: "."]
--polling,-p
폴링 트리거임을 나타냅니다.
[기본값: false]
-- artifactVersion,-v
작성할 아티팩트의 버전입니다.
[기본값: "v1"]
2. add trigger 명령을 실행하면 입력 및 출력이 포함된 trigger.json 메타데이터 파일과 코드 논리가 포함된 index.js JavaScript 파일이 작성됩니다. 이러한 파일은 <projectDir>\trigger\poll\<triggername>\v1 디렉터리에 작성됩니다.
* 
기본적으로 웹후크 트리거가 작성됩니다. 폴링 트리거를 만들려면 -p 옵션을 사용하십시오.
입력 및 출력 스키마의 출력 형식을 지정하는 방법에 대한 자세한 내용은 작업 만들기 항목의 참고를 참조하십시오. 다음은 잘라서 단순화한 스키마입니다.
trigger.json 파일의 옵션은 다음 표에 설명되어 있습니다.
trigger.json 파일
옵션
설명
type(필수 항목)
가장 바깥쪽 객체의 유형은 object여야 합니다.
title(필수 항목)
트리거를 선택할 수 있는 목록의 레이블입니다.
description
트리거에 대한 간략한 설명입니다.
properties
트리거 구성에 대한 입력 양식 필드를 정의하는 데 사용됩니다. 이는 다음 정의를 포함합니다.
트리거 구성 창에 표시할 입력 필드
트리거 서비스 목록에 표시할 이벤트 이름
트리거 정의는 authentication 및 customFilters와 같은 공통 속성 집합 및 모든 트리거 이벤트에 공통된 다른 속성으로 시작합니다. 모든 속성에는 type, title 및 description 속성이 있습니다. 외부 시스템에서는 일반적으로 여러 이벤트를 제공하므로 이벤트가 oneOf로 나타나야 합니다. oneOf 내의 각 객체는 단일 이벤트에 해당합니다. 시스템에서 단일 이벤트를 제공할 경우 oneOf 블록이 필요하지 않습니다.
oneOf 배열에는 하나 또는 여러 개의 이벤트가 포함되어 있습니다. 각 이벤트는 JSON 객체입니다. 아래 예는 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"
}
}
}
]


이러한 각 이벤트에는 출력 속성에 해당 출력 스키마가 있어야 합니다. 예를 들어, 위에 표시된 것처럼 2개의 이벤트가 있는 경우 출력에는 다음과 같이 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 서버에서 데이터를 가져옵니다. 이 메소드는 옵션 객체의 API를 사용하여 가져온 객체에 대한 정보를 캐시하고 새 정보를 사용할 수 있는지 확인할 수 있습니다.
options 객체에는 execute 메소드 호출을 통해 사용 가능한 정보를 유지하는 데 사용되는 meta 속성이 있습니다.
일반적으로 사용 가능한 API에 대한 자세한 내용은 ThingWorx Flow 커넥터 SDK 단원을 참조하십시오.
옵션 객체의 setMeta 메소드를 사용하여 현재 또는 이전 실행에 대한 정보를 데이터베이스에 보관할 수 있습니다. 예를 들어, 메소드를 마지막으로 실행한 시간을 저장하는 데 사용할 수 있습니다. 또한, 이전 결과와 현재 결과 간의 델타를 계산하기 위한 정보를 저장하는 데 이 메소드를 사용할 수 있습니다. 출력 매개 변수는 노드 오류가 발생하는 첫 번째 규약을 따르는 콜백입니다. 오류가 발생하면 이 매개 변수가 첫 번째 매개 변수로 반환되어야 하고 그렇지 않으면 첫 번째 매개 변수가 null이어야 하고 출력을 준수하는 결과가 두 번째 매개 변수로 반환됩니다.
validate 메소드 - 트리거를 데이터베이스에 저장하기 전에 ThingWorx Flow 서버에서 호출합니다. 유효성 검사가 실패하면 트리거가 저장되지 않습니다. 이 메소드는 서비스와의 연결 등 입력의 유효성을 검사하는 데 사용할 수 있습니다.
activate 메소드 - 기존 트리거가 다른 워크플로와 연관될 때 호출됩니다. 대부분의 경우 이 메소드에서 유효성 검사를 실행하는 것으로 충분합니다. activate 메소드의 구현 예는 다음과 같습니다.
function activate(input, options, output){
return output(null,true)
}
트리거의 선택된 이벤트에 액세스하려면 입력 객체(input.event)의 "event" 속성을 사용합니다. 문서 객체에는 양식의 입력 필드가 포함되어 있습니다. 입력 필드에는 connection, access_token 및 입력 양식의 기타 필드와 같이 일반적인 속성이 포함됩니다. 예를 들어, 연결 객체의 일부인 user_name 속성에 액세스하려면 document.input.connection.user_name과 같은 식을 사용합니다.
웹후크 트리거
이는 구독 기반 트리거입니다. 구독은 연결된 시스템의 이벤트에 대해 생성되며 연결된 시스템에서 이벤트가 발생할 때 이벤트 페이로드와 함께 웹후크 URL이 호출됩니다. 이 유형의 트리거가 작동하려면 연결된 시스템에서 웹후크를 지원해야 합니다. 웹후크 트리거는 실시간으로 ThingWorx Flow 엔진에 데이터를 보내므로 외부 응용 프로그램이나 서비스에서 지정된 이벤트가 발생하는 즉시 흐름이 실행될 수 있습니다.
다음 명령을 사용하여 웹후크 트리거를 만들 수 있습니다.
flow add trigger
명령을 실행하면 다음이 작성됩니다.
메타데이터 파일 trigger.json - 입력 및 출력을 포함합니다.
index.js JavaScript 파일 - 코드 논리를 포함합니다.
이러한 파일은 <projectDir>\trigger\webhook\<triggername>\v1. 디렉터리에 작성됩니다. 웹후크 트리거에 대한 trigger.json 파일을 완료하는 프로세스는 폴링 트리거와 유사합니다. 그러나 코드는 크게 다릅니다.
웹후크 트리거에 대한 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) {
}
다음은 웹후크 트리거에 사용되는 메소드입니다.
activate 메소드 - 다음과 같은 단순한 no-op 구현을 포함할 수 있습니다.
function activate(input, options, output) {
return output(null, true);
}
register 메소드 - ThingWorx Flow 서버가 제공한 웹후크 URL을 외부 서비스에 등록하는 데 사용됩니다. register 메소드는 웹후크 URL이 포함된 속성이 있는 문서 객체를 받습니다. 문서 객체의 속성은 다음과 같습니다.
webhook_name - 웹후크 객체의 이름입니다.
webhook - 웹후크 url입니다.
input - connection, access_token 및 트리거 입력 양식의 기타 필드와 같이 다른 속성을 포함하는 입력 객체입니다.
메소드의 출력은 문서 객체에 "hook_response" 속성으로 저장됩니다. 대부분의 경우 이 hook_response에는 대상 시스템에서 제공하는 트리거의 ID를 포함합니다. 일반적으로 이 id는 이 id에서 웹후크의 등록을 취소하려고 할 때 대상 시스템으로 다시 보내집니다.
unregister 메소드 - 연결된 시스템에 대한 등록 호출이 이루어질 때 작성된 웹후크 구독을 제거하는 등록 취소 요청을 보냅니다. document.hook_response 및 속성을 사용하여 등록을 취소하는 데 사용할 수 있는 정보를 얻습니다.
트리거의 전체 코드를 작성한 후에는 트리거에 대한 인증 만들기를 진행할 수 있습니다.
execute 메소드 - 다음과 같이 사용합니다.
양식의 서비스 데이터를 흐름에 사용하기에 적합한 양식으로 또는 정의된 출력 스키마와 일치하는 양식으로 변환하는 데 사용됩니다.
경우에 따라 서비스가 충분한 정보를 제공하지 않을 수 있습니다. 이러한 경우 이 메소드가 추가 정보를 구하기 위해 서비스를 질의할 수 있습니다.
자세한 내용 및 트리거 예는 ThingWorx Flow 커넥터 SDK 자습서를 참조하십시오.