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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.03.2004, 11:14   #1  
ArturK is offline
ArturK
Участник
 
81 / 10 (1) +
Регистрация: 13.08.2003
? Проблемы с повторной фильтрацией DS
Мне пришлось реализовывать задачу фильрации Закупок по строкам закупок в форме Закупка.

Для этого я разместил на форме checkBox.
И если я ставлю галку, то выполнялся ниженаписанный запрос,
а если ее нет, то не выполнялся.

Я написал в методе checkBox следующее
PHP код:
    QueryBuildDataSource    qbds;

    
super();

    
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));

    if (
cb.value())
    {
        
posted qbdsPurchLine.addRange(fieldNum(PurchLineRemainPurchPhysical));
        
qbds.addLink(fieldNum(PurchLinePurchId), fieldNum(PurchTablePurchId));
        
qbds.joinMode(JoinMode::EXISTSJOIN);
    } 
Первый раз ставлю галку, то что нужно отбирается.
Убираю - и появляется все.

Но вот во второй раз и все последующие, когда я опять ставлю галку, уже ничего не исчезает и запрос этот уже не строиться.

Т.е. через Info(PurchTable_DS.query().dataSourceNo(1).tostring());
я вижу что у меня в запросе только PurchTable и все!

Почему и как это исправить?
Старый 24.03.2004, 13:01   #2  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
При нажатии на галку ты каждый раз добавляешь новый источник, а удалять старые кто будет?
Старый 24.03.2004, 14:11   #3  
ArturK is offline
ArturK
Участник
 
81 / 10 (1) +
Регистрация: 13.08.2003
Цитата:
Изначально опубликовано dn
При нажатии на галку ты каждый раз добавляешь новый источник, а удалять старые кто будет?
Я выполняю следующее, когда снимаю галку

PHP код:

qbds 
PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));

if (
cb.value())
    {
        
posted qbdsPurchLine.addRange(fieldNum(PurchLineRemainPurchPhysical));
        
qbds.addLink(fieldNum(PurchLinePurchId), fieldNum(PurchTablePurchId));
        
qbds.joinMode(JoinMode::EXISTSJOIN);
    }
else
    {
        
qbds.clearLinks();
        
qbds.clearRanges();
    } 
Но не помогает,
подскажите, пожалуйста, как нужно правильно сделать?
Старый 24.03.2004, 14:33   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Это не поможет! создай новый qbds с теми же параметрами.
Старый 24.03.2004, 14:59   #5  
ArturK is offline
ArturK
Участник
 
81 / 10 (1) +
Регистрация: 13.08.2003
Цитата:
Изначально опубликовано George Nordic
Это не поможет! создай новый qbds с теми же параметрами.
Извините, я не совсем понимаю как это сделать, не моглибы вы примерчиком пояснить.
Старый 24.03.2004, 17:23   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
попробуй:
PHP код:
else
{
     
qbds PurchTable_DS.query();

Старый 24.03.2004, 17:46   #7  
Fedr Kuzmich is offline
Fedr Kuzmich
Участник
 
19 / 10 (1) +
Регистрация: 29.02.2004
Адрес: Москва
Когда работаешь с Query, очень полезно написать такой кусок кода:
PHP код:
info(PurchTable_DS.query().exportXML()); 
Смотришь на XML, который сформировался в Query, и много становится прозрачным.
Старый 24.03.2004, 17:47   #8  
ArturK is offline
ArturK
Участник
 
81 / 10 (1) +
Регистрация: 13.08.2003
Нет, к сожалению, не помогает ...

Я через init() вижу следующие запросы

Первый раз поставил галку

SELECT * FROM PurchTable USING INDEX PurchIdx EXISTS JOIN * FROM PurchLine WHERE PurchTable.PurchId = PurchLine.PurchId

все как надо

Первый раз снял галку

SELECT * FROM PurchTable USING INDEX PurchIdx

Второй раз поставил галку

SELECT * FROM PurchTable USING INDEX PurchIdx

т.е. со второго раза у меня не создается моя связка ...

Никак не пойму почему?
Старый 24.03.2004, 18:19   #9  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Имелось в виду:

PHP код:
else
{
      
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));

to Fedr Kuzmich:
а лучше так: query.dataSourceNo(1).toString;
то же самое только без лишнего мусора.
Старый 24.03.2004, 18:30   #10  
ArturK is offline
ArturK
Участник
 
81 / 10 (1) +
Регистрация: 13.08.2003
Использование exportXML()
показало, что у меня запросы добавляются друг за дружкой, а не подменяются.

Т.е. как мне убирать предыдущий запрос?

PHP код:
   else
    {
     
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));
    } 
