示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
            }
        }
示例#5
0
 /// <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);
 }
示例#6
0
        /// <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);
        }
示例#8
0
 /// <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);
 }
示例#9
0
        /// <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);
        }
示例#10
0
 public virtual XTreeLevelInfoIT[] GetChildTreeLevels(XTreeLevelInfoIT treeLevelInfo, XParamsCollection treeParams)
 {
     return(treeLevelInfo.ChildTreeLevelsInfoMetadata);
 }
示例#11
0
 /// <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));
 }
示例#12
0
 public XTreeLevelInfoITRef(XTreeLevelInfoITRef parent, XTreeLevelInfoIT levelInfo)
 {
     LevelInfo         = levelInfo;
     m_parent          = parent;
     m_ownerTreeStruct = parent.OwnerTreeStruct;
 }