LoginSignup
0
0

More than 1 year has passed since last update.

kintoneでテーブルをルックアップする

Last updated at Posted at 2021-09-27

今回は、ルックアップでテーブルを持ってくるというカスタマイズをしてみましょう。

アプリの準備

まずはルックアップされる側のアプリを作り、
それを再利用してルックアップする側のアプリを作ります。

ルックアップされる側

フィールド種類 フィールドコード 備考
文字列(1行) テンプレート名 重複禁止
文字列(1行) 品名 テーブル内フィールド
数値 個数 テーブル内フィールド
数値 単価 テーブル内フィールド
計算 金額 個数*単価(テーブル内フィールド)

image.png

ルックアップされるデータの準備

以下の2件レコードを登録しておきます。

image.png

image.png

ルックアップする側

フィールド種類 フィールドコード 備考
ルックアップ ルックアップ ルックアップ設定は後述
文字列(1行) テンプレート名 ルックアップでコピーする
文字列(1行) 品名 テーブル内フィールド
数値 個数 テーブル内フィールド
数値 単価 テーブル内フィールド
計算 金額 個数*単価(テーブル内フィールド)
計算 合計 SUM(金額)

image.png

JavaScript

kintone REST API Client を入れておきます。
https://unpkg.com/@kintone/rest-api-client@latest/umd/KintoneRestAPIClient.min.js

フィールド値変更時イベントではルックアップフィールドの変更を検知することができないので、
ルックアップで文字列(1行)(テンプレート名)を取得してきたのをトリガーにします。

kintone.events.on(
    [
      "app.record.create.change.テンプレート名",
      "app.record.edit.change.テンプレート名",
    ],
    (event) => {
      // レコード番号
      const rId = event.record.ルックアップ.value;
      if (!rId) { // クリアのとき消す用
        event.record.テーブル.value = [];
      } else { // ルックアップしてきた時用
        getTable(kintone.app.getLookupTargetAppId("ルックアップ"), rId);
      }
      return event;
    }
  );

  // async await は changeイベントでは使えないので外に出す。
  const getTable = async (appId, rId) => {
    const client = new KintoneRestAPIClient();
    const res = await client.record.getRecord({
      app: appId,
      id: rId,
    });
    // とってきた値をテーブルにセット
    const obj = kintone.app.record.get();
    obj.record.テーブル.value = res.record.テーブル.value;
    kintone.app.record.set(obj);
  };

こんな動きをします

あたかもテーブルがルックアップされているかのような動き!

0
0
0

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
0
0