Use of window.opener in suitelet page.

The values from the child suitelet can be set to the parent suitelet using window.opener.

let CS_SCRIPT_PATH = ‘/SuiteScripts/Jobin and Jismi/Credit Memo Vendor Portal MYNE-503/jj_cs_bill_credit_vendor_portal_myne503.js’;

const onRequest = (scriptContext) => {

     try {

if (scriptContext.request.method == ‘GET’) {

         let itemName, itemQuantity, itemLocation, itemId;

         if (scriptContext.request.parameters.item) {

           itemName = scriptContext.request.parameters.item;

         }

         if (scriptContext.request.parameters.quantity) {

           itemQuantity = scriptContext.request.parameters.quantity;

         }

         if (scriptContext.request.parameters.location) {

           itemLocation = scriptContext.request.parameters.location;

         }

         if (scriptContext.request.parameters.itemValue) {

           itemId = scriptContext.request.parameters.itemValue;

         }

         let itemLotNumberSearchDetails = invtDetailSearch(itemId, itemLocation);

         // Call the function to get the array of lotNumber and availableQty

         let searchResultsArray = processSearchResults(itemId, itemLocation);

         let popupForm = serverWidget.createForm({

           title: ‘INVENTORY DETAIL’,

           hideNavBar: true

         });

         popupForm.clientScriptFileId = 15579;

         popupForm.addFieldGroup({

           id: ‘configureinventorydetail’,

           label: ‘Configure Inventory Detail’

         });

         let nameItem = popupForm.addField({

           id: ‘custpage_item_name’,

           type: serverWidget.FieldType.TEXT,

           label: ‘ITEM’,

           container: ‘configureinventorydetail’

         });

         nameItem.defaultValue = itemName;

         nameItem.updateDisplayType({

           displayType: serverWidget.FieldDisplayType.DISABLED

         });

         let quantityItem = popupForm.addField({

           id: ‘custpage_item_quantity’,

           type: serverWidget.FieldType.INTEGER,

           label: ‘QUANTITY’,

           container: ‘configureinventorydetail’

         });

         quantityItem.defaultValue = itemQuantity;

         quantityItem.updateDisplayType({

           displayType: serverWidget.FieldDisplayType.DISABLED

         });

         let locationItem = popupForm.addField({

           id: ‘custpage_item_location’,

           type: serverWidget.FieldType.INTEGER,

           label: ‘LOCATION’,

           container: ‘configureinventorydetail’

         });

         locationItem.updateDisplayType({

           displayType: serverWidget.FieldDisplayType.HIDDEN

         });

         locationItem.defaultValue = itemLocation;

         let itemValue = popupForm.addField({

           id: ‘custpage_item_value’,

           type: serverWidget.FieldType.TEXT,

           label: ‘ITEM ID’,

           container: ‘configureinventorydetail’

         });

         itemValue.updateDisplayType({

           displayType: serverWidget.FieldDisplayType.HIDDEN

         });

         itemValue.defaultValue = itemId;

         let availabileLotNUmberArray = JSON.stringify(searchResultsArray); // Convert the array to JSON string

         //Hidden field to store lot number and availabile quantity

         let hiddenAvailabileQuantity = popupForm.addField({

           id: ‘custpage_hidden_availabile_quantity’,

           type: serverWidget.FieldType.LONGTEXT,

           label: ‘HIDDEN AVAILABILE QUANTITY’,

           container: ‘configureinventorydetail’

         })

         hiddenAvailabileQuantity.updateDisplayType({

           displayType: serverWidget.FieldDisplayType.HIDDEN

         });

         hiddenAvailabileQuantity.defaultValue = availabileLotNUmberArray

         popupForm.addFieldGroup({

           id: ‘inventorydetail’,

           label: ‘Inventory Detail’

         });

         let inventoryDetailSublist = popupForm.addSublist({

           id: ‘inventory_detail_sublist’,

           type: serverWidget.SublistType.INLINEEDITOR,

           label: ‘Inventory Detail’

         });

         let serialLotNumber = inventoryDetailSublist.addField({

           id: ‘custpage_serial_lotnumber’,

           type: serverWidget.FieldType.SELECT,

           label: ‘SERIAL/LOT NUMBER’,

         });

         serialLotNumber.isMandatory = true;

         serialLotNumber.defaultValue =

           serialLotNumber.addSelectOption({

             value: ”,

             text: ”

           });

         //Loop through the itemLotNumberSearchDetails and add each lot number as an option to the select field

         itemLotNumberSearchDetails.forEach(function (item) {

           serialLotNumber.addSelectOption({

             value: item.lotNumber.internalId,

             text: item.lotNumber.text

           });

         });

         let lotAvailable = inventoryDetailSublist.addField({

           id: ‘custpage_lot_available’,

           type: serverWidget.FieldType.INTEGER,

           label: ‘LOT QTY AVAILABLE’

         });

         lotAvailable.updateDisplayType({

           displayType: serverWidget.FieldDisplayType.DISABLED

         });

         let quantity = inventoryDetailSublist.addField({

           id: ‘custpage_quantity’,

           type: serverWidget.FieldType.INTEGER,

           label: ‘QUANTITY’,

         });

         quantity.isMandatory = true;

         popupForm.addButton({

           id: ‘custpage_close_button’,

           label: ‘CLOSE’,

           functionName: ‘onCloseButtonClick’

         });

         let okButton = popupForm.addSubmitButton({

           label: ‘OK’

           //function: ‘saveRecord()’

         });

         scriptContext.response.writePage(popupForm);

       }

       else {

//post

let itemName, itemQuantity, itemId, locationId;

         let request = scriptContext.request;

         if (request.parameters.custpage_item_name) {

           itemName = request.parameters.custpage_item_name;

           log.debug(“item name*”, itemName)

         }

         if (request.parameters.custpage_item_quantity) {

           itemQuantity = request.parameters.custpage_item_quantity;

           log.debug(“itemQuantity*”, itemQuantity)

         }

         

         if (request.parameters.custpage_item_value) {

          itemId = scriptContext.request.parameters.custpage_item_value;

          log.debug(“itemid*”, itemId)

          

        }

        

        if (request.parameters.custpage_item_location) {

          locationId = scriptContext.request.parameters.custpage_item_location;

          log.debug(“locationid*”, locationId)

  

        }

        

         if (itemName) {

           let sublistLineCount = request.getLineCount(‘inventory_detail_sublist’);

           let lotObj = {};

           let totalQuantity = 0;

           for (let i = 0; i < sublistLineCount; i++) {

             let lotName = request.getSublistValue({

               group: ‘inventory_detail_sublist’,

               name: ‘custpage_serial_lotnumber’,

               line: i

             });

             log.debug(“lot name”, lotName)

             let lotQuantity = request.getSublistValue({

               group: ‘inventory_detail_sublist’,

               name: ‘custpage_quantity’,

               line: i

             });

             log.debug(“lot quantity”, lotQuantity)

             lotObj[lotName] = lotQuantity;

             //alert if total quantity does not match with sublist quantity

             let quantitySublist = request.getSublistValue({

               group: ‘inventory_detail_sublist’,

               name: ‘custpage_quantity’,

               line: i

             });

             log.debug(“Quantity Sublist”, quantitySublist)

             totalQuantity += parseInt(quantitySublist || 0);

             log.debug(“totalQuantity inside”, totalQuantity)

           }

           log.debug(“totalQuantity outside”, totalQuantity)

           log.debug(“lot object”, lotObj)

           let formQuantity = parseInt(itemQuantity);

           if (formQuantity == totalQuantity) {

             if (lotObj) {

               //let documentDatas = lotObj;

               let documentDatas = {

                itemId: itemId, // Include itemId in the documentData

                locationId: locationId, //Include locationId in the document data

                lots: lotObj  // Original lotObj

              };

               log.debug(documentDatas, documentDatas)

               let documentData = JSON.stringify(documentDatas);

               log.debug(documentData, documentData)

               str = “<script>window.opener.require( [ ‘” + CS_SCRIPT_PATH + “‘ ], function ( cs ) { cs.setSlLine( ‘” + documentData + “‘ ); } ); window.opener.focus(); window.close() </script>”;

               log.debug(“str”, str)

               scriptContext.response.write(str);

             }

           }

           else {

             let alert = `<script>alert(“Selected quantity must be equal to the required quantity.”);window.history.back();</script>`

             scriptContext.response.write(alert);

           }

         }

       }

     } catch (e) {

       log.error(“Error @ onRequest”, e)

     }

}

Function setSlLine used in client scrip to set the values from the popup page to the parent page.

function setSlLine(data) {

      try {

        let docData = JSON.parse(data);

        let rec = currentRecord.get();

        if (docData) {

          let keys = Object.keys(docData.lots);

          let keysString = keys.join(‘,’);

          // Get an array of values

          let values = Object.values(docData.lots);

          // Join the values with commas

          let valuesString = values.join(‘,’);

          rec.setCurrentSublistValue({

            sublistId: “item_sublist”,

            fieldId: “custpage_required_lotnumber”,

            value: keysString,

          });

          rec.setCurrentSublistValue({

            sublistId: “item_sublist”,

            fieldId: “custpage_required_quantity”,

            value: valuesString,

          });

          rec.setCurrentSublistValue({

            sublistId: “item_sublist”,

            fieldId: “custpage_selected_item”,

            value: docData.itemId,

          });

          rec.setCurrentSublistValue({

            sublistId: “item_sublist”,

            fieldId: “custpage_selected_location”,

            value: docData.locationId,

          });

          rec.commitLine({

            sublistId: “item_sublist”,

          });

        }

      } catch (e) {

        console.error(“Error @ setSlLine”, e)

      }

    }

Leave a comment

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