如何在c#中使用DFC获取文档内容

时间:2012-09-08 12:59:53

标签: c# documentum dfc

我有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'。此操作失败,因为   QueryInterface在具有IID的接口的COM组件上调用   '{EFAC2D68-175B-11D2-9927-006097C27C31}'因以下原因失败   错误:不支持此类接口(HRESULT异常:0x80004002   (E_NOINTERFACE))。

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

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

2 个答案:

答案 0 :(得分: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 Foundation Services)API而不是DFC。这是现在支持的API,DFC作为公共API被弃用。在处理存储库内容时,DFS确实有流选项。

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

答案 1 :(得分:0)

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

我猜你的目标不是文件。

非文档系统对象有内容是很奇怪的,但它仍然是允许的。 然后可以使用其他答案中建议的getFile读取内容。