Clientscript how to use it to get value from a sublist

1.6k Views Asked by At

I have this suitelet, which has a form, makes a search filter and fills a sublist, this sublist has a text field and must be filled with a number, to assign to that row the value.

        //, Also specify which field does not work when I apply a filter,
        // for example "campoitem". some filters work well for example "codigobarra"
        /**
         * @NApiVersion 2.0
         * @NScriptType suitelet
         * @NModuleScope public
         */
        define(['N/ui/serverWidget', 'N/search', 'N/log'],
            function(serverWidget, search, log) {
                //1 - FUNCION DE CONTENIDO
                function onRequest(context) {
                    // 2 - CARGAMOS LA BUSQUEDA GUARDAD ESTA BUSQUEDA GUARDAD FUE CREADA EN SUITELE
                    // Y CONTIENE UNO FILTRO EN CRITERIA YA DEFINIDOS QUE AFECTAN A ESTE SCRIPT

                    var busqueda = search.load({ id: 'customsearch_axa_lista_v5_ok' });
                    try {
                        //CREAMOS UN FORMULARIO
                        var formulario = serverWidget.createForm({ title: 'Formulario de Busqueda' });

                        // CREAMOS UN GRUPO DE BUSQUEDA INDIVIDUAL TEMPORAL
                        var GrupoBusqueda = formulario.addFieldGroup({ id: 'GrupoBusqueda', label: 'Grupo de Busqueda' });
                        GrupoBusqueda.isSingleColumn = true;

                        // CREAMOS LOS CAMPO QUE VAN A ENVIAR LOS VALORES
                        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' });
                        formulario.addField({ id: 'formafarma', type: serverWidget.FieldType.TEXT, label: 'Seleccionar Tipo de producto ("Jarabe/tabletas etc..")', source: 'item', container: 'GrupoBusqueda' });

                        // CREAMOS UN GRUPO DE BUSQUEDA ENTRE CANTIDAD O PRECIOS COMO BETWEEN
                        var GrupoBusquedaDos = formulario.addFieldGroup({ id: 'GrupoBusquedaDos', label: ' AXA 2019' });
                        GrupoBusquedaDos.isSingleColumn = true;

                        // CREAMOS LOS CAMPOS QUE VAN A ENVIAR LOS VALORES
                        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 LOS BOTONES DE ENVIO Y LIMPIAR
                        formulario.addSubmitButton({ id: 'markall', label: 'Enviar Filtro' });
                        formulario.addResetButton({ label: 'Limpiar Campos' });

                        //ENVIAMOS LOS DATOS A UNA PAGINA NUEVA DONDE PUEDO VISUALIZAR MIS CAMPOS
                        context.response.writePage(formulario);

                        //DEPUES DE CREADA LA PAGINA TOMO LOS VALORES AL EDITAR CADA CAMPO
                        // EJECUCION DE PRUEBA SOLO POR CAMPO INDIVIDUAL TEMPORALMENTE
                        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 formafarma = context.request.parameters.formafarma;
                        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 CODIGO DE BARRA CONTIENE UN VALOR ENVIAR EL FILTRO SINO PASA AL
                        // OTRO VALOR VALOR Y ASI SUCESIVAMENTE

                        // ESTE CODIGO FUNCIONA NOMBRELINEA 
                        if (codigobarra) {
                            // EMPAQUETAMOS LA BUSQUEDA
                            var filtrosArray = busqueda.filters;
                            //CREAMOS EL FILTRO DE BUSQUEDA DEACUERDO AL VALOR OSEA CODIGO DE BARRA
                            var filterOne = search.createFilter({ name: 'upccode', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [codigobarra] });
                            // ENVIAMOS ESE FILTRO A NUESTRO ARRAY
                            filtrosArray.push(filterOne);
                            datos(filtrosArray) // INICIAMOS LA FUNCION DATOS CON EL FILTRO CREADO
                        } // ESTE CODIGO FUNCIONA NOMBRELINEA 
                        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);
                        } // ESTE CODIGO FUNCIONA NOMBRELISTA
                        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);
                        } // ESTE CODIGO ACONTINUACION TIENE "ERROR CAMPOITEM"
                        else if (campoitem) {
                            var filterOne = search.createFilter({ name: 'displayname', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [campoitem] });
                            var filtrosArray = busqueda.filters;
                            filtrosArray.push(filterOne);
                            datos(filtrosArray);
                        } // ESTE CODIGO ACONTINUACION TIENE "ERROR FORMAFARMA"
                        else if (formafarma) {
                            var filterOne = search.createFilter({ name: 'custitem_nso_forma_farmaceutica', join: 'custrecord_nso_item', operator: search.Operator.STARTSWITH, values: [formafarma] });
                            var filtrosArray = busqueda.filters;
                            filtrosArray.push(filterOne);
                            datos(filtrosArray);
                        } // ESTE CODIGO FUNCIONA PRECIOBASE 1 Y 2
                        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);
                        } // ESTE CODIGO ACONTINUACION TIENE "ERROR PORCENT1 Y PORCENT2"
                        else if (ivaporcent1, ivaporcent2) {
                            var filterOne = search.createFilter({ name: 'custitem_axa_edu_iva', join: 'CUSTRECORD_NSO_ITEM', operator: search.Operator.GREATERTHAN, values: [ivaporcent1] });
                            var filterTwo = search.createFilter({ name: 'custitem_axa_edu_iva', join: 'CUSTRECORD_NSO_ITEM', operator: search.Operator.NOTGREATERTHAN, values: [ivaporcent2] });
                            var filtrosArray = busqueda.filters;
                            filtrosArray.push(filterOne, filterTwo);
                            datos(filtrosArray);
                        }
                        return { formulario: formulario };

                    } catch (e) {
                        log.error('Error al crear el formuraio.', e);
                    }
                    // TERMINA LOS FILTROS DE BUSQUEDA

                    //FUNCION DATOS DONDE MOSTRAREMOS UNA SUBLISTA CON LOS DATOS ENCONTRADOS EN LOS FILTROS
                    function datos(filtrosArray) {

                        // CORREMOS LA BUSQUEDA PARA INGRESAR LA INFORMACION EN UNS SUBLISTA
                        var FiltrosV4 = busqueda.run().getRange({ start: 0, end: 70 });

                        // CFREAMOS UN NUEVO FORMULARIO QUE CONTENDRA LOS DATOS
                        var form = serverWidget.createForm({
                            title: 'Datos Filtrados: ' + codigobarra + '  ' + nombrelinea + ' ' + nombrelista + '  ' + campoitem + '  ' + formafarma
                        });

                        // ACCESO DIRECTO A UN NUEVO FILTRO - LINK
                        form.addPageLink({ type: serverWidget.FormPageLinkType.CROSSLINK, title: 'Nuevo Filtro', url: '/app/site/hosting/scriptlet.nl?script=1358&deploy=1' });

                        //LLAMO A UN ARCHIVO EXTERNO PARA PODER UTILIZAR LOS DATOS CON UN BOTON
                        form.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';

                        // CONTENEDOR DE LOS DATOS
                        var sublist = form.addSublist({
                            id: 'sublist',
                            type: serverWidget.SublistType.LIST, //INLINEEDITOR, LIST','EDITOR', or 'STATICLIST'
                            label: 'Listado de productos'
                        });

                        // creamos el ID interno de verificacion
                        var idField = sublist.addField({
                            id: 'custpage_registro_interno_id',
                            label: 'Internal ID',
                            type: serverWidget.FieldType.TEXT
                        });
                        // creamos el campo de ingreso cantidad
                        var cantidad = sublist.addField({
                            id: 'custpage_cantidad',
                            label: 'Cantidad Producto',
                            type: serverWidget.FieldType.INTEGER
                        });
                        cantidad.updateDisplayType({ displayType: serverWidget.FieldDisplayType.ENTRY });
                        // NOMBRE DE CADA COLUMNA DE LA SUBLISTA
                        sublist.addField({ id: 'custpage_empresa', label: 'Empresa', 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 });
                        sublist.addField({ id: 'custpage_generico', label: 'Generico', type: serverWidget.FieldType.TEXT });
                        sublist.addField({ id: 'custpage_farma', label: 'FormFarma', type: serverWidget.FieldType.TEXT });
                        sublist.addField({ id: 'custpage_saldo', label: 'Saldo', type: serverWidget.FieldType.INTEGER });
                        //sublist.addMarkAllButtons();
                        // CREAMOS UN CAMPO PARA INSERTAR INFORMACION DE CANTIDAD 
                        // LA IDEA ESQUE ESTE CAMPO AL SER EDITADO CREE UN FIELDCHANGE QUIEN TOMARA LOS DATOS
                        // OSEA LA CANTIDAD Y TOMARA COMO REFERENCIA EL ID DE LA FILA DONDE SE ESCRIBIO.


                        //SECCIONAMOS LA BUSQUEDA CON SUS COLUMNAS
                        var sublist = form.getSublist({ id: 'sublist' });
                        for (var i = 0; i < FiltrosV4.length; i++) {
                            var columns = FiltrosV4[i].columns; // COLUMNA EN SU POSICION
                            sublist.setSublistValue({ id: 'custpage_empresa', line: i, value: [FiltrosV4[i].getValue(columns[0])] });
                            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])] });
                            sublist.setSublistValue({ id: 'custpage_generico', line: i, value: [FiltrosV4[i].getValue(columns[12])] });
                            sublist.setSublistValue({ id: 'custpage_farma', line: i, value: [FiltrosV4[i].getText(columns[13])] });
                            sublist.setSublistValue({ id: 'custpage_registro_interno_id', line: i, value: FiltrosV4[i].id });
                        }


                        // CREAMOS UN BOTON DONDE ESTE CAPTURA EL CLIENTSCRIPT EXTERNO
                        var botones = sublist.addButton({
                            id: 'custpage_buttonid',
                            label: 'Enviar Selección',
                            functionName: 'btnenvio' //LLAMO LA FUNCION DEL CLIENTSCRIP
                        });
                        // MUESTRO MI SUBLISTA EN UNA NUEVA PAGINA
                        context.response.writePage(form);
                    }
                    if (context.request.method === 'GET') {
                        datos();
                    }
                }
                return {
                    onRequest: onRequest
                };
            });

