forum.ge
reklama
FORUM.GE წესები  · დახმარება  · ძებნა  · წევრები  · კალენდარი  · ჩატი
  გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

> RS.GE from Oracle., ვინმეს ხომ არ გიმუშავიათ ამ საკითხზე?
jboss
BMW Power


****
ჯგუფი: Registered
წერილები: 662
წევრი No.: 7741
რეგისტრ.: 11-December 04

გამოგზავნილია: 20 Oct 2012, 22:51  #33565066      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
მოგესალმებით..

ვცდილობ მოვაწყო revenue.mof.ge/ntosservice/ntosservice.asmx სერვისების გამოყენება Oracle და MS SQL ბაზებიდან. ვინმეს რამე ხომ არ გაქვთ დაწერილი, ან, მონაწილეობის მიღება ხომ არ გსურთ..?

წინასწარ დიდი მადლობა.


"so far" დაწერილი მაქვს შემდეგი ფუნქციები:

1) what_is_my_ip (pl/sql-UTL_HTTP)
2) get_seller_invoices (pl/sql-UTL_HTTP)

მეორეზე ჯერ ვმუშაობ, და პირველს დავდებ აქ.
* * *
1) what_is_my_ip
CODE

create or replace procedure sp_ws_what_is_my_ip is
 V_SOAP_REQUEST      XMLTYPE := XMLTYPE(
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
  <soapenv:Header/>
  <soapenv:Body>
     <tem:what_is_my_ip/>
  </soapenv:Body>
</soapenv:Envelope>
');
 V_SOAP_REQUEST_TEXT CLOB := V_SOAP_REQUEST.getClobVal();
 V_REQUEST           UTL_HTTP.REQ;
 V_RESPONSE          UTL_HTTP.RESP;
 V_BUFFER            VARCHAR2(1024);
 V_RESULT            CLOB;
 Response XMLTYPE;
 v_ip                varchar2(100);
BEGIN

 V_REQUEST := UTL_HTTP.BEGIN_REQUEST(URL => 'http://services.rs.ge/WayBillService/WayBillService.asmx', METHOD => 'POST');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Accept-Encoding', VALUE => 'gzip,deflate');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Type', VALUE => 'text/xml;charset=UTF-8');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'SOAPAction', VALUE => 'http://tempuri.org/what_is_my_ip');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'User-Agent', VALUE => 'Jakarta Commons-HttpClient/3.1');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Length', VALUE => DBMS_LOB.GETLENGTH(V_SOAP_REQUEST_TEXT));

 V_REQUEST.METHOD := 'POST';

 UTL_HTTP.WRITE_TEXT (R => V_REQUEST, DATA => V_SOAP_REQUEST_TEXT);

 V_RESPONSE := UTL_HTTP.GET_RESPONSE(V_REQUEST);
 V_RESULT :='';
 LOOP
   UTL_HTTP.READ_LINE(V_RESPONSE, V_BUFFER, TRUE);
   V_RESULT:=V_RESULT||V_BUFFER;
 END LOOP;
 UTL_HTTP.END_RESPONSE(V_RESPONSE);

EXCEPTION
 WHEN UTL_HTTP.END_OF_BODY THEN
 UTL_HTTP.END_RESPONSE(V_RESPONSE);

 Response:=XMLtype(V_RESULT);
 dbms_output.put_line(Response.getStringVal());
 SELECT EXTRACTVALUE(Response, '//what_is_my_ipResult/text()','xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://tempuri.org/') into v_ip FROM dual;
 dbms_output.put_line('IP: '||v_ip);
END;

get_seller_invoices-ში UTL_HTTP.READ_LINE არ გამომადგა, BLOB+CLOB დამჭირდა. ახლა უკვე დაწერილი მაქვს მუშა ვერსია, თუმცა ჯერ კიდე ბევრი რამ უნდა, კერძოდ get_invoice_desc.
ახლა ვამოწმებ 50,000 ჩანაწერზე...

CODE

select
 ID,  SEQ_NUM_S,  STATUS,  WAS_REF,  F_SERIES,  F_NUMBER,  to_date(substr(REG_DT,1,19),'yyyy-mm-dd"T"hh24:mi:ss'),
 to_date(substr(OPERATION_DT,1,19),'yyyy-mm-dd"T"hh24:mi:ss'),  S_USER_ID,  DOC_MOS_NOM_S,  SA_IDENT_NO,  ORG_NAME,
 NOTES,  TANXA
