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

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

  1. PavelT100

    PavelT100 Well-Known Member

    Репутация:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    103
    Симпатии:
    0
    Создаю документ, сохраняю его, вызываю агент и выполняю его на сервере передав NotesID агенту. Модифицирую и сохраняю документ в агенте. Агент выполнился успешно. Перечитываю документ - но изменений которые сделал агент не вижу. Почему так ? Если вызвать другой агент и передать ему тот же самый NotesID, то в этом агенте документ будет правильный, модифицированный.
    Код:
    	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 все еще равна "???"
    а это код агента
    Код:
    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 Well-Known Member
    Lotus team

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

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

    PavelT100 Well-Known Member

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

    Omh Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Код:
    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'ни обьект документа". Во как..
     
Загрузка...

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