
在suitescript中,`getvalue()` 返回字段的内部id(如员工id),而 `gettext()` 可返回其对应显示名称(如员工姓名);但需注意:`gettext()` 仅对已加载的记录(尤其是通过 `record.load()` 加载的完整记录)有效,无法直接在当前动态创建/编辑的上下文中调用。
在构建邮件通知(如销售单据创建后的自动提醒)时,若需将 salesrep 字段展示为销售代表的真实姓名而非内部ID(例如 12345),关键在于正确使用 record.getText() 方法——但它有一个重要前提:该方法不能作用于尚未保存或仅处于客户端/临时状态的记录(如 currentRecord 在用户界面脚本或用户事件 beforeSubmit 中的实例),而必须基于通过 record.load() 显式加载的、服务端完整的记录对象。
✅ 正确做法如下(以用户事件脚本为例):
/**
* @NApiVersion 2.1
* @NScriptType UserEvent
*/
define(['N/currentRecord', 'N/record'], function(currentRecord, record) {
function afterSubmit(context) {
if (context.type === context.UserEventType.CREATE) {
var recordId = context.newRecord.id;
var recordType = context.newRecord.type;
// ✅ 必须重新加载记录(服务端完整加载)
var loadedRecord = record.load({
type: recordType,
id: recordId,
isDynamic: true
});
// ✅ getText() 获取销售代表的显示名称(如 "张三")
var repName = loadedRecord.getText({ fieldId: 'salesrep' });
// 构建邮件内容(示例)
var documentNum = loadedRecord.getText({ fieldId: 'tranid' }); // 使用getText获取单号显示值更安全
var emailBody = "Details Below:
" + documentNum + "
Sales Rep: " + repName;
// 后续发送邮件逻辑(略)
log.debug('Email Body', emailBody);
}
}
return {
afterSubmit: afterSubmit
};
});⚠️ 注意事项:
- currentRecord.getValue({fieldId: 'salesrep'}) 在 beforeSubmit 或 afterSubmit 中返回的是内部ID(数字),不支持 getText() —— 因为 currentRecord 是轻量级引用,未加载关联记录元数据;
- record.load() 是必需步骤:它从数据库拉取完整记录,使系统能解析下拉字段、列表字段等的文本映射关系;
- 若字段为空(如未指定销售代表),getText() 将返回空字符串 '',建议增加空值校验;
- 对于自定义字段(如 custbody_sales_rep_mgr),同样适用 getText(),前提是该字段类型支持文本解析(如 list、entity、select 等);
- 性能提示:record.load() 会产生一次服务端查询,请避免在循环中频繁调用;如需批量处理,可考虑 search.create() 配合 search.lookupFields() 替代。
总结:将内部ID转为可读名称的本质,是利用NetSuite服务端的字段元数据映射能力。getText() 是标准且可靠的解决方案,但必须搭配 record.load() 使用——这是SuiteScript中“ID→Name”转换不可绕过的最佳实践。










