新規投稿
フォローする

submit時の更新を詳細画面に反映させたい

編集画面(edit.show)でサブテーブルの追加・削除を行ったあと、サブミット(edit.submit)でサブテーブルのソーティングを行っています。

ソーティングは上手くいっているのですが、詳細画面(detail.show)でソーティング後のサブテーブルが表示されません。

詳細画面(detail.show)で表示させるにはどのようにすればいいでしょうか。

そもそもサブミット(edit.submit)でソーティングするのではなく、詳細画面(detail.show)でソーティングした方がいいのでしょうか。

他の理由で、編集画面(edit.show)表示時にソーティングを行っているので、ソーティングのfunctionはあります。

それを再利用したいと思い、サブミット(edit.submit)に組入れたのですが、表示がうまくいきません。

すみません、ご教授いただけないでしょうか。

よろしくお願いします。

コーディングは以下の通りです。

/**
 *  保存ボタンクリック時の処理
 * 
 */
(function() {
  'use strict';
  kintone.events.on(['app.record.create.submit','app.record.edit.submit'], async function (event) {
    // await assignNumberCal(event);
    // await clearSquare(event);
    let dispatchTable = event.record.配員一覧.value;
    sortingFlg = 1;     // フィールド更新イベントを止める
    new kintone.Promise(function (resolve) {
      resolve(sortEngineerCD(dispatchTable));
    }).then(function(resolve) {
      updateEngineerName();
      // window.alert("return");
      return event;
    });
    // return event;
  });
})();
/**
 *  配員テーブルのソート
 * 
 */
async function sortEngineerCD(dispatchTable) {
  // console.log("sortEngineerCD before");
  // console.log(dispatchTable);
  // 常駐+技術者CD順にソートする
  dispatchTable.sort(function(a, b) {
    let keyA = a.value.常駐.value;
    if (keyA) {
      keyA = keyA + a.value.技術者CD.value;
    } else {
      keyA = "☆" + a.value.技術者CD.value;
    }
    // console.log("keyA:" + keyA);
    let keyB = b.value.常駐.value;
    if (keyB) {
      keyB = keyB + b.value.技術者CD.value;
    } else {
      keyB = "☆" + b.value.技術者CD.value;
    }
    // console.log("keyB:" + keyB);
    if (keyA < keyB) {
      return -1;
    } else if (keyA > keyB) {
      return 1;
    } else {
      return 0;
    }
  });
  // console.log("sortAEngineerCD after");
  // console.log(dispatchTable);
  return;
}

0

6件のコメント

Avatar
juridon

こんにちは。

submit(保存前)イベントでテーブルの並び替えが上手く行っている(?)のに、
保存後に詳細画面をみたらテーブルの並びが正しく保存されていないということでしょうか??

※「ソーティングは上手くいっている」はどうやって確認されましたでしょうか?

状況が理解できず(><)
図などで示していただけるとわかりやすいかもです。

juridonにより編集されました
0
Avatar
よっちん

「ソーティングは上手くいっている」と言いますのは、function sortEngineerCD(dispatchTable)で

dispatchTableをconsole.logで表示させて確認したところ、ソーティング後はちゃんと並び替えられていたので、

なぜその内容が詳細画面に反映されないのかなと思っています。

edit.showで編集画面を表示するときに、同じfunction sortEngineerCD(dispatchTable)を使ってソーティングしているのですが、

この時はソーティング後の内容が表示されます。

ソーティング後に更新処理(set)が必要なのかなとか、いろいろ試しています。

すみません、よろしくお願いします。

よっちんにより編集されました
0
Avatar
juridon

ええと、まだイマイチ状況がわからなくて申し訳ないのですが、

編集画面edit.showの中でfunction sortAngineerCD(dispatchTable)を呼び出したらソートされるが、
詳細画面detail.showの中でfunction sortAngineerCD(dispatchTable)を呼び出しているが、テーブルがソートされない。

ということでしょうか?

ちなみに、edit.showでソートした後に「保存」ボタンをクリックした場合、edit.showでソートした順にテーブルの内容は保存されますか?


0
Avatar
よっちん

edit.showのロジックは以下の通りです。

(function() {
  'use strict';
  kintone.events.on('app.record.edit.show', async function(event) {
    if (rec) {
      // 省略
      // 配員テーブルのソート
      sortingFlg = 1;     // ソーティング完了までフィールド更新イベントを止める
      new kintone.Promise(function (resolve) {
        resolve(sortEngineerCD(event));
      }).then(function(resolve) {
        updateEngineerName(event);   // 技術者CDから技術者名を再取得
        tableChangeBefore = rec.配員一覧.value;   // サブテーブルの退避
        sortingFlg = 0;   // ソーティング完了後にフィールド更新イベントをスタートする
      });
    }
    return event;
  });
})();
 
edit.showではソート後の内容が表示されますが、edit.submitでソーティングしてもdetal.showでソート後の内容が表示されません。
他でもサブテーブルがうまく表示されないという現象が起きているので、REST APIで更新してみようと思っています。
あと、どうでもいいことですが、AngineerになっていたのでEngineerに修正しました。
よろしくお願いします。
よっちんにより編集されました
0
Avatar
juridon

おはようございます。

まず、detail.showの方は、保存されているレコードの詳細内容を表示する画面表示をするイベントで
detail.showでテーブル内をソートしても見た目は変えることができません。DOM操作しないと順番変わらないです。


edit.showでソート順が変わったとおりに、submit.showでレコードの変更内容が正しく保存されるならdetail.showではedit.showでソートしたとおりに表示されると思います。
(edit.showでテーブルオブジェクト内が正しくソートできているならsubmit.show内ではソートする必要ないと思います。)

edit.showで並び替えたテーブルのオブジェクトがsubmit.showで保存されていないのかも知れないですね🙄

なんとなく、ですが、'app.record.edit.show'内のif文が終わる前に,return event;走ってるようにも見えます。
new kintone.Promise・・・のロジックを使っていたのがだいぶ前なので挙動がよく思い出せませんが、
new kintone.Promise の前に return を書いて、new kintone.Promise(){~} 内に return event; があるとよいかと思います。

↓※こちらのサンプルを見ても return event;を返すために、 new kintone.Promise の前に return を書いていると思います✨
kintone.Promiseとは

うまくいきますように!

0
Avatar
よっちん

juridon様、ありがとうございます。

edit.showでのソートは、別アプリからレコード(サブテーブルの行)を追加するので、edit.showで開いたときにソーティングしています。

また、edit.showではサブテーブルの行をランダムに追加できるので、submitの時に再度ソーティングし直そうと考えています。

new kintone.Promiseの前にreturnを入れたり、async,awaitを使ってみたりしてやってみます。

また質問させてください。よろしくお願いします。

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