更新电子邮件和邮件警报通知的目的地详细信息以进行定期计划

2020-09-20 12:34发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


HI,

我们有一个新要求,即用户电子邮件的域要从@ abc123.com 更改 到@ abc.com 。 我们在生产中有400个重复计划,以电子邮件为目的地。 我们还有几百个时间表,其中启用了有关成功和失败状态的通知警报,我们还需要更改电子邮件地址。

我具有Java sdk知识,但是我正在努力寻找合适的查询,因为这似乎是一项艰巨的任务。

请让我们知道java sdk脚本或想法。

致谢

MK

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


HI,

我们有一个新要求,即用户电子邮件的域要从@ abc123.com 更改 到@ abc.com 。 我们在生产中有400个重复计划,以电子邮件为目的地。 我们还有几百个时间表,其中启用了有关成功和失败状态的通知警报,我们还需要更改电子邮件地址。

我具有Java sdk知识,但是我正在努力寻找合适的查询,因为这似乎是一项艰巨的任务。

请让我们知道java sdk脚本或想法。

致谢

MK

付费偷看设置
发送
7条回答
土豆飞人
1楼-- · 2020-09-20 12:58

检查"将目标设置为SMTP":

https://help.sap.com/查看器/0225aa3e7b4b4b17b2d4a882e6f2de96/4.2.5/zh-CN/45a694d86e041014910aba7db0e91070.html

示例代码:

 void configureDestinationToSMTP(IEnterpriseSession enterpriseSession)引发SDKException

     {

       IInfoStore infostore =(IInfoStore)enterpriseSession.getService(" InfoStore");

       IInfoObjects reccuringInfoObjects = infostore.query("从CI_INFOOBJECTS中选择*,其中SI_INSTANCE = 1并且SI_SCHEDULE_STATUS = 9");

       IInfoObject infoObject =(IInfoObject)reccuringInfoObjects.get(0);

     

       ISchedulingInfo scheduleInfo = infoObject.getSchedulingInfo();

       IDestinations目的地= scheduleInfo.getDestinations();

       字符串pluginType =" CrystalEnterprise.Smtp";

       迭代器destinationsIter = destinations.iterator();

       IDestination destination = null;

       同时(destinationsIter.hasNext())

       {

           destination =(IDestination)destinationsIter.next();

           如果(pluginType.equals(destination.getName()))

               打破;

       }

      

       IInfoObjects smtpInfoObjects = infostore.query("从CI_SYSTEMOBJECTS选择SI_DEST_SCHEDULEOPTIONS,SI_PROGID,其中SI_NAME ='CrystalEnterprise.Smtp'");

       IInfoObject smtpinfoObject =(IInfoObject)smtpInfoObjects.get(0);

       IDestinationPlugin destinationPlugin =(IDestinationPlugin)smtpinfoObject;

       ISMTP smtp =(ISMTP)destinationPlugin;

           

       ISMTPOptions smtpOptions =(ISMTPOptions)smtp.getScheduleOptions();

       smtpOptions.setDomainName(" domain");

       smtpOptions.setServerName(" servername");

       smtpOptions.setPort(Integer.parseInt(" 25"));

       smtpOptions.setSMTPAuthenticationType(ISMTPOptions.CeSMTPAuthentication.LOGIN);

       smtpOptions.setSMTPUserName(" username");

       smtpOptions.setSMTPPassword(" password");

       smtpOptions.setSubject("电子邮件主题");

       smtpOptions.setMessage("这是电子邮件。");

       

      

      //在此处更新至地址

       列出toAddresses = smtpOptions.getToAddresses();

       toAddresses.add(" user1@emaildomain.com");

       toAddresses.add(" user2@emaildomain.com");

      

      //在这里更新抄送地址

       列出ccAddresses = smtpOptions.getCCAddresses();

       ccAddresses.add(" user1@emaildomain.com");

       ccAddresses.add(" user2@emaildomain.com");

      

       destination.setFromPlugin(destinationPlugin);

       infoObject.save();

            

     }
 
