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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.04.2008, 02:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,631 / 848 (80) +++++++
Регистрация: 28.10.2006
gatesasbait: Dynamics Ax SQL statements (SQL Strings in DAx)
Источник: http://gatesasbait.spaces.live.com/B...B9F5!206.entry
==============


Good afternoon,

Yesterday I hit a snag, took me a few hours to figure out (!). I had tinkered with SQL strings in ReleaseUpdate classes often before, tweaking them, rewriting them for optimization etc... but I don't recall ever writing up a new class that needed to run SQL Statements as strings. Yesterday I needed to do that because a customer wanted a report that would display some data accross all companies in an instance. Using the 'changecompany' keyword proved to be heavily inefficient since all data was in the same table and I only had to group by fields accros companies on the one table.

After fighting for a few minutes trying to fool QueryBuildRanges to span multiple DataAreaIds, or trying to change the company on a QueryBuildDataSource at runtime, I decided to use an SQL string.

But the issue I had is that the calling context for SQL Statement execution has to be RUN ON SERVER. The solution was to create a new class, a main() and a menuitem running it. Here is a sample of a class executing an SQL statement (obviously not my customer's!). It returns the customer Id for all customers accross all DataAreaIds (companies) on a database instance; whereas a standard select only returns the customers for the current company (curext()).

X++:
public class MySQLTest
{
    //AOSRunMode::Server
}
 
public static server void main(Args args)
{
    Connection  connection = new Connection();
    Statement   stmt = connection.createStatement();
    SqlSystem   sqlSystem = new SqlSystem();
    str         sqlStmt;
    int         i;
    ResultSet   resultSet;
    SqlStatementExecutePermission   sqlStatementExecutePermission;
    ;
 
    sqlStmt =  'SELECT * ';
    sqlStmt += 'FROM CustTable';
    sqlStatementExecutePermission = new SqlStatementExecutePermission(sqlStmt);
    sqlStatementExecutePermission.assert();
 
    resultSet = stmt.executeQuery(sqlStmt);
 
    while (resultSet.next())
    {
        info(resultSet.getString(1));
    }
}
The //AOSRunMode::Server marker is only for the BP checker. You can either specify 'server' on the static method declaration or as a property on the calling menuitem.


Источник: http://gatesasbait.spaces.live.com/B...B9F5!206.entry
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: Why upgrade to SQL Server 2008 with DAX 2009? Blog bot DAX Blogs 0 16.10.2008 06:24
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Dynamics AX: Dynamics AX 2009 & SQL Server 2008 Blog bot DAX Blogs 0 10.06.2008 21:08
gatesasbait: Local DAX installation method also works for Dynamics Ax 5.0 Build 366 Blog bot DAX Blogs 0 28.11.2007 18:51
Dynamics AX: SQL Server, Heart of Dynamics AX Blog bot DAX Blogs 0 13.07.2007 18:00

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

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

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