Недавно словили эту багу при работе в 2009-й аксапте.
В итоге разработали способ как это просто вылечить не удаляя слой.
Пусть для определенности у нас кривая вьюха на usr слое.
При любых попытках что-то сделать с ней аос падает по причине
Падает служба Dynamics AX
1. Тогда берем другое приложение. Заходим там на usp слой. Создаем там вьюху с таким же именем и идентификатором.
2. Перекладываем usp слой в проблемное приложение.
3. Рестартуем аос
4. В итоге прямая вьюха на usp слое закрывает кривую вьюху и аос перестает падать.
Дальше лечим usr слой.
Запускаем на сервере джобик:
X++:
static server void main(Args _args)
{
UtilElements utilElements;
Tableid viewId = 50900; // поставить свой id вьюхи
UtilEntryLevel utilEntryLevel = UtilEntryLevel::usr;
Identifiername name = 'Metadata'; // имя узла надо предварительно перепроверить при просмотре в обозревателе таблички UtilElements
str str2Scan;
void locView(str _str2Scan)
{
int i;
str s;
int charCode;
;
_str2Scan = strRem(_str2Scan, "\n\r");
for (i = 1; i<= strlen(_str2Scan); i += 2)
{
charCode = str2int('0x' + substr(_str2Scan, i, 2));
s += num2char(charCode);
}
info(s);
}
;
ttsbegin;
flush utilElements;
utilElements.disableCache(true);
utilElements.skipTTSCheck(1);
utilElements.ttsbegin();
select forupdate utilElements
where utilElements.utilLevel == utilEntryLevel
&& utilElements.parentid == viewId
&& utilElements.name == name // по идее может сработать и без этого условия
&& utilElements.recordType == UtilElementType::ViewQuery;
str2Scan = BinData::dataToString(UtilElements.code);
locView(str2Scan);
// throw info("Ну очень стремно удалять");
utilElements.doDelete();
utilElements.ttscommit();
ttscommit;
}
В итоге кривизна вьюхи на usr слое вычищена.
Можно удалять usp слой.
P.S.
Возможно, что сработает и без манипуляция с usp слоем - я не пробовал. Нет желания повторять.
Если в джобе поставить переменную с типом utilIdElements то почему-то не срабатывает - отказывается редактировать или удалять запись с такими сообщениями:
Цитата:
Невозможно удалить запись в Application Model (UtilIdElements).
Номер записи не соответствует первоначальному номеру. Если таблицей используется весь кэш таблицы, это может быть вызвано тем, что этот кэш был сброшен. В этом случае следует перезапустить задание.
Цитата:
Невозможно отредактировать запись в Application Model (UtilIdElements).
Номер записи не соответствует первоначальному номеру. Если таблицей используется весь кэш таблицы, это может быть вызвано тем, что этот кэш был сброшен. В этом случае следует перезапустить задание.
Т.е. UtilElements и UtilIdElements ведут себя по-разному.
Интересно, почему так.