Submit a Catalog Item via Business Rule?

dianemiro
Kilo Sage

Hi Everyone,

I have an existing inbound action with the following code:

var grREQ = new GlideRecord('sc_request');
grREQ.requested_for = '165c7f9adbbfa340a9423ebf9d9619a6';
grREQ.short_description = 'Test_8';
grREQ.description = 'Test_8';
//grREQ.parent = current.sys_id;

var reqSysID = grREQ.insert();

var ritm = new GlideRecord('sc_req_item');
ritm.short_description = 'Test_8';
ritm.description = 'Test_8';
ritm.comments = 'Test_8';
ritm.cat_item = '7f8b78b9db19738002b63ebd7c96198b';
ritm.request = reqSysID;
ritm.state = 1;
//Workflow Trigger
var w = new Workflow();
wfSysId = w.getWorkflowFromName("Infosec Approval");
w.startFlow(wfSysId, ritm, ritm.operation());

ritm.insert();

This is working for inbound action, however, we need to change our process and submit or create this catalog item via business rule and when I used this exact script on BR, it's creating REQ, RITM but the workflow is not attaching. Do you have an idea why this happens? Thank you.

1 ACCEPTED SOLUTION

Use below code with cart API to add comments in RITM.

Make sure to pass your catalog item sys_id in cart

var cartId = GlideGuid.generate(null);
var cart = new Cart(cartId);
var item = cart.addItem('f8861cbedbed73008d73771c8c961961');
var rc = cart.placeOrder(); 
var req = new GlideRecord('sc_req_item');
req.addQuery('request',rc.sys_id);
req.query();
while(req.next()){

req.comments = "test comm";
req.update();

}

 

Regards,

Sachin

View solution in original post

11 REPLIES 11

@Diane Miro 

Unfortunately you cannot use Cart API to update/set any fields on RITM or REQ

you will have to query and update it as mentioned by Sachin

Regards
Ankur

Mihir Mohanta
Kilo Sage

Using Catalog Cart API is recommended option as suggested by Sachin.

However if you want to use your code , I have modified a slightly and it should work.

 

var grREQ = new GlideRecord('sc_request');
grREQ.requested_for = 'cdb1b5c41b67d0902181ddb9ec4bcb37';
grREQ.short_description = 'Test_8';
grREQ.description = 'Test_8';
//grREQ.parent = current.sys_id;

var reqSysID = grREQ.insert();
var ritm = new GlideRecord('sc_req_item');
ritm.short_description = 'Test_8';
ritm.description = 'Test_8';
ritm.comments = 'Test_8';
ritm.cat_item = '7f8b78b9db19738002b63ebd7c96198b';
ritm.request = reqSysID;
ritm.state = 1;
var item = ritm.insert();
var wf = new GlideRecord('sc_req_item');
wf.get(item);
var w = new Workflow();
wfSysId = w.getWorkflowFromName("Infosec Approval");
w.startFlow(wfSysId, wf, 'update');

Hi Mihir,

Thanks for your response. Tried this but still not working.

Regards,
Diane

Yash Agrawal1
Tera Guru

Hello ,

var grREQ = new GlideRecord('sc_request');
grREQ.newRecord();
grREQ.requested_for = '165c7f9adbbfa340a9423ebf9d9619a6';
grREQ.short_description = 'Test_8';
grREQ.description = 'Test_8';
//grREQ.parent = current.sys_id;
var reqSysID = grREQ.insert();

var ritm = new GlideRecord('sc_req_item');
ritm.newRecord();
ritm.short_description = 'Test_8';
ritm.description = 'Test_8';
ritm.comments = 'Test_8';
ritm.cat_item = '7f8b78b9db19738002b63ebd7c96198b';
ritm.request = reqSysID;
ritm.state = 1;
ritm.insert();

//Workflow Trigger
var w = new Workflow();
wfSysId = w.setWorkflowFromName("Infosec Approval");
w.startFlow(wfSysId, ritm, ritm.operation());

Try the Above Code.

Regards

Yash Agrawal

Yash Agrawal1
Tera Guru

Hello,

Try the code for executing workflow from Business Rule.

function onAsync(current) {

startWorkflow();
function startWorkflow() 
{
 var u_company_name = "CompanyName";
var w = new global.Workflow();
var   wfId = w.getWorkflowFromName("invokeCustomWorkflow");
var context = w.startFlow(wfId,current,null,u_company_name);
if (context != null)
current.context = context.sys_id;

}

}
Regards,
Yash Agrawal