首页 > 解决方案 > 如何从 Oracle APEX 页面调用 Jira Rest API

问题描述

要求 -

APEX对于创建的任何Jira问题,以下字段将显示在页面上。

  1. 问题编号/问题 ID
  2. 概括
  3. 描述
  4. 地位
  5. 受让人

例如,user01 和 user02 都可以访问Oracle APEX and Jira. user01 创建了 3 个问题,user02 在 Jira 中创建了 5 个问题。现在,当 user01 登录 Oracle APEX 时,应该会看到 3 个问题,而当 user02 登录时Oracle APEX,应该会在 APEX 页面上看到 5 个问题。

https://jira.local.com/jira/rest/api2

我是 APEX Rest 服务调用的新手,并请求大家提供一些示例 APEX 代码,以使用用户名/密码调用 Jira REST API 以满足上述要求。

谢谢大家。

标签: oracle-apexjira-rest-api

解决方案


我以前做过类似的事情。就我而言,目标是定期从 Jira 获取项目 PRJ001(Jira 项目密钥)的所有问题并将它们存储在本地数据库表(J_ISSUES)中,因此我创建了一个作业,不时执行以下过程到时间:

create or replace PROCEDURE           "JIRA_SYNC_ISSUES" as 

var_response CLOB;
var_counter number := 0;
var_total number := 1;
var_prj_key varchar2(10);

begin

    var_prj_key := 'PRJ001';
    var_total := 1;
    var_counter := 0;
    
    while var_total > var_counter
    loop
        apex_session.create_session (p_app_id => 107, p_page_id  => 1, p_username => 'USERNAME01');

        var_response:= apex_web_service.make_rest_request(
        p_url => 'https://yourcompany.atlassian.net/rest/api/2/search?jql=project="'|| var_prj_key ||'"&maxResults=100&startAt=' || var_counter || '',
        p_http_method => 'GET',
        p_credential_static_id => 'oud_rest'
        );


        SELECT JSON_VALUE(var_response, '$.total' RETURNING NUMBER) into var_total
          FROM DUAL;

        for i in (SELECT *
        FROM 
        JSON_TABLE(var_response, '$.issues[*]'
        COLUMNS (
             key VARCHAR2(100) PATH '$.key',
             prj_key VARCHAR2(100) PATH '$.fields.project.key',
             status VARCHAR2(100) PATH '$.fields.status.name',
             updated VARCHAR2(100) PATH '$.fields.updated',
             assignee VARCHAR2(100) PATH '$.fields.assignee.name',
             time_spent NUMBER PATH '$.fields.timespent'
             )))
        loop
            begin
               insert into j_issues (jis_key, jis_jpr_key, jis_status, jis_updated, jis_assignee, jis_time_spent) 
                  values (i.key,
                          i.prj_key, 
                          i.status, 
                          to_timestamp(substr(i.updated,1,10)||' '||substr(i.updated,12,8),'YYYY-MM-DD HH24:MI:SS'), 
                          i.assignee, 
                          i.time_spent);
            exception
               when dup_val_on_index then
                  update j_issues
                  set    jis_jpr_key = i.prj_key,
                         jis_status = i.status,
                         jis_updated = to_timestamp(substr(i.updated,1,10)||' '||substr(i.updated,12,8),'YYYY-MM-DD HH24:MI:SS'),
                         jis_assignee = i.assignee,
                         jis_time_spent = i.time_spent
                  where  jis_key = i.key;
            end;   
            var_counter := var_counter + 1;
        end loop;

    end loop;

end jira_sync_issues;

在第一部分中,它是对 API 进行身份验证和调用。在第二个中,它获取 var_response 并将其插入到所需的表中。对于第一部分,我已阅读:https ://www.jmjcloud.com/blog/simplifying-apex_web_service-oauth2-client-credentials 对于第二部分:https ://docs.oracle.com/database/121/ SQLRF/functions092.htm

注意 var_counter 和 var_total 变量。它们用于遍历 Jira 响应,因为在每个响应中检索的项目是有限的。因此,如果您期望超过该限制,则应该进行更多调用以检索它们。

如果问题的数量很大,那么执行这样的计划同步而不是让用户等待整个结果是有优势的。数据进入数据库后,您可以像往常一样查询它。

让我知道它是否有帮助;)


推荐阅读