Поля Appendix и Appendix_1 - Notesdocument.getfirstitem

Тема в разделе "Lotus - Программирование", создана пользователем promka, 7 июл 2010.

  1. promka

    promka Member

    Регистрация:
    29 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    Чем можно заменить конструкцию:
    Set item = NotesDocument.GetFirstItem(FieldName)
    что бы корректно работало при наличии полей с именами Appendix и Appendix_1 ?
     
  2. Klido

    Klido Гость

    а что некорректно работает?
     
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Код (LotusScript):
    Set item = NotesDocument.GetFirstItem("Appendix")
    Set item = NotesDocument.GetFirstItem("Appendix_1")
    :)
     
  4. promka

    promka Member

    Регистрация:
    29 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    Да не корректно, из хелпа:
    ... If multiple items in a document have the same name, programmatic access is limited to the first item. ...
    Обработка идет в цикле.
     
  5. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Это касалось бы итемов с именами, например, Appendix, Appendix, Appendix, Appendix, но не Appendix, Appendix_1.
    Покаж код обработки.
     
  6. promka

    promka Member

    Регистрация:
    29 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    Предупреждаю сразу, мопед не мой.

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Function pp_CopyRTItems( actiondoc As NotesDocument, SourceDoc As NotesDocument, TargetDoc As NotesDocument) As NotesDocument
    'Возвращает оригинал для TargetDoc, если оригинал был изменен
    On Error Goto ErrHnd

    Dim i As Long
    Dim v
    Dim AllDes
    Dim Des As String
    Dim TName As String
    Dim SName As String
    Dim ASourceDoc As NotesDocument
    Dim ATargetDoc As NotesDocument
    Dim TargetOrigDoc As NotesDocument
    Dim InOrig As Integer
    Dim HasOrig As Integer
    Dim RemovedRT List As Integer
    Dim OrigFields As Variant
    Dim tmpDoc As NotesDocument

    If actiondoc.rtfields(0)="" Then Exit Function

    If Ubound( actiondoc.rtfields ) > 1 Then
    'старый способ описания RT-полей
    For i=0 To Ubound(actiondoc.rtfields)-1 Step 2
    Set v=SourceDoc.getfirstitem(actiondoc.rtfields(i))
    If Not v Is Nothing Then
    Call v.CopyItemToDocument(TargetDoc,actiondoc.rtfields(i+1))
    End If
    Next
    Else
    'новый способ описания RT-полей (с поддержкой оригиналов)
    '<SRT1>%<TRT1>[%O] : <SRT2>%<TRT1>[%O] : <SRT1>%<TRT2>...
    Set tmpDoc = TargetDoc.ParentDatabase.CreateDocument 'врем. док. для RT-полей
    HasOrig = False
    Set ASourceDoc = pp_GetRTStorageDocument( SourceDoc )
    AllDes = Evaluate(actiondoc.rtfields(0), SourceDoc)
    For i = 0 To Ubound( AllDes )
    Des = Cstr( AllDes( i ) )
    SName = Trim$( Strleft(Des,"%" ) )
    TName = PPR_Word(Des, "%",2)
    If TName="" Or SName="" Then Error AGENTERRORNUM#, "Не правильный формат описания копируемых RT-полей"

    InOrig = ( Ucase$(Trim$(PPR_Word(Des, "%",3))) = "O")

    If InOrig And TargetOrigDoc Is Nothing Then
    Set TargetOrigDoc = pp_GetRTStorageDocument( TargetDoc )
    If TargetOrigDoc.UniversalId<>TargetDoc.UniversalId Then HasOrig = True
    End If
    If InOrig Then
    Dim OrigS As String
    Dim OrigT As String
    Dim OrigType As String
    Dim sOrigDes As String

    Set ATargetDoc = TargetOrigDoc

    Else
    Set ATargetDoc = TargetDoc
    End If

    '// 23.11.05 для переноса полей с подписью в ЭО
    Dim Sitem As Variant
    Dim Titem As Variant

    'на случай если в ASourceDoc нет поля для TName
    If Not Iselement( RemovedRT(TName) ) Then
    ATargetDoc.RemoveItem TName
    RemovedRT(TName) = 1
    End If


    Set Sitem = ASourceDoc.GetFirstItem(SName)
    If Not Sitem Is Nothing Then
    Set Titem = tmpDoc.GetFirstItem( TName )
    If Titem Is Nothing Then
    Set Titem = Sitem.CopyItemToDocument( tmpDoc,TName )
    Elseif Sitem.Type=RICHTEXT Or Sitem.Type=MIME_PART Then
    Titem.AppendRTItem Sitem
    Elseif Sitem.Type = Titem.Type Then
    v = Titem.Values
    v = Arrayappend( v, Sitem.Values )
    Call tmpDoc.ReplaceItemValue( TName, v)
    Else
    Error 1001, "Type of source and target item doesn't match"
    End If
    End If
    '//
    Next

    'Через CopyAllItems приходится делать потому что CopyItemToDocument(ATargetDoc) приводил к дублированию $FILE
    Call tmpDoc.CopyAllItems( ATargetDoc, True )

    If HasOrig Then Set pp_CopyRTItems = TargetOrigDoc
    End If

    Exit Function

    ErrHnd:
    Dim ErrStr As String
    ErrStr = "pp_CopyRTItems Line " & Erl & "; " & Chr(10) & Error$
    Resume Done

    Done:
    On Error Goto 0
    Error agentERRORNUM#, ErrStr
    End Function
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Это не значит, что не нужно использовать теги кода на форуме ))

    Код (LotusScript):
    AllDes = Evaluate(actiondoc.rtfields(0), SourceDoc)
    непонятно, зачем так, а не просто
    Код (LotusScript):
    AllDes = actiondoc.rtfields(0)
    или
    Код (LotusScript):
    AllDes = actiondoc.rtfields
    не понял какой вид должно иметь значение поля rtfields
     
  8. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Разница как раз понятна. Список значений получается в результате вычисления некой формулы, записанной в rtfields(0).

    promka
    Какой из GetFirstItem должен получить "Appendix_1"? Тут нет ни одного "Appendix" чтоб можно было понять по аналогии?
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    это-то я и сам предположил ) все-равно, не понятно, что в поле сидит.
     
  10. promka

    promka Member

    Регистрация:
    29 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    В поле прописано:

    "<name1>%<name1>%O":"<name2>%<name2>%O":"<name3>%<name3>%O" ...
     
  11. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Одним значением или массивом строк?
    Если массивом, то код должен заходить в ветку
    If Ubound( actiondoc.rtfields ) > 1 Then
    Если заходит в нее, то форматирование значения в поле не соответствует выполняемому коду.
    Если одной строкой и/или не заходит в ветку выше, то зачем там тогда Evaluate?

    TIA, подсказывай, бо я че-то не понимаю кода этого ))
     
  12. promka

    promka Member

    Регистрация:
    29 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    Одним значением.
     
  13. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А что тогда возвращается в AllDes = Evaluate(actiondoc.rtfields(0), SourceDoc)?
    Дебагером пробовал пройтись?
     
  14. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Мне на вопросы не отвечают. Я не пойму как связать в понятный вопрос GetFistItem, Appendix с Appendix_1 и приведённый код.
    На прямой вопрос ты уже ответил:
    Т.е. "Appendix" и "Appendix_1" это разные поля, потому что с разными именами.
     
  15. promka

    promka Member

    Регистрация:
    29 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    AllDes = "Body%Body%O":"Appendix%Appendix%O":"Appendix_1%Appendix_1%O":"$LockerIT_XMLSign%$LockerIT_XMLSign%O":"CMLocker_SignInfo%CMLocker_SignInfo%O":"CMLocker_CertifySignInfo%CMLocker_CertifySignInfo%O"
     
  16. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А одной строкой или массив из многих содержит переменная?
    Я понял, евалуейт должен был преобразовать это в массив. Преобразовал ли?
    Если возвращает массив вида:

    0 - "Body%Body%O"
    1 - "Appendix%Appendix%O"
    2 - "Appendix_1%Appendix_1%O"
    Тогда в каком месте код некорректно отрабатывает?
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    promka
    Так, а надо то что? В вашем первом вопросе говорите что работает "некорректно", а каков критерий корректности?
     
Загрузка...

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