"before New Mail Arrives" Or "after"

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

  1. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Добрый день.
    В базу данных приходят письма. Мне желательно их сразу обрабатывать.
    Найдя одну из тем, так указано что лучше всего для агента использовать "Before new mail arrives".

    Когда я отсылаю письма по одному, то агент обрабатывает все письма кроме последнего, что в принципе логично.
    Если я ставлю "After", то агент не запускается, возможно нужно ждать некоторое время...

    У кого есть какие мысли?
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    если никаких настроек на сервере не меняли то ПОСЛЕ будет аж через 15 минут :)
    а если сервер не почтовый то вообще ничего не будет
     
  3. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Сервер не почтовый.
    Если письма допустим будут приходить раз в 1-2 недели(периодичность не известна), то лучшим вариантом будет вообще запуск агента раз в день? А не по приходу писем. Я прав?
     
  4. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    вот 2 полезные темки по почтовым агентам:
    Как часто отрабатывает агент "after New Mail Has Arrived"
    прием писем в указанную папку вместо "входящие"

    Добавлено:
    так зачем ежедневный агент, если письмо раз в 1-2 недели? %)
     
  5. oshmianski

    oshmianski Гость

    эм, разве логично?
    как получаете документы в агенте?
    я использую DocumentContext.
     
  6. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    хм, вот тут видимо моя и ошибка....
    Я получаю вью, куда попадают письма..

    Ошибка?


    Добавлено:
    Спасибо, почитаю.
    Если Агент ежедневный, то письма могут приходить сегодня, завтра, а потом через месяц. А обработать надо как можно быстрее
     
  7. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Хм... Использую DocumentContext. Агент получает какой-то документ, по логам нахожу UNID, и по униду я получаю, что документ был удален. А письмо имеет совсем другой унид.
    + на 3 строке ошибка "DXL exporter operation failed"
    Код (Text):
    Set exporter = s.CreateDXLExporter(docMail)
    Call exporter.SetOutput(tmpRichText)
    Call exporter.process
    Но это возможно следствие что документ неправильный получен
     
  8. oshmianski

    oshmianski Гость

    хм, такой триггер отрабатывает до того, как документ сохраняется в бд (на сколько я понимаю).
    и поэтому получать его через db.GetDocumentByUNID (если я правильно понял) не верно.

    попробуйте ту же операцию с DXL провести на нормальных (уже сохраненных в бд) документах.
    будет ругаться?
     
  9. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Блин, какая-то проблема не понятная.
    вот код:
    Код (Text):
    Dim s   аs NotesSession
    Set s = New NotesSession
    Set mailDoc = s.DocumentContext
    getHTMLLinkToDoc = {Notes:///} & mailDoc.ParentDatabase.ReplicaID & {/0/} & mailDoc.UniversalID & {/?EditDocument}
    Всегда getHTMLLinkToDoc одинаков, всегда mailDoc имеет один и тот же UNID.= B5A0E9AE27B76A80C12576F200405B0C
    Откуда берется этот UNId? С помощью ScanEz оно его не находит.

    Далее ошибка в

    Set exporter = s.CreateDXLExporter(docMail)
    Call exporter.SetOutput(tmpRichText)
    Call exporter.process

    Добавлено:
    Хм. проверил, письмо получает верное, хоть и с каким-то не понятным UNID.
    Вопрос остается в ошибке в строке
    Call exporter.process
    DXL exporter operation failed:

    Может бы док надо сохранять или еще что-н?
     
  10. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Методом научного тыка, обнаружил, что если в письме нет аттачментов, то все работает хорошо.
    Как быть если есть аттачменты?

    Может кто даст линк на хелп, что ну никак нельзя... Плз, очень срочно
     
  11. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    ты напиши, что ты с аттачами делаешь - вроде не писал в теме - только экспорт?
    И зачем брать документ по униду, если он уже получен из контекста агента?
    Для "DXL exporter operation failed" детально лог exporter.Log что-то говорит?
     
  12. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Приходит письмо, В письме текст и аттачменты.
    Разбираю этот текст, создаю документ базы и заполняю поля в соответствии с тем, что находится в письме.
    В письме есть аттачменты. Их я должен запихнуть в РТФ поле с текстом так как оно находится в письме.
    Вот я с помощью ДХЛ этот делаю, вырезаю нужный мне кусок и вставляю его импортом в док


    Я не беру по УНИДУ, в случае ошибки я в лог выдаю этот Унид


    <?xml version='1.0'?>
    <DXLExporterLog>
    <error>Error occurred during processing of note ID 0x80000001</error>
    <error>Invalid or nonexistent document</error>
    <error>DXL exporter operation failed</error>
    </DXLExporterLog>

    Никогда не пользовался этим, какие выводы можно сделать?
     
  13. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    Я бы подумала, что надо использовать триггер "after" (post-delivery) либо сохранить документ - иначе унид невалиден, т.к. документ фактически еще не сохранен в БД.
     
    Мыш нравится это.
  14. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    Пытаюсь сохранить док

    Код (Text):
    If docMail.Save(True,True) Then
    Call agentLog.LogAction( {True: })
    Else
    Call agentLog.LogAction( {false: })
    End If
    Идет в False, получается что не может сохранить его
     
  15. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    wowa
    Для данной задачи не стоит использовать агент before..., она для него слишком "тяжёлая" (см. ссылки OKEN). Лучше попробовать after... или по расписанию.
     
  16. wowa

    wowa Well-Known Member

    Регистрация:
    1 фев 2007
    Сообщения:
    842
    Симпатии:
    0
    ВОТ что-то я тоже к этому выводу прихожу насчет по расписанию
     
  17. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Эхехе... Напоролся тут на днях.
    Пишу свое журналирование, переписка с определенными адресатами должна складываться в отдельную базу.

    Заметил, что исходящие письма дублируются, это косяк №1. Возникает, в частности, если у письма есть локальные (лотусовые) адресаты, и у них в АК разные значения "Format preference for incoming mail:". Дубликаты имеют одинаковый MessageID, но разные UNID.
    Ну ок, сделал в базе агента "Before New mail...", рассчитывал, что он будет отслеживать и удалять дубли (по несовпадению MessageID и UNID).
    Аха, как же - получил косяк №2. В агенте типа "Before..." эти письма имеют одинаковый UNID (!).
    Переделал агента на "After..." - все заработало (UNIDы пошли нормальные). В общем, будьте бдительны, как грицца... :)
     
  18. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Когда "Before..." - e-mail ещё не сохранён в базе, соответственно, никакого UNID у не должно быть.
     
  19. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.020
    Симпатии:
    8
    Дык. Чудо и состоит в том, что UNID есть - непустой, ненулевой и одинаковый у обоих писем. Это UNID исходного документа (с которого клонируется дубликат). Ну, по крайней мере, lotusscript так кажет :)
     
  20. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Во-во, не UNID, а полная хрень. Странно что в данном случае вообще что-то возвращается этой функцией, думаю тут какой-то индусский косяк, не смогли сделать что бы возвращался NULL или пустая строка, вот и получается чёрти-что. Настоящего UNID'а у пришедшего документа (e-mail) в этот момент нету.
     
Загрузка...

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