同步失败,并带有复合cronjob

2020-09-25 08:13发布

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

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


您好,我们尝试通过复合cronjob来同步目录,但似乎什么也没有发生。复合cronjobs是否存在问题,我们可以深入研究。 谢谢您的帮助

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

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


您好,我们尝试通过复合cronjob来同步目录,但似乎什么也没有发生。复合cronjobs是否存在问题,我们可以深入研究。 谢谢您的帮助

付费偷看设置
发送
3条回答
shere_lin
1楼 · 2020-09-25 08:31.采纳回答

我将其添加为新答案,因为对上一篇文章发表评论的时间太长。 我只是要发送此示例impex:

  INSERT_UPDATE CatalogVersionSyncJob; code [unique = true]; sourceVersion(catalog(id),version); targetVersion(catalog(id),version)
  ; sync Catalog1暂存->在线; Catalog1:暂存; Catalog1:在线
  ; sync Catalog2暂存->在线; Catalog2:暂存; Catalog2:在线

  INSERT_UPDATE CompositeCronJob; code [unique = true]; job(code)
  ;同步两个目录; compositeJobPerformable

  INSERT_UPDATE CompositeEntry; code [unique = true]; compositeCronJob(code)[unique = true]; triggerableJob(code)
  ; Catalog1;同步两个目录;"同步Catalog1暂存->在线"
  ; Catalog2;同步两个目录;"同步Catalog2暂存->在线"

  INSERT_UPDATE触发器; cronJob(code)[unique = true]; cronExpression
  ;同步两个目录; 0 0 0?  * *
  

但是当我尝试运行它时,它无法将 CatalogVersionSyncJob 分配给 CompositeEntry ,因为根据验证器,它不是 TriggerableJob 。 但这是...

CatalogVersionSyncJob 扩展了 SyncItemJob 实现 TriggerableJob

默认的 CompositeEntryJobValidateInterceptor 中存在一个错误,可以对其进行检查

  CompositeModel.getTriggerableJob()实例TriggerableJob
  

这试图将服务层对象与Jalo类进行比较。 它必须是:

  modelService.getSource(compositeModel.getTriggerableJob())实例TriggerableJob
  

我已经在上一个项目中使用我们自己的验证器实现对此进行了修补,然后您可以 安排 CatalogVersionSyncJob ,如我在impex中详细介绍的那样。

例如

  <!-用我们自己的默认Hybris拦截器->
  
  
      
      
      
  

  

和Java

 包my.package.name;
 
  导入de.hybris.platform.cronjob.jalo.Job;
  导入de.hybris.platform.cronjob.jalo.TriggerableJob;
  导入de.hybris.platform.cronjob.model.CompositeEntryModel;
  导入de.hybris.platform.servicelayer.interceptor.InterceptorContext;
  导入de.hybris.platform.servicelayer.interceptor.InterceptorException;
  导入de.hybris.platform.servicelayer.interceptor.ValidateInterceptor;
  导入de.hybris.platform.servicelayer.internal.model.ServicelayerJobModel;
  导入de.hybris.platform.servicelayer.model.ModelService;
 
  导入org.springframework.beans.factory.annotation.Autowired;
 
/**
   * Hybris的替代实现默认可修复错误。
   *
   * Hybris默认拦截器错误地无法将模型转换为
   *项目类似于CompositeJobPerformable。
   *
   * @作者andrew.fletcher
   *
   */
  公共类CompositeEntryJobValidateInterceptor实现ValidateInterceptor  {
 
      @Autowired
      私有ModelService modelService;
 
      @Override
      公共无效onValidate(CompositeEntryModel模型,InterceptorContext ctx)引发InterceptorException {
          如果(model.getTriggerableJob()!= null){
             //这是重要的一行
              作业= modelService.getSource(model.getTriggerableJob());
              如果((!(TriggerableJob的工作实例))
                      &&(!(ServicelayerJobModel的model.getTriggerableJob()实例))){
                  抛出新的InterceptorException(
                          "分配的作业未实现de.hybris.platform.cronjob.jalo.TriggerableJob或不是"的实例
                                  + ServicelayerJobModel.class.getName()+"!");
              }
          }
      }
  }
  
SAP小菜
2楼-- · 2020-09-25 08:33

谢谢您的帮助,能否请您举例说一下。 最好的问候

95年老男孩
3楼-- · 2020-09-25 08:22

复合作业本身不是问题,但我怀疑您是在添加 CronJob 而不是 Job

在此处查看说明 https://answers.sap.com/questions/12761128/calatlog-sync-not-working-after-first-cycle.html?childToView=12792047#answer-12792047

安排 CatalogVersionSyncJob 时,它将在每次运行时创建一个新的 CatalogVersionSyncCronJob ,并正确检查更改。

一周热门 更多>