在富文本字段中验证附件

时间:2011-01-16 11:43:54

标签: lotus-domino lotusscript lotus-formula

我使用下面的代码来验证Richtext字段中的附件。

如果我不使用Call source.Refresh(True) 然后验证不起作用,但每次在按钮中调用querysave时,此代码也会刷新文档。

所以有任何选项或任何其他想法,以便我不应该使用此刷新部分或整个代码进行验证。

如果有人拥有更高效的代码,那么请分享一下。

If Source.Document.YesNo20(0)="Yes" Then
    Call source.Refresh(True)
    Dim rtitem As NotesRichTextItem
    Set rtitem = source.Document.GetFirstItem( "Atchmnt20" ) 
    NotesEmbeddedObjectArray = rtitem.EmbeddedObjects
    If Isempty ( NotesEmbeddedObjectArray ) Then 
        Messagebox "Please enter an attachment in 20a. As you selected option Yes"
        continue=False
        Exit Sub
    End If 
End If

4 个答案:

答案 0 :(得分:0)

验证Lotus Notes中的富文本字段是一种黑暗的艺术,但你能不能这样做吗? (其中doc是后端):

If(doc.HasEmbedded) Then Continue = True

您还可以做其他事情。查看此Lotus Developer Domain帖子,其中包含附件,文本,嵌入对象,各种类型:

http://www-10.lotus.com/ldd/nd6forum.nsf/0/8b3df10667d355768525719a00549058

答案 1 :(得分:0)

您可以使用公式验证RT字段吗?

我使用此输入验证公式在富文本字段下创建了一个隐藏字段:

REM {Validate just when saving};
@If(!@IsDocBeingSaved; @Return(@Success); "");

REM {Should contain some file};
_filenames := @AttachmentNames;
@If(
    @Elements(_filenames)=0;
    @Return(@Failure("You should attach at least one file"));
    @Success);

答案 2 :(得分:0)

假设您想要避免刷新,因为它需要太长时间,您可能需要查看以下内容,如果可行,请尝试更改:

  1. 如果根本没有触及RichText字段,也许您可​​以将RichText字段的“Entering”事件与全局变量(在表单中)一起使用以跳过代码中的Refresh。
  2. 是否启用了“文档刷新时刷新选项”选项的关键字字段可以安全禁用?或者甚至放置一个按钮,它会弹出一个对话框,并用所选的关键字填充该字段 - 然后就不需要刷新选项了,因为你总是可以通过@ DbColumn / @ DbLookup呈现最新的选择或NotesUIWorkspace.PickListStrings。
  3. “Queryrecalc”和/或“Postrecalc”形式的事件中是否有可能优化的代码(LotusScript或Formula)?例如,通过使用全局变量(在表单中)作为标志是否在Queryrecalc / Postrecalc中执行代码 - 在代码中调用Refresh之前将其设置为false,然后将其设置为true(因为此Refresh仅用于将RichText字段更新为后端文档。)

答案 3 :(得分:0)

即使对于新的(未保存的)文档,LotusScript中也有一种检查附件存在的方法。

使用公式:

创建隐藏的计算字段,例如 AttachmentNames

@If(@AttachmentNames!=“”;“1”;“”);

在LotusScript中执行以下操作:

'in new documents Form field may be empty
If doc.Form(0) = "" then    
    doc.Form = "YourFormAlias"    
End If

'computing doc contents with the form
call doc.ComputeWithForm(false, false)

If doc.AttachmentNames(0) = "" then    
 MsgBox "Please attach a file",,"Attention"
 Continue = False 'if you are running this code in QuerySave
 Exit Sub
End If