recursionvelocitypolarion

Display tree depth using VLT recursion


I'm trying to render a tree structure using VLT, by indenting the rendering depending on the level it's on.

I tried to use a recursive macro which passes on the $indentLevel variable (see code below). However, instead of remembering the "original" $indentLevel, it just continues to increment. I thought that the foreach would fallback to the previous value upon its completion, but apparently not. Is there anyway I can make the $indentLevel variable local to a single loop?

Thanks

#macro(renderChildItems $item $indentLevel)
  #set($childItems = $transaction.workItems().search().query("linkedWorkItems:parent=$item.fields.id.get AND NOT status:obsolete AND type:(design_decision system_requirement)").sort("id"))
  #foreach($child in $childItems)
    <tr>
    <td style="padding-left:$indentLevel$px">
      $child.render.withTitle.withLinks.openLinksInNewWindow()
    </td>
    </tr>
    #set($indentLevelNew = $indentLevels + $indentSizeInt)
    #renderChildItems($child $indentLevelNew)
  #end
#end

Solution

  • After some futher thoughts, I came to the conclusion that the answer is actually very simple: Just remove the increment after completion of the foreach loop:

    #macro(renderChildItems $item $indentLevel)
      #set($childItems = $transaction.workItems().search().query("linkedWorkItems:parent=$item.fields.id.get AND NOT status:obsolete AND type:(design_decision system_requirement)").sort("id"))
      #foreach($child in $childItems)
        <tr>
        <td style="padding-left:$indentLevel$px">
          $child.render.withTitle.withLinks.openLinksInNewWindow()
        </td>
        </tr>
        #set($indentLevelNew = $indentLevels + $indentSizeInt)
        #renderChildItems($child $indentLevelNew)
      #end
    #set($indentLevelNew = $indentLevels - $indentSizeInt) ##NEW
    #end