如何查询jira票据信息以在Confluence中填写图表宏所需的数据?

时间:2016-03-30 10:09:57

标签: jira confluence confluence-rest-api

我创建了一个confluence模板,我想在其中插入一个图表(饼图),显示与特定项目相关的故障单的状态。我希望图表宏可以自动在JIRA中按类型检索不同票证的数量,这样每次用户根据此模板创建页面时,他们都不需要手动填写图表数据。

我知道在JIRA Report宏中,人们可以轻松地检索这种信息。但是如何在图表宏中的报告结果中访问此数据?或者我是否必须实现另一个自定义宏?如果是这样,我是否必须编写一些Java或Javascript代码,或者只是使用宏模板语言就足够了?

我是汇合的新手。任何想法都会有所帮助。

1 个答案:

答案 0 :(得分:1)

问题解决了。 Confluence Page模板以存储格式编写,并在返回客户端之前在Confluence内部呈现。有一种方法可以在模板中声明变量,然后通过在Java或Javascript中添加模板上下文中的条目来提供数据。

例如,JIRA图表宏插入到下面的模板simple-template.xml中:

<ac:structured-macro ac:name="jira" ac:schema-version="1">
    <ac:parameter ac:name="server">Your Company JIRA</ac:parameter>
    <ac:parameter ac:name="jqlQuery"><at:var at:name="vJql" /></ac:parameter<name />
    <ac:parameter ac:name="count">true</ac:parameter>
    <ac:parameter ac:name="serverId"><at:var at:name="vServerId" /></ac:parameter>
</ac:structured-macro>

使用语法vJql声明两个变量vServerId<at:var at:name="varName"/>。这些变量可以在扩展类com.atlassian.confluence.plugins.createcontent.api.contextproviders.AbstractBlueprintContextProvider的类提供的模板上下文中访问。要将上下文提供程序与模板绑定,需要通过添加元素context-provider在atlassian-plugin.xml中配置模板声明:

<content-template key="simple-template"
    template-title-key="delivery.blueprint.template.title" i18n-name-key="new.template.blueprint.name">
    <resource name="template" type="download" location="/templates/simple-template.xml" />
    <context-provider class="com.company.atlassian.plugins.confluence.SimpleTemplateContextProvider" />
</content-template>

在类中,通过返回包含变量条目的上下文来提供变量:

private final String VAR_PROJECT_KEY = "jira-project";
private final String VAR_VERSION = "jira-fix-version";
private final String VAR_JQL = "vJql";
private final String VAR_SERVER_ID = "vServerId";

@Override
protected BlueprintContext updateBlueprintContext(BlueprintContext context) {
    try {
        String projectKey = (String) context.get(VAR_PROJECT_KEY);
        String version = (String) context.get(VAR_VERSION);
        String jql = "project = \'" + projectKey + "\' AND fixVersion = " + version;
        String serverId = ResourceBundle.getBundle("simple-template-example").getString("jira.serverid");

        context.put(VAR_JQL, jql);
        context.put(VAR_SERVER_ID, serverId);
        return context;
    } catch (Exception e) {
        e.printStackTrace();
        return context;
    }
}

完成。