Изменить значение поля из представления

dimat

Well-Known Member
Lotus team
31.07.2008
516
0
#1
Всем привет!
Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
Как?
 

yerke

Well-Known Member
28.08.2007
392
0
#2
Sub Inviewedit(Source As Notesuiview, Requesttype As Integer, Colprogname As Variant, Columnvalue As Variant, Continue As Variant)

End Sub

событие вьюшки
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#3
Если именно по нажатию кнопки, то лепишь во view кнопку, получаешь в ней
Код:
uiview.Documents
и меняешь в полученной коллекции что надо на что угодно.
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#5
А ещё можно агента с Target = SelectDocuments написать и шмальнуть его под кнопкой.
Если бы тут был lmike, он бы посоветовал джаву прикрутить и шмальнуть некий external класс из опенсорсевых разработок :)
Вообщем, вариантов громадЪе.
 

TIA

:-)
Lotus team
15.05.2009
790
2
#6
Всем привет!
Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
Как?
Чтоб получить только один текущий документ, а не выделенные галками, используй NotesSession.DocumentContext.
Св-ва uiview.Documents и агент с Target = SelectDocuments работает по всем выделенным галкой документам. При этом если текущий (выделенный рамкой) не отмечен галкой, то он не будет обработан.

После получения документа doc.
Код:
call doc.ReplaceItemValue("<имя поля>", <значение>)
call doc.Save( True, False)
Если изменяемое поле влияет на значения, отображаемые в представлении, то надо вызвать
Код:
dim ws as new NotesUIWorkspace
call ws.ViewRefresh
чтоб сразу увидеть результат.
 

dimat

Well-Known Member
Lotus team
31.07.2008
516
0
#7
Спасибо всем! сделал
Чтоб получить только один текущий документ, а не выделенные галками, используй NotesSession.DocumentContext
Появилось еще одна проблема: на строчке
Код:
Call doc.ReplaceItemValue("Reit",doc.GetItemValue("Reit")+1)
Ошибка: Type miss match
я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
 

TIA

:-)
Lotus team
15.05.2009
790
2
#8
Call doc.ReplaceItemValue("Reit",doc.GetItemValue("Reit")+1)
Ошибка: Type miss match
я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
GetItemValue всегда возвращает массив.
Если поле Reit отсутствует, то скрипт возвращает массив строк. Значение -- один элемент с пустой строкой.
Если не пусто, то массив того типа, который содержится в поле.
Исправить можно, например, так:

if CStr(doc.GetItemValue("Reit")(0))="" then
Call doc.ReplaceItemValue("Reit", 1)
else
Call doc.ReplaceItemValue("Reit", doc.GetItemValue("Reit")(0)+1)
end if
 

hosm

* so what *
18.05.2009
2 442
9
#9
я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
ну совсем уже :) хелп читать не пробовали?
во-первых, нолик забыл при взятии поля - надо doc.GetItemValue("Reit")(0) + 1, т.к. GetItemValue вернет массив (Variant).
Если поле (item) Reit у тебя содержит строку, то тогда, конечно, преобразуй - через Cint, например.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
#11
заметил забавную штуку, если в поле типа Number написать не число, а в скрипте попытаться вычитать его значение, то...
получим ошибку "Variant does not contain a container", что связано с тем, что NotesItem.Values = EMPTY, т.к. поле не прошло встроенную проверку (валидацию) значения...

посему рекомендую обратить внимание на предварительную проверку данных в нужных полях! чтобы потом в коде не иметь проблем с типами и пустыми значениями...