1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Примечание На Форме

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

  1. unescix

    unescix Гость

    Здравствуйте!

    Есть задача, создать на форме примечания т.е. добавлять значения из полей формы в таблицу.
    По такому типу
    [​IMG]

    Помогите пожалуйста!
     
  2. ABarmin

    ABarmin Гость

    Повесить на кнопку агент, который будет создавать документ по форме, по которой документы в embedde-view отбираются.
     
  3. unescix

    unescix Гость

    а пример можно?
    я не очень силен в лотусе...
     
  4. ABarmin

    ABarmin Гость

    На кнопку

    Код (Text):
    @command([ToolsRunMacro]; "SomeAgent")
    Агент

    Код (Text):
    dim doc as NotesDocument
    dim sess as new NotesSession

    set doc = sess.documentContext
    call doc.replaceItemValue("Form", "FormName")
    call doc.save(true, false)
    Писал на коленке без дизайнера, так что могут быть орфографические ошибки
     
  5. unescix

    unescix Гость

    а можно по подробнее? не очень ясен принцип работы агента, как он создает документ по форме?
     
  6. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Да можно просто прописать в действие на кнопке, зачем плодить агентов на каждое действие в системе ... ну это дело вкуса.

    все же написали уже ...

    Я так понимаю вам надо добавлять значения в embedded view, из полей которые создаются через данную (фиолетоввую :rolleyes:)форму?
    Ну можно, например, так:

    Код (LotusScript):
    Dim session As New NotesSession
    Dim docComment As New NotesDocument (session.CurrentDatabase)
    Dim ws As New NotesUIWorkspace
    With docComment
    .ReplaceItemValue "Поле1" , "..."
    .ReplaceItemValue "Поле2", "..."
    ...
    .ReplaceItemValue "Comment", "<Ваш текст примечания>"

    .ReplaceItemValue "ParentDoc", ws.CurrentDocument.Document.UniversalID
    .Save True, True
    End With

    ws.CurrentView.Refresh
    Соответственно вставляете в форму embedded view (она уже у вас вставленна), категоризируете по полю ParentDoc (само представление), добавляете все необходимые поля для отображения во вью (Поле1, поле2, ..., Comment) - опять же в само представление, и прописываете в ее параметр ShowSingleCategory -
    Код (LotusScript):
    @Text(@DocumentUniqueID)
     
  7. unescix

    unescix Гость

    В поле "Действие" вводится информация и по нажатию на кнопку информация переходит в embedded view.
    ParentDoc - это представление?
     
  8. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Нет, ParentDoc - это поле в документе, который находится во встроенном представлении, в котором хранится UNID текущего документа (документа, в которое встроено представление)

    Попытаюсь объяснить ... если вкратце, то механизм примерно следующий:
    Любое представления в Lotus служат для отображения документов, которые хранятся в базах. Можно считать, что они только показывают данные из документов, повторюсь, хранящихся в бд. Так вот, что бы они что то показывали, необходимо это что-то (документы) создать:)
    Как я понимаю - у вас есть форма которая сулжит просто для ввода данных, и вам эти данные необходимо отобразить в представлении. (т.е. ваша задача по этим данным создать документы и отобразить их в необходимом представлении)
    Так вот на кнопке "Добавить" вы вешаете следующий код:

    Код (LotusScript):
    Dim session As New NotesSession
    Dim docComment As New NotesDocument (session.CurrentDatabase)
    Dim ws As New NotesUIWorkspace
    With docComment
    .ReplaceItemValue "Form", "<как у вас называется форма для документов примечания>"
    .ReplaceItemValue "Поле1" , "..."
    .ReplaceItemValue "Поле2", "..."
    ...
    .Save True, True
    End With

    ws.CurrentView.Refresh
    Здесь вы создаете новый документ -
    Код (LotusScript):
    Dim docComment As New NotesDocument (session.CurrentDatabase)
    Заполняете в нем необходимые поля -
    Код (LotusScript):
    .ReplaceItemValue "Поле1" , "..."; .ReplaceItemValue "Поле2", "..."
    и сохраняете его.

    В принципе все! Дальше вы настраиваете представление (пишите формулу отбора, настраиваете колонки) и встраиваете его в форму, таким образом делая представление embedded (что у вас и сделано). больше ничего делать не нужно.


    P.S. Но в embedded пердставлении есть так скажем одна фича: вы можете в нем отобразить документы по какой либо категории (для этого представление соотвественно надо сдлеать категоризированным - сделать категоризацию в первой колонке) - и дальше в параметре Show Single Category - прописать формулу для отбора по этой категории.
    , в данной случае поле ParentDoc - поле в котором будет хранится UNID документа (назовем его - Основным), из которго были сделаны документы "Действие". а в во встроенном представлении в show single category можно прописать UNID того самого Основого документа. (так как представление находится в форме, то соответственно в Show Single Category - нужно прописать @Text(@DocumentUniqueID) - т.е. UNID текущего Основного документа) Таким образом если у вас есть несколько Основных документов и вы к ним создаете документы Действия, то во встроенном представлении для каждого Основоного дкоумента, вы получете только те документы Действий, которые были созданным именно к этому основному документу (благодаря полю ParentDoc в документах "Действия" и категоризированному представлению) Иначе для каждого основоного документа у вас во встроенном представлении будут отображаться все документы "Действия", когда либо созданные.

    Надеюсь не очень запутал ... судя по вашей задаче мне кажется вам больше нужен вариант без Show Single Category.
    Почитайте в интернетах - задача довольно уж стандартная.
     
  9. unescix

    unescix Гость

    в представлении я пишу
    Код (LotusScript):
    SELECT Form = "Имя формы"
    так?

    что поменяется, если поля для ввода данных находятся не на форме, а на подформе?

    вродебы все сделал как говорили, но по нажатию на кнопку выкидывает ошибку - Object variable not set.
     
  10. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ничего. Форма/подформа — это лишь способ отображения/ввода данных, сохранённых в документе. Один и тот же документ можно отображать в разных формах/подформах, набор полей документов может не соответствовать набору полей на форме/подформе.
    Для локализации ошибок используйте отладчик и обработчик ошибок (см. в справке On Error Goto)
     
  11. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Скорее всего вылетает вот здесь -
    Код (LotusScript):
     ws.CurrentView.Refresh
    - в поппыхах написал бред ... (Вьюха встроена в предсталение и не определяется как текущая, поэтому и не может быть определен объект ws.CurrentView)

    Вместо этой строчки напиишиет ws.CurrentDocument.Refresh - (работает только если у вас документ открыт в режиме редактирвоания - что я подозреваю у вас и есть) - это нужно для того, что бы внесенные ваши данные (Документы "Действия") тут же отображались во встроенном представлении
     
  12. unescix

    unescix Гость

    да, все верно, ошибка пропала.
    но всеравно не работает, не получается привязаться к представлению...
    толи я неправильно понял добавление записей в документ, толи неправильно что-то в коде заменил.
    буду дальше колупать.
     
  13. ABarmin

    ABarmin Гость

    Свой код приведите и формулу отбора для представления.
     
  14. unescix

    unescix Гость

    по нажатию на кнопку
    Код (LotusScript):
    Sub Click(Source As Button)
    Dim session As New NotesSession
    Dim docComment As New NotesDocument (session.CurrentDatabase)
    Dim ws As New NotesUIWorkspace
    With docComment
    .ReplaceItemValue "Form", "ClientRequest"
    .ReplaceItemValue "Дата" , "..."
    .ReplaceItemValue "Время", "..."
    .ReplaceItemValue "Действие", "..."
    .ReplaceItemValue "Автор" , "..."
    .ReplaceItemValue "Примечание", "..."
    .Save True, True
    End With
    End Sub
    а в представлении
    Код (Text):
    SELECT Form = "ClientRequest"
    ClientRequest - это форма с полями
    В embedded view прописано представление Action

    как-то так...
     
  15. ABarmin

    ABarmin Гость

    Я бы написал как-то так

    <!--shcode--><pre><code class='VisualBasic'>dim s as new NotesSession
    dim ws as new NotesUIWorkspace
    dim doc as NotesDocument
    dim unid as string

    set doc = ws.CurrentDocument.document
    call doc.replaceItemValue("Form", "ClientRequest")
    call doc.save(true, false)

    unid = doc.unversalId
    delete doc

    call ws.editDocument(false, s.CurrentDatabase.getDocumentByUnid(unid))[/CODE]
     
  16. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Представление имеет первый категоризованный столбец? Какая в нём формула? Какая формула в Show single category внедрённого представления?
     
  17. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Что значит "не получается привязаться к представлению ..."??? в нем не отображаюся вновь созданные документы? Если так, то просто (например) заново создайте это представление и на нем создайте кнопку создания документов Действия (docComment) - если они и в этом случае не будут создаваться (отображаться в представлении), то посмотрите добавляются ли вообще документы в базу, проверьте формулу отбора в представление ...
    А потом просто вставьте это представление в вашу форму и перенесите код создания документов docComment на вашу кнопку на форме

    И еще такой вопрос - база где находится представление (ни та база, где находится форма, в которую встраивают представление, а именно та база, где находится само представление) и там где создаются документы docComment - одна и та же?
     
  18. unescix

    unescix Гость

    В Show single category у меня
    Код (Text):
    @Text(@DocumentUniqueID
    В представлении первый столбец не категоризированый и формулы нет. Что туда вписать?
     
  19. Dragon108

    Dragon108 Well-Known Member

    Регистрация:
    19 янв 2010
    Сообщения:
    264
    Симпатии:
    0
    Ну чуть выше все написано - если хотитет что бы во встроенном представлении отображались документы docComment только созданные для данного Главного, то тогда прописывайте то самое поле ParentDoc (в него кладите UNID главного документа) в документах docComment, категоризируйте по нему первый столбец во встраиваемом представлении, в свойствах встроенного представления прописывайте Show Single Category прописывайте - @Text(@DocumentUniqueID)
    А если хотите что бы все документы docComment отображались во строенном представлении для Главного документа, то убирайте эту категоризацию в представлении и будет вам счастье (и ничего в docComment не прописывайте).

    Не поленитесь, почитайте хелп про Show Single Category - все станет намного понятнее ...
     
  20. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    @Text($REF)
    если документы примечания являются ответными главному. Формула в show single category и формула столбца должны возвращать одинаковое значение, это как бы ключ, по которому отбираются документы для показа во внедрённом представлении.
     
Загрузка...

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