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

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

  1. oxystile

    oxystile Гость

    в доке есть поле "срок исполнения"
    жму на запрос "продлить срок" далее по коду вылетает форма:
    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 )

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

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: oxystile
    попробовать зделать документу ReloadWindow method от NotesUIWorkspace
     
  3. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oxystile
    Непонятно каким образом происходит сохранение поля.

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

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Я делал недавно такое , и у меня проблем не было
    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
     
  5. oxystile

    oxystile Гость

    распишу как работает код, последовательно
    открыль документ, там вабрали 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 на экране нет
     
  6. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oxystile
    Зачем так сложно. Т.е. зачем искать текущий документ, сохранять в него если DialogBox автоматически апдейтит документ?
    Что по вопросу. Получается у тебя два разных бэкенд документа. Один с изменениями сохранен в диалогбоксе на диске. Другой (uidoc.Document) висит в памяти без изменений. Его-то ты и переоткрываешь.
     
  7. LIGHT

    LIGHT Гость

    Call uidoc.Refresh ???
    Тип поля??? Вычисляемое или как, что???
     
  8. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Короче, если хочется изврата, то нужно получить измененный документ. А это можно сделать, например, методом NotesView.GetDocumentByKey или методом NotesUIDocument.Reload.
     
  9. oxystile

    oxystile Гость

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oxystile
    Смысл диалогбокса в том, что меняем поля в диалоге, а изменения отражаются в основном документе.
    Для этого, если скрыта кнопка "Ок", на своей кнопке надо поставить тип "ОК". Или использовать метод notesUIWorkspace.RefreshParentNote или собаку @Command([RefreshParentNote]).
     
  11. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    вот-вот, все просто же.. если как я понял, нужно в текущий открытый документ занести значение поля из формы, отрываемой по кнопке(action), то нужно делать так
    Код (Text):
    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
     
  12. oxystile

    oxystile Гость

    Спасибо!

    <<<
    на вылетающей форме использовала 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 )
    >>>
    получилось, как надо!
     
  13. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oxystile
    А зачем переоткрывать документ?
     
  14. oxystile

    oxystile Гость

    да, не знаю...я сперва закоментила переоткрытие, посмотрела, что WhishCrok не обновляется, вот и оставила
     
  15. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oxystile
    Потому что надо сразу по-нормальному сделать. Если нет ричтекста, то не надо переоткрывать.
    Также, скорее всего, не нужен метод Call doc.replaceitemvalue("WhishCrok", doc1.getitemvalue("crok") ). Надо лишь в форме диалоглиста поля назвать так же, как и на основной форме. Т.е. "WhishCrok". Тогда значения будут автоматом заменяться.
    И зачем сразу сохранять документ (Call doc.Save(True,True))? Не очень красиво. Причем независимо от действий в диалоглисте. А если мы закрыли диалоглист? Т.е. нажали крестик.
     
  16. oxystile

    oxystile Гость

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

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: oxystile
    Так у тебя документ в режиме чтения? Тогда, конечно, не заменятся.
     
  18. oxystile

    oxystile Гость

    нет, в реж. редактирования, в том то оно
     
  19. oxystile

    oxystile Гость

    попробовала реализовать это на детском примере, получилось.
    сейчас буду разбираться что в том случае не так. Спасибо!!!
     
Загрузка...
Похожие Темы - Работа запросами сохранение
  1. BBDragon
    Ответов:
    11
    Просмотров:
    18.737
  2. Andrey Kha
    Ответов:
    0
    Просмотров:
    16
  3. Hoasker
    Ответов:
    0
    Просмотров:
    63
  4. garri671
    Ответов:
    0
    Просмотров:
    48
  5. lelik200969
    Ответов:
    0
    Просмотров:
    49

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