Scripting with onCellEdit Client Script

Su522
Kilo Sage

I have a working onChange Client Script but I need the same functionality to work as an onCellEdit Client Script.

Can someone please help me?

 

Here is the code that is working for the onChange Client Script and Script Include-

onChange Client Script:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    var gFormAlreadySubmitted = false;

// Callback to the Script Include
    var ga = new GlideAjax('OrderLineItems');
    ga.addParam('sysparm_name''getOrderLineUpdated');
    ga.addParam('sysparm_order', g_form.getValue('order_line_item.order'));
    ga.getXML(callbackdata);

    function callbackdata(response) {
        var answer = response.responseXML.documentElement.getAttribute("answer");

        // Check if the new state is "Sent to billing" and if Order Line Items have been updated
        if ((newValue === '4') && (answer == 'true')) {

            // Opens Pop Up Window

 

Script Include (client-callable):

var OrderLineItems = Class.create();
OrderLineItems.prototype = Object.extendsObject(global.AbstractAjaxProcessor, {
    getOrderLineUpdated: function() {
        var grI = new GlideRecord("sn_ind_tmt_orm_order_line_item");
//        gs.info("Order: " + this.getParameter("sysparm_order"));
        grI.addQuery("order"this.getParameter("sysparm_order"));
        grI.query();
        while (grI.next()) {
            if (grI.getValue("u_order_line_updated") == "1"// If it is true
                return true;
        }
        return false;
    },
    type: 'OrderLineItems'
});
 
This code does not work for an onCellEdit Client Script.
Help is GREATLY appreciated!!
Thank you
1 ACCEPTED SOLUTION

Murthy Ch
Giga Sage

Hey @Su522

You need to try something like below:

function onCellEdit(sysIDs, table, oldValues, newValue, callback) {
    var saveAndClose = true;

    if (oldValues == "3" && newValue == "6") {
        var ajax = new GlideAjax("global.OrderLineItemsGlobal");
        ajax.addParam("sysparm_name", "getOrderLineItemsUpdated");
        ajax.addParam("sysparm_sysid", sysIDs); 
        ajax.getXMLWait();
        if (ajax.getAnswer() == "true") {
            if (confirm("Your message")) {
                saveAndClose = true;
            } else {
                saveAndClose = false;
            }
        }
    }
    callback(saveAndClose);
}
var OrderLineItemsGlobal = Class.create();
OrderLineItemsGlobal.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getOrderLineItemsUpdated: function() {
        var grProductOrder = new GlideRecord("sn_ind_tmt_orm_product_order");
        grProductOrder.get(this.getParameter("sysparm_sysid"));
        var grOrderLineItems = new GlideRecord("sn_ind_tmt_orm_order_line_item");
        grOrderLineItems.addQuery("order", grProductOrder.order_line_item.order);
        grOrderLineItems.query();
        while (grOrderLineItems.next()) {
            if (grOrderLineItems.u_order_line_updated == "1") {
                return "true";
            }
        }
        return "false";
    },
    type: 'OrderLineItemsGlobal'
});

NOTE: We have to write the code in global inorder to work the getXMLWait()

More info here

 

Thanks,
Murthy

View solution in original post

4 REPLIES 4

Jon23
Mega Sage

@Su522 - see my response on your other posted question > Scripting Help- Querying the Database and returnin... - ServiceNow Community

Community Alums
Not applicable

It won't work as OnCellEdit is for lists. This will give you idea how to use it:

 

 

function onCellEdit(sysIDs, table, oldValues, newValue, callback) {
  var saveAndClose = true;
 //Type appropriate comment here, and begin script below
 
 callback(saveAndClose); 
}

 

 

Murthy Ch
Giga Sage

Hey @Su522

You need to try something like below:

function onCellEdit(sysIDs, table, oldValues, newValue, callback) {
    var saveAndClose = true;

    if (oldValues == "3" && newValue == "6") {
        var ajax = new GlideAjax("global.OrderLineItemsGlobal");
        ajax.addParam("sysparm_name", "getOrderLineItemsUpdated");
        ajax.addParam("sysparm_sysid", sysIDs); 
        ajax.getXMLWait();
        if (ajax.getAnswer() == "true") {
            if (confirm("Your message")) {
                saveAndClose = true;
            } else {
                saveAndClose = false;
            }
        }
    }
    callback(saveAndClose);
}
var OrderLineItemsGlobal = Class.create();
OrderLineItemsGlobal.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getOrderLineItemsUpdated: function() {
        var grProductOrder = new GlideRecord("sn_ind_tmt_orm_product_order");
        grProductOrder.get(this.getParameter("sysparm_sysid"));
        var grOrderLineItems = new GlideRecord("sn_ind_tmt_orm_order_line_item");
        grOrderLineItems.addQuery("order", grProductOrder.order_line_item.order);
        grOrderLineItems.query();
        while (grOrderLineItems.next()) {
            if (grOrderLineItems.u_order_line_updated == "1") {
                return "true";
            }
        }
        return "false";
    },
    type: 'OrderLineItemsGlobal'
});

NOTE: We have to write the code in global inorder to work the getXMLWait()

More info here

 

Thanks,
Murthy

@Murthy Ch 

This worked!! Thank you so much!