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);
            }
        }
Example #2
0
        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);
            }
        }