初めて質問させていただきます。
【テーブル外の日付フィールドA】【テーブル内の日付フィールドB】を比較して、新しい方の日付を【テーブル外の日付フィールドC】に表示させたいです。
Bがテーブル外の日付フィールドでしたら下記のコードで動作したのですが、テーブル内外での比較はできないのでしょうか?
なお、KintoneのJavaScriptは1週間ほど前から使い始めたばかりで、まだ慣れていません。
よろしくお願い致します。
利用したソースコード
(function() {
'use strict';
kintone.events.on('app.record.edit.submit', (event) => {
let record = event.record;
if (record.A.value < record.B.value) {
record.C.value = record.B.value;
} else {
record.C.value = record.A.value;
}
if (record.B.value === undefined) {
record.C.value = record.A.value;
}
return event;
});
})();
サブテーブルは配列というデータになっていて、サブテーブル上のフィールドの値は
record['サブテーブルのフィールドコード'].value[0].value.B.value; // 1行目のB
record['サブテーブルのフィールドコード'].value[1].value.B.value; // 2行目のB
このような形でインデックス番号というものを付けてアクセスします。
submit(保存時)イベントで比較をしようとする場合、何行目と比較するかの行番号を直接指定するか、サブテーブル内に「この行と比較する」といったフラグが必要かもしれません。
ただし、サブテーブル上のフィールドのchange(フィールドの値変更時)イベントには「event.changes.row」という変更した行を取得する機能があるので、
(() => {
'use strict';
kintone.events.on([
'app.record.create.change.B', 'app.record.edit.change.B'
], (event) => {
let record = event.record;
let row = event.changes.row;
if (record.A.value < row.value.B.value) {
record.C.value = row.value.B.value;
} else {
record.C.value = record.A.value;
}
if (row.value.B.value === undefined) {
record.C.value = record.A.value;
}
return event;
});
})();
このようにすれば「サブテーブル上のBを変更した時にサブテーブル外のAと比較」といった動作が可能です。
ただし、サブテーブル外のフィールドAを変更した時も同様に動作させる必要があるので、その場合はインデックス番号の指定やサブテーブル上のフラグが必要になります。
例えば最終行であれば
let lastRow = record['サブテーブルのフィールドコード'].value.length - 1;
record['サブテーブルのフィールドコード'].value[lastRow].value.B.value;
このように取得できます。
385013133091 様
ご回答ありがとうございます。
おかげさまで動作しました!
途方に暮れていたので本当に助かりました。ありがとうございます。
初回のレコード作成時(サブテーブルが0行の時)に [サブテーブル外のA]の日付が[サブテーブル外のC」に入らなかったので、一部追加してみました。
(初心者なので本当にこれで合っているのかは謎ですが、希望の動きはしてくれています)
(function() {
'use strict';
kintone.events.on([
'app.record.create.change.A', 'app.record.create.change.B', 'app.record.edit.change.B'
], (event) => {
let record = event.record;
let row = event.changes.row;
let lastRow = record['ライセンス_テーブル'].value.length - 1;
if (record.A.value < record['ライセンス_テーブル'].value[lastRow].value.B.value) {
record.C.value = record['ライセンス_テーブル'].value[lastRow].value.B.value;
} else {
record.C.value = record.A.value;
}
if (record['ライセンス_テーブル'].value.length === 0 ) {
record.C.value = record.A.value;
}
return event;
});
})();
system
(system)
クローズされました:
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。