【问题标题】:Oracle UCM -Custom Service creationOracle UCM - 创建自定义服务
【发布时间】:2012-06-14 19:23:47
【问题描述】:

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

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

【问题讨论】:

    标签: oracle oracle11g oracle-ucm


    【解决方案1】:

    服务的参数类似于标准 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)放入 binder 的本地数据中,然后使用它:

    m_binder.m_localData.put(<Object>, <Object>);
    

    不要将 m_localData 与 m_binder.putLocal() 混淆。 m_localData 是一个属性变量(HashTable 的扩展)。 putLocal() 是一种只有一个字符串参数的方法。

    【讨论】:

    • 感谢您的解决方案,但我正在寻找的是合并可能需要超过 2 个文档,因此在组件端或自定义 java 代码中我将如何获取这些参数.在这种情况下:http:////idcplg?IdcService=MEGE_DOCUMENTS&merge1=docName1,contentId1,contentId2&merge2=docName2,contentId1,contentId2&merge3=doc3,C3,C4&merge4=Dco4,c5,c6 等等。所以我怎么会知道这个服务有多个参数?
    • 您能否具体说明您的服务将如何被调用?如果它将被其他服务/过滤器使用(即从 java 代码调用),您可以在服务调用之前将任何 java 对象(例如 HashMap)放入活页夹的本地数据中,然后使用它。如果该服务应该独立运行(例如,从浏览器/作为单独的服务)-恐怕您必须遍历参数。
    • 感谢 Mikhail,此服务将从 ADF 应用程序的自定义 Java 代码中调用,所以我想第一种放置 Java 对象的方法可能对我有用。怎么说?
    • 我试图将 java 对象推送到 binder 的本地数据中,但它似乎只接受 String 值。还有其他方法可以实现吗?
    • 只使用 binder 的 m_localData 变量(该类型是 HashTable 的扩展),而不是 putLocal() 方法:m_binder.m_localData.put(, );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2014-03-15
    • 2020-10-02
    • 2021-09-28
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多