04.03.2015, 12:11 | #1 |
Участник
|
Как в отладчике посмотреть значение parm-метода?
(AX 2012 R2)
Подскажите, пожалуйста, как в отладчике посмотреть значение parm-метода? parm-методы по сути являются оберткой для переменных класса. Как в отладчике можно посмотреть их текущие значения. Конкретно интересует element.args() |
|
04.03.2015, 13:48 | #2 |
Участник
|
element.args() - это не parm-метод, это свойство объекта ядра (формы), а то, что лежит в Args, - это свойства другого объекта ядра, который является значением свойства формы. Отладчик в общем случае не умеет показывать значения свойств объектов ядра, таких как форма. Но в Args заглянуть отчасти может - если вытащить ссылку на них в переменную в calssDeclaration формы либо какого-то метода на ней. При этом отображаемое "содержимое" Args - это то, что сам класс показывает в ответ на вызов toString(). Из объектов ядра сколь-нибудь подробно отладчик умеет показывать разве что свойства FormControl'ов.
|
|
|
За это сообщение автора поблагодарили: dit31 (1). |
04.03.2015, 14:02 | #3 |
Участник
|
А значения обычных самописных parm-методов отладчик может показывать? Для этого метод должен начинаться на "parm"?
|
|
04.03.2015, 14:24 | #4 |
Участник
|
Нет, для отладчика X++ что parm-метод, что любой другой - это именно метод. Отладчик штатно умеет вызывать только метод toString() объектов. Чтобы посмотреть "значение" parm-метода, надо знать, что именно тот возвращает, и если это - какая-то переменная класса, то в отладчике развернуть соотв. объект в окне Locals и найти в нем эту переменную. Если отладчик находится в коде объекта, "значение" parm-метода которого надо посмотреть, то разворачивать надо this.
|
|
|
За это сообщение автора поблагодарили: Dreadlock (1). |
04.03.2015, 15:27 | #5 |
Участник
|
можно "провалится" в метод сделав шаг и там посмотреть, что возвращается
|
|
04.03.2015, 15:30 | #6 |
Участник
|
Это есть parm-метод вызывается непосредственно в отлаживаемом коде
|
|
04.03.2015, 16:15 | #7 |
Участник
|
Еще можно добавить в АОТ небольшой класс и использовать его при отладке:
X++: class ParmMethodViewer { Object object; Map parmMethodName2Value; } void initMap() { DictClass dictClass; int methodIdx; str methodName; Object parmObject; Common parmCommon; anytype parmPrimitive; Types type; ; parmMethodName2Value = new Map(Types::String, Types::String); dictClass = new DictClass(classidget(object)); for(methodIdx = 1; methodIdx <= dictClass.objectMethodCnt(); methodIdx++) { methodName = dictClass.objectMethod(methodIdx); if (!strStartsWith(methodName, 'parm')) { continue; } type = typeOf(dictClass.callObject(methodName, object)); switch (type) { case Types::Class: parmObject = dictClass.callObject(methodName, object); parmMethodName2Value.insert( methodName, classId2Name(classidget(parmObject))); break; case Types::Record: parmCommon = dictClass.callObject(methodName, object); parmMethodName2Value.insert( methodName, strFmt('Table %1, RecId %2', tableid2name(parmCommon.TableId), parmCommon.RecId)); break; case Types::String, Types::Date, Types::Guid, Types::Int64, Types::Integer, Types::Real, Types::Time, Types::UtcDateTime: parmPrimitive = dictClass.callObject(methodName, object); parmMethodName2Value.insert( methodName, strFmt('%1', parmPrimitive)); break; } } } void new(Object _object) { ; object = _object; this.initMap(); } X++: public static void main(Args _args) { Args args; InventTable inventTable; ParmMethodViewer parmMethodViewer; ; args = new Args(); args.parm('qwerty'); args.parmEnumType(enumnum(NoYes)); args.parmObject(new SalesFormLetter_Invoice()); parmMethodViewer = new ParmMethodViewer(args); breakpoint; select firstonly inventTable; parmMethodViewer = new ParmMethodViewer(AxInventTable::newInventTable(inventTable)); breakpoint; } На второй: ["parmAltConfigId"->"","parmAltInventColorId"->"","parmAltInventSizeId"->"","parmAltItemId"->"","parmAssetGroupId_RU"->"","parmAssetId_RU"->"","parmBatchNumGroupId"->"","parmBOMCalcGroupId"->"","parmBOMLevel"->"0","parmBOMUnitId"->"pcs", ... Но тут нужно быть уверенным, что все parm-методы объекта написаны по бест-практисам и ничего другого не делают. |
|
|
За это сообщение автора поблагодарили: Logger (3), dit31 (1). |
04.03.2015, 16:18 | #8 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Stitch_MS (5), dit31 (1). |
Теги |
ax2012 |
|
|