`
从此醉
  • 浏览: 1047045 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

57. 如何检查富文本域中是否有附件及其他?

 
阅读更多
富文本域(RTF)既是Lotus Notes表单设计的,也是数据存储的独特和重要的技术。用户可以在富文本域中编辑包含字体、颜色、段落属性等丰富格式的文本,还可以方便地添加附件。实际上,Notes的表单的布局设计本身就是保存在一个富文本域里。为了保存大段的文本和格式信息以及附件,富文本域没有其他普通域的大小限制(其中的每个段落仍然有64K的限额)。因为其特殊性,富文本域和其他类型的域在行为和表现上也有很大的不同,甚至怪异之处,比如开发人员有时就会遇到隐藏公式对富文本域里的内容不起作用的情况。Notes帮助对富文本域的奥秘没有充分的介绍,网上的资料可以补足这方面。IBM网站上的这篇文章和其中的链接解释了富文本域和隐藏公式的问题:http://www-01.ibm.com/support/docview.wss?rs=0&uid=swg21099682。要更好地认识富文本域的本质和特性,可以读BenLanghinrichs博客里的系列文章:

http://www.geniisoft.com/showcase.nsf/archive/20030922-0158。Ben Langhinrichs开发了一个专门操作富文本域的LotusScript的扩展LSX(操作Domino对象也是通过LSX扩展在LotusScript里实现的),他的公司就以此为主要产品,很多年来一直针对使用Lotus Notes的客户。可想而知,他如何精通富文本域技术。难能可贵的是他的介绍富文本域的系列文章,这是笔者迄今见到的对富文本域最深入浅出的解释,对其的认识和理解会大大清晰和深入,很多开发中的疑惑也就自然消释。

回到本文的题目,在项目开发中有时会要求用户在提交文档时于特定的域包含附件。对富文本域的这种校验不同于对普通域的非空校验。富文本域的特性体现在两个方面。一方面在前端文档对富文本域内容作的修改,对应的后端文档不能直接读取到,需保存文档或调用前端文档的Refresh(True)方法。另一方面从后端文档对富文本字段作的修改,前端文档无法显示更新,只要关闭文档再打开才能看到。为了使代码更具一般性,在有前端文档以外的其他场合,如单独运行的代理检查数据库里的文档,也能运行,笔者下面给出的这个版本接受的参数类型为后端文档而非前端文档。从前端文档校验时,须先调用前端文档Refresh(True)。

Public Function CheckRTFAttachment(curDoc As NotesDocument,fieldName As String) As Boolean
	'fieldnum is the index of RTF item name in the CheckItems array
	CheckRTFAttachment=False
	Dim vChkItem As Variant
	Dim vObject As Variant
	Dim intObject As Integer
	
	Set vChkItem=curDoc.GetFirstItem(fieldName)
	vObject=vChkItem.EmbeddedObjects
	If Not IsEmpty(vObject) Then 
		For intObject=0 To UBound(vObject)
			If vObject(intObject).Type=1454 Then
				'1454 means attachment
				CheckRTFAttachment=True
				Exit Function
			End If
		Next
	End If
End Function
最后用笔者的一次经验说明富文本域的另一项有趣特性。笔者曾经任职的公司使用Symantec的杀毒软件,那时笔者发现打开带有附件的文档时特别慢。在网上搜索后发现Symantec默认情况下会在Lotus Notes客户端打开文档时,将其包含的附件一并下载并检查,而正常状态下,富文本字段里的附件是和包含它们的文档分开单独保存在数据库里的,文档里只保存了它们在数据库里的位置信息。打开一个包含附件的文档时,客户端也只会下载文档,也就是只包含其中的普通域的数据,只有当用户试图打开一个附件时,客户端才会确定附件的位置并下载。这样的方案是自然合理的,减少了不必要的网络负载,加快了文档的打开速度。所幸Symantec软件里的相关设置是可以修改的,禁用了打开文档时就下载附件后,速度恢复正常。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics