你好!在本文中,我将告诉您如何使用表创建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的名称”:
保存页面,结果如下:
一切都变了!