在iManage(工地)中查询文档

时间:2015-04-13 21:37:30

标签: imanage worksite-sdk

我正在使用Worksite API查询iManage(版本8.5)中的文档。我在下面列出了我的代码。如果我只使用一个搜索参数,那么代码可以正常工作。但是,如果我添加多个参数,则返回null或无结果(result.Count = 0)

然后我更改了我的代码以使用ManOrQuery类(由我的Worksite API提供,请参阅注释行),但仍然无效。

// Search for documents matching the specified date range.
iManageSearch rds = new iManageSearch(isession);

// Populate searchparameters
IManProfileSearchParameters searchparams = Utility.CreateUnpopulatedProfileParams(idms);

//searchparams.Add(imProfileAttributeID.imProfileCreateDate, dateRange.Value);
//searchparams.Add(imProfileAttributeID.imProfileAuthor, srchKey);
//searchparams.Add(imProfileAttributeID.imProfileFullText, srchKey);
searchparams.Add(imProfileAttributeID.imProfileDocNum, srchKey);
//searchparams.Add(imProfileAttributeID.imProfileDescription, srchKey);

// Search documents
IManDocuments results = rds.GetDocuments(Utility.BuildDatabaseList(isession.Databases), searchparams);

// tried the other way to search document


//QueryBuilder qb = new QueryBuilder();
//ManOrQuery orquery = qb.CreateORQuery;
//qb.AddORSearchFieldValue(orquery, imProfileAttributeID.imProfileDocNum, srchKey);
//qb.AddORSearchFieldValue(orquery, imProfileAttributeID.imProfileAuthor, srchKey);
//qb.AddORSearchFieldValue(orquery, imProfileAttributeID.imProfileFullText, srchKey);
//IManContents results = qb.GetContents(iworkarea, Utility.BuildDatabaseList(isession.Databases), (IManQuery)orquery);
int c = results.Count;

在我的用户界面上,我有一个文本框供用户输入他们的搜索凭据。我想将搜索值与AuthorDocNumberDocTitle以及文档内容进行比较。我的目标是构建像(docAuthor=srchKey OR docNum=srchKey OR docDescription = srchKey ...)这样的查询。我一直在敲我的头,希望有人能帮助我。谢谢。

PS:我在这里也提到了一个帖子How to get information out of iManage / Desksite,但这对我不起作用....

1 个答案:

答案 0 :(得分:1)

我知道自从这个问题发布以来已经有一段时间了,我已经做了一些搜索stackoverflow并且找不到太多帮助我解决这个问题,但是我已经设法编写了一些有用的代码(用于至少我是这样的,我希望如果它来不及帮助你,它可能会帮助别人。

我无法看到您如何在上面的代码中设置数据库,因此可能存在问题 - 因为添加搜索参数的语法似乎是正确的。

<强>更新 我已经与我们的管理员交谈了,看来要进行搜索,这取决于服务器的索引器设置。这可能是您的代码无效的原因。对我来说,我必须从WorkSite服务管理器中的数据库属性中禁用索引器,以便它将使用SQL

            IManDMS dms = (IManDMS)Activator.CreateInstance(Type.GetTypeFromProgID("iManage.ManDMS"));

            IManSession session = dms.Sessions.Add(serverName);
            session.TrustedLogin2(userToken);

            IManDatabase database = session.Databases.ItemByName(libraryName);
            IManProfileSearchParameters searchparameters = dms.CreateProfileSearchParameters();

            // add search parameters            
            // this works (just to prove that we can search for a document)                
            searchparameters.Add(imProfileAttributeID.imProfileDocNum, "4882408");
            searchparameters.Add(imProfileAttributeID.imProfileCreateDate, new DateTime(2015, 04, 8).ToShortDateString());           

            // run the search
            IManContents searchResults = database.SearchDocuments(searchparameters, true);

            // process the results
            foreach (IManDocument item in ((IEnumerable)searchResults).OfType<IManDocument>())
            {   
                // do something with the document

            }

            session.Logout();
            dms.Sessions.RemoveByObject(session);