[Home] [Help]
PACKAGE BODY: APPS.RCV_ERROR_PKG
Source
1 PACKAGE BODY rcv_error_pkg AS
2 /* $Header: RCVERRB.pls 120.2 2010/05/12 07:44:21 honwei ship $*/
3 pg_current_result VARCHAR2(1) := g_ret_sts_success;
4 pg_current_error_name fnd_new_messages.message_name%TYPE;
5 pg_current_error_text fnd_new_messages.MESSAGE_TEXT%TYPE;
6 pg_error_count NUMBER := 0;
7
8 /*comment pg_error_stack for bug 9575093, as this variable is never used and will cause error.*/
9 /*pg_error_stack VARCHAR2(10000);*/
10 pg_interface_type po_interface_errors.interface_type%TYPE;
11 pg_batch_id po_interface_errors.batch_id%TYPE;
12 pg_header_id po_interface_errors.interface_header_id%TYPE;
13 pg_line_id po_interface_errors.interface_line_id%TYPE;
14 pg_line_return VARCHAR2(2) := fnd_global.local_chr(10);
15 pg_message_pending BOOLEAN := FALSE;
16 pg_transactions_interface CONSTANT po_interface_errors.table_name%TYPE := 'RCV_TRANSACTIONS_INTERFACE';
17 pg_default_interface_type CONSTANT po_interface_errors.interface_type%TYPE := 'RCV-856';
18
19 PROCEDURE pop_error_message IS
20 BEGIN
21 pg_current_error_text := fnd_message.get();
22 /*comment pg_error_stack for bug 9575093, as this variable is never used and will cause error.*/
23 /*pg_error_stack := pg_error_stack || pg_line_return || pg_current_error_name;*/
24 pg_error_count := pg_error_count + 1;
25 pg_message_pending := FALSE;
26 END pop_error_message;
27
28 PROCEDURE po_interface_call(
29 p_error_type IN VARCHAR2,
30 p_table_name IN VARCHAR2,
31 p_column_name IN VARCHAR2,
32 p_batch_id IN NUMBER DEFAULT pg_batch_id,
33 p_header_id IN NUMBER DEFAULT pg_header_id,
34 p_line_id IN NUMBER DEFAULT pg_line_id
35 ) IS
36 x_dummy_flag VARCHAR2(1);
37 x_error_type_message VARCHAR2(100);
38 BEGIN
39 asn_debug.put_line('error stack from call to po_interface_call');
40 asn_debug.print_stack;
41
42 IF p_error_type = 'FATAL' THEN
43 fnd_message.set_name('PO', 'PO_ERROR');
44 x_error_type_message := fnd_message.get;
45 ELSIF p_error_type = 'WARNING' THEN
46 fnd_message.set_name('PO', 'PO_WARNING');
47 x_error_type_message := fnd_message.get;
48 END IF;
49
50 po_interface_errors_sv1.handle_interface_errors_msg(NVL(pg_interface_type, pg_default_interface_type),
51 p_error_type,
52 p_batch_id,
53 p_header_id,
54 p_line_id,
55 x_error_type_message||' '||pg_current_error_text,
56 pg_current_error_name,
57 p_table_name,
58 p_column_name,
59 x_dummy_flag
60 );
61 END po_interface_call;
62
63 PROCEDURE log_interface_error(
64 p_table IN VARCHAR2,
65 p_column IN VARCHAR2,
66 p_batch_id IN NUMBER,
67 p_header_id IN NUMBER,
68 p_line_id IN NUMBER,
69 p_raise_error IN BOOLEAN DEFAULT TRUE
70 ) IS
71 BEGIN
72 IF (pg_message_pending = TRUE) THEN
73 pop_error_message();
74 asn_debug.put_line('logging error ' || pg_current_error_text || ' on column ' || p_column, fnd_log.level_error);
75 pg_current_result := g_ret_sts_error;
76 po_interface_call('FATAL',
77 p_table,
78 p_column,
79 p_batch_id,
80 p_header_id,
81 p_line_id
82 );
83
84 IF (p_raise_error = TRUE) THEN
85 RAISE e_fatal_error;
86 END IF;
87 ELSE
88 asn_debug.put_line('WARNING: log_interface_error called without setting an error', fnd_log.level_error);
89 END IF;
90 END log_interface_error;
91
92 PROCEDURE log_interface_error(
93 p_table IN VARCHAR2,
94 p_column IN VARCHAR2,
95 p_raise_error IN BOOLEAN
96 ) IS
97 BEGIN
98 log_interface_error(p_table,
99 p_column,
100 pg_batch_id,
101 pg_header_id,
102 pg_line_id,
103 p_raise_error
104 );
105 END log_interface_error;
106
107 PROCEDURE log_interface_error(
108 p_column IN VARCHAR2,
109 p_raise_error IN BOOLEAN
110 ) IS
111 BEGIN
112 log_interface_error(pg_transactions_interface,
113 p_column,
114 p_raise_error
115 );
116 END log_interface_error;
117
118 PROCEDURE log_interface_error_message(
119 p_error_message IN VARCHAR2
120 ) IS
121 x_dummy_flag VARCHAR2(1);
122 BEGIN
123 asn_debug.put_line('logging error ' || pg_current_error_text || ' on column INTERFACE_TRANSACTION_ID', fnd_log.level_error);
124 asn_debug.put_line('error stack from call to po_interface_call');
125 asn_debug.print_stack;
126 pg_current_result := g_ret_sts_error;
127 po_interface_errors_sv1.handle_interface_errors_msg(NVL(pg_interface_type, pg_default_interface_type),
128 'FATAL',
129 pg_batch_id,
130 pg_header_id,
131 pg_line_id,
132 p_error_message,
133 NULL,
134 pg_transactions_interface,
135 'INTERFACE_TRANSACTION_ID',
136 x_dummy_flag
137 );
138 END log_interface_error_message;
139
140 PROCEDURE log_interface_warning(
141 p_table IN VARCHAR2,
142 p_column IN VARCHAR2
143 ) IS
144 BEGIN
145 IF (pg_message_pending = TRUE) THEN
146 pop_error_message();
147 pg_current_result := g_ret_sts_warning;
148 po_interface_call('WARNING',
149 p_table,
150 p_column
151 );
152 ELSE
153 asn_debug.put_line('WARNING: log_interface_warning called without setting a warning', fnd_log.level_error);
154 END IF;
155 END log_interface_warning;
156
157 /* This log_interface_message call ues the internal error flag what kind of message to log */
158 PROCEDURE log_interface_message(
159 p_column IN VARCHAR2,
160 p_raise_error IN BOOLEAN
161 ) IS
162 BEGIN
163 log_interface_message(pg_current_result,
164 p_column,
165 p_raise_error
166 );
167 END log_interface_message;
168
169 PROCEDURE log_interface_warning(
170 p_column IN VARCHAR2
171 ) IS
172 BEGIN
173 log_interface_warning(pg_transactions_interface, p_column);
174 END log_interface_warning;
175
176 /* log_interface_message takes an indicator variable and logs error/warning/ignore as appropriate*/
177 PROCEDURE log_interface_message(
178 p_error_status IN VARCHAR2,
179 p_table IN VARCHAR2,
180 p_column IN VARCHAR2,
181 p_raise_error IN BOOLEAN DEFAULT TRUE
182 ) IS
183 BEGIN
184 IF (p_error_status IN(g_ret_sts_error, g_ret_sts_unexp_error)) THEN
185 log_interface_error(p_table,
186 p_column,
187 p_raise_error
188 );
189 ELSIF(p_error_status = g_ret_sts_warning) THEN
190 log_interface_warning(p_table, p_column);
191 END IF;
192 END log_interface_message;
193
194 /* This log_interface_message call assumes p_table = 'RCV_TRANSACTIONS_INTERFACE' */
195 PROCEDURE log_interface_message(
196 p_error_status IN VARCHAR2,
197 p_column IN VARCHAR2,
198 p_raise_error IN BOOLEAN DEFAULT TRUE
199 ) IS
200 BEGIN
201 log_interface_message(p_error_status,
202 pg_transactions_interface,
203 p_column,
204 p_raise_error
205 );
206 END log_interface_message;
207
208 PROCEDURE set_error_message(
209 p_message IN VARCHAR2
210 ) IS
211 BEGIN
212 IF ( pg_message_pending = TRUE
213 AND pg_current_error_name <> p_message) THEN
214 asn_debug.put_line('WARNING: message ' || pg_current_error_name || ' set but never used', fnd_log.level_error);
215 END IF;
216
217 asn_debug.put_line('set error message token = ' || p_message, fnd_log.level_error);
218 asn_debug.put_line('error stack from call to set_error_message');
219 asn_debug.print_stack;
220 pg_current_error_name := p_message;
221 pg_message_pending := TRUE;
222 fnd_message.set_name('PO', pg_current_error_name);
223 END set_error_message;
224
225 PROCEDURE set_error_message(
226 p_message IN VARCHAR2,
227 p_variable IN OUT NOCOPY VARCHAR2
228 ) IS
229 BEGIN
230 set_error_message(p_message);
231 p_variable := p_message;
232 END set_error_message;
233
234 PROCEDURE set_token(
235 p_token IN VARCHAR2,
236 p_value IN VARCHAR2
237 ) IS
238 BEGIN
239 fnd_message.set_token(p_token, p_value);
240 END set_token;
241
242 PROCEDURE set_token(
243 p_token IN VARCHAR2,
244 p_value IN NUMBER
245 ) IS
246 BEGIN
247 fnd_message.set_token(p_token, TO_CHAR(p_value));
248 END set_token;
249
250 PROCEDURE set_token(
251 p_token IN VARCHAR2,
252 p_value IN DATE
253 ) IS
254 BEGIN
255 fnd_message.set_token(p_token, TO_CHAR(p_value, 'DD-MON-YYYY'));
256 END set_token;
257
258 PROCEDURE set_sql_error_message(
259 p_procedure IN VARCHAR2,
260 p_progress IN VARCHAR2
261 ) IS
262 BEGIN
263 set_error_message('PO_ALL_SQL_ERROR');
264 set_token('ROUTINE', p_procedure);
265 /* Bug 3713013 : The following statement was having TO_CHAR(p_progress).
266 since p_progress is varchar2 datatype, error was getting
267 thrown in Oracle 8i database and the package body was rendered
268 invalid. Removed the call to TO_CHAR().
269 */
270 set_token('ERR_NUMBER', p_progress);
271 set_token('SQL_ERR', SQLCODE);
272 set_token('LSQL_ERR', SQLERRM);
273 END set_sql_error_message;
274
275 PROCEDURE test_is_null(
276 p_value IN VARCHAR2,
277 p_table IN VARCHAR2,
278 p_column IN VARCHAR2,
279 p_error_message IN VARCHAR2
280 ) IS
281 BEGIN
282 IF (p_value IS NULL) THEN
283 asn_debug.put_line('fail assert test_is_null for column ' || p_column);
284
285 IF (p_error_message IS NOT NULL) THEN
286 set_error_message(p_error_message);
287 ELSE
288 set_error_message('PO_PDOI_COLUMN_NOT_NULL');
289 set_token('COLUMN', p_column);
290 END IF;
291
292 log_interface_error(p_table, p_column);
293 END IF;
294 END test_is_null;
295
296 PROCEDURE test_is_null(
297 p_value IN VARCHAR2,
298 p_column IN VARCHAR2,
299 p_error_message IN VARCHAR2
300 ) IS
301 BEGIN
302 test_is_null(p_value,
303 pg_transactions_interface,
304 p_column,
305 p_error_message
306 );
307 END test_is_null;
308
309 PROCEDURE test_is_null(
310 p_value IN NUMBER,
311 p_table IN VARCHAR2,
312 p_column IN VARCHAR2,
313 p_error_message IN VARCHAR2
314 ) IS
315 BEGIN
316 test_is_null(TO_CHAR(p_value),
317 p_table,
318 p_column,
319 p_error_message
320 );
321 END test_is_null;
322
323 PROCEDURE test_is_null(
324 p_value IN NUMBER,
325 p_column IN VARCHAR2,
326 p_error_message IN VARCHAR2
327 ) IS
328 BEGIN
329 test_is_null(p_value,
330 pg_transactions_interface,
331 p_column,
332 p_error_message
333 );
334 END test_is_null;
335
336 PROCEDURE test_is_null(
337 p_value IN DATE,
338 p_table IN VARCHAR2,
339 p_column IN VARCHAR2,
340 p_error_message IN VARCHAR2
341 ) IS
342 BEGIN
343 test_is_null(TO_CHAR(p_value, 'DD-MON-YYYY'),
344 p_table,
345 p_column,
346 p_error_message
347 );
348 END test_is_null;
349
350 PROCEDURE test_is_null(
351 p_value IN DATE,
352 p_column IN VARCHAR2,
353 p_error_message IN VARCHAR2
354 ) IS
355 BEGIN
356 test_is_null(p_value,
357 pg_transactions_interface,
358 p_column,
359 p_error_message
360 );
361 END test_is_null;
362
363 FUNCTION check_and_reset_result
364 RETURN VARCHAR2 IS
365 x_temp VARCHAR2(1);
366 BEGIN
367 x_temp := pg_current_result;
368 pg_current_result := g_ret_sts_success;
369 RETURN x_temp;
370 END check_and_reset_result;
371
372 FUNCTION check_and_noreset_result
373 RETURN VARCHAR2 IS
374 BEGIN
375 RETURN pg_current_result;
376 END check_and_noreset_result;
377
378 PROCEDURE initialize(
379 p_interface_type IN VARCHAR2,
380 p_batch_id IN NUMBER,
381 p_header_id IN NUMBER,
382 p_line_id IN NUMBER
383 ) IS
384 BEGIN
385 pg_interface_type := p_interface_type;
386 pg_batch_id := p_batch_id;
387 pg_header_id := p_header_id;
388 pg_line_id := p_line_id;
389 clear_messages();
390 END initialize;
391
392 PROCEDURE initialize(
393 p_batch_id IN NUMBER,
394 p_header_id IN NUMBER,
395 p_line_id IN NUMBER
396 ) IS
397 BEGIN
398 initialize(pg_default_interface_type,
399 p_batch_id,
400 p_header_id,
401 p_line_id
402 );
403 END initialize;
404
405 PROCEDURE clear_messages IS
406 BEGIN
407 pg_current_result := g_ret_sts_success;
408
409 IF (pg_message_pending = TRUE) THEN
410 asn_debug.put_line('WARNING: message ' || pg_current_error_name || ' set but never used', fnd_log.level_error);
411 END IF;
412
413 pg_current_error_name := NULL;
414 pg_current_error_text := NULL;
415 pg_message_pending := FALSE;
416 pg_error_count := 0;
417 /*comment pg_error_stack for bug 9575093, as this variable is never used and will cause error.*/
418 /*pg_error_stack := NULL;*/
419 END clear_messages;
420
421 FUNCTION has_errors
422 RETURN BOOLEAN IS
423 BEGIN
424 IF (pg_error_count > 0) THEN
425 RETURN TRUE;
426 ELSE
427 RETURN FALSE;
428 END IF;
429 END has_errors;
430
431 FUNCTION get_last_message
432 RETURN VARCHAR2 IS
433 BEGIN
434 RETURN pg_current_error_name;
435 END get_last_message;
436
437 PROCEDURE default_and_check(
438 p_src_value IN VARCHAR2,
439 p_dst_value IN OUT NOCOPY VARCHAR2,
440 p_column IN VARCHAR2
441 ) IS
442 BEGIN
443 IF (p_dst_value IS NULL) THEN
444 p_dst_value := p_src_value;
445 ELSIF( p_src_value IS NOT NULL
446 AND p_dst_value <> p_src_value) THEN
447 set_error_message('RCV_INVALID_ROI_VALUE');
448 set_token('COLUMN', p_column);
449 set_token('ROI_VALUE', p_dst_value);
450 set_token('SYS_VALUE', p_src_value);
451 log_interface_error(p_column);
452 END IF;
453 END default_and_check;
454
455 PROCEDURE default_and_check(
456 p_src_value IN NUMBER,
457 p_dst_value IN OUT NOCOPY NUMBER,
458 p_column IN VARCHAR2
459 ) IS
460 BEGIN
461 IF (p_dst_value IS NULL) THEN
462 p_dst_value := p_src_value;
463 ELSIF( p_src_value IS NOT NULL
464 AND p_dst_value <> p_src_value) THEN
465 set_error_message('RCV_INVALID_ROI_VALUE');
466 set_token('COLUMN', p_column);
467 set_token('ROI_VALUE', p_dst_value);
468 set_token('SYS_VALUE', p_src_value);
469 log_interface_error(p_column);
470 END IF;
471 END default_and_check;
472
473 PROCEDURE default_and_check(
474 p_src_value IN DATE,
475 p_dst_value IN OUT NOCOPY DATE,
476 p_column IN VARCHAR2
477 ) IS
478 BEGIN
479 IF (p_dst_value IS NULL) THEN
480 p_dst_value := p_src_value;
481 ELSIF( p_src_value IS NOT NULL
482 AND p_dst_value <> p_src_value) THEN
483 set_error_message('RCV_INVALID_ROI_VALUE');
484 set_token('COLUMN', p_column);
485 set_token('ROI_VALUE', p_dst_value);
486 set_token('SYS_VALUE', p_src_value);
487 log_interface_error(p_column);
488 END IF;
489 END default_and_check;
490 END rcv_error_pkg;