注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
此微件仅适用于文档模板。
对象上的函数微件允许您使用TypeScript函数来计算在从模板生成文档时插入的值。
您可以将函数与在生成时传递的输入参数连接。对象上的函数部分也可以嵌套在生成器部分中,例如部分生成器或表行生成器;这使您能够为对象集中的每个对象计算单独的值。我们建议在生成器中配置批处理函数。
批处理函数是接受对象集作为参数并为对象集中每个对象返回结果的函数。用户可以为嵌套在生成器部分内的对象上的函数部分配置批处理函数。
以下是配置了批处理函数的对象上的函数部分的示例:
使用批处理函数显著减少了从模板生成文档所需的时间。这是因为执行函数的开销:非批处理函数必须为对象集中每个对象执行一次,而批处理函数仅需为整个对象集执行一次。
在使用批处理函数配置对象上的函数部分时,必须使用Object set from generator
配置对象集参数。此模板输入指的是为周围生成器部分配置的对象集。
批处理函数可能除了对象集参数之外还有其他参数。
经验丰富的Foundry用户可能熟悉函数支持的属性。批处理函数类似于函数支持的属性。
批处理函数将对象集作为参数并返回一个FunctionsMap
,该映射将对象集中每个对象映射到相应的结果。有关更多详细信息,请参阅接受的函数输入和输出部分。
例如,考虑一个未批处理的函数,该函数接受一个航班警报对象,并根据其延迟计算警报的紧急程度:
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"; // 如果延误时间超过4小时,紧急程度为高 } else if (hoursDelayed! > 2) { return "Medium"; // 如果延误时间超过2小时且不超过4小时,紧急程度为中 } else { return "Low"; // 如果延误时间不超过2小时,紧急程度为低 } }
此函数的批处理版本接收一个FlightAlertWorkshopTutorial
对象集,并返回一个FunctionsMap<FlightAlertWorkshopTutorial, 字符串>
。返回的FunctionsMap
包含FlightAlertWorkshopTutorial
对象与其紧急程度的映射。
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
@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模板中使用:
有效的批处理函数必须至少有一个类型为ObjectSet<K>
的参数,并且必须有一个返回值类型为FunctionsMap<K, V>
。类型V
必须是以下接受的类型之一:
以集合或列表作为参数的函数目前不符合有效批处理函数的资格。
嵌入的对象上的函数部分也可以通过这种方式连接到生成器部分。