Automatically Consuming a Consumable?

CJB
Tera Expert

Hi, I'm trying to figure out a way to add a RunScript to a workflow (or another option) that allows for consumables to automatically be consumed.

We use a form that goes through a workflow.

I'm using this code that someone was very nice to upload on here, but I'm having trouble getting it to work properly:

var this_consumable = current.variables.alm_consumable;


//The this_consumable variable is a Reference variable used to select the consumable from the available stockrooms.


var this_qty = current.quantity;


var this_user = current.request.requested_for;

 

current.variables.alm_consumable_pull_from_stock = (" Qty "+ this_qty + "|" + this_consumable.getDisplayValue() );


//this line prints the value to a single line text variable on the Task form.

 

var new_sys_id = new Consumables().splitForeground(this_consumable, this_qty, '10', '', '', '', '', this_user);


//this is the script include that actually consumes and assigns to the user

 

Under consumables, the consumption is there, but it ends up looking like this. I need it to at least have the Display Name, if anything.

find_real_file.png

 

Thanks.

1 ACCEPTED SOLUTION

Mark Stanger
Giga Sage

Consuming a consumable should just decrement from the quantity of an existing consumable, not create a new record.  Are you saying that it's creating a new record in your consumables table?  If your script isn't working, it's probably because of one of four things (some of which are probably obvious to you but I'll include them anyway)...

1)  The variable 'alm_consumable' isn't really referencing the 'alm_consumable' table

2)  The variable 'alm_consumable' isn't really a reference variable

3)  The variable 'alm_consumable' isn't really named 'alm_consumable'

If you take a screenshot of the back-end view of the 'alm_consumable' variable I can help you validate these.

4)  Your run script in your workflow is right at the very beginning of your workflow.  Sometimes the timing of the creation of the 'sc_req_item' record is such that the 'sc_request' record doesn't actually exist right at the exact second that the workflow kicks off.  This would cause your 'this_user' variable to pick up an incorrect value because the request (and, in turn, the requested for) wouldn't be available yet.

I just tested the following script from the 'Scripts - Background' module in my own system and it ran successfully.  You can use it to do a quick test independent of everything in your workflow script just to make sure the actual consumption is working like it should.  Then you should be able to isolate to one of the 2 factors above (consumable ID or user ID) for sure.  Just replace the sys_id in the first line with the sys_id of your consumable to test.

var this_consumable = '2357460637732000158bbfc8bcbe5d0e';
var this_qty = '3';
var this_user = gs.getUserID();
var new_sys_id = new Consumables().splitForeground(this_consumable, this_qty, '10', '', '', '', '', this_user);

View solution in original post

32 REPLIES 32

Hi Neha,

Iam working on the similar requirement. It would be great if you could tag the link here so i can try and work it out.

 

Thanks,

Rini

Here is my another post, which has the link of solution.

https://community.servicenow.com/community?id=community_question&sys_id=fc554858db75b3401cd8a345ca961920

If this post helped you, Please mark it helpful.

Thanks,

Neha

Hi Neha,

I have a doubt. Actually my requirement is to auto-reduce the quantity of the stocks when the request for equipment is closed.

I wonder if this script would work for that requirement. Iam kind of new to Asset and stock in Now.

Appreciate your timely help.

 

Thanks,

Rini

so in your catalog Item workflow you need to write this script in Run Script activity, after Catalog task activity (Once task is closed) you can make this script run which will reduce the quantity.

Code snippet:

var consumableAsset = current.variables.consumable;
var qty = parseInt(current.variables.quantity, 10);
var requestedFor = current.variables.requested_for;

new Consumables().splitForeground(consumableAsset, qty, '10', '', '', '', '', requestedFor);

This worked for me, also you can refer OOB code which is written on 'Consume' button on alm_consumable table. 

Hi Neha, I used your script. It pops a message that stock is consumed but the quantity is not reduced.

And When I used @CJB s script it seems to be working, but it has another problem that it works only when I give sys_id of the consumable record like below.

 

var this_consumable = ('17faf4e0dbfde700be7732f6f4961977');

var this_qty = current.quantity;

var this_user = current.request.requested_for;

current.variables.alm_consumable_pull_from_stock = (" Qty "+ this_qty + "|" + this_consumable.getDisplayValue() );

var new_sys_id = new Consumables().splitForeground(this_consumable, this_qty, '10', '', '', '', '', this_user);

 

It will be difficult to update all the sys_id's, Isnt it...Any suggestions would be great to help me rectify this issue.

 

Best regards,

Rini