getRowCount() in Business Rule Returns Incorrect Values When Querying Table With Loops
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-21-2022 05:53 PM
Hi,
I created 2 custom tables (u_sint_requests & u_sint_impact_analysis). There is a list field (u_Impacted_functions) in the u_sint_requests table that references the departments table (cmn_deparment). In the u_sint_impact_analysis table, there is a reference field (u_team) that references the department table as well.
I'm utilizing an after & update business rule with certain filter conditions & writing a script to check the u_sint_impact_analysis table for forms that have the u_team field populated with the same departments as in the list field (u_Impacted_functions) in the u_sint_requests table for a specified form in the u_sint_requests table. When utilizing getRowCount(), it is not giving me the correct results - specifically when utilizing loops when querying the u_sint_impact_analysis table, however, when I put a specific sys_id of the department when querying the u_sint_impact_analysis table, the script returns the correct value (i.e. I cannot use a dynamic variable, only static). The script is shown below:
(function executeRule(current, previous /*null when async*/) {
//SETTING GLOBAL VARIABLES
var departments = new GlideRecord ('cmn_department');
var ia_form = new GlideRecord ('u_sint_impact_analysis');
var req_sys_id = current.sys_id;
//Saving functions in variables
var current_functions = current.u_impacted_functions;
//Splitting functions to individual values
var split_cur_func = current_functions.split(',');
//Script will run only if u_impacted_functions field changes
if (current.u_impacted_functions.changes()) {
var cur_func_array = [];
for (i=0;i<split_cur_func.length;i++) {
cur_func_array.push(split_cur_func[i]);
}
//gs.log ('This is the length: ' + cur_func_array.length + '\n This is the content: ' + cur_func_array);
//UTILIZING THE getRowCount() TO QUERY THE u_sint_impact_analysis TABLE TO GET NUMBER OF FORMS THAT CONTAIN THE DEPARTMENTS IN THE u_team FIELD THAT ARE THE SAME AS THE DEPARTMENTS IN THE LIST FIELD (u_Impacted_functions) OF THE TABLE (u_sint_requests) FOR THE FORM THAT WAS UPDATED (I.E. FORM THAT TRIGGERED THE BUSINESS RULE WHEN UPDATED)
for (j=0;j<cur_func_array.length;j++) {
ia_form.addQuery('u_si_request_analyzed','=',req_sys_id);
ia_form.addQuery('u_source_table','=','u_sint_requests');
ia_form.addQuery('u_team','=',cur_func_array[j]);
ia_form._query();
var cur_func_ia_count = ia_form.getRowCount();
gs.log ('This is the number of forms found: ' + cur_func_ia_count + '\n' + 'This is the function: ' + cur_func_array[j] + '\n This is the order: ' + j);
//AS THE getRowCount() RETURNS INCORRECT VALUES, THE IF STATEMENT BELOW IS UNABLE TO FUNCTION PROPERLY, HENCE I AM UNABLE TO PROCEED WRITING MY CODE
if (cur_func_ia_count == 0) {
//CODE TO BE INSERTED FOR ANOTHER ACTION
}
}
}
})(current, previous);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎09-21-2022 11:00 PM
Hi, unfortunately without details of your debugging\visibility of your data/references, identifying your issue is not possible from your code.
The use of getRowCount() is no longer ServiceNow best practice and they recommend using GlideAggregate.
GlideRecord | ServiceNow Developers
but based on the code supplied neither appears necessary and I would simple replace getRowCount() and your if (cur_func_ia_count == 0) check with a test to see if ia_form returns a result IE
ia_form._query();
if(!ia_form.next()) {
//CODE TO BE INSERTED FOR ANOTHER ACTION
}