세일즈포스(Salesforce, SFDC) 이야기/관리자(Admin)을 위해...

‘주문 관리’ 애플리케이션 만들기 - 06 플로를 이용한 자동화

sfdc-exp 2025. 3. 18. 15:01

‘플로(Flows)’ 를 만들기 위한 시나리오 설계

주로 회사에서 사용하는 ‘주문서’의 양식은 회사마다 고유 형태를 가지고 있을 것이지만, 가장 일반적인 주문서의 모양을 살펴보면 아래와 유사할 것이다.

이와 같은 ‘주문서’를 고려한다고 가정하면, 우리가 만든 애플리케이션은 대부분 정보를 포함하고 있지만 위 그림의 빨간색 박스로 표시한 ‘주문 총금액’이 누락 되어 있다. 다시 말해 아래 세부행에 새로운 항목이 추가되거나, 입력된 항목이 추가되면 상단의 요약란의 ‘주문 총금액’ 이 업데이트 되어야 한다. 

 

사실 이러한 로직을 만들기 위한 목적으로 제공되는 기능이 ‘롤업 요약’이다. 그런데, ‘롤업 요약’ 을 사용하려면 두 개체간의 관계가 ‘마스터-세부사항’ 관계가 되어야 하고, 세부사항 쪽 필드가 수식 필드가 아닌 숫자 또는 통화 필드가 되어야 하는데 우리가 이미 셋업한 바로는 조건이 맞지 않는다.

 

롤업 요약’ 을 사용하지 못한다면, 후속 작업 만들기, 미리 알림 이메일 보내기 또는 레코드 업데이트와 같은 일상적인 과업을 자동화하는데 사용되는 ‘플로(Flows)’ 를 사용할 수 있다. ‘플로(Flows)’ 를 셋업하기 전에, 반드시 어떤 로직을 적용할 것인지 설계가 필요한다, 우리가 원하는 로직을 만들려면 ‘JL 주문’ 개체를 이용하는 로직을 고려할 때 다음의 2가지 방법을 생각해 볼 수 있다.

 

  • 첫번째 방법: 하위 개체, 즉 ‘JL 주문 상세 내역’ 이 신규로 추가되거나, 삭제 또는 업데이트 되면  전체 하위 개체의 금액 필드의 합을 구한 다음 상위 개체인 ‘JL 주문’ 의 ‘주문 총금액’ 필드를  업데이트 하는 방법.
  • 두번째 방법:  ‘JL 주문 상세 내역’의 변동(신규 추가, 업데이트 및 삭제)이 발생할 때 마다 상황에 맞게 ‘주문 총금액’ 을 업데이트 하는 방법. 이러한 경우는 3가지 경우에 대한 로직을 생각해야 한다. ‘JL 주문 상세 내역’에 대하여;
    • 신규 레코드 추가시: 계산된 ‘JL 주문 상세 내역’의 금액을 ‘JL 주문’의 ‘주문 총금액’의 현재값에 더해 준다.
    • 기존 레코드 업데이트시: 계산된 ‘JL 주문 상세 내역’의 금액의 이전 값을  ‘JL 주문’의 ‘주문 총금액’ 에서 빼준 다음, 신규값을 더해 준다. 
    • 시존 레코드 삭제시: 계산된 ‘JL 주문 상세 내역’의 금액을 ‘JL 주문’의 ‘주문 총금액’의 현재값에서 빼준다.

플로를 작성하기 이전에 먼저 ‘JL 주문’ 개체에 아래의 필드를 추가해야 한다. 필드 추가는 ‘문 관리’ 애플리케이션 만들기 - 01’ 을 참고하기 바란다.

Object Name 필드 레이블 필드 이름 데이터 유형 길이 필수 고유함 연결 개체
JL 주문 주문 총금액 TotalOrderAmount 통화 16 No    


‘플로(Flows)’ 로직 설계하기

플로(Flows)’ 의 자세한 사항은 별도의 시리즈로 다룰 예정이므로, 지금은 어떻게 로직을 만들지에 대한 부분에 집중해서 생각해 보기로 하자. 위에서 설명한 로직으로 고려할 때 아무래도 첫번째 로직이 간결해 보인다. 따라서, ‘플로(Flows)’ 는 아래의 순서로 셋팅하는 것이 적당하다.

 

  • 트리거(Trigger): 플로를 시작하는 이벤트, 즉 시작 포인트를 생각하면 플로를 어떤 개체에 대하여 어떤 유형을 선택해야 시작해야 하는 지 결정할 수 있다.
    • 개체 : JL 주문 상세 내역
    • 플로 유형 : 레코드 트리거형 플로
    • 트리거: 새로운 레코드 생성 또는 업데이트시
  • 리소스(변수) 생성 : 전체 ‘JL 주문 상세 내역’ 레코드 중에서, 플로를 시작한  ‘JL 주문 상세 내역’ 의 ‘주문 번호’ 와 같은 ‘주문 번호’를 가진 레코드들의 금액의 합을 저장할 변수를 ‘통화’ 형식으로 미리 생성한다. 이때, 기본값, 즉 초기화 값을 0으로 셋팅한다. 
    • 변수명TotalAmountForTheOrder
  • 플로 로직
    • ‘레코드 가져오기 요소’ : 전체 ‘JL 주문 상세 내역’ 레코드 중에서, 플로를 시작한  ‘JL 주문 상세 내역’ 의 ‘주문 번호’ 와 같은 ‘주문 번호’를 가진 레코드들을 가져온다.
    • ‘루프’ 요소 : 전 단계에서 가져온 레코드들에 대하여 차례로 아래의 작업을 수행한다.
    • ‘레코드 가져오기’ 요소 : 전체 ‘JL 주문’ 레코드 중에서, 플로를 시작한  ‘JL 주문 상세 내역’ 의 ‘주문 번호’ 와 같은 ‘주문 번호’를 가진 레코드를 가져온다.
    • ‘할당’ 요소 : 이전 단계에서 가져온 ‘JL 주문’ 레코드의 ‘주문 총금액’ 필드에 루프를 통해 합산된 ‘TotalAmountForTheOrder’ 변수의 값을 할당/업데이트 한다.
    • ‘레코드 업데이트’ 요소: 이전 단계에서 업데이트한 ‘JL 주문’ 레코드를 저장한다.

 

 

 

