void setProjectConnectorRelationship(ref CreatableEnterpriseManagementObject project) { CreatableEnterpriseManagementRelationshipObject cemroConnector = new CreatableEnterpriseManagementRelationshipObject(emg, mprRelationships.First(r => r.Name == "System.ProjectConfigItemRelatesToProjectConnector")); cemroConnector.SetSource(emoConnector); cemroConnector.SetTarget(project); iddObjects.Add(cemroConnector); }
private void brd_Loc_Add_MouseDown(object sender, MouseButtonEventArgs e) { try { if (LocationTreeView.SelectedItem != null) { Guid guid = new Guid("2d30268b-c9d8-b9f5-93ff-5b95b2cd3e4d"); Collection <IDataItem> ItemsCol = new Collection <IDataItem>(); Microsoft.EnterpriseManagement.GenericForm.FormUtilities.Instance.LaunchAddInstancePickerDialog(ItemsCol, guid); if (ItemsCol.Count() == 1) { TreeViewItem TR = (TreeViewItem)LocationTreeView.SelectedItem; // Get an object by GUID Guid G = new Guid(TR.Tag.ToString()); EnterpriseManagementObject treeviewEMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>(G, ObjectQueryOptions.Default); IDataItem targetInstanceIDataItem = ItemsCol[0]; //IDataItem targetInstanceIDataItem = this.LocPiker.Instance; Guid gId = (Guid)targetInstanceIDataItem["$Id$"]; Trace.WriteLine(DateTime.Now + " : " + "Id : " + gId); //+ " ID : " + targetInstanceIDataItem["ID"]); EnterpriseManagementObject pickerEMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>(gId, ObjectQueryOptions.Default); Trace.WriteLine(DateTime.Now + " : " + "Values for create Rel : " + treeviewEMO.DisplayName + " : " + pickerEMO.DisplayName + " picker.Id : " + pickerEMO.Id.ToString()); CreatableEnterpriseManagementRelationshipObject relationship = new CreatableEnterpriseManagementRelationshipObject(emg, relationClass); relationship.SetSource(treeviewEMO); relationship.SetTarget(pickerEMO); relationship.Commit(); //FillTreeView.Now(emg, locationClass, relationClass, LocationTreeView); Fill(); } else if (ItemsCol.Count() > 1) { MessageBox.Show("Please select only ONE location!", "Multiselection!", MessageBoxButton.OK, MessageBoxImage.Warning); } else if (ItemsCol.Count() == 0) { MessageBox.Show("Please select location!", "No location selected!", MessageBoxButton.OK, MessageBoxImage.Warning); } } else { MessageBox.Show("Please select location!", "No location selected!", MessageBoxButton.OK, MessageBoxImage.Warning); Trace.WriteLine(DateTime.Now + " : " + "Not have Values for create Rel"); } } catch (Exception exc) { Trace.WriteLine(DateTime.Now + " : " + "Error in Picker Dialog " + exc.Message); } }
void setProjectHasOwnerRelationship(string nameId, ref CreatableEnterpriseManagementObject cemoProject) { //get the owner of the project as an EMO. EnterpriseManagementObjectCriteria ecoOwnerCriteria = new EnterpriseManagementObjectCriteria(string.Format(xmlOwnerCriteria, nameId), mpcClasses.First(mpc => mpc.Name == "Microsoft.AD.UserBase"), managementPacks.First(mp => mp.Name == "Microsoft.Windows.Library"), emg); EnterpriseManagementObject emoOwner = emg.EntityObjects.GetObjectReader <EnterpriseManagementObject>(ecoOwnerCriteria, ObjectQueryOptions.Default).FirstOrDefault(); if (emoOwner != null) { //set up the relationship between project owner and project. CreatableEnterpriseManagementRelationshipObject cemroOwner = new CreatableEnterpriseManagementRelationshipObject(emg, mprRelationships.First(r => r.Name == "Cireson.ProjectAutomation.ProjectHasOwner")); cemroOwner.SetSource(cemoProject); cemroOwner.SetTarget(emoOwner); iddObjects.Add(cemroOwner); } }
private void OnSubmitted(object sender, FormCommandExecutedEventArgs e) { //try //{ // CurrentDataItem = this.DataContext as IDataItem; // if (!((bool)CurrentDataItem["$IsNew$"])) // { // CurrentEMO = emg.EntityObjects.GetObject<EnterpriseManagementObject>((Guid)CurrentDataItem["$Id$"], ObjectQueryOptions.Default); // } // else // { // } //} //catch (Exception exc) //{ // System.Windows.MessageBox.Show(DateTime.Now + " : " + "Error in OnSubmitted() " + exc.Message); //} try { CurrentDataItem = this.DataContext as IDataItem; CurrentEMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>((Guid)CurrentDataItem["$Id$"], ObjectQueryOptions.Default); //Связываем добавленные CI if (CItoAddСollection.Count > 0) { foreach (EnterpriseManagementObject CI_EMO in CItoAddСollection) { CreatableEnterpriseManagementRelationshipObject relationHAtoCI = new CreatableEnterpriseManagementRelationshipObject(emg, relConfigItemRefRack); relationHAtoCI.SetSource(CI_EMO); relationHAtoCI.SetTarget(CurrentEMO); relationHAtoCI.Commit(); } } } catch (Exception exc) { Trace.WriteLine(DateTime.Now + " : " + "Error in OnSubmitted() " + exc.Message); } }
//После создания HA - привязываем к нему CI из коллекции CItoAddCollection private void OnSubmitted(object sender, FormCommandExecutedEventArgs e) { try { CurrentDataItem = this.DataContext as IDataItem; CurrentEMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>((Guid)CurrentDataItem["$Id$"], ObjectQueryOptions.Default); //Связываем добавленные CI if (CItoAddСollection.Count > 0) { foreach (EnterpriseManagementObject CI_EMO in CItoAddСollection) { CreatableEnterpriseManagementRelationshipObject relationHAtoCI = new CreatableEnterpriseManagementRelationshipObject(emg, relationHAtoCIClass); relationHAtoCI.SetSource(CurrentEMO); relationHAtoCI.SetTarget(CI_EMO); relationHAtoCI.Commit(); } } //CurrentEMO.DisplayName = CurrentEMO[null,"AssetKey"].Value.ToString() + this.TemplateCatalogItem.sip.Instance["MakeModel"].ToString(); //CurrentEMO.Commit(); //Link Model //ManagementPack mpHA = emg.GetManagementPack("SMCenter.HardwareAssetManagement.Library", "75b45bd6835084b1", new Version()); //HAClass = emg.EntityTypes.GetClass("SMCenter.HardwareAsset", mpHA); //ManagementPack mpSystem = emg.GetManagementPack("System.Library", "31bf3856ad364e35", new Version()); //ConfItemClass = emg.EntityTypes.GetClass("System.ConfigItem", mpSystem); //ManagementPackRelationship relationHAtoModelClass = emg.EntityTypes.GetRelationshipClass("SMCenter.HardwareAssetIsHardwareCatalogItem", mpHA); //CreatableEnterpriseManagementRelationshipObject relationHAtoModel = new CreatableEnterpriseManagementRelationshipObject(emg, relationHAtoModelClass); //Trace.WriteLine(DateTime.Now + " : " + "CurrentEmo " + CurrentEMO.FullName); //Trace.WriteLine(DateTime.Now + " : " + "CurrentModelEmo " + CurrentModelEMO.FullName); //relationHAtoModel.SetSource(CurrentEMO); //relationHAtoModel.SetTarget(CurrentModelEMO); //relationHAtoModel.Commit(); } catch (Exception exc) { Trace.WriteLine(DateTime.Now + " : " + "Error in OnSubmitted() " + exc.Message); } }
private void brd_Loc_Create_MouseDown(object sender, MouseButtonEventArgs e) { if (LocationTreeView.SelectedItem != null) { CreatableEnterpriseManagementObject newLocation = new CreatableEnterpriseManagementObject(emg, locationClass); //Add some property values newLocation[locationClass, "DisplayName"].Value = "Add some info"; newLocation.Commit(); //Treeview Item - Parent Item TreeViewItem TR = (TreeViewItem)LocationTreeView.SelectedItem; // Get an object by GUID Guid G = new Guid(TR.Tag.ToString()); EnterpriseManagementObject treeviewEMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>(G, ObjectQueryOptions.Default); CreatableEnterpriseManagementRelationshipObject relationship = new CreatableEnterpriseManagementRelationshipObject(emg, relationClass); relationship.SetSource(treeviewEMO); relationship.SetTarget(newLocation); relationship.Commit(); //FillTreeView.Now(emg, locationClass, relationClass, LocationTreeView); Fill(); //Convert EnterpriseManagementObject to IDataItem EnterpriseManagementObjectDataType dataType = new EnterpriseManagementObjectDataType(locationClass); IDataItem newlocationDataItem = dataType.CreateProxyInstance(newLocation); //Open Console form for created object //ConsoleContextHelper.Instance.PopoutForm(itemIdentity); Microsoft.EnterpriseManagement.GenericForm.FormUtilities.Instance.PopoutForm(newlocationDataItem); } else { MessageBox.Show("Please select parent location!", "No location selected", MessageBoxButton.OK, MessageBoxImage.Warning); Trace.WriteLine(DateTime.Now + " : " + "Not have Values for create Rel"); } }
private void lbOk_MouseDown(object sender, MouseButtonEventArgs e) { try { //IDataItem DI = this.TemplateSoftwareTitle.sipInstance; //Guid CurrentNodeId = (Guid)DI["$Id$"]; //EnterpriseManagementObject SoftwareTitle_EMO = emg.EntityObjects.GetObject<EnterpriseManagementObject>(CurrentNodeId, ObjectQueryOptions.Default); //MessageBox.Show(SoftwareTitle_EMO.Name); //MessageBox.Show(TemplateSoftwareTitle.mpClass.Name); if (this.txtDisplayName.Text != "" && this.txtDisplayName.Text != null) { //ManagementPackClass classTask = ManagementGroup.EntityTypes.GetClass(“Task”, testMP) CreatableEnterpriseManagementObject Version = new CreatableEnterpriseManagementObject(emg, classSoftwareVersion); //Version [classTask, “Id”].Value = Guid.NewGuid().ToString(); Version[classSoftwareVersion, "DisplayName"].Value = this.txtDisplayName.Text; CreatableEnterpriseManagementRelationshipObject relationshipObject = new CreatableEnterpriseManagementRelationshipObject(emg, relSoftwareTitleHasSoftwareVersion); relationshipObject.SetSource(EMO_SoftwareTitle); relationshipObject.SetTarget(Version); IncrementalDiscoveryData dd = new IncrementalDiscoveryData(); dd.Add(Version); //target object dd.Add(relationshipObject); //relationship object dd.Commit(emg); this.Close(); } else { MessageBox.Show("Type SoftwareVersion DisplayName!", "Warning!!!", MessageBoxButton.OK, MessageBoxImage.Warning); } } catch (Exception ex) { System.Windows.MessageBox.Show("Ok_MouseDown void error : " + ex.Message, "Service Manager", MessageBoxButton.OK, MessageBoxImage.Error); this.Close(); } }
private void OnSubmitted(object sender, FormCommandExecutedEventArgs e) { try { CurrentDataItem = this.DataContext as IDataItem; CurrentEMO = emg.EntityObjects.GetObject <EnterpriseManagementObject>((Guid)CurrentDataItem["$Id$"], ObjectQueryOptions.Default); //Связываем добавленные User Objects Trace.WriteLine(DateTime.Now + " : " + "toAddCollection.Count " + toAddСollection.Count.ToString()); if (toAddСollection.Count > 0) { foreach (EnterpriseManagementObject User_EMO in toAddСollection) { CreatableEnterpriseManagementRelationshipObject userrelation = new CreatableEnterpriseManagementRelationshipObject(emg, userrelationClass); userrelation.SetSource(User_EMO); userrelation.SetTarget(CurrentEMO); userrelation.Commit(); } } } catch (Exception exc) { Trace.WriteLine(DateTime.Now + " : " + "Error in OnSubmitted() " + exc.Message); } }
public override void ExecuteCommand(IList <NavigationModelNodeBase> nodes, NavigationModelNodeTask task, ICollection <string> parameters) { //Used for idataitem (form mode, 1=new form, 2=edit form); int iMode = 0; //Set title for messageboxes string sAppTitle = "Assign Incident Directly To Analyst"; //Connect to MG IServiceContainer isContainer = (IServiceContainer)FrameworkServices.GetService(typeof(IServiceContainer)); IManagementGroupSession imgSession = (IManagementGroupSession)isContainer.GetService(typeof(IManagementGroupSession)); if (imgSession == null) { MessageBox.Show("Failed to connect to the current session", sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } EnterpriseManagementGroup emg = imgSession.ManagementGroup; //Get the incident class (System.WorkItem.Incident) ManagementPackClass classIncident = emg.EntityTypes.GetClass(new Guid("A604B942-4C7B-2FB2-28DC-61DC6F465C68")); //Microsoft.Windows.Library ManagementPack mpWindows = emg.ManagementPacks.GetManagementPack(new Guid("545131F0-58DE-1914-3A82-4FCAC9100A33")); //Get the Microsoft.AD.User class ManagementPackClass mpcADUser = emg.EntityTypes.GetClass("Microsoft.AD.User", mpWindows); //Return the currently selected incident reference NavigationModelNodeBase selincident = nodes[0]; //Form mode (not new)? if (selincident.Location.AbsoluteUri.IndexOf("FormDisplay", 0) > 0) { iMode = 2; } //Get objects EnterpriseManagementObject emoSelIncident = null; IDataItem i = ConsoleContextHelper.Instance.GetFormDataContext(nodes[0]); //Get the analyst settings class and MP ManagementPack mpSetting = emg.ManagementPacks.GetManagementPack(new Guid("56d5c2d6-7e19-59ff-7a81-ac8a331fcb3f")); ManagementPackClass classSettings = mpSetting.GetClass("AssignSettingsClass"); //Get the emo for the settings EnterpriseManagementObject emoSettings = emg.EntityObjects.GetObject <EnterpriseManagementObject>(classSettings.Id, ObjectQueryOptions.Default); //TP names string sAssignedTo = "AssignedUser"; string sActionLog = "ActionLogs"; if (emoSettings[classSettings, "AssignedUserAlias"].Value != null) { sAssignedTo = emoSettings[classSettings, "AssignedUserAlias"].Value.ToString(); } if (emoSettings[classSettings, "ActionLogAlias"].Value != null) { sActionLog = emoSettings[classSettings, "ActionLogAlias"].Value.ToString(); } //Check if new if (!(bool)i["$IsNew$"]) { //Now get the guid of the selected workitem. Depending on the view type, the return will be different, so take it after the last "." //There are lots of ways of doing this, this is not the best way but it was the first I learnt and it works string strGuid = selincident.GetId().Substring(selincident.GetId().LastIndexOf('.') + 1); //Get the emo of the workitem via it's guid emoSelIncident = emg.EntityObjects.GetObject <EnterpriseManagementObject>(new Guid(strGuid), ObjectQueryOptions.Default); } //Creating new incident else { iMode = 1; } //Was task was run from an workitem opened for editing, as opposed to a list or view? if (selincident.Location.AbsoluteUri.IndexOf("FormDisplay", 0) != -1) { iMode = 2; } //Get the status guid Guid gStatus = Guid.NewGuid(); try { //"New" status will throw an exception to must catch here if (i["Status"] != null) { gStatus = (Guid)(i["Status"] as IDataItem)["Id"]; } } catch { } //Get the incident class (System.WorkItem.Incident) ManagementPackClass mpcIncident = emg.EntityTypes.GetClass(new Guid("a604b942-4c7b-2fb2-28dc-61dc6f465c68")); //Check if the incident is closed if (gStatus == new Guid("bd0ae7c4-3315-2eb3-7933-82dfc482dbaf")) { MessageBox.Show("This incident cannot be reassigned as it has been closed.", sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //Note - we are alllowing resolved incidents to be re-assigned, to prevent this, uncomment the following block: /*else if (gStatus == new Guid("2b8830b6-59f0-f574-9c2a-f4b4682f1681")) * { * MessageBox.Show("This incident cannot be reassigned as it has been resolved.", sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); * return; * } */ //Current assignee and Id string sId = ""; string sUser = ""; string sTierGuid = ""; if (iMode == 0) { //View mode sUser = this.GetProperty(ref emg, emoSelIncident, ref mpcADUser, "DisplayName"); sId = emoSelIncident[mpcIncident, "Id"].Value.ToString(); if (emoSelIncident[mpcIncident, "TierQueue"].Value != null) { sTierGuid = ((ManagementPackEnumeration)emoSelIncident[mpcIncident, "TierQueue"].Value).Id.ToString(); } } else { //New or edit form mode try { //Get display name of current assignee if (i[sAssignedTo] == null) { sUser = "******"; } else { sUser = (string)(i[sAssignedTo] as IDataItem)["DisplayName"]; } } catch { //Set no assignee sUser = "******"; } sId = (string)i["Id"]; try { //Check current tier queue enum value if (i["TierQueue"] != null) { sTierGuid = ((Guid)(i["TierQueue"] as IDataItem)["Id"]).ToString(); } } catch { } } //Create a new instance of the form and set it up AssignForm af = new AssignForm(); af.sTierGuid = sTierGuid; af.Text = "Assign incident " + sId + " directly to Analyst - currently assigned to " + sUser; af.textDefault.Text = sUser; af.emg = emg; //Show the analyst/tier selection form DialogResult dr = af.ShowDialog(); if (dr != DialogResult.Cancel) { //Get the samaccountname from the right hand part of the combobox.text after the ! string sADUserName = af.comboAnalysts.Text.Substring(af.comboAnalysts.Text.LastIndexOf("(") + 1); //Remove last ) sADUserName = sADUserName.Substring(0, sADUserName.Length - 1); //Format to get the display name only from the left part - this is used for the actionlog entry string sADUserDisplayName = af.comboAnalysts.Text.Substring(0, af.comboAnalysts.Text.LastIndexOf("(")).Trim(); try { //Set the query for the user - note - usernames are assumed unique across configured domains //If this is not the case, you need to customise these criteria to include a domain string sADUserCriteria = String.Format(@" <Criteria xmlns=""http://Microsoft.EnterpriseManagement.Core.Criteria/""> <Reference Id=""Microsoft.Windows.Library"" PublicKeyToken=""{0}"" Version=""{1}"" Alias=""MSWinLib"" /> <Expression> <SimpleExpression> <ValueExpressionLeft> <Property>$Target/Property[Type='MSWinLib!Microsoft.AD.User']/UserName$</Property> </ValueExpressionLeft> <Operator>Equal</Operator> <ValueExpressionRight> <Value>" + sADUserName + @"</Value> </ValueExpressionRight> </SimpleExpression> </Expression> </Criteria> ", mpWindows.KeyToken, mpWindows.Version.ToString()); //Object query options ObjectQueryOptions objQueryOpts = new ObjectQueryOptions(); objQueryOpts.ObjectRetrievalMode = ObjectRetrievalOptions.Buffered; objQueryOpts.DefaultPropertyRetrievalBehavior = ObjectPropertyRetrievalBehavior.All; //We are searching via samAccountName so there will be only 1 item objQueryOpts.MaxResultCount = 1; //Get the AD User CI object EnterpriseManagementObjectCriteria emocADUser = new EnterpriseManagementObjectCriteria(sADUserCriteria, mpcADUser, emg); IObjectReader <EnterpriseManagementObject> orADUser = emg.EntityObjects.GetObjectReader <EnterpriseManagementObject>(emocADUser, objQueryOpts); EnterpriseManagementObject emoAssignToUser = orADUser.ElementAt(0); if (iMode == 0) { //View mode - create a new assigned to user relationship ManagementPackRelationship relAssignedToUser = emg.EntityTypes.GetRelationshipClass(new Guid("15e577a3-6bf9-6713-4eac-ba5a5b7c4722")); CreatableEnterpriseManagementRelationshipObject cemroAssignedToUser = new CreatableEnterpriseManagementRelationshipObject(emg, relAssignedToUser); //Set the source and target... cemroAssignedToUser.SetSource(emoSelIncident); cemroAssignedToUser.SetTarget(emoAssignToUser); //Save cemroAssignedToUser.Commit(); //Add a new comment this.AddActionLogEntry(emg, emoSelIncident, "Incident was assigned to " + sADUserDisplayName, af.textComment.Text); //Check tier if (af.bShowTier) { if (af.comboTier.Text == "") { emoSelIncident[classIncident, "TierQueue"].Value = null; } else { ManagementPackEnumeration mpeTier = emg.EntityTypes.GetEnumeration(new Guid(af.comboTierGuids.Items[af.comboTier.SelectedIndex].ToString())); emoSelIncident[classIncident, "TierQueue"].Value = mpeTier; } emoSelIncident.Commit(); } //Refresh the current incident view this.RequestViewRefresh(); } else { //Note - IDataItem property names depend on the type projection being used and may differ from these //Form mode, create a proxy to the emo user object to set on the form EnterpriseManagementObjectDataType dataType = new EnterpriseManagementObjectDataType(mpcADUser); IDataItem iUser = dataType.CreateProxyInstance(emoAssignToUser); i[sAssignedTo] = iUser; //Check tier if (af.bShowTier) { if (af.comboTier.Text == "") { //Remove tier i["TierQueue"] = null; } else { //Set tier, get enum first ManagementPackEnumeration mpeTier = emg.EntityTypes.GetEnumeration(new Guid(af.comboTierGuids.Items[af.comboTier.SelectedIndex].ToString())); i["TierQueue"] = mpeTier; } } //Uncommenting this will cause the IDataItem to be saved and thus update the actual object in the database, normally you don't want to do this //as you want the user to click OK or cancel on the form instead //EnterpriseManagementObjectProjectionDataType.UpdateDataItem(i); //IDataItem Action log // //Get the System.WorkItem.Library mp ManagementPack mpWorkItemLibrary = emg.ManagementPacks.GetManagementPack(new Guid("405D5590-B45F-1C97-024F-24338290453E")); //Get the actionlog class ManagementPackClass mpcActionLog = emg.EntityTypes.GetClass("System.WorkItem.TroubleTicket.ActionLog", mpWorkItemLibrary); //Create a new action log entry as an idataitem CreatableEnterpriseManagementObject cemoActionLog = new CreatableEnterpriseManagementObject(emg, mpcActionLog); EnterpriseManagementObjectDataType dataTypeLog = new EnterpriseManagementObjectDataType(mpcActionLog); IDataItem iLog = dataTypeLog.CreateProxyInstance(cemoActionLog); //Setup the new action log entry iLog["Id"] = Guid.NewGuid().ToString(); iLog["Description"] = af.textComment.Text; iLog["Title"] = "Reassignment Comment"; iLog["EnteredBy"] = UserPrincipal.Current.DisplayName; iLog["EnteredDate"] = DateTime.Now.ToUniversalTime(); //Set action type (this also adds the icon and is required) ManagementPackEnumeration enumActionLog = mpWorkItemLibrary.GetEnumerations().GetItem("System.WorkItem.ActionLogEnum.TaskExecuted"); iLog["ActionType"] = enumActionLog; //This adds the new idataitem log entry to the entries displayed on the form, it does not over-write the existing entries i[sActionLog] = iLog; } } catch (System.Exception e) { //Oops MessageBox.Show(e.Message + "\n\n" + e.StackTrace, sAppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } } }
protected virtual IncrementalDiscoveryData PrepareScomDiscoveryData(ScomDiscoveryType direction, IEnumerable <T> objects) { // create object for both incremental and full discovery var result = new IncrementalDiscoveryData(); foreach (var @object in objects) { if ([email protected](_seedClass, _actionPointClass).IsValid) { throw new Exception($"Instance has invalid properties or missing required properties"); } var newSeedInstance = new CreatableEnterpriseManagementObject(_managementGroup, _seedClass); CreatableEnterpriseManagementRelationshipObject newSomethingShouldManageInstance = null; foreach (var classProperty in _seedClass.PropertyCollection) { try { newSeedInstance[classProperty].Value = @object[classProperty.Id]; } catch (KeyNotFoundException) // ignore situations, when non-key or non-required fields are not available { if (classProperty.Required || classProperty.Key) { throw; } } } // Set displayname try { newSeedInstance[_displayNamePropertyId].Value = @object[_displayNamePropertyId]; } catch (Exception ex) { } //Unhosted, with specific action point if (!_seedClass.Hosted && _actionPointClass != null && @object.ActionPoint != null) { if (_relMapShouldManageEntity != null) { newSomethingShouldManageInstance = new CreatableEnterpriseManagementRelationshipObject(_managementGroup, _relMapShouldManageEntity); newSomethingShouldManageInstance.SetTarget(newSeedInstance); newSomethingShouldManageInstance.SetSource(@object.ActionPoint); } // sometimes when specific Health Service is deleted, relationship may revert to All Management Server Pool if (_relHsShouldManageEntity != null && [email protected](_managementGroup.EntityTypes.GetClass(_managementServicePoolClassId))) { newSomethingShouldManageInstance = new CreatableEnterpriseManagementRelationshipObject(_managementGroup, _relHsShouldManageEntity); newSomethingShouldManageInstance.SetTarget(newSeedInstance); newSomethingShouldManageInstance.SetSource(@object.ActionPoint); } if (_relMapShouldManageEntity == null && _relHsShouldManageEntity == null) { throw new NotSupportedException("Scenario not supported."); } } // Hosted, in this case myActionPointClass is the hosing class if (_seedClass.Hosted && _actionPointClass != null && @object.ActionPoint != null) { //Doesn't break reference most likely, needs to be tested var hostClass = _actionPointClass; while (hostClass != null) { foreach (var hostProperty in hostClass.PropertyCollection) { if (hostProperty.Key) { newSeedInstance[hostProperty].Value = @object.ActionPoint[hostProperty].Value; } } hostClass = hostClass.FindHostClass(); } } switch (direction) { case ScomDiscoveryType.Insert: case ScomDiscoveryType.Update: result.Add(newSeedInstance); if (newSomethingShouldManageInstance != null) { result.Add(newSomethingShouldManageInstance); } // don't need Hosted==True check, newSomethingShouldManageInstance will be null for hosted classes if (newSomethingShouldManageInstance != null && direction == ScomDiscoveryType.Update) { PerformRelationshipCleanup(_seedClass, newSeedInstance, @object.ActionPoint); } //if (mySeedClass.Hosted) { } break; case ScomDiscoveryType.Delete: result.Remove(newSeedInstance); if (newSomethingShouldManageInstance != null) { result.Remove(newSomethingShouldManageInstance); } break; default: throw new Exception("Unknown direction, unable to prepare discovery"); } } return(result); }
protected virtual IncrementalDiscoveryData PrepareSCOMDiscoveryData(SCOMDiscoveryType direction, IList <T> objects) { IncrementalDiscoveryData result = new IncrementalDiscoveryData(); // create object for both incremental and full discovery bool hasData = false; foreach (T newObject in objects) { if (!HasAllRequiredProperties(newObject)) { continue; } hasData = true; CreatableEnterpriseManagementObject newSeedInstance = new CreatableEnterpriseManagementObject(myMG, mySeedClass); CreatableEnterpriseManagementRelationshipObject newSomethingShouldManageInstance = null; foreach (var classProperty in mySeedClass.PropertyCollection) { try { newSeedInstance[classProperty].Value = newObject[classProperty.Id]; } catch (KeyNotFoundException) // ignore situations, when non-key or non-required fields are not available { if (classProperty.Required || classProperty.Key) { throw; } } } // also try to set DisplayName if available try { newSeedInstance[SystemId.EntityClassProperties.DisplayNamePropertyId].Value = newObject.GetClassInstanceProperty(SystemId.EntityClassProperties.DisplayNamePropertyId); } catch (KeyNotFoundException) { } // ignore // Unhosted, with specific action point if (!mySeedClass.Hosted && myActionPointClass != null && newObject.ActionPoint != null) { if (relMAPShouldManageEntity != null) { newSomethingShouldManageInstance = new CreatableEnterpriseManagementRelationshipObject(myMG, relMAPShouldManageEntity); newSomethingShouldManageInstance.SetTarget(newSeedInstance); newSomethingShouldManageInstance.SetSource(newObject.ActionPoint); } // sometimes when specific Health Service is deleted, relationship may revert to All Management Server Pool if (relHSShouldManageEntiry != null && !newObject.ActionPoint.IsInstanceOf(myMG.EntityTypes.GetClass(SystemCenterId.ManagementServicePoolClassId))) { newSomethingShouldManageInstance = new CreatableEnterpriseManagementRelationshipObject(myMG, relHSShouldManageEntiry); newSomethingShouldManageInstance.SetTarget(newSeedInstance); newSomethingShouldManageInstance.SetSource(newObject.ActionPoint); } if (relMAPShouldManageEntity == null && relHSShouldManageEntiry == null) { throw new NotSupportedException("Scenario not supported."); } } // Hosted, in this case myActionPointClass is the hosing class if (mySeedClass.Hosted && myActionPointClass != null && newObject.ActionPoint != null) { ManagementPackClass hostClass = myActionPointClass; while (hostClass != null) { foreach (ManagementPackProperty hostProperty in hostClass.PropertyCollection) { if (hostProperty.Key) { newSeedInstance[hostProperty].Value = newObject.ActionPoint[hostProperty].Value; } } hostClass = hostClass.FindHostClass(); } } if (hasData) { switch (direction) { case SCOMDiscoveryType.Insert: case SCOMDiscoveryType.Update: result.Add(newSeedInstance); if (newSomethingShouldManageInstance != null) { result.Add(newSomethingShouldManageInstance); } // don't need Hosted==True check, newSomethingShouldManageInstance will be null for hosted classes if (newSomethingShouldManageInstance != null && direction == SCOMDiscoveryType.Update) { PerformRelationshipCleanup(mySeedClass, newSeedInstance, newObject.ActionPoint); } if (mySeedClass.Hosted) { } break; case SCOMDiscoveryType.Delete: result.Remove(newSeedInstance); if (newSomethingShouldManageInstance != null) { result.Remove(newSomethingShouldManageInstance); } break; } } } return(result); }
/// <summary> /// Create Relationships /// </summary> private static void CreateRelationships() { foreach (SyncFailoverGroup sfog in SyncFailoverGroupList) { // Get SyncFailover Group Object EnterpriseManagementObject syncFailoverGroupObject = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(sfog.SCOM_Object.Id, ObjectQueryOptions.Default); // Add Device Relationship foreach (f5Device dev in sfog.DeviceList) { // Create SyncFailoverGroup->Device Containment Relationship Object ManagementPackRelationship mpr_SyncFailoverGroupContainsDevice = SCOM.GetManagementPackRelationship("AP.F5.LTM.SyncFailoverGroupContainsDevices"); CreatableEnterpriseManagementRelationshipObject obj_SyncFailoverGroupContainsDevice = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_SyncFailoverGroupContainsDevice); obj_SyncFailoverGroupContainsDevice.SetSource(syncFailoverGroupObject); obj_SyncFailoverGroupContainsDevice.SetTarget(dev.SCOM_DeviceObject); relationshipData.Add(obj_SyncFailoverGroupContainsDevice); } // Loop Through Traffic Groups foreach (TrafficGroup tg in sfog.TrafficGroupList) { // Add Device Relationship foreach (f5Device dev in tg.DeviceGroup.DeviceList) { // Create TrafficGroup->Device Containment Relationship Object ManagementPackRelationship mpr_TrafficGroupContainsDevices = SCOM.GetManagementPackRelationship("AP.F5.LTM.TrafficGroupContainsDevices"); CreatableEnterpriseManagementRelationshipObject obj_TrafficGroupContainsDevice = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_TrafficGroupContainsDevices); obj_TrafficGroupContainsDevice.SetSource(tg.SCOM_Object); obj_TrafficGroupContainsDevice.SetTarget(dev.SCOM_DeviceObject); relationshipData.Add(obj_TrafficGroupContainsDevice); } } // Loop Through Partitions foreach (Partition p in sfog.PartitionList) { // Create ClientSslProfile -> Certificate Containment foreach (ProfileClientSSL profile in p.ClientSslProfileList) { if (profile.CertificateList.Count > 0) { // Get Client SSL Object EnterpriseManagementObject profile_Object = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(profile.SCOM_Object.Id, ObjectQueryOptions.Default); foreach (Certificate cert in profile.CertificateList) { // Get Certificate Object EnterpriseManagementObject cert_Object = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(cert.SCOM_Object.Id, ObjectQueryOptions.Default); // Create Relationship ManagementPackRelationship mpr_Containment = SCOM.GetManagementPackRelationship("AP.F5.LTM.ProfileClientSSL.ContainsCertificates"); CreatableEnterpriseManagementRelationshipObject obj_Containment = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_Containment); obj_Containment.SetSource(profile_Object); obj_Containment.SetTarget(cert_Object); relationshipData.Add(obj_Containment); } } } // Create ServerSslProfile -> Certificate Containment foreach (ProfileServerSSL profile in p.ServerSslProfileList) { if (profile.CertificateList.Count > 0) { // Get Client SSL Object EnterpriseManagementObject profile_Object = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(profile.SCOM_Object.Id, ObjectQueryOptions.Default); foreach (Certificate cert in profile.CertificateList) { // Get Certificate Object EnterpriseManagementObject cert_Object = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(cert.SCOM_Object.Id, ObjectQueryOptions.Default); // Create Relationship ManagementPackRelationship mpr_Containment = SCOM.GetManagementPackRelationship("AP.F5.LTM.ProfileServerSSL.ContainsCertificates"); CreatableEnterpriseManagementRelationshipObject obj_Containment = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_Containment); obj_Containment.SetSource(profile_Object); obj_Containment.SetTarget(cert_Object); relationshipData.Add(obj_Containment); } } } // Add Virtual Server Containments foreach (VirtualServer vs in p.VirtualServerList) { // Get Traffic Group Object EnterpriseManagementObject vipObject = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(vs.SCOM_Object.Id, ObjectQueryOptions.Default); // Do Client SSL Profiles foreach (ProfileClientSSL profile in vs.ProfileClientSslList) { // Get Profile Object EnterpriseManagementObject profileObject = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(profile.SCOM_Object.Id, ObjectQueryOptions.Default); // Create VirtualServer->ProfileClientSSL Containment Relationship Object ManagementPackRelationship mpr_VirtualServerContainsProfile = SCOM.GetManagementPackRelationship("AP.F5.LTM.VirtualServerContainsProfileClientSSL"); CreatableEnterpriseManagementRelationshipObject obj_VirtualServerContainsProfile = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_VirtualServerContainsProfile); obj_VirtualServerContainsProfile.SetSource(vipObject); obj_VirtualServerContainsProfile.SetTarget(profileObject); relationshipData.Add(obj_VirtualServerContainsProfile); } // Do Server SSL Profiles foreach (ProfileServerSSL profile in vs.ProfileServerSslList) { // Get Profile Object EnterpriseManagementObject profileObject = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(profile.SCOM_Object.Id, ObjectQueryOptions.Default); // Create VirtualServer->ProfileServerSSL Containment Relationship Object ManagementPackRelationship mpr_VirtualServerContainsProfile = SCOM.GetManagementPackRelationship("AP.F5.LTM.VirtualServerContainsProfileServerSSL"); CreatableEnterpriseManagementRelationshipObject obj_VirtualServerContainsProfile = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_VirtualServerContainsProfile); obj_VirtualServerContainsProfile.SetSource(vipObject); obj_VirtualServerContainsProfile.SetTarget(profileObject); relationshipData.Add(obj_VirtualServerContainsProfile); } // Do Pools if (vs.DefaultPool != null) { // Get Pool Object EnterpriseManagementObject poolObject = SCOM.m_managementGroup.EntityObjects.GetObject <EnterpriseManagementObject>(vs.DefaultPool.SCOM_Object.Id, ObjectQueryOptions.Default); // Create VirtualServer->Pool Containment Relationship Object ManagementPackRelationship mpr_VirtualServerContainsPools = SCOM.GetManagementPackRelationship("AP.F5.LTM.VirtualServerContainsPools"); CreatableEnterpriseManagementRelationshipObject obj_VirtualServerContainsPools = new CreatableEnterpriseManagementRelationshipObject(SCOM.m_managementGroup, mpr_VirtualServerContainsPools); obj_VirtualServerContainsPools.SetSource(vipObject); obj_VirtualServerContainsPools.SetTarget(poolObject); relationshipData.Add(obj_VirtualServerContainsPools); } } } } }
EnterpriseManagementObject buildTaskActivity(PublishedTask task, EnterpriseManagementObject releaseRecord, EnterpriseManagementObject taskActivity, EnterpriseManagementObject project, ref int sequenceId) { var activityClass = mpcClasses.First(mpc => mpc.Name == "Cireson.ProjectAutomation.ProjectTask.Activity"); #region set properties if (taskActivity.IsNew) { taskActivity[activityClass, "Id"].Value = sTaskActivityPrefix + taskActivity[activityClass, "Id"].Value as string; taskActivity[activityClass, "TaskGUID"].Value = task.Id; if (releaseRecord[null, "Status"].Value == releaseStatusEnums.First(e => e.Name == "ReleaseStatusEnum.InProgress")) //if RR in progress, set initial status to pending. { taskActivity[activityClass, "Status"].Value = activityStatusEnums.First(e => e.Name == "ActivityStatusEnum.Ready"); } else if (releaseRecord[null, "Status"].Value == releaseStatusEnums.First(e => e.Name == "ReleaseStatusEnum.Editing")) // if RR in editing mode, set initial status to on-hold. { taskActivity[activityClass, "Status"].Value = activityStatusEnums.First(e => e.Name == "ActivityStatusEnum.OnHold"); } } taskActivity[activityClass, "PercentComplete"].Value = task.PercentComplete as int?; taskActivity[activityClass, "Title"].Value = task.Name + " : " + taskActivity[activityClass, "PercentComplete"].Value + "% " + mpManagementPacks.First(mp => mp.Name == "Cireson.ProjectAutomation.Library").GetStringResource("strComplete").DisplayName; taskActivity[activityClass, "Description"].Value = task.Notes; taskActivity[activityClass, "ScheduledStartDate"].Value = task.ScheduledStart; taskActivity[activityClass, "ScheduledEndDate"].Value = task.ScheduledFinish; taskActivity[activityClass, "SequenceId"].Value = sequenceId; taskActivity[activityClass, "DisplayName"].Value = taskActivity[activityClass, "Id"].Value; #endregion #region status enums //set a status //Activity Status (System.WorkItem.Activity.Library) (ActivityStatusEnum) (57db4880-000e-20bb-2f9d-fe4e8aca3cf6) //Cancelled (System.WorkItem.Activity.Library) (ActivityStatusEnum.Cancelled) (89465302-2a23-d2b6-6906-74f03d9b7b41) //Completed (System.WorkItem.Activity.Library) (ActivityStatusEnum.Completed) (9de908a1-d8f1-477e-c6a2-62697042b8d9) //Failed (System.WorkItem.Activity.Library) (ActivityStatusEnum.Failed) (144bcd52-a710-2778-2a6e-c62e0c8aae74) //In Progress (System.WorkItem.Activity.Library) (ActivityStatusEnum.Active) (11fc3cef-15e5-bca4-dee0-9c1155ec8d83) //On Hold (System.WorkItem.Activity.Library) (ActivityStatusEnum.OnHold) (d544258f-24da-1cf3-c230-b057aaa66bed) //Pending (System.WorkItem.Activity.Library) (ActivityStatusEnum.Ready) (50c667cf-84e5-97f8-f6f8-d8acd99f181c) //Rerun (System.WorkItem.Activity.Library) (ActivityStatusEnum.Rerun) (baa948b5-cc6a-57d7-4b56-d2012721b2e5) //Skipped (System.WorkItem.Activity.Library) (ActivityStatusEnum.Skipped) (eaec5899-b13c-d107-3e1a-955da6bf9fa7) if (task.PercentComplete == 100 && releaseRecord[null, "Status"].Value == releaseStatusEnums.First(e => e.Name == "ReleaseStatusEnum.InProgress")) // only set status if RR is in progress { taskActivity[activityClass, "Status"].Value = activityStatusEnums.First(e => e.Name == "ActivityStatusEnum.Completed"); } #endregion #region set workitem and CI relationships CreatableEnterpriseManagementRelationshipObject cemroReleaseContainsActivity = new CreatableEnterpriseManagementRelationshipObject( emg, mprRelationships.First(r => r.Name == "System.WorkItemContainsActivity")); cemroReleaseContainsActivity.SetSource(releaseRecord); cemroReleaseContainsActivity.SetTarget(taskActivity); iddBucket.Add(cemroReleaseContainsActivity); CreatableEnterpriseManagementRelationshipObject cemroActivityHasProject = new CreatableEnterpriseManagementRelationshipObject( emg, mprRelationships.First(r => r.Name == "Cireson.ProjectAutomation.WorkItemHasProject")); cemroActivityHasProject.SetSource(taskActivity); cemroActivityHasProject.SetTarget(project); iddBucket.Add(cemroActivityHasProject); CreatableEnterpriseManagementRelationshipObject cemroRelatedProject = new CreatableEnterpriseManagementRelationshipObject( emg, mprRelationships.First(r => r.Name == "Cireson.ProjectAutomation.ProjectHasTask")); cemroRelatedProject.SetSource(project); cemroRelatedProject.SetTarget(taskActivity); iddBucket.Add(cemroRelatedProject); #endregion #region set activity implemeter and resources var userClass = mpcClasses.First(mpc => mpc.Name == "Microsoft.AD.UserBase"); var taskOwner = task.Assignments.FirstOrDefault(); if (taskOwner != null && taskOwner.Resource.DefaultAssignmentOwner.ServerObjectIsNull != true) //bug fix. We needed to check the server if the default owner is null too. { string activityImplementerSID = taskOwner.Resource.DefaultAssignmentOwner.UserId.NameId; EnterpriseManagementObjectCriteria emoCriteria = new EnterpriseManagementObjectCriteria(string.Format(xmlResourceCriteria, activityImplementerSID), userClass, mpManagementPacks.First(mp => mp.Name == "Microsoft.Windows.Library"), emg); EnterpriseManagementObject emoImplementer = emg.EntityObjects.GetObjectReader <EnterpriseManagementObject>(emoCriteria, ObjectQueryOptions.Default).FirstOrDefault(); if (emoImplementer != null && (bool)emoProjectAutomationSettings[null, "CanAssignActivityImplementer"].Value) { CreatableEnterpriseManagementRelationshipObject cemroActivityImplementer = new CreatableEnterpriseManagementRelationshipObject( emg, mprRelationships.First(r => r.Name == "System.WorkItemAssignedToUser")); cemroActivityImplementer.SetSource(taskActivity); cemroActivityImplementer.SetTarget(emoImplementer); iddBucket.Add(cemroActivityImplementer); } foreach (var assignment in task.Assignments) { //get the user SID if (assignment.Resource.DefaultAssignmentOwner.ServerObjectIsNull == true) { continue; } var resourceSid = assignment.Resource.DefaultAssignmentOwner.UserId.NameId; emoCriteria = new EnterpriseManagementObjectCriteria(string.Format(xmlResourceCriteria, resourceSid), userClass, mpManagementPacks.First(mp => mp.Name == "Microsoft.Windows.Library"), emg); EnterpriseManagementObject emoResource = emg.EntityObjects.GetObjectReader <EnterpriseManagementObject>(emoCriteria, ObjectQueryOptions.Default).FirstOrDefault(); if (emoResource != null) { CreatableEnterpriseManagementRelationshipObject cemroResource = new CreatableEnterpriseManagementRelationshipObject( emg, mprRelationships.First(r => r.Name == "System.WorkItemRelatesToConfigItem")); cemroResource.SetSource(taskActivity); cemroResource.SetTarget(emoResource); iddBucket.Add(cemroResource); } } } #endregion sequenceId++; return(taskActivity); }