08.02.2008, 17:41 | #1 |
MCTS
|
SYS_ExpressionQueryBuilder
Вопрос к belugin
А не пополнить ли класс SYS_ExpressionQueryBuilder методом formula(), позволяющим вставлять арифметические выражения в запрос X++: SYS_ExpressionDataSourceBuilder formula(str _formula) { ; dataSource.addRange( fieldname2id(dataSource.table(), "RecId") ).value('('+_formula+'))'); return this; } X++: // Created by GRR on 07.02.2008 for SYS_ExpressionQueryBuilder #localMacro.const strFmt('%1 * RecId/RecId') #endmacro Например X++: #macrolib.SYS_ExpressionQueryBuilder ; new DEV_QueryBrowser().run( SYS_ExpressionQueryBuilder::construct() .dataSource(tableNum(Table1)) .formula( strfmt("%1 + %2*10 - %3 - %4 == %5", //f2 + 10*f4 - f5 - 3 == 0 fieldStr(Table1, Field2), fieldStr(Table1, Field4), fieldStr(Table1, Field5), #const(3), #const(0)) ) .run() .query());
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
|
За это сообщение автора поблагодарили: belugin (5). |
08.02.2008, 17:54 | #2 |
Участник
|
Можно чуть покороче
X++: return this.matches(fieldname2id(dataSource.table(), "RecId") ), '('+_formula+'))'); |
|
08.02.2008, 17:55 | #3 |
Участник
|
Поправьте кто-нибудь аксаптапедию на эту тему.
|
|
08.02.2008, 18:02 | #4 |
MCTS
|
Очепятка
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
08.02.2008, 18:10 | #5 |
Участник
|
еще я бы вынес код из макроса в статический метод, а макрос сделал бы алиасом.
еще можно сделать алиас для конструктора (кстати там есть еще фабричный метод для создания сразу датасурса) |
|
08.02.2008, 18:25 | #6 |
MCTS
|
Можно было и статическим методом сделать. Просто подумалось, что макросом компактнее код получится. (длинное название у класса) да и для общественности он полезен
про алиас можно поподробнее?
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
08.02.2008, 18:47 | #7 |
Участник
|
макрос, единственный смысл которого делегировать вызовы статическому методу
X++: #localmacro.const SYS_ExpressionQueryBuilder::const(%1) #endmacro #localmacro.newQuery SYS_ExpressionQueryBuilder::datasource(%1) #endmacro X++: #macrolib.SYS_ExpressionQueryBuilder // типа подключаем неймспейс ; new DEV_QueryBrowser().run( #newQuery(tableNum(Table1)) // юзаем штуки из неймспейса по короткому имени (без полной кваличикации типа) .formula( strfmt("%1 + %2*10 - %3 - %4 == %5", //f2 + 10*f4 - f5 - 3 == 0 fieldStr(Table1, Field2), fieldStr(Table1, Field4), fieldStr(Table1, Field5), #const(3), #const(0)) ) .run() .query()); |
|
08.02.2008, 18:48 | #8 |
Участник
|
И при этом, если мы заъхотим что-то поменять в реализации const не надо будет перекомпилировать все, где оно исользуется
|
|
12.02.2008, 18:06 | #9 |
MCTS
|
c #newQuery лихо как-то
Компилятору
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|