使用信息表定义菜单栏项
除菜单实体外,您还可以使用 MenuEntry 数据形状来创建用于定义菜单项的信息表。信息表中的每一行是菜单栏上的一个项。您可以使用 PrimaryNavDataSecondaryNavData 小组件属性将信息表绑定到 Mashup Builder 中的菜单栏。要显示主要和次要导航组的项,请创建两个服务,用于返回已进行格式设置的信息表:一个用于主要项,另一个用于次要项。当菜单包含多个导航级别时,可以使用 parentMenuIdMenuId 字段定义项的层次结构。没有 parentMenuId 值的菜单在菜单栏上显示为顶级项。
1. 在 Composer 中,打开事物、事物模板或任何其他类型的实体,然后打开“服务”选项卡。
2. 单击“添加”,为菜单栏创建一个新服务。
3. “服务信息”下,键入服务的名称,然后单击“保存并继续”
4. 在代码编辑器中,使用 MenuEntry 数据形状定义一个新信息表。
或者,使用可用的代码片断:
a. 在左侧窗格中,展开“片段”,然后在“代码片段”下展开 Infotable
b. 选择用于创建信息表的 Create Infotable from datashape 代码片段。将打开一个对话框。
c. 在对话框中,选择 MenuEntry 数据形状,然后单击“插入代码片段”。代码片段即会添加到代码编辑器中。
5. 定义菜单项,方法是使用数据形状为每个信息表字段添加具有值的行。用于定义行的语法如下所示:
<infotable_name>.AddRow(<Row_Object>);
6. 服务定义完成后,单击“完成”,然后单击“保存”以保存对实体所做的更改。
* 
单击“执行”,预览从数据服务返回的输出信息表。
下表列出了 MenuEntry 数据形状的字段定义。
字段定义
说明
基本类型
主键
linkDestination
设置作为链接目标的项类型。您可以将值设置为 URLMashup
STRING
isDefault
在运行时查看菜单栏时,将自动显示该项。只能将一个项配置为默认值。
BOOLEAN
parentMenuId
项将分配到的父菜单项的 ID。将此字段留空,该项将显示为顶级菜单。
STRING
imageURL
将用作项图标的媒体实体的名称。
IMAGELINK
linkTarget
用于控制当 linkType 设置为 Hyperlink 时链接目标的打开方式。
Popup - 将在弹出式浏览器窗口中打开链接。
New - 将在新浏览器选项卡中打开链接。
Replace - 将替换当前选项卡上的页面。
Empty - 将替换当前窗口。
STRING
description
包含菜单项说明的可选字段。
STRING
menuId
菜单项的唯一标识符。
STRING
linkType
支持的值为:HyperlinkMashupMenuLogout
* 
ThingWorx 9.3.5 或更高版本支持 Logout
STRING
title
菜单栏上的链接项所显示的文本。
STRING
示例数据服务
以下数据服务显示了创建固定和动态菜单项方法的示例。
在第一部分中,使用 CreateInfoTableFromDataShape() 方法创建信息表:
let result = Resources["InfoTableFunctions"].CreateInfoTableFromDataShape({
infoTableName: "InfoTable",
dataShapeName: "MenuEntry"
});
信息表存储在名为 result 的变量中。接下来,使用 MenuEntry 数据形状定义顶级菜单项。可以使用 AddRows() 信息表方法以 JSON 对象的形式传递数据字段值。以下部分定义了多个静态菜单项。
result.AddRow({
menuId: 'topMenu',
linkType: 'Menu',
});
result.AddRow({
linkDestination: 'OverviewMashup',
isDefault: true,
parentMenuId: 'topMenu',
imageURL: 'Dashboard',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'idOverview',
linkType: 'Mashup',
title: 'Overview'
});
result.AddRow({
linkDestination: '',
isDefault: false,
parentMenuId: 'topMenu',
imageURL: 'TableView',
linkTarget: '', // (Popup, Mashup, New)
description: '',
menuId: 'idLogs',
linkType: 'Menu',
title: 'Logs'
});
result.AddRow({
linkDestination: 'AllSitesMashup',
isDefault: false,
parentMenuId: 'idLogs',
imageURL: 'SiteIcon',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'idAllSites',
linkType: 'Mashup',
title: 'All Sites'
});
result.AddRow({
linkDestination: 'Site1Mashup',
isDefault: false,
parentMenuId: 'idLogs',
imageURL: 'SiteIcon',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'idSite1',
linkType: 'Mashup',
title: 'Site 1'
});
result.AddRow({
linkDestination: 'Site2Mashup',
isDefault: false,
parentMenuId: 'idLogs',
imageURL: 'SiteIcon',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'idSite2',
linkType: 'Mashup',
title: 'Site 2'
});
result.AddRow({
linkDestination: 'Site3Mashup',
isDefault: false,
parentMenuId: 'idLogs',
imageURL: 'SiteIcon',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'idSite3',
linkType: 'Mashup',
title: 'Site 3'
});
result.AddRow({
linkDestination: '',
isDefault: false,
parentMenuId: 'topMenu',
imageURL: 'DevicesIcon',
linkTarget: '', // (Popup, Mashup, New)
description: '',
menuId: 'idDevices',
linkType: 'Menu',
title: 'Devices'
});
result.AddRow({
linkDestination: 'SearchMashup',
isDefault: false,
parentMenuId: 'topMenu',
imageURL: 'Search',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'idSearch',
linkType: 'Mashup',
title: 'Search'
});
也可通过使用数据来动态生成菜单项。以下代码片段用于为使用常用事物模板定义的事物生成菜单项。这些项链接到与每个事物相关联的主混搭,并显示在名为 Devices 的菜单下。
使用 GetImplementingThings() 方法检索由 DevicesTemplate 事物模板定义的事物的列表。可以将信息表结果存储在变量中。
let thingsList = ThingTemplates["DevicesTemplate"].GetImplementingThings();
* 
返回的信息表使用 RootEntityList 数据形状实现。
要为每个事物生成菜单项,请将返回的信息表转换为数组,然后在每个项上循环:
thingsList.rows.toArray().forEach(row => {
result.AddRow({
linkDestination: row.homeMashup,
isDefault: false,
parentMenuId: 'idDevices',
imageURL: 'DeviceIcon',
linkTarget: 'Mashup', // (Popup, Mashup, New)
description: '',
menuId: 'id' + row.name,
linkType: 'Mashup',
title: row.name
});
});
可以为 JSON 对象中的每个事物属性值传递一个变量。下图显示了执行数据服务后的信息表输出:
信息表包含 14 个项,其中包括顶级菜单项和五个通过循环 GetImplementingThings() 方法的结果动态生成的项。下图显示了运行时菜单栏小组件上的菜单项。
项已分组并显示在 Devices 下。单击链接时,将打开当前事物的相应主混搭。
这对您有帮助吗?