Получить текущий документ в Web

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

  1. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Есть форма, на ней есть Кнопка...
    При нажатии на нее - запускается агент
    Код (Text):
    <a href=\"/"+@WebDbName +"\\имя_агента?OpenAgent\">

    Подскажите, пожалуйста, как получить в агенте текущий документ????, при условии что этот документ не сохранен и его не нужно сохранять...

    Я уже как-то пробывал передавать параметры... типа (не знаю правильно или не правильно)
    Код (Text):
    <a href=\"/"+@WebDbName +"\\имя_агента?OpenAgent&param="+@Text(@DocumentUniqueID)+"\"

    Там я получаю этот @Text(@DocumentUniqueID), а куда там его впихнуть, типа getdocumentByUnid, или как правильно?
    Вообщем помогите, плз....
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Попробуй использовать свойство notesSession.DocumentContext.
     
  3. Sandr

    Sandr Гость

    Если агент вызывается через урл, то notesSession.DocumentContext не вернет текущий документ. ДЖля того, что бы получить определенный дкоумент в агенте, который вызывается по урлу, необходимо передать унид документа в параметре урла.
    например

    Код (Text):
    <a href=\"/"+@WebDbName +"\\имя_агента?OpenAgent&param="+@Text(@DocumentUniqueID)+"\">
    А в самом кгенте зачитать этот парам из Query_String
    Код (Text):
     dim s as new notesSession
    Set db = s.CurrentDatabase
    Set wdc = s.DocumentContext

    webdbname = Replace(db.FilePath, "\", "/")
    unid = Evaluate({@trim(@Right(@explode(Query_String_Decoded; "&"); "param="))} ,wdc)
     
  4. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Не совсем понимаю , unid я получал сам,... но так и не смог я с ним получить документ
    А также зачем webdbname???
    Для того чтобы использовать GetDocumentByURL ????????? Вообщем можно немного поподробнее?
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    С вебом работал мало, но, чувствую, сложно будет получить документ, которого нет (т.е. не сохранен) в базе.
     
  6. Sandr

    Sandr Гость

    @WebDbName возвращает веб ссылку на базу данных (хотя я использую @Subset(@DBName; -1).
    Унид Вам нужно передать в агент, что бы в нем получить документ используя db.getDocumentByUNID.

    Что в моем примере не понятно?
     
  7. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    но unid какой-то длинный находит
     
  8. Sandr

    Sandr Гость

    Это точно сказано, в агенте, который вызывается по урлу несохраненный документ не получишь.
    Я стараюсь использовать тулзранмакро для вызова агента в ВЕБе - во первых данные постятся на сервер, во вторых документ получить проще (notessession.documentcontext)...
     
  9. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Вот это зачем мне в агенте? : webdbname = Replace(db.FilePath, "\", "/")
     
  10. Sandr

    Sandr Гость

    Для: wowa
    в смысле длинный? 32 символа B). Что передали - то и нашлось... Вы же наверняка знаете, что Evaluate возвращает variant... :)
     
  11. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Возможно, еще несохраненный документ можно будет получить используя свойство notesSession.DocumentContext и событие WebQuerySave. Т.е. испольуя кнопку Submit. В самом агенте документ не сохранять.

    <!--QuoteBegin-wowa+22:02:2008, 15:44 -->
    <span class="vbquote">(wowa @ 22:02:2008, 15:44 )</span><!--QuoteEBegin-->но unid какой-то длинный находит
    [snapback]99248" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Наличие unid еще не значит, что документ сохранен в базе. B)
     
  12. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Для: Sandr
    Что я не правильно делаю? , давай заново
    на кнопке прописано
    Код (Text):
    ......<a href=\"/"+@WebDbName +"\\имя_агента?OpenAgent&param="+@Text(@DocumentUniqueID)+"\">......

    В агенте

    Код (Text):
    Dim s As New NotesSession
    Set db = s.CurrentDatabase

    Dim wdc As NotesDocument
    Dim doc As NotesDocument

    Set wdc = s.DocumentContext

    unid = Evaluate({@trim(@Right(@explode(Query_String_Decoded; "&"); "param="))} ,wdc)
    Set doc = db.GetDocumentByUNID(unid(0))
     
  13. Гость

    Кнопка Submit и событие WebQuerySave тебя точно спасет, как и упоминал уважаемый Medevic.
    Это намного быстрее и проще, чем разгребаться с унидами.
     
  14. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Что за кнопка и как ее использовать ? (((
     
  15. Гость

    <form action='здесь можно указать что угодно'>
    [FIELD] 'лотусное поле
    <input type="submit" name="button" value="Нажми меня нежно" >
    </form>

    Короче, по клику кнопки submit происходит событие WebQuerySave для твоей формы, по нему нужно запускать агент, который через notessession.contextdocument перехватит документ запроса и все его содержимое соответственно
     
  16. Гость

    Забыл добавить, что всю эта прелесть лучше просто нарисовать на форме и веб-юзверю преподносить именно формой, а не документом, только тогда ему откроется возможность заполнять поля и отсылать данные на сервер (насколько я понял, задача стоит именно так)

    А чтобы совсем исчезли неясности: в атрибуте action тега form обычно приводится адрес программы-обработчика запроса, то бишь cgi-скрипта, однако в данном случае agent вызывается через WebQuerySave, поэтому можешь просто вписать параметром урл страницы, на которую хочешь перевести юзера, либо же вообще его опустить, а перевести уже исполяющимся агентом
     
  17. Sandr

    Sandr Гость

    Для: Программер

    Не путайте человека сабмитом... Не всегда документ нужно сохранять при вызове агента.. даже чаще его сохранять не надо...А сабмит его сохранит...

    Для: wowa

    Я же написал выше

    Тоесть, лепите кнопку на форму, код кнопки @Command([ToolzRunMakro];"Имя агента")

    В этом агенте текущий окумент notessession.documentcontext

    Кнопку можете кликать так, как вам угодно, в том числе и яваскриптом.
    Код (Text):
    document.getElementById("ID княпки").click();
    Если не хотите, чт обы кнопка светилась, на последней закладке в свойстве кнопке в параметре style напишите display:none.

    Что еще сказать? Лотус в ВЕБе очень гибкий.. выходов из люьой ситуации можно найти море...

    ЗЫ: чистый сабмит использую о-о-очень редко...
     
  18. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Sandr
    Большое Спасибо! +1... Сработало как надо!
     
  19. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Sandr , может ты знаешь, почему не работает

    Код (Text):
        Set doc = s.DocumentContext
    Call doc.ReplaceItemValue( "LEA_SD_StringSearch_TX", "бла-бла-бла")
    Т.е. у меня не получается при нажатии на кнопку занести значение в поле.... Тут какие-то особенности?
     
  20. Гость

    Может быть, ты просто не сохраняешь документ ?
     
Загрузка...

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