我想使用现有服务(createInvoice
)
在新的ofbiz
组件中。
在我的componentScreens.xml中,我添加了: 一节
<decorator-section name="body">
<section>
<widgets>
<screenlet title="${uiLabelMap.AccountingCreateNewSalesInvoice}">
<include-form name="NewSalesInvoice" location="component://accounting/widget/InvoiceForms.xml"/>
</screenlet>
<screenlet title="${uiLabelMap.AccountingCreateNewPurchaseInvoice}">
<include-form name="NewPurchaseInvoice" location="component://accounting/widget/InvoiceForms.xml"/>
</screenlet>
</widgets>
</section>
</decorator-section>
显示正常。但NewPurchaseInovice-form
调用服务createInvoice
,该服务在/accounting/servicedef/services_invoice.xml中定义
因此,当我的表单调用服务ofbiz
时,表示错误:
org.ofbiz.webapp.control.RequestHandlerException: Unknown request [createInvoice]; this request does not exist or cannot be called directly.
一种解决方案可能是重新定义(复制)我的组件中的服务 services.xml中:
<service name="createInvoice" engine="simple" default-entity-name="Invoice"
location="component://accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml" invoke="createInvoice">
<description>Create Invoice Record</description>
<permission-service service-name="acctgInvoicePermissionCheck" main-action="CREATE"/>
<auto-attributes mode="INOUT" include="pk" optional="true"/>
<auto-attributes mode="IN" include="nonpk" optional="true"/>
<override name="invoiceTypeId" mode="IN" optional="false"/>
<override name="partyIdFrom" mode = "IN" optional="false"/>
<override name="partyId" mode = "IN" optional="false"/>
<override name="description" allow-html="safe"/>
<override name="invoiceMessage" allow-html="safe"/>
</service>
但也许有一个更简单的解决方案(也许有一种方法 在请求映射中指定服务的位置?)。
答案 0 :(得分:2)
错误org.ofbiz.webapp.control.RequestHandlerException: Unknown request [createInvoice]; this request does not exist or cannot be called directly.
表示组件找不到指定的请求,而不是服务定义。在请求定义中,您可以指定必须处理哪些事件或服务。
您的表单调用请求,要么在组件的controller.xml中指定,要么表单的请求必须指向已存在的会计组件的请求。
您不必复制服务定义以在您的组件中使用它,OFBiz按名称注册所有服务定义并为所有组件处理它们。