| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Подмена запроса для View
			 
			
			Добрый день. 
		
		
		
		
		
		
			Имеется созданное в AOT View определенной структуры. Задача - подменить содержимое View на уровне базы данных. В Axapta 3 (+Oracle) данная задача решалась написанием скрипта (CREATE OR REPLACE VIEW...) в SysSQLInitDbTriggers. Как решается данная задача в DAX2009? Пересмотрел на форуме множество тем, в которых говорится, что необходима доработка при синхронизации или что нужно смотреть в сторону Application::dbSynchronize() (в том числе смотрел тему Запрет синхронизации объекта АОТ). В итоге однозначного решения не нашел. Если кто-нибудь знает решение для DAX2009 или есть пример решения, просьба рассказать о нем. 
				__________________ 
		
		
		
		
		
			С уважением, Александр. Последний раз редактировалось samolalex; 20.10.2014 в 17:39.  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
для MS SQL вместо CREATE OR REPLACE VIEW... будет Код: IF OBJECT_ID ('[myViewName]',\'V\') IS NOT NULL DROP VIEW [myViewName]
CREATE VIEW [myViewName] ... | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Logger (3), samolalex (2). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Можно через класс Application, метод dbSynchronize с подменой запроса для конкретного View.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Айрат Вильданов. skype: vildanov.a  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А что подразумевается под подменой запроса в данном случае - вызов скрипта "CREATE VIEW..."? И как именно можно подменить запрос для конкретного VIEW?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Александр.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вопрос вызывает место (класс/метод), из которого необходимо вызывать скрипт, т.к. в DAX2009 SysSQLInitDbTriggers отсутствует.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Александр.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
X++: ok = super(tableId, syncAsNeeded, continueOnError, showProgress, checkSyncTables);X++: private void CreateView(str _sql) { Connection connection; Statement statement; ; connection = new Connection(); statement = connection.createStatement(); SqlStatementExecutePermission = new SqlStatementExecutePermission ( _sql ); SqlStatementExecutePermission.assert(); statement.executeUpdate(_sql); CodeAccessPermission::revertAssert(); } Перед созданием вьюшки - ее надо грохнуть. 
				__________________ 
		
		
		
		
	Айрат Вильданов. skype: vildanov.a  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: samolalex (2). | |
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо за ответы. 
		
		
		
		
		
		
			Правильно я понимаю (с учетом информации в ранее опубликованной теме Синхронизация View DAX40), что при синхронизации определенного VIEW в метод Application::dbSynchronize() параметр tableId всегда передается равным 0. т.е. получается, что определить синхронизация какого объекта происходит в указанном методе невозможно? 
				__________________ 
		
		
		
		
		
			С уважением, Александр. Последний раз редактировалось samolalex; 22.10.2014 в 16:07.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от samolalex
			 
 
			Спасибо за ответы. 
		
	Правильно я понимаю (с учетом информации в ранее опубликованной теме Синхронизация View DAX40), что при синхронизации определенного VIEW в метод Application::dbSynchronize() параметр tableId всегда передается равным 0. т.е. получается, что определить синхронизация какого объекта происходит в указанном методе невозможно?  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Никому не удалось исключить таблицу из синхронизации в  AX2009 ? Очень нужно!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Никогда не было такой задачи.  
		
		
		
		
		
		
		
	Вот индексы успешно прятали от аксапты. Возможно для табличек сработает такой же подход. А вам это зачем ?  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот тема была для индексов 
		
		
		
		
		
		
		
	Не удалять индексы при синхронизации  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всё та же задача - подменить содержимое View на уровне базы данных. Создано представление в рабочей базе, которое связано с таблицей в другой базе. В рабочей базе в SQL данная таблица удалена и при синхронизации в программе выдается ошибка по этой таблице. Поэтому нужно исключить её из синхронизации.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Подложите во View копию этой таблицы, просто что бы ошибки не было. А после все равно подмените текст View на свой.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А как в SQL подложить во View копию этой таблицы?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Зачем через SQL? Напрямую в приложении аксапты всё сделайте. 
		
		
		
		
		
		
		
	Или я не понимаю проблемы? Допустим вам нужно в итоге получить View с определённым набором столбцов (откуда будут тянуться данные для этой View не важно). Я бы создал в этом же приложении таблицу с произвольным именем по структуре совпадающую с результирующим View (с таким же набором столбцов и соответствующими типами данных). Сделал бы на основе этой вспомогательной таблицы View с нужным именем.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если нет необходимости в подмене view сразу после синхронизации, можно все сделать средствами самого sql - сделать периодическую операцию, которая делает drop view XXX / create view XXX раз в день. И Kuskov правильно сказал про копию таблицы - обязательно сделайте, просто чтобы не было сообщений об ошибке
		 
		
		
		
		
		
		
		
		
			Последний раз редактировалось AlexeyS; 08.07.2015 в 10:37.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще раз на примере: есть 2 базы Work и Test. 
		
		
		
		
		
		
		
	1) В приложении Test (в Axapta) создаем таблицу TestFile. При синхронизации эта таблица появляется в базе Test 2) В базе Work в SQL создаем таблицу TestFile с такой же структурой 3) В базе Test в SQL удаляем таблицу TestFile 4) В базе Test в SQL создаем представление TestFile, связанное с базой Work. Таким образом, при работе в приложении Test c таблицей TestFile данные записываются в базу Work через представление. Но при синхронизации таблиц в приложении Test возникнет ошибка, потому что мы удалили таблицу в базе Test в SQL.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Потому что вьюха в сиквеле для Аксапты подменяет реальную таблицу 
		
		
		
		
		
		
			Т.е. в АОТ вью нет, есть таблица Меня не спрашивайте, почему так сделано) 
				__________________ 
		
		
		
		
	Axapta v.3.0 sp5 kr2  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (2). | |
| 
	
	 | 
	
		
		
  |