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

12 - 派生列関数の作成

📖 タスクの概要

Workshop モジュールのオブジェクトテーブルの列は、開始オブジェクトセットのプロパティから選択されました。また、関数を使用して、リンクされた オブジェクトからのプロパティにアクセスし、ユーザーに関連する追加情報を提供することもできます。最終的には、アナリストにアラートの深刻度と影響を定性的に評価し、影響を受けた顧客に補償を提供する能力を与えるつもりです。アナリストは、例えば、出発と到着の遅延を分で表示することで、遅延の深刻さをすばやく評価したいかもしれません。

この演習では、オブジェクトテーブル(またはメトリックカードやその他のウィジェット)の新しい列を作成し、遷移的にリンクされたオブジェクトタイプからのプロパティを表示する方法の1つを示します。Workshop のオブジェクトテーブルインターフェースでは、テーブル内のオブジェクトセットに直接リンクされたオブジェクトからのプロパティや集計を参照できますが、カスタム値の連結や遷移的にリンクされたオブジェクトからのプロパティが必要な場合は、関数を作成する必要があります。

コードは、フライトアラートから [Example Data] Flight へ、[Example Data] Delay へと、オントロジーをたどってテーブルの各行に必要なデータを取得します。これにより、パフォーマンスを最適化するための高度な TypeScript メソッドが公開されますが、ここではコードの具体的な内容ではなく、関数の開発、テスト、公開、および使用プロセスに焦点を当てています。

コードは以下の 3 つのブロックで構成されます。

  1. 関数にオブジェクトが持つことができるプロパティ名を指示するTypeScript インターフェース定義。
  2. 遷移的にリンクされたフライトアラートに出発と到着の遅延値をマッピングする主要な関数。
  3. 追加したい新しい列を構築する「ヘルパー」関数。

🔨 タスクの説明

  1. 関数リポジトリに戻り、インポートステートメントのすぐ下に新しいコードブロックのスペースを作成します。

  2. 以下のインターフェース定義をコピーして貼り付け、コードエディタで左揃えになるようにします。

    interface delayCols {
    depDelay: Double;
    arrDelay: Double;
    }
    
  3. コードエディタの一番下に移動し、MyFunctions クラスを定義する最後の中括弧の前に以下のコードを挿入します。それにより、上記の関数との間隔が揃います。

    • 関数に独自の名前を付けてください(例: jmeierDelayColsyourNameDelayCols に変更し、JmeierFlightAlert への参照を あなたの オブジェクトタイプ API 名に置き換えます)。
    // この関数は、提供されたフライトアラートオブジェクトの配列を受け取り、上記のインターフェースで定義された遅延列との間のマップの約束を返します。
    // パフォーマンスを非同期関数を介して最適化するために、下記のプライベートヘルパーメソッド(setDelayInResult)を使用して、
    // 列自体を構築します。
    
    @Function()
    public async jmeierDelayCols(alerts: JmeierFlightAlert[]): Promise<FunctionsMap<JmeierFlightAlert, delayCols>> {
    const result = new FunctionsMap<JmeierFlightAlert, delayCols>();
    
    await Promise.all(alerts.map(a => this.setDelayInResult(result, a)));
    
    return result;
    }
    
    private async setDelayInResult(result: FunctionsMap<JmeierFlightAlert, delayCols>, alert: JmeierFlightAlert) {
    const delays = await alert.exampleDataFlight.get()!.exampleDataDelay.getAsync()
    
    result.set(alert, {
    depDelay: delays!.depDelay ?? 0,
    arrDelay: delays!.arrDelay ?? 0
    });
    }
    
  4. コードアシストが実行されている場合は、FunctionsMap が認識されないことにすぐに気付くでしょう。1 行目の Functions API インポートステートメントに手動で追加します。

    import { Function, Integer, Double, FunctionsMap } from "@foundry/functions-api";