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); } }
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 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; } } }