Повторное Получение Документа В Одной Сессии

Serduko

Well-known member
11.10.2011
170
0
#1
Есть ссылка на документ, полученная в начале исполнения (например агента на клиенте), в процессе исполнения, в другой сессии, другим пользователем изменяются данные в этом документе. Как получить ссылку на тот же документ с измененными данными, в рамках исполнения текущей сессии (агента), повторная инициализация (например Getdocumentbyunid) не помогает?
 

savl

Lotus team
28.10.2011
2 131
102
#2
Getdocumentbyunid - как раз таки помогает, но только если данные точно уже изменены, документ сохранен и приехал на этот сервер.
Если он еще не сохранен, то никаких изменений нет.
 

Serduko

Well-known member
11.10.2011
170
0
#3
Getdocumentbyunid - как раз таки помогает, но только если данные точно уже изменены, документ сохранен и приехал на этот сервер.
Если он еще не сохранен, то никаких изменений нет.
Документ сохранен и приехал на тот сервер, я проверял. Getdocumentbyunid ловит старый документ.
 

savl

Lotus team
28.10.2011
2 131
102
#5
Serduko
Getdocumentbyunid ловит старый документ
Что-то я не верю... Сейчас сам еще раз перепроверю, пока отчет строится не могу.
У меня такая штука используется для обработки конфликтов, так что странно.
Правда я в другую переменную записываю. Попробуйте пока обнулить свой первоначальный документ и записать потом туда его снова.

Domino-Designer
view.GetDocumentByKey вас спасет, но 1 раз =)
Ну да, осталось только сделать вьюху и индекс в ней построить.
 

savl

Lotus team
28.10.2011
2 131
102
#7
Поковырял, такое дело:
Надо обнулить док и получать его снова через переменную, где содержится UNID
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
Код:
	Dim ses As New NotesSession
Dim db As NotesDatabase
Dim ag As notesagent
Dim doc As NotesDocument
Dim doc2 As NotesDocument
Dim stri As String
Dim unid As String
Set db = ses.Currentdatabase

Set ag = db.Getagent("du")
'В агенте DU пробег по всем документам, test = "1" и save.
Set doc = db.Unprocesseddocuments.Getfirstdocument()

unid = doc.Universalid

stri = "" & doc.Lastmodified & Chr(10) & Chr(13)
Call ag.Run()

Set doc = nothing
Set doc = db.Getdocumentbyunid(unid)
stri = stri & doc.Lastmodified & Chr(10) & Chr(13)

Call ag.Run()

Set db = ses.Currentdatabase
Set doc2 = db.Getdocumentbyunid(unid)
stri = stri & doc2.Lastmodified & Chr(10) & Chr(13)

MsgBox stri
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Результат</div></div><div class="sp-body"><div class="sp-content">---------------------------
---------------------------
09.07.2014 14:54:28

09.07.2014 14:56:49

09.07.2014 14:56:49
---------------------------
ОК
---------------------------
 

Andre

Well-known member
29.07.2004
108
0
#8
Поковырял, такое дело:
Надо обнулить док и получать его снова через переменную, где содержится UNID
Имхо, ход мысли правильный, а вот способ реализации ...
Для этого существует statement Delete . Подробности в букваре
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#10
а всё из-за "Оптимизации" скрипта, когда индусы подумали что не гоже каждый раз брать один и тот же обьект и задёргивать базу :(
 

savl

Lotus team
28.10.2011
2 131
102
#11
Боюсь представить какой у LS GC, вернее его реализация.