![]() |
![]() |
![]() |
|
Стандартная обработка загрузки-выгрузки пользователей | ☑ | ||
---|---|---|---|---|
0
Aleksey1989
21.05.12
✎
10:15
|
Добрый день. Никак не могу понять, где в следующем коде указывается UUID загружаемого пользователя:
Функция ЗагрузитьПользователей(Адрес, ПриоритетФайла, ФормироватьПротокол) Экспорт Результат = Новый Структура("Статус, ИзФайла, Загружено, Совпадений, ФайлПротокола", Ложь, 0, 0, 0, ""); РежимыЗапуска = Новый Соответствие; РежимыЗапуска.Вставить("Auto", РежимЗапускаКлиентскогоПриложения.Авто); РежимыЗапуска.Вставить("OrdinaryApplication", РежимЗапускаКлиентскогоПриложения.ОбычноеПриложение); РежимыЗапуска.Вставить("ManagedApplication", РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение); ИмяФайла = ПолучитьИмяВременногоФайла(); Данные = ПолучитьИзВременногоХранилища(Адрес); Данные.Записать(ИмяФайла); Фабрика = СоздатьФабрику(); Сериализатор = Новый СериализаторXDTO(Фабрика); ТипРоль = Фабрика.Тип(ИмяПространстваИмен(), "Role"); ТипПользователь = Фабрика.Тип(ИмяПространстваИмен(), "User"); Чтение = Новый ЧтениеXML; Чтение.ОткрытьФайл(ИмяФайла); Чтение.Прочитать(); Чтение.ПерейтиКСодержимому(); Если ФормироватьПротокол Тогда ИмяПротокола = ПолучитьИмяВременногоФайла("log"); Протокол = Новый ЗаписьТекста(ИмяПротокола, КодировкаТекста.UTF8); ЗаписатьЭлементПротокола(Протокол, NStr("ru = 'Приоритет данных из файла:'", "ru") + " " + Строка(ПриоритетФайла)); КонецЕсли; Если НЕ(Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.ЛокальноеИмя = "users") Тогда ЗаписатьЭлементПротокола(Протокол, NStr("ru = 'ОШИБКА: Неверный формат файла. Отсутствует узел <users>.'", "ru")); Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола); Возврат Результат; КонецЕсли; Чтение.Прочитать(); Чтение.ПерейтиКСодержимому(); Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.ЛокальноеИмя = "User" Цикл Попытка ПрочитанныйОбъект = Фабрика.ПрочитатьXML(Чтение, ТипПользователь); Результат.ИзФайла = Результат.ИзФайла + 1; ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ПрочитанныйОбъект.Name); Если ПользовательИБ <> Неопределено Тогда Результат.Совпадений = Результат.Совпадений + 1; Если НЕ ПриоритетФайла Тогда Если ФормироватьПротокол Тогда ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Не изменен.'", "ru"), "%1", ПрочитанныйОбъект.Name)); КонецЕсли; Продолжить; КонецЕсли; КонецЕсли; Если ПользовательИБ = Неопределено Тогда Если ФормироватьПротокол Тогда ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Создан новый.'", "ru"), "%1", ПрочитанныйОбъект.Name)); КонецЕсли; ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); Иначе Если ФормироватьПротокол Тогда ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'Пользователь: %1. Обновлен данными из файла.'", "ru"), "%1", ПрочитанныйОбъект.Name)); КонецЕсли; КонецЕсли; ПользовательИБ.Имя = ПрочитанныйОбъект.Name; ПользовательИБ.ПолноеИмя = ПрочитанныйОбъект.FullName; ПользовательИБ.АутентификацияОС = ПрочитанныйОбъект.OSAuthentication; ПользовательИБ.АутентификацияСтандартная = ПрочитанныйОбъект.StandardAuthentication; ПользовательИБ.ЗапрещеноИзменятьПароль = ПрочитанныйОбъект.CannotChangePassword; ПользовательИБ.ПоказыватьВСпискеВыбора = ПрочитанныйОбъект.ShowInList; ПользовательИБ.ПользовательОС = ПрочитанныйОбъект.OSUser; ПользовательИБ.СохраняемоеЗначениеПароля = ПрочитанныйОбъект.StoredPasswordValue; ПользовательИБ.РежимЗапуска = РежимыЗапуска[ПрочитанныйОбъект.RunMode]; Если ПрочитанныйОбъект.Установлено("DefaultInterface") Тогда ИзФайла = ПрочитанныйОбъект.DefaultInterface; Если Метаданные.Интерфейсы.Найти(ИзФайла) = Неопределено Тогда Если ФормироватьПротокол Тогда ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Интерфейс '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла)); КонецЕсли; ВызватьИсключение "Ошибка"; КонецЕсли; ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[ИзФайла]; КонецЕсли; Если ПрочитанныйОбъект.Установлено("Language") Тогда ИзФайла = ПрочитанныйОбъект.Language; Если Метаданные.Языки.Найти(ИзФайла) = Неопределено Тогда Если ФормироватьПротокол Тогда ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Язык '%1' не обнаружен в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла)); КонецЕсли; ВызватьИсключение "Ошибка"; КонецЕсли; ПользовательИБ.Язык = Метаданные.Языки[ИзФайла]; КонецЕсли; Для каждого РольXDTO Из ПрочитанныйОбъект.Roles Цикл ИзФайла = РольXDTO.Name; Если Метаданные.Роли.Найти(ИзФайла) = Неопределено Тогда Если ФормироватьПротокол Тогда ЗаписатьЭлементПротокола(Протокол, СтрЗаменить(NStr("ru = 'ОШИБКА: Роль '%1' не обнаружена в информационной базе. Загрузка прервана.'", "ru"), "%1", ИзФайла)); КонецЕсли; ВызватьИсключение "Ошибка"; КонецЕсли; ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИзФайла]); КонецЦикла; ПользовательИБ.Записать(); Результат.Загружено = Результат.Загружено + 1; Исключение Если ФормироватьПротокол Тогда Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола); КонецЕсли; Чтение.Закрыть(); УдалитьФайлы(ИмяФайла); Возврат Результат; КонецПопытки; КонецЦикла; Если ФормироватьПротокол Тогда Результат.ФайлПротокола = ЗакрытьФайлПротокола(Протокол, ИмяПротокола); КонецЕсли; Чтение.Закрыть(); УдалитьФайлы(ИмяФайла); Результат.Статус = Истина; Возврат Результат; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |