Tabel dalam Atlassian Confluence berdasarkan data dari permintaan REST

Halo!

Pada artikel ini saya akan memberi tahu Anda cara membuat halaman di Atlassian Confluence dengan tabel, data yang akan datang dari permintaan REST.

Kami akan membuat halaman di Confluence dengan tabel yang akan berisi data proyek di Jira. Kami akan mendapatkan data ini dari Jira menggunakan metode proyek dari API Jira REST standar.

Anda dapat menonton video di artikel ini di sini .

Instal Skrip Daya untuk Pertemuan


Kami akan melakukan panggilan ke Jira REST API menggunakan plugin Power Scripts for Confluence . Ini adalah plugin gratis, jadi solusi ini tidak akan dikenakan biaya apa pun.

Nah, hal pertama yang perlu kita lakukan adalah menginstal plugin Power Scripts for Confluence di Confluence kita. Instruksi terperinci tentang cara melakukan ini dapat ditemukan di sini .

Tulis skrip


Sekarang pergi ke item menu roda gigi -> Kelola aplikasi -> SIL Manager.



Buat file getProjects.sil dengan kode berikut:

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;

Ubah alamat host.docker.internal : 8080 / ke alamat instance Jira Anda.

Jalankan skrip untuk memverifikasi bahwa data dipilih dari Jira:



Buat halaman di Confluence


Sekarang buat halaman di Confluence dengan makro tabel SIL . Di bidang skrip, masukkan nama skrip kami getProjects.sil:



Publikasikan halaman dan Anda akan melihat hasil ini:



Mari menyulitkan tugas


Tambahkan fungsionalitas berikut ke tabel:

  • tampilkan informasi tentang manajer proyek
  • beri bidang nama yang lebih dimengerti dan lebih disukai dalam bahasa Rusia

Pertama, buat perubahan pada skrip getProjects.sil.

Pada saat yang sama, kami sedikit memperbaiki.

Inilah yang akan dilakukan skrip kami:

  • dapatkan data proyek dari Jira melalui panggilan ke Jira REST API
  • kami mengonversi data yang diterima pada proyek menjadi tampilan tabular
  • cetak hasilnya

Beginilah tampilannya dalam kode:

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

return tableRows;

Sekarang mari kita tentukan bagaimana kita mendapatkan data proyek:

  • buat permintaan
  • buat tajuk dalam permintaan dengan informasi tentang pengguna yang menerima data dari Jira
  • Tambahkan parameter rentangkan ke kueri kami. Kita perlu memilih data tentang manajer proyek, tetapi dalam jawaban default tidak ada data seperti itu. Oleh karena itu, kita perlu memberi tahu Jira bahwa kita ingin melihat data tentang manajer proyek dalam respons. Untuk ini, perluas parameter ekspansi.
  • jalankan permintaan
  • kembalikan data

Tapi kata-katanya berubah menjadi kode:

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;
}

Sekarang mari kita mendefinisikan struktur data untuk proyek kami.

Berikut adalah jawaban yang dikembalikan metode proyek dari Jira REST API (Saya menghapus data yang tidak perlu untuk membuat jawaban lebih pendek dan karenanya lebih mudah dibaca):

[
   {
      "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"
   }
]

Seperti yang bisa kita lihat, nilai-nilai untuk bidang kunci, nama dan projectTypeKey didefinisikan pada tingkat pertama json kami. Tetapi untuk bidang memimpin, alih-alih nilainya, kita melihat json. Dan json ini sudah berisi nilai-nilai bidang nama dan tampilanName. Oleh karena itu, pertama-tama kita membuat struktur untuk json di bidang lead (Lead):

struct Lead {
    string name;
    string displayName;
}

Sekarang kita siap membuat struktur untuk tingkat pertama json kami (Proyek):

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

Tetapi masalahnya adalah bahwa tabel makro SIL hanya dapat bekerja dengan json dengan satu tingkat bersarang, jadi kita perlu mengubah struktur kita dengan dua tingkat bersarang (Proyek) menjadi struktur dengan satu tingkat bersarang (struktur datar). Tapi pertama-tama, buat struktur datar (TableRow):

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

Dan sekarang kita akan menulis fungsi untuk mengonversi data dalam struktur Proyek ke struktur 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;
}

Semua. Skrip sudah siap!

Ini adalah kode getProjects.sil terakhir:

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;

Sekarang kita akan me-refresh halaman dalam Confluence dan melihat bahwa data kami pada manajer proyek ditarik:



Tetapi nama kolom entah bagaimana tidak dapat dipahami. Mari kita beri nama yang lebih indah.

Kami mengedit halaman, Edit makro tabel SIL dan masukkan "Kunci Proyek, Nama Proyek, Jenis Proyek, Manajer Proyek, Nama Manajer Proyek" di kolom kolom:



Simpan halaman dan inilah hasilnya:



Semuanya berubah!

All Articles