как правильно заменить $ref

phantom76

Lotus team
25.02.2005
360
4
#1
что нужно учитывать, чтобы в респонсах заменить значение поля $ref новым? Нужно респонсы перетянуть под другого родителя...
в каком формате указывать новое значение?
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
что нужно учитывать, чтобы в респонсах заменить значение поля $ref новым? Нужно респонсы перетянуть под другого родителя...
в каком формате указывать новое значение?
call respdoc.MakeResponce(newparentdoc)

а вообще $REF - это UNID родителя, т.е. текст
 

phantom76

Lotus team
25.02.2005
360
4
#4
т.е. смело беру UNID нужного родителя и записываю его в $REF респонса?
 

Omh

Lotus team
04.07.2007
2 210
1
#5
phantom76
Нет, ты находишь новый парент и делаешь doc.MakeRespnse
То, что сказал nvy в первом же ответе.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#7
почувствуйте разницу:
Data Type: Response Reference List
Data Type: Text

если в обычное текстовое поле засунуть Response Reference List и отобразить, то мы увидим линк на документ, как хотспот, такой же, как если бы линк создали в RT-поле
 

phantom76

Lotus team
25.02.2005
360
4
#9
почувствуйте разницу:
Data Type: Response Reference List
Data Type: Text

если в обычное текстовое поле засунуть Response Reference List и отобразить, то мы увидим линк на документ, как хотспот, такой же, как если бы линк создали в RT-поле
уже почувствовал :), потому и спрашиваю..
 

nvyush

Lotus team
22.04.2009
2 317
0
#10
nvy

это НЕ текст это УНИД
иначе бы на такой текст не применяли бы команду в видах @Text(UNID)
С "текстом" погорячился. Просто doc.Getitemvalue("$REF")(0) дает строку без к-либо преобразований. ПисАть в $REF-поля не пробовал - не было нужды.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#11
если нужно перенести поле типа Response Reference List, то надо копировать NotesItem
notesItem.CopyItemToDocument( document, newName$ )
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
17
#12
С "текстом" погорячился. Просто doc.Getitemvalue("$REF")(0) дает строку без к-либо преобразований.
опять не верно :)
Getitemvalue - делает преобразования в распространенные типы переменных
так как Reference List не узаконен как тип переменных преобразование идет в текст
аналогом doc.Getitemvalue("$REF")(0) является Doc.ParentDocumentUNID - уже преобразованный стринг
 
O

oshmianski

#13
не мое, но все же.
будьте внимательны, стандартное поле $Ref удаляется!!!
применяется для создания альтернативной иерархии.

Код:
Function SERVICE_CreateAlternateResponse (docParent As NotesDocument, docChildren As NotesDocument, refItemName As String) As Boolean
Dim tmpRefItem As NotesItem

On Error Goto ErrorHandler

SERVICE_CreateAlternateResponse = False

If docParent Is Nothing Then
Error 1000, "Не передан параметр <docParent>."
End If

If docChildren Is Nothing Then
Error 1001, "Не передан параметр <docChildren>."
End If

If Len(refItemName) = 0 Then
Error 1002, "Не передан параметр для функции <refItemName>."
Exit Function
End If

Call docChildren.MakeResponse (docParent)
Set tmpRefItem = docChildren.GetFirstItem ("$Ref")

While docChildren.HasItem (refItemName)
Call docChildren.RemoveItem (refItemName)
Wend

Call docChildren.CopyItem (tmpRefItem, refItemName)
Call docChildren.RemoveItem ("$Ref")

SERVICE_CreateAlternateResponse = True
Ex:
Exit Function

ErrorHandler:
Call ProcessError (LIB_NAME, Err, Error, Erl, Lsi_info(2), Lsi_info(12))
Resume Ex
End Function
 

phantom76

Lotus team
25.02.2005
360
4
#14
не мое, но все же.
будьте внимательны, стандартное поле $Ref удаляется!!!
применяется для создания альтернативной иерархии.

Код:
Function SERVICE_CreateAlternateResponse (docParent As NotesDocument, docChildren As NotesDocument, refItemName As String) As Boolean
Dim tmpRefItem As NotesItem

On Error Goto ErrorHandler

SERVICE_CreateAlternateResponse = False

If docParent Is Nothing Then
Error 1000, "Не передан параметр <docParent>."
End If

If docChildren Is Nothing Then
Error 1001, "Не передан параметр <docChildren>."
End If

If Len(refItemName) = 0 Then
Error 1002, "Не передан параметр для функции <refItemName>."
Exit Function
End If

Call docChildren.MakeResponse (docParent)
Set tmpRefItem = docChildren.GetFirstItem ("$Ref")

While docChildren.HasItem (refItemName)
Call docChildren.RemoveItem (refItemName)
Wend

Call docChildren.CopyItem (tmpRefItem, refItemName)
Call docChildren.RemoveItem ("$Ref")

SERVICE_CreateAlternateResponse = True
Ex:
Exit Function

ErrorHandler:
Call ProcessError (LIB_NAME, Err, Error, Erl, Lsi_info(2), Lsi_info(12))
Resume Ex
End Function
да, спасибо :) у меня как раз 2 комплекта полей используется для иерархии в каждом документе, стандартное исспользуется только для визуализации, а через дублируемые работает логика приложения..
 
R
#15
да, спасибо :) у меня как раз 2 комплекта полей используется для иерархии в каждом документе, стандартное исспользуется только для визуализации, а через дублируемые работает логика приложения..
Еще одна элегантная функция от Egor A. Ivanov; InterTrust 13.03.2007 17:24
********
на входе псевдодочерний документ, имя поля заменяющего $REF и родительский UNID в строке.

Sub SetRRLItem (note As NotesDocument, itemName As String, itemValue As String)
Dim parent As New NotesDocument (note.ParentDatabase)
Dim response As New NotesDocument (note.ParentDatabase)
Let parent.UniversalID = itemValue
Call response.MakeResponse (parent)
Call response.GetFirstItem ("$REF").CopyItemToDocument (note, itemName)
End Sub
********