• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

dimat

Well-known member
31.07.2008
508
0
BIT
0
Всем привет!
Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
Как?
 
Y

yerke

Sub Inviewedit(Source As Notesuiview, Requesttype As Integer, Colprogname As Variant, Columnvalue As Variant, Continue As Variant)

End Sub

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

Omh

Если именно по нажатию кнопки, то лепишь во view кнопку, получаешь в ней
Код:
uiview.Documents
и меняешь в полученной коллекции что надо на что угодно.
 
O

Omh

А ещё можно агента с Target = SelectDocuments написать и шмальнуть его под кнопкой.
Если бы тут был lmike, он бы посоветовал джаву прикрутить и шмальнуть некий external класс из опенсорсевых разработок :)
Вообщем, вариантов громадЪе.
 
T

TIA

Всем привет!
Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
Как?

Чтоб получить только один текущий документ, а не выделенные галками, используй 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
31.07.2008
508
0
BIT
0
Спасибо всем! сделал
Чтоб получить только один текущий документ, а не выделенные галками, используй NotesSession.DocumentContext
Появилось еще одна проблема: на строчке
Код:
Call doc.ReplaceItemValue("Reit",doc.GetItemValue("Reit")+1)
Ошибка: Type miss match
я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
 
T

TIA

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
 
H

hosm

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

Akupaka

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

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

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