Call Embedded Rules in Scripting Rules
You can simply run solver of another rules directly from Scripting Rule.
How to call embedded rules
You can run solver of other rules from Scripting Rule.
Solver is available under class DR and method solve().
DR.solve(ruleId, data, version, SolverStrategy)
Everything that you need is the rule ID and solver input data. Optionally, you may specify the version of the called rule and the execution strategy.
If you are importing/exporting existing rules, DO NOT forget to change the ruleID you are calling in the scripting rule!
Parameters
ruleId
string
Id of solving rule. You can also use rule alias.
data
any
Input data for solver
version
number
Version of solving rule
Return type
DR.solve() is returning the response from Solver as Array.
Examples
Basic method
DR.solve("ruleId", data);
Method with rule version
DR.solve("ruleId", data, 5);
Method with Solver Strategy
DR.solve("ruleId", data, 5, SolverStrategy.FIRST_MATCH);
If you want to define Solver Execution Strategy you have to specify the rule version too.
Example of usage
Decision table 1: "0000-0000-0000-0000"
Input Model
{
"age": {}
}
Output Model
{
"result": {}
}
Table

Decision table 2: "1111-1111-1111-1111"
Input Model
{
"total amount": {},
"blocked": {}
}
Output Model
{
"result": {}
}
Table

Scripting Rule
Script
// Get data from Input
const data = input.data;
// Check if data is in Input and if data is an Array
if(data && Array.isArray(data)){
const dates = [];
// Iterate over data array
for(let dat of data){
// Check if dat (member of data array) has parameter date;
if(dat.date){
// add date to dates
dates.push(dat.date);
}
}
// Create BULK input data for DT
const DTdata = [];
for(let date of dates){
const input = {
"age": date
}
DTdata.push(input);
}
// log input data for DT
log(JSON.stringify(DTdata));
// Call first DT with FIRST_MATCH strategy
const DTresult = DR.solve("0000-0000-0000-0000", DTdata, 1, SolverStrategy.FIRST_MATCH);
// log result from DT
log(JSON.stringify(DTresult));
// transform data from DT to another DT
let blocked = 0;
for(let res of DTresult){
if(Array.isArray(res)){
if(res[0].result && res[0].result == "BLOCKED"){
blocked ++;
}
}
}
// Create input data for DT
const DTdata2 = {
"total amount": dates.length,
"blocked": blocked
}
// log input data for DT
log(JSON.stringify(DTdata2));
// Call second DT with FIRST_MATCH strategy
const DTresult2 = DR.solve("1111-1111-1111-1111", DTdata2, 1, SolverStrategy.FIRST_MATCH);
// log result from DT
log(JSON.stringify(DTresult2));
// pass result from DT to SR result
output.result = DTresult2[0].result;
}
return output;
Input
{
"data": [
{
"date": "01/01/1990"
},
{
"date": "01/01/1999"
},
{
"date": "01/01/1930"
}
]
}
Output
[
{
"output": "PASS"
}
]
Last updated
Was this helpful?