irac
irac copied to clipboard
Взаимодействие с RAS при выполнении методов объектов irac может завершаться с ошибкой, но это никак не отследить
При выполнении, например, ИнформационнаяБаза.ОбновитьДанные(1); происходит обращение к RAS, которое завершается ошибкой, в консоль при этом выводится ПРЕДУПРЕЖДЕНИЕ - Получен ненулевой код возврата -1: При этом сам метод выполняется и нет возможности понять, что фактически обновления данных не произошло, т.е. ошибка взаимодействия с RAS не прокидывается дальше.
Туда же: при операциях с ИБ, на которую нет права администрирования, получаем предупреждение в консоль: ПРЕДУПРЕЖДЕНИЕ - Получен ненулевой код возврата -1: Недостаточно прав пользователя на информационную базу ИмяБазы
@1cgh А что бы хотелось видеть? Если в первом случае еще имеет смысл выбросить исключение, то во втором (без прав администрирования) так сделано специально, т.к. если нет прав, то просто возвращается сокращенная информация о базе.
В личке уже обсудили) Дополню тут. Во-первых, хотелось бы явно иметь информацию о том, что метод выполнен. Сейчас получается, что метод вызван, не упал, а по факту не выполнен. Не надо так) В части ошибок хотелось бы получать какие именно ошибки возникли при выполнении метода. Т.е. то, что сейчас вызывается как процедуры поменять на функции, возвращать структуру со свойством-флагом успешного выполнения и данные об ошибках, если они возникли. Ну или возвращать данные об ошибках или Неопределено, если всё ок. Это обеспечит обратную совместимость. По-старому функция будет вызываться как процедура. По-новому можно будет обработать возвращаемый результат и что-то предпринять (залогировать, обернуть в несколько попыток выполнения метода и т.п.)
- Сейчас все методы, которые дергают RAC выбрасывают исключение (1.3.0). Исключение - получение полной информации о ИБ и сеансах. Т.е. сейчас все объекты кидают исключения, а соединения и ИБ кидают исключение, только если совсем не удалось получить инфу, а если проблема только в авторизации (получении полных данных), то нужно еще проверить "ПолноеОписание() = Истина". Что входит в полные, данные, а что в расширенные в доке к RAC написано.
- С соединениями и сеансами - есть еще 1 нюанс, там не кидается исключение, т.к. соединения/сеанса уже может не быть с указанным ИД, вот тут можно еще подумать.
- Мне что-то не очень нравится возвращать структуру, т.к. если исключение ты просто можешь перехватить, то результат тебе придется всегда на всех уровнях проверять и как-то обрабатывать.