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