AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.02.2003, 12:07   #1  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Сохранение запроса
Кто-нибудь пробовал сохранять Query в поле таблицы? Использование методов query.pack() и query.unpack() не устраивает, т.к. они сохраняют только один датасорс (то есть если мы при интерактивном редактировании запроса добавим дочерний источник данных, он сохранен не будет). Ппоробовал воспользоваться классом SysQueryEdit, но он тоже не очень правильно работает с дочерними датасорсами...
Старый 26.02.2003, 12:30   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
Использование методов query.pack() и query.unpack() не устраивает, т.к. они сохраняют только один датасорс (то есть если мы при интерактивном редактировании запроса добавим дочерний источник данных, он сохранен не будет)
А можно полюбопытствовать как изменял, сохранял, проверял?
Старый 26.02.2003, 12:33   #3  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
может я не того dataSource принимаю за дочернего, но у меня они сохраняются. Другая проблемма, что я не знаю способа удалить их оттуда
__________________
С уважением, Вячеслав.
Старый 26.02.2003, 12:36   #4  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Простых способов удаления нет. Где-то на форуме был самописный классик выполняющий данную операцию.
Старый 26.02.2003, 12:44   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
1. Зачем?

2. Чем не устраивают статические query, а в таблице хранить имена этих статических query?

3. Чем не устраивает динамическое создание Query на лету?

4. Думал о том, что сохраненный в таблице Query может быть восстановлен на другой конфигурации, где таких таблиц и полей нет? Будешь делать обработчик ошибок? В какой момент после чтения из таблицы ты собираешься включать обработчик ошибок? Что он будет делать? Опиши хотя бы на верхнем уровне? Он будет проверять идентификаторы таблиц и полей?

5. Повторю вопрос: чем не устраивает динамическое создание Query на лету?

6. И снова повторю вопрос: Ты все еще уверен, что не хочешь использовать статические Query?
Старый 26.02.2003, 12:53   #6  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Изначально опубликовано Wamr
Простых способов удаления нет. Где-то на форуме был самописный классик выполняющий данную операцию.
Я немного слукавил когда сказал что не знаю способов. Администрирование/База../SQL/SysLastValue и там удалять строку для данного объекта.
А вот простых (несамописных) способов действительно кажется нет
__________________
С уважением, Вячеслав.
Старый 26.02.2003, 12:54   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Я вот так сохранял. Работает.

PHP код:
    xsysLastValue::saveLast(this);
   
queryFilter inventTable_ds.queryRun(); 
Если я конечно правильно понял вопрос.
Старый 26.02.2003, 12:55   #8  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Использование методов query.pack() и query.unpack() не устраивает
Прочита внимательнее - сам все понял. Прошу прощения.
Старый 26.02.2003, 13:01   #9  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
А можно полюбопытствовать как изменял, сохранял, проверял?
Пожалуйста:
PHP код:
    if (SavedQuery.Query)
    {
        
q           = new Query(SavedQuery.Query);
    }
    else
    {
        
q           = new Query();
        
q.addDataSource(TbaleId);
    }

    
qr              = new QueryRun(q);

    if (
qr.prompt())
    {
        
SavedQuery.Query   q.pack(); //как вариант qr.pack(), тоже не работает
        
SavedQuery.update();
    } 
SavedQuery - таблица, куда надо сохранять запрос, поле Query - контейнер.

Честно говоря, не понимаю, как получилось сохранить дочерний датасорс, который был добавлен интерактивно. В хелпе к методу Query.pack() так и сказано, что динамические ссылки не сохраняются...

2 mazzy. Нужно это для того, чтобы генерить настраиваемые отчеты (не стандартные репорты, а, скажем, web-отчеты). Сначала настраивается таблица, откуда должны браться данные, потом для этой таблицы настраиваются фильтры, то есть Query. Причем часто кроме фильтров на поля собственно таблицы необходимо наложить ограничения на связанные тыблицы (элементарный пример - получение суммарной стоимости запасов на каком-либо складе, как известно, для этого приходится связывать InventSum и InventDim и делать фильтр по InventDim.InventLocation).

