|
|
#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). | |
|
|
#2 |
|
Участник
|
Можно чуть покороче
X++: return this.matches(fieldname2id(dataSource.table(), "RecId") ), '('+_formula+'))'); |
|
|
|
|
#3 |
|
Участник
|
Поправьте кто-нибудь аксаптапедию на эту тему.
|
|
|
|
|
#4 |
|
MCTS
|
Очепятка
__________________
![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
|
|
|
#5 |
|
Участник
|
еще я бы вынес код из макроса в статический метод, а макрос сделал бы алиасом.
еще можно сделать алиас для конструктора (кстати там есть еще фабричный метод для создания сразу датасурса) |
|
|
|
|
#6 |
|
MCTS
|
Можно было и статическим методом сделать. Просто подумалось, что макросом компактнее код получится. (длинное название у класса) да и для общественности он полезен
про алиас можно поподробнее?
__________________
![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
|
|
|
#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()); |
|
|
|
|
#8 |
|
Участник
|
И при этом, если мы заъхотим что-то поменять в реализации const не надо будет перекомпилировать все, где оно исользуется
|
|
|
|
|
#9 |
|
MCTS
|
c #newQuery лихо как-то
Компилятору
__________________
![]() В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
|