Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

Relationship between [sc_task] and its' variables

tobrien
Kilo Guru

Hi,

Can anyone offer a description of the relationship(s) between the tables I have listed?

sc_task

item_option_new

sc_item_option

My goal is to dig out the data presented in a Catalog Task which is the last STAGE of a SHIPPING REQUEST.   This task (as we have it built) has the SHIP_TO_LOCATION, and various DATES, etc.   I have been able to locate and see the data in this manner ==>

var iRec = new GlideRecord('item_option_new');

iRec.addQuery('cat_item', 'ed577dbd4f915200929cefd18110c76f'); //shipping req catalog item

iRec.addQuery('name', 'ship_to_location');

iRec.query();

But this returns ALL ROWS of Name = Ship_To_Location and I see no field in that table that relates it to the specific original REQUEST or its' TASKs

The image shows all of the REFERENCE fields in the "item_option_new" table.

The sc_item_option table looked promising, as I was able to find the 'value' field containing some of the data sought but, again, I cannot see any relationship back to a specific REQUEST or its' TASKs

I feel I am missing something *completely* obvious -- thanks to all replies!

tony

1 ACCEPTED SOLUTION

Julian Hoch
ServiceNow Employee

A while back, I created the following diagram to visualize how the tables are related for variables. As you can see, you'll have to query Sc_item_variables_task or Sc_item_option_mtom to find the reverse relationship.



find_real_file.png


View solution in original post

6 REPLIES 6

Julian Hoch
ServiceNow Employee

A while back, I created the following diagram to visualize how the tables are related for variables. As you can see, you'll have to query Sc_item_variables_task or Sc_item_option_mtom to find the reverse relationship.



find_real_file.png


Thanks You, Mr. Hoch -- this has helped Dramatically !



For all those interested, below you will find my example code which starts with a SERIAL NUMBER, and works its way to a REQUEST_ITEM which contains many of the interesting bits of info I am looking for about this serial number. And then further onto the REQUEST which gets me the SHIPPING DATE I have been after.



(Please excuse the rough paste, but I do not know how to make it look like "code" ;<>)



//Find this asset record


var sn = 'SFJC1937F2PN'; //testcase


var pRec = new GlideRecord('alm_asset');


pRec.addQuery('serial_number', sn);


pRec.query();


pRec.next()


gs.log('Asset Rec: ' + pRec.sys_id);



// we're looking for the variable named "hiddenAssetsItems" - a string of comma-separated [alm_asset] sys_ids.


//This variable is in a SHIPPING REQUEST


var iRec = new GlideRecord('item_option_new');


iRec.addQuery('cat_item', 'ed577dbd4f915200929cefd18110c76f'); //a shipping req catalog item type


iRec.addQuery('name', 'hiddenAssetItems'); //the HA 'variable.'


iRec.query();


iRec.next();


//Finds ONE Record


gs.log('item_option_new HA RecCount: ' + iRec.getRowCount());




var scItem = new GlideRecord('sc_item_option');


scItem.addQuery('value', 'CONTAINS', pRec.sys_id); //is our serial number in this text?


scItem.addQuery('item_option_new', iRec.sys_id); // and is in the HIDDENASSETITEMS variable?


scItem.query();


scItem.next();


//Finds ONE Record


gs.log('sc_item_option HA RecCount: ' + scItem.getRowCount());




var vRec = new GlideRecord('sc_item_option_mtom');


vRec.addQuery('sc_item_option', scItem.sys_id); //the sc_item_option record pointer


vRec.query();


vRec.next();


//Finds ONE Record


gs.log('sc_item_option_mtom recs pointing to HIDDENASSETITEMS: ' + vRec.getRowCount());



// These are all of the fields in the sc_req_item table


var rRec = new GlideRecord('sc_req_item');


rRec.get(vRec.request_item); //this particular Request_item


var fields = rRec.getFields();


for (var i = 0; i < fields.size(); i++) {


  var glideElement = fields.get(i);


  gs.log(glideElement.getName() + ' :: ' + rRec.getValue(glideElement.getName()) );


}



//now we can get to the SC_TASK


var tRec = new GlideRecord('sc_task');


