public override void Exec() { try { UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; UIHierarchyItem hierItem = (UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0); ProjectItem projItem = (ProjectItem)hierItem.Object; Database db = projItem.ContainingProject.Object as Database; listDiscrepancies = new List<DataTypeDiscrepancy>(); foreach (Microsoft.AnalysisServices.Dimension d in db.Dimensions) { foreach (DimensionAttribute da in d.Attributes) { foreach (DataItem di in da.KeyColumns) CheckDataTypeDiscrepancies(di, ColumnType.KeyColumn); CheckDataTypeDiscrepancies(da.NameColumn, ColumnType.NameColumn); CheckDataTypeDiscrepancies(da.CustomRollupColumn, ColumnType.CustomRollup); CheckDataTypeDiscrepancies(da.CustomRollupPropertiesColumn, ColumnType.CustomRollupProperties); CheckDataTypeDiscrepancies(da.UnaryOperatorColumn, ColumnType.UnaryOperator); CheckDataTypeDiscrepancies(da.ValueColumn, ColumnType.ValueColumn); foreach (AttributeTranslation t in da.Translations) CheckDataTypeDiscrepancies(t.CaptionColumn, ColumnType.TranslationCaption); } } if (listDiscrepancies.Count == 0) { MessageBox.Show("No dimension data type discrepancies found."); return; } BIDSHelper.SSAS.DataTypeDiscrepancyCheckForm form = new BIDSHelper.SSAS.DataTypeDiscrepancyCheckForm(); form.gridBindingSource.DataSource = listDiscrepancies; DialogResult dialogResult = form.ShowDialog(); if (dialogResult == DialogResult.OK) { foreach (DataTypeDiscrepancy discrepancy in listDiscrepancies) { if (discrepancy.SaveChange) { discrepancy.AnalysisServicesColumn.DataType = discrepancy.NewDataType; discrepancy.AnalysisServicesColumn.DataSize = discrepancy.NewDataTypeLength; //mark dimension designer as dirty IComponentChangeService changesvc = (IComponentChangeService)discrepancy.DimensionAttribute.Parent.Site.GetService(typeof(IComponentChangeService)); changesvc.OnComponentChanging(discrepancy.DimensionAttribute.Parent, null); changesvc.OnComponentChanged(discrepancy.DimensionAttribute.Parent, null, null, null); } } } } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
public override void Exec() { try { UIHierarchy solExplorer = this.ApplicationObject.ToolWindows.SolutionExplorer; UIHierarchyItem hierItem = (UIHierarchyItem)((System.Array)solExplorer.SelectedItems).GetValue(0); ProjectItem projItem = (ProjectItem)hierItem.Object; Database db = projItem.ContainingProject.Object as Database; listDiscrepancies = new List <DataTypeDiscrepancy>(); foreach (Microsoft.AnalysisServices.Dimension d in db.Dimensions) { foreach (DimensionAttribute da in d.Attributes) { foreach (DataItem di in da.KeyColumns) { CheckDataTypeDiscrepancies(di, ColumnType.KeyColumn); } CheckDataTypeDiscrepancies(da.NameColumn, ColumnType.NameColumn); CheckDataTypeDiscrepancies(da.CustomRollupColumn, ColumnType.CustomRollup); CheckDataTypeDiscrepancies(da.CustomRollupPropertiesColumn, ColumnType.CustomRollupProperties); CheckDataTypeDiscrepancies(da.UnaryOperatorColumn, ColumnType.UnaryOperator); CheckDataTypeDiscrepancies(da.ValueColumn, ColumnType.ValueColumn); foreach (AttributeTranslation t in da.Translations) { CheckDataTypeDiscrepancies(t.CaptionColumn, ColumnType.TranslationCaption); } } } if (listDiscrepancies.Count == 0) { MessageBox.Show("No dimension data type discrepancies found."); return; } BIDSHelper.SSAS.DataTypeDiscrepancyCheckForm form = new BIDSHelper.SSAS.DataTypeDiscrepancyCheckForm(); form.gridBindingSource.DataSource = listDiscrepancies; DialogResult dialogResult = form.ShowDialog(); if (dialogResult == DialogResult.OK) { foreach (DataTypeDiscrepancy discrepancy in listDiscrepancies) { if (discrepancy.SaveChange) { discrepancy.AnalysisServicesColumn.DataType = discrepancy.NewDataType; discrepancy.AnalysisServicesColumn.DataSize = discrepancy.NewDataTypeLength; //mark dimension designer as dirty IComponentChangeService changesvc = (IComponentChangeService)discrepancy.DimensionAttribute.Parent.Site.GetService(typeof(IComponentChangeService)); changesvc.OnComponentChanging(discrepancy.DimensionAttribute.Parent, null); changesvc.OnComponentChanged(discrepancy.DimensionAttribute.Parent, null, null, null); } } } } catch (System.Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }