Пересчитать вычисляемые поля в другом документе

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

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет!
    Ситуация следущая:
    Открыт документ, после некоторых действий необходимо пересчитать вычисляемые поля в другом документе, который в свою очередь может быть:
    а) Не открыт
    б) Открыт для чтения
    в) Открыт для редактирования

    Подскажите как реализовать?
     
  2. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    документ "задача" + агент

    если надо обновить данніе создаём докуент - задачку, и агент ( каждый 1- 5 минут ) как только увидет документ задачку сразу постараеться отработать, если вариант в) то просто попоробует(агент) опять черз 1- 5 минут
     
  3. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Если речь о клиенте, для определения "открытости" документа можно воспользоваться NotesDocument.IsUIDocOpen
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    nvy странная это ф-ция, мне так и не удалось с ней подружиться (скорее это мои проблемы). Имхо, блокировки стандартные или самописные надежнее.
     
  5. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ещё одни вариант — на форме cfd-поле $IsDocBeingEdited с формулой @IsDocBeingEdited.
    Проверка doc.GetItemValue("$IsDocBeingEdited")(0):
    "" — документ закрыт
    "0" — документ открыт на чтение
    "1" — документ открыт на редактирование.
    Грабли:
    1) если документ открывался в предпросмотре, он остаётся открытым даже после закрытия предпросмотра, пока в предпросмотре не будет открыт другой документ (это интерфейсная проблема, doc.IsUIDocOpen ведёт себя также)
    2) при открытии документа на редактирование поле не всегда (не сразу?) обновляется.
     
  6. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    OKEN, блокировки стандартные так же полны странностей... :rolleyes:
     
  7. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    В догонку — предложенные мной варианты применимы для работы одного пользователя в одном клиенте LN. Определить "открытость" документа другим пользователем на другой машине таким образом не получится. Если нужно последнее — вариант от Morpheus или пляски с блокировками.
     
  8. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    А собственно как пересчитать поля, имея объект NotesDocument?
     
  9. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Есть doc.ComputeWithForm
    Для открытых документов можно получить uidoc через notesUIWorkspace.EditDocument c newInstance=false и выполнить Refresh.
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    т.е. если вариант в) то агент не сможет выполнить ComputeWithForm?
     
  11. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    dimat
    не сможет, и не должен смочь )))

    сможет после разблокирования
     
  12. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Как описать общую переменную, которую можно использовать во всех событиях формы?
    пример:
    есть кнопка на форме, после нажатия которой значение общей переменной v становится "1",
    в собыии postsave формы:
    If v="1" then

    //Какие то действия

    End If
     
  13. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Описываете переменную в разделе формы (Globals) (Declarations)

    Например:
    Public v As String

    Только настоятельно не рекомендую называть глобальные переменные как v, i и т.п., хотя бы GlobalVariable, CurrentDocument, иначе потом легко запутаться "кто из ху".
     
  14. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    dimat
    использовать глобальные переменные
     
  15. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    В (Globals) (Declarations)
    Public GlStatus as String

    В (Globals) Initialize
    GlStatus="0"

    Действие по нажатию кнопки:
    GlStatus="1"

    Событие формы Postsave:
    Print GlStatus //пишет 0

    что не так сделал?
     
  16. oshmianski

    oshmianski Гость

    попробуйте перенести в PostOpen
     
  17. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Кнопка, случайно, не собачная?
     
  18. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    нет, LS
     
  19. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    стуация: открыт док, с ним "связан" другой, надо пересчитать другой после изменения в текущем

    если изменения зафиксированы в бэкэннде и др. док надо пересчитать при открытии/обновлении...
    можно записать ИД изменённого в очередь и при наступлении к-л события обновить с ним связанный
    всё это в контексте одного инстанса (сервера или клиента)
     
  20. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    dimat
    Код (LotusScript):
    '(Globals)(Declarations)
    Public GlStatus As String
    Sub Initialize
    GlStatus="0"
    Print   "Initialize GlStatus=" + GlStatus
    End Sub
    Sub Postsave(Source As Notesuidocument)
    Print   "PostSave GlStatus=" + GlStatus
    End Sub
    'Button
    Sub Click(Source As Button)
    GlStatus="1"
    Dim ws As New NotesUIWorkspace
    ws.CurrentDocument.Save
    End Sub
    После создания документа в строке состояния:
    Initialize GlStatus=0
    После сохранения в строке состояния:
    PostSave GlStatus=1

    Проверяйте, что у Вас не так
     
Загрузка...
Похожие Темы - Пересчитать вычисляемые поля
  1. dimat
    Ответов:
    22
    Просмотров:
    7.145
  2. tanat
    Ответов:
    2
    Просмотров:
    2.474

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