Письмо в формате RTF

Тема в разделе "Lotus - Программирование", создана пользователем Guest, 26 мар 2005.

Статус темы:
Закрыта.
  1. Guest

    Guest Гость

    Помогите решить следующую задачу. Есть форма в которой есть поле Body с типом RichText. Как сделать так, что бы при нажатии на кнупку, отправлялось письмо и при этом сохранилось форматирование?
     
  2. Breef

    Breef Гость

    <!--QuoteBegin-Guest+26:03:2005, 20:28 -->
    <span class="vbquote">(Guest @ 26:03:2005, 20:28 )</span><!--QuoteEBegin-->Помогите решить следующую задачу. Есть форма в которой есть поле Body с типом RichText. Как сделать так, что бы при нажатии на кнупку, отправлялось письмо и при этом сохранилось форматирование?[/quote]
    Создаем документ, создаем в нем поле типа RichText, копируем в него содержимое из нужного нам документа (или просто копируем Item), отправляем новый документ через doc.Send. Форматирование, по идее, сохранится... или я не прав?
     
  3. Guest

    Guest Гость

    <!--QuoteBegin-Breef+28:03:2005, 12:22 -->
    <span class="vbquote">(Breef @ 28:03:2005, 12:22 )</span><!--QuoteEBegin-->Создаем документ, создаем в нем поле типа RichText, копируем в него содержимое из нужного нам документа (или просто копируем Item), отправляем новый документ через doc.Send. Форматирование, по идее, сохранится... или я не прав?[/quote]
    Я так и делал, но к сожалению текст не получается форматированным. Когда программно делаю форматирование (rtitem.Bold например) то все нормально, при doc.Send письмо отправлятся с выделениями. А вот когда из поля RichText береш текст, то он преобразовывается к PlainText. Может я что то не так делаю? Может кто нибудь проверенный кусочек кода выложить? Заранее благодарен.
     
  4. Breef

    Breef Гость

    <!--QuoteBegin-Guest+28:03:2005, 13:15 -->
    <span class="vbquote">(Guest @ 28:03:2005, 13:15 )</span><!--QuoteEBegin-->Я так и делал, но к сожалению текст не получается форматированным. Когда программно делаю форматирование (rtitem.Bold например) то все нормально, при doc.Send письмо отправлятся с выделениями. А вот когда из поля RichText береш текст, то он преобразовывается к PlainText. Может я что то не так делаю? Может кто нибудь проверенный кусочек кода выложить? Заранее благодарен.[/quote]
    Выложи, пожалуй, кусочек, в котором ты работаешь с этими полями.
     
  5. Guest

    Guest Гость

    <!--QuoteBegin-Breef+28:03:2005, 14:02 -->
    <span class="vbquote">(Breef @ 28:03:2005, 14:02 )</span><!--QuoteEBegin-->Выложи, пожалуй, кусочек, в котором ты работаешь с этими полями.[/quote]
    Вот собственно кусочек моего кода. (Скажу сразу в лотусе я начинаю только програмить так что выслушаю все ваши конструктивные замечания и пожелания)

    Код (Text):
    Sub Click(Source As Button)
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim workspace As New NotesUIWorkspace
    Dim rtitem As NotesRichTextItem
    Dim richStyle As NotesRichTextStyle

    Set wsdoc = workspace.CurrentDocument
    Set db = s.CurrentDatabase
    Set doc = New NotesDocument (db)
    Set rtitem = New NotesRichTextItem( doc, "Body" )
    Set richStyle = s.CreateRichTextStyle  
    mailbody = wsdoc.FieldGetText("mailbody")
    subject = wsdoc.FieldGetText("Subject")
    privetstvie=wsdoc.FieldGetText("privetstvie")+" "
    richStyle.Italic = True
    richStyle.bold = True
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText(privetstvie)
    Call rtitem.AppendText(entry.ColumnValues(1)    )
    richStyle.Italic = False
    richStyle.bold = False
    Call rtitem.AddNewline(2)
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText(mailbody)
    doc.Subject = subject
    Call doc.Send(False)

    End Sub
     
  6. Breef

    Breef Гость

    Для начала можно попробовать просто сохранить документ перед отправкой.
    Если не поможет (увы, сейчас проверить не могу у себя), подумаем еще.
    Еще один вариант -- создавать это поле в другом документе, а потом просто копировать его как item, хотя, это немного для другой задачи используется.
     
  7. Breef

    Breef Гость

    Для начала можно попробовать просто сохранить документ перед отправкой.
    Если не поможет (увы, сейчас проверить не могу у себя), подумаем еще.
    Еще один вариант -- создавать это поле в другом документе, а потом просто копировать его как item, хотя, это немного для другой задачи используется.
     
  8. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Вот это поясни. Как и куда берется ?
     
  9. Guest

    Guest Гость

    <!--QuoteBegin-Medevic+28:03:2005, 16:02 -->
    <span class="vbquote">(Medevic @ 28:03:2005, 16:02 )</span><!--QuoteEBegin-->Вот это поясни. Как и куда берется ?[/quote]
    Объясняю подробней. В форме есть поле "mailbody" с типом RichText есть кнопка действия при нажатии на которую выполняется код который я привел выше (часть кода, коечто удалил что бы выделить главное). В этом поле пишу текст с форматированием документ не сохраняю (щас попробую что будет если сохранить) перед обработкой и делаю вот так (это уже приводил)
    Код (Text):
    Set rtitem = New NotesRichTextItem( doc, "Body")
    Set richStyle = s.CreateRichTextStyle
    mailbody = wsdoc.FieldGetText("mailbody")
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText(mailbody)
    Call doc.Send(False)
    По поводу преобразовывания текста, то когда после обработки этого кода читаешь отправленное письмо, то текст там без форматирования и более того удаляется все переходы на новую строку, т.е. текст идет сплошной строкой.
     
  10. Breef

    Breef Гость

    <!--QuoteBegin-Guest+28:03:2005, 16:22 -->
    <span class="vbquote">(Guest @ 28:03:2005, 16:22 )</span><!--QuoteEBegin-->Объясняю подробней. В форме есть поле "mailbody" с типом RichText есть кнопка действия при нажатии на[/quote]
    Ясно.. Мне показалось, что mailBody -- обычное текстовое поле.
    Тогда, конечно, нельзя брать просто текст... Надо копированием item'ов заниматься... Иначе, никакое форматирование не сохранится.
     
  11. Guest

    Guest Гость

    <!--QuoteBegin-Breef+28:03:2005, 16:26 -->
    <span class="vbquote">(Breef @ 28:03:2005, 16:26 )</span><!--QuoteEBegin-->Надо копированием item'ов заниматься...[/quote]
    Поподробнее в этом месте плиззз.
     
  12. Breef

    Breef Гость

    Есть у тебя NotesRichTextItem. Ты Туда текст запихал, форматнул что и как надо, а потом копируешь этот item в новый документ (чую, где-то в процессе надо сохраняться) и потом его отсылаешь спокойно. Зачем выдирать из ричтекста голый текст и форматировать его заново?
     
  13. Guest

    Guest Гость

    <!--QuoteBegin-Breef+28:03:2005, 16:57 -->
    <span class="vbquote">(Breef @ 28:03:2005, 16:57 )</span><!--QuoteEBegin-->Есть у тебя NotesRichTextItem. Ты Туда текст запихал, форматнул что и как надо, а потом копируешь этот item в новый документ (чую, где-то в процессе надо сохраняться) и потом его отсылаешь спокойно. Зачем выдирать из ричтекста голый текст и форматировать его заново?[/quote]
    Всеравно не понимаю. Если я в поле с типом RichText делаю красивый форматированный текс, мне что просто так его с сохранение форматирования скопировать кудато не получится? А как мне потом программно это форматирование все сделать??? Голый текст я не выдираю, он сам потом таким становится:(
     
  14. Breef

    Breef Гость

    еще раз: формируешь исходное форматированное ричтекст поле. После чего берешь его как Item, копируешь в новый документ (котрый отсылать собираешься), добавляешь, если надо, что-то от себя, сохраняешь этот документ и отправляешь.
    FieldGetText method: In a document in read or Edit mode, returns the contents of a field you specify, as a string.
    String, как известно, форматирования иметь не может.
     
  15. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Посмотри ка метод AppendRTItem - думаю что он тебе поможет
    В сохранении нет необходимости, если тебе не нужен сам документ содержащий mailBody
     
  16. Guest

    Guest Гость

    Вот вобщем что у меня получилось. Письмо с форматирование получается уже делать:( Возник новый вопрос. Собственно зачем я это делаю. Есть база клиентов. В карточке клиента присутствует его имя и имейл. Необходимо отправлять именные письма. Делаю представление ("Почта") где в одной колонке у меня имена, а во второй адреса. Делаю фоорму с 2мя полями body и body1 и типом richtext. поле body предназначено для именного приветствия (например, Уважаемыей Петр Петрович), а воле body1 -- для тела письма. Как мне циклически сделать подстановку имен? Подправте мой код если не сложно плиззз:(

    Код (Text):
    Dim w As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim rtitemA As Variant
    Dim rtitemB As Variant
    Dim view As NotesView  
    Dim i As Integer   
    Dim nav As NotesViewNavigator
    Dim entry As NotesViewEntry
    Dim rtitem As NotesRichTextItem
    Dim richStyle As NotesRichTextStyle
    '---------------------------------------------------------------------------------------------------------
    Set uidoc = w.CurrentDocument
    Set doc = uidoc.Document
    Call uidoc.Save
    Set rtitemA = doc.GetFirstItem( "body" )
    Set rtitemB = doc.GetFirstItem( "body1" )
    Set rtitem = New NotesRichTextItem(doc, "tmp")
    Set richStyle = s.CreateRichTextStyle  
    Set db = s.CurrentDatabase 
    Set view = db.GetView("Почта")
    Set nav = view.CreateViewNav()
    Set entry = nav.GetFirst
    richStyle.Italic = True
    richStyle.bold = True
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText(" ")
    Call rtitem.AppendText(entry.ColumnValues(1))
    richStyle.Italic = False
    richStyle.bold = False
    '----------------------------------------------------------------------------------------------------------
    If ( rtitemA.Type = RICHTEXT And rtitemB.Type = RICHTEXT ) Then
    Call rtitemA.AppendRTitem(rtitem)
    Call rtitemA.AddNewLine(1)
    Call rtitemA.AppendRTItem( rtitemB)
    doc.SaveOptions = "0"
    doc.SendTo=entry.ColumnValues(2)
    Call doc.Save(False, True)
    Call doc.Send(False)   
    '   Call uidoc.Close
    End If
    Print (rtitem.text)
    Print (rtitemA.text)
    '===============================================================   
    For i=0 To nav.Count-2                          В ЭТОЙ ЧАСТИ ВОЗНИКАЮТ ПРОБЛЕМЫ
    Set entry = nav.GetNext(entry)                К ТЕЛУ НОВОГО ПИСЬМА ПРИБАЛЯЕТСЯ
    'Set rtitemA = doc.GetFirstItem( "body" )          ТЕЛО ПРЕДЫДУЩЕГО ПИСЬМА            
    'Set rtitemB = doc.GetFirstItem( "body1" )

    Set richStyle = s.CreateRichTextStyle  
    richStyle.Italic = True
    richStyle.bold = True
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText(" ")
    Call rtitem.AppendText(entry.ColumnValues(1))
    richStyle.Italic = False
    richStyle.bold = False
    '----------------------------------------------------------------------------------------------------------
    If ( rtitemA.Type = RICHTEXT And rtitemB.Type = RICHTEXT ) Then
    Call rtitemA.AppendRTitem(rtitem)
    Call rtitemA.AddNewLine(1)
    Call rtitemA.AppendRTItem( rtitemB)
    doc.SaveOptions = "0"
    doc.SendTo=entry.ColumnValues(2)
    '   Call doc.Save(False, True)
    Call doc.Send(False)   
    End If
    Print (rtitemA.text)

    Next i
     
  17. Andre

    Andre Well-Known Member

    Регистрация:
    29 июл 2004
    Сообщения:
    108
    Симпатии:
    0
    Если не ошибаюсь - то проблема состоит в том, что каждое следующее письмо содержит тела сообщений всех предыдущих писем.
    Все дело в том, что каждый раз в цикле For ты работаешь не с новым экземпляром richTextItem, а с предыдущим (первоначально сформированнным). Соответственно ты получаешь арифметическую прогресиию :)

    Что можно попробовать поправить.
    Я бы например делал так
    Dim w As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim rtitemA As Variant
    Dim rtitemB As Variant
    Dim view As NotesView
    Dim i As Integer
    Dim rtitem As NotesRichTextItem
    Dim richStyle As NotesRichTextStyle
    Dim tmpDoc As NotesDocument
    '---------------------------------------------------------------------------------------------------------
    Set uidoc = w.CurrentDocument
    Set doc = uidoc.Document
    Call uidoc.Save

    Set rtitemA = doc.GetFirstItem( "body" )
    Set rtitemB = doc.GetFirstItem( "body1" )

    Set richStyle = s.CreateRichTextStyle

    Set db = s.CurrentDatabase
    Set view = db.GetView("Почта")

    set tmpDoc = view.getFirstDocument

    while not tmpDoc is Nothing
    Set rtitem = New NotesRichTextItem(tmpdoc, "Body")

    richStyle.Italic = True
    richStyle.bold = True
    Call rtitem.AppendStyle(richStyle)
    Call rtitem.AppendText(" ")
    Call rtitem.AppendText(tmpDoc.поле_имя_клиента(0))
    richStyle.Italic = False
    richStyle.bold = False

    If ( rtitemA.Type = RICHTEXT And rtitemB.Type = RICHTEXT ) Then
    Call rtitem.AppendRTitem(rtitemA)
    Call rtitem.AddNewLine(1)
    Call rtitem.AppendRTItem( rtitemB)
    tmpdoc.SendTo=tmpDoc.поле_email_клиента(0)

    Call tmpdoc.Send(False)
    End If

    set tmpDoc = view.getnextDocument (tmpDoc)
    wend


    Дальше думаю разберешься
     
  18. Guest

    Guest Гость

    Все получилось:) Большое спасибо всем, кто мне помогал в решении данной задачи:) Vincent.

    З.Ы. Привожу немножко изменненый код Andre. Теперь все работает именно так, как я хотел.
    Код (Text):
    Sub Click(Source As Button)
    Dim boxType As Long
    Dim answer As Integer
    boxType& = MB_YESNO + MB_ICONQUESTION  
    answer = Messagebox ("Вы действительно хотите сделать рассылку?" , boxType& , "Внимание!!!")

    If answer = 6 Then
    Dim w As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim rtitemA As Variant
    Dim rtitemB As Variant
    Dim view As NotesView
    Dim rtitem As NotesRichTextItem
    Dim richStyle As NotesRichTextStyle
    Dim tmpDoc As NotesDocument

    Set uidoc = w.CurrentDocument
    Set doc = uidoc.Document
    Call uidoc.Save
    Set rtitemA = doc.GetFirstItem( "body" )
    Set rtitemB = doc.GetFirstItem( "body1" )
    Set richStyle = s.CreateRichTextStyle
    Set db = s.CurrentDatabase
    Set view = db.GetView("Почта")
    Set tmpDoc = view.getFirstDocument 
    While Not tmpDoc Is Nothing
    Set rtitem = New NotesRichTextItem(tmpdoc, "Body")

    If ( rtitemA.Type = RICHTEXT And rtitemB.Type = RICHTEXT ) Then
     Call rtitem.AppendRTitem(rtitemA)
     
     richStyle.Italic = True
     richStyle.bold = True
     Call rtitem.AppendStyle(richStyle)
     Call rtitem.AppendText(" ")
     Call rtitem.AppendText(tmpDoc.ColumnValues(1))
     richStyle.Italic = False
     richStyle.bold = False
     
     Call rtitem.AddNewLine(1)
     
     Call rtitem.AppendRTItem( rtitemB)
     tmpdoc.Subject=uidoc.FieldGetText("Subject")
         tmpdoc.SendTo=tmpDoc.ColumnValues(2)
     Call tmpdoc.Send(False)
    End If
    Set tmpDoc = view.getnextDocument (tmpDoc)
    Wend
    Messagebox "Письма успешно отправлены!" , MB_OK , "Отчет об отправке"
    Else
    Messagebox "Рассылка отменяется! Письма не отправлены!" , MB_OK , "Внимание!"
    End If
    End Sub
     
Загрузка...
Статус темы:
Закрыта.

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