配置选取器
解决方案
编写自定义 JSP 页面,并使用项选取器标记来显示选取器。使用 PickerAttributes.xml 文件配置要包括在选取器中的搜索条件字段。使用 itemPicker 标记上的参数配置要搜索的对象类型和容器。
必备知识
要实现此目标,需要了解以下内容:
涉及 HTML 表单、JSP、XML 的基本开发。
选取器公用组件
表格公用组件
视图创建
解决方案元素
元素
类型
说明
pickerAttributes.xml
XML
运行时位置:<Windchill>\codebase\pickerAttributes.xml
SearchResultsTable.properties.xconf
Xconf
运行时位置:<Windchill>\codebase\com\ptc\netmarkets\search\SearchResultsTable.properties.xconf
此文件可用于配置表格视图定义。
过程 - 启动选取器并定义要搜索的对象类型
通过调用 itemPicker 标记,可以从 JSP 启动选取器:
<wctags:itemPicker id="customized_item_picker" objectType="WCTYPE|
wt.part.WTPart|org.r_and_d.mypart" componentId="customizedItemPickerForSoftPart "/>
objectType 参数指示搜索应限制为 org.r_and_d_mypart 类型的对象。
Id 参数的值应为给定页面的唯一标识符。
componentId 参数的值为关键字,用于查找要在选取器中显示的搜索条件。此内容将在下节中进行介绍。
过程 - 自定义选取器搜索条件
可使用文件 pickerAttributes.xml 自定义选取器的搜索条件。首先使用选取器标记上的 componentID 参数为选取器定义新的组件 id (如上所示),然后在 xml 文件中定义要用作搜索条件的对象属性 (如下所示)。
<ComponentID id="customizedItemPickerForSoftPart">
<ObjectType id="WCTYPE|wt.part.WTPart|org.r_and_d.mypart">
<SearchCriteriaAttributes>
<Attributes>
<Name>name</Name>
<DisplayName>NAME_LABEL</DisplayName>
<IsSearchable>true</IsSearchable>
</Attributes>
</SearchCriteriaAttributes>
</ObjectType>
</ComponentID>
如果未指定 componentID 属性,或者未在 pickerAttributes.xml 中定义搜索条件,则默认情况下,pickerSearch componentId 将用于显示搜索条件。pickerAttributes.xml 文件可以由客户修改,并且是唯一要在此方面修改的文件。此文件仅包含搜索条件,而非对象类型。您可以在此 xml 文件中使用前缀 WCTYPE。对于子类型,需要此前缀。对于硬类型,仅需要对象类型。
在本示例中,组件 id 为在选取器标记上为选取器定义的组件 id (请参阅上面的“过程 - 启动选取器并定义要搜索的对象类型”一节)。我们已定义要搜索的单个属性,即对象类型 org.r_and_d.mypartname 属性。
${domain} 是特定于 EPM document。该项是通用的,而非开发人员内部使用项。
此 xml 文件包含搜索条件输入字段,而非类型。
如果搜索多个对象类型,则必须在同一组件 id 下的第一个对象类型后添加其他对象类型的条目。
如果存在多个类型搜索,则会显示通用 (可持续对象类型) 条件。
以下表格列出了公用自定义点:
参数
默认值
可能的值
必需?
说明
Id
页面中任何唯一的内容
ID 与调用应用程序范围内的每个选取器相关联。对于所有选取器,此 ID 必须唯一,而与页面上的类型无关。
ID 不应在名称中包含 "." (点)。
componentId
pickerSearch
在 pickerAttributes.xml 中指定的任何有效组件 ID
componentId 可确定应在给定选取器的搜索条件面板中显示的属性。
pickerCallback
如果用户未指定此参数,则在运行时生成
回调函数的名称
用户必须实现的自定义回调 javascript 函数的名称。建议在 custom.js 文件中指定 pickerCallback 函数
defaultValue
"" (空白)
任何值
由选取器呈现的文本框的默认值。
标签
上下文选取器
任何值
选取器的标签。
displayAttribute
名称
任何属性
在从项选取器中选择结果后,应显示在选取器文本框中的属性的名称。
containerRef
"" (空白)
任何容器
用户要在其中限制搜索的 containerRef 的值。
baseWhereClause
"" (空白)
任何有效的 I*E where 子句查询
需要根据某些特定条件筛选搜索结果而无需考虑用户输入时使用的附加 where 子句。此 where 子句将使用内部 where 子句获取 "ANDed"。
pickerTitle
上下文
任何值
与选取器关联的隐藏文本框的默认值。
pickedDataFetcher
<WebApp>\netmarkets\jsp\search\pickedData.jsp
获取器文件的 URL 位置
将由 AJAX 调用使用以处理选定结果的数据获取器文件的 URL。
Editable
True
true/false
此属性可定义是否要将查找图标与文本框配合使用。
readOnlyPickerTextBox
False
true/false
此属性用于定义选取器文本框是否应为可编辑。
Inline
False
true/false
当您想要将选取器作为表级别操作启动或内联启动选取器时,应将此参数的值指定为 true。
pickedAttributes
名称
有效属性的任何逗号分隔列表
此参数包含用户希望选取器提取的属性的逗号分隔列表。仅当内联为 "true" 时才适用。
pickerType
search
search/picker
此参数用于定义选取器类型,即 "search" 选取器或 "picker" 选取器。在 search 选取器中,您将在选取器中看到搜索条件,然后必须单击搜索按钮以查看结果,但是,对于 "picker" 选取器,您将直接看到结果表格,而不显示任何搜索条件。
pickerTextBoxLength
25
任何数值
此参数用于定义选取器文本框的长度。
searchResultsViewId
"" (空白)
任何有效视图 ID
此参数允许用户为选取器搜索结果表格定义自定义视图 ID。
过程 - 定义要搜索的容器
要将搜索范围限制为特定容器中的对象,请使用选取器标记的 containerRef 参数。对于要搜索的容器,此参数的值应为一个或多个 WTContainerRef 对象的以逗号分隔的列表 (以字符串格式表示)。
容器的 WTContainerRef 可通过查询容器并为 WTContainerRef 对象中的每个容器获取 WTContainer 进行提取。
如果未提供 containerRef 参数,则将搜索所有容器。
<wctags: itemPicker id=" customized_item_picker”
objectType="WCTYPE|wt.part.WTPart|org.r_and_d.mypart"
containerRef=" OR: wt.pdmlink.PDMLinkProduct:33707”
componentId="customizedItemPickerForSoftPart" />
过程 - 自定义搜索结果表格视图
搜索结果表格使用表格公用组件,因此可通过创建新的表格视图来配置列显示。
首先需要创建用于定义表格视图的新 JCAConfigurableTable Java 类。
然后,在 *.properties.xconf 文件中创建服务特性条目,该文件可用于基于您选取的称为 "selector" 的标识符来查找表格视图类。例如,如果您的表格视图类为 CustomizedPartView,则服务特性条目可能如下所示:
<Service context="default"
name="com.ptc.core.htmlcomp.tableview.ConfigurableTable">
<Option
serviceClass="com.ptc.netmarkets.search.views.CustomizedPartView" requestor="java.lang.Object"
selector="wt.part.WTPart.customizedSearchView "/>
</Service>
最后,将 selector 传递给选取器标记 (如下所示),搜索结果表格将在此视图中呈现。
<wctags: itemPicker id=" customized_item_picker"
objectType="WCTYPE|wt.part.WTPart|org.r_and_d.mypart"
containerRef="<OR: wt.pdmlink.PDMLinkProduct:33707”
componentId="customizedItemPickerForSoftPart"
searchResultsViewId="wt.part.WTPart.customizedSearchView"/>
示例代码
<html>
<body>
<table>
<tr>
<%-- launching user picker--%>
<wctags:userPicker id="testUserPicker" label="MyUserPicker"
readOnlyPickerTextBox="false" editable="true" showSuggestion="true"
suggestMinChars="5" />
</tr>
<tr>
<%-- launching organization picker--%>
<wctags: organizationPicker id="orgPicker" label="MyOrgPicker"
readOnlyPickerTextBox="false" editable="true" showSuggestion="true"
suggestMinChars="3"/>
</tr>
<tr>
<%-- launching context picker--%>
<wctags: contextPicker id="contextPicker" label="MyContextPicker"
pickerTitle="ContextPicker" />
</tr>
<tr>
<%-- launching Item picker--%>
<wctags:itemPicker id="itemPicker" label="MyItemPicker"
pickerTitle="ItemPicker"/>
</tr>
<tr>
<%-- launching Item picker with exclude sub types and access
controller --%>
<wctags:itemPicker id="CustomizedItemPicker" label="CustomizedItemPicker"
pickerTitle="CustomizedItemPicker"excludeSubTypes="WCTYPE|wt.doc.WTDocument|
org.rnd.Minutes,WCTYPE|wt.doc.WTDocument|org.rnd.General"
customAccessController="com.ptc.windchill.
enterprise.search.server.LatestVersionAccessController"/>
</tr>
<tr>
<%-- launching Item Masterpicker--%>
<wctags:itemMasterPicker id="itemMasterPicker"
label="MyItemMasterPicker"/>
</tr>
<tr>
<%-- launching Item Masterpicker--%>
<wctags:genericPicker id="genericPicker"objectType="wt.part.WTPart"label
="Part Picker using generic" />
</tr>
<tr>
<%-- launching Item Masterpicker--%>
<wctags:genericPicker id="viewPicker" objectType="wt.vc.views.View" label="
View Picker
using generic" pickerType="tree" />
</tr>
<tr>
<%-- launching Recently Visited Context Picker- Single Select--%>
<wctags:contextPicker id="containerTypeListSingleSelect" label="
Recently Visited Context Picker-
Single Select" pickerTitle="ContextPicker" showRecentlyUsed="true"
displayAttribute="containerInfo.name"/>
</tr>
<tr>
<%-- launching Recently Visited Context Picker- Multi Select--%>
<wctags:contextPicker id="containerTypeListMultiSelect" label="Recently
Visited Context Picker- Multi Select" pickerTitle="ContextPicker"
showRecentlyUsed="true" displayAttribute="containerInfo.name"
showMultiSelectRecentlyUsed="true"/>
</tr>
</table>
</body>
</html>
这对您有帮助吗?