扩展 Windchill ESI Java 代码
背景
Windchill ESI 服务功能使用 Info*Engine 任务和 java 类来实现。有关这些任务和类的详细信息,请参阅本文档中的“Windchill ESI 服务模块”一节。这些服务可以使用《PTC Windchill 自定义指南》中所述的 Windchill Information Modeler 进行扩展。
也可以在不使用 Windchill Information Modeler 的情况下快速自定义 Windchill 服务的多个关键功能。提供了以下自定义机制:
VDB 构建器
Windchill ESI 响应是由 Info*Engine 的 toXML API 从 Info*Engine 虚拟数据库 (VDB) 内容生成的 XML 文档。有关 Info*Engine VDB 的详细信息,请参阅Info*Engine User's GuideWindchill ESI 服务提供了一组构成 VDB 的类,以便正确格式化 ESI 响应输出 XML。有关 VDB 构建器 (包括其自定义的相关内容) 的详细信息,请参阅本文档中的“VDB 构建器”一节。
多个呈现器
呈现器是指用于处理 Windchill 对象并将这些对象转换为由 Windchill ESI VDB 构建器管理和格式化的 Info*Engine 元素对象 (请参阅本文档中的“VDB 构建器”一节)。Windchill ESI 服务提供了以下呈现器:
呈现器类
呈现的对象
ESIRenderer
不适用 - 这是由类 BasicESIRenderer 实现的接口,如下所述。
BasicESIRenderer
不适用 - 此类用作下面列出的所有呈现器类的抽象基类。
ESIAlternateUnitOfMeasureRenderer
AlternateUnitOfMeasure (用于保留诸如部件主数据、工艺计划主数据等 AlternateUnitAssignable 对象的备用测量单位信息)
ESIWTChangeOrder2Renderer
WTChangeOrder2 和所有可变更对象
ESIECNHeaderRenderer
WTChangeOrder2
ESIBOMRenderer
Windchill 产品结构
ESIBOMHeaderRenderer
代表指定 BOM 装配的 Windchill 部件/资源
ESIBOMSubordinateRenderer
不适用 - 此类用作类 ESIBOMComponentRenderer、ESISubstituteRenderer 和 ESIReferenceDesignatorRenderer 的抽象基类。
ESIBOMComponentRenderer
PartUsageInfo 对象 (用于说明 WTPartUsageLink 对象)
ESISubstituteRenderer
PartUsageInfo 对象 (用于说明 WTPartSubstituteLink 对象)
ESIReferenceDesignatorRendererer
PartUsageInfo 对象 (用于说明 UsesOccurrence 对象)
ESIWTPartRenderer
WTPart 和任何关联的 WTPartMaster 和 WTPartAlternateLink 对象 与 WTPart 对象关联的 EnterpriseData 对象
ESIAbstractDocumentsRenderer
不适用 - 此类用作类 ESIEPMDocumentRenderer 的抽象基类。
ESIDocumentsRenderer
PartDocInfo 对象 (用于说明 WTDocument、EPMDocument、WTPartReferenceLink、WTPartDescribeLink、BuildHistory、ERPMaterialDocumentDescribeLink、ERPMaterialDocumentReferenceLink 和 ERPMaterialEPMDocumentDescribeLink 对象)。
* 
此类用于呈现与 RevisionControlled 对象关联的 WTDocument 和 CAD 文档,以及独立的 WTDocument。
ESIEPMDocumentRenderer
CAD 文档及其依存对象 (即通过成员或参考关联与主文档关联的 CAD 文档)。
* 
此类用于呈现 CAD 文档结构和独立的 CAD 文档。
ESIMadeFromObjectRenderer
“构成”对象,例如“构成集”或“联合生产”。
ESIPromotionRequestRenderer
PromotionNotice 对象和所有关联的可升级对象。但是,默认情况下,只有可升级对象通过 ESI 响应发送;如果还要发送 PromotionNotice 对象,则该对象需要自定义 ESI 响应元信息文件。
ESIProcessPlanRenderer
MPMProcessPlan 和所有关联的对象,例如工序、操作、标准程序、文档、BOM 等。
ESIProcessPlanHeaderRenderer
MPMProcessPlan 对象及其属性。
ESIStandardProcedureLinkRenderer
MPMStandardProcedureLink (用于将工艺计划/工序/操作链接到其标准程序)。
ESIPartToProcessPlanLinkRenderer
MPMPartToProcessPlanLink (用于将工艺计划链接到其部件)。
ESIWorkInstructionRenderer
不适用 - 呈现与 MPMOperationHolder (例如 MPMOperation) 关联的工作指令。
ESISequenceRenderer
MPMSequence 及其关联的对象,例如文档和标准程序。
ESISequenceUsageLinkRenderer
MPMSequenceUsageLink (用于将工艺计划链接到其工序)。
ESIOperationRenderer
MPMOperation 和所有关联的对象,例如子操作、标准程序、BOM 分配部件、非操作耗用部件、工作指令、文档、资源等。
ESIOperationUsageLinkRenderer
MPMOperationUsageLink (用于将工艺计划/工序/操作链接到其操作/子操作)。
ESIOperationToPartLinkRenderer
MPMOperationToPartLink (用于将操作链接到其 BOM 分配部件)。
ESIOperatedOnPartLinkRenderer
MPMOperationToOperatedPartLink (用于将操作链接到“非操作耗用”部件)。
ESIOperationConsumableResourceRenderer
MPMOperationToConsumableLink (用于将操作链接到可耗用资源,例如工具或工艺材料)。
ESIOperationWorkCenterRenderer
MPMOperationToWorkCenterLink (用于将操作链接到工作中心)。
ESIResourceRenderer
不适用 - 此类用作处理各种资源 (例如工具、工艺材料和技能) 的切入点;此类会实例化相应类型的资源呈现器,并将给定资源的处理委派给该实例。
ESIToolingRenderer
MPMTooling 和所有关联的文档。
ESIProcessMaterialRenderer
MPMProcessMaterial 和所有关联的文档。
ESISkillRenderer
MPMSkill 和所有关联的文档。
ESIControlCharacteristicRenderer
MPMControlCharacteristic 和关联的 ModelItem。
ESIQualityLinkRenderer
MPMPartQualityLink (用于将部件链接到控制特征)、MPMProcessQualityLink (用于将工艺计划链接到控制特征) 和 MPMOperationQualityLink (用于将操作链接到控制特征主数据)。
ESIResourceUsageLinkRenderer
WTPartUsageLink 是资源结构的一部分,用于将 MPMResource 与 MPMResourceMaster 或 WTPartMaster 相关联。
ESIProcessPlanLocalizationLinkRenderer
MPMProcessPlanLocalizationLink,用于将 MPMProcessPlan 关联到工作中心的生产线类型。
ESIPlantLocalizationLinkRenderer
MPMPlantLocalizationLink,用于将工作中心关联到操作。
安装 ESI Options and Variants 时,此表格下方所列的呈现器可用。
OptionSetRenderer
OptionSet 和关联,例如 OptionSetMemberLinks、OptionSetChoiceRuleMasterLink/OptionSetChoiceRuleLink 和 OptionSet 到 Option 虚拟链接。
AssignedOptionSetLinkRenderer
OptionSet 与 Part 关联
ChoiceRuleRenderer
ChoiceRule 呈现器。
OptionRenderer
“选项和选择”对象呈现器。
ExpressionRenderer
从属或独立的基本和高级表达式均由此呈现器来呈现。
RuleMemberLinkRenderer
ExpressionMemberLink 或 SourceChoice 由此呈现器来呈现。
RuleMemberActionLinkRenderer
RuleMemberActionLink 或 ChoiceMappableChoiceLink 呈现器。
如上表所述,ESI 服务提供的每个呈现器类都会扩展抽象类 BasicESIRenderer,而抽象类 BasicESRenderer 进而实现接口 ESIRenderer。除了 public void render(VdbBuilder) 方法 (这是 ESIRenderer 接口提供的唯一方法) 外,类 BasicESIRenderer 还为许多其他方法也提供了具体实施。
发布工艺计划 下表列出了为 ESI 服务的各种 getXXX() API 提供具体实施的类名称:
Java 类名称
API 名称
ESIWTChangeOrder2Renderer
getECN
ESIBOMRenderer
getBOM
ESIWTPartRenderer
getPart
ESIDocumentsRenderer
getDocument
ESIEPMDocumentRenderer
getDocument, getEPMDocument
ESIProcessPlanRenderer
getProcessPlan
ESIResourceRenderer
getResource
ESIPromotionRequestRenderer
getPromotionRequest
OptionSetRenderer
getOptionSet
有关 getXXX() API 的详细信息,请参阅 Windchill Enterprise Systems Integration Open Application Programming Interface Guide 以及发布变更通告发布 BOM发布部件发布文档发布工艺计划发布资源以及发布升级请求各节。
创建对象特定的呈现器实施
Windchill ESI 服务提供了许多呈现器类,用于处理由用户启动的 GetXXX 请求。每个类都扩展抽象类 BasicESIRenderer,该抽象类进而通过为方法 public void render(VdbBuilder) 提供具体实施来实现接口 ESIRenderer。此方法调用 setBuilder(), validate()buildGroups(),而 BasicESIRenderer 为 setBuilder(), 提供了具体的实施,但只提供了 validate()buildGroups(). 的抽象版本。相应的具体版本由特定对象的呈现器实施来提供。例如,类 ESIWTPartRenderer 以适合呈现 WTPart 对象的方式实现这些方法。
ESI 服务为表格 Windchill ESI 呈现器呈现的对象列中提及的每个对象类型提供了默认呈现器实施。所有这些实施都可由自定义者扩展。
从工厂获取呈现器实施
ESI 服务利用 ESIRendererFactory 实例来获取适用于给定 GetXXX 请求的呈现器实施。类 ESIRendererFactory 根据传递给其的输入参数提供方法 getRenderer() 的重载版本,所述方法返回相应类型的 ESIRenderer 实例。工厂类不可用于自定义,而只是为了便于自定义。
以下是类 ESIRendererFactory 中提供的可用方法:
getRenderer(anObject : Persistable) : ESIRenderer
为自变量 anObject 中的对象获取所需类型的 ESIRenderer 实例。通过获取所传递对象的 UFID,然后调用 getRenderer(ufid : String) 来达到此目的。
getRenderer(ufid : String) : ESIRenderer
为在自变量 ufid 中传递 UFID 的对象获取所需类型的 ESIRenderer 实例。此方法可用于 <Option> 元素在列出 ESI 服务特性的 xconf 文件中不带有选择器属性的对象类型。
getRenderer(ufid : String, selector : String) : ESIRenderer
为在自变量 ufid 中传递 UFID 的对象以及给定选择器获取所需类型的 ESIRenderer 实例。此方法可用于
<Option> 元素在列出 ESI 服务特性的 xconf 文件中带有选择器属性的对象类型。
getRenderer(anObject : Persistable, selector : String) : ESIRenderer
为自变量 anObject 中的对象以及给定选择器获取所需类型的 ESIRenderer 实例。
getRenderer(requestor : Class, selector : String) : ESIRenderer
为在自变量 requestor 中传递 Class 的对象以及传递的选择器获取所需类型的 ESIRenderer 实例。上述某些重载表单调用此方法来完成其作业。调用此方法将始终返回新建的呈现器实例。
getInstance() : ESIRendererFactory
返回类变量管理器中的值 (如果存在)。否则,使用受保护的无自变量构造函数创建 ESIRendererFactory 的新实例,初始化管理器并将其返回到调用方。
getRenderer(ufid : String, useCache : boolean) : ESIRenderer
为在自变量 ufid 中传递 UFID 的对象获取所需类型的 ESIRenderer 实例。此方法可用于 <Option> 元素在列出 ESI 服务特性的 xconf 文件中不带有选择器属性的对象类型。该方法根据 useCache 自变量的值 true 或 false,决定是从缓存中获取呈现器实例还是创建新实例。
getRenderer(ufid : String, selector : String, useCache : boolean) : ESIRenderer
为在自变量 ufid 中传递 UFID 的对象以及给定选择器获取所需类型的 ESIRenderer 实例。此方法可用于 <Option> 元素在列出 ESI 服务特性的 xconf 文件中带有选择器属性的对象类型。该方法根据 useCache 自变量的值 true 或 false,决定是从缓存中获取呈现器实例还是创建新实例。
getRenderer(requestor : Class, selector : String, useCache : boolean) : ESIRenderer
为在自变量 requestor 中传递 Class 的对象以及传递的选择器获取所需类型的 ESIRenderer 实例。方法 getRenderer(requestor : Class, selector : String) 通过调用此方法来完成其作业,为自变量 useCache 传递 false,其结果是始终将新建的呈现器实例返回到调用方。
getRenderer(anObject : Persistable, selector : String, useCache : boolean) : ESIRenderer
为自变量 anObject 中的对象以及给定选择器获取所需类型的 ESIRenderer 实例。该方法根据 useCache 自变量的值 true 或 false,决定是从缓存中获取呈现器实例还是创建新实例。
* 
每个默认呈现器实施类都会生成 Info*Engine 元素对象。这些元素对象会传递至 VDB 构建器。大多数默认呈现器都提供一种名为 adjustElement() 的方法 - 如果此方法可用,则会始终在将元素传递至构建器之前,立即由默认呈现器调用该方法。此方法的默认实施是不执行任何操作。
Windchill ESI 映射器工具仅提供对所映射对象的 getter 方法的访问权限。该映射器不提供复杂的逻辑功能。在对响应元信息文件的变更不足以达到预期结果的情况下,adjustElement() 方法提供了一种添加或修改呈现器输出的简单方法。
当调用的 getRenderer() API 获取 useCache 自变量时,建议为 useCache 自变量传递 false,因为传递 true 会导致从缓存中获取呈现器实例,而缓存可能已被同时执行的事务处理使用。
在自定义 Windchill Enterprise Systems Integration 时,可以选择扩展默认呈现器实施类或编写新的实施类。可通过以下方式激活扩展 (或新实施):使某个 Windchill ESI 服务特性指向扩展类 (或新类),并使相关 ESITarget 对象的 responseMetaInfoPath 属性指向 ESI 响应元信息文件的相应修改版本,其中包含可能由扩展类 (或新类) 呈现的其他属性的条目。有关更改响应元信息文件内容的信息,请参阅本文档中的修改 ESI 响应元信息文件一节。有关在扩展默认呈现器实施或提供新的呈现器实施类时要更改的特性的说明,请参阅本文档中的“Windchill ESI 服务模块”一节。
提供挂接
每个默认呈现器实施类都会生成 Info*Engine 元素对象。这些元素对象会传递至 VDB 构建器。大多数默认呈现器都提供一种名为 adjustElement() 的方法 - 如果此方法可用,则会始终在将元素传递至构建器之前,立即由默认呈现器调用该方法。此方法的默认实施是不执行任何操作。
Windchill ESI 映射器工具仅提供对所映射对象的 getter 方法的访问权限。该映射器不提供复杂的逻辑功能。在对响应元信息文件的变更不足以达到预期结果的情况下,adjustElement() 方法提供了一种添加或修改呈现器输出的简单方法。
这对您有帮助吗?