Форум продуктов IBM Lotus
Общие вопросы => Разработка приложений => Тема начата: dsnsa от 10 Ноябрь 2011, 15:32:50
-
Разработан плагин для IE (как часть информационной системы), написанный на Delphi. Он принимает некий список почтовых адресов и тело письма, которе рассылается по этому списку адресов. В целом можно считать что плагин работает. Но вот когда длина списока адресов становится больше 250 симоволов LN начинает чудить: обрезает его как ему захочется, причем не обязательно лишь с позиции, превышающей гипотетический лимит 250, а, скажем, выкинет 2, 3 и 4 адрес из списка с 8 адресами...
Плагин полноценно отлаживается из-под среды разработки и оттуда видно что строка до установки значения поля MailDoc.SendTo в нормальном состоянии, однако, в Лотус прилетает лишь обрубок. Пытался поиграться с типами AnsiString, WideString, String, Variant - результата не добился...
Помогите кто понимает проблему глубже!
procedure TForm2.doEmail;
var
UserName, MailDBName, MailServer: string;
Session, WorksSpace, uiDoc, MailDB, MailDoc: OLEVariant;
begin
Session := CreateOleObject('Notes.NotesSession');
MailServer := Session.GetEnvironmentString('MailServer', True);
MailDBName := Session.GetEnvironmentString('MailFile', True);
UserName := Session.UserName;
MailDB := Session.GetDatabase(MailServer, MailDBName);
if (not MailDB.isOpen) then
begin
MailDB.OpenMail;
end;
MailDoc := MailDB.CreateDocument;
MailDoc.Form := 'Memo';
MailDoc.SendTo := edTo.Text;
MailDoc.EnterCopyTo := edCc.Text;
MailDoc.Subject := edSubject.Text;
MailDoc.Body := reMessageBody.Text;
WorksSpace := CreateOleObject('Notes.NotesUIWorkspace');
WorksSpace.EditDocument(True, MailDoc);
MailDoc.SaveMessageOnSend := True;
uiDoc := WorksSpace.CurrentDocument;
uiDoc.FieldClear('Body');
uiDoc.GotoField('Body');
doLoadText();
uiDoc.Paste;
end;
-
А если попробовать без UI- классов?
procedure TForm2.doEmail;
var
UserName, MailDBName, MailServer: string;
Session, WorksSpace, uiDoc, MailDB, MailDoc: OLEVariant;
begin
Session := CreateOleObject('Notes.NotesSession');
MailServer := Session.GetEnvironmentString('MailServer', True);
MailDBName := Session.GetEnvironmentString('MailFile', True);
UserName := Session.UserName;
MailDB := Session.GetDatabase(MailServer, MailDBName);
if (not MailDB.isOpen) then
begin
MailDB.OpenMail;
end;
MailDoc := MailDB.CreateDocument;
MailDoc.Form := 'Memo';
MailDoc.SendTo := edTo.Text;
MailDoc.EnterCopyTo := edCc.Text;
MailDoc.Subject := edSubject.Text;
MailDoc.Body := reMessageBody.Text;
MailDoc.SaveMessageOnSend := True;
end;
-
Да, я пробовал, и, к сожалению, они проблему не составляют... :(
-
кто-нибудь может подвердить, что проблема с лимитом длины строки существует?
или я один такой везучий... :))))
-
Сделайте цикл по адресатам и отправляйте письмо каждому. В любом случае при увеличении адресатов какой-нибудь лимит будет достигнут, а ты вы избежите этой проблемы.
-
идея отличная, правда! почему-то я не подумал так делать)) но, к сожалению, не плагин отправляет письмо, а LN. пользователь должен видеть что сгенерила система, проверить и подтвердить корректность составленного письма, нажав кнопку "Отправить" получателям, список которых сформирован плагином... (оооо, я твой друг.. но я раб лампы....)))))
-
Call MailDoc.ReplaceItemValue("SendTo", edTo.Text)
так не получается?