The script is for store the available quantity at custom line fields when adding item into item sublist.

/**
 * @NApiVersion 2.1
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
 define(['N/search'],
 /**
  * @param{currentRecord} currentRecord
  * @param{record} record
  */
 function(search) {
     /**
      * Function to be executed after page is initialized.
      * @param {Object} scriptContext
      * @param {Record} scriptContext.currentRecord - Current form record
      * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
      * @since 2015.2
      */
     function pageInit(scriptContext) {
         console.log("In pageInit");
     }


     /**
      * Function to be executed when field is changed.
      * @param {Object} scriptContext
      * @param {Record} scriptContext.currentRecord - Current form record
      * @param {string} scriptContext.sublistId - Sublist name
      * @param {string} scriptContext.fieldId - Field name
      * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
      * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
      * @since 2015.2
      */
     function fieldChanged(scriptContext) {
         try {
             if(scriptContext.sublistId === 'item' && scriptContext.fieldId === 'item') {
                 let currentRecordObj = scriptContext.currentRecord;
                 stockAvailabilityOnOtherLocation(currentRecordObj, scriptContext.line);
                 console.log("updated successfully");
             }
         } catch (e) {
             log.error({title: "error@fieldChanged", details: e});
         }
     }
     /**
       * Validation function to be executed when sublist line is committed.
       * @param {Object} scriptContext
       * @param {Record} scriptContext.currentRecord - Current form record
       * @param {string} scriptContext.sublistId - Sublist name
       * @returns {boolean} Return true if sublist line is valid
       * @since 2015.2
     */
     function validateLine(scriptContext) {
        try {
            
            console.log("In validateLine");
            
            if (scriptContext.sublistId === 'item') {
                let currentRecordObj = scriptContext.currentRecord;
                stockAvailabilityOnOtherLocation(currentRecordObj, scriptContext.line);
                console.log("item line updated successfully");
                
            }
            return true;
        } catch (e) {
            log.error({title: "error@validateLine", details: e});
        }
    }
     /**
      * @description to find the stock available on both New Plymouth and Auckland locations and store them on corresponding custom item line fields
      * @param {*} currentRecordObj 
      * @param {*} currentLine 
      */
     function stockAvailabilityOnOtherLocation(currentRecordObj, currentLine){
         try{
             console.log("in stockAvailabilityOnOtherLocation()");
             let currentItemId = currentRecordObj.getCurrentSublistValue({
                 sublistId: 'item',
                 fieldId: 'item'
             });
             console.log("currentItemId", currentItemId);
             let inventoryitemSearchObj = search.create({
                 type: "item",
                 filters:
                 [
                    ["internalid","anyof",currentItemId], 
                    "AND", 
                    ["inventorylocation","anyof","3","1","15","13"]
                 ],
                 columns:
                 [
                    search.createColumn({
                       name: "itemid",
                       summary: "GROUP",
                       sort: search.Sort.ASC,
                       label: "Name"
                    }),
                    search.createColumn({
                       name: "locationquantityavailable",
                       summary: "SUM",
                       label: "Location Available"
                    }),
                    search.createColumn({
                       name: "formulanumeric",
                       summary: "SUM",
                       formula: "CASE WHEN {inventorylocation.id} IN ('1', '3') THEN {locationquantityavailable} ELSE null END",
                       label: "Formula (Numeric)"
                    }),
                    search.createColumn({
                       name: "formulanumeric",
                       summary: "SUM",
                       formula: "CASE WHEN {inventorylocation.id} IN ('13', '15') THEN {locationquantityavailable} ELSE null END",
                       label: "Formula (Numeric)"
                    })
                 ]
              });
              let searchResultCount = inventoryitemSearchObj.runPaged().count;
              console.log("inventoryitemSearchObj result count",searchResultCount);


              let newPlymouthAvailableQty,aucklandAvailableQty;
              if(searchResultCount >0){
                 inventoryitemSearchObj.run().each(function(result){
                     newPlymouthAvailableQty =  result.getValue(inventoryitemSearchObj.columns[2]);
                     aucklandAvailableQty =  result.getValue(inventoryitemSearchObj.columns[3]);
                     return true;
                  });
                  
              }
             console.log("newPlymouthAvailableQty",newPlymouthAvailableQty);
             console.log("aucklandAvailableQty",aucklandAvailableQty);
             currentRecordObj.setCurrentSublistValue({sublistId:'item',fieldId:'custcol_jj_qty_available_new_plymouth',value:newPlymouthAvailableQty,ignoreFieldChange:true});
             currentRecordObj.setCurrentSublistValue({sublistId:'item',fieldId:'custcol_jj_qty_available_auckland',value:aucklandAvailableQty,ignoreFieldChange:true});
   
         }
         catch (e) {
             log.error({title: "error@stockAvailabilityOnOtherLocation", details: e});
         }
     }
     return {
         pageInit:pageInit,
         fieldChanged: fieldChanged,
         validateLine: validateLine
     };
 });

Leave a comment

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