Using pattern inheritance for rule resolution

Rule resolution always first looks for a rule that it needs in the class initially provided.

When the Find by name first (Pattern) check box (which corresponds to the Rule-Obj-Class.pyPatternInheritance property) is selected on the Class rule form, the system uses pattern inheritance for a class. Pattern inheritance causes the system to next search for a rule in classes derived from the current class name by truncating, from the right, alphanumeric segments that follow a hyphen.

For example, a request for a rule in the WalCare-Financial-Credit class causes the system to search through these classes, in the order indicated:

  • WalCare-Financial-Credit
  • WalCare-Financial-
  • WalCare-Financial
  • WalCare-
  • WalCare

If this check box is selected and the rule is not found, rule resolution forms a sequence of candidate classes to search by truncating, from the left, portions of the class name that consist only of a hyphen, or consist only of characters other than a hyphen. If no class exists for one of these computed names, rule resolution continues with the next prefix.

The algorithm

For a class using pattern inheritance, the following is a simplified description of the rule resolution algorithm:

  1. Search each class formed by repeatedly truncating the original class name, stopping if the needed rule is found.
  2. If the pattern search finishes without finding a rule, go back to the original class and use directed inheritance to find the parent of the original class.
  3. If the parent class identified in step 2 was searched during step 1, skip it and skip to step 5.
  4. If the parent class was not previously searched, search it. Stop if the needed rule is found.
  5. If not found, determine whether the parent class uses pattern inheritance. If so, repeat this algorithm, starting at step 1, with the parent class.
  6. Otherwise, identify the parent of the parent. Continue at step 4.

The ultimate base class @baseclass is searched last.

Example

For example, assume your application requests a rule from WalCare-Financial-Credit, which derives from PegaCare-Financial-Credit, and WalCare-Financial-Credit uses pattern inheritance.

The system searches for the rule as follows:

  1. Is the rule in WalCare-Financial-Credit? If not,
  2. Is the rule in WalCare-Financial- ? If not,
  3. Is the rule in WalCare-Financial ? If not,
  4. Is the rule in WalCare- ? If not,
  5. Is the rule in WalCare ? This is the end of the pattern. If the system still cannot find the rule, it returns to Walcare-Financial-Credit and looks at the parent. If the parent was previously checked because of a similar pattern, it continues with the parent's parent.
  6. Is the rule in PegaCare-Financial-Credit? If not, see if PegaCare-Financial-Credit uses pattern inheritance first. If so, start the sequence again. If not, go next to the parent of PegaCare-Financial-Credit.