ДОбавление в подпись сообщения

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

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Здравствуйте!

    Интересует ещё один небольшой вопрос)

    Мне необходимо немного изменить почтовый шаблон 6-ой mail6.ntf

    Появилось требование аудита такое:

    Необходимо чтобы в самом конце после сообщения (будь это форвард, новое письмо, риплай) добавить сообщение о конфиденциальности стандартного вида что то типа в конце каждого письма должно быть

    .....................................
    бла бла бла бла бла бла

    я попытался сделать это так
    В почтовом шаблоне есть библиотека CoreEmailClasses
    В Declaration есть процедура InsertSignature
    Я туда вставил такой код

    Код (Text):
            Call Me.m_noteUIMemo.GotoField("Body") 

    Call Me.m_noteUIMemo.GotoField("Body")
    Call Me.m_noteUIMemo.inserttext(Chr(10) )
    Call Me.m_noteUIMemo.inserttext(".........................................................................."& Chr(10) )
    Call Me.m_noteUIMemo.inserttext("Confidentiality clause:"& Chr(10) )
    Call Me.m_noteUIMemo.inserttext("bla bla bla .....")
    Call Me.m_noteUIMemo.inserttext(Chr(10) )          
    Call Me.m_noteUIMemo.inserttext(Chr(10) )          
    Call Me.m_noteUIMemo.inserttext("Конфиденциальность:"& Chr(10))
    Call Me.m_noteUIMemo.inserttext("бла бла бла..... "& Chr(10))
    Call Me.m_noteUIMemo.GotoField("Body")
    Код отрабатывается вставляет это сообщение именно в конец письма после подписи.
    НО!!! ЧТО ПЛОХОО!!!
    Во ПЕРВЫХ - ИЗМЕНИТЬ ШРИФТ ЭТОГО СООБЩЕНИЯ НЕ ПРЕДСТАВЛЯЕТСЯ ВОЗМОЖНЫМ!!!!
    ВО ВТОРЫХ - ЭТО СООБЩЕНИЕ ВСТАВЛЯЕТСЯ ТОЛЬКО ТОГДА, КОГДА У ПОЛЬЗОВАТЕЛЯ В НАСТРОЙКАХ СТОИТ ГАЛКА - АВТОМАТИЧЕСКИ ПОДСТАВЛЯТЬ ЛИЧНУЮ ПОДПИСЬ В КАЖДОЕ ПИСЬМО


    А мне надо чтобы сообщение это присутствовало во всех письмах даже если подписи личной нет... и желательно у подписи был какой нибудь небольшой шрифт...

    Может кто нибудь реализовывал когда нибудь такое???
    Или подскажете как сделать попроще?? голову сломал уже(
     
  2. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Есть такой класс: NotesRichTextStyle - это к вопросу о шрифтах, которые "не представляется возможным"

    А почему не вставляется.. Так Вы-ж сами привязались к процедуре InsertSignature. Не сложно догадаться, что она вызывается только если сигнатура есть
     
  3. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    ну вот я и хочу чтобы подпись надпись моя вставлялась даже если подписи нет а сделать как не знаю потому что InsertSignature не подходит. Пробовал на формы по событиям подпись добавлять на создание нового дока для риплая, нового, форварда, подпись полцчилось вставить только перед личной подписью а необходимо после независимо от того есть ли она или нет...

    а насчёт изменения стиля NotesRichTextStyle.... как то неподумал, спасибо.

    Но вопрос по добавлению подписи всё равно остаётся...
     
  4. oshmianski

    oshmianski Гость

    Gor
    1. форма Memo, обытие QuerySave
    2. библиотека CoreEmailClasses_ru-RU (для русского шаблона), метод класса UIMemoDocument QuerySave
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    oshmianski
    1. а если отправка без сохранения?
     
  6. Kee_Keekkenen

    Kee_Keekkenen Well-Known Member

    Регистрация:
    5 сен 2006
    Сообщения:
    616
    Симпатии:
    4
    oshmianski
    в QuerySave так
    Код (Text):
    Dim rt As NotesRichTextItem
    Set rt = source.Document.GetFirstItem("Body")
    Call rt.AddNewline(2)
    Call rt.AppendText("hello")
    работать не будет

    и вообще не будет работать почти любой код добавленный в события..
    пользоваться нужно только библиотеками..
     
  7. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    to: osmiansky
    А если при отправке сообщения пользователь пошлёт сообщение с Send only??? т.е. с отменой сохранения в Sent?

    to: Kee_Keekkenen

    ну тут вроде и имеется ввиду библиотека CoreEmailClasses и в библиотеки класс UIMemoDocument...->> Function QuerySave

    Если туда вставить работает но без сохранения подпись не добавляет((((
     
  8. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    неужели нет больше вариантов как сделать такую подпись?? :(

    Начал делать изменение шрифта и опять небольшой затык

    Это QuerySave в CoreEmailClasses
    Код (Text):
           


    Dim richStyle As NotesRichTextStyle
    Set richStyle = m_session.CreateRichTextStyle
    Dim rt As NotesRichTextItem
    Set rt = Me.m_noteMemo.GetFirstItem("Body")

    richStyle.FontSize = 6
    'Call rt.AppendStyle(richStyle)

    Call rt.AppendStyle(richStyle)

    Call rt.AppendText(".........................................................................."& Chr(10) )
    Call rt.AppendText("Confidentiality clause:"& Chr(10) )
    Call rt.AppendText("bla bla bla .....")
    Call rt.AppendText(Chr(10) )         
    Call rt.AppendText(Chr(10) )  
    Call rt.AppendText("Конфиденциальность:"& Chr(10))
    Call rt.AppendText("бла бла бла..... "& Chr(10))
    когда Set rt = Me.m_noteMemo.GetFirstItem("Body") rt не определяется

    В итемах Body отсутствует((( Почему?
     
  9. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    пАтамушта документ исчо не сохранён... от такая фигня

    можно развечто переправлять всю почту на свою базу и там во все доки лепить подпись ( заодно и проверки какие добавить ) а тока патом кидать в mail.box
     
  10. Yakov

    Yakov Гость

    Gor
    Посмотрите, откуда вызывается процедура InsertSignature. А вызывается она так:
    Код (Text):
    Function PostOpen(uidoc As notesuidocument)
    ...
    If Not Me.m_noteMemo.IsNewNote Then
    ...
    Else
    If IsFlagSet(MEMO_AUTOSIGNATURE) Then
    Call InsertSignature(True)
    End If
    ' вызвать здесь свою процедуру
    ...

    End If
    ...
    End Function
    Наверное, имеет смысл "вклиниться" после вставки подписи за End If. На PostOpen нового документа (а наш случай именно такой) придется обходиться без класса NotesRichTextItem, придется пользоваться только классом NotesUIDocument. Чтобы уменьшить шрифт, можно, к примеру, выложить в известное и доступное место (на общий сетевой диск) html-файл, содержащий нужную подпись, и импортнуть его вызовом
    Код (Text):
    NotesUIDocument.Import("HTML File", "file://server/folder/signature.html")
     
  11. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    тестирую=))
    _________________-


    Сделал html подлокжу сделал импорт...
    Главный минус - КОгда открываешь новое письмо для написания и переходишь в поле Body в этом поле шрифт по умолчанию устанавливается такой же каким шрифтом и подпись... а это ниудобно.... всё время приходится переключать шрифт на нормальный при написании письма...
     
  12. Yakov

    Yakov Гость

    Gor
    Покажите html-код подписи.
    Если в подписи оставить строчку с нормальным шрифтом?
     
  13. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Код (Text):
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Untitled Document</title>
    <style type="text/css">
    <!--
    .style1 {
    color: 10;
    font-size: 10px;
    font-weight: bold;
    font-family: Geneva, Arial, Helvetica, sans-serif;
    font-style: italic;
    }
    .style2 {font-family: Verdana, Arial, Helvetica, sans-serif}
    -->
    </style>
    </head>

    <body>
    <p class="style1">Confidentiality note: this message is intended only for the person or entity to which it is addressed. It may contain confidential and/or privileged material. Any review, transmission, dissemination or other use, or taking of any action in reliance upon this message by persons or entities other than the intended recipient is prohibited and may be unlawful. If you received this message in error, please contact the sender and delete it from your computer. </p>
    <p class="style2"><span class="style1">Конфиденциальность: данное сообщение предназначено только для физического или юридического лица, которому оно адресовано. Сообщение может содержать секретные и/или конфиденциальные данные. Любой просмотр, передача, распространение или другое использование, а также любые другие действия, предпринятые физическими или юридическими лицами, кроме получателя, на основании данного сообщения запрещены и могут быть незаконны. Если Вы получили это сообщение по ошибке, пожалуйста, свяжитесь с отправителем и удалите это сообщение из вашего компьютера. </span><br>
    </p>
    </body>
    </html>
    В поле Body шрифт меняться стал относительно подписи.... т.е. какой шрифт в подписи такой же и в Body


    Ладно это решить можно... вставить пару пустых строк.... я обнаружил вот ещё чтооо.....

    Личная подпись человека добавляется всегда после сообщения о конфиденциальности(((((( а это нехорошо... она должна быть перед ним... видимо это уже не исправить???
     
  14. Yakov

    Yakov Гость

    Вызов вашего кода происходит до вставки подписи пользователя или после?
     
  15. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Да. До вставки личной поднписи...
     
  16. Yakov

    Yakov Гость

    А если сделать после?
     
  17. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    таааааак=)) конец рабочего дня)))


    Код (Text):
    Function PostOpen(uidoc As notesuidocument)
    ...
    If Not Me.m_noteMemo.IsNewNote Then
    ...
    Else
    If IsFlagSet(MEMO_AUTOSIGNATURE) Then
    Call InsertSignature(True)
    End If
    ' вызвать здесь свою процедуру
    ...

    End If
    ...
    End Function
    Если вызвать мою процедуру т.е.
    Код (Text):
    Call Me.m_noteUIMemo.GotoField("Body")
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.Import("HTML File", "\\sharesrv\Intra-Office\_Public\IT\nat.html")
    В этом месте где вы показали выше то личная подпись отправителя всегда находится внизу, т.е. моя nat.html находится всегда выше личной подписи, а надо наоборот...

    вот этот кусок
    Код (Text):
    Else
    If IsFlagSet(MEMO_AUTOSIGNATURE) Then
    Call InsertSignature(True)

    End If

    'своя процедура

    If Me.m_noteUIMemo.editmode = True Then
    Call Me.m_noteUIMemo.GotoField("Body")
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.Import("HTML File", "\\sharesrv\Intra-Office\_Public\IT\nat.html")


    End If
    при таком раскладе личная подпись вставляется после nat.html хотя почему непонятно...
     
  18. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Удалось окончательно победить проблему.

    Чтобы добавить некое сообщение (сообщение о конфиденциальности или ещё что то) в самом конце письма после всего текста и личной подписи потребовалось:
    создать это сообщение в формате html и выложить на общедоступный ресурс всем пользователям Notes
    В почтовом шаблоне 6.0 в библиотеке CoreEmailClasses

    Код (Text):
    Function PostOpen(uidoc As notesuidocument)
    ...................
    If IsFlagSet(MEMO_AUTOSIGNATURE) Then
    Call InsertSignature(True)
    Else
    'своя процедура

    Call Me.m_noteUIMemo.GotoField("Body")
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.Import("HTML File", "\\sharesrv\Intra-Office\_Public\IT\signature.html")  

    End If
    ................
    End Function
    Процедура InsertSignature(FromMailPreference As Integer)

    Код (Text):
       
    Sub InsertSignature(FromMailPreference As Integer)
    Dim strFileExt, strFilterString As String
    Dim strFilterList List As String

    Select Case Me.m_noteMemo.GetItemValue("Form")(0)

    Case "Bookmark", "Phone Message"
    Exit Sub           
    End Select

    'своя процедура

    Call Me.m_noteUIMemo.GotoField("Body")
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.inserttext(Chr(10) )  
    Call Me.m_noteUIMemo.Import("HTML File", "\\sharesrv\Intra-Office\_Public\IT\signature.html")  

    ..............
    End sub
    В этом случае всё заработало нормально.
    Спасибо всем за ответыы!!
     
  19. Гость

    От это интересная тема, хм....
    А есть возможность заблокировать изменение подписи в самом сообщении? Когда создаешь новое сообщение, подпись вставляется автоматически, но его можно попросту изменить руками, добавив туда что-нибудь или удалить. Есть ли какая-нибудь возможность запретить это??? Я незнаю, как-нибудь вставлять эту подпись в какое-нибудь поле, а у поля поставить запрет на редактирование. Чтобы подпись вставилась и ее нельзя было менять в теле письма...
     
Загрузка...

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