列数の多いテーブルを3つのテーブルに分割しました。
各テーブルに『書類No』を設け同じ行に同じNoを振りたいと思っています。
できていること
・画面表示後、各テーブルの1行目に書類No=1 を設定
・1つ目のテーブルで + をクリック、2つ目、3つ目でも + をクリックすると
各テーブルの2行目の 書類Noに、2が設定されます。
(3つのテーブルで + をクリックしないと連番が設定されない)
やりたいこと
・1つ目のテーブルで + をクリックしたら2つ目、3つ目に自動で行が挿入され
書類Noも連番が設定される
できていないこと
・1つ目のテーブルで + をクリックすると 2つ目のテーブルに
1つ目 書類No 2つ目 書類No
1 1
2 2
1
2
となってしまいます。
For文で余計なループをしていると思っていますが、どのように直せばいいのか
わかりません。直し方をご教授いただきたいと思います。
どうぞよろしくお願いいたします。
(function() {
'use strict';
var events=[
'app.record.create.show',
'app.record.edit.show',
'app.record.detail.show',
'app.record.create.change.receipts_1',
'app.record.edit.change.receipts_1',
'app.record.create.change.receipts_2',
'app.record.edit.change.receipts_2',
'app.record.create.change.receipts_3',
'app.record.edit.change.receipts_3'
];
kintone.events.on(events, function(event) {
const record = event.record;
let count=record.receipts_1.value.length;
for (var i = 0 ; i< count ; i++){
let gyoNo = i+1;
record.receipts_1.value[i].value.No.value = gyoNo;
record.receipts_2.value[i].value.Copy_No1.value = gyoNo;
event.record.receipts_2.value.push({
id:gyoNo,
value:{
Copy_No1:{type:'NUMBER',value : gyoNo},
Old_Num_Parent:{type:'SINGLE_LINE_TEXT',value : ''},
FileName:{type:'FILE',value : []},
MainContents:{type:'SINGLE_LINE_TEXT',value : ''},
}
})
}
return event;
});
//できていることのコード
/* kintone.events.on(events, function(event) {
var record=event.record;
//receipts tableのno欄を自動採番する
var count=record.receipts_1.value.length;
for (var i = 0 ; i < count ; i++){
record.receipts_1.value[i].value.No.value=i+1;
// record.receipts_2.value[i].value.Copy_No1.value=i+1;
// record.receipts_3.value[i].value.Copy_No2.value=i+1;
record.receipts_1.value[i].value.No.disabled=true; //編集不可にする
// record.receipts_2.value[i].value.Copy_No1.disabled=true; //編集不可にする
// record.receipts_3.value[i].value.Copy_No2.disabled=true; //編集不可にする
}
return event;
});
*/
})();
miya様
まず、「できていること」について、
3つめのテーブルに行が追加されないと番号が入らない、とのことですが、
コードが「テーブル1の行数分繰り返す」仕様になっているため、
全てのテーブルの行数が同じになるまでエラーになっているものと思われます。
「やりたいこと」について、方針としては
1.テーブル1の行追加イベントだけで実行されるように記載
2.テーブル1に行追加されたら採番、反映(テーブル1にだけ)
3.テーブル2の空の行配列を生成
4.行配列のNoにテーブル1用に採番した値を反映
5.空配列をテーブル2にpush
6.テーブル3にテーブル2と同じことをする
という感じになるかと思います。
行追加などのテーブル操作は下記が参考になるかと思います。
はじめようJavaScript第16回 kintone JavaScriptカスタマイズのプログラム実例を学ぼう④(テーブル操作)
参考になれば幸いです。
TO様
返事が遅くなり、申し訳ございません。
考え方、行追加のテーブル操作の参考例 ありがとうございます。
まずは、第16回を見ながらスペースフィールドにボタンを追加して
ほぼ希望通りに動くことを確認できました。
この場合だと、行を1→2→3と追加したけど
2と3の間に行を追加したいということができないので、
『+』をクリックした行追加イベントで、実行するように修正中です。
自力でできなかった場合、『行番号の更新関数』を利用するという考え方もありますが
もう少し頑張ってみます。
ありがとうございました。
ずいぶん遅くなりましたが、試行錯誤の結果なんとか自分のやりたいことが実現できましたので
もっといい方法があるかと思いますがコードを掲載させていただきます。
テーブルの +、-のボタンは非表示にしています。
スペースフィールドに『追加』/『削除』ボタンを配置し、行を追加すること、削除することはすぐにできましたが、
書類No1とNo2の間に行を追加して、書類No順に並べるというところに苦戦しました。
(function() {
'use strict';
kintone.events.on('app.record.create.show',(event) => {
//テーブルの1行目に初期値を設定
const record = event.record;
let gyoNo=record.receipts_1.value.length;
record.receipts_1.value[0].value.No.value=gyoNo;
record.receipts_2.value[0].value.Copy_No2.value=gyoNo;
record.receipts_3.value[0].value.Copy_No3.value=gyoNo;
// スペースフィールドに追加ボタンを設置
const addSpace = kintone.app.record.getSpaceElement('addSpace');
const addButton = document.createElement('button');
addButton.innerHTML = '追加';
addButton.onclick = addRow;
addSpace.appendChild(addButton);
// スペースフィールドに削除ボタンを設置
const deleteSpace = kintone.app.record.getSpaceElement('delSpace');
const deleteButton = document.createElement('button');
deleteButton.innerHTML = '削除';
deleteButton.onclick = deleteRow;
deleteSpace.appendChild(deleteButton);
return event;
});
// 行追加関数
const addRow = () => {
const record = kintone.app.record.get().record;
const gyoNo=record.receipts_1.value.length;
let addNo = record.Add_DocNum.value;
if(addNo === '' || addNo === undefined) {
addNo=gyoNo+1;
}
else {
addNo = replaceFullToHalf(record.Add_DocNum.value); //全角数字を半確に変換
}
record.Add_DocNum.value ='';
record.receipts_1.value.push({
value: {
'No' :{type: 'NUMBER',value : addNo},
'DocumentName' :{type: 'SINGLE_LINE_TEXT',value: ''},
'Count' :{type: 'NUMBER',value: ''}
}
});
record.receipts_2.value.push({
value:{
Copy_No2 :{type:'NUMBER',value : addNo},
Old_Num :{type:'SINGLE_LINE_TEXT',value : ''},
FileName :{type:'FILE',value : []},
}
});
record.receipts_3.value.push({
value:{
Copy_No3 :{type:'NUMBER',value : addNo},
CkBox_a :{type:'CHECK_BOX',value : []},
}
});
var tbl=record.receipts_1.value;
sort_Table(tbl,'No',false);
var tbl=record.receipts_2.value;
sort_Table(tbl,'Copy_No2',false);
var tbl=record.receipts_3.value;
sort_Table(tbl,'Copy_No3',false);
resetRowNo(record);
kintone.app.record.set({record: record});
};
// 行削除関数
const deleteRow = () => {
/*
略
*/
};
//テーブルのソート
const sort_Table = (table, orderBy, isDesc) => {
/*
略
*/
};
//書類Noの振り直し
const resetRowNo = (record) => {
record.receipts_1.value.forEach((row,i) =>{
row.value.No.value = i + 1;
});
record.receipts_2.value.forEach((row,i) =>{
row.value.Copy_No2.value = i + 1;
});
record.receipts_3.value.forEach((row,i) =>{
row.value.Copy_No3.value = i + 1;
});
kintone.app.record.set({record:record});
};
})();
system
(system)
クローズされました:
5
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。