|
![]() |
#1 |
Боец
|
Думаю, примерно так:
X++: static void classMethodInfo(Args _args) { SysDictClass sysDictClass; DictMethod dictMethod; counter methodCount, varCount; str parmsStr; ; sysDictClass = new SysDictClass(classnum(RunBaseBatch)); setPrefix(sysDictClass.name()); methodCount = sysDictClass.objectMethodCnt(); while (methodCount) { dictMethod = sysDictClass.objectMethodObject(methodCount); if (dictMethod) { parmsStr = ''; for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --) { parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount)); } parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2); info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr)); } methodCount --; } } |
|
![]() |
#2 |
Ищущий знания...
|
Цитата:
Сообщение от DSPIC
![]() Думаю, примерно так:
X++: static void classMethodInfo(Args _args) { SysDictClass sysDictClass; DictMethod dictMethod; counter methodCount, varCount; str parmsStr; ; sysDictClass = new SysDictClass(classnum(RunBaseBatch)); setPrefix(sysDictClass.name()); methodCount = sysDictClass.objectMethodCnt(); while (methodCount) { dictMethod = sysDictClass.objectMethodObject(methodCount); if (dictMethod) { parmsStr = ''; for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --) { parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount)); } parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2); info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr)); } methodCount --; } } Изначально был вопрос про таблицы, для них нужно использовать SysDictTable, а не SysDictClass.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#3 |
Боец
|
|
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от DSPIC
![]() Думаю, примерно так:
X++: static void classMethodInfo(Args _args) { SysDictClass sysDictClass; DictMethod dictMethod; counter methodCount, varCount; str parmsStr; ; sysDictClass = new SysDictClass(classnum(RunBaseBatch)); setPrefix(sysDictClass.name()); methodCount = sysDictClass.objectMethodCnt(); while (methodCount) { dictMethod = sysDictClass.objectMethodObject(methodCount); if (dictMethod) { parmsStr = ''; for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --) { parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount)); } parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2); info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr)); } methodCount --; } } 1. данный код не учитывает статических методов, дополнил job DSPIC, чтобы статические методы учитывались X++: static void classMethodInfo(Args _args) { SysDictClass sysDictClass; DictMethod dictMethod; counter methodCount, varCount; str parmsStr; ; sysDictClass = new SysDictClass(classnum(SysDictClass)); setPrefix(sysDictClass.name()); methodCount = sysDictClass.objectMethodCnt(); while (methodCount) { dictMethod = sysDictClass.objectMethodObject(methodCount); if (dictMethod) { parmsStr = ''; for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --) { parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount)); } parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2); info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr)); } methodCount --; } //SRF --> methodCount = sysDictClass.staticMethodCnt(); while (methodCount) { dictMethod = sysDictClass.staticMethodObject(methodCount); if (dictMethod) { parmsStr = ''; for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --) { parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount)); } parmsStr = strdel(parmsStr, strlen(parmsStr) - 1, 2); info (strFmt ("%1 (%2)", dictMethod.name(), parmsStr)); } methodCount --; } //SRF <-- } OFFTOPIC : вообще если нужны только списки методов без параметров то для DAX 4.0(также для других версий) можно использовать static-методы класса sysPickList, например, чтобы получить список методов таблицы в DAX 4.0 достаточно вызвать ниже приведенный код X++: sysPickList::fillTablesMethodsMap(tableId) |
|
![]() |
#5 |
Участник
|
Ну все нахрен этот встроенный отчетник
![]() ![]() Последний раз редактировалось s_s_a; 28.05.2009 в 12:06. |
|
![]() |
#6 |
Ищущий знания...
|
Цитата:
![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#7 |
Участник
|
А как в Аксапте сделать неполомав рук сложную форму? ТТН, например?
Вот я и озадачился. Прикрутил StimulSoft Report. И через BusinessConnector.Net пхаю в него данные. Работает быстро. А уж разработка самих форм ваааще песня! Первая версия собранных мной костылей требует некоторой ручной работы. Вот решил доавтоматизировать чуток ![]() |
|
![]() |
#8 |
Ищущий знания...
|
Цитата:
Сообщение от s_s_a
![]() А как в Аксапте сделать неполомав рук сложную форму? ТТН, например?
Вот я и озадачился. Прикрутил StimulSoft Report. И через BusinessConnector.Net пхаю в него данные. Работает быстро. А уж разработка самих форм ваааще песня! Первая версия собранных мной костылей требует некоторой ручной работы. Вот решил доавтоматизировать чуток ![]() ... Причем тут репорты аксаптовские?? Про то что сделать в аксаптовском репорте сложную печатную форму - это мука, полностью согласен! ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#9 |
Участник
|
Получить данные из АХ сторонее приложение (в данном случае сторонний Генератор Отчетов) может и через базу напрямую, наверное. Но ведь таблицы могут выводить и какие-то расчитанные налету данные через методы. Вот, чтоб руками их не указывать, а получать список и использовать как поля в отчетнике, мне и понадобилась ваша помощь.
Если кто заинтересуется, могу подробней расписать... |
|
![]() |
#10 |
Участник
|
Цитата:
X++: ... for (varCount = dictMethod.parameterCnt(); varCount >= 1; varCount --) { parmsStr += strFmt("%1 %2, ", dictMethod.parameterType(varCount), dictMethod.parameterName(varCount)); } ![]() X++: static void jbTableMethodList(Args _args) { void tableMethodList( TableId _tableId, boolean _isStatic = false ) { DictTable dictTable = new DictTable( _tableId ) ; DictMethod dictMethod ; Counter methodCount ; Counter methodIdx ; Counter varIdx ; str methodNameTxt ; str varListTxt ; ; if( !dictTable ) return ; setPrefix( strfmt( "%1 - %2 methods", dictTable.name(), _isStatic ? 'static' : 'instance' ) ) ; methodCount = _isStatic ? dictTable.staticMethodCnt() : dictTable.objectMethodCnt() ; for( methodIdx=1; methodIdx<=methodCount; methodIdx++ ) { dictMethod = _isStatic ? dictTable.staticMethodObject( methodIdx ) : dictTable.objectMethodObject( methodIdx ) ; methodNameTxt = dictMethod.runMode() == ClassRunMode::Called ? '' : strfmt( "%1 ", dictMethod.runMode() ) ; methodNameTxt += strfmt( "%1 %2", extendedTypeId2DisplayName( dictMethod.returnType(), dictMethod.returnId() ), dictMethod.name() ) ; varListTxt = '' ; for( varIdx=1; varIdx<=dictMethod.parameterCnt(); varIdx++ ) { varListTxt += strfmt( "%1 %2%3, ", extendedTypeId2DisplayName( dictMethod.parameterType( varIdx ), dictMethod.parameterId( varIdx ) ), dictMethod.parameterName( varIdx ) , dictMethod.parameterOptional( varIdx ) ? ' (optional)' : '' ) ; } info( strfmt( "%1(%2)", methodNameTxt, strdel( varListTxt, strlen( varListTxt ), -2 ) ) ) ; } } ; info( 'Dict reflection: DictTable & DictMethod' ) ; tableMethodList( tableNum( InventTable), false ) ; tableMethodList( tableNum( InventTable ), true ) ; } |
|
Теги |
sysdicttable |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|