Подобная запись этого не делает ...
Старый 24.03.2004, 18:43   #11  
Fedr Kuzmich is offline
Fedr Kuzmich
Участник
 
19 / 10 (1) +
Регистрация: 29.02.2004
Адрес: Москва
просто не стоит каждый раз при нажатии добавлять ЕЩЁ ОДИН DataSource, найди старый и сделай с ним, что душе угодно:

PHP код:

qbds 
PurchTable_DS.query().dataSourceTable(tableNum(PurchLine));
if (!
qbds)
   
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine)); 
Старый 24.03.2004, 18:45   #12  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Черт. сам перемудрил и Вас запутал. Мы как раз от этой строчки уйти пытались
Попробуйте создать переменную - query и в нее при начальном ините
query = new Query(PurchTable_DS.query());

тогда в
PHP код:
else
{
    
PurchTable_DS.query = new Query(query);
    
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));

она будет восстанавливаться с исходной.
Может, есть и проще способ...
Старый 24.03.2004, 18:47   #13  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Изначально опубликовано ArturK
Я выполняю следующее, когда снимаю галку
PHP код:
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine)); 
Иными словами, при каждом нажатии галки ты добавляешь новый дочерний источник,
а это нужно делать только один раз при первом нажатии (или вообще заранее).
Старый 24.03.2004, 18:57   #14  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Да, так все и происходит.
Может, в ините добавить
qbds = PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));

тогда код будет выглядеть так:

PHP код:
if( ... )
{
        
qbds.addLink(fieldNum(PurchLinePurchId), fieldNum(PurchTablePurchId));
        
qbds.joinMode(JoinMode::EXISTSJOIN);
}
else
{
        
qbds.clearLinks();
        
qbds.clearRanges();

И переменная лишняя не нужна!
Старый 25.03.2004, 06:47   #15  
Borisov Nikolai is offline
Borisov Nikolai
Участник
 
2 / 10 (1) +
Регистрация: 30.11.2002
PHP код:
public boolean modified()
{
    
boolean ret;

    
QueryBuildDataSource    qbds;
    
QueryBuildRange         posted;
    ;

    
ret super();

    
qbds PurchTable_DS.query().dataSourceTable(tableNum(PurchLine));

    if (! 
qbds)
        
qbds PurchTable_DS.query().dataSourceNo(1).addDataSource(tableNum(PurchLine));

    if (
this.value())
    {
        
posted qbds.addRange(fieldNum(PurchLineRemainPurchPhysical));
        
qbds.addLink(fieldNum(PurchLinePurchId), fieldNum(PurchTablePurchId));
        
qbds.joinMode(JoinMode::EXISTSJOIN);
    }
    else
    {
        
qbds.clearLinks();
        
qbds.clearRanges();
    }

    
Info(PurchTable_DS.query().dataSourceNo(1).tostring());

    return 
ret;

Старый 25.03.2004, 09:57   #16  
ArturK is offline
ArturK
Участник
 
81 / 10 (1) +
Регистрация: 13.08.2003
Спасибо всем за помощь!

У меня все заработало так как надо...
Старый 25.03.2004, 10:24   #17  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
А теперь попробуй наложить фильтр по клиенту, а потом поставь галочку (фильтр по строкам)
Старый 25.03.2004, 10:47   #18  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Может заодно и меня кто просветит.

Я тут разбираю аналогичную ситуацию (динамическое изменение DataSource), так вот в разбираемом мной коде предпочитают разнести правку Query и его замену в DataSource, т.е. логика примерно следующая:
PHP код:
public boolean modified()
{
    
QueryBuildDataSource    qbdsSalesTable;
    ;
    
ret super();

    if (...)
    {
        
qbdsSalesTable  SalesLine_qr.query().dataSourceTable(tablenum(SalesTable));
        (...)

        
salesLine_ds.query(SalesLine_qr.query());
        
salesLine_ds.executeQuery();
        
element.redraw();
    }
    Return 
ret;

В чем преимущество такого "опосредованного" исправления DataSource перед прямой правкой?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Веделенные записи из связанного DS Wamr DAX: Программирование 3 30.01.2018 13:37
Проблемы с Exists Join Logger DAX: Программирование 28 28.04.2010 02:54
Привязка фильтров от одного DS к другому Андрей К. DAX: Программирование 10 24.08.2007 14:57
Вызов метода modified DS Mike2005 DAX: Программирование 1 17.10.2006 13:45
Проблемы работы ERP в многофилиальной и территориально разнесённой компании СНГ. SlavaK DAX: Прочие вопросы 18 02.03.2004 15:25

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

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

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