我需要通过网络服务调用Idempiere 商业模块(例如创建采购订单流程),不是表,有没有办法在不通过的情况下执行此操作Idempiere的源代码,我不想使用直接处理表的RESTful方法
答案 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
您可以执行此操作,也可以使用复合网络服务 我认为第二种最安全有效的方法