Getdocumentbyunid , если документ был удален

wowa

Well-known member
01.02.2007
845
0
#1
Скажите , есть Unid, надо по нему получить документ!!!
Код:
Set docParent = dbCurrent.GetDocumentByUNID( stDocParentUNID )
Тут ошибка, так как документ был удален

Как сделать проверку, чтобы не была ошибка??
Пытался сделать типа такого:
Код:
If dbcurrent.GetDocumentByUNID( stDocParentUNID ).isDeleted Then
но тоже самое... как быть?
 

morpheus

скриптописец
07.08.2006
3 915
1
#2
wowa
Решаеться просто - делаетсяь отдельная ф-ция

Код:
Function GetDocByUNIDA(db As NotesDatabase, sunid As String) As NotesDocument
On Error Goto err1
Set GetDocByUNIDA = db.GetDocumentByUNID(sunid)
If Len(GetDocByUNIDA.UniversalID)=0 Then Set GetDocByUNIDA = Nothing
Exit Function

err1:
Err = 0
Exit Function
End Function
и всё.... ошибка будет обрабатываться внутри ф-ции
 

morpheus

скриптописец
07.08.2006
3 915
1
#4
Omh
так GetDocumentByUNID вернёт ОШИБКУ ... он не вернёт документ
 

Omh

Lotus team
04.07.2007
2 210
1
#5
Morpheus
Тьфу, сорри!
Просто я оригинальный GetDocumentByUNID уже не юзал примерно 280 лет.
Всё через самописную ф-ию.
А вот через ф-ию невалидный док вернуться может, насколько я знаю.
 
S

Sandr

#6
GetDocumentByUNID вернет даже тот документ, к которому у пользователя нет доступа на просмотр... IsValid при этом вернет true.
так что не лишним проверить еще на IsEmpty(doc.items) :)
 

fedotxxl

Well-known member
09.11.2005
614
0
#7
Sandr
Вот так заморочки... Кто такой умный написал, что если документ не найден, то генерировать ошибку? Думаю, все согласятся, что он был очень умный
 
C

Commander

#9
On Error goto FAIL
On Error 4091 resume next
. . .
Set Document = SomeDatabase.GetDocumentByUNID(SomeUNID)
if Document is nothing then Messagebox "Нет такого документа в этой БД!", 16, "Обращение к документу"
 

Omh

Lotus team
04.07.2007
2 210
1
#10
Когда-то уже писал сюда (2 года назад)
С тех пор немного, но изменилось.
Юзаю такую ф-ию и доволен как слон:
<!--shcode--><pre><code class='vb'>Function GetDocByUNID(db As NotesDatabase, doc As NotesDocument, UNID As String) As Boolean
On Error Goto Errh

GetDocByUNID = False

If db Is Nothing Then Exit Function
If Trim$(UNID) = "" Then Exit Function

On Error Resume Next
Set doc = db.GetDocumentByUNID(UNID)
On Error Goto Errh

If Not doc Is Nothing Then GetDocByUNID = True

Exit Function
Errh:
Call ErrHandler
Exit Function
End Function[/CODE]
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#11
Omh
ты не всё учел :)

ошибка у нас возвращается если документ удален полностью(без окурков) или же когда унид неправильный

документ недобиток возвращается если окурок еще есть и если он поврежден

так что необходима проверка на IsValid & IsDeleted
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#13
Ну у меня пока таких случаев не было.
странно а у меня всегда и везде, подозреваю что от шаловливых админов, которые порой подкидывают базы на файловом уровне
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#14
странно а у меня всегда и везде, подозреваю что от шаловливых админов, которые порой подкидывают базы на файловом уровне
сам ты шаловливый ;) причем тут подкидывание баз на файловом уровне? IsValid & IsDeleted касается удаленных нормально доков.
я бы еще проверку добавил на IsArray(doc.Items), иногда IsValid = true & IsDeleted = false, а итемов нету. в общем, это уже обсуждалось. связано с доступом к документу.
 

TIA

:-)
Lotus team
15.05.2009
790
3
#15
IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
doc.Items ворзвращает массив всех полей, потому LS нужно всю доку просканировать.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#16
IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
doc.Items ворзвращает массив всех полей, потому LS нужно всю доку просканировать.
думаешь быстрее? или уверен точно? ;)
Якова бы спросить... кажется он дизассемблировал код?
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#18
а може и поможет, можно попытаться выяснить, что именно происходит в обоих случаях...
зы: а как ты уверен, если это нечем померять? :(
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#20
чтобы вы не говорили уверен что Doc.HasItem("form") - будет самым быстрым решением :welcome: