kintone の Javascript カスタマイズをあれこれ触るようになって、気が付いたことをまとめておきます。開発しながらメモった感じなので、間違っていたら、すいません。
REST API の getRecords の limit と totalCount
クエリに該当するレコード数が totalCount で返ってきます。このとき、 limit 指定により取得件数の制限がかけてあり、それが totalCount 以下でも、totalCount = limit にはならずに、 limit を除いたクエリに該当するレコード数になるようです。
APIの説明だと、『クエリに該当するレコード数』とあるので、 limit かけれてば、 totalCount はlimit以下になるように思えるけど、違うので要注意。
クエリの書き方
フィールドコード < 時刻
はありだが、
時刻 < フィールドコード
はエラーになりますので、注意が必要です。
リファレンスはこちら。
クエリの書き方 - cybozu developer network
「フィールドコード 演算子 値」のように記述します。
という表記の通りで、入れ替えては成立しないということです。
レコード更新とレコード番号
複数のレコード更新をする際の updateKey にデフォルトのレコード番号は使えないようです。
複数のレコードを更新する - cybozu developer network
ドキュメントからするとできてもよさそうなんですが、こんな感じのエラーで落ちました。
xxxアプリのyyyでエラーが発生しました。 KintoneRestAPIError: [400] [GAIA_IN06] レコードの更新に失敗しました。「updateKey」に指定したフィールド(code: レコード番号)が不正です。「updateKey」には、文字列(1行)フィールドか数値フィールドのみ指定できます。また、フィールドの設定で、値の重複を禁止する必要があります。 (PviiQ4bCDMEZUl2h4Ull) at __webpack_modules__../node_modules/@kintone/rest-api-client/lib/src/KintoneResponseHandler.js.KintoneResponseHandler.handleErrorResponse (d:\work\xxxx\sample_app\node_modules\@kintone\rest-api-client\src\KintoneResponseHandler.ts:49:5) at https://localhost:5500/dist/transaction_sample.js:287:123 {name: 'KintoneRestAPIError', id: 'PviiQ4bCDMEZUl2h4Ull', code: 'GAIA_IN06', errors: undefined, status: 400, …}
今回はレコード番号で更新したかったので、仕方なく、次のようにしました。
下記のリファレンスを見ると、レコード番号はレコードIDを含むことは保証されているので、レコード番号からレコードIDを抽出して、それで、更新をかけるのがよさそうです。
フィールド形式 - cybozu developer network
アプリアクション
アプリ間でレコードをコピーしてくれる機能です。
便利だけど、こんな制限があります。
- 同じタイプのフィールド間でしか、コピーできない
- コピー完了イベント、みたいなものがないので、追加処理を書くようなカスタマイズができない
惜しい!
アプリアクション実行後は、コピー先アプリの新規追加画面が表示されるので、そこでユーザーが保存等の操作するのを前提にして置く必要がありますね。
詳細画面
詳細画面のイベント(app.record.detail.show)からは、 Javascipt API の kintone.app.record.set() を呼び出しても、レコードは更新されません。リファレンスにも明示があります(利用できる画面に含まれていない)。
レコードに値をセットする - cybozu developer network
なので、気が付くまで時間がかかってしまいました。
まあ、レコードの更新を許すと、詳細画面に表示している内容と、書き換えた内容に不一致がでるのでわからなくはないです。
まとめ
カスタマイズ触ってると他にもいろいろと気になる点が出てくると思いますので、折を見てまたまとめたいと思います。