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

Тема в разделе "Lotus - Программирование", создана пользователем HOBI4OK, 12 янв 2007.

Статус темы:
Закрыта.
  1. HOBI4OK

    HOBI4OK Гость

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

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

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

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

    oshmianski Гость

    Для: HOBI4OK
    Вопрос совсем не простой.
    Как вариант решения, можно использовать следующий прием:
    1. Во встраиваемом представлении в Target Frame (single click) пишем @Environment("EmbededDocumentUNID"; @Text(@DocumentUniqueID))
    2. На форме на кнопке пишем следующее:
    Код (Text):
    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
     
  3. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    Для: oshmianski, интересный вариант

    можно без кнопки написать код в Queryopendocument представления и
    открывать документ на редактирование прямо из встроенного представления
    ,
    а обычно использую PickListCollection, выбираю и редактирую (удаляю) документ
    Код (Text):
    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
     
  4. oshmianski

    oshmianski Гость

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

    HOBI4OK Гость

    Для: oshmianski

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

    Для: Kee_Keekkenen

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: HOBI4OK
    Если сделать кнопку в самом представлении, а во встроенном показать тулбар, то никаких (почти :)) проблем с получением текущего или выделенных документов не будет.
     
  7. Elena Nefedova

    Elena Nefedova Гость

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

    HOBI4OK Гость

    Для: Elena Nefedova и Medevic

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

    oshmianski Гость

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

    Elena Nefedova Гость

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

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oshmianski
    Никто не спорит, что это лучший метод. Просто альтернатива.
    У твоего метода, кстати, есть достаточно серьезный недостаток. А именно, очень реальна ситуация, когда считаются/запишутся данные другого документа.
    Пользователь открывает окно. В нем он выбирает документ, но не жмет кнопку, а открывает другое окно. Там выбирает документ, жмет кнопку. Возвращается к первому окну. Видит, что выбран правильный документ и жмет кнопку. В результате неверные данные.
     
  12. K-Fire

    K-Fire Гость

    HOBI4OK:

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

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

    oshmianski Гость

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--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 открытого документа. А потом делать проверку.
     
Загрузка...
Статус темы:
Закрыта.

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