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

Gor

Well-Known Member
#1
Здравствуйте!

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

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

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

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

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

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

Код:
		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")
Код отрабатывается вставляет это сообщение именно в конец письма после подписи.
НО!!! ЧТО ПЛОХОО!!!
Во ПЕРВЫХ - ИЗМЕНИТЬ ШРИФТ ЭТОГО СООБЩЕНИЯ НЕ ПРЕДСТАВЛЯЕТСЯ ВОЗМОЖНЫМ!!!!
ВО ВТОРЫХ - ЭТО СООБЩЕНИЕ ВСТАВЛЯЕТСЯ ТОЛЬКО ТОГДА, КОГДА У ПОЛЬЗОВАТЕЛЯ В НАСТРОЙКАХ СТОИТ ГАЛКА - АВТОМАТИЧЕСКИ ПОДСТАВЛЯТЬ ЛИЧНУЮ ПОДПИСЬ В КАЖДОЕ ПИСЬМО


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

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

Constantin A Chervonenko

Well-Known Member
Lotus team
#2
Есть такой класс: NotesRichTextStyle - это к вопросу о шрифтах, которые "не представляется возможным"

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

Gor

Well-Known Member
#3
А почему не вставляется.. Так Вы-ж сами привязались к процедуре InsertSignature. Не сложно догадаться, что она вызывается только если сигнатура есть
ну вот я и хочу чтобы подпись надпись моя вставлялась даже если подписи нет а сделать как не знаю потому что InsertSignature не подходит. Пробовал на формы по событиям подпись добавлять на создание нового дока для риплая, нового, форварда, подпись полцчилось вставить только перед личной подписью а необходимо после независимо от того есть ли она или нет...

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

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

oshmianski

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

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
Москва
#6
oshmianski
в QuerySave так
Код:
Dim rt As NotesRichTextItem
Set rt = source.Document.GetFirstItem("Body")
Call rt.AddNewline(2)
Call rt.AppendText("hello")
работать не будет

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

Gor

Well-Known Member
#7
to: osmiansky
1. форма Memo, обытие QuerySave
2. библиотека CoreEmailClasses_ru-RU (для русского шаблона), метод класса UIMemoDocument QuerySave
А если при отправке сообщения пользователь пошлёт сообщение с Send only??? т.е. с отменой сохранения в Sent?

to: Kee_Keekkenen

работать не будет

и вообще не будет работать почти любой код добавленный в события..
пользоваться нужно только библиотеками..
ну тут вроде и имеется ввиду библиотека CoreEmailClasses и в библиотеки класс UIMemoDocument...->> Function QuerySave

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

Gor

Well-Known Member
#8
неужели нет больше вариантов как сделать такую подпись?? :(

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

Это QuerySave в CoreEmailClasses
Код:
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 отсутствует((( Почему?
 

morpheus

скриптописец
07.08.2006
3 915
1
34
Украина, Киев
#9
В итемах Body отсутствует((( Почему?
пАтамушта документ исчо не сохранён... от такая фигня

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

Yakov

Гость
#10
Gor
Посмотрите, откуда вызывается процедура InsertSignature. А вызывается она так:
Код:
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-файл, содержащий нужную подпись, и импортнуть его вызовом
Код:
NotesUIDocument.Import("HTML File", "file://server/folder/signature.html")
 

Gor

Well-Known Member
#11
Наверное, имеет смысл "вклиниться" после вставки подписи за End If. На PostOpen нового документа (а наш случай именно такой) придется обходиться без класса NotesRichTextItem, придется пользоваться только классом NotesUIDocument. Чтобы уменьшить шрифт, можно, к примеру, выложить в известное и доступное место (на общий сетевой диск) html-файл, содержащий нужную подпись, и импортнуть его вызовом
тестирую=))
_________________-


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

Yakov

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

Gor

Well-Known Member
#13
Код:
<!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


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

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

Yakov

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

Gor

Well-Known Member
#17
таааааак=)) конец рабочего дня)))


Код:
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
Если вызвать мою процедуру т.е.
Код:
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 находится всегда выше личной подписи, а надо наоборот...

вот этот кусок
Код:
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 хотя почему непонятно...
 

Gor

Well-Known Member
#18
Удалось окончательно победить проблему.

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

Код:
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)

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