[英]Netsuite Customer statements
我希望从 Netsuite 向存储在客户记录自定义字段中的多个 email 地址发送客户声明。
现在它只会发送到客户记录上的主要 email,它只能是 1 email。
从报表页面为客户生成报表时,有没有办法发送到多个电子邮件?
如果没有,有没有办法解决这个问题? 谢谢。
不是来自声明页面,但您可以使用脚本或工作流添加自定义按钮以使用“N/render”模块生成声明,然后将结果声明 email 发送到每个“N/email”模块的任何电子邮件列表。
下面的代码是一个工作流操作脚本(在 Typescript 中——参见https://github.com/headintheclouddev/typings-suitescript-2.0 ),当客户进入关联的工作流 state 时,它会向客户发送语句。
这是一个 cc 的员工,但您可以轻松地从客户记录中加载 cc 列表。
/**
* @NApiVersion 2.1
* @NScriptType WorkflowActionScript
*/
import {EntryPoints} from 'N/types';
import * as email from 'N/email';
import * as log from 'N/log';
import * as record from 'N/record';
import * as render from 'N/render';
import * as runtime from 'N/runtime';
import * as search from 'N/search';
function iter(rec, listName, cb){
var lim = rec.getLineCount({sublistId:listName});
var i = 0;
var getV = function (fld){
return rec.getSublistValue({sublistId:listName, fieldId:fld, line:i});
};
for(; i< lim; i++){
cb(i, getV);
}
}
export function onAction(ctx){
const rec: record.Record = ctx.newRecord;
try{
var me = runtime.getCurrentScript();
var getSetting = (fld):any => me.getParameter({name: fld});
var statementOpts = {
entityId:rec.id,
printMode:render.PrintMode.PDF,
inCustLocale:true,
openTransactionsOnly: true,
startDate : null
}
var oldestTransactionid = null;
var openTrans = [];
search.create({
type:'transaction',
filters:[
['entity', 'is', rec.id], 'AND',
['status', 'anyof', ['CustInvc:A']], 'AND',
['mainline', 'is', 'T']
],
columns:[
search.createColumn({name:'trandate', sort:search.Sort.ASC})
]
}).run().each(ref=>{
log.debug({
title:"getting oldest transaction for "+ rec.getValue({fieldId:'entityid'}),
details: ref.id
});
if(!oldestTransactionid) oldestTransactionid = ref.id;
openTrans.push(render.transaction({
entityId: parseInt(ref.id),
inCustLocale:true
}))
return true;
});
var statement = render.statement(statementOpts);
var lang = rec.getValue({fieldId:'language'});
var emailTemplate = ((lang == 'fr_CA') && getSetting('custscript_dunning_template_fr')) || getSetting('custscript_dunning_template');
var emailSpec = render.mergeEmail({
templateId: emailTemplate,
entity:{
type:'customer',
id:rec.id
},
transactionId: oldestTransactionid ? parseInt(oldestTransactionid) : null
});
log.debug({
title:'sending overdue letter to '+ rec.getValue({fieldId:'entityid'}),
details: emailSpec.subject +' '+ emailSpec.body.length
});
var team = [];
iter(rec, 'salesteam', (idx, getV)=>{
if(getV('issalesrep')) team.push(getV('employee'));
});
var sendTeam = [];
if(team.length){
search.create({
type:'employee',
filters:[
['internalid', 'anyof', team], 'AND',
['email', 'isnotempty', null]
]
}).run().each(ref=>{
sendTeam.push(ref.id);
return true;
});
}
email.send({
author: getSetting('custscript_dunning_from_emp') || rec.getValue({fieldId:'salesrep'}) || -5,
recipients: getSetting('custscript_dunning_to_addr') || rec.id, // to address param to facilitate testing.
cc:sendTeam.length ? sendTeam : null,
subject:emailSpec.subject,
body: emailSpec.body,
attachments:[statement].concat(openTrans)
});
}catch(e){
log.error({
title:'sending dunning letter '+ rec.getValue({fieldId:'entityid'}),
details:(e.message || e.toString()) + (e.getStackTrace ? (' \n \n' + e.getStackTrace().join(' \n')) : '')
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.