1 PACKAGE BODY WSH_ITM_POST_PROCESS_HANDLER AS
2 /* $Header: WSHITPHB.pls 120.3.12010000.2 2008/10/01 12:47:49 skanduku ship $ */
3 --
4 G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_ITM_POST_PROCESS_HANDLER';
5 --
6 /*
7 ** This procedure checks if there are any pending requests
8 ** to be processed in case the request belongs to a
9 ** request set. It also calls the CALL_CUSTOM_API procedure
10 **
11 ** p_request_control_id - REQUEST CONTROL ID
12 ** p_request_set_id - REQUEST SET ID
13 ** p_application_id - APPLICATION ID
14 ** p_source - SOURCE OF CALL
15 ** ECX - XMLGATEWAY(ASYNCHRNOUS MODE)
16 ** ITM - ITM JAVA CODE(SYNCHRNOUS MODE)
17 */
18 PROCEDURE CHECK_PENDING_CALL_API(p_request_control_id NUMBER,
19 p_request_set_id NUMBER,
20 p_application_id NUMBER,
21 p_source VARCHAR2) IS
22 l_count NUMBER;
23 --
24 l_debug_on BOOLEAN;
25 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_PENDING_CALL_API';
26 --
27
28 BEGIN
29 --
30 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
31 --
32 IF ( l_debug_on IS NULL )
33 THEN
34 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
35 END IF;
36 --
37 IF l_debug_on and p_source = 'ITM' THEN
38 WSH_DEBUG_SV.Push(l_module_name);
39 WSH_DEBUG_SV.Log(l_module_name, 'p_request_control_id', p_request_control_id );
40 WSH_DEBUG_SV.Log(l_module_name, 'p_request_set_id', p_request_set_id );
41 WSH_DEBUG_SV.Log(l_module_name, 'p_application_id', p_application_id );
42 WSH_DEBUG_SV.Log(l_module_name, 'p_source', p_source );
43 END IF;
44 --
45
46 BEGIN
47 IF p_request_set_id <> 0 THEN
48 SELECT COUNT(REQUEST_CONTROL_ID)
49 INTO l_count
50 FROM WSH_ITM_REQUEST_CONTROL
51 WHERE REQUEST_SET_ID = p_request_set_id
52 AND PROCESS_FLAG <= 0;
53
54 IF l_count = 0 THEN
55 IF l_debug_on THEN
56 WSH_DEBUG_SV.logmsg(l_module_name, 'Calling Program Unit CALL_CUSTOM_API with p_request_set_id',WSH_DEBUG_SV.C_PROC_LEVEL);
57 END IF;
58 CALL_CUSTOM_API(0, p_request_set_id, p_application_id, p_source);
59 ELSE
60 IF l_debug_on AND P_SOURCE = 'ITM' THEN
61 WSH_DEBUG_SV.logmsg(l_module_name, 'Pending records for Request Set '|| p_request_set_id);
62 END IF;
63 END IF;
64 ELSE
65 IF l_debug_on THEN
66 WSH_DEBUG_SV.logmsg(l_module_name, 'Calling Program Unit CALL_CUSTOM_API with p_request_control_id',WSH_DEBUG_SV.C_PROC_LEVEL);
67 END IF;
68 CALL_CUSTOM_API(p_request_control_id, 0, p_application_id, p_source);
69 END IF;
70 EXCEPTION
71 WHEN OTHERS THEN
72
73 WSH_UTIL_CORE.Default_Handler(l_module_name);
74 IF l_debug_on AND P_SOURCE = 'ITM' THEN
75 WSH_DEBUG_SV.logmsg(l_module_name, 'Error in calling CALL_CUSTOM_API '||SQLERRM);
76 END IF;
77 END;
78 --
79 IF l_debug_on AND p_source = 'ITM' THEN
80 WSH_DEBUG_SV.Pop(l_module_name);
81 END IF;
82 --
83
84 EXCEPTION
85 WHEN OTHERS THEN
86 IF l_debug_on AND p_source = 'ITM' THEN
87 WSH_DEBUG_SV.logmsg(l_module_name,SQLCODE||'-'||SQLERRM);
88 WSH_DEBUG_SV.Pop(l_module_name);
89 END IF;
90
91 END;
92
93 /*
94 ** This procedure gets the application short name and builds
95 ** the custom procedure which is coded by the integrating
96 ** application. This could drive the integrating application
97 ** into whatever process they have been into since they
98 ** entered ITM for soem kind of complaince check.
99 **
100 ** p_request_control_id - REQUEST CONTROL ID
101 ** p_request_set_id - REQUEST SET ID
102 ** p_application_id - APPLICATION ID
103 ** p_source - SOURCE OF CALL
104 ** ECX - XMLGATEWAY(ASYNCHRNOUS MODE)
105 ** ITM - ITM JAVA CODE(SYNCHRNOUS MODE)
106 */
107 PROCEDURE CALL_CUSTOM_API( p_request_control_id NUMBER,
108 p_request_set_id NUMBER,
109 p_application_id NUMBER,
110 p_source VARCHAR2) IS
111 l_app_shname VARCHAR2(10);
112 l_procedure_name VARCHAR2(500);
113 l_debug_on BOOLEAN;
114 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CALL_CUSTOM_API';
115 BEGIN
116 --
117 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
118 --
119 IF ( l_debug_on IS NULL )
120 THEN
121 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
122 END IF;
123 --
124 IF l_debug_on and p_source = 'ITM' THEN
125 WSH_DEBUG_SV.Push(l_module_name);
126 END IF;
127 --
128
129 --GET APPLICATION SHORT NAME
130 BEGIN
131 SELECT APPLICATION_SHORT_NAME
132 INTO l_app_shname
133 FROM FND_APPLICATION
134 WHERE APPLICATION_ID = p_application_id;
135 EXCEPTION
136 WHEN OTHERS THEN
137 WSH_UTIL_CORE.Default_Handler(l_module_name);
138 IF l_debug_on AND p_source = 'ITM' THEN
139 WSH_DEBUG_SV.Log(l_module_name, 'Error getting application shortname for Id - ' || p_application_id, SQLERRM);
140 END IF;
141 goto end_block;
142 END;
143
144 -- build procedure <short_name>_ITM_PKG.WSH_ITM_<short_name>
145 l_procedure_name := ' BEGIN '||l_app_shname||'_ITM_PKG.WSH_ITM_'||l_app_shname ||'(p_request_control_id=>:p_request_control_id, p_request_set_id=>:p_request_set_id); END;';
146
147 IF l_debug_on AND p_source = 'ITM' THEN
148 WSH_DEBUG_SV.Logmsg(l_module_name, 'l_procedure_name '||l_procedure_name );
149 END IF;
150
151 BEGIN
152 EXECUTE IMMEDIATE l_procedure_name
153 USING p_request_control_id,
154 p_request_set_id;
155 EXCEPTION
156 WHEN OTHERS THEN
157 WSH_UTIL_CORE.Default_Handler(l_module_name);
158 IF l_debug_on AND p_source = 'ITM' THEN
159 WSH_DEBUG_SV.Logmsg(l_module_name, 'Error in Custom Procedure '|| SQLERRM);
160 END IF;
161 goto end_block;
162 END;
163 -- Added as part of Additional Attributes required by G.E
164 -- build procedure <short_name>_ITM_CUSTOM_PROCESS.POST_PROCESS_REQUEST
165 IF l_debug_on AND p_source = 'ITM' THEN
166 WSH_DEBUG_SV.Logmsg(l_module_name, 'Calling WSH_ITM_CUSTOM_PROCESS.POST_PROCESS_'||l_app_shname||'_REQUEST');
167 END IF;
168
169 l_procedure_name := ' BEGIN WSH_ITM_CUSTOM_PROCESS.POST_PROCESS_'||l_app_shname||'_REQUEST (p_request_control_id=>:p_request_control_id); END;';
170
171 BEGIN
172 EXECUTE IMMEDIATE l_procedure_name
173 USING p_request_control_id;
174
175 EXCEPTION
176 WHEN OTHERS THEN
177 IF l_debug_on AND p_source = 'ITM' THEN
178 WSH_DEBUG_SV.Logmsg(l_module_name, 'Error in Custom Procedure:' || l_procedure_name || ' - ' || SQLERRM);
179 END IF;
180 END;
181 <<end_block>>
182 --
183 IF l_debug_on AND p_source = 'ITM' THEN
184 WSH_DEBUG_SV.Pop(l_module_name);
185 END IF;
186 --
187
188 EXCEPTION
189 WHEN OTHERS THEN
190 IF l_debug_on AND p_source = 'ITM' THEN
191 WSH_DEBUG_SV.logmsg(l_module_name,SQLCODE||'-'||SQLERRM);
192 WSH_DEBUG_SV.Pop(l_module_name);
193 END IF;
194
195 END CALL_CUSTOM_API;
196
197 -- Bug 5222683
198 -- Overloaded API added for enabling shipping and OM debugging
199 PROCEDURE CHECK_PENDING_CALL_API(p_request_control_id NUMBER,
200 p_request_set_id NUMBER,
201 p_application_id NUMBER,
202 p_source VARCHAR2,
203 p_itm_log_level NUMBER,
204 p_log_filename VARCHAR2)
205 IS
206 l_file_ptr UTL_FILE.File_Type;
207 l_debug_process BOOLEAN;
208 l_log_directory VARCHAR2(4000);
209 BEGIN
210
211 --If ITM Log Severity is set to DEBUG then enable Shipping and OM Debugging
212 IF ( p_itm_log_level = '1' ) THEN -- {
213 BEGIN
214 fnd_profile.get('WSH_DEBUG_LOG_DIRECTORY',l_log_directory);
215 l_file_ptr := UTL_FILE.Fopen(l_log_directory, p_log_filename, 'a');
216 WSH_DEBUG_INTERFACE.Start_Debugger(
217 p_dir_name => l_log_directory,
218 p_file_name => p_log_filename,
219 p_file_handle => l_file_ptr );
220 OE_DEBUG_PUB.Start_ONT_Debugger(
221 p_directory => l_log_directory,
222 p_filename => p_log_filename,
223 p_file_handle => l_file_ptr );
224
225 l_debug_process := TRUE;
226
227 -- Added Exception handler so that we can call API Check_Pending_Call_API
228 -- even if file handling raises any exception.
229 EXCEPTION
230 WHEN OTHERS THEN
231 l_debug_process := FALSE;
232 END;
233 END IF; --}
234
235 --Call Internal API
236 Check_Pending_Call_API( p_request_control_id => p_request_control_id,
237 p_request_set_id => p_request_set_id,
238 p_application_id => p_application_id,
239 p_source => p_source);
240
241
242 --If ITM Log Severity is set to DEBUG then disable Shipping and OM Debugging
243 IF ( p_itm_log_level = '1' and l_debug_process ) THEN -- {
244 OE_DEBUG_PUB.Stop_ONT_Debugger;
245 WSH_DEBUG_INTERFACE.Stop_Debugger;
246 IF utl_file.is_open(l_file_ptr) THEN
247 utl_file.fclose(l_file_ptr);
248 END IF;
249 END IF; --}
250
251 EXCEPTION
252 WHEN OTHERS THEN
253 IF ( p_itm_log_level = '1' ) THEN -- {
254 OE_DEBUG_PUB.Stop_ONT_Debugger;
255 WSH_DEBUG_INTERFACE.Stop_Debugger;
256 IF utl_file.is_open(l_file_ptr) THEN
257 utl_file.fclose(l_file_ptr);
258 END IF;
259 END IF; --}
260
261 END CHECK_PENDING_CALL_API;
262 END WSH_ITM_POST_PROCESS_HANDLER;