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

Тема в разделе "Lotus - Программирование", создана пользователем dimat, 19 май 2009.

  1. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Всем привет!
    Нужно: по нажатию на кноку из действий в представлении изменить значение поля текущего документа.
    Как?
     
  2. yerke

    yerke Well-Known Member

    Регистрация:
    28 авг 2007
    Сообщения:
    392
    Симпатии:
    0
    Sub Inviewedit(Source As Notesuiview, Requesttype As Integer, Colprogname As Variant, Columnvalue As Variant, Continue As Variant)

    End Sub

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Если именно по нажатию кнопки, то лепишь во view кнопку, получаешь в ней
    Код (Text):
    uiview.Documents
    и меняешь в полученной коллекции что надо на что угодно.
     
  4. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    А ещё можно агента с Target = SelectDocuments написать и шмальнуть его под кнопкой.
    Если бы тут был lmike, он бы посоветовал джаву прикрутить и шмальнуть некий external класс из опенсорсевых разработок :)
    Вообщем, вариантов громадЪе.
     
  6. TIA

    TIA :-)
    Lotus team

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

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

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    Спасибо всем! сделал
    Появилось еще одна проблема: на строчке
    Код (Text):
    Call doc.ReplaceItemValue("Reit",doc.GetItemValue("Reit")+1)
    Ошибка: Type miss match
    я так понимаю doc.GetItemValue("Reit") нужно преобразовать в integer? если да, то как?
     
  8. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    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
     
  9. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ну совсем уже :) хелп читать не пробовали?
    во-первых, нолик забыл при взятии поля - надо doc.GetItemValue("Reit")(0) + 1, т.к. GetItemValue вернет массив (Variant).
    Если поле (item) Reit у тебя содержит строку, то тогда, конечно, преобразуй - через Cint, например.
     
  10. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    TIA Спасибо! :)
     
  11. Akupaka

    Akupaka А че я?.. О.о

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

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

Поделиться этой страницей