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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.05.2003, 09:06   #1  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
? Как из Axapta загрузить (выполнить) хранимую процедуру
Пытаюсь отыскать в АОТ какой-нибудь класс, позволяющий работать с хранимыми процедурами SQL Server - пока безуспешно. Есть ли такая воозможность вообще и если да, то как ее реализовать в Axapta?
Старый 08.05.2003, 09:25   #2  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Регистрация: 07.02.2003
А Вы загляните в базу Аксапты через MS SQL Enterprise Manager - там хоть одна SP есть? Применение SP официально не рекомендуется Navision. Так что придется разбираться самому. Или многоуважаемый коллективный разум что-нибудь подскажет из собственного опыта...
Старый 08.05.2003, 09:26   #3  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Например так:

PHP код:
    Connection  connection;
    
Statement   stmt;
    
ResultSet   resultSet;
    
str         sqlS;
    ;

    
connection = new Connection();
    
stmt connection.createStatement();

    
sqlS 'execute AxTest.bmssa.test';
    
resultSet stmt.executeQuery(sqlS);
    while (
resultSet.next())
    {
        
info (resultSet.getString(1));
    } 
getString(1) - первая колонка.
P.S. Если команду getString выполнить дважды возникнет ошибка. Т.е. так делать нельзя:
PHP код:
    while (resultSet.next())
    {
        
info (resultSet.getString(1));
        
info (resultSet.getString(1));
    } 
__________________
С уважением, Игорь Ласийчук.
За это сообщение автора поблагодарили: kashperuk (3).
Старый 08.05.2003, 09:37   #4  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
В папке Stored Procedures их 30 штук
За код благодарю! Спасибо!
Старый 08.05.2003, 09:50   #5  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Регистрация: 07.02.2003
Во-первых, те SP, что имеются, системные и к Аксапте отношения не имеют, специально посмотрел в базы 2.5 и 3.0
Во-вторых, Игорь, а User-Defined Function от SQL 2000 не использовали?
Старый 08.05.2003, 10:10   #6  
Garic is offline
Garic
NavAx
Аватар для Garic
NavAx Club
 
393 / 63 (3) ++++
Регистрация: 23.07.2002
Адрес: Москва
Цитата:
Во-первых, те SP, что имеются, системные и к Аксапте отношения не имеют, специально посмотрел в базы 2.5 и 3.0
Ну мало-ли. Может нужно запустить свою процедуру.

Цитата:
Во-вторых, Игорь, а User-Defined Function от SQL 2000 не использовали?
Не приходилось. Думаю через Statement можно выполнить любую команду.
Полезным бывает таким образом выполнять запрос код которого заранее неизвестен. Конечно в этом случае можно пользоваться командой runbuf, но она работает медленней.
__________________
С уважением, Игорь Ласийчук.
Старый 08.05.2003, 10:22   #7  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
Системные значит системные, 31 первая будет не системной.

Господа, а почему так настоятельно не рекомендуется использовать хранимые процедуры? Где можно подчерпнуть информацию-объяснения или аргументы?

Может это связано с тем, что возможность прямого доступа к SQL Server, а не средствами Axapta, может привести к нарушению структуры БД (например, неправильная работа с RecId).
Старый 08.05.2003, 10:32   #8  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Регистрация: 07.02.2003
Цитата:
Изначально опубликовано Buba

Господа, а почему так настоятельно не рекомендуется использовать хранимые процедуры? Где можно подчерпнуть информацию-объяснения или аргументы?

Может это связано с тем, что возможность прямого доступа к SQL Server, а не средствами Axapta, может привести к нарушению структуры БД (например, неправильная работа с RecId).
Примерно так. Основная мотивировка - что-то вроде: "Мы не сможем гарантировать работоспособность Ваших доработок после установки обновлений" и "Это не соответствует идеологии системы".

Однозначно, на мой взгляд, что SP или UDF в Аксапте стоит использовать только для чтения.
Старый 08.05.2003, 10:37   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Ну и recID, конечно.

На самом деле использование хранимых процедур сильно осложнит вам жизнь в будущем, когда вы будете ставить СП, переходиьт на новую версию или на другую базу данных. Стоимость будущих сложностей с лихвой может перекрыть преимущества от текущего использования хранимых процедур.

Второй аспект. Аксапта сама занимается кэшированием данных. Хранимые процедуры скорее всего этот механизм учитывать не будут. Что чревато потерей данных.

Третий аспект. На самом деле с запросами у Аксапты более-менее хорошо. Желание использовать хранимые процедуры, как правило, возникает из-за неправильного или неполного использования стандартных возможностей. А это значит, что ресурсы тратятся зря, не на достижение результата, а на борьбу за победу рабочего класса (за хранимые процедуры ). Конечно бывают исключения. Но судя по вопросу, это не тот случай.
Старый 08.05.2003, 10:41   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Ну мало-ли. Может нужно запустить свою процедуру.
Как правило, такой подход применяется при импорте в Аксапту данных из различных внешних систем.
В сети есть множество разнородных источников данных, подключенных к SQL Server как linked сервера. На SQL Server'е пишется SP, которая из всех этих источников данных выбирает нужную новую информацию, как-то обрабатывает ее и заносит в специальную табличку. Пользователь Аксапты с нужной ему периодичностью жмет клавишу в Аксапте, запускается эта хранимая процедура, все данные собираются в специальную табличку, откуда затем самой Аксаптой (с помощбю того же Connection) растаскиваются по необходимым таблицам.
Старый 08.05.2003, 10:46   #11  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Может это связано с тем, что возможность прямого доступа к SQL Server, а не средствами Axapta, может привести к нарушению структуры БД (например, неправильная работа с RecId).
Дам и я свою ссылочку:

