Exemple #1
0
        protected DomainObjectData getFolderHistoryObject(DomainObjectDataSet dataSet, DomainObjectData xobjFolder)
        {
            DomainObjectData xobjHistory = dataSet.CreateNew("FolderHistory", true);

            xobjHistory.SetUpdatedPropValue("Folder", xobjFolder.ObjectID);
            ITUser user = (ITUser)XSecurityManager.Instance.GetCurrentUser();

            xobjHistory.SetUpdatedPropValue("SystemUser", user.SystemUserID);
            xobjHistory.SetUpdatedPropValue("EventDate", DateTime.Now);
            return(xobjHistory);
        }
Exemple #2
0
        public override XTreeMenuInfo GetMenuForEmptyTree(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage)
        {
            XTreeMenuInfo       menu         = new XTreeMenuInfo("", true);
            DomainObjectDataSet dataSet      = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectData    xobj         = dataSet.CreateNew("IncidentType", true);
            XNewObjectRights    create_right = XSecurityManager.Instance.GetRightsOnNewObject(xobj);

            if (create_right.AllowCreate)
            {
                XMenuActionItem item = menu.Items.AddActionItem("—оздать тип инцидента", StdActions.DoCreate);
                item.Parameters.Add("ObjectType", "IncidentType");
            }
            return(menu);
        }
        public override XTreeMenuInfo GetMenuForEmptyTree(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage)
        {
            XTreeMenuInfo       menu    = new XTreeMenuInfo("", true);
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectData    xobj    = dataSet.CreateNew("Organization", true);

            xobj.SetUpdatedPropValue("Home", true);
            XNewObjectRights create_right = XSecurityManager.Instance.GetRightsOnNewObject(xobj);

            if (create_right.AllowCreate)
            {
                XMenuActionItem item = menu.Items.AddActionItem("Создать организацию-владельца системы", StdActions.DoCreate);
                item.Parameters.Add("ObjectType", "Organization");
                item.Parameters.Add("URLPARAMS", ".Home=1");
            }
            return(menu);
        }
