apache ofbiz: включить существующую службу в собственный компонент

Я хотел бы использовать существующую службу (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>

Но может быть есть решение попроще (может есть способ указать местоположение сервиса в request-map?).


person Mike75    schedule 04.11.2015    source источник


Ответы (1)


Ошибка org.ofbiz.webapp.control.RequestHandlerException: Unknown request [createInvoice]; this request does not exist or cannot be called directly. указывает на то, что компонент не может найти указанный запрос, это не связано с определением сервиса. В определении запроса вы указываете, какое событие или услугу необходимо обработать.

Ваша форма вызывает запрос, который либо должен быть указан в файле controller.xml вашего компонента, либо запрос формы должен указывать на уже существующий запрос бухгалтерского компонента.

Вам не нужно копировать определение службы, чтобы использовать его в своем компоненте, OFBiz регистрирует все определения службы по имени и обрабатывает их для всех компонентов.

person Michael Brohl    schedule 04.11.2015
comment
Спасибо. Я добавил связанный запрос, и это сработало! - person Mike75; 03.01.2016