Dialog + Replace

  • Автор темы Grrr
  • Дата начала
G

Grrr

Гость
#1
Здравствуйте! Пытаюсь через диалог вызвать форму(Tema) с новым полем значения (NovayaTema), после чего заменить значение поля (StarayaTema) в документах, кодик:
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument()
If ws.DialogBox("Tema", False, False, False, True, False, False, "Изменение темы", doc , True) Then
While Not(doc Is Nothing)
Call doc.ReplaceItemValue("StarayaTema", NovayaTema)
Call doc.Save(False, False )
Set doc = dc.GetNextDocument(doc)
Wend
Call ws.ViewRefresh
End If
End Sub
Что я делаю не так? Спасибо.
 
A

allex

Гость
#4
Здравствуйте! Пытаюсь через диалог вызвать форму(Tema) с новым полем значения (NovayaTema), после чего заменить значение поля (StarayaTema) в документах, кодик:

Что я делаю не так? Спасибо.
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument()
If ws.DialogBox("Tema", False, False, False, True, False, False, "Изменение темы", doc , True) Then
While Not(doc Is Nothing)
Call doc.ReplaceItemValue("StarayaTema", doc.NovayaTema(0))
Call doc.Save(False, False )
Set doc = dc.GetNextDocument(doc)
Wend
Call ws.ViewRefresh
End If
End Sub
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#5
Код:
Dim dummydoc As NotesDocument 
...
Set dummydoc = db.CreateDocument()
...
If ws.DialogBox("Tema", False, False, False, True, False, False, "Изменение темы", dummydoc , True) Then
...
Call doc.ReplaceItemValue("StarayaTema", dummydoc.GetItemValue("NovayaTema"))
 
G

Grrr

Гость
#8
Почему то не отрабатывает.. Вообще форму которую я вызываю содержит кнопку с формулой dblookup, которая присваивает значение другому полю (изменяемому) Tema. Незнаю влияет ли это как то на выполнение кода.

Ура! Получилось по первому методу, почему то надо было назвать поле в форме поиска таким же именем что и в док-тах где делается замена.
 
G

Grrr

Гость
#10
По моему всё работает нормально. Операцию выполнял в папке, которая в конце кода рефрешится.
 
G

Grrr

Гость
#11
Спасибо Всем за советы, особенно allex'у! Чтобы не создавать новую тему, решил задать вопрос здесь.
Нашёл небольшой примерчик выгрузки представления в лист экселя (книга lotus develop. toolbox), к сожалению там не учитываются формулы в столбцах, а есть возможность выгружать только поля, находящиеся в столбцах. Логичный вопрос: Можно ли добавив новое поле в форму и соответственно высчитывав нужные поля по формулам в нём, подставить его в представление? Отсюда ещё такой вопросик:
Допустим я добавлю в форму новое поле, которое будет складывать два поля и другие операции (тут не важно), я должен буду обновить формы всех созданных ранее документов? Ведь до этого документа создавались пусть и по одноимённое форме, но без этого нового поля. Как обновить все документы по новой форме?
 

medin84

Well-Known Member
27.06.2007
106
0
33
Казахстан/Алматы
#12
Как обновить все документы по новой форме?
Смотри в хелпе ComputeWithForm
примерно так
Код:
Set doc=notesdocumentcollection.GetFirstDocument
While Not(doc Is Nothing)
call doc.ComputeWithForm( true, False )
doc.Save True, False
Set doc=notesdocumentcollection.GetNextDocument( doc )
Wend
 
G

Grrr

Гость
#14
Кто сталкивался с такой проблемой при выгрузке в Excel: error 213: ole: automation object error?
Add: видимо проблема с офисом (2003), попробую поставить 2007, думаю вопрос должен решиться.
 
G

Grrr

Гость
#15
Непонятнка получилась, не придал этому значения. В коде, почему то изменяет только один документ из коллекции..
If ws.DialogBox("TematikaChange", False, False, False, True, False, False, "Изменение тематики", doc, True) Then
While Not(doc Is Nothing)
Call doc.ReplaceItemValue(Tema", doc.Tema(0))
Call doc.Save(False, True)
Set doc = dc.GetNextDocument(doc)
Wend
Call ws.ViewRefresh
End If
 
A

amigolinx

Гость
#17
Непонятнка получилась, не придал этому значения. В коде, почему то изменяет только один документ из коллекции..
Дело в том, что в результате выполнения на каждом доке из коллекции
Call doc.ReplaceItemValue("Tema", doc.Tema(0))
замена происходит, да, ... но значение поля заменяется само на себя же. То есть на пальцах - для замены ItemValue "Tema" на doc берется значение поля Tema на этом же doc. Не возникает ощущения дежавю после этого? dummydoc - рулит и notesUIWorkspace.Prompt - тоже, однозначно