Atlassian Confluence中的表格基于REST请求中的数据

你好!

在本文中,我将告诉您如何使用表创建Atlassian Confluence中的页面,其中的数据将来自REST请求。

我们将在Confluence中创建一个页面,并在其中包含一个表,该表将包含Jira中的项目数据。我们将使用标准Jira REST API中项目方法Jira获得此数据

您可以在此处观看有关本文的视频

安装Power脚本以实现融合


我们将使用Power Scripts for Confluence插件调用Jira REST API 这是一个免费插件,因此该解决方案不会花费您任何费用。

好吧,我们需要做的第一件事是在我们的Confluence中安装Power Scripts for Confluence插件。有关如何执行此操作的详细说明,请参见此处

编写脚本


现在转到齿轮菜单项->管理应用程序-> SIL管理器。



使用以下代码创建getProjects.sil文件:

struct Project {
    string key;
    string name;
    string projectTypeKey;
}

HttpRequest request;
HttpHeader authHeader = httpBasicAuthHeader("admin", "admin");
request.headers += authHeader;
 
Project [] projects = httpGet("http://host.docker.internal:8080/rest/api/2/project", request);
runnerLog(projects);
return projects;

host.docker.internal:8080 /的地址更改为您的Jira实例的地址。

运行脚本以验证是否从Jira中选择了数据:



在Confluence中创建页面


现在,使用SIL表宏在Confluence中创建一个页面在脚本字段中,输入脚本的名称getProjects.sil:



发布页面,您将看到以下结果:



让任务复杂化


在表中添加以下功能:

  • 显示有关项目经理的信息
  • 给字段更易理解的名称,最好用俄语

首先,对getProjects.sil脚本进行更改。

同时,我们进行一些重构。

我们的脚本将执行以下操作:

  • 通过调用Jira REST API从Jira获取项目数据
  • 我们将接收到的项目数据转换为表格视图
  • 打印结果

它在代码中的外观如下:

Project [] projects = getProjectData();
TableRow [] tableRows =  convertProjectDataToTableData(projects);

return tableRows;

现在让我们指定如何获取项目数据:

  • 创建一个请求
  • 在请求中创建标头,其中包含有关从Jira接收数据的用户的信息
  • 将expand参数添加到我们的查询中。我们需要选择有关项目经理的数据,但是在默认答案中没有此类数据。因此,我们需要告诉Jira我们想在响应中查看有关项目经理的数据。为此,使用expand参数。
  • 我们满足要求
  • 返回数据

但是这些话变成了代码:

function getProjectData() {
    HttpRequest request;
    HttpHeader authHeader = httpBasicAuthHeader("admin", "admin");
    request.headers += authHeader;
    HttpQueryParam param = httpCreateParameter("expand", "description,lead,url,projectKeys");
    request.parameters += param;
    Project[] projects = httpGet("http://host.docker.internal:8080/rest/api/2/project", request);
    return projects;
}

现在让我们为项目定义数据结构。

这是project方法从Jira REST API返回的答案(我删除了不必要的数据以使答案更短,因此更具可读性):

[
   {
      "key":"KAN",
      "lead":{
         "name":"admin",
         "displayName":"Alexey Matveev",
      },
      "name":"kanban",
      "projectTypeKey":"software"
   },
   {
      "key":"SCRUM",
      "description":"",
      "lead":{
         "name":"admin",
         "displayName":"Alexey Matveev",
      },
      "name":"scrum",
      "projectTypeKey":"software"
   }
]

如我们所见,key,name和projectTypeKey字段的值在json的第一级定义。但是对于线索字段,而不是值,我们看到了json。而且这个json已经包含了name和displayName字段的值。因此,首先我们在Lead(Lead)字段中为json创建一个结构:

struct Lead {
    string name;
    string displayName;
}

现在,我们准备为json(项目)的第一级构建结构:

struct Project {
    string key;
    string name;
    string projectTypeKey;
    Lead lead;
}

但是问题在于,SIL表宏只能与具有一层嵌套的json一起使用,因此我们需要将具有两层嵌套的结构(项目)转换为具有一层嵌套的结构(平面结构)。但首先,创建一个平面结构(TableRow):

struct TableRow {
    string key;
    string name;
    string projectTypeKey;
    string lead;
    string leadDisplayName;
}

现在,我们将编写一个将Project结构中的数据转换为TableRow结构的函数:

function convertProjectDataToTableData(Project [] projectData) {
    TableRow [] tableRows;
    for (Project project in projectData) {
        TableRow tableRow;
        tableRow.key = project.key;
        tableRow.name = project.name;
        tableRow.projectTypeKey = project.projectTypeKey;
        tableRow.lead = project.lead.name;
        tableRow.leadDisplayName = project.lead.displayName;
        tableRows = arrayAddElement(tableRows, tableRow);
    } 
    return tableRows;
}

所有。脚本准备好了!

这是最终的getProjects.sil代码:

struct Lead {
    string name;
    string displayName;
}

struct Project {
    string key;
    string name;
    string projectTypeKey;
    Lead lead;
}

struct TableRow {
    string key;
    string name;
    string projectTypeKey;
    string lead;
    string leadDisplayName;
}

function getProjectData() {
    HttpRequest request;
    HttpHeader authHeader = httpBasicAuthHeader("admin", "admin");
    request.headers += authHeader;
    HttpQueryParam param = httpCreateParameter("expand", "description,lead,url,projectKeys");
    request.parameters += param;
    string pp = httpGet("http://host.docker.internal:8080/rest/api/2/project", request);
    runnerLog(pp);
    Project[] projects = httpGet("http://host.docker.internal:8080/rest/api/2/project", request);
    return projects;
}

function convertProjectDataToTableData(Project [] projectData) {
    TableRow [] tableRows;
    for (Project project in projectData) {
        TableRow tableRow;
        tableRow.key = project.key;
        tableRow.name = project.name;
        tableRow.projectTypeKey = project.projectTypeKey;
        tableRow.lead = project.lead.name;
        tableRow.leadDisplayName = project.lead.displayName;
        tableRows = arrayAddElement(tableRows, tableRow);
    } 
    return tableRows;
}Project [] projects = getProjectData();
TableRow [] tableRows =  convertProjectDataToTableData(projects);

return tableRows;

现在,我们将在Confluence中刷新页面,并看到我们在项目经理中的数据被拉出:



但是列名在某种程度上难以理解。让我们给个更漂亮的名字。

我们编辑页面,编辑SIL表宏,然后在列字段中输入“ Project Key,Project Name,Project Type,Project Manager,Project Manager的名称”:



保存页面,结果如下:



一切都变了!

All Articles