Как пройти поле Body построчно

Тема в разделе "Lotus - Программирование", создана пользователем Oksana, 5 май 2011.

  1. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    0
    Подскажите, пожалуйста, как пройти поле письма Body строчка за строчкой, чтобы разложить значения из строк в нужные поля.
     
  2. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Использовать класс NotesRichTextNavigator.
     
  3. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    0
    да вот не получается :(
    точнее ерунда получается
    мне перед разбором надо разбить этот текст на строки, фактически просто заменяю "," на знак перевода строки
    вот потом NotesRichTextNavigator, видимо принимает все за один абзац

    я сделала вариант загоняла всё в текстовый файл и потом считывала назад построчно, так получилось
    но хотелось бы без него
    не могу с NotesRichTextNavigator разобраться
     
  4. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Может тогда проще будет воспользоваться
    plainText$ = notesRichTextItem.GetUnformattedText( )
    и разбирать строку?
     
  5. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    или через @Abstract
     
  6. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    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">Event Time: 2011-03-04 10:42:00
    Event Type: Environmental
    Object of Reference: SubNetwork=ONRM_RootMo,SubNetwork=AXE,ManagedElement=BSC2,BssFunction=BSS_Manage
    dFunction,BtsSiteMgr=POLUS2_ERUDA
    Object Class: 8
    Backup Object:
    Backup Status:
    Trend Indication:
    Perceived Severity: Critical
    Probable Cause: Different causes possible for same message
    Specific Problem: RADIO X-CEIVER ADMINISTRATION BTS EXTERNAL FAULT




    Так ка часть переменных нужных мне, находятся в одной строке. посчитала наиболее удобным разложить их построчно, вот поэтому и заменяю "," на Chr(13)

    может нагородила, но делаю это так:
    <!--shcode--><pre><code class='разбиение на абзацы'>Set rtitem = CurDoc.GetFirstItem( "Body" )
    If ( rtitem.Type = RICHTEXT ) Then
    plainText = rtitem.GetFormattedText( True, 150 )
    End If


    Set MailBody = New NotesRichTextItem( CurDoc, "Body" )
    Call MailBody.AppendText(Replace(plainText,",",Chr(13)) )
    Call CurDoc.Save(True, False)[/CODE]


    После чего получаю Body в новом варианте, из которого и хотелось бы извлечь построчно значение требуемых переменных (выделила жирным).
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">"Body построчно"</div></div><div class="sp-body"><div class="sp-content">Event Time: 2011-03-04 10:44:00
    Event Type: Environmental
    Object of Reference: SubNetwork=ONRM_RootMo
    SubNetwork=AXE
    ManagedElement=BSC2
    BssFunction=BSS_ManagedFunction
    BtsSiteMgr=POLUS2_ERUDA
    Object Class: 8
    Backup Object:
    Backup Status:
    Trend Indication:
    Perceived Severity: Cleared
    Probable Cause: Different causes possible for same message
    Specific Problem: RADIO X-CEIVER ADMINISTRATION BTS EXTERNAL FAULT
     
  7. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    А если так?

    Код (LotusScript):
        Set rtitem = CurDoc.GetFirstItem( "Body" )
    If ( rtitem.Type = RICHTEXT ) Then
    plainText = rtitem.GetFormattedText( True, 150 )
    End If

    lines = Fulltrim(Split(plainText, ","))
    Set MailBody = New NotesRichTextItem( CurDoc, "Body" )

    Forall l In lines
    Call MailBody.AppendText(l)
    Call MailBody.AddNewLine(1)
    End Forall

    Call CurDoc.Save(True, False)
    З.Ы. Новая строка, кстати, не всегда символ 13. Иногда оно еще работает только вместе с 9(перевод каретки или как оно там).
     
  8. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Насколько я помню, 13 — возврат каретки (CR), 10 — перевод строки (LF), 9 — табуляция (TAB). В Windows строки завершаются парой символов CRLF, в никсах, кмк, LF, но могу ошибаться.

    Oksana
    А зачем нужно Body в новом варианте, может сразу со строкой работать, например, так:
    Код (LotusScript):
            Set rtitem = CurDoc.GetFirstItem( "Body" )
    If ( rtitem.Type = RICHTEXT ) Then
    plainText = rtitem.GetUnFormattedText()
    End If
    Dim findArr(1) As String
    Dim replArr(1) As String
    Dim resArr As Variant

    findArr(0) = ","
    findArr(1) = Chr(13)
    replArr(0) = Chr(10)
    replArr(1) = ""
    resArr = Split(Replace(plainText, findArr, replArr), Chr(10))
     
  9. Xalet

    Xalet Well-Known Member

    Регистрация:
    8 авг 2008
    Сообщения:
    410
    Симпатии:
    0
    Точно, спасибо за поправку.
     
  10. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    0
    Визуально получилось как и у меня, то есть видим Body построчно, а при фактическом переборе строк, та длинная так и остается склееной

    Добавлено:
    да, так кажется всё получилось, работает )
    вот осмыслить пока не получилось )))
    сейчас еще погоняю, проверю
     
  11. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Ничего сложного, реплэйсом меняем запятые на переводы строк и убираем возвраты каретки, чтоб не мешались, затем сплитом "режем" строку на подстроки по переводам строк.

    В принципе, можно тем же реплэйсом менять "=" на ":" для упрощения последующего анализа (добавить в findArr(2) = "=", replArr(2) = ":")
     
  12. Oksana

    Oksana Lotus team
    Lotus team

    Регистрация:
    10 янв 2006
    Сообщения:
    330
    Симпатии:
    0
    Спасибо!

    а подскажите еще, как мне правильно вставить в поле с типом дата/время
    эту строчку, что бы по ней потом была возможна сортировка по времени
    Event Time: 2011-03-04 10:42:00
     
  13. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    В простейшем случае doc.ReplaceItemValue("ItemName", CDat(DataAsString))
    Если не прокатит, через класс NotesDateTime.
     
Загрузка...

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