| 
			
			 | 
		#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(); }  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А под какой учеткой, как Вы считаете, процесс AOS создаст новое подключение к SQL Server ? 
		
		
		
		
		
		
			Цитата: 
	
		
			Подскажите пожалуйста что можно сделать
		
	 
				__________________ 
		
		
		
		
	-ТСЯ или -ТЬСЯ ?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте создать статический метод и вызвать его с помощью runas(). А вообще серверный метод должен работать от имени АОС.
		 
		
		
		
		
		
		
		
		
			Последний раз редактировалось maldini; 25.02.2015 в 09:44.  | 
| 
	
 | 
| 
			
			 | 
		#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). | |
| 
			
			 | 
		#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). | |
| 
	
	 | 
	
		
  |