In Operations Manager 2007, views are groups of managed objects that have a commonality, which is defined in the view properties. When you select a view, a query is executed and the results of the query are displayed in the results pane.

Several views are created by default when Operations Manager is installed. Management Packs also contain views. When a Management Pack is imported, a folder is created in the Monitoring pane. This folder contains the views that are defined in the Management Pack. You cannot change these views, and you cannot add new views to the Management Pack folder. However, you can create a folder in the Monitoring pane and create views that appear in your folder.

There are several view types, each displaying a different aspect of monitoring data. The following example demonstrates how to create a state view and a diagram view. A state view displays relationships between components, computers, and computer groups. A diagram view displays a graphical view of a set of managed objects and how they relate to one another.

Visual Basic  Copy Code
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Imports System.Text
Imports System.Xml
Imports Microsoft.EnterpriseManagement
Imports Microsoft.EnterpriseManagement.Configuration
Imports Microsoft.EnterpriseManagement.Monitoring


Namespace SDKSamples
	Class Program
		Public Overloads Shared Function Main(ByVal args() As String) As Integer

			Dim mg As ManagementGroup = New ManagementGroup("localhost")
			Dim mp As ManagementPack
			Dim stateView As ManagementPackView
			Dim diagramView As ManagementPackView
			Dim viewFolder As ManagementPackFolder
			Dim folderId As String

			mp = GetDefaultMP(mg)

			folderId = "ViewSamples.SampleFolder" & Guid.NewGuid().ToString("N")

			viewFolder = CreateViewFolder(mp, mg, "Sample Folder", folderId)

			stateView = CreateStateView(mp, mg, viewFolder)
			diagramView = CreateDiagramView(mp, mg, viewFolder)

			mp.AcceptChanges()
		End Function

		' ---------------------------------------------------------------------
		Private Shared Function GetDefaultMP( _
			ByVal mg As ManagementGroup) As ManagementPack

			Dim managementPacks As ReadOnlyCollection(Of ManagementPack)

			managementPacks = mg.GetManagementPacks("Microsoft.SystemCenter.OperationsManager.DefaultUser")

			If (managementPacks.Count <> 1) Then

				Throw New ApplicationException("Failed to retrieve the default mp")
			End If

			Return managementPacks(0)
		End Function

		' ---------------------------------------------------------------------
		Private Shared Function CreateDiagramView( _
			ByVal mp As ManagementPack, _
			ByVal mg As ManagementGroup, _
			ByVal viewFolder As ManagementPackFolder) As ManagementPackView

			Dim stateViewTypes As ReadOnlyCollection(Of MonitoringViewType)
			Dim sql2005DBClasses As ReadOnlyCollection(Of MonitoringClass)
			Dim view As ManagementPackView
			Dim viewConfigDoc As XmlDocument

			stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.DiagramViewType")

			If (stateViewTypes.Count <> 1) Then
				Throw New ApplicationException("Failed to load the state view type")
			End If

			view = New ManagementPackView(mp, "ViewsSample.DiagramView1", ManagementPackAccessibility.Public)

			view.TypeID = stateViewTypes(0)
			view.DisplayName = "Sample Diagram View"

			sql2005DBClasses = mg.GetMonitoringClasses(New MonitoringClassCriteria("DisplayName='SQL 2005 DB'"))

			If (sql2005DBClasses.Count <> 1) Then
				Throw New ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported")
			End If

			view.Target = sql2005DBClasses(0)
			view.Category = "Operations"

			viewConfigDoc = CreateDiagramViewConfigDoc(mg, sql2005DBClasses(0))

			view.Configuration = viewConfigDoc.ChildNodes(0).InnerXml

			Dim folderItem As ManagementPackFolderItem = New ManagementPackFolderItem(view, viewFolder)

			Return view
		End Function

		' ---------------------------------------------------------------------
		Private Shared Function CreateDiagramViewConfigDoc( _
			ByVal mg As ManagementGroup, _
			ByVal monitoringClass As MonitoringClass) As XmlDocument

			Dim configDoc As XmlDocument = New XmlDocument()
			Dim rootNode As XmlElement = configDoc.CreateElement("Configuration")
			Dim presentationNode As XmlElement = configDoc.CreateElement("Presentation")
			Dim criteriaNode As XmlElement = configDoc.CreateElement("Criteria")

			configDoc.AppendChild(rootNode)
			rootNode.AppendChild(criteriaNode)
			rootNode.AppendChild(presentationNode)

			presentationNode.InnerXml = "<DiagramViewCriteria>" & _
											"<DiagramViewDisplay>" & _
											 "<NodesPerRow>3</NodesPerRow>" & _
											"<ContainmentLine>" & _
												"<Color />" & _
												"<SourceArrow IsFilled=""false"">" & _
												"<ArrowStyle>NoAnchor</ArrowStyle>" & _
												"</SourceArrow>" & _
												"<TargetArrow IsFilled=""false"">" & _
												"<ArrowStyle>ArrowAnchor</ArrowStyle>" & _
												"</TargetArrow>" & _
											"</ContainmentLine>" & _
											"<NonContainmentLine>" & _
												"<Color Red=""6"" Green=""134"" Blue=""253"" />" & _
												"<SourceArrow IsFilled=""false"">" & _
												"<ArrowStyle>NoAnchor</ArrowStyle>" & _
												"</SourceArrow>" & _
												"<TargetArrow IsFilled=""false"">" & _
												"<ArrowStyle>ArrowAnchor</ArrowStyle>" & _
												"</TargetArrow>" & _
												"<LineStyle>DashDotDot</LineStyle>" & _
											"</NonContainmentLine>" & _
											"</DiagramViewDisplay>" & _
										"</DiagramViewCriteria>"

			Dim target As XmlElement = configDoc.CreateElement("Target")

			Dim dbMonitoringObjects As ReadOnlyCollection(Of PartialMonitoringObject)

			dbMonitoringObjects = mg.GetPartialMonitoringObjects(monitoringClass)

			If (dbMonitoringObjects.Count < 1) Then
				Throw New ApplicationException("At least one database object is required")
			End If

			target.InnerText = dbMonitoringObjects(0).Id.ToString()

			rootNode.AppendChild(target)

			Return configDoc
		End Function

		' ---------------------------------------------------------------------
		Private Shared Function CreateStateView( _
			ByVal mp As ManagementPack, _
			ByVal mg As ManagementGroup, _
			ByVal viewFolder As ManagementPackFolder) As ManagementPackView

			Dim stateViewTypes As ReadOnlyCollection(Of MonitoringViewType)
			Dim sql2005DBClasses As ReadOnlyCollection(Of MonitoringClass)
			Dim view As ManagementPackView
			Dim viewConfigDoc As XmlDocument

			stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.StateViewType")

			If (stateViewTypes.Count <> 1) Then
				Throw New ApplicationException("Failed to load the state view type")
			End If

			view = New ManagementPackView( _
				mp, "ViewsSample.SampleStateView2", ManagementPackAccessibility.Public)

			view.TypeID = stateViewTypes(0)
			view.DisplayName = "Sample State View2"

			sql2005DBClasses = mg.GetMonitoringClasses( _
				New MonitoringClassCriteria("DisplayName='SQL 2005 DB'"))

			If (sql2005DBClasses.Count <> 1) Then
				Throw New ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported")
			End If

			view.Target = sql2005DBClasses(0)
			view.Category = "Operations"

			viewConfigDoc = CreateViewConfigDoc(sql2005DBClasses(0))

			view.Configuration = viewConfigDoc.ChildNodes(0).InnerXml

			Dim folderItem As ManagementPackFolderItem = New ManagementPackFolderItem(view, viewFolder)

			Return view
		End Function

		' ---------------------------------------------------------------------
		Private Shared Function CreateViewConfigDoc( _
					ByVal monitoringClass As MonitoringClass) As XmlDocument

			Dim configDoc As XmlDocument = New XmlDocument()
			Dim rootNode As XmlElement = configDoc.CreateElement("Configuration")
			Dim presentationNode As XmlElement = configDoc.CreateElement("Presentation")
			Dim criteriaNode As XmlElement = configDoc.CreateElement("Criteria")

			Dim maintenanceModeProp As XmlElement = configDoc.CreateElement("InMaintenanceMode")

			maintenanceModeProp.InnerText = "false"

			criteriaNode.AppendChild(maintenanceModeProp)

			configDoc.AppendChild(rootNode)
			rootNode.AppendChild(criteriaNode)
			rootNode.AppendChild(presentationNode)

			CreateColumnXmlNode(presentationNode, 0, "State", monitoringClass.Name, "Descending", True)
			CreateColumnXmlNode(presentationNode, -1, "Maintenance Mode", "InMaintenanceMode", "Ascending", True)
			CreateColumnXmlNode(presentationNode, -1, "Name", "Name", "Ascending", True)
			CreateColumnXmlNode(presentationNode, -1, "Path", "Path", "Ascending", False)

			Dim properties As ReadOnlyCollection(Of MonitoringClassProperty)

			properties = monitoringClass.GetMonitoringProperties(BaseClassTraversalDepth.Recursive)

			For Each prop As MonitoringClassProperty In properties
				CreateColumnXmlNode( _
					presentationNode, -1, prop.DisplayName, prop.Name, "Ascending", True)
			Next

			Return configDoc
		End Function

		' ---------------------------------------------------------------------
		Private Shared Function CreateViewFolder(ByVal mp As ManagementPack, _
			ByVal mg As ManagementGroup, _
			ByVal folderDisplayName As String, _
			ByVal folderId As String) As ManagementPackFolder

			Dim newFolder As ManagementPackFolder
			Dim parentFolders As ReadOnlyCollection(Of MonitoringFolder)

			parentFolders = mg.GetMonitoringFolders(New MonitoringFolderCriteria("Name='Microsoft.SystemCenter.Monitoring.ViewFolder.Root'"))

			If parentFolders.Count <> 1 Then
				Throw New ApplicationException("Failed to retrieve the root folder")
			End If

			newFolder = New ManagementPackFolder(mp, folderId, ManagementPackAccessibility.Public)

			newFolder.DisplayName = folderDisplayName

			newFolder.ParentFolder = CType(parentFolders(0), ManagementPackFolder)

			Dim folderItem As New ManagementPackFolderItem(newFolder, parentFolders(0))

			mp.AcceptChanges()

			Return newFolder
		End Function


		' ---------------------------------------------------------------------
		Shared Sub CreateColumnXmlNode(ByVal rootNode As XmlElement, _
		ByVal sortingIndex As Integer, _
		ByVal columnName As String, _
		ByVal columnId As String, _
		ByVal sortOrder As String, _
		ByVal isVisible As Boolean)

			Dim columnElement As XmlElement = rootNode.OwnerDocument.CreateElement("ColumnInfo")

			columnElement.SetAttribute("Index", rootNode.ChildNodes.Count.ToString())
			columnElement.SetAttribute("SortIndex", sortingIndex.ToString())
			columnElement.SetAttribute("Width", "100")
			columnElement.SetAttribute("Grouped", "false")

			rootNode.AppendChild(columnElement)


			If (sortingIndex >= 0) Then
				columnElement.SetAttribute("Sorted", "true")
			Else
				columnElement.SetAttribute("Sorted", "false")
			End If

			columnElement.SetAttribute("IsSortable", "true")

			If (isVisible) Then
				columnElement.SetAttribute("Visible", "true")
			Else
				columnElement.SetAttribute("Visible", "false")
			End If

			columnElement.SetAttribute("SortOrder", sortOrder)

			Dim nameElement As XmlElement = rootNode.OwnerDocument.CreateElement("Name")
			Dim idElement As XmlElement = rootNode.OwnerDocument.CreateElement("Id")

			columnElement.AppendChild(nameElement)
			columnElement.AppendChild(idElement)

			nameElement.InnerText = columnName
			idElement.InnerText = columnId
		End Sub
	End Class
