DBA Data[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;