tRec.addQuery('request_item', vRec.request_item);


tRec.query();


tRec.next();


//Finds 2 Records -- the 2 STAGEs of this workflow


gs.log('sc_task recs pointing to the REQ_ITEM: ' + tRec.getRowCount());


tRec.next();


gs.log('ShortDescription: ' + tRec.short_description);



//But we should get just the ONE STAGE we're after...


//where short_description = "Move Hardware To Shipping, Prepare for shipment, and Ship";


var tRec = new GlideRecord('sc_task');


tRec.addQuery('request_item', vRec.request_item);


tRec.addQuery('short_description', 'Move Hardware To Shipping, Prepare for shipment, and Ship');


tRec.query();


tRec.next();




//and all of its' fields including the SHIPPING DATE = [closed_at]


var fields = tRec.getFields();


for (var i = 0; i < fields.size(); i++) {


  var glideElement = fields.get(i);


  gs.log(glideElement.getName() + ' :: ' + tRec.getValue(glideElement.getName()) );


}



*** Script: Asset Rec: 6d1fc9164fb8e2003d18a6118110c784


*** Script: item_option_new HA RecCount: 1


*** Script: sc_item_option HA RecCount: 1


*** Script: sc_item_option_mtom recs pointing to HIDDENASSETITEMS: 1


*** Script: skills :: null


*** Script: assigned_to :: null


*** Script: urgency :: 3


*** Script: contract :: null


*** Script: price :: 0


*** Script: escalation :: 0


*** Script: state :: 3


*** Script: reassignment_count :: 0


*** Script: location :: null


*** Script: time_worked ::


*** Script: order :: null


*** Script: due_date :: 2016-09-12 00:00:00


*** Script: number :: RITM0010595


*** Script: billable :: 0


*** Script: upon_approval :: proceed


*** Script: configuration_item :: null


*** Script: sys_tags ::


*** Script: sla_due ::


*** Script: follow_up ::


*** Script: recurring_frequency :: null


*** Script: u_integer_items_available :: null


*** Script: sc_catalog :: null


*** Script: rejection_goto :: null


*** Script: assignment_group :: null


*** Script: request :: bc5881a0134ae600f94636722244b059


*** Script: received :: 0


*** Script: comments_and_work_notes ::


*** Script: opened_at :: 2016-09-20 14:30:04


*** Script: context :: 315881a0134ae600f94636722244b08d


*** Script: wf_activity :: null


*** Script: calendar_duration ::


*** Script: group_list :: null


*** Script: sourced :: 0


*** Script: comments ::


*** Script: u_product_quantity_json :: null


*** Script: priority :: 4


*** Script: sys_updated_by :: dave.keen@wachter.com


*** Script: recurring_price :: 0


*** Script: variables :: null


*** Script: delivery_task :: null


*** Script: backordered :: 0


*** Script: sys_updated_on :: 2016-12-05 12:20:52


*** Script: parent :: null


*** Script: quantity_sourced :: 0


*** Script: quantity :: 1


*** Script: active :: 0


*** Script: opened_by :: 33fdffa813f92600f94636722244b062


*** Script: expected_start ::


*** Script: watch_list :: null


*** Script: company :: 157b3fd74fd28200929cefd18110c79f


*** Script: upon_reject :: cancel


*** Script: work_notes ::


*** Script: sys_created_by :: alexander.drewke@wachter.com


*** Script: cmdb_ci :: null


*** Script: approval_set ::


*** Script: user_input ::


*** Script: sys_created_on :: 2016-09-20 14:30:04


*** Script: contact_type :: phone


*** Script: approval_history ::


*** Script: activity_due ::


*** Script: task_for :: null


*** Script: undefined :: null


*** Script: work_end ::


*** Script: closed_at :: 2016-12-05 12:20:52


*** Script: close_notes :: null


*** Script: variables :: null


*** Script: business_duration ::


*** Script: cat_item :: ed577dbd4f915200929cefd18110c76f


*** Script: knowledge :: 0


*** Script: approval :: requested


*** Script: sys_domain_path :: !!#/


*** Script: sys_mod_count :: 2


*** Script: estimated_delivery ::


