サブテーブルをコピーする際の条件について

サブテーブルを同アプリ内でコピーする際の条件についてです。現在、サブテーブルの内容をそのままコピーするところまではできています。ソースは以下の通りです。今度は、発注残の値が1以上であった場合に、その列のデータをコピーするようにしたいのですが、そのような条件をつけるとしたら、どのように記載したらいいでしょうか。

(function() {
 ‘use strict’;

var jyutyu = {};

kintone.events.on(‘app.record.detail.show’, function(e) {
 //レコード情報取得
var record = e.record;
 //アプリのアプリの番号
jyutyu.APP_ID = 47;

//レコードコピーボタン要素作成
         var myIndexButton = document.createElement(‘button’);
         myIndexButton.id = ‘my_index_button’;
         myIndexButton.innerHTML = ‘クリックする’;
         myIndexButton.onclick = function() {
             window.confirm(‘データを登録します。’);
         };
 //ヘッダースペースにボタン要素を付加
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myIndexButton);

var hatyuNo = record.発注番号.value;

//サブテーブルオブジェクトを取得
var tableRecords = record.発注明細.value;

//サブテーブルの内容を配列に格納
var subtable = [];
for (var i = 0; i < tableRecords.length; i++) {
 subtable.push({
 value: {
 “コード”: { value: tableRecords[i].value[‘コード’].value },
 “商品名”: { value: tableRecords[i].value[‘商品名’].value },
 “発注数”: { value: tableRecords[i].value[‘発注数’].value }, “発注残”: { value: tableRecords[i].value[‘発注残’].value },  }
 });
}

var params = {
 “app”: jyutyu.APP_ID,
“record”: {
 “発注番号”: {
 “value”: ‘A’ + hatyuNo
 },     
“発注明細”: {
 “value”: subtable
    }
}
}
    kintone.api(‘/k/v1/record’, ‘POST’, params);
});
})();

 

 

gardenさん
cstapの瀧ヶ平です。

for (var i = 0; i < tableRecords.length; i++) {
 subtable.push({
 value: {
 "コード": { value: tableRecords[i].value['コード'].value },
 "商品名": { value: tableRecords[i].value['商品名'].value },
 "発注数": { value: tableRecords[i].value['発注数'].value },                      "発注残": { value: tableRecords[i].value['発注残'].value },  }
 });
}

の部分にif文を差し込み、

for (var i = 0; i < tableRecords.length; i++) {
  if(1 <= parseInt(tableRecords[i].value["発注残"].value)){
subtable.push({
  value: {
  "コード": { value: tableRecords[i].value['コード'].value },
  "商品名": { value: tableRecords[i].value['商品名'].value },
  "発注数": { value: tableRecords[i].value['発注数'].value },
  "発注残": { value: tableRecords[i].value['発注残'].value }
  }
  });
}
}

の様にすればよいかと思います。

瀧ヶ平さん

 

ご返信ありがとうございます。頂いたコードで条件に沿ったコピーができました。

ただ、発注残が0だった場合に、テーブルのデータはコピーされなかったのですが、

フィールドのデータはコピーされてしまいました。発注残が0だった場合、フィールド

のデータを含め何もコピーしないような条件を設定することはできるのでしょうか?

garden さん、

テーブルのデータで発注残がすべて「0」だった場合は、コピーレコードを作らない、ということでしょうか?

そうであれば、

         if(subtable.length==0){
            return;
         }

subtable.length の値が、subtable のデータの有無を教えてくれますから、

「0」判定して、「0」なら、POSTせずに 終わればよいと思います。

>発注残が0だった場合、フィールド

>のデータを含め何もコピーしないような

...の内容次第ですが。

 

 

 

 

 

kazuo urataさん

書き込みありがとうございます。何分初心者なもので、説明がうまくできず申し訳ありません。

テーブルのデータが複数行あったとして、複数行すべての列で発注残が「0」であった場合は、

フィールドのデータも含め何もコピーをしないようにしたいです。

なお、発注残が「0」の行と「1以上」の行が混在している場合には、「1以上」の列のデータと

フィールドのデータをコピーするようにしたいです。

仮にkazuo urataさんに記載していただいたソースで実現できるとして、私が書いたソースの

どこに記載をすればよいでしょうか。質問ばかりで申し訳ありません。

もしお手すきでしたら、教えていただければ幸いです。

garden さん、    
    
>テーブルのデータが複数行あったとして、複数行すべての列で発注残が「0」であった場合は、    
>フィールドのデータも含め何もコピーをしないようにしたいです。    
>なお、発注残が「0」の行と「1以上」の行が混在している場合には、「1以上」の列のデータと    
>フィールドのデータをコピーするようにしたいです。    
    
上記のご説明ありがとうございます。    
    
subtable.pushするfor文が終わった後の位置に置けばよいと思います。    
瀧ヶ平 さんの修正を忘れないでください。    
    
 for (var i = 0; i < tableRecords.length; i++) {   
  subtable.push({   
  value: {   
    
 .........   
  });   
 } // for文END   
       
  if(subtable.length==0){    
     return;
 }
    
つまり、テーブルの全行を読んで、結局、subtableにpushされた行がなければ、コピーレコード自体を作りません。    
subtableにpushされた行があれば、それでコピーレコードを作ります。    
フィールドのデータは、 params に書いてあればコピーされます。    
    
    
よろしくお願い致します。