Log orders in activity through a field's link, leading to form in front-end service portal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-05-2025 07:31 AM
Hi!
I have a question regarding our decommissioning process, which is a custom process. So there is parent table called 'decom_decommission_task' holding the main order and then there is the child table called 'decom_decommission_task' holding the activities.
The business need:
Some activities contain a field called 'link_to_request_form' with a link to a form in the front end of the service-portal (hence leading to another table). We want to be able to listen for when an order outside of 'x_vgll_decom_decommission_task' has been placed. Once the order is placed, this should be logged in the activity log of a 'x_vgll_decom_decommission_task'.
There is a similar functionality today for the 'x_vgll_decom_decommission_task' activity called "Create change" when you press the UI Action button "Create change". However, this solution opens a modal window directly to a back-end change form and is therefore not quite the same. Thus the modal view is technically still on top of the same window view. In my cause, there will be a new tab/window.
Here is how this UI Action functionality looks:
function openModal() {
var parent = g_form.getValue('decommission');
g_form.getReference('decommission', function(record) {
if (record.parent) {
parent = record.parent.toString();
}
});
var ga = new GlideAjax('global.DecommissionUtilsAjax');
ga.addParam('sysparm_name', 'getDecommissionInfo');
ga.addParam('sysparm_sys_id', parent);
ga.getXMLAnswer(function(answer) {
var userID = g_user.userID;
//var parent = g_form.getValue('decommission');
var clearvalue; // Stays Undefined
if (answer) {
var data = JSON.parse(answer);
var service = data.service;
var serviceOffering = data.service_offering;
}
var gModalForm = new GlideModalForm('Skapa change', 'change_request', completeCallBack);
var params = 'u_change_type=Avveckling^type=standard^parent=' + parent + '^requested_by=' + userID + '^business_service=' + service + '^service_offering=' + serviceOffering + '^description=Beskrivning anges i fältet Reason for change i fliken Planning\nOBS! Se beskrivning avvecklingsprocessen: https://insidan.vgregion.se/kontakt-och-organisation/regiongemensamma-kontaktuppgifter/ledning-och-styring-av-is-it/avvecklingsprocessen/^short_description=Avveckling: ';
gModalForm.setPreference('sysparm_query', params);
gModalForm.addParm("sysparm_view_forced", true);
gModalForm.render();
function completeCallBack(record) {
gsftSubmit(null, g_form.getFormElement(), 'create_change_for_decom');
}
//});
});
}
if (typeof window == 'undefined') {
addChangeToDecommission();
}
function addChangeToDecommission() {
var changeGr = new GlideRecord('change_request');
changeGr.addQuery('parent', (current.decommission.parent != "" ? current.decommission.parent : current.getValue('decommission')));
changeGr.orderByDesc('sys_created_on');
changeGr.query();
if (changeGr.next()) {
var decomGr = new GlideRecord('x_vgll_decom_decommission');
decomGr.get(current.getValue('decommission'));
if (decomGr.isValidRecord()) {
decomGr.change_request = changeGr.getUniqueValue();
decomGr.comments = 'Change ' + changeGr.getDisplayValue() + ' skapad för avvecklingsärendet.';
current.comments = 'Change ' + changeGr.getDisplayValue() + ' skapad för avvecklingsärendet.';
decomGr.update();
current.update();
gs.setRedirect('x_vgll_decom_decommission_task.do?sys_id=' + current.getUniqueValue());
}
}
}
And here is w hat the Script includes looks like:
var DecommissionUtilsAjax = Class.create();
DecommissionUtilsAjax.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
getDecommissionInfo: function() {
var sys_id = this.getParameter('sysparm_sys_id');
var service_sys_id = this.getParameter('sysparm_service_sys_id');
var decomRecord = new GlideRecord('x_vgll_decom_decommission');
decomRecord.get(sys_id);
var obj = {};
if (decomRecord.isValidRecord()) {
var cmdbService = new GlideRecord('cmdb_ci_service');
if (service_sys_id) {
cmdbService.get(service_sys_id);
} else {
cmdbService.get(decomRecord.getValue('service_to_decommission'));
}
if (decomRecord.change_request) {
obj.change_request = decomRecord.getDisplayValue('change_request');
}
if (cmdbService.isValidRecord()) {
if (cmdbService.sys_class_name == 'service_offering') {
obj.service_offering = cmdbService.getUniqueValue();
obj.managed_by = cmdbService.getValue('managed_by');
var service = cmdbService.parent.getRefRecord();
if (service.isValidRecord()) {
obj.service = service.getUniqueValue();
}
}
if (cmdbService.sys_class_name == 'cmdb_ci_service') {
obj.managed_by = cmdbService.getValue('managed_by');
obj.service = cmdbService.getUniqueValue();
}
}
return JSON.stringify(obj);
}
},
getServiceInfo: function() {
var service_sys_id = this.getParameter('sysparm_service_sys_id');
var cmdbService = new GlideRecord('cmdb_ci_service');
cmdbService.get(service_sys_id);
var obj = {};
if (cmdbService.isValidRecord()) {
if (cmdbService.sys_class_name == 'service_offering') {
obj.service_offering = cmdbService.getUniqueValue();
obj.managed_by = cmdbService.getValue('managed_by');
var service = cmdbService.parent.getRefRecord();
if (service.isValidRecord()) {
obj.service = service.getUniqueValue();
}
}
if (cmdbService.sys_class_name == 'cmdb_ci_service') {
obj.managed_by = cmdbService.getValue('managed_by');
obj.service = cmdbService.getUniqueValue();
}
}
return JSON.stringify(obj);
},
getSystemInfo: function() {
var system_sys_id = this.getParameter('sysparm_system_sys_id');
var cmdbSystem = new GlideRecord('cmdb_ci_business_app');
cmdbSystem.get(system_sys_id);
var obj = {};
if (cmdbSystem.isValidRecord()) {
obj.managed_by = cmdbSystem.getValue('it_application_owner');
}
return JSON.stringify(obj);
},
decomHasActiveRitms: function() {
var sys_id = this.getParameter('sysparm_sys_id');
var decomTaskGr = new GlideRecord('x_vgll_decom_decommission_task');
decomTaskGr.addQuery('decommission', sys_id);
decomTaskGr.query();
var obj = {
value: false
};
while (decomTaskGr.next()) {
var taskRitms = new GlideRecord('sc_req_item');
taskRitms.addEncodedQuery('parent=' + decomTaskGr.getUniqueValue() + '^active=true');
taskRitms.query();
if (taskRitms.next()) {
obj.value = true;
}
}
return JSON.stringify(obj);
},
type: 'DecommissionUtilsAjax'
});
Is it possible to use a Business Rule and a Script Include to create something that listens for when an order through service portal form, in a new tab, in front-end, has been placed? And then that it logs this in the activity from which the link was clicked on?
Thank you in advance for your help!