2017-08-10 34 views
0

我想檢查一個文件是否存在於使用java的documentum中的特定文件夾中。如何在java中運行dql搜索查詢?

以下是我的代碼,

import com.documentum.com.DfClientX; 
import com.documentum.com.IDfClientX; 
import com.documentum.fc.client.DfQuery; 
import com.documentum.fc.client.IDfClient; 
import com.documentum.fc.client.IDfCollection; 
import com.documentum.fc.client.IDfFolder; 
import com.documentum.fc.client.IDfQuery; 
import com.documentum.fc.client.IDfSession; 
import com.documentum.fc.client.IDfSessionManager; 
import com.documentum.fc.common.DfException; 
import com.documentum.fc.common.DfId; 
import com.documentum.fc.common.IDfLoginInfo; 
import com.documentum.operations.IDfDeleteOperation; 

public class CountFiles { 

    // Documentum target repository where the files will be imported 
    private static final String REPO_NAME = "rep"; 



    public static void main(String[] args) throws Exception { 

     try { 
      String username = "user"; 
      String password = "pwd"; 

      System.out.println("Starting to connect ..."); 

      IDfSessionManager sessMgr = createSessionManager(); 
      addIdentity(sessMgr, username, password); 
      IDfSession sess = sessMgr.getSession(REPO_NAME); 
      System.out.println("Successfully connected to the server."); 
      queryDocumentum(sess); 


     } catch(Exception ex) { 
      System.out.println(ex); 
      ex.printStackTrace(); 
     } 
    } 


    private static void queryDocumentum(IDfSession sess) throws DfException { 
    IDfQuery query = new DfQuery(); 
String queryStr= "select count(*) from dm_document WHERE FOLDER ('/XXX/YYY',DESCEND) search document contains 'abc.pdf' "; 
    query.setDQL(queryStr); 
    IDfCollection coll = query.execute(sess,IDfQuery.DF_EXEC_QUERY); 
    while(coll.next()) 
    { 
     System.out.println("Result of method: " + coll.getValueAt(0)); 
    } 
    coll.close(); 
} 
/** 
    * Creates a new session manager instance. The session manager does not have 
    * any identities associated with it. 
    * 
    * @return a new session manager object. 
    * @throws DfException 
    */ 
    private static IDfSessionManager createSessionManager() 
      throws Exception { 
     IDfClientX clientX = new DfClientX(); 
     IDfClient localClient = clientX.getLocalClient(); 
     IDfSessionManager sessMgr = localClient.newSessionManager(); 

     System.out.println("Created session manager."); 

     return sessMgr; 
    } 

    /** 
    * Adds a new identity to the session manager. 
    * 
    */ 
    private static void addIdentity(final IDfSessionManager sm, 
      final String username, final String password) 
      throws Exception { 
     IDfClientX clientX = new DfClientX(); 

     IDfLoginInfo li = clientX.getLoginInfo(); 
     li.setUser(username); 
     li.setPassword(password); 

     // check if session manager already has an identity. 
     // if yes, remove it. 
     if(sm.hasIdentity(REPO_NAME)) { 
      sm.clearIdentity(REPO_NAME); 

      System.out.println("Cleared identity on :" + REPO_NAME); 
     } 

     sm.setIdentity(REPO_NAME, li); 

     System.out.println("Set up identity for the user."); 
    } 

} 

我收到以下異常 - [DM_QUERY_E_SYNTAX]錯誤: 「一個解析器錯誤(語法錯誤)發生在附近」 從dm_document SELECT COUNT(*) 。其中folder( '/ XXX/YYY',下降)搜索文檔中包含 'abc.pdf'」什麼是查詢/代碼問題

回答

0

嗯,很明顯你DQL查詢是錯誤的:?

select count(*) from dm_document WHERE FOLDER ('/XXX/YYY',DESCEND) search document contains 'abc.pdf' 

if yo你只是想檢查路徑/ XXX/YYY中是否存在名爲'abc.pdf'的文檔以及下面的所有文件夾(關鍵字'descend'),那麼DQL應該更像這樣,你不需要全文搜索功能爲:

select count(*) from dm_document where folder('/XXX/YYY', DESCEND) and object_name = 'abc.pdf' 

如果你不知道確切的文件名,你可以使用「喜歡」,例如:

select count(*) from dm_document where folder('/XXX/YYY', DESCEND) and object_name LIKE '%abc.pdf' 
+0

它的工作。感謝Karolbe。 – Moizudddin