IQ Bot：フォームフィールド／テーブルフィールド入力時の注意点

[IQ Bot](https://qiita.com/IQBotter/items/fab5f59230ff38a98bbd)でインスタンスを作成する際、最初に「フォームフィールド」と「テーブル／繰り返しセクションのフィールド」というのを入力します。

ここ↓ですね。
![フォームとフィールド.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/9762fcda-e53f-b747-037a-12ffea9985b5.jpeg)

**これらの項目を入力するときの注意点や、フォームとテーブルの区別のしかた**についてまとめます。

2020年4月10日現在出ている全バージョン(6.x,11.x,A2019)共通の情報です。

#フォームフィールドとテーブルフィールドに入力する名称には２つの意味がある

##意味その①：CSVを出力するときの列名になる

IQ Botで処理したデータは、最終的に以下のようにCSVのデータになります。
上記の入力欄で入力した項目が、そのままCSVの列名になります。
![出力のCSV_編集後.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/4c046af3-5bd7-bb86-3cac-3e38dfee3979.jpeg)

##意味その②：IQ Botが帳票から項目を探してくるキーになる

こちらは Automation Anywhere のプリセが提供している資料です。
![ラベルを探すキーになる.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/93959d42-0032-cf9d-5eb6-c5a04b8755f6.jpeg)

ここでIQ Botが帳票からラベルを最低１つ拾って来られないと「分類不能」という結果になります。

なので、帳票上のラベルと完全一致する項目名をいくつかは混ぜておいた方がいいです。

#入力情報の変更には制限がある

ここで一度入力した情報は、**後から名称を変更したり、順番を任意で組み替えたりができません。**

**項目の"追加"は後から自由にできますが、"削除"ができるのはこの段階がラストチャンス。** 下記の画面で「×」印をクリックすると削除できますが、**一度インスタンスを作成してしまうと、あとから削除はできません。**

![009_全部入力し終わるとこうなる.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/cd3f548a-4b4a-c9a9-d3d7-748495cc7639.jpeg)

また、**フォームフィールドとして最初に設定した項目を後からテーブルフィールドに変更したり、その逆の変更もできません。**
**同じインスタンスの同じ項目をグループによってフォームフィールドにしたり、テーブルフィールドにしたりと切り替えることもできません。**
（これに該当することをやりたい場合は、たとえば消費税であれば、「消費税」みたいな項目をフォームフィールドに、「明細消費税」みたいな項目をテーブルフィールドに構えておき、帳票のフォーマットに応じて存在する方を入れていく、みたいな感じで対応します）

#フォームフィールドとテーブルフィールドはどう区別する？

別のページにも書いていますが、フォームフィールドとテーブル／繰り返しセクションのフィールドの違いは以下のとおりです。

|No.|項目|説明|
|:-----------------|:------------------|:------------------|
|①|フォームフィールド|請求書であれば請求日や入金期限、請求元の会社名など、**帳票の中に一つしか出現しない項目**。<br>該当項目のラベルを入力します。<br>ラベルがない項目（請求元の社名など）の場合は、適当にそれとわかる名前を入力します。|
|②|テーブル／繰り返しセクションのフィールド|明細項目など、**ひとつの帳票の中に繰り返し出現する項目**。<br>明細行であれば、表の列名を入力します。|

つまり、こういうこと。
![全体像_絵つき.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/ab949c08-7c16-8b3f-b39f-3bd0db9dbd34.jpeg)


上記に書いた「**帳票の中に一つしか出現しない項目**」「**ひとつの帳票の中に繰り返し出現する項目**」という点が区別のポイントであって、**「罫線の有無」や「表か表じゃないか」は関係ありません。

##フォームフィールドとテーブルフィールドの違いは、「罫線の有無」ではない

###罫線があってもフォームフィールドになる例
例えば以下のフォーマットは、罫線がついていて見た目は表のようですが、「お振込期限」というラベルに対して値は「2020年4月8日」という１こしかないし、「お振込先」に対しても「あいうえ銀行かきくけ支店普通12345678」の１こしかないです。
なので扱いとしては**フォームフィールド**になります。
![見た目は表だけどテーブルじゃない.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/9834b530-5bf4-eaf0-73ee-3125d3a6d7f9.jpeg)

###罫線がなくてもテーブルフィールドになる例
一方、以下の一覧は罫線がないので表ではないように見えるかもしれませんが、「商品番号」「摘要」「数量」「単価」「金額」というそれぞれの項目名に対して値が繰り返し入ってくるので「テーブルフィールド」として扱います。

![罫線はないけど表_枠つき.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/764ac175-9f29-f146-a930-9db6b018855f.jpeg)

##変則的なテーブルフィールド

変則的な例だと、以下のような帳票は、「予約番号」も「代表者氏名」も**ラベルと値のセットで繰り返し出てくるので、テーブルフィールドとして扱います。**
![変則的なテーブル_編集済み.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/7945c313-0a32-17e6-9825-e84aa664b1c1.jpeg)

処理結果はこんなかんじになります。
![変則的なテーブル_処理後のイメージ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587845/fb3614fd-4066-6111-2bcc-57ed51292f84.jpeg)

#まとめ

- ヘッダー部分など、「帳票に１つしかない項目」は「フォームフィールド」だよ
- 明細など、「１つの項目に値が多数入ってくる可能性のある項目」は「テーブルフィールド」だよ
- 入力した項目名は、出力するCSVの列名になるよ
- 入力した項目名は、IQ Botが帳票から項目を探すキーにもなるよ
- 入力した項目は、後から項目を変更したり順番を入れ替えたり削除したりはできないよ（追加はできるよ）
- 同じインスタンスの同じ項目をフォームにしたり、テーブルにしたりを切り替えることはできないよ（それをやりたい場合は、フォーム用・テーブル用それぞれに項目を作って、帳票に応じて適切な方に値を入れてね）