新規投稿
フォローする

create.submitイベントでサブテーブルの値更新

こんにちは。

create.submitイベント時にサブテーブルの項目を他のアプリから取得した値で更新したいのですが、うまくいきません。

create.submitイベントではevent.recordの値を書き換え、event returnで値の更新はできないのでしょうか?

console.logにrecordオブジェクトを書きだしてみると、値は思った通りに入っています。

どなたかご教授お願いします。

---------------------------------------------------------------------------------------------------------

"use strict";
kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function(event) {
    var record = event.record;
    var tbl = record['Table'].value;
    var uketsukeNo;
    var gyomuName;
    var whereStr;
    var records = [];
    var appArray = { '業務1':1, '業務2':2, '業務3':3};

    for (var i = 0; i < tbl.length; i++) {
        gyomuName = tbl[i].value['業務名'].value;
        uketsukeNo =tbl[i].value['受付No'].value;
        whereStr = '受付No = "' + uketsukeNo + '"';
        records.push(kintoneUtility.rest.getRecords({'app':appArray[gyomuName],'query': whereStr}));

    }
    Promise.all(records).then(function(result){
        for (var i =0; i < result.length; i++) {
            tbl[i].value['名称'].value = result[i].records[0].名称.value;
            tbl[i].value['顧客番号'].value = result[i].records[0].番号.value;
        }
        console.log(record);
        return event;
    });
});

0

4件のコメント

Avatar
rex0220

jiji さん

Promise.all は、kintoneUtility の結果を待ちますが、

Promise.all 自体は非同期なので、処理は進んでイベント処理は完了します。

Promise.all の結果を record に反映する場合は、 return Promise.all~ と promise オブジェクトを返します。

2
Avatar
rex0220

return の書き方は問題ないと思います。

いくつか確認させてください。

・何かエラーがありませんか? 

・result[i].records[0]は必ず存在しますか?

・console.log(record); 時点で、record は変更されていますか?

0
Avatar
jiji

rex0220さん

すみません!自分のコメント削除しました。

「 return Promise.all~ と promise オブジェクトを返します」と教えて頂いたのにコメントに入れたソースコードでは

return Promise.allのthen(function(result){~~~})でreturn eventしていたので誤った解釈をしてしまったかな・・・と思いもう少し考えてから再度質問しようと思いました。

ちなみに

・result[i].records[0]は必ず存在しますか?  →存在します。

・console.log(record); 時点で、record は変更されていますか?  → 変更されていました。

 

 

0
Avatar
jiji

rex0220さん

この度はご教授頂きありがとうございました!

以下のソースで希望通り動いてくれました。

さきほどコメントを削除した際は別の要因で動作しませんでした・・・

return Promise.all(records).then(function(result){
    for (var i =0; i < result.length; i++) {
        tbl[i].value['物件名称'].value = result[i].records[0].登録名称.value;
        tbl[i].value['住宅番号'].value = result[i].records[0].住宅番号.value;
    }
    console.log(record);
    return event;
});

1
サインインしてコメントを残してください。