【问题标题】:FileNet: Count of total documents in a FileNet FolderFileNet:FileNet 文件夹中的文档总数
【发布时间】:2015-01-03 05:21:23
【问题描述】:

我正在处理一个 FileNet 项目,我需要在一个名为 Others 的文件夹中显示文档的数量。我可以通过 CE API 轻松做到这一点,但我需要知道这些信息在 FileNet DB 中的存储位置。

我可以从名为DocVersion 的表中获取文档计数,文件夹信息存储在Container 表中。我需要的是这样的查询:

SELECT COUNT(*) FROM DOCVERSION D, CONTAINER C WHERE --container name is 'Others'

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过使用文件夹 ID(fn 内部 GUID/UUID)而不是名称?

标签: java db2 filenet-p8 filenet-content-engine


【解决方案1】:

你是对的。文档放在 DocVersion 中,文件夹放在 Container 表中。但是放置在关系表中的文档和文件夹之间的链接。

如果您使用 FileNet API,您可以尝试使用下一个 FN 查询

Select d.Id from Document d
where d.This INFOLDER '/bla/bla/bla'

INSUBFOLDER 运算符。在下一步中,您将需要计算结果集。

如果你想直接从数据库中获取信息,你可以尝试使用下一个查询。

select count(r.Object_Id) from DocVersion d, Container c, Relationship r
where r.Head_Id = c.Object_Id
and d.Object_Id = r.Tail_Id --// you can exclude this if in the Folder filed only documents and not custom objects.
and c.Object_Id = {folder-id} --// or use c.Name = 'Other' - you can't use PathName field in DB query.

