|
27.08.2009, 11:40 | #1 |
int 20h
|
Чтение почты из MS Dax 2009
Добрый день всем.
Есть задача чтения почты из MS Exchange в 2009 аксапте и разобрка ее. Ну скажем заполнение таблички из письма. Кто нибудь сталкивался с подобным. Какие системные классы или WinApi функции можно использовать? Буду рад любым наводкам. Спасибо.
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
27.08.2009, 13:39 | #2 |
Участник
|
В модуле CRM есть синхронизация с Outlook. В принципе, можно попробовать через нее. Посмотрите, как реализована отправка писем в классе smmOutlookEmail.
__________________
Денис Балуев. |
|
27.08.2009, 13:52 | #3 |
int 20h
|
Спасибо но нет. Там синхронизация с клиентом. А мне надо напрямую вытаскивать с сервера Exchange
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
|
За это сообщение автора поблагодарили: (-1). |
27.08.2009, 14:17 | #4 |
Administrator
|
Тогда это не к Аксапте - это скорее действительно к WinAPI. Идеология MS состоит в том, что почтовый клиент (MS Outlook) уже стоит и есть программный интерфейс управления (MAPI) действиями этого клиента.
А тут, фактически, Вы хотите написать сами почтового клиента (хоть и простейшего). В Аксапте ничего такого Вы не найдете. Вам придется добавить (если уж Вы захотите решить задачу) N нужных (каких - нужно копать) для этого WinAPI-функций (данные которых надо будет еще аккуратно преобразовать к X++) и код взаимодействия между ними.
__________________
Возможно сделать все. Вопрос времени |
|
27.08.2009, 15:07 | #5 |
int 20h
|
Нашел ссылку Получение почты в Ах.
Попробую реализовать также как в описано в джобе.
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
27.08.2009, 16:22 | #6 |
Administrator
|
О... а я как-то пропустил сей джобик....
__________________
Возможно сделать все. Вопрос времени |
|
28.08.2009, 01:29 | #7 |
Гость
|
чтение почты... я поначалу подумал, что ты хочешь, чтобы аксапта тебе вслух зачитывала письма
|
|
28.08.2009, 10:52 | #8 |
int 20h
|
но не то ))
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
14.09.2009, 22:47 | #9 |
int 20h
|
Всем доброго времени суток.
В принципе разобрался как читать Exchange из аксы используя CDO Message. Вот только никак не могу понять как в CDO Message получить адрес отправителя и получателя. Копал в направлении использования X++: str From() { COMVariant fromAdr; ; fromAdr = message.sender(); // или вот этот // fromAdr = message.Recipients(); return fromAdr.bStr(); }
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
14.09.2009, 22:55 | #10 |
Боец
|
Цитата:
Сообщение от zZ_TOP_Zz
Всем доброго времени суток.
В принципе разобрался как читать Exchange из аксы используя CDO Message. Вот только никак не могу понять как в CDO Message получить адрес отправителя и получателя. Копал в направлении использования X++: str From() { COMVariant fromAdr; ; fromAdr = message.sender(); // или вот этот // fromAdr = message.Recipients(); return fromAdr.bStr(); } как получить адрес отправителя (SysOutlookApplication)? |
|
15.09.2009, 10:41 | #11 |
int 20h
|
Спасибо за ответ, но это малость не то.
Я не использую Outlook для чтения почты я читаю напрямую с Exchange аксаптой и записываю определенные поля в табличку. Тему письма получил, тело письма тоже, вложения также не вопрос, но вот как вытащить адреса отправителя и получателя никак не могу понять... Любые методы что я использую выдают ошибку типа: --------------------------- Microsoft Dynamics AX Debugger --------------------------- Ошибка времени выполнения: COMVariant Объект не имеет метода "Address". и т.д.
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
15.09.2009, 16:33 | #12 |
Участник
|
Думаю что нашел то, что вам нужно.
Еще хочу сразу порекомендовать всем, кто хочет работать через COM или WinAPI из 4.0, 2009 с майкрософтовским софтом: НЕ НАДО Есть .NET - намного более интегрированное с АХ средство, лучше документированное и проще в обращении. Приведу кусок кода C#, который немного описывает нужную Вам структуру, а потом ссылку на источник, где достаточно подробно описано все. X++: Create an e-mail message and set the properties that describe the message.MessageType message = new MessageType(); message.Subject = "Daily Report"; message.Body = new BodyType(); message.Body.BodyType1 = BodyTypeType.Text; message.Body.Value = "(1) Handled customer issues, (2) Saved the world."; message.Sender = new SingleRecipientType(); message.Sender.Item = new EmailAddressType(); message.Sender.Item.EmailAddress = "user1@example.com"; message.ToRecipients = new EmailAddressType[1]; message.ToRecipients[0] = new EmailAddressType(); message.ToRecipients[0].EmailAddress = "user2@example.com"; message.Sensitivity = SensitivityChoicesType.Normal; Там по дереву уже копайте...
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! Последний раз редактировалось plumbum; 15.09.2009 в 16:38. |
|
|
За это сообщение автора поблагодарили: blokva (1), zZ_TOP_Zz (1). |
16.09.2009, 13:13 | #13 |
Участник
|
Привет!
Сам недавно пытался решить такую задачу но из C# для CRM правда мне нехватило сил довести ее до конца... появились другие дела как обычено и пришлось сделать очень некрасиво - через outlook. Если вы разберетесь как помжно прочитать почту напряму через Exchange то Вам 5-ка! Вообще для это можно использовать несколько вариантов сеединений, я начал копать в сторону WebServices это для exchange 2007, для exchange 2003 использовался WebDav, по сути тоже самое. Мне кажется самый правильный способ это реализация библиотеки на C# или С++, а потом ее дергать из Аксапты. Посмотри ссылки http://www.codemeit.com/webservices/...responses.html http://blogs.visoftinc.com/?tag=/c%23 http://www.isrcomputing.com/index.ph...tent&Itemid=86 |
|
|
За это сообщение автора поблагодарили: zZ_TOP_Zz (1). |
16.09.2009, 14:39 | #14 |
int 20h
|
Всем спасибо огромное за помощь разобралися. Вопрос снимается.
blokva Вы правы. Так мы и поступили Кому интересно как это реализовать вот пример, на вход передаем COM объект message на выходе получаем строку адреса отправителя. Маленько геморно получилось, но работает Процедуру combyDisp взял тут X++: str SenderEMail(Com _message) { #define.PR_SENDER_EMAIL_ADDRESS(0x0C1F001F) #Define.CdoPR_SENDER_EMAIL_ADDRESS(0x39FE001E) #Define.CdoPR_EMAIL_ADDRESS(0x3003001E) #Define.CdoPR_ADDRTYPE(0x3002001E) COMVariant to; COM recipients; COM fields; COM obj; COM comAddressType; COM field; ComVariant fieldId, fieldName; ComVariant toField; ComVariant addressType; str strAddressType; str s; COM combydisp(COMVariant _var) { ; if (_var.variantType() != COMVariantType::VT_DISPATCH) throw Error(strfmt("bad variant type (%1)",_var.variantType())); if (!_var.iDispatch()) return null; return COM::createFromVariant(_var); } ; recipients = combydisp(_message.Sender()); fields = combydisp(recipients.Fields()); comAddressType = combydisp(fields.Item(#CdoPR_ADDRTYPE)); addressType = comAddressType.Value(); strAddressType = addressType.bStr(); switch(strAddressType) { case "SMTP" : obj = combydisp(fields.Item(#CdoPR_EMAIL_ADDRESS)); toField = obj.Value(); break; default: obj = combydisp(fields.Item(#CdoPR_SENDER_EMAIL_ADDRESS)); toField = obj.Value(); break; } s = toField.bStr(); return s; }
__________________
It's just my Unhopelessnessabilityerism Trying to debug my mind |
|
25.09.2009, 12:50 | #15 |
Участник
|
|
|
Теги |
ax2009, exchange, mail, winapi, почта |
|
|