GlideDBFunctionCaseBuilder - グローバル

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:16分
  • GlideDBCaseStatementBuilder API を使用すると、一連の条件に基づいて SQL CASE ステートメントと値を返すことができます。

    この API は、 GlideElement - グローバル API の定義の一部として、またはテーブルのクエリを実行するときに使用できます。CASE ステートメントをビルドするには、まず、コンストラクター GlideDBFunctionCaseBuilder() を使用して GlideDBFunctionCaseBuilder オブジェクトをインスタンス化します。次に、一連の when() 呼び出しと then() 呼び出しと、それに続くオプションの 1 つの otherwise() 呼び出しを使用して、1 つ以上のケースを定義します。最後に、 build() メソッドを呼び出してビルダーをファイナライズし、完成したデータベース関数の case ステートメントを生成します。このステートメントは、直接使用することも、他の Glide 関数定義の一部として使用することもできます。

    必要なロール:admin、function_field_admin。

    GlideDBFunctionCaseBuilder:GlideDBFunctionCaseBuilder()

    GlideDBFunctionCaseBuilder オブジェクトをインスタンス化します。

    表 : 1. パラメーター
    名前 タイプ 説明
    なし

    この例では、GlideDBFunctionCaseBuilder オブジェクトをインスタンス化します。

    var caseBuilder = new GlideDBFunctionCaseBuilder();
    

    GlideDBFunctionCaseBuilder:build()

    条件のリストを終了し、最終的な CASE ステートメントを作成します。

    表 : 2. パラメーター
    名前 タイプ 説明
    なし
    表 : 3. 返される内容
    タイプ 説明
    文字列 完成したケースステートメント。

    次の例は、単純な case ステートメントを定義してビルドする方法を示しています。影響度フィールドの数値に応じて、4つの異なる文字列のいずれかが出力されます。

    const caseStatement = new GlideDBFunctionCaseBuilder()
        .whenCompare("impact", "'='", "'1'").then("'CRITICAL'")
        .whenCompare("impact", "'='", "'2'").then("'URGENT'")
        .whenCompare("impact", "'='", "'3'").then("'IMPORTANT'")
        .otherwise("'NOT IMPORTANT'")
        .build();
    
    const gr_incident = new GlideRecord("incident");
    gr_incident.addFunction(caseStatement);
    gr_incident.setLimit(10);
    gr_incident.query();
    while(gr_incident.next())  {
        gs.info("impact: {0}  case: {1}",
                [gr_incident.impact, gr_incident.getValue(caseStatement)]);
    }

    出力:

    *** Script: impact: 2  case: URGENT
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 3  case: IMPORTANT
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 3  case: IMPORTANT
    *** Script: impact: 3  case: IMPORTANT

    GlideDBFunctionCaseBuilder:それ以外の場合(文字列 exp)

    オプション。whenとthenの少なくとも1つの呼び出しのペアに続いて、otherwise()呼び出しを使用すると、when式のいずれも満たされない場合に出力する値を指定できます。

    表 : 4. パラメーター
    名前 タイプ 説明
    exp 文字列 出力する値。定数、フィールドへの参照、または別の Glide 関数を指定できます。
    表 : 5. 戻り値
    タイプ 説明
    GlideDBFunctionCaseBuilder ステートメントのビルドを続行するための fluent ビルダーオブジェクト。

    次の例は、単純な case ステートメントを定義してビルドする方法を示しています。

    const caseStatement = new GlideDBCaseFunctionBuilder()
        .whenEqual("impact", "'1'").then("'CRITICAL'") 
        .whenEqual("impact", "'2'").then("category")
        .whenEqual("impact", "'3'").then("length(short_description)")
        .otherwise("'NOT IMPORTANT'")
        .build();
    
    const gr_incident = new GlideRecord("incident");
    gr_incident.addFunction(caseStatement);
    gr_incident.setLimit(10);
    gr_incident.query();
    while(gr_incident.next())  {
          gs.info("impact: {0}  case: {1}",
                  [gr_incident.impact, gr_incident.getValue(caseStatement)]);
    }

    出力:

    *** Script: impact: 2  case: inquiry
    *** Script: impact: 2  case: Hardware
    *** Script: impact: 1  case:  CRITICAL
    *** Script: impact: 2  case: database
    *** Script: impact: 2  case: inquiry
    *** Script: impact: 3  case: 28
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 3  case: 17
    *** Script: impact: 3  case: 29

    GlideDBFunctionCaseBuilder - then(文字列 exp)

    when() メソッドに続いて、then() を使用すると、when() 式が満たされた場合に出力する値を指定できます。

    表 : 6. パラメーター
    名前 タイプ 説明
    exp 文字列 出力する値。定数、フィールドへの参照、または別の Glide 関数にすることができます。
    表 : 7. 戻り値
    タイプ 説明
    GlideDBFunctionCaseBuilder ステートメントのビルドを続行するための fluent ビルダーオブジェクト。

    次の例は、単純な case ステートメントを定義してビルドする方法を示しています。この場合、 then() 式は、文字列だけでなく、 length(short_description) などの他の Glide 関数の結果も出力する方法を示しています。

    const caseStatement = new GlideDBCaseFunctionBuilder()
        .whenEqual("impact", "'1'").then("'CRITICAL'") 
        .whenEqual("impact", "'2'").then("category")
        .whenEqual("impact", "'3'").then("length(short_description)")
        .otherwise("'NOT IMPORTANT'")
        .build();
    
    const gr_incident = new GlideRecord("incident");
    gr_incident.addFunction(caseStatement);
    gr_incident.setLimit(10);
    gr_incident.query();
    while(gr_incident.next())  {
          gs.info("impact: {0}  case: {1}",
                  [gr_incident.impact, gr_incident.getValue(caseStatement)]);
    }

    出力:

    *** Script: impact: 2  case: inquiry
    *** Script: impact: 2  case: Hardware
    *** Script: impact: 1  case:  CRITICAL
    *** Script: impact: 2  case: database
    *** Script: impact: 2  case: inquiry
    *** Script: impact: 3  case: 28
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 3  case: 17
    *** Script: impact: 3  case: 29

    GlideDBFunctionCaseBuilder - when(文字列 func)

    サポートされている「when」式の中で最も汎用性の高い when() メソッドを使用すると、満たす条件としてブール値のGlide関数を指定できます。

    表 : 8. パラメーター
    名前 タイプ 説明
    機能 文字列 評価時にブール値の結果を返す Glide 関数。可能な値:
    • GlideFunction:比較
    • glidefunction:および
    • glidefunction:または
    表 : 9. 戻り値
    タイプ 説明
    glideDBFunctionCaseBuilder ステートメントのビルドを続行するオブジェクト。

    次の例は、単純な case ステートメントを定義してビルドする方法を示しています。この場合、 when() メソッドを使用して、より複雑な比較式を指定します。式が true と評価された場合、対応する文字列が返されます。

    const caseStatement = new GlideDBFunctionCaseBuilder() 
        // if impact == 1 AND category == 'Software' then output "CRITICAL SOFTWARE" 
        .when("and(compare(impact, '=', '1'), compare(category, '=',  
    'Software')") 
            .then("'CRITICAL SOFTWARE'") 
        // if impact == 1 then output "CRITICAL OTHER" 
        .when("compare(impact, '=', '1')") 
            .then("'CRITICAL OTHER'") 
        // if impact == 2 OR category == 'Software' then output "URGENT" 
        .when("or(compare(impact, '=', '2'), compare(category, '=', 'Software')") 
            .then("'URGENT'") 
        // If none of the above expressions are true, output "NOT IMPORTANT" 
        .otherwise("'NOT IMPORTANT'") 
        .build(); 
     
    const gr_incident = new GlideRecord("incident");
    gr_incident.addFunction(caseStatement); 
    gr_incident.setLimit(20); 
    gr_incident.query(); 
    while(gr_incident.next())  { 
          gs.info("impact: {0}  category: {1}  case: {2}", 
                [gr_incident.impact, gr_incident.category, gr_incident.getValue(caseStatement)]); 
    }

    出力:

    impact: 2  category: inquiry  case: URGENT
    impact: 2  category: Hardware  case: URGENT
    impact: 1  category: inquiry  case:  CRITICAL OTHER
    impact: 2  category: database  case: URGENT
    impact: 2  category: inquiry  case: URGENT
    impact: 3  category: software  case: URGENT
    impact: 1  category: inquiry  case: CRITICAL OTHER
    impact: 1  category: inquiry  case: CRITICAL OTHER
    impact: 3  category: inquiry  case: NOT IMPORTANT
    impact: 3  category: inquiry  case: NOT IMPORTANT
    impact: 3  category: hardware  case: NOT IMPORTANT
    impact: 3  category: inquiry  case: NOT IMPORTANT
    impact: 3  category: hardware  case: NOT IMPORTANT
    impact: 3  category: inquiry  case: NOT IMPORTANT
    impact: 1  category: inquiry  case: CRITICAL OTHER
    impact: 1  category: software  case: CRITICAL SOFTWARE
    impact: 3  category: inquiry  case: NOT IMPORTANT
    impact: 3  category: inquiry  case: NOT IMPORTANT
    impact: 2  category: software  case: URGENT
    impact: 1  category: software  case: CRITICAL SOFTWARE

    GlideDBFunctionCaseBuilder:whenCompare(String exp1, String op, String exp2)

    比較ケース条件を開始します。

    表 : 10. パラメーター
    名前 タイプ 説明
    exp1 文字列 左の比較式。定数、フィールドへの参照、または別の Glide 関数にすることができます。
    op 文字列 引用符で囲まれた比較演算子。

    有効な値:

    • "'='"
    • "'<'"
    • "'>'"
    • "'<='"
    • "'>='"
    exp2 文字列 右比較式。定数、フィールドへの参照、または別の Glide 関数にすることができます。
    表 : 11. 戻り値
    タイプ 説明
    GlideDBFunctionCaseBuilder ステートメントのビルドを続行するための関数ビルダーオブジェクト。

    次の例は、単純な case ステートメントを定義してビルドする方法を示しています。この場合、 whenCompare() メソッドを使用して、影響度フィールドの値を数値と比較し、一致する場合に指定された文字列を出力します。

    const caseStatement = new GlideDBFunctionCaseBuilder()
        .whenCompare("impact", "'='", "'1'").then("'CRITICAL'")
        .whenCompare("impact", "'='", "'2'").then("URGENT")
        .whenCompare("impact", "'='", "'3'").then("IMPORTANT")
        .otherwise("'NOT IMPORTANT'")
        .build();
    
    const gr_incident = new GlideRecord("incident");
    gr_incident.addFunction(caseStatement);
    gr_incident.setLimit(10);
    gr_incident.query();
    while(gr_incident.next()) {
        gs.info("impact: {0} case: {1}",
                [gr_incident.impact, gr_incident.getValue(caseStatement)]);
    }

    出力:

    *** Script: impact: 2  case: URGENT
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 3  case: IMPORTANT
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 3  case: IMPORTANT
    *** Script: impact: 3  case: IMPORTANT
    

    GlideDBFunctionCaseBuilder:whenEqual(文字列 exp1, 文字列 exp2)

    whenCompare() と同様に、whenEqual() は等価性をチェックするための便利なメソッドです。whenCompare(leftExpression, '=', rightExpression) と等価です。

    表 : 12. パラメーター
    名前 タイプ 説明
    exp1 文字列 左の比較式。定数、フィールドへの参照、または別の Glide 関数を指定できます。
    exp2 文字列 右比較式。定数、フィールドへの参照、または別の Glide 関数を指定できます。
    表 : 13. 戻り値
    タイプ 説明
    GlideDBFunctionCaseBuilder ステートメントのビルドを続行するための関数ビルダーオブジェクト。

    次の例は、単純な case ステートメントを定義してビルドする方法を示しています。この場合、 whenEqual() メソッドを使用して、影響度フィールドの値を数値と比較し、一致する場合は指定された文字列を出力します。

    const caseStatement = new GlideDBFunctionCaseBuilder()
        .whenEqual("impact", "'1'").then("'CRITICAL'")
        .whenEqual("impact", "'2'").then("'URGENT'")
        .whenEqual("impact", "'3'").then("'IMPORTANT'")
        .otherwise("'NOT IMPORTANT'")
        .build();
    
    const gr_incident = new GlideRecord("incident");
    gr_incident.addFunction(caseStatement);
    gr_incident.setLimit(10);
    gr_incident.query();
    while(gr_incident.next())  {
        gs.info("impact: {0}  case: {1}",
                [gr_incident.impact, gr_incident.getValue(caseStatement)]);
    }

    出力:

    *** Script: impact: 2  case: URGENT
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 2  case: URGENT
    *** Script: impact: 3  case: IMPORTANT
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 1  case: CRITICAL
    *** Script: impact: 3  case: IMPORTANT
    *** Script: impact: 3  case: IMPORTANT