public void DeleteHierarchyAndLevelTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Tree = new MockTree(handler.Model);
            var hierarchy = handler.Model.Tables["Date"].Hierarchies["Calendar"];

            hierarchy.Delete();
            handler.SaveDB();

            Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));

            hierarchy.Levels["Quarter"].Delete();
            hierarchy.Levels["Day"].Delete();
            hierarchy.Levels["Year"].Delete();
            handler.SaveDB();
            Assert.AreEqual(0, hierarchy.Levels["Semester"].Ordinal);
            Assert.AreEqual(1, hierarchy.Levels["Month"].Ordinal);
            hierarchy.Delete();
            handler.SaveDB();

            handler.UndoManager.Rollback();
            handler.SaveDB();

            Assert.AreEqual(0, hierarchy.Levels["Year"].Ordinal);
            Assert.AreEqual(1, hierarchy.Levels["Semester"].Ordinal);
            Assert.AreEqual(2, hierarchy.Levels["Quarter"].Ordinal);
            Assert.AreEqual(3, hierarchy.Levels["Month"].Ordinal);
            Assert.AreEqual(4, hierarchy.Levels["Day"].Ordinal);
        }
Ejemplo n.º 2
0
        public void TestNewDeploymentNoErrors()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");
            var model   = handler.Model;
            var table   = model.Tables["Reseller Sales"];

            var column  = table.Columns["Gross Profit"] as CalculatedColumn;
            var measure = table.Measures["Reseller Total Gross Profit"];

            measure.Expression = orgDax;
            column.Name        = "GP";

            Assert.AreEqual("SUM([GP]) +\n SUM('Reseller Sales'[GP])", measure.Expression);
            handler.UndoManager.Undo();
            Assert.AreEqual(orgDaxNoCr, measure.Expression);
            handler.SaveDB();

            column.Name = "Gross Profit XXX";
            Assert.AreEqual("SUM([Gross Profit XXX]) +\n SUM('Reseller Sales'[Gross Profit XXX])", measure.Expression);
            handler.SaveDB();

            column.Name = "GP";
            Assert.AreEqual("SUM([GP]) +\n SUM('Reseller Sales'[GP])", measure.Expression);
            handler.SaveDB();

            column.Name = "Gross Profit";
            Assert.AreEqual(orgDaxNoCr, measure.Expression);
            handler.SaveDB();
        }
        public void MinimalPerspectiveTest()
        {
            DeleteTestPerspectives();

            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Tree = new MockTree(handler.Model);

            var m = handler.Model;

            // Perspective which includes everything except a few select items:
            var pnEx = "Test Perspective Exclusive";

            Perspective.CreateNew(pnEx);

            m.Tables["Date 6"].InPerspective[pnEx]   = true;
            m.Tables["Currency"].InPerspective[pnEx] = true;

            //m.Tables.InPerspective(pnEx, true);
            //m.Tables["Reseller Sales"].InPerspective[pnEx] = true;

            //m.Tables["Employee"].InPerspective[pnEx] = false;
            //m.Tables["Date"].Hierarchies.InPerspective(pnEx, false);
            //m.Tables["Internet Sales"].Measures.InPerspective(pnEx, false);
            //m.Tables["Product"].Columns.InPerspective(pnEx, false);
            //m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnEx] = false;

            handler.SaveDB();

            handler.UndoManager.Rollback();
            handler.SaveDB();

            // Check that perspectives were succesfully deleted:
            Assert.IsFalse(m.Perspectives.Contains(pnEx));
        }
Ejemplo n.º 4
0
        public void DeleteHierarchyAndLevelTest()
        {
            var handler   = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");
            var hierarchy = handler.Model.Tables["Date"].Hierarchies["Calendar"];

            hierarchy.Delete();
            handler.SaveDB();

            Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));

            hierarchy.Levels["Quarter"].Delete();
            hierarchy.Levels["Day"].Delete();
            hierarchy.Levels["Year"].Delete();
            handler.SaveDB();
            Assert.AreEqual(0, hierarchy.Levels["Semester"].Ordinal);
            Assert.AreEqual(1, hierarchy.Levels["Month"].Ordinal);
            hierarchy.Delete();
            handler.SaveDB();

            handler.UndoManager.Rollback();
            handler.SaveDB();

            Assert.AreEqual(0, hierarchy.Levels["Year"].Ordinal);
            Assert.AreEqual(1, hierarchy.Levels["Semester"].Ordinal);
            Assert.AreEqual(2, hierarchy.Levels["Quarter"].Ordinal);
            Assert.AreEqual(3, hierarchy.Levels["Month"].Ordinal);
            Assert.AreEqual(4, hierarchy.Levels["Day"].Ordinal);
        }