*** Script: sys_domain :: 95725c834fa6c20064d523d18110c75f


*** Script: work_start ::


*** Script: correlation_id :: null


*** Script: sys_class_name :: sc_req_item


*** Script: stage :: complete


*** Script: u_integer_items_selected :: null


*** Script: short_description :: Shipping Request


*** Script: impact :: 3


*** Script: description :: null


*** Script: correlation_display :: null


*** Script: closed_by :: fcbc93684fb51200682b433e0210c799


*** Script: made_sla :: 1


*** Script: delivery_plan :: null


*** Script: work_notes_list :: null



*** Script: sc_task recs pointing to the REQ_ITEM: 2


*** Script: ShortDescription: Move Hardware To Shipping, Prepare for shipment, and Ship



*** Script: The particular SC_TASK that closes the Shipping Request ==>



*** Script: skills :: null


*** Script: closed_by :: fcbc93684fb51200682b433e0210c799


*** Script: assigned_to :: null


*** Script: contract :: null


*** Script: u_closure_code :: null


*** Script: state :: 3


*** Script: reassignment_count :: 0


*** Script: escalation :: 0


*** Script: location :: null


*** Script: time_worked ::


*** Script: order :: null


*** Script: u_closure_statement :: null


*** Script: due_date :: 2016-09-20 14:34:54


*** Script: number :: TASK0011655


*** Script: upon_approval :: proceed


*** Script: sys_tags ::


*** Script: sla_due ::


*** Script: follow_up ::


*** Script: u_integer_items_available :: null


*** Script: sc_catalog :: null


*** Script: rejection_goto :: null


*** Script: assignment_group :: 3831913b4fe7c20064d523d18110c741


*** Script: request :: bc5881a0134ae600f94636722244b059


*** Script: comments_and_work_notes ::


*** Script: opened_at :: 2016-09-20 14:34:54


*** Script: request_item :: fc5881a0134ae600f94636722244b059


*** Script: wf_activity :: b53371ea13512200f94636722244b00d


*** Script: calendar_duration ::


*** Script: group_list :: null


*** Script: comments ::


*** Script: priority :: 4


*** Script: sys_updated_by :: dave.keen@wachter.com


*** Script: variables :: null


*** Script: delivery_task :: null


*** Script: sys_updated_on :: 2016-12-05 12:20:50


*** Script: parent :: fc5881a0134ae600f94636722244b059


*** Script: active :: 0


*** Script: opened_by :: 33fdffa813f92600f94636722244b062


*** Script: expected_start :: 2016-09-20 14:34:54


*** Script: watch_list :: null


*** Script: company :: null


*** Script: upon_reject :: cancel


*** Script: work_notes ::


*** Script: sys_created_by :: alexander.drewke@wachter.com


*** Script: cmdb_ci :: null


*** Script: approval_set ::


*** Script: user_input ::


*** Script: sys_created_on :: 2016-09-20 14:34:54


*** Script: contact_type :: phone


*** Script: approval_history ::


*** Script: activity_due ::


*** Script: task_for :: null


*** Script: undefined :: null


*** Script: work_end :: 2016-12-05 12:20:50


*** Script: closed_at :: 2016-12-05 12:20:50


*** Script: close_notes :: null


*** Script: variables :: null


*** Script: business_duration ::


*** Script: knowledge :: 0


*** Script: approval :: not requested


*** Script: sys_mod_count :: 1


*** Script: sys_domain_path :: !!#/


*** Script: calendar_stc :: null


*** Script: sys_domain :: 95725c834fa6c20064d523d18110c75f


*** Script: work_start ::


*** Script: correlation_id :: null


*** Script: sys_class_name :: sc_task


*** Script: u_integer_items_selected :: null


*** Script: short_description :: Move Hardware To Shipping, Prepare for shipment, and Ship


*** Script: impact :: 3


*** Script: description :: Retrieve hardware from Stage and Config, Prepare the shipment, and Ship it !


*** Script: correlation_display :: null


*** Script: urgency :: 3


*** Script: made_sla :: 1


*** Script: delivery_plan :: null


*** Script: work_notes_list :: null


[0:00:00.522] Total Time