機能フィールド

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む13読むのに数分
  • Now Platform で機能フィールドと機能スクリプトを作成して、一般的なデータベースの変換や計算を実行できます。

    通常のフィールドは、データベースに値を格納します。機能フィールドでは、データは格納されませんが、データベースクエリの結果が表示されます。機能フィールドにはデータベース列が関連付けられていません。代わりに、機能フィールドは、他のフィールドと定数の簡単な計算に基づいて値を生成します。機能フィールドは、フォーム、リスト、クエリ条件、レポートなどで、システム内のその他のフィールドと同様に使用できます。

    警告:
    関数内で別の関数フィールドを参照する関数フィールドはエラーになります。関数フィールドは、データを保持することはなく、実行時に評価されません。

    ユースケース

    すべてのインシデントを、おそらく役に立たない 10 文字未満の短い説明で識別したいと考えています。

    すべての レコードをクエリして、特定の基準を満たすレコードを特定するのではなく、基準を満たすレコードのみを取得する機能フィールドまたは機能スクリプトを作成します。

    簡単な計算では、計算された値を格納するのではなく、機能フィールドまたは機能スクリプトを使用することをお勧めします。値は常に取得時に計算されます。機能フィールドを使用することのもう一つのメリットは、アプリケーションノードではなくデータベース サーバーによって変換が実行されることです。

    機能フィールドと計算されたフィールドの比較

    計算されたフィールドの値は、データベースに格納されます。機能フィールドまたは機能スクリプトの値はデータベースに格納されず、取得時に計算されます。機能フィールドの値は常に最新の状態になります。

    機能フィールドとビジネス ルールの比較

    ビジネスロジックが 1 つ以上の既存フィールドの単純な変換に基づいている場合は、機能フィールドまたはスクリプトを使用します。機能フィールドとスクリプトを使用すると、変換の結果を保存および維持することなくビジネスロジックを実装できます。

    機能フィールドとフィルター、クエリ文字列、および Rhino の比較

    文字列変換を実行するために Rhino を呼び出す代わりに、機能フィールドまたは機能スクリプトを使用して変換を実行することができます。機能フィールドと機能スクリプトはより効率的で、結果として格納または維持する必要がない、最新の値が得られます。

    機能フィールドの制限事項

    機能フィールドの計算はデータベースに格納されないため、一部の操作は関係がありません。
    • 機能フィールドを直接監査またはインデックス化することはできません。
      注:
      機能フィールドを通常のフィールドのようにインデックス化するには、機能で使用される個々のフィールドをインデックス化します。または、最高のパフォーマンスを得るには、機能で使用されるすべてのフィールドを含む複合インデックスを用意します。
    • 機能フィールドの値はデータベースに格納されないため、機能フィールドは暗号化できません。
    • 機能フィールドを通常のフィールドに変換することや、その逆はできません。
    • レポート UI で作成する機能フィールドは、ドット連結をサポートしていません。詳細については、「Configure function fields in Reporting (Reporting での機能フィールドの構成)」を参照してください。
    • セキュリティは、機能のコンポーネントとフィールドの計算値で評価されます。可視化で使用する場合、ユーザーに表示が許可されていない情報を含むセクションは非表示になります。
    • フィールド機能名は一意である必要があります。

    プラットフォーム機能の定義

    プラットフォーム機能は、次の 2 つの方法で定義できます。
    1. スクリプトで機能を構築して使用するには、次のアプリケーション プログラミング インターフェイス (API) を使用します。
      表 : 1. 機能 API
      API 一覧 説明
      スコープ対象 GlideDBFunctionBuilder SQL 操作を実行する機能を構築します。
      GlideRecord - addFunction(オブジェクト function) 機能を GlideRecord に適用します。
      GlideDBFunctionCaseBuilder - Global ケースステートメントを構築します。
    2. 次の例に示すように、機能の定義を保持するフィールドを作成します。

      機能フィールドの定義

      辞書エントリ [sys_dictionary] フォームで [関数フィールド] チェックボックスをオンにします。このアクションは、そのフィールドが値を格納するためのものではなく、機能を実行するためのものであることを指定します。

    glidefunction の操作

    機能フィールドでは、glidefunction:<operation> 構文を使用して次の操作を実行できます。フィールドを引数として指定する場合は、関連するフィールドにドット連結することができます。たとえば、cmdb_ci.name です。
    注:
    機能フィールドタイプは、glide 関数の戻り値のタイプと互換性がなければなりません。たとえば、整数、longint、文字列などです。戻り値のタイプをディクショナリタイプに変換できない場合は、例外が発生します。
    表 : 2. 機能フィールドの操作
    操作 説明
    add() 2 つの数値フィールドを入力として取得し、これらを加算して、結果をフィールド値として返します。

    さらにこの関数は、どちらの入力に対しても数値を取ります。数値は単一引用符または二重引用符で囲みます。

    glidefunction:add(child_incidents, parent_incident)

    インシデントに 5 つの子インシデントと 1 つの親インシデントがある場合は、6 を返します。

    可能な戻り値の型:10 進数、浮動小数点数、大きい整数、整数

    coalesce() 任意の数のカンマ区切りフィールドを入力として取得し、最初の空でない値を返します。 glidefunction:coalesce(closed_at, resolved_at, sys_updated_on)

    closed_at の値が空の場合、関数は値 [resolved_at] を返します。[resolved_at] の値も空の場合、関数は値 [sys_updated_on] を返します。

    戻り値の型:テキスト

    concat() 任意の数のカンマ区切りフィールドと定数を入力として取得し、入力を連結して、単一の文字列をフィールド値として返します。 glidefunction:concat(incident_number, '/', short_description)

    数値フィールドの値が「INC0001」で、short_description が「クライアントに新しいラップトップが必要」である場合には、「INC0001 /クライアントに新しいラップトップが必要」を返します。

    戻り値の型:テキスト

    datediff() 2 つの日時フィールドを入力として取得し、日時の差を日、分、および秒の単位で計算して、結果を期間フィールド値として返します。 glidefunction:datediff(closed_at, sys_created_on)

    作成日からクローズ日までのインシデントの期間を返します。結果の例:10 日、8 時間 23 分 11 秒

    戻り値の型:期間

    dayofweek() 日付フィールドと '1' (日曜日に週が開始) または '2' (月曜日に週が開始) の定数の、2 つの引数を取得します。曜日を表す整数値として結果を返します。

    dayofweek() 関数は UTC 日付を使用しますが、インスタンスのタイムゾーンに基づいて比較値を調整します。

    glidefunction:dayofweek(resolved_at, '1').

    resolved_at が水曜日に発生した場合、整数が 1 の場合は 4 を返し、整数が 2 の場合は 3 を返します。

    戻り値の型:整数

    distance_sphere() 2 つの場所を受け取り、その間の距離 (メートル) を返します。
    • glidefunction:distance_sphere('-0.189937', '51.473584', '80.206458', '25.767242')

      経度と緯度のペアの 2 つのセット間の距離を返します。

    • glidefunction:distance_sphere(u_location, '80.206458', '25.767242')

      u_location 位置情報ポイントフィールドと経度および緯度座標の間の距離を返します。

    • glidefunction:distance_sphere(location1, location2)

      location1 と location2 のジオポイントフィールド間の距離を返します。

    • glidefunction:divide(distance_sphere(location1, '-0.189937', '51.473584'), '1000')

      location1 ジオポイントフィールドとロンドンの間の距離 (キロメートル) を返します。

    戻り値のタイプ:小数

    divide() 2 つの数値フィールドを入力として取得し、1 つ目の数値を 2 つ目の数値で除算して、結果をフィールド値として返します。

    さらにこの関数は、どちらの入力に対しても数値を取ります。数値は単一引用符または二重引用符で囲みます。

    glidefunction:divide(u_num2,u_num1)

    num2 = 10 および num1 = 2 の場合は 5 を返します。

    可能な戻り値の型:10 進数、浮動小数点数、大きい整数、整数

    greatest() 2 つ以上の値を入力として受け取り、引数のリストの最大値を返します。 glidefunction:greatest(10,100,1000)

    1000 を返します

    可能な戻り数値の型:10 進数、浮動小数点数、大きい整数、整数

    この関数は、日付フィールドと文字列フィールドでも機能します。

    least() 2 つ以上の値を入力として受け取り、引数のリストの最小値を返します。 glidefunction:least(10,100,1000)

    10 を返します

    可能な戻り数値の型:10 進数、浮動小数点数、大きい整数、整数

    この関数は、日付フィールドと文字列フィールドでも機能します。

    length() 文字列フィールドを入力として取得し、フィールド長を文字数単位で計算して、結果をフィールド値として返します。 glidefunction:length(short_description)

    short_description =「This application is performing a test」の場合は 37 を返します。

    戻り値の型:整数

    multiply() 2 つの数値フィールドを入力として取得し、乗算を実行して、結果をフィールド値として返します。

    さらにこの関数は、どちらの入力に対しても数値を取ります。数値は単一引用符または二重引用符で囲みます。

    glidefunction:multiply(u_num1, u_num2)

    num1 = 8 および num_2 = 6 の場合は 48 を返します。

    可能な戻り値の型:10 進数、浮動小数点数、大きい整数、整数

    position() 2 つのテキストフィールド、または 2 つのテキストフィールドと 1 つの整数を入力として取得します。テキストフィールドの一方または両方を文字列にすることもできます。
    1. 2 つ目のものの最初のテキストフィールドの最初の文字列の位置を返します。
    2. 整数を指定した場合、この関数は整数の位置の後の 2 番目のテキストフィールドの位置を返します。

    最初のテキストフィールドが 2 番目に存在しない場合は、0 を返します (指定されている場合は整数の位置の後)。

    • glidefunction:position('e',short_description)

      short_description フィールドの値が「This computer is performing an upgrade」の場合は、12 を返します。

    • glidefunction:position('e',short_description,'14')

      short_description フィールドの値が「This computer is performing an upgrade」の場合は、19 を返します。

    戻り値の型:整数

    substring() テキストフィールドと 2 つの整数を入力として取得します。最初の整数の位置から始まり、2 番目の長さである文字列の最初のインスタンスを返します。 glidefunction:substring(short_description, '7', '2')

    short_description フィールドの値が「We're going to the store」の場合は、「go」を返します。

    戻り値の型:テキスト

    subtract() 2 つの数値フィールドを入力として取得し、1 つ目の数値から 2 つ目の数値を減算して、結果をフィールド値として返します。

    さらにこの関数は、どちらの入力に対しても数値を取ります。数値は単一引用符または二重引用符で囲みます。

    glidefunction:subtract(u_num1, u_num2)

    num1 = 8 および num_2 = 6 の場合は 2 を返します。

    可能な戻り値の型:10 進数、浮動小数点数、大きい整数、整数

    データベース機能を実行する機能フィールドの作成

    数学演算、フィールド長の計算、曜日の計算などのデータベース機能の結果を表示するフィールドを作成します。本番インスタンスに展開する前に、準本番インスタンスでテストしてください。

    始める前に

    必要なロール: personalize_dictionary または admin

    手順

    1. 移動先 すべて > システム定義 > ディクショナリ.
    2. [新規] をクリックします。
    3. [機能フィールド] を選択します。
    4. 以下のフォームのフィールドに入力します。
      表 : 3. 機能フィールドのフィールド
      フィールド 説明
      テーブル 機能フィールドが追加されるテーブルです。
      タイプ 文字列、数値、日付などのフィールドのタイプを指定します。
      列ラベル 列のラベルを定義します。
      列名 列の名前を定義します。列ラベルに基づいて自動的に作成されます。
      最大長 リターン値の最大長を定義します。
      機能フィールド 選択すると、数学演算、フィールド長計算、曜日計算など、データベース関数の結果を表示するフィールドが作成されます。

      新しい関数レコードが保存されると、チェックボックスをオフにしてそのフィールドを通常のフィールドにすることはできません。

      機能の定義 フィールドが実行する関数を定義します。

      glidefunction: で始まり、そのあとに実行される操作 (concat など)、関数のパラメーターが続きます。定数は単一引用符で囲む必要があります。

      たとえば、次の関数定義では、簡単な説明、空白、発信者名の順に示すフィールドが作成されます。

      glidefunction:concat(short_description, ' ', caller_id.name)

      注:
      関数パラメーターはドット連結をサポートします。「Dot-walking to data in related tables」を参照してください。
    5. [送信] をクリックします。
      辞書 エントリ [sys_dictionary] テーブルに戻ります。
    6. 機能フィールドを追加したテーブルに移動します。
    7. 機能フィールドをリストに追加します。

    タスクの結果

    その他のフィールドと同様に機能フィールドを使用します。たとえば、フォームに追加したり、フィルターで使用したり、条件ビルダーで使用したりします。

    機能の定義が無効な場合、機能フィールドが文字列タイプのフィールドのときは、想定される値の代わりに [無効な機能] というメッセージが表示されます。その他のフィールドタイプでは、空の値になります。