分析Notepadウィジェット関数

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

関数

オブジェクトにおける関数ウィジェットでは、TypeScript 関数を使用して、テンプレートからドキュメントを生成するときに挿入する値を計算できます。このウィジェットはドキュメントテンプレートでのみ利用可能です。

関数には、生成時に渡される入力パラメーターを接続できます。オブジェクトにおける関数セクションは、セクションジェネレーターやテーブル行ジェネレーターなどのジェネレーターセクション内にネストすることもできます。これにより、オブジェクトセット内のオブジェクトごとに個別の値を計算できます。ジェネレーター内ではバッチ関数を設定することを推奨します。

notepad_functions_on_objects_section

バッチ関数

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

次に、バッチ関数を設定したオブジェクトにおける関数セクションの例を示します。

notepad_widgets_batched_function

バッチ関数を使用すると、テンプレートからドキュメントを生成するのにかかる時間が大幅に短縮されます。これは、関数の実行に伴うオーバーヘッドによるものです。非バッチ関数はオブジェクトセット内のオブジェクトごとに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 テンプレートで使用するには、非バッチ関数は次のいずれかのデータ型を返す必要があります。

  • ブール値
  • Date
  • Double
  • Float
  • Integer
  • Long
  • 文字列

バッチ関数に必要な入力と出力

有効なバッチ関数には、ObjectSet<K> 型の引数が1つ以上必要であり、戻り値は FunctionsMap<K, V> 型である必要があります。型 V は、次に示す受け入れ可能なデータ型のいずれかである必要があります。

  • ブール値
  • Date
  • Double
  • Float
  • Integer
  • Long
  • 文字列

セットまたはリストを引数として受け取る関数は、現在、有効なバッチ関数としては認められません。

ウィジェットのプロパティ

  • バッチ/非バッチ: バッチ関数と非バッチ関数のどちらを設定するかを選択できます。関数ウィジェットがジェネレーターセクション内にネストされている場合にのみ表示されます。
  • 関数: 実行する関数です。上記でバッチの選択肢が選択されている場合、バッチ関数のみが利用可能になります。
  • 関数バージョン: 実行する関数のバージョンです。
  • 関数のインプット: 関数に渡す値です。利用可能なパラメーターは、選択した関数によって定義されます。
  • 関数の結果: 実行後に関数によって生成される出力です。結果は、プレーンテキストや Markdown などのさまざまな形式でパースできます。Markdown のパースは、現在、非バッチ関数でのみサポートされています。

オブジェクトにおける関数ウィジェットによって生成された Markdown プレビューを表示する Notepad。

テンプレートの設定

  • 関数のインプット: 選択した関数に応じて、期待されるさまざまな入力値をパラメーターでテンプレート化できます。

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