IDempiere服务集成

时间:2015-10-13 12:25:55

标签: adempiere idempiere

我需要通过网络服务调用Idempiere 商业模块(例如创建采购订单流程),不是表,有没有办法在不通过的情况下执行此操作Idempiere的源代码,我不想使用直接处理表的RESTful方法

2 个答案:

答案 0 :(得分:1)

您可能指的是iDempiere Web服务的改进,现在可以进行复合(主 - 细节)和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} 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

答案 1 :(得分: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文件以导入它 Service-Component :(我总是使用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

您可以执行此操作,也可以使用复合网络服务 我认为第二种最安全有效的方法