1

我需要调用 Idempiere业务模块(例如创建采购订单流程),而不是通过 Web 服务调用表,有没有办法在不通过 Idempiere 的源代码的情况下做到这一点,我不想使用 RESTful 方法直接处理表

4

2 回答 2

2

您可能指的是 iDempiere 的 Web 服务的改进,其中复合(主从)和 CRUD 操作现在是可能的。项目 wiki 上的完整描述: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 }compositeInterface 目标命名空间: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

于 2016-01-02T00:46:41.067 回答
0

您可以使用从 org.adempiere.base 插件创建提供服务接口,在您的代码中调用此服务并调用 MOrder 类扩展 X_C_Order 和 MOrderLine 类扩展 X_C_OrderLine 的构造函数。

这里有来自 IProcessFactory 的示例(您可以像 ICreateOrderFactory 一样创建工厂,或者只是 IInsertFactory(对于通用工厂构造函数,您可以设置表 id):

这是一个接口声明

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 文件以导入此服务组件:(我的工厂 xml 始终使用 osgi-inf 目录)

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

您可以这样做,也可以使用复合网络服务。
我认为第二种最安全有效的方法

于 2015-11-25T14:12:09.453 回答