Can';t在XPages中将RichText迁移到RichText

Can';t在XPages中将RichText迁移到RichText,xpages,lotus-domino,lotusscript,Xpages,Lotus Domino,Lotusscript,我有一个旧的Notes客户端应用程序。表单上有两个包含附件的RichText字段。JPG的,PDF的,随便什么。文档还包含一个唯一的键和其他元数据 我要做的是将文档中的多个附件迁移到每个附件的新文档中。我从来没有在嵌入式对象方面做过很多工作,在MIME方面做得更少 我目前在XPages Java中工作,但如果需要的话,可以使用LotusScript 我正在处理这个片段: List<EmbeddedObject> docPicture = this.getFileAttachments

我有一个旧的Notes客户端应用程序。表单上有两个包含附件的RichText字段。JPG的,PDF的,随便什么。文档还包含一个唯一的键和其他元数据

我要做的是将文档中的多个附件迁移到每个附件的新文档中。我从来没有在嵌入式对象方面做过很多工作,在MIME方面做得更少

我目前在XPages Java中工作,但如果需要的话,可以使用LotusScript

我正在处理这个片段:

List<EmbeddedObject> docPicture = this.getFileAttachments(doc, "picture");
List<EmbeddedObject> docPDF = this.getFileAttachments(doc, "pdf");

for (EmbeddedObject eoPic : docPicture) {
picCount++;
 Document newDoc = currentDatabase.createDocument();
newDoc.replaceItemValue("form", "fm_file");
newDoc.replaceItemValue("uploadToken", doc.getItemValueString("barCodeHuman"));
newDoc.replaceItemValue("fileName", eoPic.getName());
newDoc.replaceItemValue("size", eoPic.getFileSize());
fileName = eoPic.getName();
fileType = fileName.substring(fileName.length() - 3);

newDoc.replaceItemValue("type", this.getMIMEType(fileType));


// Extract Attachment and Add To Attachment Document
InputStream attachInputStream = eoPic.getInputStream();
Stream attachStream = session.createStream();
attachStream.setContents(attachInputStream);

MIMEEntity attachField = newDoc.createMIMEEntity("attachment");
MIMEHeader attachHeader = attachField.createHeader("content-disposition");
attachHeader.setHeaderVal("attachment;filename=\"" + eoPic.getName() + "\"");
attachField.setContentFromBytes(attachStream, this.getMIMEType(fileType), MIMEEntity.ENC_IDENTITY_BINARY);
List docPicture=this.getFileAttachments(doc,“picture”);
List docPDF=this.getFileAttachments(doc,“pdf”);
用于(嵌入式对象eoPic:docPicture){
picCount++;
Document newDoc=currentDatabase.createDocument();
newDoc.replaceItemValue(“表单”、“fm_文件”);
newDoc.replaceItemValue(“uploadToken”,doc.getItemValueString(“barCodeHuman”);
newDoc.replaceItemValue(“文件名”,eoPic.getName());
newDoc.replaceItemValue(“size”,eoPic.getFileSize());
fileName=eoPic.getName();
fileType=fileName.substring(fileName.length()-3);
newDoc.replaceItemValue(“type”,this.getMIMEType(fileType));
//提取附件并添加到附件文档
InputStream attachInputStream=eoPic.getInputStream();
Stream attachStream=session.createStream();
attachStream.setContents(attachInputStream);
MIMEEntity attachField=newDoc.createMIMEEntity(“附件”);
MIMEHeader attachHeader=attachField.createHeader(“内容处置”);
attachHeader.setHeaderVal(“附件;文件名=\”“+eoPic.getName()+”\”);
attachField.setContentFromBytes(attachStream、this.getMIMEType(文件类型)、MIMEEntity.ENC_IDENTITY_BINARY);
  • 注意,我使用的是OpenNTFAPI,但如果需要,可以返回到lotus对象
无论如何-这几乎奏效了。我得到了我的文档-每个附件1个。但是当进入文档属性中的“附件”字段时,它不是一个RichTextField,而是一个MIME之类的东西。这可能会导致我进入项目的下一阶段。RichTextDocuments工作正常,但不是MIME文档


这是一次迁移需要,如果您能想到如何使用RichTextFields,我们将不胜感激。谢谢!!

请尽量不要使用mime实体。 正如Oliver所说,检查表单上的目标richText字段是否未选中“将内容存储为mime”。 您甚至可以使用richText lite字段并将其限制为附件

我认为您可能正在使用MIMEEntity方法setContentsFromStream,因为您想直接将附件从一个文档移动到另一个文档? 如果只想使用RichText嵌入对象(不涉及mime实体)移动,则需要首先使用.extractFile将嵌入对象提取到文件系统。 然后,使用您在新文档上创建的RichTextItem(而不是创建mime实体),您可以使用rti.embedObject附加您提取的文件。(最好在成功迁移后删除临时提取文件),有关嵌入附件所需参数的示例,请参阅设计器帮助

在将文件提取到文件系统时,您可以将其提取到JVM的临时目录中,文件系统上的文件需要具有附加到新文档时所希望的相同文件名。 因此,您不能真正使用File.createTemporaryFile(),因为您的临时文件名将包含随机字符 您可以使用获取临时目录

System.getProperty("java.io.tmpdir")`
并在提取文件路径中使用它


在开始处理之前要检查的另一件事是当前notesSession的isConvertMIME设置,如果to source字段是mime,则session.isConvertMIME==true将在加载文档时将该字段转换为richText。我认为在xpages中默认为false,但我认为这不会影响您,因为我认为您的源附件是lready richText但对于阅读此文件并使用mime源字段的人来说,请务必注意。此外,如果使用setConvertMIME更改此文件,请确保在完成处理后将其更改回原来的状态。

Hmm是否想过使用附加到RTF项的文件下载控件,并将RTF项显示为编辑器Xpage?注意:所有通过Xpage更新的/新创建的数据都存储为MIME,因此在将Notes客户端与表单一起使用时,您可能没有向后兼容性。您还可以通过更改表单上RTF的属性来转换RTF,将数据存储为MIME,并重新保存客户端中的所有文档-虽然不美观,但它可以工作。我知道这并不能解决问题将每个附件提取到一个唯一文档的问题,但这可能要容易得多。