サブテーブルを同アプリ内でコピーする際の条件についてです。現在、サブテーブルの内容をそのままコピーするところまではできています。ソースは以下の通りです。今度は、発注残の値が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 に書いてあればコピーされます。
よろしくお願い致します。