在 FileNet ContentEngine 中搜索文件夹并检索其类

Posted

技术标签:

【中文标题】在 FileNet ContentEngine 中搜索文件夹并检索其类【英文标题】:Searching for a folder in FileNet ContentEngine and retrieving its class 【发布时间】:2019-05-19 18:18:17 【问题描述】:

我已经获得了用于搜索文件夹和检索属性的代码。参考:Search folder hierarchy in FileNet for a particular folder

我正在尝试检索文件夹对象的类名,以便区分将存储在自定义文件夹中的不同类型的文档。

我遍历了 Properties 集合,但类的名称不是属性。

String sqlStatement = "SELECT * FROM [Folder] WHERE ([FolderName] LIKE '%MyFolder%')";
SearchSQL sqlObject = new SearchSQL(sqlStatement);
RepositoryRowSet rowSet = searchScope.fetchRows(sqlObject, null, null, new Boolean(true));
Iterator iter = myRows.iterator();
while (iter.hasNext()) 
    RepositoryRow row = (RepositoryRow) iter.next();
    String folderID = row.getProperties().getIdValue("ID").toString();

我尝试了 row.getClass() 但它只返回:RepositoryRowImpl

【问题讨论】:

从任何对象,我们写 obj.getClass().getName() 提供类名,在这种情况下,你期待什么?你期待一个文件夹对象和它的类名吗? 是的,我希望使用“Folder”或“MyCustomFolder”作为名称。 【参考方案1】:

如果您在 SELECT 子句中使用 *,则存储库行对象将包含该对象的所有属性。这还将包括一个名为This 的属性。此属性是对返回的对象的引用。因此,您可以使用以下代码来获取文件夹的类:

EngineObject eo = row.getProperties().getEngineObjectValue("This");
String className = eo.getClassName();

除了*,您还可以显式选择This。在这种情况下,您的查询将是这样的:

String sqlStatement = "SELECT This,Id FROM [Folder] WHERE ([FolderName] LIKE '%MyFolder%')";

这将限制从服务器获取的数据量。

【讨论】:

当然。同意。我只在测试期间使用 *。我试过这个: ClassDescription objClassDesc = (ClassDescription) rrRow.getProperties().getObjectValue("ClassDescription");字符串类名 = objClassDesc.get_Name();这也给了我预期的文件夹类名。推荐/更快的方法是什么? 类描述在另一个表中,然后是文件夹对象。因此,从查询的角度来看,这会给您带来开销。除了类的名称之外,Class Description 对象还包含许多您不感兴趣的其他信息,从数据的角度来看,这会给您带来开销。 顺便说一句,我尝试使用 CLI 直接访问 DB/2 数据库。找不到这个或任何其他表。 DB/2 中的表在哪里? @Ricardo 这并不意味着没有与getEngineObjectValue("This") 相关的额外往返行程。我很确定有。但这应该具体检查。不幸的是,CE API 在幕后做了很多隐式的往返。

以上是关于在 FileNet ContentEngine 中搜索文件夹并检索其类的主要内容,如果未能解决你的问题,请参考以下文章

FileNet:FileNet 文件夹中的文档总数

从文档中删除 SID - FileNet

在 Filenet 中获取和更新工作流数据

Filenet - 从 Filenet Workflow 中的用户 ID 中获取电子邮件 ID

如何从 FileNet 数据库中提取文档

Filenet - 如何获取工作流组中的属性值