‘플로(Flows)’ 셋업하기

플로의 설계서는 여러가지 방식으로 작성할 수 있다. 위와 같이 간단하게 메모로 작성할 수도 있지만, 필자가 실제 프로젝트에서 사용하는 설계서가 있는데, 실제 샘플들은 추후 플로를 상세하게 설명하면서 공유하기로 하고, 이제 약식이지만 설계서가 준비 되었으니 직접 셋업해보기로 하자.

 

아래 메뉴를 이용해 새 플로를 작성하는 화면으로 이동한다.

 

설정 > (좌측 사이드바) 프로세스 자동화 > 플로) > 새 플로 (우측 상단 버튼)

 

  • 새 플로 유형 선택: 새 플로를 작성하기 위한 아래와 같은 화면이 표시되는데, 첫번째 화면에서 ‘처음부터 시작’ 을 클릭하고 ‘다음’ 버튼을 누른다. 다음 화면에 표시되는 플로의 ‘유형 선택’ 화면에서 ‘레코드 트리거형’ 플로를 선택한다. 표시된 플로 빌더 화면에서 상단의 ‘개체’ 필드에서 검색 또는 스크롤해서 본인이 만든 ‘주문 상세 내역’을 선택하고 우측 상단의 ‘X’ 버튼을 눌러 우측 화면을 닫는다.

 

  • 리소스/변수의 생성: 아래 그림과 같이 플로 빌더 화면 좌측 상단의 아이콘을 클릭하여 ‘도구 모음’을 표시한 다음, ‘새 리소스 버튼을 클릭한다. ‘새 자원’ 다이알로그 박스에서 아래와 같이 선택/입력 하고 ‘완료’버튼을 클릭한다.
    • 리소스 유형 : 변수
    • API 이름 : TotalAmountForTheOrder
    • 데이터 유형 : 통화
    • 소수 자릿수 : 0

 

  • ‘레코드 가져오기 요소’ : 좌측의 ‘도구 모음’을 닫고, 화면의 ‘즉시 실행’ 아래의 (+) 을 눌러 표시된 선택 목록 중에서 ‘레코드 가져오기’를 선택하고 아래와 같이 입력/선택한다.
    • 레이블: 현재 주문의 상세내역들 가져오기
    • API 이름 : GetAllOrderLinesForTheOrder
    • 설명 : 현재 주문의 상세 내역 레코드들 가져오기
    • 개체 : ‘JL 상세 주문 내역’ 선택
    • 조건 요구 사항 : ‘모든 조건이 충족됨 (AND)’ 선택
    • 필드 : ‘주문 번호 (MyOrderNo__c)’ 선택
    • 연산자 : ‘같음’ 선택
    • 값 : $Record > 주문 번호 ({!$Record.MyOrderNo__c})
    • 정렬 순서 : 정렬되지 않음
    • 저장할 레코드수 : ‘모든 레코드’ 선택

 

  • ‘루프’ 요소 : 전 단계에서 가져온 레코드들에 대하여 금액을 합산하기 위하여 아래와 같이 루프를 추가한다.
    • 레이블 : 상세 내역 합산 루프
    • API 이름 : LoopForTheRecords
    • 설명 : 전 단계에서 가져온 상세 내역 레코드들 합산을 위한 루프 
    • 컬렉션 변수 : ‘현재 주문의 상세내역들 가져오기’ 의 ‘JL 주문 상세 내역’ 선택

 

  • ‘루프’ 아래에 ‘할당’ 요소 추가 : 아래 그림과 같이 각 레코드들에 대하여 ‘금액’ 필드의 값을 위에서 생성한 ‘TotalAmountForTheOrder’ 필드에 더하도록 설정한다.
    • 레이블 : 상세내역의 금액을 변수에 더하기
    • API 이름 : AddAmountToTheVariable
    • 설명 : 레코드의 금액을 생성한 변수에 추가.
    • 변수 : ‘TotalAmountForTheOrder ({!TotalAmountForTheOrder})’ 선택
    • 연산자 : ‘추가’ 선택
    • 값 :  ‘상세 내역 합산 루프의 현재 항목’> 금액’ ({!LoopForTheRecords.LineAmount__c})

 

  • ‘레코드 가져오기’ 요소 : 아래 그림과 같이 전체 ‘JL 주문’ 레코드 중에서, 플로를 시작한  ‘JL 주문 상세 내역’ 의 ‘주문 번호’ 와 같은 ‘주문 번호’를 가진 레코드를 가져온다.
    • 레이블: 현재 상세내역의 주문 레코드 가져오기
    • API 이름 : GetTheOrderForTheLineRecord
    • 설명 : 주문 레코드 중에서 현재 상세내역의 주문 번호와 같은 레코드 가져오기
    • 개체 : ‘JL 주문’ 선택
    • 조건 요구 사항 : ‘모든 조건이 충족됨 (AND)’ 선택
    • 필드 : ‘주문 번호 (Name)’ 선택
    • 연산자 : ‘같음’ 선택
    • 값 : $Record > 주문 번호 > 주문번호 ({!$Record.MyOrderNo__r.Name})
    • 정렬 순서 : 정렬되지 않음
    • 저장할 레코드수 : ‘첫번째 레코드만’ 선택

 

  • ‘할당’ 요소 : 아래 그림과 같이 이전 단계에서 가져온 ‘JL 주문’ 레코드의 ‘주문 총금액’ 필드에 루프를 통해 합산된 ‘TotalAmountForTheOrder’ 변수의 값을 할당/업데이트 한다.
    • 레이블 : 주문의 주문 총금액 필드에 할당 
    • API 이름 : UpdateTotalAmountFieldOnOrder
    • 설명 : 이전 단계에서 가져온 ‘JL 주문’ 레코드의 ‘주문 총금액’ 필드에 루프를 통해 합산된 ‘TotalAmountForTheOrder’ 변수의 값을 할당/업데이트 한다.
    • 변수 : ‘현재 상세내역의 주문 레코드 가져오기의 JL 주문 > 주문 총금액 ({!GetTheOrderForTheLineRecord.TotalOrderAmount__c} ) 
    • 연산자 : ‘같음’ 선택
    • 값 : TotalAmountForTheOrder ({!TotalAmountForTheOrder})

 

  • ‘레코드 업데이트’ 요소 : 아래 그림과 같이 이전 단계에서 업데이트한 ‘JL 주문’ 레코드를 저장한다.
    • 레이블 : 업데이트한 주문 레코드 저장
    • API 이름 : SaveUpdatedOrderRecord
    • 설명 : 이전 단계에서 업데이트한 ‘JL 주문’ 레코드를 저장한다.
    • 업데이트할 레코드를 찾고 레코드의 값을 설정하는 방법 : ‘레코드 또는 레코드 컬렉션의 ID 또는 모든 필드 값 사용’ 선택
    • 레코드 또는 레코드 컬렉션 : ‘현재 상세내역의 주문 레코드 가져오기의 JL 주문 ({!GetTheOrderForTheLineRecord})’ 선택

 

  • 플로 저장: 아래 그림을 참고하여 작성한 플로를 저장한다.
    • 플로 레이블 : 주문 총금액 계산
    • 플로 API 이름 : CalculateOrderLines
    • 설명 : 주문 상세 내역이 변경되면 동일한 주문 번호를 가진 레코드들의 금액을 합산하여 주문 레코드의 주문 총금액 필드에 업데이트.



