ルックアップに動的に初期値を設定したい

ログインしているユーザーの所属している部署をルックアップフィールドの初期値として設定したいと考えています。

別アプリに所属情報を登録し、「kintone.api(‘GET’)」で値を取得、対象のルックアップフィールドに取得した値を設定し、ルックアップフィールドの「‘lookup’」を「true」にすることで実装しようとしています。

この状態で実行すると、API にて値が取得できずルックアップフィールドに値が設定できませんでした。

API コマンドの後に「alert」にてメッセージを表示すると所属情報の値が取得され、ルックアップフィールドに値が設定されることが確認できました。

一旦画面上に操作を戻すなどなんらかの対応が必要なのでしょうか?

JavaScriptにおけるルールやコマンドなどがあるのでしたら、ご教授いただけないでしょうか?

よろしくお願いします。

 

後藤様

 

はじめまして。

実際のコードや、エラー内容なども記載頂けると回答しやすくなりますので、

もし可能でしたら記載頂ければ幸いです!

後藤 耕一さん

 

Pomise対応されていないイベントハンドラ内の非同期コールバックで、表示されているレコード情報を変更する際はrecord.get()、record.set() のAPIを使ってみてください。

// 表示しているレコードを取得
var record = kintone.app.record.get();
// 取得したレコードの値をルックアップ元にセット
record['record']['ルックアップ']['value'] = resp['records'][0]['ルックアップ']['value'];
// セットした値でルックアップ実行
record['record']['ルックアップ']['lookup'] = true;
kintone.app.record.set(record);

鈴木祐介様、kiku様

はじめまして。

ご回答ありがとうございます。

kiku様のご回答を参考に変更したコードを記載します。

現状、この状態で「“未定義または NULL 参照のプロパティ ‘LU1_Syozoku’ は取得できません”」というエラーが発生します。

LU1_Syozoku は値を設定したいルックアップ項目のフィールド名です。

よろしくお願いします。

(function() {
    “use strict”;

 var recget = kintone.app.record.get(); //←レコードを取得

kintone.events.on(‘app.record.create.show’, function(event) {

 var record = event.record;
 var user = kintone.getLoginUser();
 var syozoku = “”;

 record[‘User_ID’][‘value’] = user.id;
 record[‘User_Name’][‘value’] = user.name;

 var body = {
     “app”: 106,
     “query”: "Char1_Code = " + user.id,
     “fields”: [“LU1_Syozoku”]
 };

 kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘GET’, body, function(resp) {
     // success

  syozoku = resp.records[0][‘LU1_Syozoku’].value; // ルックアップフィールドの値

  }, function(error) {
      // error
//      console.log(error);
 });

  recget[‘LU1_Syozoku’][‘value’] = syozoku;
  recget[‘LU1_Syozoku’][‘lookup’] = true;
  kintone.app.record.set(recget); //←値をセットする

  return event;
});
})();

後藤さん

コードに手を入れました。 コールバック内にルックアップの処理を移動しています。

こちらでいかがでしょうか。

(function() {
 "use strict";

 kintone.events.on('app.record.create.show', function(event) {

  var record = event.record;
  var user = kintone.getLoginUser();
  var syozoku = "";

  record['User_ID']['value'] = user.id;
  record['User_Name']['value'] = user.name;

  var body = {
   "app": 106,
   "query": "Char1_Code = " + user.id,
   "fields": ["LU1_Syozoku"]
  };

  kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
   // success
   var recget = kintone.app.record.get();  //←レコードを取得
   var rec = recget.record;
   syozoku = resp.records[0]['LU1_Syozoku'].value; // ルックアップフィールドの値
   rec['LU1_Syozoku']['value'] = syozoku;
   rec['LU1_Syozoku']['lookup'] = true;
   kintone.app.record.set(recget);  //←値をセットする

  }, function(error) {
   // error
   //  console.log(error);
  });
  return event;
 });
})();

kiku様

コードの修正をしていただきありがとうございます。

値の取得と設定、データの保存が問題なく実行できたことを確認できました。

 

非同期コールバックの場合のレコード値の取得・設定、処理を記載すべきタイミングについて理解できました。

 

初歩的な質問にご教授いただき、ありがとうございました。