19. Notes客户机中的校验

本文介绍了一种在Lotus Notes客户端应用中实现数据校验的方法,通过自定义校验类来集中处理输入验证,确保数据完整性和一致性。通过在文档保存事件中调用校验方法,实现对普通域和富文本域(如包含附件的RTF项)的有效校验。

在开发传统Notes客户机应用时,校验是最常见的功能需求之一。在检查一张表单的输入时,能够使用的方法和呈现给用户的方式很有限。一般我们不会使用域的输入验证公式,因为那样做太分散、重复又不够灵活。更好的方案是将所有的检查集中在一起,在文档保存或者执行某个操作时调用。校验有可能包含对输入做各种检查,最普遍的还是简单的非空性检查。对此,我们可以写一个简单的校验类:

Private Const MESSAGE="Please input the field "
Public Class Validator
	Private fields List As String
	Private m_uidoc As NotesUIDocument
	Private m_doc As NotesDocument
	
	Public Sub new()
		Dim ws As New NotesUIWorkspace
		Set m_uidoc=ws.CurrentDocument
		Set m_doc=m_uidoc.Document
	End Sub
	
	Public Sub Add(fieldName As String,label As String)
		If label="" Then
			label=fieldName
		End If
		fields(label)=fieldName
	End Sub
	
	Public Function Validate() As Boolean
		Forall f In fields
			If m_uidoc.FieldGetText(f)="" Then
				Messagebox MESSAGE & {"} & Listtag(f) & {"},64,"Lotus Notes"
				If m_uidoc.EditMode Then
					Call m_uidoc.GotoField(f)
				End If
				Validate=False
				Exit Function
			End If
		End Forall
		Validate=True
	End Function
End Class

在这个类中,Add()方法像要检查的域名和对应的对用户的名称添加到一个List中。Validate()方法检查这些域的值是否为空;如果是,则给用户一个提示,将焦点转移到该域中,并返回False;如果所有域值都不为空,就返回True。这样调用的程序就可以根据Validate()方法的结果判断是否继续执行以后的逻辑。

下面这段代码就是在一个文档的Querysave事件中根据条件添加了若干个需要校验的域,并且根据校验的结果决定是否保存文档。

Sub Querysave(Source As NotesUIDocument, Continue As Variant)
	Dim validator1 As New Validator()
	With validator1
		Call .Add("ActionName","Action Name")
		Call .Add("NodeName","Node Name")
		
		If Source.FieldGetText("MultipleNext")="" Then
			Call .Add("NextNode","Next Node")
		End If
		
		If source.FieldGetText("NeedExpression")><"" Then
			Call .Add("Expression", "Action Expression")
		End If
		
		If Source.FieldGetText("NeedMail")="1" Then
			Call .Add("Subject","Mail Subject")
		End If
		
	End With
	If Not validator1.Validate() Then
		Continue=False
	End If
End Sub

上面的校验都是针对普通域,如果要校验一个富文本域(RichTextItem)是否包含附件,就必须先保存当前Notes文档,然后可以使用下列函数:

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

函数参数中的curDoc为包含要校验的富文本域的文档,fieldName为域名。如果包含附件则返回True;反之False。



Matlab基于粒子群优化算法及鲁棒MPPT控制器提高光伏并网的效率内容概要:本文围绕Matlab在电力系统优化与控制领域的应用展开,重点介绍了基于粒子群优化算法(PSO)和鲁棒MPPT控制器提升光伏并网效率的技术方案。通过Matlab代码实现,结合智能优化算法与先进控制策略,对光伏发电系统的最大功率点跟踪进行优化,有效提高了系统在不同光照条件下的能量转换效率和并网稳定性。同时,文档还涵盖了多种电力系统应用场景,如微电网调度、储能配置、鲁棒控制等,展示了Matlab在科研复现与工程仿真中的强大能力。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事新能源系统开发的工程师;尤其适合关注光伏并网技术、智能优化算法应用与MPPT控制策略研究的专业人士。; 使用场景及目标:①利用粒子群算法优化光伏系统MPPT控制器参数,提升动态响应速度与稳态精度;②研究鲁棒控制策略在光伏并网系统中的抗干扰能力;③复现已发表的高水平论文(如EI、SCI)中的仿真案例,支撑科研项目与学术写作。; 阅读建议:建议结合文中提供的Matlab代码与Simulink模型进行实践操作,重点关注算法实现细节与系统参数设置,同时参考链接中的完整资源下载以获取更多复现实例,加深对优化算法与控制系统设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值