сохранен поисковый фильтр, поле элемента не обнаруживает его - PullRequest
0 голосов
/ 27 сентября 2019
  1. код создает форму фильтра «начать с».
  2. при отправке фильтра создает подсписок.
  3. При создании подсписка вы добавляете дополнительныйполе, это поле должно генерировать событие изменения состояния и захватывать значение, которое я не знаю, как сделать.4. когда фильтрация по некоторым полям работает хорошо, но при фильтрации по полю "campoitem" она не работает, и я получаю эту ошибку:

{"type": "error.SuiteScriptError","name": "SSS_INVALID_SRCH_FILTER", "message": "nlobjSearchFilter содержит недопустимые критерии поиска: custrecord_nso_item.itemname.", "stack": ["getRange (N / searchObject)", "datos (/ SuiteScripts / GHprueScript).js: 114) "," onRequest (/SuiteScripts/GHpruebaScript/GHpruebas.js:86) "]," причина ": {" тип ":" внутренняя ошибка "," код ":" SSS_INVALID_SRCH_FILTER "," details ":"NlobjSearchFilter содержит недопустимые критерии поиска: custrecord_nso_item.itemname. "," UserEvent ": null," stackTrace ": [[getRange (N / searchObject)", "datos (/SuiteScripts/GHpruebaScript/GHpruebas.js4")onRequest (/SuiteScripts/GHpruebaScript/GHpruebas.js:86) "]," notifyOff ": false}," id ":" "," notifyOff ": false," userFacing ": false}

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

                    //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', container: 'GrupoBusqueda' });
                    formulario.addField({ id: 'formafarma', type: serverWidget.FieldType.TEXT, label: 'Seleccionar Tipo de producto ("Jarabe/tabletas etc..")', 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: 'itemname', operator: search.Operator.STARTSWITH, filter: [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', operator: search.Operator.STARTSWITH, filter: [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);
                    }
                    // 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'
                        });

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

                        // 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.
                        var cantidad = sublist.addField({ id: 'custpage_cantidad', label: 'Cantidad Producto', type: serverWidget.FieldType.INTEGER });
                        cantidad.updateDisplayType({ displayType: serverWidget.FieldDisplayType.ENTRY });

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

                        // 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);
                    }
                }
                return {
                    onRequest: onRequest
                };
            });
Este es el ClientScript, корректирующая дебера, функционирующая в полном объеме, полностью независимая, референсная оценка, бесплатная версия для печати. ​​

/**
 *@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('Ingreso tambien PageInit') } // contructor en blanco

    //FUNCION DEL BOTON DEL SUITELET DE FILTROS
    // AQUI ES DONDE DEBEMOS CAPTURAR EL VALOR DEL CAMPO "CANTIDAD"
    //ESE VALOR DEBE TOMAR DE REFERECNIA EL ID DE ESA FILA DONDE ESTA ESCRIBIENDO
    // PARA FINAL MENTE INTRODUCIRLA EN UN PEDIDO
    var btnenvio = function(context) {

            // MENSAJE DE CONFIRMACION DE CLICK EN EL BOTON
            var reg = 'Verificando la carga de el JSON';
            dialog.alert({
                title: "Resultado de Recogidos ",
                message: [reg]
            });
            // CARGO LA ORDEN DONDE QUIERO HACER UNA INSERCION "ESTE CARGO ES OBLIGATORIO EN ESTA PRUEBA"
            // LA IDEA ES QUE AL SELECCIONAR MI CAJA DE CANTIDAD SE ACTIVE Y SELECCION POR DEFECTO UN EVENTO CON SI ID
            var records = record.load({
                type: 'purchaseorder',
                id: 2980, // variable de seleccion estado cuando cambia el campo(vacio a lleno)
                isDynamic: true
            });
            //ESTABLECEMOS LOS VALORES POR CAMPO
            records.setValue({
                fieldId: "custpage_producto",
                value: 760
            });
            records.setValue({
                fieldId: "quantity", //custpage_cantidad nombre del la variable del campos 
                value: 2
            });
            //Inserta una línea de sublista.
            //Al insertar una línea con este método, 
            //se mueven todas las líneas correctas y se aumenta el recuento total de líneas. 
            //Esencialmente, las líneas siguientes se confirman en una nueva 
            //línea de sublista con un nuevo número de línea.
            records.insertLine({
                sublistId: 'item',
                line: 1
            });
            //registro en modo estándar,
            //debe enviar y cargar el registro para obtener valores de campo de origen,
            records.save({
                enableSourcing: true,
                ignoreMandatoryFields: false
            });
            // JSON DEL ID BUSCADO
            log.audit({ title: 'Informacion ClientScript', details: JSON.stringify(records) });
        }
        //VALIDACION DE LOS CAMPOS AUN NO DEFINIDO
    function validateField(context) {
        /*
                var record = context.record;
                var sublistName = context.sublistId;
                var sublistFieldName = context.custpage_cantidad;
                var line = context.line;
                if (sublistName === 'custpage_cantidad') {
                    if (sublistFieldName === 'quantity') {
                        if (record.getCurrentSublistValue({
                                sublistId: sublistName,
                                fieldId: sublistFieldName
                            }) < 3) {
                            record.setValue({
                                fieldId: 'custpage_cantidad',
                                value: 2 //La cantidad es inferior a 3
                            });
                        } else {
                            record.setValue({
                                fieldId: 'custpage_cantidad',
                                value: 3 //'Cantidad aceptada'
                            });
                        }
                    }
                }
                return true;*/
    }
    // CAMBIO DE ESTADO CAMPO AUN NO DEFINIDO
    function fieldChanged(context) {
        var record = context.record;
        var sublistName = context.sublistId;
        var sublistFieldName = context.fieldId;
        var line = context.line;
        if (sublistName === 'item' && sublistFieldName === 'custpage_cantidad')
            record.setValue({
                fieldId: 'custpage_cantidad',
                value: 'Item: ' + record.getCurrentSublistValue({
                    sublistId: 'item',
                    fieldId: 'custpage_cantidad'
                }) + ' is selected'
            });
    }

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