如何在SuiteScript 2.1中获取NetSuite字段的引用记录类型?
在SuiteScript 2.1中获取字段的引用记录类型
要获取NetSuite记录字段对应的引用记录类型(比如销售订单entity字段对应的entity类型),可以通过N/metadata模块实现,这是最直接的动态获取方式,无需依赖具体记录ID。
核心方法:使用N/metadata模块
该模块允许你加载记录类型的元数据,从中提取字段的引用类型信息。需要注意的是,脚本需要具备SuiteScript Metadata Permission权限才能使用此模块。
示例代码
/** * @NApiVersion 2.1 */ define(['N/metadata', 'N/record'], (metadata, record) => { // 获取指定记录类型下某个字段的引用记录类型 function getFieldReferenceType(targetRecordType, fieldId) { // 加载目标记录类型的元数据 const recordMeta = metadata.load({ type: metadata.Type.RECORD, id: targetRecordType }); // 查找目标字段的定义 const targetField = recordMeta.fields.find(field => field.id === fieldId); if (!targetField) return null; // 根据字段类型返回对应的引用记录类型 switch(targetField.type) { case metadata.FieldType.SELECT: return targetField.selectRecordType; case metadata.FieldType.MULTISELECT: return targetField.multiSelectRecordType; default: // 非引用类型字段返回null return null; } } // 调用示例:获取销售订单entity字段的引用类型 const refType = getFieldReferenceType(record.Type.SALES_ORDER, 'entity'); log.debug('引用记录类型', refType); // 输出:entity });
在用户事件脚本中动态使用
如果是在用户事件脚本中,可直接从上下文获取当前记录类型,无需硬编码:
/** * @NApiVersion 2.1 * @NScriptType UserEventScript */ define(['N/metadata'], (metadata) => { const beforeSubmit = (context) => { const currentRecord = context.newRecord; const targetFieldId = 'entity'; // 获取当前记录的类型 const recordType = currentRecord.type; const recordMeta = metadata.load({ type: metadata.Type.RECORD, id: recordType }); const targetField = recordMeta.fields.find(field => field.id === targetFieldId); if (targetField?.type === metadata.FieldType.SELECT) { const refRecordType = targetField.selectRecordType; // 后续可使用该类型执行查询、加载记录等操作 log.debug('当前字段引用的记录类型', refRecordType); } }; return { beforeSubmit }; });
注意事项
- 对于标准字段(如
entity),返回的是父记录类型(如entity);如果是自定义字段直接引用子类型(如customer),则返回具体的子类型ID。 - 非引用类型字段(如
string、integer)会返回null,需提前做类型判断。 - 确保脚本已分配
SuiteScript Metadata Permission权限,否则会抛出权限错误。
内容的提问来源于stack exchange,提问作者jvoigt
相关产品推荐
相关产品推荐

