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
というアクセスが必要みたいですね。
回答いただきましてほんとうにありがとうございました。
ばみさん
解決されたようで良かったです!
また何かありましたら、ご質問ください!
ばみさん
問題が解決されたようでよかったです。
サンプルが間違ってたらたまったもんじゃないですね。
申し訳ありませんでした。
拙い説明でしたがまた何かありましたら質問してみてください。