SuiteScript 2.0技术问询:手动添加邮件行项目至交易记录Communications标签页
我之前也折腾过这个需求,NetSuite官方文档在这块确实讲得不够直白,其实核心是通过创建Message记录并关联到目标交易,NetSuite会自动把这条记录展示在交易的Communications标签页里。下面给你梳理具体的实现步骤和代码示例:
核心逻辑说明
交易的Communications标签里的邮件行,本质是独立的message类型记录,只是通过transaction字段和目标交易做了关联。所以我们不需要直接修改交易记录本身,而是创建一条Message记录并绑定到交易上即可。
具体实现步骤
- 先确认目标交易的内部ID(比如Sales Order、Invoice的internalId)
- 创建Message记录实例,填充必要字段:发件人、收件人、主题、内容、关联交易ID、消息类型(EMAIL)、状态等
- 保存Message记录,完成后刷新交易页面就能看到这条邮件行
SuiteScript 2.0 代码示例
这里以用户事件脚本(AfterSubmit触发)为例,给当前提交的交易添加沟通邮件:
/** * @NApiVersion 2.x * @NScriptType UserEventScript */ define(['N/record', 'N/log'], function(record, log) { function addTransactionCommunication(context) { // 获取当前交易的内部ID和关联客户ID const transactionId = context.newRecord.id; const customerId = context.newRecord.getValue({ fieldId: 'entity' }); try { // 初始化Message记录 const messageRecord = record.create({ type: record.Type.MESSAGE, isDynamic: false }); // 设置发件人为当前登录用户(-5是NetSuite内置的当前用户标识) messageRecord.setValue({ fieldId: 'author', value: -5 }); // 设置收件人为交易关联的客户(也可以直接填邮箱字符串,比如"test@example.com") messageRecord.setValue({ fieldId: 'recipient', value: customerId }); // 填充邮件主题和内容 messageRecord.setValue({ fieldId: 'subject', value: '订单跟进通知' }); messageRecord.setValue({ fieldId: 'message', value: '这是通过SuiteScript自动添加的交易沟通邮件,用于记录跟进情况。' }); // 关联到目标交易 messageRecord.setValue({ fieldId: 'transaction', value: transactionId }); // 指定消息类型为邮件 messageRecord.setValue({ fieldId: 'type', value: 'EMAIL' }); // 设置邮件状态:SENT(已发送)或 DRAFT(草稿) messageRecord.setValue({ fieldId: 'status', value: 'SENT' }); // 保存记录 const messageId = messageRecord.save({ enableSourcing: true, ignoreMandatoryFields: false }); log.debug('操作成功', `已成功添加沟通记录,Message内部ID:${messageId}`); } catch (error) { log.error('添加沟通记录失败', error.message); throw error; } } return { afterSubmit: addTransactionCommunication }; });
一些注意事项
- 要确保脚本拥有
message记录的创建权限,以及目标交易的查看/编辑权限 - 如果需要给邮件加附件,可以用
record.attach()方法把文件记录关联到Message上 recipient字段支持多种格式:客户/联系人/员工的内部ID,或者直接输入邮箱地址(多个邮箱用逗号分隔)- 如果你是要把已有的邮件记录关联到交易,也可以用
record.attach()方法,而不是新建Message记录
内容的提问来源于stack exchange,提问作者jk121960
相关产品推荐
相关产品推荐

