グラフを作成するにあたって、例えば受付部署と共有部署のフィールドがあって、受付部署と共有部署がORで、尚且つ(AND)受付日がYYYY/MM/DDより以前のデータでグラフを書きたい場合に、思うように条件が書けませんでした。計算式フィールドを作って、フラグを設けようと思いましたが、組織選択フィールドのために、計算式が使えませんでした。このような場合は、どのように作るべきなんでしょうか?
これによると「(条件1 OR 条件2)AND 条件3」の設定ができるのは、条件1と条件2が同じフィールドを参照するときだけのようなので、ORの部分で「受付部署」「共有部署」と別のフィールドを参照するなら標準機能では無理っぽいです。
フラグの設置は以下のようなコードでできるかもしれません。
‘部署A’ および ‘部署B’ の所にはこのページでいう「組織名」ではなく「組織コード」を書きます。
(() => {
'use strict';
// トリガーとなるイベントを定義
const events = [
'app.record.create.show', // レコード追加画面の表示時
'app.record.edit.show', // レコード編集画面の表示時
'app.record.index.edit.show', // インライン編集の表示時
'app.record.create.change.受付部署', // レコード追加画面で「受付部署」の値が変わったとき
'app.record.create.change.共有部署', // レコード追加画面で「共有部署」の値が変わったとき
'app.record.create.change.受付日', // レコード追加画面で「受付日」の値が変わったとき
'app.record.edit.change.受付部署', // レコード編集画面で「受付部署」の値が変わったとき
'app.record.edit.change.共有部署', // レコード編集画面で「共有部署」の値が変わったとき
'app.record.edit.change.受付日', // レコード編集画面で「受付日」の値が変わったとき
'app.record.index.edit.change.受付部署', // インライン編集で「受付部署」の値が変わったとき
'app.record.index.edit.change.共有部署', // インライン編集で「共有部署」の値が変わったとき
'app.record.index.edit.change.受付日' // インライン編集で「受付日」の値が変わったとき
];
// 上記イベントが発生したときに実行される関数
kintone.events.on(events, (event) => {
// 現在のレコード情報を取得
const record = event.record;
// 「受付部署」の値を取得
const receptionDepartment = record['受付部署'].value;
// 「共有部署」の値を取得
const sharedDepartment = record['共有部署'].value;
// 「受付日」の値を取得し、Dateオブジェクトに変換
const receptionDate = new Date(record['受付日'].value);
// 「フラグ」を取得
const flagField = record['フラグ'];
// 「受付日」が、この日よりも前であることを絞り込み条件の一つにする
const targetDate = new Date('2024-10-05');
// 「受付部署」が'部署A' OR 「共有部署」が'部署B' AND 「受付日」がtargetDateよりも前 なら「フラグ」を立てる
if ((receptionDepartment === '部署A' || sharedDepartment === '部署B') && receptionDate < targetDate) {
// 条件を満たす場合、「フラグ」に'1'を設定
flagField.value = '1';
} else {
// 条件を満たさない場合、「フラグ」を空にする
flagField.value = '';
}
return event;
});
})();
早速のご返信ありがとうございます。標準機能では無理なんですね。
頂いた情報を元に、試行錯誤してみたいと思います。
まずは、お礼まで。
修正。
「受付部署」と「共有部署」は組織選択なので、値を配列として扱う必要がありました。
ついでに‘部署A’ および ‘部署B’には「組織名」を書けるようにしました。
「フラグ」は自動計算の代わりなので編集不可にしました。
(() => {
'use strict';
// トリガーとなるイベントを定義
const events = [
'app.record.create.show', // レコード追加画面の表示時
'app.record.edit.show', // レコード編集画面の表示時
'app.record.index.edit.show', // インライン編集の表示時
'app.record.create.change.受付部署', // レコード追加画面で「受付部署」の値が変わったとき
'app.record.create.change.共有部署', // レコード追加画面で「共有部署」の値が変わったとき
'app.record.create.change.受付日', // レコード追加画面で「受付日」の値が変わったとき
'app.record.edit.change.受付部署', // レコード編集画面で「受付部署」の値が変わったとき
'app.record.edit.change.共有部署', // レコード編集画面で「共有部署」の値が変わったとき
'app.record.edit.change.受付日', // レコード編集画面で「受付日」の値が変わったとき
'app.record.index.edit.change.受付部署', // インライン編集で「受付部署」の値が変わったとき
'app.record.index.edit.change.共有部署', // インライン編集で「共有部署」の値が変わったとき
'app.record.index.edit.change.受付日' // インライン編集で「受付日」の値が変わったとき
];
// 上記イベントが発生したときに実行される関数
kintone.events.on(events, (event) => {
// 現在のレコード情報を取得
const record = event.record;
// 「受付部署」と「共有部署」の値を取得
const receptionDepartments = record['受付部署'].value;
const sharedDepartments = record['共有部署'].value;
// 「受付日」の値を取得し、Dateオブジェクトに変換
const receptionDate = new Date(record['受付日'].value);
// 「フラグ」を取得
const flagField = record['フラグ'];
// 「受付日」が、この日よりも前であることを絞り込み条件の一つにする
const targetDate = new Date('2024-10-05');
// 「受付部署」に'部署A'が含まれているかチェック
const hasReceptionDepartmentA = receptionDepartments.some(dept => dept.name === '部署A');
// 「共有部署」に'部署B'が含まれているかチェック
const hasSharedDepartmentB = sharedDepartments.some(dept => dept.name === '部署B');
// 「受付部署」が'部署A' OR 「共有部署」が'部署B' AND 「受付日」がtargetDateよりも前 なら「フラグ」を立てる
if ((hasReceptionDepartmentA || hasSharedDepartmentB) && receptionDate < targetDate) {
// 条件を満たす場合、「フラグ」に'1'を設定
flagField.value = '1';
} else {
// 条件を満たさない場合、「フラグ」を空にする
flagField.value = '';
}
// 「フラグ」を編集不可にする
flagField.disabled = true;
return event;
});
})();
色々とアドバイスありがとうございます。頂いた内容も含めて、勉強します。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。