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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.09.2007, 09:17   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Как сделать Image.loadFile по протоколу HTTP
В данный момент печатаем сертификаты, хранящиеся в локальной сети примерно таким образом:
в дата методе объекта BitMap в дизайне отчета такой код (всякие проверки пропущены):
X++:
sertImage = new Image();
sertImage.loadFile(fileImage);
return sertImage.getData();
Встала задача централизовать хранение сертификатов. Брать их придется с портала, то есть путь к файлу сертификата бедет примерно следующим:
http://yyy.xxx.ru/Sertificate/files/12345.bmp
Понятно, что loadFile уже не применить. Есть ли какие-либо способы загрузить в BitMap картинку по протоколу HTTP?
Старый 27.09.2007, 09:31   #2  
ATimTim is offline
ATimTim
Участник
 
395 / 13 (1) ++
Регистрация: 10.06.2004
Адрес: Питер
А может проще хранить в базе данных?
Старый 27.09.2007, 09:38   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от ATimTim Посмотреть сообщение
А может проще хранить в базе данных?
Увы, не проще. Есть Акса в центральном офисе и крупных филиалах, а в небольших филиалах вообще УПП используется. Кроме того, клиенты, зайдя на сайт должны иметь возможность распечатать недостающие сертификаты, а хранить в разных местах уже не хочется (синхронизировать в нескольких местах сертификаты 15 фабрик, причем выписываемых на каждую партию жуткая проблема)
Старый 27.09.2007, 10:39   #4  
otkudao
Гость
 
n/a
закачайте файл (класс WinInet), а затем как обычно
Старый 27.09.2007, 10:54   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от otkudao Посмотреть сообщение
закачайте файл (класс WinInet), а затем как обычно
Спасибо, попробую. Правда у меня где-то в подкорке сидит какая-то память о том, что с помощью WinInet графику не скачать, но может это ложные воспоминания. В любом случае поэксперементирую.
Старый 27.09.2007, 11:30   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Переделывать надо, чтобы сохранять в файл, а не преобразовывать в строку.
PS. Добавьте такой метод в класс WinInet
X++:
#winapi
int internetSaveFile(int hdl, str _fileName)
{
    Binary _buffer = new Binary(2048);
    Binary _bytesRead = new Binary(4);
    int cnt = 0;
    boolean ret;
    DLLFunction     fileCreate;
    DLLFunction     writeFile;
    DLL             dll = new Dll(@"KERNEL32.DLL");
    int             hFile;
    ;
    if (_fileName)
    {
        fileCreate     = new DLLFunction(dll, @"CreateFileA");
        fileCreate.returns(ExtTypes::DWord);
        fileCreate.arg(ExtTypes::String,
                        ExtTypes::DWord,
                        ExtTypes::DWord,
                        ExtTypes::DWord,
                        ExtTypes::DWord,
                        ExtTypes::DWord,
                        ExtTypes::DWord);

        writeFile = new DllFunction(dll, @"WriteFile");
        writeFile.arg(ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord);
        writeFile.returns(ExtTypes::DWord);

        hFile = fileCreate.call(_fileName, #GENERIC_WRITE, 0, 0, #CREATE_ALWAYS, 0, 0);
        while (hFile != #INVALID_HANDLE_VALUE)
        {
            ret = _internetReadFile.call(hdl,_buffer,2000,_bytesRead);
            if (ret && _bytesRead.dWord(0))
            {
                cnt += _bytesRead.dWord(0);
                writeFile.call(hFile, _buffer, _bytesRead.dWord(0), _bytesRead, 0);
            }
            else
                break;
        }
        if (hFile != #INVALID_HANDLE_VALUE)
            winapi::closeHandle(hFile);
    }
    return cnt;
}
Ну и джоб для проверки
X++:
static void internetSaveFile(Args _args)
{
    WinInet     winInet;
    int         hdl;
    ;
    winInet = new WinInet();
    hdl = winInet.internetOpenUrl("http://www.axforum.info/forums/customavatars/avatar4154_1.gif");
    info (strfmt("%1 байт записано", winInet.internetSaveFile(hdl, "c:\\temp\\avatar4154_1.gif")));
}
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 27.09.2007 в 12:05.
За это сообщение автора поблагодарили: Raven Melancholic (2), ziva (2).
Теги
wininet, законченный пример, файл, загрузка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать фильтр по группе пользователей? Zabr DAX: Программирование 12 08.04.2009 11:40
axaptapedia: Image class Blog bot DAX Blogs 0 22.07.2008 15:05
Заумный отчет по ОС, как сделать? Бриллиантик DAX: Программирование 13 09.07.2008 16:36
AX UK: Microsoft Dynamics AX Snaps on the AX 4 SP1 VPC image Blog bot DAX Blogs 0 10.05.2007 21:40
Image - что не так? renat DAX: Программирование 1 02.04.2003 09:08

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

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

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