コンテンツにスキップ

columns.AddChoiceHash

概要

columnsオブジェクトの「AddChoiceHashメソッド」です。サーバスクリプトで項目の選択肢一覧を動的に設定することができます。AddChoiceHashを複数回呼ぶことによって、選択肢を追加します。1回目のAddChoiceHashが呼ばれるとサーバスクリプトの実行前にセットされていた選択肢は全てクリアされます。

制限事項

  1. 分類項目のみ使用できます。

前提条件

  1. 対象となる項目の選択肢一覧に、選択肢が1つ以上設定されている必要があります。
  2. サーバスクリプトの条件が「画面表示の前」、「行表示の前」の場合に有効となります。

構文

columns.[カラム名].AddChoiceHash(key, value);

パラメータ

パラメータvalueを省略した場合、AddChoiceHash(key, key)と解釈されます。

No パラメータ 型 必須 概要
1 key object ○ キー
2 value object - 値

戻り値

戻り値はありません。

使用例

下記の例では、分類AにTEST1~TEST5までの選択肢一覧を設定します。

valueを指定した場合

JavaScript
1
2
3
for (let i = 1; i <= 5; i++) {
    columns.ClassA.AddChoiceHash(i, 'TEST' + i);
}

この場合、分類項目の選択肢一覧を以下のように指定した場合と同じ表示結果を得られます。

valueを指定した場合と同じ結果になる選択肢一覧の設定

valueを省略した場合

JavaScript
1
2
3
for (let i = 1; i <= 5; i++) {
    columns.ClassA.AddChoiceHash('TEST' + i);
}

この場合、分類項目の選択肢一覧を以下のように指定した場合と同じ表示結果を得られます。

valueを省略した場合と同じ結果になる選択肢一覧の設定

サンプルコード

1. 選択肢を動的に制御

ある項目の入力値に応じて、選択肢を動的に制御します。

このサンプルでは、分類Aに指定された値に応じ、スクリプト内で定義した条件にあわせ分類Bの選択肢を設定しています。

テーブル設定

分類Aの設定

サンプルで使う分類Aの設定

分類Bの設定

サンプルで使う分類Bの設定

未選択状態

分類Bには何も表示されない

分類Aが未選択で、分類Bに何も表示されない状態

選択状態

分類Aの選択に合わせ選択肢が表示される

分類Aの選択に合わせて分類Bに選択肢が表示された状態

分類Aの選択に合わせて分類Bに選択肢が表示された状態(別の例)

JavaScript
// 1) 選択肢セット(共通定義)
const choiceSets = {
    G1: [
        { key: 1, value: '選択肢1' },
        { key: 2, value: '選択肢2' },
        { key: 3, value: '選択肢3' },
        { key: 4, value: '選択肢4' },
    ],
    G2: [
        { key: 2, value: '選択肢2' },
        { key: 4, value: '選択肢4' },
    ],
    G3: [
        { key: 4, value: '選択肢4' },
        { key: 5, value: '選択肢5' },
    ],
};
// 2) 選択肢セットキー
const classAToSetKey = {
    1: 'G1',
    2: 'G2',
    3: 'G3',
    4: 'G3',
};
// 3) メイン処理
// ClassB の選択肢をクリアしてから、ClassA に応じた選択肢をセット
columns.ClassB.ClearChoiceHash();
const setKey = classAToSetKey[model.ClassA];
const choices = setKey && choiceSets[setKey] ? choiceSets[setKey] : [];
for (const { key, value } of choices) {
    columns.ClassB.AddChoiceHash(key, value);
}
2. グループ・組織に所属するメンバーを選択肢に設定する

グループ、組織を選択肢として設定しておき、その選択にあわせ所属するメンバーを別の選択肢項目へ設定します。

このサンプルでは、以下のように制御しています。

  • 分類A:グループ → 所属メンバーを分類Bに設定

    テーブルの設定は以下のとおり。

    分類A

    サンプルで使う分類A(グループ)の設定

    分類B

    サンプルで使う分類B(所属メンバー)の設定

  • 分類C:組織 → 所属メンバーを分類Dに設定

    テーブルの設定は以下のとおり。

    分類C

    サンプルで使う分類C(組織)の設定

    分類D

    サンプルで使う分類D(所属メンバー)の設定

JavaScript
// グループ所属メンバーを取得して、選択肢にセット
const group = groups.Get(Number(model.ClassA));
if (group) {
    columns.ClassB.ClearChoiceHash();
    const members = group.GetMembers();
    for (const member of members) {
        // GetMembersではUserIdしか取れないので、users.Getでユーザ情報を取得
        const user = users.Get(member.UserId);
        columns.ClassB.AddChoiceHash(user.UserId, user.Name);
    }
}
// 部署所属メンバーを取得して、選択肢にセット
const dept = depts.Get(Number(model.ClassC));
if (dept) {
    columns.ClassD.ClearChoiceHash();
    const members = dept.GetMembers();
    for (const member of members) {
        columns.ClassD.AddChoiceHash(member.UserId, member.Name);
    }
}

対応バージョン

対応バージョン 内容
1.2.4.0 以降 機能追加
1.4.23.0 以降 パラメータvalueを省略可能に

関連情報