public void Initialize(MemberData member) { List<PropertyItem> list = new List<PropertyItem>(); if (member != null) { foreach (PropertyData pair in member.MemberProperties) { PropertyItem item = new PropertyItem(); String caption = pair.Name; if (caption.StartsWith("-") && caption.EndsWith("-")) caption = caption.Trim('-'); item.Property = caption; if (pair.Value != null) { item.Value = pair.Value.ToString(); } else { item.Value = String.Empty; } list.Add(item); } } PropertiesCtrl.Initialize(list); }
public MemberLiteTreeNode(MemberData info) : base() { Info = info; Icon = UriResources.Images.MemberSmall16; MemberVisualizationType = MemberVisualizationTypes.Caption; }
public MemberItemControl(MemberData info) { if (info == null) throw new ArgumentNullException("info"); m_Info = info; Text = info.Caption; Icon = UriResources.Images.Member16; }
/// <summary> /// Добавляет элемент в иерархию MemberNodeInfo /// </summary> /// <param name="member">Member, информация о котором должна быть добавлена в иерархию</param> public OlapMemberInfo AddMemberToHierarchy(MemberData info) { //Задача: Добавить OlapMemberInfo в иерархию //Возможные варианты: // - если элемент в иерархии уже есть, то выход // - если элемента в иерархии еще нет, то ищем его родителя. // Если Родитель задан, Но родителя в иерархии тоже нет, то добавляем родителя и ищем дальше следующего родителя рекурсивно // Если родитель не задан, то элемент является корневым (одним из корневых) в иерархии //Таким образом в иерархию добавляется не только элемент, но и полностью ветка его родителей (если ее не было) //Ищем информацию о данном члене измерения в загруженной иерархии OlapMemberInfo memberInfo = FindMember(info.UniqueName); //Если элемент в иерархии не найден, то его нужно добавить if (memberInfo == null) { //Создаем OlapMemberInfo memberInfo = new OlapMemberInfo(info); // Подписываемся у каждого добавленного элемента на событие - изменение состояния всей иерархии // данное событие генерит элемент, послуживший инициатором рекурсивного обновления состояний в дереве memberInfo.HierarchyStateChanged += new StateChangedEventHandler(memberInfo_HierarchyStateChanged); //OlapMemberInfo, который будем использовать для формирования ветки ....->Дед->Отец->Изначально добавляемый мембер //Ветку будем формировать при поиске родительских элементов OlapMemberInfo addedHierarchy = memberInfo; bool foundParentHierarchy = true; while (foundParentHierarchy) { String parentUniqueName = String.Empty; if (addedHierarchy.Info != null) { PropertyData prop = addedHierarchy.Info.GetMemberProperty(MemberData.PARENT_UNIQUE_NAME_PROPERTY); if (prop != null && prop.Value != null) { parentUniqueName = prop.Value.ToString(); } } if (String.IsNullOrEmpty(parentUniqueName)) { // В случае если например в мерархию загружены элементы уровня 1 и потом догружается элемент All, // то получится что в коллекции корневых элементов находятся элементы уровней 0 и 1. Чтобы такого не произошло // после добавления просматриваем коллекцию корневых элементов и проверяем не является данный добавленный элемент родителем для кого-нибудь из уже имеющихся // Если дочерние обнаружены, то они удаляются из корневых и добавляются в дочерние к данному элементу. // Ищем среди корневых элементы дочерние для данного Dictionary<String, OlapMemberInfo> toDelete = new Dictionary<string, OlapMemberInfo>(); foreach(var child in Children.Values) { String pun = String.Empty; if (child.Info != null) { PropertyData prop = child.Info.GetMemberProperty(MemberData.PARENT_UNIQUE_NAME_PROPERTY); if (prop != null && prop.Value != null) { pun = prop.Value.ToString(); } } if (!String.IsNullOrEmpty(pun) && pun == addedHierarchy.UniqueName) { toDelete.Add(child.UniqueName, child); } } // Удаляем из коллекции корневых дочерние элементы foreach (var del in toDelete) { Children.Remove(del.Key); } // Добавляем в коллекцию корневых элементов AddChild(addedHierarchy); // Добавляем в дочерние те элементы, которые были до этого корневыми foreach (var del in toDelete) { addedHierarchy.AddChild(del.Value); } foundParentHierarchy = false; break; } else { OlapMemberInfo parentOlapMemberInfo = null; parentOlapMemberInfo = FindMember(parentUniqueName); //если родитель найден, то добавляем ему нашу сформированную ветку в дочерние if (parentOlapMemberInfo != null) { parentOlapMemberInfo.AddChild(addedHierarchy); foundParentHierarchy = false; break; } else { //Добавляем в коллекцию корневых элементов AddChild(addedHierarchy); foundParentHierarchy = false; break; //throw new Exception(String.Format("Родитель для элемента {0} не найден в иерархии", info.Member.UniqueName)); ////Создаем OlapMemberInfo для родителя //parentOlapMemberInfo = new OlapMemberInfo(addedHierarchy.Member.Parent, Mode, addedHierarchy.Member.Parent.ChildCount); ////Добавляем ненайденного родителя в ветку, которую нужно добавить в иерархию //parentOlapMemberInfo.AddChildOlapMemberInfo(addedHierarchy); ////В этом случае мы иерархию строим руками и нужно явно добавлять в коллекцию memberInfoHierarchy.AllMembers //memberInfoHierarchy.AllMembers[addedHierarchy.UniqueName] = addedHierarchy; //addedHierarchy = parentOlapMemberInfo; } } } } return memberInfo; }
public RootOlapMemberInfo(MemberData member) : base (member) { }
internal static CellSetData Deserialize(XmlReader reader) { if (reader != null) { try { if (!(reader.NodeType == XmlNodeType.Element && reader.Name == XML_CellSetData)) { reader.ReadToFollowing(XML_CellSetData); } CellSetData target = new CellSetData(); // Начало - CellSetData reader.ReadStartElement(XML_CellSetData); var data = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray; // Имя куба target.CubeName = data[0] != null ? data[0].ToString() : String.Empty; // Соединение var connection = data.GetArray(1); target.Connection.ConnectionID = connection[0].ToString(); target.Connection.ConnectionString = connection[1].ToString(); reader.Read(); // Оси reader.ReadStartElement("Axes"); var axes = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray; for (int a = 0; a < axes.Count; a++) { var axis_data = axes.GetArray(a); AxisData axis = new AxisData(); axis.AxisNum = a; // Название оси axis.Name = axis_data[0].ToString(); // Позиции var positions = axis_data.GetArray(1); for (int p = 0; p < positions.Count; p++) { var position_data = positions.GetArray(p); PositionData pos = new PositionData(); for (int m = 0; m < position_data.Count; m++) { var member_data = position_data.GetArray(m); PositionMemberData member = new PositionMemberData(Convert.ToInt32(member_data[0])); member.DrilledDown = Convert.ToBoolean(member_data[1]); pos.Members.Add(member); } axis.Positions.Add(pos); } // Названаия свойств var PropertiesNames = axis_data.GetArray(2); // Названаия пользовательских свойств var MemberPropertiesNames = axis_data.GetArray(3); // Элементы оси var members = axis_data.GetArray(4); // Варианты стиля var equalsMemberProps = axis_data.GetArray(5); // Описание стиля var equalsMemberPropertiesNames = axis_data.GetArray(6); for (int m = 0; m < members.Count; m++) { var member_data = members.GetArray(m); var Settings = member_data.GetArray(0); var PropertiesValues = member_data.GetArray(1); var MemberPropertiesValues = member_data.GetArray(2); int MemberPropertiesStyleId = Convert.ToInt32(member_data[3]); MemberData member = new MemberData(); int x = 0; member.Caption = Settings[x++].ToString(); member.Description = Settings[x++].ToString(); member.Name = Settings[x++].ToString(); member.UniqueName = Settings[x++].ToString(); member.ChildCount = Convert.ToInt32(Settings[x++].ToString()); member.DrilledDown = Convert.ToBoolean(Settings[x++].ToString()); member.LevelDepth = Convert.ToInt32(Settings[x++].ToString()); member.LevelName = Settings[x++].ToString(); member.HierarchyUniqueName = Settings[x++].ToString(); member.ParentSameAsPrevious = Convert.ToBoolean(Settings[x++].ToString()); for (int j = 0; j < PropertiesValues.Length; j++) { member.Properties.Add(new PropertyData(PropertiesNames[j].ToString(), ConvertFromJson(PropertiesValues[j]))); } for (int j = 0; j < MemberPropertiesValues.Length; j++) { member.MemberProperties.Add(new PropertyData(MemberPropertiesNames[j].ToString(), ConvertFromJson(MemberPropertiesValues[j]))); } var member_equalsPropsValues = equalsMemberProps.GetArray(MemberPropertiesStyleId); for (int k = 0; k < equalsMemberPropertiesNames.Length; k++) { var propName = equalsMemberPropertiesNames[k].ToString(); member.MemberProperties.Add(new PropertyData(propName, ConvertFromJson(member_equalsPropsValues[k]))); } axis.Members.Add(axis.Members.Count, member); } target.Axes.Add(axis); } reader.Read(); if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Axes") { reader.ReadEndElement(); } // Ячейки reader.ReadStartElement("Cells"); var strData = reader.Value; target.DeserializeData(strData); reader.Read(); if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Cells") { reader.ReadEndElement(); } // Конец - CellSetData if (reader.NodeType == XmlNodeType.EndElement && reader.Name == XML_CellSetData) { reader.ReadEndElement(); } return(target); } catch (XmlException) { throw; } } return(null); }
public MemberDataWrapper(MemberData member) { Member = member; }
private MemberInfo CreateMemberInfo(MemberData member) { if (member == null) return null; MemberInfo info = new MemberInfo(); InitMemberInfo(info, member); return info; }
void ShowMemberAttributes(MemberData member) { if (member != null) { ModalDialog dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK }; MemberPropertiesControl properties = new MemberPropertiesControl(); properties.Initialize(member); dlg.Content = properties; dlg.Caption = Localization.CustomPropertiesDialog_Caption; Panel panel = GetRootPanel(this); if (panel != null) { panel.Children.Add(dlg.Dialog.PopUpControl); } ShowDialog(dlg); } }
public static long GetRealChildrenCount(MemberData member) { //Количество дочерних узлов в кубе long childrenCount = 0; if (member != null) { PropertyData prop = member.GetMemberProperty(CHILDREN_COUNT_PROPERTY); if (prop != null) { try { childrenCount = Convert.ToInt64(prop.Value); } catch (Exception) { childrenCount = 0; } } } return childrenCount; }
/// <summary> /// Конструктор объекта, описавающего состояние элемента /// </summary> /// <param name="uniqueName">Уникальное имя мембера</param> /// <param name="caption">Заголовок мембера</param> /// <param name="state">состояние</param> public MemberChoiceSettings(MemberData info, SelectStates state) { m_Info = info; m_SelectState = state; }
/// <summary> /// Формирует описание для элемента /// </summary> /// <param name="member"></param> /// <returns></returns> public MemberData CreateMemberDescription(Member member) { if (member == null) return null; MemberData info = new MemberData(); info.Caption = member.Caption; info.ChildCount = member.ChildCount; info.Description = member.Description; info.DrilledDown = member.DrilledDown; info.LevelDepth = member.LevelDepth; info.LevelName = member.LevelName; info.Name = member.Name; info.ParentSameAsPrevious = member.ParentSameAsPrevious; String hierarchyUniqueName = GetMemberPropertyValue(member, "HIERARCHY_UNIQUE_NAME"); if (hierarchyUniqueName != null) { info.HierarchyUniqueName = hierarchyUniqueName; } else { if (m_HierarchiesToLevelsCache.ContainsKey(info.LevelName)) { info.HierarchyUniqueName = m_HierarchiesToLevelsCache[info.LevelName]; } else { try { info.HierarchyUniqueName = member.ParentLevel.ParentHierarchy.UniqueName; } catch (System.InvalidOperationException) { info.HierarchyUniqueName = String.Empty; } m_HierarchiesToLevelsCache[info.LevelName] = info.HierarchyUniqueName; } } info.UniqueName = member.UniqueName; // Свойства foreach (Property prop in member.Properties) { PropertyData property = new PropertyData(prop.Name, null); try { property.Value = prop.Value; } catch (Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException ex) { property.Value = ex.ToString(); } info.Properties.Add(property); } foreach (MemberProperty mp in member.MemberProperties) { PropertyData property = new PropertyData(mp.Name, null); try { property.Value = mp.Value; } catch (Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException ex) { property.Value = ex.ToString(); } info.MemberProperties.Add(property); } return info; }
internal static CellSetData Deserialize(XmlReader reader) { if (reader != null) { try { if (!(reader.NodeType == XmlNodeType.Element && reader.Name == XML_CellSetData)) { reader.ReadToFollowing(XML_CellSetData); } CellSetData target = new CellSetData(); // Начало - CellSetData reader.ReadStartElement(XML_CellSetData); var data = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray; // Имя куба target.CubeName = data[0] != null ? data[0].ToString() : String.Empty; // Соединение var connection = data.GetArray(1); target.Connection.ConnectionID = connection[0].ToString(); target.Connection.ConnectionString = connection[1].ToString(); reader.Read(); // Оси reader.ReadStartElement("Axes"); var axes = Jayrock.Json.Conversion.JsonConvert.Import(reader.Value) as JsonArray; for (int a = 0; a < axes.Count; a++) { var axis_data = axes.GetArray(a); AxisData axis = new AxisData(); axis.AxisNum = a; // Название оси axis.Name = axis_data[0].ToString(); // Позиции var positions = axis_data.GetArray(1); for (int p = 0; p < positions.Count; p++) { var position_data = positions.GetArray(p); PositionData pos = new PositionData(); for (int m = 0; m < position_data.Count; m++) { var member_data = position_data.GetArray(m); PositionMemberData member = new PositionMemberData(Convert.ToInt32(member_data[0])); member.DrilledDown = Convert.ToBoolean(member_data[1]); pos.Members.Add(member); } axis.Positions.Add(pos); } // Названаия свойств var PropertiesNames = axis_data.GetArray(2); // Названаия пользовательских свойств var MemberPropertiesNames = axis_data.GetArray(3); // Элементы оси var members = axis_data.GetArray(4); // Варианты стиля var equalsMemberProps = axis_data.GetArray(5); // Описание стиля var equalsMemberPropertiesNames = axis_data.GetArray(6); for (int m = 0; m < members.Count; m++) { var member_data = members.GetArray(m); var Settings = member_data.GetArray(0); var PropertiesValues = member_data.GetArray(1); var MemberPropertiesValues = member_data.GetArray(2); int MemberPropertiesStyleId = Convert.ToInt32(member_data[3]); MemberData member = new MemberData(); int x = 0; member.Caption = Settings[x++].ToString(); member.Description = Settings[x++].ToString(); member.Name = Settings[x++].ToString(); member.UniqueName = Settings[x++].ToString(); member.ChildCount = Convert.ToInt32(Settings[x++].ToString()); member.DrilledDown = Convert.ToBoolean(Settings[x++].ToString()); member.LevelDepth = Convert.ToInt32(Settings[x++].ToString()); member.LevelName = Settings[x++].ToString(); member.HierarchyUniqueName = Settings[x++].ToString(); member.ParentSameAsPrevious = Convert.ToBoolean(Settings[x++].ToString()); for (int j = 0; j < PropertiesValues.Length; j++) { member.Properties.Add(new PropertyData(PropertiesNames[j].ToString(), ConvertFromJson(PropertiesValues[j]))); } for (int j = 0; j < MemberPropertiesValues.Length; j++) { member.MemberProperties.Add(new PropertyData(MemberPropertiesNames[j].ToString(), ConvertFromJson(MemberPropertiesValues[j]))); } var member_equalsPropsValues = equalsMemberProps.GetArray(MemberPropertiesStyleId); for (int k = 0; k < equalsMemberPropertiesNames.Length; k++) { var propName = equalsMemberPropertiesNames[k].ToString(); member.MemberProperties.Add(new PropertyData(propName, ConvertFromJson(member_equalsPropsValues[k]))); } axis.Members.Add(axis.Members.Count, member); } target.Axes.Add(axis); } reader.Read(); if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Axes") { reader.ReadEndElement(); } // Ячейки reader.ReadStartElement("Cells"); var strData = reader.Value; target.DeserializeData(strData); reader.Read(); if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "Cells") { reader.ReadEndElement(); } // Конец - CellSetData if (reader.NodeType == XmlNodeType.EndElement && reader.Name == XML_CellSetData) { reader.ReadEndElement(); } return target; } catch (XmlException) { throw; } } return null; }
public void Initialize(MemberData member) { m_PropertiesOwnerControl.Visibility = Visibility.Visible; m_PropertiesOwnerControl.Content = new MemberItemControl(member); List<PropertyItem> list = new List<PropertyItem>(); if (member != null) { foreach (PropertyData pair in member.MemberProperties) { PropertyItem item = new PropertyItem(); String caption = pair.Name; if (caption.StartsWith("-") && caption.EndsWith("-")) caption = caption.Trim('-'); item.Property = caption; if (pair.Value != null) { item.Value = pair.Value.ToString(); } else { item.Value = String.Empty; } list.Add(item); } } m_PropertiesList.Initialize(list); }
public OlapMemberInfo(MemberData info) { if (info == null) throw new ArgumentNullException("info"); this.m_Info = info; this.cubeChildrenCount = QueryProvider.GetRealChildrenCount(info); }
void ShowMemberAttributes(MemberData member) { if (member != null) { ModalDialog dlg = new ModalDialog() { Width = 400, Height = 300, DialogStyle = ModalDialogStyles.OK }; MemberPropertiesControl properties = new MemberPropertiesControl(); properties.Initialize(member); dlg.Content = properties; dlg.Caption = Localization.CustomPropertiesDialog_Caption; Panel panel = GetRootPanel(this); if (panel != null) { panel.Children.Add(dlg.Dialog.PopUpControl); } // На время убираем контекстное меню сводной таблицы dlg.DialogClosed += new EventHandler<DialogResultArgs>(Dlg_DialogClosed); PivotGrid.UseContextMenu = false; dlg.Show(); } }
private String GetMemberPropertyValue(MemberData member, String propName) { if (member == null || member.MemberProperties == null || String.IsNullOrEmpty(propName)) return null; foreach(PropertyData prop in member.MemberProperties) if (prop.Name == propName && prop.Value != null) { return prop.Value.ToString(); } return null; }
void OlapDataLoader_DataLoaded(object sender, DataLoaderEventArgs e) { MemberTreeNode parentNode = null; UserSchemaWrapper<MemberChoiceQueryType, MemberTreeNode> wrapper = e.UserState as UserSchemaWrapper<MemberChoiceQueryType, MemberTreeNode>; if (wrapper != null) { if (wrapper.Schema != MemberChoiceQueryType.GetAscendants && wrapper.Schema != MemberChoiceQueryType.GetMember && wrapper.Schema != MemberChoiceQueryType.GetMembers && wrapper.Schema != MemberChoiceQueryType.LoadSetWithAscendants && wrapper.Schema != MemberChoiceQueryType.FindMembers) { parentNode = wrapper.UserData; if (parentNode != null) { parentNode.IsWaiting = false; } else { membersTree.IsWaiting = false; } } } MetadataQuery args = e.UserState as MetadataQuery; if (e.Error != null) { if (args != null) { if (args.QueryType == MetadataQueryType.GetLevels) Levels_ComboBox.IsError = true; } LogManager.LogError(this, e.Error.ToString()); return; } if (e.Result.ContentType == InvokeContentType.Error) { if (args != null) { if (args.QueryType == MetadataQueryType.GetLevels) Levels_ComboBox.IsError = true; } LogManager.LogError(this, e.Result.Content); return; } if (args != null) { switch (args.QueryType) { case MetadataQueryType.GetLevels: List<LevelInfo> levels = XmlSerializationUtility.XmlStr2Obj<List<LevelInfo>>(e.Result.Content); InitLevelsList(levels); break; case MetadataQueryType.GetLevelProperties: filterBuilder.Tree.IsWaiting = false; List<LevelPropertyInfo> properties = XmlSerializationUtility.XmlStr2Obj<List<LevelPropertyInfo>>(e.Result.Content); m_Properties = properties; MemberTreeNode treeNode = membersTree.SelectedItem as MemberTreeNode; if (treeNode != null) { m_CurrentMember = treeNode.MemberInfo.Info; } else { m_CurrentMember = null; } ShowMemberProperties(); filterBuilder.Initialize(properties); m_LevelPropertiesIsLoaded = true; break; } } if (wrapper != null) { switch (wrapper.Schema) { //case MemberChoiceQueryType.GetRootMembersCount: // Service_GetRootMembersCountCompleted(e, parentNode); // break; case MemberChoiceQueryType.GetRootMembers: service_GetRootMembersCompleted(e, parentNode); break; case MemberChoiceQueryType.GetChildrenMembers: Service_GetChildrenMembersCompleted(e, parentNode); break; case MemberChoiceQueryType.FindMembers: FindMembers_InvokeCommandCompleted(e, parentNode); break; case MemberChoiceQueryType.GetAscendants: GetAscendants_InvokeCommandCompleted(e); break; case MemberChoiceQueryType.GetMember: GetMember_InvokeCommandCompleted(e); break; case MemberChoiceQueryType.LoadSetWithAscendants: LoadSetWithAscendants_InvokeCommandCompleted(e); break; case MemberChoiceQueryType.GetMembers: GetMembers_InvokeCommandCompleted(e); break; } } }
private void InitMemberInfo(MemberInfo info, MemberData member) { if (info == null || member == null) return; info.Caption = member.Caption; info.ChildCount = member.ChildCount; info.Description = member.Description; info.DrilledDown = member.DrilledDown; info.LevelDepth = member.LevelDepth; info.LevelName = member.LevelName; info.Name = member.Name; info.ParentSameAsPrevious = member.ParentSameAsPrevious; info.HierarchyUniqueName = member.HierarchyUniqueName; info.Custom_Rollup = member.Custom_Rollup; info.Unary_Operator = member.Unary_Operator; info.UniqueName = member.UniqueName; // В коллекцию свойств добавляем Properties foreach (PropertyData pair in member.Properties) { String caption = pair.Name; if (!info.PropertiesDictionary.ContainsKey(caption)) info.PropertiesDictionary.Add(caption, pair.Value); } // В коллекцию свойств добавляем MemberProperties foreach (PropertyData pair in member.MemberProperties) { String caption = pair.Name; if (caption.StartsWith("-") && caption.EndsWith("-")) caption = caption.Trim('-'); if (!info.PropertiesDictionary.ContainsKey(caption)) info.PropertiesDictionary.Add(caption, pair.Value); } // Для вычисляемых элементов свойство DrilledDown работает неправильно. // Признаком того, что это вычисляемый элемент считаем KEY0 == null. В этом случае сбрасываем DrilledDown if (info.PropertiesDictionary.ContainsKey(MemberInfo.KEY0_PROPERTY) && info.PropertiesDictionary[MemberInfo.KEY0_PROPERTY] == null) { info.DrilledDown = false; } }
internal MemberItemControl(MemberData info, BitmapImage image) : this(info) { Icon = image; }