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