配置类型选取器
为了显示或分配可输入项,您想要创建类型选取器。
背景
类型选取器公用组件将用于显示或分配可输入项。例如,在搜索应用程序中,可选择要对其执行搜索的对象类型,或在创建应用程序中,可创建特定类型的项。该组件可用于在编辑或查看应用程序时显示类型。可在 CREATE、EDIT、SEARCH 或 VIEW 的上下文/模式下使用该组件。
范围/适用性/假设
如果类型选取器行为由站点/组织首选项可视化显示 (列表或树)、默认类型、过滤条件等驱动,则假定您将提取相关信息并将其传递给组件。
组件将应用除 SEARCH 模式外的访问控制策略。
假定您的 <MyPage>.jsp 文件 (您要在该文件中实现此公用组件) 包括 "\netmarkets\jsp\begin.jspf" 或 "\netmarkets\jsp\beginPopuf.jspf" 文件和 "\netmarkets\jsp\end.jspf" 文件。
预期结果
根据格式的不同,您将获得下拉列表、表格或树:
采用下拉列表格式的类型选取器
采用表格格式的类型选取器
采用树格式的类型选取器
解决方案
使用类型选取器公用组件显示或分配可输入的项。
必备知识
要了解此文档,需要了解以下内容:
涉及 JSP、JavaScript 和自定义 taglib 的基本开发
资源束文件自定义的管理
Windchill xconfmanager 概念
Windchill 类型标识符
解决方案元素
元素
类型
说明
picker.tld
tld
标记库描述符 (TLD) 文件,其中包含类型选取器标记定义
运行时位置:
<Windchill>\codebase\WEB-INF\tlds\
typePickerResource.java
Java
您应使用此文件来本地化类型选取器弹出窗口的内容。
<您的_页面>.jsp
jsp
包含 jsp 文件的 TypePicker 公用组件实现。
wt.properties
properties
可在此定义 "wt.typepickerexclude" 特性
运行时位置:
<Windchill>\codebase\wt.properties
该解决方案也适用于以下操作:
1. 您想要指定容器将显示类型层次结构中所有类型的特定子集。
2. 您想要针对所示类型指定筛选条件,其中包括对自定义子类的条件。
3. 您想要指定要使用的根/基本类型 (预置或自定义)。
4. 您想要包括将作为下拉列表或表格/树弹出菜单启动的类型选取器。
5. 您想要指定是否显示非可实例化类型以供选取
过程 - 配置类型选取器公用组件
1. 包括所需的构件。
您应将所需的构件包括在配置 jsp 文件中,例如 "\netmarkets\jsp\begin.jspf" 或 "\netmarkets\jsp\beginPopuf.jspf" 文件和 "\netmarkets\jsp\end.jspf" 文件。您还需要声明选取器 taglib 指令。(uri=”http://www.ptc.com/windchill/taglib/picker”)
2. 配置类型选取器。
<%@ taglib uri="http://www.ptc.com/windchill/taglib/picker" prefix="p"%>
<%@ include file="/netmarkets/jsp/util/begin.jspf"%>
----
----
<!-- TYPE PICKER CONFIGURE START -->
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="seedType" value="wt.epm.EPMDocument" />
<p:pickerParam name="type" value="BOTH" />
<pr:pickerParam name="displayHierarchy" value="false" />
<p:pickerParam name="showRoot" value="true" />
</p:typePicker>
<!-- TYPE PICKER CONFIGURE END -->
----
----
<%@ include file="/netmarkets/jsp/util/end.jspf"%>
自定义点
typePicker 标记属性
参数
默认值
可能的值
必需?
说明
id
-
任何值
用于区分页面中的多个类型选取器用法。id 值不应包含 "."(点)。
label
-
任何值
用作选取器标签
mode
SEARCH
-
定义将在哪个模式下使用类型选取器,其值应为在 com.ptc.core.ui.resources.ComponentMode 中定义的其中一个值。
field
-
-
目标元素是将在其中填充选定元素属性的项。该元素应该是当前支持 TextBox 和 ComboBox 的 com.ptc.core.components.rendering.AbstractGuiComponent 的子类。
renderContext
-
-
对象应为 com.ptc.core.components.rendering.RenderingContext 的实例。如果未提供对象,组件将为用户创建对象。
objectType
typepicker
-
该对象类型用于在 *actions.xml 中指定选取器操作。
<Windchill>\codebase\config\actions\EnterpriseUI-actions.xml
actionName
typePicker
-
这是在选取器操作的 *actions.xml 中指定的操作名称
pickerParam 标记属性
参数
默认值
可能的值
必需?
说明
adminDomainRef
-
管理域参考的 String 表示 (wt.admin.AdminDomainRef)。用于检查访问控制权限。
containerRef
-
容器参考 (wt.inf.container.WTContainerRef) 的字符串表示,用于填充为此容器指定的类型。
如果已提供 adminDomainRef,即使用户已提供 containerRef,也会通过提供的值对该参数进行计算。
如果未提供 adminDomainRef,则组件将使用所提供 containerRef 的默认 AdminDomain,或如果未提供 containerRef,则组件将使用默认 WTContainer (交换容器)。
lifeCycleState
-
状态的 String 表示 (wt.lifecycle.State),用于检查访问控制权限。
seedType
-
-
接受 Windchill 类型标识符的有效逻辑或外部表示。支持多个值,对于 mode = CREATE/EDIT/VIEW,需要该参数
filterType
-
-
接受 Windchill 类型标识符的有效逻辑或外部表示。支持多个值。
将从选取器元素中筛选出类型及其后代
defaultType
-
-
接受 Windchill 类型标识符的有效逻辑或外部表示。在单选的情况下,该参数只能具有一个值。支持多个值,对于 mode = EDIT/VIEW,需要该参数。该参数也可以支持空白、“选择类型”等值。
appOption
-
-
支持由 "$" 分隔符分隔的本地化显示名称和值以及多个值。
format
dropdown
-
该参数应为在 com.ptc.windchill.enterprise.picker.type.server.TypePickerFormat 中定义的枚举常量值之一。可能的值为 dropdown、table 和 tree
select
single
-
可能的值为单个和多个。
type
BOTH
-
该参数应为在 com.ptc.windchill.enterprise.picker.type.server.TypePickerTypes 中定义的枚举常量值之一。可能的值为 ROOT_TYPES (将仅显示 seedTypes)、SOFT_TYPES (将仅显示可变类型)、BOTH (将显示 MODELED 和 SOFT 类型)
displayHierarchy
false
false/true
接受布尔值的 String 表示。这仅适用于下拉列表格式 (该参数针对该格式在层次结构中显示选取器元素)。
showInstantiable
false
false/true
接受布尔值的 String 表示。如果为 true,将仅显示可实例化项,如果为 false,将显示可实例化项和非可实例化项
showRoot
true
false/true
接受布尔值的 String 表示。如果为 true,则将 seedTypes 显示为 I 级元素。
componentId
Foundation.allSearch
-
componentId 定义为 'APP_ID+.+COMPONENT_NAME'
有效 APP_IDs 为 ProjectLink、Foundation 或 PDMLink。该参数可用于 mode = "SEARCH",以从 <Windchill>\codebase\com\ptc\windchill\enterprise\search\server\SearchableTypes.properties 查找 I 级类型。传递 null 将默认为默认值
pickerCallBack
typePicker填充目标元素
-
将调用以填充目标元素中选定元素属性的 javaScript 函数。该参数不适用于下拉列表。
pickedDataFetcher
netmarkets\jsp\typepicker\typePicker_dataFetcher.jsp
-
在 AJAX 调用中调用的 jsp 文件,用于提取所选元素的属性。文件应位于 <Windchill>\codebase 中,而相对路径则为要提供的值。该参数不适用于下拉列表。
filterByInterface
-
有效 Windchill 接口
有效 windchill 接口的 String 表示。其单值参数。例如,filterByInterface = "wt.index.Indexable"
如果已配置 filterByInterface 参数,则只有实现接口的 seedType 的子类型才应显示在类型层次结构中。在此,类型选取器将仅显示 seedType (实现可建立索引的接口) 的子类型。
如果已配置此参数,即使种子类型不可实例化,也可以始终对其进行选择。
当 fliterByInterface 与 ShowInstantiable=true 一起配置时,则只有实现接口的可实例化类型将在类型选取器中可用。
additionalTypes
-
有效 Windchill 抽象类
有效 Windchill 抽象类的 String 表示。其多值参数。例如,additionalTypes = "wt.meeting.Meeting, wt.org.WTPrincipal"
如果该参数指定的所有抽象类为 seedType 的子类,并实现 filterByInterface 参数指定的接口,就会在类型选取器中显示这些类。
此参数取决于 filterByParameter。仅当配置 filterByInterface 时,类型选取器框架才会遵循此参数。
showInternalNameAsTooltip
false
false/true
接受布尔值的 String 表示。
如果为 true,则将工具提示显示为类型的内部名称,否则显示类型的显示名称
配置将作为下拉列表或表格/树弹出菜单启动的类型选取器
采用“下拉列表”格式的类型选取器
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="format" value="dropdown" />
</p:typePicker>
采用“表格”格式的类型选取器
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="format" value="table" />
</pr:typePicker>
采用“树”格式的类型选取器
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="format" value="tree" />
</p:typePicker>
使用筛选条件配置类型选取器
通过 "filterType" 参数筛选
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="seedType" value="wt.doc.WTDocument" />
<p:pickerParam name="filterType" value="com.ptc.ReferenceDocument" />
</p:typePicker>
通过在 wt.properties 中定义的特性筛选。
属性将在 <Windchill>\codebase\wt.properties.xconf 中定义,并通过 xconfmanager 传播到 wt.properties 文件。
特性
说明
示例
wt.typepickerexcludedelimiter
wt.typepickerexcludedelimiter=<delimiter string>
这将定义用于 "wt.typepickerexclude" 特性的分隔符,默认值为 ","
wt.typepickerexcludedelimiter=;
wt.typepickerexclude/<mode>/<root type>
wt.typepickerexclude/<mode>/<root type>=<delimited list of external string representation of type identifier>
"mode" 应为在 com.ptc.core.ui.resources.ComponentMode 中定义的值之一
如果未指定任何 "mode" 标识符,则假定该特性适用于所有模式。
系统会按 wt.typepickerexcludedelimiter 特性分隔多个值
如果根类型与所提供的 seedType 匹配,则从类型选取器中排除列出的类型及其所有模型化和可变子类型。
wt.typepickerexclude/CREATE/wt.doc.WTDocument=WCTYPE|wt.doc.WTDocument|org.r_and_d.Agenda
wt.typepickerexclude/wt.doc.WTDocument=WCTYPE|wt.doc.WTDocument|org.r_and_d. Meeting
wt.typepickerexclude/<mode>/<container type>
wt.typepickerexclude/<mode>/<container type>=<delimited list of external string representation of type identifier>
"mode" 应为在 com.ptc.core.ui.resources.ComponentMode 中定义的值之一
如果未指定任何 "mode" 标识符,则假定该特性适用于所有模式。
系统会按 wt.typepickerexcludedelimiter 特性分隔多个值
如果容器类型与所提供的 containerRef 匹配,则从类型选取器中排除列出的类型及其所有模型化和可变子类型。
wt.typepickerexclude/CREATE/wt.pdmlink.PDMLinkProduct =WCTYPE|wt.doc.WTDocument|org.r_and_d.Agenda
wt.typepickerexclude/wt.pdmlink.PDMLinkProduct =WCTYPE|wt.doc.WTDocument|org.r_and_d.General
从特性中提取的排除类型将进行聚合。上述示例的结果意味着当 rootType 为 WTDocument、容器为 PDMLinkProduct 以及操作为 CREATE 时,将筛选出 "Agenda"、"Plan" 和 "General" 及其子类型。对于所有其他操作,只能筛选出 "Meeting" 和 "General" 及其子类型。
使用根/基本类型配置类型选取器
< p:typePicker id="typePickerTest" label="Type : " mode="CREATE" >
<p:pickerParam name="seedType" value="wt.part.WTPart" />
</picker:typePicker>
将类型选取器配置为可实例化或不可实例化
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="seedType" value="wt.part.WTPart" />
<p:pickerParam name="showInstantiable" value="true" />
</p:typePicker>
使用选取器回调函数配置类型选取器
< p:typePicker id="typePickerTest" label="Type : " mode="SEARCH" >
<p:pickerParam name="seedType" value="wt.part.WTPart" />
<p:pickerParam name="pickerCallBack" value="myCallBack" />
</p:typePicker>
创作 pickerCallBack 时要小心的点
将调用此 javaScript 函数以填充目标元素中的选定元素属性。
用户提供的函数应在插入类型选取器的页面中提供。
pickerCallBack 函数签名为 "call_back_function(JSON_Object, Picker_Id, Field_Id)"
例如
function mycallBack(JSONObjects, pickerId, targetId) {
var elements = JSONObjects.pickedObjects;
var targetElement = document.getElementById(targetId);

//update Target Element
if ((targetElement.type == "text") || (targetElement.type ==
"hidden")) {
--------
}else {
--------
}
//update hidden field
var valueElement = document.getElementById(pickerId);
-----
return true;
}
使用选取器数据获取器配置类型选取器
< picker:typePicker id="typePickerTest" label="Type : "
mode="SEARCH" >
<picker:pickerParam name="seedType"
value="wt.part.WTPart" />
<picker:pickerParam name="pickedDataFetcher"
value="myfolder/myDataFetcher.jsp" />
</picker:typePicker>
创作 pickedDataFetcher 时要小心的点
pickedDataFetcher 的响应应包含 id 与类型选取器 id 相同的 <DIV> 标记。将提取 <DIV> 标记内的内容并对其进行求值以创建 JSON 对象。典型响应的示例将如下所示
<DIV id=”Type_Picker_Id” >
{"pickedObjects":
[
{"type" : "Part" , "theType" : "wt.part.WTPart "},
{"type" : "Document" , "theType" : "wt.doc.WTDocument”}
]
}
</DIV>
从类型选取器访问选定/填充的信息
如果为目标元素提供 GUIComponent (通过字段) 和 RenderingContext (通过 renderContext)
如果未设置 GUIComponent Id,则类型选取器 CC 会将其设置为类型选取器 Id
如果未设置 RenderingContext 的 ContextString,则类型选取器不会对其进行设置。
您会为目标元素提供 GUIComponent,但不提供 RenderingContext
类型选取器使用默认 RenderingContext (不会设置 ContextString)。
您不会为目标元素提供 GUIComponent 和 RenderingContext
类型选取器可创建相应的 GUIComponent,并会将类型选取器的 Id 设置为其 Id。
下拉列表格式
如果要访问页面中的选定值 (在提交页面后),则
HTML_NAME_OF_TARGET_ELEMENT = RenderingContext.getContextString
()+"___"
+ GUIComponent.getId() + GuiComponentUtil.COMBO_BOX;
如果要访问命令中的选定值,可以通过 NmCommandBean 对该值进行访问
HashMap comboBox_hmap = commandBean.getChangedComboBox();
Object comboBox = comboBox_hmap.get(GUIComponent_Id);
表格/树弹出窗口格式
如果要访问页面中的目标元素 (TextBox 或 ComboBox),即
TEXTBOX
HTML_NAME_OF_TARGET_ELEMENT = RenderingContext.getContextString
()+"___"
+ GUIComponent.getId() + GuiComponentUtil.TEXT_BOX;
COMBOBOX
HTML_NAME_OF_TARGET_ELEMENT = RenderingContext.getContextString
()+"___"
+ GUIComponent.getId() + GuiComponentUtil.COMBO_BOX;
选定值存储在页面中的 "input" 隐藏元素中,其中的选择由分隔符 (",") 分隔
如果要访问 Command 中的选定值,可以通过 NmCommandBean 对其进行保留。
String selected_value = cb.getTextParameter(Type_Picker_Id);
这对您有帮助吗?