[CAIで作るAPI開発]loopステップを使った繰り返し処理

## CAIでループ(loop)ステップを使ってみる

:::note info
Informatica のクラウドサービスIDMCの機能
アプリケーション統合を利用した経験がある方向けの記事です
:::

IDMCのアプリケーション統合(Cloud Application Integration = CAI)ではループステップという部品があり、これを使用してリスト等の繰り返し処理を行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/81f180cf-d826-1115-f47d-64579295cba2.png)

今までは、分岐ステップとジャンプステップで繰り返し処理を書いていた方も多いと思いますが
ループステップのほうが簡単に実装することができます。

### ループステップのループ条件の設定方法
ループの行い方は、変数を使用したループの制御と、式を使用した制御が可能です。
また、WHILE文やDO-WHILE文のように、ループの先頭でループ判定を行うか、最後で判定を行うか設定することができます。
こちらはコーディングと同じで、DO-WHILEの場合は必ず1回は処理が行われます。

#### 最初にループ判定(WHILE文)
最初にループ判定する場合は「指定日の前日まで繰り返す」にチェックをいれます。
その場合は、プロセス上の表記は下図の通りとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/9c26c0d0-f90b-83ca-f1bc-29c2750964e8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/39649fc1-5ef5-a0d5-2038-8f5e58b53dc8.png)

#### 最後にループ判定(DO-WHILE文)
最後にループ判定する場合は「指定日までを繰り返す」にチェックをいれます。
その場合は、プロセス上の表記は下図の通りとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/00b48a7d-aef1-00e0-717b-cc431315bd33.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/833232d7-227f-030f-77b7-f47cd248637a.png)

### ループ判定の設定
今回は、最初にループ判定するケースで設定方法を記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/e4bead8e-56f9-bcc1-9beb-9fe03e444fbe.png)
ループ条件の指定は、「フィールド」もしくは「計算式」を選ぶことができます。
「フィールド」の場合は、一時変数等を利用して、これをインクリメントして利用します。
それでは簡単に下記のような構文を実装してみましょう。
~~~
for(int i=0; i<10; i++)
~~~

開始ステップのプロパティの「一時フィールド」タブを開き
新規フィールドを作成します。
| 項目名 | 設定値 |
|:-----------|:-----------:|
| 名前 | i |
| タイプ | 整数値 |
| 初期値 | 0 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/a0fd6289-55d5-1e1c-c43f-b0dcad859260.png)

次にループステップを選択し
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/54f731f7-8b22-8c75-172b-bdad93969a59.png)
スープ条件に、「フィールド」を選択し
フィールドの変数から「i」(フィールド temp.i)を選択します。

次に、条件から「次の値より小さい」を選択し、値を「10」に設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/ddcdd82b-8d54-3c9d-fd77-eeff06313639.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/39c38eb8-42c0-1900-4fa8-05c472cafd80.png)

最後に、「割り当てステップ」をドラックアンドドロップし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/77a89772-9761-779c-1b7e-fdd209b41d2e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/4eb0602e-9eeb-2b45-c6db-11c41c500f5d.png)

割当ステップで、「＋」ボタンをクリックし「フィールド」に"i"を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/d2cd0c78-5186-3526-056c-3b526ffc890c.png)
「次を使用...」に「計算式」を選択し、開始ボックスの中に下記の式を入力します。
~~~
$temp.i + 1
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/ccf69b8c-ecce-c158-ff2a-b2f03cbd8c33.png)

以上で10回繰り返し処理をするループが完成しました。

### ループ判定の設定（その２）
下記のようにする場合は、
~~~
for(int i=0; i<=10; i++)
~~~
条件で「次の値以下」を選択します。これで、11回繰り返し処理を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/4d9f12ef-f918-e971-bd14-9c6955243bf5.png)

### ループ判定の設定（その３）
下記のように、何かの配列やリストの長さを条件にいれる場合は
~~~
for(int i=0; i<=aaa.length; i++)
~~~
一次フィールドで "maxlength" などの名前で変数定義し

| 項目名 | 設定値 |
|:-----------|:-----------:|
| 名前 | maxlength |
| タイプ | 整数値 |
| 初期値 | 0 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/86d26a58-acc6-b14d-b36c-a35907fae069.png)
ループステップに入る前に、割り当てステップを挿入し、
maxlengthに対し、リストや配列の長さをcount関数で取得し代入します。
※ここでは、入力値として設定されたJSON配列の players という入力変数の配列の長さを取得します。
~~~
list:count( $input.players )
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/28545af5-163b-f2ec-13c2-f38931ec867d.png)

その後、ループステップの条件を固定値の 10 ではなく
「x」ボタンをクリックし "maxlength" を指定すると、配列の長さ分繰り返し処理を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/8954972c-948a-9c42-d4fd-5b6ff95ec125.png)

### ループ判定の設定（その4）
また、フィールドではなく、計算式を使用してループ条件を設定することも可能です。
その場合は、ループ条件に「計算式」を選択しループの条件を右側の式エディタで入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/f98b47ef-8067-be3c-c23d-5c6cbe55b224.png)

~~~
$temp.i < $temp.maxlength
~~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2984410/a8e1a892-10ab-ec39-ab99-0fde3a3d6e2f.png)

結果は（その３）と同じく、リストの配列分繰り返し処理を行います。
複雑な条件を使用する場合は、計算式を使用しましょう。

本記事は、以上です。