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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.08.2009, 10:46   #1  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Проверка доступа к файлу
При попытке сохранить word-файл с помощью wordDoc.documentSaveAs(fileName); если к каталогу нет доступа получаем ошибку.
Как можно заранее опрелить есть ли у нас доступ к каталогу-файлу?
Попытки использовать FileIOPermision не помогли.
Все было бы нормально, но сообщение об ошибке иногда выходит под главной формой, и получается эффект зависания.
Старый 07.08.2009, 12:20   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kia Посмотреть сообщение
При попытке сохранить word-файл с помощью wordDoc.documentSaveAs(fileName), если к каталогу нет доступа получаем ошибку. Как можно заранее опрелить есть ли у нас доступ к каталогу-файлу?
Не заморачивайтесь предварительными проверками - просто отлавливайте ошибку. На NTFS может быть слишком много вариантов настройки прав доступа к каталогам и файлам, чтобы можно было сколь-нибудь просто проверить, удачно ли завершится та или иная файловая операция, не осуществив саму эту операцию.
Цитата:
Сообщение от kia Посмотреть сообщение
Попытки использовать FileIOPermision не помогли.
Если речь о Code Access Security, то этот механизм предназначены для того, чтобы проверять разрешения для вашего кода выполнять те или иные файловые операции, а не проверять разрешения для учетной записи, под которой запущен ваш код и может быть запущен любой другой код, выполнять те или иные файловые операции.
Цитата:
Сообщение от kia Посмотреть сообщение
Все было бы нормально, но сообщение об ошибке иногда выходит под главной формой, и получается эффект зависания.
Как вам это удается? У интерфейса Application офисных приложений есть свойство DisplayAlerts - если его установить в ноль (т.е. wdAlertsNone для Word), то, согласно документации, никакие сообщения об ошибках пользователю отображаться не будут.
Старый 07.08.2009, 14:23   #3  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Как вам это удается? У интерфейса Application офисных приложений есть свойство DisplayAlerts - если его установить в ноль (т.е. wdAlertsNone для Word), то, согласно документации, никакие сообщения об ошибках пользователю отображаться не будут.
Сообщение выдает Word, а так он запускается в фоне, то он выводиться по формой АХ и его сообщение тоже иногда выводиться под АХ.
DisplayAlerts помог, спасибо.
Осталось избавится от следующей ошибки, чтобы пользователей не пугать:
Метод "saveAs" в COM-объекте класса "_Document" возвратил код ошибки 0x800A1424 ....
Старый 07.08.2009, 16:12   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от kia Посмотреть сообщение
Осталось избавится от следующей ошибки, чтобы пользователей не пугать: Метод "saveAs" в COM-объекте класса "_Document" возвратил код ошибки 0x800A1424 ....
Ну, а перехватывать ошибки не пробовали?
X++:
int lines;
// ...
try
{
    lines = infolog.lines();
    comWord.SaveAs( filename );
}
catch (Exception::Error)
{
    infolog.cut( lines + 1 );  // удаляем сообщения об ошибках в COM-объекте из инфолога
    Box::warning( @"Фигня вышла..." );
}
За это сообщение автора поблагодарили: alex55 (1), Corel (1).
Старый 08.08.2009, 16:22   #5  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Как можно заранее опрелить есть ли у нас доступ к каталогу-файлу?
так, например:
X++:
CommaIO file = new CommaIO(fileName, "r");
if (!file)
   info("ппц");
Старый 09.08.2009, 09:59   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
X++:
CommaIO file = new CommaIO(fileName, "r");
if (!file)
   info("ппц");
Это, я так понимаю, попытка открыть какой-то файл на чтение. Но если в нужном каталоге нет файлов? Или неизвестно, какие файлы есть, а права на листание каталога (перечисление его содержимого) отключены? Можно еще пробовать создать "тестовый" файл, но что если права на удаление файлов в каталоге отключены, и удалить потом "тестовый" файл не удастся? Или в каталоге уже есть файл с таким названием (а права на листание каталога отключены)? В общем, суета это все - надо просто отлавливать ошибки, а не пытаться предсказать их появление.
Старый 10.08.2009, 11:03   #7  
kia is offline
kia
Участник
 
96 / 19 (1) ++
Регистрация: 07.10.2008
Адрес: Харьков
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Ну, а перехватывать ошибки не пробовали?
Пробовал.
Но до удаления сообщений из лога не дошел. Еще раз спасибо.
Старый 19.03.2018, 17:25   #8  
Cathome is offline
Cathome
Участник
Аватар для Cathome
 
54 / 23 (1) +++
Регистрация: 10.11.2010
Адрес: Москва
?
Всем добрый день!

Версия DAX 4.0.

Как перехватить ошибку ComOfficeDocument_RU.documentSaveAs(..)?

У меня такой код:

X++:
if (! excelDocument.documentSaveAs(documentName))
{
    excelDocument.quitApplication(true);
    return false;
}
Внутри documentSaveAs:

X++:
public boolean documentSaveAs(FilenameSave _filenameSave)
{
    if (m_comDocument)
    {
        try
        {
            m_comDocument.saveAs(_filenameSave);
        }
        catch (Exception::Error)
        {
            error(this.getCOMErrorMsg());
            return false;
        }
    }
    else
    {
        this.visible(true);
        throw error(strfmt("@GEE6401", this.getApplicationName()));
    }

    return true;
}
На строке
X++:
m_comDocument.saveAs(_filenameSave);
выполнение останавливается и exception не ловится, documentSaveAs ничего не возвращает . Что делать?

P.S. также пробовала Exception handling в своем методе вместо проверки boolean в виде
X++:
try
{
    excelDocument.documentSaveAs(documentName));
}
catch (Exception::Error)
{
    excelDocument.quitApplication(true);
    return false;
}
,

то же самое.. просто не заходит в catch.
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг

Последний раз редактировалось Cathome; 19.03.2018 в 17:32.
Старый 19.03.2018, 17:49   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Напишите просто catch без указания исключения. Если поймает то можно перебором выяснить какое реально исключение вылетает и обработать его.
Старый 19.03.2018, 18:05   #10  
Cathome is offline
Cathome
Участник
Аватар для Cathome
 
54 / 23 (1) +++
Регистрация: 10.11.2010
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Напишите просто catch без указания исключения. Если поймает то можно перебором выяснить какое реально исключение вылетает и обработать его.
Попробовала, не помогло. До catch просто не доходит..
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг
Старый 19.03.2018, 18:08   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
у вас внутри транзакции происходит работа с файлом?
За это сообщение автора поблагодарили: Cathome (1).
Старый 19.03.2018, 21:33   #12  
Cathome is offline
Cathome
Участник
Аватар для Cathome
 
54 / 23 (1) +++
Регистрация: 10.11.2010
Адрес: Москва
Цитата:
Сообщение от ice Посмотреть сообщение
у вас внутри транзакции происходит работа с файлом?
Спасибо за наводку, да, как оказалось, внутри транзакции.
Вот почитала для чайников. Убрала её, точнее, перенесла на уровень пониже, теперь всё работает, как надо!
__________________
"казалось бы, зачем виртуализировать виртуализаторы виртуализаторов виртуальных ява-машин, но Оракл было уже не остановить..." © Башорг
Теги
word, доступ, исключения, права доступа, файл

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Организация доступа внешних веб-пользователей к DAX 4.0 alex55 DAX: Администрирование 1 07.06.2009 17:48
Расширение возможностей стандартных прав доступа Stainless DAX: Программирование 2 19.06.2008 10:36
Экспорт/Импорт прав доступа Anais DAX: Администрирование 28 11.11.2006 21:44
Проверка целостности coja DAX: Администрирование 6 06.09.2006 13:14
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47

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

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

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