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

Тема в разделе "Lotus - Программирование", создана пользователем phantom76, 28 авг 2009.

  1. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    что нужно учитывать, чтобы в респонсах заменить значение поля $ref новым? Нужно респонсы перетянуть под другого родителя...
    в каком формате указывать новое значение?
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    call respdoc.MakeResponce(newparentdoc)

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    nvy
    это НЕ текст это УНИД
    иначе бы на такой текст не применяли бы команду в видах @Text(UNID)
     
  4. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    т.е. смело беру UNID нужного родителя и записываю его в $REF респонса?
     
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    phantom76
    Нет, ты находишь новый парент и делаешь doc.MakeRespnse
    То, что сказал nvy в первом же ответе.
     
  6. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    спасибо коллеги!
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    почувствуйте разницу:
    Data Type: Response Reference List
    Data Type: Text

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

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Тип поля у $REF не "TEXT", а "Response Reference List". MakeResponse - правильный способ переподчинения документа.
     
  9. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    уже почувствовал :), потому и спрашиваю..
     
  10. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    С "текстом" погорячился. Просто doc.Getitemvalue("$REF")(0) дает строку без к-либо преобразований. ПисАть в $REF-поля не пробовал - не было нужды.
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    если нужно перенести поле типа Response Reference List, то надо копировать NotesItem
    notesItem.CopyItemToDocument( document, newName$ )
     
  12. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    опять не верно :)
    Getitemvalue - делает преобразования в распространенные типы переменных
    так как Reference List не узаконен как тип переменных преобразование идет в текст
    аналогом doc.Getitemvalue("$REF")(0) является Doc.ParentDocumentUNID - уже преобразованный стринг
     
  13. oshmianski

    oshmianski Гость

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

    Код (Text):
    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
     
  14. phantom76

    phantom76 Lotus team
    Lotus team

    Регистрация:
    25 фев 2005
    Сообщения:
    363
    Симпатии:
    9
    да, спасибо :) у меня как раз 2 комплекта полей используется для иерархии в каждом документе, стандартное исспользуется только для визуализации, а через дублируемые работает логика приложения..
     
  15. rins

    rins Гость

    Еще одна элегантная функция от 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
    ********
     
Загрузка...

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