- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要为子列表中名为“Enviar Selección”的按钮创建一个事件......
这是我的套房************************
/**
* @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
中更新按钮定义如下
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';
关于javascript - 使用 ClientScript SS2.0 在 SUITELET 中创建事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58017951/
前言: 有时候,一个数据库有多个帐号,包括数据库管理员,开发人员,运维支撑人员等,可能有很多帐号都有比较大的权限,例如DDL操作权限(创建,修改,删除存储过程,创建,修改,删除表等),账户多了,管理
所以我用 Create React App 创建并设置了一个大型 React 应用程序。最近我们开始使用 Storybook 来处理和创建组件。它很棒。但是,当我们尝试运行或构建应用程序时,我们不断遇
遵循我正在创建的控件的代码片段。这个控件用在不同的地方,变量也不同。 我正在尝试编写指令来清理代码,但在 {{}} 附近插入值时出现解析错误。 刚接触 Angular ,无法确定我错过了什么。请帮忙。
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,它为我的基于 post rest 的 Web 服务创建一个图像。我无法制定请求来测试以下内容,最简单的测试方法是什么? @POST
我一直在 Windows 10 的模拟器中练习 c。后来我改用dev C++ IDE。当我在 C 中使用 FILE 时。创建的文件的名称为 test.txt ,而我给出了其他名称。请帮助解决它。 下面
当我们创建自定义 View 时,我们将 View 文件的所有者设置为自定义类,并使用 initWithFrame 或 initWithCode 对其进行实例化。 当我们创建 customUITable
我正在尝试为函数 * Producer 创建一个线程,但用于创建线程的行显示错误。我为这句话加了星标,但我无法弄清楚它出了什么问题...... #include #include #include
今天在做项目时,遇到了需要创建JavaScript对象的情况。所以Bing了一篇老外写的关于3种创建JavaScript对象的文章,看后跟着打了一遍代码。感觉方法挺好的,在这里与大家分享一下。 &
我正在阅读将查询字符串传递给 Amazon 的 S3 以进行身份验证的文档,但似乎无法理解 StringToSign 的创建和使用方式。我正在寻找一个具体示例来说明 (1) 如何构造 String
前言:我对 C# 中任务的底层实现不太了解,只了解它们的用法。为我在下面屠宰的任何东西道歉: 对于“我怎样才能开始一项任务但不等待它?”这个问题,我找不到一个好的答案。在 C# 中。更具体地说,即使任
我有一个由一些复杂的表达式生成的 ILookup。假设这是按姓氏查找人。 (在我们简单的世界模型中,姓氏在家庭中是唯一的) ILookup families; 现在我有两个对如何构建感兴趣的查询。 首
我试图创建一个 MSI,其中包含 和 exe。在 WIX 中使用了捆绑选项。这样做时出错。有人可以帮我解决这个问题。下面是代码: 错误 error LGH
在 Yii 中,Create 和 Update 通常使用相同的形式。因此,如果我在创建期间有电子邮件、密码、...other_fields...等字段,但我不想在更新期间专门显示电子邮件和密码字段,但
上周我一直在努力创建一个给定一行和一列的 QModelIndex。 或者,我会满足于在已经存在的 QModelIndex 中更改 row() 的值。 任何帮助,将不胜感激。 编辑: QModelInd
出于某种原因,这不起作用: const char * str_reset_command = "\r\nReset"; const char * str_config_command = "\r\nC
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
在今天之前,我使用/etc/vim/vimrc来配置我的vim设置。今天,我想到了创建.vimrc文件。所以,我用 touch .vimrc cat /etc/vim/vimrc > .vimrc 所
我可以创建一个 MKAnnotation,还是只读的?我有坐标,但我发现使用 setCooperative 手动创建 MKAnnotation 并不容易。 想法? 最佳答案 MKAnnotation
在以下代码中,第一个日志语句按预期显示小数,但第二个日志语句记录 NULL。我做错了什么? NSDictionary *entry = [[NSDictionary alloc] initWithOb
我正在使用与此类似的代码动态添加到数组; $arrayF[$f+1][$y][$x+1] = $value+1; 但是我在错误报告中收到了这个: undefined offset :1 问题:尝试创
我是一名优秀的程序员,十分优秀!