from xmltable(xmlnamespaces(
                           'http://schemas.xmlsoap.org/soap/envelope/' as "soap",
                           'http://www.w3.org/2001/XMLSchema-instance' as "xsi",
                           'http://www.w3.org/2001/XMLSchema' as "xsd"
                          ),
                   '//invoices'
                   passing Response -- my HTTP response BLOB converted into CLOB here.
                   columns
                     ID number path '//ID',
                     SEQ_NUM_S      number path '//SEQ_NUM_S',
                     STATUS         number path '//STATUS',
                     WAS_REF        number path '//WAS_REF',
                     F_SERIES       varchar2(2000) path '//F_SERIES',
                     F_NUMBER       varchar2(2000) path '//F_NUMBER',
                     REG_DT         varchar2(2000) path '//REG_DT',
                     OPERATION_DT   varchar2(2000) path '//OPERATION_DT',
                     S_USER_ID      number path '//S_USER_ID',
                     DOC_MOS_NOM_S  varchar2(2000) path '//DOC_MOS_NOM_S',
                     SA_IDENT_NO    varchar2(2000) path '//SA_IDENT_NO',
                     ORG_NAME       varchar2(2000) path '//ORG_NAME',
                     NOTES          varchar2(2000) path '//NOTES',
                     TANXA          number path '//TANXA'
                   ) rs_tab;


This post has been edited by jboss on 20 Oct 2012, 22:56


--------------------
.........................................................................
2007 335i MT N54
MHD+JB4 Garret GTW3684 ST
FMIC, DP, 3" PIPES, Fuel-It Stage 1, MF LSD.
.......Keep Smiling™ :)........................................
jboss
BMW Power


****
ჯგუფი: Registered
წერილები: 662
წევრი No.: 7741
რეგისტრ.: 11-December 04

გამოგზავნილია: 22 Oct 2012, 11:28  #33582651      · პროფილი · პირადი მიმოწერა · ჩატი · ელფოსტა
ა/ფაქტურების წამოღება:

CODE

-- invoice headers table
create table rs$ge_invoices (
 id   number,
 SEQ_NUM_S      number,
 STATUS         number,
 WAS_REF        number,
 F_SERIES       varchar2(2000),
 F_NUMBER       varchar2(2000),
 REG_DT         date,
 OPERATION_DT   date,
 S_USER_ID      number,
 DOC_MOS_NOM_S  varchar2(2000),
 SA_IDENT_NO    varchar2(2000),
 ORG_NAME       varchar2(2000),
 NOTES          varchar2(2000),
 TANXA          number
 );                

-- invoice details table
create table rs$ge_invoice_details (
 id         number,
 INV_ID     number,
 GOODS      varchar2(2000),
 G_UNIT     varchar2(2000),
 G_NUMBER       number,
 FULL_AMOUNT      number,
 DRG_AMOUNT       number,
 AQCIZI_AMOUNT  number,
 AKCIS_ID      number,
 SDRG_AMOUNT  varchar2(2000)
 );

-- temporary XMLTYPE table to hold single row for better performance
create table rs$ge_txml
(
 val XMLTYPE
);

-- invoice details getter
create or replace procedure rs$make_details(inv_id in number) is
-- put your USER_ID instead of XXXXXXX, SU and SP instead of MYSU and MYSP
 V_SOAP_REQUEST      XMLTYPE := XMLTYPE(
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
  <soapenv:Header/>
  <soapenv:Body>
     <tem:get_invoice_desc>
        <tem:user_id>XXXXXXX</tem:user_id>
        <tem:invois_id>'||inv_id||'</tem:invois_id>
        <tem:su>MYSU</tem:su>
        <tem:sp>MYSP</tem:sp>
     </tem:get_invoice_desc>
  </soapenv:Body>
</soapenv:Envelope>
');
 V_SOAP_REQUEST_TEXT CLOB:= V_SOAP_REQUEST.getClobVal();
 V_REQUEST           UTL_HTTP.REQ;
 V_RESPONSE          UTL_HTTP.RESP;
 V_RESULT            CLOB;
 v_raw               raw(32766);
 Response XMLTYPE;
 blob_buf            blob;
 v_lang_context number := dbms_lob.default_lang_ctx;
 g_msg          varchar2(2000);
 v_dest_offset  INTEGER := 1;
 v_src_offset    INTEGER := 1;
 v_blob_csid number :=0;
 Tmp_clob clob;
BEGIN
 utl_http.set_transfer_timeout(10000);
 V_REQUEST := UTL_HTTP.BEGIN_REQUEST(URL => 'http://www.revenue.mof.ge/ntosservice/ntosservice.asmx', METHOD => 'POST');

 dbms_lob.createtemporary( blob_buf, true );
 dbms_lob.createtemporary(Tmp_clob, true);

 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Accept-Encoding', VALUE => 'gzip,deflate');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Type', VALUE => 'text/xml;charset=UTF-8');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'SOAPAction', VALUE => 'http://tempuri.org/get_invoice_desc');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'User-Agent', VALUE => 'Jakarta Commons-HttpClient/3.1');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Length', VALUE => DBMS_LOB.GETLENGTH(V_SOAP_REQUEST_TEXT));

 V_REQUEST.METHOD := 'POST';

 UTL_HTTP.WRITE_TEXT (R => V_REQUEST, DATA => V_SOAP_REQUEST_TEXT);

 V_RESPONSE := UTL_HTTP.GET_RESPONSE(V_REQUEST);
 V_RESULT :='';
 begin
   loop
   utl_http.read_raw(V_RESPONSE,v_raw);
   dbms_lob.append( blob_buf,v_raw);
  end loop;
   exception
     when utl_http.END_OF_BODY
     then
       null;
 end;
   UTL_HTTP.END_RESPONSE(V_RESPONSE);
   dbms_lob.CONVERTTOCLOB(Tmp_clob,blob_buf,DBMS_LOB.LOBMAXSIZE,v_dest_offset,v_src_offset,v_blob_csid,v_lang_context,g_msg);
   V_RESULT:=Tmp_clob;
   Response:=XMLtype(V_RESULT);

