2012-10-25 100 views
2

XPages應用程序使用包含綁定到RichText編輯器和文件上傳/下載控件的兩個字段的「模板」文檔。 常規文檔最初鏈接到模板文檔,其中一個數據源用於當前文檔的常用字段(標題,類別,讀者/作者...),第二個數據源顯示只讀RT +模板附件。從文檔複製MIME文檔到文檔

當用戶決定更改RT /附件時,他將文檔從模板中取消鏈接 - 通過將RT +附件從模板複製到當前文檔。

問題:標準的Java代碼片段的RT副本(和附件太)是:

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附件的正確方法是什麼?

+0

這應該避開例外:RichTextItem rt = null; Object obj = docTemplate.getFirstItem(「Files」); if(obj instanceof RichTextItem){rt =(RichTextItem)obj} - 感謝http://lekkimworld.com/2006/04/13/java_in_notes_domino_explained_casting_101.html。 – pipalia

+0

您是否嘗試過getContentAsBytes:http://www-10.lotus.com/ldd/ddwiki.nsf/dx/NotesMIMEEntity_sample_JavaScript_code_for_XPages#getContentAsBytes – pipalia

回答

0

最快的方法是使用Document.copyAllItems(Document doc,布爾替換),並刪除不必要的東西。