ORACLE EBS WebService推送报文例子 json格式

PROCEDURE call_web_service(x_return_status OUT NOCOPY VARCHAR2,
                             x_msg_count     OUT NOCOPY NUMBER,
                             x_msg_data      OUT NOCOPY VARCHAR2,
                             P_ORGANIZATION_ID     IN NUMBER,
                             P_PERIOD VARCHAR2,
                             x_request_xmltype  OUT NOCOPY sys.xmltype,
                             x_response_xmltype OUT NOCOPY sys.xmltype) IS
    l_api_name       CONSTANT VARCHAR2(30) := 'call_web_service';
    l_savepoint_name CONSTANT VARCHAR2(30) := 'SP01_call_ws';

    l_soap_content CLOB := '';

   -- l_soap_content VARCHAR2(32767);
    l_soap_request CLOB;

    l_soap_request_sign varchar2(2048);

    l_http_req     utl_http.req;
    l_http_resp    utl_http.resp;
    l_soap_respond VARCHAR2(32767);
    l_resp_xml     xmltype;

    l_doc            dbms_xmldom.domdocument;
    l_docelem        dbms_xmldom.domelement;
    l_nodelist       dbms_xmldom.domnodelist;
    l_return_status  VARCHAR2(10);
    l_length         NUMBER;
    l_n              dbms_xmldom.domnode;
    l_case_num       VARCHAR2(30);
    l_flag           VARCHAR2(30);
    l_err_msg        VARCHAR2(3000);
    l_webservice_url VARCHAR2(3000);
    jsonobj          json;

    --l_webservice_url VARCHAR2(3000);
    l_sec_content   VARCHAR2(20000);
    l_param_content VARCHAR2(20000);
    l_warehouseid   VARCHAR2(2000);

    l_returncode VARCHAR2(2000);
    l_returndesc VARCHAR2(2000);
    l_returnflag NUMBER;
    l_resultinfo VARCHAR2(2000);
    l_raw        RAW(32767);
    l_put_flag   VARCHAR2(1) := 'N';

    --
    l_req_txt_tbl dbms_sql.varchar2_table;
    l_lengthb     NUMBER;
    l_count       NUMBER := 0;

    l_start_date  VARCHAR2(100);
    l_end_date    VARCHAR2(100);
    l_resp        CLOB;
    l_raw_content RAW(1024);
    ajsonobj      json;
    srcclob       CLOB;
    -- desclob  CLOB;
    list_value         json_list;
    code_value         VARCHAR2(1000);
  --  l_interface        cux_pick_iface%ROWTYPE;
    l_version_number   VARCHAR2(500);
   -- l_his              cux_cst_put_history%ROWTYPE;
    l_period_name      VARCHAR2(240);
    l_cnt              NUMBER := 0;
    l_row_count        NUMBER := 0;
    l_event_attrs_rec  cux_pub_push_iface_comm_pub.event_attrs_rec_type;
    l_event_key        VARCHAR2(2000);
    l_event_name       VARCHAR2(120);
   -- l_request_xmltype  sys.xmltype;
   -- l_response_xmltype sys.xmltype;
    CURSOR cur_all IS
         SELECT ood.organization_name,
           ood.ORGANIZATION_CODE,
           substr(pp.period_name,4,4) years,
           substr(pp.period_name,1,2) months,
           msi.segment1 item_code,
           round(pic.item_cost, 5) item_cost,
           pic.total_layer_quantity qty,
           round(pic.item_cost, 5) * pic.total_layer_quantity amount
      FROM cst_pac_item_costs           pic,
           cst_pac_periods              pp,
           mtl_system_items_b           msi,
           org_organization_definitions ood,
           cst_cost_group_assignments   ccga
     WHERE pic.cost_group_id = ccga.cost_group_id
       AND pp.pac_period_id = pic.pac_period_id
       AND msi.inventory_item_id = pic.inventory_item_id
       AND ood.organization_id = ccga.organization_id
       AND msi.organization_id = ccga.organization_id
       and pp.period_name = P_PERIOD
       and ccga.organization_id = P_ORGANIZATION_ID
       ;

  BEGIN
    -- start activity to create savepoint, check compatibility
    -- and initialize message list, include debug message hint to enter api
    x_return_status := hss_api.start_activity(p_pkg_name       => g_pkg_name,
                                              p_api_name       => l_api_name,
                                              p_savepoint_name => l_savepoint_name,
                                              p_init_msg_list  => fnd_api.g_false);
    raise_exception(x_return_status);
    -- API body

    -- logging parameters
    IF g_debug = 'Y' THEN
      NULL;
    END IF;

    SELECT MAX(def.addition_info)
      INTO l_webservice_url
      FROM cux_00_imp_iface_system_def def
     WHERE def.system_code = 'BMSITEMCST';

    dbms_output.put_line('l_webservice_url:' || l_webservice_url);




    raise_exception(x_return_status);

    --获取数量--



    SELECT count(*) into l_count
        FROM cst_pac_item_costs           pic,
             cst_pac_periods              pp,
             cst_cost_group_assignments   ccga
       where pic.cost_group_id = ccga.cost_group_id
         AND pp.pac_period_id = pic.pac_period_id
         and pp.period_name = P_PERIOD
         and ccga.organization_id = P_ORGANIZATION_ID   ;

    SELECT ceil(nvl(l_count,
                    0) / 5000)
      INTO l_cnt
      FROM dual;
    dbms_output.put_line('l_count:' || l_count);
    dbms_output.put_line('l_cnt:' || l_cnt);
    FOR i IN 1 .. l_cnt
    LOOP
      dbms_output.put_line('i:' || i);

      if i=2 then
        dbms_output.put_line('wwww');
        end if;

      l_soap_content := '[';--'text=[';
      l_row_count    := 0;
      FOR rec IN cur_all
      LOOP
        IF nvl(l_row_count,
               0) > 0 THEN
          l_soap_content := l_soap_content || ',';
        END IF;
        l_row_count := l_row_count + 1;
        --报文正文--
        l_soap_content := l_soap_content || '{';
        --采购单--
      /*  l_soap_content := l_soap_content || '"orgId"' || ':' || '"' || rec.organization_id || '"' || ',';\*utl_url.escape(output_xml(rec.organization_id,
                                                                      'orgId') || ',');*\
        l_soap_content := l_soap_content || '"itemNum"' || ':' || '"' || rec.item_number || '"' || ',';
        l_soap_content := l_soap_content || '"locationCode"' || ':' || '"' || rec.subinventory || '"' ;        */
        --


        l_soap_content := l_soap_content || output_xml(rec.organization_name,
                                                                      'corpName') || ',';
        --
        l_soap_content := l_soap_content || output_xml(rec.organization_code,
                                                                      'corpCode') || ',';

        l_soap_content := l_soap_content || output_xml(rec.years,
                                                                      'year') || ',';
        --
        l_soap_content := l_soap_content || output_xml(rec.months,
                                                                      'moth') || ',';

        l_soap_content := l_soap_content || output_xml(rec.item_code,
                                                                      'itemId') || ',';

        l_soap_content := l_soap_content || output_xml(rec.item_cost,
                                                                      'price') || ',';
        --
        l_soap_content := l_soap_content || output_xml(rec.qty,
                                                                      'num') || ',';

        --采购单行号--
        l_soap_content := l_soap_content || output_xml(rec.amount,
                                                                       'totalPrice') ;
        /*l_soap_content := l_soap_content || utl_url.escape(output_xml2(rec.item_cost,
        'price'));*/
        l_soap_content := l_soap_content || '}';

      END LOOP;
      l_soap_content := l_soap_content || output_xml(']');

      l_soap_request    := l_soap_content;
     -- l_soap_request_sign := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => l_soap_content || '+erp001'));
    --  l_soap_request_sign := ',sign=' || l_soap_request || '+erp001'  ;
      x_request_xmltype := xmltype.createxml('<tag>{"body":' || l_soap_request  || ',' || output_xml('aa1eeca152385d91072ca3c7d38709c5',
                                                                       'sign') || '}</tag>');

       --dbms_output.put_line('l_soap_content:' || l_soap_content);
        dbms_output.put_line('l_soap_content:' || dbms_lob.substr(l_soap_content,
      1000));

      l_req_txt_tbl.delete;
      l_lengthb := 0;
      cux_pub_common_utl.get_clob2varchartbl(p_clob       => l_soap_request,
                                             x_varchartbl => l_req_txt_tbl,
                                             x_lengthb    => l_lengthb);

      l_http_req := utl_http.begin_request(l_webservice_url,
                                           'POST',
                                           sys.utl_http.http_version_1_1);
      utl_http.set_body_charset('UTF-8');
      utl_http.set_header(l_http_req,
                          'Content-Type',
                         -- 'application/x-www-form-urlencoded');
                         'application/json');
      utl_http.set_header(r     => l_http_req,
                          NAME  => 'Content-Length',
                          VALUE => l_lengthb);
      --将报文循环写入--
      IF l_req_txt_tbl.count > 0 THEN
        --   dbms_output.put_line('count:' || l_req_txt_tbl.count);
        FOR i IN l_req_txt_tbl.first .. l_req_txt_tbl.last
        LOOP

          utl_http.write_raw(l_http_req,
                             utl_raw.cast_to_raw(l_req_txt_tbl(i)));
          -- dbms_output.put_line(l_req_txt_tbl(i));
        END LOOP;
      END IF;
      l_http_resp := utl_http.get_response(l_http_req);
      dbms_output.put_line('status_code:' || l_http_resp.status_code);
      l_return_status := 'S';
      IF l_http_resp.status_code = 200 THEN
      l_resp:=null;
        LOOP
          l_raw_content := null;
          BEGIN
            utl_http.read_raw(l_http_resp,
                              l_raw_content,
                              1024);
          EXCEPTION
            WHEN OTHERS THEN
              EXIT;
          END;
          l_resp := l_resp || utl_raw.cast_to_varchar2(l_raw_content);
        END LOOP;
        dbms_output.put_line('l_resp:' || dbms_lob.substr(l_resp,
                                                          1000));

        l_resp_xml         := xmltype.createxml('<tag>' || l_resp || '</tag>');
        x_response_xmltype := l_resp_xml;
        jsonobj            := json(l_resp);

        l_returncode := json_ext.get_string(jsonobj,
                                            'code');
        l_returndesc := json_ext.get_string(jsonobj,
                                            'msg');
        /*     l_data       := json_ext.get_json(jsonobj,
        'data');*/
        /*
        l_return_data := json_ext.get_string(l_data,
                                             'errorMsg');*/
        utl_http.end_response(l_http_resp);
      --  dbms_lob.freetemporary(l_resp);

      ELSE
        l_resp_xml         := xmltype.createxml('<tag>访问失败:status_code:' || l_http_resp.status_code || '</tag>');
        x_response_xmltype := l_resp_xml;
        utl_http.end_response(l_http_resp);
        hss_api.set_message(p_app_name     => 'CUX',
                            p_msg_name     => 'CUX_WIP_CALL_PATS_WS_FAIL',
                            p_token1       => 'ERROR',
                            p_token1_value => l_returncode || '-' || l_returndesc);
        l_return_status := fnd_api.g_ret_sts_error;
         raise_exception(x_return_status);
      END IF;



      IF (nvl(l_returncode,
             '0') <> '1' or l_returndesc is not null) THEN
        hss_api.set_message(p_app_name     => 'CUX',
                            p_msg_name     => 'CUX_WIP_CALL_PATS_WS_FAIL',
                            p_token1       => 'ERROR',
                            p_token1_value => l_returncode || '-' || l_returndesc);
        l_return_status := fnd_api.g_ret_sts_error;
         raise_exception(x_return_status);
      END IF;


      --raise_exception(x_return_status);
      --log(l_request_xmltype);
      --log('l_response_xmltype:' || l_response_xmltype);

      raise_exception(x_return_status);

    END LOOP;



    /*   --10.调用出错,报错抛出异常退出
    IF nvl(l_returncode,
           'error') <> 'success' THEN
      hss_api.set_message(p_app_name     => 'CUX',
                          p_msg_name     => 'CUX_WIP_CALL_PATS_WS_FAIL',
                          p_token1       => 'ERROR',
                          p_token1_value => l_returncode || '-' || l_returndesc);
      x_return_status := fnd_api.g_ret_sts_error;
      raise_exception(x_return_status);
    END IF;*/

    --11.调用成功则更新PO订单的attribute15为Y
    --逻辑自行补充,注意同时更新last字段
    <<end_call>>
  -- end activity, include debug message hint to exit api
    x_return_status := hss_api.end_activity(p_pkg_name  => g_pkg_name,
                                            p_api_name  => l_api_name,
                                            p_commit    => fnd_api.g_false,
                                            x_msg_count => x_msg_count,
                                            x_msg_data  => x_msg_data);
  EXCEPTION
    WHEN fnd_api.g_exc_error THEN
      utl_http.end_response(l_http_resp);
      x_return_status := hss_api.handle_exceptions(p_pkg_name       => g_pkg_name,
                                                   p_api_name       => l_api_name,
                                                   p_savepoint_name => l_savepoint_name,
                                                   p_exc_name       => hss_api.g_exc_name_error,
                                                   x_msg_count      => x_msg_count,
                                                   x_msg_data       => x_msg_data);
    WHEN fnd_api.g_exc_unexpected_error THEN
      utl_http.end_response(l_http_resp);
      x_return_status := hss_api.handle_exceptions(p_pkg_name       => g_pkg_name,
                                                   p_api_name       => l_api_name,
                                                   p_savepoint_name => l_savepoint_name,
                                                   p_exc_name       => hss_api.g_exc_name_unexp,
                                                   x_msg_count      => x_msg_count,
                                                   x_msg_data       => x_msg_data);
    WHEN OTHERS THEN
      -- dbms_output.put_line(SQLCODE || SQLERRM);
      dbms_output.put_line(sqlerrm);
      utl_http.end_response(l_http_resp);
      x_return_status := hss_api.handle_exceptions(p_pkg_name       => g_pkg_name,
                                                   p_api_name       => l_api_name,
                                                   p_savepoint_name => l_savepoint_name,
                                                   p_exc_name       => hss_api.g_exc_name_others,
                                                   x_msg_count      => x_msg_count,
                                                   x_msg_data       => x_msg_data);
  END call_web_service;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值