25.02.2015, 09:13 | #1 |
Участник
|
Запустить 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 |
Модератор
|
А под какой учеткой, как Вы считаете, процесс AOS создаст новое подключение к SQL Server ?
Цитата:
Подскажите пожалуйста что можно сделать
__________________
-ТСЯ или -ТЬСЯ ? |
|
25.02.2015, 09:38 | #3 |
Участник
|
Попробуйте создать статический метод и вызвать его с помощью runas(). А вообще серверный метод должен работать от имени АОС.
Последний раз редактировалось maldini; 25.02.2015 в 09:44. |
|
25.02.2015, 10:11 | #4 |
Участник
|
По-видимому, у вас джоб. А джобы всегда выполняются на клиенте, независимо от того, что вы указали модификатор 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 |
Молодой, подающий надежды
|
Цитата:
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("Дальше любой код, который хотите выполнять на сервере"); }
__________________
Кононов Пётр |
|
|
За это сообщение автора поблагодарили: A_BAS (1), coolibin (2), Kabardian (3), Ace of Database (3), gl00mie (1), sukhanchik (2), Hyper (1), Perc (1). |
|
|