Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.58/178: Рейтинг темы: голосов - 178, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 1,567
1

Обновление внедренной вьюхи в доке

16.12.2009, 11:16. Показов 32435. Ответов 35
Метки нет (Все метки)

Внедренная вьюха с экшеном, создающим док в эту вьюху (запуск агента) - просто так без ручного рефреша док не отображает сразу...
Авторского доступа у юзера к основному доку нет.
ws.CurrentDocument.Refresh из агента не катит - команда недоступна в данном контексте - оно и понятно...
@-обновления ничего не делают из-за режима чтения...

Анриал из чтения обновить вьюху или есть способ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2009, 11:16
Ответы с готовыми решениями:

Неправильное отображение внедренной вьюхи
Здравствуйте. Странный глюк, не пойму что я делаю не так :-( В базе создал форму типа...

Новые поля в доке, старый поля в доке ....
Всех с наступающим!!! Привет. Дело такое Есть форма в которой создаются новые поля, хотя в...

"Обновление" внедрённой формы при переходе в основной форме на другую запись
Здравствуйте! Я использовал штатный макрос "ВыбратьОбъект" для выбора внедрённой формы в...

Обновление основной формы данными из внедрённой формы, основанной на основной форме
Всем привет! Извиняюсь за тавтологию, но зато изложено кратко! В приложении БД. Не обращайте...

35
0 / 0 / 0
Регистрация: 04.11.2007
Сообщений: 3,019
16.12.2009, 11:23 2
Klido
ставь в свойсве вида индекс - автоматикал
и юзай скрипт
ws.ViewRefresh
0
0 / 0 / 0
Регистрация: 28.06.2009
Сообщений: 1,567
16.12.2009, 11:32 3
Цитата Сообщение от ToxaRat
ставь в свойсве вида индекс - автоматикал
стоит, конечно...




Цитата Сообщение от ToxaRat
ws.ViewRefresh
ага, оно - вот я про что забыл спсб
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
23.03.2013, 06:17 4
Задолбался...
Все начальные условия, как и всегда были выполнены: у внедрённого представления было выставлено обновление индекса в Automatic + в форме создаваемого документа всё было сделано, как описано:


В событиях формы прописываем:

В (Declarations):
Dim nuiwsView As NotesUIWorkspace

На Initialize:
Set nuiwsView = New NotesUIWorkspace

На Queryclose и иногда на PostSave:
Call nuiwsView.ViewRefresh
но документ после создания и закрытия не отображался.

Пробовал в коде создания документа в виде отлавливать события QuerySave и onUnload создаваемого UI-документа, а в обработчиках обновлять вид, но не получалось, т.к. обновление происходило в контексте хоть и закрываемого, но ещё открытого на экране создававшегося документа.

Пробовал перебросить код в агент, чтобы при завершении агента документ обновился, но это не помогло, т.к. из агентов не работает отлов событий (On Event) создаваемого UI-документа.

Генерировать переоткрытие документа с внедрённым представлением не стал, т.к. это чревато в случаях, когда были нажаты какие-либо действия внедрённого вида, на которых установлен отлов каких-то внешних событий.

Помогло дополнительно к начальным условиям установка галки «Automatically refresh fields» в свойствах формы, содержащий внедрённый вид.
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
23.03.2013, 16:13 5
Блин, даже эта галка в некоторых случаях не работает...(
Сделал бэкграундный LS-агент, который должен в цикле определять, закрылся ли созданный документ, а потом делать nuiws.ViewRefresh() и завершать агент, но оно работает как-то через раз - валит клиента. Думаю, может можно сделать это как-то на Java? Что посоветуете?
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
23.03.2013, 16:46 6
VladSh
Если открываешь документ не в диалоге, то весь код выполняется до конца, даже если документ уже открыт на экране.
попробуй 2 раза вызывать подряд на сохранении или закрытии : Call nuiwsView.ViewRefresh
Может стоит переработать именно с переоткрытием? при создании данного докмента - закрывать основной, затем при закрытии нового - открывать.
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
23.03.2013, 17:38 7
Цитата Сообщение от savl
Если открываешь документ не в диалоге, то весь код выполняется до конца, даже если документ уже открыт на экране.
Это общеизвестно) Но On Event всё-таки работает по открытому доку, просто Call nuiwsView.ViewRefresh выполняется не в контексте документа с внедрённым видом, а в контексте созданного документа.



Цитата Сообщение от savl
попробуй 2 раза вызывать подряд на сохранении или закрытии : Call nuiwsView.ViewRefresh
Это работает только при закрытии создаваемого документа из обычного вида, не внедрённого. Чтобы док отображался во внедрённом надо кроме вида (Call nuiwsView.ViewRefresh) ещё и рефрешить документ - в виде-то док появляется, - я кнопку добавил, которая показывает количество энтрисов до и после создания-сохранения-закрытия, и док реально в виде добавляется, но не отображается в во внедрённом виде, т.к. именно документ надо обновлять. Для ситуации EditMode всё работает, вот
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">скрипт</div></div><div class="sp-body"><div class="sp-content">

LotusScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Initialize
Set view_nuiws = New NotesUIWorkspace
Set view_nuiv = view_nuiws.CurrentView
Set view_nuid = view_nuiws.CurrentDocument
End Sub
 
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If Not view_nuiv Is Nothyng Then
Call view_nuiv.View.Refresh()
End If
 
Call view_nuiws.ViewRefresh()
 
If Not view_nuid Is Nothyng Then
If view_nuid.EditMode Then
Call view_nuid.Refresh()    здесь работает, но только если не перевести основной в ReadMode с помощью Ctrl+E
Else
здесь пробовал так
view_nuid.Document.ReplaceItemValue("$DOCUMENTUPDATE", 1).savetodisk = 0
Call view_nuid.Close()
а на QC основного проверяю и вычищаю этот item, но при вычищении - проблема изменения документа - начинает спрашивать, сохранить или нет, т.е. этот вариант отпадает...
End If
End If
End Sub


Цитата Сообщение от savl
Может стоит переработать именно с переоткрытием? при создании данного документа - закрывать основной, затем при закрытии нового - открывать.
В основном есть несколько внедрённых вьюх, из каждой может создаваться свой документ, если переоткрыть, то другие документы, созданные из основного, при закрытии не переоткроют основной, т.к. при первом переоткрытии во всех вспомогательных разрушится первоначальный UI-контекст основного документа.

Идеальным вариантом было бы как-то после закрытия любого документа выполнять код в основном, допустим эмулировать нажатия кнопки с Call nuiws.ViewRefresh(), но как это сделать пока непонятно.
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
23.03.2013, 18:44 8
Решил запуском бэкграундного агента на Onunload форм создаваемых-сохраняемых-закрываемых документов с обновлением основного.
Код агента:

LotusScript
1
2
3
4
Dim nuiws As NotesUIWorkspace
Sleep(1)
Set nuiws = New NotesUIWorkspace
Call nuiws.ViewRefresh()
Всё работает и в режиме редактирования, и в режиме чтения. Единственное, что часики на пол секунды появляются после закрытия документа, и сам док во внедрённой вьюхе появляется не мгновенно.
Решение от галки «Automatically refresh fields» в свойствах формы не зависит.
0
0 / 0 / 0
Регистрация: 18.07.2008
Сообщений: 242
24.03.2013, 14:40 9
В Declarations

LotusScript
1
Declare Sub keybd_event Lib "user32.dll" (Byval bVk As Integer, Byval bScan As Integer, Byval dwFlags As Integer,Byval dwExtraInfo As Integer)
В PostSave

LotusScript
1
keybd_event &h78,0,0,0
понятное дело, работает только под Win
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
24.03.2013, 20:22 10
Azat
Ранее в этих местах использовался код для эмуляции нажатия F9; изыскания были как раз по причине ухода от WinAPI.
0
0 / 0 / 0
Регистрация: 09.12.2012
Сообщений: 101
25.03.2013, 07:53 11
Есть еще "хардкорный" NotesTimer, который можно посадить в контекст дока(вьюхи), и дальше играться с переменными окружения.... но это просто хлипкая подпорка))
0
0 / 0 / 0
Регистрация: 09.06.2012
Сообщений: 113
12.06.2013, 18:07 12
Цитата Сообщение от Klido
Внедренная вьюха с экшеном, создающим док в эту вьюху (запуск агента) - просто так без ручного рефреша док не отображает сразу...



