【问题标题】:How to run dql search query in java?如何在 java 中运行 dql 搜索查询?
【发布时间】:2017-08-10 14:41:50
【问题描述】:

我想使用 Java 检查文件是否存在于 documentum 的特定文件夹中。

以下是我的代码,

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 WHERE FOLDER ('/XXX/YYY',DESCEND) 搜索中选择计数 (*) 附近发生解析器错误(语法错误)文档包含“abc.pdf””。查询/代码中的问题是什么?

【问题讨论】:

    标签: java documentum dfc webtop


    【解决方案1】:

    嗯,显然你的 DQL 查询是错误的:

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

    如果您只想检查路径 /XXX/YYY 和下面的所有文件夹(关键字“descend”)中是否存在名为“abc.pdf”的文档,那么 DQL 应该更像这样,您不需要全文搜索功能:

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

    如果您不知道确切的文件名,可以使用“LIKE”,例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2017-02-09
      • 2016-06-11
      • 2017-03-02
      相关资源
      最近更新 更多