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 27.12.2002, 14:17   #1  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: Dubai, UAE
? Как удалить DataSource из Query???
Опять вопрос знатокам Query в AXAPTA. Использую Query и Build-классы.

У меня есть DataSource в этом Query, который я бы хотел удалить. Как? Метод delete() не делает ничего!
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Alt 27.12.2002, 14:22   #2  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
Никак
Alt 27.12.2002, 14:49   #3  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Странный вопрос, Максим.

По определению, Query состоит из Datasource и методов.
Если удалить Datasource, то получится что угодно, но не Query.

Может ты хотел спросить как удалить таблицу из Query Datasource?
Alt 27.12.2002, 15:06   #4  
Wamr ist offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1.737 / 868 (32) +++++++
Registriert seit: 15.01.2002
Ort: Москва
Blog-Einträge: 7
mazzy, я думаю, имелось ввиду "Есть ли метод обратный addDataSource?"
This post has been rated by: jeky (1).
Alt 27.12.2002, 15:48   #5  
Axapta ist offline
Axapta
Участник
 
91 / 15 (1) ++
Registriert seit: 21.06.2002
Ort: Moscow
Можно только перестроить Query "с нуля", но уже без ненужного dataSource
Alt 27.12.2002, 18:21   #6  
Garic ist offline
Garic
NavAx
Benutzerbild von Garic
NavAx Club
 
393 / 63 (3) ++++
Registriert seit: 23.07.2002
Ort: Москва
Ещё пару вопросов на эту тему.

1.)Есть форма, в ней datasource. Можно ли как-то изменить dataSource.table()?
Что-то типа как в SysTableBrowser, но при уже запущенной форме.

2.)Можно ли удалять элементы из грида?
__________________
С уважением, Игорь Ласийчук.
Alt 30.12.2002, 15:36   #7  
kalex ist offline
kalex
Участник
 
132 / 20 (1) +++
Registriert seit: 18.05.2002
Ort: Москва
1.
В SysTableBrowser нельзя изменитиь таблицу во время выполнения.
Я пытался изменить dataSource.table() при запущенной форме, но у меня ничего не получиллось. Пришёл к выводу, что во время инициализации формы формируется структура полей Датасорса, которую потом нельзя изменить. Можно изменить таблицу до запуска формы.

2.
Колонки можно делать invisible :-)
Alt 30.12.2002, 16:02   #8  
Garic ist offline
Garic
NavAx
Benutzerbild von Garic
NavAx Club
 
393 / 63 (3) ++++
Registriert seit: 23.07.2002
Ort: Москва
1. При изменении dataSource.table() в query().dataSourceNo(1).table - остаётся прежней.
У меня тоже не получилось это сделать . После n-ного падания Аксапты сдался. А у rumpleteaser -а после подобных экспериментов исчез проект . Точнее проект-то остался, но вот зайти в него нельзя.

2. Если бы удалось реализовать п.1, то интересно бы было динамически формировать грид. Если просто колонки делать invisible их через некоторое время столько накопится...
__________________
С уважением, Игорь Ласийчук.
Alt 08.01.2003, 11:16   #9  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: Dubai, UAE
Zitat:
Изначально опубликовано Axapta
Можно только перестроить Query "с нуля", но уже без ненужного dataSource
Вот. Хотел до нового года выложить, но были проблемы с Инетом.

Любые замечания и предложения по исправлению ошибок принимаются и приветствуются.
Angehängte Dateien
Dateityp: xpo baqueryutils.xpo (4,9 KB, 386x aufgerufen)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
This post has been rated by: jasper (1).
Alt 31.08.2008, 23:27   #10  
rkorchagin ist offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Registriert seit: 26.09.2006
Работает отлично. Одно дополнение: после копирования linkCount() - добавил также копирование dynalinks в новый query.

X++:
        for (i = 1; i <= source.linkCount(); i++) {
            dest.addLink(source.link(i).field(), source.link(i).relatedField());
        }
//31.08.2008 DMV-ruk added dynalinks
        for (i = 1; i <= source.dynalinkCount(); i++) {
            dest.addDynalink(source.dynalink(i).field(), source.dynalink(i).cursor(),source.dynalink(i).dynamicField());
        }
Alt 31.08.2008, 23:47   #11  
glibs ist offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4.942 / 911 (40) +++++++
Registriert seit: 10.06.2002
Ort: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Мне, обычно, хватало

qbds.enabled(false);

Есть мнение, что капитальная перестройка query на лету может быть неоптимальным решением задачи.

