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

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

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

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

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

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

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

unescix

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

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


Помогите пожалуйста!
 
A

ABarmin

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

ABarmin

На кнопку

Код:
@command([ToolsRunMacro]; "SomeAgent")

Агент

Код:
dim doc as NotesDocument
dim sess as new NotesSession

set doc = sess.documentContext
call doc.replaceItemValue("Form", "FormName")
call doc.save(true, false)

Писал на коленке без дизайнера, так что могут быть орфографические ошибки
 
U

unescix

Агент

Код:
dim doc as NotesDocument
dim sess as new NotesSession

set doc = sess.documentContext
call doc.replaceItemValue("Form", "FormName")
call doc.save(true, false)

Писал на коленке без дизайнера, так что могут быть орфографические ошибки

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

Dragon108

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

Да можно просто прописать в действие на кнопке, зачем плодить агентов на каждое действие в системе ... ну это дело вкуса.

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

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

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

Код:
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 -
Код:
@Text(@DocumentUniqueID)
 
U

unescix

Я так понимаю вам надо добавлять значения в embedded view, из полей которые создаются через данную (фиолетоввую :rolleyes:)форму?
В поле "Действие" вводится информация и по нажатию на кнопку информация переходит в embedded view.
ParentDoc - это представление?
 
D

Dragon108

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

Нет, ParentDoc - это поле в документе, который находится во встроенном представлении, в котором хранится UNID текущего документа (документа, в которое встроено представление)

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

Код:
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

Здесь вы создаете новый документ -
Код:
Dim docComment As New NotesDocument (session.CurrentDatabase)
Заполняете в нем необходимые поля -
Код:
.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.
Почитайте в интернетах - задача довольно уж стандартная.
 
U

unescix

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

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

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

nvyush

что поменяется, если поля для ввода данных находятся не на форме, а на подформе?
Ничего. Форма/подформа — это лишь способ отображения/ввода данных, сохранённых в документе. Один и тот же документ можно отображать в разных формах/подформах, набор полей документов может не соответствовать набору полей на форме/подформе.
вродебы все сделал как говорили, но по нажатию на кнопку выкидывает ошибку - Object variable not set.
Для локализации ошибок используйте отладчик и обработчик ошибок (см. в справке On Error Goto)
 
D

Dragon108

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

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

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

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

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

unescix

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

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

ABarmin

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

unescix

Свой код приведите и формулу отбора для представления.
по нажатию на кнопку
Код:
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

а в представлении
Код:
SELECT Form = "ClientRequest"
ClientRequest - это форма с полями
В embedded view прописано представление Action

как-то так...
 
A

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]
 
N

nvyush

Представление имеет первый категоризованный столбец? Какая в нём формула? Какая формула в Show single category внедрённого представления?
 
D

Dragon108

но всеравно не работает, не получается привязаться к представлению...

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

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

unescix

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

Dragon108

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

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

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

nvyush

В представлении первый столбец не категоризированый и формулы нет. Что туда вписать?
@Text($REF)
если документы примечания являются ответными главному. Формула в show single category и формула столбца должны возвращать одинаковое значение, это как бы ключ, по которому отбираются документы для показа во внедрённом представлении.
 
Мы в соцсетях:

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