Ejemplo n.º 5
0
        public void ColumnsAndDataTypeVisibleInTreeAlphabeticalTest()
        {
            var handler = new TabularModelHandler("localhost", "TestModel");

            handler.Tree.Options = LogicalTreeOptions.Columns | LogicalTreeOptions.DisplayFolders | LogicalTreeOptions.OrderByName;
            var model = handler.Model;

            var table = model.AddCalculatedTable();

            table.Expression = "ROW(\"Int64\", 1, \"String\", \"ABC\", \"Double\", 1.0)";

            handler.SaveDB();

            var itemsFromTree = handler.Tree.GetChildren(table).ToList();

            Assert.AreEqual(3, itemsFromTree.Count);
            Assert.AreEqual("Double", itemsFromTree[0].Name);
            Assert.AreEqual("Int64", itemsFromTree[1].Name);
            Assert.AreEqual("String", itemsFromTree[2].Name);

            Assert.AreEqual(3, table.Columns.Count);
            Assert.AreEqual(DataType.Int64, table.Columns["Int64"].DataType);
            Assert.AreEqual(DataType.String, table.Columns["String"].DataType);
            Assert.AreEqual(DataType.Double, table.Columns["Double"].DataType);

            handler.UndoManager.Rollback();

            handler.SaveDB();
        }
Ejemplo n.º 6
0
        public void ColumnsAndDataTypeNotVisibleInTreeTest()
        {
            var handler = new TabularModelHandler("localhost", "TestModel");

            handler.Tree.Options = 0; // Hide everything
            var model = handler.Model;

            var table = model.AddCalculatedTable();

            table.Expression = "ROW(\"Int64\", 1, \"String\", \"ABC\", \"Double\", 1.0)";

            handler.SaveDB();

            var itemsFromTree = handler.Tree.GetChildren(table).ToList();

            Assert.AreEqual(0, itemsFromTree.Count);

            Assert.AreEqual(3, table.Columns.Count);
            Assert.AreEqual(DataType.Int64, table.Columns["Int64"].DataType);
            Assert.AreEqual(DataType.String, table.Columns["String"].DataType);
            Assert.AreEqual(DataType.Double, table.Columns["Double"].DataType);

            handler.UndoManager.Rollback();

            handler.SaveDB();
        }
        public void DeleteTableTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Model.Tables["Currency"].Delete();
            handler.SaveDB();

            handler.UndoManager.Rollback();

            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables.Contains("Currency"));
        }
Ejemplo n.º 8
0
        public void DeleteTableTest()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");

            handler.Model.Tables["Currency"].Delete();
            handler.SaveDB();

            handler.UndoManager.Rollback();

            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables.Contains("Currency"));
        }
Ejemplo n.º 9
0
        public void DeleteHierarchyTest()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");

            handler.Model.Tables["Date"].Hierarchies["Calendar"].Delete();
            handler.SaveDB();

            Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));
        }
        public void DeleteHierarchyTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Model.Tables["Date"].Hierarchies["Calendar"].Delete();
            handler.SaveDB();

            Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar"));
        }
Ejemplo n.º 11
0
        public void CreateHierarchyTest()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");
            var table   = handler.Model.Tables["Employee"];

            table.AddHierarchy("Test Hierarchy", null, "Base Rate", "Birth Date", "Department Name");
            handler.SaveDB();

            Assert.AreEqual(3, table.Hierarchies["Test Hierarchy"].Levels.Count);

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsFalse(table.Hierarchies.Contains("Test Hierarchy"));
        }
        public void RenameHierarchyTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Tree = new MockTree(handler.Model);
            handler.Model.Tables["Date"].Hierarchies["Calendar"].Name = "Calendar Renamed";
            handler.SaveDB();

            Assert.IsTrue(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar Renamed"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsFalse(handler.Model.Tables["Date"].Hierarchies.Contains("Calendar Renamed"));
        }