http://www.adem.karavaevo.ru/Axapta/Article1.html
Старый 08.05.2003, 10:50   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Alex_K
"Это не соответствует идеологии системы".
Точно. А идеология очень простая: Вся логика находится в одном месте - в Аксапте.
Такой подход сильно упрощает и удешеляет сопровождение.
Для выполнения операций на серверной стороне используется AOS, а не хранимые процедуры.

Конечно бывают случаи. Например, Андре, говорит о импорте. Но я бы и к таким случаям относился с осторожностью, поскольку validate проходит непонятно по каким правилам... И что будет с целостностью базы после импорта внешними (не Аксаптовскими) средствами - вопрос.
Старый 08.05.2003, 11:07   #13  
Buba is offline
Buba
Участник
 
90 / 10 (1) +
Регистрация: 24.04.2003
Адрес: Томск
Андре описал именно тот случай, над которым мы работаем, а именно импорт данных.

Вопрос к mazzy.
Если все-таки следовать рекомендациям использовать для импорта исключительно средства Аксапта с тем, чтобы не иметь проблем в будующем, то какими именно?
Старый 08.05.2003, 11:13   #14  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Конечно бывают случаи. Например, Андре, говорит о импорте. Но я бы и к таким случаям относился с осторожностью, поскольку validate проходит непонятно по каким правилам... И что будет с целостностью базы после импорта внешними (не Аксаптовскими) средствами - вопрос.
По моему ты меня не совсем понял. Или я что-то не понимаю

Хранимая процедура просто собирает информацию из различных источников - dbf-файлы, excel'евские файлы, текстовые файлы, другие базы данных на SQL Server'е, обабатывает их, и помещает в одну таблицу. Здесь имеется в виду не Аксаптовская таблица, а просто таблица на SQL Server'е.
Затем уже Аксапта лезет в эту таблицу (например с помощью ADO) берет оттуда данные и САМА помещает их в свои Аксаптовские таблицы.

Так что с validate здесь все в порядке.
Старый 08.05.2003, 11:27   #15  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Регистрация: 07.02.2003
Цитата:
Изначально опубликовано Андре


Хранимая процедура просто собирает информацию из различных источников - dbf-файлы, excel'евские файлы, текстовые файлы, другие базы данных на SQL Server'е, обабатывает их, и помещает в одну таблицу. Здесь имеется в виду не Аксаптовская таблица, а просто таблица на SQL Server'е.
Затем уже Аксапта лезет в эту таблицу (например с помощью ADO) берет оттуда данные и САМА помещает их в свои Аксаптовские таблицы.

Так что с validate здесь все в порядке.
А зачем так сложно? Если буферная таблица более ни для чего не используется, только залил данные - разбросал по другим таблицам - подмел за собой, зачем городить огород с ADO? Кстати, свойство таблицы "Temporary" для этого не подойдет?
Старый 08.05.2003, 11:51   #16  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
А зачем так сложно?
Потому, что в SP происходит много такой работы, которая плохо реализуется в Аксапте. Под "плохо" я имею в виду то, что часть вещей в ней решается не красиво (так как она для этого не предназначена), а часть вещей работает очень медленно (так как на T-SQL я могу составить запрос, который по быстродействию далеко обгонит запросы, генерируемые Аксаптой).
Старый 08.05.2003, 11:59   #17  
Alex_K is offline
Alex_K
Участник
 
531 / 36 (3) +++
Регистрация: 07.02.2003
Ты не понял...
Я спрашивал о возможности заливать данные из SP не в отдельную таблицу MS SQL, а в таблицу Аксапты, специально для транзита данных предназначенную, чтобы не заморачиваться с ADO и т.п.
Старый 08.05.2003, 12:04   #18  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Я спрашивал о возможности заливать данные из SP не в отдельную таблицу MS SQL, а в таблицу Аксапты
Сложности с генерацией recId из вне Акспты.

Хотя вполне решаемые - см. мою ссылку выше.
Старый 08.05.2003, 22:43   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Alex_k, Андре, понял. Согласен.
Хотя это опять программирование....

Цитата:
Изначально опубликовано Buba
Если все-таки следовать рекомендациям использовать для импорта исключительно средства Аксапта с тем, чтобы не иметь проблем в будующем, то какими именно?
Хм... смотря кто спрашивает, если такой вопрос задает пользователь, то использовать иморт из экселя или из текстового файла. www.axapta.mazzy.ru/hints/import/

Если такой вопрос задает программист, то наверное способ, предложенный Andre. Где то готовим данные, а в Аксапту затягиваем job'ом.


Есть еще один способ для программиста. Он мне нравится больше. Но на самом деле это дело вкуса. В Аксапте есть классы, которые могут читать данные из ODBC. Посмотрите на форму CCDataLinkTable и все с ней связанное. Правда этот модуль идет в дорогой лицензии модуля Стратегическое управление. Но посмотреть на этот инструмент все равно стоит.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Загрузить КЛАДР в Axapta 4 Poleax DAX: Функционал 58 09.08.2010 12:21
Как изменить загрузить файл лицензий не заходя в AXAPTA ? Ученик DAX: Администрирование 9 28.03.2005 23:34
Как вызвать через ADO хранимую процедуру с параметрами ? LSA DAX: Программирование 16 23.12.2004 18:17
Можно ли из Аксапты вызвать хранимую процедуру на SQL Server Yuri Safronov DAX: Программирование 8 02.09.2002 14:25
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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