обновление поля

Murtas

Green Team
11.04.2006
137
1
BIT
5
Если что-то выровнять нужно в небольшом кол-ве, а не на постоянной основе, можешь запустить такое. Просто бывает многое инициализируется при открытии формы, для того чтобы при сохранении корректно отрабатывали формулы

Код:
Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set doc = collection.GetFirstDocument()
    
    Dim ws As New NotesUIWorkspace
    Dim ui As NotesUIDocument
    
    While Not (doc Is Nothing)
        
        Set ui = ws.EditDocument(True, doc)
        Call ui.Save       
        Call ui.Close(True)
        
        Set doc = collection.GetNextDocument(doc)
    Wend
End Sub
 
  • Нравится
Реакции: Irina

Irina

Green Team
31.05.2019
145
2
BIT
0
Если что-то выровнять нужно в небольшом кол-ве, а не на постоянной основе, можешь запустить такое. Просто бывает многое инициализируется при открытии формы, для того чтобы при сохранении корректно отрабатывали формулы

Код:
Sub Initialize
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim collection As NotesDocumentCollection
    Dim doc As NotesDocument
    Set db = session.CurrentDatabase
    Set collection = db.UnprocessedDocuments
    Set doc = collection.GetFirstDocument()
   
    Dim ws As New NotesUIWorkspace
    Dim ui As NotesUIDocument
   
    While Not (doc Is Nothing)
       
        Set ui = ws.EditDocument(True, doc)
        Call ui.Save      
        Call ui.Close(True)
       
        Set doc = collection.GetNextDocument(doc)
    Wend
End Sub
да. спасибо, такой вариант пробовала, но надо чтобы автоматически (или при редактировании человеком или просто, когда дата будет соответствовать параметру нужному) правилось название и еще несколько параметров, зависимо от заполнения поля, а значит такой агент надо будет раз в день запускать (
 

Murtas

Green Team
11.04.2006
137
1
BIT
5
да. спасибо, такой вариант пробовала, но надо чтобы автоматически (или при редактировании человеком или просто, когда дата будет соответствовать параметру нужному) правилось название и еще несколько параметров, зависимо от заполнения поля, а значит такой агент надо будет раз в день запускать (

... только такой агент точно не надо на постоянке запускать ) .. пишите "правильный скрипт", который будет делать нужные обновления
 

kolka

Green Team
16.02.2013
32
7
BIT
0
Irina, а мой вариант чем не подходит? Кода мало, работает во всех случаях.
 

kolka

Green Team
16.02.2013
32
7
BIT
0
не уловил - как это решит вашу задачу с @DbLookup ?
Проблема не с @DbLookup, а с CFD. В моем примере идет эмуляция CFD через Computed.

В каждом таком "эмулированном" поле в самом начале кода поле само себя "регистрирует" в списке таких полей: FIELD tmpCleaner := tmpCleaner : @ThisName;

Во время ComputeWithForm отрабатывает формула, которая удаляет "зарегистрированные" поля после всех вычислений.

При открытии и сохранении в клиенте формула игнорируется (используется tmpIsUI), вместо этого LotusScript расставляет флаги isSummary=false и SaveToDisk=false для тех же "зарегистрированных" полей.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
444
Проблема не с @DbLookup, а с CFD. В моем примере идет эмуляция CFD через Computed.

В каждом таком "эмулированном" поле в самом начале кода поле само себя "регистрирует" в списке таких полей: FIELD tmpCleaner := tmpCleaner : @ThisName;

Во время ComputeWithForm отрабатывает формула, которая удаляет "зарегистрированные" поля после всех вычислений.

При открытии и сохранении в клиенте формула игнорируется (используется tmpIsUI), вместо этого LotusScript расставляет флаги isSummary=false и SaveToDisk=false для тех же "зарегистрированных" полей.
я предлагал все вынести в либу, что по сути и есть..., не вижу смысла в формулах в контексте топика
 

kolka

Green Team
16.02.2013
32
7
BIT
0
я предлагал все вынести в либу, что по сути и есть..., не вижу смысла в формулах в контексте топика
По сути предлагаешь изменить интерфейс. Если таких полей много, и форм много, и CWF дергается отовсюду, в том числе из внешних баз, то вынос в либу превращается в нетривиальную задачку на не пойми какое время.
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
42
Не понял в чем тут проблема. В тормозах? Так это в соседнюю палату. Тут про ComputeWithForm. Подскажи если я чего упустил.
не надо ломать копья: лукапы и колумны при компьютвизформ НЕ пересчитываются, ни в комрьютед ни в фодисплей. это данность.
зависимые поля, тож могут не пересчитаться - от фазы лун зависит)
с вычислением полей на ЛС, рано или поздно приходится сталкиваться всем, размещая код в посмодеченьдж, пост\кверирекальк и кверисейв
такшта, вынос ВСЕГО кода формы в библу не усложняет, а упрощает всю логику, и код в одном месте - гуд
а в циклах компьютвизформ - зло абсолютное
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 982
611
BIT
444
По сути предлагаешь изменить интерфейс. Если таких полей много, и форм много, и CWF дергается отовсюду, в том числе из внешних баз, то вынос в либу превращается в нетривиальную задачку на не пойми какое время.
ничего сложного не вижу, а вот централизация кодовой базы получится
размазанный код по формам - это реальный ад для разработчика
 

