Работа с полями (обязательные, авторы)

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

  1. FRun

    FRun Гость

    Репутация:
    0
    Доброго времени суток!
    У меня 2 вопроса
    1) Как сделать обязательное поле? Есть ли какая нибудь функция которая это делает? Или делать этом кодом? То каким?
    Пробовал делать так
    тип поле текст, редактируюмое
    Код:
    @If(appar=""; @Failure("Выбирите подразделение"); 
    @Length(appar)>254; 
    @Failure("Количество символов в поле не должно превышать числа 254"); @Success)
    но что то не выходит!

    2) Создал поле в форме, где отражается имя пользователя создавщий документ
    в свойствах тип поставил авторы и вычислять при созданий
    а в значений написал
    Код:
    @V3UserName
    пробовал и пустое значение
    но он или остается пустым или изменяется когда открываешь документ.
    Как быть?
    Подскажите люди! Заранее спасибо!
     
  2. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Обязательное - я обычно юзаю скриптовую проверку на QuerySave event.
    Можно юзать validation у поля, но мне не вставляет.

    По второму вопросу: @UserName вроде...
     
  3. FRun

    FRun Гость

    Репутация:
    0
    когда сохраняю док выдает ошибку
    'Object variable not set'
    где не так?
    Код:
    Sub Querysave(Source As Notesuidocument, Continue As Variant)
    Dim session As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim uidoc As NotesUIDocument 
    Dim fdocnum As String
    Set db = session.CurrentDatabase
    Set doc = ws.CurrentDocument.Document 
    fdocnum = uidoc.GetFieldText( "num_gos" ))
    If fdocnum = "" Then 
    Messagebox "Заполните поле"
    Exit Sub
    End If
    End Sub
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Кто такой uidoc? Наверное, это Source. :unsure:
     
  5. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    FRun
    ErrorHandler кто ставить будет?
    А код, извините, гогно.

    Попробуй так (хандлер в примере специально олдскульный)

    Код:
    On Error Goto Errh
    
    Dim Doc as NotesDocument
    Set Doc = Source.Document
    if Doc is Nothing then Exit Sub
    
    if Doc.GetItemValue("num_gos")(0) = "" then
    Messagebox "Scuko!", 0 + 64, "Information"
    Continue = False
    Exit Sub
    end if
    
    Exit Sub
    errh:
    Msgbox Error & | in line | & Erl(), 64, |Lotus Notes (| & Lsi_info(2) & |)|
    Exit Sub
     
  6. FRun

    FRun Гость

    Репутация:
    0
    Omh, спасибо отлично работает!

    еще вопрос не по сабжу:
    короче создаю по лотусскрипту ответный документ
    вот код
    Код:
    Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim ws As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim doc As NotesDocument 
    Dim col As NotesDocumentCollection 
    Dim res As NotesDocument 
    Dim found_doc As NotesDocument 
    Dim uidoc As NotesUIDocument 
    Dim undoc As NotesItem  
    Dim unres As NotesItem 
    Dim fmain As String 
    Dim item As NotesItem
    
    Set uidoc = ws.CurrentDocument 
    Set doc = ws.CurrentDocument.Document
    Set db = session.CurrentDatabase
    Set col = doc.Responses 
    Set undoc = doc.GetFirstItem ("main_id")
    If col.Count > 0 Then 
    Set res = col.GetFirstDocument 
    Do While Not res Is Nothing 
    Set unres=	res.GetFirstItem ("par_id")
    If undoc.Text = unres.Text Then 
    Set found_doc = res 
    Call ws.EditDocument (False, found_doc,,,,False)
    
    Exit Sub 
    Else
    Set res = col.GetNextDocument(res) 
    End If
    Loop
    Else	
    If found_doc Is Nothing Then 
    Set found_doc = New NotesDocument(db) 
    End If
    fmain = uidoc.FieldGetText( "main_id" )
    fdocnum = uidoc.FieldGetText( "DocNum" )
    fdocdate = uidoc.FieldGetText( "DocDate" )
    fsubj = uidoc.FieldGetText( "Subject" )
    fcat = uidoc.FieldGetText( "Categories" )
    fappar = uidoc.FieldGetText( "appar" )
    found_doc.Form = "response"
    Call 	found_doc.MakeResponse(doc)
    Set item = found_doc.ReplaceItemValue( "par_id", fmain)
    Call ws.EditDocument(True,found_doc) 
    End If
    End Sub
    когда запускаю ругает
    'обджект вариабл нот сет'
    самое интересное иногда работает а иногда нет
    в чем причина?
    помоему не работает Set col = doc.Responses
    как обойти?
     
  7. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Дебаггером?
     
  8. FRun

    FRun Гость

    Репутация:
    0
    вот именно что дебаггер не срабатывая выдается ошибка
     
  9. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    FRun
    Doc.Responses может иногда вернуть не коллекцию с нулевым или больше количеством, а именно Nothing.
    Сделай проверку.

    И вставь хандлер.
     
  10. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Бывает, конечно. Тогда On Error. Всегда срабатывает.
     
  11. FRun

    FRun Гость

    Репутация:
    0
    спасибо за советы!
    когда вставлю on error ошибка будет обработана и код выполниться? (как я понял)
     
  12. Medevic

    Medevic Что это ? :)
    Lotus team

    Репутация:
    0
    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Как сделаешь, так и будет работать. Тебе надо ошибку и номер строки узнать.
     
  13. FRun

    FRun Гость

    Репутация:
    0
    сделал вот так
    Код:
    On Error Resume Next
    ...
    If col.Count > 0 Then ' ругается здесь
    If Err = ErrDivisionByZero Then
    Goto lir
    End If
    ...
    Else	
    lir:
    If found_doc Is Nothing Then 
    Set found_doc = New NotesDocument(db) 
    End If
    ...
    вроде нормально работает
     
  14. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Как Coll получаешь?
    Doc.Responses?
     
  15. FRun

    FRun Гость

    Репутация:
    0
    подскажите как поставить условие что коллекция Nothing?

    да, см. выше
     
  16. Omh

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код:
    Dim Dc As NotesDocumentCollection
    Set Dc = Doc.Responses
    If Not Dc is Nothing then
    if Dc.Count > 0 then
    'обработка
    End if
    End if
     
  17. FRun

    FRun Гость

    Репутация:
    0
    вот спасибо!
     
Загрузка...

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