我需要为子列表“ EnviarSelección”中的按钮创建一个事件。
这是我的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
};
});
这是我的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,
};
});
当我运行Suitelet时,它对我非常有用,问题是当我调用客户端脚本时。
如果我将其保留如下:'botones.clientScriptModulePath“'SuiteScripts / GHTestScript / ClientScript / GHclientScript.js';',则会出现此错误:
如果我将其保留如下:'form.clientScriptModulePath“'SuiteScripts / GHTestScript / ClientScript / GHclientScript.js';',效果很好,但无需单击
最佳答案
一旦页面加载,就会从ClientScript中调用pageInit
函数,因此,您不能将alertaEnvio
公开为pageInit方法。
您可以做的是首先更改您的客户端脚本,并将alertaEnvio
附加到window
(全局)对象中。
这是您的客户端脚本的外观
/**
* @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,
};
}
);
然后在套件中进行以下更改
在方法
datos
中udpate按钮定义如下var botones = sublist.addButton({
id: 'custpage_buttonid',
label: 'Enviar Selección',
functionName: 'alertaEnvio' //'aqui va la funcion de llamada desde el script de cliente'
});
从
datos
方法中删除以下行botones.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';
在方法
onRequest
中添加以下行formulario.clientScriptModulePath = 'SuiteScripts/GHpruebaScript/ClientScript/GHclientScript.js';