Exemple #4
0
        /// <summary>
        /// Выполнение команды - типизированный вариант
        /// </summary>
        /// <param name="request">Запрос команды, должен иметь тип XGetPropertyRequest</param>
        /// <param name="context">Контекст выполнения команды</param>
        public XGetObjectResponse Execute(XGetObjectRequest request, IXExecutionContext context)
        {
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectData    xobj;

            if (request.ObjectID != Guid.Empty)
            {
                xobj = dataSet.Load(context.Connection, request.TypeName, request.ObjectID);
                // Если заданы цепочки прогружаемых свойств, загрузим и эти данные:
                if (request.PreloadProperties != null)
                {
                    // ...По каждому списку прогружаемых свойств
                    foreach (string sPropList in request.PreloadProperties)
                    {
                        // Проверяем, что в массиве не передали null и пустые строки
                        if (null == sPropList)
                        {
                            throw new ArgumentNullException("PreloadProperties");
                        }
                        if (String.Empty == sPropList)
                        {
                            throw new ArgumentException(ERR_EMPTY_PRELOAD_PATH, "PreloadProperties");
                        }

                        dataSet.PreloadProperty(context.Connection, xobj, sPropList);
                    }
                }
            }
            else
            {
                xobj = dataSet.CreateNew(request.TypeName, false);
            }
            // сериализуем датасет с загруженными объектами в формат для Web-клиента
            DomainObjectDataXmlFormatter formatter = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            XmlElement xmlObject = formatter.SerializeObject(xobj, request.PreloadProperties);

            if (request.ObjectID != Guid.Empty)
            {
                // ..обработаем объект и все вложенные объекты в прогруженных свойства, расставим атрибуты ограничения доступа
                XmlObjectRightsProcessor.ProcessObject(xobj, xmlObject);
            }
            return(new XGetObjectResponse(xmlObject));
        }
        private XTreeMenuInfo getMenuForOrganization(Guid ObjectID, DomainObjectDataSet dataSet, IXExecutionContext context)
        {
            XTreeMenuInfo   menu = new XTreeMenuInfo("@@Title", true);
            XMenuActionItem item;

            menu.CacheMode = XTreeMenuCacheMode.NoCache;
            menu.ExecutionHandlers.Add(new XUserCodeWeb("CompanyTree_Menu_ExecutionHandler"));

            // Создать отдел
            DomainObjectData xobjDep = dataSet.CreateNew("Department", true);

            xobjDep.SetUpdatedPropValue("Organization", ObjectID);
            XNewObjectRights create_right = XSecurityManager.Instance.GetRightsOnNewObject(xobjDep);

            if (create_right.AllowCreate)
            {
                item = menu.Items.AddActionItem("Создать отдел", StdActions.DoCreate);
                item.Parameters.Add("ObjectType", "Department");
                item.Parameters.Add("URLPARAMS", ".Organization=@@ObjectID&IsHomeOrg=@@IsHomeOrg");
                item.Parameters.Add("RefreshFlags", "TRM_CHILDS+TRM_NODE");
            }

            // Создать сотрудника
            DomainObjectData xobj = dataSet.CreateNew("Employee", true);

            xobj.SetUpdatedPropValue("Organization", ObjectID);
            create_right = XSecurityManager.Instance.GetRightsOnNewObject(xobj);
            if (create_right.AllowCreate)
            {
                item = menu.Items.AddActionItem("Создать сотрудника", StdActions.DoCreate);
                item.Parameters.Add("RefreshFlags", "TRM_CHILDS+TRM_NODE");
                item.Parameters.Add("ObjectType", "Employee");
                item.Parameters.Add("URLPARAMS", ".Organization=@@ObjectID&IsHomeOrg=@@IsHomeOrg");
            }

            if (menu.Items.Count > 0)
            {
                menu.Items.AddSeparatorItem();
            }
            xobj = dataSet.GetLoadedStub("Organization", ObjectID);
            XObjectRights rights = XSecurityManager.Instance.GetObjectRights(xobj);

            // Редактировать
            if (rights.AllowParticalOrFullChange)
            {
                item         = menu.Items.AddActionItem("Редактировать", StdActions.DoEdit);
                item.Default = true;
                item.Hotkey  = "VK_ENTER";
                item.Parameters.Add("RefreshFlags", "TRM_CHILDS+TRM_NODE");
            }

            // Удалить
            if (rights.AllowDelete)
            {
                menu.Items.AddActionItem("Удалить отдел", StdActions.DoDelete).SeparatorBefore = true;
            }

            // Секция "Информация"

            /*
             * XMenuSection sec = menu.Items.AddSection("Информация");
             * sec.Items.AddInfoItem("", "@@IsTemporary");
             * sec = menu.Items.AddSection("Отчеты");
             * item = sec.Items.AddActionItem("Норма рабочего времени", "DoRunReport");
             * item.Parameters.Add("ReportName", "EmployeesRate");
             * item.Parameters.Add("UrlParams", ".Department=" + Guid.Empty + "&.Organization=" + ObjectID);
             * item = sec.Items.AddActionItem("Плановая занятость сотрудников", "DoRunReport");
             * item.Parameters.Add("ReportName", "Employment");
             * item.Parameters.Add("UrlParams", ".Employees=&.Departments=&.Organizations=" + ObjectID);
             */
            return(menu);
        }
