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

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

  1. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Скажите , есть Unid, надо по нему получить документ!!!
    Код (Text):
    Set docParent = dbCurrent.GetDocumentByUNID( stDocParentUNID )
    Тут ошибка, так как документ был удален

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    wowa
    Решаеться просто - делаетсяь отдельная ф-ция

    Код (Text):
    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
    и всё.... ошибка будет обрабатываться внутри ф-ции
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    wowa
    Или проверить на IsValid
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Omh
    так GetDocumentByUNID вернёт ОШИБКУ ... он не вернёт документ
     
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Morpheus
    Тьфу, сорри!
    Просто я оригинальный GetDocumentByUNID уже не юзал примерно 280 лет.
    Всё через самописную ф-ию.
    А вот через ф-ию невалидный док вернуться может, насколько я знаю.
     
  6. Sandr

    Sandr Гость

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

    fedotxxl Well-Known Member

    Регистрация:
    9 ноя 2005
    Сообщения:
    614
    Симпатии:
    0
    Sandr
    Вот так заморочки... Кто такой умный написал, что если документ не найден, то генерировать ошибку? Думаю, все согласятся, что он был очень умный
     
  8. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    fedotxxl , )))))
     
  9. Commander

    Commander Гость

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Когда-то уже писал сюда (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]
     
  11. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    Omh
    ты не всё учел :)

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

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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну у меня пока таких случаев не было.
    Как приспичит, подточу ф-ию :)
     
  13. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    странно а у меня всегда и везде, подозреваю что от шаловливых админов, которые порой подкидывают базы на файловом уровне
     
  14. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    сам ты шаловливый ;) причем тут подкидывание баз на файловом уровне? IsValid & IsDeleted касается удаленных нормально доков.
    я бы еще проверку добавил на IsArray(doc.Items), иногда IsValid = true & IsDeleted = false, а итемов нету. в общем, это уже обсуждалось. связано с доступом к документу.
     
  15. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    IsArray(doc.Items) рекомендую заменить на обращение к любому полю с обработкой эксепшена. Чуть быстрее будет.
    doc.Items ворзвращает массив всех полей, потому LS нужно всю доку просканировать.
     
  16. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    думаешь быстрее? или уверен точно? ;)
    Якова бы спросить... кажется он дизассемблировал код?
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Думаю я быстрее. И уверен точно. :(
    Дизассемблер тут не поможет, т.к. хронометражом не занимается.
     
  18. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    а може и поможет, можно попытаться выяснить, что именно происходит в обоих случаях...
    зы: а как ты уверен, если это нечем померять? :(
     
  19. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Этого я не говорил. Замерить есть чем.
     
  20. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    чтобы вы не говорили уверен что Doc.HasItem("form") - будет самым быстрым решением :welcome:
     
Загрузка...

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