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