壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 646|回复: 3

AE中将BIPublisher 生成的报表作为邮件附件发送

[复制链接]
发表于 2013/5/8 11:01:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
想要把BIPubliser 生成的报表作为邮件附件发送,首先要知道报表路径,我们知道报表路径是存在 ps_cdm_list 和 ps_cdm_file_list 两张表里的,当报表发布之后,我们可以用SQL语句
将报表在服务器的路径查出来。
  • SQlExec("select contentid from ps_cdm_file_list where prcsinstance=:1 and cdm_file_type=:2",&Process_instance,&Report_file_type,&Contenid);
  • /参数1是Process_instance ,参数2 是报表文件类型;返回报表内容ID;
  • /然后跟剧&Contenid 查出报表在服务器的路径;
  • SQLExec("SELECT outputdir  FROM PS_CDM_LIST where prcsinstance = :1 and  contentid=:2  ", &Process_Instance, &Contenid, &OutPutDir);


[color=rgb(51, 102, 153) !important]复制代码

得到报表文件路径之后,我们就可以讲报表文件作为邮件附件发出了。然而,AE发布报表的时间较长,当我们的代码执行完成之后报表才发布。这样的话当我们查询PS_CDM_List的时候
就得不到报表路径。为了解决这个问题,我们可以把当前线程睡眠一段时间,
  • Local string &ReportName = "Z_RPT_PRB";
  • &OUTTYPE = "PDF";
  • rem SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1", &Process, &en);
  • &contenid = 0;
  • While (&contenid = 0)
  • SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1 and cdm_file_type=:2 ", &Process, &OUTTYPE, &contenid);
  • &s = 40;
  • GetJavaClass("java.lang.Thread").sleep(1000 * &s);
  • End-While;
  • SQLExec("SELECT outputdir FROM PS_CDM_LIST where prcsinstance = :1 and contentid=:2 ", &ProcessInstance, &contenid, &OutPutDir);

[color=rgb(51, 102, 153) !important]复制代码

直至XMLP进程将报表发布。然后再查询报表路径,就可以实现我们的目的了。完整代码如下
  • import PT_MCF_MAIL:*;
  • &ProcessInstance = Z_TEST_AET.PROCESS_INSTANCE;
  • Local string &Process = String(&ProcessInstance);
  • Local string &ReportName = "Z_RPT_PRB";
  • &OUTTYPE = "PDF";
  • rem SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1", &Process, &en);
  • &contenid = 0;
  • While (&contenid = 0)
  • SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1 and cdm_file_type=:2 ", &Process, &OUTTYPE, &contenid);
  • &s = 40;
  • GetJavaClass("java.lang.Thread").sleep(1000 * &s);
  • End-While;
  • SQLExec("SELECT outputdir FROM PS_CDM_LIST where prcsinstance = :1 and contentid=:2 ", &ProcessInstance, &contenid, &OutPutDir);
  • Local string &AttachmentUrl = "/ps/psreports/" | &OutPutDir | "/" | &ReportName | "." | "pdf";
  • Local PT_MCF_MAIL:MCFOutboundEmail &email = create PT_MCF_MAIL:MCFOutboundEmail();
  • &FromAddress = <A href="mailto:AAAA@sina.cn">AAAA@sina.cn</A>;
  • &ToList = "XXXXXXXx@163.com";
  • &Subject = "Test Report as Attachment";
  • &email.From = &FromAddress;
  • &email.Recipients = &ToList;
  • &email.Subject = &Subject;
  • &email.Text = "Test";
  • Local string &plain_text = "Test Add Attachment!";
  • Local PT_MCF_MAIL:MCFBodyPart &text = create PT_MCF_MAIL:MCFBodyPart();
  • &text.Text = &plain_text;
  • rem Local PT_MCF_MAIL:MCFBodyPart &attach1 = create PT_MCF_MAIL:MCFBodyPart();
  • rem &attach1.SetAttachmentContent("Ocean Wave.jpg", %FilePath_Relative, "Ocean Wave.jpg", "Ocean Wave", "", "");
  • /* %FilePath_Relative indicates the file is available at Appserver's FILES?
  • dierctory */
  • Local PT_MCF_MAIL:MCFBodyPart &attach2 = create PT_MCF_MAIL:MCFBodyPart();
  • &attach2.SetAttachmentContent(&AttachmentUrl, %FilePath_Absolute, "Attachment.pdf", "Attachmen", "", "");
  • /* The Sample.jpg is available in the "public" folder of my-server machine*/
  • Local PT_MCF_MAIL:MCFMultipart &mp = create PT_MCF_MAIL:MCFMultipart();
  • &mp.AddBodyPart(&text);
  • rem &mp.AddBodyPart(&attach1);
  • &mp.AddBodyPart(&attach2);
  • &email.MultiPart = &mp;
  • Local integer &res = &email.Send();
  • Local boolean &done;
  • Evaluate &resp
  • When %ObEmail_Delivered
  • /* every thing ok */
  • &done = True;
  • Break;
  • When %ObEmail_NotDelivered
  • /*-- Check &email.InvalidAddresses, &email.ValidSentAddresses
  • and &email.ValidUnsentAddresses */
  • &done = False;
  • Break;
  • When %ObEmail_PartiallyDelivered
  • /* Check &email.InvalidAddresses, &email.ValidSentAddresses
  • and &email.ValidUnsentAddresses; */
  • &done = True;
  • Break;
  • When %ObEmail_FailedBeforeSending
  • /* Get the Message Set Number, message number;
  • Or just get the formatted messages from &email.ErrorDescription,
  • &email.ErrorDetails;*/
  • &done = False;
  • Break;
  • End-Evaluate;


[color=rgb(51, 102, 153) !important]复制代码


发表于 2013/7/17 22:15:55 | 显示全部楼层
把我写的贴出来,也要注明出处嘛

点评

低调低调,维护执法队的形象  发表于 2013/7/18 15:40
需要执法队上么?  发表于 2013/7/18 06:37
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 03:30 , Processed in 0.012301 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表