ProductDependsOn and ProductRequiredFor Relationships
ProductDependsOn relationship: The ProductDependsOn (PDO) is a product dependency relationship to sequence the associated target and source plan items. The PDO relationship allows flexible product decomposition. 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 (PDO) and ProductRequiredFor (PRF) 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 PDO functionality provides a base behavior that permits to sequence plan items corresponding to products related by PDO when:
- PDO source and PDO target product instances have no LINKID defined.
- PDO source and PDO target product instances have LINKID defined and have same LINKID value.
The feature can extend the base behavior and sequence additionally plan items corresponding to products related by PDO when:
- PDO source product instance has LINKID defined and PDO target product instances have no LINKID defined.
- PDO source product instance has no LINKID and target product instances have a LINKID defined.
A PDO source product instance can relate to multiple PDO target product instances using base and extended cases so that following use cases are possible:
- A PDO source product that has a LINKID defined and is related to a PDO target instances that has same LINKID defined shall be also related to PDO target product instances that have no LINKID defined.
- A PDO source product that has no LINKID defined and is relate to a PDO target instance that has no LINKID defined shall be also related to PDO target product instances that have a LINKID defined. By default for PDO 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 allowed in plan. If there is a need to override this behavior to include multiple instances of required product with the same LinkID, then the AOPD flag "AllowMultipleRequiredProducts" should be set to true. By default it is false.
The PDO and PRF relationships have the following two relationship attributes:
The PRF relationship also has the third relationship attribute named ocvValidationReq. This is a boolean flag for validation. Based on validation flag, AOPD adds product configured with the PRF relationship in the plan.
The PDO relationship also has the third relationship attribute named 'sequenceDirection'. The valid values of this attribute are either 'AFTER' or 'BEFORE'. This attribute will be paired with the provided values of SourceAction and TargetAction. For each SourceAction and TargetAction, there will be a value defined for the sequenceDirection attribute.
- A 'BEFORE' sequence direction will create a dependency of the target product on the source product.
- An 'AFTER' sequencing direction will create 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. This allows backward compatibility.
The value defined in the sequenceDirection attribute will create a dependency of the target product on the source product or it will create a dependency of the source product on the target product.
If a PDO Source Product has a dependency on child products, then those child products will have a dependency on the PDO target product by default. If there is a need to override this default behavior and set the dependency of the source product directly on the target product, then value of the flag "IgnorePDOFirstChildDependency" needs to be set to true in the AOPD configuration file. By default this value is false.
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 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 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 match with the number of Source Actions and the number of Target Actions.
The following table explains the PDO and PRF relationships and their impact on orders and plans.
Product Configuration | Order | Plan |
---|---|---|
Product A has a PRF 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 PRF and PDO relationship with B and PRF and PDO has source action and target action PROVIDE and PROVIDE | OL1=ProductA(Action=Provide) OL2=ProductB(Action=Provide) | planItemA depends on planItemB |
Product A has PRF and PDO relationship with B and PRF and PDO has source action and target action PROVIDE and PROVIDE | OL1=ProductA | planItemA depends on planItemB |
Product A has PDO 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 PDO with Sequence direction and their impact on orders and plans.
Product Configuration | Order | Plan |
---|---|---|
Product A has PDO 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 PDO 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 PDO relationship with B having SA & TA as PROVIDE & PROVIDE. SequenceDirection is AFTER. Product B has PDO 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 PDO relationship with B having SA & TA as PROVIDE & PROVIDE. SequenceDirection is BEFORE. Product B has PDO 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 |