2015-02-11 150 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