在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
};
});⚠️ 注意事项:
对于自定义字段(如 custbody_sales_rep_mgr),同样适用 getText(),前提是该字段类型支持文本解析(如 list、entity、select 等);总结:将内部ID转为可读名称的本质,是利用NetSuite服务端的字段元数据映射能力。getText() 是标准且可靠的解决方案,但必须搭配 record.load() 使用——这是SuiteScript中“ID→Name”转换不可绕过的最佳实践。