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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.01.2003, 11:17   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Получить курс валют из интернета
Кто нибудь пробовал решить такую задачу ?

Вот накануне набросал на VC:

PHP код:
// 1 - Open
HINTERNET open InternetOpen("RSDN HTTP Reader"INTERNET_OPEN_TYPE_PRECONFIG,  NULLNULL0);

// 2 - Connect
HINTERNET connect InternetConnect(open"www.cbr.ru"INTERNET_DEFAULT_HTTP_PORTNULLNULL,  INTERNET_SERVICE_HTTP,0,1u);

// 3 - OpenRequest
LPCTSTR AcceptTypes[] = { TEXT("*/*"), NULL};
HINTERNET openRequest HttpOpenRequest(connect"GET"
   
"/currency_base/D_print.asp?date_req=05.01.2003"NULL""AcceptTypes,
   (
INTERNET_FLAG_SECURE|INTERNET_FLAG_IGNORE_CERT_CN_INVALID0
    | 
INTERNET_FLAG_KEEP_CONNECTION1);

// 4 - SendRequest
LPCTSTR headers TEXT("Content-Type: application/x-www-form-urlencoded\r\n"
    "Accept-Language:ru\r\n" "Accept-Encoding:gzip, deflate"
);
BOOL sendRequest HttpSendRequest(openRequestheaders, -1, (LPVOID""0);

// 5 - ReadFile
char     DataBuffer[7000];
DWORD    size 6500;
DWORD       bytesRead ;
BOOL readFile InternetReadFile(openRequestDataBuffersize, &bytesRead);
                    
cout << DataBuffer << endl;
cout << bytesRead << endl
Все работает.

Решил попробовать реализовать это дело в Аксапте:

Есть класс WinInet; в нем есть методы InternetOpen и InternetReadFileб но нет InternetConnect, HttpOpenRequest и многих других мне необходимых.
Ладно думаю, не беда - создам наследника и в нем все это реализую. Не тут то было. WinInet объявлен как final. А почему ? А зачем ? Не понимаю.
Ладно. Создаю свой класс:

PHP код:
void new()
{
    try
    {
        
_winInet = new DLL("WinInet");
    } catch(
Exception::Internal)
    {
        
infolog.clear();
        return;
    }

    
_internetConnect = new DLLFunction(_winInet,"InternetConnect");
    
_internetConnect.returns(ExtTypes::DWORD);
    
_internetConnect.arg(ExtTypes::DWORD);         // HINTERNET
    
_internetConnect.arg(ExtTypes::STRING);        // ServerName
    
_internetConnect.arg(ExtTypes::DWORD);         // ServerPort = 80
    
_internetConnect.arg(ExtTypes::STRING);        // UserName
    
_internetConnect.arg(ExtTypes::STRING);        // Password
    
_internetConnect.arg(ExtTypes::DWORD);         // Service
    
_internetConnect.arg(ExtTypes::DWORD);         // Flags
    
_internetConnect.arg(ExtTypes::DWORD);         // Context

При попытке создать этот класс Axapta ругается:

DLL function not found InternetConnect.

Как не найдена. MSDN говорит, что она в той же dll-ке, что и InternetOpen. Более того, мой эксперимент с VC подтверждает это.

Получается, что одни функции в dll Аксапта видит другие нет ? Почему ?

Или такие задачи в Аксапте решаются гораздо проще ? Может есть классы, которые на более высоком уровне позволяют работать с интернет ?

P.S.

Несмотря на то, что WinInet объявлен как final, я создал его наследника, добавил в него свой метод и переопределил один из его методов. Это что, глюк Аксапты ? (Axapta 2.5 SP2)
Старый 01.06.2007, 13:17   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
1. попробуйте после load добавить info(xml.xml()) - что вы увидите?
2. Попробуйте load заменить на
X++:
if (!xml.load(...))
   throw error(xml.parseError().toString());
Старый 01.06.2007, 15:43   #3  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Попробуйте прогнать вот такой тестовый джобик:
X++:
static void Job52(Args _args)
{
COM xml = new COM("MSXML2.DOMDocument");
XMLNodeList vlist;
XMLNode valute;
str code, nom, nam, val;
int i;
;
    xml.async(false);  // Вернуть управление только после полной загрузки файла
    xml.validateOnParse(false);  // Не проверять загружаемый файл на соответствие своей схеме

    if (!xml.Load("http://www.cbr.ru/scripts/XML_daily.asp?date_req=01/06/2007"))
       info('Не удалось загрузить курсы валют с ЦБР (см. http://www.cbr.ru/scripts/root.asp)');

    // Выбрать все корневые элементы Valute
    vlist = xml.selectNodes("*/Valute");

    for(i = 1; i<=vlist.length(); i++)
    {
        valute = vlist.item(i-1);
        // Получить информацию о номинале, названии и курсе валюты
        code = valute.selectSingleNode("CharCode").text();
        nom = valute.selectSingleNode("Nominal").text();
        nam = valute.selectSingleNode("Name").text();
        val = valute.selectSingleNode("Value").text();
        info(code+" "+nom + " " + nam + " = " + val + " руб.");
    }
}
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 24.12.2008, 10:20   #4  
Umi is offline
Umi
Участник
Ex AND Project
1C
 
50 / 39 (2) +++
Регистрация: 14.12.2006
Адрес: St.Peterburg
Загрузила проект - ошибка "Модификаторы Client и Server можно использовать только в статических методах." в методах Run и canGoBatchJournal
Старый 25.12.2008, 16:36   #5  
Umi is offline
Umi
Участник
Ex AND Project
1C
 
50 / 39 (2) +++
Регистрация: 14.12.2006
Адрес: St.Peterburg
Разобралась=)
надо в методах Run и canGoBatchJournal дописать static и все замечательно работает (в 3.0)
Старый 26.12.2008, 08:57   #6  
AraraT® is offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Регистрация: 13.01.2006
Адрес: Республика Татарстан, г. Казань
А как в Аксе использовать WEB-сервисы?
Кто-нить писал?
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS
Старый 26.12.2008, 09:11   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от AraraT® Посмотреть сообщение
А как в Аксе использовать WEB-сервисы?
Кто-нить писал?
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS
http://www.axaptapedia.com/Webservice
За это сообщение автора поблагодарили: AraraT® (1).
Теги
загрузка курсов валют, курс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фиксированный курс в журнале ГК. Вторичная валюта. concigliory DAX: Функционал 3 24.02.2014 15:15
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Кэширование курсов валют Tony Green DAX: Программирование 8 09.02.2007 10:02
Закачка курсов валют с Интернета. Hans DAX: Программирование 1 22.09.2006 12:08
Валюты и курсы валют Rafael DAX: Функционал 1 13.02.2002 19:19
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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