kintoneで他アプリのレコード情報を取得したいのですが、どのように実装すれば良いのでしょうか。
kintoneにおけるJavaScriptカスタマイズではREST APIが使えます。
GET処理を行うことで他アプリのレコードを取得できます。
この記事ではAPIを使ったレコードの取得(GET)処理について解説します。
- kintoneのJavaScriptカスタマイズでは、REST APIを使えます。
- レコード情報を取得するには、GET処理を行います。
- GET処理は2種類あります。
・レコードIDを指定して1件取得する
・条件を指定して複数件取得する - REST APIは非同期処理です。同期処理にするには「async/await」を使います。
kintoneのレコード情報の取得(GET)
kintoneは標準機能で「ルックアップ」や「関連レコード一覧」など、他アプリの情報を取得するフィールドが用意されています。
これに加えて、JavaScriptカスタマイズでは、REST APIのGET処理を使えば、任意のタイミングで他アプリのレコード情報を取得できます。
取得できるレコードも1件だけではなく、条件に一致した複数のレコードを一括取得できます。
1件取得する方法と複数件取得する方法の両方をコードで解説します。
レコードを1件取得する
レコードを1件取得する場合は、アプリIDとレコードIDを使います。
以下のコードでは、レコード追加画面表示時にアプリID:129のレコード(ID:3)の情報を取得し、その値を数量フィールドに設定します。
(() => {
'use strict';
kintone.events.on(['app.record.create.show'], event => {
const params = {
app: 129, // アプリID
id: 3 // レコードID
};
kintone.api(kintone.api.url('/k/v1/record.json', true), 'GET', params).then((resp) => {
// GET成功
console.log(resp);
const current = kintone.app.record.get();
current.record.予約.value = resp.record.予約人数.value;
kintone.app.record.set(current);
}).catch((error) => {
// GETエラー
console.log(error);
});
return event;
});
})()
REST APIは非同期処理です。
即ち、APIを実行している間に、後続の処理が並列して実行されます。
そのため、GETした情報を使って処理する場合は「.then()」に続く関数内に記述します。
「.then()」内の関数に引数として指定した「resp」はGET処理の結果です。
このrespオブジェクトの中にrecordオブジェクトが含まれ、この中に各フィールドの値が含まれます。
レコードに値を設定する場合は「kintone.app.record.get()」「kintone.app.record.set()」を使います。
「kintone.app.record.get()」「kintone.app.record.set()」については以下記事でも解説しました。
レコードを複数件取得する
レコードを複数件取得する場合はクエリを使い、条件を指定します。
以下のコードでは、日付が今日以降のレコードを取得し、その値をコンソールに表示します。
(() => {
'use strict';
kintone.events.on(['app.record.edit.submit'], async event => {
const record = event.record;
try {
const params = {
app: 129, // アプリID
query: '日付 >= TODAY() order by 日付 asc limit 500', // クエリ
fields: ['レコード番号', '数量'] // 取得フィールド
};
const resp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', params);
for (let i = 0; i < resp.records.length; i++) {
console.log(`レコード番号:${resp.records[i].レコード番号.value} 数量${resp.records[i].数量.value}`);
}
} catch (e) {
console.log(e);
}
return event;
});
})()
「order by」を指定することで、指定フィールドの昇順・降順で取得できます。
「limit」を指定することで取得件数を指定できます。
指定しない場合は100件が上限ですが、最大500件まで指定できます。
クエリに使える条件式の書き方はこちらをご覧ください。
先に述べた通り、REST APIは非同期処理です。
例えば、レコード保存時や削除時にAPIを実行すると、その結果が返ってくる前に保存や削除が完了してしまいます。
先ほどは「.then()」の形で後続の処理を記述しましたが、他にも「async/await」などを使い、同期処理にすることができます。
こちらの方が処理の流れに沿って上から順に記述できるため、直感的にも分かりやすいです。
GET処理の結果であるrespには、recordsオブジェクトが含まれ、この中に各フィールドの値が含まれます。
recordsは配列のため、for文などでループ処理すれば、取得した全レコードに対して処理できます。
- kintoneのJavaScriptカスタマイズでは、REST APIを使えます。
- レコード情報を取得するには、GET処理を行います。
- GET処理は2種類あります。
・レコードIDを指定して1件取得する
・条件を指定して複数件取得する - REST APIは非同期処理です。同期処理にするには「async/await」を使います。