
二开单据套打EXCEL/PDF发送到指定邮箱
需求:Cloud自带的发送套打信息至邮箱的功能需要自行点击发送邮件按钮并且选择收件人,可以在操作插件中(审核后,如果审核时间较长可考虑异步调用此方法)调用此方法将不需要手工去操作实现自动发送邮件(获取用户设置的套打模板),前提是要先配置好邮件服务器并且保证邮件服务器是正常可用的。
实现如下效果:

1、插件二开方法
//// <summary>
/// 金蝶云发送邮件方法 ctx上下文,fid单据内码,billkey单据主键,billtypeid单据类型id,mailadress收件人地址,title邮件标题,msg邮件内容,yjdata邮件账户设置(BAS_MAILACCOUNTSETTING)数据包,pdf是否发送pdf,excel是否发送excel 引用Kingdee.BOS.ServiceHelper /Kingdee.BOS.Core.Metadata/Kingdee.BOS.Core.Metadata.FormElement
/// </summary>
/// <param name="ctx"></param>
/// <param name="fid"></param>
/// <param name="billkey"></param>
/// <param name="billtypeid"></param>
/// <param name="mailadress"></param>
/// <param name="title"></param>
/// <param name="msg"></param>
/// <param name="yjdata"></param>
/// <param name="pdf"></param>
/// <param name="excel"></param>
/// <returns></returns>
public string Sendmail(Context ctx, string fid, string billkey, string billtypeid, string[] mailadress, string title, string msg, Kingdee.BOS.Orm.DataEntity.DynamicObject yjdata, bool pdf, bool excel)
{
if (yjdata != null)
{
Kingdee.BOS.Orm.DataEntity.DynamicObject yjdzdata = yjdata["FSENDMAILSERVER"] as Kingdee.BOS.Orm.DataEntity.DynamicObject;
string yjdz = null;//邮件地址
int yjdk = 0;//邮件端口
string fwdz = null;//邮件服务器地址
string zh = null;//发送邮件账户
string sqm = null;//授权码
string detdmb = null;//默认套打模板
if (!yjdata["FEmailAddress"].IsNullOrEmptyOrWhiteSpace())
{
fwdz = yjdata["FEmailAddress"].ToString();
}
if (!yjdata["FUserName"].IsNullOrEmptyOrWhiteSpace())
{
zh = yjdata["FUserName"].ToString();
}
if (!yjdata["FPassword"].IsNullOrEmptyOrWhiteSpace())
{
sqm = yjdata["FPassword"].ToString();
}
if (yjdzdata != null)
{
yjdz = yjdzdata["FMailServer"].ToString();
yjdk = Convert.ToInt32(yjdzdata["FSMTPPort"]);
}
IDynamicFormView view = this.CreateBillView(ctx, billkey, fid);//服务插件中创建view
string paratext = UserParamterServiceHelper.Load(ctx, "NotePrintSetup" + view.BillBusinessInfo.GetForm().Id.ToUpper().GetHashCode().ToString(), ctx.UserId, "");//获取套打设置参数
JArray paras = JArray.Parse(paratext);
if (paras != null)
{
var tdmbs = (from pa in paras where pa["key"].ToString() == billtypeid select pa).ToList();
if (tdmbs.Count > 0)
{
detdmb = tdmbs[0]["value"].ToString();
}
}
List<string> bids = new List<string>();
bids.Add(fid);
List<string> tdids = new List<string>();
tdids.Add(detdmb);
//(view as IDynamicFormViewService).MainBarItemClick("YOL_YJ");
Kingdee.BOS.Core.Import.IImportView importView = view as Kingdee.BOS.Core.Import.IImportView;
importView.AddViewSession();
string[] ids = { fid };
string[] cc = null;
string exportFileName = null;
string pdfExportFileName = null;
string excelExportFileName = null;
ResultInfo resultInfo = null;
DynamicFormViewPlugInProxy service = view.GetService<DynamicFormViewPlugInProxy>();
if (service != null)
{
InitializeSendMailServiceEventArgs initializeSendMailServiceEventArgs = new InitializeSendMailServiceEventArgs();
service.FireOnInitializeSendMailService(initializeSendMailServiceEventArgs);
exportFileName = initializeSendMailServiceEventArgs.ExportFileName;
}
try
{
pdfExportFileName = SendMailServiceHelper.GetPdfExportFileName(view, ctx.UserId, ids, detdmb, exportFileName);
}
catch (Exception)
{
return "生成pdf失败";
}
try
{
excelExportFileName = SendMailServiceHelper.GetExcelExportFileName(view, ctx.UserId, ids, detdmb, exportFileName);
}
catch (Exception)
{
return "生成excel失败";
}
try
{
resultInfo = SendMailServiceHelper.Send(view, ctx.UserId, yjdz, yjdk, false, false, fwdz, zh, sqm, title, msg, mailadress, cc, ids, pdf, pdfExportFileName, excel, excelExportFileName, exportFileName);
}
catch (Exception ex)
{
return ex.Message;
}
if (resultInfo.Successful == true)
{
return "邮件发送成功!";
}
else
{
return "邮件发送失败!原因:" + resultInfo.Message;
}
}
else
{
return "参数不能为空!";
}
}
public IBillView CreateBillView(Context ctx, string key, string id)
{
// 读取物料的元数据
FormMetadata meta = MetaDataServiceHelper.Load(ctx, key) as FormMetadata;
Form form = meta.BusinessInfo.GetForm();
// 创建用于引入数据的单据view
Type type = Type.GetType("Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web");
var billView = (IDynamicFormViewService)Activator.CreateInstance(type);
// 开始初始化billView:
// 创建视图加载参数对象,指定各种参数,如FormId, 视图(LayoutId)等
BillOpenParameter openParam = CreateOpenParameter(ctx, meta, id);
// 动态领域模型服务提供类,通过此类,构建MVC实例
var provider = form.GetFormServiceProvider();
billView.Initialize(openParam, provider);
billView.LoadData();
(billView as IBillView).CommitNetworkCtrl();
return billView as IBillView;
}
public BillOpenParameter CreateOpenParameter(Context ctx, FormMetadata meta, string id)
{
Form form = meta.BusinessInfo.GetForm();
// 指定FormId, LayoutId
BillOpenParameter openParam = new BillOpenParameter(form.Id, meta.GetLayoutInfo().Id);
// 数据库上下文
openParam.Context = ctx;
// 本单据模型使用的MVC框架
openParam.ServiceName = form.FormServiceName;
// 随机产生一个不重复的PageId,作为视图的标识
openParam.PageId = G