如何从 FileNet 数据库中提取文档
How to extract documents from a FileNet database
我正在从事一个需要从 FileNet 系统中提取文档的项目。我需要提取由 Object_ID 标识的文档并将它们存储在文件中。该系统在 Windows 下运行,并且正在使用 Oracle 11G 数据库。
问题是:有没有一种方法可以使用直接数据库访问和 SQL 来检索文档内容?我可以编写一个 SQL 查询,通过将其 Object_ID 作为参数传递来检索文档的二进制内容吗?
谢谢
内容不必存储在数据库中。它可以是 BLOB,但也可以存储在 FileStores 中,作为文件或固定内容区域。如果它们存储在数据库中,从技术上讲,您应该能够通过 GUID 查询来检索它们。
不过我建议使用 Java API 到 retrieve content。这将使您能够管理所有情况(各种内容区域、多内容元素……)。我不知道您打算导出多少文档,但可以使用 API(批处理、多线程...)对其进行显着优化。
也许这会对您有所帮助:
有一个工具:FileNet Enterprise Manager 或 FEM(如果您愿意),您可以在其中导出文档(二进制文件)和元数据。
通过此工具,您可以在对象存储中进行 SQL 搜索,或使用该工具构建搜索。然后您可以 select 结果并将它们导出到本地目录。作为这些任务的结果,您将拥有一个包含二进制文件和一些 XML 文件的目录。这些 XML 文件将托管您数据库中的所有元数据,例如 ID 等。
希望这能以某种方式帮助你。
如果你愿意,我可以帮你完成这个任务,
通常 FileNet 的内容存储在 windows 或 Linux 甚至 AIX 中名为 /cestore 的目录中。
由于对目录中文件数量的一些限制,尤其是在基于 Unix 的系统中,它们将文件存储在长树中,例如 fn01/fn03/fn04
所以你要做的是
通常文件名的格式为 {DocumentId}
您将通过 Apache IO commons 等库扫描 /cestore 下的所有文件,或者通过 python 脚本将它们存储在 Map Contains 中,然后您将能够获得所有文档的任何文档路径
回答一个老问题。但认为它可能会为某人提供快速帮助。对于此处给出的情况,恕我直言,FileNet 查询是最佳解决方案。这就是你的做法:
Domain domain = Factory.Domain.fetchInstance(conn, null, null);
ObjectStore objStore = Factory.ObjectStore.fetchInstance(domain, osName, null);
SearchScope search = new SearchScope(objStore);
// your doc-class and identifier (index) goes here
String sql1 = "Select * from DocClassName where someIndex=abc456";
SearchSQL searchSQL = new SearchSQL(sql1);
DocumentSet documents = (DocumentSet) search.fetchObjects(searchSQL, Integer.valueOf("20"), null, Boolean.valueOf(true));
// go nuts on doc
Document doc;
我正在从事一个需要从 FileNet 系统中提取文档的项目。我需要提取由 Object_ID 标识的文档并将它们存储在文件中。该系统在 Windows 下运行,并且正在使用 Oracle 11G 数据库。 问题是:有没有一种方法可以使用直接数据库访问和 SQL 来检索文档内容?我可以编写一个 SQL 查询,通过将其 Object_ID 作为参数传递来检索文档的二进制内容吗? 谢谢
内容不必存储在数据库中。它可以是 BLOB,但也可以存储在 FileStores 中,作为文件或固定内容区域。如果它们存储在数据库中,从技术上讲,您应该能够通过 GUID 查询来检索它们。
不过我建议使用 Java API 到 retrieve content。这将使您能够管理所有情况(各种内容区域、多内容元素……)。我不知道您打算导出多少文档,但可以使用 API(批处理、多线程...)对其进行显着优化。
也许这会对您有所帮助: 有一个工具:FileNet Enterprise Manager 或 FEM(如果您愿意),您可以在其中导出文档(二进制文件)和元数据。 通过此工具,您可以在对象存储中进行 SQL 搜索,或使用该工具构建搜索。然后您可以 select 结果并将它们导出到本地目录。作为这些任务的结果,您将拥有一个包含二进制文件和一些 XML 文件的目录。这些 XML 文件将托管您数据库中的所有元数据,例如 ID 等。 希望这能以某种方式帮助你。
如果你愿意,我可以帮你完成这个任务,
通常 FileNet 的内容存储在 windows 或 Linux 甚至 AIX 中名为 /cestore 的目录中。
由于对目录中文件数量的一些限制,尤其是在基于 Unix 的系统中,它们将文件存储在长树中,例如 fn01/fn03/fn04
所以你要做的是
通常文件名的格式为 {DocumentId}
您将通过 Apache IO commons 等库扫描 /cestore 下的所有文件,或者通过 python 脚本将它们存储在 Map Contains 中,然后您将能够获得所有文档的任何文档路径
回答一个老问题。但认为它可能会为某人提供快速帮助。对于此处给出的情况,恕我直言,FileNet 查询是最佳解决方案。这就是你的做法:
Domain domain = Factory.Domain.fetchInstance(conn, null, null);
ObjectStore objStore = Factory.ObjectStore.fetchInstance(domain, osName, null);
SearchScope search = new SearchScope(objStore);
// your doc-class and identifier (index) goes here
String sql1 = "Select * from DocClassName where someIndex=abc456";
SearchSQL searchSQL = new SearchSQL(sql1);
DocumentSet documents = (DocumentSet) search.fetchObjects(searchSQL, Integer.valueOf("20"), null, Boolean.valueOf(true));
// go nuts on doc
Document doc;