Interested in a ServiceNow event built for developers? Registration for now[dev]26 is officially open!

How to create Copy Change button in Agent Workspace

Rekha Tiwari
Kilo Guru

Hi All,

I need to have Copy Change button on Agent Workspace same as we have on native view. We have OOB "Copy Change" UI action.

I have checked "Workspace form button" checkbox. I can see Copy Change button on Agent Workspace but not performing any action. Please help me with this.

 

Thanks,

1 ACCEPTED SOLUTION

@Rekha Tiwari 

it got created from script only

then just show some alert to user with the CHG number

Client Script:

function onClick(g_form) {
//alert('1');

// GlideAjax here send the current CHG sys_id so that you can copy the fields to new CHG
var srcSysId = g_form.getUniqueValue();
var ga = new GlideAjax('CustomChangeUtils');
ga.addParam('sysparm_name', 'getChangeDetails');
ga.addParam('sysparm_src_sysid', srcSysId);
ga.getXMLAnswer(function(answer) {

alert(answer);

});
}

Script Include:

var ChgSysID = this.getParameter("sysparm_src_sysid");

var gr = new GlideRecord("change_request");
gr.addQuery('sys_id', ChgSysID);
gr.query();
if(gr.next()){

var gr1 = new GlideRecord('change_request');
gr1.initialize();
gr1.category = gr.category;
gr1.business_service = gr.business_service;
gr1.cmdb_ci = gr.cmdb_ci;
gr1.insert();
return 'CHG created ' + gr1.number;
}

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 10x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

26 REPLIES 26

Hi @Ankur Bawiskar 

 

I have created custom SI-

 

var CustomChangeUtils = Class.create();
CustomChangeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getChangeDetails: function() {
var userSysID = this.getParameter("sysparm_user_name");
var gr = new GlideRecord("change_request");
gr.initialize();
var result = this.newItem("result");
result.setAttribute("category", gr.category);
result.setAttribute("businessService", gr.business_service);
result.setAttribute("ci", gr.cmdb_ci);
gr.insert();

},
type: 'CustomChangeUtils'
});

 

 

Copy Change UI action- Workspace form button script-

 

 

function onClick(g_form) {

// GlideAjax here send the current CHG sys_id so that you can copy the fields to new CHG
var srcSysId = g_form.getUniqueValue();
var ga = new GlideAjax('CustomChangeUtils');
ga.addParam('sysparm_name', 'getChangeDetails');
ga.addParam('sysparm_src_sysid', srcSysId);
ga.getXMLAnswer(function (queryParam) {
if (queryParam) {
var gotoURL = new GlideURL('CopyChangeRelatedLists.do');
gotoURL.setEncode(false);
gotoURL.addToken();
gotoURL.addParam('srcSysID', srcSysId);
gotoURL.addParam('newSysID', '$sys_id');
gotoURL.addParam('sysparm_returned_action', '$action');

var form = cel('form', document.body);
hide(form);
form.method = "POST";
form.action = g_form.getTableName() + ".do";
if (typeof g_ck != 'undefined' && g_ck != "")
addParam(form, 'sysparm_ck', g_ck);
addParam(form, 'sys_id', '-1');
addParam(form, 'sysparm_query', queryParam);
addParam(form, 'sysparm_goto_url', gotoURL.getURL());
form.submit();
}

});
}

Still not working. Please help me where I am going wrong.

 

 

Hi,

is the ajax call happening?

why to keep this script?

var gotoURL = new GlideURL('CopyChangeRelatedLists.do');
gotoURL.setEncode(false);
gotoURL.addToken();
gotoURL.addParam('srcSysID', srcSysId);
gotoURL.addParam('newSysID', '$sys_id');
gotoURL.addParam('sysparm_returned_action', '$action');

Just use normal GlideAjax and send the current form sys_id using g_form.getUniqueValue()

then create a copy of the record

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 10x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Okay, Can you please help me with the exact script as I am new to workspace side script.

 

 

 

Hi,

it's the normal GlideAjax syntax only which you can do in workspace client script

same as normal client script

Regards
Ankur

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 10x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Hi @Ankur Bawiskar 

Yeah I have created as below-

 

SI-

 

var CustomChangeUtils = Class.create();
CustomChangeUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
getChangeDetails: function() {
gs.info("CheckingChnage");
var userSysID = this.getParameter("sysparm_user_name");
var gr = new GlideRecord("change_request");
gr.initialize();
var result = this.newItem("result");
result.setAttribute("category", gr.category);
result.setAttribute("businessService", gr.business_service);
result.setAttribute("ci", gr.cmdb_ci);
gr.insert();

},
type: 'CustomChangeUtils'
});

 

Client script-

 

 

function onClick(g_form) {

// GlideAjax here send the current CHG sys_id so that you can copy the fields to new CHG
var srcSysId = g_form.getUniqueValue();
var ga = new GlideAjax('CustomChangeUtils');
ga.addParam('sysparm_name', 'getChangeDetails');
ga.addParam('sysparm_src_sysid', srcSysId);
ga.addParam('sysparm_user_name', g_form.getValue("caller_id"));
ga.getXML(getDetails);

function getDetails(response) {
var result = response.responseXML.getElementsByTagName("result");
g_form.setValue('category', result[0].getAttribute('category'));
g_form.setValue('business_service',result[0].getAttribute('businessService'));
g_form.setValue('cmdb_ci',result[0].getAttribute('ci'));
}
}

 

I have tested, Glideajax is getting called but Copy Change button still not performing anything. PLease guide me.