• Oracle EBS json


    JSON:  JavaScript 对象表示法 JavaScript Object Notation

    JSON 是存储和交换文本信息的语法。类似XML。

    JSON 比 XML更小、更快,更易解析。

    使用中,JSON有以下3种结构:

    1. 对象:{"name":"Jenrry","age":19}

    2.数组: 比如  [{"name":"Jenrry","age":19},{"name":"Jerry","age":25}]

    3. 值:{“name”:"Jenrry","birthday":{"month":8,"day":2}},类似于对象嵌套对象

    大括号{} 用来描述一组“不同类型的无序键值对集合”,每个键值对可以理解为OPP的属性描述,方括号[] 用来描述一组“相同类型的有序数据组合”。

    摘自: https://www.cnblogs.com/xiaochongchong/p/5284441.html

    如上,JSON是一种数据形式。

    Oracle EBS中在REST接口中使用JSON数据,其实也是将XML格式转化而已。REST接口还是基于HTTP转发,使用HTTP协议里的POST方法,因此调用底层的 uttl_http函数。

    l_exp_json json;
        l_exp_clob CLOB;
    
     l_exp_json := json();
      
        l_exp_json.put('COMPANY_CODE',
                       p_company_code);
        l_exp_json.put('REQUEST_STATUS',
                       1);
        l_exp_json.put('ERROR_MESSAGE',
                       p_exception_msg);
      
        l_exp_clob := empty_clob();
        dbms_lob.createtemporary(l_exp_clob,
                                 TRUE);
        l_exp_json.to_clob(l_exp_clob,
                           TRUE);
        RETURN l_exp_clob;
    

      

        l_all_json       json;
        l_single_json    json;
        l_json_list      json_list;
        l_batch_id       NUMBER;
    
        l_all_json := json();
        l_all_json.put('COMPANY_CODE',
                       g_company_code);
        l_all_json.put('REQUEST_STATUS',
                       0);
        l_all_json.put('ERROR_MESSAGE',
                       '');
        l_json_list := json_list();
      
        FOR rec_records IN cur_payment_data
        LOOP
          l_single_json := json();
          l_single_json.put('EXPENSE_NUMBER',
                            rec_records.expense_number);   
     l_single_json.put('EXPENSE_NUMBER2',
                            rec_records.expense_number2);    
      l_json_list.add_elem(l_single_json.to_json_value);
        END LOOP;
      
        l_all_json.put('RECORDS',
                       l_json_list);
        l_return_clob := empty_clob();
        dbms_lob.createtemporary(l_return_clob,
                                 TRUE);
        l_all_json.to_clob(l_return_clob,
                           TRUE);
      
        x_rtn_clob := l_return_clob;
        dbms_lob.freetemporary(l_return_clob);
    

      

    FUNCTION invoke_webservice(p_wsdl         IN VARCHAR2,
                                 p_soap_request IN VARCHAR2) RETURN xmltype IS
        http_req     utl_http.req;
        http_resp    utl_http.resp;
        soap_respond VARCHAR2(30000);
        resp         xmltype;
      BEGIN
      
        http_req := utl_http.begin_request(p_wsdl, 'POST', 'HTTP/1.1');
        utl_http.set_header(http_req, 'Content-Type', 'text/xml;charset=utf-8'); -- charset=utf-8 如多参数有中文必须加
        utl_http.set_header(http_req,
                            'Content-Length',
                            lengthb(p_soap_request)); --lengthb 不能用 length 如果用length 则碰见中文会报错
        utl_http.set_header(http_req, 'SOAPAction', '');
        utl_http.write_text(http_req, p_soap_request);
        http_resp := utl_http.get_response(http_req);
        utl_http.read_text(http_resp, soap_respond);
        utl_http.end_response(http_resp);
        resp := xmltype.createxml(soap_respond);
        RETURN resp;
      END;
    

      

    l_request  utl_http.req;
        l_response utl_http.resp;
    l_resp_xml    xmltype;
        resp_json     json;
        l_resp_json   json_list;
        json_v        json_value;
    
    l_req_data := 'page=' || p_page || '&size=10&startDate=' ||
                      to_char(nvl(p_start_date, SYSDATE - 1), 'YYYY-MM-DD') ||
                      '&endDate=' ||
                      to_char(nvl(p_end_date, SYSDATE + 1), 'YYYY-MM-DD');
    
    l_url := l_url || l_req_data;
    
    l_request := utl_http.begin_request(l_url,
                                            'POST',
                                            utl_http.http_version_1_1);
     utl_http.set_header(l_request,
                            'Content-Type',
                            'text/html; charset=utf-8');
        utl_http.set_header(l_request,
                            'Content-Length',
                            to_char(lengthb(l_url)));
    utl_http.write_text(l_request, l_url);
        l_response := utl_http.get_response(l_request);
      
        utl_http.read_text(l_response, l_resp_data);
    utl_http.end_response(l_response);
    --插入数据
        resp_json     := json(l_resp_data);
        l_message     := get_string(json_ext.pp(obj    => resp_json,
                                                v_path => 'message'));
        l_status      := get_string(json_ext.pp(obj    => resp_json,
                                                v_path => 'status'));
        l_error_code  := get_string(json_ext.pp(obj    => resp_json,
                                                v_path => 'errorCode'));
        l_total_count := nvl(json_ext.pp(obj    => resp_json,
                                         v_path => 'totleCount'),
                             0);
    
    --获取需要循环次数
          g_page      := ceil(l_total_count / 10);
          l_resp_json := json_list(json_ext.pp(obj    => resp_json,
                                               v_path => 'data')); --个数
    

      

  • 相关阅读:
    第二十四节:ESModule简介、按需导出导入、默认导出导入、动态加载、内部原理等
    第二十三节:JS模块化历史、CommonJs详解、AMD和CMD规范知悉
    第二十六节:cnpm的使用和yarn的用法详解
    第二十五节:npm介绍、package.json详解、npm install原理、常用指令、npx工具、发布自己的包
    CSS系列总结【更新中】
    第二十二节:进程/线程、node事件机制、微任务/宏任务、相关面试题剖析
    ES6中新增了Array.isArray
    C# WebException 获取http错误码和错误消息
    DataSet序列化成JSON格式字符串
    linux shell 中小数进行比较
  • 原文地址:https://www.cnblogs.com/jenrry/p/10139087.html
Copyright © 2020-2023  润新知