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

7 - カスタム集計関数の作成

📖 タスクの概要

Workshop モジュールのユーザーに、キュー内の未解決アラートの割合を示すメトリックカードを提供したいと考えています。Workshop は数値集計をネイティブで計算・表示できますが、Workshop のフロントエンドでは、ビジネスロジックを使用してメトリックを計算する必要がある場合があります。

Workshop の機能を拡張し、必要な数値を提供する Function を追加できます。このタスクでは、MyFunctions クラスのメソッドとしてカスタム Function を追加します。

🔨 タスクの説明

  1. リポジトリ内の ../src/index.ts ファイルを開きます。

  2. MyFunctions クラス内に新しい関数用のスペースを作成する必要があります。8 行目の閉じ括弧の後にカーソルを置き、2 回エンターキーを押します。

  3. 次のコードブロックを挿入し、@Function() デコレータと public... 行が上の関数と整列するように注意してください。

    • また、jmeierPercentUnresolved を独自の名前に置き換えて認識できるようにし(例えば、jmeier を自分の名前に置き換え)、JmeierFlightAlertユーザーの API 名に置き換えます。
    • コード内のコメントでは、実行される操作が説明されています。
    @Function()
        // "alerts" というエイリアスのフライトアラートオブジェクトの配列を取り込み、
        // Double を返す
        public jmeierPercentUnresolved(alerts: JmeierFlightAlert[]): Double {
        
        // 配列に実際にオブジェクトが存在するか確認し、存在しない場合は "0" を返す
            if (alerts.length === 0) {
                return 0;
            }
        
        // 配列を巡回して、解決されたステータスがないアラートがあるたびに、
        // 変数("numberUnresolved")を 1 ずつ増やす
            let numberUnresolved = 0;
            for (const alert of alerts) {
                if (alert.status != "Resolved") {
                    numberUnresolved++;
                }
            }
        
        // 未解決のアラート数を元の配列の長さで割った値を返す
            return numberUnresolved/alerts.length;
        }
    
  4. Code Assist が実行されている場合は、Double の出力タイプが赤で下線が引かれており、コードに問題があることが示されています。簡単に言うと、リポジトリはインポートされていないタイプを見つけました。

    • Functions API のインポート文に Double を追加します:import { Function, Integer, Double } from "@foundry/functions-api";