Reputation: 140
I am trying to capture all associated elements outside the nested for each loop by storing values using the Object Factory method.
The linking of elements are shown below screenshot.
I want the output like shown below
Intended output:
[
{Third-Level-ID=EL-234, Second-Level-ID=EL-229, First-Level-ID=EL-213},
{Third-Level-ID=EL-235, Second-Level-ID=EL-229, First-Level-ID=EL-213},
{Third-Level-ID=EL-236, Second-Level-ID=EL-229, First-Level-ID=EL-213},
{Third-Level-ID=EL-233, Second-Level-ID=EL-230, First-Level-ID=EL-213},
{Third-Level-ID=EL-237, Second-Level-ID=EL-230, First-Level-ID=EL-213},
{Third-Level-ID=EL-238, Second-Level-ID=EL-230, First-Level-ID=EL-213},
{Third-Level-ID=EL-239, Second-Level-ID=EL-230, First-Level-ID=EL-213},
{Third-Level-ID=NO-VAL, Second-Level-ID=EL-231, First-Level-ID=EL-213}
]
However, I am getting the below output by using the below code.
Current Output
[
{Third-Level-ID=EL-234, Second-Level-ID=EL-229, First-Level-ID=EL-213},
{Third-Level-ID=EL-238, Second-Level-ID=EL-230, First-Level-ID=EL-213},
{Third-Level-ID=NO-VAL, Second-Level-ID=EL-231, First-Level-ID=EL-213}
]
The code which I am using is given below.
#set($projectId = $page.getReference.projectId())
#set($project = $projectService.getProject($projectId))
#set($documentNames = "Specification-Dummy-First-Level Specification-Dummy-Second-Level Specification-Dummy-Third-Level ")
#set($customerReqs = $trackerService.queryWorkItems($project, "reqType.KEY:customerrequirement AND document.title:($documentNames)", "document.title"))
##First Level Velocity Script Starts Here------------------------
#set($first_level_crs_pobject = $customerReqs.get(2))
#set($first_level_crs_id = $first_level_crs_pobject.getId())
#set($first_level_element_title = $first_level_crs_pobject.getTitle())
#set($first_link =$first_level_crs_pobject.getLinkedWorkItemsStructsBack())
#set($emptyArray = [])
##Second Level Velocity Script Starts Here------------------------
#set($second_level_array_size = $first_link.size())
#foreach($sl in $first_link) ##Second-Level For-Each Starts Here------------------------
#set($new_object_first = $objectFactory.newMap())
#set($second_level_first_elem_pobject = $sl.getLinkedItem())
#set($second_level_first_elem_ID = $second_level_first_elem_pobject.getId())
#set($second_level_first_elem_title = $second_level_first_elem_pobject.getTitle())
#set($second_link = $second_level_first_elem_pobject.getLinkedWorkItemsStructsBack())
#set($dummy = $new_object_first.put("Second-Level-ID",$second_level_first_elem_ID))
#set($dummy = $new_object_first.put("First-Level-ID",$first_level_crs_id))
#set($third_level_array_size = $second_link.size())
#if($third_level_array_size == 0)
#set($dummy = $new_object_first.put("Third-Level-ID","NO-VAL") )
#else
#foreach($tl in $second_link )
#set($third_level_first_elem_pobject = $tl.getLinkedItem())
#set($third_level_first_elem_id = $third_level_first_elem_pobject.getId())
#set($third_level_first_elem_title = $third_level_first_elem_pobject.getTitle())
#set($dummy = $new_object_first.put("Third-Level-ID",$third_level_first_elem_id))
#set($third_link = $third_level_first_elem_pobject.getLinkedWorkItemsStructsBack())
#set($fourth_level_array_size = $third_link.size())
#end ##foreach($tl in $second_link ) ends here
#end ##if($third_level_array_size == 0)
#set( $void = $emptyArray.add($new_object_first))
#end##foreach($sl in $first_link) Second-Level For Each Ends Here
<table border = 1>
<tr><td>Final Array of Object </td><td>$emptyArray</td></tr>
</table>
Can you please help?
Upvotes: 0
Views: 366
Reputation: 29715
You are overwriting the content of $new_object_first in every 2nd-level loop and adding therefore only the last iteration of each 2nd-level loop. You need to add to $emptyArray directly after setting "Third-Level-ID" and then reinitializing the whole $new_object_first with first and second level values.
Upvotes: 2