0

我有这个套件,它有一个表单,创建一个搜索过滤器并填充一个子列表,这个子列表有一个文本字段并且必须用一个数字填充,以便为该行分配值。

        //, 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
                };
            });

我有这个客户端脚本,这应该选中子列表的数量字段的框,输入值时必须获取该行的所有值,当您按下套件的按钮时,您必须将该值发送到库存身份证。我不知道如何做到这一点,有人可以帮助我,感谢他们的合作。

/**
 *@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
    }
});

这个字段必须取数量的值,然后它取数字值,因为它索引行的id实习生,或者两行或三行,所以依次,这就是图像。

在此处输入图像描述

4

1 回答 1

2

如果您只是想获得custpage_registro_interno_id可以使用的字段:

ObjetoRecibido.getSublistValue({
    sublistId:context.sublistId,
    fieldId:'custpage_registro_interno_id',
    line:context.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

我知道硬编码的子列表字段 ID 并不理想,但我还没有找到解决方法。

希望这可以帮助。

于 2019-10-25T05:20:43.890 回答