0

我有一个要求,我需要将一些内容(文档)合并到一个文档中并将其发送回前端 ADF 应用程序供用户下载。我正在尝试创建一个自定义服务,它将接受数组列表形式的参数 - 类似于 ["Doc,ContentID1,ContentID 2","Document,ContentID3,ContentID4"], DOc 和 Document 将是合并文档的名称和 ContentID1、ContentID2 将是要合并的内容并形成一个新文档“Doc”,而 ContentID3、ContentID4 将被合并并形成一个新文档“Document”,这两个文档都将被发送回应用程序。

如果我创建一个自定义服务,我可以在哪里定义它将接受什么类型的参数。任何帮助/指针表示赞赏。TIA

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

将使用 m_binder 中的 2 个参数(merge1 和 merge2)运行自定义服务 MEGE_DOCUMENTS。你可以像这样得到它们:

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 是一个属性变量(HashTable 的扩展)。putLocal() 是一种只有一个 String 参数的方法。

于 2012-06-11T17:04:28.007 回答