はじめに
kintoneのテーブルは標準機能ではルックアップでもってくることはできません(;^ν^)ぐぬぬ…
でもテーブルもごそっと持ってきたい時があるんです!!!
なので kintone REST API を使って疑似ルックアップ拡張してみました。
完成イメージ
※ルックアップクリアがなんか残ってるけど、、(゚ε゚)キニシナイ!!
※↑ 後ほど理由を説明します
仕組み
ルックアップをした時、つまり**「ルックアップフィールドが変わった時」か「ルックアップの取得ボタンを押した時」**っていうイベントがあればなんの造作もないのですが、
どちらもイベントが用意されていないので、「ルックアップで持ってきたフィールドのチェンジイベント」で処理を発火させています🔥🔥
ルックアップ元(マスタアプリ)のアプリIDを取得するAPIはあるので、ルックアップの標準機能でどのレコードIDからルックアップしてきてるか取得してREST APIのGETを実行しています。
※ そしてこの「レコードID格納用フィールド」のチェンジイベントで🔥しています
kintoneアプリ
フィールド構成
フィールド | フィールドコード | 用途 |
---|---|---|
ルックアップ | Lookup | ルックアップするため |
数値 | Number | ルックアップ元のレコードIDを格納 |
テーブル | Table | もってきたいテーブル |
※ テーブルの構成、フィールドコードはルックアップ元/先で同じ にしてください。あとで楽です。
その他必要なフィールドがあれば自由に配置してください。
フィールド配置
配置が地味に大事だったりします!
ルックアップで持ってくるフィールドは上から(左上)から順番に取得するっぽくて、
レコードIDを格納するフィールドを上に持ってくるとちょっとバグります。
change イベントを紐づけている レコードIDフィールド
に先に値が入ってしまうのでカスタマイズが動いてしまい、他のフィールドには値が入らないのです。
-> 再度、取得ボタンを押せば、他のフィールドにも値が入ります。
コード内にある kintone.app.record.set() が原因な気がしますね~(勘)
なのでチェンジイベントさせているレコードIDフィールドを一番下に持ってくるとうまいことできるようになります。
※ルックアップクリアが残るやつもなんとかなってる
コード
GitHubに置いてあります。
(function() {
'use strict';
const events = [
'app.record.create.change.Number',
'app.record.edit.change.Number',
];
kintone.events.on(events, function(event) {
const targetAppId = kintone.app.getLookupTargetAppId('Lookup');
const targetRecordId = event.record['Number'].value;
// ルックアップクリアをしたらテーブルを空にする
if (!targetRecordId) {
event.record['Table'].value = [];
return event;
}
const body = {
app: targetAppId,
id: targetRecordId,
};
kintone.api(kintone.api.url('/k/v1/record', true), 'GET', body, function(resp) {
event.record['Table'].value = resp.record['Table'].value;
// サブテーブルを編集不可にする場合
event.record['Table'].value.forEach(function(obj) {
Object.keys(obj.value).forEach(function(params) {
obj.value[params].disabled = true;
});
});
kintone.app.record.set(event);
}, function(err) {
window.alert('REST APIでエラーが発生しました');
});
});
})();
ルックアップクリアさせたらテーブルを空にする処理だったり、サブテーブルを編集不可にしたりしてます。
また、テーブルの構成やフィールドコードを合わせることで、
event.record['Table'].value = resp.record['Table'].value
でテーブルがごそっと持ってこれます。あら楽ちん
おわりに
簡単なカスタマイズでもなるべくQiitaにあげようと思い作ってみました。
テーブルのルックアップは地味にニーズあるのでいつか標準対応してくれるといいな~
(そうなったらこのカスタマイズはお蔵ですけどね笑)
kintoneのカスタマイズで困ったことがあれば cybozu developer network のコミュニティで質問してみると良いですよ~!
それでは!≧(+・` ཀ・´)≦