Oracle UCM -Custom Service创建

时间:2012-06-11 10:59:40

标签: oracle oracle11g oracle-ucm

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

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

1 个答案:

答案 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参数的方法。