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

16 - オントロジー編集関数の作成

📖 タスクの概要

ユーザーの Workshop モジュールは、アラートの割り当てや(再)優先順位付けについて意思決定を支援するデータや可視化を豊富に提供しています。次に、アラートの重大度に関する質的評価に基づいて、補償バウチャーや顧客への手紙を提供できるようにしましょう。

一部の組織では、パイプラインやバックグラウンド Function にエンコードされた一連のルールに基づいて、バウチャープロセスを完全に自動化することができます。ただし、私たちの実装では、アナリストが 3 つの可能な重大度レベルから選択できるようにし、それぞれが乗客のフライヤーステータスプロパティを考慮したビジネスロジックに基づいてバウチャーアクションをトリガーします(例えば、Platinumステータスの乗客は、Silverステータスの乗客よりも大きなバウチャーを受け取ることが予想されます)。バウチャーの決定は、その後、乗客の status プロパティに格納され、下流でのさらなるアクションが可能となります。

📚 推薦文献(約2分間の読み物)

Function でオントロジーのデータを変更したい場合(一時的な、プレゼンテーションレベルの変更ではない場合)、@OntologyEditFunction() デコレータといくつかの他の要件を使用する必要があります。以下の手順を明確にするために、こちらでこれらの要件について読んでください。

🔨 タスクの説明

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

  2. MyFunctions クラスの下部(ただし、まだ内部)に新しい Function 用のスペースを確保します。

  3. 下記のコードブロックを挿入し、@Function() デコレータと public... 行が上の Function と揃うようにします。また、以下の置換を行います。

    • jmeierAlertVoucher: jmeier 関数名を自分の名前に置き換えます。
    • JmeierFlightAlert: この API 名をあなたのフライトアラートオブジェクトタイプの API 名に置き換えます。
    • jmeierPassenger: これを、OMA に表示されるあなたのフライトアラートとあなたの乗客オブジェクトタイプ間のリンクの API 名に置き換えます。下の拡大可能な画像を参照してください。

  4. コードアシストが実行されている場合は、@OntologyEditFunction が認識されないことにすぐに気付くでしょう。以前の演習では、不足しているタイプを手動で Functions API インポートステートメントに追加しましたが、コードアシスト機能を使用して自動的に追加することもできます。

    • 赤く下線が引かれたテキストにマウスオーバーし、下の画像に示すように左側の黄色い電球(💡)アイコンをクリックします。
  5. ポップアップメニューから import '@OntologyEditFunction' from module "foundry/functions-api" を選択します。デコレータがインポートステートメントに追加されます。

    • コードアシストが実行されていない場合や、💡 アイコンが表示されない場合は、手動で OntologyEditFunction を Functions API インポートステートメントに追加してください。

    @OntologyEditFunction()
            // 入力は 1) "alert" というエイリアスのついた単一のフライトアラートと 2) "severity" 評価です。OntologyEditFunctions では、
            // "void" タイプを返す必要があります。
            public jmeierAlertVoucher(alert : JmeierFlightAlert, severity : string): void {
    
                // 与えられたアラートに関連付けられた乗客を取得します。ここでの jmeierPassenger は、リンクタイプの
                // API 名であり、オブジェクトタイプの API 名ではありません。OMA を参照して、乗客とフライトアラート
                // オブジェクトタイプ間のリンクの API 名を取得してください。
                const passengers = alert.jmeierPassengers.all();
    
                // 各乗客について、フライヤーステータス + 与えられた "severity" の組み合わせを評価し、ビジネスロジックに
                // 従って "status" プロパティにバウチャー決定をプッシュします。
                for (const passenger of passengers) {
    
                    if (severity === "Max" && ((passenger.flyerStatus === "Platinum") || (passenger.flyerStatus === "Gold"))) {
                        passenger.status = "Provide $500 Travel Voucher";
                    }
                    else if (severity === "Med" && ((passenger.flyerStatus === "Platinum") || (passenger.flyerStatus === "Gold")) 
                                || severity === "Max" && passenger.flyerStatus === "Silver") {
                        passenger.status = "Provide $250 Travel Voucher";
                    }
                    else if (severity === "Min" && ((passenger.flyerStatus === "Platinum") || (passenger.flyerStatus === "Gold")) 
                                || severity === "Med" && passenger.flyerStatus === "Silver") {
                        passenger.status = "Provide Upgrade Voucher";
                    }
    
                    // 上記の基準を満たさない顧客(例: ステータスが "None" の場合)は、手紙を受け取ります。
                    else passenger.status = "Provide Customer Letter";
                }
    
            }