1

我有一个带有ItemNumber验证论坛的字段的表单,可确保输入值。

在 lotusscript 中,我使用该表单创建一个新文档,然后根据不同计算字段的值ItemProductFamilyType(基于另一个文档的字段计算)我可能想要填充ItemNumber

我遇到的问题是,如果我看ItemProductFamilyType它的值是空白的,因为它还没有被计算出来。只有在更新字段后它才会有一个值,然后它是刷新/重新计算的文档。

我正在尝试使用ComputeWithForm它(raiseError参数为 1 或 0),但是由于其他字段上的验证公式,它不允许我这样做。

那么,如何在不检查/错误验证公式的情况下让计算字段更新它们的值?

4

3 回答 3

2

我不确定是否有特定于 Lotus Notes 的解决方法,但是在任何系统中都可以使用的一个技巧是在您的验证公式中进行另一个测试。不要说只是@If(FieldName != ""; @Failure; @Success),添加另一个您可以控制的条件,例如@If(DoValidation = "Yes" & FieldName != ""; @Failure; @Success)。然后您可以通过控制 DoValidation 项的值来控制验证。

我经常将@IsDocBeingSaved 添加到条件中,以便仅在您保存文档时触发验证:

@If(@IsDocBeingSaved & FieldName != ""; @Failure; @Success)
于 2011-10-05T15:06:53.297 回答
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)

You should now be able safely call a Source.Refresh method without inadvertently triggering validation rules until the data is ready.

于 2011-10-05T23:13:17.923 回答
1

考虑到该ComputeWithForm方法可能不可靠,另一个想法是:为什么不使用 LotusScript 检查另一个文档中的值?事实上,您可以从 QueryRecalc 事件中调用相同的代码并更新ItemProductFamilyType项目,从而避免重复代码。

于 2011-10-05T17:45:04.210 回答