Цитата Сообщение от Klido
Для ситуации EditMode всё работает, вот

Код
Sub Initialize
Set view_nuiws = New NotesUIWorkspace
Set view_nuiv = view_nuiws.CurrentView
Set view_nuid = view_nuiws.CurrentDocument
End Sub

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
If Not view_nuiv Is Nothyng Then
Call view_nuiv.View.Refresh()
End If

Call view_nuiws.ViewRefresh()

If Not view_nuid Is Nothyng Then
If view_nuid.EditMode Then
Call view_nuid.Refresh()    здесь работает, но только если не перевести основной в ReadMode с помощью Ctrl+E
Else
здесь пробовал так
view_nuid.Document.ReplaceItemValue("$DOCUMENTUPDATE", 1).savetodisk = 0
Call view_nuid.Close()
а на QC основного проверяю и вычищаю этот item, но при вычищении - проблема изменения документа - начинает спрашивать, сохранить или нет, т.е. этот вариант отпадает...
End If
End If
End Sub
Так я и не понял... что, как B)

Пробую отловить uidoc основного документа, делаю так:
1) Создаю "Library" (Declaration) Public uidoc As NotesUIDocument
2) В основном док (Global) Use"Library" + в (Postopen) Set uidoc=Source
3) Подключаю библиотеку к виду, и в конце акции вида делаю Call uidoc.Refresh

