機能フィールド
Now Platform で機能フィールドと機能スクリプトを作成して、一般的なデータベースの変換や計算を実行できます。
通常のフィールドは、データベースに値を格納します。機能フィールドでは、データは格納されませんが、データベースクエリの結果が表示されます。機能フィールドにはデータベース列が関連付けられていません。代わりに、機能フィールドは、他のフィールドと定数の簡単な計算に基づいて値を生成します。機能フィールドは、フォーム、リスト、クエリ条件、レポートなどで、システム内のその他のフィールドと同様に使用できます。
ユースケース
すべてのインシデントを、おそらく役に立たない 10 文字未満の短い説明で識別したいと考えています。すべての レコードをクエリして、特定の基準を満たすレコードを特定するのではなく、基準を満たすレコードのみを取得する機能フィールドまたは機能スクリプトを作成します。
簡単な計算では、計算された値を格納するのではなく、機能フィールドまたは機能スクリプトを使用することをお勧めします。値は常に取得時に計算されます。機能フィールドを使用することのもう一つのメリットは、アプリケーションノードではなくデータベース サーバーによって変換が実行されることです。
機能フィールドと計算されたフィールドの比較
計算されたフィールドの値は、データベースに格納されます。機能フィールドまたは機能スクリプトの値はデータベースに格納されず、取得時に計算されます。機能フィールドの値は常に最新の状態になります。
機能フィールドとビジネス ルールの比較
ビジネスロジックが 1 つ以上の既存フィールドの単純な変換に基づいている場合は、機能フィールドまたはスクリプトを使用します。機能フィールドとスクリプトを使用すると、変換の結果を保存および維持することなくビジネスロジックを実装できます。
機能フィールドとフィルター、クエリ文字列、および Rhino の比較
文字列変換を実行するために Rhino を呼び出す代わりに、機能フィールドまたは機能スクリプトを使用して変換を実行することができます。機能フィールドと機能スクリプトはより効率的で、結果として格納または維持する必要がない、最新の値が得られます。
機能フィールドの制限事項
- 機能フィールドを直接監査またはインデックス化することはできません。注:機能フィールドを通常のフィールドのようにインデックス化するには、機能で使用される個々のフィールドをインデックス化します。または、最高のパフォーマンスを得るには、機能で使用されるすべてのフィールドを含む複合インデックスを用意します。
- 機能フィールドの値はデータベースに格納されないため、機能フィールドは暗号化できません。
- 機能フィールドを通常のフィールドに変換することや、その逆はできません。
- レポート UI で作成する機能フィールドは、ドット連結をサポートしていません。詳細については、「Configure function fields in Reporting (Reporting での機能フィールドの構成)」を参照してください。
- セキュリティは、機能のコンポーネントとフィールドの計算値で評価されます。可視化で使用する場合、ユーザーに表示が許可されていない情報を含むセクションは非表示になります。
- フィールド機能名は一意である必要があります。
プラットフォーム機能の定義
- スクリプトで機能を構築して使用するには、次のアプリケーション プログラミング インターフェイス (API) を使用します。
表 : 1. 機能 API API 一覧 説明 スコープ対象 GlideDBFunctionBuilder SQL 操作を実行する機能を構築します。 GlideRecord - addFunction(オブジェクト function) 機能を GlideRecord に適用します。 GlideDBFunctionCaseBuilder - Global ケースステートメントを構築します。 - 次の例に示すように、機能の定義を保持するフィールドを作成します。
辞書エントリ [sys_dictionary] フォームで [関数フィールド] チェックボックスをオンにします。このアクションは、そのフィールドが値を格納するためのものではなく、機能を実行するためのものであることを指定します。
glidefunction の操作
glidefunction:<operation> 構文を使用して次の操作を実行できます。フィールドを引数として指定する場合は、関連するフィールドにドット連結することができます。たとえば、cmdb_ci.name です。| 操作 | 説明 | 例 |
|---|---|---|
| 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 つの場所を受け取り、その間の距離 (メートル) を返します。 |
戻り値のタイプ:小数 |
| 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 つの整数を入力として取得します。テキストフィールドの一方または両方を文字列にすることもできます。
最初のテキストフィールドが 2 番目に存在しない場合は、0 を返します (指定されている場合は整数の位置の後)。 |
戻り値の型:整数 |
| 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 進数、浮動小数点数、大きい整数、整数 |
データベース機能を実行する機能フィールドの作成
数学演算、フィールド長の計算、曜日の計算などのデータベース機能の結果を表示するフィールドを作成します。本番インスタンスに展開する前に、準本番インスタンスでテストしてください。
始める前に
手順
タスクの結果
機能の定義が無効な場合、機能フィールドが文字列タイプのフィールドのときは、想定される値の代わりに [無効な機能] というメッセージが表示されます。その他のフィールドタイプでは、空の値になります。