使用RIDC在webcenter portal集成ECM的文档查询功能

2014-11-28(Friday) 00:00

需求:

标准的document service很不灵活,实际开发中少不了要开发定制。那么问题来了,通过RIDC很灵活的查询出了需要的文档,如何集成到portal上去呢

分析:

使用RIDC查询出需要的文档,存放在POJO等数据模型中 利用POJO生成dataControl,开发taskflow等UI层 将以上功能开发成为extend.spaces.webapp,扩展到webcenter spaces 以下主要展现第一步:通过RIDC查询及POJO生成数据模型。

技术实现:

  • 使用RIDC查询文档

以下是主要查询方法, query传入的即是ECM的queryText,例如: dDocType PJT-INTERFACE-DOC 通过拼接好需要的查询条件以及用户便可以查询出文档。

    public List<Document> search(String username, String query) {
        ServiceResponse serviceResponse = null;
        List<Document> list = new ArrayList<Document>();
        try {
            if (query == null) {
                return list;
            }
    IdcClient client = getIdcClient();
            DataBinder dataBinderReq = client.createBinder();
        dataBinderReq.putLocal("IdcService", "GET_SEARCH_RESULTS");
            dataBinderReq.putLocal("QueryText", query.toString());
            dataBinderReq.putLocal("ResultCount", "100");
            serviceResponse =
                client.sendRequest(new IdcContext(username), dataBinderReq);
            DataBinder dataBinderRes = serviceResponse.getResponseAsBinder();
            DataResultSet resultSet =
            dataBinderRes.getResultSet("SearchResults");
            for (DataObject dataObject : resultSet.getRows()) {
                Document d = new Document();
                d.setContentId(dataObject.get("dDocName"));
                d.setDocumentId(dataObject.get("dID"));
                d.setOwner(dataObject.get("dDocAuthor"));
                d.setTitle(dataObject.get("dDocTitle"));
                d.setDocType(dataObject.get("dDocType"));
                d.setXspeciality(dataObject.get("xSPECIALTY"));
                d.setXrcvMajor(dataObject.get("xRCV_MAJOR"));
                Date date = dataObject.getDate("dInDate");
                SimpleDateFormat sf = new SimpleDateFormat("yyyy/mm/dd");
                String format = sf.format(date);
                d.setDindate(format);
                list.add(d);
        }
        } catch (Exception ex) {
             System.out.println("Error Search: " + ex.getMessage());
        } finally {
            if (serviceResponse != null) {
                serviceResponse.close();
            }
        }
        return list;
    } //

其中Document.java即是POJO类

    public class Document {
        private String contentId;
        private String documentId;
        private String owner;
        private String title;
        private String doctype;
        private String securitygroup;
        private String dindate;
        private String xDesignPhase;
        private String xspeciality;//send
        private String xrcvMajor;//receive
    ......get set accessor......
    }//end class

创建facade类:MyCondition.java,主要是调用search方法接受RIDC查询的结果集,生成dataControl供UI层使用。参考代码如下:

    public class MyCondition {
        private static final ADFLogger LOGGER = ADFLogger.createADFLogger(MyCondition.class);
        private ArrayList<Document> receiveDocumentList;
        private ArrayList<Document> sendDocumentList;
        public MyCondition() {
        this.receiveDocumentList=new ArrayList<Document>();
        this.sendDocumentList=new ArrayList<Document>();
        }
        /*******
        * 初始化,调用RIDC API查询出文档数据集
        * *****/
        public String init(){
        LOGGER.severe("start init....");
        Object userId = JSFUtils.resolveExpression("#{securityContext.userName}");
        Object projectCode = JSFUtils.resolveExpression("#{pageFlowScope.inputProjectCode}");
        List<String> spcCode = (List<String>)(JSFUtils.resolveExpression("#{pageFlowScope.spcCode}")==null?null:JSFUtils.resolveExpression("#{pageFlowScope.spcCode}"));
        if(userId==null||"".equals(userId)){
            LOGGER.severe("userId is null ");
            FacesMessage msg = new FacesMessage("用户为空请重试!");
            JSFUtils.getFacesContext().addMessage(null, msg);
            return "NO";
        }
        if(projectCode==null||"".equals(projectCode)){
            LOGGER.severe("projectCode is null ");
            FacesMessage msg = new FacesMessage("项目ID为空请重试!");
            JSFUtils.getFacesContext().addMessage(null, msg);
            return "NO";
        }
        /******
         * 
         * 生成发出专业SQL,生成接受专业SQL
         * 
         * ****/
        String sendSql=" xSPECIALTY <matches> `NULL` ";
        String receiveSql=" xRCV_MAJOR <matches> `NULL` ";
        if(spcCode==null||spcCode.size()==0){
            LOGGER.severe("spcCode is null or size is 0");  
            return "NO";
        }
        for(int i=0;i<spcCode.size();i++){
            sendSql=sendSql+" <OR> "+"xSPECIALTY <matches> `"+spcCode.get(i)+"` ";
            receiveSql=receiveSql+" <OR> "+"xRCV_MAJOR <matches> `"+spcCode.get(i)+"` ";
        }
        sendSql="("+sendSql+") <AND> dDocType <matches> `PJT-INTERFACE-DOC` <AND> xPROJECT_NUM <starts> `"+projectCode+"`";
        receiveSql="("+receiveSql+") <AND> dDocType <matches> `PJT-INTERFACE-DOC` <AND> xPROJECT_NUM <starts> `"+projectCode+"`";
        LOGGER.severe("sendSql:"+sendSql);
        LOGGER.severe("receiveSql:"+receiveSql);
        /*** 
         * 查询当前用户在该项目中的专业(ME,EL等),拼接QueryText
         * dDocType <matches> `PJT-INTERFACE-DOC`
         * ******/
        UCMAdapter ap=new UCMAdapter();
        this.sendDocumentList = (ArrayList<Document>)ap.search(userId.toString(), sendSql);
        this.receiveDocumentList = (ArrayList<Document>)ap.search(userId.toString(), receiveSql);
        LOGGER.severe("success init...YES.");
        return "YES";
    }

    public void setReceiveDocumentList(ArrayList<Document> receiveDocumentList) {
        this.receiveDocumentList = receiveDocumentList;
    }

    public ArrayList<Document> getReceiveDocumentList() {
        return receiveDocumentList;
    }

    public void setSendDocumentList(ArrayList<Document> sendDocumentList) {
        this.sendDocumentList = sendDocumentList;
    }

    public ArrayList<Document> getSendDocumentList() {
        return sendDocumentList;
    }
}

