Beispiel #1
0
        /// <summary>
        /// Sets the current selection and retrieves the items subitems.
        /// </summary>
        /// <param name="menu">The menu of the item to select</param>
        /// <param name="selection">The selection of the item to select</param>
        /// <returns></returns>
        public override bool SetCurrentItemBySelection(string menu, string selection)
        {
            if (base.SetCurrentItemBySelection(menu, selection))
            {
                Item item = RootItem.FindSelection(menu, selection);

                if (item is PxMenuItem)
                {
                    PxMenuItem menuItem = (PxMenuItem)item;
                    if (!menuItem.HasBeenLoaded())
                    {
                        Load(menuItem);
                    }
                }
            }
            else
            {
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        /// <summary>
        /// Loads properties and subitems for a certain MenuItem.
        /// </summary>
        /// <param name="menuItem">The item to update</param>
        /// <param name="numberOfLevels">Number of levels to retrieve from the database - overrides property NumberOfLevels</param>
        /// <returns></returns>
        protected void Load(PxMenuItem menuItem, int numberOfLevels)
        {
            //if (menuItem.HasSubItems)
            //    throw new ItemHasBeenLoadedException("DatamodelMenu does not allow subsequent loads on its MenuItems.");

            if (menuItem.HasBeenLoaded())
            {
                throw new ItemHasBeenLoadedException("DatamodelMenu does not allow subsequent loads on its MenuItems.");
            }

            menuItem.HasBeenLoaded(true);

            DataTable dataTable = GetDataTableBySelection(menuItem.ID.Menu, menuItem.ID.Selection, numberOfLevels, SQL, Parameters);

            List <Item> items = itemCollection(dataTable);

            Item self = null;

            if (menuItem.ID.Selection != "START")
            {
                self = items.FirstOrDefault(i => i is PxMenuItem && i.ID.ToString().Equals(menuItem.ID.ToString(), StringComparison.OrdinalIgnoreCase));

                if (self == null)
                {
                    menuItem.ID.Set("", "");
                    return;
                }

                menuItem.Text      = self.Text;
                menuItem.TextShort = self.TextShort;
                menuItem.SortCode  = self.SortCode;
                menuItem.ID.Set(self.ID.Values);
                menuItem.Description = self.Description;

                items.Remove(self);
            }

            PxMenuItem parent = null;

            for (int i = 0; i < items.Count; i++)
            {
                Item item = items[i];

                if (item.ID.Menu.Equals(menuItem.ID.Selection))
                {
                    parent = menuItem;
                }
                else if (item.ID.Menu != parent.ID.Selection)
                {
                    Item tempParent = items.Take(i).Last(x => x.ID.Selection.Equals(item.ID.Menu));

                    if (tempParent.IsNotOfType <PxMenuItem>())
                    {
                        if (tempParent.ID.Selection.Equals(item.ID.Menu))
                        {
                            throw new Exceptions.DatamodelMenuExtractedDataErrorException("Non-menu type item has subitem. Not allowed.");
                        }
                        else
                        {
                            throw new Exceptions.DatamodelMenuExtractedDataErrorException("Unable to find items parent in extracted data.");
                        }
                    }

                    parent = tempParent.Cast <PxMenuItem>();
                }

                if (parent == null)
                {
                    throw new Exceptions.DatamodelMenuExtractedDataErrorException("Unable to find items parent in extracted data.");
                }

                //TODO: Test Url?
                if (item is Url && !parent.Urls.Any(u => u.ID.Equals(item.ID)))
                {
                    parent.AddUrl(item.Cast <Url>());
                }
                else
                {
                    parent.HasBeenLoaded(true);
                    parent.AddSubItem(item);
                }
            }
        }