Reputation: 1
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.
Upvotes: 0
Views: 1730
Reputation: 21
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.
Upvotes: 2