Обновить вычисленные поля без проверки - PullRequest
1 голос
/ 05 октября 2011

У меня есть форма с полем ItemNumber, которая имеет форум для проверки, который обеспечивает ввод значения.

В lotusscript я создаю новый документ с этой формой, затем, в зависимости от значения другого вычисляемого поля ItemProductFamilyType (вычисляется на основе поля другого документа), я мог бы заполнить ItemNumber.

У меня проблема в том, что, если я посмотрю на значение ItemProductFamilyType, оно будет пустым, потому что оно еще не вычислено. Он будет иметь значение только после обновления поля, а затем документ обновляется / пересчитывается.

Я пытаюсь использовать ComputeWithForm для этого (с параметром raiseError, равным 1 или 0), однако из-за формул проверки в других полях он не позволяет мне.

Итак, как я могу получить вычисляемые поля для обновления их значения без проверки / ошибки в формулах проверки?

Ответы [ 3 ]

2 голосов
/ 06 октября 2011

Попробуйте добавить поле контроля валидации.Итак, добавьте поле с именем «runValidation».Он рассчитывается для отображения, так как он требуется только для обработки событий формы пользовательского интерфейса.Его формула проста:

@ 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 голосов
/ 05 октября 2011

Я не уверен, есть ли обходной путь, специфичный для Lotus Notes, но один прием, который сработает в любой системе, - это провести еще один тест в ваших формулах проверки.Вместо того, чтобы просто сказать @If(FieldName != ""; @Failure; @Success), добавьте еще одно условие, которым вы можете управлять, например @If(DoValidation = "Yes" & FieldName != ""; @Failure; @Success).Затем вы можете управлять проверкой, управляя значением элемента DoValidation.

Я часто добавляю @IsDocBeingSaved к условию, чтобы проверка запускалась только при сохранении документа:

@If(@IsDocBeingSaved & FieldName != ""; @Failure; @Success)
1 голос
/ 05 октября 2011

Еще одна мысль, учитывая вероятность того, что метод ComputeWithForm ненадежен: почему бы не проверить значение в другом документе с помощью LotusScript? Фактически, вы можете вызвать тот же код из события QueryRecalc и обновить элемент ItemProductFamilyType, избавив вас от необходимости дублировать код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...