2011-10-05 87 views
1

我有一个表单字段ItemNumber,它有一个验证论坛,可确保输入值。更新计算字段而不验证

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

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

我想为此使用ComputeWithFormraiseError参数为1或0),但是由于其他字段上的验证公式,它不会让我。

那么,我怎样才能得到计算字段来更新他们的价值没有检查/错误验证公式?

+0

请注意ComputeWithForm(来自帮助)“通过执行默认值,翻译和验证公式(如果在文档表单中定义)验证文档。”但是你尝试应该工作。 “不让我”是什么意思,错误是什么? –

+0

只是为了澄清,帮助没有提及任何计算字段,我总是明白它不能保证他们会计算。 –

+0

它不会更新计算的字段。 –

回答

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

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

我经常补充@IsDocBeingSaved的条件,这样的验证,只有当要保存的文件大火:

@If(@IsDocBeingSaved & FieldName != ""; @Failure; @Success) 
1

另一种认为,鉴于ComputeWithForm方法是不可靠的潜力:为什么不检查的价值另一个文档使用LotusScript?实际上,您可以从QueryRecalc事件中调用相同的代码并更新ItemProductFamilyType项目,从而不必复制代码。