• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы wowa
  • Дата начала
W

wowa

Скажите , есть Unid, надо по нему получить документ!!!
Код:
Set docParent = dbCurrent.GetDocumentByUNID( stDocParentUNID )
Тут ошибка, так как документ был удален

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

morpheus

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

и всё.... ошибка будет обрабатываться внутри ф-ции
 
M

morpheus

Omh
так GetDocumentByUNID вернёт ОШИБКУ ... он не вернёт документ
 
O

Omh

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

Sandr

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

fedotxxl

Sandr
Вот так заморочки... Кто такой умный написал, что если документ не найден, то генерировать ошибку? Думаю, все согласятся, что он был очень умный
 
C

Commander

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

Omh

Когда-то уже писал сюда (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

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Omh
ты не всё учел :)

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

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

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

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Ну у меня пока таких случаев не было.
странно а у меня всегда и везде, подозреваю что от шаловливых админов, которые порой подкидывают базы на файловом уровне
 
A

Akupaka

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

TIA

IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
doc.Items ворзвращает массив всех полей, потому LS нужно всю доку просканировать.
 
A

Akupaka

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

Akupaka

а може и поможет, можно попытаться выяснить, что именно происходит в обоих случаях...
зы: а как ты уверен, если это нечем померять? :(
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
чтобы вы не говорили уверен что Doc.HasItem("form") - будет самым быстрым решением :welcome:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!