【问题标题】:Combine Hybris Impex Remove with Flexible Search将 Hybris Impex Remove 与灵活搜索相结合
【发布时间】:2019-02-22 12:15:55
【问题描述】:

我想使用 Impex 从表中删除一些项目。以下示例不会引发任何错误,但不会删除任何内容。

REMOVE ProductReference;pk[unique=true]
"#% impex.exportItemsFlexibleSearch(""select {pk} from {ProductReference as pr} where {pr.referenceType}=( {{select {pk} from {ProductReferenceTypeEnum as prte} where {prte.code} = 'CROSSELLING'}})"");"

查询按预期产生结果。 REMOVE 与灵活搜索不兼容,还是我遗漏了什么?

问题是,我正在通过 hotfolder 运行导入,并且我想事先删除所有现有项目。欢迎使用替代解决方案。

【问题讨论】:

  • impex.includeSQLData()替换impex.exportItemsFlexibleSearch()
  • @B.M:没有区别。
  • 使用 Impex 删除它的任何具体原因?
  • @HybrisHelp:是的,我想在导入热文件夹之前删除现有引用。

标签: hybris impex flexible-search


【解决方案1】:

导入查询-

REMOVE ProductReference;pk[unique=true]
"#% impex.exportItemsFlexibleSearch(""select {pk} from {ProductReference as pr} where {pr.referenceType}=( {{select {pk} from {ProductReferenceTypeEnum as prte} where {prte.code} = 'CROSSELLING'}})"");"

不工作,因为您没有选中 启用代码执行 复选框。Also,正如@B.M 建议的那样,用impex.includeSQLData()#% impex.initDatabase() 替换脚本不会有任何效果如果 checkbox 没有被选中。

但是,选中复选框并运行上面的脚本会报错,因为在类 @ 中没有名为 exportItemsFlexibleSearch 的方法987654327@(在运行导入时调用)。

exportItemsFlexibleSearch 方法在DeprecatedExporter 中可用(在运行时调用export em>not import)。

现在,在 export 中运行此 impex 脚本将成功执行,而无需任何错误,它不会删除任何内容。相反,它将创建一个带有 impex 和脚本文件的 zip 文件。此脚本文件将具有 impex 标头,用于删除查询返回的项目。使用这个 zip 文件,我们可以有条件地删除这些项目。

转到 HMC -> Cronjobs -> 创建一个 Impex import job 类型的新 cronjob -> 在媒体属性中上传 zip 文件 -> 创建 -> 运行 impex。

这将删除查询返回的项目。

还有另一种删除查询选择的项目的方法。

【讨论】:

  • 其他方式是什么?我遇到了类似的情况
  • @dwergkees : 好的旧 groovy 或 beanshell 脚本应该可以解决问题
  • 谢谢,这值得自己提问。使用 groovy 脚本,我能够删除少量产品,但我会遇到超时和更大尺寸的挥之不去的数据库锁。
  • @dwergkees :我刚刚使用 groovy 脚本创建了 1000 万客户,但没有收到任何错误。我已将相同的 groovy 脚本分配给多个 cronjobs 并同时执行它们。
【解决方案2】:

我们需要导出脚本来生成导入脚本和媒体文件的压缩文件。生成的压缩文件需要在启用代码执行检查的情况下导入

也可以执行 groovy 脚本,例如:

import de.hybris.platform.servicelayer.search.FlexibleSearchQuery;
flexibleSearchService = spring.getBean("flexibleSearchService")
modelService = spring.getBean("modelService")
query = "select {pk} from {trigger}";
flexibleSearchService.search(query).result.each 
{
  modelService.remove(it)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2017-05-06
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多