End Namespace
C#  Copy Code
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.EnterpriseManagement;
using Microsoft.EnterpriseManagement.Configuration;
using System.Collections.ObjectModel;
using System.Xml;
using Microsoft.EnterpriseManagement.Monitoring;

namespace ViewCreation
{
	class Program
	{
		// ---------------------------------------------------------------------
		static void Main(string[] args)
		{
			ManagementGroup mg = new ManagementGroup("localhost");
			ManagementPack mp;
			ManagementPackView stateView;
			ManagementPackView diagramView;
			ManagementPackFolder viewFolder;
			string folderId;

			mp = GetDefaultMP(mg);

			folderId = "ViewSamples.SampleFolder" + Guid.NewGuid().ToString("N");

			viewFolder = CreateViewFolder(mp, mg, "Sample Folder", folderId);

			stateView = CreateStateView(mp, mg, viewFolder);
			diagramView = CreateDiagramView(mp, mg, viewFolder);

			mp.AcceptChanges();
	}

		// ---------------------------------------------------------------------
		private static ManagementPack GetDefaultMP(
			ManagementGroup mg
			)
		{
			ReadOnlyCollection<ManagementPack> managementPacks;

			managementPacks = mg.GetManagementPacks("Microsoft.SystemCenter.OperationsManager.DefaultUser");

			if (managementPacks.Count != 1)
			{
				throw new ApplicationException("Failed to retrieve the default mp");
		}

			return (managementPacks[0]);
	}

		// ---------------------------------------------------------------------
		private static ManagementPackView CreateDiagramView(
			ManagementPack mp,
			ManagementGroup mg,
			ManagementPackFolder viewFolder
			)
		{
			ReadOnlyCollection<MonitoringViewType> stateViewTypes;
			ReadOnlyCollection<MonitoringClass> sql2005DBClasses;
			ManagementPackView view;
			XmlDocument viewConfigDoc;

			stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.DiagramViewType");

			if (stateViewTypes.Count != 1)
			{
				throw new ApplicationException("Failed to load the state view type");
		}

			view = new ManagementPackView(mp, "ViewsSample.DiagramView1", ManagementPackAccessibility.Public);

			view.TypeID = stateViewTypes[0];
			view.DisplayName = "Sample Diagram View";

			sql2005DBClasses = mg.GetMonitoringClasses(new MonitoringClassCriteria("DisplayName='SQL 2005 DB'"));

			if (sql2005DBClasses.Count != 1)
			{
				throw new ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported");
		}

			view.Target = sql2005DBClasses[0];
			view.Category = "Operations";

			viewConfigDoc = CreateDiagramViewConfigDoc(mg, sql2005DBClasses[0]);

			view.Configuration = viewConfigDoc.ChildNodes[0].InnerXml;

			ManagementPackFolderItem folderItem = new ManagementPackFolderItem(view, viewFolder);

			return (view);
	}

		// ---------------------------------------------------------------------
		private static XmlDocument CreateDiagramViewConfigDoc(
			ManagementGroup mg,
			MonitoringClass monitoringClass
			)
		{
			XmlDocument configDoc = new XmlDocument();
			XmlElement rootNode = configDoc.CreateElement("Configuration");
			XmlElement presentationNode = configDoc.CreateElement("Presentation");
			XmlElement criteriaNode = configDoc.CreateElement("Criteria");

			configDoc.AppendChild(rootNode);
			rootNode.AppendChild(criteriaNode);
			rootNode.AppendChild(presentationNode);

			presentationNode.InnerXml = @"<DiagramViewCriteria>
											<DiagramViewDisplay>
											<NodesPerRow>3</NodesPerRow>
											<ContainmentLine>
												<Color />
												<SourceArrow IsFilled=""false"">
												<ArrowStyle>NoAnchor</ArrowStyle>
												</SourceArrow>
												<TargetArrow IsFilled=""false"">
												<ArrowStyle>ArrowAnchor</ArrowStyle>
												</TargetArrow>
											</ContainmentLine>
											<NonContainmentLine>
												<Color Red=""6"" Green=""134"" Blue=""253"" />
												<SourceArrow IsFilled=""false"">
												<ArrowStyle>NoAnchor</ArrowStyle>
												</SourceArrow>
												<TargetArrow IsFilled=""false"">
												<ArrowStyle>ArrowAnchor</ArrowStyle>
												</TargetArrow>
												<LineStyle>DashDotDot</LineStyle>
											</NonContainmentLine>
											</DiagramViewDisplay>
										</DiagramViewCriteria>";

			XmlElement target = configDoc.CreateElement("Target");

			ReadOnlyCollection<PartialMonitoringObject> dbMonitoringObjects;

			dbMonitoringObjects = mg.GetPartialMonitoringObjects(monitoringClass);

			if (dbMonitoringObjects.Count < 1)
			{
				throw new ApplicationException("At least one database object is required");
		}

			target.InnerText = dbMonitoringObjects[0].Id.ToString();

			rootNode.AppendChild(target);

			return (configDoc);
	}

		// ---------------------------------------------------------------------
		private static ManagementPackView CreateStateView(
			ManagementPack mp,
			ManagementGroup mg,
			ManagementPackFolder viewFolder
			)
		{
			ReadOnlyCollection<MonitoringViewType> stateViewTypes;
			ReadOnlyCollection<MonitoringClass> sql2005DBClasses;
			ManagementPackView view;
			XmlDocument viewConfigDoc;

			stateViewTypes = mg.GetMonitoringViewTypes("Microsoft.SystemCenter.StateViewType");

			if (stateViewTypes.Count != 1)
			{
				throw new ApplicationException("Failed to load the state view type");
		}

			view = new ManagementPackView(
				mp, "ViewsSample.SampleStateView2", ManagementPackAccessibility.Public);

			view.TypeID = stateViewTypes[0];
			view.DisplayName = "Sample State View2";

			sql2005DBClasses = mg.GetMonitoringClasses(
				new MonitoringClassCriteria("DisplayName='SQL 2005 DB'"));

			if (sql2005DBClasses.Count != 1)
			{
				throw new ApplicationException("Failed to retrieve the SQL 2005 DB class. Make sure the SQL 2005 MP is imported");
		}

			view.Target = sql2005DBClasses[0];
			view.Category = "Operations";

			viewConfigDoc = CreateViewConfigDoc(sql2005DBClasses[0]);

			view.Configuration = viewConfigDoc.ChildNodes[0].InnerXml;

			ManagementPackFolderItem folderItem = new ManagementPackFolderItem(view, viewFolder);

			return (view);
	}

