• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

wowa

Есть форма, на ней есть Кнопка...
При нажатии на нее - запускается агент
Код:
<a href=\"/"+@WebDbName +"\\имя_агента?OpenAgent\">


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

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


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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Попробуй использовать свойство notesSession.DocumentContext.
 
S

Sandr

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

Код:
<a href=\"/"+@WebDbName +"\\имя_агента?OpenAgent&param="+@Text(@DocumentUniqueID)+"\">

А в самом кгенте зачитать этот парам из Query_String
Код:
 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)
 
W

wowa

Не совсем понимаю , unid я получал сам,... но так и не смог я с ним получить документ
А также зачем webdbname???
Для того чтобы использовать GetDocumentByURL ????????? Вообщем можно немного поподробнее?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
С вебом работал мало, но, чувствую, сложно будет получить документ, которого нет (т.е. не сохранен) в базе.
 
S

Sandr

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

Что в моем примере не понятно?
 
S

Sandr

С вебом работал мало, но, чувствую, сложно будет получить документ, которого нет (т.е. не сохранен) в базе.

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

wowa

Вот это зачем мне в агенте? : webdbname = Replace(db.FilePath, "\", "/")
 
S

Sandr

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Возможно, еще несохраненный документ можно будет получить используя свойство 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)
 
W

wowa

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


В агенте

Код:
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))
 
G

Guest

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

wowa

Что за кнопка и как ее использовать ? (((
 
G

Guest

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

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

Guest

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

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

Sandr

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

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

Для: wowa

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

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

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

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

Кнопку можете кликать так, как вам угодно, в том числе и яваскриптом.
Код:
document.getElementById("ID княпки").click();

Если не хотите, чт обы кнопка светилась, на последней закладке в свойстве кнопке в параметре style напишите display:none.

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

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

wowa

Sandr
Большое Спасибо! +1... Сработало как надо!
 
W

wowa

Sandr , может ты знаешь, почему не работает

Код:
	Set doc = s.DocumentContext
Call doc.ReplaceItemValue( "LEA_SD_StringSearch_TX", "бла-бла-бла")

Т.е. у меня не получается при нажатии на кнопку занести значение в поле.... Тут какие-то особенности?
 
G

Guest

Может быть, ты просто не сохраняешь документ ?
 
Мы в соцсетях:

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