Skip to content

Instantly share code, notes, and snippets.

@saga
Created April 9, 2013 15:54
Show Gist options
  • Save saga/5346890 to your computer and use it in GitHub Desktop.
Save saga/5346890 to your computer and use it in GitHub Desktop.
Public Function CheckForAnyMatch(reqID As Long) As HierarchySupportList
'###############################################################
' This example shows the use of the IHierarchyFilter to check
' whether there are any requirements in the project that match
' a filter, by not specifying an ID for the root of the search.
' Case A: There is at least one requirement that matches the filter
' Case B: There is no requirement in the project that matches the filter
' 2) Finding which sub-trees under a specific requirement contain at least
' one requirement that matches the filter.
'
' The example runs on a requirement tree with the requirements below.
' Each requirement has as ParentID the ID of the requirement one step
' above according to the numbers that are part of the name.
' For example, the ParentID of Grandson 1.1.1 is the ID of Child 1.1,
' and the ParentID of Grandson 1.4.1.1 is the ID of Son 1.4.1
' The first item, Req1, is the root of the search tree. The
' ReqID argument to this example is Req1.ID
'
' The fiter is:
' Requirement.Name = "*Son* OR SubNode*" AND
' Requirement.Product = "Emma OR 'Mansfield Park'"
' The items that match the filter in the example are marked with
' an asterisk.
'----------------------------------------------------------------------------
' Name | Description | Priority | Product
'----------------------------------------------------------------------------
' Req1 | Root of search tree | 2-Medium | Persuasion
' Child 1.1 | Child 1 of Req1 | 5-Urgent | Persuasion
' * Grandson 1.1.1 | GrandSon of Req1 1.1.1 | 2-Medium | Emma
' * Grandson 1.1.2 | GrandSon of Req1 1.1.2 | 2-Medium | Emma
' Child 1.2 | Child 2 of Req1 | 4-Very High | Mansfield Park
' * Grandson 1.2.1 | GrandSon of Req1 1.2.1 | 5-Urgent | Emma
'
' Child 1.3 | Child 3 of Req1 | 3-High | Persuasion
' Child 1.3.1 | Grandchild of Req1 1.3.1 | 2-Medium | Emma
' Child 1.3.1.1 | GreatGrandChild of Req1 1.3.1.1
' | 2-Medium | Mansfield Park
' * GGGrndSon1.3.1.1.1 | Has Son in name | 2-Medium | Mansfield Park
'
' Child 1.4 | Child 4 of Req1 | 2-Medium | Northanger Abbey
' Son 1.4.1 | GrandChild Req1 | 3-High | Persuasion
' Grandson 1.4.1.1 | Grandson of Req 1.4 | 5-Urgent | Persuasion
' Son 1.4.2 | Son 2 of Req 1.4 | 5-Urgent | Persuasion
'
' * Son 1.5 |Child 5 of Req1 | 3-High |Emma
Dim reqF As ReqFactory
Dim hierFilter As HierarchyFilter
Dim reqHierL As HierarchySupportList, reqL As List
Dim rq As Req
Dim i%
On Error GoTo GetHListErr
'tdc is the global TDConnection object.
Set reqF = tdc.ReqFactory
Set hierFilter = reqF.Filter
' Get the parent nodes by setting KeepHierarchical = True.
' Note that this setting is required to get
' a HierarchySupportList. If KeepHierarchical
' is False or not set, HierarchyFilter.NewList
' returns a List, not a HierarchySupportList.
hierFilter.KeepHierarchical = True
'''''''''''''''''''''''''''''''''''''''''''
' Case A: There is at least one requirement in the
' project that matches the filter.
'
' To test all requirements, do not set any
' filter on RQ_FATHER_ID.
'''''''''''''''''''''''''''''''''''''''''
' Name filter matches "Son", "GrandSon", and "SubNode."
hierFilter("RQ_REQ_NAME") = "*Son* OR SubNode*"
' Filter for the "Emma" or "Mansfield Park" projects.
' Note that Mansfield Park must be quoted with straight quotes
' because of the space between Mansfield and Park.
hierFilter("RQ_REQ_PRODUCT") = "Emma OR 'Mansfield Park'"
' This fails if KeepHierarchical is not set to True:
Set reqHierL = hierFilter.NewList
Debug.Print "Number of records found is " & CStr(reqHierL.Count)
'Output: Number of records found is 1
For i = 1 To reqHierL.Count
Set rq = reqHierL(i)
With rq
'Returns the root of the requirement tree,
' meaning, there is a least one requirement
'that matches the filter.
Debug.Print CStr(.ID) & ", " & .Name
'Output:
'0, Requirements
End With
Next i
'''''''''''''''''''''''''''''''''''''''''''
' Case B: There is no requirement
' in the project that matches the filter
'
' To test all requirements, do not set any
' filter on RQ_FATHER_ID.
'''''''''''''''''''''''''''''''''''''''''
'There are no items that match this condition:
hierFilter("RQ_REQ_PRODUCT") = "'Pride and prejudice' OR 'Sense and Sensibility'"
Set reqHierL = hierFilter.NewList
Debug.Print "Number of records found is " & CStr(reqHierL.Count)
'Output: Number of records found is 0
Set CheckForAnyMatch = reqHierL
Exit Function
GetHListErr:
On Error Resume Next
Set CheckForAnyMatch = Null
ErrHandler err, "GetSortedList", err.Description, NON_FATAL_ERROR
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment