TOP NEWS

Isocare Knowledge Management การพัฒนาและการประยุกต์ใช้ระบบการจัดการความรู้ของฝ่ายพัฒนาซอฟท์แวร์ บริษัท ไอโซแคร์ ซิสเตมส์ จำกัด

วันศุกร์ที่ 5 เมษายน พ.ศ. 2562

สรุป ตัวอย่าง 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 2
1.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 ความคิดเห็น: