Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

GlideSysAttachment.copy doesn't seem to be working in my script, any pointers?

Tate Roth
Tera Contributor

I created a workflow script to create a record in a scoped application from a sc_request that is working great.  The problem I am having is I'd like to copy any attachments that are added to the Request onto the new record.  I tried to use the GlideSysAttachment.copy function but I must be doing something wrong.  See the script below.  Any suggestions on what I am doing wrong?

Thanks in advance.

var gr = new GlideRecord('x_smcit_siq_pet_table');
gr.initialize();
if (current.variables.customer_name == '') {
	var name = new GlideRecord('x_smcit_siq_pet_siq_customers');
	name.addQuery('name', current.variables.first_name + ' ' + current.variables.last_name);
	name.query();
	while (name.next()) {
		gr.setValue('customer', name.sys_id);
	}
	gr.setValue('customer_email', current.variables.email_address);
	gr.setValue('customer_number', current.variables.customer_id);
	gr.setValue('sleeper_id', current.variables.sleeper_id);
	}
else {
	gr.setValue('customer', current.variables.customer_name);
	var name = new GlideRecord('x_smcit_siq_pet_siq_customers');
	name.addQuery('sys_id', current.variables.customer_name);
	name.query();
	while (name.next()) {
		gr.setValue('customer_email', name.getValue('email'));
		gr.setValue('customer_number', name.getValue('customer_id'));
		gr.setValue('sleeper_id', name.getValue('sleeper_id'));
	}
}

gr.setValue('description', current.variables.description);
gr.setValue('issue_type', current.variables.issue_type.getDisplayValue());
gr.setValue('issue_sub_type', current.variables.issue_subtype);
gr.setValue('current_mac_address', current.variables.current_mac_address);
gr.setValue('new_mac_address', current.variables.new_mac_address);
gr.setValue('type_of_router', current.variables.router_type);
gr.setValue('number_of_routers', current.variables.number_of_routers);
gr.setValue('pump_lights', current.variables.pump_lights);
gr.setValue('pump_on_for_investigation', current.variables.pump_on);
gr.setValue('firewall', current.variables.firewall);
gr.setValue('cascaded_network', current.variables.cascaded_network);
gr.setValue('order_number', current.variables.order_number);
gr.setValue('components_for_product_name', current.variables.components_for_product_name);
gr.setValue('line_not_added_to_sleepiq', current.variables.line_not_added_to_sleepiq);
gr.setValue('component_to_be_added_to_siq', current.variables.component_to_be_added_to_siq);
gr.setValue('customer_number_mismatch', current.variables.customer_number_mismatch);
gr.setValue('use_siq_customer_number', current.variables.use_siq_customer_number);
gr.setValue('component_out_of_bom', current.variables.component_out_of_bom);
gr.setValue('missing_component', current.variables.missing_component);
gr.setValue('line_number_of_component', current.variables.line_number_of_component);

if (current.variables.description.length > 80) {
	gr.setValue('short_description', current.variables.description.substring(0, 79));
}
else {
	gr.setValue('short_description', current.variables.description);
}

var sysID = gr.insert();

GlideSysAttachment.copy('sc_req_item', current.sys_id, 'x_smcit_siq_pet_table', sysID);
1 ACCEPTED SOLUTION

Michael Ritchie
ServiceNow Employee
ServiceNow Employee

Where is this code within the workflow?  I ask because it is important to understand the execution order of the catalog and I suspect maybe the requested item may not be inserted yet thus the attachments aren't available to copy from.  If this script is at the beginning of the workflow the sc_req_item hasn't been inserted yet and nor has the sc_request.  Once the workflow reaches a stopping point like waiting for an approval or wait for condition or timer then the sc_req_item and then sc_request is inserted.  By putting in a short timer, you are giving the records a chance to insert.

View solution in original post

14 REPLIES 14

Shishir Srivast
Mega Sage

Are  you able to get the created record's sys_id on x_smcit_siq_pet_table table? and are you trying to copy the attachment from sc_request table or sc_req_item table?

The attachment is attached by default on the sc_req_item table so that's where I'm trying to copy it from.  I've also tried both using var sysID = gr.insert(); to get the sys_id of the x_smcit_siq_pet_table record as well as just using gr.sys_id with the same results, nothing showing up on the new record.

I just went in and added a log statement to check the sys_id's  and they the ones logged for the variable sysID and for current.sys_id match the new record in the scoped app and the requested item respectively.

Jaspal Singh
Mega Patron
Mega Patron

Hi Tate,

 

Try adding gr.update(); after GlideSysAttachment.copy('sc_req_item', current.sys_id, 'x_smcit_siq_pet_table', sysID); once & check.

 

Thanks,

Jaspal Singh

 

Hit Helpful or Correct on the impact of response,