1

Web サービス経由のテーブルではなく、 Idempiereビジネス モジュール(例: 発注プロセスの作成)を呼び出す必要があります。Idempiereのソース コードを使用せずにこれを行う方法はありますか?RESTful メソッドを使用したくありません。テーブルを直接扱う

4

2 に答える 2

0

org.adempiere.base プラグインから提供サービス インターフェイスを作成し、コード内でこのサービスを呼び出し、クラス MOrder extends X_C_Order およびクラス MOrderLine extends 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 アーキテクチャで使用するには、この Service-Component をインポートするように 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

これを行うことも、複合 Web サービスを使用することもできます。
2番目に安全で効果的な方法だと思います

于 2015-11-25T14:12:09.453 に答える