• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

wowa

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

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

и всё.... ошибка будет обрабатываться внутри ф-ции
 
Omh
так GetDocumentByUNID вернёт ОШИБКУ ... он не вернёт документ
 
Morpheus
Тьфу, сорри!
Просто я оригинальный GetDocumentByUNID уже не юзал примерно 280 лет.
Всё через самописную ф-ию.
А вот через ф-ию невалидный док вернуться может, насколько я знаю.
 
GetDocumentByUNID вернет даже тот документ, к которому у пользователя нет доступа на просмотр... IsValid при этом вернет true.
так что не лишним проверить еще на IsEmpty(doc.items) :)
 
Sandr
Вот так заморочки... Кто такой умный написал, что если документ не найден, то генерировать ошибку? Думаю, все согласятся, что он был очень умный
 
On Error goto FAIL
On Error 4091 resume next
. . .
Set Document = SomeDatabase.GetDocumentByUNID(SomeUNID)
if Document is nothing then Messagebox "Нет такого документа в этой БД!", 16, "Обращение к документу"
 
Когда-то уже писал сюда (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]
 
Omh
ты не всё учел :)

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

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

так что необходима проверка на IsValid & IsDeleted
 
Ну у меня пока таких случаев не было.
странно а у меня всегда и везде, подозреваю что от шаловливых админов, которые порой подкидывают базы на файловом уровне
 
странно а у меня всегда и везде, подозреваю что от шаловливых админов, которые порой подкидывают базы на файловом уровне
сам ты шаловливый ;) причем тут подкидывание баз на файловом уровне? IsValid & IsDeleted касается удаленных нормально доков.
я бы еще проверку добавил на IsArray(doc.Items), иногда IsValid = true & IsDeleted = false, а итемов нету. в общем, это уже обсуждалось. связано с доступом к документу.
 
IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
doc.Items ворзвращает массив всех полей, потому LS нужно всю доку просканировать.
 
IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
doc.Items ворзвращает массив всех полей, потому LS нужно всю доку просканировать.
думаешь быстрее? или уверен точно? ;)
Якова бы спросить... кажется он дизассемблировал код?
 
а може и поможет, можно попытаться выяснить, что именно происходит в обоих случаях...
зы: а как ты уверен, если это нечем померять? :(
 
чтобы вы не говорили уверен что Doc.HasItem("form") - будет самым быстрым решением :welcome:
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы