Agregué un campo en el pedido de ventas llamado Membresía que se obtendrá del registro del cliente. Luego, cuando ese campo se establece en el nivel de membresía (por ejemplo, miembro de élite), establece automáticamente el campo de artículo de descuento en un artículo de descuento específico... Encontré una notificación que decía que los scripts de punto de entrada de SuiteScript 2.x deben implementar una función de tipo de script ¿Cómo puedo solucionar esto?
/** *@NApiVersion 2.x *@NScriptType ClientScript */ define(["N/currentRecord", "N/runtime"], function(currentRecord,runtime) { function pageInit(context) { const record = currentRecord.get() // Get value of Membership Field const user = runtime.getCurrentUser().name } var membership = currentRecord.getField({ fieldId : "custentity1", }) if(membership == "Elite"){ //Setting up discount record.setValue({ fieldId: "discountitem", //fieldId of the Discount Item value: 137 // Internal ID of the Discount Item })} else { record.setValue({ fieldId: "discount item", value: 0 }); } return { pageInit : pageInit } });su código debe estar en un punto de entrada para que tenga un efecto en el registro de la orden de venta, parece que quiere usar el punto de entrada fieldChanged, mire eso en los documentos de ayuda.
Su lógica debe estar presente dentro de la función, es decir, las funciones de punto de entrada. En su código, está fuera de la función (función PageInit). De ahí el error.
Prueba esto -
/** *@NApiVersion 2.0 *@NScriptType ClientScript */ define(["N/currentRecord", "N/runtime"], function(currentRecord,runtime) { function pageInit(context) { const record = currentRecord.get(); // Get value of Membership Field const user = runtime.getCurrentUser().name; var membership = currentRecord.getField({ fieldId : "custentity1" }); if(membership == "Elite"){ //Setting up discount record.setValue({ fieldId: "discountitem", //fieldId of the Discount Item value: 137 // Internal ID of the Discount Item }); } else { record.setValue({ fieldId: "discount item", value: 0 }); } } return { pageInit : pageInit } });Avísame en caso de problemas.
Debido a que está usando 2.x, su configuración global determinará si esto se ejecuta como 2.0 o 2.1. Supongo que lo tiene configurado en 2.1 porque su contexto tiene un problema.
Si intenta ejecutar el código 2.1 en el cliente, es posible que tenga problemas. Uno de esos problemas es que el contexto no se completará. ¿Quizás es por eso que está usando currentRecord.get() en lugar de context.currentRecord ?
Nota: Cualquier código que esté fuera de una función (como pageInit ) se ejecutará cuando se ejecute la devolución de llamada del módulo.
if(membership == "Elite"){ //Setting up discount record.setValue({ fieldId: "discountitem", //fieldId of the Discount Item value: 137 // Internal ID of the Discount Item })} else { record.setValue({ fieldId: "discount item", value: 0 }); }por lo que este código se ejecuta antes de pageInit, por lo que la sugerencia de Sayeesh es buena.
Está mezclando algunas versiones de EcmaScipt. Obtendría un buen linter como eslint y me aseguraría de que está escribiendo el código para el objetivo que desea.
¿Tienes un campo llamado discount item y otro llamado artículo con discountitem ? Asumiré que es un error tipográfico.
Para jugar al abogado del diablo, voy a decir que puedes usar 2.1 si realmente quieres aquí. En 2.1, su código podría ser tan simple como: (no marcado)
/** * @NApiVersion 2.1 * @NScriptType ClientScript */ define(['N/record','N/currentRecord'],(record,currentRecord)=>{ return { pageInit({ currentRecord : { id, type } }){ const so = record.load({ id, type }), membership = so.getValue({ fieldId : 'custentity1' }), fieldId = 'discountitem', value = membership === 'Elite' ? 137 : 0; so.setValue({ fieldId, value }); } } });