агент работает правильно только в Debug

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

  1. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    LN 7. Написал вот такой агент.

    [codebox]Sub Initialize
    Dim db As NotesDatabase
    Set s = New NotesSession
    Set db = s.CurrentDatabase
    Dim doc_af As NotesDocument
    Set doc_af = db.GetDocumentByUNID("E9BBC4BE56A8C2EEC32574180047F76B") 'для эксперимента выбираем документ по фикированному UNID

    Dim db_ver As New NotesDatabase("","")
    If( Not(db_ver.Open(db.Server, "EvVers.nsf") )) Then
    Exit Sub
    End If

    Dim doc As NotesDocument
    Set doc= db_ver.CreateDocument
    doc.Form = "REC"

    Dim rt As NotesRichTextItem
    If doc.HasItem("rt") Then
    Set rt = doc.GetFirstItem( "rt" )
    Else
    Set rt = New NotesRichTextItem( doc, "rt" )
    End If
    If Not rt Is Nothing Then
    If rt.Type = RICHTEXT Then
    Call rt.AppendDocLink(doc_af, "")
    End If
    Else
    Msgbox "Error!"
    End If
    Dim ws As New NotesUIWorkspace
    Set uidoc = ws.EditDocument(True, doc)
    End Sub[/codebox]

    Ожидаю, что при открытии вновь созданного документа в поле rt будет ссылка.
    Если выполнить агент в debug режиме по шагам последовательно нажимая F8, то так и будет, выполнится Set rt = New NotesRichTextItem( doc, "rt" ) и добавится ссылка которая правильно будет отображена в форме.
    Но если F8 не нажимать, то ссылки не будет, Msgbox "Error!" тоже не сработает.
    Почему так ?
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    PavelT100
    а агент случаем не шедулерный?
     
  3. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    Агент не шедулерный, я его пока запускаю строго из дизайнера - в списке агентов выделяю, нажимаю правую кнопку мыши и выбираю Run.
    Предпологаю после отладки запускать его по пункту меня, но это, думаю, не имеет значения сейчас.


    Вдогонку еще один не понятный вопрос:
    после
    [codebox]Set uidoc = ws.EditDocument(True, doc)[/codebox]
    начинает открываться форма для документа, в форме обрабатывается событие
    [codebox]Sub Postopen(Source As Notesuidocument)[/codebox]
    в этом событии проверяется Source.Isnewdoc,
    и что не понятно - Source.Isnewdoc равен False, хотя я же документ еще не сохранял, и по моим представлениям он должен быть новым.
     
  4. Sandr

    Sandr Гость

    Source.Isnewdoc равень тру тока при композе...

    кучок
    Код (Text):
    If doc.HasItem("rt") Then
    Set rt = doc.GetFirstItem( "rt" )  
    Else
    Set rt = New NotesRichTextItem( doc, "rt" )
    End If
    смело переделывайте на
    Код (Text):
    Set rt = New NotesRichTextItem( doc, "rt" )
    Так как док у Вас новый...

    А в остельном - прикольный глюк. Порпробуйте сохранить документ перед открытием...
     
  5. Yakov

    Yakov Гость

    Может быть, Call rt.Update() поможет?
     
  6. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    - спасибо большое

    , да я понимаю, это когда уже творческий поиск перешел в порывы отчаяния, я стал так "экспериментировать".

    - а вот этого как раз делать не хочется, дело в том, что задумка была - заполнить форму, открыть ее на редактирование пользователю и пользователь сам должен дальше решать, что делать, сохранять новый документ или нет - вполне возможно, что пользователь откажется от дальнейшего редактирования и сохранения документа. А если на этом этапе документ уже существует, то прийдется как -то исукусственно его удалять, что лишнее.

    А вот rt.Update() очень даже заработало, спасибо Yakov, считаю, что вопрос исчерпан.
     
Загрузка...

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