2012-06-11 54 views
0

我有一個要求,我需要將某些內容(文檔)合併到一個 單個文檔中,並將其發回給用戶的前端ADF應用程序,以便 下載它。 我正在嘗試創建一個自定義服務,它將接受陣列列表的 表單中的參數 - 類似[「Doc,ContentID1,ContentID 2」,「Document,ContentID3,ContentID4」],其中DOc和Document將名稱爲 的合併文檔和ContentID1,ContentID2將被合併的內容 並形成一個新文檔「Doc」和ContentID3,ContentID4將被合併並形成 一個新文檔「Document」,並且這兩個文檔都是發送回 應用程序。Oracle UCM定製服務創建

如果我創建一個自定義服務,我可以在哪裏定義接受哪種類型的參數 。 任何幫助/指針表示讚賞。 TIA

回答

2

參數服務類似於標準的HTML GET參數,即它們只是字符串(所以答案是否定的,你不能「定義什麼類型的參數不會接納」 - 他們總是 )。一旦調用服務,所有參數在m_binder中都可用。

在你的情況下調用,比如:

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

將運行定製服務MEGE_DOCUMENTS有兩個參數 - merge1和merge2 - 在m_binder。 你可以讓他們像這樣:

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

之後參數1將有值 「docName1,contentId1,contentId2」 和參數2 - 「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參數的方法。

+0

感謝您的解決方案,但我正在尋找的是可以有超過2個文件合併所需要的,所以在組件末端或在自定義java代碼中,我將如何獲得這些參數。在這種情況下:http:// //idcplg?IdcService = MEGE_DOCUMENTS&merge1 = docName1,contentId1,contentId2&merge2 = docName2,contentId1,contentId2&merge3 = doc3,C3,C4&merge4 = Dco4,c5,c6等等。我知道這個服務有多個參數嗎? – user964819

+1

您能否指定您的服務將被調用的方式? 如果它將被其他服務/過濾器(即從Java代碼調用)使用,您可以在服務調用之前將任何Java對象(例如HashMap)放入活頁夾的本地數據中,然後使用它。如果這個服務應該獨立運行(例如從瀏覽器/作爲一個單獨的服務) - 恐怕你將不得不遍歷參數。 –

+0

謝謝米哈伊爾,這項服務將從ADF應用程序的自定義Java代碼中調用,所以我想把Java對象的第一種方法可能適用於我。說什麼? – user964819