微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。