|
|
#20 |
|
Участник
|
А вот сами методы класса SysDictTable
X++: // см. \Classes\SysDictTable\as_ByFieldId // DevRecordInfo_FixRetrieve "Исправление ошибок "Поле "XXX" в таблице "YYY" не было явным образом выбрано.", "Аргумент метода isF", PKoz 15.08.2024 public static TableId getConcreteTableIdByFieldId_MRC(Common _common, FieldId _fieldId) { DictTable dictTable; TableId tableId; TableId tableId4Field; str fieldName; ; dictTable = new DictTable(_common.TableId); if (!(dictTable && dictTable.supportInheritance())) { return _common.TableId; } // Get concrete table for inheritance dictTable = new DictTable(tableName2id(_common.getInstanceRelationType())); if (dictTable) { // ищем tableId в иерархии наследования для которой первой определено поле _fieldId т.е. ту для которой оно было введено, а не отнаследовано. // fieldName = fieldId2name(_common.TableId, _fieldId); fieldName = fieldId2name(dictTable.id(), _fieldId); // в CIL для таблиц с наследованием лучше использовать не _common.TableId а tableName2id(_common.getInstanceRelationType()) // а еще лучше SysDictTable::getConcreteTable() так как он работает для любых табличек // метод getInstanceRelationType() для ненаследуемых табличек выдает пустую строку но в нашем случае можно его юзать так как заведомо наследование есть в этом месте, // а работать будет быстрее чем SysDictTable::getConcreteTable() // см. [url=http://axforum.info/forums/showthread.php?p=412646#post412646]Приведение типов для таблиц ax2012[/url] // tableId4Field = _common.TableId; tableId4Field = dictTable.id(); if (fieldName) { tableId = dictTable.extends(); while (tableId) { dictTable = new DictTable(tableId); if (fieldName2id(tableId, fieldName)) { tableId4Field = tableId; } else { break; } tableId = dictTable.extends(); } } } if (!tableId4Field) { // не должны сюда попасть. Можно кидать исключение. throw error(strFmt("Не получилось определить таблицу для буфера %1, RecId = %2, поле = %3 (id поля = %4)", tableId2name(SysDictTable::getConcreteTable(_common)), _common.RecId, fieldId2name(_common.TableId, _fieldId), _fieldId )); } return tableId4Field; } X++: // см. \Classes\SysDictTable\as_ByFieldName // DevRecordInfo_FixRetrieve "Исправление ошибок "Поле "XXX" в таблице "YYY" не было явным образом выбрано.", "Аргумент метода isF", PKoz 15.08.2024 public static TableId getConcreteTableIdByFieldName_MRC(Common _common, FieldName _fieldName) { TableId tableId; FieldId fieldId; TableId ret; ; // fieldId = fieldName2id(_common.TableId, _fieldName); tableId = SysDictTable::getConcreteTable(_common); fieldId = fieldName2Id(tableId, _fieldName); ret = SysDictTable::getConcreteTableIdByFieldId_MRC(_common, fieldId); return ret; } X++: // [url=https://axforum.info/forums/showthread.php?t=78933]Приведение типов для таблиц ax2012[/url] // DevRecordInfo_FixRetrieve "Исправление ошибок "Поле "XXX" в таблице "YYY" не было явным образом выбрано.", "Аргумент метода isF", PKoz 15.08.2024 public static Common as_ByFieldId( Common _common, FieldId _fieldId ) { anytype anyBuffer; TableId tableId; Common ret; ; if (_fieldId) { tableId = SysDictTable::getConcreteTableIdByFieldId_MRC(_common, _fieldId); if (tableId) { // anyBuffer = _common as tableId2Name(tableId); anyBuffer = new DictTable(tableId).makeRecord(); anyBuffer = _common; ret = anyBuffer; } } return ret; } X++: // [url=https://axforum.info/forums/showthread.php?t=78933]Приведение типов для таблиц ax2012[/url] // DevRecordInfo_FixRetrieve "Исправление ошибок "Поле "XXX" в таблице "YYY" не было явным образом выбрано.", "Аргумент метода isF", PKoz 15.08.2024 public static Common as_ByFieldName( Common _common, FieldName _fieldName ) { anytype anyBuffer; TableId tableId; Common ret; ; if (_fieldName) { tableId = SysDictTable::getConcreteTableIdByFieldName_MRC(_common, _fieldName); if (tableId) { // anyBuffer = _common as tableId2Name(tableId); anyBuffer = new DictTable(tableId).makeRecord(); anyBuffer = _common; ret = anyBuffer; } } return ret; } |
|
|
| Теги |
| inheritance, isfielddataretrieved, orig, table inheritance, type cast |
|
|
|