|  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). | |
|  | 
| 
 |