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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2009, 18:04   #1  
rDenis is offline
rDenis
Участник
 
6 / 11 (1) +
Регистрация: 21.03.2009
Сохранение файла на веб сервере
Добрый день,

Есть следующая задача:

Автоматически сохранять отчет в определенное время на веб сервере (Apache + php) в виде текстового файла. Из Axapta 3.0. Веб сервер никоим образом с аксаптой не связан. Сохранять на локальный диск получается, к веб серверу не знаю как подступиться.
Kак установить соединение с веб сервером, как сохранить на нем файл. Kакие классы аксапты использовать.

Буду благодарен любой информации!
Старый 22.03.2009, 03:48   #2  
lego_99 is offline
lego_99
Участник
 
10 / 10 (1) +
Регистрация: 21.11.2004
Адрес: Moscow
Что значит "сохранить файл на веб-сервер" ?

Если есть Apache + PHP + БД, то файл можно сохранить в БД.
Старый 22.03.2009, 11:20   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Есть класс WinInet. Он умеет читать файц по URL, попробуйте его расширить как описано:
http://www.axaptapedia.com/WinInet_class
Можно считать пост недействительным. Пример как раз читает из инета, а не пишет туда.

Последний раз редактировалось Raven Melancholic; 22.03.2009 в 11:26. Причина: Ошибся, исправился
За это сообщение автора поблагодарили: rDenis (1).
Старый 22.03.2009, 11:39   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Кстати, я не спец в WEB сайтах. но разве по протоколу HTTP можно каким-то образом загрузить файл на сервер помимо использования тега <input type = "file">?
Обычно используют копирование через файловую систему (если сервер доступен), либо используют FTP протокол.
Старый 22.03.2009, 13:41   #5  
Aleksey_M is offline
Aleksey_M
Administrator
Аватар для Aleksey_M
 
520 / 355 (13) ++++++
Регистрация: 26.08.2005
Адрес: Москва
На вебсервер можно положить скрипт, который будет принимать файлы, загруженные по http методом post (как это делает броузер для <input type="file">), и сохранять его куда надо (хинт). Насчет аксапты не знаю, а с php все просто.
__________________
Был грязный плащ на нем одет,
Цилиндр черный смят в гармошку...
За это сообщение автора поблагодарили: rDenis (1).
Старый 22.03.2009, 13:46   #6  
rDenis is offline
rDenis
Участник
 
6 / 11 (1) +
Регистрация: 21.03.2009
Спасибо за информацию, единственный cпособ который я нашел действительно по фтп с помощью класса WinInet.

http://erpkb.com/Axapta/KakPoslat'FajjlPoFtp

Приходится делать в два захода, вначале локально сохранять файл, потом читать его и послылать на фтп сервер.
За это сообщение автора поблагодарили: zemius (1).
Старый 23.03.2009, 09:48   #7  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от rDenis Посмотреть сообщение
Спасибо за информацию, единственный cпособ который я нашел действительно по фтп с помощью класса WinInet.

http://erpkb.com/Axapta/KakPoslat'FajjlPoFtp

Приходится делать в два захода, вначале локально сохранять файл, потом читать его и послылать на фтп сервер.
Если файл текстовый, то, на мой взгляд, лучше использовать http post как говорит Aleksey_M. Проблем особых нет - в аксапте используется тот же WinInet, а на PHP пишется скрипт из нескольких строк. FTP в данном случае создаст дополнительные трудности при администрировании - придется права настраивать, порты открывать и т.п.

А вот если файл бинарный, то только FTP, http post в принципе все равно какие данные передавать, а вот в Аксапте будут проблемы, так как не получается получить указатель на бинарные данные чтобы передать его в фукнцию. Тип str для этого не подойдет, так как обрежет данные по первому нулевому символу.
Старый 25.03.2009, 00:43   #8  
rDenis is offline
rDenis
Участник
 
6 / 11 (1) +
Регистрация: 21.03.2009
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Если файл текстовый, то, на мой взгляд, лучше использовать http post как говорит Aleksey_M. Проблем особых нет - в аксапте используется тот же WinInet, а на PHP пишется скрипт из нескольких строк. FTP в данном случае создаст дополнительные трудности при администрировании - придется права настраивать, порты открывать и т.п.

