參數服務類似於標準的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參數的方法。
感謝您的解決方案,但我正在尋找的是可以有超過2個文件合併所需要的,所以在組件末端或在自定義java代碼中,我將如何獲得這些參數。在這種情況下:http:////idcplg?IdcService = MEGE_DOCUMENTS&merge1 = docName1,contentId1,contentId2&merge2 = docName2,contentId1,contentId2&merge3 = doc3,C3,C4&merge4 = Dco4,c5,c6等等。我知道這個服務有多個參數嗎? –
user964819
您能否指定您的服務將被調用的方式? 如果它將被其他服務/過濾器(即從Java代碼調用)使用,您可以在服務調用之前將任何Java對象(例如HashMap)放入活頁夾的本地數據中,然後使用它。如果這個服務應該獨立運行(例如從瀏覽器/作爲一個單獨的服務) - 恐怕你將不得不遍歷參數。 –
謝謝米哈伊爾,這項服務將從ADF應用程序的自定義Java代碼中調用,所以我想把Java對象的第一種方法可能適用於我。說什麼? – user964819