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:
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:
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:
Note: This issue can occur also in earlier releases of SAS® Fraud Management.