他アプリから取得した情報の編集画面での表示

JavaScriptでのカスタマイズに関しての質問です。

あるアプリで他のアプリからの情報を取得してテキストフィールドの初期値にしたいと考えています。
例)アプリA フィールドA-1
アプリB フィールドB-1

アプリAの編集画面を開いた際にアプリBのフィールドB-1の値をA-1に表示したい。

アプリAのJavaScript

    kintone.events.on(‘app.record.edit.show’, function (event){
  // リクエストパラメータ
var requestParam = {
‘app’: xx //アプリBのappId
};

        var tableRecords = event.record.subTable_records.value;
kintone.api(
kintone.api.url(‘/k/v1/records’, true),
‘GET’,
requestParam,
function(resp) {
// 取得レコード: resp.records
console.log(resp.records[0].フフィールドB-1.value); //ちゃんと値は取れている。
tableRecords[0].value[‘フィールドA-1’].value = resp.records[0].フィールドB-1.value;
}
);

 
// tableRecords[0].value[‘フィールドA-1’].value = ‘aaa’; //固定値はちゃんと表示される。
return event;
    });

})();

以下の確認はとれました。
・アプリAからアプリBのフィールドB-1の値はちゃんと取れている。(コンソールには出力される)
・フィールドA-1に取得したB-1の値ではなく、固定値などで試してみるとちゃんと設定される。

function(resp)はcallback関数なのでeventへの連携は出来ないのかなあと思ったりもするのですが、うまく取得して設定する方法はないものでしょうか。

ばみさん、はじめまして。
アイティー・プラス・ワンの星野です。

”kintone.app.record.set()”を利用することで、コールバックやボタンクリックイベント(kintone標準じゃないイベント)でも値を設定することが可能となります。
参考URL:https://cybozudev.zendesk.com/hc/ja/articles/201942014-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E8%A9%B3%E7%B4%B0%E6%83%85%E5%A0%B1%E5%8F%96%E5%BE%97#step4
ソースを見ると、アプリA フィールドA-1はサブテーブルになっているのでしょうか?
もしサブテーブルになっているようでしたら以下のようなソースでいかがでしょうか?
※アプリB フィールドB-1がどのようなフィールドか読み取れませんでしたのでindexが”0”固定になっています。

// レコードを取得します
kintone.api(kintone.api.url('/k/v1/records', true),'GET',requestParam,function(resp) {
    // 現在表示しているレコードを取得
    var rec = kintone.app.record.get();
    // サブテーブルを取得
    var subList = rec.subTable_records.value;
    var subListLength = subList.length;

    for (var i=0; i < subListLength ; i++) {
        // サブテーブルのすべてのフィールドA-1項目にアプリB フィールドB-1を設定します。
        subList[i].value.フィールドA-1.value = resp.records[0].フィールドB-1.value;
    }
    // 画面に設定
    kintone.app.record.set(rec);
});

もし意図に沿っていないようでしたら、再度質問ください。
以上です。

ばみさん

cstapの落合です。
仰るとおり、アプリAに値をsetしているのが、kintone.apiのcallbackのため、return eventされた後に、値がsetされるため反映されません。
こういう場合は、レコードに値をセットするAPIが利用できるかと思います。

以上、参考になりますでしょうか?

星野さん、落合さん

回答ありがとうございます。
setを使って思った通りの動作ができました!

星野さんにはサンプルソースまでご提示いただきありがとうございます。
ご回答の通り、サブテーブルを使用しています。
一点、はまった点が。

var rec = kintone.app.record.get();
rec.xxx
このアクセスの仕方だとうまくいきませんでした。
rec[‘record’].xxx
というアクセスが必要みたいですね。

回答いただきましてほんとうにありがとうございました。

ばみさん

解決されたようで良かったです!
また何かありましたら、ご質問ください!

ばみさん

問題が解決されたようでよかったです。
サンプルが間違ってたらたまったもんじゃないですね。
申し訳ありませんでした。
拙い説明でしたがまた何かありましたら質問してみてください。