Привет всем.
Вот здесь я описал идею как можно было бы защититься от повреждений типа таблиц в аксапте 2012 R3
После инсталяции Map вдруг cтал Table?!
Попробовал реализовать. Похоже все получилось.
https://github.com/KozlovPavel677/AxTableTypeChangeFix
Идея фикса.
1. Пишем в базе модели функцию (aMRC_axTableType), которая разбирает бинарное поле ModelElementData.Properties и определяет по нему тип табличного объекта. Результат функции:
0 - Unknown
1 - Table
2 - View
3 - Map
2. На табличке ModelElementData в базе модели пишем триггер, который проверяет не поменялся ли для обновляемой таблички результат функции aMRC_axTableType. Если поменялся, то ругаемся и откатываем транзакцию (реально пришлось рубить текущее соединение)
Примерно неделю триггер живет на деве и тесте. Проблем не заметили.
Как тестировали.
Класс ViewTableProps_MRC перебирает все таблички в приложении и для каждой определяет тип таблицы через распаковку бинарного свойства ModelElementData.Properties и сравнивает результа с тем что вернул DictTable.isView() и DictTable.isMap(). Если выявлено несоответствие то пишет в инфолог "ERROR !!!".
Просьба к участникам форума поучаствовать в тестировании, прогнать этот проверочный класс на своих приложениях. Вдруг выявится ошибка в определении типа таблицы. Но мне кажется, что все должно быть нормально. Мы проверяли всеми способами.