【知识分享】业务监控,发提醒同时,发送邮件
金蝶云社区-MiLai
MiLai
2人赞赏了该文章 2,597次浏览 未经作者许可,禁止转载编辑于2017年12月27日 16:16:01

业务预警在Cloud中对我们业务监控起到很大的作用,提醒业务员操作,首先分享一下业务预警的配置文档。
附件中详细了描述了,业务预警的基本配置和Demo写法。
在线阅读该文档:
http://open.kingdee.com/K3cloud/WenKu/DocumentView.aspx?docId=108826

有的时候针对业务监控,我们还需要对特殊的业务进行发邮件给上级部门或者主管,以便能做到更及时,无失误。
而对于每个公司,每个业务员信息维护方式一样,基于个人信息的邮箱地址,我们可以自行在发预警的时候也发送邮件。
下面我介绍一下如果自己扩展二开发送邮件功能。(以采购价格失效为例)

下面是可以二开Demo示例

//继承 AbstractWarnServicePlugIn,
//发送邮件,获取默认发送人 //可以使用系统中默认的”邮件服务设置“,配值默认的发件人
ISystemParameterService sysService= Kingdee.BOS.Contracts.ServiceFactory.GetSystemParameterService(this.Context);
DynamicObjectinquirySysParam = sysService.Load(this.Context, 0, 0, "管理系统参数");
string mailFid = "";
if (inquirySysParam != null&&inquirySysParam.DynamicObjectType.Properties.ContainsKey("SendMail"))
mailFid =Convert.ToString(inquirySysParam["SendMail_Id"]);
else
return;
//根据配值ID,获取对应的配值服务信息
//发件人账号、密码、发件地址、SSL等
string strSql =string.Format(@"SELECTFEMAILADDRESS,FUSERNAME,FPASSWORD,TSER.FMAILSERVER,FMESSAGETYPE,FSMTPPORT,FSSLFROM T_BAS_MAILVIRTUALACCOUNT TMAIL
INNER JOIN T_BAS_MAILSERVERTSER ON TMAIL.FMAILSERVER = TSER.FID WHERE TMAIL.FID = {0}", mailFid);
DynamicObjectCollectionmailInfos = DBUtils.ExecuteDynamicObject(this.Context, strSql, null, null,System.Data.CommandType.Text, null);
if (mailInfos == null ||mailInfos.Count <= 0)
return;
DynamicObject mailInfo =mailInfos.FirstOrDefault();
string senderMailAddress =Convert.ToString(mailInfo["FEMAILADDRESS"]);
string title =e.WarnMessage.MobileTitle;
string SMTPHost =Convert.ToString(mailInfo["FMAILSERVER"]);
int port =Convert.ToInt32(mailInfo["FSMTPPORT"]);
bool isSSL =Convert.ToInt32(mailInfo["FSSL"]) == 1;
string userName =Convert.ToString(mailInfo["FUSERNAME"]);
string pwd =DoProclaimText(Convert.ToString(mailInfo["FPASSWORD"]));
//系统对发送消息的用户包装UserWarnMessageCollection,可以获取到对应的用户ID
var lst =e.WarnMessage.UserWarnMessageCollection;
if (lst == null ||lst.Count <= 0)
return;
//根据用户ID,找到用户的Email
string emailSql =string.Format(@"SELECT FUSERID,FEMAIL FROM T_SEC_USER
WHEREFUSERID IN ({0})", string.Join(",", lst.Select(x => x.Key).ToArray()));
DynamicObjectCollectionmailLst = DBUtils.ExecuteDynamicObject(this.Context, emailSql, null, null,System.Data.CommandType.Text, null);

foreach (var item in lst)
{
try
{
List listTo = new List();
long userId = item.Key;
var info = mailLst.Where(x =>Convert.ToInt64(x["FUSERID"]) == userId);
string userEmail = string.Empty;
if (info != null && info.Count() > 0)
userEmail =Convert.ToString(info.FirstOrDefault()["FEMAIL"]);
if (string.IsNullOrEmpty(userEmail))
continue;
listTo.Add(userEmail); //根据用户,对预警信息进行整理。
Kingdee.BOS.Core.Warn.Message.UserWarnMessage msg =item.Value;
string message = string.Join("\n",msg.GetMessageItems().ToList().Select(x => x.MessageEntity asMessageEntity).Select(x => x.Content).ToArray());
//发送邮件
MailUtils.Sendmail(senderMailAddress, null, listTo, title,message, SMTPHost, port, isSSL, null, userName, pwd);
}
catch (Exceptionex)
{
ILogService logService =Kingdee.BOS.Contracts.ServiceFactory.GetLogService(this.Context);
Kingdee.BOS.Core.Log.LogObject log = newKingdee.BOS.Core.Log.LogObject();
log.Description= ex.Message;
logService.WriteLog(this.Context, log);
}
}