Jira自定义发行说明:速度if(..)语句和宏的返回值

时间:2013-04-09 19:41:36

标签: jira velocity

我一直在尝试使用Jira的自定义发行说明功能,该功能需要编写自定义.vm文件。这是我第一次与Velocity合作,非常感谢这个小问题:

我有一个简单的宏,检查是$issue有一个名为For Release Notes的自定义字段并获取其值。基于此值,我希望Velocity输出问题摘要,或跳过它。

问题是即使宏返回truefalse,我也无法获得if()语句来正确处理该值。

宏:

#macro(getForReleaseNotes $issue $customFieldManager)
    #set ($customFields = $customFieldManager.getCustomFieldObjects($issue.project.getLong("id"), $issue.issueType.getString("id")))
    #set( $retVal = "false" )
    #foreach($customField in $customFields)
        #if($customField.name.equals("For Release Notes"))
            #if($customField.getValue($issue)) #set( $retVal = "true" ) 
            #end
        #end
    #end
    $retVal
#end

HTML:

#foreach ($issueType in $issueTypes)
    #if($issueType.issues.size() > 0)
        <h2>$textUtils.htmlEncode($issueType.name)</h2>
        <ul>
        #foreach ($issue in $issueType.issues)
            #set( $tester = "#getForReleaseNotes($issue $customFieldManager)" )
            #if($tester == "true")
                <li>[<a href='$requestContext.canonicalBaseUrl/browse/$issue.key'>$issue.key</a>] - $textUtils.htmlEncode($issue.summary)</li>
            #else 
                <li> Value for macro: #getForReleaseNotes($issue $customFieldManager), $tester </li>
            #end
        #end
    </ul>
    #end
#end

我在if()内尝试了多种组合,从if( $tester.equals("getForReleaseNotes(..))" )if( "getForReleaseNotes(..) )

现在,宏实际工作并返回$retVal = false(或者它是$retVal = "false"并且这会产生不同吗?)当问题没有此属性/属性设置为{{1 }}。否则,宏将同样返回false。问题只是让true语句正确评估,因为现在它说我传入的所有内容都是if(..),问题永远不会被打印出来。

对此问题的任何帮助将不胜感激。谢谢你的阅读。

3 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法,虽然我认为它不是最有效的,因为它需要循环遍历问题列表两次。

第一个循环检查是否存在给定问题类型的问题,以及是否有任何问题标记为“For Release Notes”。

如果第一个循环确实发现标记为“发行说明”的问题,则会移至第二个循环。然后,第二个循环将提取该问题类型中标记为“发行说明”的所有问题的详细信息。

注意:我添加了另一个名为“发行说明”的字段,因此用户可以更好地控制生成的发行说明中显示的内容。如果未设置该字段,则默认使用问题摘要。

#if($issueType.issues.size() > 0)
        #set($flag = "")
        #foreach ($issue in $issueType.issues)
            #set ($customFields = $customFieldManager.getCustomFieldObjects($issue.project.getLong("id"), $issue.issueType.getString("id")))
            #foreach($customField in $customFields)
                #if($customField.name.equals("For Release Notes"))
                    #if($customField.getValue($issue))

                        #if($flag==$textUtils.htmlEncode($issueType.name))

                        #else                       
                            <h2>$textUtils.htmlEncode($issueType.name)</h2>
                            #set($flag = $textUtils.htmlEncode($issueType.name))
                        #end

                    #end
                #end
            #end
        #end

        ## Go through the list again, displaying all issues that are "for release notes."
        <ul>       
        #foreach ($issue in $issueType.issues)
            #set ($customFields = $customFieldManager.getCustomFieldObjects($issue.project.getLong("id"), $issue.issueType.getString("id")))
            #foreach($customField in $customFields)
                #if($customField.name.equals("For Release Notes"))
                    #if($customField.getValue($issue))

                        ## If the issue has the "Release Note" field set, use that, otherwise use the summary
                        #foreach($customField in $customFields)
                            #if($customField.name.equals("Release Note"))
                                #if($customField.getValue($issue))
                                    <li>[<a href='$requestContext.canonicalBaseUrl/browse/$issue.key'>$issue.key</a>] - $textUtils.htmlEncode($customField.getValue($issue))</li>
                                #else
                                    <li>[<a href='$requestContext.canonicalBaseUrl/browse/$issue.key'>$issue.key</a>] - $textUtils.htmlEncode($issue.summary)</li>
                                #end
                            #end
                        #end

                    #end
                #end
            #end
        #end
        </ul>       
    #end

答案 1 :(得分:0)

http://velocity.apache.org/engine/devel/vtl-reference-guide.html在Velocity中有一些条件示例,正如您所发现的那样,它们并不完全明显。

答案 2 :(得分:0)

创建以下宏,只需从vm文件中要包含问题摘要的任何位置调用它。

#macro( myMacro )
#set( $customFieldObj   = $customFieldManager.getCustomFieldObjectByName('For Release Notes') )
#set( $customFieldValue = $issue.getCustomFieldValue($customFieldObj) )
## next line only makes sure the 2 variables are not null
#if( $customFieldObj && $customFieldValue )
## now output the issue summary
$issue.getSummary()
#end
#end

根据API,getCustomFieldObjectByName将返回带有给定名称的第一个自定义字段对象,因此,如果您有多个名为&#39; For Release Notes&#39;的自定义字段,您想尝试方法getCustomFieldObject并将字段的Long id作为参数传递。