สรุป ตัวอย่าง Script ในการทำ IVR /Call Center
KM.วิธีการCodingให้ Oracle Procedure เรียกใช้ WCF ได้ ใช้สำหรับระบบเชื่อมโยง ต่างๆ
Concept คือ การที่ Oracle Procedure จะเรียก WCF ได้ ต้องทำผ่าน ในส่วนของ UTL_HTTP 
ซึ่ง เพื่อให้ง่ายต่อการแก้ไข ก็จะต้องทำ webpage สำหรับเรียก WCF ก่อน 1 ตัว ในที่นี้ใช้ svc.php และ ไปเรียกต่อ WCF อีกที 
ยกตัวอย่างการเรียก  ของระบบเงินฝาก
1.SET Oracle รองรับการ Access URL 21.SET Oracle รองรับการ Access URL
BEGIN
        DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('www.xml', 'WWW ACL', 'ISCORFD', TRUE, 'connect');
        DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('www.xml', 'ISCORFD', TRUE, 'resolve');
        DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('www.xml', '*');
END;
2.php wcf caller เพิ่ม Function ที่ต้องการเรียก WCF
ที่ D:\GCOOP_ALL\CORE\GCOOP\Saving\Applications\mobile\svc.php 
if($app=="n_deposit"){
//http://localhost/CORE/GCOOP/Saving/Applications/mobile/svc.php?ip=127.0.0.1&sid=gcoop&u=iscorfd&pwd=iscorfd&coop_id=032001&f=of_analizeaccno&a=n_deposit&p[]=01-01-000041
 if($f=="of_analizeaccno"){
  try { 
  //กรณี เป็น Date ต้องเป็น Format : date("Y-m-d")."T".date("H:i:s"),  
  $parameters = array(
  'as_wspass' => "Data Source=$ip/$sid;Persist Security Info=True;User ID=$u;Password=$p;Unicode=True;coop_id=$coop_id;coop_control=$coop_id;",
  'deptaccountnoformat' => $_REQUEST["p"][0]
  );
  $ret = $client->of_analizeaccno($parameters);
  //print_r($ret);
     echo $ret->of_analizeaccnoResult;
  }catch(Exception $e){
     echo $e->getMessage();
  }
 }
}
ทดสอบ Run ผ่าน Web Browser 
 3.Add Oracle Procedure  เพื่อเรียก WCF ผ่าน URL ข้อ 1 
    3.1 สร้าง WWWGET 
Run สร้าง Procedure 
create or replace PROCEDURE WWWGET(url in VARCHAR2,clob_buff out VARCHAR2)
IS
    request UTL_HTTP.REQ;
    response UTL_HTTP.RESP;
    n NUMBER;
    buff VARCHAR2(4000);
BEGIN
    UTL_HTTP.SET_RESPONSE_ERROR_CHECK(FALSE);
    request := UTL_HTTP.BEGIN_REQUEST(url, 'GET');
    UTL_HTTP.SET_HEADER(request, 'User-Agent', 'Mozilla/4.0');
    response := UTL_HTTP.GET_RESPONSE(request);
    DBMS_OUTPUT.PUT_LINE('HTTP response status code: ' || response.status_code);
    IF response.status_code = 200 THEN
        BEGIN
            clob_buff := EMPTY_CLOB;
            LOOP
                UTL_HTTP.READ_TEXT(response, buff, LENGTH(buff));
                clob_buff := clob_buff || buff;
            END LOOP;
     UTL_HTTP.END_RESPONSE(response);
 EXCEPTION
     WHEN UTL_HTTP.END_OF_BODY THEN
                UTL_HTTP.END_RESPONSE(response);
     WHEN OTHERS THEN
                DBMS_OUTPUT.PUT_LINE(SQLERRM);
                DBMS_OUTPUT.PUT_LINE(DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
                UTL_HTTP.END_RESPONSE(response);
        END;
        /*
        SELECT COUNT(*) + 1 INTO n FROM CMWWWDATA;
        INSERT INTO CMWWWDATA VALUES (n, clob_buff);
        COMMIT;
        */
    ELSE
        DBMS_OUTPUT.PUT_LINE('ERROR');
        UTL_HTTP.END_RESPONSE(response);
    END IF;
END;
 3.2 สร้าง Package รายระบบเพื่อเรียก WCF 
แล้วก็ สร้าง Procedure หรือ Function ในการ เรียก WCF แต่ละตัวให้ใช้ ชื่อและpackage ตรงกับ WCF 
CREATE OR REPLACE PACKAGE N_DEPOSIT AS 
 WSPASS CONSTANT varchar2(255) := 'ip=127.0.0.1&sid=gcoop&u=iscorfd&pwd=iscorfd&coop_id=032001';
 WCFNM CONSTANT varchar2(255) := 'n_deposit';
 URLROOT CONSTANT varchar2(255) := 'http://localhost/CORE/GCOOP/Saving/Applications/mobile/svc.php';
 Procedure of_analizeaccno(deptaccountnoformat varchar2,output out varchar2);
END N_DEPOSIT;
CREATE OR REPLACE PACKAGE BODY N_DEPOSIT AS
Procedure of_analizeaccno(deptaccountnoformat varchar2,output out varchar2)  is
  URL VARCHAR2(2000);
  WCF_F VARCHAR2(200);
BEGIN
  WCF_F:='of_analizeaccno';
  URL := URLROOT||'?'||WSPASS||'&f='||WCF_F||'&a='||WCFNM||'&p[]='||deptaccountnoformat;
  WWWGET(URL,output);
--rollback; 
END;
END N_DEPOSIT;
3.3 Run ทดสอบ
DECLARE
  DEPTACCOUNTNOFORMAT VARCHAR2(200);
  OUTPUT VARCHAR2(200);
BEGIN
  DEPTACCOUNTNOFORMAT := '01-01-000041';
  N_DEPOSIT.OF_ANALIZEACCNO(
    DEPTACCOUNTNOFORMAT => DEPTACCOUNTNOFORMAT,
    OUTPUT => OUTPUT
  );
  /* Legacy output: 
DBMS_OUTPUT.PUT_LINE('OUTPUT = ' || OUTPUT);
*/ 
  :OUTPUT := OUTPUT;
--rollback; 
END;
0 ความคิดเห็น: