用例开发WorkshopCore display widgets对象表

注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

对象表

对象表微件被用于以表格格式显示对象数据。模块搭建者在配置对象表微件时可以使用以下特性:

  • 显示单个或多个对象类型的数据。
  • 选择显示哪些列,包括使用时间序列属性的时间序列列,以及通过函数即时生成的派生列。
  • 通过一个或多个列进行排序。
  • 设置列宽和行高。
  • 显示在Ontology管理器中配置的条件格式和数字格式选项。
  • 允许在表格内进行单选或多选。
  • 行内编辑以启用表格内的单元格级数据输出。
  • 在表格内选择行时触发Workshop事件。
  • 在右键菜单中添加自定义行操作。

下图显示了一个配置好的对象表展示航班警报数据的示例:

object_table_reference_1

配置选项

如果您的对象有一个属性存储指向图像的URL,您可以添加类型类hubble:icon来显示图像,而不是在设置对象类型时选择的图标。此功能允许您显示象形图或图像以与数据一起显示。

对于对象表微件,核心配置选项如下:

  • 输入数据
    • 对象集: 这是对象表微件的输入变量,决定了将在对象表中显示的数据。这允许模块搭建者定义一个新的对象集变量或重用在此Workshop模块其他地方创建的现有对象集变量。
  • 列配置
    • 列: 此部分决定将在对象表中显示的列。该配置选项在初始对象集填充后将更详细地展示属性类型。此外,特殊列类型允许模块搭建者显示链接对象、参数化URL链接、时间序列数据,以及通过函数即时生成的派生列。处于查看模式的用户还可以选择配置显示给他们的列。通过选择列标题旁边的箭头中的配置列,访客可以选择在对象表中显示的列及其顺序。查看下面的时间序列属性部分以获取有关时间序列数据的更多信息,以及函数支持的列部分以获取有关如何配置派生列的更多信息。

      显示的列名称是一个文本字段,默认情况下是添加时对象类型的属性名称。 如果对象类型的属性名称后来在Ontology中更新,对象表中的显示列名称不会自动更改。

    • 启用行内编辑: 启用后,此切换允许配置对象表内的单元格级编辑。请参阅下面的行内编辑(单元格级数据输出)部分以获取有关如何配置此高级功能的更多信息。

    • 默认排序: 此设置允许对表格应用一个或多个默认排序。模块搭建者可以对表格中显示的可见属性类型或未显示的隐藏属性类型进行排序。如果未应用排序,数据将不进行排序。我们建议在必要时指定排序。

  • 右键菜单
    • 启用以CSV格式导出: 启用后,此切换允许用户从行的右键菜单中以CSV格式导出对象表数据。此功能支持导出函数支持的列和链接对象属性,并能够一次导出最多10,000行。
    • 启用以Excel格式导出: 启用后,此切换允许用户从行的右键菜单中以Excel格式导出对象表数据。请注意,此功能支持一次导出最多200,000行。
    • 自定义右键菜单: 此选项使模块搭建者能够配置行的右键菜单以进行自定义操作。请参阅下面的自定义右键菜单部分以获取有关如何配置此功能的更多信息。
  • 选择
    • 活动对象: 这是对象表中的两个输出变量之一,输出当前活动/高亮对象的对象集。此对象集可以在当前模块中的下游微件中使用。
    • 禁用活动对象自动选择: 默认情况下,表格中的第一行在加载时自动设置为活动对象。禁用此设置将阻止此操作,并在加载时导致活动对象为空。
    • 启用多选: 启用后,此切换允许在表格中选中/选择多个对象,并通过选定对象对象集变量输出。
    • 选定对象: 这是对象表中的两个输出变量之一,输出当前选中/选择的对象的对象集。此对象集可以在当前模块中的下游微件中使用。注意:只有在启用多选切换设置为true时,此输出变量才会被使用和填充。
    • 在活动对象选择时: 此选项使模块搭建者能够配置Workshop事件,以便在表格中选择行时触发(例如,使抽屉式导航显示更详细的对象视图)。
  • 显示与格式化
    • 每行显示的行数: 此数字控制每个表格行的高度。
    • 冻结列数: 此数字决定锚定在表格左侧的冻结列的数量,用户向右滚动时这些列将保持可见。
    • 合并多个对象类型: 此设置仅影响显示多个对象类型的表格。禁用后,每个对象类型将在其自己的标签中显示。启用后,所有对象类型将显示在一个表格中,并且在对象类型之间,共享显示名称和ID的属性类型将合并为一个列。请注意,当启用行内编辑设置为true时,此选项不可用。
    • 水平适应列: 启用后,列将自动调整大小以填满表格的当前宽度。
    • 启用窄标题: 启用后,表格标题将从50像素缩小到30像素。
    • 条件格式化颜色整个单元格: 启用后,条件格式化将为整个单元格着色。注意:正常属性类型的条件格式化在Ontology管理器中配置,函数支持的属性的条件格式化在对象表微件配置面板中配置。
  • 场景
    • 从场景加载数据: 选择用于对象表的数据加载场景。此输入还影响对象表中的对象出现及其顺序。
    • 与场景比较: 启用此切换以选择要比较数据的场景数组变量。这将通过在列中并排显示已修改的值,将表格中的数据与数组中的场景值进行比较。
    • 请参阅场景文档以获取更多信息。

保存列配置

要保存您的列配置,请执行以下步骤以使用具有状态保存的字符串数组变量:

  1. 确保启用状态保存
  2. 使用新的静态字符串数组变量启用变量支持的列可见性(数组变量可以为空)。
  3. 设置面板中为字符串数组变量添加一个外部ID,并确保已启用以供状态保存使用。

函数支持的列

下面的教程引用了一个可能在您的Foundry环境中不可用的航班警报对象类型。请使用以下内容作为指南,然后使用您的Foundry实例中的可比较对象类型进行操作。要了解更多关于函数的信息,请参阅专门的函数文档

概述

要创建一个返回一个或多个函数支持的列的函数,您需要满足以下规格:

  1. 函数的输入参数必须包括一个ObjectSet<ObjectType>参数(并且可以选择包含其他输入参数)。此ObjectSet<ObjectType>参数将使显示在表格中的对象能够传递到函数中,以便生成所需的派生列。注意,ObjectType[]参数也可以在这里工作,但不推荐使用这种效率较低的选项。
  2. 函数的返回类型必须是FunctionsMap<ObjectType, CustomType>。这将使函数能够返回一个对象→自定义类型的映射,该自定义类型可以包含一个或多个字段。了解更多关于自定义类型的信息。

一旦配置并发布了满足上述条件的函数,您将能够成功配置对象表配置中的“函数支持属性”列。请参阅下面的详细教程。

函数支持属性的功能

对象表微件支持通过函数即时计算的函数支持属性的显示。这为模块搭建者提供了相当大的灵活性,可以显示例如:

  • 计算两个或多个其他属性之间的和、差或其他数学运算。
  • 展示根据Workshop模块中其他地方的数据输入更新的统计模型的输出。
  • 显示来自链接对象的属性
  • 根据Workshop模块中其他地方的用户输入更改显示内容。

配置单个函数支持属性

此示例使用函数支持的属性帮助用户查看和处理航班警报票据的优先级。在这里,目标是检查一个名为延迟时间(以小时为单位)的现有属性,并从该属性生成一个新的、函数支持的列,称为紧急性。派生的紧急性列将长时间延迟(超过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; // 所在国家 }

然后,使用此自定义类型编写一个类似于下面的函数,该函数将返回三个基于函数的列,分别为 AirportCityCountry:

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函数。

derived_columns_configuration_1

接下来,配置选定函数的输入参数。在本例中,函数需要一个输入参数,即一个名为flightAlerts的Flight Alert对象集。选择使用运行时输入选项,将当前显示在对象表中的对象传递给函数。

使用运行时输入选项将动态地只传递当前显示在对象表中的对象(而不是整个对象集)到派生列函数中,因此提供更快的性能。额外的使用变量输入选项允许传入整个对象集变量(例如支持对象表的输入对象集变量),但可能导致性能变慢。

derived_columns_configuration_2

一旦上述步骤完成,函数应成功运行并在对象表中显示三个预期的列:Departure AirportDeparture CityDeparture Country。我们可以在此停止,或编辑列的显示名称或列的顺序,以改善在应用程序中的呈现方式。

derived_columns_configuration_3

时间序列属性

时间序列属性,包括由时间序列变换生成的数据,可以与常规属性一起在对象表中查看。时间序列属性是存储有时间戳值历史的对象属性。有关更多信息,请参阅Workshop中的时间序列属性

在下面的例子中,Country对象有一个常规字符串属性Name,用于存储国家的名称,以及一个时间序列属性New Cases,用于存储该国家观察到的新冠肺炎病例的每日历史。对象表在左侧的前两列中显示这两个属性,以及三个由New Cases属性使用时间序列变换派生的时间序列:Case AccelerationWeekly CasesTotal Cases。每个时间序列列在左侧显示时间序列的最新观察值,并在右侧以折线图形式可视化时间序列的历史。

time_dependent_properties_object_table

为了说明如何在对象表中配置时间序列属性列,我们将逐步讲解Weekly Cases列的设置。屏幕右侧的面板是Weekly Cases列的配置的上下部分。它们与列本身一起放在同一屏幕上,以便为配置和结果提供整体参考。

weekly_cases_example

时间序列变换

首先,我们需要使用时间序列变换生成每周新冠病例数的时间序列。时间序列变换对输入时间序列数据执行数学运算以产生新的输出时间序列。有关时间序列变换的更多信息,请参阅Workshop中的时间序列属性

在这里,我们可以使用聚合变换来创建我们所需的时间序列。添加变换按钮打开一个变换配置,我们可以设置以生成我们所需的时间序列。

object_table_transform_step

时间序列总结器

接下来,我们可以使用时间序列总结器(红框)生成将在列中显示的数值。时间序列总结器为时间序列数据配置一个总结统计,即反映时间序列状态的值。在这里,我们使用一个单值总结器来生成我们想要显示的值,即最后的每周平均病例数。有关时间序列总结器的更多信息,请参阅Workshop中的时间序列属性

然后我们可以配置值格式化(蓝框),在格式化数字标题下,以及条件格式化(绿框),在条件格式化标题下,以样式化该值的显示。值格式化控制值中数字的显示方式,而条件格式化使用基于值的规则系统更改显示颜色。在这种情况下,我们希望使用紧凑的表示法,并且如果每周平均新冠病例数超过100,则以红色显示该值。有关值和条件格式化的更多信息,请参阅Workshop中的格式化

object_table_summarizer_step

折线图

最后,我们可以配置折线图可视化,以显示我们的每周平均病例时间序列的历史。

时间范围选择器(红框)让我们可以指定我们希望可视化时间序列的时间窗口。有关时间范围的更多信息,请参阅Workshop中的时间序列属性

我们还可以在条件格式化标题下添加条件格式化(蓝框),以使用基于值的规则系统更改折线图的颜色。有关条件格式化的更多信息,请参阅Workshop中的格式化

最后,我们可以配置一个基线(绿框),以帮助解释折线图。有关配置基线的更多信息,请参阅Workshop中的时间序列属性

object_table_sparkline_step

行内编辑(单元格级别数据输出)

行内编辑的编辑选项通过在Ontology中配置的操作定义。有关操作的更多信息,请参阅操作教程。有关进一步的行内编辑注意事项,请参阅动作行内编辑文档

概要

启用行内编辑允许模块用户修改在对象表中显示的单元格级别数据,然后将这些编辑保存到对象数据中。编辑选项通过在Ontology中配置的操作定义,必须满足以下标准以与行内编辑兼容:

  • 操作应该使用单个“修改对象”规则或由函数支持。
  • 操作中修改的所有属性必须定义为“从参数”(不是“作为静态值”或“从对象参数的属性”)。
  • 属性参数必须是单一的、原始类型(例如,布尔值、整数或字符串,而不是对象引用或数组)。
  • 参数的可见性选项不应设置为“隐藏”(因为每个参数将与表中的可见列相关联)。

其他注意事项:

  • 如果参数定义了枚举值供用户选择,这些选项将被遵守,并在用户修改该参数时显示在单元格内的下拉菜单中。
  • 如果参数或操作具有验证标准(例如,给定的数字参数必须在1到10之间),这些验证标准将被强制执行。
  • 参数的显示选项在行内编辑期间将不被尊重(例如,文本输入与文本区域)。
  • 为了更容易的配置体验,操作参数ID应与表中显示的属性ID匹配。这将允许自动将操作参数映射到表列。
  • 为了一致的显示,多重通过用户参数应该使用Ontology中的多重通过值格式化映射到列/属性类型。有关值格式化的更多信息,请参阅Ontology文档

配置和使用行内编辑

在配置对象表微件时,启用行内编辑的切换将在列配置部分出现在列表下方。将此切换设置为true将启用行内编辑,并提示您选择在Ontology中已配置的操作以修改显示的对象类型。在下面的例子中,通过Flight Alert: Inline Editing操作启用了行内编辑。在操作选择器下,操作参数通过显示的下拉菜单映射到表列。您还可以将变量作为操作参数传递,这些参数将自动传递到操作中,而无需用户在表中编辑字段。

object_table_inline_editing_1

配置完成后,用户可以通过表页脚中可见的编辑表按钮进入编辑模式。您可以通过自定义按钮文本输入字段编辑此按钮文本。您还可以选择通过切换默认启用编辑模式选项,使表始终处于行内编辑模式。一旦进入编辑模式,用户可以编辑任何映射到操作参数的可修改列,如下所示。用户可以为函数支持的操作一次准备多达20行的编辑,为非函数支持的操作一次准备多达200行的编辑。任何准备的编辑都可以通过撤销按钮 撤销按钮(如下面截图中表的最左列所示)撤销。

object_table_inline_editing_2

一旦您完成编辑并准备提交更改,您可以按下表右下角的提交按钮。将出现一个确认对话框,您将再次按下提交来提交更改。如果您更喜欢使用单击提交选项,并希望禁用此确认对话框,您可以启用单击提交切换。

自定义右键菜单

概要

将自定义行操作添加到右键菜单允许用户在对象表中右键单击对象时运行操作或事件。

配置和使用行内编辑

要将自定义行操作添加到右键菜单中,请启用自定义右键菜单切换,在右键菜单部分中。将此切换设置为true将提示您创建一个右键单击的对象,该对象输出表中当前右键单击的对象。然后,您可以通过选择添加项目向菜单中添加自定义项目。

在Workshop中右键菜单的示例配置。

当您选择添加项目时,将出现一个新菜单(如下面的截图所示),您可以自定义菜单项在右键菜单中的显示方式。您还可以通过从单击时下拉菜单中选择一个选项为菜单项分配一个操作。这允许您选择菜单项是触发操作还是事件。此外,您可以在操作或事件中使用您之前设置的右键单击的对象。

为右键菜单添加操作的其他配置选项。

配置完成后,当您在对象表中右键单击一行时,您将看到您的更改。

在对象表微件上右键单击对象时出现的完全配置的右键菜单。