Webmethods에서 flow 서비스에서 사용되는 다양한 ITEM(MAP, BRANCH 등)에 대해 자세히 알아보도록 하겠다.
1. MAP

flow service에서는 변수 선언 및 데이터 매핑을 MAP을 통해서 연결해야 한다.
Transformers를 통해 값을 조작하고 계산할 수 있다.


이러한 math 서비스를 통해서 transform 할 수 있다. 웹메소드에서 기본으로 제공해주는 함수들이다.
2. BRANCH

조건문을 표현할 때 BRANCH를 사용한다. Properties에서 속성을 설정할 수 있다.

Evalutate Labels 값에 따라 기능이 달라진다.
- False인 경우, if문 같이 사용할 수 있다.

이 예시는 pipeline에서 존재하는 result 값에 따라 시퀀스를 나눈 것이다.
자바 코드로 보면 아래와 동일하다.
if (result == 0) {
// sequence 1
} else {
// sequence 2
}
\ $defualt라는 표현을 사용했는데 말그대로 디폴드값이다. 0이 아닌 경우에 해당 조건문을 타게 되는 것이다. 이 외에도 $null 표현이 있다.
0, $default 와 같은 값을 넣는 방법은 5번 시퀀스 설명할 때 같이 하도록 하겠다.
- True인 경우, switch문과 같이 사용할 수 있다.

result의 값에 따라 시퀀스가 선택된다. 파이프라인에 존재하는 변수에 접근할 때 %%를 사용한다. 계속 언급되는 파이프라인의 result는 아래에서 볼 수 있듯이 pipeline 탭에서 확인할 수 있다.

3. LOOP

foreach와 비슷한 반복문이다. 배열 형태의 데이터를 받아서 원소 개수만큼 반복을 진행하는 것이다.

Properties에서 Input array, Output array를 지정할 수 있다. 이 또한 파이프 라인에서 존재하는 리스트명을 적어주면 되는 것이다.
4. REPEAT

for문과 비슷한 반복문이다.

Properties의 Count 값 만큼 반복한다. 이를 설정하지 않는 경우 While문과 같이 무한 루프에 걸리게 된다.
Repeat on 값은 SUCCESS/FAILURE로 나눠져 있는데 일반적으로 SUCCESS를 사용하지만 FAILURE를 선택할 경우 실패 할 때 반복을 하게 된다.
추가적으로 REPEAT문을 실행하면 $retries라는 변수가 생성되어 NULL 1 2 3… 으로 증가한다.
5. SEQUENCE

예전 버전에는 flow service내에 TRY-CATCH가 따로 존재하지 않았다고 한다. 그렇기 때문에 SEQUENCE를 TRY-CATCH처럼 사용했다고 한다.

Properties의 Exit on이 SUCCESS/FAILURE로 나뉘게 되는데 SUCCESS일 경우 시퀀스 내의 flow가 실패해도 다음 flow를 실행하고, FAILURE인 경우 시퀀스 내의 flow가 실패하면 시퀀스를 빠져나오게 된다. (breake문이 실패한 경우에 동작한다고 보면 된다.)
6. TRY-CATCH

try-catch 블록을 생성해준다.

flow service에서 이렇게 두가지가 생성된다.
7. TRY-FINALLY

try-catch 블록을 생성해준다.

flow service에서 이렇게 두가지 블록이 생성된다.
8. .CATCH

9. FINALLY

10. EXIT

반복문에서 break문 처럼 사용된다.

- $parent: 현재 흐름의 부모 플로우 단계를 참조하는 것이다. 기본 값으로 설정되어 있으며, 오류 발생 시 부모 단계에 대한 실패 메시지를 전달해 상위 단계에서 문제 처리가 가능하다.
- $loop: 가장 가까운 조상 LOOP 또는 REPEAT 플로우 단계를 참조한다. 특정 루프에서 오류가 발생했음을 알리고, 루프 내에서 발생한 문제를 효과적으로 추적 가능하다.
- $flow: 전체 흐름을 참조한다. 전체 프로세스에서의 오류임을 알 수 있다.
- $iteration: 가장 가까운 조상 LOOP 또는REPEAT 플로우 단계의 반복을 참조한다.
사실 나도 $flow만 사용해봤기에 다른 옵션들이 어떻게 동작하는지 확실하게 와닿지 않는다는 점 …
자주 사용했던 서비스
1. pub.flow:debugLog
webmethods Integration Server > Logs > Server에서 로그를 찍을 수 있다.

2. pub.client.http
HTTP 요청을 보낼 수 있다.

pipeline에서 url, method 지정해주면 된다
3. pub.string:bytesToString
http 요청 보내고 받은 response 값을 string으로 변환할 때 사용된다.

byte 값을 string으로 변환할 수 있다.
4. pub.flow:getLastError
최근에 발생한 오류에 대한 정보를 가져오는 데 사용된다.
오류 관리 및 디버깅 과정에서 중요한 역할을 한다.
5. pub.flow:setREsponse2
현재 flow의 응답을 설정하는 데 사용된다.
응답 데이터를 구성하는 데 쓰인다.

responseString을 통해 response body 값이 설정된다.
디버깅 방법
디버깅할 플로우 서비스를 선택하고 ctrl + D를 누르거나 아래와 같이 선택해서 디버깅할 수 있다.

break point 걸고 싶은 라인에서 오른쪽 마우스를 눌러 Toggle Breakpoint를 걸면 된다.


아니면 이 사이 빈공간을 더블클릭 했을 때에도 BreakPoint 지정이 가능하다. (아래 참고)

디버깅 시작하고 해당 브레이크 포인트에서 값을 확인하고 싶다면 Variables 탭을 열어두면 된다.
만약 해당 탭이 안 열려있다면 아래와 같은 방법으로 해결할 수 있다.

REST API 통신 테스트 방법 (포스트맨)
rest 통신을 하기 위해서 REST Resource를 생성해줘야한다. 하나의 서비스라고 볼 수 있다.
이는 만들고 싶은 위치의 폴더에서 오른쪽 마우스 클릭하면 된다.


위치, 이름 설정하고 Next → Empty REST Resource 선택 → Finish

Add 선택

url 입력하고 Service Name은 오른쪽 파일 찾기를 통해서 만들어뒀던 플로우 서비스 선택하면 된다. 그리고 HTTP methods도 선택하면 된다.

추가한 결과이다.
포스트맨에서 호출할 때 url 작성 방법
- http://IP:PORT/{SERVICE PATH}/{REST URL}
SERVICE PATH는 아래에서 확인할 수 있다.

생성한 REST Resource 선택하고 Properties 확인하면 Template prefix가 나온다 그게 service path 이다. 그 뒤에 REST URL을 붙여주면 URL이 완성된다.
이 URL로 포스트맨으로 호출하면 연결된 플로우 서비스가 호출되게 된다.
댓글