Record is not being created in Decision table with concatenated query

santoshsuta
Tera Contributor

I am creating a record in Decision Table using catalog item.  
I cannot use Record producer on this sys_decision_question table due to the security constrains. So, I am using catalog item and creating a record using the flow script.
Somehow the script is working with the hardcoded values (Please refer below script action)

 

-------------------Script Starts from here----------------------------

(function execute(inputs, outputs) {

    try {

        gs.info("Santosh inside");

 

        var state = inputs.state;

        gs.info("Santosh state: " + state);

        var board = inputs.board;

        gs.info("Santosh Board: " + board);

        var decisionTable = inputs.decisionTable;

        gs.info("Santosh decisionTable: " + decisionTable);

        var taskType = (inputs.taskType || "").trim().toLowerCase();

        gs.info("Santosh taskType: " + taskType);

        var lane = inputs.lane;

        gs.info("Santosh lane: " + lane);

 

        var finalTasktype = "";

        var finalCondition = "";

 

       

        if (taskType === "private task") {

            finalTasktype = "vtb_task";

            finalCondition = 'u_rm_story_state=3^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ';

        }

        else if (taskType === "incident") {

            gs.info("Santosh taskType matched 'incident'");

            finalTasktype = "incident";

            finalCondition = 'u_incident_state=' + state + '^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ';

        }

        else {

            gs.warn("Santosh Warning: taskType '" + taskType + "' does not match any condition.");

        }

 

        if (!finalCondition) {

            gs.warn("Santosh Warning: finalCondition is empty for taskType '" + taskType + "'");

        }

 

        if (!decisionTable) {

            gs.error("Santosh Error: decisionTable sys_id is empty or null!");

            return;

        }

 

        gs.info("Santosh finalCondition: " + finalCondition);

 

        var questions = [

            {

                condition: "u_incident_state=6^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ"

                answer: [

                    { value: lane }

                ],

                active: true,

                defaultAnswer: false,

            }

        ];

 

        gs.info("Santosh DEBUG: Questions array prepared - " + JSON.stringify(questions));

 

        var dt = new sn_dt.DecisionTableAPI();

        var response = dt.createQuestions(decisionTable, questions);

 

        gs.info("Santosh DEBUG: DecisionTableAPI Response - " + JSON.stringify(response));

 

        if (response && response.results && response.results.length > 0 && response.results[0].record) {

            gs.info('Santosh Status: ' + response.status);

            gs.info('Santosh First decision sys_id: ' + response.results[0].record.getValue('sys_id'));

        } else {

            gs.warn('Santosh No valid results found in the API response.');

        }

 

    } catch (error) {

        gs.error("Santosh Exception occurred: " + error);

    }

})(inputs, outputs);

-----------------------The script ends here-------------------------------------

The record is being created with the correct Filter conditions and correct Answer value.

BUT 
When I replace the condition hardcoded value with the below mentioned concatenated query. It doesn't works
for example:
finalCondition = 'u_incident_state=' + state + '^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ';

var questions = [

            {

                condition: finalCondition

                answer: [

                    { value: lane }

                ],

                active: true,

                defaultAnswer: false,

            }

        ];


I am getting correct logs mentioned below.

Santosh finalCondition: u_incident_state=6^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ

 

Santosh DEBUG: Questions array prepared -  [{"condition":"u_incident_state=6^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ","answer":[{"value":"43a6ae521b0c661092b275de034bcb32"}],"active":true,"defaultAnswer":false}]

This is an additional log says that it's failed to created a record in decision table.
Santosh DEBUG: DecisionTableAPI Response - {"results":[{"errors":[{"message":"Type mismatch occurred in the field condition when expecting value of type String","type":"INVALID_REQUEST"}],"status":"Failure"}],"errors":[{"message":"1 requests failed","type":"INVALID_REQUEST"}],"status":"Failure"}

Please let me know if anyone have any idea on this.

1 ACCEPTED SOLUTION

raj chavan
Tera Guru

Hi @santoshsuta 

The issue likely arises because the condition field is not being interpreted correctly when dynamically assigned. Here’s what you can try:  
 
   - Since hardcoded values work, check if dynamically assigned values have any unintended spaces or special characters.  
   - You can explicitly trim the state variable before concatenation:  
 

 

    finalCondition = 'u_incident_state=' + state.trim() + '^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ';​

 

     
 
   - Print finalCondition before using it in the questions array to ensure it is correctly formatted:  
     gs.info("Santosh DEBUG: finalCondition string - " + JSON.stringify(finalCondition));
    
 
   - If the API expects an escaped condition string, try encoding special characters:  
    

 

 finalCondition = encodeURIComponent('u_incident_state=' + state + '^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ');​

 

 
   - Sometimes, JavaScript treats variables differently when assigned dynamically. You can try:  
   

 

 var conditionString = String(finalCondition);
     questions = [{ condition: conditionString, answer: [{ value: lane }], active: true, defaultAnswer: false }];​

 

 
If none of these work, test by hardcoding finalCondition inside questions instead of assigning it dynamically to see if the issue is with data type handling.

 
 
Kindly mark it correct and helpful if it is applicable.

Thanks,

Raj

View solution in original post

4 REPLIES 4

raj chavan
Tera Guru

Hi @santoshsuta 

The issue likely arises because the condition field is not being interpreted correctly when dynamically assigned. Here’s what you can try:  
 
   - Since hardcoded values work, check if dynamically assigned values have any unintended spaces or special characters.  
   - You can explicitly trim the state variable before concatenation:  
 

 

    finalCondition = 'u_incident_state=' + state.trim() + '^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ';​

 

     
 
   - Print finalCondition before using it in the questions array to ensure it is correctly formatted:  
     gs.info("Santosh DEBUG: finalCondition string - " + JSON.stringify(finalCondition));
    
 
   - If the API expects an escaped condition string, try encoding special characters:  
    

 

 finalCondition = encodeURIComponent('u_incident_state=' + state + '^u_vtb_kanban_board=02b2d2e6db6fd01041899b3c8a96194e^EQ');​

 

 
   - Sometimes, JavaScript treats variables differently when assigned dynamically. You can try:  
   

 

 var conditionString = String(finalCondition);
     questions = [{ condition: conditionString, answer: [{ value: lane }], active: true, defaultAnswer: false }];​

 

 
If none of these work, test by hardcoding finalCondition inside questions instead of assigning it dynamically to see if the issue is with data type handling.

 
 
Kindly mark it correct and helpful if it is applicable.

Thanks,

Raj

Thank you so much Raj, That worked. 🙂

raj chavan
Tera Guru

@santoshsuta If my response helped you in any way consider making it as helpful 
thank you !

Kindly mark it correct and helpful if it is applicable.

Thanks,

Raj

Already accepted a solution and marked as accepted.