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,308 / 3540 (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,308 / 3540 (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, 13:43   #12  
GM2005 is offline
GM2005
Участник
 
64 / 43 (2) +++
Регистрация: 09.11.2005
Судя по историям успешных внедрений некоторые используют Office SharePoint Server:
"By deploying and linking Exchange Server 2007 and Office SharePoint Server 2007 alongside Retail Chain Manager for Microsoft Dynamics AX, Expert Group can now quickly and reliably distribute consolidated business information to its entire franchise network" (http://www.microsoft.com/dynamics/en...yid=4000004840).
Как я понял, в Майкрософте для версии Dax 2009 делают в ставку на интеграцию Microsoft Dynamics AX и Microsoft Office Communication Server 2007:
"Benefits of combining Microsoft Dynamics AX and Microsoft Office Communication Server 2007
Fuels business productivity. Contact fellow employees, partners, and customers, quickly and easily, without leaving the context of the Microsoft Dynamics AX screen. If the person you're contacting is also using Microsoft unified communications, data about the conversation can be transmitted, creating a rich contextual user experience.
Fits with your systems. Customers are able to maximize their investments in Microsoft technologies, and to make use of that investment inside their business management solutions.
Familiar to your people. As with other Microsoft Office products, Office Communicator 2007 R2 is designed to be familiar and easy to use. The software-based unified communications approach puts the presence information right next to a person's name and displays their full name and availability. This uniform user experience lowers the learning curve and helps enhance productivity.
Software requirements
The following software is required to implement the Collaborative Contact Center solution:
Microsoft Dynamics AX 2009
Microsoft Office Communications Server 2007 R2
Microsoft Office Communicator 2007 R2
(http://www.microsoft.com/dynamics/en...ct-center.aspx)
Наверное, это более правильное решение:
1) В этой интеграции есть возможность учета, настройки, использования, контроля и т.д. почти всех каналов общения с контрагентами (голос, письма, чат, конференции). Этого функционала достаточно для обсуждения и решения совместных вопросов.
2) Затем при доступе контрагентов через свою роль и прав на корпоративный портал Dax 2009 предоставляется возможность реализовывать часть этих решений (например, через создание заказов на продажу, участие в опросах и анкетировании, получение отчетов и выписок).
Мне этот подход предоставляется более продуктивным, чем просто импорт писем из Exchange Server. Ведь потом надо будет эти письма "разбирать" по темам-заголовкам, как-то анализировать содержание и т.д (то есть надстраивать функционал Аутлука).
А вложенные документы (часто заявки на покупку, договора, подтверждение и т.п.) - горе! С этим хозяйством тоже надо будет что-то делать ("разбирать", сохранять, переносить инфу в саму Аксапту). То есть, вместо обработки вложенных документов кажется лучше использовать ЕР
Старый 15.09.2009, 14:15   #13  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Может оно так и надо по поводу Шарика и ЕР...но моя задача написать обработчик почты, который будет выполнятся в пакетном режиме и проверять определенный ящик на сервере Exchange (подключение и вытаскивание почты из оутлука не рассматривается), в который будут приходить определенно сформированным образом письма, их то и необходимо обработать и затащить в аксапту. Атач прикрепим при помощи Docu* к табличке регистраций почты. Саму табличку заполним разобрав письмо.
От
Кому
Тема
Тело
Вложение
Время получения

Далее на основе этой таблички будет происходить ряд действий в системе.

Вопрос как получить адреса ОТ и КОМУ
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 15.09.2009, 16:33   #14  
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).
Старый 15.09.2009, 17:47   #15  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
...

Вопрос как получить адреса ОТ и КОМУ
Нет аксы под рукой а может попробуйте:
X++:
fromAdr = message.From();
toAddr  = message.To()

// и т.д.
а .NET скорее всего лучше подойдет, см пост выше
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/

Последний раз редактировалось blokva; 15.09.2009 в 17:50.
Старый 16.09.2009, 10:19   #16  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Цитата:
Сообщение от blokva Посмотреть сообщение
Нет аксы под рукой а может попробуйте:
X++:
fromAdr = message.From();
toAddr  = message.To()

// и т.д.
а .NET скорее всего лучше подойдет, см пост выше

Хорошая попытка я пробовал она не работает

Выдает ошибку
Ошибка времени выполнения: COMVariant Объект не имеет метода "То". и т.д.
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind
Старый 16.09.2009, 10:35   #17  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от zZ_TOP_Zz Посмотреть сообщение
Хорошая попытка я пробовал она не работает

Выдает ошибку
Ошибка времени выполнения: COMVariant Объект не имеет метода "То". и т.д.
Странно но oleview показывает, что есть, может его просто COM сделать , я не программист и все эти заморочки обычно вытаскивал из oleview, может спецы подскажут!
Посмотрел тот мой джоб, таки message есть COM объект.
X++:
CDOMessages = f2.Messages();
    #    mmm = COM::createFromVariant(CDOMessages);
    #    intparm = mmm.Count();
    #    s1 = intparm.int();
    #    col = new COMEnum2Variant(mmm);
    #    info('Всего писем: ' + int2str(s1));
    #    mess = col.getFirst();
    #    for (i=1; i <= s1; i++)
    #    {
    #        mmm = COM::createFromVariant(mess);
    #        ccc = mmm.Subject();
    #        info(ccc.bStr());
    #        mess = col.getNext();
    #    }
т.е. мне кажется что надо к примеру как то так:
X++:
for (i=1; i <= s1; i++)
    #    {
    #        mmm = COM::createFromVariant(mess);
    #        ccc = mmm.To();
    #        info(ccc.bStr());
              ccc = mmm.From();
     #        info(ccc.bStr());
    #        mess = col.getNext();
    #    }
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/

Последний раз редактировалось blokva; 16.09.2009 в 10:48.
За это сообщение автора поблагодарили: zZ_TOP_Zz (1).
Старый 16.09.2009, 13:13   #18  
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   #19  
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   #20  
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, время: 04:26.