AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 20.10.2014, 16:04   #1  
samolalex ist offline
samolalex
Участник
Benutzerbild von samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Registriert seit: 18.06.2010
Ort: Москва
Подмена запроса для View
Добрый день.

Имеется созданное в AOT View определенной структуры. Задача - подменить содержимое View на уровне базы данных.
В Axapta 3 (+Oracle) данная задача решалась написанием скрипта (CREATE OR REPLACE VIEW...) в SysSQLInitDbTriggers.

Как решается данная задача в DAX2009?

Пересмотрел на форуме множество тем, в которых говорится, что необходима доработка при синхронизации или что нужно смотреть в сторону Application::dbSynchronize() (в том числе смотрел тему Запрет синхронизации объекта АОТ).

В итоге однозначного решения не нашел.
Если кто-нибудь знает решение для DAX2009 или есть пример решения, просьба рассказать о нем.
__________________
С уважением, Александр.

Geändert von samolalex (20.10.2014 um 17:39 Uhr)
Alt 22.10.2014, 10:50   #2  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von samolalex Beitrag anzeigen
В Axapta 3 (+Oracle) данная задача решалась написанием скрипта (CREATE OR REPLACE VIEW...) в SysSQLInitDbTriggers.

Как решается данная задача в DAX2009?
Да все также ...
для MS SQL вместо CREATE OR REPLACE VIEW... будет
Code:
IF OBJECT_ID ('[myViewName]',\'V\') IS NOT NULL DROP VIEW [myViewName]
CREATE VIEW [myViewName] ...
This post has been rated by: Logger (3), samolalex (2).
Alt 22.10.2014, 11:47   #3  
AraraT® ist offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Registriert seit: 13.01.2006
Ort: Республика Татарстан, г. Казань
Можно через класс Application, метод dbSynchronize с подменой запроса для конкретного View.
__________________
Айрат Вильданов.
skype: vildanov.a
Alt 22.10.2014, 11:55   #4  
samolalex ist offline
samolalex
Участник
Benutzerbild von samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Registriert seit: 18.06.2010
Ort: Москва
Zitat:
Zitat von AraraT® Beitrag anzeigen
Можно через класс Application, метод dbSynchronize с подменой запроса для конкретного View.
А что подразумевается под подменой запроса в данном случае - вызов скрипта "CREATE VIEW..."? И как именно можно подменить запрос для конкретного VIEW?
__________________
С уважением, Александр.
Alt 22.10.2014, 12:10   #5  
samolalex ist offline
samolalex
Участник
Benutzerbild von samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Registriert seit: 18.06.2010
Ort: Москва
Zitat:
Zitat von S.Kuskov Beitrag anzeigen
Да все также ...
для MS SQL вместо CREATE OR REPLACE VIEW... будет
Code:
IF OBJECT_ID ('[myViewName]',\'V\') IS NOT NULL DROP VIEW [myViewName]
CREATE VIEW [myViewName] ...
Вопрос вызывает место (класс/метод), из которого необходимо вызывать скрипт, т.к. в DAX2009 SysSQLInitDbTriggers отсутствует.
__________________
С уважением, Александр.
Alt 22.10.2014, 12:25   #6  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von samolalex Beitrag anzeigen
место (класс/метод), из которого необходимо вызывать скрипт
X++:
Application::dbSynchronize()
Alt 22.10.2014, 12:36   #7  
AraraT® ist offline
AraraT®
Участник
1C
 
158 / 106 (4) +++++
Registriert seit: 13.01.2006
Ort: Республика Татарстан, г. Казань
Zitat:
Zitat von samolalex Beitrag anzeigen
А что подразумевается под подменой запроса в данном случае - вызов скрипта "CREATE VIEW..."? И как именно можно подменить запрос для конкретного VIEW?
вот после этого места можно вызвать скрипт:
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();
}
У нас на Вьюшке создавался метод, в котором возвращалась строка как скрипт создания необходимой вьюшки на чистом SQL, потом проверялось его наличие через Dict*-классы и вызывался, как раз после указанного супера.

Перед созданием вьюшки - ее надо грохнуть.
__________________
Айрат Вильданов.
skype: vildanov.a
This post has been rated by: samolalex (2).
Alt 22.10.2014, 15:46   #8  
samolalex ist offline
samolalex
Участник
Benutzerbild von samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Registriert seit: 18.06.2010
Ort: Москва
Спасибо за ответы.

Правильно я понимаю (с учетом информации в ранее опубликованной теме Синхронизация View DAX40), что при синхронизации определенного VIEW в метод Application::dbSynchronize() параметр tableId всегда передается равным 0. т.е. получается, что определить синхронизация какого объекта происходит в указанном методе невозможно?
__________________
С уважением, Александр.

Geändert von samolalex (22.10.2014 um 16:07 Uhr)
Alt 22.10.2014, 16:13   #9  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von samolalex Beitrag anzeigen
Спасибо за ответы.

Правильно я понимаю (с учетом информации в ранее опубликованной теме Синхронизация View DAX40), что при синхронизации определенного VIEW в метод Application::dbSynchronize() параметр tableId всегда передается равным 0. т.е. получается, что определить синхронизация какого объекта происходит в указанном методе невозможно?
Да, у меня на AX2009 так же
Alt 08.07.2015, 09:20   #10  
Dolores ist offline
Dolores
Участник
Benutzerbild von Dolores
 
65 / 14 (1) ++
Registriert seit: 15.07.2010
Никому не удалось исключить таблицу из синхронизации в AX2009 ? Очень нужно!
Alt 08.07.2015, 09:46   #11  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Никогда не было такой задачи.
Вот индексы успешно прятали от аксапты. Возможно для табличек сработает такой же подход.
А вам это зачем ?
Alt 08.07.2015, 09:54   #12  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
4.004 / 3299 (118) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Вот тема была для индексов
Не удалять индексы при синхронизации
Alt 08.07.2015, 09:54   #13  
Dolores ist offline
Dolores
Участник
Benutzerbild von Dolores
 
65 / 14 (1) ++
Registriert seit: 15.07.2010
Всё та же задача - подменить содержимое View на уровне базы данных. Создано представление в рабочей базе, которое связано с таблицей в другой базе. В рабочей базе в SQL данная таблица удалена и при синхронизации в программе выдается ошибка по этой таблице. Поэтому нужно исключить её из синхронизации.
Alt 08.07.2015, 10:01   #14  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Подложите во View копию этой таблицы, просто что бы ошибки не было. А после все равно подмените текст View на свой.
Alt 08.07.2015, 10:16   #15  
Dolores ist offline
Dolores
Участник
Benutzerbild von Dolores
 
65 / 14 (1) ++
Registriert seit: 15.07.2010
А как в SQL подложить во View копию этой таблицы?
Alt 08.07.2015, 10:28   #16  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Зачем через SQL? Напрямую в приложении аксапты всё сделайте.
Или я не понимаю проблемы?

Допустим вам нужно в итоге получить View с определённым набором столбцов (откуда будут тянуться данные для этой View не важно). Я бы создал в этом же приложении таблицу с произвольным именем по структуре совпадающую с результирующим View (с таким же набором столбцов и соответствующими типами данных). Сделал бы на основе этой вспомогательной таблицы View с нужным именем.
Alt 08.07.2015, 10:35   #17  
AlexeyS ist offline
AlexeyS
Участник
 
404 / 339 (12) ++++++
Registriert seit: 15.06.2004
Ort: москва
Если нет необходимости в подмене view сразу после синхронизации, можно все сделать средствами самого sql - сделать периодическую операцию, которая делает drop view XXX / create view XXX раз в день. И Kuskov правильно сказал про копию таблицы - обязательно сделайте, просто чтобы не было сообщений об ошибке

Geändert von AlexeyS (08.07.2015 um 10:37 Uhr)
Alt 08.07.2015, 10:46   #18  
Dolores ist offline
Dolores
Участник
Benutzerbild von Dolores
 
65 / 14 (1) ++
Registriert seit: 15.07.2010
Еще раз на примере: есть 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.
Alt 08.07.2015, 10:57   #19  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.452 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von Dolores Beitrag anzeigen
Но при синхронизации таблиц в приложении Test возникнет ошибка, потому что мы удалили таблицу в базе Test в SQL.
А для чего мы её удалили?
Alt 08.07.2015, 10:59   #20  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2499 (89) +++++++++
Registriert seit: 20.08.2005
Потому что вьюха в сиквеле для Аксапты подменяет реальную таблицу
Т.е. в АОТ вью нет, есть таблица

Меня не спрашивайте, почему так сделано)
__________________
Axapta v.3.0 sp5 kr2
This post has been rated by: S.Kuskov (2).
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
emeadaxsupport: AX Content: Using Power View with Dynamics AX Blog bot DAX Blogs 0 17.09.2013 01:12
DAX: Enabling Power View on Multidimensional Models for Microsoft Dynamics AX 2012 R2 Blog bot DAX Blogs 0 27.06.2013 06:16
dynamicsaxbi: Better together: Microsoft Dynamics AX 2012 R2 and SQL Server Power View Blog bot DAX Blogs 0 12.12.2012 13:11
Как реализовать Query или View на примере такого T-SQL запроса для OLAP? sao DAX: Программирование 9 07.10.2005 18:57
Подмена запроса формы запросом из АОТа Dubinski Serguei DAX: Программирование 2 03.06.2004 14:44

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 02:32 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.