public static void CreateNotificationRule(string strDisplayName, string strName, string strCriteria, EnterpriseManagementObject emoUser, ManagementPackClass mpc, ManagementPackObjectTemplate mpt, ref ManagementPack mp, EnterpriseManagementGroup emg) { ManagementPack mpSystemCenterLibrary = Helper.GetManagementPackByName("Microsoft.SystemCenter.Library", emg); ManagementPack mpSubscriptions = Helper.GetManagementPackByName("Microsoft.SystemCenter.Subscriptions", emg); string strSubscriptionsMPAlias = MakeMPElementSafeName(mpSubscriptions.Name); AddManagementPackReference(strSubscriptionsMPAlias, mpSubscriptions.Name, ref mp, emg); string strSystemCenterLibraryMPAlias = MakeMPElementSafeName(mpSystemCenterLibrary.Name); AddManagementPackReference(strSystemCenterLibraryMPAlias, mpSystemCenterLibrary.Name, ref mp, emg); ManagementPackClass mpcSubscriptionWorkflowTarget = GetClassByName("Microsoft.SystemCenter.SubscriptionWorkflowTarget", emg); ManagementPackDataSourceModuleType mpdsmtSubscription = (ManagementPackDataSourceModuleType)mpSubscriptions.GetModuleType("Microsoft.SystemCenter.CmdbInstanceSubscription.DataSourceModule"); ManagementPackRule mpr = new ManagementPackRule(mp, MakeMPElementSafeName(String.Format("NotificationSubscription.{0}", Guid.NewGuid()))); mpr.Enabled = ManagementPackMonitoringLevel.@true; mpr.ConfirmDelivery = true; mpr.Remotable = true; mpr.Priority = ManagementPackWorkflowPriority.Normal; mpr.Category = ManagementPackCategoryType.System; mpr.DiscardLevel = 100; mpr.Target = mp.ProcessElementReference <ManagementPackClass>(String.Format("$MPElement[Name=\"{0}!{1}\"]$", strSystemCenterLibraryMPAlias, mpcSubscriptionWorkflowTarget.Name)); ManagementPackDataSourceModule mpdsmSubscription = new ManagementPackDataSourceModule(mpr, "DS"); mpdsmSubscription.TypeID = mp.ProcessElementReference <ManagementPackDataSourceModuleType>(String.Format("$MPElement[Name=\"{0}!{1}\"]$", strSubscriptionsMPAlias, mpdsmtSubscription.Name)); StringBuilder sbDataSourceConfiguration = new StringBuilder(); sbDataSourceConfiguration.Append("<Subscription>"); sbDataSourceConfiguration.Append(String.Format("<InstanceSubscription Type=\"{0}\">", mpc.Id.ToString())); sbDataSourceConfiguration.Append(strCriteria); sbDataSourceConfiguration.Append("</InstanceSubscription>"); sbDataSourceConfiguration.Append("<PollingIntervalInSeconds>60</PollingIntervalInSeconds>"); sbDataSourceConfiguration.Append("<BatchSize>100</BatchSize>"); sbDataSourceConfiguration.Append("</Subscription>"); mpdsmSubscription.Configuration = sbDataSourceConfiguration.ToString(); ManagementPackWriteActionModuleType mpwamtSubscription = (ManagementPackWriteActionModuleType)mpSubscriptions.GetModuleType("Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction"); ManagementPackWriteActionModule mpwamSubscription = new ManagementPackWriteActionModule(mpr, "WA"); mpwamSubscription.TypeID = mp.ProcessElementReference <ManagementPackWriteActionModuleType>(String.Format("$MPElement[Name=\"{0}!{1}\"]$", strSubscriptionsMPAlias, mpwamtSubscription.Name)); StringBuilder sbWriteActionConfiguration = new StringBuilder(); sbWriteActionConfiguration.Append("<Subscription>"); sbWriteActionConfiguration.Append("<VisibleWorkflowStatusUi>true</VisibleWorkflowStatusUi>"); sbWriteActionConfiguration.Append("<EnableBatchProcessing>true</EnableBatchProcessing>"); sbWriteActionConfiguration.Append("<WindowsWorkflowConfiguration>"); sbWriteActionConfiguration.Append("<AssemblyName>Microsoft.EnterpriseManagement.Notifications.Workflows</AssemblyName>"); sbWriteActionConfiguration.Append("<WorkflowTypeName>Microsoft.EnterpriseManagement.Notifications.Workflows.SendNotificationsActivity</WorkflowTypeName>"); sbWriteActionConfiguration.Append("<WorkflowParameters>"); sbWriteActionConfiguration.Append("<WorkflowParameter Name=\"SubscriptionId\" Type=\"guid\">$MPElement$</WorkflowParameter>"); sbWriteActionConfiguration.Append("<WorkflowArrayParameter Name=\"DataItems\" Type=\"string\">"); sbWriteActionConfiguration.Append("<Item>$Data/.$</Item>"); sbWriteActionConfiguration.Append("</WorkflowArrayParameter>"); sbWriteActionConfiguration.Append("<WorkflowArrayParameter Name=\"InstanceIds\" Type=\"string\">"); sbWriteActionConfiguration.Append("<Item>$Data/BaseManagedEntityId$</Item>"); sbWriteActionConfiguration.Append("</WorkflowArrayParameter>"); sbWriteActionConfiguration.Append("<WorkflowArrayParameter Name=\"TemplateIds\" Type=\"string\">"); sbWriteActionConfiguration.Append(String.Format("<Item>{0}</Item>", mpt.Id.ToString())); sbWriteActionConfiguration.Append("</WorkflowArrayParameter>"); sbWriteActionConfiguration.Append("<WorkflowArrayParameter Name=\"PrimaryUserList\" Type=\"string\">"); sbWriteActionConfiguration.Append(String.Format("<Item>{0}</Item>", emoUser.Id.ToString())); sbWriteActionConfiguration.Append("</WorkflowArrayParameter>"); sbWriteActionConfiguration.Append("</WorkflowParameters>"); sbWriteActionConfiguration.Append("<RetryExceptions/>"); sbWriteActionConfiguration.Append("<RetryDelaySeconds>60</RetryDelaySeconds>"); sbWriteActionConfiguration.Append("<MaximumRunningTimeSeconds>7200</MaximumRunningTimeSeconds>"); sbWriteActionConfiguration.Append("</WindowsWorkflowConfiguration>"); sbWriteActionConfiguration.Append("</Subscription>"); mpwamSubscription.Configuration = sbWriteActionConfiguration.ToString(); mpr.DataSourceCollection.Add(mpdsmSubscription); mpr.WriteActionCollection.Add(mpwamSubscription); mpr.Status = ManagementPackElementStatus.PendingAdd; mp.AcceptChanges(); }
public static void CreateQueue(string strDisplayName, string strName, string strCriteria, ManagementPackClass mpc, ref ManagementPack mp, EnterpriseManagementGroup emg) { ManagementPack mpClass = mpc.GetManagementPack(); string strMPAlias = MakeMPElementSafeName(mpClass.Name); AddManagementPackReference(strMPAlias, mpClass.Name, ref mp, emg); ManagementPackClass classWorkItemGroup = GetClassByName("System.WorkItemGroup", emg); ManagementPackClass mpcQueue = new ManagementPackClass(mp, strName, ManagementPackAccessibility.Public); mpcQueue.Abstract = false; mpcQueue.Base = classWorkItemGroup; mpcQueue.DisplayName = strDisplayName; mpcQueue.Hosted = false; mpcQueue.Extension = false; mpcQueue.Singleton = true; mpcQueue.Status = ManagementPackElementStatus.PendingAdd; ManagementPackRelationship mprWorkItemGroupContainsWorkItem = GetRelationshipByName("System.WorkItemGroupContainsWorkItems", emg); ManagementPackRelationshipEndpoint mpreSource = new ManagementPackRelationshipEndpoint(mpcQueue, "ContainedByGroup"); ManagementPackRelationshipEndpoint mpreTarget = new ManagementPackRelationshipEndpoint(mpcQueue, "GroupContains"); mpreSource.Type = mpcQueue; mpreTarget.Type = mp.ProcessElementReference <ManagementPackClass>(String.Format("$MPElement[Name=\"{0}!{1}\"]$", strMPAlias, mpc.Name)); ManagementPackRelationship mprQueueWorkItem = new ManagementPackRelationship(mp, String.Format("{0}.Relationship", strName), ManagementPackAccessibility.Public); mprQueueWorkItem.DisplayName = String.Format("{0} Contains {1}", strDisplayName, mpc.DisplayName); mprQueueWorkItem.Abstract = false; mprQueueWorkItem.Base = mprWorkItemGroupContainsWorkItem; mprQueueWorkItem.Source = mpreSource; mprQueueWorkItem.Target = mpreTarget; mprQueueWorkItem.Status = ManagementPackElementStatus.PendingAdd; ManagementPackDiscoveryRelationship mpdrQueueWorkItem = new ManagementPackDiscoveryRelationship(); mpdrQueueWorkItem.TypeID = mprQueueWorkItem; ManagementPack mpSystemCenter = GetManagementPackByName("Microsoft.SystemCenter.Library", emg); string strSystemCenterLibraryMPAlias = MakeMPElementSafeName(mpSystemCenter.Name); AddManagementPackReference(strSystemCenterLibraryMPAlias, mpSystemCenter.Name, ref mp, emg); ManagementPackModuleType mpmtGroupPopulator = emg.Monitoring.GetModuleType("Microsoft.SystemCenter.GroupPopulator", mpSystemCenter); ManagementPackDiscovery mpdQueueWorkItem = new ManagementPackDiscovery(mp, MakeMPElementSafeName(String.Format("WorkITemGroup.{0}.Discovery.{1}", mpcQueue.Name, Guid.NewGuid().ToString()))); ManagementPackDataSourceModule mpdsmPopulator = new ManagementPackDataSourceModule(mpdQueueWorkItem, MakeMPElementSafeName(Guid.NewGuid().ToString())); ManagementPackElementReference <ManagementPackDataSourceModuleType> mperGroupPopulator = mp.ProcessElementReference <ManagementPackDataSourceModuleType>(String.Format("$MPElement[Name=\"{0}!{1}\"]$", strSystemCenterLibraryMPAlias, mpmtGroupPopulator.Name)); mpdsmPopulator.TypeID = mperGroupPopulator; StringBuilder sb = new StringBuilder(); sb.Append("<RuleId>$MPElement$</RuleId>\r\n"); sb.Append(String.Format("<GroupInstanceId>$MPElement[Name=\"{0}\"]$</GroupInstanceId>\r\n", strName)); sb.Append("<MembershipRules>\r\n"); sb.Append("<MembershipRule>\r\n"); sb.Append(String.Format("<MonitoringClass>$MPElement[Name=\"{0}!{1}\"]$</MonitoringClass>\r\n", strMPAlias, mpc.Name)); sb.Append(String.Format("<RelationshipClass>$MPElement[Name=\"{0}\"]$</RelationshipClass>\r\n", mprQueueWorkItem.Name)); sb.Append(strCriteria); sb.Append("</MembershipRule>\r\n"); sb.Append("</MembershipRules>\r\n"); mpdsmPopulator.Configuration = sb.ToString(); mpdQueueWorkItem.Enabled = ManagementPackMonitoringLevel.@true; mpdQueueWorkItem.Target = mpcQueue; mpdQueueWorkItem.ConfirmDelivery = false; mpdQueueWorkItem.Remotable = true; mpdQueueWorkItem.Priority = ManagementPackWorkflowPriority.Normal; mpdQueueWorkItem.Category = ManagementPackCategoryType.Discovery; mpdQueueWorkItem.DiscoveryRelationshipCollection.Add(mpdrQueueWorkItem); mpdQueueWorkItem.DataSource = mpdsmPopulator; mp.AcceptChanges(); }