【发布时间】:2012-10-16 05:32:23
【问题描述】:
XPages 应用程序使用“模板”文档,其中包含绑定到 RichText 编辑器和文件上传/下载控件的两个字段。 常规文档最初链接到模板文档,其中一个数据源用于当前文档的公共字段(标题、类别、读者/作者...),第二个数据源显示模板中的只读 RT+附件。
当用户决定更改 RT/附件时,他会取消文档与模板的链接 - 通过将 RT+附件从模板复制到当前文档。
问题:用于 RT 复制(以及附件)的标准 Java sn-p 是:
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 附件的正确技术是什么?
【问题讨论】:
-
这应该绕过异常:RichTextItem rt = null;对象 obj = docTemplate.getFirstItem("文件"); if (obj instanceof RichTextItem) {rt = (RichTextItem)obj} - 感谢lekkimworld.com/2006/04/13/…。
-
你试过getContentAsBytes:www-10.lotus.com/ldd/ddwiki.nsf/dx/…