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

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

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

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

Обновление внедренного представления

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
День добрый, Всем.

Собственно что есть:
Форма с внедренным представлением, в котором отображаются документы.

При открытии документа следующий код:
Код:
Sub Queryopendocument(Source As Notesuiview, Continue As Variant)
Dim s As New NotesSession
Call s.CurrentDatabase.GetAgent("(AG)").Run(Source.CaretNoteID)
Continue = False
exit sub

Агент открывает выбранный документ в диалоговом окне:
Код:
	Dim s As New NotesSession
Dim WS_DLG As New NotesUIWorkspace
Dim doc As NotesDocument

Set doc = s.CurrentDatabase.GetDocumentByID(s.CurrentAgent.ParameterDocID)

If WS_DLG.DialogBox("DLG_FORM", True, True, False, False, False, False, "...", doc, True, False, False) Then
Call doc.Save(True,True)
End If

Собственно вопрос, как обновить представление после сохранения документа открытого в диалоге?
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Вот в 6.5 зато другой трабл вылез.

В 8 у представления есть замечательное событие OnSelect.

Что делается:
На событии OnSelect в переменную окружения (notes.ini) пишем NoteID документа который выделен, для того чтобы потом из документа куда внедрено представления произвести некоторые действия.

Как это можно сделать для 6.5 без OnSelect?
 
O

Omh

Поместить кнопку обрабатывающую выделенный документ в само view как action.
И всю логику написать там.

Как там вообще открытый док и док из внедрённого view связаны?
Сколько лет программлю под лотус, как-то не приходилось нарываться на такие задачи, что бы передавать noteid выделенного документа через энвайромент.
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
Поместить кнопку обрабатывающую выделенный документ в само view как action.
И всю логику написать там.

Как там вообще открытый док и док из внедрённого view связаны?
Сколько лет программлю под лотус, как-то не приходилось нарываться на такие задачи, что бы передавать noteid выделенного документа через энвайромент.

Да они связаны, поэтому определить что именно в нужном представлении был последний клик получится.

Не нравятся мне кнопки встроенные во внедренное представление хоть убей)
 

Gandliar

Lotus Team
16.02.2004
556
26
BIT
40
Да они связаны, поэтому определить что именно в нужном представлении был последний клик получится.

Не нравятся мне кнопки встроенные во внедренное представление хоть убей)

В этом случае надо учитывать 2 варианта

1. представление из текущей базы
2. представление из другой базы

если 1 все просто, в скрипте просто ловишь текущий уидок
если 2 - то как в 1 не прокатывает, надо ловить уидок 1 раз на событие открытия вида
 
T

TIA

>На событии OnSelect в переменную окружения (notes.ini) пишем NoteID документа который выделен, для того чтобы потом из документа куда внедрено представления произвести некоторые действия.
А что будет если открыть 2 или более таких документов, с внедрённым представлением! Выбрать в первом из встроенной вьюшки документ, а во втором "произвести некоторые действия" :)
 
N

nvyush

А что будет если открыть 2 или более таких документов, с внедрённым представлением! Выбрать в первом из встроенной вьюшки документ, а во втором "произвести некоторые действия"
При открытии документа с внедрённым представлением в событии QueryOpen представления можно получить документ через Workspace.CurrentDocument и добавлять к имени переменной его unid/noteid.

Добавлено
Делал аналогичную реализацию, только unid подчинённого документа передавал через очереди.
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
38
А что будет если открыть 2 или более таких документов, с внедрённым представлением! Выбрать в первом из встроенной вьюшки документ, а во втором "произвести некоторые действия" wink.gif

В моем случае все норм будет, т.к. чтобы производить действия нужно открыть документ на редактирование, с репликами не работают.
 
T

TIA

kizarek
>В моем случае все норм будет, т.к. чтобы производить действия нужно открыть документ на редактирование, с репликами не работают.

Я про то, какой NoteId возмётся из notes.ini. Когда в первом документе производится выбор из встроенного представления, то в notes.ini запишется NoteId. Если во втором документе, при выполнении "некоторых действий" получить документ по этому NoteId, то получится выбранный в первом документе, а надо выбранный во втором.
 
N

nvyush

Я про то, какой NoteId возмётся из notes.ini. Когда в первом документе производится выбор из встроенного представления, то в notes.ini запишется NoteId. Если во втором документе, при выполнении "некоторых действий" получить документ по этому NoteId, то получится выбранный в первом документе, а надо выбранный во втором.
При открытии документа с внедрённым представлением в событии QueryOpen представления можно получить документ через Workspace.CurrentDocument и добавлять к имени переменной его unid/noteid.

Добавлено
Делал аналогичную реализацию, только unid подчинённого документа передавал через очереди.
Я делал так: при открытии документа с внедрённым представлением в QueryOpen представления запоминал NoteID документа и использовал его в имени очереди сообщений, соответственно, сколько документов не открывай, для каждого будет своя очередь, так что путаницы не возникнет. Аналогично можно добавлять NoteID "главного" документа к имени переменной окружения, чистить notes.ini от таких переменных можно по закрытию документа/базы.
 
Мы в соцсетях:

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