Проверка на заполнение поля

Тема в разделе "Lotus - Программирование", создана пользователем reg5, 10 фев 2010.

  1. reg5

    reg5 Гость

    Как сделать, чтобы при сохранении выдавало сообщение о том, что поле не заполнено при таких условиях:
    - роль равна Admin
    - поле пустое.

    На поле Test в Input Enabled @IsMember( "[Admin]"; @UserRoles )
    Input Validation @If (@IsMember( "[Admin]"; @UserRoles ) & Test="");@Failure("Поле не заполнено! "); @Success
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    А чё не на скрипте?
     
  3. reg5

    reg5 Гость

    Omh
    А что так работать не будет? только на скрипте?!
     
  4. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Input Validation

    @If(@IsMember("[ADMIN]";@UpperCase(@UserRoles)) & Test="");@Return(@Failure("Поле не заполнено!"));"");
    @Success
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    failure имеет свои неудобства...
    как бы сделал я:
    -поле (КВК) для накопления фэйлов (notValid - наример)
    -в валидациях - возвращать суксец, но в поле дописывать имя ошибочного поля
    Код (Text):
    @If(@Trim(@ThisValue)=""; - сюды мона эвалюэйт прикрутить, к-н формулы задаваемой в общем поле
    @SetField("notValid";@Trim(@Unique(notValid:@ThisName)));
    @SetField("notValid";@Trim(@Unique(@Replace(notValid;@ThisName;""))));
    ); REM{этого можно не делать, нотуса сама обнулит поле};
    @Success
    -в событии QuerySave
    Код (Text):
        Continue=False
    On Error Goto ErrorHandler 
    Call Source.Refresh()
    Call Source.RefreshHideFormulas()  
    Dim v As Variant
    Dim doc As NotesDocument
    Set doc=Source.Document
    v=doc.GetItemValue({notValid})
    If Isarray(v) Then
    Dim s As String
    Forall m In v
    If m<>"" Then s=s+Chr(10)+Replace(Source.FieldGetText(m+"_title"),":","") 'описалово поля в CFD
    End Forall
    If s<>"" Then
    Dim title As String
    title=doc.ParentDatabase.Title
    Msgbox Source.FieldGetText({notValid_header}) & s, 48, title
    Source.GotoField(v(0))
    Exit Sub
    End If
    End If
    Continue=True
    ExitFunction:
    Exit Sub
    ErrorHandler:
    Resume ExitFunction
    ну и прикрутилбы подсветку, на хиден полях (красеньким) для ошибочных позиций
     
  6. reg5

    reg5 Гость

    susinmn
    спасибо.
    А еще теперь надо
    Код (Text):
    @If(@IsMember("[ADMIN]";@UpperCase(@UserRoles)) & Test="");@Return(@Failure("Поле не заполнено!"));"");
    @Success
    на Lotus Script мне надо по такому же принципу запретить сохранять без заполненного поля Rich Text
     
  7. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    см выше
    getunformatedtext

    для собак есть ограничение:
    для LS - не помню
     
  8. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Таким образом мы проверим только наличие текста; наличие картинок, файлов или другого контента - вряд ли ))

    reg5
    На QuerySave делаем:
    Код (Text):
    Const RTFEMPTYLENGTH = 361

    Call NotesUIDocument.Refresh(True)

    content$ = NotesRichTextItem.GetUnformattedText()
    If FullTrim(content$) = "" And NotesRichTextItem.ValueLength <= RTFEMPTYLENGTH Then
    'Поле пустое
    End If
    P.S. Лучше написать одну функцию по проверке RT-итемов на пустоту и юзать её повсеместно :KillMe:

    EDITED:
    104 - пустой RT, без формул скрытия
    362 - минимальный размер самой маленькой картинки (1x1 пиксел, ч/б)
    1148 - минимальный размер аттача (пустой txt-файл)
    RTFEMPTYLENGTH принимается равным 361.
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Пробовал действовать таким образом — много граблей и не универсально, в частности для RTLight полей будут другие значения.
    Если речь не идёт о непосредственно вставленных картинках, можно проверять с помощью NotesRichTextNavigator. Картинки — только черех DXL.

    P.S. Точных цифр, полученных в экспериментах, не помню, но размер RT-поля с маленькой картинкой был меньше, чем пустого RTLight, к тому же при очистке поля размер был другим, чем пустого. На форуме это уже обсуждалось: Опознать картинку
     
  10. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    DXL - это уже после сохранения (сомнительно - что налету возможно)
     
  11. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    На QuerySave делаешь uidoc.Refresh(True) и погнал.
    Это же байан.
     
  12. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    Omh
    ты уже делал или предполагаешь?
     
  13. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Делал когда-то
    Ща перепроверю

    Перепроверил: all works.
     
  14. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    ну хорошо - коли так :(
     
  15. reg5

    reg5 Гость

    спасибо, за помощь

    Еще возник вопрос.
    Есть поле Дата, необходимо его скрывать, если:
    - user1 - текущий пользователь
    - user2 - текущий пользователь
    Эти пользователи могут быть одним лицом
    Делаю так:
    user1 !=@UserName | user2 !=@UserName
    Поле скрыто всегда если user1 и user2 одно и тоже лицо
    Как правильно скрыть поле?
     
  16. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    list:=user1:user2;
    !@isMember(@UserName;list)
     
  17. reg5

    reg5 Гость

    xalet
    спасибо Вам!!!!
     
Загрузка...

Поделиться этой страницей