Ejemplo n.º 13
0
        public void DeleteMeasureTest()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");

            handler.Model.Tables["Internet Sales"].Measures["Internet Total Sales"].Delete();
            handler.SaveDB();

            Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales"));

            // Rollback:
            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales"));
        }
        public void AddMeasureTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Model.Tables["Internet Sales"].AddMeasure("TestMeasure", "SUM('Internet Sales'[Sales Amount])", "Test folder");
            handler.SaveDB();

            Assert.AreEqual("", handler.Model.Tables["Internet Sales"].Measures["TestMeasure"].ErrorMessage);

            // Rollback:
            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("TestMeasure"));
        }
Ejemplo n.º 15
0
        public void AddMeasureTest()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");

            handler.Model.Tables["Internet Sales"].AddMeasure("TestMeasure", "SUM('Internet Sales'[Sales Amount])", "Test folder");
            handler.SaveDB();

            Assert.AreEqual("", handler.Model.Tables["Internet Sales"].Measures["TestMeasure"].ErrorMessage);

            // Rollback:
            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("TestMeasure"));
        }
        public void DeleteMeasureTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Model.Tables["Internet Sales"].Measures["Internet Total Sales"].Delete();
            handler.SaveDB();

            Assert.IsFalse(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales"));

            // Rollback:
            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Internet Sales"].Measures.Contains("Internet Total Sales"));
        }
Ejemplo n.º 17
0
        public void UpdateTomTests()
        {
            Ensure1500ModelExists();
            var handler = new TabularModelHandler(Constants.AasServerName, "TomWrapperTest1500");
            var cg1     = handler.Model.AddCalculationGroup("CG1");
            var ci1     = cg1.AddCalculationItem("CI1", "SELECTEDMEASURE()");

            Assert.AreEqual(handler.Model, ci1.Model);

            handler.SaveDB();
            handler.RefreshTom();

            cg1 = handler.Model.CalculationGroups.First();
            ci1 = (handler.Model.Tables["CG1"] as CalculationGroupTable).CalculationItems[0];
            Assert.AreEqual(cg1, ci1.Parent.Table);
            Assert.AreEqual(handler.Model, cg1.Model);
            Assert.AreEqual(handler.Model, ci1.Model);

            var jsonRep      = Serializer.SerializeObjects(cg1.CalculationItems);
            var objContainer = Serializer.ParseObjectJsonContainer(jsonRep);

            Assert.IsTrue(objContainer[typeof(CalculationItem)].Length > 0, "JsonContainer empty after serializing calc items (this will prevent CTRL+C operations on calc items)");

            cg1.Delete();
            handler.UndoManager.Undo();

            cg1 = handler.Model.CalculationGroups.First();
            ci1 = (handler.Model.Tables["CG1"] as CalculationGroupTable).CalculationItems[0];
            Assert.AreEqual(cg1, ci1.Parent.Table);
            Assert.AreEqual(handler.Model, cg1.Model);
            Assert.AreEqual(handler.Model, ci1.Model);
        }
        public void CreateHierarchyTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Tree = new MockTree(handler.Model);
            var table = handler.Model.Tables["Employee"];

            table.AddHierarchy("Test Hierarchy", null, "Base Rate", "Birth Date", "Department Name");
            handler.SaveDB();

            Assert.AreEqual(3, table.Hierarchies["Test Hierarchy"].Levels.Count);

            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.IsFalse(table.Hierarchies.Contains("Test Hierarchy"));
        }
        public void DuplicateTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            var c = handler.Model.Tables["Date"].AddCalculatedColumn();

            c.Clone("Cloned Column");

            var m = handler.Model.Tables["Date"].AddMeasure();

            m.Clone("Cloned Measure");

            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Date"].Columns.Contains("Cloned Column"));
            Assert.IsTrue(handler.Model.Tables["Date"].Measures.Contains("Cloned Measure"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
        }
Ejemplo n.º 20
0
        public void DuplicateTest()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");

            var c = handler.Model.Tables["Date"].AddCalculatedColumn();

            c.Clone("Cloned Column");

            var m = handler.Model.Tables["Date"].AddMeasure();

            m.Clone("Cloned Measure");

            handler.SaveDB();
            Assert.IsTrue(handler.Model.Tables["Date"].Columns.Contains("Cloned Column"));
            Assert.IsTrue(handler.Model.Tables["Date"].Measures.Contains("Cloned Measure"));

            handler.UndoManager.Rollback();
            handler.SaveDB();
        }