Object variable not set :blink: есть у меня шанс, иду к успеху?
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
12.06.2013, 18:45 13
есть у меня шанс, иду к успеху?
К красному экрану)))
Mitya
условия какие? вьюха где находится? может все проще можно.
P.S. uidoc в представлении кто будет заполнять? для формы и для вьюхи - разные контексты.
0
1 / 1 / 0
Регистрация: 07.12.2009
Сообщений: 1,197
13.06.2013, 00:29 14
Mitya
пацан к успеху шел
Варианты "как сделать" находятся ниже того сообщения, на которое вы дали цитату.
0
0 / 0 / 0
Регистрация: 09.06.2012
Сообщений: 113
13.06.2013, 10:39 15
Цитата Сообщение от VladSh
Mitya
пацан к успеху шел
Варианты "как сделать" находятся ниже того сообщения, на которое вы дали цитату.
:D

Новый день ничего не принес. А могло и фортануть.


Цитата Сообщение от VladSh
Решил запуском бэкграундного агента на Onunload форм создаваемых-сохраняемых-закрываемых документов с обновлением основного.
Код агента:

Код
Dim nuiws As NotesUIWorkspace
Sleep(1)
Set nuiws = New NotesUIWorkspace
Call nuiws.ViewRefresh()
I need help
1) бэкграунд агент - это агент с поднятым флагом "Run in background client thread" ?
2) Во внедренном представлении акция выполняет:

Код
....
Set docnew = db.CreateDocument
docnew.Form = "Test"
Call docnew.ReplaceItemValue("1",doc.1)
Call docnew.ReplaceItemValue("2",doc.2)
Call docnew.Save(True, False)
....
3) В самой форме "Test" (onUnload) @Command([RunAgent];"RefreshAgent")
4) И, если я правильно понял, то внедренное представление никак не связано с документом?
Меня все не отпускает возможность отловить UI основного документа, и обновлять это UIDoc в акции внедренного представления.

p.s. хм.. так OnUnload - обработчик события, возникающего перед закрытием документа по форе. А я же docNew не открываю по форме =(
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
13.06.2013, 11:08 16
Меня все не отпускает возможность отловить UI основного документа, и обновлять это UIDoc в акции внедренного представления.
Попробуй так ловить основной документ, потом в Action делать refresh. На твой страх и риск.

LotusScript
1
2
3
4
5
6
7
Sub Postopen(Source As Notesuiview)
 
Set viewUI = Source  Объявлен в (Globals)
Dim ws As New NotesUIWorkspace
 
Set parentUIDoc = ws.CurrentDocument  Объявлен в (Globals)
Set parentDoc = parentUIDoc.Document  Объявлен в (Globals)
0
0 / 0 / 0
Регистрация: 09.06.2012
Сообщений: 113
13.06.2013, 11:48 17
Цитата Сообщение от savl
Попробуй так ловить основной документ, потом в Action делать refresh. На твой страх и риск.

LotusScript
1
2
3
4
5
6
7
Sub Postopen(Source As Notesuiview)
 
Set viewUI = Source  Объявлен в (Globals)
Dim ws As New NotesUIWorkspace
 
Set parentUIDoc = ws.CurrentDocument  Объявлен в (Globals)
Set parentDoc = parentUIDoc.Document  Объявлен в (Globals)
Страх оправдан, лотус завалился на строке Call parentUIdoc.Refresh в Акции внедренного представления =))

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

Как вариант, вынести акции представления на форму документа. Но это не вариант :D
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
13.06.2013, 11:55 18
Вот в который раз убеждаюсь...
Сделать что надо? Обновить документ или представление?

Представление обновляется кодом в Actions:

LotusScript
1
2
3
        Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
Call ws.ViewRefresh
0
0 / 0 / 0
Регистрация: 09.06.2012
Сообщений: 113
13.06.2013, 12:07 19
Цитата Сообщение от savl
Вот в который раз убеждаюсь...
Сделать что надо? Обновить документ или представление?

Представление обновляется кодом в Actions:

LotusScript
1
2
3
        Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh
Call ws.ViewRefresh
У меня работает, если док сохранен, а вот если он новый... хоть 3 раза Call ws.ViewRefresh - и ничего
а сохранять док перед акцией вообще не хочется.

И зачем 2 раза вызывать ViewRefresh, если не сложно

ВОТ! Нужно обновить новый док по акции внедренного представления, для того, чтобы отобразить все добавленные документы по акции
0
0 / 0 / 0
Регистрация: 27.10.2011
Сообщений: 2,124
13.06.2013, 12:42 20
Mitya
А вот добавленные документы как связываются?
Прописываешь в них UNID "нового" документа и тогда они отображаются?
Если все так как я описал, то тебе надо сохранять документ перед добавлением.
И выводить сообщение, что мол необходимо сохранить. Сэкономишь кучу времени и нервов.
0
13.06.2013, 12:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2013, 12:42

Вычислить: пример в доке!
Вычислить: пример в доке! Пожалуйста помогите сделать, всё уже перепробывал не получается! Заранее...

По какой доке учить AngularJS?
Всем привет, Хочется освоить angularjs Я php/javascript/mysql программист со специализацией...

Атач айди файла в персон доке
привет знатоки лотуса не давно поднимал тему про срок айди файлов...

Https + Getdocumentbyurl - что подкрутить в серверном доке.
Кажись, это всё-таки больше к администрированию относиться, чем к программированию. Делаю базу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru