.getitem = "" ?!

Тема в разделе "Lotus - Программирование", создана пользователем Mitya, 13 июн 2012.

  1. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    Добрый день.
    Ситуация такова:
    1) было поле "dep" редактируемое текстовое поле
    2) сменил тип "поле со списком" - значение берет по формуле из "справочника"

    Если в "справочнике” нет значения - поле вроде пустое, но в свойствах документа я вижу старое значение!
    Вопрос в том, как это значение определить?!?!
    Пробую так: (Но выводит "")!
    Sub Click(Source As Button)
    Dim item As NotesItem
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument

    Dim session As NotesSession
    Dim curdb As NotesDatabase
    Dim curdoc As NotesDocument

    Set session = New NotesSession
    Set curdb = session.CurrentDatabase
    Set curdoc = uidoc.Document

    subj=curdoc.GetItemValue("dep")
    Msgbox(subj(0))
    End Sub
    Спасибо.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    документ надо "пересчитать" например computewithform

    приведённый код - всё лишнее кроме

    Код (LotusScript):
    Sub Click(Source As Button)

    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    Set curdoc = uidoc.Document

    subj=curdoc.GetItemValue("dep")
    Msgbox(subj(0))
    End Sub
     
  3. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    Спасибо. Но, не получается
    Делаю так:
    Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    Set curdoc = uidoc.Document
    If curdoc.ComputeWithForm(False, False) Then
    subj=curdoc.GetItemValue("dep")
    Msgbox(subj(0))
    End If
    End Sub
    Выдает пустое сообщение.
    Заметил, что в открытом документе в свойстве документа поле dep имеет значение, как только я жму на кнопку поле "dep" становится пустым.

    Может я не понял смысл этого метода =(
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    в чем задача-то, какое значение надо вычислить, т.е. что надо вообще в принципе - получить и всегда отображать старое непустое значение у документа, затереть старое пустым или каким-то другим значением?
    Или, может, надо найти все документы, которые содержат значения, не соответствующие формуле или получить список таких значений?
    Вам предложили метод, который пересчитает некоторые поля в документе согласно формулам на вашей форме, потом документ можно(нужно) сохранить.
    Если не это надо, а надо получить старое значение, которое хранится в поле, то попробуйте не открывать документ по форме, т.е. полностью убрать работу с UI-документом, получить NotesDocument по-другому (в агенте или кнопке в представлении) и считать значение поля.
    Вот варианты как получить NotesDocument в порядке приоритетов использования:
    1) взять этот "странный" документ из базы (для текущей БД можно использовать переменную curdb)
    - по его unid - NotesDatabase.GetDocumentByUnid(unid),
    - или по его noteid - NotesDatabase.GetDocumentByid(noteid),
    2) или, может, удобней из какого-то представления (например, если надо обработать несколько таких документов, отмеченных галочкой в представлени)
    - курсорный - NotesDatabase.GetDocumentByid(NotesUIView.CaretNoteID)
    - или отмеченный галочкой - NotesUIView.Documents.GetFirstDocument
    3) поискать документ в базе по значению поля - NotesDatabase.Search, оно ж там как-то видно в свойствах :)
    Затем можно посмотреть значение поля и как-то обработать (записать в другое поле, которое не будет пересчитываться при открытии документа и отображать его на форме, если формула из справочника вернет пустоту или заменить значение в поле на другое, которое будет в справочнике) и сохранить документ.
    Может, будет проще подкорректировать формулу?
     
  5. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    OKEN, спасибо большое!!! Ну очень много советов, прям не знаю что лучше.
    Расскажу с самого начала:
    Создал форму с полями (тип: текстовые, редактируемые), туда перегнал данные из Excel. Получилось более 2 000 документов.
    ! В документах есть поля, которые должны иметь строго определенные значения. Вот я эти поля и перевел «поля со списком». Где-то они стали видны, т.к. такое значение есть в «Справочнике», а где-то нет (что меня беспокоит =)) )
    Идея была такова: cделать акцию на форме документа, которая вызывала в DialogBox-e копию формы документа, со старыми значениями полей. Где была бы возможность выбора новых значений из «Справочников». И потом DialogBox передал бы эти значения текущему документу.
    Как-то так =).
    Идея с представлениями меня радует! Что даст возможность обработать не один документ, а коллекцию документов!!! Тока как сделать… «пошел в Библиотеку»

    @DbLookup(””:”NoCache”;@DbName;"list";"Адреса";2) - формула выбора из "Справочника"
     
  6. Mitya

    Mitya Well-Known Member

    Регистрация:
    13 июн 2012
    Сообщения:
    111
    Симпатии:
    0
    А вот как теперь открыть докумен в режиме ред.?!

    Повесил на представление акцию:
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim uiview As NotesUIView
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim subj As Variant
    Set uiview = ws.CurrentView
    Set dc = uiview.Documents
    Set doc = dc.GetFirstDocument
    While Not (doc Is Nothing)
    Call doc.AppendItemValue("net","123")
    Set doc = dc.GetNextDocument(doc)
    Wend
    End Sub

    Понимаю, что поле "net" со значением 123 не прописалось, т.к. документы открыты не в редактировании.
    Делаю так: Call ws.EditDocument (True) - ошибка "Object variable not set"
    А как их открыть? метода я такого не нашел...
    Спасибо.
     
  7. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    поле не прописалось, потому что не сохранили документ. Добавьте Call doc.Save(false, false ) и будет вам щастье.
    P.S. Подозреваю также, что вместо AppendItemValue нужно использовать ReplaceItemValue - иначе есть шанс получить два одноименных поля в документе
     
Загрузка...
Похожие Темы - getitem
  1. aguch
    Ответов:
    11
    Просмотров:
    1.094
  2. vvlad
    Ответов:
    9
    Просмотров:
    2.278
  3. dimat
    Ответов:
    12
    Просмотров:
    5.481

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