Customization Points
Extendable classes
If classes used by the Windchill ESI renderers described in the Publishing BOMs section of this document are extended, the extensions must be defined in certain Windchill ESI preferences or in the ESI service properties file as may be appropriate.
Following are classes that are typically defined in Windchill ESI preferences:
BOMOrgFilter
Preference name: Distribution Target Filter
Default value: com.ptc.windchill.esi.bom.BOMOrgFilter
* 
See the example :A typical use of the preference “Distribution Target Filter” for a typical use of this preference.
TreeNavigator
Preference name: Tree Navigator
Default value: com.ptc.windchill.esi.Treenavigation.TreeNavigatorImpl
Following are renderer classes that are typically defined in the ESI service properties file:
ESIBOMRenderer
Service Property name: com.ptc.windchill.esi.rnd.ESIRenderer
Default values of attributes of the <Option> element: cardinality=“duplicate” requestor=”wt.part.WTPart”
selector=”BOM”
serviceClass=”com.ptc.windchill.esi.bom.ESIBOMRenderer”
ESIBOMHeaderRenderer
Service Property name: com.ptc.windchill.esi.rnd.ESIRenderer
Default values of attributes of the <Option> element: cardinality=“duplicate” requestor=”wt.part.WTPart” selector=”BOMHEADER”
serviceClass=”com.ptc.windchill.esi.bom.ESIBOMHeaderRenderer”
ESIBOMComponentRenderer
Service Property name: com.ptc.windchill.esi.rnd.ESIRenderer
Default values of attributes of the <Option> element: cardinality=“duplicate” requestor=”wt.part.WTPart” selector=”BOMCOMPONENT”
serviceClass=”com.ptc.windchill.esi.bom.ESIBOMComponentRenderer”
ESISubstituteRenderer
Service Property name: com.ptc.windchill.esi.rnd.ESIRenderer
Default values of attributes of the <Option> element: cardinality=“duplicate” requestor=”wt.part.WTPart” selector=”SUBSTITUTE”
serviceClass=”com.ptc.windchill.esi.bom.ESISubstituteRenderer”
ESIReferenceDesignatorRenderer
Service Property name: com.ptc.windchill.esi.rnd.ESIRenderer
Default values of attributes of the <Option> element: cardinality=“duplicate” requestor=”wt.part.WTPart” selector=”REFERENCEDESIGNATOR”
serviceClass=”com.ptc.windchill.esi.bom.ESIReferenceDesignatorRenderer”
The following TreeNavigationRequestBuilder class is defined in the ESI service properties file as well:
BOMTreeNavigationReqBuilder
Service Property name: com.ptc.windchill.esi.treenavigation.TreeNavigationRequestBuilder
Default values of attributes of the <Option> element: cardinality=“duplicate” requestor=”null”
selector=” WCTYPE|wt.part.WTPart” serviceClass=”com.ptc.windchill.esi.bom.BOMTreeNavigationReqBuilder”
All of the above classes are designed to permit extensions by customizers.
BusinessRuleSetRelationshipDelegate delegate: ESIPartRelationshipDelegate class class is defined in the ESI service properties file:
ESIPartRelationshipDelegate
Service Property name: com.ptc.core.businessRules.relationship.BusinessRuleSetRelationshipDelegate
Default values of attributes of the <Option> element: cardinality=“singleton” requestor=“null”
selector= “ESIPartRelationshipDelegate” serviceClass=“com.ptc.windchill.esi.businessRules.relationship.ESIPartRelationshipDelegate”
This class can be extended to collect other associated objects with part to apply business rule. This business rule evaluation decides publication of the given assembly node as a production BOM. Similarly class can be extended to filterout objects from collection that default logic has collected before applying business rule.
BOM difference logic can be customized by changing the default logic. Refer section Modify BOM Difference APIs for more details.
Example: A typical use of the preference Distribution Target Filter
It may sometimes be necessary to implement a business process that allows sending a “work in process” BOM to ERP early during the design process. A typical use of this may be that it provides for early procurement of tools for parts that may have long lead times. As the design evolves, there may be parts that are listed on the Windchill assembly, but which are not ready to be sent to the ERP system yet. In other words, there is a need to filter out such parts from the BOM, when they are exported to ERP. This may typically be achieved using the said preference by following the steps outlined below:
1. Create a new Java class say, com.ptc.windchill.esi.bom.BOMUsageLinkFilter that extends the class com.ptc.windchill.esi.bom.BOMOrgFilter. Provide an overridden version of the method public Enumeration filterOutput(WTPart, Enumeration) in this new class to filter out component parts from the BOM, based on a certain condition. For example, the value of a certain attribute on the WTPartUsageLink object may be used to indicate that the given component needs to be filtered out from the BOM.
2. Compile BOMUsageLinkFilter.java to create its class file in the <Windchill>\codebase\com\ptc\windchill\esi\bom directory.
3. Set the value of the Windchill ESI preference named Distribution Target Filter to com.ptc.windchill.esi.bom.BOMUsageLinkFilter.
Publishing a BOM would now cause the required filtering of components from the BOM to occur.
An example implementation of the method filterOutput() in class BOMUsageLinkFilter is shown below:
package com.ptc.windchill.esi.bom;


