rex0220 データ生成プラグイン

既存レコードから他アプリへレコードをコピーしたり、テーブル行をレコードに変換するプラグインです。
レコード更新時の自動処理、ボタンクリックによる一括操作が可能です。
乱数を使ってまとめてテストレコードを生成できますので、テスト作業が楽になるかも。
ただし、設定をミスるとデータが丸ごと消えますので注意しましょう。

Ver.29
・プラグイン設定で、関連レコード情報取得時エラーの対応
・FSIZE 関数追加。バイト数を適切な単位（B, KB, MB など）に変換し、カンマ区切り付きでフォーマット
　FSIZE(5000000) -> "4.8 MB"
・FILE 関数追加。添付ファイル項目の値を取得
　※イベントの種類により取得可能(追加・編集中のイベントでは取得不可)
　FILE(file, "key", 0) -> "nn.."
・FVAL, FIELDS_HTML 等の関数追加

# データ生成プラグインの応用例

- [rex0220 データ生成プラグイン 複数項目から複数レコードを生成](https://qiita.com/rex0220/items/3c826cfaf18bb06c3771)
- [rex0220 データ生成プラグイン 複数アプリへのレコード生成](https://qiita.com/rex0220/items/8147b836a2d962d5c240)
- [rex0220 データ生成プラグイン テーブル行から複数レコード生成](https://qiita.com/rex0220/items/1924df2c9a67f1987bdc)
- [rex0220 データ生成プラグイン テーブル行集計結果からレコード生成](https://qiita.com/rex0220/items/92d92d03fd5427cfe4d0)
- [rex0220 データ生成プラグイン 項目タイプ別設定例](https://qiita.com/rex0220/items/56a30bc6144346bd12a8)
- [rex0220 データ生成プラグイン テーブルの製品毎にレコード生成](https://qiita.com/rex0220/items/0db229191d354accf3bb)

# テーブル行を他アプリのレコードに変換

- 案件管理アプリの活動履歴テーブルを、活動詳細アプリのレコードに変換する例です。

<img width="1219" alt="2020-03-20_23h48_20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/5a47b3c7-9a29-90ee-9469-ad2ee734898a.png">

- 編集画面で、案件担当者名を変更すると、活動詳細アプリにも反映されます。

<img width="1288" alt="2020-03-20_23h56_03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/70d1eb8c-79c5-aec0-b328-33fc8789c557.png">

- 一覧画面での一括データ生成

<img width="558" alt="2020-03-21_00h00_37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/acceef69-e893-fe71-0427-e4b804319507.png">

# 活動詳細アプリで活動件数集計グラフ

kintone 標準のグラフでは、テーブル行内の件数集計が苦手です。
テーブル行をレコード変換することにより、集計が可能になります。
<img width="564" alt="2020-03-21_11h44_04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/37586ae0-dbcc-babc-1474-2ce9bccbc217.png">

# プラグインの機能

- 既存レコードから他アプリへレコードをコピー
- テーブル行をレコードに変換
- レコード更新時の自動処理
- ボタンクリックによる一括操作
- ボタン操作の権限設定
- 複数アプリ（最大１０個）へのデータ生成

※ 動作環境は、PCとスマホです。

[rex0220 stores](https://rex0220.stores.jp)で、販売中です。


# アプリの準備

プラグインの設定項目が多くわかりにくいので、アプリ作成から順番に作成してみます。

## 案件管理アプリの作成

- kintone アプリストアで、「案件管理」アプリを選択して作成します。
- フィールドコードをラベルに合わせて、設定します。<br>
これをしないと、プラグインの設定をみても分からない状態になりますので、必ず設定しましょう。<br>
※フィールドコード設定プラグインで変更した例

<img width="667" alt="2020-03-20_23h20_57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/fea194bf-9574-0900-f26b-d63bf6387320.png">
 

## 活動詳細アプリの作成

- 案件管理アプリを流用して、活動詳細アプリを作成します。
- テーブル内項目は、テーブルではない普通の項目に作り直します。<br>
フィールドコードは、テーブル内項目と合わせます。
- 他の項目もフィールドコードを合わせておくとプラグインの設定が簡単になります。
- 「識別ID」項目を文字列で追加します。<br>
プラグインでレコード更新する際のキー項目として使われます。
- 必須項目などの制約がある項目は、可能ならば制約を外しておきます。
- 元アプリで制約解除などを行うと、コピー先のアプリも合わせて変更する必要があります。
- ルックアップ項目は、文字列項目に変更しましょう。<br>
APIで追加・更新時はルックアップ元のデータが無くなっているとエラーになります。

<img width="590" alt="2020-03-20_23h16_24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8aa20d1a-2974-08ee-7367-342a7d3c4386.png">


# データ生成プラグインの設定

案件管理アプリにデータ生成プラグインを設定します。

- ボタン別設定：　ボタン名を指定します。
- 一覧別設定：　一括データ生成ボタンを表示する一覧を指定します。
- 権限設定：　ボタンを表示するユーザー・組織・グループを指定します。
- 実行条件・後処理
    - 実行条件：データ生成を行う条件を指定します。
        - 詳細画面では、実行条件が false であれば、ボタンを表示しません。
        - 編集画面・一覧画面では、各レコード単位に実行条件を計算し、データ生成を行うか判定します。
    - 後処理：データ生成後に、自レコードで更新する項目と計算式を指定します。
        - 「後処理で項目を"完了"を指定し、実行条件で"完了"以外でデータ生成処理を行う」などの制御で利用できます。
- 自動：　レコード更新時に自動で、対象アプリのレコードを生成します。
- ボタン：　詳細画面・一覧画面に表示される「データ生成」ボタンの処理対象になります。
- 処理名：　なんの処理か忘れないようにメモしておきましょう。
- アプリ：　対象アプリを選択します。
- 対象アプリ条件：　キー項目となる項目と条件を指定します。
- ループ：　１レコードで何回処理するかループ回数を指定します。（計算式指定可能）
- テーブル：　テーブル行をレコード変換する場合、選択します。
- 設定項目：　対象アプリに設定する項目と計算式を設定します。

<img width="976" alt="2020-03-20_23h28_04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/0e62d6fe-09c2-60a7-36d2-2e98e1527fa1.png">

## 生成するレコード数

元アプリの１レコードに対して、下記の出力レコード数になります。

出力レコード数＝ループ数＊テーブル行数＊ループ配列数


|例　　　　　| ループ数 |  テーブル行数 |  ループ配列数    |出力レコード数
|-----------:|---------:|------------:|----------------:|----------------:|
|テーブルなし　| 1     |        1 |        1|        1|
|テーブルあり　| 1     |        10 |        1|        10|
|ループ配列あり　| 1     |        1 |        3|        3|
|全てあり　| 10     |        10 |        3|        300|


更に一覧画面で、一括生成すると

- 一覧、ループ数あり、テーブルあり、ループ配列あり
    - 100レコード＊10（ループ数）＊10（テーブル行数）＊3（ループ配列数）＝30,000レコード


## 対象アプリ条件

キー項目となる項目と条件を指定します。
**※キー項目に過不足があると、対象アプリに反映されなかったり、レコードが丸ごと削除されたりしますので、必ず設定内容をテストして問題ないか確認してください。**

<img width="827" alt="2020-03-20_23h39_24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/2efc67ff-0563-97bc-60d5-e0bf8e04d140.png">


## 設定項目の詳細

### ループ配列：　配列でループを指定します。
Ver.11 以降、数値指定可能

- ARRAY("ABC","XYZ")
- ARRAY("予算","実績")
- ARRAY(チェックボックス)
- SEL_CODE(ユーザー選択,"ARRAY")
- 10
- 数値
- "A"
    - ARRAY("A") と同等
    
### 出力条件：　計算式の結果で、レコード出力するか制御できます。

- IF(数値>=1000,1) ：　数値が1000以上の場合に、レコード出力します。
- SWITCH($val,"予算",予算,"実績",実績,0)>0　：予算・実績処理時に数値が１以上
- IFS(IN($val,"sample1"),数値1,IN($val,"sample2"),数値2,0)>0　
   
### 出力項目の計算式

 対象アプリの項目ごとに、計算式を設定します。<br>[計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)の計算式と同様の関数が利用できます。

- 変数として、下記が利用できます。
    - $lno：　ループカウンター
    - $rno：　テーブルの行カウンター
    - $val：　ループ配列のループ値
- 乱数関連の関数：　データ作成時に乱数を利用できます。
    - RAND 関数：　0 ~ 1 の範囲で少数の乱数
        - RAND()
        
    - RANDBETWEEN 関数：　指定した範囲の整数の乱数
        - RANDBETWEEN(1,10)：　1 ~ 10 の乱数
        
## 自動設定

設定項目のダイアログで「自動設定」ボタンをクリックすると、フィールドコードとタイプの一致する項目に、自動で計算式を設定します。
有効な計算式を設定済みの項目は、自動設定の対象外です。

<img width="587" alt="2020-03-20_23h40_09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/221f92f6-820d-d7ec-16a6-c90216d9d876.png">

- 識別IDの設定

対象項目の「識別ID」をチェックすると、レコード更新時にプラグインが識別IDをセットします。

<img width="588" alt="2020-03-20_23h43_00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/01a0e05d-deb6-bd7a-317c-b7abe2556c7b.png">

## テーブル項目の設定

編集ボタンをクリックして、テーブル内項目の計算式を指定します。

- 変数として、下記が利用できます。
    - $lno：　ループカウンター
    - $rno：　テーブルの行カウンター
    - $val：　ループ配列のループ値
    - $trno：　From テーブルの行カウンター
    - $tval：　ループ配列のループ値


![2021-12-21_01h58_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8b217cef-b8e1-9783-4e19-690a82df3e62.png)


# 関連情報

- [kintone データ生成プラグインで複数アプリデータを収集](https://qiita.com/rex0220/items/3cf3af3c0f8a344bdf05)


# 注意事項

- 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。