我有一个包含字段ItemNumber
的表单,其中包含一个确认输入值的验证论坛。
在lotusscript中,我使用该表单创建一个新文档,然后根据不同的计算字段ItemProductFamilyType
的值(基于另一个文档的字段计算),我可能想要填充ItemNumber
。
我遇到的问题是,如果我查看ItemProductFamilyType
的值,它是空白的,因为它尚未计算。一旦字段更新,它只有一个值,然后是文件刷新/重新计算。
我正在尝试使用ComputeWithForm
(raiseError
参数为1或0),但是由于其他字段的验证公式,它不会让我。
那么,如何在不检查/错误验证公式的情况下获取计算字段来更新其值?
答案 0 :(得分:2)
我不确定是否有特定于Lotus Notes的解决方法,但是在任何系统中都可以使用的一个技巧是在验证公式中进行另一项测试。不要只说@If(FieldName != ""; @Failure; @Success)
,而是添加另一个可以控制的条件,例如@If(DoValidation = "Yes" & FieldName != ""; @Failure; @Success)
。然后,您可以通过控制DoValidation项的值来控制验证。
我经常将@IsDocBeingSaved添加到条件中,以便验证仅在保存文档时触发:
@If(@IsDocBeingSaved & FieldName != ""; @Failure; @Success)
答案 1 :(得分:2)
尝试添加验证控制字段。因此,添加一个名为“runValidation”的字段。它是为显示计算的,因为它只是UI表单事件处理所必需的。它的公式是直截了当的
@ThisValue或runValidation
在QueryRecalc事件中或每当您想要设置ItemProductFamilyType的值时,将其设置为“1”。
Sub Queryrecalc(Source As Notesuidocument, Continue As Variant)
On Error Goto errHandle
Dim doc As notesDocument
Set doc = source.Document
' go populate your fields like ItemProductFamilyType
doc.runValidation = "1"
Exit Sub
errHandle:
Messagebox Lsi_info(2) + " : " + Str(Err) + " - " + Error(Err) + ", at line " + Str(Erl)
Exit Sub
End Sub
同样的想法适用于ItemProductFamilyType
的翻译公式Field runValidation := "1";
@thisValue;
在ItemNumber的验证公式中,包含“runValidation”字段,用于管理字段应验证的时间。
@if(runValidation="1";@if(@trim(@ThisValue)="";@Failure("Enter value");@Success);@Success)
现在,您应该能够安全地调用Source.Refresh
方法,而不会无意中触发验证规则,直到数据准备就绪。
答案 2 :(得分:1)
另一个想法,考虑到ComputeWithForm
方法可能不可靠:为什么不使用LotusScript检查其他文档中的值?实际上,您可以从QueryRecalc事件中调用相同的代码并更新ItemProductFamilyType
项,从而节省了重复代码的需要。