public class BOMUsageLinkFilter extends BOMOrgFilter
{

public Enumeration[] filterOutput(WTPart part, Enumeration[] partDelta)
{
Enumeration[] enumeration = super.filterOutput(part, partDelta); Enumeration[] delta = new Enumeration[enumeration.length];

for(int i = 0; i < enumeration.length; i++)
{
Enumeration partUsageInfos = enumeration[i]; Vector result = new Vector();
while(partUsageInfos.hasMoreElements())
{
PartUsageInfo info = (PartUsageInfo)partUsageInfos.nextElement();
// Perform the necessary filtering of components here, adding the remaining
// ones to a result Vector in the process
}
delta[i] = result.elements();
}
return delta;
}
Configurable Options
Windchill ESI preferences control several configurable options for Windchill ESI BOM renderer support. The options are:
Define whether Windchill ESI should create alternate item groups. Alternate Item Groups are required to provide compatibility with SAP ERP. SAP manages BOM substitutes by assigning an alternate item group number to all BOM components which have substitutes. SAP determines that parts with the same alternate item group number are interchangeable.
Preference name: Enable Alternate Item Group
Default value: Yes
Define whether Windchill ESI should throw an exception whenever a product structure is found that has no line number information. Standard Windchill behavior is to allow both product structures with line numbers and product structures without line numbers. Any one product structure must have line numbers on all of its components or no line numbers on any of its components. The standard Windchill behavior is the equivalent of setting the preference to “No”. In cases where the target enterprise system cannot handle BOMs without line numbers, the preference should be set to “Yes”.
Preference name: Enforce Line Numbers
Default value: No
Define whether Windchill ESI should throw an exception whenever a product structure is found with components having zero quantities. The default behavior is to throw an exception.
Preference name: Require Component Quantity
Default value: Yes
Define whether Windchill ESI should throw an exception when no qualifying version is found for a part master, while processing the components within an assembly.
Preference name: Show No Qualifying Version Found Error
Default value: Yes
Define whether Windchill ESI services will examine the GetBOM, GetECN and GetProcessPlan RPC request parameters to determine whether or not line numbers have been requested. If line numbers have not been requested, Windchill ESI services will generate a warning message in the Enterprise Systems Transaction Administration UI for each object that may cause a uniqueness error in SAP. This will happen when a part is listed as a substitute for more than one component on a BOM, or when a part is listed as both a component and a substitute on a BOM
* 
By GetXXX RPC request parameters is meant the relevant distribution target attributes that provide the response settings.
Preference name: Enforce Line Number Warning for BOM
Default Value: Yes
Define the mappings between Windchill views and distribution targets, via a comma separated list of <view name>:<target number> pairs. For example, a value such as Plant1:001,Plant2:002 would map the views Plant1 and Plant2 to the distribution targets with numbers 001 and 002 respectively. Besides driving the validation of distribution target assignments for parts, this preference plays a role in determining the value of the Usage element that is sent with the ESI response for a BOM. See the preference View To BOM Type Mappings for more information.
Preference name: View To Distribution Target Mappings
Default value: The preference is set to a blank value by default.
Defines the mappings between Windchill views and BOM type (or usage) values, via a comma separated list of <view name>:<BOM usage value> pairs. For example, a value such as Design:Engineering,Manufacturing:Production would map the views Design and Manufacturing to the BOM usage values Engineering and Production respectively. When publishing a BOM to a given distribution target, ESI services first determine the view corresponding to the target from the preference View To Distribution Target Mappings. The preference View To BOM Type Mappings is then looked up for the BOM usage value corresponding to the view fetched from the previous step. It is this value that will be sent with the Usage element for the BOM in the response, thereby overriding any usage that may have been set on the BOM header iteration.
Preference name: View To BOM Type Mappings
Default value: The preference is set to a blank value by default.
Defines whether or not to send part data in the ESI response for an alternate assembly. If set to Yes, ESI services will send part data for an alternate assembly. If set to No, no part data will be sent for such an assembly. This preference can come in handy when parts are to be created in the ERP system only while publishing a regular assembly as opposed to an alternate assembly.
Preference name: Send Part Data For Alternate Assemblies
Default value: Yes
Defines whether to return unchanged objects information in the ESI response. Select Yes to render unchanged objects and No to ignore unchanged objects.
Preference name: Render Unchanged Objects
Default value: Yes
* 
Setting the preference to No would cause only unchanged parts and BOM components to be ignored while generating the ESI response.
Specifies whether or not to send BOM data with the ESI response when publishing alternate parts. When set to "Yes", BOM data is sent for alternate parts that are assemblies. When set to "No", only part data is sent for such parts. This preference assumes significance only when the distribution target attribute for publishing alternates has a value "Yes".
Preference name: Send BOM Data For Alternates
Default value: No
Specifies whether or not to send BOM data with the ESI response when publishing substitute parts. When set to "Yes", BOM data is sent for substitute parts that are assemblies. When set to "No", only part data is sent for such parts. This preference assumes significance only when the distribution target attribute for publishing substitutes has a value "Yes".
Preference name: Send BOM Data For Substitutes
Default value: No
Define whether ERP Connector should publish the production BOM for a Part node having children or just sent a part to downstream. This allows user a flexibility to selectively publish production BOM for certain parts in the given bill of material. This preference should be used in combination with the distribution attribute Always publish Production BOM for a Part when Publishing a BOM. Thus when preference is set with business rule set rule then by setting target attribute along with it to Yes or No rules can be applied selectively to only one or more set of targets depending on the need. For more information, see Configuration option to Inhibit Publishing of a Production BOM.
Preference name: Business rule set to inhibit production BOM publishing
Default value: Blank value
Define how publishing incremental information to a distribution target for BOM should be processed. Since 10.2 M030 onwards ERP Connector has started comparing parts with ‘view’, ‘variation1’, ‘variation2’ sttributes and version and iteration of the object. In case user who are not interested in using this new default behavior can revert back to older behavior by setting following windchill property to false. Older implementation will compare parts based on version or iteration and by comparing ‘variation1’, ‘variation2’ attributes only. This property is optional property and is not available out of the box in esi.properties file. Refer to Windchill 說明中心 section for “Publishing Incremental Information to a Distribution Target for Equivalent BOMS” under topic “Bills of Material” to know how difference is calculated.
Windchill property name: com.ptc.windchill.esi.CalculateDeltaUsingLatestPublishedObject Default value:true
Default value: true
With the default setting in place, the latest published iteration of an object (rather than the latest as per the version series) is considered for computing the delta for incremental publication. For e.g., if version A.2 of the object is published after version B.1, the former (A.2) will be considered for delta computation.
Steps to change the default behavior
1. Add following property to site.xconf to propagate the changes to behavior <Property name="com.ptc.windchill.esi.CalculateDeltaUsingLatestPublished Object" overridable="true" targetFile="codebase/com/ptc/windchill/esi/esi.properties" value="false"/>
2. Propagate changes to esi.properties
3. Restart windchill services.
There are several configurable attributes on the distribution target that impact the contents of the ESI response message when publishing an assembly.
For more information, see Attributes Pertaining to a BOM.
這是否有幫助?