SAP浪
2楼-- · 2020-09-20 12:50

嗨,

非常感谢您。

但是,您能在设置通知成功和失败通知时对我做同样的通知吗?我的要求是也要修改通知的电子邮件地址。

我碰到了一个叫做INotification的东西,但是没有足够的示例代码。

致谢

MK

CJones
3楼-- · 2020-09-20 12:53

https://help.sap.com/viewer/0225aa3e7b4b4b17b2d4a882e6f2de96/4.2.5/zh-CN/45a29be16e041014910aba7db0e91070.html

通知的示例代码(未测试):

公共无效triggerNotification(IInfoObject作业)抛出SDKException {
               尝试{
                   ISchedulingInfo info = job.getSchedulingInfo();
                   INotifications通知= info.getNotifications();
                  boolean notificationSuccess =(通知!= null &&
                           !notifications.getDestinationsOnSuccess()。isEmpty()&& statistics.getError()== 0);
                   boolean notificationFailure =(通知!= null &&
                          !notifications.getDestinationsOnFailure()。isEmpty()&& statistics.getError()> 0);
                  
                   如果(!notificationSuccess &&!notificationFailure){
                       返回;
                }
                  字符串主题=(notificationSuccess)?  LogMessageUtility.getInstance()。
                          getMessage(" IDS_JOB_NOTIFICATION_SUCCESS",this.job.getTitle()):
              LogMessageUtility.getInstance()。getMessage(" IDS_JOB_NOTIFICATION_FAILURE",this.job.getTitle());
                 
                  字符串消息= createMessage();
                IDestinations目的地=(notificationSuccess)?  notifications.getDestinationsOnSuccess():
                      notifications.getDestinationsOnFailure();
                  for(Object obj:destinations){
                      IDestination dest =(IDestination)obj;
                      如果(!" CrystalEnterprise.Smtp" .equals(dest.getName())){
                          继续;
                      }
               IProperties属性= dest.properties()。getProperties(PropertyIDs.SI_DEST_SCHEDULEOPTIONS,true);
                      props.setProperty(SI_MAIL_SUBJECT,主题);
                      props.setProperty(SI_MAIL_MESSAGE,消息);//在此处设置属性
                  }
                  job.save();
              } catch(SDKException e){
                  抛出e;
              }
             
          } 
亦是此间程序员
4楼-- · 2020-09-20 12:48

如何?

//updateTO地址在这里

       列出toAddresses = smtpOptions.getToAddresses();

       toAddresses.add(" user1@emaildomain.com");

       toAddresses.add(" user2@emaildomain.com");

//在这里更新抄送地址

       列出ccAddresses = smtpOptions.getCCAddresses();

       ccAddresses.add(" user1@emaildomain.com");

       ccAddresses.add(" user2@emaildomain.com"); 
灬番茄
5楼-- · 2020-09-20 12:53

您将运行查询以获取重复计划-从CI_INFOOBJECTS中选择*,其中SI_INSTANCE = 1且SI_SCHEDULE_STATUS = 9

对于列表中的每个IInfoObject,您将调用.getSchedulingInfo()以获取ISchedulingInfo。 然后,您将调用.getDestinations()并为列表中的每个IDestination调用getName()。 如果名称为" CrystalEnterprise.Smtp",则这是发送电子邮件的时间表。 然后,您必须浏览IDestination的属性以更新SI_MAIL_ADDRESSES,SI_MAIL_CC和SI_MAIL_BCC以更新地址。 完成地址更新后,将在IInfoObject上调用.save()将其保存到CMS。

-Dellll

My梦
6楼-- · 2020-09-20 12:59

我还没有专门处理通知,但这是我要做的:

1。 运行一个Query-Builder查询,该查询为具有通知的一个或多个调度获取所有属性。

2。 查看日程表的属性(可能在"日程表信息"中),以查找包含通知信息的属性。

3。 在您的代码中,访问IProperties包,您可以在其中获取/设置有关通知的信息。

4。 完成每个时间表的更新后,请确保调用.save()。

-Dell

一周热门 更多>