IDempiere Сервисная интеграция

Мне нужно вызывать бизнес-модули Idempiere (например, процесс создания заказа на покупку), а не таблицы через веб-сервисы. Есть ли способ сделать это без прохождения исходного кода Idempiere, я не хочу использовать методы RESTful, которые будут иметь дело с таблицами напрямую

2 ответа

Вы, вероятно, имеете в виду улучшения веб-служб iDempiere, в которых теперь возможны составные (master-detail) и CRUD-действия. Полное описание в вики проекта: http://wiki.idempiere.org/en/NF1.0_Web_Services_Improvements Ниже я вставляю результаты https://test.idempiere.org/ADInterface/services

Доступные SOAP-сервисы: CompositeService

compositeOperation

Endpoint address: http://test.idempiere.org/ADInterface/services/compositeInterface

WSDL: { http://idempiere.org/ADInterface/1_0} clusterInterface Целевое пространство имен: http://idempiere.org/ADInterface/1_0 ModelADService

setDocAction
createUpdateData
getList
readData
createData
runProcess
queryData
deleteData
updateData

Endpoint address: http://test.idempiere.org/ADInterface/services/ModelADService

WSDL: { http://idempiere.org/ADInterface/1_0} ModelADService Целевое пространство имен: http://idempiere.org/ADInterface/1_0

Доступные службы RESTful: Адрес конечной точки: http://test.idempiere.org/ADInterface/services/rest WADL: http://test.idempiere.org/ADInterface/services/rest?_wadl

Вы можете использовать создание интерфейса предоставления службы из плагина org.adempiere.base, вызывать этот сервис внутри своего кода и вызывать конструктор для класса MOrder extends X_C_Order и для класса MOrderLine расширяет X_C_OrderLine.

Здесь у вас есть пример из IProcessFactory (вы можете создать свою фабрику как ICreateOrderFactory или просто IInsertFactory (для универсального конструктора фабрики вы можете установить идентификатор таблицы):

Это объявление интерфейса

public interface IProcessFactory {
    /**
     * Create new process instance
     * @param className
     * @return new process instance
     */
  public ProcessCall newProcessInstance(String className);
    }

Это метод вызова

    public class ProcessFactory implements IProcessFactory {
    @Override
    public ProcessCall newProcessInstance(String className) {
        if (className.equals("com.com.nexus.webservice.client.process.IntegratorWS"))
            return new IntegratorWS();
        else
            return null;
    }
}

Теперь вам нужно создать.xml этой фабрики следующим образом: (обратите внимание на предоставленный интерфейс)

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.nexus.integrator.ProcessFactory">
<implementation class="com.nexus.webservice.client.process.ProcessFactory"/>
<property name="service.ranking" type="Integer" value="5"/>
<service>
<provide interface="org.adempiere.base.IProcessFactory"/>
</service>
</scr:component>

Чтобы использовать это в архитектуре OSGI, вам необходимо настроить файл MANIFEST для импорта этого компонента службы: (я всегда использую каталог osgi-inf для своих фабрик xml)

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: com.nexus.webservice.client
Bundle-SymbolicName: com.nexus.webservice.client;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: Macrosoftware
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Require-Bundle: org.adempiere.base

Сервисный компонент: OSGI-INF/ProcessFactory.xml

Import-Package: org.osgi.framework

Вы можете сделать это, или вы можете использовать композитный веб-сервис.
Я считаю второй самый безопасный и эффективный метод

Другие вопросы по тегам