Business rule - Encoded Query

PawanKumarR
Tera Contributor

Hi All,

 

I have created a system properties "a_b_c" where i have stored three sys ids of a catalog in form of a,b,c.

now this i have to use in business rule. when my catalog is any of this (a or b or c). then do xyz.

i have to put this sys property a_b_c in Encoded Query of a BR.
i have used but its not selecting that three catalog ids.

script:

var sysIds = gs.getProperty('a_b_c').split(',');

var encodedQuery = ' ';
            for (var i = 0; i < sysIds.length; i++) {
                if (i > 0) {
                    encodedQuery += '^OR';
                }
                encodedQuery += 'cat_item=' + sysIds[i];
            }

var ritmGr = new GlideRecord('sc_req_item');
            ritmGr.addQuery("opened_by", current.u_owner_id);
            ritmGr.addEncodedQuery(encodedQuery);
            ritmGr.addActiveQuery();
            ritmGr.query();
            if (ritmGr.next()) {

1 ACCEPTED SOLUTION

J Siva
Tera Sage

Hi @PawanKumarR 

Try below script..

var sysIds = gs.getProperty('a_b_c').toString();

var encodedQuery = 'cat_itemIN' + sysIds;
var ritmGr = new GlideRecord('sc_req_item');
ritmGr.addQuery("opened_by", current.getValue('u_owner_id')); 
ritmGr.addEncodedQuery(encodedQuery);
ritmGr.addActiveQuery();
ritmGr.query();
while (ritmGr.next()) {
    //YOUR LOGIC HERE
}

Hope this helps .

Regards,

Siva

View solution in original post

15 REPLIES 15

Hi,

I tested this code before posting, so I've validated it does work. "not working" is really hard to support, as it gives us no indication of what debugging you've done. It's also helpful to post the updated script; and maybe even the content of your system property.

Apologies.
I written same as you suggested but still same, it would be great if u edit in my code.

Tried with above too but not working. below is the full code.

 if (current.u_xyz) {
updateWorkflowStatus();
 
        function updateWorkflowStatus() {
       
var sysIds = gs.getProperty('a_b_c').split(',');

 

var encodedQuery = ' ';
            for (var i = 0; i < sysIds.length; i++) {
                if (i > 0) {
                    encodedQuery += '^OR';
                }
                encodedQuery += 'cat_item=' + sysIds[i];
            }

 

 

var ritmGr = new GlideRecord('sc_req_item');
            ritmGr.addQuery("opened_by", current.u_owner_id);
            ritmGr.addEncodedQuery(encodedQuery);
            ritmGr.addActiveQuery();
            ritmGr.query();
            if (ritmGr.next()) {
                var sctaskGr = new GlideRecord('sc_task');
                sctaskGr.addQuery("request_item", ritmGr.sys_id);
                sctaskGr.addQuery("order", 100);
                sctaskGr.addActiveQuery();
                sctaskGr.query();
                if (sctaskGr.next()) {
                    new Workflow().broadcastEventToCurrentsContexts(sctaskGr, 'update', null);
                }
            }
        }
    }
 

You can simplify this to a single GlideRecord query

function updateWorkflowStatus() {

     var sysIds = gs.getProperty('a_b_c', '');

     var sctaskGr = new GlideRecord('sc_task');
     sctaskGr.addQuery("request_item", ritmGr.getUniqueValue());
     sctaskGr.addQuery("order", 100);

     sctaskGr.addQuery('cat_item', 'IN', sysIds);
     sctaskGr.addQuery('request_item.opened_by', current.getValue('u_owner_id'));

     sctaskGr.addActiveQuery();
     sctaskGr.setLimit(1);
     sctaskGr.query();

	gs.info('#DEBUG Logic: Query: ' + sctaskGr.getEncodedQuery() + ' \n and found: ' + sctaskGr.hasNext());

     if (sctaskGr.next()) {
         new Workflow().broadcastEventToCurrentsContexts(sctaskGr, 'update', null);
     }
 }

Hi Kieran, thanks for your script. i did same but worked for only one catalog, not for other two.
Can we do something to make it any one of three catalog then run script

It'll work for as many items you have in the system property, as long as they are comma seperated