• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

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

dimat

Well-known member
31.07.2008
508
0
Всем привет!
Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
Как?
 
Sub Inviewedit(Source As Notesuiview, Requesttype As Integer, Colprogname As Variant, Columnvalue As Variant, Continue As Variant)

End Sub

событие вьюшки
 
Если именно по нажатию кнопки, то лепишь во view кнопку, получаешь в ней
Код:
uiview.Documents
и меняешь в полученной коллекции что надо на что угодно.
 
А ещё можно агента с Target = SelectDocuments написать и шмальнуть его под кнопкой.
Если бы тут был lmike, он бы посоветовал джаву прикрутить и шмальнуть некий external класс из опенсорсевых разработок :)
Вообщем, вариантов громадЪе.
 
Всем привет!
Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
Как?

Чтоб получить только один текущий документ, а не выделенные галками, используй NotesSession.DocumentContext.
Св-ва uiview.Documents и агент с Target = SelectDocuments работает по всем выделенным галкой документам. При этом если текущий (выделенный рамкой) не отмечен галкой, то он не будет обработан.

После получения документа doc.
Код:
call doc.ReplaceItemValue("<имя поля>", <значение>)
call doc.Save( True, False)
Если изменяемое поле влияет на значения, отображаемые в представлении, то надо вызвать
Код:
dim ws as new NotesUIWorkspace
call ws.ViewRefresh
чтоб сразу увидеть результат.
 
Спасибо всем! сделал
Чтоб получить только один текущий документ, а не выделенные галками, используй NotesSession.DocumentContext
Появилось еще одна проблема: на строчке
Код:
Call doc.ReplaceItemValue("Reit",doc.GetItemValue("Reit")+1)
Ошибка: Type miss match
я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
 
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
 
я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
ну совсем уже :) хелп читать не пробовали?
во-первых, нолик забыл при взятии поля - надо doc.GetItemValue("Reit")(0) + 1, т.к. GetItemValue вернет массив (Variant).
Если поле (item) Reit у тебя содержит строку, то тогда, конечно, преобразуй - через Cint, например.
 
заметил забавную штуку, если в поле типа Number написать не число, а в скрипте попытаться вычитать его значение, то...
получим ошибку "Variant does not contain a container", что связано с тем, что NotesItem.Values = EMPTY, т.к. поле не прошло встроенную проверку (валидацию) значения...

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы