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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.06.2013, 19:48   #1  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Это доступ, если использовать файловое хранилище то каждый пользователь получает доступ
Ну это в том случае, если админы дали полный доступ в каталог хранения файлов. Нормальный админ в этом каталоге запретит перебор состава каталога. Тогда к файлу можно обратиться только по полному имени. Для Аксапты проблем нет, через файловые менеджеры не получится.
Цитата:
Это бекапирование. Куда проще хранить бекап одного файла чем все эти папки и файлы.
Хранить проще. Но бэкапирование должно производится по определенным правилам, которые включают время на операцию. Если все данные в одной файловой группе (или бэкап делается не по файловым группам, а в целом по базе), то все зависит от соотношения полезных данных и редкоменяемых данных в blob полях. Если размер файлов, хранимых в вашей базе, сопоставим по объему с остальными данными, то можем поиметь проблемы. Данные файлов в blob полях меняются редко, а архивировать их нужно вместе со свей базой данных.
Цитата:
Можно контролировать кто открыл файл и держит - стандартный функционал.
Да, можно, но только с одним уточнением "В Аксапте". Если кто-то его открыл извне (из файловой системы или есть какой-то внешний клиент, понимающий формат хранения изображений в базе Аксы), то Акса ничего про это не знает.
Цитата:
Так же если документов уж очень много. то возникают баги, тормоза
Насчет багов не знаю, но тормоза при хранении всех прикрепленных файлов в одном каталоге есть. Когда количество файлов превышает пару десятков тысяч, то управлять каталогом очень сложно. Один просмотр его в любом файловом менеджере может повиснуть на несколько минут. Но тут есть стандартная возможность Аксы распределять разные типы документов по разным каталогам, прямо указывать путь к файлам (при определенных настройках). Ну и очень простая модификация, позволяющая хранить определенные файлы в разных каталогах и на разных серверах (по типам, по времени создания и т.п.). По крайней мере, такая модификация оставляет стандартные возможности и не требует извращений с внешними базами.
Цитата:
Все знаем SysDataBaseLog, которая ну очень большая
Согласен, на этапе запуска и внедрения новой функциональности хочется включить как можно больше логов. Но такие этапы, в конце концов, заканчиваются. Если в режиме эксплуатации включены все возможны логи, то это уже паранойя.
Ну уж если нужно хранить любой чих в течение ста лет, то можно посмотреть на секционирование таблиц, предлагаемое MS SQL. Правда, если при настроенном секционировании изменить именно SysDataBaseLog, то при синхронизации таблиц, скорее всего, Акса убьет это секционирование и его нужно будет настраивать заново. Но как часто изменяется структура SysDataBaseLog?
За это сообщение автора поблагодарили: Kainix (2).
Старый 15.06.2013, 20:28   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ну, а если очень хочется работать именно из Аксапты со сторонней базой, то можно использовать одну из особенностей работы Аксы со своей базой. На данном форуме уже не раз приводился способ работы из Аксы не со своими таблицами, а с вьхами, которые Акса считает своими таблицами. Поищите на форуме соответствующие темы. Основной принцип:
  • В AOD создается таблица нужно структуры. Она синхронизируется с базой данных.
  • В базе данный средствами MS SQL таблица удаляется, а вместо неё создается view той же структуры, но в запросе вьюхи обращение идет к нужным данным (не исключено, что на другой сервер), если нужно, то вьюха делается индексируемой. Единственное правило, что если из Аксапты будут идти запросы на обновления, вставку, удаление, то вьюха должна поддерживать эти операции (смотри BOL).
  • Такой подход потребует некоторых изменений в базовых классах синхронизации таблиц, но модификация простая и описана в темах этого форума.
  • После таких манипуляций Акса будет работать так, как будто это её родная таблица, но MS SQL обращаться будет не к таблице, а к вьюхе.
PS: естественно, как любой недокументированный подход, такой способ требует осторожности и четкого документирования для всех заинтересованных лиц. Даже если весь текущий состав ИТ отдела фирмы завтра уволится, следы таких хитростей должны остаться.
За это сообщение автора поблагодарили: d_alexe (1), arhat (1).
Старый 16.06.2013, 11:43   #3  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Спасибо за конструктивную критику, не знал про возможности решения моей проблемы, другими способами, всегда приятно иметь альтернативы. И возможность работать с аксой напрямую с другими базами тоже нужна. Поговорю с админами на счет настройки прав и вынос таблицы в отдельную файловую группу.
Старый 16.06.2013, 11:58   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1853 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
AX 2012 - storing Dynamics AX Document Attachments Within SharePoint
__________________
-ТСЯ или -ТЬСЯ ?
Старый 17.06.2013, 10:23   #5  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Обертка для работы со сторонней бд (с поддержкой контенеров)
SharedProject_IAU_SQL (1).xpo - проект
IAU.rar - dll

