GlideDBFunctionCaseBuilder - グローバル

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

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

    必要なロール:admin、function_field_admin

    GlideDBFunctionCaseBuilder - GlideDBFunctionCaseBuilder()

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

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

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

    var caseBuilder = new GlideDBFunctionCaseBuilder();
    

    GlideDBFunctionCaseBuilder - build()

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

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

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

    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 ステートメントの作成を続行するための流暢なビルダーオブジェクト。

    次の例は、単純な 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 ステートメントの作成を続行するための流暢なビルダーオブジェクト。

    次の例は、単純な 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(文字列関数)

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

    表 : 8. パラメーター
    名前 タイプ 説明
    機能 文字列 評価時にブール値の結果が返される Glide 関数。可能な値:
    • glidefunction:compare
    • glidefunction:および
    • glidefunction:または
    表 : 9. 返される内容
    タイプ 説明
    glideDBFunctionケースビルダー ステートメントの作成を続行するオブジェクト。

    次の例は、単純な 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(文字列 exp1, 文字列 op, 文字列 exp2)

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

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

    有効な値:

    • "'='"
    • "'<'"
    • "'>'"
    • "'<='"
    • "'>='"
    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