Обновить UI-док во фрейме из другого фрейма

Тема в разделе "Lotus - Программирование", создана пользователем alexas, 2 апр 2013.

  1. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Есть 2 фрейма: в левом - док на редактировании, в правом - View.
    Из View, LS изменяет левый док. Надо, сразу после изменений сделать RefreshHideFormulas в доке слева (в идеале Refresh).
    Как попроще?
     
  2. Darkhan

    Darkhan Lotus team
    Lotus team

    Регистрация:
    14 дек 2012
    Сообщения:
    97
    Симпатии:
    4
    @Command([RefreshFrame]; "FrameName") не помогет?
     
  3. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Попробуйте в этом скрипте Evaluat-ом выполнять @SetTargetFrame и @Command([RefreshFrame])


    Попробовал:

    Код (LotusScript):
    @SetTargetFrame("Frame1");
    @Command([EditDocument]; "0"; 1)
    Должно работать
     
  4. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    @Command([RefreshFrame]; "FrameName") не рефрешит док к сожалению
     
  5. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Также

    Код (LotusScript):
    Call notesUIWorkspace.ReloadWindow( )
    - В принципе довольно нормально работает

    а вот это:
    Код (LotusScript):
    ws.SetTargetFrame("Frame1")
    ws.EditDocument False, doc
    вообще на ура
    :) :mellow:
     
  6. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    К сожалению, это не мой случай. Это открывает док из View в PreviewPane: у меня "левый" док - просто абстрактный док, к докам из View правого фрейма не относящийся и фрейм не PreviewPane :mellow:
     
  7. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Ну из изначальной поставноки вопроса я понял что у вас как раз стандартный фреймсет поделенный надвое - однин фрейм: вьюшка, в другом фрейме: отображаемый оттуда документ. ну да ладно :mellow: Я так понимаю ваш этот абстрактный док берет данные из этих обрабатываемых документов в представлении?

    В таком случае попробуйте Call notesUIWorkspace.ReloadWindow() - если уж и это не поможет, то тогда можно хардкорно переоткрывать целиком базу :)

    А вообще, если не секрет, зачем вам такое нужно? может этот абстрактный док, обновлять отдельно? (по кнопке, ссылке и т.д.)
     
  8. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    1. Изначально - левый фрейм пустой, потом туда грузится док. ReloadWindow( ) вызовет открытие пустого левого фрейма, конечно туда можно опять подгрузить нужный док но это не быстрые операции - моргание экрана бъет по глазам и закрытие-открытие вкладок то-же не эстетично. Мне надо получить UI уже открытого дока, а не перезагрузить его в в фрейм.
    2. Этот вариант мог бы иметь место, если-бы док не был открыт во фрейме - newInstance = False в фрейм не работает - откроется еще один экземпляр дока в новой вкладке :mellow:
     
  9. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
  10. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    А если сохранить UNID дока в левом фрейме в notes.ini
    Затем переполучить его и открыть именно в этом фрейме открытого фреймсета?
     
  11. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    А как у вас открывается док во фрейме? В результате чего он туда грузится?

    Добавлено:
    NotesUIDocument - это текущий документ, это UI, получить его не находясь на нем - нельзя; нельзя перейти от NotesDocument к NotesUIDocument - только наооборот.

    Поэтому боюсь вам придется только перегружать фрейм ... тем самым работая с NotesUIWorkspace
     
  12. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Постоянная перезагрузка дока в фрейм во время работы - не айс, сильно по глазам бъет.
    Ну базу-то обновлять - это уж совсем...
    Абстрактный док это, в общепринятой терминологии, "отчет" по части данных из разнотипных доков в View правого фрейма. Отчет формируется автоматом при открытии левого дока и автоматом обновляется при изменении критериев формирования отчета (при редактировании левого дока) и при именении правых доков (RealTime) пока юзер даботает в этом FrameSet-е.
    Измененные данные в левый док записываются и отображаются нормально. сводные данные (собственно отчет) можно расчитать скритптом и уже сформированные, записать в левый док, это без проблем. Но! Надо изменить док в соответствии с критериями видимости различных параграфов. Т.е. надо RefreshHideFormulas, как минимум, в уже показанном на мониторе документе для обеспечения нормального юзабилити.
     
  13. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    А если эту галочку выставить?
     

    Вложения:

    • fp.png
      fp.png
      Размер файла:
      15,7 КБ
      Просмотров:
      120
  14. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Это сработает, если буду по полям бегать, а надо при изменении дока со стороны LS из View.
    Я из за индусских ограничений даже кнопку рефрешную программно нажать не могу!!! - ...URLOpen( "java script:... не работает в фреймах!!!
    Но чувствую какое-то решение должно быть! Стандартное хочу :mellow: , прикручивать сюда хепаги на пустом месте уж очень не хочется, да и там проблемы будут точно.
     
  15. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Можно - через ws.Edit (newInstance = False ) но это, как я уже писал, в фрейме не работает.
     
  16. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    JS таймер на форме? Старт на событии OnLoad. Скрытая HTML-кнопка с Refresh.
    Запустить таймер и каждые 5 сек обновлять.
    Тормозить наверное правда будет.
     
  17. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Точно! Спасибо! Нормальный рефреш из-за тормозов не сделать, а HideFormulas должно прокатить (там и милисекунды можно).
    Но будет утечка памяти, вдруг юзер час сидеть за формой будет? Как с этим справиться, может кто знает?
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Попросить переоткрыть форму после работы более Х времени...
    Предложить сохранить текущую форму и переоткрыть.
    Можно проверить про утечку памяти на себе, открыть на пару часов и заполнять.
    Может и обойдется, хотя всего не предусмотреть.
     
  19. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Как память убегает в диспетчере визуально видно. Единицы килобайт считает зараза.
    Переоткрытие формы память не освободит, по-моему.
     
  20. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    savl, еще раз спасибо за дельный совет в нужное время.
    Сделал так:
    UI не получаю. На форме, JS проверяет значение управляющего поля "NeedRefresh" каждые 100мс. После внесения изменений в дос в бекграунде, записываю в управляющее поле код который определяет, что надо сделать в UI. JS видит "NeedRefresh" !=0 и нажимает нужную кнопку (раньше мог только сделать какие-то действия в UI получив дос через ws.EditDocument и то с большими ограничениями - например Refresh - нельзя, падает клиент).
    Т.о. док сам себя обновляет когда надо, такой типа AJAX. Не тормозит, редактировать не мешает, утечка памяти не замечена. Можно навесить таймеров на кучу доков без проблем - таймер работает только в доке на котором фокус.

    Тема закрыта.
     
Загрузка...

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