LowCode (Mendix) Advanced/Master Modeling Microflows

Microflow Expressions

Caryou 2024. 10. 23. 11:35

학습 목표

이 모듈을 마치면 다음을 수행할 수 있습니다.

  • 변수를 언제, 어떻게 사용할지 결정하세요
  • if-then-else 표현식보다 결정이 선호되는 이유를 설명하세요.
  • 마이크로플로우의 가독성 향상
  • 변수를 재사용하여 마이크로흐름 최적화
  • 표현식에서 함수 식별
  • 마이크로플로우에서 복잡한 문자열을 구축하세요

변수

Mendix로 마이크로플로를 만들 때, 여러분은 종종 변수를 사용하게 될 것입니다. 변수는 단일 객체, 객체 목록 또는 원시(단일) 값으로 존재할 수 있습니다.

 

변수의 종류

마이크로흐름 내에서는 다음과 같은 유형의 데이터로 작업할 수 있습니다.

 

Object

  • 도메인 모델에 정의된 엔터티의 단일 인스턴스입니다.
  • 생성, 변경, 삭제가 가능합니다.
  • 데이터를 저장하는 것이 목적입니다.

List of objects

  • 특정 엔터티의 객체 목록입니다.
  • 생성, 변경(설정, 추가)이 가능합니다.
  • 기능은 다음과 같습니다.
    • 목록(또는 목록의 속성) 집계: 합계, 평균, 개수, 최소값, 최대값
    • 목록 연산: 합집합, 교집합, 빼기, 포함, 같음, 정렬, 필터링, 찾기, 머리, 꼬리
  • 목적은 객체 목록을 사용하여 무언가를 하는 것입니다.

Primitive variables

  • 이러한 값 유형은 부울, 날짜 및 시간, 소수점, 열거형, 정수/긴 값, 문자열 등 다양합니다.
  • 그 목적은 마이크로플로우 로직 내에서 사용할 임시 저장 값입니다(예: 값 추적 또는 목록을 반복한 횟수 계산)

마이크로플로우의 변수는 달러 기호($)로 표시되고 변수 이름 뒤에 옵니다. 마이크로플로우에 다양한 방법으로 삽입할 수 있습니다. 예를 들어, 입력 매개변수로 삽입할 수 있습니다.

[ 그림 1 ]

또는 Retrieve 활동을 통해 검색할 수 있습니다 .

[ 그림 2 ]

변수는 마이크로흐름의 출력 값(반환 값)으로도 사용될 수 있습니다.

[ 그림 3 ]

 

토큰

토큰은 특별한 유형의 변수입니다. 토큰은 Decisions 또는 XPath Constraints 와 같은 마이크로플로에서 사용할 수 있는 시스템 생성 값입니다.

사용 가능한 토큰은 여러 개 있으며, 대부분은 DateTime 과 관련이 있습니다.

 

DateTime과 관련이 없는 유용한 토큰 중 하나는 CurrentUser 토큰입니다. 이 토큰에는 현재 사용자 개체의 ID가 들어 있습니다. 예를 들어, 현재 순간(밀리초 단위까지 정확함)은 '[%CurrentDateTime%]'를 사용하여 식별할 수 있으며, 현재 사용자 ID는 ‘[%CurrentUser%]’ 를 사용하여 액세스할 수 있습니다.

 

If-Then-Else vs. Exclusive Splits

결정은 조건을 평가하고 해당 평가 결과에 따라 다양한 작업을 수행하려는 경우 마이크로흐름 내에서 사용됩니다.

예를 들어, OrderLine 에 특정 값이나 수량이 있을 때 자동 할인을 제공할 수 있습니다 .

$OrderLine/LineValue >= 1000 or $OrderLine/Quantity >= 5

 

방법 1.

[ 그림 4 ]

 

방법 2.

[ 그림 5 ]

마이크로플로우의 가독성을 위해 if-then-else 명령문보다 Decision을 사용하는 것이 좋습니다.

 

마이크로플로우 최적화

아래 Change Object를 살펴보면 상태가 다소 복잡한 if-then-else 문으로 설정되어 있음을 알 수 있습니다. 이 논리를 Change Object 활동에 배치하면 두 가지 이유로 마이크로플로를 이해하기가 더 어려워집니다. 첫째, 무엇이 변경되는지 보려면 활동을 열어야 합니다. 둘째, 복잡한 문으로 인해 무슨 일이 일어나고 있는지 한눈에 볼 수 없습니다.

[ 그림 6 ]

if-then-else 문을 여러 개의 결정으로 나누면 마이크로흐름의 가독성을 개선할 수 있습니다.

 

 

 

If-Then-Else 문 최적화

마이크로플로우의 가독성은 if-then-else 문을 여러 가지 결정으로 나누어 개선할 수 있습니다. 먼저, 제품이 활성 상태인지, 아직 재고가 있는지 알아야 합니다. 재고가 없으면 상태를 Sold Out(품절) 으로 변경해야 합니다 . 두 경우 모두 총 재고를 $SumQuantity – $SumShipped(배송됨)로 업데이트해야 합니다.

 

다음 요소를 추가하면 이를 달성할 수 있습니다.

[ 그림 7 ]
[ 그림 8 ]

두 번째 단계는 제품 상태가 매진 이고 재고가 다시 추가된 경우 제품 상태가 활성화되어야 하는 시점을 결정하는 것입니다 . 모든 경우에 총 재고는 $SumQuantity – $SumShipped로 업데이트해야 합니다.

다음 요소를 추가하면 이를 달성할 수 있습니다.

[ 그림 9 ]
[ 그림 10 ]

 

 

변수를 사용하여 값 재사용 최적화

이 마이크로플로우에서 $SumQuantity – $SumShipped 계산을 세 번 사용합니다. 즉, 이 계산 결과를 변수에 저장하여 마이크로플로우 전체에서 재사용할 수 있도록 하는 것이 좋습니다.

[ 그림 11 ]

 

 

마이크로플로우 표현식 및 함수

마이크로플로우 표현식은 마이크로플로우 내에서 논리를 만드는 데 사용됩니다. 이를 통해 비즈니스 규칙이나 프로세스에 따라 객체나 변수에 액세스하고, 평가하고, 포맷하고, 조작할 수 있습니다.
표현식은 마이크로플로우 내의 여러 다른 영역에서 사용할 수 있습니다. 예를 들어:

  • 결정 조건
  • 객체 작업 생성 및 변경
  • 변수 동작 생성 및 변경
  • 종료 이벤트 출력
  • 매개변수에 대한 인수(Java Actions, 하위 마이크로플로우 호출 등).

 

Components

표현식은 여러 가지 다른 유형의 구성 요소로 구성됩니다. 작업할 수 있는 다양한 유형의 변수는 객체, 속성 및 연관입니다.

Object (Evaluation Of)

$Customer != empty

 

Attribute (Setting a Value)

$Customer/Address

 

Association (Evaluation Of)

$Customer/OrderManagement.Customer_ProfileImage != empty

 

 

Functions

많은 사전 정의된 함수( f(x) )는 마이크로흐름 표현식을 만드는 동안 사용할 수 있습니다. 몇 가지 예는 다음과 같습니다.

Arithmetic Expressions

* div + -

Relational Expressions

< > = !=

Special Checks

empty ,isNew

Boolean Expressions

and , or,not

Differentiation

if , then,else

Mathematical

max, min, round, etc.

String

toUpperCase, find, substring, etc.

Date/Time

dateTime, addDays, etc.

Parse/Format

parseFloat, formatDateTime, etc.

 

 

사용 가능한 표현식과 함수의 개요와 이를 사용하는 방법에 대한 자세한 내용은 표현식을 참조하세요.

 

함수 결합

마이크로플로우 표현식에서 원하는 결과를 얻으려면 여러 함수를 결합해야 할 때가 많습니다. 이 경우 괄호를 사용하여 계산의 우선순위를 결정할 수 있습니다.

SellingPrice는 기본 Price  Discount 속성( OCH_SetLineValue 마이크로플로에서)을 기반으로 계산됩니다.

$CurrentPrice/Price - (($CurrentPrice/Price div 100) * $OrderLine/Discount)

 

 

다음 예는 주문이 이루어지는 요일을 결정하고 이 요일을 숫자 값으로 출력합니다(예: 월요일은 "1", 목요일은 "4").

parseInteger(formatDateTime($Order/Date, 'u'))

 

DateTime 함수

DateTime으로 작업하는 것은 많은 애플리케이션에서 마주치게 될 것입니다. 표현식에서 사용 가능한 함수 중 다수는 날짜 및 시간과 관련이 있습니다.

일반적인 DateTime 함수는 다음과 같습니다.

  • Between date calls
  • Add date calls
  • Trim to date calls

Formatting and Parsing

