ProductDependsOn and ProductRequiredFor Relationships
ProductDependsOn relationship: ProductDependsOn (PDO) is a product dependency relationship to sequence the associated target and source plan items. The flexible product decomposition occurs through ProductDependsOn relationship. This establishes a relationship between two products and is evaluated during the decomposition process.
ProductRequiredFor relationship: The ProductRequiredFor (PRF) relationship is a prerequisite relationship for a product to add a target plan item.
The ProductDependsOn and ProductRequiredFor relationships enable you to create product offers without defining sequencing for the products. You can create ProductDependsOn relationship to lower level products instead of using ProductComprisedOf links.
The ProductDependsOn functionality provides a base behavior that permits to sequence plan items corresponding to products related by ProductDependsOn when:
- ProductDependsOn source and ProductDependsOn target product instances have no LINKID defined.
- ProductDependsOn source and ProductDependsOn target product instances have LINKID defined and have the same LINKID value.
The feature can extend the base behavior and sequence additionally plan items corresponding to products related by ProductDependsOn when:
- ProductDependsOn source product instance has LINKID defined and ProductDependsOn target product instances have no LINKID defined.
- ProductDependsOn source product instance has no LINKID and target product instances have a LINKID defined.
A ProductDependsOn source product instance can relate to multiple ProductDependsOn target product instances by using base and extended cases so that following use cases are possible:
- A ProductDependsOn source product that has a LINKID defined and is related to a ProductDependsOn target instances that has same LINKID defined shall be also related to ProductDependsOn target product instances that have no LINKID defined.
- A ProductDependsOn source product that has no LINKID defined and is related to a ProductDependsOn target instance that has no LINKID defined shall be also related to ProductDependsOn target product instances that have a LINKID defined. By default, for ProductDependsOn sequencing, the base behavior is enabled. To enable the extended behavior set the "EnableBiDirectionalLinkID" to true, by default it is false.
By default, only one instance of required product per LinkID is available in plan. If there is a requirement to override this behavior to include multiple instances of required product with the same LinkID, then the Automated Order Plan Development flag "AllowMultipleRequiredProducts" must be set to true. By default, it is false.
The ProductDependsOn and ProductRequiredFor relationships have the following two relationship attributes:
The ProductRequiredFor relationship also has the third relationship attribute named ocvValidationReq. This is a Boolean flag for validation. Based on validation flag, Automated Order Plan Development adds product configured with the ProductRequiredFor relationship in the plan.
The ProductDependsOn relationship also has the third relationship attribute named 'sequenceDirection'. The valid values of this attribute are either 'AFTER' or 'BEFORE'. This attribute is paired with the provided values of SourceAction and TargetAction. For each SourceAction and TargetAction, there is a value defined for the sequenceDirection attribute.
- A 'BEFORE' sequence direction creates a dependency of the target product on the source product.
- An 'AFTER' sequencing direction creates a dependency of the source product on the target product. This is the default.
If no value is provided in the sequenceDirection attribute, the attribute defaults to 'AFTER," and the functionality works as it did before the introduction of sequenceDirection relationship attribute. The backward compatibility is occurred as a result.
The value defined in the sequenceDirection attribute creates a dependency of the target product on the source product or it creates a dependency of the source product on the target product.
If a ProductDependsOn Source Product has a dependency on child products, then those child products have a dependency on the ProductDependsOn target product by default. If there is a requirement to override this default behavior and set the dependency of the source product directly on the target product, then the value of the flag "IgnorePDOFirstChildDependency" needs to be set to true in the Automated Order Plan Development configuration file. By default, this value is false.
ProductRequiredFor relationship can be made conditional by using XPATH statement stored in optional product characteristic DECOMPOSITION_REQUIRED_FOR.
Source and Target Attribute Values
The following table describes the different possible combinations:
You can also define source action and target action to match the following combination by using uppercase, comma-separated values. For example:
SourceAction: PROVIDE,PROVIDE,UPDATE,CEASE,CANCEL,CEASE
TargetAction: UPDATE,CANCEL,PROVIDE,UPDATE,PROVIDE,UPDATE
You can also define sequenceDirection to match the following combination by using uppercase, comma-separated values. For example:
SourceAction: PROVIDE,PROVIDE,UPDATE,CEASE,CANCEL,CEASE
TargetAction: UPDATE,CANCEL,PROVIDE,UPDATE,PROVIDE,UPDATE
SequnceDirection: AFTER,BEFORE,AFTER,BEFORE,BEFORE,AFTER
Dependency between planitems occurs when both the following occur:
- The sequenceDirection attribute has valid values, i.e. either 'AFTER' or 'BEFORE.'
- The number of sequenceDirection attributes matches with the number of Source Actions and the number of Target Actions.
The following table explains the ProductDependsOn and ProductRequiredFor relationships and their impact on orders and plans.
Product Configuration | Order | Plan |
---|---|---|
Product A has a ProductRequiredFor relationship with Product B having source action and target action PROVIDE and PROVIDE | OL1=ProductA | Two plan item (A and B) do not depend on each other |
Product A has ProductRequiredFor and ProductDependsOn relationship with B and ProductRequiredFor and ProductDependsOn has source action and target action PROVIDE and PROVIDE | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) | planItemA depends on planItemB |
Product A has ProductRequiredFor and ProductDependsOn relationship with B and ProductRequiredFor and ProductDependsOn has source action and target action PROVIDE and PROVIDE | OL1=ProductA | planItemA depends on planItemB |
Product A has ProductDependsOn relationship with B having source action and target action PROVIDE and PROVIDE | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) | planItemA depends on planItemB |
The following table explains ProductDependsOn with Sequence direction and their impact on orders and plans.
Product Configuration | Order | Plan |
---|---|---|
Product A has ProductDependsOn relationship with B having SA & TA as PROVIDE & PROVIDE. SequenceDirection is AFTER. | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) | Two planitem having planItemA depends on planItemB |
Product A has ProductDependsOn relationship with B having SA & TA as PROVIDE & PROVIDE. SequenceDirection is BEFORE. | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) | Two planitem having planItemB depends on planItemA |
Product A has ProductDependsOn relationship with B having SA & TA as PROVIDE & PROVIDE. SequenceDirection is AFTER. Product B has ProductDependsOn relationship with C having SA & TA as PROVIDE & PROVIDE and SequenceDirection is BEFORE. | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) OL3=ProductC(Action=Provide) | Three planitems having planItemA depends on planItemB and planItemC depends on planItemB |
Product A has ProductDependsOn relationship with B having SA & TA as PROVIDE & PROVIDE. SequenceDirection is BEFORE. Product B has ProductDependsOn relationship with C having SA & TA as PROVIDE & PROVIDE and SequenceDirection is AFTER. | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) OL3=ProductC(Action=Provide) | Three planitems having planItemB depends on planItemA and planItemB depends on planItemC |