• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Dialog + Replace

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

Grrr

Здравствуйте! Пытаюсь через диалог вызвать форму(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

Здравствуйте! Пытаюсь через диалог вызвать форму(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

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Код:
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"))
 
O

Omh

Medevic
+1
Я бы тоже думмидок заколбасил
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
А еще можно просто через notesUIWorkspace.Prompt сделать. :(
 
G

Grrr

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

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

Grrr

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

Grrr

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

medin84

Как обновить все документы по новой форме?
Смотри в хелпе 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

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

Grrr

Непонятнка получилась, не придал этому значения. В коде, почему то изменяет только один документ из коллекции..
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
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Потому что эта строчка практически лишена смысла:
Call doc.ReplaceItemValue(Tema", doc.Tema(0))
 
A

amigolinx

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

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