플로우, 하위 플로우 및 작업에 대한 워크플로우 스튜디오 일반 가이드라인
구성요소를 워크플로우 스튜디오 보다 효과적으로 만들고, 실행하고, 문제를 해결하고, 모니터링합니다. 이 지침을 사용하여 구성요소의 성능을 최적화하십시오 워크플로우 스튜디오 .
워크플로우 스튜디오 개요
워크플로우 작성, 구성 및 모니터링을 단일 페이지 환경으로 통합합니다. 플레이북, 플로우, 작업, 결정 테이블 및 통합을 하나의 설계 환경으로 통합합니다.
애플리케이션 개발
작업 또는 플로우를 디자인할 때 다음과 같은 일반 지침을 사용하십시오.
- 플로우와 작업을 저장할 사용자 지정 애플리케이션을 만듭니다.
- 애플리케이션 데이터를 공유하거나 접근을 제한하는 애플리케이션 권한을 설정합니다.
- 애플리케이션 개발자에게 에 대한 워크플로우 스튜디오액세스 권한을 부여합니다.
- 애플리케이션 리포지토리에 사용자 지정 애플리케이션을 게시하여 다른 인스턴스에 플로우와 작업을 배포합니다.
플로우
플로우는 짧고 모듈식이며 재사용 가능한 작업 컬렉션이어야 합니다. 실행하는 데 한 시간 이상 걸리는 경우 너무 길고 더 효율적일 수 있습니다.
플로우에 적용되는 모든 일반 가이드라인 은 하위 플로우에도 적용됩니다.
- 상충하거나 중복된 비즈니스 논리 방지
-
자동화는 Flow Designer, 비즈니스 규칙, 워크플로우, Integration Hub를 사용하여 생성할 수 있습니다. 를 사용하기 워크플로우 스튜디오 전에 기존 Now Platform 자동화의 작동 방식을 이해해야 합니다. 자동화를 플로우 및 작업으로 교체하기 워크플로우 스튜디오 전에 비활성화합니다. 에서 작동하는 Now Platform방식을 워크플로우 스튜디오 알아보려면 을 아키텍처 개요 참조하십시오.
- 플로우에 트리거 또는 변수 입력이 필요한지 여부를 결정합니다.
- 플로우는 항상 트리거 조건이 충족될 때 실행되며, 트리거는 항상 플로우에 대한 입력과 동일한 데이터를 제공합니다. 대신 플로우를 시작하기 위해 변수 입력이 필요한 경우 하위 플로우를 생성합니다.
- 비즈니스 논리 재사용
- 재사용 가능한 작업 세트를 하위 플로우로 생성한 다음 여러 플로우에서 사용할 수 있습니다.
- 역할 보호 데이터에 액세스하고 사용자 정보를 보존할 수 있는 플로우 역할 부여
- 플로우 역할은 플로우에 대한 권한을 단순하게 유지하는 데 도움이 됩니다. 시스템 사용자로 플로우를 실행하는 대신 플로우 역할을 사용하여 사용자 정보를 보존하고 데이터에 대한 액세스 권한을 부여합니다. 또한 플로우 역할을 추가하면 사용자가 시작한 플로우에는 일반적으로 없는 추가 데이터에 액세스할 수 있습니다. 부여된 역할은 플로우에만 적용됩니다. 플로우를 시작한 사용자에게는 적용되지 않습니다.
- 플로우 로직 또는 일정 기반 트리거를 사용하여 플로우 타이밍 제어
- 플로우 로직 또는 일정 기반 트리거는 플로우의 성능을 최적화하는 데 도움이 됩니다. 플로우 내에서 대기하기 위해 gs.sleep() 메서드를 사용하지 마십시오. gs.sleep() 메서드는 스레드가 다른 작업을 수행하지 못하도록 합니다. 특정 시간에 흐름을 실행하려면 일정 기반 트리거를 사용합니다. 특정 기간 동안 플로우를 일시 중지하려면 기간 대기 또는 조건 대기 플로우 로직을 사용합니다.
- 의존성 방지
- 서로 종속된 병렬 분기는 분기가 다른 분기의 출력을 기다려야 할 때 흐름을 중단합니다. 플로우 내에 병렬 분기를 생성하는 대신 하위 플로우를 호출하고 결과를 메인 플로우로 반환하십시오.
- 범위 루프 카운터
-
스크립트 루프에는 최대 반복 횟수가 없으므로 유효한 종료 조건이 없을 때 루프가 무한히 실행됩니다.
유효한 종료 조건이 있는지 확인하기 위해 인라인 스크립트 또는 작업 내 스크립트 단계에 루프 카운터를 지정합니다.
var추가for (i=0; i< length; i++):for (var i=0; i< length; i++) - For Each 및 Do Until 루프를 1,000회 반복으로 제한
- 1000개 이상의 루프가 있는 반복은 실행 세부 정보 및 컨텍스트 레코드를 저장해야 하는 메모리 문제로 이어질 수 있습니다.
- 기록 조회에서 최대 기록을 설정합니다.
- 속성 sn_flow_designer.max_iterations(기본값 1000)를 변경하지 마십시오.
- 중첩 루프의 경우 각 루프에는 고유한 최대 반복 횟수가 있습니다.
- 많은 양의 데이터를 처리하는 경우 더 작은 일괄 처리로 일괄 처리하는 것이 좋습니다.
- 대량 임포트의 경우 동시 임포트를 고려하십시오.
- 빠른 실행을 위해 QuickAPI 사용(비즈니스 규칙 대체)
-
- QuickAPI 실행은 훨씬 빠르지만 디버깅 기능이 적습니다.
- 포그라운드 QuickAPI 실행은 플로우를 호출한 사용자로 사용자 세션에서 실행됩니다.
- 백그라운드 QuickAPI 실행은 백그라운드 스레드에서 실행되며 '시스템' 사용자 세션에서 실행됩니다.
- 플로우 자체를 호출하는 대신 Do Until 루프 사용
- 플로우가 자신을 호출하는 직접 재귀는 허용되지 않으며 오류가 발생합니다. 플로우 A가 플로우 B를 호출하는 간접 재귀로, 플로우 A를 호출하는 것은 최대 3회까지 허용됩니다. 플로우를 재귀적으로 호출하는 대신 '다음까지 수행' 플로우 로직을 사용하여 특정 조건이 충족될 때까지 기록 작업을 계속합니다.
- 백그라운드에서 플로우 실행
- 백그라운드에서 플로우를 실행하면 플로우 실행이 완료될 때까지 사용자 세션을 일시 중지하지 않고 UI 스레드를 해제할 수 있습니다. 기본적으로 플로우는 백그라운드에서 비동기식으로 실행됩니다. 백그라운드에서 플로우를 실행하면 플로우가 실행되는 동안 사용자가 UI에서 작업을 계속할 수 있습니다.
- 큰 출력을 수집한 후 대기하는 플로우 로직을 방지합니다.
- 검색된 직후 큰 페이로드를 사용하면 메모리 문제를 방지할 수 있습니다. 큰 페이로드를 메모리에 저장하는 대신 페이로드를 처리하는 작업을 추가합니다. 검색된 페이로드를 빠르게 처리할수록 시스템에서 다른 작업을 처리하기 위해 메모리를 더 빨리 확보할 수 있습니다.
- 환경 간 위치 전환 최소화
- 플로우에서 인스턴스와 MID Server 단계 사이를 계속 전환하면 처리가 지연될 수 있습니다. 지연 위험을 최소화하려면 인스턴스와 MID 간 전환을 한 번으로 제한하십시오.
- 플로우에 의해 생성된 sys_complex_object 기록을 업데이트 세트에 포함
- 복잡한 데이터 스키마가 누락되면 실행 문제가 발생할 수 있습니다. 플로우에 의해 생성된 sys_complex_object 기록을 업데이트 세트에 포함해야 합니다. 업데이트 세트를 수동으로 빌드하는 대신, 애플리케이션 리포지토리를 사용하여 한 인스턴스에서 다른 인스턴스로 플로우를 전송하는 것이 좋습니다.
- 사용자 지정 트리거가 필요한 경우 스크립트에서 플로우 호출
- 기존 트리거 중 비즈니스 요구 사항을 충족하는 트리거가 없는 경우 사용자 지정 트리거 조건이 충족될 때 플로우를 시작하는 스크립트를 만들 수 있습니다. 불필요한 트리거로 플로우를 생성하는 대신, 트리거가 없는 하위 플로우를 생성하는 것이 좋습니다. 스크립트 조건이 충족되는 경우에만 스크립트를 사용하여 필요한 하위 플로우 입력을 제공합니다. 플로우 대신 하위 플로우를 호출하면 플로우 트리거 조건이 충족되어 플로우가 예기치 않게 실행될 가능성을 방지할 수 있습니다.
- 이전 릴리스의 인스턴스에 최신 릴리스 플로우를 배포하지 않도록 합니다.
- 워크플로우 스튜디오 는 이전 릴리스에서 실행되는 인스턴스에 최신 릴리스 플로우를 배포하는 것을 지원하지 않습니다. 위험:플로우 데이터 모델은 릴리스 간에 변경될 수 있으며, 이로 인해 이전 릴리스 인스턴스에서 실행할 때 최신 플로우가 실행되지 않거나 예기치 않은 결과가 발생할 수 있습니다. 인스턴스를 배포하기 전에 동일한 릴리스 버전이 되도록 업그레이드합니다.
- 프로덕션에서 플로우 보고 끄기
- 플로우 보고를 사용하지 않도록 설정하여 플로우를 실행하는 데 필요한 메모리 양을 최소화합니다. 플로우 보고는 실행 상세 정보 페이지에 대한 구성 및 런타임 정보를 저장합니다. 이러한 보고서는 문제 해결에 유용하지만 메모리와 데이터베이스 모두에 많은 양의 데이터를 보존해야 합니다. 기본적으로 플로우 보고는 사용하지 않도록 설정되어 있으며, 플로우 또는 작업을 수동으로 테스트할 때만 시스템에서 실행 상세 정보를 생성합니다. 대신 보고가 꺼져 있어도 사용할 수 있는 로그 파일을 사용할 수 있습니다.
- 중첩 루프가 있는 플로우에서 사용되는 메모리 양 줄이기
- 보고가 활성화되면 com.snc.process_flow.reporting.iteration.lastn 값을 "1"로 설정하여 이전 루프 반복에서 소비하는 메모리 양을 줄입니다. 보고하는 반복 횟수가 많을수록 더 많은 메모리가 필요합니다.
하위 플로우
플로우에 적용되는 일반 가이드라인은 하위 플로우에도 적용됩니다.
플로우 대신 하위 플로우를 사용하는 이유는 다음과 같습니다.
- 플로우에 트리거 또는 변수 입력이 필요한지 여부를 결정합니다.
- 플로우는 트리거 조건이 충족될 때 항상 실행됩니다. 트리거는 항상 플로우에 대한 입력과 동일한 데이터를 제공합니다. 대신 플로우를 시작하기 위해 변수 입력이 필요한 경우 하위 플로우를 생성합니다.
- 비즈니스 논리 재사용
- 재사용 가능한 작업 세트를 하위 플로우로 생성한 다음 여러 플로우에서 사용할 수 있습니다.
- 각 호출에 대해 서로 다른 입력 값 구성
- 호출할 때마다 하위 플로우의 입력 값을 다르게 구성합니다. 예를 들어, 다양한 기록 유형을 입력 실행으로 허용하도록 하위 플로우를 설계합니다. 각 기록 유형에 대한 특정 플로우를 작성하는 대신 이 일반 기록 하위 플로우를 재사용합니다.
- 대규모 플로우의 성능 및 가독성 향상
-
플로우가 25개 작업을 초과할 때 하위 플로우를 사용합니다. 50은 sn_flow_designer.max_actions 시스템 속성에 지정된 최대 작업 수이지만, 최상의 성능을 위해 플로우를 25개 작업으로 제한합니다.
- 하위 플로우를 통한 입력 및 출력 전달
- 입력 및 출력을 전달하려면 하위 플로우를 호출합니다. 하위 플로우가 시작될 때 사용할 수 있는 입력을 지정하거나 하위 플로우가 종료된 후 상위 플로우에 사용할 수 있는 출력을 지정하려면 하위 플로우를 사용합니다.
- 단일 이벤트에서 여러 플로우를 트리거하는 것과 병렬 하위 플로우를 사용하는 것 비교
-
- 상호 관련된 출력이 있거나 모두 사용할 수 있는 경우 일부 작업을 수행해야 하는 경우 병렬 하위 플로우를 사용합니다. 그렇지 않은 경우 여러 플로우를 트리거하는 것이 더 간단합니다.
- 병렬 하위 플로우를 구성하려면 대기 없이 각 하위 플로우를 시작한 다음 대기 조건을 사용하여 각 하위 플로우가 종료(완료, 오류, 취소됨)가 될 때까지 대기합니다.
- 기능이 유사한 하위 플로우가 여러 개 있는 경우 동적 플로우를 사용합니다.
- 동적 플로우를 사용하면 템플릿을 적용하여 프로세스를 구분하여 유사한 여러 하위 플로우의 입력을 처리할 수 있습니다. 구획화를 사용하면 통합 허브 스포크에 대한 하위 플로우와 같이 유사한 기능을 수행하는 하위 플로우를 구별할 수 있습니다.
- 오류 처리 프로세스에서 10개 항목 제한 방지
- 오류 처리 프로세스를 10개 항목 제한에 맞추지 말고 더 많은 항목을 포함할 수 있는 하위 플로우를 호출하십시오. 하위 플로우 출력을 사용하여 다른 플로우에서 자동화를 트리거할 수도 있습니다.
- 시정 조치 수행
- 여러 플로우에서 동일한 작업 시퀀스를 다시 만드는 대신 재사용 가능한 하위 플로우를 생성하여 기록 데이터의 오류를 수정합니다. 플로우 오류로 인해 기록 데이터가 원치 않는 상태로 유지되는 경우 하위 플로우를 사용하여 이러한 기록을 수정합니다. 오류 핸들러를 사용하여 이러한 기록 데이터를 하위 플로우 출력으로 식별할 수 있습니다.
트리거
기록 트리거를 만들 때 다음과 같은 일반 가이드라인을 따르십시오.
- 플로우에 트리거 또는 변수 입력이 필요한지 여부를 결정합니다.
- 플로우는 트리거 조건이 충족될 때 항상 실행됩니다. 트리거는 항상 플로우에 대한 입력과 동일한 데이터를 제공합니다. 대신 플로우를 시작하기 위해 변수 입력이 필요한 경우 하위 플로우를 생성합니다.
- 플로우를 시작하는 기록 값을 지정하는 조건 추가
- 필요할 때만 플로우를 시작하면 플로우를 시작하고 일시 중지한 다음 특정 기록 조건이 적용될 때까지 플로우 재개를 기다리는 것보다 시스템 자원이 적게 소비됩니다. 대기 조건 동작으로 시작하는 플로우를 생성하는 대신, 대기 조건을 기록 트리거의 일부로 포함하도록 플로우를 다시 설계하십시오.
- 같은 테이블에서 기록 트리거에 대한 고유한 조건 생성
- 플로우가 서로 덮어쓰지 않게 하려면 동일한 테이블에서 실행 중인 각 플로우에 대해 고유한 조건을 생성합니다. 동일한 테이블에 있는 여러 플로우가 동일한 필터인 경우 플로우가 실행되는 순서를 알 수 있는 방법이 없습니다. 조건을 사용하면 더 정확하고 작은 기록 세트를 반환하여 플로우 성능을 최적화하는 데도 도움이 됩니다.
- 임포트 및 업데이트 세트에서 추가 또는 업데이트된 기록 무시
- 기록 트리거는 업데이트 세트를 적용하거나 XML 파일을 임포트하여 추가 또는 업데이트된 기록을 무시합니다. 이러한 작업은 개별 기록이 아닌 전체 애플리케이션 또는 테이블에 적용됩니다.
- 서비스 카탈로그 테이블의 기록 트리거를 서비스 카탈로그 애플리케이션 트리거로 교체
- Flow Designer는 더 이상 Service Catalog 테이블을 기록 트리거에 대한 옵션으로 표시하지 않습니다. 대신 서비스 카탈로그 애플리케이션 트리거 유형을 사용하는 플로우를 생성하십시오.
대기 조건
조건을 기다리는 플로우를 생성할 때 다음과 같은 일반 지침을 따르십시오.
- 대기 조건 대신 기록 트리거를 사용하여 플로우 시작
- 특정 기록 조건이 충족될 때만 플로우가 실행되도록 하려면 플로우를 시작하고 일시 중지하는 대신 기록 트리거로 플로우를 생성합니다. 대기 중인 플로우는 플로우 트리거보다 더 많은 시스템 자원을 사용합니다.
- 재개 조건이 발생할 수 없는 플로우 취소
- 로 플로우 중지 조건을 End Flow 플로우 로직지정하여 플로우가 무기한 대기하지 않도록 합니다. 시스템 자원을 확보하기 위해 재개 조건을 충족할 수 없는 플로우를 취소할 수도 있습니다. 예를 들어, 관련 인시던트가 종결되어 인시던트 기록 업데이트를 기다리는 취소 플로우가 있습니다.
- 대기 조건을 현재 테이블에 있는 필드로 제한
- 조건 대기 작업은 기록이 속한 테이블의 필드에 대한 변경만 모니터링할 수 있습니다. 이 작업은 관련 기록 또는 카탈로그 변수의 필드에 대한 변경 내용을 감지할 수 없습니다. 예를 들어 작업이 인시던트 기록의 변경을 기다리는 경우 카탈로그 항목 또는 변경 작업 기록과 같은 관련 기록의 변경 내용을 감지할 수 없습니다. 이러한 필드는 실제로 관련 기록에 속하므로 다른 기록으로 닷워킹하는 대기 조건을 작성하지 마십시오. 카탈로그 변수에 의존하는 대기 조건을 빌드하지 않습니다.
스테이지가 있는 플로우 또는 하위 플로우
- For Each 플로우 논리에 의존하는 스테이지를 정의하지 마십시오.
- Flow Designer를 사용하면 For Each 블록 내에 스테이지를 추가할 수 없습니다. For Each 블록 앞이나 뒤에만 스테이지를 추가할 수 있습니다.
- 다른 플로우 또는 하위 플로우에서 동일한 기록에 대한 스테이지를 생성하지 않도록 합니다.
- 스테이지 필드에는 테이블의 기록에서 실행할 마지막 플로우 또는 하위 플로우에서 제공하는 스테이지 정보가 항상 표시됩니다. 여러 플로우 또는 하위 플로우가 동일한 기록에서 실행되는 경우, 이론적으로 한 플로우 또는 하위 플로우에 정의된 스테이지가 다른 플로우 또는 하위 플로우의 스테이지를 덮어쓸 수 있습니다. 여러 플로우 또는 하위 플로우가 서로의 스테이지를 덮어쓰지 않게 하려면 각 플로우 또는 하위 플로우에 대해 고유한 트리거 또는 시작 조건을 정의합니다.
- 플로우 또는 하위 플로우 외부에서 스테이지 필드를 업데이트하지 않습니다.
- 플로우 또는 하위 플로우로 스테이지를 관리하는 경우 플로우 또는 하위 플로우 외부에서 기록 스테이지 필드를 직접 업데이트하지 마십시오. 스테이지 필드의 값을 수동으로 업데이트하면 예기치 않거나 원치 않는 결과가 발생할 수 있습니다.
- 테이블의 각 플로우에 고유한 트리거 조건이 있는지 확인합니다
- 각 플로우에 고유한 트리거 조건을 추가하면 플로우가 해당 조건에서만 실행되고 한 플로우의 스테이지가 다른 플로우의 스테이지를 덮어쓰는 것을 방지할 수 있습니다. 고유한 트리거 조건을 지정하면 기록 변경을 생성할 수 있는 플로우 실행 수를 제한하여 플로우 문제를 보다 쉽게 해결할 수 있습니다.
- 오류 스테이지를 사용하여 사용자와 통신
- 플로우 오류 상태는 플로우 실행에 영향을 주지 않습니다. 플로우는 오류 단계에 도달해도 계속 실행됩니다. 조건부 플로우 로직 블록을 사용하여 오류 단계를 설정하고 현재 단계의 상태가 오류임을 사용자에게 전달합니다. 예를 들어, 필요한 제한 내에 승인이 승인되지 않은 경우 사용자에게 오류를 전달할 수 있습니다.
- 오류 스테이지를 사용하여 플로우 처리 중지
- 조건부 플로우 로직 블록을 사용하여 플로우가 오류 단계로 들어가는 시기를 식별합니다. 플로우 논리를 사용하여 플로우 처리를 중지하거나 일종의 정정 작업을 수행합니다. 예를 들어 플로우가 오류 상태에 도달하면 기록 상태 또는 할당을 변경할 수 있습니다.
병렬 플로우 로직에서 다음을 수행합니다
- 경로 간 데이터 의존성 생성 방지
- 플로우는 어떤 순서로든 경로를 실행할 수 있으므로 별도의 경로 간에 데이터 종속성을 생성하지 마십시오. 예를 들어, 기록을 생성하는 경로와 동일한 기록을 업데이트하는 경로가 없어야 합니다. 업데이트 기록 경로는 기록 생성 경로 전에 실행될 수 있습니다.
- 경로 간에 데이터를 공유하지 마십시오.
- 워크플로우 스튜디오 시스템에서 출력 값을 제공하기 위해 가장 먼저 완료할 경로를 결정할 수 없으므로 경로 간에 데이터 알약을 끌지 못하게 합니다.
동적 플로우 플로우 로직
- 기능이 유사한 하위 플로우가 여러 개 있는 경우 동적 플로우를 사용합니다.
- 동적 플로우를 사용하면 템플릿을 적용하여 프로세스를 구분하여 유사한 여러 하위 플로우의 입력을 처리할 수 있습니다. 구획화를 사용하면 통합 허브 스포크에 대한 하위 플로우와 같이 유사한 기능을 수행하는 하위 플로우를 구별할 수 있습니다.
- 동적으로 호출된 하위 플로우 입력이 템플릿 플로우 입력과 일치하는지 확인
- 동적 플로우 및 플로우 템플릿의 입력이 일치하지 않으면 시스템에서 오류가 발생하고 메인 플로우를 제대로 실행할 수 없습니다.
- 플로우 출력을 가져올 때 올바른 컨텍스트 사용
- 컨텍스트 기록은 플로우 실행을 고유하게 식별합니다. 동적 플로우를 여러 번 실행하는 경우 선택할 수 있는 컨텍스트 기록이 여러 개 있습니다. 플로우 내에서 동적 플로우를 여러 번 사용하는 경우 플로우 출력을 가져올 때마다 올바른 실행에서 올바른 컨텍스트 기록을 선택해야 합니다.
Password2 데이터 정제
- 기존 암호(2단계 암호화됨) 데이터 알약을 사용하여 값을 할당합니다.
- 기존 password2 데이터 정제를 선택해야만 password2 변수에 값을 할당할 수 있습니다. 다른 필드 유형의 값 선택은 지원되지 않습니다. 워크플로우 스튜디오 잘못된 데이터 정제 유형을 선택하면 경고 메시지를 표시합니다.주:암호(2단계 암호화됨) 값을 수동으로 입력할 수 없습니다.
- 유효한 필드 유형에만 암호(2단계 암호화) 변수를 사용하십시오.
- 워크플로우 스튜디오 잘못된 필드 유형의 값으로 Password2 데이터 정제를 선택하지 못하게 차단합니다. 필드가 호환되지 않는 유형일 경우 시스템은 경고 메시지를 표시합니다.워크플로우 스튜디오 Password2 데이터 알약만 다음 필드 유형으로 끌어올 수 있습니다.
- 이메일 본문 필드
- HTML 필드
- 암호 2 필드
- PowerShell 입력 변수
- REST 필드
- 변수
- REST 페이로드 본문
- 쿼리 매개변수
- 머리글
- REST 다중 파트 양식 값
- 양식 URL 인코딩 값
- SOAP 필드
- 머리글
- 봉투
주:암호(2단계 암호화됨) 변수를 조건으로 사용할 수 없습니다.Flow Designer는 사용자가 작업과 플로우를 저장, 게시 또는 테스트할 때 확인 검사를 수행합니다. 이 검사는 제한된 필드 유형에서 삭제된 데이터 알약에 대한 경보를 표시하고 작업 또는 플로우가 실행되지 않도록 합니다. 작업 또는 플로우를 업데이트하여 잘못된 데이터 알약을 제거한 다음 작업을 다시 시도하십시오.
- 암호 해독을 위한 암호화 모듈 설정
- 유효한 암호화 모듈 액세스 권한이 있는 사용자만 password2 변수의 내용을 해독하고 볼 수 있습니다. 암호화 알고리즘 및 암호화된 데이터에 액세스할 수 있는 역할을 지정하려면 KMF를 사용한 Password2 암호화를 참조하십시오.
SLA 백분율 타이머 작업
서비스 수준 계약(SLA) 백분율 타이머 작업을 포함하는 플로우를 생성할 때 다음과 같은 일반 지침을 따르십시오.
- SLA 작업 트리거가 있는 플로우에만 SLA 백분율 타이머 작업 추가
- SLA 백분율 타이머 작업은 플로우가 SLA 작업 트리거에서 시작될 때만 실행할 수 있습니다. SLA 백분율 타이머 작업이 포함된 하위 플로우를 활성화할 수 없습니다.
- 예상 상태 값에 대한 조건부 플로우 논리 생성
- 상태 필드의 값을 플로우 로직의 조건으로 사용합니다. 완료됨, 복구 및 건너뜀과 같은 예상 상태 값에 대한 플로우 논리를 빌드합니다. 예를 들어, SLA 백분율 타이머가 완료됨 상태일 때 알림을 보내도록 If 플로우 논리 블록을 추가합니다.
- 각 SLA 백분율 타이머 작업에 고유한 누적 할당 백분율 값 대기
- 각 SLA 백분율 타이머 작업은 백분율 대기 값을 사용하여 예약된 자체 종료 날짜/시간을 계산합니다. 여러 SLA 백분율 타이머 작업을 만드는 경우 각 작업에 고유한 누적 백분율 값 대기를 지정합니다. 예를 들어, 25%, 50%, 75% 완료율과 같이 완료율 값이 다른 세 개의 개별 작업을 생성합니다. 세 가지 작업을 모두 동일한 완료율 값(예: 25%)으로 설정하면 타이머가 동시에 완료됩니다.
- 기존 플로우를 복사하여 사용자 지정
- 기본 SLA 플로우를 복사하고 자체 논리로 복사본을 사용자 지정하여 개발 시간을 단축합니다. SLA 정의에서 실행할 사용자 지정 플로우를 선택합니다. SLA 정의 만들기를 참조하십시오 .
동적 입력
- 외부 공급업체 통합을 위한 동적 입력 고려
- 동적 입력을 사용하면 외부 소스에서 동적으로 데이터를 가져오는 플로우를 생성할 수 있습니다. 타사 통합에서 동적 입력은 특정 엔드포인트와 관련된 데이터 값을 제공할 수 있습니다. 를 사용하여 워크플로우 스튜디오외부 공급업체 통합을 설정하는 방법에 대한 자세한 내용은 통합 허브를 참조하십시오.
- 많은 양의 데이터를 검색하는 데 필요한 시간에 유의하십시오.
- 기본적으로 동적 입력은 시간이 초과되기 전에 최대 300초 동안 데이터를 수집할 수 있습니다. 데이터 수집 작업에 데이터를 수집하는 데 더 많은 시간이 필요한 경우 시스템 속성을 더 높은 값으로 설정하십시오 sn_flow_designer.sync_action_execution_timeout_in_seconds . 그러나 최종 사용자가 값을 입력하거나 선택해야 하는 대화형 플로우에는 긴 시간 제한 값을 사용하지 마십시오.
- 스크립팅 오류에 유의하십시오.
- 모든 데이터 수집 동작이 스크립트 단계를 사용하기 때문에 스크립팅에서 잠재적인 오류가 발생할 수 있습니다. 스크립트를 사용하여 동적 입력에 대한 JSON 변수를 출력할 때 입력이 필요한 JSON 값을 받지 못하는 오류가 발생할 수 있습니다. 동적 입력 스크립팅 오류가 발생하면 다음과 같은 경고 메시지가 나타날 수 있습니다.
그림 1. 스크립팅 오류에 대해 표시되는 메시지 - 동적 입력 유형 입력을 40개의 입력 값으로 제한
- 동적 입력 유형 입력은 JSON 객체가 메모리에 저장할 수 없을 정도로 커지기 전에 특정 수의 입력만 렌더링할 수 있습니다. 동적 입력을 40 입력 값으로 제한하면 메모리가 부족하여 렌더링 오류 또는 데이터 잘림과 같은 예기치 않은 동작이 발생할 가능성을 최소화할 수 있습니다.
- 동적 템플릿 및 동적 선택에 대한 JSON 출력을 5,000개의 배열 항목으로 제한
- 동적 선택 및 동적 템플릿 입력은 배열 항목을 5,000개까지만 표시할 수 있습니다. 동적 선택은 선택 목록 옵션을 5,000개까지만 표시할 수 있으며, 동적 템플릿은 필드 템플릿 값을 5,000개까지만 표시할 수 있습니다. 데이터 수집 작업이 동적 템플릿 또는 동적 선택에 대한 데이터를 수집하는 경우 반환하는 배열 항목의 최대 수를 5,000으로 제한합니다. 배열 항목 5,000개 제한은 선택 항목 또는 필드 값을 렌더링할 때 인스턴스에 성능 문제가 발생하지 않도록 합니다.
동적 출력
- 외부 공급업체 통합에 동적 출력 사용
- 동적 출력을 사용하여 플로우 설계 중에 외부 시스템에서 데이터를 검사 하고 가져올 수 있습니다. 예를 들어 서비스 엔드포인트를 지정하거나 특정 엔드포인트 API와 상호작용하는 호출 작업을 지정할 수 있습니다. 를 사용하여 워크플로우 스튜디오외부 공급업체 통합을 설정하는 방법에 대한 자세한 내용은 통합 허브를 참조하십시오.
- 많은 양의 데이터를 검색하는 데 필요한 시간을 참고하십시오.
- 기본적으로 동적 출력은 시스템이 중지하기 전에 최대 300초 동안 데이터를 수집합니다. 데이터 수집 작업에 데이터를 수집하는 데 더 많은 시간이 필요한 경우 시스템 속성을 더 큰 값으로 설정하십시오 sn_flow_designer.sync_action_execution_timeout_in_seconds . 최종 사용자가 값을 입력하거나 선택해야 하는 대화형 플로우에 대해 긴 시간 제한 값을 사용하지 않도록 합니다.
- 스크립팅 오류에 유의하십시오.
- 모든 데이터 수집 동작이 스크립트 단계를 사용하기 때문에 스크립팅에서 잠재적인 오류가 발생할 수 있습니다. 스크립트 오류로 인해 출력에서 필요한 JSON 값을 받지 못할 수 있으므로 JSON 변수를 출력하는 데 사용되는 스크립트를 검토합니다. 동적 출력 스크립팅 오류가 발생하면 다음 경고 메시지가 나타날 수 있습니다.
그림 2. 스크립팅 오류에 대해 표시되는 메시지
목록. [테이블] 데이터
- 참조 한정자를 추가하여 목록 기록 필터링
- 참조 한정자를 추가하여 목록 변수가 유효한 옵션으로 표시하는 기록을 필터링합니다. 참조 한정자는 필수 목록 필터의 역할을 하며 목록 변수가 참조 한정자 조건과 일치하는 기록만 표시하도록 합니다. 예를 들어 활성 인시던트 기록만 표시하려면 참조 한정자 조건 [Active][is][true]를 추가합니다.
- ServiceNow Store용 작업에 대한 기본 기록 선택 방지
- 모든 인스턴스가 선택한 기록에 액세스할 수 있다는 사실을 알고 있지 않으면 목록에 대한 기본 기록을 선택하지 마십시오. 일반적으로 스포크 개발자는 사용자 지정 작업을 설치하는 고객의 데이터에 액세스할 수 없습니다. ServiceNow Store에 사용자 지정 작업을 게시하려면 기본 기록을 데모 데이터로 제공해야 할 수 있습니다.
- For Each 플로우 논리에서 목록 변수 사용
- 목록 변수를 사용하여 For Each 플로우 논리 내에서 처리할 기록을 지정할 수 있습니다. For Each 플로우 로직은 데이터에 있는 기록이 아닌 sys_id 무시합니다. 예를 들어 목록 변수에 이메일 주소가 포함되어 있으면 플로우 로직에서 이를 무시합니다.
승인 규칙
- 기본값 제공
- 승인 규칙을 만들거나 기본값으로 선택합니다.
변환 함수
- 입력에 유효한 데이터 정제 유형에 변환 함수 적용
- 변환 함수를 적용하기 전에 입력에 대한 데이터 정제의 유형을 확인하십시오. 잘못된 데이터 정제 유형에 변환 함수를 적용하면 시스템이 변환을 건너뛰게 됩니다. 변환 함수가 시스템에서 구문 분석할 수 없는 결과를 생성하는 경우에도 오류가 발생합니다. 예를 들어, 문자열을 날짜로 변환할 때 변환으로 인해 유효한 날짜가 생성되지 않으면 시스템에서 오류가 발생합니다.
- 동일한 데이터 알약을 사용하여 여러 입력에 적용된 변환 함수 확인
- 변환 함수는 특정 입력에 대해 런타임에 새 값을 생성하며 원래 데이터 알약은 변경하지 않습니다. 따라서 여러 작업 또는 단계에서 동일한 데이터 알약을 사용하는 경우 변환 함수를 각 개별 입력에 적용해야 합니다.
- 플로우 실행 상세 정보에서 최종 변환 값 보기
- 적용된 각 변환의 값이 아닌 최종 변환 값만 플로우 실행 상세 정보에 나타납니다.
- 변환 함수를 테스트하여 예상 결과가 생성되는지 확인합니다.
- 변환 함수가 데이터 정제에 대해 예상되는 런타임 값을 생성하는지 확인하십시오. 자세한 내용은 플로우 테스트 및 작업 테스트를 참조하십시오.
인라인 스크립트
다음 일반 지침에 따라 재사용 및 유지관리 가능한 인라인 스크립트를 생성합니다.
- 재사용 불가능한 작은 논리를 위한 인라인 스크립트 작성
- 인라인 스크립트 형식을 사용하거나 특정 입력 및 사용 사례에 대한 데이터를 수정합니다. 재사용 가능한 논리의 경우 작업 또는 하위 플로우를 대신 생성합니다.
- 사용 가능한 변환 함수 검토
- 워크플로우 스튜디오 는 데이터 변환 및 형식화 작업을 위한 표준 변환 함수 목록을 제공합니다. 사용자 지정 스크립트 솔루션을 작성하고 유지 관리하는 대신, 기존 변환 함수(사용 가능한 경우)를 선택합니다.
- 인라인 스크립트에서 스크립트 포함 호출
- 인라인 스크립트에서 스크립트 포함을 호출하여 작성하는 코드의 양을 줄이고 공통 코드를 단일 위치에서 유지 관리합니다. 클래스 생성자를 사용하여 스크립트 포함을 호출합니다. 스크립트 포함을 만드는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오 Script includes.
var si = new MyScriptInclude(); si.functionOne(); - 인라인 스크립트가 아닌 재사용 가능한 코드에 대한 사용자 지정 작업 또는 하위 플로우 생성
- 소스 데이터의 데이터 유형 변경과 같이 재사용 가능하거나 복잡한 데이터 로직에 대한 사용자 지정 동작 또는 하위 플로우를 생성합니다. 코드에 익숙하지 않은 플로우 디자이너를 위해 사용자 지정 작업 또는 하위 플로우를 제공할 수도 있습니다.
- 작업 및 플로우 기능의 중복 방지
- 작업 및 플로우 기능을 복제하는 인라인 스크립트를 작성하지 마십시오. 예를 들어, 기록 작업을 수행하기 위해 인라인 스크립트를 작성하는 대신, 기록 기준선 생성 및 업데이트 작업을 사용합니다.
- 데이터 유형 변경 방지
- 인라인 스크립트가 입력 또는 출력에 예상하는 것과 동일한 데이터 형식으로 정보를 제공하는지 확인하여 런타임 오류를 방지합니다.
- var 키워드로 선언하여 변수 생성
var키워드를 사용하여 변수가 적절한 JavaScript 범위 내에 유지되도록 변수를 선언합니다. 변수에 값을 할당하여 변수를 만들 때 JavaScript는 변수를 전역 객체에 연결할 수 있으며, 이로 인해 변수 값이 로컬 범위 밖에서 지속되어 오류가 발생할 수 있습니다.- For Each 플로우 로직 및 플로우 데이터 객체로 기록 출력을 처리합니다.
- 인라인 스크립트는 For Each 플로우 논리에서 기록 조회 작업의 기록 출력에만 액세스할 수 있습니다. 플로우에 기록 조회 작업을 추가하여 기록 출력을 생성합니다. 플로우에 For Each 플로우 로직을 추가하여 기록 출력의 각 기록을 처리합니다. fd_data 및 항목 객체를 사용하여 For Each 플로우 논리에 대한 인라인 스크립트 참조를 생성합니다. 예를 들어 이 참조에서는 For Each 플로우 로직이 플로우 개요
fd_data._2__for_each.item의 두 번째 항목이라고 가정합니다. - 자동 완성 제안을 사용하여 플로우 및 작업 데이터에 대한 참조를 생성합니다.
- fd_data 객체를 사용하여 플로우 및 작업 데이터에 대한 참조를 생성합니다. fd_data를 입력하면 스크립트 편집기에 기존 플로우 및 작업 데이터에 대한 자동 완성 제안이 표시됩니다. 플로우 및 작업 데이터에 대한 참조를 빌드하려면 제안을 선택합니다. 주:항목 객체를 사용하여 For Each 플로우 로직의 기록 데이터를 참조하십시오.
- 범위 루프 카운터
-
스크립트 루프에는 최대 반복 횟수가 없으므로 유효한 종료 조건이 없을 때 루프가 무한히 실행됩니다.
유효한 종료 조건이 있는지 확인하려면 인라인 스크립트 또는 동작 내의 스크립트 단계에서 범위 루프 카운터를 사용하십시오.
varto(i=0; i< length; i++)를 추가하고for (var i=0; i< length; i++)를 가져옵니다.
복합 데이터
다음 일반 지침에 따라 재사용 및 유지 관리 가능한 데이터 구조를 생성합니다.
- 계층 구조에서 하위 수준의 수를 최소화합니다.
- 데이터 구조의 하위 수준이 많을수록 계층 구조에서 데이터 변수를 보고 선택하기가 더 어려워집니다. 여러 하위 수준으로 데이터 구조를 빌드할 수 있지만 7개 이상의 하위 수준으로 데이터 구조를 탐색하고 이해하기는 어려워집니다. 최상의 사용자 환경을 위해서는 하위 수준이 너무 많아서 가로로 스크롤하여 보고 채워야 하는 데이터 구조를 만들지 마십시오.
- 각 기록 데이터 유형에 대해 별도의 객체 생성
- 대부분의 워크플로우 스튜디오 데이터는 인스턴스 또는 외부 시스템의 기록 데이터입니다. 이 설계 방법을 사용하면 객체에 포함된 내용과 데이터의 출처를 알 수 있습니다.
- 기록 데이터 구조 재생성
- 레코드 데이터를 수신하거나 전송하는 오브젝트를 빌드할 때 이러한 레코드에 대한 데이터베이스 사전 항목을 검토하고 일치하는 오브젝트 데이터 구조를 작성하십시오. 예를 들어, 인시던트 및 구성 항목 테이블의 데이터를 객체에 포함시키려 한다고 가정해 보겠습니다. 인시던트 테이블의 짧은 설명 필드에 대한 문자열 요소와 구성 항목 테이블에클래스 필드에 대한 문자열 요소 배열을 만들 수 있습니다.
- 객체를 생성하여 다양한 유형의 기록을 결합합니다.
- 여러 유형의 기록에서 정보가 필요한 경우 필요한 모든 정보를 포함하는 객체를 생성합니다. 그런 다음 개체를 사용하여 의 데이터 형식을 지정하거나 구문 분석할 수 있습니다 워크플로우 스튜디오.
복잡한 데이터로 스크립팅
복잡한 데이터로 스크립팅할 때는 다음과 같은 일반적인 지침을 염두에 두십시오.
- 문자열 입력을 사용하여 복잡한 데이터를 JSON 문자열로 변환
- 복잡한 데이터를 문자열 입력에 매핑하면 에서 워크플로우 스튜디오 자동으로 JSON 문자열로 변환합니다. 스크립트를 작성하는 대신 REST 단계에 문자열 입력을 추가하고 이전 작업 또는 단계의 복잡한 데이터에 매핑할 수 있습니다.
- 개체를 템플릿으로 저장
- 객체를 템플릿으로 저장하면 다른 작업, 플로우 및 스크립트 단계에서 다시 사용할 수 있습니다.
- 이전 데이터에 액세스하기 위한 스크립트 입력 변수 생성
- 작업 입력 또는 이전 단계에서 액세스하려는 데이터에 대한 스크립트 입력 변수를 생성합니다. 스크립트 입력 변수를 입력 또는 단계 데이터 알약에 매핑합니다. 예를 들어, 스크립트 입력 변수를 이전 단계에서 조회한 사용자 기록 목록에 매핑합니다.
- 복잡한 데이터를 저장할 스크립트 출력 변수 생성
- 스크립트에서 생성하는 모든 복합 데이터를 저장할 스크립트 출력 변수를 생성합니다. 스크립트 출력 변수는 스크립트에 정의된 값과 일치해야 합니다. 예를 들어, 여러 contact 객체를 저장할 contacts 배열을 만듭니다. 연락처 개체를 템플릿으로 저장하여 다시 사용할 수 있습니다.
- 작업 출력을 스크립트 출력 변수에 매핑
- 사용자 지정 작업으로 복잡한 데이터를 출력하려면 작업 출력을 추가하고 스크립트 단계 출력 변수에 대한 데이터 정제에 매핑합니다. 예를 들어 contacts 배열을 만들고 이전에 저장한 contact 개체 템플릿을 로드합니다. 작업 출력을 스크립트 단계에서 생성된 연락처 배열에 매핑합니다.
Flow Designer 및 도메인 분리
와 함께 도메인 분리를 워크플로우 스튜디오사용하는 경우 다음과 같은 일반 지침을 따르십시오.
- 도메인에 대해 테넌트 플로우, 작업 및 하위 플로우가 제대로 실행되는지 확인합니다
- 테넌트는 컨텐츠를 재정의 워크플로우 스튜디오 할 수 없으므로 TOP 도메인의 SP(서비스 제공자) 관리자가 컨텐츠를 작성하고 관리하여 도메인에 대해 제대로 실행되는지 확인해야 합니다. 도메인별 플로우를 생성할 수 있지만 계층 구조의 상위 도메인에서 작업하는 사용자는 여러 하위 도메인 플로우를 트리거할 수 있습니다. 예를 들어 TOP 도메인에서 작업하는 사용자는 ACME 및 INITECH와 같은 하위 도메인에서 플로우를 트리거할 수 있습니다.주:플로우 작성자는 자신의 현재 도메인과 계층 구조의 모든 상위 도메인에서 사용 가능한 콘텐츠만 워크플로우 스튜디오 볼 수 있습니다. 워크플로우 스튜디오 포함 도메인에서 볼 수 있는 콘텐츠는 표시하지 않습니다.
- 각 플로우, 작업 및 하위 플로우에 고유한 이름을 입력합니다.
- 모든 도메인이 컨텐츠를 공유 워크플로우 스튜디오 하므로 TOP 도메인의 SP 관리자가 각 플로우, 작업, 하위 플로우의 이름을 고유하게 지정하도록 하십시오. 이렇게 하면 한 도메인으로 사용되는 플로우가 다른 도메인의 플로우 이름과 중복되지 않습니다. 예를 들어 인시던트 확인 - TOP, 인시던트 확인 - ACME 및 인시던트 확인 - INITECH와 같은 플로우 이름에 도메인을 추가합니다.
- 플로우와 작업에 현재 또는 상위 도메인의 아티팩트만 포함되는지 확인합니다.
- 워크플로우 스튜디오 현재 또는 상위 도메인에서 사용할 수 없는 아티팩트가 포함된 플로우가 활성화되지 않도록 차단합니다. 예를 들어 ACME 도메인에 속하는 도메인별 플로우를 생성하는 경우 형제 도메인 INITECH에 속하는 작업 또는 하위 플로우를 포함할 수 없습니다.
- 컨텐츠가 속한 도메인에서 컨텐츠 편집 워크플로우 스튜디오
- 상위 도메인의 사용자는 하위 도메인의 플로우, 작업 및 하위 플로우를 볼 수 없습니다. 편집하려면 자신이 속한 도메인으로 변경해야 합니다. 예를 들어 TOP 도메인의 관리자는 ACME 도메인의 플로우를 볼 수 없습니다. 관리자가 ACME 도메인으로 전환하여 보고서를 보고 편집해야 합니다.
배치
- 이전 릴리스의 인스턴스에 최신 릴리스 플로우를 배포하지 않도록 합니다.
- 워크플로우 스튜디오 는 이전 릴리스에서 실행되는 인스턴스에 최신 릴리스 플로우를 배포하는 것을 지원하지 않습니다. 위험:플로우 데이터 모델은 릴리스 간에 변경될 수 있으며, 이로 인해 이전 릴리스 인스턴스에서 실행할 때 최신 플로우가 실행되지 않거나 예기치 않은 결과가 발생할 수 있습니다. 인스턴스를 배포하기 전에 동일한 릴리스 버전이 되도록 업그레이드합니다.
플로우 오류 처리
다음과 같은 일반 지침을 준수하여 플로우 오류 처리에서 제공하는 이점을 얻을 수 있습니다.
- 플로우의 메인 섹션에 오류 처리 항목 추가 방지
- 일반적으로 작업 또는 하위 플로우가 메인 섹션에서 오류를 반환할 때 플로우의 실행이 중지됩니다. 중지된 플로우는 오류를 반환한 지점을 지나 작업 또는 하위 플로우를 실행할 수 없습니다. 오류 핸들러 섹션에 오류 처리 작업 및 하위 플로우를 추가하면 오류가 있을 때 실행됩니다.
- 오류 상태 정보 캡처
- Error Status 객체에는 오류를 생성한 작업에 대한 정보가 포함되어 있습니다. 이 정보를 사용하여 오류의 원인을 식별하고 수정이 필요할 수 있는 데이터를 기록할 수 있습니다.
- 하위 플로우 오류 메시지 억제
- 하위 플로우에 오류 핸들러를 사용하여 오류가 상위 플로우로 계단식으로 전달되지 않도록 할 수 있습니다. 하위 플로우 오류 핸들러 섹션을 비워 두면 항상 완료됨(오류 적방) 상태가 생성됩니다.
- 하위 플로우를 사용하여 10개 항목 제한 방지
- 오류 처리 프로세스를 10개 항목 제한에 맞추지 말고 더 많은 항목을 포함할 수 있는 하위 플로우를 호출하십시오. 하위 플로우 출력을 사용하여 다른 플로우에서 자동화를 트리거할 수도 있습니다.
- 하위 플로우를 사용하여 수정 작업 수행
- 여러 플로우에서 동일한 작업 시퀀스를 다시 만드는 대신 재사용 가능한 하위 플로우를 생성하여 기록 데이터의 오류를 수정합니다. 플로우 오류로 인해 기록 데이터가 원치 않는 상태로 유지되는 경우 하위 플로우를 사용하여 이러한 기록을 수정합니다. 오류 핸들러를 사용하여 이러한 기록 데이터를 하위 플로우 출력으로 식별할 수 있습니다.
작업 오류 평가
다음과 같은 일반 지침에 따라 작업 오류 평가에서 제공하는 이점을 얻을 수 있습니다.
- 독립적인 단계만 계속 실행하도록 허용
- 이후 단계에서 필요한 데이터를 반환하지 않는 경우 단계가 계속 실행되도록 허용합니다. 단계가 이후 단계에 필요한 데이터를 제공하는 경우 이후 단계를 성공적으로 실행할 수 없다는 것을 알고 있습니다.
- 10개 이상의 오류 조건 방지
- 만들 수 있는 오류 조건의 수에는 제한이 없지만 각 오류 조건에 대한 평가가 필요합니다. 평가해야 하는 오류 조건이 많을수록 작업 실행 속도가 느려질 수 있습니다.
- 특정 단계 실패 식별
- 단계 상태를 사용하여 특정 단계가 실패하는 시기를 식별할 수 있습니다. 작업에 동일한 유형의 단계가 여러 개 포함되어 있는 경우 특정 단계를 식별하는 것이 유용할 수 있습니다. 플로우 오류 핸들러가 실패에 대해 적절한 시정 조치를 취할 수 있도록 특정 단계를 식별할 수도 있습니다.
- 일반 오류 조건 앞에 특정 오류 조건 지정
- 작업이 일치하는 오류 조건을 찾으면 오류 평가가 중지됩니다. 일반 오류 조건을 먼저 배치하면 작업이 특정 오류 조건과 일치하지 않을 수 있습니다.
- 설명이 포함된 오류 조건 레이블 사용
- 편집할 필요 없이 오류 조건을 식별합니다. 기본적으로 오류 조건은 편집할 때만 볼 수 있습니다.
플로우 관리자
- 프로덕션에서 플로우 보고 끄기
- 플로우 보고를 사용하지 않도록 설정하여 플로우를 실행하는 데 필요한 메모리 양을 최소화합니다. 플로우 보고는 실행 상세 정보 페이지에 대한 구성 및 런타임 정보를 저장합니다. 이러한 보고서는 문제 해결에 유용하지만 메모리와 데이터베이스 모두에 많은 양의 데이터를 보존해야 합니다. 기본적으로 플로우 보고는 사용하지 않도록 설정되어 있으며, 플로우 또는 작업을 수동으로 테스트할 때만 시스템에서 실행 상세 정보를 생성합니다. 대신 보고가 꺼져 있어도 사용할 수 있는 로그 파일을 사용할 수 있습니다.
- 중첩 루프가 있는 플로우에서 사용되는 메모리 양 줄이기
- 보고가 활성화되면 com.snc.process_flow.reporting.iteration.lastn 값을 "1"로 설정하여 이전 루프 반복에서 소비하는 메모리 양을 줄입니다. 보고하는 반복 횟수가 많을수록 더 많은 메모리가 필요합니다.
- 플로우 실행 상세 정보에서 최종 변환 값 보기
- 최종 변환 값만 플로우 실행 상세 정보에는 표시되며 적용된 각 변환의 값은 표시되지 않습니다.
플로우 우선순위
플로우 우선순위를 설정할 때 다음 설계 고려 사항을 따르십시오.
- 모든 플로우가 높은 우선순위로 실행되도록 설정하지 마십시오.
- 모든 플로우를 높은 우선순위로 설정하는 대신 우선순위를 혼합하여 사용합니다. 작업자 스레드는 플로우 간의 상대적 우선순위를 사용하여 작업을 선택합니다. 모든 플로우가 높은 우선순위로 실행되는 경우 대기할 우선순위가 낮은 플로우가 없습니다.
- 일시 중지해야 하는 플로우에 대해 플로우 우선순위를 설정하지 않습니다.
- 일시 중지된 플로우는 실행을 재개할 때 우선순위 값을 잃게 되므로 일시 중지해야 하는 플로우를 기본 중간 우선순위로 유지하십시오.
- 비즈니스에 중요한 플로우에 높은 우선순위 사용
- 비즈니스 가치가 높고, 거의 실행되지 않으며, 런타임이 짧은 플로우로 높은 우선순위를 제한합니다. 대용량 플로우를 높은 우선순위로 설정하면 다른 플로우를 실행하는 데 사용할 수 있는 작업자 스레드 수가 제한되므로 피하십시오. 우선순위가 높은 장기 실행 플로우는 다른 플로우를 실행하는 데 사용할 수 있는 작업자 스레드를 줄일 수도 있습니다.
- 대용량 플로우에 낮은 우선순위 사용
- 시간에 민감한 다른 플로우가 먼저 실행될 수 있도록 대용량 플로우를 낮은 우선순위로 실행합니다. 우선순위가 낮은 플로우는 시간에 민감해서는 안 됩니다.
- 시간에 민감한 플로우에 중간 우선순위 사용
- 다른 플로우와 비교할 때 플로우에 시간 긴급도가 있는 경우 기본 플로우 우선순위를 사용합니다.