А можно привести пример, для чего такое понадобилось?
__________________
С уважением,
glibs®
This post has been rated by: wef (1), Sergey Petrov (1).
Alt 01.09.2008, 11:07   #12  
rkorchagin ist offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Registriert seit: 26.09.2006
Zitat:
Zitat von glibs Beitrag anzeigen
А можно привести пример, для чего такое понадобилось?
надо на форме Customer -> Customer transactions - добавить фильтр по display методу - а точнее - сделать existJoin с CustInvoiceJour для определённого значения одного (самодельного) поля в CustInvoiceJour.

То есть когда пользователь вводит (выбирает) что нить в поле фильтра - то сразу к CustTrans в коде добавляется existJoin с CustInvoiveJour - и когда очищает поле фильтра - то CustInvoiceJour удаляется из query.

Когда я прямо в query на форме добавил CustInvoiceJour и пытался выставлять св-ва CustInvoiceJour_ds - то ничего не работало - а используя вышекпомянутый код удаления всё ОК.
Alt 01.09.2008, 11:13   #13  
rkorchagin ist offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Registriert seit: 26.09.2006
Zitat:
Zitat von glibs Beitrag anzeigen
qbds.enabled(false);

сейчас нет возможности проверить - может и точно не надо перестраивать query было
Alt 01.09.2008, 11:29   #14  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von rkorchagin Beitrag anzeigen
надо на форме Customer -> Customer transactions - добавить фильтр по display методу - а точнее - сделать existJoin с CustInvoiceJour для определённого значения одного (самодельного) поля в CustInvoiceJour.

То есть когда пользователь вводит (выбирает) что нить в поле фильтра - то сразу к CustTrans в коде добавляется existJoin с CustInvoiveJour - и когда очищает поле фильтра - то CustInvoiceJour удаляется из query.

Когда я прямо в query на форме добавил CustInvoiceJour и пытался выставлять св-ва CustInvoiceJour_ds - то ничего не работало - а используя вышекпомянутый код удаления всё ОК.
Это называется нисколько не думать вперед.
Далее будет следующая задача от пользователей - показать как образовалась сумма в dysplay-поле. В результате вы все равно будете делать кнопку, которая будет открывать форму с CustInvoiceJour.

Дык, вместо того, чтобы по-программистски извращаться и издеваться над пользователями, стоило чуток подумать: людям не нужны "фильтры", людям не нужны датасорсы и людям не нужно удаление датасорсов (они даже слов то таких не знают).

ЛЮДЯМ нужно найти какую-то информацию, чтобы работать с ней (искать, смотреть, печатать).

Что вы сейчас сделали? Вы изнасиловали систему в особо жестокой форме, при этом вы еще НЕ решили задачу ваших пользователей. Вы всего лишь дали поиск по дисплей-полю. Опять же таки - пользователи даже слов то таких не знают. А как будут работать пользователи дальше?

Обратите внимание на постановку задачи - постановка сделана сугубо в программистских терминах. Если перевести постановку на человеческий язык, то пользователям нужно дать возможность искать что-то в накладных. Так?

Причем это что-то вы даете ему из проводок. Зачем так? Может быть дать возможность СРАЗУ открывать накладные (это уже есть в стандартном функционале), каким-то образом фильтровать накладные, а затем переходить к проводкам из накладных (это тоже есть в стандартном функционале).

Может быть я опять чего не догоняю.
Но снова вижу типичный пример совершенно тупого и бесполезного кодинга. Который является результатом соверенно тупой постановки задачи.

(стопудово в оправдание мне будут говорить, что форма CustTrans сильно кастомизирована, на эту форму навешано куча кастомизированного функционала и куча фильтров, в результате эту можно открыть только из клиента, а из остальных мест она не вызывается, а также что пользователи обучены ходить только так... блин, грустно... Поздравляю всех с днем знаний.)
__________________
полезное на axForum, github, vk, coub.
This post has been rated by: oip (4).
Alt 01.09.2008, 11:48   #15  
rkorchagin ist offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Registriert seit: 26.09.2006
Zitat:
Zitat von mazzy Beitrag anzeigen
стопудово в оправдание
там сделан самодельный модуль по логистике - он связан с CustInvoiceJour и надо фильтровать какие записи CustTrans уже связаны с этим модулем через CustInvoiceJour - чтобы потом привязать остальные


Постановка задачи была: "нам нужен фильтр по этому полю" - так что в программистких терминах определил её я сам.
Alt 01.09.2008, 11:52   #16  
mazzy ist offline
mazzy
Участник
Benutzerbild von mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29.472 / 4494 (208) ++++++++++
Registriert seit: 29.11.2001
Ort: Москва
Blog-Einträge: 10
Zitat:
Zitat von rkorchagin Beitrag anzeigen
там сделан самодельный модуль по логистике
ясно

