create event in SUITELET with ClientScript SS2.0

I need to create an Event for the button I have in my sublist called 'Enviar Selección'......

This is my SUITELET************************

/**
 * @NApiVersion 2.0
 * @NScriptType suitelet
 * @NModuleScope SameAccount
 */
define(['N/ui/serverWidget', 'N/search', 'N/log', 'N/ui/dialog'],
    function(serverWidget, search, log, dialog) {
        //funcion de Contenido
        function onRequest(context) {
            // llamo la  busquEda guardada
            var busqueda = search.load({ id: 'customsearch_axa_lista_prev4' });
            // creao formulario
            var formulario = serverWidget.createForm({ title: 'Formulario de Busqueda' });
            // creamos dos grupos de busqueda // grupo 1
            var GrupoBusqueda = formulario.addFieldGroup({ id: 'GrupoBusqueda', label: 'Grupo de Busqueda' });
            GrupoBusqueda.isSingleColumn = true;
            // creamos los filtro de busqueda form
            formulario.addField({ id: 'codigobarra', type: serverWidget.FieldType.TEXT, label: 'Codigo de Barras', container: 'GrupoBusqueda' });
            formulario.addField({ id: 'nombrelinea', type: serverWidget.FieldType.TEXT, label: 'Linea de Producto', container: 'GrupoBusqueda' });
            formulario.addField({ id: 'nombrelista', type: serverWidget.FieldType.TEXT, label: 'Lista de asociados', container: 'GrupoBusqueda' });
            formulario.addField({ id: 'campoitem', type: serverWidget.FieldType.TEXT, label: 'Seleccionar Producto', source: 'item', container: 'GrupoBusqueda' });
            // grupo 2
            var GrupoBusquedaDos = formulario.addFieldGroup({ id: 'GrupoBusquedaDos', label: ' AXA 2019' });
            GrupoBusquedaDos.isSingleColumn = true;
            formulario.addField({ id: 'preciobase1', type: serverWidget.FieldType.CURRENCY, label: 'Precio desde', container: 'GrupoBusquedaDos' });
            formulario.addField({ id: 'preciobase2', type: serverWidget.FieldType.CURRENCY, label: 'Precio hasta', container: 'GrupoBusquedaDos' });
            formulario.addField({ id: 'ivaporcent1', type: serverWidget.FieldType.PERCENT, label: 'Promocion desde', container: 'GrupoBusquedaDos' });
            formulario.addField({ id: 'ivaporcent2', type: serverWidget.FieldType.PERCENT, label: 'Promocion hasta', container: 'GrupoBusquedaDos' });
            // creamos un boton de envio y uno de limpieza de campos

            formulario.addSubmitButton({ id: 'markall', label: 'Enviar Filtro' });
            formulario.addResetButton({ label: 'Limpiar Campos' });
            //enviamos un render a una pagina para visualizar el formulario
            context.response.writePage(formulario);
            // creamos una varible que guarde el parametro del campo del formulario
            var codigobarra = context.request.parameters.codigobarra;
            var nombrelinea = context.request.parameters.nombrelinea;
            var nombrelista = context.request.parameters.nombrelista;
            var campoitem = context.request.parameters.campoitem;
            var preciobase1 = context.request.parameters.preciobase1;
            var preciobase2 = context.request.parameters.preciobase2;
            var ivaporcent1 = context.request.parameters.ivaporcent1;
            var ivaporcent2 = context.request.parameters.ivaporcent2;
            // si el campo esta lleno entonces hacer lo suiguiente
            if (codigobarra) {
                var filterOne = search.createFilter({ name: 'upccode', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [codigobarra] });
                var filtrosArray = busqueda.filters;
                filtrosArray.push(filterOne);
                datos(filtrosArray)
            } else if (nombrelinea) {
                var filterOne = search.createFilter({ name: 'vendorname', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [nombrelinea] });
                var filtrosArray = busqueda.filters;
                filtrosArray.push(filterOne);
                datos(filtrosArray);
            } else if (nombrelista) {
                var filterOne = search.createFilter({ name: 'name', join: 'CUSTRECORD_AXA_PRU_BOD_CLI', operator: search.Operator.STARTSWITH, values: [nombrelista] });
                var filtrosArray = busqueda.filters;
                filtrosArray.push(filterOne);
                datos(filtrosArray);
            } else if (campoitem) {
                var filterOne = search.createFilter({ name: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, filter: [campoitem] });
                var filtrosArray = busqueda.filters;
                filtrosArray.push(filterOne);
                datos(filtrosArray);
            } else if (preciobase1, preciobase2) {
                var filterOne = search.createFilter({ name: 'formulanumeric', formula: 'ROUND(({custrecord_nso_costo_maestro}+({custrecord_nso_costo_maestro}*{custrecord_axa_pru_bod_cli.custrecord_nso_margen_2})),0)', operator: search.Operator.GREATERTHAN, values: [preciobase1] });
                var filterTwo = search.createFilter({ name: 'formulanumeric', formula: 'ROUND(({custrecord_nso_costo_maestro}+({custrecord_nso_costo_maestro}*{custrecord_axa_pru_bod_cli.custrecord_nso_margen_2})),0)', operator: search.Operator.NOTGREATERTHAN, values: [preciobase2] });
                var filtrosArray = busqueda.filters;
                filtrosArray.push(filterOne, filterTwo);
                datos(filtrosArray);
            }
            //se validan los datos enviados del formulario y se agragan a la funcion del array
            function datos(filtrosArray) {
                //cargamos la cantidad de registros que queremos ver
                var FiltrosV4 = busqueda.run().getRange({ start: 0, end: 50 });
                //creamos un formulario para insertar la sublista
                var form = serverWidget.createForm({
                    title: 'Datos Encontrados'
                });
                // creamos un link para añadirlo dentro de "More" y volver a hacer otro filtro
                form.addPageLink({ type: serverWidget.FormPageLinkType.CROSSLINK, title: 'Nuevo Filtro', url: '/app/site/hosting/scriptlet.nl?script=1350&deploy=1' });
                // creamos la caja que necesitamos para empezar a llenar los datos de una sublista
                var sublist = form.addSublist({
                    id: 'sublist',
                    type: serverWidget.SublistType.LIST,
                    label: 'Listado para Cantida de productos'
                });
                //creamos otra caja para otras sublistas
                var sublists = form.addSublist({
                    id: 'sublistas',
                    type: serverWidget.SublistType.LIST,
                    label: 'Listado Selección Multiple'
                });
                // Columnas que va a tener la sublista
                sublist.addField({ id: 'custpage_empresa', label: 'Empresa', type: serverWidget.FieldType.TEXT });
                sublist.addField({ id: 'custpage_idinterno', label: 'ID Interno', type: serverWidget.FieldType.TEXT });
                sublist.addField({ id: 'custpage_codigobarra', label: 'Codigo de Barras', type: serverWidget.FieldType.TEXT });
                sublist.addField({ id: 'custpage_producto', label: 'Producto', type: serverWidget.FieldType.TEXT });
                sublist.addField({ id: 'custpage_linea', label: 'Linea', type: serverWidget.FieldType.TEXT });
                sublist.addField({ id: 'custpage_precio', label: 'Precio Venta', type: serverWidget.FieldType.CURRENCY });
                sublist.addField({ id: 'custpage_descuento', label: 'Decuento', type: serverWidget.FieldType.PERCENT });
                sublist.addField({ id: 'custpage_predesc', label: 'Precio Descuento', type: serverWidget.FieldType.CURRENCY });
                sublist.addField({ id: 'custpage_iva', label: 'IVA', type: serverWidget.FieldType.PERCENT });
                sublist.addField({ id: 'custpage_preiva', label: 'Precio IVA', type: serverWidget.FieldType.CURRENCY });
                sublist.addField({ id: 'custpage_promo', label: 'Fecha Promocion', type: serverWidget.FieldType.DATE });
                //Asignamos los valores que vamos a llamar al ID de la sublista
                var sublist = form.getSublist({ id: 'sublist' });
                for (var i = 0; i < FiltrosV4.length; i++) { // para i = 0, i menor que la cantidad que tiene la variable, contar de uno en uno
                    var columns = FiltrosV4[i].columns; // creamos la variable para llamar lo que tiene la variable en cada posicion generado en columnas
                    //creamos un array de valores donde traemos la columna 0.1.2.3.... con su listados de array en esa columna
                    sublist.setSublistValue({ id: 'custpage_empresa', line: i, value: [FiltrosV4[i].getValue(columns[0])] });
                    sublist.setSublistValue({ id: 'custpage_idinterno', line: i, value: [FiltrosV4[i].getValue(columns[1])] });
                    sublist.setSublistValue({ id: 'custpage_codigobarra', line: i, value: [FiltrosV4[i].getValue(columns[2])] });
                    sublist.setSublistValue({ id: 'custpage_producto', line: i, value: [FiltrosV4[i].getText(columns[3])] });
                    sublist.setSublistValue({ id: 'custpage_linea', line: i, value: [FiltrosV4[i].getValue(columns[4])] });
                    sublist.setSublistValue({ id: 'custpage_precio', line: i, value: [FiltrosV4[i].getValue(columns[5])] });
                    sublist.setSublistValue({ id: 'custpage_descuento', line: i, value: [FiltrosV4[i].getValue(columns[6])] });
                    sublist.setSublistValue({ id: 'custpage_predesc', line: i, value: [FiltrosV4[i].getValue(columns[7])] });
                    sublist.setSublistValue({ id: 'custpage_iva', line: i, value: [FiltrosV4[i].getValue(columns[8])] });
                    sublist.setSublistValue({ id: 'custpage_preiva', line: i, value: [FiltrosV4[i].getValue(columns[9])] });
                    sublist.setSublistValue({ id: 'custpage_promo', line: i, value: [FiltrosV4[i].getValue(columns[10])] });
                }

                // creamos una columna de tipo entero para numeros esta se añadira al final de cada registro
                var check = sublist.addField({
                    id: 'custpage_cantidad',
                    label: 'Cantidad Producto',
                    type: serverWidget.FieldType.INTEGER
                });
                //El campo de sublista aparece como un campo de entrada de datos (para un campo de selección sin casilla de verificación) 
                //NORMAL,ENTRY,HIDDEN,INLINE,DISABLED,READONLY
                check.updateDisplayType({ displayType: serverWidget.FieldDisplayType.ENTRY });
                //asi podemos llamar un archivo externo tipo clientscript
                //form.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/EventScript/GHeventoScript.js';

                //creamos un boton

                var botones = sublist.addButton({
                    id: 'custpage_buttonid',
                    label: 'Enviar Selección',
                    //   functionName: 'afterSubmit' // 'runUserEvent' //'aqui va la funcion de llamada desde el script de cliente'
                    functionName: 'alertaEnvio(eventos)' //'aqui va la funcion de llamada desde el script de cliente'
                });
                botones.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';

                // convertimos todo lo contenido en form a una pagina suitelet
                context.response.writePage(form);
            }
        }
        return {
            onRequest: onRequest
        };
    });

and this is my ClientScript***********

/**
 * Module Description
 */
/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope Public
 */
define([],

    function() {
        function alertaEnvio(eventos) {
            var eventos = 34;
            alert('Datos encontrados: si desea otra busqueda puede ir a More y en la opción Filtro nuevo' + eventos);
            return;
        }
        //retorna la funcion de la alerta
        return {
            pageInit: alertaEnvio,
        };
    });

When I run my suitelet it works for me to perfection, the problem is when I call the client script.

If I leave it as follows :' botones.clientScriptModulePath " 'SuiteScripts/GHTestScript/ClientScript/GHclientScript.js'; ', I get this error:

enter image description here

and If I leave it as follows :' form.clientScriptModulePath " 'SuiteScripts/GHTestScript/ClientScript/GHclientScript.js'; ', works well but without clicking

enter image description here

Upvotes: 0

Views: 687

Answers (1)

Avi
Avi

Reputation: 2069

pageInit function from your ClientScript is called as soon as page loads so, you cannot expose alertaEnvio as your pageInit method.

What you can do is first change your client script and attach alertaEnvio in window(the global) object.

Here is what your client script should look like

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope Public
 */
define([],
  function () {
    function alertaEnvio(eventos) {
      var eventos = 34;
      alert('Datos encontrados: si desea otra busqueda puede ir a More y en la opción Filtro nuevo' + eventos);
      return;
    }

    function pageInit(context) {
      window.alertaEnvio = alertaEnvio;
    }

    //retorna la funcion de la alerta
    return {
      pageInit: pageInit,
    };
  }
);

and then make the following changes in your suitelet

  1. In method datos udpate button definition as follows

    var botones = sublist.addButton({
      id: 'custpage_buttonid',
      label: 'Enviar Selección',
      functionName: 'alertaEnvio' //'aqui va la funcion de llamada desde el script de cliente'
    });
    
  2. remove the following line from datos method

    botones.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';

  3. Add the following line in method onRequest

    formulario.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';

Upvotes: 1

Related Questions