我们正在尝试在最新的Intershop 7.9上为Backoffice设置自定义应用程序类型,但是当我们尝试运行DBInit时,我们会收到以下错误:
[xx.xxx.webshop.dbinit.data.organization.Channel,xx.xxx.webshop.dbinit.data.organization.ChannelLocalization,ProcessChannel-DBInit] Version:null] com.intershop.beehive.core.pipelet.pipeline.ExecutePipeline [] [Unknown] [scHAqDIFBIAAAAFjuxgo2CwQ] [RbPAqDIFZAUAAAFjuxgo2CwQ] "main" ISH-CORE-2490: Synchronous called pipeline 'CreateSalesChannel-CreateChannelObjects' of application 'CustomShop@Custom-Site (app=xx.CustomBackoffice)' has finished with exception: com.intershop.beehive.core.internal.pipeline.PipelineCallStackException: com.intershop.beehive.core.capi.pipeline.PipelineExecutionException: Required input parameter 'AppID' missing of pipeline 'ProcessApplication defined in cartridge sld_ch_base' and start node 'Create'!
调用通道的preparer时出现错误。 这是用于创建后台应用程序类型的apps.component文件的相关代码:
<instance name="xx.CustomBackoffice.ApplicationTypes" with="AppRegistry"/>
<!-- register the custom B2CBackoffice to the Enterprise Backoffice of your choose -->
<fulfill of="intershop.EnterpriseBackoffice" requirement="namedObject">
<instance with="NamedObject">
<fulfill value="ChannelBackofficeApplicationType_52" requirement="name"/>
<fulfill with="xx.CustomBackoffice" requirement="object"/>
</instance>
</fulfill>
<!-- declaration of the cartridge list -->
<instance with="CartridgeListProvider" name="xx.CustomBackoffice.Cartridges">
<!-- Derive from standard webshop if you want to use the same cartridges like standard webshop -->
<fulfill requirement="parent" with="intershop.B2CBackoffice.Cartridges" />
</instance>
<!-- definition of the application type -->
<instance with="ApplicationType" name="xx.CustomBackoffice">
<fulfill requirement="id" value="xx.CustomBackoffice" />
<fulfill requirement="urlIdentifier" value="a1-shop-bo" />
<fulfill requirement="cartridgeListProvider" with="xx.CustomBackoffice.Cartridges" />
<fulfill requirement="namedObject">
<instance with="NamedObject">
<fulfill requirement="name" value="ChannelApps_52" />
<!-- register the AppRegistry containing all storefront applications of this channel -->
<fulfill requirement="object" with="xx.CustomBackoffice.ApplicationTypes" />
</instance>
</fulfill>
<!-- put additional NamedObjects, that are required by the particular business features -->
<!-- ... -->
</instance>
<!-- registration of the application type to the AppEngine -->
<fulfill of="AppEngine" with="xx.CustomBackoffice" requirement="app"/>
<fulfill requirement="namedObject" of="xx.CustomBackoffice" with="intershop.EnterpriseBackoffice.RESTAPI"/>
一旦删除自定义后台应用程序类型的定义,dbinit就会成功运行,并且前端应用程序类型的创建没有错误。
任何人都可以看到错误的位置或者为后台定义自定义应用程序类型的正确方法吗?
我追踪了这个问题,在apps.component中定义了2个自定义应用程序类型,尤其是这部分:
<!-- register the custom B2CBackoffice to the Enterprise Backoffice of your choose -->
<fulfill of="intershop.EnterpriseBackoffice" requirement="namedObject">
<instance with="NamedObject">
<fulfill value="ChannelBackofficeApplicationType_52" requirement="name"/>
<fulfill with="xx.CustomBackoffice" requirement="object"/>
</instance>
</fulfill>
如果我添加第二个BO应用程序类型并尝试使用与上面相同的代码将intershop.EnterpriseBackoffice注册(只需将xx.CustomBackoffice更改为xx2.CustomBackoffice):
<!-- register the custom B2CBackoffice to the Enterprise Backoffice of your choose -->
<fulfill of="intershop.EnterpriseBackoffice" requirement="namedObject">
<instance with="NamedObject">
<fulfill value="ChannelBackofficeApplicationType_52" requirement="name"/>
<fulfill with="xx2.CustomBackoffice" requirement="object"/>
</instance>
</fulfill>
上面显示的错误是运行DBinit。所以,如果有人知道热,为后台定义和注册2个自定义应用程序类型(xx.CustomBackoffice和xx2.CustomBackoffice)?
答案 0 :(得分:2)
从我所看到的,有一个cartridgeListProvider引用:
<fulfill requirement="cartridgeListProvider" with="a1.ShopBackoffice.Cartridges" />
指向 a1.ShopBackoffice.Cartridges ,但我在您的codep代码段中找不到匹配的实例化名称。相反,我只看到 xx.CustomBackoffice.Cartridges 。
答案 1 :(得分:2)
此处的示例应该有效:
<!-- ************************************************************************************ -->
<!-- * Application Type "custom.B2BBackoffice" * -->
<!-- ************************************************************************************ -->
<instance name="custom.B2BBackoffice.ApplicationTypes" with="AppRegistry"/>
<fulfill of="intershop.EnterpriseBackoffice" requirement="namedObject">
<instance with="NamedObject">
<fulfill value="customChannelBackofficeApplicationType_52" requirement="name"/>
<fulfill with="custom.B2BBackoffice" requirement="object"/>
</instance>
</fulfill>
<instance with="CartridgeListProvider" name="custom.B2BBackoffice.Cartridges">
<fulfill value="ish_app_bo_common" requirement="selectedCartridge"/>
<fulfill value="ish_app_bo_stock" requirement="selectedCartridge"/>
<fulfill value="ish_app_bo_user" requirement="selectedCartridge"/>
<fulfill value="sld_ch_consumer_plugin" requirement="selectedCartridge"/>
<fulfill with="intershop.EnterpriseBackoffice.Cartridges" requirement="parent"/>
</instance>
<instance with="ApplicationType" name="custom.B2BBackoffice">
<fulfill value="custom.B2BBackoffice" requirement="id"/>
<fulfill value="b2b" requirement="urlIdentifier"/>
<fulfill with="custom.B2BBackoffice.Cartridges" requirement="cartridgeListProvider"/>
<fulfill requirement="namedObject">
<instance with="NamedObject">
<fulfill requirement="name" value="ChannelApps_52" />
<fulfill requirement="object" with="custom.B2BBackoffice.ApplicationTypes" />
</instance>
</fulfill>
</instance>
<fulfill requirement="namedObject" of="intershop.EnterpriseBackoffice">
<instance with="NamedObject">
<fulfill requirement="name" value="ChannelApps_52" />
<fulfill requirement="object" with="custom.B2BBackoffice.ApplicationTypes" />
</instance>
</fulfill>
<fulfill of="AppEngine" with="custom.B2BBackoffice" requirement="app"/>
<fulfill requirement="namedObject" of="custom.B2BBackoffice" with="intershop.EnterpriseBackoffice.RESTAPI"/>
可以使用如下语句在数据库中完成对实际站点的分配:
UPDATE application SET appid = 'custom.B2BBackoffice' WHERE urlidentifier IN ('IshB2B', 'IshB2B-xxxb2b');
答案 2 :(得分:2)
显然有一种方法可以为BO定义两种应用程序类型并将它们分配给不同的通道。 这是一种解决方法,但它有效...
您必须在apps.component中定义两个BO应用程序类型,并将它们分配给两个通道,例如:
<fulfill requirement="app" with="channel1.Web" of="channel1.Backoffice.ApplicationTypes"/>
<fulfill requirement="app" with="channel1.Web" of="channel2.Backoffice.ApplicationTypes"/>
<fulfill requirement="app" with="channel2.Web" of="channel1.Backoffice.ApplicationTypes"/>
<fulfill requirement="app" with="channel2.Web" of="channel2.Backoffice.ApplicationTypes"/>
添加post DBinit preparer,它执行SQL以将channel1 BO应用程序更新为channel1.Backoffice(因为DBInit channel1将被分配给channel2.Backoffice):
UPDATE application SET appid = 'channel1.Backoffice' WHERE urlidentifier IN ('channel1', 'channel1-organization-channel1');