CREATE OR REPLACE PACKAGE BODY amfr_message_handler /** ############################################################################# # # # Package: amfr_message_handler # # # # Application System: General # # # # Creation Date: 01/03/2006 # # # # Author: Oracle Team, Advantica Ltd # # # # Purpose: A flexible interface mechanism # # # # Dependancies: Access Manager Installation # # # # Revision: $Revision: 4 $ # # # # Advantica Ltd, 2006 # ############################################################################# */ IS -- -- Internal Variables -- -- -- -- Internal Constants -- c_failure CONSTANT VARCHAR2(7) := 'failure'; c_success CONSTANT VARCHAR2(7) := 'success'; c_service_request_status CONSTANT VARCHAR2(100) := 'service_request_status'; c_service_request_status_rsn CONSTANT VARCHAR2(100) := 'service_request_status_reason'; c_xml_validation_failure_rsn CONSTANT VARCHAR2(100) := 'xml_validation_failure_reason'; c_xml_parsing_failure_rsn CONSTANT VARCHAR2(100) := 'xml_parsing_failure_reason'; c_msg_start CONSTANT VARCHAR2(100) := ''; c_msg_end CONSTANT VARCHAR2(100) := ''; -- c_service_status CONSTANT VARCHAR2(14) := 'service_status'; c_service_status_reason CONSTANT VARCHAR2(21) := 'service_status_reason'; c_error_code CONSTANT VARCHAR2(100) := 'error_code'; c_execution_failure CONSTANT VARCHAR2(100) := 'An unexpected error occured whilst invoking the legacy interface.'; -- -- Private Declaration -- FUNCTION get_array_value(p_name_array IN owa.vc_arr, p_value_array IN clob_arr, p_scan_name IN VARCHAR2) RETURN VARCHAR2 IS -- l_return VARCHAR2(32767); l_idx NUMBER; -- BEGIN -- -- We know that the array is not sparse at the moment; however, that may not always be so -- l_idx := p_name_array.FIRST; -- FOR i IN 1 .. p_name_array.COUNT LOOP -- -- If the scan name equals the current array element -- IF p_name_array(l_idx) = p_scan_name THEN -- -- Set the return variable -- l_return := p_value_array(l_idx); -- -- Exit the loop -- EXIT; -- END IF; -- l_idx := p_name_array.NEXT(l_idx); -- END LOOP; -- caco_debug.putline('get_array_value: looking for ' || p_scan_name || ' found ' || nvl(substr(l_return,1,3000), 'nothing')); -- -- Return l_return which will be NULL if we haven't found anything -- RETURN l_return; -- EXCEPTION WHEN OTHERS THEN caco_debug.putline(SQLCODE||' - '||SQLERRM); END get_array_value; -- FUNCTION get_array_value_clob(p_name_array IN owa.vc_arr, p_value_array IN clob_arr, p_scan_name IN VARCHAR2) RETURN CLOB IS -- l_return CLOB; l_idx NUMBER; -- BEGIN -- -- We know that the array is not sparse at the moment; however, that may not always be so -- l_idx := p_name_array.FIRST; -- FOR i IN 1 .. p_name_array.COUNT LOOP -- -- If the scan name equals the current array element -- IF p_name_array(l_idx) = p_scan_name THEN -- -- Set the return variable -- l_return := p_value_array(l_idx); -- -- Exit the loop -- EXIT; -- END IF; -- l_idx := p_name_array.NEXT(l_idx); -- END LOOP; -- caco_debug.putline('get_array_value: looking for ' || p_scan_name || ' found ' || nvl(substr(l_return,1,3000), 'nothing')); -- -- Return l_return which will be NULL if we haven't found anything -- RETURN l_return; -- EXCEPTION WHEN OTHERS THEN caco_debug.putline(SQLCODE||' - '||SQLERRM); END get_array_value_clob; -- PROCEDURE add_array_value(p_name_array IN OUT owa.vc_arr, p_value_array IN OUT clob_arr, p_name IN VARCHAR2, p_value IN VARCHAR2) IS -- l_idx NUMBER; -- BEGIN -- -- We know that the array is not sparse at the moment; however, that may not always be so -- l_idx := nvl(p_name_array.LAST, 0) + 1; -- p_name_array(l_idx) := p_name; p_value_array(l_idx) := p_value; -- END add_array_value; -- FUNCTION get_error_code(p_error_message IN VARCHAR2) RETURN NUMBER IS -- CURSOR c_mtxt(c_error_message VARCHAR2) IS SELECT text_number FROM module_text WHERE lower(text) = lower(c_error_message); -- CURSOR c_exme IS SELECT exme.exception_number FROM exception_messages exme WHERE lower(message) = lower(substr(p_error_message,8)); -- l_return NUMBER; -- BEGIN -- OPEN c_mtxt(p_error_message); FETCH c_mtxt INTO l_return; CLOSE c_mtxt; -- IF l_return IS NULL THEN -- see if the error code can be found by removing all of the text after and including semi colon -- from the error message IF instr(p_error_message,':') > 0 THEN OPEN c_mtxt(substr(p_error_message,1,instr(p_error_message,':')-1)); FETCH c_mtxt INTO l_return; CLOSE c_mtxt; END IF; END IF; -- IF l_return IS NULL THEN OPEN c_exme; FETCH c_exme INTO l_return; CLOSE c_exme; END IF; -- RETURN nvl(l_return,0); -- EXCEPTION WHEN OTHERS THEN caco_debug.putline(SQLCODE||' - '||SQLERRM); END get_error_code; -- /* FUNCTION translate(p_text IN VARCHAR2) RETURN VARCHAR2 IS -- CURSOR c_mtxt(c_text_number NUMBER) IS SELECT text FROM module_text WHERE text_number = c_text_number AND language = 'HU'; -- l_return module_text.text%TYPE; -- BEGIN -- IF g_lang = 'HU' THEN -- OPEN c_mtxt(get_error_code(p_text)); FETCH c_mtxt INTO l_return; CLOSE c_mtxt; -- END IF; -- RETURN nvl(l_return,p_text); -- EXCEPTION WHEN OTHERS THEN caco_debug.putline(SQLCODE||' - '||SQLERRM); END translate;*/ -- PROCEDURE validate_service_request(p_name_array IN OUT owa.vc_arr, p_value_array IN OUT clob_arr, p_sere_id OUT service_reqs.sere_id%TYPE) IS -- -- -- Local Variables -- l_req_id service_reqs.request_id%TYPE; l_dummy VARCHAR2(10); l_xml_data_clob CLOB; l_serx_id service_req_xml.serx_id%TYPE; -- -- Constants -- c_inv_miss_error CONSTANT VARCHAR2(100) := caco_utilities.get_module_text(3940);-- Invalid or missing request_id c_inv_param_error CONSTANT VARCHAR2(100) := caco_utilities.get_module_text(3941);-- Parameter list does not match request_id c_xml_parsing_error CONSTANT VARCHAR2(100) := 'XML parsing error'; c_param_name_req_id CONSTANT VARCHAR2(100) := 'request_id'; -- -- Local procedural logic -- l_login_success BOOLEAN; l_login_message VARCHAR2(2000); -- -- FUNCTION get_srpa(p_sere_id IN service_reqs.sere_id%TYPE, p_param_name IN service_req_params.param_name%TYPE) RETURN service_req_params.param_value%TYPE IS -- l_return service_req_params.param_value%TYPE; -- BEGIN -- BEGIN -- SELECT srpa.param_value INTO l_return FROM service_req_params srpa WHERE srpa.param_name = p_param_name AND srpa.sere_id = p_sere_id; -- EXCEPTION WHEN no_data_found THEN l_return := NULL; END; -- RETURN l_return; -- END get_srpa; -- PROCEDURE add_svc_req_stat(p_svc_stat_rsn IN VARCHAR2) IS -- -- BEGIN -- -- Add the service status flag -- add_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_name => c_service_request_status, p_value => c_failure); -- -- Add message -- add_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_name => c_service_request_status_rsn, p_value => p_svc_stat_rsn); -- END add_svc_req_stat; -- BEGIN -- caco_debug.putline('Validating service request'); -- IF upper(owa_util.get_cgi_env('REQUEST_PROTOCOL')) <> 'HTTPS' AND nvl(cout_system_configuration.get_configuration_item('AMFR_INT_HTTP_ALLOWED'), 'N') = 'N' THEN -- -- Supposed to be a HTTPS request, therfore ignore it -- caco_debug.putline('Error Point 0'); -- NULL; -- ELSE -- caco_debug.putline('Continue'); -- Either HTTPS or HTTP override, continue -- IF p_name_array.COUNT = 0 OR p_value_array.COUNT = 0 THEN -- caco_debug.putline('case1'); -- Either no parameter names have been passed or no values for those parameters, either way its an error -- add_svc_req_stat(c_inv_miss_error); -- caco_debug.putline('Error Point 1'); -- ELSIF p_name_array.COUNT <> p_value_array.COUNT THEN -- caco_debug.putline('case2'); -- Array is not balanced - not a condition that should occur -- add_svc_req_stat(c_inv_miss_error); -- caco_debug.putline('Error Point 2'); -- ELSE caco_debug.putline('case3'); -- -- Input passes basic validation, log the request caco_debug.putline('Insert service request'); caco_debug.putline(owa_util.get_cgi_env('REMOTE_ADDR')); caco_debug.putline(owa_util.get_cgi_env('HTTP_USER_AGENT')); caco_debug.putline(owa_util.get_cgi_env('REQUEST_PROTOCOL')); -- INSERT INTO service_reqs (request_timestamp, status, address, AGENT, protocol) VALUES (SYSDATE, 'U', owa_util.get_cgi_env('REMOTE_ADDR'), substr(owa_util.get_cgi_env('HTTP_USER_AGENT'), 1, 99), owa_util.get_cgi_env('REQUEST_PROTOCOL')) RETURNING sere_id INTO p_sere_id; -- caco_debug.putline('Inserted the service request'); -- Now insert the passed parameters -- FOR x IN p_name_array.first .. p_name_array.last LOOP -- -- -- below code added by smore on 12-Jan-2009 -- to remove additional spaces in the message. As max allowd length of the message was exceeding -- This has to be done in the original array value otherwise it will fail giving error as -- ORA-01461: can bind a LONG value only for insert into a LONG columnneeds. while converting from CLOB to XML --------------------------------------------------------------------------------------------------- WHILE (instr(p_value_array(x),' <',1) >0) LOOP p_value_array(x) := substr(p_value_array(x),1,instr(p_value_array(x),' <',1)-1)|| substr(p_value_array(x),instr(p_value_array(x),' <')+1); END LOOP; --------------------------------------------------------------------------------------------------- INSERT INTO service_req_params (sere_id, param_value, param_name) VALUES (p_sere_id, p_value_array(x), lower(p_name_array(x))); -- END LOOP; -- -- Look for a request identifier -- l_req_id := get_srpa(p_sere_id => p_sere_id, p_param_name => c_param_name_req_id); -- IF l_req_id IS NULL THEN -- -- No request ID supplied, do not continue -- add_svc_req_stat(c_inv_miss_error); -- caco_debug.putline('Error Point 4'); -- ELSE -- -- Check against interface request -- BEGIN -- SELECT NULL INTO l_dummy FROM interface_reqs inre WHERE inre.request_identifier = l_req_id; -- -- If no exception has been raised, we know about this request -- UPDATE service_reqs sere SET sere.request_id = l_req_id WHERE sere.sere_id = p_sere_id; -- -- Verify the parameters are known and are valid -- BEGIN -- SELECT param_name INTO l_dummy FROM ((SELECT srpa.param_name FROM service_req_params srpa WHERE srpa.sere_id = p_sere_id MINUS SELECT irpa.param_name FROM interface_req_params irpa, interface_reqs inre WHERE inre.inre_id = irpa.inre_id AND inre.request_identifier = l_req_id) UNION (SELECT irpa.param_name FROM interface_req_params irpa, interface_reqs inre WHERE inre.inre_id = irpa.inre_id AND inre.request_identifier = l_req_id AND irpa.param_mandatory = 'Y' MINUS SELECT srpa.param_name FROM service_req_params srpa WHERE srpa.sere_id = p_sere_id) UNION ALL (SELECT irpa.param_name FROM interface_req_params irpa, interface_reqs inre WHERE inre.inre_id = irpa.inre_id AND inre.request_identifier = l_req_id AND irpa.value_mandatory = 'Y' MINUS SELECT srpa.param_name FROM service_req_params srpa WHERE srpa.sere_id = p_sere_id AND srpa.param_value IS NOT NULL)); -- -- If no_data_found HAS NOT been raised, an error has occured - set the details up -- add_svc_req_stat(c_inv_param_error); -- caco_debug.putline('Error Point 6'); -- EXCEPTION WHEN no_data_found THEN -- -- Conversely, if I'm here, everything is OK -- NULL; -- WHEN too_many_rows THEN -- -- If I'm here, I've found more than one row, a great cause for concern... -- add_svc_req_stat(c_inv_param_error); -- caco_debug.putline('Error Point 6'); -- END; -- EXCEPTION -- WHEN no_data_found THEN -- add_svc_req_stat(c_inv_miss_error); -- caco_debug.putline('Error Point 5'); -- END; -- -- EFT wants us to check login before any XML errors are spat out by the insert into service_req_xml -- -- Call the security package to process the logon caco_security.process_interface_logon(p_username => get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => 'user'), p_password => get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => 'password'), p_success => l_login_success, p_message => l_login_message); -- IF l_login_success THEN caco_debug.putline('Before converting'); /* convert from CLOB to XML and insert */ l_xml_data_clob := get_array_value_clob(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => 'xmldata'); caco_debug.putline('SP001'); caco_debug.putline('length: '||length(l_xml_data_clob)); SELECT serx_seq.NEXTVAL INTO l_serx_id FROM dual; caco_debug.putline('Inserting the service xml'); BEGIN -- INSERT INTO service_req_xml (serx_id, sere_id, xml_data) VALUES (l_serx_id, p_sere_id, sys.xmltype.createxml(l_xml_data_clob)); -- caco_debug.putline('SP002'); -- EXCEPTION WHEN OTHERS THEN add_svc_req_stat(c_xml_parsing_error); -- caco_debug.putline('SP003'); caco_debug.putline(c_xml_parsing_error||' '||SQLCODE||' - '||SQLERRM); add_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_name => c_xml_parsing_failure_rsn, p_value => SQLCODE||' - '||SQLERRM); END; caco_debug.putline('SP004'); -- ELSE -- Login not successful for some reason add_svc_req_stat(l_login_message); -- END IF; -- END IF; -- END IF; -- END IF; -- END validate_service_request; -- -- Invoke the specified legacy interface component -- PROCEDURE invoke_legacy_interface(p_name_array IN OUT owa.vc_arr, p_value_array IN OUT clob_arr, p_sere_id IN service_reqs.sere_id%TYPE DEFAULT g_sere_id) IS -- -- Local variables -- l_interface_id interface_reqs.request_identifier%TYPE; -- BEGIN BEGIN -- SELECT inre.request_identifier INTO l_interface_id FROM service_reqs sere, interface_reqs inre WHERE sere.request_id = inre.request_identifier AND sere.sere_id = p_sere_id; -- EXCEPTION WHEN OTHERS THEN l_interface_id := NULL; END; -- IF l_interface_id = 60 -- nominations interface THEN caco_debug.putline('before calling the cust nom interface'); -- -- Set up the global arrays ready for invoking the interface -- efno_xml_interface.g_name_array := p_name_array; efno_xml_interface.g_value_array := p_value_array; efno_xml_interface.g_sere_id := p_sere_id; -- -- Call the interface -- BEGIN caco_debug.putline('before call to efno_xml_interface.process_xml_message'); efno_xml_interface.process_xml_message; caco_debug.putline('after call to efno_xml_interface.process_xml_message'); EXCEPTION WHEN OTHERS THEN caco_debug.putline('error - '||sqlcode||' - '||SQLERRM); -- -- Add the service status flag -- add_array_value(p_name_array => efno_xml_interface.g_name_array, p_value_array => efno_xml_interface.g_value_array, p_name => c_service_request_status, p_value => c_failure); -- add_array_value(p_name_array => efno_xml_interface.g_name_array, p_value_array => efno_xml_interface.g_value_array, p_name => c_service_request_status_rsn, p_value => c_execution_failure || ': ' || SQLERRM); -- caco_debug.putline(g_package_name || ' ' || 'ERROR - ' || SQLERRM); -- END; -- -- Reset passed in parameters -- p_name_array := efno_xml_interface.g_name_array; p_value_array := efno_xml_interface.g_value_array; -- -- Finished processing, tidy up arrays -- efno_xml_interface.g_name_array.DELETE; efno_xml_interface.g_value_array.DELETE; -- END IF; -- EXCEPTION WHEN OTHERS THEN caco_debug.putline('error - '||sqlcode||' - '||SQLERRM); cout_err.report_and_stop(p_exception_number => SQLCODE ,p_exception_message => SQLERRM ); END invoke_legacy_interface; -- -- Construct a response in the require format to the HTTP stream -- PROCEDURE produce_service_response(p_name_array IN OUT owa.vc_arr, p_value_array IN OUT clob_arr, p_sere_id IN service_reqs.sere_id%TYPE DEFAULT g_sere_id) IS -- l_xmldata service_req_params.param_value%TYPE; l_service_request_status_rsn VARCHAR2(1000); l_xml_validation_failure_rsn VARCHAR2(1000); l_xml_parsing_failure_rsn VARCHAR2(1000); l_error_code NUMBER; -- PROCEDURE insert_srre(p_sere_id IN service_req_resps.sere_id%TYPE DEFAULT g_sere_id, p_param_name IN service_req_resps.param_name%TYPE, p_param_value IN service_req_resps.param_value%TYPE) IS BEGIN -- INSERT INTO service_req_resps (sere_id, param_name, param_value) VALUES (p_sere_id, p_param_name, p_param_value); -- END insert_srre; -- BEGIN caco_debug.putline('Produce Response'); -- -- Only log the response if the request has been recorded -- IF p_sere_id IS NOT NULL THEN -- -- Check to see if the service_request_status has been included, if not, include it. -- IF get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_service_request_status) IS NULL THEN -- -- Not included, therefore add it an assume success -- caco_debug.putline('Add statuses'); add_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_name => c_service_request_status, p_value => c_success); add_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_name => c_service_request_status_rsn, p_value => ''); -- END IF; -- insert service request status and reason into service_req_resps insert_srre(p_param_name => c_service_status, p_param_value => get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_service_request_status)); -- insert_srre(p_param_name => c_service_status_reason, p_param_value => get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_service_request_status_rsn)); -- -- If a validation failure occured, build failure response -- IF nvl(get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_service_request_status), 'x') = c_failure THEN -- l_service_request_status_rsn := get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_service_request_status_rsn); -- -- get the error code -- l_error_code := (get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_error_code)); IF l_error_code IS NULL THEN -- l_error_code := get_error_code(l_service_request_status_rsn); -- END IF; -- IF l_service_request_status_rsn = 'XML validation failed' THEN l_xml_validation_failure_rsn := get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_xml_validation_failure_rsn); -- l_service_request_status_rsn := caco_utilities.get_module_text(3937,g_lang)||': '||l_xml_validation_failure_rsn; -- ELSIF l_service_request_status_rsn = 'XML parsing error' THEN l_xml_parsing_failure_rsn := get_array_value(p_name_array => p_name_array, p_value_array => p_value_array, p_scan_name => c_xml_parsing_failure_rsn); -- l_service_request_status_rsn := caco_utilities.get_module_text(3942,g_lang)||': '||replace(replace(l_xml_parsing_failure_rsn,'<','<'),'>','>'); -- ELSE -- l_service_request_status_rsn := l_service_request_status_rsn; -- END IF; -- htp.p(''); htp.p(c_msg_start); htp.p(''|| l_service_request_status_rsn|| ''); htp.p(''|| l_error_code|| ''); htp.p(c_msg_end); -- ELSE -- output original xml with status, reason and reason_code tags aswell FOR i IN (SELECT srpa.param_value FROM service_req_params srpa WHERE srpa.sere_id = p_sere_id AND srpa.param_name = 'xmldata') LOOP -- -- determine if we need to output an xml header -- IF instr(i.param_value,''); END IF; -- l_xmldata := replace(i.param_value,'','valid'); l_xmldata := replace(l_xmldata,'',''); caco_debug.putline('---------------SP outputting xmldata to screen'); caco_debug.putline('xmldata length: '||length(l_xmldata)); IF length(l_xmldata) > 32000 THEN -- insert Nomination successfully created (Nomination body too long to be displayed) message into reason tag l_xmldata := replace(l_xmldata,'',''||caco_utilities.get_module_text(3960)||''); -- remove the nomination body l_xmldata := substr(l_xmldata,1,instr(l_xmldata,'')-1); l_xmldata := l_xmldata||''; END IF; htp.p(l_xmldata); -- END LOOP; -- END IF; -- ELSE -- -- I've not recorded anything, return the error messages -- htp.p(c_msg_start || '=' || chr(10)); -- FOR x IN 1 .. p_name_array.COUNT LOOP -- htp.p(p_name_array(x) || '=' || p_value_array(x) || chr(10)); -- END LOOP; -- htp.p(c_msg_end || '=' || chr(10)); -- END IF; -- EXCEPTION WHEN OTHERS THEN caco_debug.putline('error - '||sqlcode||' - '||SQLERRM); cout_err.report_and_stop(p_exception_number => SQLCODE ,p_exception_message => SQLERRM ); END produce_service_response; -- -- Public Procedural Logic -- PROCEDURE service_request(name_array IN owa.vc_arr DEFAULT g_vc_arr, value_array IN owa.vc_arr DEFAULT g_vc_arr) IS -- l_clob_arr clob_arr; -- BEGIN -- -- -- FOR i IN 1..value_array.COUNT LOOP -- l_clob_arr(i) := value_array(i); -- END LOOP; -- service_request_clob( name_array , l_clob_arr); -- g_clob_arr := l_clob_arr; -- END service_request; PROCEDURE service_request_clob(name_array IN owa.vc_arr DEFAULT g_vc_arr, value_array IN clob_arr DEFAULT g_clob_arr) IS -- -- Variables -- l_name_array owa.vc_arr; l_value_array clob_arr; -- BEGIN caco_debug.putline('Service request'); -- -- Set up local copies of the passed in variables -- l_name_array := name_array; l_value_array := value_array; -- -- Call the validation routine -- validate_service_request(p_name_array => l_name_array, p_value_array => l_value_array, p_sere_id => g_sere_id); -- -- If a validation failure didn't occur, call the legacy interface -- IF nvl(get_array_value(p_name_array => l_name_array, p_value_array => l_value_array, p_scan_name => c_service_request_status), 'x') <> c_failure THEN -- -- If the request has validated OK -- invoke_legacy_interface(p_name_array => l_name_array, p_value_array => l_value_array); -- END IF; -- -- Now produce a servire response, regardless of whether the legacy interface has been contacted. -- caco_debug.putline('End invoke legacy interface, responding'); -- produce_service_response(p_name_array => l_name_array, p_value_array => l_value_array); -- caco_debug.putline('Produced response ok'); -- -- Finished processing, tidy up -- l_name_array.DELETE; l_value_array.DELETE; -- EXCEPTION WHEN OTHERS THEN cout_err.report_and_go(p_exception_number => SQLCODE ,p_exception_message => SQLERRM ); END service_request_clob; -- -- Test interface procedure -- PROCEDURE test_interface IS -- l_script_path VARCHAR2(1000) := lower(owa_util.get_cgi_env('REQUEST_PROTOCOL') || '://' || owa_util.get_cgi_env('HTTP_HOST') || owa_util.get_cgi_env('SCRIPT_NAME') || '/'); -- BEGIN -- IF NOT caco_security.security_check(p_package_name => 'amfr_message_handler.test_interface') THEN -- RETURN; -- END IF; -- htp.htmlopen; htp.headopen; htp.title('Test EFT Interface'); htp.style(cstyle => 'body,td,div,.p,a{font-family:arial,sans-serif; color:#F21C0A; font-size:10pt;} h1 {font-size:1.4em;padding:0px;margin:0px;}'); htp.headclose; htp.bodyopen; -- htp.header(nsize => 1, cheader => 'Test EFT Interface'); -- htp.para; htp.italic('This page is for internal use for GL only.','style="color:black"'); htp.para; -- FOR i IN (SELECT inre.NAME, inre.request_identifier, inre.inre_id FROM interface_reqs inre ) LOOP -- -- -- htp.header(nsize => 2, cheader => i.NAME); -- htp.formopen(curl => l_script_path || '!amfr_message_handler.service_request', cmethod => 'POST', cattributes => 'NAME=form' || i.request_identifier); htp.tableopen; -- FOR j IN (SELECT irpa.param_name || decode(irpa.param_mandatory, 'Y', '(*)', NULL) AS label, irpa.param_name, irpa.value_clob, decode(irpa.param_name, 'request_id', i.request_identifier, NULL) AS def_val FROM interface_req_params irpa WHERE irpa.inre_id = i.inre_id) LOOP -- -- -- htp.tablerowopen; htp.tabledata(htf.bold(j.label,'style="color:black"')); IF j.value_clob = 'Y' THEN htp.tabledata(htf.formtextarea(cname => j.param_name, nrows => 8, ncolumns => 40)); ELSE htp.tabledata(htf.formtext(cname => j.param_name, cvalue => j.def_val)); END IF; htp.tablerowclose; -- END LOOP; -- htp.tableclose; -- htp.anchor(curl => 'javascript:document.form' || i.request_identifier || '.submit();', ctext => 'Test'); -- htp.formclose; -- END LOOP; -- htp.formclose; -- htp.bodyclose; htp.htmlclose; -- END test_interface; -- FUNCTION about RETURN VARCHAR2 IS -- -- BEGIN -- -- -- RETURN(g_package_name || chr(10) || g_revision || chr(10) || g_header); -- END about; -- BEGIN -- -- Package Initialisation -- NULL; -- END amfr_message_handler; /