How to add a reference field when clicked on a UI Action

Akhila Vangala
Tera Contributor

When clicked on a UI action, here for Example we can take 'Promote to Major Incident', it already has pre-defined fields populated which are Work notes and Business Impact.

 

My Query is how can I populate 'Service' which is a reference field of 'cmdb_ci_service' Table and make this field mandatory on that dialog window which shows up.

 

If it is a text field it would have been easier, but as this is a reference field how to customize the Ui Actions and UI Page.

 

This is related to Major Incident Management, if not found in your instance kindly install 'com.snc.incident.mim', so you can find these UI Actions and UI Pages.

 

AkhilaVangala_0-1680126168799.png

 

1 ACCEPTED SOLUTION

Kalyani Jangam1
Mega Sage
Mega Sage

Hi @Akhila Vangala 

Please make below changes

UI action=>Promote to Major Incident

dialog.setPreference('Services', g_form.getValue('business_service')); // We declared service value

add above line in below line

dialog.setPreference('WORK_NOTES', g_form.getValue('work_notes'));
dialog.setPreference('BUSINESS_IMPACT', g_form.getValue('business_impact'));

***************************************************************************************************************

UI Page- mim_workbench_promote

HTML

Add this code for Service show in dialog box

<div class="form-group">
<label class="col-sm-2 control-label" for="mim-promote-service">
<span mandatory="true" class="required-marker label_description"></span>

${gs.getMessage('Service')}</label>
<div class="col-sm-10">
<g:ui_reference name="mim-promote-service" id="mim-promote-service" table="cmdb_ci_service" completer="AJAXTableCompleter" />
</div>
</div>

************************************************************************************************

Client script

first declared variable

var workNotes = $("mim-promote-work-notes");
var businessImpact = $("mim-promote-business-impact");
var service=$("mim-promote-service");// like this above 2 are already there

 

Below line 21 add below code

var currentService = dialog.getPreference('Services');
if(currentService)
service.value = currentService;

 

Make changes in promote function like below

function promote() {
getMessage("Promoted to a major incident", function(msg) {
var updateWorkNotes = msg + "\n" + workNotes.value.trim();
if (!promoteBtn.hasClassName('disabled')) {
if (window.NOW.MAJOR_INCIDENT_WORKBENCH) {
var record = {};
record.work_notes = updateWorkNotes;
record.business_impact = businessImpact.value;
record.service=service.value;
_promoteRestCall(record).then(function() {
dialog.setPreference('reload', true);
close();
});
} else {
//When UI Page is rendered from Form UI Action
if(config.workspace) {
iframeMsgHelper.confirm({
msg: msg,
workNotes: workNotes.value.trim(),
businessImpact: businessImpact.value.trim()
});
} else {
g_form.getControl('work_notes').value = updateWorkNotes;
g_form.setValue('business_impact', businessImpact.value);
g_form.setValue('business_service',service.value);
GlideModal.prototype.get('sn_major_inc_mgmt_mim_workbench_promote').destroy();
gsftSubmit(null, g_form.getFormElement(), 'sysverb_mim_accept');
}
}
}
});
}

 

Please try and let me know if any changes require
Please Mark Helpful and correct if it really help you.

View solution in original post

7 REPLIES 7

Kalyani Jangam1
Mega Sage
Mega Sage

Hi @Akhila Vangala 

Please make below changes

UI action=>Promote to Major Incident

dialog.setPreference('Services', g_form.getValue('business_service')); // We declared service value

add above line in below line

dialog.setPreference('WORK_NOTES', g_form.getValue('work_notes'));
dialog.setPreference('BUSINESS_IMPACT', g_form.getValue('business_impact'));

***************************************************************************************************************

UI Page- mim_workbench_promote

HTML

Add this code for Service show in dialog box

<div class="form-group">
<label class="col-sm-2 control-label" for="mim-promote-service">
<span mandatory="true" class="required-marker label_description"></span>

${gs.getMessage('Service')}</label>
<div class="col-sm-10">
<g:ui_reference name="mim-promote-service" id="mim-promote-service" table="cmdb_ci_service" completer="AJAXTableCompleter" />
</div>
</div>

************************************************************************************************

Client script

first declared variable

var workNotes = $("mim-promote-work-notes");
var businessImpact = $("mim-promote-business-impact");
var service=$("mim-promote-service");// like this above 2 are already there

 

Below line 21 add below code

var currentService = dialog.getPreference('Services');
if(currentService)
service.value = currentService;

 

Make changes in promote function like below

function promote() {
getMessage("Promoted to a major incident", function(msg) {
var updateWorkNotes = msg + "\n" + workNotes.value.trim();
if (!promoteBtn.hasClassName('disabled')) {
if (window.NOW.MAJOR_INCIDENT_WORKBENCH) {
var record = {};
record.work_notes = updateWorkNotes;
record.business_impact = businessImpact.value;
record.service=service.value;
_promoteRestCall(record).then(function() {
dialog.setPreference('reload', true);
close();
});
} else {
//When UI Page is rendered from Form UI Action
if(config.workspace) {
iframeMsgHelper.confirm({
msg: msg,
workNotes: workNotes.value.trim(),
businessImpact: businessImpact.value.trim()
});
} else {
g_form.getControl('work_notes').value = updateWorkNotes;
g_form.setValue('business_impact', businessImpact.value);
g_form.setValue('business_service',service.value);
GlideModal.prototype.get('sn_major_inc_mgmt_mim_workbench_promote').destroy();
gsftSubmit(null, g_form.getFormElement(), 'sysverb_mim_accept');
}
}
}
});
}

 

Please try and let me know if any changes require
Please Mark Helpful and correct if it really help you.

This is so wonderful, Thanks @Kalyani Jangam1 It worked smoothly. I just had one small question, how can I make 'Services' mandatory? 

Hi @Akhila Vangala , 

It is difficult to show in mandatory because it is <g_ui:reference> tried in many ways. You can refer below docs

https://www.servicenow.com/community/developer-forum/creating-a-mandatory-field-in-ui-page/m-p/19721...

If showing as mandatory would be difficult, can we at least pop-up any error message and stop promoting the Incident/submitting this pop-up until they fill in the Service.

 

In this way we are forcing User to fill in the Service. Would this be possible? What do you think?

 

or

 

Until Service is filled in Promote is not turned Blue and they cannot click on it.