Issue with Request state while creating via SOAP API using Cart API

shyam34
Tera Contributor

Hello All

We have an Requirement to Create Request via Integration , for which I have constructed an Scripted SOAP , in the Same logic I had Included logic to Created Approval for the Same Request and have created BR to Auto Approve that 

 

Now the Issue is , when ever we create Request via third party , Request is getting created with 

  • Request stateClosed Rejected
  • StageClosed Incomplete
  • StateClosed Incomplete 

and later it is updating state as - Work in progress and Request State to Approved 

 

below is the Logic which I have used in Scripted SOAP

 

 

function order() {
        // Build cart and place order
        var cart = new Cart();

        for (var j = 0; j < cat_array.length; j++) {
            var item = cart.addItem(cat_array[j] + '');

            // Set variables from the JSON variables input
            var invars = new JSONParser().parse(request.variables);
            for (var i in invars) {
                cart.setVariable(item, i, invars[i]);
            }

        }

        var cartGR = cart.getCart();

        cartGR.requested_for = requestedForUser;


        // Place the order
        cartGR.update();
        var rc = cart.placeOrder();
var approval_gr = new GlideRecord('sysapproval_approver');
        approval_gr.initialize();
        approval_gr.state = 'requested';
        approval_gr.approver = 'df33656e1bbae110a440ffb7d34bcbc7';
        approval_gr.sysapproval = rc.sys_id; //Current is record that requires approval
        approval_gr.document_id = 'Request :' + '' + rc.sys_id;
        approval_gr.insert();


        // Setting the description value for Request Record
        var gr = new GlideRecord('sc_request');
        gr.addQuery('sys_id', rc.sys_id);
        gr.query();
        if (gr.next()) {
            gr.description = 'Automation';
            gr.opened_by = opendby;
            gr.update();
        }

        var ritm = new GlideRecord('sc_req_item');
        ritm.addQuery('request=' + rc.sys_id);
        ritm.query();
        while (ritm.next()) {

            ritm.opened_by = opendby; 
            ritm.update();

        }

    }

 

 

Business rule to Auto Approve 

 

 

var reqID='';
	var gr = new GlideRecord('sc_request');
	if(gr.get(current.sysapproval))
	{
		reqID = gr.getUniqueValue();
		current.state='approved';
		gr.request_state='in_process';
		gr.stage = 'Requested';
		gr.work_notes = 'Request has been Auto Approved';
		gr.update();
		current.update();

	}

 

 

Expected Behavior when Request gets Created 

shyam34_0-1702628699902.png

 

Failure :

shyam34_1-1702628748800.png

 

Can you please review and help to Make the Corrections if need

 

@Ankur Bawiskar @Anil Lande @jaheerhattiwale @Jaspal Singh 

 

 

 

6 REPLIES 6

@Anil Lande  , 

 

we are using Workflow only here , I was trying to add Timer condition before the Approval Activity as the Request generation is getting delayed from the SOAP , So I have added timer for 20 seconds before user Approval Activity , when I do that it is adding Approval History Multiple times which I'm unable to understand why , After adding this timer it is also adding for Manual requests which are created from Portal 

 

I was trying to add following script in Timer but it is failing can you please take a look and suggest your solutions here

 

var requestsysid = workflow.scratchpad.requestID.toString();
var gr = new GlideRecord('sc_request');
gr.addQuery('sys_id', requestsysid);
gr.query();
if (gr.next()) {
    if (gr.u_level_approval == 'df33656e1bbae110a440ffb7d34bcbc7') {
        gs.info("entering into if loop");
        answer = 20;
    } else {
        answer = 0;
    }

}

it is not entering into if loop only 

shyam34
Tera Contributor

@Ankur Bawiskar can you also please take a look and correct if am wrong anywhere