How to copy attachments from defect (OOB UI Action)

sinu2
Tera Expert

Hi ,

 

I need to Modify out of the box UI action (create_story). Need to copy attachments from demand to story while creating story from demand. Below is the existing code.

 

function openFormDialog(){
	var sysId;
	if (typeof rowSysId == 'undefined')
		sysId = gel('sys_uniqueValue').value;
	else
		sysId = rowSysId;
	var gModalForm = new GlideModalForm(getMessage('Create Story'), 'rm_story');
	gModalForm.setPreference('sysparm_view',  'scrum');
	gModalForm.setPreference('sysparm_query', 'short_description=' + g_form.getValue('short_description') +
	'^description=' + g_form.getValue('description') +
	'^assigned_to=' + g_form.getValue('assigned_to') +
	'^cmdb_ci=' + g_form.getValue("cmdb_ci") +
	'^classification=Defect' +
	'^type=Development' +
	'^defect=' + sysId);
	gModalForm.render();
	gModalForm.setCompletionCallback(function(actionVerb, storySysId){
		var ga = new GlideAjax('AgileAjaxProcessor');
		ga.addParam('sysparm_name', 'updateStoryDefect');
 		ga.addParam('sysparm_defect_sys_id', sysId);
 		ga.addParam('sysparm_story_sys_id', storySysId);
		ga.getXML(function() {
			if (typeof GlideList2 !== 'undefined' && GlideList2.get("rm_defect.rm_story.defect")) {
				GlideList2.get("rm_defect.rm_story.defect").refresh();
			}
		});
	});
}

 

1 ACCEPTED SOLUTION

Ops sorry..we have to write that logic in script include..for the same function..also put some logs for debugging purpose ..

 

So in function copyAtt() put alert for parameters then-> use GlideAjax and in script include put some logs there and let me know where is the exact issue

View solution in original post

10 REPLIES 10

Mani A
Tera Guru

ok create new script include and call it in same Ajax call 

 

sendAtt: function() {

var source= this.getParameter('sysparm_defect_sys_id');

   var gr= new GlideRecord('sys_attachment');

  gr.addQuery('table_sys_id', source);

   gr.addQuery('table_name', 'rm_demand'); 

  gr.query();

   while (gr.next()) {

    var x= new GlideSysAttachment();

    var y =x.getContent(gr.sys_id);

     x.write(this.getParameter('sysparam_story_sys_id'), 'rm_story', y.name, y.data);

        }

};

  •  

I have tried in the same script include but it is not working

 

var AgileAjaxProcessor = Class.create();
AgileAjaxProcessor.prototype = Object.extendsObject(AbstractAjaxProcessor, {
	updateStoryDefect: function() {
		var result = this.newItem("result");
		var storySysId = this.getParameter('sysparm_story_sys_id');
		var defectSysId = this.getParameter('sysparm_defect_sys_id');
		var gr;
		
		try {
			if (!storySysId)
				throw new Error('sysparm_story_sys_id is missing');
			
			if (!defectSysId)
				throw new Error('sysparm_defect_sys_id is missing');
			
			gr = new GlideRecordSecure('rm_story');
			
			if (gr.get(storySysId)) {
				gr.defect = defectSysId;
				if (gr.update()) {
					result.setAttribute('status', 'success');
					result.setAttribute('message', 'story.defect has been updated successfully');
				} else {
					throw new Error('unable to update story ' + storySysId);
				}
			} else
				throw new Error('story record ' + storySysId + ' does not exist');
		} catch (err) {
			result.setAttribute('status', 'failed');
			result.setAttribute('message', err.message);
		}
	},

	sendAtt: function() {

var source= this.getParameter('sysparm_defect_sys_id');

   var gr= new GlideRecord('sys_attachment');

  gr.addQuery('table_sys_id', source);

   gr.addQuery('table_name', 'rm_defect'); 

  gr.query();

   while (gr.next()) {

    var x= new GlideSysAttachment();

    var y =x.getContent(gr.sys_id);

      x.write(this.getParameter('sysparam_story_sys_id'), 'rm_story', y.name, y.data);

        }

},


	
	type: 'AgileAjaxProcessor'
});

. Please see 2nd function 

@sinu2 is this ui action on which table ? i assumed it was on demand ,so suggested this logic

 

sendAtt: function() {
var source= this.getParameter('sysparm_defect_sys_id');
  var gr= new GlideRecord('sys_attachment');
  gr.addQuery('table_sys_id', source);
   gr.addQuery('table_name', 'rm_demand'); 
  gr.query();
   while (gr.next()) {
 var attachment = new GlideSysAttachment();
var copiedAttachments = attachment.copy('rm_demand', source, 'rm_story', this.getParameter('sysparm_story_sys_id'));
gs.log('Copied attachments: ' + copiedAttachments);
        }
},

///refer doc related to : GlideSysAttachment - copy(String sourceTable, String sourceID, String targetTable, String targetID)

 

 

Hi Mani,

 

I wanna modify UI action not to touch script include SO can you suggest. This ui action is on rm_defect table. 

Goal::::::::::::::when ever defect converting in to story what ever attachments in defects should attach in story as well.

 

SO for that i have write some script in Ui action but not working. ANy suggestions would be appreciate.

 

function openFormDialog() {	
    var sysId;
    if (typeof rowSysId == 'undefined')
        sysId = gel('sys_uniqueValue').value;
    else
        sysId = rowSysId;
    var gModalForm = new GlideModalForm(getMessage('Create Story'), 'rm_story');
    gModalForm.setPreference('sysparm_view', 'scrum');
    gModalForm.setPreference('sysparm_query', 'short_description=' + g_form.getValue('short_description') +
        '^description=' + g_form.getValue('description') +
        '^assigned_to=' + g_form.getValue('assigned_to') +
        '^cmdb_ci=' + g_form.getValue("cmdb_ci") +
        '^classification=Defect' +
        '^type=Development' +
        '^defect=' + sysId);
    gModalForm.render();
    gModalForm.setCompletionCallback(function(actionVerb, storySysId) {
        var ga = new GlideAjax('AgileAjaxProcessor');
        ga.addParam('sysparm_name', 'updateStoryDefect');
        ga.addParam('sysparm_defect_sys_id', sysId);
        ga.addParam('sysparm_story_sys_id', storySysId);
        ga.getXML(function() {
            if (typeof GlideList2 !== 'undefined' && GlideList2.get("rm_defect.rm_story.defect")) {
                GlideList2.get("rm_defect.rm_story.defect").refresh();

            }
        });
    });

	copyAtt();
}

function copyAtt() {    
    var sysId;
    if (typeof rowSysId == 'undefined')
        sysId = gel('sys_uniqueValue').value;
    else
        sysId = rowSysId;

    
    var grStory = new GlideRecord('rm_story');
    grStory.addQuery('defect', sysId);
    grStory.query();
    if (grStory.next()) {
        var grAtt = new GlideRecord('sys_attachment');
        grAtt.addQuery('table_sys_id', sysId);
        grAtt.addQuery('table_name', 'rm_defect');
        grAtt.query();
        while (grAtt.next()) {
            
            GlideSysAttachment.copy('rm_defect', sysId, 'rm_story', grStory.sys_id);
        }
    }
}