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