Select specific attachments to copy

Rob Sestito
Mega Sage

Hey SN Comm,

I have a couple of things that I want to see if they can be enhanced. For my first one, we have a UI Action that grabs the attachments from the HR Case, and posts them to the HR Task: (this is in production)

find_real_file.png

GlideSysAttachment.copy(current.parent.sys_class_name, current.parent, current.getTableName(), current.sys_id);

current.update();
action.setRedirectURL(current);

gs.addInfoMessage("Attachments have been added!");

gsftSubmit(null, g_form.getFormElement(), 'sysverb_update_and_stay');

Then, I have a Business Rule to do the following (which is NOT in production yet): This BR automatically allows the case worker, to have the attachments added to the email (from email client) from the Case/Task (depending on which table I give as the target).

find_real_file.png

(function executeRule(current, previous /*null when async*/) {
	//gs.log('M in loop');
	
	// Add your code here
	var lookatt=new GlideRecord('sys_attachment');
	lookatt.addQuery('table_sys_id',current.instance);
	lookatt.query();
	while(lookatt.next())
		{
		//	gs.log('M in loop again');
		GlideSysAttachment.copy('sn_hr_core_case_operations', current.instance, 'sys_email', current.sys_id);
	}
})(current, previous);

I really want to see if there is a way, at least for the UI Action,'Grab Attachments', to make my options selectable. I think it would be really beneficial to be able to do that with these features.

Anyone able to see/or know if this is possible at all?

Thanks in advance!

-Rob

1 ACCEPTED SOLUTION

Hi Rob,

 

Yeah I was able to replicate the issue in my Personal Development instance as well. Took me a while and have updated the Business Rule. Just update your Business Rule as per the script mentioned below. 

(function executeRule(current, previous /*null when async*/) {
	
	// Add your code here
	var tic_num = '';
	var sub =  current.subject;
	var number = sub.replace(/[^\d.]/g,'');//current.subject.toString().substr(0,10);
	var num = number.substr(0,7);
	var num2 =sub.indexOf(num);
	if(num2 > 3)
	   tic_num = sub.substr(num2-3,num.length + 3);
	else
	  tic_num = sub.substr(0,num.length + num2);
	var ticket_number = tic_num.replace(/\s/g,'');
      // The first 14 characters of the subject are the ticket number. 
      // We need to subtract this number to get the sys_id of the task record.

     var gr = new GlideRecord('incident');  //Replace with your Table Name from which you want to copy to Email Client
     gr.addQuery('number',ticket_number);
     gr.query();
     gr.next();
     
     var arrayAttachment = GlideSysAttachment.copy(gr.sys_class_name, gr.sys_id ,'sys_email', current.sys_id);

     for (var i = 0; i< arrayAttachment.size(); i++) { 
             var attachmentSidsPiece = String(arrayAttachment.get(i)).split(',');
             var sourceAttachmentSysid = attachmentSidsPiece[0];
             var targetAttachmentSysid = attachmentSidsPiece[1]; 
             var sourceRec = new GlideRecord('sys_attachment');
             var targetRec = new GlideRecord('sys_attachment');

     if (sourceRec.get('sys_id',sourceAttachmentSysid) &&       
                               targetRec.get('sys_id',targetAttachmentSysid)) {

       if (sourceRec.u_send_to_email_client==false) {
            //delete all other attachments that are not marked to send via the email client        
            targetRec.deleteRecord();

     } else { //reset the flag
           sourceRec.u_send_to_email_client= false;
           //as soon as the email record is created, reset the flag to false again
           sourceRec.update();
    }
 }
}
	
})(current, previous);

Rest of the code remains the same. Hopefully this time it should work:) 

 

Please let me know if still there is an issue and we can check further.

 

Hope this help. Please mark the answer as helpful/correct based on impact.

 

Regards,

Shloke

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke

View solution in original post

32 REPLIES 32

Hi Rob,

 

Apologies for not responding back, was stuck in some issue. Will try to have a look today and get back to you once I try this on my instance with some useful information for you.

 

Thanks,

Shloke

Hope this helps. Please mark the answer as correct/helpful based on impact.

Regards,
Shloke

No worries at all shloke04 - I truly and greatly appreciate your help with this.

Thank you,

-Rob

Hey shloke,

Hope you had a nice weekend/holiday (if you celebrate).

Just curious if you have been able to travel over to my new post from this conversation?

Thanks so much!

-Rob

Hey shloke,

Sorry to keep bugging you - just wondering if you are still able to help me with my other part for this, on my other post Selecting which attachments to copy from one record to another

 

Thanks so much!

-Rob

Hi Shlok,

I have a similar requirement to choose specific attachments to copy to the Email Client on the HR Case table that is a custom table in my case. I found this thread very helpful. However, when I am choosing the attachments from the ui action, attachments are not being copied. Also, if just click the "Email Client" button, even then no attachment is copied. It seems that business rule is not working. Could you please suggest what is the issue. I have used the code that you have shared in this thread and just change the name of the HR case. The line highlighted in yellow doesn't seem to work. Also, in my case the first 10 letters of the subject line is the ticket number. 

(function executeRule(current, previous /*null when async*/) {

var tic_num = '';
var sub = current.subject;
var number = sub.replace(/[^\d.]/g,'');//current.subject.toString().substr(0,10);
var num = number.substr(0,7);
var num2 =sub.indexOf(num);
if(num2 > 3)
tic_num = sub.substr(num2-3,num.length + 3);
else
tic_num = sub.substr(0,num.length + num2);
var ticket_number = tic_num.replace(/\s/g,'');
// The first 14 characters of the subject are the ticket number.
// We need to subtract this number to get the sys_id of the task record.

var gr = new GlideRecord('u_hr_case'); //Replace with your Table Name from which you want to copy to Email Client
gr.addQuery('number',ticket_number);
gr.query();
gr.next();

var arrayAttachment = GlideSysAttachment.copy('u_hr_case', gr.sys_id ,'sys_email', current.sys_id);

for (var i = 0; i< arrayAttachment.size(); i++) {
var attachmentSidsPiece = String(arrayAttachment.get(i)).split(',');
var sourceAttachmentSysid = attachmentSidsPiece[0];
var targetAttachmentSysid = attachmentSidsPiece[1];
var sourceRec = new GlideRecord('sys_attachment');
var targetRec = new GlideRecord('sys_attachment');

if (sourceRec.get('sys_id',sourceAttachmentSysid) &&
targetRec.get('sys_id',targetAttachmentSysid)) {

if (sourceRec.u_send_to_email_client==false) {
//delete all other attachments that are not marked to send via the email client
targetRec.deleteRecord();

} else { //reset the flag
sourceRec.u_send_to_email_client= false;
//as soon as the email record is created, reset the flag to false again
sourceRec.update();
}
}
}



})(current, previous);