Можно без dll, тогда не перехватить сообщения от sql. чтобы все работало зайти в места поменять одноименные методы, класса

метод nmExecuteNonQuery - sqlCommandForEx.ExecuteNonQuery(); на sqlCommand.ExecuteNonQuery();

Описание краткое
n - net
p - property
s - set
g - get
m - method

nps - net property Set
npg - net property Get
nm - net method

Вопрос еще такой, как лучше делать обертках, наследовать классы или без наследования.
Если наследовать тогда можно избежать методов которые работают с net классами, но тогда нужно следить за инициализацией всех объектов. Если не наследовать то есть методы которые принимают и возвращают net классы.

Последний раз редактировалось Kainix; 17.06.2013 в 10:28.
За это сообщение автора поблагодарили: raz (5).
Старый 17.06.2013, 10:36   #6  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
пример использования. Выбор и запись в таблицу, состоящую из 2х полей RefRecId int64(bigint) и BinData container(image).
Для доступа к конкретным полям нужна обертка для System.Data.DataSet

X++:
static void IAU_Connection(Args _args)
{
    SysSqlConnection                    sysSqlConnection;
    SysSqlCommand                       SysSqlCommand;
    SysSqlConnectionStringBuilder       sysSqlStringBuilder;
    SysSqlConnectionTable               sysSqlConnectionTable;
    SysDataRowCollection                sysDataRowCollection;
    SysDataRow                          sysDataRow;
    SysSqlDataReader                    sysSqlExecuteReader;
    
    System.Exception                    e;
    ;
    try
    {
        sysSqlStringBuilder = new SysSqlConnectionStringBuilder();

        sysSqlStringBuilder.npsServer('');
        sysSqlStringBuilder.npsDataBase('');
        sysSqlStringBuilder.npsUserName('');
        sysSqlStringBuilder.npsUserPassword('');

        sysSqlConnection = new SysSqlConnection(sysSqlStringBuilder.npgConnectionString());
        SysSqlCommand = sysSqlConnection.sysSqlCommand();

        SysSqlCommand.npsCommandText("SELECT * from Table where RefrecId = @RefRecId");
        SysSqlCommand.sysSqlParameterCollection().addSysSqlParameter("@RefRecId", 5637374403);
        sysSqlExecuteReader = SysSqlCommand.sysSqlExecuteReader();
        sysSqlExecuteReader.nmRead();

        if(sysSqlExecuteReader.npgHasRows())
        {
            sysSqlExecuteReader.nmClose();
            SysSqlCommand = sysSqlConnection.sysSqlCommand();
            SysSqlCommand.npsCommandText("Update Table set binData = @BinData where RefrecId = @RefRecId");
            SysSqlCommand.sysSqlParameterCollection().addSysSqlParameter("@RefRecId", 5637374403);
            SysSqlCommand.sysSqlParameterCollection().addSysSqlParameter("@BinData",  connull());
            SysSqlCommand.nmExecuteNonQuery();

        }
    }
    catch(Exception::CLRError)
    {
        e = CLRInterop::getLastException();
        if(e)
        {
           while(e)
            {
                info(e.get_Message());
                e = e.get_InnerException();
            }
        }
        e = SysSqlCommand.clrSqlExeption();
        if(e)
        {
           while(e)
            {
                info(e.get_Message());
                e = e.get_InnerException();
            }
        }
        else
        {
            e = SysSqlCommand.clrExeption();
            if(e)
            {
               while(e)
                {
                    info(e.get_Message());
                    e = e.get_InnerException();
                }
            }
        }
    }
}

Последний раз редактировалось Kainix; 17.06.2013 в 10:40.
Теги
ado, внешняя база

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Взаимодействие с Excel через .NET (семейство классов SysExcel) gl00mie DAX: Программирование 102 11.08.2022 17:09
Ошибка с подключением через ODBC + глюк с работой через connection Corel DAX: Программирование 8 17.05.2012 11:58
Работа с Excel через COM нестабильна на x64 Максимка DAX: Программирование 6 27.01.2012 12:52
работа 1С из Аксапты через COM _scorp_ DAX: Программирование 7 22.08.2008 15:45
Работа с обычными отчетами через Enterprise Portal OliaM DAX: Программирование 0 17.01.2005 16:53
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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