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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2005, 11:08   #1  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Помогите с удалением файла!
Аксапта сохраняет картинку из базы во временный файл который потом не удаляет. Нужно сделать так чтобы Аксапта удаляла картинку после просмотра из временной директории TEMP.
Есть следующий алгоритм для просмотра картинок:

PHP код:
 void showImage(int numint NtabPade)
{
    
FileName    fileName;
    
Image       myImage = new Image();
    
container   imconcon SpecificationTable.SpecificationPicture;
    ;
    if(
num == 0)
        return;

    switch(
NtabPade)
        {
        case 
1con SpecificationTable.SpecificationPicture;
        break;
        case 
2con SpecificationTableExt.SpecificationPicture;
        break;
        case 
3con SpecificationTableServ.SpecificationPicture;
        break;
        }
    
num = (num 1) * 1;
    
fileName WinAPI::getTempPath() + conPeek(con,num);
    
imCon imCon conPeek(con,num+1);

    
myImage.setData(conPeek(con,num+1));
    
myImage.saveQuality(100);
    
myImage.saveFile(fileName);

    
WinAPI::shellExecute('C:\\\Program Files\\\Windows NT\\\Accessories\\\ImageVue\\\kodakprv.exe'fileName);//C:\Program Files\Windows NT\Accessories\ImageVue\kodakimg.exe

Подскажите плиз.
Старый 25.08.2005, 11:24   #2  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Вопрос с каким-то подвохом?
А то ответ слишком прост:
winAPI::deleteFile(fileName)

Ну разве что WinAPI::shellExecute ... надо запускать в синхронном режиме, чтоб ждало закрытия если delete писать сразу после, но это не очень удобно, тогда нужно delete делать до save и смириться с тем, что файл будет болтаться на диске до следующего открытия ...
Можно смягчить ситуацию некой очистительной процедурой при запуске клиента, например.

С уваженим, itfs.
Старый 25.08.2005, 13:49   #3  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Я пробовал эту функцию но она удаляет файл раньше чем его отрывает просмоторщик.
winAPI::deleteFile(fileName)

Может какое нибудь ожидание ставить?
Старый 25.08.2005, 13:51   #4  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
2 Hidden
А почему вы приняли решение просматривать картинку внешней программой?
Может быть, проще поместить ее на Аксаптовскую форму?
__________________
Старый 25.08.2005, 14:43   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Фунция ShellExecute запускает не сам файл на исполнение, а лишь передает Windows Shell команду на его запуск. При этом она возвращается после передачи управления в функцию WinMain процесса. А загрузка файла в программу происходит намного позже этого момента. Так что вы успеваете его удалить задолго до этого.

Запустить ShellExecute в синхронном режиме нельзя, так как она не возвращает Handle запущенного процесса. Для этого можно использовать либо ShellExecuteEx, либо CreateProcess, а дальше ч-з WaitForSingleObject с параметром INFINITE ждать завершения процесса и только после этого удалять файл. Но при этом, если не запускать обработку в отдельном Thread'е, то Axapta у вас не будет отвечать на запросы пока не закроете это приложение. Можно повесить это дело на таймер и проверять с немедленным возвратом из функции WaitForSingleObject с определенной периодичностью и только после закрытия процесса удалять файл.

Ну а в общем зачем такие сложности, если проще показать картинку в Axapte?
Старый 25.08.2005, 15:01   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
еще можно через
COM поюзать WshShell.Run
Старый 25.08.2005, 15:32   #7  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
А как показать картинку в Аксапте? Она tif умеет открывать и печатать, и zoom делать?
Старый 25.08.2005, 16:21   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Hidden
А как показать картинку в Аксапте? Она tif умеет открывать и печатать, и zoom делать?
Документооброт.
1. добавить запись с типом Файл.
2. Указать файл, нажать ОК
3. включить галочку Показать файл

Документооброт умеет хранить файлы в базе, в каталоге на сервере, в исходном месте.
Документооборот правильно работает в трехуровневой конфигурации.
Юзайте стандартный функционал.
__________________
полезное на axForum, github, vk, coub.
Старый 25.08.2005, 19:13   #9  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
У меня двухуровневая конфигурация. У меня конкретный вопрос, как удалять файлы?
Старый 25.08.2005, 20:26   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Если у вас Win2000 или XP можно использовать тот же метод shellExecute таким образом

PHP код:
static void Job1(Args _args)
{
    
#WinAPI
    
TextBuffer      textBuffer = new TextBuffer();
    
FileName        fileName;
    ;
    
fileName WinAPI::getTempPath() + "show.cmd";
    
textBuffer.appendText("mspaint mypicture.jpg\n");
    
textBuffer.appendText("del mypicture.jpg\n");
    
textBuffer.appendText("del " fileName);
    
textBuffer.toFile(fileName);
    
winapi::shellExecute(fileName""WinAPI::getTempPath(), #ShellExeOpen, #SW_HIDE);

Правда командный интерпретатор могут выбить из памяти, да и имя файла надо подбирать случайным образом или следующий запуск перезатрет файл
Старый 26.08.2005, 16:51   #11  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Я думаю сделать временную таблицу в которую писать путь к удаляемым файлам. потом эти файлы при закрытии формы удалять.
Старый 26.08.2005, 16:59   #12  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Зря. А что будет, если забыть закрыть приложение с картинкой перед выходом?

AndyD предложил отличный вариант самоподтирания . Присоединяюсь.

С уважением, itfs.
Старый 26.08.2005, 17:04   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Теги
winapi, документооборот, картинка, удаление файла

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Диалог выбора файла PavelSR DAX: Программирование 7 11.09.2009 13:41
Проблема загрузки файла longson DAX: Программирование 3 06.06.2007 12:06
Формат файла Экспорта Импорта dat demon46 DAX: Администрирование 33 11.09.2006 16:18
Возникла проблема с получением имени файла при создании своего канала вывода отчетов. oleg_kap DAX: Программирование 3 06.06.2006 14:12
Установить время файла? SnowMan DAX: Программирование 5 01.10.2003 14:42

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

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

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