The SAS OnDemand Decision Engine does not start after a rule deployment. When this problem occurs, the following error is displayed in the SAS log:
ERROR: The text expression length (65549) exceeds maximum length (65534). The text expression has been truncated to 65534 characters.
The same error condition can occur for the SAS OnDemand Scoring Engine server on the mainframe.
One situation where this SAS error occurs is when a string longer than 65534 characters is assigned to the RPT_HASFIRED_VARNAMES_INIT macro variable. The problem can happen when a rule calls one of the following macros many times:
- %hasAnyAuthorizationRuleFired
- %hasAnyQueueRuleFired
- %hasAnyVariableRuleFired
Each of these macros calls the %hasRuleFired macro once for each rule of the respective rule types: Authorization, Queue, or Variable.
The macro variable RPT_HASFIRED_VARNAMES_INIT is first set to empty. When the %hasRuleFired macro is called, two values for each rule ID are appended to the variable. The length of the RPT_HASFIRED_VARNAMES_INIT macro variable can grow to exceed the maximum length when many rules are defined on the system and when the %hasAnyrule-typeRuleFired macro is called multiple times in a rule.
The SAS log section below shows the value of the RPT_HASFIRED_VARNAMES_INIT variable after 16 rule IDs in the multi-organizational node A are appended to it:
Macro variable RPT_HASFIRED_VARNAMES_INIT resolves to RPT_RuleFired_A_50701_0 RPT_RuleFired_A_50701_1
RPT_RuleFired_A_50702_0 RPT_RuleFired_A_50702_1 RPT_RuleFired_A_50362_0 RPT_RuleFired_A_50362_1 RPT_RuleFired_A_50347_0
RPT_RuleFired_A_50347_1 RPT_RuleFired_A_50715_0 RPT_RuleFired_A_50715_1 RPT_RuleFired_A_50713_0 RPT_RuleFired_A_50713_1
RPT_RuleFired_A_50707_0 RPT_RuleFired_A_50707_1 RPT_RuleFired_A_50708_0 RPT_RuleFired_A_50708_1 RPT_RuleFired_A_50368_0
RPT_RuleFired_A_50368_1 RPT_RuleFired_A_50370_0 RPT_RuleFired_A_50370_1 RPT_RuleFired_A_50372_0 RPT_RuleFired_A_50372_1
RPT_RuleFired_A_50479_0 RPT_RuleFired_A_50479_1 RPT_RuleFired_A_50534_0 RPT_RuleFired_A_50534_1 RPT_RuleFired_A_50538_0
RPT_RuleFired_A_50538_1 RPT_RuleFired_A_50714_0 RPT_RuleFired_A_50714_1 RPT_RuleFired_A_50711_0 RPT_RuleFired_A_50711_1
. . . more code lines. . .
To work around this issue, you can adjust the rule code to call %hasAnyAuthorizationRuleFired, the %hasAnyQueueRuleFired, or %hasAnyVariableRuleFired a single time at the beginning of the rule code and to store that result to a local variable. Then, throughout the rest of the rule code, you can check the local variable value instead of calling the macro again.
Example:
&rule.authFired=0;
if %hasAnyAuthorizationRuleFired then &rule.authFired=1;
if &rule.authFired= 1 then . . .more statements. . .
Note: This issue can occur also in earlier releases of SAS® Fraud Management.
Operating System and Release Information
| SAS System | SAS Fraud Management | Linux for x64 | 4.4_M1 | | | |
| z/OS 64-bit | 4.4_M1 | | | |
*
For software releases that are not yet generally available, the Fixed
Release is the software release in which the problem is planned to be
fixed.