Exemple #6
0
        /// <summary>
        /// Метод запуска операции на выполнение, <входная> точка операции
        /// ПЕРЕГРУЖЕННЫЙ, СТРОГО ТИПИЗИРОВАННЫЙ МЕТОД
        /// ВЫЗЫВАЕТСЯ ЯДРОМ АВТОМАТИЧЕСКИ
        /// </summary>
        /// <param name="request">Запрос на выполнение операции</param>
        /// <param name="context">Контекст выполнения операции</param>
        /// <returns>Результат выполнения</returns>
        public XGetObjectResponse Execute(XRequest request, IXExecutionContext context)
        {
            // #1: Определяем идентификатор текущего пользователя
            // Используем внутренние механизмы аутентификации
            ITUser            user             = (ITUser)XSecurityManager.Instance.GetCurrentUser();
            XParamsCollection datasourceParams = new XParamsCollection();

            datasourceParams.Add("UserID", user.SystemUserID);


            // #2: Найдем идентификатор объекта - профиля, связанного с текущим
            // пользователем: испоьзуем для этого тривиальный запрос, заданный
            // в "источнике данных"
            XDataSource dataSource = context.Connection.GetDataSource(DEF_DATASOURCE_NAME);

            dataSource.SubstituteNamedParams(datasourceParams, true);
            dataSource.SubstituteOrderBy();
            object oResult = dataSource.ExecuteScalar();
            // Ожидается, что в результате мы получаем GUID:
            Guid uidResult = Guid.Empty;

            if (null != oResult && DBNull.Value != oResult)
            {
                uidResult = context.Connection.Behavior.CastGuidValueFromDB(oResult);
            }


            // #3: Загрузка данных профиля и всех сопутствующих объектов:
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectData    xobj;

            if (Guid.Empty != uidResult)
            {
                // Объект профиля уже есть; загружаем существующий
                xobj = dataSet.Load(context.Connection, "UserProfile", uidResult);
            }
            else
            {
                xobj = dataSet.CreateNew("UserProfile", false);
                // В новом объекте описания профиля сразу проставляем заглушку на текущего пользователя
                xobj.SetUpdatedPropValue("SystemUser", user.SystemUserID);
                // Задаем "собственную" стартовую страницу по умолчанию - список текущих инцидентов
                xobj.SetUpdatedPropValue("StartPage", StartPages.CurrentTaskList);
            }
            // Догружаем данные пользователя (SystemUser) и сотрудника (Employee)
            dataSet.PreloadProperty(context.Connection, xobj, "SystemUser.Employee");

            // Сериализуем датасет с загруженными объектами в формат для Web-клиента
            DomainObjectDataXmlFormatter formatter = new DomainObjectDataXmlFormatter(context.Connection.MetadataManager);
            // ... при этом учитываем, что в сериализованные данные должны так же попасть
            // данные с описанием пользователя и сотрудника:
            XmlElement xmlObject = formatter.SerializeObject(xobj, new string[] { "SystemUser.Employee" });

            if (Guid.Empty != uidResult)
            {
                // ..обработаем объект и все вложенные объекты в прогруженных свойства, расставим атрибуты ограничения доступа
                XmlObjectRightsProcessor.ProcessObject(xobj, xmlObject);
            }

            return(new XGetObjectResponse(xmlObject));
        }
        /// <summary>
        /// Получение меню в runtime для уровня (treeLevelInfo задан) или пустой иерархии (treeLevelInfo равен null)
        /// </summary>
        /// <param name="treeLevelInfo">описание уровня, для которого запрашивается меню, или null</param>
        /// <param name="request">параметры с клиента</param>
        /// <returns></returns>
        public XTreeMenuInfo GetMenu(XTreeLevelInfoIT treeLevelInfo, XGetTreeMenuRequest request, IXExecutionContext context)
        {
            DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel);
            DomainObjectData    xobj    = dataSet.GetLoadedStub(request.Path.PathNodes[0].ObjectType, request.Path.PathNodes[0].ObjectID);

            XTreeMenuInfo menu = new XTreeMenuInfo("@@Title", true);

            menu.CacheMode = XTreeMenuCacheMode.NoCache;
            XMenuActionItem item;

            XObjectRights rights = XSecurityManager.Instance.GetObjectRights(xobj);

            if (rights.AllowParticalOrFullChange)
            {
                item        = menu.Items.AddActionItem("Редактировать", StdActions.DoEdit);
                item.Hotkey = "VK_ENTER";
                item.Parameters.Add("RefreshFlags", "TRM_NODE+TRM_PARENTNODE");
            }

            XNewObjectRights create_rights = XSecurityManager.Instance.GetRightsOnNewObject(dataSet.CreateNew(xobj.ObjectType, true));

            if (create_rights.AllowCreate)
            {
                item        = menu.Items.AddActionItem("Создать", StdActions.DoCreate);
                item.Hotkey = "VK_INS";
                item.Parameters.Add("RefreshFlags", "TRM_TREE");
                if (rights.AllowDelete)
                {
                    menu.Items.AddSeparatorItem();
                }
            }

            if (rights.AllowDelete)
            {
                item        = menu.Items.AddActionItem("Удалить", StdActions.DoDelete);
                item.Hotkey = "VK_DEL";
                item.Parameters.Add("RefreshFlags", "TRM_TREE");
            }

            return(menu);
        }