AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.08.2009, 11:40   #1  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
? Чтение почты из MS Dax 2009
Добрый день всем.

Есть задача чтения почты из MS Exchange в 2009 аксапте и разобрка ее. Ну скажем заполнение таблички из письма.

Кто нибудь сталкивался с подобным. Какие системные классы или WinApi функции можно использовать? Буду рад любым наводкам.

Спасибо.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 27.08.2009, 13:39   #2  
denny is offline
denny
Участник
 
93 / 29 (1) +++
Регистрация: 16.11.2003
Адрес: Novosibirsk
В модуле CRM есть синхронизация с Outlook. В принципе, можно попробовать через нее. Посмотрите, как реализована отправка писем в классе smmOutlookEmail.
__________________
Денис Балуев.
Старый 27.08.2009, 13:52   #3  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Спасибо но нет. Там синхронизация с клиентом. А мне надо напрямую вытаскивать с сервера Exchange
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
За это сообщение автора поблагодарили:  (-1).
Старый 27.08.2009, 14:17   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Тогда это не к Аксапте - это скорее действительно к WinAPI. Идеология MS состоит в том, что почтовый клиент (MS Outlook) уже стоит и есть программный интерфейс управления (MAPI) действиями этого клиента.
А тут, фактически, Вы хотите написать сами почтового клиента (хоть и простейшего). В Аксапте ничего такого Вы не найдете.

Вам придется добавить (если уж Вы захотите решить задачу) N нужных (каких - нужно копать) для этого WinAPI-функций (данные которых надо будет еще аккуратно преобразовать к X++) и код взаимодействия между ними.
__________________
Возможно сделать все. Вопрос времени
Старый 27.08.2009, 15:07   #5  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Нашел ссылку Получение почты в Ах.
Попробую реализовать также как в описано в джобе.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 27.08.2009, 16:22   #6  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
О... а я как-то пропустил сей джобик....
__________________
Возможно сделать все. Вопрос времени
Старый 28.08.2009, 01:29   #7  
AX2009
Гость
 
n/a
чтение почты... я поначалу подумал, что ты хочешь, чтобы аксапта тебе вслух зачитывала письма
Старый 28.08.2009, 10:52   #8  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
но не то ))
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 14.09.2009, 22:47   #9  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Всем доброго времени суток.

В принципе разобрался как читать 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  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Сообщение от 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  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Спасибо за ответ, но это малость не то.
Я не использую Outlook для чтения почты я читаю напрямую с Exchange аксаптой и записываю определенные поля в табличку. Тему письма получил, тело письма тоже, вложения также не вопрос, но вот как вытащить адреса отправителя и получателя никак не могу понять...
Любые методы что я использую выдают ошибку типа:

---------------------------
Microsoft Dynamics AX Debugger
---------------------------
Ошибка времени выполнения: COMVariant Объект не имеет метода "Address". и т.д.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 15.09.2009, 16:33   #12  
plumbum is offline
plumbum
Участник
Соотечественники
 
182 / 86 (3) ++++
Регистрация: 07.12.2007
Адрес: Vienna, AT
Думаю что нашел то, что вам нужно.
Еще хочу сразу порекомендовать всем, кто хочет работать через 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  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Привет!
Сам недавно пытался решить такую задачу но из 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  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Всем спасибо огромное за помощь разобралися. Вопрос снимается.

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  
if_maks is offline
if_maks
Участник
 
226 / 15 (1) ++
Регистрация: 26.08.2003
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
на вход передаем COM объект message
Простите, может быть я невнимательно прочитал пост, откуда берется объект COM message?

Спасибо!!
Теги
ax2009, exchange, mail, winapi, почта

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mfp: Today MS-Press is printing "Inside Dynamics AX 2009" Blog bot DAX Blogs 0 11.06.2009 02:07
DAX 2009 SP1 + MS SQL Server 2008 xshaman DAX: Администрирование 7 10.12.2008 12:26
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
msdynamicsax: Enterprise Portal development in DAX 2009 Blog bot DAX Blogs 0 18.04.2008 07:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:51.