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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2008, 11:29   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от rkorchagin Посмотреть сообщение
надо на форме Customer -> Customer transactions - добавить фильтр по display методу - а точнее - сделать existJoin с CustInvoiceJour для определённого значения одного (самодельного) поля в CustInvoiceJour.

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

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

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

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

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

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

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

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

(стопудово в оправдание мне будут говорить, что форма CustTrans сильно кастомизирована, на эту форму навешано куча кастомизированного функционала и куча фильтров, в результате эту можно открыть только из клиента, а из остальных мест она не вызывается, а также что пользователи обучены ходить только так... блин, грустно... Поздравляю всех с днем знаний.)
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: oip (4).
Старый 01.09.2008, 11:48   #2  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Цитата:
Сообщение от mazzy Посмотреть сообщение
стопудово в оправдание
там сделан самодельный модуль по логистике - он связан с CustInvoiceJour и надо фильтровать какие записи CustTrans уже связаны с этим модулем через CustInvoiceJour - чтобы потом привязать остальные


Постановка задачи была: "нам нужен фильтр по этому полю" - так что в программистких терминах определил её я сам.
Старый 01.09.2008, 11:52   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от rkorchagin Посмотреть сообщение
там сделан самодельный модуль по логистике
ясно

Цитата:
Сообщение от rkorchagin Посмотреть сообщение
Постановка задачи была: "нам нужен фильтр по этому полю"
Это еще не на человеческом языке.
Пользователям то что нужно?
__________________
полезное на axForum, github, vk, coub.
Старый 01.09.2008, 12:01   #4  
rkorchagin is offline
rkorchagin
Участник
 
81 / 69 (3) ++++
Регистрация: 26.09.2006
Цитата:
Сообщение от mazzy Посмотреть сообщение
Пользователям то что нужно?
задание ставил консультант - что надо пользователям - не знаю - хотят фильтр!

И раз название темы всё таки "Как удалить 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;
}
За это сообщение автора поблагодарили: mazzy (1).
Теги
query

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как можно использовать 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
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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