レコード追加/編集保存時の数値フィールドの値の書き換え

お世話になります。

表題の通りレコード保存時の数値フィールドの値の書き換えが上手くいきません。

下記のコードに記載してある通り、数値型を「String()」や「‘’+num」で文字列に変換してもうまく反映されません。

数値のままでももちろんダメでした、、、

collectCountAir,collectCountFrz,newFillingAirList,newFillingFrzList等の変数をconsole.log()で出力した際にはちゃんと数値データは取得出来てました。

初歩的な問題なのでしょうが、手詰まりです、、、、

以下コードの全文です。

よろしくお願いします。

(function() {
  'use strict';
  kintone.events.on(['app.record.create.submit','mobile.app.record.create.submit','app.record.edit.submit','mobile.app.record.edit.submit'], function(event) {
    let collect = event.record.ガス回収.value;
    let collectTable = event.record.ガス回収テーブル.value;
    let filling = event.record.ガス充填.value;
    let fillingTable = event.record.ガス充填テーブル.value;
    let type = event.record.工種.value;
    let collectCountAir = 0;
    let collectCountFrz = 0;
    let fillingAirList = [];
    let fillingFrzList = [];
    let newFillingAirList = [];
    let newFillingFrzList = [];
    
    if(collect === "あり"){
      collectTable.forEach(val => {
        if(val.value.回収引継.value[0] !== "回収引継"){
          if(val.value.回収機器種類.value === "空調機"){
            collectCountAir ++;
          }else{
            collectCountFrz ++;
          }
        }
      });
    }
    
    if(filling === "あり"){
      fillingTable.forEach(val => {
        if(val.value.充填機器種類.value === "空調機"){
          fillingAirList.push(val.value.型名充填.value + val.value.製造番号充填.value + val.value.充填場所.value);
        }else{
          fillingFrzList.push(val.value.型名充填.value + val.value.製造番号充填.value + val.value.充填場所.value);
        }
      });
      newFillingAirList =fillingAirList.filter((element, index) => fillingAirList.indexOf(element) === index);
      newFillingFrzList =fillingFrzList.filter((element, index) => fillingFrzList.indexOf(element) === index);     
    }

    
    if((type === "業務用エアコン工事" || type === "ルームエアコン工事")){
      event.record.空調機破棄台数.value = String(collectCountAir);
      event.record.冷凍機破棄台数.value = String(collectCountFrz);
      event.record.空調機整備台数.value = String(0);
      event.record.冷凍機整備台数.value = String(0);
      
      event.record.空調機設置台数.value = String(newFillingAirList.length);
      event.record.冷凍機設置台数.value = String(newFillingFrzList.length);
      event.record.空調機設置以外台数.value = String(0);
      event.record.冷凍機設置以外台数.value = String(0);
      return event;
    }else{
      event.record.空調機破棄台数.value = ''+0;
      event.record.冷凍機破棄台数.value = ''+0;
      event.record.空調機整備台数.value = ''+collectCountAir;
      event.record.冷凍機整備台数.value = ''+collectCountFrz;
      
      event.record.空調機設置台数.value = ''+0;
      event.record.冷凍機設置台数.value = ''+0;
      event.record.空調機設置以外台数.value = ''+newFillingAirList.length;
      event.record.冷凍機設置以外台数.value = ''+newFillingFrzList.length;
      return event;
    }
  });
})();

「うまく反映されない」とは、計算結果が反映されないのか、どんな値でもフィールドへの反映自体がされないのか、どちらでしょうか?文体的におそらく後者かと思いますが、フィールドに反映されない件で考えられる原因として、このコード以外で同様にsubmitイベントを使用したカスタマイズ(プラグイン含む)がある場合、そちらのカスタマイズでreturn eventされていないか、APIの処理等がありうまく処理できていない等が考えられます(他にも自動計算フィールドだったりルックアップ対象の場合もフィールドの反映は無視されますが…)。

例えばchangeイベントにしてみる、showイベントにしてみる等で動作するかどうかを確認すると原因が絞りやすいかもしれません。

