【问题标题】:Can't migrate RichText to RichText in XPages无法在 XPages 中将 RichText 迁移到 RichText
【发布时间】:2014-07-31 21:38:18
【问题描述】:

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

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

我目前正在使用 XPages Java,但如果需要,我可以使用 LotusScript。

我正在使用这个 sn-p:

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);
  • 请注意,我使用的是 OpenNTF API,但如果需要,可以返回到 Lotus 对象。

无论如何 - 这几乎奏效了。我收到了我的文件 - 每个附件 1 个。但是,当进入文档属性中的“附件”字段时,它不是 RichTextField,而是 MIME 的东西。这可能导致我进入项目的下一阶段。 RichTextDocument 可以正常工作,但 MIME 不能。

这是 1 次迁移需求,因此对于我如何最终使用 RichTextFields 的任何想法将不胜感激。谢谢!!

【问题讨论】:

  • 嗯,有没有想过使用附加到 RTF 项目的文件下载控件以及在 Xpage 中将 RTF 项目显示为编辑器?注意:所有通过 Xpage 更新/新创建的数据都存储为 MIME,因此在使用带有表单的 Notes 客户端时可能没有向后兼容性。您还可以通过更改表单上 RTF 的属性来转换 RTF,以将数据存储为 MIME 并在客户端中重新保存所有文档 - 不优雅但它有效。我知道这并不能回答将每个附件提取到唯一文档的问题,但也许这会容易得多。

标签: xpages lotus-domino lotusscript


【解决方案1】:

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

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

当将文件解压到文件系统时,您可以将其解压到 JVM 的临时目录,文件系统上的文件需要具有与附加到新文档时相同的文件名。 出于这个原因,您不能真正使用 File.createTemporaryFile() 因为您的临时文件名中将包含随机字符。相反,你 您可以使用

获取临时目录
System.getProperty("java.io.tmpdir")`

以及在您的提取文件路径中使用它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多