我有一个要求,我需要将一些内容(文档)合并到一个 单个文档并将其发送回前端ADF应用程序以供用户使用 下载它。 我正在尝试创建一个接受该参数的自定义服务 数组列表的形式 - 类似于[“Doc,ContentID1,ContentID 2“,”Document,ContentID3,ContentID4“],其中DOc和Document将是其名称 合并后的文档和ContentID1,ContentID2将是要合并的内容 并形成一个新文档“Doc”和ContentID3,ContentID4将被合并并形成 一份新文件“文件”,这两份文件都被送回了 应用
如果我创建了一个自定义服务,我可以在哪里定义它的参数类型 接受。 任何帮助/指针表示赞赏。 TIA
答案 0 :(得分: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个参数的自定义服务MEGE_DOCUMENTS - merge1和merge2。 你可以这样得到它们:
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)放在binder的本地数据中然后使用它:
m_binder.m_localData.put(<Object>, <Object>);
不要将m_localData与m_binder.putLocal()混淆。 m_localData是一个Property变量(HashTable的扩展)。 putLocal()是一个只有一个String参数的方法。