public override XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage) { XTreeStructInfo treeStructInfo = treePage.TreeStruct; XTreeLevelInfoIT levelinfo = treeStructInfo.Executor.GetTreeLevel(treeStructInfo, request.Params, request.Path); XTreeMenuInfo treemenu = null; DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel); Guid ObjectID = request.Path[0].ObjectID; switch (levelinfo.ObjectType) { case "IncidentCategory": treemenu = getMenuForIncidentCategory(ObjectID, dataSet, context); break; default: treemenu = levelinfo.GetMenu(request, context); break; } if (treemenu == null) { treemenu = treePage.DefaultLevelMenu.GetMenu(levelinfo, request, context); } if (treemenu != null) { if (context.Config.IsDebugMode) { treemenu.Items.AddActionItem("ќбновить", StdActions.DoNodeRefresh).SeparatorBefore = true; } } return(treemenu); }
protected override XTreeLevelInfoIT[] getRootsInternal(XTreeStructInfo treeStruct, XParamsCollection treeParams, XTreePath treePath) { DKPTreeModes mode; // получение корней при загрузке корней будем определять по параметру Mode, if (treePath == null) { int nMode; if (!treeParams.Contains("Mode")) { throw new ArgumentException("Не задан обязательный параметр Mode - режим иерархии"); } string sMode = treeParams["Mode"].ToString(); try { nMode = Int32.Parse(sMode); } catch (FormatException) { throw new ApplicationException("Некорректный формат параметра \"режим иерархии\": " + sMode); } mode = (DKPTreeModes)nMode; } // а получение корней в других случаях (при поиске описания узла, соответствующего пути) по типу 1-ой ноды в пути else { string sRootTypeName = treePath[treePath.Length - 1].ObjectType; if (sRootTypeName == "Folder") { mode = DKPTreeModes.Activities; } else if (sRootTypeName == "Organization" || sRootTypeName == "HomeOrganization") { mode = DKPTreeModes.Organizations; } else { throw new ArgumentException("Неизвестный тип корневого узла: " + sRootTypeName); } } bool bAcceptOrganization = (mode == DKPTreeModes.Organizations); ArrayList aList = new ArrayList(); foreach (XTreeLevelInfoIT levelInfo in treeStruct.RootTreeLevels) { if ( (bAcceptOrganization && (levelInfo.ObjectType == "Organization" || levelInfo.ObjectType == "HomeOrganization")) || !bAcceptOrganization && levelInfo.ObjectType == "Folder" ) { aList.Add(levelInfo); } } XTreeLevelInfoIT[] roots = new XTreeLevelInfoIT[aList.Count]; aList.CopyTo(roots); return(roots); }
public virtual XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage) { XTreeStructInfo treeStructInfo = treePage.TreeStruct; XTreeLevelInfoIT treelevel = treeStructInfo.Executor.GetTreeLevel(treeStructInfo, request.Params, request.Path); XTreeMenuInfo treemenu = treelevel.GetMenu(request, context); if (treemenu == null) { treemenu = treePage.DefaultLevelMenu.GetMenu(treelevel, request, context); } return(treemenu); }
public XTreeLevelInfoITRef(XTreeStructInfo ownerTreeStruct, XTreeLevelInfoIT levelInfo) { LevelInfo = levelInfo; m_ownerTreeStruct = ownerTreeStruct; m_children = new XTreeLevelInfoITRef[levelInfo.ChildTreeLevelsInfoMetadata.Length]; int i = -1; foreach (XTreeLevelInfoIT childLevelInfo in levelInfo.ChildTreeLevelsInfoMetadata) { m_children[++i] = new XTreeLevelInfoITRef(this, childLevelInfo); } }
/// <summary> /// Возвращает меню в runtime'e. Если определен провайдер запрашивает меню у него, иначе возвращает метаописание /// </summary> /// <param name="treeLevelInfo">Уровень для которого требуется меню или null, если меню строиться для пустой иерархии</param> /// <param name="request">параметры с клиента</param> /// <param name="context"></param> /// <returns>Данные меню или null</returns> public XTreeMenuInfo GetMenu(XTreeLevelInfoIT treeLevelInfo, XGetTreeMenuRequest request, IXExecutionContext context) { if (m_dataProvider != null) { return(m_dataProvider.GetMenu(treeLevelInfo, request, context)); } if (m_menuMD != null) { // вернем копию метаописания меню (копию для того, чтобы нам ее не испортили) // В данном случае метаописание меню - это просто заготовка return((XTreeMenuInfo)m_menuMD.Clone()); } return(null); }
/// <summary> /// Возвращает метаописание уровня (i:tree-level) иерархии, соответствующего "пути" /// </summary> /// <returns>Объект-описатель уровня иерархии</returns> public virtual XTreeLevelInfoIT GetTreeLevel(XTreeStructInfo treeStruct, XParamsCollection treeParams, XTreePath treePath) { string[] nodesTypes = treePath.GetNodeTypes(); string sIgnoreType = String.Empty; // наименование игнорируемого типа из переданного пути (в случае рекурсии) XTreeLevelInfoIT treelevel = null; XTreeLevelInfoIT[] treelevels; bool bFound; for (int i = nodesTypes.Length - 1; i >= 0; i--) { if (sIgnoreType != nodesTypes[i]) { bFound = false; if (treelevel == null) { treelevels = getRootsInternal(treeStruct, treeParams, treePath); } else { treelevels = treelevel.GetChildTreeLevelsRuntime(treeParams); } foreach (XTreeLevelInfoIT childLevel in treelevels) { if (childLevel.ObjectType == nodesTypes[i]) { treelevel = childLevel; bFound = true; break; } } if (!bFound) { throw new XTreeStructException("Не найдено описания уровня иерархии, соответствующего заданному пути"); } // если у текущего уровня стоит признак рекурсии, то надо пропускать все // последующие типы в пути до тех пор, пока не встретится другой тип: if (treelevel.IsRecursive) { sIgnoreType = nodesTypes[i]; } else { sIgnoreType = String.Empty; } } } return(treelevel); }
public override XTreeMenuInfo GetMenu(XGetTreeMenuRequest request, IXExecutionContext context, XTreePageInfoStd treePage) { XTreeStructInfo treeStructInfo = treePage.TreeStruct; XTreeLevelInfoIT levelinfo = treeStructInfo.Executor.GetTreeLevel(treeStructInfo, request.Params, request.Path); XTreeMenuInfo treemenu = null; DomainObjectDataSet dataSet = new DomainObjectDataSet(context.Connection.MetadataManager.XModel); // получим идентификатор объекта, для которого строится меню Guid ObjectID = request.Path.PathNodes[0].ObjectID; switch (levelinfo.ObjectType) { case "Organization": treemenu = getMenuForOrganization(ObjectID, dataSet, context); break; case "Department": treemenu = getMenuForDepartment(ObjectID, dataSet, context); break; case "Employee": treemenu = getMenuForEmployee(ObjectID, dataSet, context); break; default: treemenu = levelinfo.GetMenu(request, context); break; } if (treemenu == null) { treemenu = treePage.DefaultLevelMenu.GetMenu(levelinfo, request, context); } if (treemenu != null) { if (context.Config.IsDebugMode) { treemenu.Items.AddActionItem("Обновить", StdActions.DoNodeRefresh).SeparatorBefore = true; } } return(treemenu); }
/// <summary> /// Возвращает массив типизированных описаний дочерних уровней иерархии /// Если текущий уровень рекурсивный, то в в возвращаемой коллекции /// присутствует он сам /// </summary> /// <returns>Массив типизированных описаний уровней иерархии</returns> public XTreeLevelInfoIT[] GetChildTreeLevelsAffected(XParamsCollection treeParams) { XTreeLevelInfoIT[] levels_bydesing = GetChildTreeLevelsRuntime(treeParams); XTreeLevelInfoIT[] levels; if (IsRecursive) { levels = new XTreeLevelInfoIT[levels_bydesing.Length + 1]; levels[0] = this; for (int i = 1; i <= levels_bydesing.Length; ++i) { levels[i] = levels_bydesing[i - 1]; } } else { levels = levels_bydesing; } return(levels); }
/// <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); }
public virtual XTreeLevelInfoIT[] GetChildTreeLevels(XTreeLevelInfoIT treeLevelInfo, XParamsCollection treeParams) { return(treeLevelInfo.ChildTreeLevelsInfoMetadata); }
/// <summary> /// Возвращает типизированное описание источника данных (уже с конструированной БД-командой для него) текущего уровня иерархии /// </summary> /// <param name="con">реализация XStorageConnection</param> /// <returns></returns> public virtual XDataSource GetDataSource(XTreeLevelInfoIT treeLevelInfo, XStorageConnection con) { return(new XDataSource(treeLevelInfo.GetDataSourceInfo(con.Behavior.DBMSType), con)); }
public XTreeLevelInfoITRef(XTreeLevelInfoITRef parent, XTreeLevelInfoIT levelInfo) { LevelInfo = levelInfo; m_parent = parent; m_ownerTreeStruct = parent.OwnerTreeStruct; }