LotusNotes - Delphi - OLE API

Автор Тема: LotusNotes - Delphi - OLE API  (Прочитано 11022 раз)

dsnsa

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
LotusNotes - Delphi - OLE API
« : 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;
« Последнее редактирование: 10 Ноябрь 2011, 21:09:50 от dsnsa »

cybergeene

  • Специалист
  • ***
  • Сообщений: 59
    • Просмотр профиля
    • E-mail
Re: LotusNotes - Delphi - OLE API
« Ответ #1 : 14 Ноябрь 2011, 11:49:04 »
А если попробовать без 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;
« Последнее редактирование: 14 Ноябрь 2011, 11:55:24 от cybergeene »

dsnsa

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: LotusNotes - Delphi - OLE API
« Ответ #2 : 15 Ноябрь 2011, 11:07:30 »
Да, я пробовал, и, к сожалению, они проблему не составляют...  :(

dsnsa

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: LotusNotes - Delphi - OLE API
« Ответ #3 : 20 Ноябрь 2011, 10:52:39 »
кто-нибудь может подвердить, что проблема с лимитом длины строки существует?
или я один такой везучий... :))))
« Последнее редактирование: 20 Ноябрь 2011, 16:39:47 от dsnsa »

ViV

  • Global Moderator
  • Профессионал
  • *****
  • Сообщений: 1428
  • Владимир Егоров
    • Просмотр профиля
    • lotusnotes.ru
    • E-mail
Re: LotusNotes - Delphi - OLE API
« Ответ #4 : 21 Ноябрь 2011, 00:24:39 »
Сделайте цикл по адресатам и отправляйте письмо каждому. В любом случае при увеличении адресатов какой-нибудь лимит будет достигнут, а ты вы избежите этой проблемы.

dsnsa

  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: LotusNotes - Delphi - OLE API
« Ответ #5 : 21 Ноябрь 2011, 11:34:52 »
идея отличная, правда! почему-то я не подумал так делать)) но, к сожалению, не плагин отправляет письмо, а LN. пользователь должен видеть что сгенерила система, проверить и подтвердить корректность составленного письма, нажав кнопку "Отправить" получателям, список которых сформирован плагином... (оооо, я твой друг.. но я раб лампы....)))))

cybergeene

  • Специалист
  • ***
  • Сообщений: 59
    • Просмотр профиля
    • E-mail
Re: LotusNotes - Delphi - OLE API
« Ответ #6 : 23 Ноябрь 2011, 17:23:32 »
Call MailDoc.ReplaceItemValue("SendTo", edTo.Text)
так не получается?