Ejemplo n.º 21
0
        public void ColumnsAndDataTypeTest()
        {
            var handler = new TabularModelHandler("localhost", "TestModel");
            var model   = handler.Model;

            var table = model.AddCalculatedTable();

            table.Expression = "ROW(\"Int64\", 1, \"String\", \"ABC\", \"Double\", 1.0)";

            handler.SaveDB();

            Assert.AreEqual(3, table.Columns.Count);
            Assert.AreEqual(DataType.Int64, table.Columns["Int64"].DataType);
            Assert.AreEqual(DataType.String, table.Columns["String"].DataType);
            Assert.AreEqual(DataType.Double, table.Columns["Double"].DataType);

            handler.UndoManager.Rollback();

            handler.SaveDB();
        }
        public void DeleteTestPerspectives()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            foreach (var p in handler.Model.Perspectives.ToList())
            {
                if (p.Name.Contains("Test"))
                {
                    p.Delete();
                }
            }
            handler.SaveDB();
        }
Ejemplo n.º 23
0
        public void DeleteTestPerspectives()
        {
            var handler = new TabularModelHandler(Constants.ServerName, "TomWrapperTest");

            foreach (var p in handler.Model.Perspectives.ToList())
            {
                if (p.Name.Contains("Test"))
                {
                    p.Delete();
                }
            }
            handler.SaveDB();
        }
        public void CultureTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Tree = new MockTree(handler.Model);
            var model = handler.Model;

            var measure = model.Tables["Reseller Sales"].Measures["Reseller Total Sales"];

            measure.DisplayFolder = "Test Folder";

            model.AddTranslation("da-DK");
            Assert.AreEqual("", measure.TranslatedNames["da-DK"]);
            Assert.AreEqual("", measure.TranslatedDisplayFolders["da-DK"]);

            measure.TranslatedNames["da-DK"] = "Reseller Total Sales";
            Assert.AreEqual("Reseller Total Sales", measure.TranslatedNames["da-DK"]);
            measure.Name = "Changed Name";
            handler.SaveDB();

            Assert.AreEqual("Changed Name", measure.TranslatedNames["da-DK"]);
            handler.UndoManager.Undo();
            measure.TranslatedNames["da-DK"] = "XXX";
            measure.Name = "Changed Name";
            handler.SaveDB();
            Assert.AreEqual("XXX", measure.TranslatedNames["da-DK"]);

            measure.TranslatedNames.Reset();
            measure.TranslatedDisplayFolders.Reset();
            handler.SaveDB();
            Assert.AreEqual("", measure.TranslatedNames["da-DK"]);
            Assert.AreEqual(measure.DisplayFolder, measure.TranslatedDisplayFolders["da-DK"]);

            handler.UndoManager.Rollback();
            handler.SaveDB();

            Assert.IsFalse(model.Cultures.Contains("da-DK"));
        }
        public void DeleteLevelTest()
        {
            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Model.Tables["Date"].Hierarchies["Calendar"].Levels["Quarter"].Delete();
            handler.SaveDB();

            var h = handler.Model.Tables["Date"].Hierarchies["Calendar"];

            Assert.AreEqual(0, h.Levels["Year"].Ordinal);
            Assert.AreEqual(1, h.Levels["Semester"].Ordinal);
            Assert.AreEqual(2, h.Levels["Month"].Ordinal);
            Assert.AreEqual(3, h.Levels["Day"].Ordinal);

            // Rollback:
            handler.UndoManager.Rollback();
            handler.SaveDB();
            Assert.AreEqual(0, h.Levels["Year"].Ordinal);
            Assert.AreEqual(1, h.Levels["Semester"].Ordinal);
            Assert.AreEqual(2, h.Levels["Quarter"].Ordinal);
            Assert.AreEqual(3, h.Levels["Month"].Ordinal);
            Assert.AreEqual(4, h.Levels["Day"].Ordinal);
        }
        public void PerspectiveTest()
        {
            DeleteTestPerspectives();

            var handler = new TabularModelHandler("localhost", "AdventureWorks");

            handler.Tree = new MockTree(handler.Model);

            var m = handler.Model;

            // Perspective which only includes a few select items:
            var pnIn = "Test Perspective Inclusive";

            Perspective.CreateNew(pnIn);
            m.Tables["Employee"].InPerspective[pnIn] = true;
            m.Tables["Date"].Hierarchies.InPerspective(pnIn, true);
            m.Tables["Internet Sales"].Measures.InPerspective(pnIn, true);
            m.Tables["Product"].Columns.InPerspective(pnIn, true);
            m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnIn] = true;

            // Perspective which includes everything except a few select items:
            var pnEx = "Test Perspective Exclusive";

            Perspective.CreateNew(pnEx);
            m.Tables.InPerspective(pnEx, true);
            m.Tables["Employee"].InPerspective[pnEx] = false;
            m.Tables["Date"].Hierarchies.InPerspective(pnEx, false);
            m.Tables["Internet Sales"].Measures.InPerspective(pnEx, false);
            m.Tables["Product"].Columns.InPerspective(pnEx, false);
            m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnEx] = false;

            handler.SaveDB();

            // Check on included perspective:
            Assert.IsTrue(m.Tables["Employee"].GetChildren().OfType <ITabularPerspectiveObject>().All(obj => obj.InPerspective[pnIn]));
            Assert.IsTrue(m.Tables["Employee"].InPerspective[pnIn]);
            Assert.IsTrue(m.Tables["Date"].Hierarchies.All(obj => obj.InPerspective[pnIn]));
            Assert.IsTrue(m.Tables["Internet Sales"].Measures.All(obj => obj.InPerspective[pnIn]));
            Assert.IsTrue(m.Tables["Product"].Columns.All(obj => obj.InPerspective[pnIn]));
            Assert.IsTrue(m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnIn]);
            Assert.AreEqual(1, m.Tables["Reseller Sales"].Measures.Count(obj => obj.InPerspective[pnIn]));
            Assert.IsTrue(m.Tables["Reseller Sales"].InPerspective[pnIn]);

            Assert.IsFalse(m.Tables["Geography"].GetChildren().OfType <ITabularPerspectiveObject>().Any(obj => obj.InPerspective[pnIn]));
            Assert.IsFalse(m.Tables["Geography"].InPerspective[pnIn]);
            Assert.IsFalse(m.Tables["Date"].Columns.Any(obj => obj.InPerspective[pnIn]));

            // Check on excluded perspective:
            Assert.IsFalse(m.Tables["Employee"].GetChildren().OfType <ITabularPerspectiveObject>().Any(obj => obj.InPerspective[pnEx]));
            Assert.IsFalse(m.Tables["Employee"].InPerspective[pnEx]);
            Assert.IsFalse(m.Tables["Date"].Hierarchies.Any(obj => obj.InPerspective[pnEx]));
            Assert.IsFalse(m.Tables["Internet Sales"].Measures.Any(obj => obj.InPerspective[pnEx]));
            Assert.IsFalse(m.Tables["Product"].Columns.Any(obj => obj.InPerspective[pnEx]));
            Assert.IsFalse(m.Tables["Reseller Sales"].Measures["Reseller Total Sales"].InPerspective[pnEx]);
            Assert.AreEqual(1, m.Tables["Reseller Sales"].Measures.Count(obj => !obj.InPerspective[pnEx]));
            Assert.IsTrue(m.Tables["Reseller Sales"].InPerspective[pnEx]);

            Assert.IsTrue(m.Tables["Geography"].GetChildren().OfType <ITabularPerspectiveObject>().All(obj => obj.InPerspective[pnEx]));
            Assert.IsTrue(m.Tables["Geography"].InPerspective[pnEx]);
            Assert.IsTrue(m.Tables["Date"].Columns.All(obj => obj.InPerspective[pnEx]));

            handler.UndoManager.Rollback();
            handler.SaveDB();

            // Check that perspectives were succesfully deleted:
            Assert.IsFalse(m.Perspectives.Contains(pnIn));
            Assert.IsFalse(m.Perspectives.Contains(pnEx));
        }