insert into rs$ge_invoice_details
select
 ID,
 INV_ID,
 GOODS,
 G_UNIT,
 G_NUMBER,
 FULL_AMOUNT,
 DRG_AMOUNT,
 AQCIZI_AMOUNT,
 AKCIS_ID,
 SDRG_AMOUNT
from xmltable(xmlnamespaces(
                           'http://schemas.xmlsoap.org/soap/envelope/' as "soap",
                           'http://www.w3.org/2001/XMLSchema-instance' as "xsi",
                           'http://www.w3.org/2001/XMLSchema' as "xsd"
                          ),
                   '//invoices_descs'
                   passing Response --response
                   columns
                     ID             number         path '//ID',
                     INV_ID         number         path '//INV_ID',
                     GOODS          varchar2(2000) path '//GOODS',
                     G_UNIT         varchar2(2000) path '//G_UNIT',
                     G_NUMBER       number         path '//G_NUMBER',
                     FULL_AMOUNT    number         path '//FULL_AMOUNT',
                     DRG_AMOUNT     number         path '//DRG_AMOUNT',
                     AQCIZI_AMOUNT  number         path '//AQCIZI_AMOUNT',
                     AKCIS_ID       number         path '//AKCIS_ID',
                     SDRG_AMOUNT    varchar2(2000) path '//SDRG_AMOUNT'
                   ) rs_tab;
commit;

EXCEPTION
 WHEN UTL_HTTP.END_OF_BODY THEN
 UTL_HTTP.END_RESPONSE(V_RESPONSE);

END;



-- invoices getter procedure
create or replace procedure rs$make_invoices(fd in date, td in date) is
-- put your USER_ID instead of XXXXXXX
-- put your UN_ID instead of YYYYYY
-- put your SU instead of MYSU
-- put your SP instead of MYSP
 V_SOAP_REQUEST      XMLTYPE := XMLTYPE(
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
  <soapenv:Header/>
  <soapenv:Body>
     <tem:get_seller_invoices>
        <tem:user_id>XXXXXXX</tem:user_id>
        <tem:un_id>YYYYYY</tem:un_id>
        <tem:s_dt>'||to_char(fd,'yyyy-mm-dd')||'</tem:s_dt>
        <tem:e_dt>'||to_char(td,'yyyy-mm-dd')||'</tem:e_dt>
        <tem:op_s_dt>'||to_char(fd,'yyyy-mm-dd')||'</tem:op_s_dt>
        <tem:op_e_dt>'||to_char(td,'yyyy-mm-dd')||'</tem:op_e_dt>
 <tem:invoice_no></tem:invoice_no>
 <tem:sa_ident_no></tem:sa_ident_no>
 <tem:desc></tem:desc>
 <tem:doc_mos_nom></tem:doc_mos_nom>
 <tem:su>MYSU</tem:su>
 <tem:sp>MYSP</tem:sp>
     </tem:get_seller_invoices>
  </soapenv:Body>
</soapenv:Envelope>
');
 V_SOAP_REQUEST_TEXT CLOB:= V_SOAP_REQUEST.getClobVal();
 V_REQUEST           UTL_HTTP.REQ;
 V_RESPONSE          UTL_HTTP.RESP;
 V_RESULT            CLOB;
 v_raw               raw(32766);
 Response XMLTYPE;
 blob_buf            blob;
 v_lang_context number := dbms_lob.default_lang_ctx;
 g_msg          varchar2(2000);
 v_dest_offset  INTEGER := 1;
 v_src_offset    INTEGER := 1;
 v_blob_csid number :=0;
 Tmp_clob clob;
BEGIN
 dbms_output.put_line(V_SOAP_REQUEST.getStringVal());
 utl_http.set_transfer_timeout(10000);
 V_REQUEST := UTL_HTTP.BEGIN_REQUEST(URL => 'http://www.revenue.mof.ge/ntosservice/ntosservice.asmx', METHOD => 'POST');

 dbms_lob.createtemporary( blob_buf, true );
 dbms_lob.createtemporary(Tmp_clob, true);

 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Accept-Encoding', VALUE => 'gzip,deflate');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Type', VALUE => 'text/xml;charset=UTF-8');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'SOAPAction', VALUE => 'http://tempuri.org/get_seller_invoices');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'User-Agent', VALUE => 'Jakarta Commons-HttpClient/3.1');
 UTL_HTTP.SET_HEADER (R => V_REQUEST, NAME => 'Content-Length', VALUE => DBMS_LOB.GETLENGTH(V_SOAP_REQUEST_TEXT));

 V_REQUEST.METHOD := 'POST';

 UTL_HTTP.WRITE_TEXT (R => V_REQUEST, DATA => V_SOAP_REQUEST_TEXT);

 V_RESPONSE := UTL_HTTP.GET_RESPONSE(V_REQUEST);
 V_RESULT :='';
 begin
   loop
   utl_http.read_raw(V_RESPONSE,v_raw);
   dbms_lob.append( blob_buf,v_raw);
  end loop;
   exception
     when utl_http.END_OF_BODY
     then
       null;
 end;
   UTL_HTTP.END_RESPONSE(V_RESPONSE);
   dbms_lob.CONVERTTOCLOB(Tmp_clob,blob_buf,DBMS_LOB.LOBMAXSIZE,v_dest_offset,v_src_offset,v_blob_csid,v_lang_context,g_msg);
   V_RESULT:=Tmp_clob;
   Response:=XMLtype(V_RESULT);