여기까지 설계한 대로 플로의 셋업은 완료 되었다. 이제 실제 사용을 위한 ‘활성화’ 이전에 작성한 플로가 정상적으로 작동하는지 테스트하기 위해 ‘디버그’ 작업을 수행해보자.

 

작성한 ‘플로(Flows)’ 의 디버그 및 활성화

작성한 플로를 테스트 하는 방법은 ‘디버그’ 기능과 ‘테스트 보기’ 기능을 사용할 수 있지만 간단하게 에러없이 작동하는지의 여부를 판단하려면 ‘디버그’ 가 편리하다.

 

  • 플로의 디버깅 : 플로 빌더 화면 우측 상단의 ‘디버그’ 버튼을 누르고 아래 그림과 같이 입력하여 실행시킨다.
    • 디버그 실행 경로: 즉시 실행
    • 레코드가 다음 상태라고 가장하고 플로 실행 : ‘업데이트됨’ 선택
    • 트리거 레코드 > JL 주문 상세 내역 : 표시되는 첫번째 레코드 선택

 

  • 디버깅 결과의 리뷰 : 디버그를 실행하면 우측 사이드 패널이 열리며 각 단계별로 실행 결과를 보여 준다. 에러가 있으면 왜 에러가 났는지를 표시해준다.

 

  • 활성화 : 디버그 결과에 에러가 없으므로 활성화를 아래 그림과 같이 진행한다.

 

 

맺음말

이로써 플로를 이용한 자동화를 셋업하였다. 다음 포스트에서는 작성한 플로를 실제 사용하면서 작동 확인을 하기로 하자.