جدول في Atlassian Confluence بناءً على بيانات من طلب REST

مرحبا!

في هذه المقالة سأخبرك بكيفية إنشاء صفحة في Atlassian Confluence مع جدول ، البيانات التي ستأتي من طلب REST.

سنقوم بإنشاء صفحة في Confluence مع جدول يحتوي على بيانات المشروع في Jira. سنحصل على هذه البيانات من Jira باستخدام طريقة المشروع من Jira REST API القياسي.

يمكنك مشاهدة الفيديو على هذه المقالة هنا .

قم بتثبيت برامج Power Power للالتقاء


سنقوم بإجراء مكالمة إلى Jira REST API باستخدام Power Scripts for Confluence plugin . هذا هو البرنامج المساعد المجاني ، لذلك لن يكلفك هذا الحل أي شيء.

حسنًا ، أول شيء يتعين علينا القيام به هو تثبيت البرنامج المساعد Power Scripts for Confluence في Confluence. يمكن العثور على تعليمات تفصيلية حول كيفية القيام بذلك هنا .

اكتب نصًا


انتقل الآن إلى عنصر قائمة الترس -> إدارة التطبيقات -> SIL Manager.



قم بإنشاء ملف 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


الآن قم بإنشاء صفحة في Confluence مع ماكرو جدول SIL . في حقل البرامج النصية ، أدخل اسم برنامجنا النصي getProjects.sil:



انشر الصفحة وسترى هذه النتيجة:



دعونا نعقد المهمة


أضف الوظائف التالية إلى الجدول:

  • عرض معلومات حول مدير المشروع
  • إعطاء الحقول أسماء مفهومة بشكل أفضل ويفضل باللغة الروسية

أولاً ، قم بإجراء تغييرات على البرنامج النصي getProjects.sil.

في نفس الوقت ، نحن إعادة بناء القليل.

إليك ما سيفعله البرنامج النصي:

  • الحصول على بيانات المشروع من Jira من خلال مكالمة إلى Jira REST API
  • نقوم بتحويل بيانات المشروع المستلمة إلى عرض جدولي
  • اطبع النتيجة

هكذا تبدو في الكود:

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

return tableRows;

الآن دعونا نحدد كيف نحصل على بيانات المشروع:

  • قم بإنشاء طلب
  • قم بإنشاء رأس في الطلب بمعلومات حول المستخدم الذي يتلقى بيانات من Jira
  • أضف معلمة التوسيع لاستعلامنا. نحتاج إلى تحديد بيانات حول مدير المشروع ، ولكن في الإجابة الافتراضية لا توجد مثل هذه البيانات. لذلك ، نحتاج إلى إخبار Jira بأننا نريد رؤية البيانات حول مدير المشروع في الرد. لهذا ، يتم استخدام معلمة التوسيع.
  • نلبي الطلب
  • إرجاع البيانات

لكن الكلمات تحولت إلى رمز:

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

الآن دعنا نحدد هياكل البيانات لمشاريعنا.

إليك الإجابة التي ترجعها طريقة المشروع من 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"
   }
]

كما نرى ، يتم تحديد قيم الحقول الرئيسية والاسم و projectTypeKey على المستوى الأول من json الخاص بنا. ولكن بالنسبة للحقل الرئيسي ، بدلاً من القيمة ، نرى json. ويحتوي هذا json بالفعل على قيم الاسم وحقول displayName. لذلك ، نقوم أولاً بإنشاء هيكل لجسون في مجال العميل المحتمل (العميل المحتمل):

struct Lead {
    string name;
    string displayName;
}

الآن نحن على استعداد لجعل الهيكل للمستوى الأول من مشروعنا (المشروع):

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

لكن المشكلة هي أن ماكرو جدول SIL يمكن أن يعمل فقط مع json بمستوى واحد من التداخل ، لذلك نحتاج إلى تحويل هيكلنا بمستويين من التعشيش (Project) إلى هيكل مع مستوى واحد من التعشيش (هيكل مسطح). ولكن أولاً ، قم بإنشاء بنية مسطحة (TableRow):

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

والآن سنكتب دالة لتحويل البيانات في بنية المشروع إلى بنية 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 وإدخال "مفتاح المشروع واسم المشروع ونوع المشروع ومدير المشروع واسم مدير المشروع" في حقل الأعمدة:



احفظ الصفحة وهنا هي النتيجة:



كل شيء تحول!

All Articles