JavaScript APIでのテーブルフィールドの行のIDおよび更新処理の仕様変更
警告
このページで説明しているAPIは、開発を検討中のAPIです。
アップデートオプション内の「検討中の新機能」から動作をお試しいただけます。
設定方法は、
新機能の有効/無効の切り替え手順
を参照してください。
APIに関するフィードバックを、ユースケースとともに、
kintoneの改善に協力する
フォームへぜひご登録ください。
フィードバックの例
- 「APIラボで提供されているAPIを早く本番環境で利用したい」
- 「こういう用途で使うために、このようなAPIを提供してほしい」
JavaScript APIでのテーブルフィールドの行のIDおよび更新処理の仕様変更
この機能を有効にすると、大きく次の3点が変わります。
- 画面上でテーブルフィールドへ新しく追加した行の
idとして一時的な値が割り当てられ、JavaScript APIで取得できます。 - JavaScript APIでテーブルフィールドを更新するとき、行の追加/更新/削除/並び替えを
idをもとに判断する挙動へ変わります。 - JavaScript APIでテーブルの行を追加、削除、または並べ替えたときにも、テーブルフィールドの「フィールドの値を変更したときのイベント」が発生します。
利用するには、検討中の新機能の「JavaScript API:テーブルの行へのID付与、テーブル操作時のイベント発生、およびテーブル操作用APIを追加する機能」を有効にしてください。
テーブルフィールドの行のID
テーブルフィールドの行のidには、次の2種類の値が入ります。
| 行の種類 | idの値 |
|---|---|
| 保存済みの行 | レコードを保存したときに採番された永続的な値です。 以降、この値のことを「永続化済みID」と記載します。 |
| 未保存の新規追加行 | 画面上でだけ使われる一時的な値です。 レコードを保存すると、保存時に採番された永続化済みIDに置き換わります。 以降、この値のことを「仮ID」と記載します。 |
仮IDはレコードのデータとしては保存されず、レコード保存時に永続化済みIDへ置き換えられるため、保存の前後で同じ行のidは一致しません。
また、仮IDは、異なるテーブルフィールドの行を含めて重複しません。
仮IDは、既存の永続化済みIDとも重複しません。
次のテーブルフィールドの値の例は、1行目が保存済みの行、2行目が画面上で追加した行のものです。
|
|
対象の画面とAPI
PC版とモバイル版の、レコード追加画面とレコード編集画面が対象です。
仮IDは、これらの画面での次のイベントまたはAPIで取得できるレコードのデータにだけ含まれます。
- イベントオブジェクトの
recordプロパティ-
レコード追加画面を表示したときのイベント
-
app.record.create.show、mobile.app.record.create.show -
レコード編集画面を表示したときのイベント
-
app.record.edit.show、mobile.app.record.edit.show -
レコード追加画面でフィールドの値を変更したときのイベント
-
app.record.create.change.フィールドコード、mobile.app.record.create.change.フィールドコード -
レコード編集画面でフィールドの値を変更したときのイベント
-
app.record.edit.change.フィールドコード、mobile.app.record.edit.change.フィールドコード -
レコード追加画面で保存するときのイベント
-
app.record.create.submit、mobile.app.record.create.submit -
レコード編集画面で保存するときのイベント
-
app.record.edit.submit、mobile.app.record.edit.submit
-
レコード追加画面を表示したときのイベント
-
- JavaScript API
-
レコードの値を取得する
-
kintone.app.record.get()、kintone.mobile.app.record.get() -
レコードに値をセットする
-
kintone.app.record.set()、kintone.mobile.app.record.set()
-
レコードの値を取得する
-
REST APIでの仮IDの扱い
リクエストにレコードのデータを指定するREST API(レコードの登録や更新など)でも、行のidに仮IDを指定できます。
仮IDを指定した行は、idを指定しない行と同じく、新規行として保存されます。
このため、kintone.app.record.get()で取得したレコードのデータを、そのままREST APIのリクエストに利用できます。
テーブルフィールドの更新処理の変更点
kintone.app.record.set()やイベントオブジェクトのreturnでテーブルフィールドの値を書き換えると、行のidに基づいて、行の追加/更新/削除/並べ替えが行われます。
新しい行の追加
次の行は新しく追加した行として扱われ、新しい仮IDが割り当てられます。
idキーを省略した行idの値に「null」または書き換え前のテーブルに存在しない値を指定した行
書き換え前のテーブルに存在しない値をidとして指定した場合、その値が仮IDの形式に沿っていたとしても、指定した値は無視されて新しい仮IDを割り当てます。
仮IDとして、任意の値は指定できません。
行の更新と並び替え
書き換え前のテーブルに存在するidを指定した行は、書き換え前の対応するidの行の更新として扱われます。
- 行の
idは変更されず、維持されます。 - 行の並び替えをするには、行の
idを含めて行のデータを入れ替えます。 - 同じ
idの値を複数の行に指定していた場合、最初の行のみが既存の行の更新として扱われます。
残りの行は新しい行の追加として扱われます。
行の削除
書き換え前のテーブルに存在したidが、書き換え後のテーブルにはない場合、その行は削除されます。
テーブルフィールドの書き換えの例
次にテーブルフィールドの書き換えの例を示します。
書き換え前は、idが「147」、「148」と仮IDの3行がある状態とします。
|
|
次のデータで書き換えます。
idが「147」の行と仮IDの行を更新しつつ並び替えidが「148」の行を削除- 先頭に新しい行を追加
|
|
書き換え後のデータは次のようになります。
追加した1行目には、新しい仮IDが割り当てられます。
|
|
対象イベントとAPI
- イベントオブジェクトのreturnによる書き換え
-
レコード追加画面を表示したときのイベント
-
app.record.create.show、mobile.app.record.create.show -
レコード編集画面を表示したときのイベント
-
app.record.edit.show、mobile.app.record.edit.show -
レコード追加画面でフィールドの値を変更したときのイベント
-
app.record.create.change.フィールドコード、mobile.app.record.create.change.フィールドコード -
レコード編集画面でフィールドの値を変更したときのイベント
-
app.record.edit.change.フィールドコード、mobile.app.record.edit.change.フィールドコード -
レコード追加画面で保存するときのイベント
-
app.record.create.submit、mobile.app.record.create.submit -
レコード編集画面で保存するときのイベント
-
app.record.edit.submit、mobile.app.record.edit.submit
-
レコード追加画面を表示したときのイベント
-
- JavaScript API
-
レコードに値をセットする
-
kintone.app.record.set()、kintone.mobile.app.record.set()
-
レコードに値をセットする
-
「フィールドの値を変更したときのイベント」の変更点
この機能を有効にすると、テーブルフィールドと、テーブル内のフィールドの「フィールドの値を変更したときのイベント」について、発生するタイミングが変わります。
対象イベント
-
PC版
-
レコード追加画面でフィールドの値を変更したときのイベント
-
app.record.create.change.フィールドコード -
レコード編集画面でフィールドの値を変更したときのイベント
-
app.record.edit.change.フィールドコード
-
レコード追加画面でフィールドの値を変更したときのイベント
-
-
モバイル版
-
レコード追加画面でフィールドの値を変更したときのイベント
-
mobile.app.record.create.change.フィールドコード -
レコード編集画面でフィールドの値を変更したときのイベント
-
mobile.app.record.edit.change.フィールドコード
-
レコード追加画面でフィールドの値を変更したときのイベント
-
テーブルフィールドで値を変更したときのイベントが発生するタイミング
テーブルフィールドのフィールドコードを指定したイベントは、次のいずれかのタイミングで発生します。
- ユーザーが画面上の操作により行を追加、または削除したとき
- JavaScript APIで行を追加、削除、または並べ替えたとき
JavaScript APIでテーブルフィールドの値を書き換えた場合、行の追加、削除、並べ替えを組み合わせた変更でも、イベントは1回だけ発生します。
行の追加、削除、並べ替えは、行のidをもとに判定されます。
この機能を有効にしていない場合、JavaScript APIによる行の操作ではイベントは発生しません。
テーブル内のフィールドで値を変更したときのイベントが発生するタイミング
テーブル内のフィールドのフィールドコードを指定したイベントは、そのフィールドの値が変わったときにだけ発生します。
行の追加、削除、並べ替えだけを行い、フィールドの値が変わらない場合は発生しません。
新規追加行のフィールドは、初期値と異なる値が指定されている場合にイベントが発生します。
この機能を有効にしていない場合、JavaScript APIによるテーブルの書き換えは、書き換え前後の行の対応関係を考慮せずにすべてのフィールドの値を上書きします。
そのため、行を並べ替えただけでも、テーブル内のフィールドのイベントが発生します。
この機能を有効にすると、行の並べ替えのように行の値そのものが変わらない操作では、テーブル内のフィールドのイベントは発生しなくなります。
イベントの発生順序
JavaScript APIでテーブルフィールドの値を書き換えたときは、テーブル内のフィールドの値を変更したときのイベントが発生した後に、テーブルフィールドの値を変更したときのイベントが発生します。
イベントオブジェクトのchangesプロパティ
テーブルフィールドのフィールドコードを指定したイベントでは、イベントオブジェクトのchangesプロパティに、操作の種類を表すtypeが追加されます。
また、JavaScript APIでテーブルを書き換えたときのchanges.rowは「null」になります。
| プロパティ名 | 型 | 説明 |
|---|---|---|
| changes.type | 文字列 | 操作の種類 次のいずれかの値が返ります。
|
| changes.field | オブジェクト | 変更後のテーブルフィールド全体のデータ |
| changes.row | オブジェクト | 値を変更したテーブルの行のデータ
|
JavaScript APIによる書き換えが起きた場合に、行の並び替えなどの変更内容を確認するには、書き換え後のテーブルの値と書き換え前の値を比較してください。
複数のイベントハンドラーを同じイベントに登録している場合、先に呼ばれたハンドラーの書き換えにより、イベント発生時点のchanges.fieldやchanges.rowに対応する行がすでに削除されていることもあります。
この場合、後続のイベントハンドラーではchanges.fieldとchanges.rowが「null」になります。
サンプルコード
次のコードは、テーブル(フィールドコード:テーブル)をJavaScript APIで書き換えたときに、書き換え後の行のidの一覧を取得する例です。
|
|
