グラフ作成時のレコード条件にANDとORを混在させる

グラフを作成するにあたって、例えば受付部署と共有部署のフィールドがあって、受付部署と共有部署が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 日が経過したので自動的にクローズされました。新たに返信することはできません。