ルックアップ相当のアプリ間データコピーについて

お世話になります。

IDをキーにして,マスターアプリと,データ登録アプリ間のデータコピーを行おうとしております。

通常はルックアップを用いれば問題ないと思いますが,バーコードから読み取ったIDを元にマスターから情報を引っ張ってきたいため,ルックアップを使用することができません。

これまでの投稿を探して色々試しておりますが,ハマっており困っております。

どなたかお力添え頂けませんでしょうか。

 

■希望する動作

アプリA(マスターアプリ)

フィールド:ID,商品名

 

アプリB(データ登録アプリ)

フィールド:ID(←バーコードを読み取って入力する),商品名

 

アプリBの文字列フィールドにバーコードから値を読み込む

アプリBのボタンを押す(もしくは自動でも可)

IDをキーにして,アプリAから商品名をルックアップする

 

■これまでの経過

似たり寄ったりのサンプルをいくつか見ながら解読していますが,所望の動作が見えておりません。

 

***

(function () {

  “use strict”;

    // レコード追加字(‘app.record.create.show’)

    // レコード編集時(‘app.record.edit.show’)

    // のイベント

    var events1 = [‘app.record.create.show’,‘app.record.edit.show’];  

    kintone.events.on(events1, function(event){

  

    // ボタンのID,ボタン文字の設定

    var mySpaceFieldButton = document.createElement(‘button’);

    mySpaceFieldButton.id = ‘button_field’;

    mySpaceFieldButton.innerHTML = ‘コピー’;

    // ボタンクリック時の処理

    mySpaceFieldButton.onclick = function () {

     return kintone.api(‘/k/v1/record’, ‘PUT’, {    // レコードの更新(で良いのか?GET?)

       app: 9,                                      // アプリのID

       updateKey: {                     

         field: “ID”,                              // 重複禁止のフィールドコード

         value: event.record.ID.value               // 値

       },

       record: {

          名前: {                                   // フィールドコード

          value: 1                                  // フィールド値(どうやって他アプリのデータを引っ張ってくる?)

        }

      }

    }).then(function(){

        return event;

    });

    } 

    // 特定のスペースフィールドにボタンを設置

    kintone.app.record.getSpaceElement(‘my_space_field’).appendChild(mySpaceFieldButton);

  });

})();

流れは以下のようになると思います。

◆自動で値を取得する場合

➀イベントにapp.record.create.change.ID と app.record.edit.change.ID をいれる

②REST APIのGETでマスタアプリからIDをキーに商品名を取得する

③取得してきた商品名をアプリBの商品名に入れる

 

◆ボタンの場合

➀ボタンをクリックしたら②のイベントを走らせる

②REST APIのGETでマスタアプリからIDをキーに商品名を取得する

③取得してきた商品名をアプリBの商品名に入れる

Ryokke様

アドバイスありがとうございます。

自動で値を取得する場合 に沿って実装してみましたが,イマイチ動作しません。

アドバイス頂けませんでしょうか。

*****

(function() {

    “use strict”;

   // 登録アプリIDのフィールドに変更があった場合(=QRコードを読み込んだ場合)

  kintone.events.on(‘app.record.create.change.登録アプリID’, function(event) {

        var body = {

            // マスタアプリのIDを入れる(例:8)

            “app”: 8,

            // 登録アプリIDに入力されたフィールドコードの値と,マスタアプリIDが一致したレコードが抽出される

            “query”: “登録アプリID” = “マスタアプリID”,

                     

            // 出力するフィールドはマスタアプリ商品名

            “fields”: “マスタアプリ商品名”

    

        };

            

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

    

        // GET出来た場合はここに記載

    

            // 登録アプリ商品名に,マスタアプリから取得したマスタアプリ商品名を入れる

            var record = event.record;

            record[‘登録アプリ商品名’][‘value’] = resp;

          

        }, function(error) {

    

        // GET出来なかった場合(エラー時)はここに記載

    

            // コンソールでエラーを通知する

            console.log(‘対象となるIDがありません’);

    

    });

    return event;

 });

})();

こんな感じでしょうか

 

(function() {

    'use strict';

    kintone.events.on('app.record.create.change.登録アプリID', function(event) {
        var register_id = event.record["登録アプリID"]["value"];

        var body = {
            "app": 8, 
            "query": "マスタアプリID = " + register_id,
            "fields": "マスタアプリ商品名"
        };

        kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) {
            var product_name = resp.records[0]['マスタアプリ商品名']['value'];

            var record = kintone.app.record.get().record;
            record['登録アプリ商品名']['value'] = product_name;
            kintone.app.record.set({record});

        }, function(error) {
            console.log('対象となるIDがありません');
        });

    return event;
    });
})();

Ryokke様

 

ありがとうございます!確認させて頂きます。