我能够使用他们的API(FileNet.API.dll)v5.2.1成功将文件发送到Filenet,但是当我尝试检索它时,它是一个没有内容的0字节文件。
这主要是使用他们的demo c#程序中的方法来发送和接收这里找到的文件(http://www-01.ibm.com/support/docview.wss?uid=swg24028791)
与我的场景不同的是,我将以Stream格式提供源数据,因此我不需要像演示那样将本地文件转换为Stream。
因此运行以下方法:按此顺序或多或少,重复一些。
main create doc方法执行
IDocument doc = CreateDocument(stream, fnDoc.mimeType, fnDoc.docName, fnRepo.os, "Common", paRequest);
IFolder folder = FetchFolder(fnRepo.os, "/");
doc.Save(RefreshMode.REFRESH);
IReferentialContainmentRelationship rcr = FileContainable(fnRepo.os, doc, folder);
rcr.Save(RefreshMode.REFRESH);
checkInDoc(doc);
上面列出的方法如下
public static IDocument CreateDocument(Stream stream, String mimeType, String docName, IObjectStore os, String className)
{
IDocument doc = null;
if (className.Equals(""))
doc = Factory.Document.CreateInstance(os, null);
else
doc = Factory.Document.CreateInstance(os, className);
doc.Properties["DocumentTitle"] = docName;
doc.MimeType = mimeType;
IContentElementList cel = CreateContentElementList(stream, docName);
if (cel != null)
doc.ContentElements = cel;
return doc;
}
下一个被调用的是CreateContentElementList
public static IContentElementList CreateContentElementList(Stream stream, string docName)
{
IContentElementList cel = null;
if (CreateContentTransfer(stream, docName) != null)
{
cel = Factory.ContentElement.CreateList();
IContentTransfer ct = CreateContentTransfer(stream, docName);
cel.Add(ct);
}
return cel;
}
最后是CreateContentTransfer
public static IContentTransfer CreateContentTransfer(Stream stream, string docName)
{
IContentTransfer ct = null;
ct = Factory.ContentTransfer.CreateInstance();
ct.SetCaptureSource(stream);
ct.RetrievalName = docName;
return ct;
}
此时ct的长度和大小不存在,但这些可以手动设置,所以我不确定这是否重要。此外,变量流仍然具有内容。
从CreateDocument
返回文档然后提取文件夹
public static IFolder FetchFolder(IObjectStore os, String fPath)
{
IFolder f = Factory.Folder.FetchInstance(os, fPath, null);
return f
}
然后
public static IReferentialContainmentRelationship FileContainable(IObjectStore os, IContainable c, IFolder folder)
{
IReferentialContainmentRelationship rcr = null;
if (c is IDocument)
rcr = folder.File((IDocument)c, AutoUniqueName.AUTO_UNIQUE, ((IDocument)c).Name, DefineSecurityParentage.DO_NOT_DEFINE_SECURITY_PARENTAGE);
else
rcr = folder.File((ICustomObject)c, AutoUniqueName.AUTO_UNIQUE, ((ICustomObject)c).Name, DefineSecurityParentage.DO_NOT_DEFINE_SECURITY_PARENTAGE);
return rcr;
}
public static void checkInDoc(IDocument doc)
{
doc.Checkin(AutoClassify.AUTO_CLASSIFY, CheckinType.MINOR_VERSION);
doc.Save(RefreshMode.REFRESH);
doc.Refresh();
}
所以我错过了一些东西,最后一部分是将内容放在服务器上还是什么?
答案 0 :(得分:0)
当调用ct.SetCaptureSource(stream);
时,Stream应该是未读的(或者可能是Stream重置的位置),以便API可以捕获所需的文件。
如果Stream的位置在Stream的末尾,则不会最终向IContentTransfer对象发送任何内容,从而导致ContentElement包含0个字节。