delete from rs$ge_txml;
insert into rs$ge_txml(val) values (Response);
commit;

insert into rs$ge_invoices
select
 ID,
 SEQ_NUM_S,
 STATUS,
 WAS_REF,
 F_SERIES,
 F_NUMBER,
 to_date(substr(REG_DT,1,19),'yyyy-mm-dd"T"hh24:mi:ss'),
 to_date(substr(OPERATION_DT,1,19),'yyyy-mm-dd"T"hh24:mi:ss'),
 S_USER_ID,
 DOC_MOS_NOM_S,
 SA_IDENT_NO,
 ORG_NAME,
 NOTES,
 TANXA
from rs$ge_txml t, xmltable(xmlnamespaces(
                           'http://schemas.xmlsoap.org/soap/envelope/' as "soap",
                           'http://www.w3.org/2001/XMLSchema-instance' as "xsi",
                           'http://www.w3.org/2001/XMLSchema' as "xsd"
                          ),
                   '//invoices'
                   passing t.val
                   columns
                     ID number path '//ID',
                     SEQ_NUM_S      number path '//SEQ_NUM_S',
                     STATUS         number path '//STATUS',
                     WAS_REF        number path '//WAS_REF',
                     F_SERIES       varchar2(2000) path '//F_SERIES',
                     F_NUMBER       varchar2(2000) path '//F_NUMBER',
                     REG_DT         varchar2(2000) path '//REG_DT',
                     OPERATION_DT   varchar2(2000) path '//OPERATION_DT',
                     S_USER_ID      number path '//S_USER_ID',
                     DOC_MOS_NOM_S  varchar2(2000) path '//DOC_MOS_NOM_S',
                     SA_IDENT_NO    varchar2(2000) path '//SA_IDENT_NO',
                     ORG_NAME       varchar2(2000) path '//ORG_NAME',
                     NOTES          varchar2(2000) path '//NOTES',
                     TANXA          number path '//TANXA'
                   ) rs_tab;
EXCEPTION
 WHEN UTL_HTTP.END_OF_BODY THEN
 UTL_HTTP.END_RESPONSE(V_RESPONSE);

END;


-- run the process:
begin
      rs$make_invoices('1.jul.2012','1.oct.2012');
      commit;
for rec in (select id xid from rs$ge_invoices) loop
    rs$make_details(rec.xid);
end loop;      
end;

-- select results:
select * from  rs$ge_invoices h,  rs$ge_invoice_details d
where d.inv_id=h.id


შემდეგი იქნება ა/ფაქტურის შექმნა/გადაგზავნა/წაშლა.
საბოლოოდ კი ერთ პაკეტს ავაცყობ,

This post has been edited by jboss on 22 Oct 2012, 11:33
0 წევრი ათვალიერებს ამ თემას (0 სტუმარი და 0 უჩინარი წევრი)
0 წევრი:
Topic Options გამოხმაურება · ახალი თემა · ახალი გამოკითხვა

 



ფორუმის სერვერების განთავსებას და ინტერნეტთან კავშირს უზრუნველყოფს: CLOUD9
[ Script Execution time: 0.0214 ]   [ 13 queries used ]   [ GZIP Disabled ]