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

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

HOBI4OK

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

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

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

Заранее благодарен за ответы.
 
O

oshmianski

Для: 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
 
K

Kee_Keekkenen

Для: 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
 
O

oshmianski

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

HOBI4OK

Для: oshmianski

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

Для: Kee_Keekkenen

Ваше решение не совсем по заданному вопросу. Ситуация такова: при нажатии на кнопку должен обрабатываться не только документ, содержащий эту кнопку, но и документ, на котором стоит курсор в embedded view.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: HOBI4OK
Если сделать кнопку в самом представлении, а во встроенном показать тулбар, то никаких (почти :)) проблем с получением текущего или выделенных документов не будет.
 
E

Elena Nefedova

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

HOBI4OK

Для: Elena Nefedova и Medevic

Пробовал делать нечто подобное, что предложил уважаемый гуру Elena Nefedova. К сожалению такое не проходит. А что касается кнопки, то ее все же очень желательно поместить не в представление, а в форму...
 
O

oshmianski

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

Elena Nefedova

Для: oshmianski
Судя по тексту вопроса, вряд ли HOBI4OK уже успел ассоциировать класс с документом :)

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

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: oshmianski
Никто не спорит, что это лучший метод. Просто альтернатива.
У твоего метода, кстати, есть достаточно серьезный недостаток. А именно, очень реальна ситуация, когда считаются/запишутся данные другого документа.
Пользователь открывает окно. В нем он выбирает документ, но не жмет кнопку, а открывает другое окно. Там выбирает документ, жмет кнопку. Возвращается к первому окну. Видит, что выбран правильный документ и жмет кнопку. В результате неверные данные.
 
K

K-Fire

HOBI4OK:

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

На кнопке в форме вы открываете диалог с выбором документов (тех же самых что в емб.вью находятся). Ну и дальше делаете с выбранным док-том что хотите. А пользователей приучайте использовать емб.вью только как средство увидеть список документов и перейти в них. Операции над этими документами - только описанным выше способом.
 
O

oshmianski

Для: Medevic
я и не говорил, что метод лучший. просто ответил на поставленный вопрос так, как знал.
если делать просто, то я бы все-таки делал через код в Queryopendocument представления. показывать Action Bar у встроенных представлений можно только с 6-ки.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
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 открытого документа. А потом делать проверку.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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