Category: webcenter Tagged: ECM


定制webcenter的people connection组件

2014-10-23(Thursday) 00:00

需求:

webcenter的people connection类似于微博的关注粉丝功能,现在需要利用程序让某一用户自动关注一批人员。比如某一用户所在项目(PROJECT1)下有10个成员,则该用户进入portal的时候默认就展示其项目下的10个成员在某一分组(PROJECT1)下。

分析:

根据项目PROJECT1可以查询出10个成员名; 利用API将10个成员添加到Connections中; 利用API创建Connection list,也即是分组名(PROJECT1); 将10个成员的Connection 添加到分组PROJECT1中。

技术实现:

  • 根据项目PROJECT1可以查询出10个成员名; 在AMimpl中创建查询成员名方法以List返回结果。 public List getAllMembersByProjectId(String proId){ List result=new ArrayList(); result.add("CG02"); result.add("CG03"); result.add("CG04"); result.add("CG05"); result.add("pierre"); result.add("weblogic"); //TODO …

Category: webcenter Tagged: peopleConnection

Read More

webcenter portal调用document service

2014-08-26(Tuesday) 00:00

平台: webcenter 1.8

Webcenter Contents端配置

步骤:

  • 进入webcenter contents http://192.168.15.251:16210/cs/idcplg
  • 展开administration目录
  • Admin Server节点
  • Component Manager 里
  • 开启以下特性FrameworkFolders(原Floder_g,已被FrameworkFolders替代),WebCenterConfigure, DynamicConverter
  • 重启UCM

Webcenter Portal端配置

进入Portal管理界面:

  • 切换到Portals标签
  • Tools and Services菜单里
  • 设置Documents服务为enabled即可

Category: webcenter Tagged: documentservice

Read More

创建Content Repository时出现错误

2014-08-25(Monday) 00:00

创建Content Repository时出现错误:

NOTE:

  • Unable to load content server metadata model using GET_DOC_METADATA_INFO.
  • Permission denied. Address 'XX.XX.XX.XX' is not an allowable remote socket address

解决方法:

  • 找到config.cfg
    /u02/app/oraucm/fmw_home/user_projects/domains/ecm_domain/ucm/cs/config/config.cfg

  • 在SocketHostAddressSecurityFilter值加上|*.*.*.* SocketHostAddressSecurityFilter=127.0.0.1|192.168.15 …

Category: webcenter Tagged: webcenter

Read More

"Jive Forums admin console 管理员账户密码重置"

2013-03-20(Wednesday) 00:00

需求:

webcenter集成AD 之后发现Discussion控件用不了,使用weblogic账号也无法进入Jive forums的控制台,但是weblogic控制台可以登录。于是想重置Jive Forums的管理账号密码。

分析:

修改jiveuser表将管理员账户密码更新即可。

技术实现:

  • 连接到FM_DISCUSSIONS schema,查询jiveuser,发现passwordhash字段值变为了"-"字符,可能是集成AD之后这边的数据被覆盖了,按字段名推测密码应该是hash加密后的密文,于是将weblogic用户的密码通过MD5加密生成密文更新该字段,重启webcenter之后,问题解决。

附: //password: Welcome1 update jiveuser set passwordhash='b56e0b4ea4962283bee762525c2d490f' where username='weblogic'

Category: webcenter Tagged: Jive

Read More
Page 1 of 1