
kintoneで他アプリのレコード情報を更新したいのですが、どのように実装すれば良いのでしょうか。

kintoneにおけるJavaScriptカスタマイズではREST APIが使えます。
PUT処理を行うことで他アプリのレコードを更新できます。

この記事ではAPIを使ったレコードの更新(PUT)処理について解説します。
- kintoneのJavaScriptカスタマイズでは、REST APIを使えます。
- レコード情報を更新するには、PUT処理を行います。
- PUT処理は2種類あります。
・1件更新する
・複数件更新する - リビジョンを指定することで、PUT実行前に第三者が更新した場合、自身の更新処理(上書き)をエラーにできます。
- REST APIは非同期処理です。同期処理にするには「async/await」を使います。
kintoneのレコード情報の更新(PUT)
kintoneでレコードを保存するや削除する時、同時に他のアプリのレコードを更新したいということはないでしょうか。
JavaScriptカスタマイズでは、REST APIのPUT処理を使えば、任意のタイミングで他アプリのレコード情報を更新できます。
更新できるレコードも1件だけではなく、複数件のレコードを一括更新できます。
1件更新する方法と複数件更新する方法の両方をコードで解説します。
レコードを1件更新する
レコードを1件更新する場合は、アプリIDとレコードIDを使います。
以下のコードでは、レコード編集保存時に他アプリであるアプリID:119のレコードID:1を更新します。
(() => {
'use strict';
kintone.events.on(['app.record.edit.submit'], event => {
const record = event.record;
const params = {
app: 119, // アプリID
id: 1, // レコードID
record: { // レコード情報
氏名: {
value: [{ code: kintone.getLoginUser().code }]
},
内容: {
value: record.対応内容.value
}
}
};
return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', params).then((resp) => {
// PUT成功
alert('アプリ119のレコードを更新しました。');
return event;
}).catch((error) => {
// PUTエラー
console.log(error);
event.error = 'エラーが発生しました。';
return event;
});
});
})()
REST APIは非同期処理です。
即ち、APIを実行している間に、後続の処理が並列して実行されます。
例えば、レコード保存時や削除時にAPIを実行すると、その結果が返ってくる前に保存や削除が完了してしまいます。
そのため、保存完了を待つために、kintone.apiを「return」します。
これにより「Promise」を使った同期処理になります。
POST後の処理は「.then()」に続く関数内に記述します。
一方でPOSTがエラーの場合の処理は「.catch()」に続く関数内に記述します。
エラーの場合はレコードの保存をキャンセルしたいため、「event.error」を設定します。
エラーの書き方については以下記事でも解説しました。

レコードを複数件更新する
レコードを複数件更新する場合は、更新する件数分のレコード情報をパラメータとして渡します。
利用場面としては更新対象のレコードをGETした上でPUTすることが多いです。
以下のコードでは、アプリID:119に設置した参照元レコード番号(数値フィールド)の値が自レコードIDと一致するものをGETし、それらに対してPUT(内容を更新)します。
(() => {
'use strict';
kintone.events.on(['app.record.edit.submit'], async event => {
const record = event.record;
try {
const getParams = {
app: 119, // アプリID
query: `参照元レコード番号 = ${record.$id.value}`, // クエリ
fields: ['$id', '$revision'] // 取得フィールド
};
const getResp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', getParams);
const putRecords = getResp.records.map((getRecord) => {
return {
id: getRecord.$id.value,
revision: getRecord.$revision.value,
record: {
内容: {
value: record.対応内容.value
}
}
};
});
const putParams = {
app: 119, // アプリID
records: putRecords // レコード情報
};
await kintone.api(kintone.api.url('/k/v1/records.json', true), 'PUT', putParams);
alert('アプリ119のレコードを更新しました。');
return event;
} catch (e) {
// PUTエラー
console.log(e);
event.error = 'エラーが発生しました。';
return event;
}
});
})()
まずはクエリを使って条件を指定しGETします。
GETするフィールドは「$id(レコードID)」と「$revision(リビジョン)」とします。
GETしたレコード群は「map」を使って各レコードをループしつつ、更新用のレコード配列(putRecords)に追加します。
このとき、レコードID、リビジョン、フィールド情報をひとまとめにして配列に追加します。
この配列とアプリIDをPUT時のパラメータとします。
リビジョンは更新回数を指します。
GETしてPUTするまで、わずかに時間差があります。
その間に第三者がレコードを更新するかもしれません。
そうなると、リビジョン(更新回数)が一つ上がります。
リビジョンを指定せずにPUTした場合は、第三者が更新した後に、さらに上書きすることになります。
場合によっては、一つ前の古い情報で上書きしてしまうかもしれません。
それを防ぐために、GET時のリビジョンをパラメータとすることで、第三者が更新していなければ正常に上書きができ、仮に第三者が先に更新していれば、自身の更新処理をエラーにできます。
今回のようにGETしてPUTする場合は、リビジョンを指定する方が良いでしょう。
APIのURLは、複数件の更新の場合は「kintone.api.url(‘/k/v1/records.json’, true)」のように「records」である点に注意です。
先に述べた通り、REST APIは非同期処理です。
先ほどはkintone.apiを「return」することでPromise処理による同期処理としましたが、こちらは「async/await」を使いました。

- kintoneのJavaScriptカスタマイズでは、REST APIを使えます。
- レコード情報を更新するには、PUT処理を行います。
- PUT処理は2種類あります。
・1件更新する
・複数件更新する - リビジョンを指定することで、PUT実行前に第三者が更新した場合、自身の更新処理(上書き)をエラーにできます。
- REST APIは非同期処理です。同期処理にするには「async/await」を使います。