4

我有 documentum 开发者版 6.6。我想在 c# 中使用 DFC 获取文档内容(将内容读入流中)。我使用了以下 C#.net 代码

IDfId id = collection.getId("r_object_id");
IDfDocument doc = (IDfDocument) session.getObject(id);

但它会引发以下异常。

例外:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“DFCLib.IDfDocument”。此操作失败,因为 IID 为“{EFAC2D68-175B-11D2-9927-006097C27C31}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE)) .

我也尝试了以下方法(它运行成功),但我不知道如何将内容读入流或内存流。

IDfId id = collection.getId("r_object_id"); 
IDfSysObject sysObject = (IDfSysObject) session.getObject(id);
4

2 回答 2

0

这会将文件转储到本地文件系统路径:

IDfId id = collection.getId("r_object_id"); 
IDfSysObject sysObject = (IDfSysObject) session.getObject(id);

sysObject.getFile(<path>)

然后,您可以使用标准 .Net IO 库将文件作为流打开,例如:

var stream = new System.IO.StreamReader(<path>)

我相信 DFC 有一些基于流的公共方法(getContent?),但我还没有看到它们从 .Net 成功使用。但是,我建议您查看 DFS(Documentum 基础服务)API 而不是 DFC。这是现在受支持的 API,并且 DFC 作为公共 API 已被弃用。在处理存储库内容时,DFS 确实具有流选项。

如果此答案不足以满足您的需求,您可能还需要检查http://developer.emc.com 。

于 2012-09-18T14:43:06.640 回答
0

异常表示它无法将 COM 对象转换为 IDfDocument。

我猜你的目标不是文件。

非文档 sysobject 有内容很奇怪,但仍然允许。然后可以按照另一个答案中的建议使用 getFile 读取内容。

于 2012-09-20T09:02:57.217 回答