高级自定义 > 业务逻辑自定义 > 选项和变型 > 为选项和选择配置自动建议结果
为选项和选择配置自动建议结果
本节将介绍在创建已分配表达式、条件型规则或别名时如何自定义用于选择建议的搜索结果和条件的显示。可对以下内容进行自定义:
搜索结果 (建议) 的显示
搜索条件
搜索结果中显示的列
* 
要启用自动建议功能,请将 Allow Choice Auto Suggest 首选项设置为 Yes
以下任一条件均可用于搜索:
选择名称
选择编号
选项名称
别名名称
您可以使用 xconf 文件中定义的特性,从选择和选项类中定义的字段中添加其他搜索和显示属性。如需搜索或显示选项和选择的可变类型和模型化类型,请使用本节中所述的自定义。
必备知识
要实现此目标,必须了解以下内容:
涉及 JSP、JavaScript、自定义 taglib 的基本开发
Windchill xconfmanager 概念
解决方案元素
元素
类型
说明
ATOOptionSuggestable
Java 类
提供基于搜索条目的建议。此类用于确定从数据库中提取搜索结果的逻辑。
*.wt.properties.xconf
特性 xconf 文件
包含 ato.suggest.displayColumnsato.suggest.searchColumns 特性,此类特性可用于指定要从数据库中提取的其他列 (属性) 以及搜索所基于的列。
*. typedservices.properties.xconf
特性 xconf 文件
过程
用例 1:更改 UI 上所显示建议结果的显示文本顺序
要更改建议结果的显示文本格式,请按以下步骤操作:
1. 创建 suggestable 类。自定义的 suggestable 类对 ATOOptionSuggestable 类进行了扩展。此类具有 getFormatedSuggestions(Collection<ChoiceSuggestionBean> suggestBean) 方法,用于创建 displayText、additionalText 和 valueText,以从提供的 ChoiceSuggestionBean 获取建议结果。该方法将在内部调用 addSuggestions(String displayText, String additionalText, String valueText) 语句,该语句用于对 displayTextadditionalTextValueText 进行编码,并将其设置为要传递到用户界面的 suggestResult 的集合。
必须从 getFormatedSuggestions 调用 addSuggestions 方法,以确保建议显示在用户界面上。
* 
SuggestResult 包含 valueOf (String display_text, String additional_text, String value_text),用于设置在用户界面上可见的显示文本。第一个自变量是将在下拉菜单中显示的文本。第二个自变量是将在建议下拉菜单中作为单独的列显示的任何附加文本。第三个自变量是必须复制到与文本框关联的隐藏表单字段并显示在文本中的任何字符串。
2. 注册 suggestable 类,方法是将其添加到 typedServices.properties 中的服务列表。自定义 suggestable 类也必须在 xconf 文件中注册并使用 xconfmanager 传播到 \codebase\service.properties 文件中。
<Service context="default" name="com.ptc.core.components.suggest.Suggestable">
<option cardinality="duplicate" selector="optionPicker" requestor="null"
serviceClass="<your_Suggestable>" />
</Service>
用例 2:更改搜索条件
要搜索除预设属性 (选择名称、选择编号、选项名称、别名) 以外的其他选择或选项属性,请通过 xconf 文件添加其他属性,然后使用 xconfmanager 将其传播到 codebase\wt.properties
例如,要基于“选择说明”属性搜索选择或选项,请将以下特性添加到您的自定义 xconf 文件中:
<Property name="ato.suggest.searchColumns" multivalued=","
default="Choice.description" overridable="true" />
要添加的属性必须以其所属的类名称为前缀。在此示例中,要搜索选择说明,添加的属性为 Choice.description。同样,要基于选项说明进行搜索,则添加 Option.description 属性。
用例 3:在用户界面上显示其他属性
要在用户界面上显示除预设属性 (选择名称、选择编号、选项名称) 以外的其他选择或选项属性,请按以下步骤操作:
1. 通过创建扩展 ATOOptionSuggestable 类的 suggestable 类来覆盖 getFormatedSuggestions(Collection<ChoiceSuggestionBean>suggestBean)
2. 创建 suggestable 类。此自定义 suggestable 类对 ATOOptionSuggestable 类进行了扩展。此类具有 getFormatedSuggestions(Collection<ChoiceSuggestionBean> suggestBean) 方法。ChoiceSuggestionBean 包含选择、选项和别名对象,通过这些对象可获取要在用户界面上显示的其他属性。
在用户界面上显示其他属性说明的示例代码如下所示:
@Override
public void getFormatedSuggestions(Collection<ChoiceSuggestionBean>suggestBeans) {
String number = "";
String name = "";
String description = "";
String displayText = "";
String valueText = "";
String additionalText = "";

for (ChoiceSuggestionBean bean : suggestBeans) {
if (bean.getChoice() != null) {
number = bean.getChoice().getNumber();
name = bean.getChoice().getName();
description = bean.getChoice().getDescription();
}
if (bean.getAlias() != null) {
number = bean.getAlias().getNumber();
name = bean.getAlias().getName();
description = bean.getAlias().getDescription();
}
if (bean.getOption() != null) {
additionalText = bean.getOption().getName();
}
displayText = name + "," + number + "," + description;
try {
if (OptionsClientHelper.isNumberBasedDisplayEnabled()) {
valueText = number + name;
} else {
valueText = name + number;
}
} catch (WTException e) {
logger.error(e);
}
addSuggestions(displayText, additionalText, valueText);
}
}
* 
确保从自定义 getFormatedSuggestions 方法调用 addSuggestions 方法。
3. 注册 suggestable 类,方法是将其添加到 typedServices.properties 中的服务列表。自定义 suggestable 类必须在 xconf 文件中注册,然后使用 xconfmanager 传播到 \codebase\service.properties 文件中。
<Service context="default" name="com.ptc.core.components.suggest.Suggestable">
<Option cardinality="duplicate" selector="optionalPicker" requestor="null"
serviceClass="<your_Suggestable> " />
</Service>
其他自定义
对于其他自定义,如更改触发搜索的信息 (例如,键入 option.c 将提供名称为 option 且选择以字母 c 开头的显示结果),或要搜索或显示可变类型或可变属性,可按上述章节所述创建自定义的建议类,并且可以覆盖 constructSuggestions (SuggestParms suggestParms) 方法,在其中添加自定义逻辑以更改 searchTerm 或提取并显示可变类型或可变属性。
这对您有帮助吗?