Log orders in activity through a field's link, leading to form in front-end service portal

ronro2
Tera Contributor

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!

0 REPLIES 0