发送邮件.二开案例.发送自定义邮件二开逻辑

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

发送邮件.二开案例.发送自定义邮件二开逻辑

【场景】发送自定义邮件二开逻辑 如携带自定义单据的附件、携带自定义单据的套打导出文件 【案例】 ![image.webp](/download/0100e44ed6c4de5d425a965d35193771aba9.webp) ```csharp using Kingdee.BOS; using Kingdee.BOS.Core.Attachment; using Kingdee.BOS.Core.Bill; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Import; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.NotePrint; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.FileServer.Core.Object; using Kingdee.BOS.FileServer.ProxyService; using Kingdee.BOS.Msg; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace DynamicFormPlugIn.Mail { [Kingdee.BOS.Util.HotUpdate] [System.ComponentModel.Description("发送邮件二开相关")] public class FormPlugIn_SendCustomMail : AbstractDynamicFormPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { if (!string.Equals(e.BarItemKey, "tb_SendCustomMail", StringComparison.OrdinalIgnoreCase)) return; SendCustomMail(); } private void SendCustomMail() { EmailMessageInfo mailInfo = null; //<0>发送人邮箱信息相关 //使用当前用户的邮箱 mailInfo = Kingdee.BOS.ServiceHelper.SendMailServiceHelper.GetEmailMessageInfoByUserId(this.Context, this.Context.UserId); /* //使用参数设置-基础管理-BOS平台 虚拟邮箱配置 mailInfo = Kingdee.BOS.ServiceHelper.SendMailServiceHelper.GetEmailMessageInfoByBosVirtual(this.Context, this.Context.UserId); //使用参数设置-流程中心-工作流 虚拟邮箱配置 mailInfo = Kingdee.BOS.ServiceHelper.SendMailServiceHelper.GetEmailMessageInfoByBosVirtual(this.Context, this.Context.UserId); */ //<1>接收人邮箱信息相关 var userContracts = Kingdee.BOS.ServiceHelper.SendMailServiceHelper.GetUserContacts(this.Context, new List<long>() { this.Context.UserId }); if (userContracts != null) { mailInfo.To = userContracts.Select(x => x.Email).ToList(); //关联单据A的客户的内码 //mailInfo.To = GetCustomerEmailById(pkids); } //<2>邮件标题和邮件内容 mailInfo.Subject = "标题"; mailInfo.Body = string.Format("正文:单据编号 {0} 发送邮件", this.Model.GetValue("FBillNo")); //<2>邮件的携带的文件相关 //生成采购订单的导出文件作为附件发送 string exportFile = GetExportFile("PUR_PurchaseOrder", "100001", "734cffd8-26ef-4131-b0c2-1d26b29d90c0"); if(!exportFile.IsNullOrEmptyOrWhiteSpace()) { mailInfo.Attachments.Add(exportFile); } //获取单据关联的附件 List<string> attachFiles = GetAttachmentFiles("BD_Currency", "704887"); if(attachFiles != null) { attachFiles.ForEach(x => mailInfo.Attachments.Add(x)); } //<3>发送邮件 var resultInfo = Kingdee.BOS.ServiceHelper.SendMailServiceHelper.Send(this.View.Context, mailInfo, new PrintExportForEmailInfo()); } /// <summary> /// 根据客户的id 获取接收邮箱 /// </summary> /// <param name="pkIds"></param> /// <returns></returns> private List<string> GetCustomerEmailById(string[] pkIds) { var tpSqlAndParam = StringUtils.GetSqlWithCardinalityAndParam(pkIds, "@ids", 1, true); string sql = string.Format(@"select {0} TEMP.FCUSTID,TEMP.FCUSTNAME as FNAME,TEMP.FCONTACTNAME AS FCONTACT,TEMP.FEMAIL,TEMP.FISDEFAULT,TEMP.FCONTACTID from ( select C.FCUSTID,CL.FNAME AS FCUSTNAME,ISNULL(contact_L.FNAME,' ') AS FCONTACTNAME,ISNULL(contact.FEMAIL,' ') AS FEMAIL,ISNULL(contact.FCONTACTID,0) AS FCONTACTID ,(Case when ISNULL(ext.FDEFAULTCONTACT,0)=ISNULL(contact.FCONTACTID,0) and ISNULL(ext.FDEFAULTCONTACT,0)>0 then 1 else 0 end) AS FISDEFAULT from T_BD_CUSTOMER C INNER JOIN {1} BB ON C.FCUSTID=BB.FID left Join T_BD_CUSTOMEREXT ext on C.FCUSTID=ext.FCUSTID left join T_BD_CUSTOMER_L CL on (C.FCUSTID=CL.FCUSTID and CL.FLOCALEID=@FLOCALEID1) left join T_BD_COMMONCONTACT contact on ((contact.FCOMPANY=C.FCUSTID or contact.FCOMPANY=C.FMASTERID) and contact.FCOMPANYTYPE='BD_Customer') left join T_BD_COMMONCONTACT_L contact_L on (contact.FCONTACTID=contact_L.FCONTACTID and contact_L.FLOCALEID=@FLOCALEID2 ) ) TEMP ORDER BY TEMP.FCUSTID ASC,TEMP.FISDEFAULT DESC,TEMP.FCONTACTID ASC", "", tpSqlAndParam.Item1); SqlParam[] paramList = new SqlParam[3]; paramList[0] = tpSqlAndParam.Item2; paramList[1] = new SqlParam("@FLOCALEID1", KDDbType.Int16, this.Context.UserLocale.LCID); paramList[2] = new SqlParam("@FLOCALEID2", KDDbType.Int16, this.Context.UserLocale.LCID); var bdObjs = DBServiceHelper.ExecuteDynamicObject(this.Context, sql, null, null, CommandType.Text, paramList); List<string> result = new List<string>(); if (bdObjs != null) { for (int i = 0; i < bdObjs.Count; ++i) { var bdObj = bdObjs[i]; if (bdObj == null) continue; string email = ObjectUtils.Object2String(bdObj["FEMAIL"]); if (email.IsNullOrEmptyOrWhiteSpace()) continue; result.Add(email); } } return result; } #region 生成套打导出文件 /// <summary> /// 生成导出文件 /// </summary> /// <param name="formId"></param> /// <param name="billId"></param> /// <param name="templateId"></param> /// <returns></returns> private string GetExportFile(string formId, string billId, string templateId) { return ExportTargetBill(this.Context, formId, billId, templateId); } /// <summary> /// 套打导出指定单据 /// </summary> /// <param name="formId"></param> /// <param name="billId"></param> /// <param name="templateId"></param> /// <returns></returns> private static string ExportTargetBill(Context ctx, string formId, string billId, string templateId) { IDynamicFormView dynamicFormView = CreateBillView(ctx, formId, billId); //此行为代码模拟打开凭证界面 if (dynamicFormView == null) return null; IImportView billView = dynamicFormView as IImportView; if (billView != null) { billView.AddViewSession(); } try { return ExportTargetBillWithDynamic(dynamicFormView, formId, billId, templateId); } finally { if (billView != null) { billView.RemoveViewSession(); } dynamicFormView.Close(); } } private static string ExportTargetBillWithDynamic(IDynamicFormView dynamicFormView, string formId, string billId, string templateId) { IDynamicFormViewService viewService = dynamicFormView as IDynamicFormViewService; if (viewService == null) return null; try { List<string> billIds = new List<string>() { billId }; List<string> templateIds = new List<string>() { templateId }; PrintExportInfo pExInfo = new PrintExportInfo(); pExInfo.PageId = dynamicFormView.PageId; pExInfo.FormId = formId; pExInfo.BillIds = billIds; //单据内码 pExInfo.TemplateIds = templateIds; //套打模板ID pExInfo.FileType = ExportFileType.PDF; //文件格式 pExInfo.ExportType = ExportType.BillTempId; //导出格式 string fileName = Guid.NewGuid().ToString() + ".PDF"; string temppath = PathUtils.GetPhysicalPath("TempfilePath", fileName); pExInfo.FilePath = temppath; //文件输出路径 //指定动态文件目录和动态文件名 pExInfo.AutoZip = true; pExInfo.ExportDynamicDirectory = pExInfo.Id; pExInfo.ExportDynamicFileName = "{FBillNo}"; viewService.ExportNotePrint(pExInfo); if (pExInfo.ExportFileInfos == null || pExInfo.ExportFileInfos.Count <= 0) return temppath; return pExInfo.ExportFileInfos[0].FilePath; } finally { } } /// <summary> /// 构建表单打开参数 /// </summary> /// <param name="ctx"></param> /// <param name="metadata"></param> /// <param name="pkValue"></param> /// <returns></returns> private static BillOpenParameter CreateOpenParameter(Context ctx, FormMetadata metadata, string pkValue) { var form = metadata.BusinessInfo.GetForm(); BillOpenParameter openPara = new BillOpenParameter(form.Id, metadata.GetLayoutInfo().Id); openPara.Context = ctx; openPara.PageId = Guid.NewGuid().ToString(); openPara.Status = OperationStatus.VIEW; openPara.CreateFrom = CreateFrom.Default; openPara.DefaultBillTypeId = string.Empty; openPara.PkValue = pkValue; openPara.FormMetaData = metadata; openPara.SetCustomParameter(Kingdee.BOS.Core.FormConst.PlugIns, form.CreateFormPlugIns()); openPara.ServiceName = form.FormServiceName; return openPara; } /// <summary> /// 创建视图 /// </summary> /// <param name="ctx"></param> /// <param name="formId"></param> /// <param name="pkValue"></param> /// <returns></returns> private static IDynamicFormView CreateBillView(Context ctx, string formId, string pkValue) { FormMetadata metadata = MetaDataServiceHelper.Load(ctx, formId) as FormMetadata; if (metadata == null) return null; var openParameter = CreateOpenParameter(ctx, metadata, pkValue); var provider = metadata.BusinessInfo.GetForm().GetFormServiceProvider(); string importViewClass = "Kingdee.BOS.Web.Import.ImportBillView,Kingdee.BOS.Web"; Type type = Type.GetType(importViewClass); IDynamicFormViewService billView = (IDynamicFormViewService)Activator.CreateInstance(type); billView.Initialize(openParameter, provider); billView.LoadData(); return (IDynamicFormView)billView; } #endregion #region 附件相关 private List<string> GetAttachmentFiles(string formId, string billId) { return GetAttachmentFiles(this.View.Context, formId, billId); } private static List<string> GetAttachmentFiles(Context ctx, string formId, string billId) { FormMetadata metadata = MetaDataServiceHelper.Load(ctx, formId) as FormMetadata; AttachmentKey attachmentKey = new AttachmentKey() { FilterMode = AttachFilterMode.Head, BillInterID = billId, BillType = formId, EntryInterID = "-1", EntryKey = " " }; string filter = BusinessDataServiceHelper.GetAttachmentListFilter(ctx, attachmentKey, metadata.BusinessInfo); QueryBuilderParemeter para = new QueryBuilderParemeter() { FormId = "BOS_Attachment", FilterClauseWihtKey = filter, SelectItems = SelectorItemInfo.CreateItems("FID, FFileId, FFileStorage, FAttachmentName") }; var attachInfoObjs = QueryServiceHelper.GetDynamicObjectCollection(ctx, para); List<string> result = new List<string>(); if (attachInfoObjs == null || attachInfoObjs.Count == 0) return result; foreach(var attachInfoObj in attachInfoObjs) { bool isFileServer = (ObjectUtils.Object2Int(attachInfoObj["FFileStorage"]) != 0); if (isFileServer) { string fileName = attachInfoObj["FAttachmentName"].ToString(); string filePath = PathUtils.GetPhysicalPath("TempFilePath", fileName); UpDownloadService upDownloadService = new UpDownloadService(); TFileInfo tFile = new TFileInfo() { FileId = attachInfoObj["FFileId"].ToString(), StartIndex = 0, CTX = ctx, FilePath = filePath }; FileDownloadResult downloadResult = upDownloadService.DownloadSaveLocal(tFile); if (downloadResult == null || !downloadResult.Success) continue; result.Add(filePath); } else { byte[] fileContent = attachInfoObj["FAttachment"] as byte[]; if (fileContent == null) { Logger.Error("BOS", string.Format("文件内容为空,FID:{0}", attachInfoObj["FID"]), null); continue; } using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) using (BinaryWriter bw = new BinaryWriter(fs)) { bw.Write(fileContent); } result.Add(filePath); } } return result; } #endregion } } ``` (1)获取发件人邮箱(个人用户、虚拟账户) (2)获取收件人邮箱(用户、客户邮箱) (3)正文和标题设置 (4)生成自定义导出文件到邮件附件 (5)单据附件携带到邮件附件 【效果】采购申请单发送邮件时,携带采购合同的套打文件和币别的附件 ![image.webp](/download/0100adf6fdc521214234981506904b6a0984.webp) ![image.webp](/download/0100b9421a92a5e549879e5499cc125c05e0.webp)

Mark!~

发送邮件.二开案例.发送自定义邮件二开逻辑

【场景】发送自定义邮件二开逻辑如携带自定义单据的附件、携带自定义单据的套打导出文件【案例】![image.webp](/download/0100e44ed6c4de5d...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息