How can I track which fields have been edited in Netsuite when syncing NetSuite sales orders to Salesforce?

If you have a limited set of fields to check you can make use of the old record. Rough idea below:

    function afterSubmit(context) {
        const oldRec = context.oldRecord;
        const newRec = context.newRecord;
        const updateSpec = getBodyChanges(newRec, oldRec);
        updateSpec.lines = [];
        // similar idea for lines but you also have to make sure lines (checking lineuniqekey) have not been removed.
        getLineChanges(updateSpec, newRec, oldRec);
        if(!updateSpec.anyChanged){
            // no fields of interest were changed
            return;
        }
        // proceed with SalesForce update
    }

function getBodyChanges(newRec, oldRec){
    const updateSpec = {
        anyChanged: false,
        fields : {}
    };
    const bodyValueFields = ['tranid', 'memo', ...];
    const bodyTextFields = ['location', 'department'...];
    const cmpVals = (fld)=>{
        if(!oldRec) return true;
        return oldRec.getValue({fieldId:fld}) === newRec.getValue({fieldId:fld});
    };

    bodyValueFields.forEach(f=>{
        if(!cmpVals(f)) return;
        updateSpec.anyChanged = true;
        updateSpec.fields[f] = newRec.getValue({fieldId:f});
    });
    bodyTextFields.forEach(f=>{
        if(!cmpVals(f)) return; // don't need to compare texts to detect a change
        updateSpec.anyChanged = true;
        updateSpec.fields[f] = newRec.getText({fieldId:f});
    });
  }

Leave a comment

Your email address will not be published. Required fields are marked *