ORACLE EBS 启用REST服务-2-开发篇

目前有一套R12的EBS的环境(12.1.3),要同外围系统做REST对接,目前系统是启用了Oracle E-Business Suite Integrated SOA Gateway (ISG) ,但是只支持SOAP风格的webservice,可以理解为基于XML形式来传送,如果要支持REST风格需要做一个较大的版本升级,这个系统是个核心系统,基于成本和稳定性考虑决定不做版本升级,启用ORDS组件来实现发布RESTFUL,ORDS + SQL DEVELOPER也能实现这个服务,但是用 SQL DEVELOPER 开发REST服务界面有点不友好,再加上新版的APEX封装了一些操作JSON的API,对开发者来说甚是方便,因此考虑用APEX来作为开发RESTFUL服务的前端界面,以下是实现过程,本文分两个章节,第一部分是环境搭建篇,第二部分是开发篇。此篇是第二部分。
参考文章:
https://blog.youkuaiyun.com/x6_9x/article/details/104873963
https://docs.oracle.com/en/database/oracle/application-express/20.2/index.html

工作空间配置

安装完成后,需要重置INTERNAL工作空间的密码,如果忘记管理员密码可以sys权限执行apex目录下的apxchwd.sql,来重置密码。
然后新建一个工作空间。

点击【创建工作区】

https://i.loli.net/2021/04/29/fsMWUxy7Dm1E5At.png

工作区名称: REST_DEMO

image.png

是否重用现有方案: 否
方案名: CUX_APEX
方案密码:REST_DEMO_PASS

点击下一页,输入工空间管理员信息

image.png

开发配置

登录刚才创建的工作空间: SQL工作室 RESTful服务
https://i.loli.net/2021/04/29/kl3BXmi5Mf1Y9d7.png

点击 将方案注册到ORDS

image.png

Apex中管理ords rest的服务层次是:
模块(modules)>模板(template)》method(PUT GET DELETE 等),如下图

image.png

注册ORDS的时候会安装一个实例服务,可以参照下官方的实例服务。

这里以发布一个简单的GET服务为例,向外围的费控系统提供EBS这边一些应付模块的信息。

依次创建:模块》模板》METHOD:

创建模块

https://i.loli.net/2021/04/29/wcavpoNjkREPMQe.png

在这里插入图片描述

创建模板

image.png

创建GET方法

在这里插入图片描述

使用APEX RESTful API

上面方法对应的PL/SQL匿名块中用到了apex提供的API ,实际业务代码不再粘贴出来,下面列举两个栗子来说明如何用APEX封装的API,用起来还是挺方便了,不用自己苦哈哈的用sys.htp.print()来一点点的拼接json报文了。
实例1-简单:

DECLARE 
lv_return_status number;
BEGIN
    lv_return_status := 0;
    apex_json.open_object;        
    apex_json.write('status_code',lv_return_status);
    apex_json.write('err_msg','null');
    apex_json.write('voucher_num',:voucher_num);    
    apex_json.open_array('data'); 
    apex_json.open_object;  
    apex_json.write('a',2);
    apex_json.write('b',2);
    apex_json.close_object;
    apex_json.open_object;    
    apex_json.write('a',21);
    apex_json.write('b',22);   
    apex_json.close_object;  
    apex_json.write('hello');
    apex_json.write('world'); 
    apex_json.close_all;
END;

效果如下:

{
    "status_code": 0,
    "err_msg": "null",
    "voucher_num": "'1234','423432','43243','093423423'",
    "data": [
        {
            "a": 2,
            "b": 2
        },
        {
            "a": 21,
            "b": 22
        },
        "hello",
        "world"
    ]
}

实例2:cursor嵌套打印

DECLARE
  c sys_refcursor;
BEGIN
  open c for select deptno,
                    dname,
                    cursor(select empno,
                                  ename
                             from emp e
                            where e.deptno=d.deptno) emps
               from dept d;
  apex_json.open_object;
  apex_json. write('departments', c);
  apex_json.close_object;
END;

效果如下:

 
{ "departments":[
      {"DEPTNO":10,
       "DNAME":"ACCOUNTING",
       "EMPS":[{"EMPNO":7839,"ENAME":"KING"}]},
      ...
     ,{"DEPTNO":40,"DNAME":"OPERATIONS","EMPS":null}] }

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贤时间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值