Статические запросы не устраивают тем, что их сначала надо делать в AOD, а хотелось бы, чтобы настройка осуществлялась без этого.
Старый 26.02.2003, 13:03   #10  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Цитата:
SavedQuery.Query = q.pack(); //как вариант qr.pack(), тоже не работает
Остался 3ий вариант:
SavedQuery.Query = qr.query().pack();

"динамические ссылки" - это dynalink... точно не сохраняются
Старый 26.02.2003, 13:13   #11  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
Остался 3ий вариант:
SavedQuery.Query = qr.query().pack();
Не, dynalinks не идут .
Старый 26.02.2003, 13:24   #12  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
тогда я не понял.

о чем вопрос то?
1. о сохранени параметров запроса (LastValue)
2. о том, чтобы сохранить где-нибудь сам запрос, его структуру?

если 2 вариант, то думаю стоит посмотреть на мастер отчетов.
он и генерит динамически и сохраняет. Причем сохраняет даже в АОТе.
Нужно выкинуть из него интерфейс и оставить ядро.

ИХМО, неправильный это подход.
ИХМО, от незнания.
Количество вариантов запросов конечно и не так уж и велико. Измеряется десятками.
ИХМО, проще предварительно подумать что нужно и сделать запросы статическими.
ИХМО, это на порядок уменьшит ваши общие трудозатраты на эту задачу.

Т.е. ИХМО не стоит делать универсальную хренотень, которая будет работать с всего лишь с десятками объектов. Она не окупится на таком небольшом количестве. Стоит просто перечислить эти несколько десятков запросов. Сильно сэкономите на разработке хренотени

С другой стороны разработка подобной хренотени сильно поднимет квалификацию ваших программистов. Но это уже сами выбирайте что вам больше нужно.
Старый 26.02.2003, 13:34   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Пришлось писать пример... вроде работает
или я не уловил идею? dynalinks в данном контексте вообще не существует
PHP код:
static void Job_Q2con(Args _args)
{
    
container   con;
    
Query       q;
    
QueryRun    qr;
    ;

    
= new Query();
    
q.addDataSource(tableNum(InventTable));

    
con q.pack();
    
info(q.exportXML());

    
qr = new QueryRun(q);
    
qr.prompt();

    
con qr.query().pack();
    
= new Query(con);
    
info(q.exportXML());

Старый 26.02.2003, 13:42   #14  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
Т.е. ИХМО не стоит делать универсальную хренотень, которая будет работать с всего лишь с десятками объектов. Она не окупится на таком небольшом количестве. Стоит просто перечислить эти несколько десятков запросов. Сильно сэкономите на разработке хренотени
В том-то и дело, что совсем не факт, что объектов будет десяток. И потом, даже если и их и немного, то при появлении каждого нового придется лезть в AOD, создавать новый Query, потом его настраивать... К тому же сами Rangе'и придется все равно хранить в настроечной таблице, т.е. все равно надо что-то придумывать. Зачем, когда можно сохранить готовый Query, а потом его просто использовать? Или ты предлагаешь для каждого фильтра создавать свой Query? ИМХО очень нерационально.

Цитата:
о чем вопрос то?
1. о сохранени параметров запроса (LastValue)
2. о том, чтобы сохранить где-нибудь сам запрос, его структуру?
Да, в сохранении именно параметров запроса. Но не просто всех ренджей и сортировки. А еще и всех присодиненных источниках данных, которые, как известно в форме редактирования добавляются через контекстное меню (сначала выбирается тип связи 1:n или n:1, поотм присоединяемая таблица).

2 Wamr. Dynalinks добавляются не в коде, а интерактивно в форме редактирования запроса. Они-то и не сохраняются.
Старый 26.02.2003, 13:55   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Peter Savintsev
В том-то и дело, что совсем не факт, что объектов будет десяток.
т.е. вы еще сами не знаете сколько их будет и какие будут запросы?
даже с точностью +-10?
тогда почти уверен, что вы получите больший эффект если потратите усилия на то чтобы определится что вам нужно и узнать в каких рамках вы будете работать.

Скорее всего ваша проблема в том, что разные менеджеры не договорились о результате, который хотят получить. И ставят задачу вам в надежде, что вы предоставите им волшебную кнопку.

Серебрянной пули нет. Как и волшебной кнопки, впрочем

Цитата:
Изначально опубликовано Peter Savintsev
Или ты предлагаешь для каждого фильтра создавать свой Query? ИМХО очень нерационально.
Для каждого фильтра, это конечно перебор.
НО в Аксапте есть стандартные средства как задать в статический Query диапазон.
Может стоит разобраться со статическими Query?

И почему нерационально, если Query в АОТе для этого и предназначены - хранить запросы. Почему выбран именно путь программирования и вы решили тратить свои ресурсы на замену стандартного механизма вашим?

Может дело в том, что вы просто сами не знаете что будет нужно?

Цитата:
Изначально опубликовано Peter Savintsev
Да, в сохранении именно параметров запроса. Но не просто всех ренджей и сортировки. А еще и всех присодиненных источниках данных, которые, как известно в форме редактирования добавляются через контекстное меню (сначала выбирается тип связи 1:n или n:1, поотм присоединяемая таблица).
Хм... еще вопрос.
в форме редактирования диапазонов (Ctrl+F3, форма SysQuery) можно сохранить запрос с диапазонами. Насколько я помню там сохраняется все в том числе добавленные таблицы. Чем не устраивает?
Старый 26.02.2003, 14:02   #16  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
в форме редактирования диапазонов (Ctrl+F3, форма SysQuery) можно сохранить запрос с диапазонами. Насколько я помню там сохраняется все в том числе добавленные таблицы. Чем не устраивает?
Устраивает всем кроме того, что сохраняется это дело в SysLastValue, а не в моем поле. Использовать это дело нельзя, т.к. будут разные query для одних и тех же таблиц, а в SysLastValue сохранится только один.
Старый 26.02.2003, 15:02   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Хм... сохранять можно под разными именами.
и не только последнее значение.
Старый 26.02.2003, 17:58   #18  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Dynalinks
Цитата:
... всех присодиненных источниках данных, которые, как известно в форме редактирования добавляются через контекстное меню (сначала выбирается тип связи 1:n или n:1, поотм присоединяемая таблица).
Так вот, это НЕ Dynalinks, а добавление новых dataSource в Query.
НЕ существует визуального средства добавления dynalink-ов.

Dynalink - это связь некоторого DS в Query с внешним курсором, а не с другим DS в том же Query
Старый 27.02.2003, 04:30   #19  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
Так вот, это НЕ Dynalinks, а добавление новых dataSource в Query.
НЕ существует визуального средства добавления dynalink-ов.
Действительно, в терминологии я немного запутался. Но суть не менятеся. Добавленные датасорсы не сохраняются. В том джобе, который ты сделал, добавленный датасорс появляется только благодаря тому, что query автоматически сохраняется в SysLastValue. Чтобы этого избежать, приходится делать так:

PHP код:
    qr = new QueryRun(q);
    
qr.saveUserSetup(false); //это свойство запрещает сохранение запроса в SysLastValue
    
qr.prompt(); 
В этом случае все ренджи пакуются, а добавленные датасорсы - нет.

Использование SysLastValue не подходит еще и потому, что там сохраняются объекты индивидуально для каждого пользователя, что не удовлетворяет постановке задачи.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подготовка запроса(ламерские вопросы продолжаются) HorrR DAX: Программирование 4 08.07.2008 13:23
Изменить план выполнения запроса Sequel DAX: Администрирование 2 29.05.2008 15:46
Оптимизация запроса oleg_e DAX: Программирование 16 11.01.2008 10:22
Сохранение параметров отчёта Paul_ST DAX: Программирование 10 03.08.2006 11:15
Ускорение выполнения запроса Oracle + MS Axapta Горбунов Дмитрий DAX: Программирование 17 15.11.2005 18:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:50.