LoginSignup
27
25

More than 3 years have passed since last update.

kintoneのテーブルをルックアップしてみた

Last updated at Posted at 2018-09-07

はじめに

kintoneのテーブルは標準機能ではルックアップでもってくることはできません(;^ν^)ぐぬぬ…
でもテーブルもごそっと持ってきたい時があるんです!!!

なので kintone REST API を使って疑似ルックアップ拡張してみました。

完成イメージ

table_lookup.gif
※ルックアップクリアがなんか残ってるけど、、(゚ε゚)キニシナイ!!
※↑ 後ほど理由を説明します

仕組み

ルックアップをした時、つまり「ルックアップフィールドが変わった時」「ルックアップの取得ボタンを押した時」っていうイベントがあればなんの造作もないのですが、
どちらもイベントが用意されていないので、「ルックアップで持ってきたフィールドのチェンジイベント」で処理を発火させています🔥🔥

ここのイベントがほしいんじゃー!!(ないものねだり)
2018-09-05_18h47_34.png

ルックアップ元(マスタアプリ)のアプリIDを取得するAPIはあるので、ルックアップの標準機能でどのレコードIDからルックアップしてきてるか取得してREST APIのGETを実行しています。
※ そしてこの「レコードID格納用フィールド」のチェンジイベントで🔥しています

kintoneアプリ

フィールド構成

フィールド フィールドコード 用途
ルックアップ Lookup ルックアップするため
数値 Number ルックアップ元のレコードIDを格納
テーブル Table もってきたいテーブル

テーブルの構成、フィールドコードはルックアップ元/先で同じ にしてください。あとで楽です。

その他必要なフィールドがあれば自由に配置してください。

フィールド配置

配置が地味に大事だったりします!

ルックアップで持ってくるフィールドは上から(左上)から順番に取得するっぽくて、
レコードIDを格納するフィールドを上に持ってくるとちょっとバグります。

change イベントを紐づけている レコードIDフィールド に先に値が入ってしまうのでカスタマイズが動いてしまい、他のフィールドには値が入らないのです。
-> 再度、取得ボタンを押せば、他のフィールドにも値が入ります。

table_lookup2.gif

コード内にある kintone.app.record.set() が原因な気がしますね~(勘)

なのでチェンジイベントさせているレコードIDフィールドを一番下に持ってくるとうまいことできるようになります。

table_lookup3.gif

※ルックアップクリアが残るやつもなんとかなってる

コード

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 のコミュニティで質問してみると良いですよ~!

それでは!≧(+・` ཀ・´)≦

27
25
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
25