まずは原因を切り分けるということで、「submit時にフィールドに固定値を入れる」だけを試してみてはどうでしょうか?
その次に、変数を代入できるか、最後に配列の個数を代入できるかという感じで。
何かとイベントを取り合ってるのか?
フィールド形式やスペルとかの凡ミスなのか?
少しづつ調べてみるときっと解決できると思います。

mls-hashimoto様
井上 望様

御指摘の通りやってみます。
まずはお礼まで!
ありがとうございます。

またご報告しますので、よろしくお願いします!

_ 【自己解決】 _

submit.succesイベント時にREST API(PUT)でレコード更新

 

色々と試した結果プラグインとの競合が原因のようでした。

プラグインを外すことが出来なかったので、REST APIを使ってsubmit.succesイベントでそのレコード自体を更新することで値を反映させました。

お二方のアドバイスで原因特定できました。

ありがとうございます!

 

以下、実際のコードです。

(function() {
  'use strict';
  kintone.events.on(['app.record.create.submit.success','mobile.app.record.create.submit.success','app.record.edit.submit.success','mobile.app.record.edit.submit.success'], async (event) => {
    let gasId = event.record.ガス家電ID.value;
    let collect = event.record.ガス回収.value;
    let collectTable = event.record.ガス回収テーブル.value;
    let filling = event.record.ガス充填.value;
    let fillingTable = event.record.ガス充填テーブル.value;
    let type = event.record.工種.value;
    let collectCountAir = 0;
    let collectCountFrz = 0;
    let fillingAirList = [];
    let fillingFrzList = [];
    let newFillingAirList = [];
    let newFillingFrzList = [];
    
    if(collect === "あり"){
      collectTable.forEach(val => {
        if(val.value.回収引継.value[0] !== "回収引継"){
          if(val.value.回収機器種類.value === "空調機"){
            collectCountAir ++;
          }else{
            collectCountFrz ++;
          }
        }
      });
    }
    
    if(filling === "あり"){
      fillingTable.forEach(val => {
        if(val.value.充填機器種類.value === "空調機"){
          fillingAirList.push(val.value.型名充填.value + val.value.製造番号充填.value + val.value.充填場所.value);
        }else{
          fillingFrzList.push(val.value.型名充填.value + val.value.製造番号充填.value + val.value.充填場所.value);
        }
      });
      newFillingAirList =fillingAirList.filter((element, index) => fillingAirList.indexOf(element) === index);
      newFillingFrzList =fillingFrzList.filter((element, index) => fillingFrzList.indexOf(element) === index);     
    }
    let recordJson = '';
    if((type === "業務用エアコン工事" || type === "ルームエアコン工事")){
      recordJson += '{"空調機破棄台数":{"value":"'+collectCountAir+'"},"冷凍機破棄台数":{"value":"'+collectCountFrz+'"},"空調機整備台数":{"value":"'+0+'"},"冷凍機整備台数":{"value":"'+0+'"},"空調機設置台数":{"value":"'+newFillingAirList.length+'"},"冷凍機設置台数":{"value":"'+newFillingFrzList.length+'"},"空調機設置以外台数":{"value":"'+0+'"},"冷凍機設置以外台数":{"value":"'+0+'"}}'
    }else{
      recordJson += '{"空調機破棄台数":{"value":"'+0+'"},"冷凍機破棄台数":{"value":"'+0+'"},"空調機整備台数":{"value":"'+collectCountAir+'"},"冷凍機整備台数":{"value":"'+collectCountFrz+'"},"空調機設置台数":{"value":"'+0+'"},"冷凍機設置台数":{"value":"'+0+'"},"空調機設置以外台数":{"value":"'+newFillingAirList.length+'"},"冷凍機設置以外台数":{"value":"'+newFillingFrzList.length+'"}}'
    }
    
    let body = {
      'app':74,
      'id':gasId,
      'record':JSON.parse(recordJson)
    }
    
    let resp = await kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body);
  });
})();

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。