Отловить ошибку Http

Тема в разделе "Lotus - Программирование", создана пользователем NetWood, 27 сен 2009.

  1. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    Вот такая загогулина :ph34r:
    По WQO агент заполняет RTF поле Html кодом.
    В коде встречаются конструкции типа <img src="pages/unsorted/$File/oem1.jpg" alt="" border="0">
    Все бы ничего, но бывает (лог пас не тот), что доступ к доку pages/unsorted закрыт полем READERS и /$File/oem1.jpg не отображается по понятным причинам.
    Соответственно в логах видим
    HTTP Web Server: Lotus Notes Exception - Entry not found in index [/base.nsf/pages/unsorted/$File/oem1.jpg]

    Вопрос. Как бы эту "ошибку" отловить заранее в агенте LS чтоб вывести какую нить мессагу или другой html подсунуть?
    может проверить есть ли доступ к доку у соответствующего юзера заранее? во?

    ку:
    Кусочек кода такой
    Код (Text):
                    If ( rtitem.Type = RICHTEXT ) Then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
    ''  Messagebox ( o.Name )
    '''' вот тут надо по условию заранее отловить     HTTP Web Server: Lotus Notes Exception - Entry not found in index
    out = out +|<a title="|+vDoc.Category2(0)+|" href="pages/|+Cstr(vDoc.PageName(0))+_
    |?open&start=1&count=|+Cstr(profile.getItemValue("DefaultDisplayCount")(0))+_
    |"><img src="pages/| +Cstr(vDoc.PageName(0))+ |/$File/| + Cstr(o.Name) + |" alt="| + Cstr(vDoc.Title(0)) + |" border=0 ></a>|+|<BR>|                       
    End If
    End Forall
    End If
     
  2. K-Fire

    K-Fire Гость

    Самый простой способ, ИМХО, перенести картинки в документы с общим доступом.
     
  3. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    конечно есть
    Код (Text):
    level% = notesDatabase.QueryAccess( name$ )
    privileges& = notesDatabase.QueryAccessPrivileges( name$ )
    roles = notesDatabase.QueryAccessRoles( name$ )
    получите по юзеру всё что требуется и роли и доступ
    ну или на крайняк если всё явно в доке, придется проверить ридерс поле на присутствие имени
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну ладно, узнали мы, что нету доступа, а дальше?
    как WQO агенту сказать, что делать дальше? :)
     
  5. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    Сэнкс но это не годится. Нужен доступ к конкретному доку а не к базе.
    Покуда вот так заткнул

    Код (Text):
        Set dbreggroup = web.session.GetDatabase("",profile.GetItemValue("NABGroupFile")(0))
    Set viewreg=dbreg.GetView("($VIMGroups)")
    ...

    If ( rtitem.Type = RICHTEXT ) Then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
    ''  Messagebox ( o.Name )  
    '' ===========================================
    '' устранение ошибки нет доступа к имеджу если док под Readers
    '' если AuthorizedReaders пустое - выводим картинку
    ''если AuthorizedReaders не пустое - ищем юзера в группе и выводим img

    user= Cstr(web.session.DocumentContext.Remote_User(0)) ' имя юзера, Anonymous = ""                         
    If vDoc.AuthorizedReaders(0)="" Then   
    nomemb = True
    Else                               
    '' проверить наличие юзера в группе доступа к доку
    Forall dr In vDoc.AuthorizedReaders
    Set docUserGroup = viewreg.GetDocumentByKey(dr,True) ' найти группу с юзерами
    If Not (docUserGroup Is Nothing) Then ' в этой группе ищем юзера
    Forall memb In docUserGroup.Members
    If user = memb Then                                            
    ismemb = True '' попался голубец
    Else                                           
    End If
    End Forall
    End If                             
    End Forall 
    End If
    '' =============================================   
    If ismemb Or nomemb Then '' доступ возможен по readers и анонимусу                               
    out = out +|<a title="|+vDoc.Category2(0)+|" href="pages/|+Cstr(vDoc.PageName(0))+_
    |?open&start=1&count=|+Cstr(profile.getItemValue("DefaultDisplayCount")(0))+_
    |"><img src="pages/| +Cstr(vDoc.PageName(0))+ |/$File/| + Cstr(o.Name) + |" alt="| + Cstr(vDoc.Title(0)) + |" border=0 ></a> |+|<BR>|                                                  
    Else '' все остальные пошли нафиг
    out = out +_
    |<table width="100%"><tr><td align="center" class="REDALERT" width="100%"><span>|+_
    ... строгая надпись...
    |</span></td></tr></table>|                                                
    End If                             
    End If
    End Forall
    End If
    роль не проверяю...
     
  6. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    а что мешает запускать агент от лица сервера или того кто имеет доступ?
    тогда и проверять ничего не нужно
     
  7. Akupaka

    Akupaka А че я?.. О.о

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

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    есть редайрект. есть форма ошибок ($$ReturnGeneralError), где можно писать и редайректить куда хошь
    как пример, поле: @If(@Like(@LowerCase(messagestring);"document%deleted");"1";"0")
    в завис. от него формируем HTML Header Content:
    @If(newpath!="";"<META HTTP-EQUIV=\"Refresh\" Content=\"0; URL="+newpath+"\">";"")

    можно контент забирать по адресу и парсить
     
Загрузка...

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