среда, 24 июля 2013 г.

Axapta. Задание диапазона у DataSource

Существует как минимум два решения для этой проблемы. Нужное следует подбирать исходя из задачи.

1) Использование переменной для Range;
2) Обращение на прямую к DataSource.

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

Второй вариант удобно использовать, если вы будете менять Range. Например, если вы хотите организовать возможность фильтрации датасорса.

Использование переменной Range

Для начала заведем переменную типа QueryBuildRange, которая будет отвечать за диапазон конкретного поля в датасорсе:

QueryBuildRange qbRange;

Ее нужно инициализировать следующим образом:

qbRange = 
(YourTable_ds.query().dataSourceTable(tableNum("YourTable")).findRange(fieldNum(YourTable, YourField)));
if  (qbRange == null) 
{
    qbRange = 
    YourTable_ds.query().dataSourceTable(tableNum("YourTable")).addRange(fieldNum(YourTable, YourField));
}

Затем нужно задать список значений нашему Range:

qbRange.value(strFmt('%1,%2,%3,%4,%5,%6',
                    queryValue(value1),
                    queryValue(value2),
                    queryValue(value3),
                    queryValue(value4),
                    queryValue(value5),
                    queryValue(value6)));

(Тип переменных value% должен совпадать с типом поля в таблице)

И  выполнить executeQuery у нашего DataSource.

Обращение на прямую к DataSource


В перегруженном executeQuery вашего DataSource сделайте примерно такое:

str s = strFmt('(RangeField != YourTable.OtherField)');
    this.query().dataSourceTable(tableNum(YourTable)).addRange(fieldNum(YourTable,RangeField)).value(s);
super();

Комментариев нет:

Отправить комментарий