Работа с запросами и сохранение данных

  • Автор темы oxystile
  • Дата начала
O

oxystile

Гость
#1
в доке есть поле "срок исполнения"
жму на запрос "продлить срок" далее по коду вылетает форма:
f = ws.DialogBox( "ChangeCrok" ,True, True, True, True, False, False,"doc1.Form",doc1,,True,True)
где я указываю желаемый срок, на этой форме жму "отправить запрос" и !!! срок указанный на этой вылетевшей форме сохраняется в поле того документа, из которого она была вызвана,
но видимо сохраняется в фоне, т.е. я не вижу на экране пока не переоткрою док

хотя код у меня такой
f = ws.DialogBox( "ChangeCrok" ,True, True, True, True, False, False,"doc1.Form",doc1,,True,True)
Call uidoc.Close
Dim uidoc1 As NotesUIDocument
Dim workspace1 As New NotesUIWorkspace
Set uidoc1 = workspace1.CurrentDocument
Set uidoc1 = workspace1.EditDocument(True,uidoc1.Document )

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

morpheus

скриптописец
07.08.2006
3 915
1
#2
Для: oxystile
попробовать зделать документу ReloadWindow method от NotesUIWorkspace
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#3
Для: oxystile
Непонятно каким образом происходит сохранение поля.

В смысле по кнопке "Ок"?
 

wowa

Well-Known Member
01.02.2007
845
0
#4
Я делал недавно такое , и у меня проблем не было
f = ws.DialogBox( "ChangeCrok" ,True, True, True, True, False, False,"doc1.Form",doc1,,True,True)

Далее занес значение из doc1 в DocCurrent
Call docCurrent.Save( True, True )
Call uidoc.Close
 
O

oxystile

Гость
#5
распишу как работает код, последовательно
открыль документ, там вабрали Action запрос на продление
f = ws.DialogBox( "ChangeCrok" ,True, True, True, True, False, False,"doc1.Form",doc1,,True,True)
тут открывается формочка в кот я устанавливаю желаемый срок (в форму передаю Id дока),
нажимаю на этой форме кнопку "отправить запрос"
на ней код
Set doc=uidoc.Document
Set view=db.GetView("IDMain")
Set docMain=view.GetDocumentByKey(doc.DocID(0)) 'получение документа, в кот я нажала запрос на продление
docMain.WhishCrok=doc.crok(0) ' в документ передаю желаемый срок
' поле WhishCrok скрыто, если WhishCrok=""
Call docMain.Save( True, True )
////далее код по отправке письма со ссылкой на docMain,челу кот. занимается продлением
///протоколирование, но протокол у меня в отдельной базе
ну и Call uidoc.Close, -и формочка запроса закрылась
и далее отрабатывает тот код, кот после f = ws.DialogBox(===)
Call ws.ReloadWindow( )
Call uidoc.Close
Set uidoc = ws.EditDocument(False,uidoc.Document )
так документ даже пререоткрывается, т.е. вижу "моргание экрана", но поля WhishCrok на экране нет
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#6
Для: oxystile
Зачем так сложно. Т.е. зачем искать текущий документ, сохранять в него если DialogBox автоматически апдейтит документ?
Что по вопросу. Получается у тебя два разных бэкенд документа. Один с изменениями сохранен в диалогбоксе на диске. Другой (uidoc.Document) висит в памяти без изменений. Его-то ты и переоткрываешь.
 
L

LIGHT

Гость
#7
Call uidoc.Refresh ???
Тип поля??? Вычисляемое или как, что???
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#8
Короче, если хочется изврата, то нужно получить измененный документ. А это можно сделать, например, методом NotesView.GetDocumentByKey или методом NotesUIDocument.Reload.
 
O

oxystile

Гость
#9
to LIGHT тип поля вычисляемое
to Medevic
<<
Зачем так сложно. Т.е. зачем искать текущий документ, сохранять в него если DialogBox автоматически апдейтит документ?
>>
не поняла, а как Вы предлагаете?
если есть способ сделать легче, то я только за!
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#10
Для: oxystile
Смысл диалогбокса в том, что меняем поля в диалоге, а изменения отражаются в основном документе.
Для этого, если скрыта кнопка "Ок", на своей кнопке надо поставить тип "ОК". Или использовать метод notesUIWorkspace.RefreshParentNote или собаку @Command([RefreshParentNote]).
 

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
#11
вот-вот, все просто же.. если как я понял, нужно в текущий открытый документ занести значение поля из формы, отрываемой по кнопке(action), то нужно делать так
Код:
Set doc=uidoc.Document
If Ws.DialogBox("ChangeCrok", True, True, False, False, False, False, "doc1.Form", doc1, True) Then
Call doc.WhishCrok, doc1.crok(0)) ' или так call doc.replaceitemvalue("WhishCrok", doc1.getitemvalue("crok") )
Call uidoc.Refresh
End If
 
O

oxystile

Гость
#12
Спасибо!

<<<
на вылетающей форме использовала notesUIWorkspace.RefreshParentNote
в экшене:
If Ws.DialogBox("ChangeCrok", True, True, True, False, False, False, "doc1.Form", doc1, False,True,True) Then
Call doc.replaceitemvalue("WhishCrok", doc1.getitemvalue("crok") )
End If

Call doc.Save(True,True)
Set uidoc = ws.EditDocument(False,uidoc.Document )
>>>
получилось, как надо!
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#15
Для: oxystile
Потому что надо сразу по-нормальному сделать. Если нет ричтекста, то не надо переоткрывать.
Также, скорее всего, не нужен метод Call doc.replaceitemvalue("WhishCrok", doc1.getitemvalue("crok") ). Надо лишь в форме диалоглиста поля назвать так же, как и на основной форме. Т.е. "WhishCrok". Тогда значения будут автоматом заменяться.
И зачем сразу сохранять документ (Call doc.Save(True,True))? Не очень красиво. Причем независимо от действий в диалоглисте. А если мы закрыли диалоглист? Т.е. нажали крестик.
 
O

oxystile

Гость
#16
<<Надо лишь в форме диалоглиста поля назвать так же, как и на основной форме. Т.е. "WhishCrok". >>
так сделала, но автоматом значения не заменяются
насчет Call doc.Save(True,True) согласна
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
#17
Для: oxystile
Так у тебя документ в режиме чтения? Тогда, конечно, не заменятся.
 
O

oxystile

Гость
#19
попробовала реализовать это на детском примере, получилось.
сейчас буду разбираться что в том случае не так. Спасибо!!!