Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/193: Рейтинг темы: голосов - 193, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
1

Создание Response

06.09.2006, 15:30. Показов 35160. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вообщем потребовалось создать Response документ который содержит историю открытия документа-родителя. Проблема в том, как я понял, MakeResponse работает только в Back-ende, а мне нужно повесить создаение Response и запись в него значений на QueryOpen документа-родителя, а это уже Front-end. Кто что посоветует?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2006, 15:30
Ответы с готовыми решениями:

Response
Итак вопрос. Есть документ, например Предмет. У енго есть дочерний документ Ответ(Response). У...

Response ?
Необходимо из скриптов создать документ ответа. Форма ответа есть, если я создаю один ответ по...

Response To Response
создаю response to response, хочу увидеть внутри него ссылку но лучще копию на главный документ....

Response Document
В общем хочу выделить во view документ и нажать на кнопочку. При нажатии на кнопочку чтобы...

21
DmT
06.09.2006, 15:57 2
Для: Hedg

А чё тут посоветовать: создаешь документ ответа и фсё. Только поля ручками придется копировать, если таковые имеются.
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
06.09.2006, 17:49 3
Вообщем наваял я тут код который работает. Но выглядит он ховайся в жито.


Код
Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim docA As NotesUIDocument
Dim docA2 As NotesDocument
Dim docB As NotesDocument
Dim creator As String
Dim number_doc As String
Dim user As String
Dim db As NotesDatabase
Dim accessDate As Variant
Dim ID As String

Set db = session.CurrentDatabase
Set docA = workspace.CurrentDocument

user = session.UserName
Messagebox user
creator=docA.FieldGetText("Creator")
number_doc=docA.FieldGetText("Номер")

Set docA2=docA.document
accessDate = docA2.LastAccessed
ID = docA2.UniversalID

Set docB = New NotesDocument ( db )
docB.Form = "Invoice_Hystory"

Call docB.ReplaceItemValue("$Ref", ID)
Call docB.ReplaceItemValue("Creator", creator)
Call docB.ReplaceItemValue("number_document", number_doc)
Call docB.ReplaceItemValue("readers", user+";")
Call docB.ReplaceItemValue("open_time", Cstr(accessDate))
Call docB.Save( True, True )

End Sub
Но он создаёт каждый раз новый документ, а не дописывает в старый.
И ещё какие будут предложения по его привидению в нормальный вид.
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
08.09.2006, 11:22 4
Хождение по мукам часть 2


Код
Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim docA As NotesUIDocument
Dim docA2 As NotesDocument
Dim response As NotesDocument
Dim creator As String
Dim number_doc As String
Dim user As String
Dim db As NotesDatabase
Dim accessDate As Variant
Dim ID As String
Dim view As NotesView
Dim dc As NotesDocumentCollection

Set db = session.CurrentDatabase
Set docA = workspace.CurrentDocument
Set view = db.GetView("Response")

Set docA2=docA.document

ID = docA2.UniversalID
accessDate = docA2.LastAccessed
user = session.UserName
creator=docA.FieldGetText("Creator")
number_doc=docA.FieldGetText("ТНомер")

Set dc = view.GetAllDocumentsByKey(number_doc)
Set docA2 = dc.GetFirstDocument
Set response = view.GetChild(docA2)

If Not (response Is Nothyng) Then
Call response.ReplaceItemValue("readers", user)
Call response.ReplaceItemValue("open_time", Cstr(accessDate))
Call response.Save( True, True )

Else
Set response= New NotesDocument ( db )
response.Form = "Invoice_Hystory"

Call response.ReplaceItemValue("$Ref", ID)
Call response.ReplaceItemValue("Creator", creator)
Call response.ReplaceItemValue("number_document", number_doc)
Call response.ReplaceItemValue("readers", user+";")
Call response.ReplaceItemValue("open_time", Cstr(accessDate))
Call response.Save( True, True )

End If
End Sub
Вот здесь

Код
Set response = view.GetChild(docA2)
Получаю Function requires a valid ADT argument
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
10.09.2006, 09:40 5
Может docA2 is Nothyng ? :(
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
10.09.2006, 10:05 6
docA2 всегда есть, а мне нужно найти его потомка GetChild(docA2), если он существует дописать, если его нет то создать. Если брать docA2 is Nothyng - то прийдётся идти по всей коллекции и брать респонсы всех доков, а мне нужен респонс конкретного документа, открытого в текущий момен.
Я не доконца понимаю работу метода GetAllDocumentsByKey - коллекция не создаёться.
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
10.09.2006, 10:20 7
Для: Hedg
Если коллекция не создается (т.е. создается, но пустая), то docA2 is Nothyng. Отсюда и ошибка.
Метод GetAllDocumentsByKey ищет в первой отсортированной колонке в представленнии по ключу.
Для получения респонсов есть свойство NotesDocument.Responses. Текущий документ хранится в параметре Source.
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
10.09.2006, 10:44 8
docA2 не пустой - проверял.
GetAllDocumentsByKey ищет по ключу, может ли ключём являться значение поля?
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
10.09.2006, 10:49 9
Для: Hedg, если у тебя коллекция пустая, то docA2 тоже будет пустой.
Может.
0
0 / 0 / 0
Регистрация: 26.05.2006
Сообщений: 1,313
10.09.2006, 11:18 10
Цитата Сообщение от Medevic
Для получения респонсов есть свойство NotesDocument.Responses.
Вот тут по-осторожнее. Это свойство безупречно работало в 4.6.х. Потом (не скажу сейчас в какой версии 5-ки или 6-ки) его разломали :( Пришлось от него оотказаться и переписывать уйму рабочих приложений. Недавно (под 6.5.5) проверял - вроде починили. Но осадок остался...
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
10.09.2006, 11:21 11
<!--QuoteBegin-Constantin A Chervonenko+11:09:2006, 10:05 -->
<span class="vbquote">(Constantin A Chervonenko @ 11:09:2006, 10:05 )</span><!--QuoteEBegin-->Вот тут по-осторожнее. Это свойство безупречно работало в 4.6.х. Потом (не скажу сейчас в какой версии 5-ки или 6-ки) его разломали mad.gif Пришлось от него оотказаться и переписывать уйму рабочих приложений. Недавно (под 6.5.5) проверял - вроде починили. Но осадок остался...
[snapback]43569" rel="nofollow" target="_blank[/snapback]?[/quote]
Да я и сам почти его не использую. Слишком много проблем. Лучше GetAllDocumentsByKey с UNID в качестве ключа. Гораздо удобнее. :(
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
10.09.2006, 11:57 12
Блин я жу незнаю что делать


Код
Sub Postopen(Source As Notesuidocument)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim docA2 As NotesDocument
Dim response As NotesDocument

Dim creator As String
Dim number_doc As String
Dim user As String
Dim db As NotesDatabase
Dim accessDate As Variant
Dim ID As String


Set db = session.CurrentDatabase
Set docA2=Source.Document

ID = docA2.UniversalID
accessDate = docA2.LastAccessed
user = session.UserName
creator=Source.FieldGetText("Creator")
number_doc=Source.FieldGetText("ТНомер")

Set view = db.GetView("Таблица\Invoice Facturen")
Set dc = view.GetAllDocumentsByKey(ID)
Set docA2=view.GetFirstDocument
Set response = view.GetChild(docA2)



If Not (response Is Nothyng) Then
Call response.ReplaceItemValue("readers", user)
Call response.ReplaceItemValue("open_time", Cstr(accessDate))
Call response.Save( True, True )
Messagebox "Документ истории изменён"

Else
Set response= New NotesDocument ( db )
response.Form = "Invoice_Hystory"

Call response.ReplaceItemValue("$Ref", ID)
Call response.ReplaceItemValue("Creator", creator)
Call response.ReplaceItemValue("number_document", number_doc)
Call response.ReplaceItemValue("readers", user+";")
Call response.ReplaceItemValue("open_time", Cstr(accessDate))
Call response.Save( True, True )
Messagebox "Документ истории создан"

End If
End Sub
Коллекция в упор создаётся пустой. Пустой она быть не должна, так как документы существуют и ключём явлется UNID текущего документа.
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
10.09.2006, 15:43 13
Я что-то не понимаю как работает Set dc = view.GetAllDocumentsByKey(ID), осуществляет поиск в документе по переданному значению. Как оно ищет? Нужно задавать поле в котором искать или метод обходит все поля?
0
DmT
10.09.2006, 15:58 14
Цитата Сообщение от Hedg
Я что-то не понимаю как работает Set dc = view.GetAllDocumentsByKey(ID), осуществляет поиск в документе по переданному значению. Как оно ищет? Нужно задавать поле в котором искать или метод обходит все поля?
из хелпа:

Usage
For the GetAllDocumentsByKey method to work, you must have at least one sorted column for each key.

Этот метод ищет документы по первому ОТСОРТИРОВАННОМУ столбцу.
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
10.09.2006, 16:37 15
Т.е что бы Set dc = view.GetAllDocumentsByKey(ID) отрабатывал правильно, нужно создать представление с формулой отбора документов по форме, первый стобец которого должен отображать, для данного случая, данные из поля которое содержит UNID документа?
0
DmT
10.09.2006, 17:11 16
Для: Hedg

да
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
10.09.2006, 18:30 17
Что-то не работает. Коллекция по прежнему пуста, возможно нужно задавать парметр сортировки.
GetAllDocumentsByKey(ID) , т.е. ID по чём отбирать, а какое нужно указывать значение для сортировки?
0
0 / 0 / 0
Регистрация: 26.05.2006
Сообщений: 1,313
11.09.2006, 11:27 18
Цитата Сообщение от Medevic
Да я и сам почти его не использую. Слишком много проблем. Лучше GetAllDocumentsByKey с UNID в качестве ключа. Гораздо удобнее. :(
Лишняя сущность - технологическая view. Если еще и сортировка респонсов нужна, то да, удобнее.
0
1 / 1 / 0
Регистрация: 23.04.2006
Сообщений: 226
11.09.2006, 11:47 19
Да не нужна мне сортировка респонсов, мне нужно дописывать в респонс открытого документа-родителя, а я немогу его найти. По идее должна создаться коллекция из одного документа и от него браться респонс. Но коллекция пустая.
0
0 / 0 / 0
Регистрация: 12.08.2006
Сообщений: 59
11.09.2006, 12:41 20
Код
    Set view = db.GetView("Таблица\Invoice Facturen")
Set dc = view.GetAllDocumentsByKey(ID)
Set docA2=view.GetFirstDocument
Set response = view.GetChild(docA2)
Насколько я понял нужный тебе документ находится в коллекции dc, а респонс ты пытаешься получить из вьюхи и далеко не факт, что


Код
Set docA2=view.GetFirstDocument
вернет тебе открытый в данный момент док (он с равным успехом может быть и в конце и в начале, и в середине вьюхи), а возвращаемый документ респонсов может и не иметь...
0
11.09.2006, 12:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2006, 12:41
Помогаю со студенческими работами здесь

Помогите с Response
Здравствуйте. Есть 2 формы А1-Document Поле-Ф1, A2- response Поле-Ф1. Создаю документ в форме А1...

Опять вопрос по Response
Как сделать так чтобы при сохранение response формы, обновлялось поле в главном документе и внес...

Неубиваемый Response Reference List...
Клиент 852FP1. Поле типа Response Reference List - для фейкового $Ref. Форма открываемая через...

Слепить Response из двух документов
Коллеги, добрый день! Подскажите, пожалуйста, как можно с наименьшей кровью на LS сделать вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru