Lotus и Embeddedobject в Delphi

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

  1. unx

    unx Гость

    Я понимаю, что немного не в тот раздел написал, но, на мой взгляд здесь лучше в этом разбераются.

    Проблема следующая:

    Необходимо в Delphi проходить по входящим письмам и если они с определенной темой, то вытаскивать из них прикрепленные файлы и дальше обрабатывать их.

    Процесс "хождения" по письмам реализован примерно следующим образом:


    Код (Text):
    var
    db: IDatabase;
    Mail: IDocument;
    id:IViewEntryCollection;
    x, i: integer;
    View: NotesView;
    rtitem : Variant;
    begin
    db := Form1.NotesSession.GetDatabase(Form1.NotesSession.GetEnvironmentString('MailServer', true),
    Form1.NotesSession.GetEnvironmentString('MailFile', true), False) ;
    Views :=  db.Views;
    for y := 0 to VarArrayHighBound(Views, 1) -
    VarArrayLowBound(Views, 1) do
    begin
    View := NotesView(IUnknown(Views[y]));

    if View.Name='($Inbox)' then
    begin
    id:=view.AllEntries;
    mail:=id.Parent.GetFirstDocument;
    iv:=id.GetFirstEntry;
    for i:=1 to id.Count-1 do
    begin
    mail:=id.Parent.GetNextDocument(mail);
    try
    rtItem:=mail.GetFirstItem('body');
    ________________________________________
    далее обработка письма

    Файл можно вытащить таким образом:
    Код (Text):
    mail.GetAttachment('ИМЯ_ФАЙЛА').Name
    - но это если знать его имя.
    Мне же необходимо взять прикрепленный объект из письма, при условии, что я не знаю его имени.

    Далее, у mail (Mail: IDocument;) есть свойство mail.EmbeddedObjects , но оно возвращает тип OleVariant и как его обрабатывать я не знаю. Есть ли какой-нибудь пример (не обязательно на delphi), который бы наглядно показывал как обращаться к прикрепленным документам не зная их количества и названия.

    Пример кода, содержащий
    Код (Text):
    ...............
    If ( rtitem.Type = RICHTEXT ) Then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) _
    ...............
    я смотрел, но адаптировать к Delphi не смог.
     
  2. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-unx+3:08:2007, 14:49 -->
    <span class="vbquote">(unx @ 3:08:2007, 14:49 )</span><!--QuoteEBegin-->я смотрел, но адаптировать к Delphi не смог.
    [snapback]74377" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Проще простого rtitem.EmbeddedObjects - это Olevariant который на самом деле массив, но не просто а вариатный массив - вот с им и работайте

    VarArrayLowBound/VarArrayHighBound - нижняя / верхняя границы
     
  3. unx

    unx Гость

    Для: Morpheus

    Можно хоть какой-то пример. Я не врубаюсь, как ходить по этому массиву.
    Получается что-то типа:
    Код (Text):
    if mail.HasEmbedded then
    begin
    for z:=0 to VarArrayHighBound(mail.EmbeddedObjects, 1) do
    ......................
    Но это неправильно.
     
  4. Ronchik

    Ronchik Гость

    Для: unx
    Если не секрет зачем такие сложности???........делаете блок на почту? :D ....
    Код (Text):
    To get: name$ = notesEmbeddedObject.Name
    далее как и писали
    Код (Text):
    mail.GetAttachment('ИМЯ_ФАЙЛА').Name
    или вот из хелпа
    Код (Text):
    Forall o In doc.EmbeddedObjects
    Messagebox( o.Name )
    End Forall
     
  5. unx

    unx Гость

    <!--QuoteBegin-Ronchik+3:08:2007, 16:29 -->
    <span class="vbquote">(Ronchik @ 3:08:2007, 16:29 )</span><!--QuoteEBegin-->Если не секрет зачем такие сложности?
    [snapback]74393" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Нужно будет взять файл, зашифровать его и отправить уже с помощью The Bat. Вариант, с указанием имени файла(ов) уже рассматривался, но был отклонен (не мной). Дописать отстается 1-2 строки, но как сделать хождение по массиву EmbeddedObjects я не догоняю

    пример
    <!--QuoteBegin-Ronchik+3:08:2007, 16:29 -->
    <span class="vbquote">(Ronchik @ 3:08:2007, 16:29 )</span><!--QuoteEBegin-->Forall o In doc.EmbeddedObjects
    Messagebox( o.Name )
    End Forall
    [snapback]74393" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    не подходит
     
  6. Sandr

    Sandr Гость


    Что мешает отправлять с лотуса? Написать нужный агентик и отправлять с лотуса... Или что мешает из того же делфи работать через XML?
     
  7. unx

    unx Гость

    <!--QuoteBegin-Sandr+4:08:2007, 13:44 -->
    <span class="vbquote">(Sandr @ 4:08:2007, 13:44 )</span><!--QuoteEBegin-->Что мешает отправлять с лотуса? Написать нужный агентик и отправлять с лотуса... Или что мешает из того же делфи работать через XML?
    [snapback]74437" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Зачем еще XML, когда доступ к письмам и без него есть. Если бы можно было бы отправлять с Лотуса, так отправлял бы.
     
  8. Ronchik

    Ronchik Гость

    <!--QuoteBegin-unx+3:08:2007, 16:49 -->
    <span class="vbquote">(unx @ 3:08:2007, 16:49 )</span><!--QuoteEBegin-->не подходит
    [snapback]74397" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    и чем не подходит налицо хождение по массиву и вместо
    <!--QuoteBegin-unx+3:08:2007, 16:49 -->
    <span class="vbquote">(unx @ 3:08:2007, 16:49 )</span><!--QuoteEBegin-->Messagebox( o.Name )
    [snapback]74397" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    может быть и другой вариант я же только пример привел

    если конечно хочеться сделать конструкцию через FOR тогда смотрите пост Morpheus он все правильно изложил
     
  9. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: unx
    Проверяйте
    VarIsArray function - ваша переменная должна быть массивом
     
Загрузка...

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