• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Доступ к документу через Embedded View

  • Автор темы Автор темы HOBI4OK
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
H

HOBI4OK

Здравствуйте!

Вопрос, вероятно простой, но ответ как-то не находится.

Итак. Открыта форма, в которой есть embedded view. В этой форме есть кнопка (button). В embedded view курсор установлен на каком-то документе. Вопрос: как получить доступ к этому документу при нажатии на кнопку?

Заранее благодарен за ответы.
 
Для: HOBI4OK
Вопрос совсем не простой.
Как вариант решения, можно использовать следующий прием:
1. Во встраиваемом представлении в Target Frame (single click) пишем @Environment("EmbededDocumentUNID"; @Text(@DocumentUniqueID))
2. На форме на кнопке пишем следующее:
Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDataBase
Dim embDocUNID As String
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uiDoc As NotesUIDocument
Dim SelectedEmbDoc As NotesDocument

Set db = session.currentDataBase

Set uiDoc = ws.CurrentDocument
Set doc = uiDoc.Document


EmbDocUNID = session.GetEnvironmentString ("EmbededDocumentUNID")

If EmbDocUNID <> "" Then
If EmbDocUNID <> doc.UNID(0) Then
Set selectedEmbDoc = db.getDocumentByUNID(EmbDocUNID)
Call ws.DialogBox ("EmbViewForm", True, True,False, False, False, False,_
"Выделенный в EmbView документ",selectedEmbDoc, True )
End If
End If	
End Sub
(с) Andre
 
Для: oshmianski, интересный вариант

можно без кнопки написать код в Queryopendocument представления и
открывать документ на редактирование прямо из встроенного представления
,
а обычно использую PickListCollection, выбираю и редактирую (удаляю) документ
Код:
Sub Queryopendocument(Source As Notesuiview, Continue As Variant)
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Set doc = Source.Documents.GetFirstDocument
Continue = False
If ws.DialogBox(doc.Form(0), _
True, True, False, False, False, False, "Название окна", doc, True) Then
doc.Save True, False		
ws.ViewRefresh		
End If

End Sub
 
Для: Kee_Keekkenen
Согласен, самый простой способ использовать код в Queryopendocument представления. но...
у меня лично есть ситуация, когда этот код не отрабатывает. почему? пока не разобрался. правда EmbView и документы в нем из другой бд.
 
Для: oshmianski

Решение действительно не совсем тривиально. Огромное спасибо за подсказку. Обязательно воспользуюсь Вашим советом!

Для: Kee_Keekkenen

Ваше решение не совсем по заданному вопросу. Ситуация такова: при нажатии на кнопку должен обрабатываться не только документ, содержащий эту кнопку, но и документ, на котором стоит курсор в embedded view.
 
Для: HOBI4OK
Если сделать кнопку в самом представлении, а во встроенном показать тулбар, то никаких (почти :)) проблем с получением текущего или выделенных документов не будет.
 
Согласна с Medevic.
Получаем текущую вьюху и документы
Код:
 Set uiworkspace = new NotesUIWorkspace
Set uiview = uiworkspace.CurrentView
Set coll = uiview.Documents
Возможно, и кнопка на форме также сможет отработать, если поймает текущую вьюху (и если эта вьюха одна на форме)
 
Для: Elena Nefedova и Medevic

Пробовал делать нечто подобное, что предложил уважаемый гуру Elena Nefedova. К сожалению такое не проходит. А что касается кнопки, то ее все же очень желательно поместить не в представление, а в форму...
 
Для: Medevic
Для: Elena Nefedova
Иногда, использование действий из Action Bar встроенного представления не представляется возможным из-за архитектуры системы. Скажем как у меня. Открывается основной документ. В момент открытия с ним ассоциируется класс. И все действия (нажатие всех кнопок и т.д.) должно быть неразрывно связано с методами и свойствами класса, а не основного документа и тем более зависимых документов (которые, кстати, могут хранится вообще в другой бд).
 
Для: oshmianski
Судя по тексту вопроса, вряд ли HOBI4OK уже успел ассоциировать класс с документом :)

Для: HOBI4OK
Что значит "не подходит"? Это самый реальный способ, повсеместно применяемый в "родных" приложениях от IBM.
Предлагаю попробовать его еще раз в конкретной ситуации и отписать сюда, что именно не получается.
 
Для: oshmianski
Никто не спорит, что это лучший метод. Просто альтернатива.
У твоего метода, кстати, есть достаточно серьезный недостаток. А именно, очень реальна ситуация, когда считаются/запишутся данные другого документа.
Пользователь открывает окно. В нем он выбирает документ, но не жмет кнопку, а открывает другое окно. Там выбирает документ, жмет кнопку. Возвращается к первому окну. Видит, что выбран правильный документ и жмет кнопку. В результате неверные данные.
 
HOBI4OK:

Рекомендую использовать немного другой подход, Kee_Keekkenen упомянул о нем. Такой подход будет работать всегда и без глюков:

На кнопке в форме вы открываете диалог с выбором документов (тех же самых что в емб.вью находятся). Ну и дальше делаете с выбранным док-том что хотите. А пользователей приучайте использовать емб.вью только как средство увидеть список документов и перейти в них. Операции над этими документами - только описанным выше способом.
 
Для: Medevic
я и не говорил, что метод лучший. просто ответил на поставленный вопрос так, как знал.
если делать просто, то я бы все-таки делал через код в Queryopendocument представления. показывать Action Bar у встроенных представлений можно только с 6-ки.
 
<!--QuoteBegin-Medevic+12:01:2007, 12:03 -->
<span class="vbquote">(Medevic @ 12:01:2007, 12:03 )</span><!--QuoteEBegin-->У твоего метода, кстати, есть достаточно серьезный недостаток. А именно, очень реальна ситуация, когда считаются/запишутся данные другого документа.
Пользователь открывает окно. В нем он выбирает документ, но не жмет кнопку, а открывает другое окно. Там выбирает документ, жмет кнопку. Возвращается к первому окну. Видит, что выбран правильный документ и жмет кнопку. В результате неверные данные.
[snapback]52939" rel="nofollow" target="_blank[/snapback]​
[/quote]
Хотя этого можно избежать, если писать также UNID открытого документа. А потом делать проверку.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab