2015-02-11 116 views
0

我有一個帶有豐富文本字段的筆記形式,名爲「Body」。我將該字段的「存儲」屬性設置爲「將內容存儲爲HTML和MIME」。NotesRichTextItem.getMIMEEntity()總是返回null

現在,我正在Notes客戶端中使用該表單創建一個新文檔。

但是,如果我嘗試使用NotesRichTextItem.getMIMEEntity()訪問SSJS中的富文本字段值,它始終返回null。

我錯過了什麼嗎?

非常感謝您的幫助。

更新2:2015年2月12日

我做了一些更多的測試,我發現原因,爲什麼它不會承認的富文本字段作爲MIME類型的,而是始終返回它豐富文本︰

原因是我訪問數據庫與「sessionAsSigner」,而不是隻使用「數據庫」。

如果我刪除「sessionAsSigner」並改爲使用「database」,使得XPage對公共訪問用戶不可用,那麼,我不得不登錄,代碼將其識別爲MIME類型,並且我可以獲得NotesMIMEEntity的句柄。

不幸的是,XPage必須提供給公共訪問用戶,我必須使用sessionAsSigner。

當我打開文檔屬性並查看富文本字段時,可以看到「字段標誌」是「SIGN SEAL」。我的猜測是,這就是爲什麼sessionAsSigner不起作用,但這只是一個猜測。

任何想法?

更新1:2015年2月12日

這裏是我用我的SSJS代碼:

var oDBCurrent:NotesDatabase = sessionAsSigner.getDatabase(session.getServerName(), session.getCurrentDatabase().getFilePath()); 
var oVWMailProfiles:NotesView = oDBCurrent.getView('$vwSYSLookupEmailProfiles'); 
var oVWPWResetRecipient:NotesView = oDBCurrent.getView('$vwPWPMLookupPWResetNotificationProfiles'); 
var oDocPWResetRecipient:NotesDocument = null; 
var oDocMailProfile:NotesDocument = null; 
var oDocMail:NotesDocument = null; 

var sServer = session.getServerName(); 

oDocPWResetRecipient = oVWPWResetRecipient.getDocumentByKey(sServer, true); 
oDocMailProfile = oVWMailProfiles.getDocumentByKey('.MailTemplate', true); 
oDocMail = oDBCurrent.createDocument(); 

//Set default fields 
oDocMail.replaceItemValue('Form', 'Memo'); 
oDocMail.replaceItemValue('Subject', oDocMailProfile.getItemValueString('iTxtSubject')); 
oDocMail.replaceItemValue('SendTo', oDocPWResetRecipient.getItemValue('iNmesRecipients')) 

//Get body text 
var oItem:NotesItem = oDocMailProfile.getFirstItem("Body"); 
var entity:NotesMIMEEntity = oItem.getMIMEEntity(); 

//Create email body 
var tmp = entity.getContentAsText(); 

//Replace <part2> with part 2 of the password 
tmp = @ReplaceSubstring(tmp, "&lt;part2&gt;", sPWPart2); 

//Set content of Body field as MIME type            
var body = oDocMail.createMIMEEntity(); 
var stream = session.createStream();         
stream.writeText(tmp); 
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0);   

//Send email 
oDocMail.send(); 

正如我前面提到的,我也試着:

var oDBCurrent:NotesDatabase = sessionAsSigner.getDatabase(session.getServerName(), session.getCurrentDatabase().getFilePath()); 
var oVWMailProfiles:NotesView = oDBCurrent.getView('$vwSYSLookupEmailProfiles'); 
var oVWPWResetRecipient:NotesView = oDBCurrent.getView('$vwPWPMLookupPWResetNotificationProfiles'); 
var oDocPWResetRecipient:NotesDocument = null; 
var oDocMailProfile:NotesDocument = null; 
var oDocMail:NotesDocument = null; 

var sServer = session.getServerName(); 

oDocPWResetRecipient = oVWPWResetRecipient.getDocumentByKey(sServer, true); 
oDocMailProfile = oVWMailProfiles.getDocumentByKey('.MailTemplate', true); 
oDocMail = oDBCurrent.createDocument(); 


//Set default fields 
oDocMail.replaceItemValue('Form', 'Memo'); 
oDocMail.replaceItemValue('Subject', oDocMailProfile.getItemValueString('iTxtSubject')); 
oDocMail.replaceItemValue('SendTo', oDocPWResetRecipient.getItemValue('iNmesRecipients')) 

//Get body text 
var entity:NotesMIMEEntity = oDocMailProfile.getMIMEEntity('Body'); 

//Create email body 
var tmp = entity.getContentAsText(); 

//Replace <part2> with part 2 of the password 
tmp = @ReplaceSubstring(tmp, "&lt;part2&gt;", sPWPart2); 

//Set content of Body field as MIME type            
var body = oDocMail.createMIMEEntity(); 
var stream = session.createStream();         
stream.writeText(tmp); 
body.setContentFromText(stream, "text/html; charset=iso-8859-1", 0);   

//Send email 
oDocMail.send(); 

回答

3

嘗試調用sessionAsSigner.setConvertMime(假)

+0

你好,Dan,工作!非常感謝你 – 2015-02-12 21:35:29

0

您從文檔中獲取MIMEEntity,而不是從Richtext項獲取。在這裏看到一個例子(從第103行開始):https://github.com/zeromancer1972/OSnippets/blob/master/CustomControls/ccSnippets.xsp

+0

奧利弗您好,謝謝您的答覆。我也試過,通過調用「var entity:NotesMIMEEntity = NotesDocument.getMIMEEntity(」Body「);」,其中「Body」是富文本字段的名稱。但它也會返回null。任何其他想法? – 2015-02-11 23:56:53

+0

所以顯然取決於內容的創建位置。您是否測試過通過XPage創建/保存內容,而不是使用Notes表單?這有什麼區別嗎?對不起,我現在沒有任何工作示例,所以我現在正在猜測和頭腦風暴......上面的示例在通過XPage創建內容時起作用。 – 2015-02-12 00:15:07

+0

這可能是真的。我會試一試。當我使用Form創建Notes客戶端中的文檔並顯示文檔屬性時,我可以看到字段Body的數據類型是「MIME Part」,所以它應該沒問題,但顯然不是。然而,我有代碼寫出字段的類型,它回到1,這是RICHTEXT,非常奇怪。我將嘗試使用XPage創建文檔並讓您知道。再次感謝您的幫助,我很感激 – 2015-02-12 00:19:54

0

您應該設置會話不將MIME轉換爲RichText。 在代碼的開頭添加此代碼。

session.setConvertMime(false); 
+0

Hello Ferry,非常感謝你的回覆,我已經嘗試過了,但它也不起作用,但是我找到了原因,爲什麼它不能正常工作,我會將它作爲Update 2發佈在我原來的問題中。 – 2015-02-12 21:18:41