如何从Oracle APEX页面调用Jira Rest API

问题描述

要求-

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

  1. 问题编号/问题ID
  2. 摘要
  3. 说明
  4. 状态
  5. 受让人

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

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

我是APEX Rest服务调用的新手,并要求你们所有人提供一些示例APEX代码,以便使用用户名/密码来调用Jira REST API,以满足上述要求。

谢谢。

解决方法

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

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,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响应,因为每个响应中检索到的项都有限制。因此,如果您期望超出该限制,则应该拨打更多电话来检索它们。

如果问题的数量很大,则执行这样的预定同步而不是让用户等待整个结果是有好处的。数据放入数据库后,您只需照常查询即可。

让我知道是否有帮助;)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...