FlowAPI - 범위, 전역
FlowAPI는 차단 또는 비차단 방법을 사용하여 서버 측 스크립트에서 작업, 플로우 또는 하위 플로우를 실행하는 메서드를 제공합니다.
sn_fd 네임스페이스를 사용하여 전역 및 범위가 지정된 스크립트에서 FlowAPI 메서드에 액세스합니다. 에서 워크플로우 스튜디오코드 스니펫 작업을 사용하여 플로우에 대한 호출을 만들거나 여기에 설명된 메서드를 사용하여 스크립트를 수동으로 업데이트합니다.
FlowAPI - cancel(문자열 contextId, 문자열 이유)
일시 중지되었거나 실행 중인 플로우, 하위 플로우 또는 작업을 취소합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextId | 문자열 | 플로우, 하위 플로우 또는 작업에 대한 실행 세부 정보 기록의 Sys_id입니다. 의 워크플로우 스튜디오플로우 실행 탭으로 이동하여 실행 세부 정보에 액세스하거나 startFlow(),startSubflow() 또는 startAction() 메서드에서 반환된 컨텍스트 기록의 sys_id 전달합니다. 주: 대상 컨텍스트가 인스턴스의 다른 노드에서 실행 중인 경우 취소가 약간 지연될 수 있습니다. 동일한 노드에서 실행 중인 컨텍스트는 즉시 취소됩니다. 다른 노드에서 실행 중인 컨텍스트는 먼저 취소가 적절한 노드로 전달될 때까지 기다려야 합니다. |
| 이유 | 문자열 | 옵션입니다. 플로우, 하위 플로우 또는 작업을 취소하는 이유입니다. 플로우 엔진 로그 항목 [sys_flow_log] 테이블의 메시지 필드에 나타납니다. |
| 유형 | 설명 |
|---|---|
| void |
이 예제에서는 startFlow() 메서드의 반환 값을 사용하여 장기 실행 흐름을 취소합니다.
(function() {
var now_GR = new GlideRecord('incident');
now_GR.addQuery('number', 'INC0000050');
now_GR.query();
now_GR.next();
try {
var inputs = {};
inputs['current'] = now_GR; // GlideRecord of table:
inputs['table_name'] = 'incident';
// Starts the flow asynchronously.
var result = sn_fd.FlowAPI.getRunner()
.flow('global.myFlow')
.inBackground()
.withInputs(inputs)
.run();
var contextId = result.getContextId();
var dateRun = result.getDate();
var domainUsed = result.getDomainId();
var flowName = result.getFlowObjectName();
var flowObjectType = result.getFlowObjectType();
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
// Call the cancel() method using the context Id returned from the startFlow() method
sn_fd.FlowAPI.cancel(contextId, 'Flow took too long to execute.');
이 예에서는 테스트 플로우라는 모든 플로우를 취소합니다.
var now_GR = new GlideRecord("sys_flow_context");
now_GR.addQuery("name", "Test Flow");
now_GR.query();
while (now_GR.next()) {
sn_fd.FlowAPI.cancel(now_GR.getUniqueValue(), 'Canceling Test Flows');
}
FlowAPI - executeAction(문자열 이름, 맵 입력, 숫자 시간 초과)
서버 측 스크립트에서 작업을 동기적으로 실행합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 작업의 범위와 이름(예: global.action_name)입니다. |
| 입력 | 맵 | 작업 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. |
| 시간 제한 | 번호 | 옵션입니다. 시간 제한(밀리초)입니다. 이 값은 시스템 속성에 지정된 30초의 기본 시간 제한을 무효화합니다 com.glide.hub.flow_api.default_execution_time . 제한 시간이 만료되면 예외가 throw됩니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 작업이 출력됩니다. |
이 예시에서 스크립트는 sn_fd 사용합니다. FlowAPI.executeAction 을 사용하여 전역 범위에서 actionforpassword2test라는 작업을 실행할 수 있습니다. inputs라는 변수에는 작업에 대한 입력이 포함되어 있습니다. 이 경우 이름과 암호입니다. 작업에 대한 출력은 outputs 변수에 저장되며, 이 경우 암호화된 암호 개체입니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
var inputs = {};
inputs['name'] = ; // String
inputs['password2'] = ; // Password (2 Way Encrypted)
// Execute Synchronously: Run in foreground. Code snippet has access to outputs.
// var timeout = ; //timeout in ms
//sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs, timeout)
var outputs = sn_fd.FlowAPI.executeAction('global.actionforpassword2test', inputs);
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var output = outputs['output']; // Password (2 Way Encrypted)
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - executeActionQuick(문자열 이름, 맵 입력, 번호 시간 초과)
실행 세부 정보 또는 기타 관련 기록을 만들지 않고 현재 사용자 세션에서 서버 측 스크립트에서 동기식으로 작업을 실행합니다. 기록 보관 오버헤드를 제거하여 성능을 향상시킵니다. 이 API를 사용하여 프로덕션 환경에서 대용량 처리(예: 초당 여러 실행)의 속도를 높입니다.
- 보고 및 기록 생성됨
- 이 메서드는 설정에 관계없이 워크플로우 스튜디오 실행 세부 정보 및 컨텍스트 기록을 생성하지 않습니다.
- 대기 지원
- 이 메서드는 조건을 대기하기 위해 작업 일시 중지를 지원하지 않습니다. 승인 요청 또는 조건 대기와 같은 대기 조건으로 일시 중지하는 단계는 지원되지 않습니다.
- MID Server 지원
- 이 방법은 MID 서버에서 실행할 작업의 일시 중지를 지원하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 작업의 범위 및 내부 이름입니다. 예: global.action_name. 작업 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 입력 | 맵 | 작업 입력을 정의하는 이름-값 쌍입니다. 작업 개요의 입력에서 사용 가능한 동작 입력과 필수 데이터 유형을 찾을 수 있습니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 예: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}. |
| 시간 제한 | 번호 | 옵션입니다. 시간 제한(밀리초)입니다. 이 값은 시스템 속성에 지정된 30초의 기본 시간 제한을 무효화합니다 com.glide.hub.flow_api.default_execution_time . 제한 시간이 만료되면 예외가 throw됩니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 작업에 의해 정의된 출력을 포함하는 객체입니다. 작업 개요의 출력에서 작업에 대한 출력을 찾을 수 있습니다. |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
var outputs = sn_fd.FlowAPI.executeActionQuick('global.update_record_test', inputs);
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var output1 = outputs['output1'];
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - executeDataStreamAction(문자열 이름, 맵 입력, 숫자 시간 초과)
서버 측 스크립트에서 데이터 스트림 작업을 동기식으로 실행하고 ScriptableDataStream 객체를 반환합니다.
데이터 스트림 작업에 대한 자세한 내용은 데이터 스트림 작업 및 페이지 매김을 참조하십시오.
try/catch 블록에 데이터 스트림 논리를 래핑하여 오류를 catch합니다. 데이터 스트림을 닫고 성능 문제를 방지하기 위해 항상 ScriptableDataStream 클래스의 close() 메서드로 끝나는 finally 문을 포함하십시오.| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 데이터 스트림 작업의 범위 및 이름입니다. 예: global.data_stream_action_name. |
| 입력 | 맵 | 작업 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 작업에 입력이 없는 경우 이 매개변수를 포함하지 마십시오. |
| 시간 제한 | 번호 | 옵션입니다. 작업 시간이 초과되기까지의 시간입니다. 제한 시간이 만료되면 예외가 throw됩니다. 시간 제한은 executeDataStreamAction 메서드에만 적용되며 ScriptableDataStream 클래스의 메서드에는 적용되지 않습니다. 기본값: 30000, 시스템 속성에 의해 지정됨 com.glide.hub.flow_api.default_execution_time 단위: 밀리초 |
| 유형 | 설명 |
|---|---|
| 스크립트 가능 데이터 스트림 | 데이터 스트림의 항목을 반복하는 데 사용되는 객체입니다. ScriptableDataStream 클래스의 메서드를 사용하여 이 객체와 상호 작용합니다. ScriptableDataStream API를 참조하십시오. |
이 예제에서는 데이터 스트림에 반환된 각 항목에 대한 인시던트 기록을 만듭니다.
(function() {
try {
// Execute Data Stream Action.
var stream = sn_fd.FlowAPI.executeDataStreamAction('x_my_scope.data_stream_name');
// Process each item in the data stream
while (stream.hasNext()) {
// Get a single item from the data stream.
var item = stream.next();
// Use the item.
var now_GR = new GlideRecord('incident');
now_GR.setValue('number',item.id);
now_GR.setValue('short_description',item.name);
now_GR.insert();
// By default, this code snippet will terminate after 10 items.
// Remove or modify this limit after testing your code.
if (stream.getItemIndex() >= 9) {
break;
}
}
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
} finally {
stream.close();
}
})();
FlowAPI - executeFlow(문자열 이름, 맵 입력, 숫자 시간 초과)
서버 측 스크립트에서 흐름을 동기적으로 실행합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 플로우의 범위와 이름입니다(예: global.flow_name). |
| 입력 | 맵 | 트리거 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. |
| 시간 제한 | 번호 | 옵션입니다. 시간 제한(밀리초)입니다. 이 값은 시스템 속성에 지정된 30초의 기본 시간 제한을 무효화합니다 com.glide.hub.flow_api.default_execution_time . 제한 시간이 만료되면 예외가 throw됩니다. |
| 유형 | 설명 |
|---|---|
| 없음 | 정상 작동은 반환 값을 생성하지 않습니다. |
| 예외 | API는 동기적으로 호출된 흐름이 일시 중지될 때 예외를 발생시킵니다. 현재 실행이 대기 상태에 있습니다. 대부분의 경우 흐름이 다시 시작될 때 예외가 제거됩니다. 그러나 API는 MID 서버로 전송된 플로우를 재개할 수 없습니다. |
이 예제에서는 sn_fd 사용합니다. FlowAPI.executeFlow를 사용하여 test_flow라는 전역 플로우를 실행합니다. 이 플로우는 일반적으로 인시던트 테이블의 기록이 업데이트될 때 트리거됩니다. 스크립트에서 플로우를 활성화하기 때문에 이 정보를 제공해야 합니다. 이 코드는 현재 레코드와 레코드에 대한 테이블을 포함하는 inputs 변수를 만듭니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
var inputs = {};
inputs['current'] = ; // GlideRecord of table:
inputs['table_name'] = 'incident';
// Execute Synchronously: Run in foreground.
// var timeout = ; //timeout in ms
//sn_fd.FlowAPI.executeFlow('global.test_flow', inputs, timeout)
sn_fd.FlowAPI.executeFlow('global.test_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - executeFlowQuick(문자열 이름, 맵 입력, 숫자 시간 초과)
실행 세부 정보 또는 기타 관련 기록을 만들지 않고 서버 측 스크립트에서 플로우, 하위 플로우, 작업 또는 데이터 스트림 작업을 동기식 또는 비동기식으로 실행합니다. 기록 보관 오버헤드를 제거하여 성능을 향상시킵니다. 이 API를 사용하여 프로덕션 환경에서 대용량 처리(예: 초당 여러 실행)의 속도를 높입니다.
- 보고 및 기록 생성됨
- 이 메서드는 설정에 관계없이 워크플로우 스튜디오 실행 세부 정보 및 컨텍스트 기록을 생성하지 않습니다.
- 사용자로 실행
- 이 메서드는 세션을 시작한 사용자로 플로우를 실행합니다. 시스템 사용자로 실행되도록 플로우를 설정하거나 사용자를 가장하는 것은 지원되지 않습니다.
- 대기 지원
- 이 메서드는 조건을 기다리기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다. 승인 요청, 조건 대기 또는 기간 대기와 같은 대기 조건으로 인해 일시 중지되는 작업 또는 플로우 논리는 지원되지 않습니다.
- MID Server 지원
- 이 메서드는 MID 서버에서 실행하기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 플로우의 범위 및 내부 이름입니다. 예: global.flow_name. 플로우 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 입력 | 맵 | 트리거 입력을 정의하는 이름-값 쌍입니다. 플로우의 트리거 섹션에서 사용 가능한 트리거 입력과 필수 데이터 유형을 찾을 수 있습니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 예: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}. |
| 시간 제한 | 번호 | 옵션입니다. 시간 제한(밀리초)입니다. 이 값은 시스템 속성에 지정된 30초의 기본 시간 제한을 무효화합니다 com.glide.hub.flow_api.default_execution_time . 제한 시간이 만료되면 예외가 throw됩니다. |
| 유형 | 설명 |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
var inputs = {};
inputs['current'] = grIncident;
inputs['table_name'] = 'incident';
sn_fd.FlowAPI.executeFlowQuick('global.test_quick_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - executeSubflow(문자열 이름, 맵 입력, 숫자 시간 초과)
서버 측 스크립트에서 하위 플로우를 동기적으로 실행합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행될 하위 플로우의 범위와 이름입니다(예: global.subflow_name). |
| 입력 | 맵 | 하위 플로우 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. |
| 시간 제한 | 번호 | 옵션입니다. 시간 제한(밀리초)입니다. 이 값은 시스템 속성에 지정된 30초의 기본 시간 제한을 무효화합니다 com.glide.hub.flow_api.default_execution_time . 제한 시간이 만료되면 예외가 throw됩니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 하위 플로우 출력을 포함하는 객체입니다. |
| 예외 | API는 동기적으로 호출된 흐름이 일시 중지될 때 예외를 발생시킵니다. 현재 실행이 대기 상태에 있습니다. 대부분의 경우 흐름이 다시 시작될 때 예외가 제거됩니다. 그러나 API는 MID 서버로 전송된 플로우를 재개할 수 없습니다. |
이 예시에서 스크립트는 sn_fd 사용합니다. FlowAPI.executeSubflow를 사용하여 전역 범위에서 subflowTest라는 하위 플로우를 실행합니다. inputs라는 변수에는 하위 플로우에 대한 입력이 포함되어 있습니다. 이 경우 이름과 암호입니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
var inputs = {};
inputs['name'] = ; // String
inputs['password2'] = ; // Password (2 Way Encrypted)
// Execute Synchronously: Run in foreground.
// var timeout = ; //timeout in ms
//sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs, timeout)
var outputs = sn_fd.FlowAPI.executeSubflow('global.subflowTest', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - executeSubflowQuick(문자열 이름, 맵 입력, 번호 시간 초과)
실행 세부 정보 또는 기타 관련 기록을 만들지 않고 현재 사용자 세션에서 동기식으로 서버 측 스크립트의 하위 플로우를 실행합니다. 기록 보관 오버헤드를 제거하여 성능을 향상시킵니다. 이 API를 사용하여 프로덕션 환경에서 대용량 처리(예: 초당 여러 실행)의 속도를 높입니다.
- 보고 및 기록 생성됨
- 이 메서드는 설정에 관계없이 워크플로우 스튜디오 실행 세부 정보 및 컨텍스트 기록을 생성하지 않습니다.
- 사용자로 실행
- 이 메서드는 세션을 시작한 사용자로 플로우를 실행합니다. 시스템 사용자로 실행되도록 플로우를 설정하거나 사용자를 가장하는 것은 지원되지 않습니다.
- 대기 지원
- 이 메서드는 조건을 기다리기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다. 승인 요청, 조건 대기 또는 기간 대기와 같은 대기 조건으로 인해 일시 중지되는 작업 또는 플로우 논리는 지원되지 않습니다.
- MID Server 지원
- 이 메서드는 MID 서버에서 실행하기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 하위 플로우의 범위 및 내부 이름입니다. 예: global.subflow_name. 하위 플로우 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 입력 | 맵 | 하위 플로우 입력을 정의하는 이름-값 쌍입니다. 사용 가능한 하위 플로우 입력과 필수 데이터 유형은 하위 플로우의 입력에서 찾을 수 있습니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 예: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}. |
| 시간 제한 | 번호 | 옵션입니다. 시간 제한(밀리초)입니다. 이 값은 시스템 속성에 지정된 30초의 기본 시간 제한을 무효화합니다 com.glide.hub.flow_api.default_execution_time . 제한 시간이 만료되면 예외가 throw됩니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 하위 플로우에 의해 정의된 출력을 포함하는 객체입니다. 하위 플로우 개요의 하위 플로우 입력 및 출력 에서 하위 플로우에 대한 출력을 찾을 수 있습니다. |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
var outputs = sn_fd.FlowAPI.executeSubflowQuick('global.test_quick_run_subflow', inputs);
// Get Outputs:
// Note: outputs can only be retrieved when executing synchronously.
var output1 = outputs['output1'];
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - getErrorMessage(문자열 contextId)
플로우, 하위 플로우 또는 작업에 의해 생성된 오류 메시지를 반환합니다. 이 메서드는 quick() API로 실행되는 플로우, 하위 플로우 또는 작업에서 메시지를 반환할 수 없습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextId | 문자열 | 오류 메시지를 가져오려는 플로우, 하위 플로우 또는 작업의 sys_id입니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 마지막으로 실행된 작업 및 생성된 오류 메시지입니다. |
이 예제에서는 test_error_subflow라는 전역 하위 플로우를 시작하고 생성된 오류 메시지를 반환합니다. 일반적으로 단일 스크립트에서 흐름을 실행한 다음 오류 메시지를 가져오지는 않습니다. 일반적으로 다른 스크립트이거나 워크플로우 스튜디오 이미 플로우를 실행했을 것입니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
// Gather inputs to call flow
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
// Call flow with known errors
var contextId = sn_fd.FlowAPI.startSubflow('global.test_error_subflow', inputs);
// Get flow error message
var errormsg = sn_fd.FlowAPI.getErrorMessage(contextId);
return errormsg;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
출력:
Operation (test_error_flow.574033f6db6811102166e2291396199f.274073f6db6811102166e22913961908.0be0d916c31332002841b63b12d3ae13) failed with error: com.snc.process_flow.exception.OpException: Value of field record is not a GlideRecord
at com.snc.process_flow.operation.FieldValue.getGlideRecord(FieldValue.java:145)
at com.snc.process_flow.operation.CRUDOperation.getInputValidGlideRecord(CRUDOperation.java:54)
at com.snc.process_flow.operation.RecordDeleteOperation.run(RecordDeleteOperation.java:26)
at com.snc.process_flow.engine.Operation.execute(Operation.java:212)
at com.snc.process_flow.engine.restricted_caller_access.ExecuteWithCallerAccessTracking.executeWithMetaStack(ExecuteWithCallerAccessTracking.java:31)
at com.snc.process_flow.engine.ProcessEngine.executeOps(ProcessEngine.java:570)
at com.snc.process_flow.engine.ProcessEngine.runInternal(ProcessEngine.java:476)
at com.snc.process_flow.engine.ProcessEngine.run(ProcessEngine.java:462)
at com.snc.process_flow.engine.ProcessAutomation.run(ProcessAutomation.java:86)
at com.snc.process_flow.engine.GlideProcessAutomation.runSync(GlideProcessAutomation.java:155)
at com.snc.process_flow.engine.GlideProcessAutomation.runWithDomain(GlideProcessAutomation.java:270)
at com.snc.process_flow.engine.GlideProcessAutomation.lambda$runAsUserSync$1(GlideProcessAutomation.java:237)
at com.snc.process_flow.engine.PFSessionClone.run(PFSessionClone.java:70)
at com.snc.process_flow.engine.GlidePFSession.runPlanAsUserSession(GlidePFSession.java:42)
at com.snc.process_flow.engine.GlideProcessAutomation.runAsUserSync(GlideProcessAutomation.java:235)
at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:330)
at com.snc.process_flow.engine.GlideProcessAutomation.messageFlow(GlideProcessAutomation.java:309)
at com.snc.process_flow.engine.ProcessHubEventHandler.doSendMessage(ProcessHubEventHandler.java:475)
at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:119)
at com.snc.process_flow.engine.ProcessHubEventHandler.process(ProcessHubEventHandler.java:91)
at com.snc.process_flow.engine.FlowEventManager.processEvents(FlowEventManager.java:122)
at com.glide.job.EventHandlerJob.execute(EventHandlerJob.java:38)
at com.glide.schedule.JobExecutor.lambda$executeJob$0(JobExecutor.java:129)
at com.snc.db.data_replicate.replicator.DataReplicationAdvisors.runInOriginatorContext(DataReplicationAdvisors.java:73)
at com.glide.schedule.JobExecutor.lambda$inDataReplicationContext$2(JobExecutor.java:159)
at com.glide.schedule.JobExecutor.executeJob(JobExecutor.java:132)
at com.glide.schedule.JobExecutor.execute(JobExecutor.java:116)
at com.glide.schedule_v2.SchedulerWorkerThread.executeJob(SchedulerWorkerThread.java:338)
at com.glide.schedule_v2.SchedulerWorkerThread.lambda$process$0(SchedulerWorkerThread.java:220)
at com.glide.worker.TransactionalWorkerThread.executeInTransaction(TransactionalWorkerThread.java:35)
at com.glide.schedule_v2.SchedulerWorkerThread.process(SchedulerWorkerThread.java:220)
at com.glide.schedule_v2.SchedulerWorkerThread.run(SchedulerWorkerThread.java:101)
FlowAPI - getFlowStages(문자열 scopedFlowName)
플로우 단계 목록이 포함된 JSON 문자열을 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| scopedFlowName입니다. | 문자열 | 스테이지를 가져오려는 플로우의 애플리케이션 범위와 이름입니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 스테이지 기록 값으로 플로우의 스테이지를 나열하는 JSON 형식의 문자열입니다. |
이 예는 Service Catalog 항목 요청 플로우의 스테이지를 가져오는 방법을 보여줍니다.
(function() {
try {
// Name of flow with stages
var flowName = "service_catalog_item_request";
// Get flow stages
var flowStages = sn_fd.FlowAPI.getFlowStages(flowName);
//Print JSON as info message
gs.info(flowStages);
return flowStages;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
출력:
JSON 문자열에는 스테이지 필드에 대한 이름-값 페어가 포함되어 있습니다. 자세한 내용은 문서를 참조하십시오.
[
{
"label": "Manager Approval",
"value": "manager_approval",
"type": "standard",
"duration": "1970-01-03 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 0
},
{
"label": "Set current stage state to: [Error]",
"value": "Set current stage state to: [Error]",
"type": "error",
"duration": "1970-01-01 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": false,
"order": 0
},
{
"label": "Dept. Head Approval",
"value": "Dept. Head Approval",
"type": "standard",
"duration": "1970-01-03 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 1
},
{
"label": "CIO Approval",
"value": "CIO Approval",
"type": "standard",
"duration": "1970-01-03 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 2
},
{
"label": "Order Fulfillment",
"value": "Order Fulfillment",
"type": "standard",
"duration": "1970-01-05 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 3
},
{
"label": "Backordered",
"value": "Backordered",
"type": "standard",
"duration": "1970-01-15 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 4
},
{
"label": "Deployment",
"value": "Deployment",
"type": "standard",
"duration": "1970-01-02 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 5
},
{
"label": "Request Cancelled",
"value": "Request Cancelled",
"type": "standard",
"duration": "1970-01-01 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 6
},
{
"label": "Completed",
"value": "complete",
"type": "standard",
"duration": "1970-01-01 00:00:00",
"states": {
"pending": "Pending - has not started",
"inprogress": "In progress",
"skipped": "Skipped",
"complete": "Completed",
"error": "Error"
},
"flow": "30f3d26187e92300e0ef0cf888cb0b91",
"alwaysShow": true,
"order": 7
}
]
FlowAPI - getOutputs(문자열 contextId)
완료된 작업 또는 하위 플로우의 출력을 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextId | 문자열 | 가져오려는 출력의 작업 또는 하위 플로우의 sys_id입니다. |
| 유형 | 설명 |
|---|---|
| 객체 | 작업 또는 하위 플로우 출력을 포함하는 객체입니다. |
이 예제에서는 test_subflow라는 전역 하위 플로우를 시작하고, 플로우가 끝날 때까지 기다린 다음, 출력 값을 가져옵니다. 일반적으로 단일 스크립트는 흐름을 실행한 다음 출력 값을 가져오지 않습니다. getOutputs() 호출 전에 흐름이 완료되지 않을 수 있으므로 이 예제에서는 대기 시간을 사용합니다. 일반적으로 다른 스크립트이거나 워크플로우 스튜디오 이미 플로우를 실행했을 것입니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
// Gather inputs to call flow
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
// Call flow
var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
// Wait for the flow to finish running
// Get flow outputs
var outputs = sn_fd.FlowAPI.getOutputs(contextId);
var output1 = outputs['output1'];
return output1;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - getRunner()
실행하려는 플로우 또는 작업에 대한 ScriptableFlowRunner 빌더 객체를 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 없음 |
| 유형 | 설명 |
|---|---|
| ScriptableFlowRunner | 작업, 플로우 또는 하위 플로우를 실행하는 데 사용되는 작성기 객체입니다 워크플로우 스튜디오 . |
이 예시에서는 흐름을 동기적으로 실행합니다.
(function() {
try {
var inputs = {};
inputs['sys_id'] = '57af7aec73d423002728660c4cf6a71c'; // Pass the record's sys_id in as input.
var result = sn_fd.FlowAPI.getRunner() // Create a ScriptableFlowRunner builder object.
.action('global.markapproved') // Run the global scope action named markapproved.
.inForeground()
.inDomain('TOP/ACME') // Run the action from the TOP/ACME domain.
.withInputs(inputs)
.run(); // Run the action and return a FlowRunnerResult object.
var contextId = result.getContextId(); // Retrieve the context ID from the result
var dateRun = result.getDate();
var domainUsed = result.getDomainId(); // Retrieve the Domain ID from the result.
var flowName = result.getFlowObjectName();
var flowObjectType = result.getFlowObjectType();
var outputs = result.getOutputs(); // Retrieve any outputs from the action execution.
var newApprovalStatus = outputs['approval']; // Echo back the approval status for verification.
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - getStatus(문자열 contextId)
플로우, 하위 플로우 또는 작업의 상태를 반환합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextId | 문자열 | 상태를 가져오려는 플로우, 하위 플로우 또는 작업의 sys_id입니다. |
| 매개변수 | 유형 | 설명 |
|---|---|---|
| <문자열> | 문자열 | 플로우, 하위 플로우 또는 작업의 현재 상태를 이름-값 쌍으로 포함하는 JSON 형식의 문자열입니다. |
| <String>.hasLookupError | 부울 | 플로우, 하위 플로우 또는 작업의 컨텍스트 상태를 조회하는 동안 문제가 발생했는지 여부를 나타내는 플래그입니다. |
| <String>.errorMessage | 문자열 | 컨텍스트 조회 작업에서 반환된 오류 메시지입니다. 이 매개 변수는 false인 경우 hasLookupError void입니다. |
| <String>.contextStatus | 객체 | 쿼리된 플로우, 하위 플로우 또는 작업에 대한 상태 상세 정보를 포함하는 JSON 형식의 문자열입니다. |
| <String>.contextStatus.state | 문자열 | 플로우, 하위 플로우 또는 작업 컨텍스트의 상태입니다. 일부 상태 값은 관련 매개변수에 추가 정보를 제공합니다.
|
| <String>.contextStatus.errorState | 문자열 | 플로우 오류 처리에 의해 생성된 플로우 완료 상태입니다. API는 플로우, 하위 플로우 또는 작업이 COMPLETE 상태인 경우에만 이 매개변수를 생성합니다.
|
| <String>.contextStatus.message | 문자열 | 플로우, 하위 플로우 또는 작업에서 반환되는 오류 메시지입니다. API는 플로우, 하위 플로우 또는 작업이 오류 상태인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.canceledReason | 문자열 | 플로우, 하위 플로우 또는 작업에서 반환된 취소 메시지입니다. API는 플로우, 하위 플로우 또는 작업이 CANCELLED 상태인 경우에만 이 파라미터를 생성합니다. |
| <String>.contextStatus.isRunOnMid | 부울 | 플로우, 하위 플로우 또는 작업이 MID 서버 환경에서 실행되는지 여부를 나타내는 플래그입니다. API는 플로우, 하위 플로우 또는 작업이 IN_PROGRESS 상태인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.waitingOn | 배열 | 현재 플로우, 하위 플로우 또는 작업이 대기 중인 항목의 목록입니다. API는 플로우, 하위 플로우 또는 작업이 대기 중인 상태인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.waitingOn.stepType | 문자열 | 플로우, 하위 플로우 또는 작업이 대기 중인 이유 목록입니다. API는 플로우, 하위 플로우 또는 작업이 대기 중인 상태인 경우에만 이 매개변수를 생성합니다.
|
| <String>.contextStatus.waitingOn.table | 문자열 | 플로우, 하위 플로우 또는 작업이 대기 중인 기록을 포함하는 테이블 이름입니다. API는 플로우, 하위 플로우 또는 작업이 WAITING 상태이고 stepType이 WAIT_FOR_CONDITION, WAIT_FOR_CONDITION_WITH_TIMEOUT, ASK_FOR_APPROVAL 또는 CREATE_TASK_WITH_WAIT인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.waitingOn.condition | 문자열 | 플로우, 하위 플로우 또는 작업이 대기 중인 기록의 쿼리 조건입니다. API는 플로우, 하위 플로우 또는 작업이 WAITING 상태이고 stepType이 WAIT_FOR_CONDITION, WAIT_FOR_CONDITION_WITH_TIMEOUT, ASK_FOR_APPROVAL 또는 CREATE_TASK_WITH_WAIT인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.waitingOn.endTime | 정수 | 플로우, 하위 플로우 또는 작업이 대기 중인 종료 시간입니다. API는 플로우, 하위 플로우 또는 작업이 WAITING 상태이고 stepType이 WAIT_FOR_CONDITION_WITH_TIMEOUT, TIMER 또는 SLA_TIMER인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.waitingOn.approvalRule | 문자열 | 플로우, 하위 플로우 또는 작업이 대기 중인 승인 규칙입니다. API는 플로우, 하위 플로우 또는 작업이 WAITING 상태이고 stepType이 ASK_FOR_APPROVAL인 경우에만 이 매개변수를 생성합니다. |
| <String>.contextStatus.waitingOn.contextId | 문자열 | 플로우 또는 하위 플로우가 대기 중인 하위 플로우의 sys_id입니다. API는 플로우 또는 하위 플로우가 WAITING 상태이고 stepType이 SUBFLOW인 경우에만 이 매개변수를 생성합니다. |
이 예시에서는 다음을 병렬 플로우 로직으로 실행합니다. 일반적으로 단일 스크립트에서 흐름을 실행한 다음 오류 메시지를 가져오지는 않습니다. 일반적으로 다른 스크립트이거나 워크플로우 스튜디오 이미 플로우를 실행했을 것입니다.
(function() {
try {
var result = sn_fd.FlowAPI.getRunner() // Create a ScriptableFlowRunner builder object.
.flow('global.test_do_in_parallel') // Run the global scope flow named do_in_parallel.
.run(); // Run the action and return a FlowRunnerResult object.
var contextId = result.getContextId(); // Retrieve the context ID from the result
var flowStatus = sn_fd.FlowAPI
.getStatus(contextId); // Retrieve any outputs from the action execution.
return flowStatus;
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
{
"hasLookupError": false,
"errorMessage": "",
"contextStatus": {
"state": "WAITING",
"waitingOn": [
{
"stepType": "TIMER",
"endTime": 1713627497643
},
{
"stepType": "WAIT_FOR_CONDITION_WITH_TIMEOUT",
"table": "incident",
"condition": "sys_id=10e8b43243200210338774d6ebb8f22d^short_description=112",
"endTime": 1713645497800
}
]
}
}FlowAPI - hasApprovals(String scopedFlowName)
제공 범위 내의 플로우에 승인 요청 작업이 포함되어 있는지 확인합니다.
hasApprovals() 메서드는 지정된 범위 내의 플로우에 승인 요청 작업이 포함되어 있는지 확인합니다. 또한 이 메서드는 플로우 내의 승인 요청 작업이 플로우 로직 블록인 경우 아래에 중첩되어 있는지도 확인합니다. 자세한 내용은 승인 요청 작업을 참조하세요.
| 이름 | 유형 | 설명 |
|---|---|---|
| scopedFlowName입니다. | 문자열 | 실행할 플로우의 범위 및 내부 이름입니다. 예: global.flow_name. 플로우 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 다음 문자열 값 중 하나를 반환합니다.
|
다음 예제에서는 전역 범위 내의 example_flow 플로우에 승인 요청 작업이 포함되어 있는지 확인하고 결과를 기록합니다.
(function() {
try {
var result = sn_fd.FlowAPI.hasApprovals('global.example_flow');
gs.log('Result: ' + result);
}
catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - restartFlowFromContext(문자열 ContextId, 맵 providedInputs)
백그라운드에서 실행된 플로우, 하위 플로우 또는 작업을 다시 시작합니다. 새 입력을 제공하거나 생략하여 이전에 제공된 입력을 재사용할 수 있습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextId | 문자열 | 재시작하려는 플로우, 하위 플로우 또는 작업의 sys_id입니다. 이 플로우, 하위 플로우 또는 작업은 백그라운드에서 실행되어야 하며 연결된 sysevent 기록이 있어야 합니다. |
| providedInputs (제공된 입력) | 객체 | 옵션입니다. 흐름, 하위 흐름 또는 동작에 대한 대체 입력을 정의하는 이름-값 쌍을 포함하는 Map 객체입니다. 이 매개변수에 null 값을 생략하거나 제공하면 플로우, 하위 플로우 또는 작업이 이전에 제공된 입력을 사용하여 실행됩니다. |
| 유형 | 설명 |
|---|---|
| ScriptableFlowRunnerResultsScoped | 작업, 플로우 또는 하위 플로우의 실행 상세 정보를 포함하는 객체입니다 워크플로우 스튜디오 . |
인시던트 테이블에 기록 기반 트리거가 있는 샘플 플로우를 다시 시작합니다. 원래 플로우에서는 샘플 인시던트 INC0008112 입력으로 사용했습니다. 플로우가 다시 시작되면 샘플 인시던트 INC0008111 대신 입력으로 사용됩니다.
(function() {
try {
var flowContextID = '4216396ffd7d11107edcf07204c30fd5'; // sys_id of sys_flow_context record
var oldIncidentRecord = '552c48888c033300964f4932b03eb092'; // sys_id of INC0008112
var newIncidentRecord = 'a83820b58f723300e7e16c7827bdeed2'; // sys_id of INC0008111
var inputs = {};
var gr = new GlideRecord('incident'); // Create new incident object
gr.get(newIncidentRecord); // Get GlideRecord object for INC0008111
inputs['current'] = gr; // Set new Incident record as input
inputs['table_name'] = 'incident'; // Set table name to Incident
var result = sn_fd.FlowAPI.getRunner() // Create a ScriptableFlowRunner builder object.
.restartFlowFromContext(flowContextID, inputs); // Restart flow with new inputs.
var contextId = result.getContextId(); // Retrieve the context ID from the result
var dateRun = result.getDate();
gs.info(contextId + ' ' + dateRun);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - scheduleCancel(문자열 contextId, 문자열 이유, 정수 delaySeconds)
플로우 엔진 큐에서 시스템 이벤트를 예약하여 지연 후 진행 중, 중단된 것으로 추정 또는 대기 상태에 있는 플로우를 취소합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| contextId | 문자열 | 플로우, 하위 플로우 또는 작업에 대한 실행 세부 정보 기록의 Sys_id입니다. 대상 플로우, 하위 플로우 또는 작업이 진행 중, 중단된 것으로 추정됨 또는 대기 상태여야 합니다. 의 워크플로우 스튜디오플로우 실행 탭으로 이동하여 실행 세부 정보에 액세스하거나 메서드가 반환한 컨텍스트 기록의 sys_id 전달합니다. 주: 대상 컨텍스트가 인스턴스의 다른 노드에서 실행 중인 경우 취소가 약간 지연될 수 있습니다. 동일한 노드에서 실행 중인 컨텍스트는 즉시 취소됩니다. 다른 노드에서 실행 중인 컨텍스트는 먼저 취소가 적절한 노드로 전달될 때까지 기다려야 합니다. |
| 이유 | 문자열 | 플로우, 하위 플로우 또는 작업을 취소하는 이유입니다. 플로우 엔진 로그 항목 [sys_flow_log] 테이블의 메시지 필드에 나타납니다. |
| delaySeconds (지연초) | 정수 | 옵션입니다. 플로우 엔진 큐에서 취소 이벤트를 처리하기 전에 대기할 시간(초)입니다. 이 매개 변수를 생략하면 메서드는 기본값 1초를 사용합니다. 이 매개변수를 사용하면 수천 개의 플로우 컨텍스트를 동시에 취소하도록 예약할 때 성능에 미치는 영향을 방지할 수 있습니다. 모든 취소를 동시에 실행하는 대신 지연 시간을 사용하여 플로우 취소 배치를 예약합니다. 또는 지연을 비동기 플로우의 시간 제한 값으로 사용할 수 있습니다. |
| 유형 | 설명 |
|---|---|
| 없음 |
이 예제에서는 startFlow() 메서드의 반환 값을 사용하여 장기 실행 흐름의 취소를 예약합니다.
(function() {
var now_GR = new GlideRecord('incident');
now_GR.addQuery('number', 'INC0000050');
now_GR.query();
now_GR.next();
try {
var inputs = {};
inputs['current'] = now_GR; // GlideRecord of table:
inputs['table_name'] = 'incident';
// Starts the flow asynchronously.
var contextId = sn_fd.FlowAPI.startFlow('global.myFlow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
// Call the scheduleCancel() method using the context Id returned from the startFlow() method
sn_fd.FlowAPI.scheduleCancel(contextId, 'Flow took too long to execute.', 60);
이 예시에서는 Test Flow라는 플로우의 취소를 예약합니다.
var now_GR = new GlideRecord("sys_flow_context");
now_GR.addQuery("name", "Test Flow");
now_GR.query();
while (now_GR.next()) {
sn_fd.FlowAPI.scheduleCancel(now_GR.getUniqueValue(), 'Canceling Test Flows', 60);
}
이 예제에서는 delaySeconds 파라미터를 사용하여 흐름 취소 작업을 일괄적으로 실행합니다. 배치를 사용하여 수천 개의 플로우 컨텍스트를 취소합니다.
var delaySeconds = 1;
for (var i; i < sys_flow_context.length; ++i) {
if (i % 100 === 0) {
delaySeconds = delaySeconds + 60;
}
var contextId = sys_flow_context[i];
var reason = "Example reason";
sn_fd.FlowAPI.scheduleCancel(contextId, reason, delaySeconds);
}
FlowAPI - setEncryptedOutput(문자열 암호)
스크립트 단계 내에 password2 값을 빌드합니다.
GlideRecord에서 반환된 암호화된 password2 값을 식별하여 시스템에서 값을 암호화된 문자열이 아닌 마스킹된 암호로 표시할 수 있도록 합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 암호 | 문자열 | 암호화된 password2 값입니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 엔진에서 암호 값으로 인식하는 암호화된 password2 값입니다. |
이 예제에서는 사용자 기록에서 password2 필드의 값을 반환하고 변수에 저장합니다. 이 변수는 sn_fd를 사용하여 호출되는 setEncryptedOutput 메서드에 전달됩니다. GlideActionUtil.setEncryptedOutput 인스턴스는 반환된 값을 암호로 인식합니다.
(function execute(inputs, outputs) {
// ...code...
var now_GR = new GlideRecord('sys_user');
now_GR.addQuery('first_name' , 'Abel');
now_GR.query();
now_GR.next();
var pwVal = now_GR.getValue('pw2');
outputs['usedSetEncrypted'] = sn_fd.GlideActionUtil.setEncryptedOutput(pwVal);
outputs['justSetDirectly'] = pwVal;
})(inputs, outputs);
FlowAPI - startAction(문자열 이름, 맵 입력)
서버 측 스크립트에서 비동기식으로 작업을 실행합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 작업의 범위와 이름(예: global.action_name)입니다. |
| 입력 | 맵 | 작업 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 작업에 대한 컨텍스트 기록의 시스템 ID입니다. 의 워크플로우 스튜디오플로우 실행 탭으로 이동하여 플로우 실행을 선택하고 컨텍스트 기록 열기를 클릭하여 컨텍스트 기록에 액세스합니다. |
이 예제에서는 sn_fd 사용합니다. FlowAPI.startAction을 사용하여 sn_itsm_spoke 범위에서 add_comment라는 작업을 실행할 수 있습니다. inputs 객체에는 대상 기록과 해당 기록에 추가할 주석이 포함되어 있습니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
var contextId = sn_fd.FlowAPI.startAction('sn_itsm_spoke.add_comment', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - startActionQuick(문자열 이름, 맵 입력)
실행 세부 정보 또는 기타 관련 기록을 만들지 않고 서버 측 스크립트에서 비동기식으로 작업을 실행합니다. 기록 보관 오버헤드를 제거하여 성능을 향상시킵니다. 이 API를 사용하여 프로덕션 환경에서 대용량 처리(예: 초당 여러 실행)의 속도를 높입니다.
- 보고 및 기록 생성됨
- 이 메서드는 설정에 관계없이 워크플로우 스튜디오 실행 세부 정보 및 컨텍스트 기록을 생성하지 않습니다.
- 대기 지원
- 이 메서드는 조건을 대기하기 위해 작업 일시 중지를 지원하지 않습니다. 승인 요청 또는 조건 대기와 같은 대기 조건으로 일시 중지하는 단계는 지원되지 않습니다.
- MID Server 지원
- 이 방법은 MID 서버에서 실행할 작업의 일시 중지를 지원하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 작업의 범위 및 내부 이름입니다. 예: global.action_name. 작업 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 입력 | 맵 | 작업 입력을 정의하는 이름-값 쌍입니다. 작업 개요의 입력에서 사용 가능한 동작 입력과 필수 데이터 유형을 찾을 수 있습니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 예: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}. |
| 유형 | 설명 |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
sn_fd.FlowAPI.startActionQuick('global.update_record_test', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - startFlow(문자열 이름, 맵 입력)
서버 측 스크립트에서 플로우를 실행합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 플로우의 범위와 이름입니다(예: global.flow_name). |
| 입력 | 맵 | 트리거 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 플로우에 대한 컨텍스트 기록의 시스템 ID입니다. 의 워크플로우 스튜디오플로우 실행 탭으로 이동하여 플로우 실행을 선택하고 컨텍스트 기록 열기를 클릭하여 컨텍스트 기록에 액세스합니다. |
이 예제에서는 sn_fd 사용합니다. FlowAPI.startFlow를 사용하여 test_flow라는 전역 플로우를 실행합니다. 이 코드는 흐름에 필요한 입력을 포함하는 inputs 변수를 만듭니다. 이 경우 현재 기록과 기록에 대한 테이블입니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
var now_GR = new GlideRecord('incident');
now_GR.addQuery('number', 'INC0009009');
now_GR.query();
now_GR.next();
try {
var inputs = {};
inputs['current'] = now_GR; // GlideRecord of table: Incident
inputs['table_name'] = 'incident';
var contextId = sn_fd.FlowAPI.startFlow('global.test_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - startFlowQuick(문자열 이름, 맵 입력)
실행 세부 정보 또는 기타 관련 기록을 만들지 않고 서버 측 스크립트에서 비동기식으로 플로우를 실행합니다. 기록 보관 오버헤드를 제거하여 성능을 향상시킵니다. 이 API를 사용하여 프로덕션 환경에서 대용량 처리(예: 초당 여러 실행)의 속도를 높입니다.
- 보고 및 기록 생성됨
- 이 메서드는 설정에 관계없이 워크플로우 스튜디오 실행 세부 정보 및 컨텍스트 기록을 생성하지 않습니다.
- 시스템 사용자로 실행
- 이 메서드는 시스템 사용자로 플로우를 실행합니다. 세션을 시작하는 사용자로 실행되도록 플로우를 설정하거나 사용자를 가장하는 것은 지원되지 않습니다.
- 대기 지원
- 이 메서드는 조건을 기다리기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다. 승인 요청, 조건 대기 또는 기간 대기와 같은 대기 조건으로 인해 일시 중지되는 작업 또는 플로우 논리는 지원되지 않습니다.
- MID Server 지원
- 이 메서드는 MID 서버에서 실행하기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 플로우의 범위 및 내부 이름입니다. 예: global.flow_name. 플로우 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 입력 | 맵 | 트리거 입력을 정의하는 이름-값 쌍입니다. 플로우의 트리거 섹션에서 사용 가능한 트리거 입력과 필수 데이터 유형을 찾을 수 있습니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 예: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}. |
| 유형 | 설명 |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('ed92e8d173d023002728660c4cf6a7bc');
var inputs = {};
inputs['current'] = grIncident;
inputs['table_name'] = 'incident';
sn_fd.FlowAPI.startFlowQuick('global.test_quick_flow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - startSubflow(문자열 이름, 맵 입력)
서버 측 스크립트에서 하위 플로우를 실행합니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행될 하위 플로우의 범위와 이름입니다(예: global.subflow_name). |
| 입력 | 맵 | 하위 플로우 입력을 정의하는 이름-값 쌍입니다. 입력 레이블이 아닌 입력 이름을 사용합니다. |
| 유형 | 설명 |
|---|---|
| 문자열 | 하위 플로우에 대한 컨텍스트 기록의 시스템 ID입니다. 의 워크플로우 스튜디오플로우 실행 탭으로 이동하여 플로우 실행을 선택하고 컨텍스트 기록 열기를 클릭하여 컨텍스트 기록에 액세스합니다. |
이 예에서는 sn_fd를 사용합니다. FlowAPI.startSubflow 를 사용하여 test_subflow라는 전역 플로우를 실행합니다. 코드는 흐름이 실행될 때 발생할 수 있는 오류를 캡처하기 위해 try/catch 문에 래핑됩니다.
(function() {
try {
var inputs = {};
inputs['ah_task'] = myTaskRecord; // GlideRecord of table: task
inputs['ah_comment'] ='Test Comment' ; // String
var contextId = sn_fd.FlowAPI.startSubflow('global.test_subflow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();
FlowAPI - startSubflowQuick(문자열 이름, 맵 입력)
실행 세부 정보 또는 기타 관련 기록을 만들지 않고 서버 측 스크립트에서 비동기식으로 하위 플로우를 실행합니다. 기록 보관 오버헤드를 제거하여 성능을 향상시킵니다. 이 API를 사용하여 프로덕션 환경에서 대용량 처리(예: 초당 여러 실행)의 속도를 높입니다.
- 보고 및 기록 생성됨
- 이 메서드는 설정에 관계없이 워크플로우 스튜디오 실행 세부 정보 및 컨텍스트 기록을 생성하지 않습니다.
- 시스템 사용자로 실행
- 이 메서드는 시스템 사용자로 플로우를 실행합니다. 세션을 시작하는 사용자로 실행되도록 플로우를 설정하거나 사용자를 가장하는 것은 지원되지 않습니다.
- 대기 지원
- 이 메서드는 조건을 기다리기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다. 승인 요청, 조건 대기 또는 기간 대기와 같은 대기 조건으로 인해 일시 중지되는 작업 또는 플로우 논리는 지원되지 않습니다.
- MID Server 지원
- 이 메서드는 MID 서버에서 실행하기 위해 플로우를 일시 중지하는 것을 지원하지 않습니다.
| 이름 | 유형 | 설명 |
|---|---|---|
| 이름 | 문자열 | 실행할 하위 플로우의 범위 및 내부 이름입니다. 예: global.subflow_name. 하위 플로우 목록에서 워크플로우 스튜디오내부 이름 필드를 찾습니다. |
| 입력 | 맵 | 하위 플로우 입력을 정의하는 이름-값 쌍입니다. 사용 가능한 하위 플로우 입력과 필수 데이터 유형은 하위 플로우의 입력에서 찾을 수 있습니다. 입력 레이블이 아닌 입력 이름을 사용합니다. 예: {'table':'incident','sys_id':'a39d8e3cf0212300964feeefe80ff0ed'}. |
| 유형 | 설명 |
|---|---|
| void |
(function() {
try {
var grIncident = new GlideRecord('incident');
grIncident.get('57af7aec73d423002728660c4cf6a71c');
var inputs = {};
inputs['variable'] = grIncident;
sn_fd.FlowAPI.startSubflowQuick('global.test_quick_run_subflow', inputs);
} catch (ex) {
var message = ex.getMessage();
gs.error(message);
}
})();