Ejemplo n.º 27
0
        void Deploy(string serverName, string databaseID, int doDeploy)
        {
            // Perform direct save:
            if (serverName == null)
            {
                var nextSwitch     = upperArgList.Skip(doDeploy + 1).FirstOrDefault();
                var deploySwitches = new[] { "-L", "-LOGIN", "-O", "-OVERWRITE", "-C", "-CONNECTIONS", "-P", "-PARTITIONS", "-Y", "-SKIPPOLICY", "-R", "-ROLES", "-M", "-MEMBERS", "-X", "-XMLA" };
                if (deploySwitches.Contains(nextSwitch))
                {
                    Error("Invalid argument syntax.");
                    OutputUsage();
                    throw new CommandLineException();
                }

                Console.WriteLine("Saving model metadata back to source...");
                if (Handler.SourceType == ModelSourceType.Database)
                {
                    try
                    {
                        Handler.SaveDB();
                        Console.WriteLine("Model metadata saved.");

                        var deploymentResult = Handler.GetLastDeploymentResults();
                        foreach (var err in deploymentResult.Issues)
                        {
                            if (errorOnDaxErr)
                            {
                                Error(err);
                            }
                            else
                            {
                                Warning(err);
                            }
                        }
                        foreach (var err in deploymentResult.Warnings)
                        {
                            Warning(err);
                        }
                        foreach (var err in deploymentResult.Unprocessed)
                        {
                            if (warnOnUnprocessed)
                            {
                                Warning(err);
                            }
                            else
                            {
                                Console.WriteLine(err);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Error("Save failed: " + ex.Message);
                    }
                }
                else
                {
                    try
                    {
                        Handler.Save(Handler.Source, Handler.SourceType == ModelSourceType.Folder ? SaveFormat.TabularEditorFolder : Handler.SourceType == ModelSourceType.Pbit ? SaveFormat.PowerBiTemplate : SaveFormat.ModelSchemaOnly, Handler.SerializeOptions, true);
                        Console.WriteLine("Model metadata saved.");
                    }
                    catch (Exception ex)
                    {
                        Error("Save failed: " + ex.Message);
                    }
                }
                throw new CommandLineException();
            }

            var conn = upperArgList.IndexOf("-CONNECTIONS");

            if (conn == -1)
            {
                conn = upperArgList.IndexOf("-C");
            }
            if (conn > -1)
            {
                var replaces = argList.Skip(conn + 1).TakeWhile(s => s[0] != '-').ToList();

                if (replaces.Count > 0 && replaces.Count % 2 == 0)
                {
                    // Placeholder replacing:
                    for (var index = 0; index < replaces.Count; index = index + 2)
                    {
                        replaceMap.Add(replaces[index], replaces[index + 1]);
                    }
                }
            }

            string userName = null;
            string password = null;
            var    options  = DeploymentOptions.StructureOnly;

            var switches = argList.Skip(doDeploy + 1).Where(arg => arg.StartsWith("-")).Select(arg => arg.ToUpper()).ToList();

            if (string.IsNullOrEmpty(serverName) || string.IsNullOrEmpty(databaseID))
            {
                Error("Invalid argument syntax.\n");
                OutputUsage();
                throw new CommandLineException();
            }
            if (switches.Contains("-L") || switches.Contains("-LOGIN"))
            {
                var switchPos = upperArgList.IndexOf("-LOGIN"); if (switchPos == -1)
                {
                    switchPos = upperArgList.IndexOf("-L");
                }
                userName = argList.Skip(switchPos + 1).FirstOrDefault(); if (userName != null && userName.StartsWith("-"))
                {
                    userName = null;
                }
                password = argList.Skip(switchPos + 2).FirstOrDefault(); if (password != null && password.StartsWith("-"))
                {
                    password = null;
                }
                if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
                {
                    Error("Missing username or password.\n");
                    OutputUsage();
                    throw new CommandLineException();
                }
                switches.Remove("-L"); switches.Remove("-LOGIN");
            }
            if (switches.Contains("-O") || switches.Contains("-OVERWRITE"))
            {
                options.DeployMode = DeploymentMode.CreateOrAlter;
                switches.Remove("-O"); switches.Remove("-OVERWRITE");
            }
            else
            {
                options.DeployMode = DeploymentMode.CreateDatabase;
            }
            if (switches.Contains("-P") || switches.Contains("-PARTITIONS"))
            {
                options.DeployPartitions = true;
                switches.Remove("-P"); switches.Remove("-PARTITIONS");

                if (switches.Contains("-Y") || switches.Contains("-SKIPPOLICY"))
                {
                    options.SkipRefreshPolicyPartitions = true;
                    switches.Remove("-Y"); switches.Remove("-SKIPPOLICY");
                }
            }
            if (switches.Contains("-C") || switches.Contains("-CONNECTIONS"))
            {
                options.DeployConnections = true;
                switches.Remove("-C"); switches.Remove("-CONNECTIONS");
            }
            if (switches.Contains("-R") || switches.Contains("-ROLES"))
            {
                options.DeployRoles = true;
                switches.Remove("-R"); switches.Remove("-ROLES");

                if (switches.Contains("-M") || switches.Contains("-MEMBERS"))
                {
                    options.DeployRoleMembers = true;
                    switches.Remove("-M"); switches.Remove("-MEMBERS");
                }
            }
            var    xmla_scripting_only = switches.Contains("-X") || switches.Contains("-XMLA");
            string xmla_script_file    = null;

            if (xmla_scripting_only)
            {
                var switchPos = upperArgList.IndexOf("-XMLA"); if (switchPos == -1)
                {
                    switchPos = upperArgList.IndexOf("-X");
                }
                xmla_script_file = argList.Skip(switchPos + 1).FirstOrDefault(); if (String.IsNullOrWhiteSpace(xmla_script_file) || xmla_script_file.StartsWith("-"))
                {
                    xmla_script_file = null;
                }
                if (string.IsNullOrEmpty(xmla_script_file))
                {
                    Error("Missing xmla_script_file.\n");
                    OutputUsage();
                    throw new CommandLineException();
                }
                switches.Remove("-X");
                switches.Remove("-XMLA");
            }

            try
            {
                if (replaceMap.Count > 0)
                {
                    Console.WriteLine("Switching connection string placeholders...");
                    foreach (var map in replaceMap)
                    {
                        Handler.Model.DataSources.SetPlaceholder(map.Key, map.Value);
                    }
                }

                var cs = string.IsNullOrEmpty(userName) ? TabularConnection.GetConnectionString(serverName, Program.ApplicationName) :
                         TabularConnection.GetConnectionString(serverName, userName, password, Program.ApplicationName);
                if (xmla_scripting_only)
                {
                    Console.WriteLine("Generating XMLA/TMSL script...");
                    var s = new TOM.Server();
                    s.Connect(cs);
                    var xmla = Handler.TabularDeployer.GetTMSL(Handler.Database, s, databaseID, options);
                    using (var sw = new StreamWriter(xmla_script_file))
                    {
                        sw.Write(xmla);
                    }
                    Console.WriteLine("XMLA/TMSL script generated.");
                }
                else
                {
                    Console.WriteLine("Deploying...");
                    Handler.Model.UpdateDeploymentMetadata(DeploymentModeMetadata.CLI);
                    var deploymentResult = Handler.TabularDeployer.Deploy(Handler.Database, cs, databaseID, options, CancellationToken.None);
                    Console.WriteLine("Deployment succeeded.");
                    foreach (var err in deploymentResult.Issues)
                    {
                        if (errorOnDaxErr)
                        {
                            Error(err);
                        }
                        else
                        {
                            Warning(err);
                        }
                    }
                    foreach (var err in deploymentResult.Warnings)
                    {
                        Warning(err);
                    }
                    foreach (var err in deploymentResult.Unprocessed)
                    {
                        if (warnOnUnprocessed)
                        {
                            Warning(err);
                        }
                        else
                        {
                            Console.WriteLine(err);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Error($"{(xmla_scripting_only ? "Script generation" : "Deployment")} failed! {ex.Message}");
            }
        }