何を実現したいのかを書きましょう
自動採番させるプログラム1(アクションボタンを使用)と
ラジオボタンの選択によって
値をクリアにして非表示させるプログラム2(テーブル有り)の
2つをカスタマイズ。
発生した問題やエラーメッセージを具体的に書きましょう
プログラム2のクリアにさせたい項目にテーブルが含まれており
テーブル以外をクリアさせるのは上手くいくのですが
プログラム2にテーブルをクリアさせるための行を追加すると
テーブルの値は希望通りクリアされてるのですが
アクションボタンによる自動採番がうまく動かなくなります。
自動採番の動きとしては、
アクションボタン「差替え」を押すと全フィールドをコピーし
自動採番させている「管理番号」数値フィールドも引き継ぐ。
新規レコード追加とレコード再利用ボタンのときは
新たに「管理番号」を採番する。というのが正常な動きなのですが
アクションボタン「差替え」を押しても
新規採番されてしまいます。
本来であれば、アクションボタン押した場合管理番号もコピーされて
フィールドに値が入っているはずなのですが
空白で値がコピーされないので
自動採番のプログラム2では
新規採番の条件と合致して、新規採番されています。
プログラム1のテーブルの値(飛行機)をクリアさせる行を
コメントアウトすると自動採番が正常に動きます。
アクションボタンを押したときの
コンソールのエラーメッセージは
edit.js:1544 Uncaught TypeError: Cannot read properties of null (reading ‘Qa’)
と出ますが、意味を理解できておりません。
テーブルをクリアする行が
アクションボタンの動きとどうして干渉しているのか・・・・?
どなたかご教示ください。
よろしくお願いします。
実行したコードをコピー&ペーストしましょう
/////////////// プログラム1 表示非表示と値クリア //////////////////////
(() =>{
'use strict';
//各種イベント取得
let checkEv = ['app.record.create.show',
'app.record.edit.show']; //追加・編集画面
let radiobuttonEv = ['app.record.edit.change.切符手配','app.record.create.change.切符手配']; //切符手配が変更されたとき ラジオボタン
//入力制限関数
function advance (event) {
const record = event.record;
const radiobutton2 = record['切符手配'].value;
const Fieldcodes2 = ['チケット手配者','飛行機','列車','兼松負担者','負担理由'];
//チケット手配無しが選択されたら情報を非表示
Fieldcodes2.forEach(function(fieldcode2){
if(radiobutton2 === '無'){
console.log('チケット無し:クリア');
record.飛行機.value = []; //飛行機はテーブルフィールドコード
record.チケット手配者.value = [];
record.兼松負担者.value = '';
record.兼松負担者.value = null;
record.負担理由.value = '';
record.負担理由.value = null;
kintone.app.record.setFieldShown(fieldcode2,false); //チケット手配無しの場合非表示
}else{
kintone.app.record.setFieldShown(fieldcode2,true);
}
});
return event;
}
//イベント発生
kintone.events.on(checkEv,advance);
kintone.events.on(radiobuttonEv,advance);
})();
////////////////////// プログラム2 自動採番 /////////////////////////////////
(() => {
'use strict';
let reuse;
let kanriNo;
kintone.events.on('app.record.create.show', function(event) { //追加画面イベント
const record = event.record;
reuse = event.reuse; //レコード再利用の時reuse=true
kanriNo = record['管理番号'].value;
console.log('追加画面管理番号'+kanriNo);
return event;
});
kintone.events.on('app.record.create.submit',function(event){ //保存時のイベント
const record = event.record;
console.log('保存イベント管理番号'+kanriNo);
console.log(record);
const body = { //クエリで取得データの指定 管理番号を降順で一番大きい数字を1件
app: event.appId,
fields:['管理番号'], //欲しいデーターの場所を指定
query:'order by 管理番号 desc limit 1' //「order by 管理番号 desc」で並び順を変える
};
return kintone.api(kintone.api.url('/k/v1/records',true),'GET',body).then(function(resp){
if(resp.records.length === 0) {
event.record['管理番号']['value'] = 1; //レコード1個目の時初期値設定
} else if (!kanriNo ||(reuse === true)){
console.log('新番号取得');
const newUid = Number(resp.records[0].管理番号.value) + 1;
event.record['管理番号']['value'] = newUid;
console.log('新番号'+newUid);
}else{
console.log('差替え');
}
return event;
}).catch(function(error){
console.log(error); //error
});
});
})();