我正在使用带有 Java API 的 FileNet P8 Content Engine 5.5.x 来使用 SearchSQL 构建一个临时查询。基于 Document 类创建一个 select 语句很简单:
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, d.Id, d.Name, d.ClassDescription";
sql.setSelectList(selectList);
sql.setFromClauseInitialValue("Document", "d", 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, 8, null, 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 类的符号名称。