レコードの値を取得してみよう

目次

今回は、kintone JavaScript APIを使って、kintoneアプリからレコードの値を取得する方法を学びましょう。

カスタマイズを適用するアプリ

レコード詳細画面にボタンを配置してみよう で利用したアプリを使います。

追加したボタンの押下時にレコードの値を取得する

レコードの値を取得する kintone JavaScript APIを利用して、メニューの空白部分に追加したボタンをユーザーがクリックした時に、表示しているレコードの値を取得する方法を説明します。

レコードの値を取得する流れ

追加したボタンをクリックした時にレコードの値を取得したい場合、次の流れで処理を実装します。

  1. 追加したボタンに対して、JavaScriptのイベントハンドラーでonclickイベントを発生させる。
  2. kintone.app.record.get()でレコードの値を取得する。

レコードの値を取得するサンプルコード

アプリに次のカスタマイズを適用してみましょう。
メニューの空白部分のボタンがクリックされたら、レコードの値を取得し、スペースフィールドに取得した更新日時を表示するサンプルコードです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(() => {
  'use strict';

  kintone.events.on('app.record.detail.show', (event) => {
    const menuButton = document.createElement('button');
    menuButton.id = 'menu_button';
    menuButton.innerText = 'ボタン';
    // JavaScript の クリックイベントを発生させる
    menuButton.onclick = function() {
      const spaceField = kintone.app.record.getSpaceElement('space_field');

      let updatedAt = '';
      // レコードの値を取得する
      const rec = kintone.app.record.get();
      // 取得したレコードの値の中から更新日時の値を取り出す
      if (rec) {
        updatedAt = rec.record.更新日時.value;
      }
      // スペースフィールドに取得した更新日時の値を入れる
      spaceField.innerText = updatedAt;
    };

    kintone.app.record.getHeaderMenuSpaceElement().appendChild(menuButton);
    return event;
  });
})();

レコード詳細画面を開いてボタンをクリックした際に、次のようにスペースフィールドに更新日時の値が表示されていればレコードの値の取得に成功しています。

注意点① フィールド形式とフォーマット

スペースフィールドに表示された更新日時と更新日時フィールドの日時を見比べると、2つの日時の書式が違っていますね。

このように、APIから取得した値は、Webページ上に表示されている値と書式/フォーマットが異なる場合もあります。
今後、コードを書いていくときには注意しましょう。
フィールド形式とフォーマットの詳細は、 フィールド形式 日時のフォーマット を確認してください。

注意点② kintone.events.on()のイベントハンドラー内では利用できない

実際の現場では、レコードの値を取得する場合、今回のように「ボタンを置いてクリック時に取得する」というユースケースより「ページの表示時に取得する」というユースケースの方が一般的に多いと思います。

ここで、誤解しやすい重要な注意点があります。
それは、kintone.events.on() のイベントハンドラー内ではkintone.app.record.get() を実行できないということです!

つまり、次のコードは動きません。

1
2
3
4
5
6
7
8
(() => {
  'use strict';

  kintone.events.on('app.record.detail.show', (event) => {
    const rec = kintone.app.record.get(); // ここではkintone.app.record.get()が使えない
    return event;
  });
})();

レコードの値を取得する の制限事項にも記載されていますが、誤解しやすいポイントなので、忘れないように注意しましょう。

それでは、kintone.events.on()のイベントハンドラー内で、レコードのデータを取得するにはどうすればいいでしょうか。
その方法について、次の章で説明します。

kintone.events.on()のイベントハンドラー内でレコードの値を取得する

kintone.events.on()のイベントハンドラー内で、レコードのデータを取得する方法を説明します。

レコードの値を取得する流れ

レコード詳細画面ページの表示時にレコードの値を取得したい場合、次の流れで処理を実装します。

  1. kintone.events.onで、 レコード詳細画面を表示した後のイベント app.record.detail.showを指定する。
  2. イベントハンドラーに渡される引数のイベントオブジェクトからレコードの値を取得する。

イベントオブジェクトについては、のちほど詳しく説明します。

レコードの値を取得するサンプルコード

アプリに次のカスタマイズを適用してみましょう。
レコード詳細画面を開くと、レコードの値を取得し、 レコード詳細画面にボタンを配置してみよう で追加したスペースフィールドに取得した値を表示するサンプルコードです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
(() => {
  'use strict';

  kintone.events.on('app.record.detail.show', (event) => {
    const updatedAt = event.record.更新日時.value;

    const spaceField = kintone.app.record.getSpaceElement('space_field');
    spaceField.innerText = updatedAt;
    return event;
  });
})();

レコード詳細画面を開いたときに、先ほどと同様に、スペースフィールドに更新日時の値が表示されていればレコードの値の取得に成功しています。

レコード詳細画面を表示した後のイベントのイベントオブジェクトには、レコードのデータが含まれています。 そのため、kintone.app.record.get()と同様に表示されたレコードデータを取得できます。

イベントオブジェクトとは

ここで、先ほどから出てきている「イベントオブジェクト」について解説します。
コードの中のeventがイベントオブジェクトにあたります。

1
kintone.events.on('app.record.detail.show', (event) => {}); // event がイベントオブジェクト

イベントオブジェクトにどのような値が入ってくるかは、 レコード詳細画面を表示した後のイベント のイベントオブジェクトのプロパティの表で確認できます。

コードを簡単に解説すると、「イベントオブジェクトのrecordプロパティの中からフィールドコードが”更新日時”の要素を指定し、その値を取得している」という処理になっています。

1
const updatedAt = event.record.更新日時.value;

イベントオブジェクトのプロパティはイベントごとに異なります。
そのため、実装の際は、それぞれの イベント のページでイベントオブジェクトのプロパティを確認しましょう。

tips
補足

kintoneのイベントオブジェクトについては、はじめようkintone APIの kintoneのイベントオブジェクト も参考にしてください。

おわりに

今回は、kintoneアプリからレコードの値を取得する方法について学びました。

kintone.app.record.get()kintone.events.on()のイベントハンドラー内で実行できない点は、初心者が特に間違いやすいポイントなので注意しましょう。

次回は、 イベントオブジェクトを使ったフィールドの値を書き換えてみよう で、イベントオブジェクトを使ったレコードの更新について学習しましょう。