首页 > 解决方案 > Impex 旧 pk 在将自定义组件导入内容槽时格式错误

问题描述

我正在尝试在 Hybris 6.4 中创建一个 impex 脚本,以便通过 Hybris 管理控制台中的 ImpEx 导入工具将我的自定义组件放入 ContentSlot。当我运行 impex 时,我得到了old pk has wrong format: 'catalogVersion(CatalogVersion.catalog(Catalog.id[default=apparel-ukContentCatalog])', type code is not an integer.[HY--1]错误。我已使用 BackOffice 应用程序来验证我的自定义组件是否存在。我需要怎么做才能将我的组件分配给 ContentSlot 而不会遇到old pk has wrong format: 'catalogVersion(CatalogVersion.catalog(Catalog.id[default=apparel-ukContentCatalog])', type code is not an integer.[HY--1]错误?

这是我的impex。

<header line is blank>
$contentCatalog=apparel-ukContentCatalog
$catalogVersion=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Online])[default=$contentCatalog:Online]
INSERT_UPDATE ContentSlot;$catalogVersion;uid[unique=true];active;cmsComponents(uid, catalogVersion)
;;SearchResultsGridSlot;true;MyComponent:$catalogVersion

请注意,我还尝试了 $catalogVersion 宏的这种变体:

$catalogVersion=catalogversion(catalog(id[default=$contentCatalog]),version[default='Online'])[unique=true,default=$contentCatalog:Online]

这是 impex 尝试的堆栈跟踪。

