注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。
对象表微件被用于以表格格式显示对象数据。模块搭建者在配置对象表微件时可以使用以下特性:
下图显示了一个配置好的对象表展示航班警报数据的示例:
如果您的对象有一个属性存储指向图像的URL,您可以添加类型类hubble:icon
来显示图像,而不是在设置对象类型时选择的图标。此功能允许您显示象形图或图像以与数据一起显示。
对于对象表微件,核心配置选项如下:
列: 此部分决定将在对象表中显示的列。该配置选项在初始对象集填充后将更详细地展示属性类型。此外,特殊列类型允许模块搭建者显示链接对象、参数化URL链接、时间序列数据,以及通过函数即时生成的派生列。处于查看模式的用户还可以选择配置显示给他们的列。通过选择列标题旁边的箭头中的配置列,访客可以选择在对象表中显示的列及其顺序。查看下面的时间序列属性部分以获取有关时间序列数据的更多信息,以及函数支持的列部分以获取有关如何配置派生列的更多信息。
显示的列名称是一个文本字段,默认情况下是添加时对象类型的属性名称。 如果对象类型的属性名称后来在Ontology中更新,对象表中的显示列名称不会自动更改。
启用行内编辑: 启用后,此切换允许配置对象表内的单元格级编辑。请参阅下面的行内编辑(单元格级数据输出)部分以获取有关如何配置此高级功能的更多信息。
默认排序: 此设置允许对表格应用一个或多个默认排序。模块搭建者可以对表格中显示的可见属性类型或未显示的隐藏属性类型进行排序。如果未应用排序,数据将不进行排序。我们建议在必要时指定排序。
要保存您的列配置,请执行以下步骤以使用具有状态保存的字符串数组变量:
下面的教程引用了一个可能在您的Foundry环境中不可用的航班警报对象类型。请使用以下内容作为指南,然后使用您的Foundry实例中的可比较对象类型进行操作。要了解更多关于函数的信息,请参阅专门的函数文档。
要创建一个返回一个或多个函数支持的列的函数,您需要满足以下规格:
ObjectSet<ObjectType>
参数(并且可以选择包含其他输入参数)。此ObjectSet<ObjectType>
参数将使显示在表格中的对象能够传递到函数中,以便生成所需的派生列。注意,ObjectType[]
参数也可以在这里工作,但不推荐使用这种效率较低的选项。FunctionsMap<ObjectType, CustomType>
。这将使函数能够返回一个对象→自定义类型的映射,该自定义类型可以包含一个或多个字段。了解更多关于自定义类型的信息。一旦配置并发布了满足上述条件的函数,您将能够成功配置对象表配置中的“函数支持属性”列。请参阅下面的详细教程。
对象表微件支持通过函数即时计算的函数支持属性的显示。这为模块搭建者提供了相当大的灵活性,可以显示例如:
此示例使用函数支持的属性帮助用户查看和处理航班警报
票据的优先级。在这里,目标是检查一个名为延迟时间
(以小时为单位)的现有属性,并从该属性生成一个新的、函数支持的列,称为紧急性
。派生的紧急性
列将长时间延迟(超过4小时)标记为“高”紧急性,中等延迟(2到4小时之间)标记为“中”紧急性,较短的延迟(少于2小时)标记为“低”紧急性。此紧急性
派生属性应该使用户更容易快速扫描对象表并确定首先需要操作的警报。
要配置此函数支持的属性,第一步是配置一个函数,该函数接收预期的输入(例如,航班警报
对象的对象集)并返回对象表所需的函数支持属性的预期FunctionsMap
输出(例如,航班警报
对象的FunctionsMap
--> 紧急性字符串)。在此示例中,计算紧急性的逻辑将被硬编码到函数中,如下所示:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
@Function() public flightAlertCalculateUrgency(flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>): FunctionsMap<FlightAlertWorkshopTutorial, string>{ // 创建一个新的 FunctionsMap 实例,用于存储航班警报和紧急程度的对应关系 const map = new FunctionsMap<FlightAlertWorkshopTutorial, string>(); // 遍历所有的航班警报对象 flightAlerts.all().forEach(flightAlert => { // 获取延迟的小时数 var hoursDelayed = flightAlert.timeOfDelayHours // 根据延迟小时数判断紧急程度 if (hoursDelayed! > 4) { // 若延迟超过4小时,设置紧急程度为“高” map.set(flightAlert, "High") } else if (hoursDelayed! > 2) { // 若延迟超过2小时但不超过4小时,设置紧急程度为“中” map.set(flightAlert, "Medium") } else { // 若延迟不超过2小时,设置紧急程度为“低” map.set(flightAlert, "Low") } }); // 返回包含航班警报和其对应紧急程度的映射 return map; }
一旦此函数被发布,配置此Workshop模块中显示的Urgency
派生属性。首先,在Workshop模块的对象表配置面板中,选择添加列按钮,并选择添加函数支持的属性选项。
在列列表中出现的函数支持的属性选项中,点击“fx”函数图标,然后选择所需的函数。在此示例中,我们选择flightAlertCalculateUrgency函数。
接下来,确认函数版本,然后配置函数所需的输入。让我们选择使用运行时输入以仅传递当前显示在对象表中的对象,从而优化我们函数的性能。或者,您可以选择传入对象集变量(即支持对象表的相同对象集)。
使用运行时输入选项将动态传递仅当前显示在对象表中的对象(而不是整个对象)到派生列函数中,并提供更快的性能。额外的使用变量输入选项允许传入整个对象集变量(例如支持对象表的输入对象集变量),但可能导致性能较慢。
最后,让我们点击函数支持的属性列单元格,将此列重命名为更具描述性的名称,例如“Urgency”。
最终结果将是以下对象表,它可以即时计算新的派生Urgency列,并向用户展示这一重要的附加信息。
接下来,让我们演练一个更高级的示例,通过使用自定义返回类型创建一个生成多个函数支持属性的单一函数。了解更多关于自定义类型的信息。 使用单一函数返回多个函数支持属性有几个优点,包括提高性能和更清晰地组织相关派生属性代码。
在此示例中,使用一个接收ObjectSet<FlightAlerts>
的函数,遍历Departure Airport
链接以检索链接的Airport
对象,然后从该链接的Airport
对象返回三个属性。这将丰富对象表中显示的数据,以包括来自链接对象类型的相关信息。
为实现此目标,首先定义在此函数中使用的自定义类型。可能如下所示:
Copied!1 2 3 4 5
interface LinkedDepartureAirportProperties { airport: string; // 机场名称 city: string; // 所在城市 country: string; // 所在国家 }
然后,使用此自定义类型编写一个类似于下面的函数,该函数将返回三个基于函数的列,分别为 Airport
、City
和 Country
:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
@Function() public getColumnsFromLinkedDepartureAirport(flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>): FunctionsMap<FlightAlertWorkshopTutorial, LinkedDepartureAirportProperties> { // 获取所有关联机场并存储在字典中,以iata代码作为键 const iataToAirport: { [iata: string]: AirportObject } = {}; flightAlerts.searchAroundDepartureAirport().all().forEach(airport => { iataToAirport[airport.iata!] = airport; }); const map = new FunctionsMap<FlightAlertWorkshopTutorial, LinkedDepartureAirportProperties>(); flightAlerts.all().forEach(alert => { // 为此警报获取机场对象 const airport = iataToAirport[alert.departureAirportCode!]; // 如果未找到机场则跳过 if (!airport) { return; } map.set(alert, { airport: airport.airport!, city: airport.city!, country: airport.country!, }); }); return map; }
一旦上述函数被发布后,它可以被用于在Workshop中添加派生列。在对象表微件中添加一个新的函数支持属性
列,其中包含Flight Alert
对象,如同在上面的部分中所做的一样。
在列列表中出现的新列中,点击fx图标以选择将支持派生列的函数。在这个例子中,选择在本教程中先前定义的getColumnsFromLinkedDepartureAirport
函数。
接下来,配置选定函数的输入参数。在本例中,函数需要一个输入参数,即一个名为flightAlerts
的Flight Alert对象集。选择使用运行时输入选项,将当前显示在对象表中的对象传递给函数。
使用运行时输入选项将动态地只传递当前显示在对象表中的对象(而不是整个对象集)到派生列函数中,因此提供更快的性能。额外的使用变量输入选项允许传入整个对象集变量(例如支持对象表的输入对象集变量),但可能导致性能变慢。
一旦上述步骤完成,函数应成功运行并在对象表中显示三个预期的列:Departure Airport
、Departure City
和Departure Country
。我们可以在此停止,或编辑列的显示名称或列的顺序,以改善在应用程序中的呈现方式。
时间序列属性,包括由时间序列变换生成的数据,可以与常规属性一起在对象表中查看。时间序列属性是存储有时间戳值历史的对象属性。有关更多信息,请参阅Workshop中的时间序列属性。
在下面的例子中,Country
对象有一个常规字符串属性Name
,用于存储国家的名称,以及一个时间序列属性New Cases
,用于存储该国家观察到的新冠肺炎病例的每日历史。对象表在左侧的前两列中显示这两个属性,以及三个由New Cases
属性使用时间序列变换派生的时间序列:Case Acceleration
、Weekly Cases
和Total Cases
。每个时间序列列在左侧显示时间序列的最新观察值,并在右侧以折线图形式可视化时间序列的历史。
为了说明如何在对象表中配置时间序列属性列,我们将逐步讲解Weekly Cases
列的设置。屏幕右侧的面板是Weekly Cases
列的配置的上下部分。它们与列本身一起放在同一屏幕上,以便为配置和结果提供整体参考。
首先,我们需要使用时间序列变换生成每周新冠病例数的时间序列。时间序列变换对输入时间序列数据执行数学运算以产生新的输出时间序列。有关时间序列变换的更多信息,请参阅Workshop中的时间序列属性。
在这里,我们可以使用聚合变换来创建我们所需的时间序列。添加变换
按钮打开一个变换配置,我们可以设置以生成我们所需的时间序列。
接下来,我们可以使用时间序列总结器(红框)生成将在列中显示的数值。时间序列总结器为时间序列数据配置一个总结统计,即反映时间序列状态的值。在这里,我们使用一个单值总结器来生成我们想要显示的值,即最后的每周平均病例数。有关时间序列总结器的更多信息,请参阅Workshop中的时间序列属性。
然后我们可以配置值格式化(蓝框),在格式化数字标题下,以及条件格式化(绿框),在条件格式化标题下,以样式化该值的显示。值格式化控制值中数字的显示方式,而条件格式化使用基于值的规则系统更改显示颜色。在这种情况下,我们希望使用紧凑的表示法,并且如果每周平均新冠病例数超过100,则以红色显示该值。有关值和条件格式化的更多信息,请参阅Workshop中的格式化。
最后,我们可以配置折线图可视化,以显示我们的每周平均病例时间序列的历史。
时间范围选择器(红框)让我们可以指定我们希望可视化时间序列的时间窗口。有关时间范围的更多信息,请参阅Workshop中的时间序列属性。
我们还可以在条件格式化标题下添加条件格式化(蓝框),以使用基于值的规则系统更改折线图的颜色。有关条件格式化的更多信息,请参阅Workshop中的格式化。
最后,我们可以配置一个基线(绿框),以帮助解释折线图。有关配置基线的更多信息,请参阅Workshop中的时间序列属性。
启用行内编辑允许模块用户修改在对象表中显示的单元格级别数据,然后将这些编辑保存到对象数据中。编辑选项通过在Ontology中配置的操作定义,必须满足以下标准以与行内编辑兼容:
其他注意事项:
在配置对象表微件时,启用行内编辑的切换将在列配置部分出现在列列表下方。将此切换设置为true将启用行内编辑,并提示您选择在Ontology中已配置的操作以修改显示的对象类型。在下面的例子中,通过Flight Alert: Inline Editing操作启用了行内编辑。在操作选择器下,操作参数通过显示的下拉菜单映射到表列。您还可以将变量作为操作参数传递,这些参数将自动传递到操作中,而无需用户在表中编辑字段。
配置完成后,用户可以通过表页脚中可见的编辑表按钮进入编辑模式。您可以通过自定义按钮文本输入字段编辑此按钮文本。您还可以选择通过切换默认启用编辑模式选项,使表始终处于行内编辑模式。一旦进入编辑模式,用户可以编辑任何映射到操作参数的可修改列,如下所示。用户可以为函数支持的操作一次准备多达20行的编辑,为非函数支持的操作一次准备多达200行的编辑。任何准备的编辑都可以通过 撤销按钮(如下面截图中表的最左列所示)撤销。
一旦您完成编辑并准备提交更改,您可以按下表右下角的提交按钮。将出现一个确认对话框,您将再次按下提交来提交更改。如果您更喜欢使用单击提交选项,并希望禁用此确认对话框,您可以启用单击提交切换。
将自定义行操作添加到右键菜单允许用户在对象表中右键单击对象时运行操作或事件。
要将自定义行操作添加到右键菜单中,请启用自定义右键菜单切换,在右键菜单部分中。将此切换设置为true将提示您创建一个右键单击的对象,该对象输出表中当前右键单击的对象。然后,您可以通过选择添加项目向菜单中添加自定义项目。
当您选择添加项目时,将出现一个新菜单(如下面的截图所示),您可以自定义菜单项在右键菜单中的显示方式。您还可以通过从单击时下拉菜单中选择一个选项为菜单项分配一个操作。这允许您选择菜单项是触发操作还是事件。此外,您可以在操作或事件中使用您之前设置的右键单击的对象。
配置完成后,当您在对象表中右键单击一行时,您将看到您的更改。