Prabal Kanti Sarkar
Prabal Kanti Sarkar

Reputation: 140

Not able to capture all elements of Array of Objects outside #foreach loop in Velocity Script In Polarion 21 R1

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. enter image description here

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

Answers (1)

Peter Parker
Peter Parker

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

Related Questions