документ не модифицируется

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

  1. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    Создаю документ, сохраняю его, вызываю агент и выполняю его на сервере передав NotesID агенту. Модифицирую и сохраняю документ в агенте. Агент выполнился успешно. Перечитываю документ - но изменений которые сделал агент не вижу. Почему так ? Если вызвать другой агент и передать ему тот же самый NotesID, то в этом агенте документ будет правильный, модифицированный.
    Код (Text):
        Dim s As New NotesSession
    Dim db As NotesDatabase
    Set db = s.CurrentDatabase 

    Dim ws As New NotesUIWorkspace
    Set uidoc = ws.CurrentDocument 

    Dim doc As NotesDocument, cfgdoc As NotesDocument
    Set doc = uidoc.document

    Set cfgdoc = db.CreateDocument 
    cfgdoc.Form = "DLG_LastCfg"
    cfgdoc.WebLogin = doc.WebLogin(0)
    cfgdoc.Versions = "???"
    Call cfgdoc.Save(True, False)

    Dim agent As NotesAgent
    Set agent = db.GetAgent("GetCfg")  
    If agent.RunOnServer(cfgdoc.NoteID) = 0 Then
    Messagebox "Agent ran",, "Success"
    Else
    Messagebox "Agent did not run",, "Failure"
    End If         
    Dim cfgdoc1 As NotesDocument
    Set cfgdoc1 = db.GetDocumentByID(cfgdoc.NoteID)  
    'здесь cfgdoc1.Versions все еще равна "???"
    а это код агента
    Код (Text):
    Sub Initialize
    Print "GETCFG BEGIN"

    Dim s As New NotesSession
    Dim agent As NotesAgent
    Set agent = s.CurrentAgent
    Print "ParameterDocID = " & agent.ParameterDocID   

    Dim db As NotesDatabase
    Dim doc As NotesDocument   
    Set db = s.CurrentDatabase 
    Set doc = db.GetDocumentByID(agent.ParameterDocID)
    If Not(doc Is Nothing) Then
    doc.Versions = "95,98"     
    Print "GETCFG - " & doc.UniversalID  & " WebLogin = " & doc.WebLogin(0)
    Print "doc.Versions - " & doc.Versions(0)

    Dim fl As Boolean
    fl = doc.Save(True,False)
    Print "fl - " & fl
    Else
    Print "GETCFG Error"
    End If

    End Sub
     
  2. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    GetDocumentByID в данном случае кеширует док (в принципе, не только в данном случае :) )

    Бери документ из view.
    Или сохрани NoteID/UNID, потом delete'ни документ (cfgdoc) и перевозьми. (не уверен на 100%, но на 99% должно работать)
     
  3. PavelT100

    PavelT100 Well-Known Member

    Регистрация:
    9 июл 2007
    Сообщения:
    105
    Симпатии:
    0
    View у меня нет и не хочется его заводить для этих операций. А что значит "delete'ни" ? Я знаю, что можно cfgdoc.Remove - но это ведь удалит документ из базы совсем.
     
  4. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код (Text):
    Dim agent As NotesAgent
    Set agent = db.GetAgent("GetCfg")  
    If agent.RunOnServer(cfgdoc.NoteID) = 0 Then
    Messagebox "Agent ran",, "Success"
    Else
    Messagebox "Agent did not run",, "Failure"
    End If         
    Dim UNID As String
    UNID = cfgdoc.UniversalID
    Delete cfgdoc '(можно и Set cfgdoc = Nothing)
    Set cfgdoc = db.GetDocumentByID(UNID)
    Я неправильно выразился: надо было сказать "delete'ни обьект документа". Во как..
     
Загрузка...

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