使用SearchSQL时如何连接Document和ClassDefinition对象?

问题描述

我正在将FileNet P8 Content Engine 5.5.x与Java API一起使用SearchSQL来构建即席查询。基于Document类创建选择语句很简单:

SearchSQL sql = new SearchSQL();
String selectList = "d.This,d.Id,d.Name,d.ClassDescription";
sql.setSelectList(selectList);
sql.setFromClauseInitialValue("Document","d",true);
SearchScope scope = new SearchScope(conn.getObjectStore());
RepositoryRowSet rows = scope.fetchRows(sql,8,null,null);

注意:上面的语句使用的是ClassDescription对象,您可以“使用”该对象,但它需要导航该对象以获取SymbolicName。您还必须格外小心,并精心设计属性过滤器,以免造成往返服务器的往返。

但是,将联接添加到ClassDefinition类失败:

SearchSQL sql = new SearchSQL();
String selectList = "d.This,true);
sql.setFromClauseAdditionalJoin(JoinOperator.INNER,"ClassDefinition","cd","d.This",JoinComparison.EQUAL,"cd.Id",false);
SearchScope scope = new SearchScope(conn.getObjectStore());
RepositoryRowSet rows = scope.fetchRows(sql,null);

注意:此版本与第一个版本存在相同的问题。

问题是从Document类中用作联接变量(“ d.This”),我尝试过的所有操作都引发了某种类型的SQL语法异常。最重要的是,如果我可以访问Oracle数据库,我相信联接很简单。

SELECT dv.object_id,dv.u2e_documenttitle,cd.symbolic_name 
FROM DocVersion dv 
INNER JOIN ClassDefinition cd ON
dv.object_class_id = cd.object_id

最终,我想要实现的是在返回的结果集中获得ClassDefinition类的符号名称。

解决方法

我已经阅读了大多数在线API文档,但仍未找到答案,因此向IBM支持人员开了张罚单。这是通过ad-hock SQL查询API将文档类加入类定义类的正确方法

        var sql = new SearchSQL();

        sql.setFromClauseInitialValue("Document","d",true);
        sql.setFromClauseAdditionalJoin(JoinOperator.INNER,"ClassDefinition","cd","d.ClassDescription",JoinComparison.EQUAL,"cd.This",true);

        var scope = new SearchScope(os);
        var pf = new PropertyFilter();
        pf.addIncludeProperty(new FilterElement(1,null,PropertyNames.THIS,null));
        pf.addIncludeProperty(new FilterElement(1,PropertyNames.ID,"DocumentTitle",PropertyNames.MIME_TYPE,PropertyNames.DATE_CREATED,PropertyNames.SYMBOLIC_NAME,Boolean.FALSE,PropertyNames.CLASS_DESCRIPTION,PropertyNames.CLASS_DEFINITION,PropertyNames.PROPERTY_DEFINITIONS,PropertyNames.CONTENT_ELEMENTS_PRESENT,null));

        RepositoryRowSet rows = scope.fetchRows(sql,256,pf,null);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...