0

一部のコンテンツ (ドキュメント) を単一のドキュメントにマージし、それをフロント エンドの ADF アプリケーションに送り返してユーザーがダウンロードできるようにする必要があるという要件があります。["Doc,ContentID1,ContentID 2","Document,ContentID3,ContentID4"] のような配列リストの形式でパラメーターを受け入れるカスタム サービスを作成しようとしています。DOc と Document はマージされたドキュメントの名前と ContentID1、ContentID2 はマージされるコンテンツであり、新しいドキュメント「Doc」を形成し、ContentID3、ContentID4 はマージされて新しいドキュメント「Document」を形成し、これらの両方のドキュメントがアプリケーションに送り返されます。

カスタム サービスを作成する場合、受け入れるパラメータのタイプをどこで定義できますか。ヘルプ/ポインタをいただければ幸いです。ティア

4

1 に答える 1

2

サービスのパラメーターは、標準の html GET パラメーターに似ています。つまり、単なる文字列です (つまり、答えはノーです。「受け入れるパラメーターのタイプを定義する」ことはできません。それらは常に文字列です)。サービスが呼び出されると、すべてのパラメーターが m_binder で使用可能になります。

あなたの場合、次のように呼び出します:

http://<ucm_host>/<ucm_instance>/idcplg?IdcService=MEGE_DOCUMENTS&merge1=docName1,contentId1,contentId2&merge2=docName2,contentId1,contentId2

カスタム サービス MEGE_DOCUMENTS を m_binder で 2 つのパラメータ - merge1 と merge2 - で実行します。次のように取得できます。

String parameter1 = m_binder.getLocal("merge1");
String parameter2 = m_binder.getLocal("merge2");

その後、parameter1 の値は " docName1,contentId1,contentId2 " になり、parameter2 - " docName2,contentId1,contentId2 "になります。


したがって、このサービスが独立して実行されることになっている場合 (たとえば、ブラウザーから / 別のサービスとして)、パラメーターを反復処理する必要があると思います。たとえば、このように(私はそれが醜いことを知っていますが、あなたの状況でできることはそれだけです):

Map<String, String> params = new HashMap<String,String>(); 
String prefix = "merge"; 
int index = 1; 
boolean hasMoreParams = true; 

while(hasMoreParams) { 
    String paramName = prefix + index;
    if(m_binder.m_localData.containsKey(paramName)) {
        String paramValue = m_binder.getLocal(paramName); 
        params.put(paramName, paramValue); 
        index++; 
    } else { 
        hasMoreParams = false; 
    } 
}

サービスが他のサービス/フィルターによって使用される場合 (つまり、Java コードからのみ呼び出される場合)、サービス呼び出しの前にバインダーのローカル データに任意の Java オブジェクト (HashMap など) を配置してから使用することができます。

m_binder.m_localData.put(<Object>, <Object>);

m_localData と m_binder.putLocal() を混同しないでください。m_localData は Property 変数です (HashTable の拡張)。putLocal() は、String パラメーターを 1 つだけ持つメソッドです。

于 2012-06-11T17:04:28.007 に答える