2

XPages 应用程序使用包含绑定到 RichText 编辑器和文件上传/下载控件的两个字段的“模板”文档。常规文档最初链接到模板文档,一个数据源用于当前文档的公共字段(标题、类别、读者/作者...),第二个数据源显示模板中的只读 RT+附件。

当用户决定更改 RT/附件时,他从模板中取消链接文档 - 通过将 RT+附件从模板复制到当前文档。

问题:用于 RT 副本(以及附件)的标准 Java 片段是:

session.setConvertMime(true);
RichTextItem rti = (RichTextItem)docTemplate.getFirstItem("Body");
rti.copyItemToDocument(docCurrent, "Body");
rti = (RichTextItem)docTemplate.getFirstItem("Files"); <====
rti.copyItemToDocument(docCurrent, "Files");
docCurrent.save(); //saves in RT format, next save via XPage converts to MIME

这总是适用于正文字段(尽管它会稍微改变格式),但它很少适用于附件。在 Notes 客户端中重新保存模板文档可将 RT 从 MIME 转换为原生 RT 格式,并且代码可以正常工作。

不工作意味着:

  • 与箭头一致的异常java.lang.ClassCastException: lotus.domino.local.Item incompatible with lotus.domino.RichTextItem
  • 缺少文件字段(正文已正确创建)对于某些附件,代码似乎可以工作(文本文件),对于更大的或二进制文件,它会失败(23k .doc,3M .pdf)。

上述称为代理的代码的 LotusScript 替代方案也无济于事。数据源属性 computeWithForm 不是故意使用的。

问题:在文档之间复制 MIME 附件的正确技术是什么?

4

1 回答 1

0

最快的方法是使用 Document.copyAllItems(Document doc, boolean replace) 而不是删除不必要的内容。

于 2012-10-26T07:23:55.037 回答