问题标签 [intershop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
intershop - Intershop 7.10 - 附属目录视图
我们的客户希望能够向他们的客户以及通过该 URL 访问目录的客户提供一个预配置的 URL(带有 GET 参数的 URL,类似于附属合作伙伴 URL),以便只能看到其中的一部分产品目录。
我注意到在 ICM 7.10 中可以创建关联合作伙伴和生成特定 URL 的程序,还可以定义一个目录视图,将某些产品从目录中排除在目标客户群或客户群中,但这是不可能的从合作伙伴的目录中排除产品。
是否有其他一些开箱即用的平台功能可以让我们的客户根据客户用来访问目录的 URL 分配特定的目录视图,或者我们是否需要实施完全定制的解决方案来实现这一点?
orm - Intershop EDL 代码生成器不会为 PO 对象生成 setter 方法
这是 Intershop 代码生成器的正常和预期行为吗?例如,如果您有以下接口 Test.edl:
它是 PO 对象:
现在,如果您为接口和 orm 类生成代码。您将使用方法 setTest2UUID(String aValue) 进入接口 Test.java,但没有它会生成实现 TestPO.java,并且由于以下编译器错误:
“TestPO 类型必须实现继承的抽象方法 Test.setTest2UUID(String)”
我们在这里做错了什么还是 Intershop 代码生成器中的错误?
谢谢您的回答!
components - ORMObjectListener 与组件框架的注册
我只是尝试使用实例和实现添加我的自定义 ORMObjectListener 的注册,但它不起作用。我可以看到所有系统 ORMObjectListener-s 都注册在盒式 onReadyHook() 方法中,但我喜欢尝试将它们注册到组件框架中。
我在 implementations.component 中添加了以下内容:
并遵循instances.component:
这是 ProductPODeleteListener 的启动方法:
但是我的自定义侦听器未注册(从不调用 start 方法)。我可以在日志文件中看到启动时加载了实现:
我做错什么了吗?
也许缺少的是对 componentMgr.getGlobalComponentInstance("ProductPODeleteListener") 的调用?如此处所述: https: //support.intershop.com/kb/index.php/Display/25G731#Concept-ComponentFramework-InGeneral -> “ComponentFW 将在第一次访问时实例化所有定义的实例。” 我认为不可能向组件框架注册侦听器,因为这些侦听器需要在服务器启动时注册。那是对的吗?
感谢帮助!
gradle - oracle驱动版本如何与版本推荐器确定
从 7.8 版(我认为)开始,版本推荐器会为组件确定不同墨盒的正确版本。过去,您可以通过设置过滤器版本属性来修改其行为,例如,oracle 驱动程序版本:
问题是现在这是如何确定的,是否可以修改这种行为?
intershop - 7.9 中自定义 URLRewrite 规则的问题
目前,我在 ISH 中遇到了一些自定义 URL 重写规则的问题7.9
。
对于我们的某些环境,它运行良好(如本地和测试),但在 ACC 和 PROD 上,它似乎只在系统多次部署/重新启动后不时运行。
我们创建了一个自定义墨盒,其中包含一个文件deploy.gradle
以从原始墨盒urlrewriterules.xml
中排除文件。它们被文件夹中的自定义文件替换。应用的静态规则总是可以正常工作。但是,来自自定义 Java 类的规则有时无法通过返回以下错误来很好地加载:domainsplittings.xml
syndication-targets.properties
share/system/config/cluster
urlrewriterules.xml
RewriteRuleFactoryImpl
[2018-11-07 08:20:37.906 +0100] WARN localhost ES1 appserver0 [ShipSupport-ebusiness-Site] [-] com.intershop.component.urlrewrite.internal.factory.RewriteRuleFactoryImpl [] [Storefront] [wJ5DCcg2CM5DCZPUUqdNu2D2fj8NZHaXjvP9qIZb] [yFAAAFvikjkOsqjA-0-00] "yFAAAFvikjkOsqjA-0-00" An implementation of rewrite rule type 'CustomCategory' does not exist.
urlrewriterules.xml
中将调用此 java 类的部分代码如下:
我们也有在我们自己的墨盒中很好地创建的类,例如CustomCategoryRewriteRule
extends BaseRewriteRule
。为这些频道启用了 URL 重写,我们始终使启用它的频道中的缓存无效。
CustomCategory 的扩展名(在同一墨盒中定义)定义如下:
app-extension.component 也被定义在同一个墨盒中,如下所示:
我们按照这篇文章来确认如何做到这一点:https: //support.intershop.com/kb/index.php/Display/B28069我们在另一个项目中也可以正常工作,但使用的是 Intershop 7.8
。
您对可能的原因有任何想法吗?
谢谢!
intershop - 自定义属性搜索建议
我们需要检索 3 种搜索建议:
- 产品建议
- 类别建议
- 品牌建议
这里需要注意的是,品牌建议应该来自一个名为 的自定义属性Brand
。
到目前为止,我们已经尝试了 2 种不同的方法,但由于不同的原因均未成功:
方法 1 - SF 对象建议搜索
通过使用SF Object Suggest Search
我们几乎得到了我们需要的东西。产品和类别建议按预期工作。问题在于品牌建议。根据文档,品牌建议来自ManufacturerName
属性:
品牌建议是从 SFProductSearch 索引的 ManufacturerName 索引属性中收集的。
除了 Intershop 的一个非常糟糕的做法之外,命名某些东西Brand
实际上是ManufacturerName
我们真正的问题是我们所有的产品都有一个名为的自定义属性Brand
来指定品牌,并且我们使用ManufacturerName
产品的实际制造商的默认字段.
我们想要实现的是,品牌建议是从索引的索引属性中收集的,Brand
而SFProductSearch
不是从索引属性中收集的ManufacturerName
。
该文档还指定它的缺点之一SFObjectSuggestSearch
是它具有:
一组有限的硬编码支持的属性
这使我们相信,永远不可能修改SFObjectSuggestSearch
它以使其按照我们想要的方式运行。所以我们尝试了方法2。
方法 2 - SFProduct Search Suggest
通过使用SFProduct Search Suggest
并将自动建议属性添加到SFProductSearch
产品索引中,我们能够检索我们需要的所有属性。
然而,这种方法的缺点SolrSuggestResultItem
是创建的所有对象都具有 的类型Unspecified
,这使得我们无法以一种很好的方式将产品、类别和品牌组合在一起。
关于这一点的文档非常差/模糊,因为它写道:
搜索索引配置级别的建议索引中的自定义值可以配置带有前缀 SuggestType_ 后跟类型的自定义值。
所以我们怀疑我们必须做点什么,SuggestType_
但我们似乎无法弄清楚。后台的搜索索引配置选项似乎没有提供类似的功能。作为最后的手段,我们还尝试直接对 进行更改,ISH-Config.xml
但是每次构建搜索索引时,这些文件中的任何更改都会被覆盖。
概括
- 方法 1 不成功,因为它建议的是制造商而不是品牌。
- 方法 2 不成功,因为返回
SolrSuggestResultItems
的都是Unspecified
.
有没有办法让这与这些方法中的任何一种一起工作?在这一点上,我们不偏爱方法 1 或 2,因此将不胜感激任何一种方法的解决方案,或对更合适方法的指导。
intershop - 在 Intershop 7.10 中覆盖系统“找不到 URL”模板?
我们正在尝试覆盖“找不到 URL”页面的默认模板。模板名称是 URLError.isml,它位于 sld_system_app 插件中。当我们尝试通过“覆盖现有”向导覆盖模板时,找不到模板,即使 sld_system_app 位于盒式磁带依赖层次结构中:
同时,通常可以覆盖来自同一盒 (sld_system_app) 的任何管道。例如,我们可以覆盖使用 URLError.isml 的 URLMapping.pipeline:
对于位于 sld_system_app 卡式磁带中的任何 ISML 模板,它都是相同的。不能覆盖任何模板。
有什么方法可以覆盖默认的 ISML,还是我们真的需要覆盖管道才能这样做?
更新#1:
在一些工作室重新启动并清理目标并刷新 gradle 依赖项之后,我们已经设法让向导工作。但是,通过向导创建模板,在服务器上部署文件并重新启动服务器后,覆盖仍然不起作用。我们仍在获取系统页面。
这是我们自定义墨盒中的覆盖模板:
这是 Cartridgelist.properties 的内容:
java - 更新产品数量(自定义属性)时出现 OCAException
我们有多个应用程序服务器,有时我们的订单会因 OCAException 而失败。
问题是从外部系统更新产品数量(自定义属性)是我们订单工作流程的一部分,有时会发生这种异常,但并非总是如此。
我已经在这里看到了讨论intershop ORMException could not update - refresh ORMObject,所以我知道这里的问题 - 在其他线程和/或应用程序服务器中更新对象。但是我不明白为什么即使在我们的测试实例中,当更新数量作业正在运行时也会发生此异常,例如在早上 6 点没有发生任何其他事情时 - 没有其他作业正在运行,没有用户活动?
作业本身持续大约 7 秒,它在一个事务管道中执行,该管道迭代 WS 响应对象,然后通过 SKU 从存储库中获取 productBO,更新 Quantity 自定义属性并根据它设置产品离线或在线。
为什么会发生这种情况以及如何避免/修复它?
当系统作业“ProcessProductNotification-TriggerNotificationFromJob”运行并尝试更新 DomainPO 对象时,也会发生相同的异常:
gradle - Gradle 构建脚本文件依赖
作为一个完整的 gradle noob,我在找到将依赖项集成到我的构建过程中的正确方法时遇到了一点问题。
由于我不是 100% 熟悉正确的 gradle 术语,因此我将使用特定于框架的术语和描述。
环境:Gradle-Wrapper (2.11)
InterShop-System with multiple Cartridge-Sets (publishable projects) with multiple Cartridges (publishable subprojects -> 每个弹药筒创建其独立的输出结果,通常是一个 jar 文件和一个 zip 文件)。
正常的java或者项目依赖都没有问题。
我有一个 gradle 脚本,我想在几个不同墨盒的 build.gradle 中使用它,例如 a1、b1、d4。
我的想法是以某种方式将我的脚本发布到 nexus-repository,这将允许我将脚本指定为依赖项。- >问题我不知道如何设置一个内部没有任何java代码并且不基于intershop插件的gradlew项目。有仅用于静态内容(模板、js 等)的 intershop 插件,但这些依赖项会自动部署,在我的情况下这不是必需的,因为仅在构建过程中才需要依赖项。
简短版:
我希望能够调用以下行
在我的几个项目中的 build.gradle 中,每个项目中都没有副本。什么是最好的方法来做到这一点。