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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.03.2008, 14:29   #1  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Работа с бинарными объектами
Доброго времени суток!
Снова я с, возможно дурацким, вопросом ответ на который не нашел, и даже не знаю где искать. Нет ли у кого-нибудь примера работы с большими бинарными файлами в БД аксапты. Есть табличка, у которой есть поле, типа контейнер. Заполнить это поле получается, сохранить данные на жесткий диск, "кривовато", но получается. А вот как открыть приложение, связанное с данными в этом поле? неужели нужно сохранять данные на диск, и затем открывать файл?
вот код для записи (сохранения) поля типа контейнер (не обращайте внимания на логику, здесь я тестирую).

X++:
    str filename;
    FileNameFilter filter = ['All files','*.*'];
    Bindata binData = new BinData();
    super();

    filename = Winapi::getOpenFileName(100,filter,'', "Открыть файл", '','');
    if (filename)
    {
        if (binData.loadFile(filename))
        {
//запись файла в поле типа контейнер
            VendContractFile.FileContract = binData.getData();
//чтение из поля типа контейнер
            binData.setData(VendContractFile.FileContract);
//сохранение на диск под именем "123"
            binData.saveFile("h:\\123");
        }
    }
Старый 03.03.2008, 14:33   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
WinApi::shellExecute(<путь к файлу>)
Старый 03.03.2008, 15:39   #3  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Значит только сохраняя на диск можно просмотреть файл?
Старый 03.03.2008, 15:41   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
я думаю, это зависит от приложения.
Старый 03.03.2008, 16:12   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от demon46 Посмотреть сообщение
Значит только сохраняя на диск можно просмотреть файл?
вроде нет.
посмотрите как выполняется работа с логотипом компании
Основное \ Данные о компании \ Лого

или как показываются фотографии сотрудников в российском модуле Расчеты с персоналом
__________________
полезное на axForum, github, vk, coub.
Старый 03.03.2008, 16:32   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А это картинки - про картинки аксапта знает как из показывать. А вот какой-нибудь файл doc...
Старый 03.03.2008, 16:38   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от belugin Посмотреть сообщение
я думаю, это зависит от приложения.
Цитата:
Сообщение от belugin Посмотреть сообщение
А вот какой-нибудь файл doc...
Вот что значит предыдущая фраза. Все зависит от приложения с которым проассоциирован файл. Согласен.

Может быть не в тему, но разве обязательно записывать файл на диск? Как открывается вставленная внутрь вордового документа экселевская таблица (embeded document)? неужели пишет файл во временный каталог?
__________________
полезное на axForum, github, vk, coub.
Старый 03.03.2008, 16:41   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, думаю, на примере оффиса лучше вообще не рассуждать.
Он кучу временных файлов создает, когда надо и когда не надо.

К автору:
А что такого страшного в сохранении файла на диск перед использованием?

К mazzy:
Попробуй, интересно. Включи FileMon, и открой.
Старый 03.03.2008, 16:46   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как открывается вставленная внутрь вордового документа экселевская таблица (embeded document)? неужели пишет файл во временный каталог?
Есть такая штука - OLE: фактически doc файл представляет собой мини файловую систему (составной документ), аи ворд сообщает экселю тот "файл" внутри этой системы, где находится внедренный документ.

Кстати, дельфи, например может показывать такие документы из блоба, а вот аксапта, нет.

Но это надо чтобы приложение поддерживало OLE
Старый 04.03.2008, 10:15   #10  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Вобщем-то и ничего страшного. Вот только возникает вопрос.
Пусть пользователь открывает файл из БД. Аксапта делает запись в временный каталог, и открывает файл. Временный каталог находится в папке пользователья (терминальный клиент). А как же удалять эти файлы, ведь их может накопиться много. Или эта папка очищается, при каждом входе на удаленный рабочий стол?
Старый 04.03.2008, 10:23   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Ничего не очищается. Можно версти некий реестр файлов и запущенных процессов и чистить, когда процессы закрываются.

Можно просто условиться, что есть некая папка во временной, которую чистить периодически
Старый 04.03.2008, 10:25   #12  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Вот код рабочего проекта
X++:
    str filename;
    Bindata binData = new BinData();
    str TempfileParth;
    super();
    if (VendContractFile.Description == "")
    {
        Error("Нет файла для открытия");
        return;
    }
    TempfileParth = Winapi::getTempPath();
    binData.setData(VendContractFile.FileContract);
    filename = TempfileParth + VendContractFile.Description;
    binData.saveFile(Filename);
    if (! Winapi::shellExecute(filename) )
         Error("С данным типом файла не связана ни одна программа");
Старый 04.03.2008, 10:29   #13  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Можно файл создавать как временный с атрибутом FILE_ATTRIBUTE_TEMPORARY

Цитата:
The file is being used for temporary storage. File systems attempt to keep all of the data in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.
если вы решитесь попользовать функцию CreateFile

Естественно, при этом необходимо не забыть прибить их. Весь смак в том, что данном в случае не требуется указывать путь к конкретной папке.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 04.03.2008, 11:47   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
В свое время предлагал такой вариант для похожей ситуации:
Помогите с удалением файла!

Для вас это будет выглядеть примерно так
X++:
    #WinAPI
    TextBuffer      textBuffer = new TextBuffer();
    FileName       cmdName;
    ;
    ...
    binData.saveFile(Filename);

    cmdName = WinAPI::getTempPath() + "show.cmd";
    textBuffer.appendText(strfmt("call \"%1\"\n", winapi::charToOEM(VendContractFile.Description)));
    textBuffer.appendText(strfmt("del \"%1\"\n", winapi::charToOEM(VendContractFile.Description)));
    textBuffer.appendText("del " + cmdName);
    textBuffer.toFile(cmdName);
    winapi::shellExecute(cmdName, "", WinAPI::getTempPath(), #ShellExeOpen, #SW_HIDE);
__________________
Axapta v.3.0 sp5 kr2
Старый 04.03.2008, 12:34   #15  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А не будет ли в этом случае висеть терминальное окно?
Старый 04.03.2008, 12:37   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от belugin Посмотреть сообщение
А не будет ли в этом случае висеть терминальное окно?
что ты подразумеваешь под терминальным окном?
Command Line? Вроде не должно - там же SW_HIDE передается
Или именно окно теминального клиента (mstsc)?
Старый 06.03.2008, 11:55   #17  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Парни! я проверил. Каталог Temp чистится самой виндой, то ли перед входом на терминальный рабочий стол, толи прере выходом. Но точно заморачиваться не стоит. А если и придется, по советы конечно Весомые. Огромное всем спасибо.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Доступ к меню "Работа с документами" Kuat DAX: Администрирование 4 16.11.2007 17:07
Как получить значения полей (modifiedDate, modifiedTime, modifiedBy и др.) при работе с объектами AOT типа Map? LRA DAX: База знаний и проекты 15 02.04.2007 13:37
Совместная работа заказчика и исполнителя в разных или одном слое? Кузин Владимир В. DAX: Программирование 6 08.08.2006 10:02
Работа с главным меню в Axapta Alexey DAX: Программирование 0 04.01.2002 23:31

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

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

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