А вот если файл бинарный, то только FTP, http post в принципе все равно какие данные передавать, а вот в Аксапте будут проблемы, так как не получается получить указатель на бинарные данные чтобы передать его в фукнцию. Тип str для этого не подойдет, так как обрежет данные по первому нулевому символу.
Пытаюсь передать файл по http, к сожалению не выходит.
Добавил в WinInet new()
X++:
 _httpOpenRequest = new DLLFunction(_winInet, 'HttpOpenRequestA');
    _httpOpenRequest.returns(ExtTypes::DWORD);
    _httpOpenRequest.arg(ExtTypes::DWORD);
    _httpOpenRequest.arg(ExtTypes::STRING);
    _httpOpenRequest.arg(ExtTypes::STRING);
    _httpOpenRequest.arg(ExtTypes::STRING);
    _httpOpenRequest.arg(ExtTypes::STRING);
    _httpOpenRequest.arg(ExtTypes::STRING);
    _httpOpenRequest.arg(ExtTypes::DWORD);
    _httpOpenRequest.arg(ExtTypes::DWORD);

    _httpSendRequest = new DLLFunction(_winInet, 'HttpSendRequestA');
    _httpSendRequest.returns(ExtTypes::DWORD);
    _httpSendRequest.arg(ExtTypes::DWORD);
    _httpSendRequest.arg(ExtTypes::STRING);
    _httpSendRequest.arg(ExtTypes::DWORD);
    _httpSendRequest.arg(ExtTypes::POINTER);
    _httpSendRequest.arg(ExtTypes::DWORD);
Создал два метода
X++:
int  httpOpenRequest(int _handler, str _request, str _targetObjectName)
{
    return _httpOpenRequest.call(_handler, _request, _targetObjectName, 0, 0, 0, 1,0);
}
boolean  httpSendRequest(int _handler, BinData _file, int _size)
{
    return _httpSendRequest.call(_handler, "Content-Type: application/x-www-form-urlencoded", 47, _file, _size);
}
И вызываю так
X++:
    BinData     binData = new BinData();

    binData.loadFile("c:\\test5.txt");

    code1 = winInet.internetConnect("192.168.0.10", "", "", 3);
    code2 = winInet.httpOpenRequest(code1, "POST", "receive.php");
    iwinInet.httpSendRequest(code2, binData, binData.getVariant().safeArray().lastIndex()))
Возможно задаю неправильные параметры для функций,или неправильно указал константы. К сожалению не нашел реализацию этих функций для аксапты.
Старый 25.03.2009, 09:51   #9  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
У меня вот такой HttpSendRequest
X++:
    _httpSendRequest = new DLLFunction(_winInet, 'HttpSendRequestA');
    _httpSendRequest.returns(ExtTypes::DWord);
    _httpSendRequest.arg(ExtTypes::DWord);
    _httpSendRequest.arg(ExtTypes::String);
    _httpSendRequest.arg(ExtTypes::DWord);
    _httpSendRequest.arg(ExtTypes::String);
    _httpSendRequest.arg(ExtTypes::DWord);
Я загружаю файл в TextBuffer, а потом отдаю данные из него в эту функцию как строку. Это не будет работать если файл бинарный или очень большой, теоретически у str есть какой-то предел, а текстовыми файлами нормально работает.

Как делаете Вы у меня тоже не получилось. Если бы так было можно, тогда и бинарные файлы можно было бы передавать
Теги
web, web сервер

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Организация доступа внешних веб-пользователей к DAX 4.0 alex55 DAX: Администрирование 1 07.06.2009 17:48
Обновление Веб-форм на сервере Sharepoint IvanS DAX: Программирование 2 07.04.2008 08:46
Не могу добавить веб-пользователя! Pawlik DAX: Администрирование 5 14.12.2005 12:25
Перенос Веб проекта Koriolis DAX: Программирование 2 27.07.2005 16:46
Сохранение файла в таблице Andrew Besedin DAX: Программирование 2 10.06.2003 06:48

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

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

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