自定义基于角色的 UI 功能 - 属性可见性
目标
您希望自定义可供站点、组织或容器管理器通过基于角色的可见性特征进行管理的 UI 组件集 (操作或其他 UI 元素)。
背景
基于角色的 UI 功能使管理员能够优化呈现给用户的操作的数量,让用户无需看到其角色不需要或用不到的操作,从而避免不必要的困扰。最初,这种支持只针对容器管理器 (特别是项目经理)。它已扩展到称为 profiles 的概念,这可在站点或组织级别设置操作可见性。
站点管理员、组织管理员或容器管理员可以指定对定义的操作具有可见性的用户。对于站点和组织管理员,这可通过配置文件来完成。配置文件可以在 Site -> Profiles or Org -> Profiles 中创建。定义的操作将以其默认设置显示,管理员可以选择隐藏这些操作。然后,管理员可以指定属于此配置文件的参与者 (用户、组、组织)。配置文件的所有成员都将具有该可见性。如果一个成员归属于多个配置文件,则会提供最大的可见性。
在容器级别,管理员可以根据用户 roles 指定可见性。这些角色中的任何人都将具有指定的可见性。容器级角色可见性将覆盖成员可能为参与者的任何配置文件。
有关配置文件和基于角色的可见性管理的详细信息,请参阅
关于按角色配置操作可见性。
范围/适用性/假设
• 将启用基于角色的可见性管理功能,即,将首选项 com.ptc.netmarkets.roleAccess.enabled 设置为 true。自定义操作可在此功能处于关闭状态时执行,但是结果将在此功能打开后才会出现在 UI 中。
• 自定义者可以使用此功能来管理预设 UI 组件和自定义的 UI 组件。
预期结果
通过角色配置可见性以及配置配置文件时,将针对管理员用户显示可以管理的 UI 组件列表。管理员无法管理未包括在此列表中的任何 UI 组件的可见性。
作为自定义者,您可以自定义管理员可用的 UI 组件列表。您可以:
• 将 UI 组件添加到列表中,
• 从列表中移除 UI 组件,
• 指定 UI 组件的默认可见性设置,
• 更改 UI 组件在列表中的显示顺序,以及
• 更改列表中 UI 组件的标签。
在站点或组织级别,您的目的是管理创建配置文件时显示的列表:
在容器级别,您将管理按角色配置可见性时所显示的对等列表:
解决方案
修改 roleaccessprefs.xml 文件 (以及所需的关联文件)。
必备知识
要实现此目标,需要了解以下内容:
• Windchill 中用户角色的行为
• Windchill 中专用访问控制策略的管理
• Windchill 客户端体系结构中的操作框架
• Windchill 客户端体系结构中的导航框架
• XML 文件自定义的管理
• RBINFO 文件自定义的管理
| 下面的“更多资源”一节包括对许多或所有这些主题的参考。 |
解决方案元素
元素 | 类型 | 说明 |
*actionModels.xml | XML | 此类文件用于定义操作将使用的模型。如果尚未在模型中定义操作,则需要创建一个操作,以使得验证代码能够查找该操作并正确设置可见性。actionmodels.xml 位于 <Windchills>\codebase 中;其他 *actionmodels.xml 文件通常位于 <Windchill>\codebase\config\actions 中 |
*actions.xml | XML | 定义操作和其他 UI 组件的文件。可根据需要为操作指定一个 uicomponent 值。 actions.xml 以及其他 *actions.xml 文件位于 <Windchill>\codebase\config\actions 中。 |
roleaccessprefs.xml | XML | 用于为 UI 组件分配默认可见性的文件。在此文件中设置项可使其对站点和容器均不显示。容器管理器是否可以覆盖默认值也可在此处进行更改。 位于 <Windchill>/codebase 中。 |
roleAccessResource.rbInfo | XML | 定义要在操作或 UI 组件的 UI 中提供的标签。 位于 <Windchill>\wtCustom\com\ptc\netmarkets\roleAccess\ 中。 |
在 actions.xml (和所有 *actions.xml 文件) 中,可为操作分配一个 uicomponent 属性值。uicomponent 属性提供可从 roleaccessprefs.xml 和 roleAccessResource.rbInfo 文件引用的 UI 组件的名称。多个操作可使用相同 uicomponent 值;这样便可将这些操作作为单个 UI 组件来管理。如果操作没有 uicomponent,则可使用操作 name 将其作为 UI 组件进行引用。但是,在这种情况下,不能将其他操作分组到单个 UI 组件中。
roleaccessprefs.xml 文件包含一个 <uics> 元素,其中包含与 Windchill 用户界面中的主要选项卡相对应的多个元素 (或部分)。 例如,<project> 部分对应于“项目”选项卡。每个部分包含零个或多个 <uic> 元素,每个元素都代表一个可管理该选项卡中可见性的 UI 组件。使用 <uic> 元素的 name 属性指定的每个 UI 组件都可以出现在一个或多个部分中。这将允许针对不同的选项卡单独分配该 UI 组件的默认可见性设置。
roleaccessprefs.xml 文件适用于基于配置文件 (在站点和组织级别) 和基于角色 (容器级别) 的可见性管理的 UI 组件列表。但是,<global> 部分仅适用于使用配置文件的可见性管理。如果 UI 组件未关联至特定选项卡 (例如,在 Windchill UI 标题中具有“搜索”链接的情况),或者 UI 组件是第一级选项卡本身,则必须在 roleaccessprefs.xml 的 <global> 部分列出。
每个 UI 组件都必须在 roleAccessResource.rbInfo 中具有一个条目,以便为该 UI 组件提供用户友好型标签。这些标签适用于配置可见性时将会显示给管理员的列表中的 UI 组件。在此文件中,资源条目常数标识了 UI 组件;如果操作没有 uicomponent,则它必须与操作定义中的 uicomponent 或操作名称相匹配。资源条目值可提供用户友好型标签。
| 您的 UI 组件标签应为动词短语。如果您的操作/UI 组件名称尚不是动词短语,请在前面放置 'View',例如 "View Team Page"。 |
过程 - 使操作可用于可见性管理
在本示例中,您可以为管理员提供用于管理“项目”、“程序”、“产品”和“库”选项卡中“创建文件夹”操作可见性的功能。
| 此示例假设“创建文件夹”操作对于基于角色的可见性管理尚不可用;在实际产品中,其预设为可用。 |
1. 将新的 <uic> 添加到 roleaccessprefs.xml 中的 <project>、<program>、<product> 和 <library> 部分下:
<uic name=”PROJECT_CREATE_FOLDERS” order=”00” enabled=”true” defaultAll=
”true”
defaultManager=”true” defaultGuest=”false” managerEnabled=”true” guestEn
abled=”false”/>
| 有关属性说明,请参阅下文中有关 uic 元素的一节。 |
| 针对那些对于多个选项卡类型均有效的操作,请将条目放置在您希望其影响的所有部分下。 |
2. 在 roleAccessResource.rbInfo 中,为操作显示名称添加新的资源条目:
31.value=Create Folders
31.constant=PROJECT_CREATE_FOLDERS
重新生成束。uic 的名称应与资源束中条目的常数相同。
3. 在 <Windchill>\codebase\config\actions\actions.xml 中,通过以下方式修改创建文件夹操作:添加属性 uicomponent = "PROJECT_CREATE_FOLDERS"
<action name=” folder_create” checkaccess=”true”
uicomponent=”PROJECT_CREATE_ FOLDERS”>
| 在自定义 XML 文件时,请遵循备份 XML 文件的最佳实践。 |
4. 重新启动 servlet 引擎和方法服务器。
上方的步骤 1 到 3 可按任意顺序执行。请注意,"PROJECT_CREATE_FOLDERS" 用于 uic 名称、资源条目常数 (但不含引号) 和操作 uicomponent。必须使得这三个项均共享相同的值,才能将自定义行为关联在一起。
完成此过程后,管理员现在可以基于在站点或组织级别定义的配置文件和容器级别的角色,在“项目”、“程序”、“产品”和“库”选项卡下,将可见性配置为“创建文件夹”操作。
自定义点
uic 元素
roleaccessprefs.xml 中的每个 UIC 表示要控制的 UIComponent 或操作。
参数 | 默认值 | 可能的值 | 必需? | 说明 |
名称 | 不可用 | 字符串 | Y | UI 组件的名称。这必须与 actions.xml 中操作元素上的 uicomponent (或 name) 属性的值相匹配。这还必须与资源束中资源条目常数的值相匹配。 |
order | 不可用 | 整数 | N | 此 UI 组件在向导中的位置。编号较低的 UI 组件将放置在编号较高的 UI 组件之前。 |
enabled | true | true|false | N | 此 uicomponent 是否将显示在向导中并由系统使用。 |
defaultAll | true | true|false | N | 全部成员的默认可见性值。 |
defaultManager | true | true|false | N | 项目经理的默认可见性值。 | 权限是全部角色中全部权限的并集;如果将 defaultManager 设置为 false,则还应该将 defaultAll 设置为 false,否则,管理者仍可以通过 ALL_MEMBERS 角色进行访问。 |
|
defaultGuest | true | true|false | N | “访客”角色中人员的默认可见性值。 | 从技术上讲,访客并不是项目的成员;此角色的成员不会与 ALL_MEMBERS 角色合并。 |
|
managerEnabled | true | true|false | N | 此 uicomponent 是否会影响管理者角色。请勿在预设 UIC 中更改此值。对于自定义 UIC,您可以选择自己的设置。 |
guestEnabled | true | true|false | N | 此 uicomponent 是否会影响访客角色。请勿在预设 UIC 中更改此值。对于自定义 UIC,您可以选择自己的设置。 |
使自定义选项卡对可用于可见性管理
实际上,使自定义操作可用于可见性管理与使得预设操作可用的步骤相同。但是,选项卡不能由容器管理员管理 (配置基于角色的可见性)。因此,您只能使站点和组织管理员使用自定义选项卡来配置可见性配置文件。这意味着您仅可以将选项卡的 <uic> 元素添加到 roleaccessprefs.xml 的 <global> 部分。例如,假设您已创建一个自定义选项卡,并且具有关联的 <MyTab>actions.xml 文件。 则可以将选项卡添加到基于配置文件的可见性管理列表中,如下所示:
1. 将新的 uic 元素添加到 <global> 部分下的 roleaccessprefs.xml 中,并使用唯一的名称,例如 CUSTOMIZED_TAB。
<uic name=”CUSTOMIZED_TAB” order=”190” enabled=”true” defaultAll=”true”/>
2. 将 action.xml 中的适当操作与 UIComponent 关联。
<ooleanpe name=”customization” >
<action name=”list2” uicomponent=”CUSTOMIZED_TAB”>
<command windowType=”page”/>
</action>
3. 使用与 uic 名称相同的常数,将新条目添加到 roleAccessResource.rbInfo 中。该值是在配置文件操作 UI 中显示的内容。
40.value=View Customized Tab
40.constant=CUSTOMIZED_TAB
重新生成束。
4. 重新启动 servlet 引擎和 MethodServer。
将一个 uicomponent 分配给多个操作
如果您希望将一个 UI 组件与多个操作关联,则需要使用相同的值为每个操作指定 uicomponent 属性。例如,使用“过程 - 使操作可用于可见性管理”一节中描述的步骤创建一个与 folder_create 操作关联的 UI 组件,将其命名为 PROJECT_CREATE_FOLDERS。您可以将 list_create_folder 操作分配给相同 UI 组件,方法是在 actions.xml 中为该动作指定 uicomponent 属性,如下所示:
<action name=”list_create_folder”
uicomponent=”PROJECT_CREATE_FOLDERS” ajax=”row”>
因此,配置角色和创建配置文件页面中的“创建文件夹”条目将影响 folder_create 和 list_create_folder 操作的可见性。
更改 UI 组件的标签
您可以在配置角色和创建配置文件页面的 UI 组件中更改所使用的标签,而不对该 UI 组件进行任何其他更改。只需更改 roleAccessResource.rbInfo 文件中的关联资源条目值,然后重新生成束。例如:
31.value=Create Folders - My New Label
31.constant=PROJECT_CREATE_FOLDERS
示例代码
预设代码用法示例
多个操作使用相同 uicomponent 的示例之一是:“产品”/“项目”/“存储库”中的“团队”页面共享相同的代码,但每个对象的每个操作都将单独定义。每个操作都有相同的 "PROJECT_TEAM" uicomponent。这允许使用相同的资源 (rbInfo) 条目,并有助于尽可能减小“创建配置文件”页面中操作显示表的大小。仍然需要在 roleaccessprefs.xml 中定义为每个选项卡类型使用的 PROJECT_TEAM,并且可以为每个选项卡设置不同的默认值。
更多资源
相关自定义文档
其他相关 Windchill 文档