自定义可重用向导步骤
概述
您需要开发一个向导来捕获用户输入,并通过该输入创建或编辑数据库中的 Windchill 业务对象。该向导包含已存在于其他向导中但不应重复的常规步骤。
背景
Windchill 提供了多个和可重用向导步骤,可以对这些步骤进行配置并添加到自定义向导。
在许多情况下,重用向导步骤就像添加正确向导步骤标记并在向导标记中指定向导步骤操作一样简单。本文档不涵盖这一最简单的情况。在某些情况下,可能会有步骤所需的附加信息或需要在步骤中执行的其他自定义。本文档介绍了几种具有附加的必需信息或自定义选项的可重用步骤。本节详细介绍了何时以及如何使用这些步骤。
范围/适用性/假设
假定您已创建自定义 Windchill 业务对象类或子类型,并且您想开发一个使用户能够在数据库中创建或编辑该对象类型实例的向导。
本文档介绍了可重用的常规向导步骤。此外,如果您的自定义类型扩展了现有 Windchill 业务类 (如 WTPart、WTDocument 或 WTChangeIssue),则可能会有一些更特定于这些类的组件,可使用或应使用这些组件来代替此处所述的组件。这些特定于类的组件是基于本文档中所述的公用组件而构建的。对于这些特定于类的组件的讨论超出了本文档所述的范围。
预期结果
在新建的向导中添加一个预先存在的步骤并配置该步骤。
必备知识
要应用此最佳做法,需要了解以下内容:
• 用于创建向导、创建自定义向导步骤和处理向导数据的 Windchill 框架。有关详细信息,请参阅:
还需要研究这些主题下的多个先决条件。本文档以此知识为基础进行构建并提供有关可用组件的其他信息,以帮助您创建和处理在数据库中创建满足特定目的的 Windchill 业务对象的向导。
使用的术语的定义
术语
|
定义
|
基本类型
|
作为向导类型选取器根类型的不可变或子类型类。如果向导没有类型选取器,则其为将要创建的对象类型。基本类型用于为不同子类型具有不同 jsp 变型的向导步骤查找正确的 JSP,直到用户选择特定类型为止。
|
分类属性
|
与已分配给部件的分类节点关联的属性。分类属性通常在单独的步骤中通过不可变属性和全局属性进行指定和编辑。
|
上下文
|
要在其中创建对象的容器 (产品、存储库、项目等)。
|
依存属性
|
此属性的值和/或显示特征将由另一个属性的值 (称为“驱动属性”) 通过对象初始化规则 (OIR)、访问控制策略或其他机制完全或部分确定。
|
驱动属性
|
此属性的值通过对象初始化规则 (OIR)、访问控制策略或其他机制驱动另一个属性 (称为“依存”属性) 的值和/或显示特征。
|
不可变属性
|
在 Java 类中定义的对象属性。
|
不可变类型
|
在 Java 类中定义的对象类型。不可变类型通常使用注释在 java 类中创建,也可以通过扩展系统预设 Windchill 业务对象类创建。
|
对象类型
|
用于定义正在创建的业务对象属性和行为的 Java 类或子类型。
|
全局属性
|
在 Windchill“类型和属性管理”实用程序中定义的对象的属性。这些属性不是在 Java 业务对象类中定义,而是存储在数据库表中,与业务类的表分开存储。
|
子类型
|
使用“类型和属性管理”实用程序而不是在 Java 类中定义的对象类型。子类型可扩展其他子类型,但其根类型均为不可变类型。为本文档末尾的示例创建的 Literature 对象是一个子类型的示例。
|
可重用向导步骤
可使用以下可重用向导步骤:
defineItemAttributesWizStep
此步骤的主体通常包含四个部分:一个只读上下文特性面板、一个类型选取器、一个驱动属性特性面板和一个可编辑属性面板。使用 MVC 框架和 JSP 进行配置。MVC 构建器在步骤中定义内容并配置 (非驱动) 属性面板。上下文面板、类型选取器、驱动属性面板、主要内容面板 (如果有) 以及其他组件通过 JSP 进行配置。只有类型选取器是必需的。
• 上下文面板
正在创建的对象的只读信息是从启动上下文派生的或在上一个向导步骤中输入的。如果对象为 WTContained,则通常会显示新对象的容器。
• 驱动属性
此特性面板显示属性的输入字段,可对用户输入的其他属性值进行驱动和/或约束。如果更改此面板中的值,则会根据新属性值自动刷新所有后续向导步骤。因此,将所有驱动属性放在此部分很重要。
如果将首选项 > 设置为 true 且对象为 OrganizationOwned,则此面板应包括对象组织属性的选取器。尽管组织 ID 不会驱动预设的其他属性值,但客户通常希望建立此类相关性。
• 可编辑属性面板
通常包含先前未输入的对象类型的所有可变和不可变属性,但将在以下步骤中输入的部件分类属性除外。
请注意,此列表中通常显示的属性之一是文件夹位置。文件夹位置驱动了管理域,进而驱动访问控制策略,而后者又可以对可供用户创建的对象类型列表进行驱动。在类型选取器中显示的类型列表基于从启动上下文派生的默认文件夹。用户可能会选择不同的文件夹位置,访问控制策略也会有所不同。因此,用户可以选择其没有权限创建选定类型的文件夹。如果发生这种情况,当用户单击确定时,将显示一条错误消息。
• 复选框
此部分包含一些复选框,可为新对象提供处理指令。这些步骤包括:
复选框标签 | 适用性 | 说明 |
---|
保持检出 | 用于新的 RevisionControlled 对象 | 如果选中,则系统会在创建后检出对象 |
检出并下载 | 用于从模板创建文档 | 如果选中,则会检出并下载新文档 |
已启用 | 用于创建文档模板 | 如果选中,新模板可立即使用 |
editAttributesWizStep
几乎所有编辑向导都包含此步骤,用户在该步骤中编辑对象的大部分属性。它通常包含一个只读上下文特性面板和一个属性输入面板。
默认情况下,没有只读属性。所需属性因对象类型而异。需要时,MVC 构建器用于配置要在给定类型 FOA 显示的只读属性集。在只读中显示的一些典型属性是:
• 对象类型
• 容器名称 (如果对象为 WTContained)
• 组织 ID (如果新对象为 OrganizationOwned,且首选项“显示”->“展示组织”设置为 true)
您需要确定在此面板中为对象类型显示的信息 (如果有)。
属性输入面板通常包含该对象类型所有可编辑的可变和不可变属性的输入字段,不包含部件分类属性的输入字段。在以下步骤中输入这些项。此面板中显示的属性集由“类型和属性管理”实用程序控制。
解决方案
将 editAttributesWizStep 添加到您的新向导并配置该步骤。
何时使用此步骤
解决方案元素
操作
<action name="editAttributesWizStep" id="editAttributesWizStep"
preloadWizardPage="false"
required="true" afterVK="editAttributes" resourceBundle=
"com.ptc.core.ui.componentRB">
<component name="editAttributesWizStep" typeBased="true"
windowType="wizard_step"/>
</action>
操作文件:<Windchill>\codebase\config\actions\actions.xml
请注意,如果 editAttributesWizStep 操作不是向导中的第一步,并取决于先前步骤,则该操作将页面指定为非预加载状态。但是,如果该操作是第一步,则框架将对页面进行预加载,不考虑其在操作中被指定的方式。
JSP
视图 JSP 页面:<Windchill>\codebase\netmarkets\jsp\object\propertyAttributesWizStep.jsp
验证器
EditAttributesStepValidator 可用于验证在此步骤中输入的数据。此类通过检查约束来验证“编辑属性”步骤中的所有输入属性是否都具有有效值。在包含 javascript 的客户端上完成 "required" 属性验证。
其他 Java 类
这些附加的 java 类也涉及创建此步骤并可用于高级自定义。
• DefaultEditAttributesWizStepBuilder:“设置属性”步骤的 MVC 构建器,其中包括空的只读属性区域和可编辑属性面板。扩展此类以定义非空的只读属性集。
• TypedAttributesPanelBuilder:属性面板的 MVC 构建器。
过程 - 配置步骤
在向导标记中添加操作
要将此步骤添加到向导中,可以使用:<jca:wizardStep action="editAttributesWizStep" type="object"/>
添加 initalizeItem 标记
与 defineItemAttributesWizStep 类似,editAttributesWizStep 需要一个 initializeItem 标记。您应将此标记的 "operation" 属性设置为 ${createBean.edit},而不是 ${createBean.create}。以下标记属性不适用于编辑向导:objectHandle、baseTypeName。
布局属性
在“类型和属性管理”实用程序中控制此步骤中显示的属性。有关在此步骤中布置属性的详细信息,请参阅
属性面板。
自定义
如何在该步骤中修改只读特性面板的内容
要使只读属性面板包含某些属性,写入 EditAttributesWizStepBuilder。新构建器应从 DefaultEditAttributesWizStepBuilder 扩展并实现 buildReadOnlyAttributePanelConfig 方法。在此方法中,创建一个包含所需属性的 AttributePanelConfig。使用 TypeBased 注释指定要应用的构建器类型。示例构建器位于
构建向导以编辑单个对象的基本编辑向导示例中。
基本构建器可能如下所示:
@TypeBased(value = "FakeLiterature")
public class LiteratureEditDetailsWizStepBuilder extends
DefaultEditAttributesWizStepBuilder {
@Override
protected AttributePanelConfig buildReadOnlyAttributePanelConfig
(ComponentParams params) throws WTException {
ComponentConfigFactory factory = getComponentConfigFactory();
AttributePanelConfig attrPanel = factory.newAttributePanelConfig();
attrPanel.addComponent(getContainerAttributeConfig(params));
attrPanel.addComponent(factory.newAttributeConfig(DescriptorConstants.
ColumnIdentifiers.TYPE));
return attrPanel;
}
}
SetContextWizStep
此步骤通常只有一个输入字段,作为所创建对象容器的选取器。选定的容器将用于为其他属性选择相应的 OIR。
在许多情况下,容器从向导的启动上下文确定,不需要此步骤。例如,如果从产品的文件夹页面启动向导,则假定容器为该产品。
解决方案
将 SetContextWizStep 添加到新向导并配置该步骤。
何时使用此步骤
此步骤仅适用于 WTContained 对象。此步骤包含一个上下文 (容器) 选取器,如果无法从启动上下文确定该容器,并且/或者您想要允许用户选择一个容器,则应将其包括在 WTContained 对象的创建向导中。
解决方案元素
操作
<action name="setContextWizStep" id="setContextWizStep" preloadWizardPage="true"
required="true"
afterVK="setContextWizStep">
<command windowType="wizard_step"/>
</action>
操作文件:<Windchill>\codebase\config\actions\actions.xml
JSP
视图 JSP 页面:<Windchill>\codebase\WEB-INF\jsp\netmarkets\object\setContextWizStep.jsp
验证器
ContextWizardStepValidator 可在设置上下文向导步骤中验证数据。ContextWizardStepValidator 仅验证表单数据是否包含有效的容器对象参考。
此验证器还可确定是否应在向导中显示该步骤。如果已从启动点确定上下文,则即使该步骤包含在向导中,也会跳过它。
过程 - 配置步骤
在向导标记中添加操作
要将此步骤添加到您的向导,可以使用:<jca:wizardStep action="setContextWizStep" type="object"/>
使用此步骤时,建议在向导中将其作为第一步。
自定义
创建自定义“设置上下文”步骤 JSP 页
如果自定义向导包含“设置上下文”步骤,则上面列出的预设步骤 JSP 通常足够了。只有在“定义对象”步骤中的显示属性之前需要捕获其他属性值时,才可能需要开发自定义步骤 JSP。
例如,假定:
• 向导启动点没有文件夹上下文。
• 没有任何 OIR 为新对象设置默认文件夹位置。
• 一些已定义的访问控制策略拒绝用户为某些对象子类型创建权限。这些策略基于与新对象所在的文件夹关联的管理域。
在这种情况下,对象容器对文件夹选择全无影响,可让用户选择文件夹位置,以便能够准确确定可供用户使用的类型列表。在这种情况下,您可能希望在“定义对象”步骤之前的步骤中放置一个文件夹输入字段。可以将此输入字段添加到“设置上下文”步骤,或在向导中添加附加步骤,以在“设置上下文”步骤之前或之后捕获文件夹位置。(无论哪种方法,都需要为“定义对象”步骤使用自己的 JSP,这样就可以根据“设置上下文”步骤中用户的文件夹选择,在类型选取器中设置管理域参数。)
如果需要自定义“设置上下文”JSP,并且需要包含容器选取器,则建议将预设 JSP 包含在其中,而不是复制预设 JSP 的内容。这样,即使上下文选取器在以后的版本中进行了修改,也会确保自定义页面继续正常运行。
setClassificationAttributesWizStep
解决方案
在新向导中添加 setClassificationAttributesWizStep 并配置该步骤。
何时使用此步骤
在安装 PartsLink 时,此步骤仅适用于 WTPart 和其子类型。它是一个动态步骤,仅在对部件进行分类时才会出现。它允许用户修改部件的分类属性。它在视图模式下显示部件在顶部的分类,并包含分类属性的输入字段表。此步骤可用于创建和编辑对象。
请注意,“设置分类属性”步骤标记为隐藏。如果用户在“设置属性”步骤中单击“选取分类”单选按钮,
将在向导中动态插入该步骤。如果用户单击“不分类”单选按钮取消对部件的分类,则会动态移除该步骤。
解决方案元素
可重用向导步骤
可使用以下可重用向导步骤:
defineItemAttributesWizStep
此步骤的主体通常包含四个部分:一个只读上下文特性面板、一个类型选取器、一个驱动属性特性面板和一个可编辑属性面板。使用 MVC 框架和 JSP 进行配置。MVC 构建器在步骤中定义内容并配置 (非驱动) 属性面板。上下文面板、类型选取器、驱动属性面板、主要内容面板 (如果有) 以及其他组件通过 JSP 进行配置。只有类型选取器是必需的。
• 上下文面板
正在创建的对象的只读信息是从启动上下文派生的或在上一个向导步骤中输入的。如果对象为 WTContained,则通常会显示新对象的容器。
• 驱动属性
此特性面板显示属性的输入字段,可对用户输入的其他属性值进行驱动和/或约束。如果更改此面板中的值,则会根据新属性值自动刷新所有后续向导步骤。因此,将所有驱动属性放在此部分很重要。
如果将首选项 > 设置为 true 且对象为 OrganizationOwned,则此面板应包括对象组织属性的选取器。尽管组织 ID 不会驱动预设的其他属性值,但客户通常希望建立此类相关性。
• 可编辑属性面板
通常包含先前未输入的对象类型的所有可变和不可变属性,但将在以下步骤中输入的部件分类属性除外。
请注意,此列表中通常显示的属性之一是文件夹位置。文件夹位置驱动了管理域,进而驱动访问控制策略,而后者又可以对可供用户创建的对象类型列表进行驱动。在类型选取器中显示的类型列表基于从启动上下文派生的默认文件夹。用户可能会选择不同的文件夹位置,访问控制策略也会有所不同。因此,用户可以选择其没有权限创建选定类型的文件夹。如果发生这种情况,当用户单击确定时,将显示一条错误消息。
• 复选框
此部分包含一些复选框,可为新对象提供处理指令。这些步骤包括:
复选框标签 | 适用性 | 说明 |
---|
保持检出 | 用于新的 RevisionControlled 对象 | 如果选中,则系统会在创建后检出对象 |
检出并下载 | 用于从模板创建文档 | 如果选中,则会检出并下载新文档 |
已启用 | 用于创建文档模板 | 如果选中,新模板可立即使用 |
解决方案
在新向导中添加 defineItemAttributesWizStep 并正确配置该步骤。
何时使用此步骤 此步骤用于创建类型化的对象。有关编辑向导的详细信息,请参阅 editAttributesWizStep。
解决方案元素
操作
此步骤的操作为:
<action name="defineItemAttributesWizStep" afterVK="setAttributesWizStep"
id="defineItemAttributesWizStep " preloadWizardPage="false" required="true"
resourceBundle="com.ptc.core.ui.componentRB">
<component name=" defineItemAttributesWizStep"
typeBased="true" indowType="wizard_step"/>
</action>
操作文件:<Windchill>\codebase\config\actions\actions.xml
| 此步骤的操作具有组件属性,而不是命令属性,因为它是使用 MVC 构建器 Java 类创建的。 |
JSP
视图 JSP 页面:<Windchill>\codebase\WEB-INF\jsp\netmarkets\object\defineItemAttributesWizStep.jsp
这是为此步骤定义视图的默认 JSP。此视图包括上下文名称的只读特性面板、类型选取器、驱动属性面板和用于输入属性值的可编辑属性面板。
出厂设置的视图 JSP 包括执行某些工作的其他 JSP。下表介绍了这些子 JSP
JSP | 说明 |
---|
defineItemAttributesWizStep.jsp | “设置属性”步骤的视图 JSP 包括 configureTypePicker 标记,用于显示和配置类型选取器、驱动属性面板、主要内容面板 (如果有)、属性表和复选框 (如果适用)。 |
defineItemReadOnlyPropertyPanel.jspf | 包含只读面板的 describePropertyPanel 标记 |
defineItemReadOnlyProperties.jspf | 在只读面板中包含属性的 describeProperty 标记 |
defineItem.jspf | 为驱动属性面板查找 JSP 和获取其数据,并呈现所有页面元素。包含只读子面板、类型选取器和驱动属性子面板的 renderPropertyPanel 标记。类型选取器配置为调用一个 JS 函数,在每次更改类型值时都会刷新驱动属性面板、可编辑属性面板和下游非预加载步骤。 |
driverAttributesSetup.jspf | 对 TypeBasedIncludeServlet 进行 ajax 调用,为驱动属性面板获取包含 describePropertyPanel、getModel 和 renderPropertyPanel 标记的 JSP。除非由特定类型的 service.properties 条目覆盖,否则将使用以下 JSP 之一: • <Windchill>\codebase\netmarkets\jsp\object\defineItemAttributesPanel.jsp (对于 OrganizationOwned 对象) ◦ 包含用于输入所属组织的组件。 ◦ 注意:这仅在首选项“显示”->“展示组织”设置为 true 时才显示。 • <Windchill>\codebase\netmarkets\jsp\object\defineItemAttributesPanelEmpty.jsp (对于所有其他对象) ◦ 空白 |
defineItemStepContextPanel.jspf | 为只读属性子面板包含 getModel 和 renderPropertyPanel 标记 |
验证器
SetAttributesStepValidator 可在设置属性向导步骤中验证数据。
此类通过检查约束在“设置属性”步骤中验证所有输入属性是否都具有有效值。此类不执行 "required" 属性验证。在包含 javascript 的客户端上完成。
标记
以下所有标记均在 <Windchill>\codebase\WEB-INF\tlds\components.tld 文件中定义。
有关标记及其属性的详细信息,请参阅以下所列 Windchill 客户端体系结构公用组件标记库和标记处理程序的 javadoc。
元素 | 说明 |
---|
initializeItem | 使用在标记上传递的属性值和向导的启动上下文来初始化要创建的对象的某些数据。此数据在 HTML 表单数据和 NmCommandBean 的 HTTPRequestData 参数映射中作为隐藏字段存储。 标记处理程序:com\ptc\core\components\tags\components\InitializeItemTag |
attributesTableWizComponent | 构建用于输入属性值的对象属性的属性布局。布局包含一组名称值对,并且由“类型和属性管理”实用程序控制。 此标记仅在验证驱动属性后且驱动属性有效时才会呈现属性。 WEB-INF\tags\mvc\attributesTableWizComponent.tag |
configureTypePicker | 标记处理程序:com\ptc\core\components\tags\components\ConfigureTypePickerTag |
其他 Java 类
这些附加的 java 类也涉及创建此步骤并可用于高级自定义。
• DefineItemAttributesWizStepBuilder:“设置属性”步骤的 MVC 构建器,其中包括驱动属性和属性表格。
• TypedAttributesPanelBuilder:属性面板的 MVC 构建器。
过程 - 配置步骤
在向导标记中添加操作
要在向导中添加此步骤,请使用: <jca:wizardStep action="defineItemAttributesWizStep" type="object"/>
添加 initializeItemTag
InitializeItem 标记为通过向导的启动上下文创建的对象和传递到标记的属性初始化某些数据。此信息包括:
• 操作类型 (创建或编辑)
• 正在创建的对象的基本类型
• 默认容器
• 类型选取器的初始值
• 为正在创建的对象键入实例标识符
• AttributePopulator 类 (如果有)
有关此标记属性,请参阅
设置属性步骤的默认视图 JSP。唯一一个必需属性为 "operation"。
<jca:initializeItem operation="${createBean.create}" baseTypeName="wt.doc.WTDocument|org.rnd.FakeLiterature"/>
布局属性
在“类型和属性管理”实用程序中控制此步骤中显示的属性。有关在此步骤中布置属性的详细信息,请参阅
属性面板。
自定义
如果“设置属性”步骤是向导中的第一步,或者此步骤中的任何内容均不受之前步骤的数据影响,则可以预加载。否则,将其指定为不在步骤操作中预加载。如果向导包含“设置上下文”步骤和类型选取器,则不应预加载,因为上下文会影响类型选取器的内容。
以下各节介绍了如何在此步骤中执行常见自定义。
| 请记住,应始终将自定义 jsp 和 jspf 文件放置在 wtSafeArea 下的目录中,如 管理自定义中所述。 |
<initializeItem> 标记参数
有关标记参数的最新信息,请参阅 com.ptc.core.components.tags.InitializeItemTag 和公用组件标记库的 javadoc。
参数 | 默认值 | 可能的值 | 必需? | 说明 |
---|
行号 | 无 | CreateAndEditWizBean.CREATE CreateAndEditWizBean.EDIT | 是 | 指示是否正在创建或编辑对象。 |
objectHandle | | | | 不用于单一对象创建向导。 |
baseTypeName | 与向导操作关联的类型 | 任何 Windchill 类型标识符字符串 | 否 | 要创建的对象类的字符串形式的 Windchill 类型标识符。例如,"wt.part.WTPart" 或 "wt.part.WTPart|MySoftPart"。 此类将成为向导类型选取器中的根类型。它还用于查找包含不同子类的不同变型向导步骤的正确 JSP,直到在类型选取器中选择特定类型为止。可选。如果未指定, 将使用与向导操作关联的类型。 |
配置类型选取器
向导的基本类型从 InitializeItem 标记的属性衍生而来,而不是从与向导操作关联的对象类型衍生而来。(稍后提供有关 InitializeItem 标记的详细信息。)如果要允许用户创建基本类型或基本类型的子类型,则应在向导中包括类型选取器。
类型选取器中的可用类型列表通常按如下所示进行确定:
1. 计算基本类型的固定和可变子类型的列表。可变子类型是为给定组织容器中的基本类型定义的可实例化子类型。
2. 根据给定容器中类型的复合对象初始化规则,确定基本类型和子类型的默认生命周期和初始生命周期状态。
3. 确定新对象的默认文件夹位置上下文。通过如下方式完成:
4. 如果在复合 OIR 中为基本类型定义了 "SelectGeneratedFolderByDefault" 呈现器约束,或者用户正在从共享到容器的文件夹浏览器中创建共享对象
◦ 在目标容器中使用由 OIR 定义的基本类型的文件夹
◦ 如果没有由 OIR 定义的文件夹,则使用目标容器的默认文件柜
5. 如果未定义任何呈现器约束,并且它不是共享对象
◦ 使用在启动上下文中选择的文件夹。可以是在文件夹浏览器表格中选中的文件夹、在文件夹浏览器左侧窗格中突出显示的文件夹或已启动其信息页面创建操作的与业务对象关联的文件夹。
◦ 如果不能从启动上下文确定任何文件夹,请按 i 项所示确定该文件夹。
6. 根据默认的初始生命周期状态和文件夹位置的管理域,确定用户是否具有每种类型的创建权限。否则,请从列表中筛选该类型。
7. 在选取器中显示剩余类型。
类型选取器的默认值由某些基本类型的首选项确定,如下所示:
基本类型 | 首选项 |
---|
WTPart | “创建和编辑”->“部件创建默认类型” |
WTDocument | “创建和编辑”->“文档创建默认类型” |
WTChangeIssue (ProblemReport) | “创建和编辑”->“问题报告创建默认类型” |
WTChangeRequest2 (变更请求) | “创建和编辑”->“变更请求创建默认类型” |
WTChangeOrder2 (变更通告) | “创建和编辑”->“创建变更通告默认类型” |
WTChangeActivity2 (变更任务) | “创建和编辑”->“创建变更任务默认类型” |
WTVariance (超差) | “创建和编辑”->“要创建超差的默认类型” |
对于所有其他向导,会将基本类型用作默认类型。
当用户在类型选取器中选择类型时,将执行 javascript,以刷新其下方的驱动属性面板和以下所有向导步骤。这一步是必需的,因为对象类型会影响后续步骤中使用的 JSP 以及显示的属性输入字段。
如何重新配置类型选取器
可对类型选取器进行修改以过滤列表中的某些类型、指定不同的默认值等。配置参数在 ConfigureTypePicker 标记的 javadoc 中进行了介绍。
要指定不同的选取器参数,您需要:
1. 在向导 JSP 中,将以下行添加到文件的顶部:
<%@ taglib uri="http://www.ptc.com/windchill/taglib/picker" prefix="p"%>
2. 添加 configureTypePickerTag
3. 将 "pickerParam" 子标记添加到 configureTypePicker 标记中,如 ConfigureTypePickerTag 的 javadoc 中所示。
<configureTypePicker> 标记参数
此标记的参数采用 pickerParam 子标记的形式。所有这些参数都是可选的。语法示例:
<jca:configureTypePicker>
<p:pickerParam name="seedType" value="wt.part.WTPart|org.r_and_d.
SoftPartType1/>
<p:pickerParam name="filterType"
value="wt.part.WTPart|org.r_and_d.SoftPartType1|org.r_and_d.
SoftPartType1B"/>
<p:pickerParam name="showRoot" value="false"/>
</jca:configureTypePicker>
参数 | 默认值 | 可能的值 | 说明 |
---|
seedType | 无 | 任何 Windchill 类型标识符字符串 (逻辑或外部) | 应用于生成类型列表的顶层类型。例如,"wt.part.WTPart"。可以包含多个参数。 |
defaultType | 可从首选项获取 (请参阅上表) 对于所有其他向导,将使用基本类型。 | 任何 Windchill 类型标识符字符串 (逻辑或外部) | 应默认选定的类型。例如,"wt.part.WTPart"。可以是字符串,例如“选择类型”,而不是类型名称。 |
filterType | 无 | 任何 Windchill 类型标识符字符串 (逻辑或外部) | 应从类型列表中排除的类型。例如,"SoftPartType1"。筛选器类型的子代也排除在外。可以包含多个参数。 |
displayHierarchy | false | true (显示层次结构) false (显示展平式列表) | 指示类型列表应显示为展平式列表或分层形式。 |
showRoot | true | true (显示种子类型) false (不显示种子类型) | 是否不应显示 seedTypes。 |
adminDomainRefString | | 任何管理域参考字符串 | 应用于类型列表的访问控制筛选的管理域参考 String 表示。例如,"wt.admin.AdministrativeDomain:7" |
类型 | BOTH | ROOT_TYPES (仅显示 seedTypes) SOFT_TYPES (仅显示子类型) MODELED_TYPES (仅显示模型化类型) BOTH (将显示模型化和子类型) | 指示要显示类型的种类。值应为在 com.ptc.windchill.enterprise.picker.type.server.TypePickerTypes 中定义的枚举常量之一。 |
如何将组件添加到步骤
要将组件添加到步骤 (例如,底部的附加复选框),请执行以下操作:
1. 为步骤创建新的主 JSP 文件
2. 将文件内容 <Windchill>\netmarkets\jsp\object\defineItemWizStep.jsp 复制到新文件中。
3. 按如下方式将所需的组件添加到页面:
<div id='driverAttributesPane'>
...
</div>
Add components here if you want them to appear below the
drive attributes panel
<div id='setAttributesTablePane'></div>
Add components here if you want them to appear below the attributes panel
4. 为步骤创建新的构建器类,覆盖 getView() 方法以指定步骤的视图 JSP。
此步骤的生成器类的建议名称为:
<object type> DefineItemAttributesWizStepBuilder.java
此步骤的视图 JSP 的建议名称为:
defineItemAttributesWizStep.jsp
或者
defineItemAttributesWizStep For<object type>.jsp (如果目录中有多个)
如果对象为 RevisionControlled,则要包括的附加信息的示例是“保持检出”复选框,在视图 JSP 中包括以下 JSP 以进行显示:/netmarkets/jsp/components/keepCheckedOutCheckbox.jspf
如何从步骤中移除组件
1. 为步骤创建新的主 JSP 文件
2. 将文件内容 <Windchill>\netmarkets\jsp\object\defineItemWizStep.jsp 复制到新文件中。
3. 一个可能想要移除的组件是只读特性面板。要执行此操作,请从文件中删除以下行:
<%@ include file="/netmarkets/jsp/components/
defineItemReadOnlyPropertyPanel.jspf"%>
如何在步骤中修改只读特性面板的内容
1. 为步骤创建新的主 JSP 文件。
2. 将文件内容 <Windchill>\netmarkets\jsp\object\defineItemWizStep.jsp 复制到新的主 jsp 文件中。
3. 删除以下行,并将其替换为包含您要显示属性的自定义 describePropertyPanel 标记:
<%@ include file="/netmarkets/jsp/components/
defineItemReadOnlyPropertyPanel.jspf"%>
请确保在 describePropertyPanel 标记上设置以下属性:
属性 | 值 |
---|
var | "defineItemStepContextPanelDescriptor" |
id | "defineItemStepContextPanelDescriptor" |
范围 | "request" |
mode | "VIEW" |
或者,也可以包含一个新的 JSPF 文件 (该文件中包含 describePropertyPanel 标记),而不是将该文件放在行中。
如何创建无驱动属性的步骤
对于此操作,您不需要创建新的向导步骤 JSP。
在基于类型的服务特性 xconf 文件中创建一个指向 defineItemAttributesPanelEmpty JSP 文件的条目,如下所示:
<Resource context="default" name="com.ptc.netmarkets.util.misc.FilePathFactory">
<Option requestor="<object type to be created>"
resource=”/netmarkets/jsp/object/defineItemAttributesPanelEmpty.jsp”
selector="defineItemAttributesPanel"/>
</Resource>
如何创建包含附加驱动属性的步骤
您不需要为驱动属性创建新的向导步骤 JSP,只需如下所示创建新的子 JSP 文件。
1. 为驱动属性创建一个包含 describePropertyPanel、getModel 和 renderPropertyPanel 标记的新 JSP 文件。(注意,必须是一个 JSP 文件,而不是一个 JSPF 文件。)使用 <Windchill>\codebase\netmarkets\jsp\object\defineItemAttributesPanel.jsp 文件作为示例,并列出您想要在 describePropertyPanel 标记中显示的属性。由于此 JSP 的输出被解析并动态插入到页面中,因此,除了上面列出的三个标记外,不得包含任何显示文本或 HTML。
2. 在基于类型的服务特性 xconf 文件中创建一个指向新 JSP 文件的条目,如下所示:
<Resource context="default"
name="com.ptc.netmarkets.util.misc.FilePathFactory">
<Option requestor="<object type to be created>"
resource=”<path to your jsp page ”>
selector="defineItemAttributesPanel"/>
</Resource>
editAttributesWizStep
几乎所有编辑向导都包含此步骤,用户在该步骤中编辑对象的大部分属性。它通常包含一个只读上下文特性面板和一个属性输入面板。
默认情况下,没有只读属性。所需属性因对象类型而异。需要时,MVC 构建器用于配置要在给定类型 FOA 显示的只读属性集。在只读中显示的一些典型属性是:
• 对象类型
• 容器名称 (如果对象为 WTContained)
• 组织 ID (如果新对象为 OrganizationOwned,且首选项“显示”->“展示组织”设置为 true)
您需要确定在此面板中为对象类型显示的信息 (如果有)。
属性输入面板通常包含该对象类型所有可编辑的可变和不可变属性的输入字段,不包含部件分类属性的输入字段。在以下步骤中输入这些项。此面板中显示的属性集由“类型和属性管理”实用程序控制。
解决方案
将 editAttributesWizStep 添加到您的新向导并配置该步骤。
何时使用此步骤
解决方案元素
操作
<action name="editAttributesWizStep" id="editAttributesWizStep"
preloadWizardPage="false"
required="true" afterVK="editAttributes" resourceBundle=
"com.ptc.core.ui.componentRB">
<component name="editAttributesWizStep" typeBased="true"
windowType="wizard_step"/>
</action>
操作文件:<Windchill>\codebase\config\actions\actions.xml
请注意,如果 editAttributesWizStep 操作不是向导中的第一步,并取决于先前步骤,则该操作将页面指定为非预加载状态。但是,如果该操作是第一步,则框架将对页面进行预加载,不考虑其在操作中被指定的方式。
JSP
视图 JSP 页面:<Windchill>\codebase\netmarkets\jsp\object\propertyAttributesWizStep.jsp
验证器
EditAttributesStepValidator 可用于验证在此步骤中输入的数据。此类通过检查约束来验证“编辑属性”步骤中的所有输入属性是否都具有有效值。在包含 javascript 的客户端上完成 "required" 属性验证。
其他 Java 类
这些附加的 java 类也涉及创建此步骤并可用于高级自定义。
• DefaultEditAttributesWizStepBuilder:“设置属性”步骤的 MVC 构建器,其中包括空的只读属性区域和可编辑属性面板。扩展此类以定义非空的只读属性集。
• TypedAttributesPanelBuilder:属性面板的 MVC 构建器。
过程 - 配置步骤
在向导标记中添加操作
要将此步骤添加到向导中,可以使用:<jca:wizardStep action="editAttributesWizStep" type="object"/>
添加 initalizeItem 标记
与 defineItemAttributesWizStep 类似,editAttributesWizStep 需要一个 initializeItem 标记。您应将此标记的 "operation" 属性设置为 ${createBean.edit},而不是 ${createBean.create}。以下标记属性不适用于编辑向导:objectHandle、baseTypeName。
布局属性
在“类型和属性管理”实用程序中控制此步骤中显示的属性。有关在此步骤中布置属性的详细信息,请参阅
属性面板。
自定义 - 如何在步骤中修改只读特性面板的内容
要使只读属性面板包含某些属性,写入 EditAttributesWizStepBuilder。新构建器应从 DefaultEditAttributesWizStepBuilder 扩展并实现 buildReadOnlyAttributePanelConfig 方法。在此方法中,创建一个包含所需属性的 AttributePanelConfig。使用 TypeBased 注释指定要应用的构建器类型。示例构建器位于
构建向导以编辑单个对象的基本编辑向导示例中。
基本构建器可能如下所示:
@TypeBased(value = "FakeLiterature")
public class LiteratureEditDetailsWizStepBuilder extends
DefaultEditAttributesWizStepBuilder {
@Override
protected AttributePanelConfig buildReadOnlyAttributePanelConfig
(ComponentParams params) throws WTException {
ComponentConfigFactory factory = getComponentConfigFactory();
AttributePanelConfig attrPanel = factory.newAttributePanelConfig();
attrPanel.addComponent(getContainerAttributeConfig(params));
attrPanel.addComponent(factory.newAttributeConfig(DescriptorConstants.
ColumnIdentifiers.TYPE));
return attrPanel;
}
}
SetContextWizStep
此步骤通常只有一个输入字段,作为所创建对象容器的选取器。选定的容器将用于为其他属性选择相应的 OIR。
在许多情况下,容器从向导的启动上下文确定,不需要此步骤。例如,如果从产品的文件夹页面启动向导,则假定容器为该产品。
解决方案
将 SetContextWizStep 添加到新向导并配置该步骤。
何时使用此步骤
此步骤仅适用于 WTContained 对象。此步骤包含一个上下文 (容器) 选取器,如果无法从启动上下文确定该容器,并且/或者您想要允许用户选择一个容器,则应将其包括在 WTContained 对象的创建向导中。
解决方案元素
操作
<action name="setContextWizStep" id="setContextWizStep" preloadWizardPage="true"
required="true"
afterVK="setContextWizStep">
<command windowType="wizard_step"/>
</action>
操作文件:<Windchill>\codebase\config\actions\actions.xml
JSP
视图 JSP 页面:<Windchill>\codebase\WEB-INF\jsp\netmarkets\object\setContextWizStep.jsp
验证器
ContextWizardStepValidator 可在设置上下文向导步骤中验证数据。ContextWizardStepValidator 仅验证表单数据是否包含有效的容器对象参考。
此验证器还可确定是否应在向导中显示该步骤。如果已从启动点确定上下文,则即使该步骤包含在向导中,也会跳过它。
过程 - 配置步骤
在向导标记中添加操作
要将此步骤添加到您的向导,可以使用:<jca:wizardStep action="setContextWizStep" type="object"/>
使用此步骤时,建议在向导中将其作为第一步。
自定义 - 创建自定义“设置上下文”步骤 JSP 页
如果自定义向导包含“设置上下文”步骤,则上面列出的预设步骤 JSP 通常足够了。只有在“定义对象”步骤中的显示属性之前需要捕获其他属性值时,才可能需要开发自定义步骤 JSP。
例如,假定:
• 向导启动点没有文件夹上下文。
• 没有任何 OIR 为新对象设置默认文件夹位置。
• 一些已定义的访问控制策略拒绝用户为某些对象子类型创建权限。这些策略基于与新对象所在的文件夹关联的管理域。
在这种情况下,对象容器对文件夹选择全无影响,可让用户选择文件夹位置,以便能够准确确定可供用户使用的类型列表。在这种情况下,您可能希望在“定义对象”步骤之前的步骤中放置一个文件夹输入字段。可以将此输入字段添加到“设置上下文”步骤,或在向导中添加附加步骤,以在“设置上下文”步骤之前或之后捕获文件夹位置。(无论哪种方法,都需要为“定义对象”步骤使用自己的 JSP,这样就可以根据“设置上下文”步骤中用户的文件夹选择,在类型选取器中设置管理域参数。)
如果需要自定义“设置上下文”JSP,并且需要包含容器选取器,则建议将预设 JSP 包含在其中,而不是复制预设 JSP 的内容。这样,即使上下文选取器在以后的版本中进行了修改,也会确保自定义页面继续正常运行。
setClassificationAttributesWizStep
解决方案
在新向导中添加 setClassificationAttributesWizStep 并配置该步骤。
何时使用此步骤
在安装 PartsLink 时,此步骤仅适用于 WTPart 和其子类型。它是一个动态步骤,仅在对部件进行分类时才会出现。它允许用户修改部件的分类属性。它在视图模式下显示部件在顶部的分类,并包含分类属性的输入字段表。此步骤可用于创建和编辑对象。
请注意,“设置分类属性”步骤标记为隐藏。如果用户在“设置属性”步骤中单击“选取分类”单选按钮,
将在向导中动态插入该步骤。如果用户单击“不分类”单选按钮取消对部件的分类,则会动态移除该步骤。
解决方案元素
操作
<action name="setClassificationAttributesWizStep"
id="setClassificationAttributesWizStep"
hidden="true" required="true" preloadWizardPage="false">
<command windowType="wizard_step"/>
</action>
操作文件:<Windchill>\codebase\config\actions\PartManagement-actions.xml
JSP
视图 JSP 页面:<Windchill>\codebase\netmarkets\jsp\part\setClassificationAttributesWizStep.jsp
验证器
“设置分类属性”步骤使用的验证器与“设置属性”步骤相同。
过程 - 配置步骤
要将此步骤添加到向导中,可以使用:
<jca:wizardStep action="setClassificationAttributesWizStep" type="part"/>
在向导步骤中添加操作
自定义
在编辑向导中使用该步骤
构建包含“设置分类属性”步骤的编辑向导时,如果正在编辑的部件已分类,则需要动态加载该步骤。<Windchill>\codebase\netmarkets\javascript\part\PartHelper.js 中的 JS 函数 "loadClassificationStep()" 可用于执行此操作。在大多数情况下,当向导加载主向导 JSP 时,应通过调用 "onloadEditPartWizard()" 函数对此进行间接调用,如下所示:
<script language="JavaScript" src="netmarkets/javascript/part/PartHelper.js">
</script>
... full jsp contents, the following javascript
should be the last thing in the file...
<script language="Javascript">
PTC.onReady(onloadEditPartWizard);
</script>
onloadEditPartWizard() 函数调用 loadClassificationStep(),并且还对从工作区启动的向导执行一些额外配置。无论您的向导是否可以从工作区启动,您都可以使用它。
attachments_step
通常在创建或编辑 ContentHolders 的对象时会包括此步骤。它允许用户将文档、链接和其他内容附加到新对象。
有关为合并此步骤必须包括在内的元素的信息,请参阅
附件。
附件步骤未提供或不需要任何验证器。
setAccessControlWizStep
当您想要允许用户修改对象的访问权限时,通常会包括此步骤。
有关为合并此步骤必须包括在内的元素的信息,请参阅
组件访问控制。
示例代码
“设置属性”步骤的默认视图 JSP
此 JSP 是 <Windchill>/codebase/config/actions/actions.xml 中 objecttype=object 的 "defineItemAttributesWizStep" 操作的 MVC 视图。任何对象的“设置属性”步骤的 MVC 构建器均为 DefineItemAttributesWizStepBuilder。构建器的 MVC 视图在 WEB_INF/jsp/object/ defineItemAttributesWizStep.jsp 中定义。
WTPart 的“设置属性”步骤的默认视图 JSP 的下一部分将说明针对对象类型 WTPart 提供视图 jsp 的过程,原因在于 WTPart 需要包括自定义类型选取器和
ReadOnlyPropertyPanel。
<%@ taglib uri="http://www.ptc.com/windchill/taglib/jcaMvc" prefix="mvc"%>
<%@ include file="/netmarkets/jsp/components/beginWizard.jspf"%>
<%@ include file="/netmarkets/jsp/components/createEditUIText.jspf"%>
<%@ include file="/netmarkets/jsp/components/includeWizBean.jspf"%Ok. W>
//The driver attribute panel that defines the top section that includes the read
only property panel for context, type picker and driver attributes
<div id='driverAttributesPane'>
<%@ include
file="/netmarkets/jsp/components/defineItemReadOnlyPropertyPanel.jspf"%>
<jca:configureTypePicker/>
<%@ include file="/netmarkets/jsp/components/defineItem.jspf"%>
</div>
//Include Attribute Panel defining the non driver attributes
<mvc:attributesTableWizComponent/>
<%@ include file="/netmarkets/jsp/util/end.jspf"%>
WTPart 的“设置属性”步骤的默认视图 JSP
WTPart 需要包括与 CreateCadDocStep 选项相关的自定义类型选取器、ReadOnlyPropertyPanel 和自定义信息。因此,我们需要为 WTPart (PartDefineItemAttributesWizStepBuilder) 定义一个构建器,以设置“设置属性”步骤的视图 (WEB_INF/jsp/part/defineItemAttributesWizStep.jsp)。
与类属模型唯一的区别是,用于呈现驱动属性的 JSP 不同。
<%@ taglib uri="http://www.ptc.com/windchill/taglib/jcaMvc" prefix="mvc"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/mvc" prefix="mvc1"%>
<%@ include file="/netmarkets/jsp/components/beginWizard.jspf"%>
<%@ include file="/netmarkets/jsp/components/createEditUIText.jspf"%>
<%@ include file="/netmarkets/jsp/components/includeWizBean.jspf"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/wrappers" prefix="wrap"%>
<%@ page import="com.ptc.windchill.enterprise.part.partResource" %>
<fmt:setBundle basename="com.ptc.windchill.enterprise.part.partResource"/>
<fmt:message var="createCADDocument" key="<%= partResource.CREATE_CAD_DOC_
FROM_NEW_PART_LABEL %>" />
<div id='${createBean.encodedCurrentObjectHandle}driverAttributesPane'>
<%@ include file="/netmarkets/jsp/part/defineItem.jspf"%>
</div>
<mvc:attributesTableWizComponent/>
<c:if test='${param.showNewCADDocStep == "true"}'>
<wrap:checkBox name="createCADDocForPart" id="createCADDocForPart"
label="${createCADDocument}" renderLabel="true"
renderLabelOnRight="true" checked="false"
onclick="toggleCreateCADDocStep('part.defineItemAttributesWizStepForCADDoc!~
objectHandle~caddocHandle~!');" />
</c:if>
<br>
<c:if test='${param.invokedfrom != "workspace"}'>
<%@ include
file="/netmarkets/jsp/components/keepCheckedOutCheckbox.jspf"%>
</c:if>
<input id="selectedClfNodes" type="hidden" name="selectedClfNodes" >
<input id="selectedClfNodesDisplayName" type="hidden"
name="selectedClfNodesDisplayName" >
<%@ include file="/netmarkets/jsp/util/end.jspf"%>
为 WTPart 定义项面板的 JSP
文件名:<Windchill>\codebase\netmarkets\jsp\part\defineItem.jspf
此示例说明了如何覆盖只读上下文面板以及如何重新配置类型选取器。
<%@ page import="com.ptc.windchill.enterprise.part.PartConstants" %>
<%@ page import="com.ptc.core.ui.componentRB" %>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/components"
prefix="jca"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/picker" prefix="p"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/partcomponents"
prefix="partcomp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://www.ptc.com/windchill/taglib/fmt" prefix="fmt"%>
<jca:describePropertyPanel var="defineItemStepContextPanelDescriptor"
id="defineItemStepContextPanelDescriptor"
scope="request" mode="VIEW" type="wt.part.WTPart">
<jca:describeProperty id="containerName"
label="${createBean.containerLabel}"/>
</jca:describePropertyPanel>
<%-- Get the part types to filter from type picker selection list --%>
<partcomp:PartCreateHelper var="partTypesToFilter"
method="getPartTypesToFilter"/>
<c:choose>
<c:when test='${param.invokedfrom == "tabular_input"}' >
<!-- If New Part client is invoked from Edit Structure, association
constraints need to be enforced. (Please see the Javadoc for
DefaultAssociationConstraintIT for more details). The list of
creatable types needs to be filtered out to inlcude only the
types allowed by association constrains. This is achieved by
finding the list of valid (allowable) types using the
getSeedPartTypes below and then setting the type picker's
'type' parameter to 'ROOT_TYPES' -->
<!-- Get the seed part types. Usually, it is wt.part.WTPart but
it can be a bunch of types if association contraints
are in place -->
<partcomp:PartCreateHelper var="seedPartTypes" method="getSeedPartTypes"/>
<jca:configureTypePicker>
<%--
Type Picker picks up the default from Preferences.
It does not have be set here.
--%>
<c:forEach var="item" items="${seedPartTypes}">
<p:pickerParam name="seedType" value="${item}"/>
</c:forEach>
<c:forEach var="item" items="${partTypesToFilter}">
<p:pickerParam name="filterType" value="${item}"/>
</c:forEach>
<p:pickerParam name="type" value="ROOT_TYPES"/>
</jca:configureTypePicker>
</c:when>
<c:when test='${param.invokedfrom == "config_link_table"}' >
<!-- The part types in the type picker must come from the
association constraints on the configurable link. -->
<clui:getRoleBTypesForNewAction var="roleBObjectTypes"
roleBBaseType="wt.part.WTPart"/>
<jca:configureTypePicker>
<c:forEach var="item" items="${roleBObjectTypes}">
<p:pickerParam name="seedType" value="${item}"/>
</c:forEach>
<c:forEach var="item" items="${partTypesToFilter}">
<p:pickerParam name="filterType" value="${item}"/>
</c:forEach>
<p:pickerParam name="type" value="ROOT_TYPES"/>
</jca:configureTypePicker>
</c:when>
<c:otherwise>
<jca:configureTypePicker>
<%--
Type Picker picks up the default from Preferences.
It does not have be set here.
--%>
<c:forEach var="item" items="${partTypesToFilter}">
<p:pickerParam name="filterType" value="${item}"/>
</c:forEach>
</jca:configureTypePicker>
</c:otherwise>
</c:choose>
<%@ include file="/netmarkets/jsp/components/defineItem.jspf"%>
更多资源
相关自定义文档
相关的包/类 Javadoc
• com.ptc.core.components.tags.components.InitializeItemTag
• com.ptc.core.components.tags.components.ConfigureTypePickerTag
• 公用组件标记库 Javadoc