Достижение рекурсии в простом отчете Velocity - PullRequest
0 голосов
/ 10 июня 2019

Я создаю отчет о скорости.В настоящее время я перебираю коллекцию документов (идентификаторов), для каждого из которых я могу получить список отношений.

Что я хотел бы сделать, так это для каждого из этих идентификаторов вызвать одну и ту же функцию, чтобы увидетьесли есть какие-то дальнейшие отношения:

Я думал о цикле while, но впоследствии обнаружил, что он не поддерживается.

## Loop through the selection of documents
#foreach( $vDoc in $documentList )

## for each document obtain a list of all upostream relationships
#foreach($h1 in $relDao.getUpstreamDocumentIds($vDoc.document.id))

## Need recursion in here....
## need to keep getting the upstream IDs until the size is zero and then return that ID

#end
#end

1 Ответ

0 голосов
/ 11 июня 2019

Вот способ достижения рекурсии по скорости. Мы можем использовать макросы, определять макросы и использовать их рекурсивно вместе с базовым регистром

Фрагмент для того же. Изменить в соответствии с требованиями.

## ***Call the macro for the first time***
#reportMacro($documentList) 

## ***This is the definition of the macro***
#macro(reportMacro $documentList)
{    
    ## Loop through the selection of documents
    #foreach( $vDoc in $documentList )

        ## for each document obtain a list of all upostream relationships
        #foreach($h1 in $relDao.getUpstreamDocumentIds($vDoc.document.id))
            #if("$h1" != ""  && ${h1.size()} > 0)
                ## ***Recursively call the macro ***
                #reportMacro($h1)
            #else
                this marks end of recursion do some operations here if needed ... 
            #end
        #end
    #end
}
#end 
...