/// <summary> /// Регистрация документа. /// </summary> /// <param name="session">Текущая сессия.</param> /// <param name="edoc">Экземпляр документа.</param> /// <param name="documentRegisterId">ИД журнала регистрации.</param> /// <param name="regNumber">Рег. №</param> /// <param name="regDate">Дата регистрации.</param> /// <param name="logger">Логировщик.</param> /// <returns>Список ошибок.</returns> public static IEnumerable <Structures.ExceptionsStruct> RegisterDocument(Session session, Sungero.Docflow.IOfficialDocument edoc, int documentRegisterId, string regNumber, DateTime?regDate, Guid defaultRegistrationRoleGuid, NLog.Logger logger) { var exceptionList = new List <Structures.ExceptionsStruct>(); Sungero.Docflow.IRegistrationGroup regGroup = null; // TODO Кэшировать. var documentRegister = BusinessLogic.GetDocumentRegister(session, documentRegisterId); if (documentRegister != null && regDate != null && !string.IsNullOrEmpty(regNumber)) { edoc.RegistrationDate = regDate; edoc.RegistrationNumber = regNumber; edoc.DocumentRegister = documentRegister; edoc.RegistrationState = Sungero.Docflow.OfficialDocument.RegistrationState.Registered; regGroup = documentRegister.RegistrationGroup; } else { var message = string.Format("Не удалось найти соответствующий реестр с ИД \"{0}\".", documentRegisterId); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); } if (regGroup != null) { edoc.AccessRights.Grant(regGroup, DefaultAccessRightsTypes.FullAccess); } else { var message = string.Format("Не была найдена соответствующая группа регистрации. Права на документ будут выданы для роли c Guid {0}.", defaultRegistrationRoleGuid.ToString()); exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = message }); logger.Warn(message); var regRole = BusinessLogic.GetRoleBySid(session, defaultRegistrationRoleGuid); edoc.AccessRights.Grant(regRole, DefaultAccessRightsTypes.FullAccess); } try { edoc.Save(); } catch (Exception ex) { exceptionList.Add(new Structures.ExceptionsStruct { ErrorType = Constants.ErrorTypes.Warn, Message = ex.Message }); } return(exceptionList); }