Netsuite中如何在Suitelet场景下为字段设置isMandatory必填属性
方案1:Suitelet自定义表单字段直接设置必填
如果你的字段是在Suitelet中通过serverWidget.createForm()/addField()方法自行创建的,直接在创建字段时指定isMandatory属性即可,代码示例:
/** * @NApiVersion 2.x * @NScriptType Suitelet */ define(['N/ui/serverWidget'], function(serverWidget) { function onRequest(context) { if (context.request.method === 'GET') { // 创建表单 const form = serverWidget.createForm({ title: '自定义表单' }); // 添加字段时直接设置必填 const canceledTypeField = form.addField({ id: 'ism_hr_create_edit_canceled_type', type: serverWidget.FieldType.SELECT, label: '取消类型', source: 'customlist_cancel_type' // 替换为实际的选择项来源 }); // 直接设置必填属性 canceledTypeField.isMandatory = true; context.response.writePage(form); } } return { onRequest: onRequest }; });
方案2:Suitelet加载现有记录渲染表单时设置必填
如果你是在Suitelet中加载已有记录生成表单,可直接通过表单实例获取字段对象设置必填,不需要调用客户端currentRecord:
/** * @NApiVersion 2.x * @NScriptType Suitelet */ define(['N/record', 'N/ui/serverWidget'], function(record, serverWidget) { function onRequest(context) { if (context.request.method === 'GET') { // 加载目标记录 const targetRec = record.load({ type: 'customrecord_your_record_type', // 替换为实际记录类型ID id: 123 // 替换为实际要加载的记录ID }); // 绑定记录创建表单 const form = serverWidget.createForm({ title: '编辑记录', record: targetRec }); // 获取表单上的目标字段对象设置必填 const canceledTypeField = form.getField({ id: 'ism_hr_create_edit_canceled_type' }); canceledTypeField.isMandatory = true; context.response.writePage(form); } } return { onRequest: onRequest }; });
补充兜底校验方案
如果担心前端校验被绕过,可以在Suitelet的POST请求逻辑中加服务端校验,字段为空时返回错误提示:
if (context.request.method === 'POST') { const canceledType = context.request.parameters.ism_hr_create_edit_canceled_type; if (!canceledType || canceledType.trim() === '') { const form = serverWidget.createForm({title: '自定义表单'}); // 输出错误提示 form.addPageInitMessage({ type: serverWidget.MessageType.ERROR, message: '取消类型为必填项,请填写后提交' }); // 此处可补充用户已填内容回填逻辑 context.response.writePage(form); return; } // 后续正常提交逻辑 }
内容的提问来源于stack exchange,提问作者Luken
相关产品推荐
相关产品推荐