【讨论】:

    【解决方案2】:

    感谢您的询问,我已经尝试过了。您的查询中有一个问题。您以错误的方向使用了 head_id 和 tail_id。正确的查询应该如下。

    select count(r.Object_Id) 
    from DocVersion d, Container c, Relationship r 
    where r.Tail_Id = c.Object_Id and d.Object_Id = r.Head_Id --// you can exclude this if in the Folder filed only documents and not custom objects. 
    and c.Object_Id = {folder-id} --// or use c.Name = 'Other' - you can't use PathName field in DB query.
    

    【讨论】:

      【解决方案3】:

      我还没有尝试过应用程序中的代码,但是,它会像..

      SELECT count (*) as Row_Count
      
      FROM Container c, DocVersion d
      
      WHERE c.object_id = d.object_class_id
      
      AND c.name = 'Others'
      

      希望这对您的想法有所帮助。

      【讨论】:

        【解决方案4】:

        这些是获取特定文件夹中文档总量的正确查询...

        db2 "select count(*) from OSDBUSER.Relationship r, OSDBUSER.Container c, OSDBUSER.DOCVERSION d where r.Tail_Id = c.Object_Id and r.Head_Id = d.Object_Id and c.name = 'Error'"
        

        在此查询中,“错误”是要计算文档数的文件夹的名称......

        【讨论】:

          【解决方案5】:

          这里有更多示例,用于直接 DB 查询(不是 ACCE/FEM SQL)来查找未归档的文档,但可以更改为查找特定文件夹中归档的对象。 (将where rel.Head_id IS NULL 更改为您的文件夹)

          在 MS SQL 上测试和运行。

          --Count by Doc Class
          SELECT Doc.object_class_id, count(distinct Doc.version_series_id) as '# Docs' , ClassDef.symbolic_name as ClassName
          FROM DocVersion doc
          LEFT JOIN Relationship rel ON doc.object_id = rel.Head_id
          INNER JOIN ClassDefinition ClassDef ON doc.object_class_id = ClassDef.[object_id]
          where rel.Head_id IS NULL and doc.is_current=1
          group by Doc.object_class_id, ClassDef.symbolic_name
          order by '# Docs' desc
          
          --by creator
          SELECT Doc.creator, count(distinct Doc.version_series_id) as '# Docs'
          FROM DocVersion doc
          LEFT JOIN Relationship rel ON doc.object_id = rel.Head_id
          where rel.Head_id IS NULL and doc.is_current=1
          group by Doc.creator 
          order by '# Docs' desc
          
          --list Of Docs
          SELECT Doc.creator, doc.create_date, doc.u32_documenttitle , doc.modify_date ,doc.modify_user , ClassDef.symbolic_name as ClassName
          FROM DocVersion doc
          LEFT JOIN Relationship rel ON doc.object_id = rel.Head_id
          INNER JOIN ClassDefinition ClassDef ON doc.object_class_id = ClassDef.[object_id]
          where rel.Head_id IS NULL and doc.is_current=1
          order by Doc.create_date
          

          【讨论】:

            【解决方案6】:

            希望这会有所帮助。

                public void countobjectsinAllOS() {
                Connection conn = Factory.Connection.getConnection(ConfigInfo.CE_URI);
                Domain domain = Factory.Domain.fetchInstance(conn, null, null);
            
                Iterator<ObjectStoreSet> it = domain.get_ObjectStores().iterator();
            
                int countofos = 0;
                while (it.hasNext()) {
            
                    ObjectStore os = (ObjectStore)it.next();
                    String osname = os.get_DisplayName();
            
                    System.out.println("Working on Object Store " +osname);
                    countofos++;
                    countObjectsInAnOS(osname);
                }
                System.out.println("\n\n");
                //System.out.println("Number of Object Stores found in doamin >>\t" + domain.get_Name() + "\t<< is " + countofos);
            }
            
            public void countObjectsInAnOS(String OSName) {
                Connection conn = Factory.Connection.getConnection(ConfigInfo.CE_URI);
                Domain domain = Factory.Domain.fetchInstance(conn, null, null);
                ObjectStore os = Factory.ObjectStore.fetchInstance(domain, OSName, null);
                // Create a SearchSQL instance and specify the SQL statement (using the 
                // helper methods).
                SearchSQL sqlObject = new SearchSQL();
                sqlObject.setSelectList("*");
                //sqlObject.setMaxRecords(10);
                sqlObject.setWhereClause("f.This INSUBFOLDER '/'");
                sqlObject.setFromClauseInitialValue("Folder", "f", false);
                domain.get_ObjectStores();
                // Uncomment below lines for Documents    
                //    sqlObject.setSelectList("d.DocumentTitle, d.Id");
                //    sqlObject.setMaxRecords(20);
                //    sqlObject.setFromClauseInitialValue("Document", "d", false);  
                // Check the SQL statement.          
            
                //Uncomment to see the SQL
            
                //System.out.println("SQL: " + sqlObject.toString());
            
                // Create a SearchScope instance. (Assumes you have the object store 
                // object.)
                Boolean continuable = new Boolean(true);
            
                // Set the page size (Long) to use for a page of query result data. This value is passed 
                // in the pageSize parameter. If null, this defaults to the value of 
                // ServerCacheConfiguration.QueryPageDefaultSize.
                Integer myPageSize = new Integer(10);
            
                // Specify a property filter to use for the filter parameter, if needed. 
                // This can be null if you are not filtering properties.
                //        PropertyFilter myFilter = new PropertyFilter();
                //        int myFilterLevel = 1;
                //        myFilter.setMaxRecursion(myFilterLevel);
                //        myFilter.addIncludeType(new FilterElement(null, null, null, FilteredPropertyType.ANY, null));
            
                // Set the (Boolean) value for the continuable parameter. This indicates 
                // whether to iterate requests for subsequent pages of result data when the end of the 
                // first page of results is reached. If null or false, only a single page of results is 
                // returned.
                // Execute the fetchObjects method using the specified parameters.
                //IndependentObjectSet myObjects = search.fetchObjects(sqlObject, myPageSize, myFilter, continuable);
                SearchScope searchScope = new SearchScope(os);
                RepositoryRowSet rowSet = searchScope.fetchRows(sqlObject, myPageSize, null, continuable);
                long count = 0;
                Iterator<RepositoryRow> it = rowSet.iterator();
                while (it.hasNext()) {
                    it.next();
                    count++;
                }
                //System.out.println("Total number of Documents >>\t\t" + count + "\n\n");
                System.out.println("Total number of Folders >>\t\t" + count + "\n\n");
            
            }
            

            【讨论】:

            猜你喜欢
            • 2017-12-25
            • 2013-05-17
            • 2018-03-04
            • 2010-09-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多