スマートに複数レコードを作成する画面フロー

<h1><font color="IndianRed">最新バージョンのフローで動作しないです。<br>※以下は「バージョン51」時点の動作になります。</font></h1>

## 経緯
- 画面フロー内での入力値取得処理が冗長的になってしまうため、カウンターを使用してループで画面コンポーネントの値を取得する方法のメモとして記載。

## 完成した画面フロー
![スクリーンショット 2022-03-09 12.24.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300749/f4f60c94-a607-e87d-0a9a-faaafc20684f.png)
[操作手順]
    1. オブジェクトの作成数を入力
    2. 各項目の値を入力
    3. [次へ]ボタン押下時にオブジェクトを作成 

## 完成フロー図
![スクリーンショット 2022-03-09 15.44.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300749/024128d6-1217-5943-de53-f6b931944fdf.png)

## 作成方法
### 画面フローコンポーネントを配置
[完成した画面フロー](完成した画面フロー)を参考とし「テキスト」項目、「数値」項目、「チェックボックス」を複数作成する

```text:画面コンポーネント
- レコード作成数
選択リスト -> API参照名: "objMaxCnt", [1, 2, 3]

- セクション1 -> コンポーネントの表示を設定: [1 以上 objMaxCnt]
[入力]テキスト -> API参照名: "Name1"
[入力]数値　-> API参照名: "Number1"
[入力]チェックボックス　-> API参照名: "Obsolete1"

- セクション2 -> コンポーネントの表示を設定: [2 以上 objMaxCnt]
[入力]テキスト -> API参照名: "Name2"
[入力]数値　-> API参照名: "Number2"
[入力]チェックボックス　-> API参照名: "Obsolete2"

- セクション3 -> コンポーネントの表示を設定: [3 以上 objMaxCnt]
[入力]テキスト -> API参照名: "Name3"
[入力]数値　-> API参照名: "Number3"
[入力]チェックボックス　-> API参照名: "Obsolete3"
```
:::note info
コンポーネントを動的に参照するにはAPI参照名を"〇〇〇1"と末尾に半角数字の連番を記載する必要がある
:::
### リソースの作成
#### テキストテンプレートおよび変数の作成
カウンタ変数を作成
| リソース | 名前 | データ型 | デフォルト値 |
|:-:|:-:|:-:|:-:|
| 変数 | objCnt | 数値 | 1 |

レコード作成用変数とレコードリスト作成用変数を作成
| リソース | 名前 | データ型 | コレクション |
|:-:|:-:|:-:|:-:|
| 変数 | record | レコード | FALSE |
| 変数 | recordList | レコード | TRUE |

カウンタを使って画面コンポーネントのAPI参照名を生成するテキストテンプレートを作成

| リソース | 名前 | 本文 | 説明 |
|:-:|:-:|:-:|:-:|
| テキストテンプレート | template_Name | `{!Name{!objCnt}}` | テキスト項目(Name?)のAPI参照名生成 |
| テキストテンプレート | template_Number | `{!Number{!objCnt}}` | 数値項目(Number?)のAPI参照名生成 |
| テキストテンプレート | template_Obsolete | `{!Obsolete{!objCnt}}` | チェックボックス項目(Obsolete?)のAPI参照名生成 |

#### 数式を使用してAPI参照名から画面コンポーネントの入力値を参照

- デフォルトのテキストテンプレートの値は以下のようになっている。

| リソース　| 名前 | 値 |
| --- | --- | --- |
| 変数| objCnt | 1　|
| テキストテンプレート | template_Name | \<p>Name1\</p> |
| テキストテンプレート | template_Number | \<p>Number1\</p> |
| テキストテンプレート | template_Obsolete | \<p>Obsolete1\</p> |

- カウンタがプラスされるたび、テキストテンプレートが画面コンポーネントの次のセクションの項目のAPI参照名を生成する仕組みになっている。
- この状態では\<p>タグが邪魔なため\<p>タグを削除する数式を作成する

| リソース | 名前 | 型 | 数式 |
| --- | --- | --- | --- |
| 数式 | Name | テキスト | SUBSTITUTE(SUBSTITUTE({!tmplate_name}, "\</p>", ""), "\<p>", "")　|　
| 数式　| Number_text | テキスト | SUBSTITUTE(SUBSTITUTE({!template_Number}, "\</p>", ""), "\<p>", "")　|　
| 数式　| Obsolete_text | テキスト | SUBSTITUTE(SUBSTITUTE({!template_Obsolete}, "\</p>", ""), "\<p>", "")　|　

- テキスト型以外の項目を別の対象の型に変更

| リソース | 名前 | 型 | 数式 |
| --- | --- | --- | --- |
| 数式　| Number | 数値 | VALUE(SUBSTITUTE({!Number_Text}, ",", ""))　|　
| 数式　| Obsolete | Boolean | IF({!Obsolete_Text} == "true", true, false)　|　

:::note warn
1. **テキスト型以外の項目は、テキスト型で取得する数式と対象のデータ型で取得する数きに分ける必要がある。**
2. テキストの数値にはカンマ[”,”]を削除する処理を記載する必要がある。
:::

数式の演算子と関数についてのHelpは下から↓↓↓↓

https://help.salesforce.com/apex/HTViewHelpDoc?id=sf.customize_functions.htm&language=ja

### 要素の配置と設定
[完成フロー図](完成フロー図)を参考に以下の順番で要素を作成すれば完成！
| No | 要素 | 名前 | 処理概要 |
| --- | --- | --- | --- |
| 1 | 割り当て | 単一レコード作成 | [record]の各項目に「Name」「Number」「Obsolete」を割り当て |
| 2 | 割り当て | レコードリスト追加 | [recordList]に[record]を追加 |
| 3 | 割り当て | カウントアップ | [objCnt]に1を追加 |
| 4 | 決定 | ループ条件 | [objCnt]が[objMaxCnt]以上の場合[レコードを作成