rex0220 算式自動採番プラグイン

計算式で番号を組み立てる自動採番プラグインです。
文字列と日付、項目の値などを組み合わせて、自動採番します。
年月・年度・組織・区分毎などの自動採番を簡単に実現できます。
採番項目を６個まで指定可能

＃算式採番プラグインを算式自動採番プラグインに改名

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

# 算式採番プラグインの概要

- 採番項目を６個まで指定可能
- 計算式で採番方法を指定します。
    - 計算式は、[計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)の関数と同様の関数が利用できます。
- 採番条件の指定機能
    - レコード追加、レコード更新、ステータス変更のタイミングで採番可能
- API Token による、最新の番号取得
- 対象項目の非表示機能
- 計算式で使われた項目を採番後の編集不可機能
- 未採番レコード編集時の採番機能
- 一覧画面で一括採番機能
- プラグイン設定のダウンロード・インポート機能
- ３ヶ国語対応
- 動作環境は、PCとスマホです。

# 算式自動採番プラグインの応用例

- [算式自動採番プラグインの応用例](https://qiita.com/rex0220/items/aa775a89a812ef08c5fc)
- [算式自動採番プラグイン 年度別採番](https://qiita.com/rex0220/items/38c138ef54be4a138994)
- [算式自動採番 複数項目の自動採番](https://qiita.com/rex0220/items/f22f1c33a8938cde7a75)
- [算式自動採番プラグイン 異なる区分で通番](https://qiita.com/rex0220/items/56b8070ab8a6e810e1e3)
- [算式自動採番プラグイン 枝番セット](https://qiita.com/rex0220/items/f1ae938e8c594aab056a)
- [rex0220 算式自動採番プラグイン 既存アプリへの導入手順](https://qiita.com/rex0220/items/9c84f60007012b63e909)

# 直近の変更点

Ver.37
・一括採番時、「パラレル更新」のチェックボックスでパラレル処理の有無を指定
　※更新がエラーになる場合は、チェックを外して実行
・ROWID 関数追加。テーブル行の id を取得

Ver.36
・DIC_MAP 関数を追加
・EV_INFO 関数に、appId オプション追加
・APP_URL, LOOKUP_GETID, RELATED_GETID 関数追加
・TABLE_DATA, TABLE_MAP, TPDIC 関数追加
　TABLE_DATA(TABLE_MAP(テーブル1,
　TPDIC("ドロップダウンT2",ドロップダウンT1, "数値T2",数値T1, "金額T2", 単価T1*数量T1)))
・プラグイン設定画面初期処理でエラー発生時に、ダイアログ表示するように変更
・kintone.Promise を Promise に変更

# 見積書アプリの算式採番プラグイン設定例

kintone アプリストアの商品見積書パックを利用した例です。

<img width="632" alt="2020-05-30_16h00_47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/4da351d7-3db7-919b-ac8c-2406d2f6e392.png">


# 見積書アプリへの、項目追加

算式採番プラグインで使用する項目を追加します。

- 採番項目：　文字列　※「値の重複を禁止する」をチェック
- 採番キー項目：　文字列
- 連番：　数値

※採番キー・連番は、連番の最終レコードを抽出するために使用します。
　kintone REST API のレコード検索では、単語検索になるため、A001, B001, A002, B002 のレコードから「A で始まる最終番号」の指定が出来ない

<img width="823" alt="2020-05-30_15h53_45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/aef3ff2b-5af0-011b-6e58-8d14b3b37602.png">


#　算式採番プラグインの設定例

アプリに配置した、項目を指定します。

- 採番項目：　見積番号
- 採番項目の計算式：<br>"A"&<br>
DATE_FORMAT("TODAY","YYYY-MM")&<br>
"-@@@@"
- 採番キー項目：　採番キー
- 連番項目：　連番
- 連番初期値：1<br>
  ※連番の初期値を計算式で指定
- 採番条件
    - 採番条件の計算式：　採番する条件を指定

※計算式の書き方
・文字列に、採番の書式と"@@@@@"を指定します。
・"@"の数が番号の桁数になります。

※計算式の例
・"A@@@@@@"
・"A"&DATE_FORMAT("TODAY","YYYYMM")&"-@@@@"

![2023-04-22_11h46_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/9c7d6d6e-45a4-d7b6-7277-9e87003f2908.png)


# プラグイン設定の操作

計算式は、入力補完機能で関数名・フィールドコードが取得できます。

- ? 関数の表示と選択
![2022-05-12_11h59_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d899a0f1-2b89-9139-caf7-797978a427f4.png)

- : 項目名:フィールドコードの表示と選択
![2022-05-12_11h59_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/20c4aab7-faaf-97ed-3c66-f0e5e2fb7f9e.png)

# 採番方法

- 採番条件の計算結果が true 時、採番項目に指定された計算式を実行。
    - 採番条件の指定がない場合、新規レコードの追加時、採番項目に指定された計算式を実行。
- 計算結果を採番キーとします。
- 採番キーを抽出条件に連番項目を降順にして、アプリのレコードを取得。
- レコードが無かった場合、連番を１。レコードが有った場合、連番＋１。
- 採番キーの"@"の部分を連番で桁数を合わせて置き換え。
    - "@"の桁数を連番の桁数が超えた場合は、そのまま連番を設定。
- 採番項目、採番キー、連番項目に値を設定。

# 一括採番

プラグイン設定によりPC版の一覧画面で、一括採番できます。

- 一括採番対象レコードは、採番項目、採番キー項目、連番項目が未設定
- 採番条件指定時は、採番条件の計算結果が true
- 一括採番処理中に、他で新規レコード追加が行われると採番項目が重複エラーになる場合があります。
- 一覧のフィルター機能で、採番するレコード順に表示順を指定

<img width="613" alt="2020-06-21_11h35_11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/f4bebba7-41c5-4cab-e3bb-380201d3a809.png">

# 番号が重複するエラーの原因と対策

算式採番プラグインが既存のレコードを取得できない場合に、番号が重複するエラーを発生する場合があります。

![2022-03-01_14h11_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/3efbf04e-437d-eac9-57ee-56a4ddfa8789.png)

重複エラーの原因と対策

- CSV 読み込み等で、追加更新したレコードに経費精算番号が設定済みで、採番キー・連番の項目に値が未設定
    - 既存レコードの採番キー・連番の項目に値を設定

- ユーザーが読み込み権限を持っていないレコードがある
    - ユーザーに読み込み権限を付与。またはプラグイン設定でAPI トークンを指定
    - IPアドレス制限を行っている環境に、API トークンを指定する場合、
アクセスを許可する IP アドレスに103.79.14.0/24 (cybozu.com) の登録が必要
![2024-05-14_09h48_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8e0f3464-dfad-d1b8-8a2e-e1c36a78e245.png)
        - 103.79.14.0/24 (cybozu.com) が未登録時のエラー（Ver.31 以降）
![2024-05-17_08h43_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/319cc03d-df32-de95-dcf9-5d46debf25f9.png)

# プラグインの追加

- 「kintone システム管理 > プラグイン」で追加します。
- 「アプリの設定 > プラグイン」で、アプリに追加します。


<img width="764" alt="2020-05-30_16h25_55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/091556c4-2eb4-0888-3fc8-e49b7b61040d.png">

# プラグインの設定

- プラグイン有効：　プラグインの有効・無効を指定します。
- 式に使われた項目を変更不可：　レコード追加後に編集不可にします。
    - テーブル内項目を除きます。
- API トークンは、レコードアクセス権設定を行う場合に、指定します。
    - 全レコードのレコード閲覧権限を付与したAPI トークンを指定

- 項目：　対象アプリで計算式を使用する項目を選択
- 非表示：　対象項目を非表示にします。
- 採番項目の計算式に、採番キーとなる文字列の式を指定します。
    - 計算式の書き方
        - 文字列に、採番の書式と"@@@@@"を指定します。
        - "@"の数が番号の桁数になります。
    - 計算式の例
        - "A@@@@@@"
        - "A"&DATE_FORMAT("TODAY","YYYYMM")&"-@@@@"
    - 参考：[算式採番プラグインの応用例](https://qiita.com/rex0220/items/aa775a89a812ef08c5fc)
- 変換 計算式： 採番項目に文字列の変換・文字列追加などを行いたいときに指定します。
※区分が異なっても通番にしたい場合、採番後に区分を追加します。
    - 計算式の書き方
        - 文字列の変換　採番項目の値"#"を区分(X,Y)に変換
            - REPLACE(採番項目,"#",区分)
                - "A#00001" -> "AX0001"
        - 文字列の追加　採番項目に区分項目の値(X,Y)を追加
            - 採番項目&"-"&区分
                - "A00001" -> "A0001-X"
- 連番項目の計算式に、連番の初期値となる数値の式を指定します。
    - 連番の初期値の書き方
        - 初期値「1」：1 ※数値をそのまま指定
        - 初期値「100」：100 ※数値をそのまま指定
        - 区分によって、初期値を指定
            - IF(区分=="A",1000,2000)


- 「保存する」をクリックします。

※フォーム変更時は、本番環境にフォーム変更を反映後に、本プラグイン設定を行ってください。

![2023-04-22_11h46_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/3294e0b8-f8eb-b99f-3814-063ba0f3f44c.png)

※採番項目６個の例

![2022-05-12_12h03_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/22b0eb1e-033b-57b2-0e31-3c26b419d3d3.png)


## ボタン別設定

一覧画面で「一括採番」ボタンを表示する場合に、チェックします。
ボタン名を変更する場合は、名称を変更します。

<img width="665" alt="2020-06-21_11h24_24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/671ba630-cca1-c1a8-f85e-1cee41fa1c42.png">

## 一覧別設定

「一括採番」ボタンを表示する一覧を指定します。

<img width="522" alt="2020-06-21_11h23_01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8dc8f720-b550-7572-2818-239e1e4ca16e.png">

## 権限設定

「一括採番」ボタンを表示するユーザー・組織・グループ（ロール）を指定します。

<img width="454" alt="2020-06-21_11h23_23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b3fe6f6b-b29b-e856-c629-fba06ee24f98.png">

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