oracle-apex - 如何从 Oracle APEX 页面调用 Jira Rest API
问题描述
要求 -
APEX
对于创建的任何Jira
问题,以下字段将显示在页面上。
- 问题编号/问题 ID
- 概括
- 描述
- 地位
- 受让人
例如,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 以满足上述要求。
谢谢大家。
解决方案
我以前做过类似的事情。就我而言,目标是定期从 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 响应,因为在每个响应中检索的项目是有限的。因此,如果您期望超过该限制,则应该进行更多调用以检索它们。
如果问题的数量很大,那么执行这样的计划同步而不是让用户等待整个结果是有优势的。数据进入数据库后,您可以像往常一样查询它。
让我知道它是否有帮助;)
推荐阅读
- javascript - 将Jquery方法实时应用于动态内容
- sql - 当列中的值更改时包括表中的所有行
- css - 材质图标不会在 Angular 生产版本中呈现
- c++ - 停止 cmake target_link_libraries 将静态库的两个目标文件链接到静态库本身
- vba - 更改/编辑发件人姓名的显示
- c# - WPF 允许用户使用粗体/斜体/下划线等格式化 TextBlock
- javascript - 如何在 HTML 中显示 JavaScript 函数的结果?
- c - 头文件与源文件中的内联函数定义
- r - R - 根据条件观察创建一个新列并将其应用于主 df
- sql-server - Linq 看不到按存储过程从组中计数列