別アプリへ入力、登録したレコードから計算後のフィールド値を取得したい

G.Qさん

PUTは不要ですが、GETは要りますね。

async/awaitを使うと、もう少しシンプルな書き方になります。

(function() {

"use strict";

  kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], async function(event) {

    try {

      // アプリIDの取得
      // レコード番号の取得
      console.log(event);

      // リクエストプロパティ(JSON)
      var params = {
        "app": 420,
        "record": {
          "日付": { "value": event.record.日付.value },
          "計量機No": { "value": event.record.計量機No.value },
          "連番": { "value": event.record.receipts.value[0].value.no.value },
          "担当者1": { "value": event.record.担当者1.value },
          "担当者2": { "value": event.record.担当者2.value },
          "サイズ名": { "value": event.record.receipts.value[0].value.サイズ名.value },
          "めっき種類": { "value": event.record.receipts.value[0].value.めっき種類.value },
          "単重1A": { "value": event.record.receipts.value[0].value.単重1.value },
          "単重2B": { "value": event.record.receipts.value[0].value.単重2.value },
          "個数1A": { "value": event.record.receipts.value[0].value.個数.value },
          "形態": { "value": event.record.receipts.value[0].value.形態.value },
        }
      };

      // kintone REST API リクエスト ~ レコードの登録(POST)
      const postResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', params);

      // GETリクエストプロパティ(JSON)
      var params = {
        "app": 420,
        "id": postResp.id  // POSTした結果のレコード番号
    };

      // kintone REST API リクエスト ~ レコードの取得(GET)
      const getResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'GET', params);

      event.record.receipts.value[0].value.単重計算後.value = getResp.record.単重計算後.value;
      return event;

    } catch (e) {
      // エラー
      return event;
  }

  });

})();

koichiさん

上記で実装できました!

何から何まで本当にありがとうございました:bangbang:

この延長にはなるのですが、

①行追加した場合などサブテーブル行ごとに同じように実装は可能でしょうか。

②サブテーブル行追加の「⊕」ボタンを押したタイミングで起動、プログラム処理し保存させることは可能でしょうか。

G.Qさん

まずは解決されて何よりです。

 

行追加時にも実装は可能ですが、いくつか問題があります。

 

①行追加時に、どの行が追加されたかが、標準イベントでは取れないため

それを識別する方法を考える必要があります。

 

②行追加で発火させると、+を押す度に毎回POST処理になるため

不要なレコードが登録される可能性があります。

 

例えば、今と同じくsubmitイベント内で

テーブル全行をまとめてPOSTして、各行を更新するといったことも可能ではあります。

これについても、既にPOSTした行は何もしない、といった処理が必要だったりします。

 

POST先のアプリとの連携も考慮いただいた上で

どのタイミングでAPIを発火させると最適か、検討してみてください。

koichiさん

返信ありがとうございます。

運用的には保存時に、すでにPOSTしている行を省き、テーブル全行をまとめてPOSTし更新させる

方法が最適だと考えています。コード的には、どの辺を追記・修正する必要がありますか?

 

 

G.Qさん

まずは以下のような修正が必要でしょう。

 

①テーブル構成について

既にPOSTしたかどうかを判定するために、POST完了した際のレコード番号を格納する列フィールドが必要です。

↓ テーブル列(例)

レコード番号 | めっき種類 | 形態 | ケース数 | ・・・

レコード番号の位置はどこでも良いです。

 

②POST・GETについて

テーブルをforループしながら、レコード番号が無い行(POSTしていない行)に対して

上記のPOST・GET処理をすれば実装できます。

単重計算後に加えて、POST完了のレコード番号もテーブルに格納します。