DateTime 입력(또는 출력)이 Mendix에서 사용하는 것과 다른 형식인 경우, 포맷팅 및 구문 분석을 사용할 수 있습니다. 예를 들어 다른 시스템에서 날짜를 가져오고 문자열에 날짜 값을 표시하는 경우가 있습니다.

포맷팅은 날짜를 텍스트로 변환하는 것이고, 파싱은 텍스트를 날짜로 변환하는 것입니다. 이러한 상황에 대한 함수는 formatDateTime  parseDateTime 입니다 . 이러한 함수에 사용 가능한 패턴은 SimpleDateFormat 을 따릅니다 .

 

필수 추가 읽기 자료

시간대, 현지화, 일광 절약 시간제와 같은 주제는 DateTime 기반 논리를 매우 어렵게 만들 수 있으며, 이러한 주제의 영향을 알고 있어야 합니다. 이러한 주제에 대한 필수 정보는 DateTime 처리 FAQ를 참조하세요.

 

주문 번호 구성

이 과제에서는 이미 논의된 마이크로플로우 표현식을 사용하여 여러 값과 선택에 따라 문자열 값을 구성합니다.

 

Car Supply는 고유한 순서 번호와 고객 정보를 기반으로 모든 주문에 대한 주문 번호를 원합니다. 이 번호는 송장 발행 시 주문을 처리하는 방법에 대한 정보를 제공하는 것이 목표입니다.

 

주문 번호에는 다음 정보를 포함해야 합니다.

[ 그림 12 ]
[ 그림 13 ]

ACT_CommitOrder 마이크로 플로 는 주문과 해당 주문 라인을 커밋합니다. 커밋하기 전에 마이크로플로는 새 주문인지 기존 주문인지 확인합니다. 새 주문의 경우 주문 번호는 SUB_DetermineOrderNumber 하위 마이크로플로에서 결정됩니다. 현재 이 마이크로플로는 주문 번호로 주문 시퀀스 번호를 반환합니다.

[ 그림 14 ]

이제 위 MF SUB_DetermineOrderNumber를 요구사항에 맞게 수정을 하겠습니다.

먼저 필요한 데이터를 검색하고 필요한 주문 날짜, 고객 및 계정 관리자 값을 캡처해야 합니다(사용 가능한 경우). 이는 다음 요소를 추가하여 달성할 수 있습니다.

[ 그림 15 ]

또한, 고객이 B2B 고객인지, 그렇다면 고객이 신용으로 주문할 수 있는지 확인해야 합니다. 결과에 따라 추가 정보를 주문 번호에 추가해야 합니다. 이는 병합 후 다음 요소를 추가하여 달성할 수 있습니다.

[ 그림 16 ]

 

배달날짜 설정

이미 논의된 마이크로흐름 표현식을 DateTime 값이 관련된 상황에 적용해 보겠습니다.

 

Car Supply 회사는 고객에게 주문 배송 예상 날짜에 대한 정보를 제공하고자 합니다. 오후 4시 이전에 주문하면 배송 날짜는 다음 날입니다. 오후 4시 이후에 주문하면 배송 날짜는 이틀 후입니다. 배송 날짜가 일요일이면 월요일에 배송됩니다.

이러한 세부 사항은 다음 표로 표현될 수 있습니다.

[ 그림 17 ]

표에 따르면 월요일 오후 4시 이전에 주문이 접수되면 배송일은 월요일 + 1 = 화요일이 됩니다. 월요일 오후 4시 이후에 주문이 접수되면 배송일은 월요일 + 2 = 수요일이 됩니다.

ACT_CommitOrder 마이크로플로  주문과 해당 주문 라인을 커밋합니다. 커밋하기 전에 마이크로플로는 SUB_SetOrderDeliveryDate 하위 마이크로플로를 호출하여 배송 날짜를 결정합니다. 현재 이 마이크로플로는 주문 날짜를 배송 날짜로 반환합니다.

[ 그림 18 ]

 

이제 위 MF SUB_SetOrderDeliveryDate 를 요구사항에 맞게 수정을 하겠습니다.

먼저, 주문이 오후 4시 이전에 이루어졌는지 확인해야 합니다. 참인 경우 일요일에 배송되는 것을 피하기 위해 주문일이 토요일인지 알아야 합니다. 이는 다음 요소로 서브 마이크로플로를 확장하여 달성할 수 있습니다.

[ 그림 19 ]
[ 그림 20 ]