Zitat:
Zitat von rkorchagin Beitrag anzeigen
Постановка задачи была: "нам нужен фильтр по этому полю"
Это еще не на человеческом языке.
Пользователям то что нужно?
__________________
полезное на axForum, github, vk, coub.
Alt 01.09.2008, 12:01   #17  
rkorchagin ist offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Registriert seit: 26.09.2006
Zitat:
Zitat von mazzy Beitrag anzeigen
Пользователям то что нужно?
задание ставил консультант - что надо пользователям - не знаю - хотят фильтр!

И раз название темы всё таки "Как удалить datasource из Query"
Привожу полный работающий код ещё раз:

X++:
public static Query deleteDataSource(Query query, QueryBuildDataSource dataSource)
{
    Query                   result;
    QueryBuildDataSource    dSource;
    int     idx;

    boolean isEqual(QueryBuildDataSource A, QueryBuildDataSource B) {
        return (A.name() == B.name()) && (A.table() == B.table());
    }

    QueryBuildDataSource copyDataSource(QueryBuildDataSource dest, QueryBuildDataSource source) {
        QueryBuildRange         range;
        int                     i;

        for (i = 1; i <= source.linkCount(); i++) {
            dest.addLink(source.link(i).field(), source.link(i).relatedField());
        }

//31.08.2008 DMV-ruk added dynalinks
        for (i = 1; i <= source.dynalinkCount(); i++) {
            dest.addDynalink(source.dynalink(i).field(), source.dynalink(i).cursor(),source.dynalink(i).dynamicField());
        }

        for (i = 1; i <= source.rangeCount(); i++) {
            range = dest.addRange(source.range(i).field());
            range.value(source.range(i).value());
            range.name(source.range(i).name());
            range.status(source.range(i).status());
            range.label(source.range(i).label());
            range.enabled(source.range(i).enabled());
        }
        for (i = 1; i <= source.sortFieldCount(); i++) {
            dest.addSortField(source.sortField(i), source.sortDirection(i));
        }
        for (i = 1; i <= source.sortIndexCount(); i++) {
            dest.addSortIndex(source.sortIndex(i));
        }
        dest.fields().dynamic(source.fields().dynamic());
        if (!dest.fields().dynamic()) {
            dest.fields().clearFieldList();
            for (i = 1; i <= source.fields().fieldCount(); i++) {
                dest.fields().addField(source.fields().field(i), source.fields().fieldKind(i));
            }
        }
        return dest;
    }

    void delete(QueryBuildDataSource topOrig, QueryBuildDataSource topRes) {
        int i;
        for (i = 1; i <= topOrig.childDataSourceCount(); i++) {
            if (!isEqual(topOrig.childDataSourceNo(i), dataSource)) {
                delete(topOrig.childDataSourceNo(i),
                       copyDataSource(topRes.addDataSource(topOrig.childDataSourceNo(i).table(), topOrig.childDataSourceNo(i).name()),
                                      topOrig.childDataSourceNo(i)));
            }
        }
    }

    result = new Query();

    for (idx = 1; idx <= query.dataSourceCount(); idx++) {
        dSource = query.dataSourceNo(idx);
        if (dSource.level() == 1) {
            if (!(isEqual(dSource, dataSource))) {
                delete(query.dataSourceNo(idx),
                       copyDataSource(result.addDataSource(query.dataSourceNo(idx).table(), query.dataSourceNo(idx).name()),
                                      query.dataSourceNo(idx)));
            }
        }
    }


    return result;
}
This post has been rated by: mazzy (1).
Alt 01.09.2008, 14:00   #18  
Maxim Gorbunov ist offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2.483 / 646 (26) +++++++
Registriert seit: 27.11.2001
Ort: Dubai, UAE
Безотносительно к первоначальной теме топика: осмелюсь предположить, что юзерам все же вряд ли нужен список клиентов, имеющих накладные в определенном статусе. Скорее всего, им все же нужен список этих накладных
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Stichworte
query

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Как можно использовать join Query как DataSource для формы ? AndrianG DAX: Программирование 2 10.03.2009 10:25
jinx: Zugriff auf die Query, QueryRun und DataSource in einer Form Blog bot DAX auf Deutsch 0 14.04.2008 18:05
axcoder: Tabax 0.2.14: View query of the active datasource Blog bot DAX Blogs 2 02.02.2007 12:10
How do I delete a datasource from a query ? (by stelsig) Maxim Gorbunov DAX in English 0 22.03.2006 12:21
query->DataSource->grid ald DAX: Программирование 2 06.02.2004 09:24

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 21:03 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.