如何从Java代码同步产品?

2020-09-15 17:36发布

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

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


嗨,专家!

我们想通过模型层(而不是Jalo)同步Java代码中的某些产品。 我们为所有目录建立了解决方案:

 最终CatalogVersionModel catalogVersion = catalogVersionService.getCatalogVersion(fromCatalog,STAGED);
          最终List 同步= catalogVersion.getSynchronizations();
          for(最终SyncItemJobModel syncItemJob:同步){
              最终SyncItemCronJobModel cronJob = modelService.create(CatalogVersionSyncCronJobModel.class);
              cronJob.setLogToDatabase(Boolean.FALSE);
              cronJob.setLogToFile(Boolean.FALSE);
              cronJob.setForceUpdate(Boolean.FALSE);
              cronJob.setJob(syncItemJob);
              modelService.save(cronJob);
              modelService.refresh(cronJob);
              LOGGER.info("正在生成cronjob:" + cronJob.getCode()+"以同步目录:" + fromCatalog);
              cronJobService.performCronJob(cronJob,true);

  

但是我们需要同步某些产品,而不是所有目录版本。 可能吗? 我们该怎么做?

谢谢。

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

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


嗨,专家!

我们想通过模型层(而不是Jalo)同步Java代码中的某些产品。 我们为所有目录建立了解决方案:

 最终CatalogVersionModel catalogVersion = catalogVersionService.getCatalogVersion(fromCatalog,STAGED);
          最终List 同步= catalogVersion.getSynchronizations();
          for(最终SyncItemJobModel syncItemJob:同步){
              最终SyncItemCronJobModel cronJob = modelService.create(CatalogVersionSyncCronJobModel.class);
              cronJob.setLogToDatabase(Boolean.FALSE);
              cronJob.setLogToFile(Boolean.FALSE);
              cronJob.setForceUpdate(Boolean.FALSE);
              cronJob.setJob(syncItemJob);
              modelService.save(cronJob);
              modelService.refresh(cronJob);
              LOGGER.info("正在生成cronjob:" + cronJob.getCode()+"以同步目录:" + fromCatalog);
              cronJobService.performCronJob(cronJob,true);

  

但是我们需要同步某些产品,而不是所有目录版本。 可能吗? 我们该怎么做?

谢谢。

付费偷看设置
发送
8条回答
梦想连接
1楼 · 2020-09-15 17:57.采纳回答

我们通过将Configurator添加到Sync Job来创建了一个解决方案。 完整示例:

 最终CatalogVersion源= modelService.getSource(stagedCatalogVersionModel);
           最终CatalogVersion目标= modelService.getSource(onlineCatalogVersionModel);
           最终SyncItemJob syncJob = CatalogManager.getInstance()。getSyncJob(源,目标);
           最后的SyncItemCronJob syncnizeJob = syncJob.newExecution();
       最终列表itemPKs = new ArrayList();
        用于(最终ProductModel productModel:productModels)
        {
            最终产品sourceProduct = modelService.getSource(productModel);
            最终的ProductModel targetProductModel = findProductFromOnline(productModel);
            产品targetProduct = null;
            如果(targetProductModel!= null)
            {
                targetProduct = modelService.getSource(targetProductModel);
            }
            itemPKs.add(新PK []
            {sourceProduct.getPK(),targetProduct == null?  null:targetProduct.getPK()});
        }
     
        syncnizeJob.addPendingItems(itemPKs,false);
        syncnizeJob.setConfigurator(new SyncItemCronJob.Configurator()
        {
            @已弃用
            @Override
            公共无效configureCronjob(最终SyncItemCronJob syncItemCronJob,最终SyncItemCopyContext syncItemCopyContext)
            {
            }
     
            公共CompletionInfo getCompletionInfo()
            {
                返回新的SyncItemJob.CompletionInfo(&"配置完整版本sync&",0,0,0,0);
            }
        });
 
    syncJob.perform(synchronizeJob,true);

  

是的,谢谢您的帮助。

软件心理学工程师
2楼-- · 2020-09-15 17:55

是的,谢谢您的回答。 但是de.hybris.platform.catalog.jalo.SyncItemCronJob.addPendingItems(List,boolean)也会同步所有产品目录。

一周热门 更多>