• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите с Response

  • Автор темы 10eyro
  • Дата начала
1

10eyro

Здравствуйте. Есть 2 формы А1-Document Поле-Ф1, A2- response Поле-Ф1. Создаю документ в форме А1 сохраняю и из этой формы открываю Форму Ф2, при нажатие кнопки мне нужно скопировать данные из Формы А1-Document Поле-Ф1 в форме A2- response Поле-Ф1.
В форме А1 создал 2 поля MainUNID - text computed формула - @Text(@DocumentUniqueID) и SelfUNID text computed формула - Text(@DocumentUniqueID). В форме respons А2 создал 3 поля MainUNID text computed формула - MainUNID, поле SelfUNID text computed формула - @Text(@DocumentUniqueID) и...
и поле preSelfUNID text computed when composed - SelfUNID. Под кнопкой следующий код:
Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim response As NotesDocument
Dim parent As NotesDocument
Dim ritem As Variant
Dim gettext As String,newtext As String
Dim j As Long,lastmark As Long
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
If uidoc.IsNewDoc Then
Set response = uidoc.Document
predocUNID = response.preSelfUNID(0)
If predocUNID ="" Then
Exit Sub
End If
Set parent = db.GetDocumentByUNID( predocUNID)
Set ritem = parent.GetFirstItem("ПолеФ1") ' поле откуда берем данные
lastmark = 1
newtext = Chr(13) & Chr(10)
gettext = ritem.GetFormattedText(False,256) & Chr(10)
For j=1 To Len(gettext)
c=Mid(gettext,j,1)
If c=Chr$(10) Then
newtext = newtext & "> " & Mid$(gettext, lastmark, j + 1 - lastmark)
j = j + 1
lastmark = j
End If
Next j
Call uidoc.FieldAppendText( "ПолеФ1", newtext ) ' добавляем в новое поле
Call uidoc.GotoField( "Body" )
End If
End Sub



Но при нажатие кнопки выдает Invalid Universal ID. Помогите, что делаю не так?
 
H

hosm

а почему не берете поле MainUNID или notesDocument.ParentDocumentUNID?
скорее всего, получаете в поле preSelfUNID унид текущего дока, т.е. нового несохраненного документа.
 
H

hosm

Я не поняла, зачем вам надо поле preSelfUNID? Что в нем должно быть?
пока добавьте вывод унида документа, т.е. посмотрите, что за унид у вас получается после этой строчки
predocUNID = response.preSelfUNID(0)
Если у вас predocUNID = UNID документа response, то вы просто ошиблись с заполнением поля preSelfUNID в дочернем документе в форме А2 (туда попадает SelfUNID = @Text(@DocumentUniqueID) нового документа) .
 
A

allex

Попробуй так, или смени поле preSelfUNID на редактируемое
Код:
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim cdoc As NotesDocument
Dim uidoc As NotesUIDocument ' текущий документ - главный
Set uidoc = ws.CurrentDocument
If uidoc.EditMode=False Then
uidoc.EditMode=True
End If
Call uidoc.Save	' родительский документ

Dim respdoc As NotesDocument ' респонс от главного
Set respdoc = db.Createdocument()
respdoc.form = "Forma_responsa"
Call respdoc.Makeresponse(uidoc.document)
'
'*** заполнение респонс-документа
'
Call respdoc.Save(True,true)
 
H

hosm

10eyro
это вопрос ко мне? Ну откуда я могу знать, что должно попасть в это поле в вашем приложении? %)
Единственное, что я знаю - что если uidoc.IsNewDoc = True, то этот новый несохраненный в БД документ не найти по униду, хотя унид и не пустой.
Имхо, исходя из описания задачи мне показалось, что там должен быть унид родительского документа по форме А1-Document, из-за чего и предложила воспользоваться другим полем (или свойством) у текущего документа, открытого по форме A2- response.
 
N

nvyush

10eyro
Может быть Вам лучше не копировать значения полей из А1 в А2 по нажатию кнопки, а просто установить наследование значений полей (вторая закладка свойств формы, первая галка)? Тогда при нажатии в А1 кнопки "Создать А2", документ А2 будет в одноимённых с А1 полях содержать значения из А1.
 
H

hosm

nvy
Там вроде в коде в стартовом сообщении из рт-поля копируется только текст без форматирования в обычное поле, так что кнопка для переноса полей всё-таки нужна. А вот для полей с унидом может помочь, только автору надо разобраться, что за данные он там хочет хранить.
 
1

10eyro

Спасибо всем за ответы! Во всем разобрался.
 
Мы в соцсетях:

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