Проверка вложения в поле Richtext - PullRequest
0 голосов
/ 16 января 2011

Я использую приведенный ниже код для проверки вложения в поле 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 голосов
/ 09 августа 2011

В 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
0 голосов
/ 11 марта 2011

Можете ли вы проверить поле 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);
0 голосов
/ 14 марта 2011

Предполагая, что вы хотите избежать обновления, потому что это занимает слишком много времени, вот что вы можете посмотреть и, если это возможно, попробуйте изменить:

  1. Возможно, вы можете использовать «Ввод"событие поля RichText в сочетании с глобальной переменной (в форме) для пропуска обновления в вашем коде, если поле RichText вообще не было затронуто.
  2. Существуют ли поля ключевых слов с опцией" Обновить варианты "при обновлении документа "включена опция, которую можно безопасно отключить?Или даже поместите кнопку, которая вызовет диалог и заполнит поле выбранными ключевыми словами - тогда обновление вариантов не будет необходимым, так как вы всегда можете представить актуальные варианты через @ DbColumn / @ DbLookupили NotesUIWorkspace.PickListStrings.
  3. Существует ли какой-либо код (LotusScript или формула) в событиях формы "Queryrecalc" и / или "Postrecalc", которые можно оптимизировать?Например, используя глобальную переменную (в форме) в качестве флага, выполнять ли код в Queryrecalc / Postrecalc - установите его в значение false перед вызовом Refresh в своем коде, затем установите для него значение true (поскольку это обновление служит только дляобновить поле RichText до внутреннего документа).
0 голосов
/ 17 января 2011

Проверка полей расширенного текста в Lotus Notes - это немного мрачное искусство, но разве вы не можете просто сделать это?(где doc - серверная часть):

If(doc.HasEmbedded) Then Continue = True

Есть и другие вещи, которые вы можете сделать.Посмотрите этот пост Lotus Developer Domain, который охватывает вложения, текст, встроенные объекты, все виды:

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

...