浏览 COM+ 集合层次结构
通过在 COMAdminCatalog 对象上使用 GetCollection 方法,可以轻松检索某些集合。 此方法检索“顶级”集合;也就是说,一个集合(如应用程序)它独立存在并且是唯一的,在逻辑上不包含在另一个集合下。
然而,许多集合在逻辑上被归入另一个集合,因为它们包含的元素是某个更大结构的一部分。 例如,Components 集合包含或与 Applications 集合相关,因为它包含安装在特定 COM+ 应用程序中的组件,该应用程序本身对应于 Applications 集合中的项。 像这样的相关集合并不是唯一的;每个不同的应用程序都有一个 Components 集合。
因此,集合按层次结构排列,该层次结构自然对应于它们所包含的项目之间的逻辑关系。 可以在 COM+ Administration Collections 中找到集合层次结构的示意图。 对于要使用 COMAdmin 对象配置的许多元素,需要浏览集合层次结构的某个部分以检索适当的项。
这在实践中意味着,如果想在相关的集合中获得一个项目,则需要首先浏览包含集合的所有必要的更高级别。 若要检索相关集合,需要检索与子集合相关的父集合中的特定项。 例如,如果要配置与特定 COM+ 应用程序中的组件相对应的项,则必须执行以下步骤:
- 获取 Applications 集合,并填充。
- 枚举 Applications 集合的内容,直到找到与正确的 COM+ 应用程序相对应的项。
- 获取并填充该特定 COM+ 应用程序的 Components 集合。
- 枚举 Components 集合的内容,直到找到与正确的组件相对应的项。
以下 Microsoft Visual Basic 示例演示如何执行前面的步骤:
On Error GoTo My_Error_Handler
Dim Catalog As COMAdminCatalog
Set Catalog = CreateObject("COMAdmin.COMAdminCatalog")
' Get the Applications collection and populate it.
Dim Applications As COMAdminCatalogCollection
Set Applications = Catalog.GetCollection("Applications")
Applications.Populate
' Get the correct application, "My Application".
Dim AppObject As COMAdminCatalogObject
For Each AppObject in Applications
If AppObject.Name = "My Application" Then
Exit For
End If
Next
' Get and populate the Components collection for "My Application".
Dim Components As COMAdminCatalogCollection
Set Components = Applications.GetCollection("Components", AppObject.Key)
Components.Populate
' Get the correct component, "My Component".
Dim CompObject As COMAdminCatalogObject
For Each CompObject in Components
If CompObject.Name = "My Component" Then
Exit For
End If
Next
前面的示例中使用了两种不同的 GetCollection 方法。 第一个示例由 COMAdminCatalog 公开,用于获取顶级集合,在本例中为“应用程序”。 第二个对象由 COMAdminCatalogCollection 公开,用于获取与当前集合相关的集合;通过传递名称“Components”和父对象的 Key 属性值,可以准确指示所需的集合。 Key 属性值通常是唯一标识对象的名称或 GUID;该值在每个集合的文档中标识。
在大多数情况下,需要在集合层次结构中以迭代方式向下获取相关的集合,直到检索到所需的集合。 将采取的步骤遵循相同的通用模型,重复进行。 有关集合的完整列表,请参阅 COM+ Administration Collections。
在某些情况下,你可能希望在第二次浏览集合层次结构的路径时使用快捷方法。 只有在缓存了所有插入的 Key 值之后,才能使用此方法。 有关详细信息,请参阅 ICOMAdminCatalog::GetCollectionByQuery。
相关主题