트리거 만들기
트리거는 연결된 시스템에서 구독된 이벤트가 발생할 때 워크플로를 시작합니다. 이를 통해 매번 워크플로를 수동으로 실행하지 않아도 복잡한 비즈니스 프로세스를 자동화할 수 있습니다.
예를 들어, 다음 그림에는 프로젝트에서 만들 수 있는 트리거의 목록이 표시되어 있습니다.
다음과 같은 두 가지 유형의 트리거가 있습니다.
• 폴링 트리거
• 웹후크 트리거
폴링 트리거
폴링 트리거는 정기적/주기적으로 업데이트를 확인합니다. 트리거 목록에 있는 모든 폴링 트리거에 클럭 아이콘이 표시됩니다. 폴링 트리거를 만들려면 다음을 수행합니다.
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 속성이 있습니다.
옵션 객체의 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 메소드 - 다음과 같이 사용합니다.
◦ 양식의 서비스 데이터를 흐름에 사용하기에 적합한 양식으로 또는 정의된 출력 스키마와 일치하는 양식으로 변환하는 데 사용됩니다.
◦ 경우에 따라 서비스가 충분한 정보를 제공하지 않을 수 있습니다. 이러한 경우 이 메소드가 추가 정보를 구하기 위해 서비스를 질의할 수 있습니다.