Показать сообщение отдельно
Старый 18.10.2021, 13:10   #1  
oleggy is offline
oleggy
Участник
 
256 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
вопрос про RunBaseBatch::queryBuild при showQueryValues = true
Привет всем.
Подскажите имеется такой класс:

X++:
class MyClassRunBaseBatch extends RunBaseBatch
{
	...
	QueryRun        queryRun;
	...
}

...

public boolean init()
{
    return true;
}

public void initParmDefault()
{
    super();

    this.queryBuild(true);
}

public Object dialog()
{
    DialogRunbase       dialog = super();
    ;

    return dialog;
}

protected void queryBuild(boolean _reWrite)
{
    Query                   query = new Query();
    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr;
    ;

    if (!queryRun || _reWrite)
    {
        qbds = query.addDataSource(tablenum(MyTable));

        qbr = qbds.addRange(fieldnum(Table1, Field1)); 
        qbr.value(sysQuery::value('Value1'));

        qbr = qbds.addRange(fieldnum(Table1, Field1)); 
        qbr.value(sysQuery::valueNot('Value2'));

        qbr = qbds.addRange(fieldnum(Table1, Field2));
        qbr.value(sysQuery::valueNotEmptyString());

        qbr = qbds.addRange(fieldnum(Table1, Field3));
        qbr.value(queryValue(NoYes::No));

        qbr = qbds.addRange(fieldnum(Table1, Field4));
        qbr.value(queryValue(MyEnum::Enum1));

        queryRun = new SysQueryRun(query);
    }
}	

public QueryRun queryRun()
{
    return queryRun;
}

public boolean showQueryValues()
{
    return true;
}

void new()
{
    super();
}

static void main(Args args)
{
    MyClassRunBaseBatch myClassRunBaseBatch;
    ;

    myClassRunBaseBatch = MyClassRunBaseBatch ::construct();

    if (myClassRunBaseBatch.prompt())
        myClassRunBaseBatch.run();
}
...

// ну и остальные методы ...
public void run()
public boolean validate()
server static MyClassRunBaseBatch construct()
static ClassDescription description()
static void main(Args args)


Вопрос:
1. Почему при вызове диалогового окна отображаются фильтры только полей Field1 и Field4 ?
Хотя по логике должны отображается все поля для которых я задаю фильтры в методе queryBuild. Т.е. должно быть отображено 4 фильтра: Field1 / Field2 / Field3 / Field4

2. Как сделать так что бы в окне диалогового окна (когда showQueryValues возвращает true) были заданы значение установленные как раз в методе queryBuild ? У меня почему то там выводит последнее сохраненное значение но для полей Field1 и Field4 (см. вопрос 1)

3. Почему initParmDefault не вызывается? Например в стоковом классе APMUpdateObjectLocation вот такой стек вызовов:
Цитата:
[s] \Classes\APMUpdateObjectLocation\queryBuild 6
[s] \Classes\APMUpdateObjectLocation\initParmDefault 5
[s] \Classes\xSysLastValue\getLast 23
[s] \Classes\RunBase\getLast 9
[s] \Classes\RunBaseBatch\getLast 12
[s] \Classes\RunBase\promptPrim 9
[s] \Classes\RunBase\prompt 12
[s] \Classes\RunBaseBatch\prompt 32
[s] \Classes\APMUpdateObjectLocation\main 8

Похоже я что то упустил раз у меня не происходит этого вызова.

Последний раз редактировалось oleggy; 18.10.2021 в 13:27.