kolka

Green Team
16.02.2013
32
7
BIT
0
не надо ломать копья: лукапы и колумны при компьютвизформ НЕ пересчитываются, ни в комрьютед ни в фодисплей. это данность.
зависимые поля, тож могут не пересчитаться - от фазы лун зависит)
с вычислением полей на ЛС, рано или поздно приходится сталкиваться всем, размещая код в посмодеченьдж, пост\кверирекальк и кверисейв
такшта, вынос ВСЕГО кода формы в библу не усложняет, а упрощает всю логику, и код в одном месте - гуд
а в циклах компьютвизформ - зло абсолютное
блиииин, решение в том и состоит, что заменяем "компьютвизформ" на computed! Т.е. ВООБЩЕ их нет в итоге. Ну может для текстовых подсказок оставить только. Усилий - минимум. И все работает.

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

alexas1

Green Team
10.04.2014
1 202
225
BIT
42
блиииин, решение в том и состоит, что заменяем "компьютвизформ" на computed! Т.е. ВООБЩЕ их нет в итоге. Ну может для текстовых подсказок оставить только. Усилий - минимум. И все работает.
разговор о том, что данные накапливаемые в доках, расчитываются и актуализируются на основе внешних (от дока) данных в UI
попытка их актуализации перебором доков в цикле с компьютвизформ по каждому доку потерпела фиаско
 

kolka

Green Team
16.02.2013
32
7
BIT
0
Сделал небольшой тест... работает...

Проблема с CFD: не работают при CWF вообще.
Проблема с Computed: не работают при открытии документа в режиме чтения в UI (т.к. нет Refresh).

Если же сделать поля Computed, но не давать им сохраняться, то проблем нет. По крайней мере мне не удалось их воспроизвести.
 

Irina

Green Team
31.05.2019
145
2
BIT
0
вот с полями все нормально, а вот как обновлять одно поле? если его надо проверять с сегодняшней датой и автоматически обновлять в зависимости от даты

понятно, что при пересохранении он поменяет поле, но вот надо, чтобы поле менялось автоматически и в статистике уже отображалось и не важно, открыл и редактировал документ кто-то или нет
 
Последнее редактирование:

alexas1

Green Team
10.04.2014
1 202
225
BIT
42
вот с полями все нормально, а вот как обновлять одно поле? если его надо проверять с сегодняшней датой и автоматически обновлять в зависимости от даты

понятно, что при пересохранении он поменяет поле, но вот надо, чтобы поле менялось автоматически и в статистике уже отображалось и не важно, открыл и редактировал документ кто-то или нет
Очевидно, бегать по нужным докам шедулед агентом и менять влоб
Или, если разговор про "статистику посмотреть", перед статистикой запустить агент, один раз в день, естественно
 

Irina

Green Team
31.05.2019
145
2
BIT
0
Код:
Set doc = view.Getfirstdocument
    
    While Not (doc Is Nothing)
        If  doc.Test(0)<Today Then
а как именно обновить одно поле агентом?
 

alexas1

Green Team
10.04.2014
1 202
225
BIT
42
Код:
Set doc = view.Getfirstdocument
   
    While Not (doc Is Nothing)
        If  doc.Test(0)<Today Then
а как именно обновить одно поле агентом?
вычислить ЭТО поле в агенте, записать в док и сохранить
можно использовать Evaluate, если удобно:
.....
Const макро$ = "формула поля"
Dim result As Variant
result = Evaluate(macro$, doc)
.....
кстати, если doc.Test(0)<Today = false, для первого же дока, значит агент в этот день, для старых доков уже сработал, поэтому сразу Exit sub
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!