注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

Workshop で関数を使用する

Workshop モジュール内では、関数をさまざまな方法で使用できます。関数ベースのアクションを使用すると、モジュールから複雑な一連のオブジェクト編集やライトバックを実行できます。メトリックカードなどのウィジェットでは、関数の出力をモジュール内に表示し、ユーザーの意思決定を支援できます。

Workshop の関数ベースのアクション

Ontology Manager で新しいアクションタイプを定義するときに、そのアクションタイプのルールのロジックの一部として関数を使用できます。これは一般に、オブジェクトの作成、オブジェクトの削除、オブジェクトの変更、リンクの追加、リンクの削除という組み込みのオプションよりも複雑なライトバックをアクションタイプで実現する場合に役立ちます。関数ベースのアクションタイプの定義方法について詳しくはこちら。

関数ベースのアクションタイプを定義すると、ほかのアクションタイプと同様に Workshop で使用できます。Workshop でアクションタイプを公開する方法について詳しくはこちら。

Workshop の関数ベースの変数

Workshop では、関数を使用してモジュール内の変数に値を設定することもできます。次の例では、数値変数を作成し、ある航空機の特定の空港へのフライト数を計算する関数の出力をその変数に設定する手順を説明します。

この例は説明用であり、記載されているすべての手順をそのまま実行できるとは限りません。Foundry のオントロジーは組織ごとにカスタマイズされているため、このチュートリアルを完了するために必要なオントロジーのオブジェクトにアクセスできない場合があります。

まず、Workshop モジュール内から呼び出す関数を確認します。以下に示すように、関数の名前は flightsForAircraftToDestination です。この関数は、ExampleAircraft オブジェクトと、目的地の空港の3文字の空港コードを表す文字列を入力として受け取り、その航空機の対象空港へのフライト件数を返します。

このページでは、関数の例を TypeScript v1、TypeScript v2、Python で示しています。関数の記述方法に対応するタブを選択します。続く Workshop の設定手順は3つすべてに適用されますが、Python 関数では入力が snake_case の名前で公開されます。詳しい比較については、TypeScript v1 と TypeScript v2 の比較を参照してください。

3つの実装は件数の計算方法が異なります。TypeScript v1 は .all() ですべてのリンクされたフライトを読み込み、結果の配列をメモリー内で絞り込みます。一方、TypeScript v2 と Python は、リンクされたオブジェクトセットにフィルターを適用し、オントロジーに件数を要求します。そのため、関数はすべてのフライトオブジェクトではなく、単一の数値を受け取ります。関数ベースの変数は入力が変わるたびに再計算されるため、サーバー側で件数を計算することで、フライト数が増えても変数の応答性を維持できます。

TypeScript v1 ではクラスメソッドの @Function() デコレーターで関数を登録し、TypeScript v2 ではファイルのデフォルトエクスポートとして登録し、Python では @function デコレーターで登録します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 import { Function, Integer } from "@foundry/functions-api"; import { ExampleAircraft } from "@foundry/ontology-api"; export class MyFunctions { @Function() public flightsForAircraftToDestination(aircraft: ExampleAircraft, destinationAirportCode: string): Integer { return aircraft.flights.all() .filter(flight => flight.destinationAirport === destinationAirportCode) .length } }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 import { Osdk } from "@osdk/client"; import { Integer } from "@osdk/functions"; import { ExampleAircraft } from "@ontology/sdk"; export default async function flightsForAircraftToDestination( aircraft: Osdk.Instance<ExampleAircraft>, destinationAirportCode: string ): Promise<Integer> { const result = await aircraft.$link.flights .where({ destinationAirport: { $eq: destinationAirportCode } }) .aggregate({ $select: { $count: "unordered" } }); return result.$count; }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from functions.api import function, Float from ontology_sdk.ontology.objects import ExampleAircraft, ExampleFlight @function def flights_for_aircraft_to_destination( aircraft: ExampleAircraft, destination_airport_code: str, ) -> Float: return ( aircraft.flights() .where(ExampleFlight.object_type.destination_airport == destination_airport_code) .count() .compute() )

次に、Workshop モジュール内でこの関数を接続する作業を始めます。目的は、モジュールから関数に入力を渡し、その関数の出力をウィジェット内に表示することです。

まず、画面左上の変数メニューから新しい数値変数を作成します。変数のタイトルの横にある + オプションを使用して新しい変数を作成し、Numeric を選択してから、以下に示すように関数を選択します。

Workshop で関数ベースの数値変数を作成する。

次に、この変数で使用する関数を検索して選択します。関数ピッカーを使用して関数を検索します。このリストに表示されるには、関数にリリースバージョンのタグが付いている必要があります。関数のバージョン管理について詳しくはこちら。

変数の設定で関数を検索する。

目的の関数を選択したら、その入力を設定します。以下の例では、aircraft 入力にはモジュール内で現在選択されている航空機オブジェクトが設定され、destinationAirportCode 入力には、アプリケーション内の別の場所で選択されたフライトの目的地の空港を取得する変数が設定されます。見つけやすくするため、必ず変数に名前を付けて変数フォルダーに配置してください。

関数ベースの変数の入力と再計算の動作を設定する。

関数ベースの変数は結果をキャッシュします。関数が同じ入力を受け取った場合、Workshop は新たに計算を実行するのではなく、キャッシュされた結果を返します。値を再計算する必要がある場合は、変数値の設定イベントを使用するか、変数の再計算の動作を設定して、再計算するタイミングを制御します。

OAuth ベースの関数

OAuth 2.0 アウトバウンドアプリケーションが設定されたソースを呼び出す関数は、Workshop で直接使用する場合、対話型の認可プロンプトを表示できません。これには、関数ベースの変数として使用する場合や、ウィジェットのコンテンツを設定するために使用する場合も含まれます。ユーザーがアウトバウンドアプリケーションをまだ認可していない場合、関数の実行に失敗します。Workshop から OAuth ベースのソースを使用するには、代わりに関数を関数ベースのアクションでラップします。これにより、アクションの実行時に認可プロンプトを表示できます。

この関数の出力をユーザーに表示するには、以下で説明するメトリックカードウィジェットを使用します。

関数を使用するメトリックカード

メトリックカードウィジェットを使用すると、作成者はモジュール内に重要な情報を表示できます。ここに表示する統計値を関数で生成すると便利な場合があります。メトリックカードの設定で、特定のメトリクスの値が上記の手順で定義した関数ベースの数値変数から設定されるようにします。

以下のスクリーンショットは、右側に関数ベースのメトリックカードを配置したモジュールを示しています。ユーザーが左側のガントチャートで別のフライトを選択すると、メトリックカードが動的に更新され、選択した航空機の目的地の空港へのフライト総数が表示されます。この場合、この航空機のヒューストン (IAH) へのフライトは合計680件です。

フライト履歴のガントチャートと、目的地の空港へのフライト680件を示す関数ベースのメトリックカードを表示する Workshop モジュール。