FileNet: общее количество документов в папке FileNet.

Я работаю над проектом FileNet, где мне нужно отобразить количество документов в папке с именем «Другие». Я могу сделать это легко через CE API, но мне нужно знать, где эта информация хранится в базе данных FileNet.

Количество документов я могу получить из таблицы с именем DocVersion, информация о папке хранится в таблице Container. Мне нужен запрос, который выглядит так:

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

Любая помощь будет высоко ценится.


person user3202144    schedule 03.01.2015    source источник
comment
Пробовали ли вы использовать идентификатор папки (внутренний GUID/UUID) вместо имени?   -  person Marko Bonaci    schedule 04.01.2015


Ответы (6)


Я не пробовал код в приложении, но это будет похоже на ..

SELECT count (*) as Row_Count

FROM Container c, DocVersion d

WHERE c.object_id = d.object_class_id

AND c.name = 'Others'

Надеюсь, это поможет вам с вашей идеей.

person Archangle    schedule 27.01.2015

Ты прав. Документы помещаются в 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.
person swepss    schedule 27.02.2015

Спасибо за ваш запрос, я попробовал. В вашем запросе есть одна проблема. Вы использовали 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.
person bwstudio    schedule 04.01.2017

Это правильный запрос для получения общего количества документов в определенной папке...

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'"

В этом запросе «Ошибка» — это имя папки для подсчета документов....

person Christian Bobadilla    schedule 25.08.2015

Вот еще один пример для прямых запросов к БД (не 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
person Tilo    schedule 07.04.2017

Надеюсь это поможет.

    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");

}
person Ajay Kumar    schedule 29.08.2017
comment
Похоже, вы скопировали это из Интернета. Всегда указывайте источник. - person LarsTech; 18.12.2017
comment
Извини за это. Я скопировал и вставил из своего собственного блога - abcdjavaee .blogspot.com/2017/09/ - person Ajay Kumar; 19.12.2017