I have this client script, this should check the box of the quantity field of the sublist, you must take all the values of the row when typing a value, when you press the button of the suitelet you must send that value to an inventory with the id. I can't figure out how to do this, someone can help me, thanks for their collaboration.

/**
 *@NApiVersion 2.0
 *@NScriptType ClientScript
 */
define(["N/log", "N/ui/dialog", "N/record", "N/currentRecord"], function(log, dialog, record, currentRecord) {
    //FUNCION PAGEINIT
    var pageInit = function(context) {
            console.log('entry 1');
        } // contructor en blanco
    var btnenvio = function(context) {
            // MENSAJE DE CONFIRMACION DE CLICK EN EL BOTON
            console.log('entry 2');
        }
        //VALIDACION DE LOS CAMPOS AUN NO DEFINIDO
        //  function validateField(context) {
        //     console.log('entry 3');
        // }
        // CAMBIO DE ESTADO CAMPO AUN NO DEFINIDO
    function fieldChanged(context) {
        //ingresa para hacer un debug y seguimiento = debugger;
        var ObjetoRecibido = context.currentRecord;

        if (context.fieldId == "custpage_cantidad") {
            console.log('entry 3');
           
            var field = ObjetoRecibido.getField("custpage_registro_interno_id");
            // ???????

            console.log('Ver datos: ' + JSON.stringify(field));
        }

    }

    function validateField(context) {
        if (context === 'custpage_cantidad') {
            var isValid = validateTaxNum();
            //una función devuelve booleano. Si devuelve false, proporciona un mensaje de alerta.// 
            return isValid;
        }
        return true;
    }

    return {
        pageInit: pageInit,
        btnenvio: btnenvio,
        fieldChanged: fieldChanged,
        validateField: validateField
    }
});

this field must take the value of the quantity, later it takes the digitate value and as it indexes the id interns of the line, or two lines or three, so successively, This is the image.

enter image description here

1

There are 1 best solutions below

0
On

If you are just trying to get the custpage_registro_interno_id field you could use:

ObjetoRecibido.getSublistValue({
    sublistId:context.sublistId,
    fieldId:'custpage_registro_interno_id',
    line:context.line,
});

If you need all the values from a line:

var columnNames =[sublistFieldIdX,sublistFieldIdY];//Store your sublist field ID's from your Suitelet
var lineValues = [];
columnNames.foreach(function(columnName){
    var fieldValue = ObjetoRecibido.getSublistValue({
            sublistId:context.sublistId,
            fieldId:columnName,
            line:context.line,
    });
    lineValues.push(fieldValue);
});
//Do something with your line value

I know the hard coded sublist field ID's is not ideal but I have yet to find a way around this.

Hope this helps.