注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このウィジェットはドキュメントテンプレートでのみ利用可能です。
オブジェクト上の関数 ウィジェットでは、TypeScript関数を使用して、テンプレートからドキュメントが生成されるときに挿入される値を計算することができます。
関数を入力パラメーターと接続して、生成時にパラメーターを渡すことができます。また、オブジェクト上の関数 セクションは、セクションジェネレーターやテーブル行ジェネレーターなどのジェネレーターセクションにネストすることもできます。これにより、オブジェクトセットの各オブジェクトに対して別々の値を計算することができます。ジェネレーター内部でバッチ処理された関数を設定することをお勧めします。
バッチ処理された関数とは、オブジェクトセットを引数として受け取り、オブジェクトセット内の各オブジェクトに対する結果を返す関数です。ユーザーは、ジェネレーターセクション内にネストされたオブジェクト上の関数 セクションに対してバッチ処理された関数を設定することができます。
以下は、バッチ処理された関数を設定したオブジェクト上の関数 セクションの例です:
バッチ処理された関数を使用すると、テンプレートからドキュメントを生成する時間が大幅に短縮されます。これは、関数の実行にかかるオーバーヘッドコストが原因です。非バッチ処理関数は、オブジェクトセット内の各オブジェクトに対して1回ずつ実行する必要がありますが、バッチ処理関数はオブジェクトセット全体で1回だけ実行すればよいからです。
オブジェクト上の関数 セクションをバッチ処理された関数で設定する場合、オブジェクトセット引数はジェネレーターからのオブジェクトセット
で設定する必要があります。このテンプレート入力は、周囲のジェネレーターセクションで設定されたオブジェクトセットを参照します。
バッチ処理された関数には、オブジェクトセット引数以外の引数がある場合があります。
経験豊富な Foundry ユーザーは、関数を利用したプロパティに馴染みがあるかもしれません。バッチ処理された関数は、関数を利用したプロパティと同様のものです。
バッチ処理された関数は、オブジェクトセットを引数として取り、各オブジェクトを対応する結果にマッピングするFunctionsMap
を返します。詳細については、受け入れ可能な関数の入力と出力のセクションを参照してください。
たとえば、Flight Alert オブジェクトを取り込み、その遅延に基づいてアラートの緊急性を計算する非バッチ処理関数を考えてみましょう:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
@Function() public getAlertUrgency(flightAlert: FlightAlertWorkshopTutorial): string { const hoursDelayed = flightAlert.timeOfDelayHours if (hoursDelayed! > 4) { return "High"; } // 4時間以上の遅延の場合、緊急度は「High」 else if (hoursDelayed! > 2) { return "Medium"; } // 2時間以上4時間以下の遅延の場合、緊急度は「Medium」 else { return "Low"; } // 2時間以下の遅延の場合、緊急度は「Low」 }
この関数のバッチ版は FlightAlertWorkshopTutorial
オブジェクトのセットを入力とし、FunctionsMap<FlightAlertWorkshopTutorial, string>
を返します。返された FunctionsMap
は、FlightAlertWorkshopTutorial
オブジェクトとその緊急性をマッピングしています。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
@Function() public flightAlertCalculateUrgency(flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>): FunctionsMap<FlightAlertWorkshopTutorial, string> { const map = new FunctionsMap<FlightAlertWorkshopTutorial, string>(); flightAlerts.all().forEach(flightAlert => { const hoursDelayed = flightAlert.timeOfDelayHours // フライトの遅延時間が4時間以上の場合、緊急度を「高」と設定 if (hoursDelayed! > 4) { map.set(flightAlert, "High") } // フライトの遅延時間が2時間以上4時間未満の場合、緊急度を「中」と設定 else if (hoursDelayed! > 2) { map.set(flightAlert, "Medium") } // フライトの遅延時間が2時間未満の場合、緊急度を「低」と設定 else { map.set(flightAlert, "Low") } }); return map; }
非バッチ関数は、Notepad テンプレートで使用するために、以下のいずれかのタイプを返す必要があります:
有効なバッチ関数は、少なくとも 1 つの引数として ObjectSet<K>
タイプを持ち、戻り値のタイプとして FunctionsMap<K, V>
を持つ必要があります。タイプ V
は、以下の受け入れられるタイプのいずれかでなければなりません:
セットやリストを引数として持つ関数は現在、有効なバッチ関数として認められていません。
埋め込まれた Functions on Objects セクションもこの方法でジェネレーターセクションに接続できます。