서브 마이크로플로를 완료하려면 4PM 전에 주문? 결정 의 거짓 플로우를 구축해야 합니다. 이 플로우는 일요일에 배송되는 것을 피하기 위해 주문일이 금요일인 경우를 포착해야 합니다.

 

이는 다음 요소를 사용하여 서브 마이크로흐름을 확장하여 달성할 수 있습니다.

[ 그림 21 ]
[ 그림 22 ]

 

정확히 동일한 두 개의 변경 변수 활동이 있고 모든 종료 이벤트가 동일한 변수를 반환하는 것을 볼 수 있습니다 . 스마트 병합을 통해 변경 변수를 병합하고 종료 이벤트를 하나로 줄일 수 있습니다. 이렇게 하면 동일한 검사 결과가 동일한 변경 활동을 초래하고 반환 값을 한 위치에서 유지할 수 있으므로 마이크로플로의 유지 관리성과 가독성이 향상됩니다.

 

마이크로 흐름을 병합하면 다음과 같은 마이크로 흐름이 생성됩니다.

[ 그림 23 ]

 

 

신용 주문에 대한 전제 조건 확인

이 과제에서는 앞서 논의한 마이크로흐름 표현식을 여러 가지 선택을 해야 하는 상황에 적용해 보겠습니다.

충성도 높은 B2B 고객은 월말에 모든 주문에 대한 비용을 지불할 수 있도록 신용으로 주문할 수 있어야 합니다. 신용으로 주문하기 위한 전제 조건은 다음과 같습니다.

  1. 고객은 B2B 고객이어야 합니다.
  2. 고객은 3개월 이상 고객이어야 합니다. 첫 주문은 기간의 시작을 정의합니다.
  3. 고객 주문의 총 가치는 최대 신용 한도를 초과할 수 없습니다. 최대 신용 한도는 표준 금액인 $1000 또는 모든 합산 주문의 총 가치의 20%입니다.

신용 주문이 허용되기 전에 모든 전제 조건이 충족되어야 합니다. 세 번째 주문 마법사 페이지( Order_Wizard3 )에서 사용자는 주문이 신용으로 처리될지 여부를 지정할 수 있습니다(기본값은 false). 주문을 제출할 때 ACT_CommitOrder 마이크로플로는 주문과 해당 주문 라인을 커밋합니다. 커밋하기 전에 마이크로플로는 신용 주문 옵션이 true로 설정된 경우 SUB_CheckOrderCreditAllowed 하위 마이크로플로를 호출합니다. 이 하위 마이크로플로는 신용 주문이 허용되는지 여부를 결정하며, 현재 이 마이크로플로는 항상 true를 반환합니다.

[ 그림 24 ]

아래 네 가지 조건을 확인해야 합니다. 결과에 따라 true 또는 false가 반환되어야 합니다.

  1. 고객 유형(B2B 여부)을 확인하세요.
  2. 주문 내역을 확인하세요(3개월 이상이어야 함).
  3. 주문 가격을 기본 크레딧과 비교합니다(주문 가격은 1000달러 미만이어야 합니다).
  4. 주문 가치를 가변 신용과 비교합니다(주문 가치는 합계된 모든 주문 가치의 20% 미만이어야 합니다).

아래 섹션의 요소와 활동을 통해 각 검사에 대한 하위 마이크로흐름을 확장해야 합니다.

 

고객 유형 확인

고객이 B2B 고객이 아닌 경우 신용 주문은 허용되지 않으며 마이크로플로는 중단되고 false 를 반환해야 합니다.

[ 그림 25 ]
[ 그림 26]

 

주문 내역 확인

고객이 B2B 고객인 경우 주문 내역을 확인해야 합니다

[ 그림 27 ]
[ 그림 28 ]
[ 그림 29 ]

 

[ 그림 30 ]

그리고 주문 가치가 $1000보다 큰 경우, 그 가치는 고객의 총 주문 가치의 20%보다 작아야 합니다. 이것이 사실이 아니면 신용 주문은 허용되지 않습니다.

[ 그림 31 ]

 

[ 그림 32 ]

 

 

출처 : https://academy.mendix.com/link/paths/6/Master-Modeling-Microflows

'LowCode (Mendix) Advanced > Master Modeling Microflows' 카테고리의 다른 글

Debugger  (0) 2024.10.24
Sub-Microflows  (1) 2024.10.24
Work with ListsLearning Objectives  (2) 2024.10.23