注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
オブジェクトにおける関数ウィジェットでは、TypeScript 関数を使用して、テンプレートからドキュメントを生成するときに挿入する値を計算できます。このウィジェットはドキュメントテンプレートでのみ利用可能です。
関数には、生成時に渡される入力パラメーターを接続できます。オブジェクトにおける関数セクションは、セクションジェネレーターやテーブル行ジェネレーターなどのジェネレーターセクション内にネストすることもできます。これにより、オブジェクトセット内のオブジェクトごとに個別の値を計算できます。ジェネレーター内ではバッチ関数を設定することを推奨します。

バッチ関数は、オブジェクトセットを引数として受け取り、オブジェクトセット内のオブジェクトごとに結果を返す関数です。ジェネレーターセクション内にネストされたオブジェクトにおける関数セクションでは、バッチ関数を設定できます。
次に、バッチ関数を設定したオブジェクトにおける関数セクションの例を示します。

バッチ関数を使用すると、テンプレートからドキュメントを生成するのにかかる時間が大幅に短縮されます。これは、関数の実行に伴うオーバーヘッドによるものです。非バッチ関数はオブジェクトセット内のオブジェクトごとに1回実行する必要がありますが、バッチ関数はオブジェクトセット全体に対して1回だけ実行されます。
オブジェクトにおける関数セクションにバッチ関数を設定する場合、入力として受け取るオブジェクトセットを「ジェネレーターからのオブジェクトセット」にすることができます。「ジェネレーターからのオブジェクトセット」とは、外側のジェネレーターセクションが生成処理の対象とするオブジェクトセットを指します。バッチ関数には複数の入力を指定できます。バッチ関数がネストされたジェネレーター内にある場合、入力として受け取るオブジェクトセットは、最大1個のジェネレーターで生成されたものに限られます。ネストされたジェネレーターまたは最上位のジェネレーターのいずれかであり、両方を使用することはできません。バッチ関数に複数のオブジェクトセットの関数入力がある場合、「ジェネレーターからのオブジェクトセット」に設定されたすべてのオブジェクトセットは、同じ外側のジェネレーターセクションから取得する必要があります。
バッチ関数は、オブジェクトセット引数に加えて、ほかの引数を受け取ることもできます。
バッチ関数は、Workshop の関数ベースのプロパティと同様に動作します。
バッチ関数は、オブジェクトセットを引数として受け取り、オブジェクトセット内の各オブジェクトを対応する結果にマッピングする FunctionsMap を返します。詳細については、受け入れ可能な関数の入力と出力のセクションを参照してください。
たとえば、Flight Alert オブジェクトを受け取り、その遅延に基づいてアラートの緊急度を計算する非バッチ関数を考えます。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13@Function() public getAlertUrgency(flightAlert: FlightAlertWorkshopTutorial): string { const hoursDelayed = flightAlert.timeOfDelayHours if (hoursDelayed! > 4) { return "High"; } else if (hoursDelayed! > 2) { return "Medium"; } else { return "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@Function() public flightAlertCalculateUrgency(flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>): FunctionsMap<FlightAlertWorkshopTutorial, string> { const map = new FunctionsMap<FlightAlertWorkshopTutorial, string>(); flightAlerts.all().forEach(flightAlert => { const hoursDelayed = flightAlert.timeOfDelayHours if (hoursDelayed! > 4) { map.set(flightAlert, "High") } else if (hoursDelayed! > 2) { map.set(flightAlert, "Medium") } else { map.set(flightAlert, "Low") } }); return map; }
セクションジェネレーターとテーブル行ジェネレーターのオブジェクトセットには、テンプレート生成時に上限が適用されます。テンプレート生成時、バッチ関数は、指定された入力オブジェクトセットのサイズを制限した結果である中間オブジェクトセットを使用して実行されます。
Notepad テンプレートで使用するには、非バッチ関数は次のいずれかのデータ型を返す必要があります。
有効なバッチ関数には、ObjectSet<K> 型の引数が1つ以上必要であり、戻り値は FunctionsMap<K, V> 型である必要があります。型 V は、次に示す受け入れ可能なデータ型のいずれかである必要があります。
セットまたはリストを引数として受け取る関数は、現在、有効なバッチ関数としては認められません。

埋め込みのオブジェクトにおける関数セクションも、この方法でジェネレーターセクションに接続できます。