ERROR [hybrisHTTP27] (000002C5) [CronJobErrorHandler] line 5 at main script: Exception ocurred, will ignore: de.hybris.platform.impex.jalo.ImpExException: old pk has wrong format: 'catalogVersion(CatalogVersion.catalog(Catalog.id[default=apparel-ukContentCatalog])', type code is not an integer.[HY--1]
de.hybris.platform.impex.jalo.ImpExException: old pk has wrong format: 'catalogVersion(CatalogVersion.catalog(Catalog.id[default=apparel-ukContentCatalog])', type code is not an integer.
    at de.hybris.platform.impex.jalo.imp.DefaultImportProcessor.processInsertUpdateLine(DefaultImportProcessor.java:483) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.DefaultImportProcessor.processItemData_Impl(DefaultImportProcessor.java:259) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.DefaultImportProcessor.processItemData(DefaultImportProcessor.java:158) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.ImpExImportReader.processLine(ImpExImportReader.java:718) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.ImpExImportReader.readLine(ImpExImportReader.java:518) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.Importer.doImport(Importer.java:251) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.Importer.importNextInternal(Importer.java:757) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.Importer.importNext(Importer.java:738) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.cronjob.ImpExImportJob.doImport(ImpExImportJob.java:290) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.cronjob.ImpExImportJob.performJob(ImpExImportJob.java:248) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.cronjob.ImpExImportJob.performCronJob(ImpExImportJob.java:115) [impexserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.execute(Job.java:1390) [processingserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.performImpl(Job.java:814) [processingserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.performImpl(Job.java:732) [processingserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.perform(Job.java:644) [processingserver.jar:?]
    at de.hybris.platform.servicelayer.cronjob.impl.DefaultCronJobService.performCronJob(DefaultCronJobService.java:86) [processingserver.jar:?]
    at de.hybris.platform.servicelayer.impex.impl.DefaultImportService.importData(DefaultImportService.java:437) [impexserver.jar:?]
    at de.hybris.platform.servicelayer.impex.impl.DefaultImportService.importDataUsingStandardImpex(DefaultImportService.java:360) [impexserver.jar:?]
    at de.hybris.platform.servicelayer.impex.impl.DefaultImportService.importData(DefaultImportService.java:104) [impexserver.jar:?]
    at de.hybris.platform.hac.facade.impl.DefaultImpexFacade.importData(DefaultImpexFacade.java:60) [classes/:?]
    at de.hybris.platform.hac.controller.console.ImpexController.handleImpexImportContent(ImpexController.java:189) [classes/:?]

为了进一步调查,我尝试从 $catalogVersion 宏定义中删除唯一属性,以查看是否可以找到任何线索,但这里遇到的错误似乎支持了在 $catalogVersion 宏上存在唯一键属性的必要性.

没有 catalogVersion 唯一属性的 Impex

<header line is blank>
$contentCatalog=apparel-ukContentCatalog
$catalogVersion=catalogVersion(CatalogVersion.catalog(Catalog.id[default=$contentCatalog]),CatalogVersion.version[default=Online])[default=$contentCatalog:Online]
INSERT_UPDATE ContentSlot;$catalogVersion;uid[unique=true];active;cmsComponents(uid, catalogVersion)
;;SearchResultsGridSlot;true;MyComponent:$catalogVersion

没有唯一属性的 impex 的堆栈跟踪

ERROR [hybrisHTTP29] (000002C4) [CronJobErrorHandler] line 5 at main script: Exception ocurred, will ignore: de.hybris.platform.impex.jalo.imp.AmbiguousItemException: More than one item of type ContentSlot found for unique qualifiers {uid2=SearchResultsGridSlot}[HY-0]
de.hybris.platform.impex.jalo.imp.AmbiguousItemException: More than one item of type ContentSlot found for unique qualifiers {uid2=SearchResultsGridSlot}
    at de.hybris.platform.impex.jalo.imp.DefaultExistingItemResolver.resolveByQuery(DefaultExistingItemResolver.java:204) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.DefaultExistingItemResolver.findExisting(DefaultExistingItemResolver.java:133) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.DefaultImportProcessor.processItemData_Impl(DefaultImportProcessor.java:213) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.DefaultImportProcessor.processItemData(DefaultImportProcessor.java:158) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.ImpExImportReader.processLine(ImpExImportReader.java:718) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.imp.ImpExImportReader.readLine(ImpExImportReader.java:518) ~[impexserver.jar:?]
    at de.hybris.platform.impex.jalo.Importer.doImport(Importer.java:251) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.Importer.importNextInternal(Importer.java:757) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.Importer.importNext(Importer.java:738) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.cronjob.ImpExImportJob.doImport(ImpExImportJob.java:290) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.cronjob.ImpExImportJob.performJob(ImpExImportJob.java:248) [impexserver.jar:?]
    at de.hybris.platform.impex.jalo.cronjob.ImpExImportJob.performCronJob(ImpExImportJob.java:115) [impexserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.execute(Job.java:1390) [processingserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.performImpl(Job.java:814) [processingserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.performImpl(Job.java:732) [processingserver.jar:?]
    at de.hybris.platform.cronjob.jalo.Job.perform(Job.java:644) [processingserver.jar:?]
    at de.hybris.platform.servicelayer.cronjob.impl.DefaultCronJobService.performCronJob(DefaultCronJobService.java:86) [processingserver.jar:?]
    at de.hybris.platform.servicelayer.impex.impl.DefaultImportService.importData(DefaultImportService.java:437) [impexserver.jar:?]
    at de.hybris.platform.servicelayer.impex.impl.DefaultImportService.importDataUsingStandardImpex(DefaultImportService.java:360) [impexserver.jar:?]
    at de.hybris.platform.servicelayer.impex.impl.DefaultImportService.importData(DefaultImportService.java:104) [impexserver.jar:?]
    at de.hybris.platform.hac.facade.impl.DefaultImpexFacade.importData(DefaultImpexFacade.java:60) [classes/:?]
    at de.hybris.platform.hac.controller.console.ImpexController.handleImpexImportContent(ImpexController.java:189) [classes/:?]

标签: hybrisimpex

解决方案


您的目录版本与示例不同。你试试下面的代码。

$contentCatalog=apparel-ukContentCatalog
$catalogVersion=catalogversion(catalog(id[default=$contentCatalog]),version[default=Online])[unique=true,default=$contentCatalog:Online]
INSERT_UPDATE ContentSlot;$catalogVersion;uid[unique=true];active;cmsComponents(uid, $catalogVersion)
;;SearchResultsGridSlot;true;MyComponent

在标准系统中为这个插槽工作 impex。

$contentCatalog=apparel-ukContentCatalog
$catalogVersion=catalogversion(catalog(id[default=$contentCatalog]),version[default=Online])[unique=true,default=$contentCatalog:Online]
INSERT_UPDATE ContentSlot;$catalogVersion;uid[unique=true];active;cmsComponents(uid, $catalogVersion)
;;SearchResultsGridSlot;true;SearchResultsGrid

推荐阅读