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); }
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); }
/// <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); }
/// <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); }