Support Article
Rows in decision table greater than 1000 are not evaluated
SA-57996
Summary
When rows in a decision table are greater than 1000, the rows are not evaluated and the 'otherwise' value displays. The actual value does not display.
Error Messages
Not Applicable
Steps to Reproduce
- Create a decision table with more than 10 columns and more than 1000 rows.
- Evaluate lines 1020 to 1029. Though these lines match, the actual row value does not display.
Root Cause
A defect in Pegasystems’ code or rules: Buggy Lower Limit calculation
The Lower Limit calculation is based on the decision table assembler code (fuA : decisionTableMethodBody) as below.
int nCondRowLimit = 100;
if (numColumns > 50) { nCondRowLimit = 1; }
else if (numColumns > 30) { nCondRowLimit = 5; }
else if (numColumns > 25) { nCondRowLimit = 10; }
else if (numColumns > 20) { nCondRowLimit = 15; }
else if (numColumns > 15) { nCondRowLimit = 20; }
else if (numColumns > 10) { nCondRowLimit = 30; }
else if (numColumns > 5) {nCondRowLimit = 60; }
In this scenario, columns are > 10 , hence {nCondRowLimit = 30; }.
Consider RowBlock1 which handles 1000 to 1999 rows.
The evaluation is done in sets of 30:
1000 > 1000-1029,
1030 > 1030-1059,
1060 > 1060-1089...
The Switch case is written on the lower limit as,
Switch(lowerLimit){
case 1000 : ....
case 1030 : ....
case 1060 :...
}
Hence, if the lower limit is not calculated correctly, there is high chance of missing the rows.
For example,
For row 1019:
Lower Limit = 1019 - 1019%30 + 1000%30 = 1000 = Switch of 1000 (finds 1019 as switch 1000 and evaluates all rows from 1000 to 1029).
However, issue occurs when the row is 1020: 1020 - 1020%30 +1000%30 = 1020 - 0 + 10 = 1030.
Lower limit is calculated as 1030, set 1030-1059 rows are evaluated. This results in a miss and hence default is used, even when the actual row is available in the set 1000-1029.
Resolution
Apply HFix-44289.
Published July 27, 2018 - Updated October 8, 2020
Have a question? Get answers now.
Visit the Collaboration Center to ask questions, engage in discussions, share ideas, and help others.