		// ---------------------------------------------------------------------
		private static XmlDocument CreateViewConfigDoc(
			MonitoringClass monitoringClass
			)
		{
			XmlDocument configDoc = new XmlDocument();
			XmlElement rootNode = configDoc.CreateElement("Configuration");
			XmlElement presentationNode = configDoc.CreateElement("Presentation");
			XmlElement criteriaNode = configDoc.CreateElement("Criteria");

			XmlElement maintenanceModeProp = configDoc.CreateElement("InMaintenanceMode");

			maintenanceModeProp.InnerText = "false";

			criteriaNode.AppendChild(maintenanceModeProp);

			configDoc.AppendChild(rootNode);
			rootNode.AppendChild(criteriaNode);
			rootNode.AppendChild(presentationNode);

			CreateColumnXmlNode(presentationNode, 0, "State", monitoringClass.Name, "Descending", true);
			CreateColumnXmlNode(presentationNode, -1, "Maintenance Mode", "InMaintenanceMode", "Ascending", true);
			CreateColumnXmlNode(presentationNode, -1, "Name", "Name", "Ascending", true);
			CreateColumnXmlNode(presentationNode, -1, "Path", "Path", "Ascending", false);

			ReadOnlyCollection<MonitoringClassProperty> properties;

			properties = monitoringClass.GetMonitoringProperties(BaseClassTraversalDepth.Recursive);

			foreach (MonitoringClassProperty prop in properties)
			{
				CreateColumnXmlNode(
					presentationNode, -1, prop.DisplayName, prop.Name, "Ascending", true);
		}

			return (configDoc);
	}

		// ---------------------------------------------------------------------
		private static ManagementPackFolder CreateViewFolder(
			ManagementPack mp,
			ManagementGroup mg,
			string folderDisplayName,
			string folderId
			)
		{
			ManagementPackFolder newFolder;
			ReadOnlyCollection<MonitoringFolder> parentFolders;

			parentFolders = mg.GetMonitoringFolders(
				new MonitoringFolderCriteria("Name='Microsoft.SystemCenter.Monitoring.ViewFolder.Root'"));

			if (parentFolders.Count != 1)
			{
				throw new ApplicationException("Failed to retrieve the root folder");
		}

			newFolder = new ManagementPackFolder(mp, folderId, ManagementPackAccessibility.Public);

			newFolder.DisplayName = folderDisplayName;

			newFolder.ParentFolder = (ManagementPackFolder)parentFolders[0];

			ManagementPackFolderItem folderItem = new ManagementPackFolderItem(newFolder, parentFolders[0]);

			mp.AcceptChanges();

			return (newFolder);
	}

	

		// ---------------------------------------------------------------------
		static void CreateColumnXmlNode(
			XmlElement rootNode,
			int sortingIndex,
			string columnName,
			string columnId,
			string sortOrder,
			bool isVisible
			)
		{
			XmlElement columnElement = rootNode.OwnerDocument.CreateElement("ColumnInfo");

			columnElement.SetAttribute("Index", rootNode.ChildNodes.Count.ToString());
			columnElement.SetAttribute("SortIndex", sortingIndex.ToString());
			columnElement.SetAttribute("Width", "100");
			columnElement.SetAttribute("Grouped", "false");

			rootNode.AppendChild(columnElement);

			if (sortingIndex >= 0)
			{
				columnElement.SetAttribute("Sorted", "true");
		}
			else
			{
				columnElement.SetAttribute("Sorted", "false");
		}

			columnElement.SetAttribute("IsSortable", "true");

			if (isVisible)
			{
				columnElement.SetAttribute("Visible", "true");
		}
			else
			{
				columnElement.SetAttribute("Visible", "false");
		}

			columnElement.SetAttribute("SortOrder", sortOrder);

			XmlElement nameElement = rootNode.OwnerDocument.CreateElement("Name");
			XmlElement idElement = rootNode.OwnerDocument.CreateElement("Id");

			columnElement.AppendChild(nameElement);
			columnElement.AppendChild(idElement);

			nameElement.InnerText = columnName;
			idElement.InnerText = columnId;
	}
}
}

See Also


Send comments about this topic to Microsoft.