Promiseで複数回同期処理を行った時のreturn処理

お世話になります。

表題の通りPromiseを使用した時のreturnが上手くいかず困っています、、、

下記ご教授頂きますよう宜しくお願いします。

 

■背景・実現したいこと

レコード追加画面、レコード編集画面でカスタムボタンを押下時にテーブルの先頭に行を追加し、既存のサブテーブル情報は下にずらす。

 

■エラー情報

①まずカスタムボタン押下時に更新情報が表示画面に反映されません。

②しかしコンソールにはREST API更新成功の旨が表示され、行が追加されている事も確認できる

③保存ボタンを押すと「レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。」が表示される。

 

■試したこと

return event 処理行うタイミングが正しくないと思ったので下記記載のコードのように(★マーク)何度かか書き換えましたがダメでした、、、

 

解決方法をご存じの方がいらっしゃいましたら是非ご教授ください。

宜しくお願い致します。

 

(function() {
  "use strict";
  kintone.events.on(["app.record.create.show", "app.record.edit.show"], function(event) {
    
    function addRow(id) {
    let body = {
      'app': 60,
      'id': id
    };
    
    return kintone.api(kintone.api.url('/k/v1/record.json', true), 'GET', body).then(function(resp) {
      let tableData = resp.record.テーブル_0.value;
      let tableId = [];
      tableData.forEach(val=>{
        tableId.push(val.id);
      });
      
      let idJson = '{"テーブル_0":{"value":[{"value":{"文字列 __複数行__ 0":{"value":"aaaaa"}}},';
      tableId.forEach(val =>{
        idJson += '{ "id": "'+val+'"},';
      });
      idJson = idJson.slice(0,-1);
      idJson += ']}}';
      
      console.log(idJson);
      
      let body2 = {
        'app': 60,
        'id': id,
        'record': JSON.parse(idJson)
      }
      
      return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body2);
      }).then(function(resp2) {
        console.log("sucsess");
        // return event;/////////////////////////////////★
      }, function(error) {
      console.log(error);
      });
    }
    
    let id = event.record.$id.value;
      
    // 追加ボタンを設置
    const addSpace = kintone.app.record.getSpaceElement('createBotton');
    const addButton =  document.createElement('button');
    addButton.innerHTML = '1行目に追加';
    addSpace.appendChild(addButton);
    addButton.onclick = function(){addRow(id);};
    // return event;/////////////////////////////////////★
      
  });

})();

REST API でレコード更新しても、追加・編集画面には反映されません。

kintone.app.record.get、kintone.app.record.set で反映できます。

チュートリアルの下記が参考になると思います。

kintoneにおけるテーブル操作の基本(行の追加・更新・削除)

rex0220様

アドバイスを参考に下記のように書き換えると動作しました。

ご回答ありがとうございました!

ですがまた新しい問題に気付いてしまい、そちらについてもご教授頂けますでしょうか?

レコード編集→カスタムボタン押下という流れだと「行った変更が保存されない可能性があります。」というポップアップが表示され、ボタン押下前の編集情報が反映されません、、、

試しにaddRow関数のしょっぱなにもget,setの処理を入れてみたのですがダメでした、、、

何卒よろしくお願いします。

~~~~~略~~~~~~~~~~
return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body2);
      }).then(function(resp2) {
        console.log("sucsess");
      let record = kintone.app.record.get();///追記
        kintone.app.record.set(record);///追記
      location.reload();///追記
      // return event;

REST API でレコード取得・更新処理自体が不要です。

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

・ボタンクリック

・kintone.app.record.get で最新レコードを取得

・テーブル行追加

・kintone.app.record.set で、追加・編集画面に反映

・Kintone 標準の「保存」で画面情報をレコードに反映

 

すみません、前提条件の説明が足りていませんでした。

テーブルに添付ファイルフィールドがあります。

それだとREST APIを使わないといけないという認識なので今回のような形にしています。(そもそもこの認識が間違っていたらすみません)

REST API を使って上手く処理する方法はありませんでしょうか?

テーブルの添付ファイルフィールドは、kintone.app.record.setで制御できません。

追加・編集画面で、テーブルの添付ファイルフィールドがあると行追加は無理ですね。

ご参考に、テーブル行移動プラグインでは、詳細画面で 行移動・REST API 処理後に再表示で対応しました。

 

 

無理ですか、、
詳しい方にそう言って頂けると諦めが付きます笑

お付き合い頂いてありがとうございました!

どこかでお見受けしたと思ったらプラグイン開発されてる方だったんですね!

また色々と見て購入検討させていただきます!