30.01.2009, 14:20 | #1 |
Участник
|
Критическая ошибка RunAs
Аксапта 4.0 (4.0.2501)
При запуске пакетной обработки вылезает сообщение в инфолог: "Критическая ошибка RunAs". Возникает здесь: \Classes\BatchRun\runJob X++: if (batchClass.runsImpersonated()) { // Ok to assert here because the user name comes from // the batch table runAsPermission = new RunAsPermission(batch.CreatedBy); runAsPermission.assert(); // BP Deviation Documented runas(batch.CreatedBy, classnum(BatchRun), staticmethodstr(BatchRun, runJobStatic), [batchId]); CodeAccessPermission::revertAssert(); } classnum(BatchRun), staticmethodstr(BatchRun, runJobStatic), [batchId]); Вроде бы стандартный класс, написан на sys и syp слоях, незадолго до этого пакетная обработка тестировалась и работала, а тут на тебе. Нет идей, как это можно вылечить? |
|
30.01.2009, 17:33 | #2 |
Member
|
Я бы сделал следующее.
1. Научился гарантировано воспроизводить на разработческой базе или на копии базы. 2. Временно убрал бы RunAs и попытался воспроизвести ошибку без него (возможно, залогонившись под пользователем-автором пакета, добавив ему прав на разработку аккуратно, но не полные админские, т.к. причиной ошибки могут быть и права доступа). 3. Дебагером добрался бы до сути ошибки. Дальше, как говорится, it depends...
__________________
С уважением, glibs® |
|
30.01.2009, 17:52 | #3 |
Участник
|
Дебаггер туда не залезает.
Ошибка возникает так: 1) Запускается пакетная обработка. Она находит класс, в котором вылетает в трассировку стерка (в данном случае - нашёлся класс, у которого был некорректно определён unpack() ). 2) После этого любая пакетная обработка даёт критическую ошибку RunAs, описанную выше. Вылечилось рестартом АОС. Более мягкого способа не нашёл. |
|
02.02.2009, 18:21 | #4 |
Участник
|
Чёрт, третий день шаманю вокруг этого...
При запуске пакетной обработки (класс BatchRun) или же просто изменения основных оповещений (класс EventJobCUD) вылетает на runAs... Заменил на обычный вызов методов - работает, но думаю, что это не совсем корректно. Но отчего же runAs-то не отрабатывают? |
|
|
За это сообщение автора поблагодарили: Maksim (1), wojzeh (1). |
20.11.2009, 00:47 | #5 |
Участник
|
столкнулся с точно такой же проблемой.
если в методе класса BatchRun X++: if (batchClass.runsImpersonated()) { // Ok to assert here because the user name comes from // the batch table runAsPermission = new RunAsPermission(batch.CreatedBy); runAsPermission.assert(); // BP Deviation Documented runas(batch.CreatedBy, classnum(BatchRun), staticmethodstr(BatchRun, runJobStatic), [batchId]); CodeAccessPermission::revertAssert(); } else { BatchRun::runJobStatic([batchId]); } проблему поборол очисткой таблицы EventCUD, но какая связь между ид пользователя, породившим событие и пакетной обработкой, я так и не понял.
__________________
Felix nihil admirari |
|
09.02.2010, 00:03 | #6 |
Участник
|
коллега, удалось ли забороть проблему?
__________________
Felix nihil admirari |
|
09.02.2010, 12:41 | #7 |
NavAx
|
Я заметил, что у меня подобная ошибка возникает только на пакетной группе, обрабатывающей оповещения и только если АОС, на котором работает клиент с этой пакетной группой, закрыт для новых подключений.
Могу также предположить, что так же это связано с какими-то неполадками в настройке домена/службах аутентификации, либо необходимостью доаствить оповещение пользователю, который уже не имеет прав в домене для входа в Аксапту/либо вообще отключен. Неплохо было бы в системный лог посмотреть.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
09.02.2010, 14:44 | #8 |
NavAx
|
Расшифровывая вышесказанное мной, хочется написать чуть подробней.
Это еще зависит от того, кто создал пакетное задание, обрабатывающее оповещения и того, что пакетный класс EventJobCUD имеет перекрытый метод runsImpersonated с ret=-true. Это указывает запускать пакет на сервере от имени создавшего его пользователя. Если с этим пользователем на сервере плохо то выполнение пакета обломится.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|