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

想要把BIPubliser 生成的报表作为邮件附件发送,首先要知道报表路径,我们知道报表路径是存在 ps_cdm_list 和 ps_cdm_file_list 两张表里的,当报表发布之后,我们可以用SQL语句
将报表在服务器的路径查出来。

  1. SQlExec("select contentid from ps_cdm_file_list where prcsinstance=:1 and cdm_file_type=:2",&Process_instance,&Report_file_type,&Contenid);
  2. /参数1是Process_instance ,参数2 是报表文件类型;返回报表内容ID;
  3. /然后跟剧&Contenid 查出报表在服务器的路径;
  4. SQLExec("SELECT outputdir  FROM PS_CDM_LIST where prcsinstance = :1 and  contentid=:2  ", &Process_Instance, &Contenid, &OutPutDir);
得到报表文件路径之后,我们就可以讲报表文件作为邮件附件发出了。然而,AE发布报表的时间较长,当我们的代码执行完成之后报表才发布。这样的话当我们查询PS_CDM_List的时候
就得不到报表路径。为了解决这个问题,我们可以把当前线程睡眠一段时间,
  1. Local string &ReportName = "Z_RPT_PRB";
  2. &OUTTYPE = "PDF";
  3. rem SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1", &Process, &en);
  4. &contenid = 0;
  5. While (&contenid = 0)
  6. SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1 and cdm_file_type=:2 ", &Process, &OUTTYPE, &contenid);
  7. &s = 40;
  8. GetJavaClass("java.lang.Thread").sleep(1000 * &s);
  9. End-While;
  10. SQLExec("SELECT outputdir FROM PS_CDM_LIST where prcsinstance = :1 and contentid=:2 ", &ProcessInstance, &contenid, &OutPutDir);
直至XMLP进程将报表发布。然后再查询报表路径,就可以实现我们的目的了。完整代码如下
  1. import PT_MCF_MAIL:*;

  2. &ProcessInstance = Z_TEST_AET.PROCESS_INSTANCE;

  3. Local string &Process = String(&ProcessInstance);

  4. Local string &ReportName = "Z_RPT_PRB";
  5. &OUTTYPE = "PDF";
  6. rem SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1", &Process, &en);
  7. &contenid = 0;
  8. While (&contenid = 0)
  9. SQLExec("SELECT contentid FROM ps_cdm_file_list where prcsinstance = :1 and cdm_file_type=:2 ", &Process, &OUTTYPE, &contenid);
  10. &s = 40;
  11. GetJavaClass("java.lang.Thread").sleep(1000 * &s);
  12. End-While;
  13. SQLExec("SELECT outputdir FROM PS_CDM_LIST where prcsinstance = :1 and contentid=:2 ", &ProcessInstance, &contenid, &OutPutDir);

  14. Local string &AttachmentUrl = "/ps/psreports/" | &OutPutDir | "/" | &ReportName | "." | "pdf";

  15. Local PT_MCF_MAIL:MCFOutboundEmail &email = create PT_MCF_MAIL:MCFOutboundEmail();
  16. &FromAddress = <A href="mailto:AAAA@sina.cn">AAAA@sina.cn</A>;
  17. &ToList = "XXXXXXXx@163.com";
  18. &Subject = "Test Report as Attachment";
  19. &email.From = &FromAddress;
  20. &email.Recipients = &ToList;
  21. &email.Subject = &Subject;
  22. &email.Text = "Test";
  23. Local string &plain_text = "Test Add Attachment!";
  24. Local PT_MCF_MAIL:MCFBodyPart &text = create PT_MCF_MAIL:MCFBodyPart();
  25. &text.Text = &plain_text;

  26. rem Local PT_MCF_MAIL:MCFBodyPart &attach1 = create PT_MCF_MAIL:MCFBodyPart();
  27. rem &attach1.SetAttachmentContent("Ocean Wave.jpg", %FilePath_Relative, "Ocean Wave.jpg", "Ocean Wave", "", "");
  28. /* %FilePath_Relative indicates the file is available at Appserver's FILES?
  29. dierctory */

  30. Local PT_MCF_MAIL:MCFBodyPart &attach2 = create PT_MCF_MAIL:MCFBodyPart();
  31. &attach2.SetAttachmentContent(&AttachmentUrl, %FilePath_Absolute, "Attachment.pdf", "Attachmen", "", "");
  32. /* The Sample.jpg is available in the "public" folder of my-server machine*/


  33. Local PT_MCF_MAIL:MCFMultipart &mp = create PT_MCF_MAIL:MCFMultipart();
  34. &mp.AddBodyPart(&text);
  35. rem &mp.AddBodyPart(&attach1);
  36. &mp.AddBodyPart(&attach2);

  37. &email.MultiPart = &mp;

  38. Local integer &res = &email.Send();

  39. Local boolean &done;

  40. Evaluate &resp
  41. When %ObEmail_Delivered
  42. /* every thing ok */
  43. &done = True;
  44. Break;

  45. When %ObEmail_NotDelivered
  46. /*-- Check &email.InvalidAddresses, &email.ValidSentAddresses
  47. and &email.ValidUnsentAddresses */
  48. &done = False;
  49. Break;

  50. When %ObEmail_PartiallyDelivered
  51. /* Check &email.InvalidAddresses, &email.ValidSentAddresses
  52. and &email.ValidUnsentAddresses; */
  53. &done = True;
  54. Break;

  55. When %ObEmail_FailedBeforeSending
  56. /* Get the Message Set Number, message number;
  57. Or just get the formatted messages from &email.ErrorDescription,
  58. &email.ErrorDetails;*/

  59. &done = False;
  60. Break;
  61. End-Evaluate;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值