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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.02.2015, 09:13   #1  
at5454 is offline
at5454
Участник
 
61 / 10 (1) +
Регистрация: 29.05.2014
Запустить SQL процедуру именно от имени АОСа
Здравствуйте!
Есть хранимая процедура на sql сервере.Вот код который запускает ее
ЕЕ запускаю в аксапте при формировании пользовательского отчета.
У простого пользователя соответственно нет полных прав на sql сервер.
Как бы заспускать мою процедуру от имени AOCa?
Знаю еще метод есть Global_un::sqlexecute - но там тоже не ясно как под аосом запустить.
Подскажите пожалуйста что можно сделать
public server void sql()
{
str sql;
Connection userConnection;
SqlStatementExecutePermission permission;
Statement stmt;
ResultSet sqlres;
;
userid=curuserid();
userConnection = new Connection();
stmt = userConnection.createStatement();
sql = "exec dbo.crm1proc ";
permission = new SqlStatementExecutePermission(sql);
permission.assert();
stmt.executeupdate(sql);
CodeAccessPermission::revertAssert();
}
Старый 25.02.2015, 09:36   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от at5454 Посмотреть сообщение
Как бы заспускать мою процедуру от имени AOCa?
А под какой учеткой, как Вы считаете, процесс AOS создаст новое подключение к SQL Server ?
Цитата:
Подскажите пожалуйста что можно сделать
Больше - ничего, уже все сделали
__________________
-ТСЯ или -ТЬСЯ ?
Старый 25.02.2015, 09:38   #3  
maldini is offline
maldini
Участник
 
103 / 30 (2) +++
Регистрация: 06.03.2007
Адрес: москва
Попробуйте создать статический метод и вызвать его с помощью runas(). А вообще серверный метод должен работать от имени АОС.

Последний раз редактировалось maldini; 25.02.2015 в 09:44.
Старый 25.02.2015, 10:11   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
По-видимому, у вас джоб. А джобы всегда выполняются на клиенте, независимо от того, что вы указали модификатор server. Самое простое - сделайте статический метод класса, отрабатывающий на сервере:
X++:
public server static void sql(str _sql)
{
    Connection conn;
    SqlStatementExecutePermission permission;
    Statement stmt;
    ResultSet rs;
    ;

    conn = new Connection();
    stmt = conn.createStatement();
    permission = new SqlStatementExecutePermission(_sql);
    permission.assert();
    rs = stmt.executeQuery(_sql);
    CodeAccessPermission::revertAssert();
    
    while (rs.next())
    {
        info(rs.getString(1));
    }
}

public static void main(Args _args)
{
    ;
    
    SQLTest::sql("exec crm1proc");
    info("OK");
}
__________________
// no comments
За это сообщение автора поблагодарили: at5454 (1).
Старый 25.02.2015, 14:48   #5  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от dech Посмотреть сообщение
По-видимому, у вас джоб. А джобы всегда выполняются на клиенте, независимо от того, что вы указали модификатор server. Самое простое - сделайте статический метод класса, отрабатывающий на сервере:
Самое простое - написать в джобе
X++:
static void jobOnServer(Args _args)
{
    MenuFunction                            menuFunction;

    if (! isRunningOnServer())
    {
        menuFunction = ClassFactory::makeObjectOnServer(classNum(MenuFunction));
        menuFunction.objectType(MenuItemObjectType::Job);
        menuFunction.object(funcname());
        menuFunction.runOn(2);
        menuFunction.run();

        return;
    }

    info("Дальше любой код, который хотите выполнять на сервере");
}
При этом, насколько помню, funcname() возвращает имя джоба только в 2012, в более ранних версиях приходилось в ручную указывать имя и при неосторожной копипасте можно случайно запустить совсем другой джоб
__________________
Кононов Пётр
За это сообщение автора поблагодарили: A_BAS (1), coolibin (2), Kabardian (3), Ace of Database (3), gl00mie (1), sukhanchik (2), Hyper (1), Perc (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axinthefield: New DMVs in SQL Server 2008 R2 SP1 and SQL 2012 ('Denali') and Performance Analyzer for Microsoft Dynamics Blog bot DAX Blogs 0 14.01.2012 05:33
emeadaxsupport: Reporting Extensions Installation Fails to install on SQL 2008 Reporting services after applying 959494 and 957312 Blog bot DAX Blogs 1 23.06.2011 14:27
Можно ли из Аксапты вызвать хранимую процедуру на SQL Server Yuri Safronov DAX: Программирование 8 02.09.2002 14:25

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

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

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