【问题标题】:Searching for a folder in FileNet ContentEngine and retrieving its class在 FileNet ContentEngine 中搜索文件夹并检索其类
【发布时间】: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”作为名称。

标签: java filenet-p8 filenet-content-engine


【解决方案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 在幕后做了很多隐式的往返。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多