Created
April 9, 2013 15:54
-
-
Save saga/5346890 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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