![]() |
#7 |
Участник
|
Цитата:
X++: // обходим баг вызова orig() для табличек с наследованием // [url=http://axforum.info/forums/showthread.php?p=412642#post412642]Приведение типов для таблиц ax2012[/url] // [url]http://sashanazarov.blogspot.com/2014/01/dynamics-ax-2012-orig-method-fails-on.html[/url] // [url=http://axforum.info/forums/showthread.php?p=328140#post328140]Опасный orig[/url] public static anyType origFieldValue_MRC(Common _common, FieldId _fieldId) { TableId tableId; TableId tableId4Field; FieldName fieldName; Common commonCasted; Common commonOrig; DictTable dictTable; anytype ret; ; if (_common.RecId == 0) { // обходим баг // [url=http://axforum.info/forums/showthread.php?p=328140#post328140]Опасный orig[/url] commonOrig = _common.orig(); commonOrig.doClear(); ret = commonOrig.(_fieldId); } else { dictTable = new DictTable(_common.TableId); if (!(dictTable && dictTable.supportInheritance())) { // обычная табличка без наследования - все как обычно commonOrig = _common.orig(); ret = commonOrig.(_fieldId); } else { // обходим баг // [url]http://sashanazarov.blogspot.com/2014/01/dynamics-ax-2012-orig-method-fails-on.html[/url] // решаем проблемы с получением значений из родительских табличек для orig() буфера dictTable = new DictTable(tableName2id(_common.getInstanceRelationType())); if (dictTable) { // ищем tableId в иерархии наследования для которой первой определено поле _fieldId т.е. ту для которой оно было введено, а не отнаследовано. fieldName = fieldId2name(_common.TableId, _fieldId); tableId4Field = _common.TableId; if(fieldName) { tableId = dictTable.extends(); while(tableId) { dictTable = new DictTable(tableId); if (fieldName2id(tableId, fieldName)) { tableId4Field = tableId; } else { break; } tableId = dictTable.extends(); } } } if (tableId4Field) { commonCasted = SysDictTable::as(_common, tableId2name(tableId4Field)); commonOrig = commonCasted.orig(); ret = commonOrig.(_fieldId); } else { // не должны сюда попасть. Можно кидать исключение. commonOrig = _common.orig(); ret = commonOrig.(_fieldId); } } } return ret; } |
|