// this routine clones the permissions for the various major permission types private void ClonePermissions(MajorObject mo, Role r) { DimensionPermission dimPerm = mo as DimensionPermission; CubePermission cubePerm = mo as CubePermission; DatabasePermission dbPerm = mo as DatabasePermission; DataSourcePermission dsPerm = mo as DataSourcePermission; if (dimPerm != null) { ClonePermissions(dimPerm, r); } else if (cubePerm != null) { ClonePermissions(cubePerm, r); } else if (dbPerm != null) { ClonePermissions(dbPerm, r); } else if (dsPerm != null) { ClonePermissions(dsPerm, r); } else { throw new System.Exception("BIDSHelper: unhandled permission type"); } }
private void ClonePermissions(CubePermission cp, Role r) { CubePermission newCp = cp.Clone(); newCp.ID = NewId(newCp); newCp.Name = newCp.ID; // cp.Name + " - Copy"; newCp.RoleID = r.ID; cp.Parent.CubePermissions.Add(newCp); }
private void CreateCube(Dictionary <string, object> collectedData) { //Connect To analysisServer using (Server analysisServer = new Server()) { Dictionary <string, object> executorData = new Dictionary <string, object>(); //dictionary for save executors data for next steps if (!collectedData.ContainsKey(ApplicationIDKey)) { executorData.Add(ApplicationIDKey, collectedData[ApplicationIDKey]); } analysisServer.Connect(accountWizardSettings.Get("AnalysisServer.ConnectionString")); //Get the database Database analysisDatabase = analysisServer.Databases.GetByName(accountWizardSettings.Get("AnalysisServer.Database")); #region CreateBoCube //Create bo cube Cube boCubeTemplate = analysisDatabase.Cubes[accountWizardSettings.Get("Cube.Templates.BOTemplate")]; Cube newBOCube = boCubeTemplate.Clone(); ////change cube name and id newBOCube.Name = accountWizardSettings.Get("Cube.BO.Name.Perfix") + collectedData["AccountSettings.CubeName"].ToString(); executorData.Add("AccountSettings.CubeName", collectedData["AccountSettings.CubeName"].ToString()); //for next step newBOCube.ID = accountWizardSettings.Get("Cube.BO.Name.Perfix") + collectedData["AccountSettings.CubeID"].ToString(); //change measures foreach (MeasureGroup measureGroup in newBOCube.MeasureGroups) { foreach (KeyValuePair <string, object> input in collectedData) { if (input.Value is Replacment) { Replacment replacement = (Replacment)input.Value; //AcquisitionS if (input.Key.ToUpper().StartsWith(C_AccSettACQ.ToUpper())) { string[] acquisitions = accountWizardSettings.Get(input.Key).Split(','); foreach (string acquisition in acquisitions) { Measure measure = measureGroup.Measures.FindByName(acquisition); if (measure != null) { //perfix of new useres /regs if (!replacement.CalcMembersOnly) { if (measureGroup.Measures.FindByName(replacement.ReplaceTo) == null) //check if their is no measure with the same name { measure.Name = replacement.ReplaceTo; } } } } } //Target AcquisitionS else if (input.Key.ToUpper().StartsWith(C_AccSettTargetACQ.ToUpper())) { string[] targetAcquisitions = accountWizardSettings.Get(input.Key).Split(','); foreach (string targetAcquisition in targetAcquisitions) { Measure measure = measureGroup.Measures.FindByName(targetAcquisition); if (measure != null) { //key of new active useres /actives if (measureGroup.Measures.FindByName(replacement.ReplaceTo) == null) //check if their is no measure with the same name { measure.Name = replacement.ReplaceTo; } } } } // CLIENT SPECIFIC else if (input.Key.StartsWith(C_AccSettClientSpecific, true, null)) { if (!replacement.CalcMembersOnly) { Measure measure = measureGroup.Measures.FindByName(replacement.ReplaceFrom); if (measure != null) { if (measureGroup.Measures.FindByName(replacement.ReplaceTo) == null) //check if their is no measure with the same name { measure.Name = replacement.ReplaceTo; } } } } else if (input.Key.StartsWith(C_AccSettStringReplacemnet))// string replacment (measure -google values) { if (!replacement.CalcMembersOnly) { Measure measure = measureGroup.Measures.FindByName(replacement.ReplaceFrom); if (measure != null) { if (measureGroup.Measures.FindByName(replacement.ReplaceTo) == null) //check if their is no measure with the same name { measure.Name = replacement.ReplaceTo; } } } } //Copy All Data to the next step Panorama cube if (!executorData.ContainsKey(input.Key)) { executorData.Add(input.Key, input.Value); } } } //Change scope_id foreach (Partition partition in measureGroup.Partitions) { QueryBinding queryBinding = partition.Source as QueryBinding; if (queryBinding != null) { //since the "scopee_id" must be on the end of the query according to amit //get last index of scope_id int indexScope_id = queryBinding.QueryDefinition.LastIndexOf("scope_id", StringComparison.OrdinalIgnoreCase); int spacesUntillEndOfQuery = queryBinding.QueryDefinition.Length - indexScope_id; //remove all scope_id queryBinding.QueryDefinition = queryBinding.QueryDefinition.Remove(indexScope_id, spacesUntillEndOfQuery); //insert new scope_id queryBinding.QueryDefinition = queryBinding.QueryDefinition.Insert(queryBinding.QueryDefinition.Length, string.Format(" Scope_ID={0}", collectedData["AccountSettings.BI_Scope_ID"].ToString())); // } } } //change client specific measures/STRING REPLACEMENT/ in calculated members foreach (MdxScript script in newBOCube.MdxScripts) { foreach (Command command in script.Commands) { CalculatedMembersCollection CalculatedMembersCollection = new CalculatedMembersCollection(command.Text); foreach (KeyValuePair <string, object> input in collectedData) { if (input.Value is Replacment) { Replacment replacment = (Replacment)input.Value; if (input.Key.StartsWith(C_AccSettClientSpecific, true, null)) { CalculatedMembersCollection.ReplaceCalculatedMembersStrings(replacment.ReplaceFrom, replacment.ReplaceTo); } else if (input.Key.ToUpper().StartsWith(C_AccSettACQ.ToUpper())) //acquisitions { string[] acquisitions = accountWizardSettings.Get(input.Key).Split(','); foreach (string acquisition in acquisitions) { CalculatedMembersCollection.ReplaceCalculatedMembersStrings(acquisition, replacment.ReplaceTo); } } else if (input.Key.ToUpper().StartsWith(C_AccSettTargetACQ.ToUpper())) //target acquisitions { string[] targetAcquisitions = accountWizardSettings.Get(input.Key).Split(','); foreach (string targetAcquisition in targetAcquisitions) { CalculatedMembersCollection.ReplaceCalculatedMembersStrings(targetAcquisition, replacment.ReplaceTo); } } else if (input.Key.StartsWith(C_AccSettStringReplacemnet)) //string replacement { CalculatedMembersCollection.ReplaceCalculatedMembersStrings(replacment.ReplaceFrom, replacment.ReplaceTo); } } } command.Text = CalculatedMembersCollection.GetText(); } } //Add last step created role (for this test some existing role role 8 which not exist in the template) //Get the roleID from last step collector //Dictionary<string, object> roleData = GetCollectedData(); CubePermission cubePermission = new CubePermission(collectedData["AccountSettings.RoleID"].ToString(), accountWizardSettings.Get("Cube.CubePermission.ID"), accountWizardSettings.Get("Cube.CubePermission.Name")); cubePermission.Read = ReadAccess.Allowed; newBOCube.CubePermissions.Add(cubePermission); ///Add the new BO cube try { int result = analysisDatabase.Cubes.Add(newBOCube); newBOCube.Update(UpdateOptions.ExpandFull, UpdateMode.Create); } catch (Exception ex) { Log.Write("Error adding BO cube", ex); } #endregion #region ContentCube //check if content cube should be add too------------------------------------- //--------------------------------------------------------------------------- executorData.Add("AccountSettings.AddContentCube", collectedData["AccountSettings.AddContentCube"]); executorData.Add("AccountSettings.ProcessCubes", collectedData["AccountSettings.ProcessCubes"]); if (bool.Parse(collectedData["AccountSettings.AddContentCube"].ToString()) == true) { //Add Content Cube //Create bo cube Cube ContentCubeTemplate = analysisDatabase.Cubes[accountWizardSettings.Get("Cube.Templates.ContentTemplate")]; Cube newContentCube = ContentCubeTemplate.Clone(); ////change cube name and id newContentCube.Name = accountWizardSettings.Get("Cube.Content.Name.Perfix") + collectedData["AccountSettings.CubeName"].ToString(); newContentCube.ID = accountWizardSettings.Get("Cube.Content.Name.Perfix") + collectedData["AccountSettings.CubeID"].ToString(); //Get google values for replacments; string[] googleConversions = accountWizardSettings.Get("EdgeBI.Wizards.GoogleConversions").Split(','); foreach (MeasureGroup measureGroup in newContentCube.MeasureGroups) { //Replace Google Value foreach (KeyValuePair <string, object> input in collectedData) { if (input.Value is Replacment) { Replacment replacement = (Replacment)input.Value; if (!replacement.CalcMembersOnly) { foreach (string googleConversion in googleConversions) { if (replacement.ReplaceFrom == googleConversion) { Measure measure = measureGroup.Measures.FindByName(replacement.ReplaceFrom); if (measure != null) { if (measureGroup.Measures.FindByName(replacement.ReplaceTo) == null) //check if their is no measure with the same name { measure.Name = replacement.ReplaceTo.Replace(accountWizardSettings.Get("Cube.BO.Name.Perfix"), accountWizardSettings.Get("Cube.Content.Name.Perfix")); } } } } } } } //Replace the scope_id foreach (Partition partition in measureGroup.Partitions) { QueryBinding queryBinding = partition.Source as QueryBinding; if (queryBinding != null) { //since the "scopee_id" must be on the end of the query according to amit //get last index of scope_id int indexScope_id = queryBinding.QueryDefinition.LastIndexOf("scope_id", StringComparison.OrdinalIgnoreCase); int spacesUntillEndOfQuery = queryBinding.QueryDefinition.Length - indexScope_id; //remove all scope_id queryBinding.QueryDefinition = queryBinding.QueryDefinition.Remove(indexScope_id, spacesUntillEndOfQuery); //insert new scope_id queryBinding.QueryDefinition = queryBinding.QueryDefinition.Insert(queryBinding.QueryDefinition.Length, string.Format(" Scope_ID={0}", collectedData["AccountSettings.BI_Scope_ID"].ToString())); } } } //Replace google conversion on calculated members foreach (MdxScript script in newBOCube.MdxScripts) { foreach (Command command in script.Commands) { CalculatedMembersCollection CalculatedMembersCollection = new CalculatedMembersCollection(command.Text); foreach (KeyValuePair <string, object> input in collectedData) { if (input.Value is Replacment) { Replacment replacment = (Replacment)input.Value; foreach (string googleConversion in googleConversions) { if (replacment.ReplaceFrom == googleConversion) { CalculatedMembersCollection.ReplaceCalculatedMembersStrings(replacment.ReplaceFrom, replacment.ReplaceTo); } } } } command.Text = CalculatedMembersCollection.GetText(); } } //add last step role (cube permission cubePermission = new CubePermission(collectedData["AccountSettings.RoleID"].ToString(), accountWizardSettings.Get("Cube.CubePermission.ID"), accountWizardSettings.Get("Cube.CubePermission.Name")); cubePermission.Read = ReadAccess.Allowed; newContentCube.CubePermissions.Add(cubePermission); ///Add the new Content cube try { int result = analysisDatabase.Cubes.Add(newContentCube); newContentCube.Update(UpdateOptions.ExpandFull, UpdateMode.Create); } catch (Exception ex) { Log.Write("Error adding BO cube", ex); } } #endregion SaveExecutorData(executorData); } }