大家好,才是真的好。
很久没有写代码,感觉怪怪的。
主要是担心自己的代码能力得到很大的退化,以至于解决不了常规问题。
幸亏有个人问了我一个问题,就是在Notes文档中,如何进行富文本字段验证。
说来是真的,普通文本和数字字段有校验事件:
但富文本字段没有校验事件,如下图:
而且富文本字段中涉及到的内容也比较多,例如文本(包括空格)、附件、数据库/视图/文档链接等。
好在富文本字段所在的表单有个保存前的校验事件,这样我们就可以写点lotusscript代码进行校验,如下图:
代码全文:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Call Source.GotoField("Body")
On Error Resume Next
Call Source.SelectAll
Call Source.DeselectAll
On Error Goto 0
If Err <> 0 Then
Err = 0
Msgbox "请在富文本字段Body中输入内容!", 16, "错误提示"
Continue = False
Exit Sub
End If
End Sub
这里用的办法是使用办法Source.GotoField("Body")让光标跳到Body富文本字段中,,然后全部选择内容、然后再取消选择全部内容——如果富文本里面没有内容,就会报错(一般错误代码是4470之类),这时我们使用语句On Error Goto 0继续让代码运行,同时也会捕获Err错误代码,错误代码不等于0,执行提示【Msgbox "请在富文本字段Body中输入内容!", 16, "错误提示"】提示框,是不是很巧妙?

但是,这里有几个问题,就是利用UI前端来进行校验操作, 例如表单如果很长,而Body字段在最底下,那么界面就会自动滚动和闪烁;另外,如果Body字段里面用户已经输入了内容,还会看到选择和闪烁的过程——有些用户比较“刁钻”,他们不会满意这样做的;还有就是,Body字段中有任何内容都会通过校验检查。
还有第二招,就是在Body富文本字段的下面,加一个普通可编辑字段,例如ValidateBody字段,然后隐藏掉,在该字段中写公式来进行校验:
@If(@Trim(@Abstract([TextOnly];100 个;"";"Body"))= "";@Failure("请在正文Body中输入一些文本。");@Success)
这是检查Body正文字段中是否含有文本、包括空格、回行、Tab键盘等内容。
如果要校验附件,还需接着输入公式来进行校验:
@If(@Attachments != 0; @Success; @Trim(@Abstract([TextOnly]; 100; ""; "Body")) = ""; @Failure("请在正文Body中输入一些文本."); @Success)
在这个公式版本中,仅当有一个或多个合法文本字符时才会进行验证,例如不允许使用空格、制表符或换行符等。
不过,这里也有一个问题,@Attachments 是用来检查整个文档中的字段,如果文档中有多个可以放附件的富文本字段,则这个验证也不适用。
不过,我们还有别的办法。
本文参考了:https://breakingpar.com/bkp/home.nsf/0/87256B280015193F87256FE900584CF8
最后欢迎搜索公众号“协作者”来关注我。
也欢迎添加个人微信号:
如有兴趣也可以关注我的视频号: