DBA Data[Home] [Help]

PACKAGE BODY: APPS.POS_LOG

Source


1 PACKAGE BODY pos_log AS
2 /*$Header: POSLOGB.pls 120.2 2006/02/20 11:43:06 bitang noship $ */
3 
4 -- This procedure returns the combined messages in fnd_msg_pub
5 PROCEDURE combine_fnd_msg
6   (p_msg_count IN  NUMBER,
7    x_msg_data  OUT nocopy VARCHAR2
8    )
9   IS
10      l_msg VARCHAR2(4000);
11 BEGIN
12    FOR l_idx IN 1..p_msg_count LOOP
13       x_msg_data := x_msg_data || ' ' || fnd_msg_pub.get(l_idx);
14    END LOOP;
15 END combine_fnd_msg;
16 
17 -- This procedure logs the return status, msg count and msg data.
18 -- p_prefix will be used as the prefix of the logged message
19 PROCEDURE log_call_result
20   (p_module        IN VARCHAR2,
21    p_prefix        IN VARCHAR2,
22    p_return_status IN VARCHAR2,
23    p_msg_count     IN NUMBER,
24    p_msg_data      IN VARCHAR2,
25    p_name1         IN VARCHAR2 DEFAULT NULL,
26    p_value1        IN VARCHAR2 DEFAULT NULL,
27    p_name2         IN VARCHAR2 DEFAULT NULL,
28    p_value2        IN VARCHAR2 DEFAULT NULL,
29    p_name3         IN VARCHAR2 DEFAULT NULL,
30    p_value3        IN VARCHAR2 DEFAULT NULL
31    )
32   IS
33      l_level NUMBER;
34      l_msg   VARCHAR2(4000);
35 BEGIN
36 
37    IF p_return_status = fnd_api.g_ret_sts_success THEN
38       l_level := fnd_log.level_statement;
39     ELSE
40       l_level := fnd_log.level_error;
41    END IF;
42 
43    IF l_level >= fnd_log.g_current_runtime_level THEN
44       fnd_log.string (l_level
45                       , p_module
46                       , p_prefix || ' return status ' || p_return_status
47                       || ' msg count ' || p_msg_count
48                       || ' msg data ' || p_msg_data
49                       );
50 
51       IF p_msg_count > 1 THEN
52          combine_fnd_msg(p_msg_count, l_msg);
53          fnd_log.string(l_level
54                         , p_module
55                         , p_prefix
56                         || ' combined msg data ' || l_msg
57                         );
58       END IF;
59 
60    END IF;
61 
62    IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
63       l_msg := NULL;
64 
65       IF p_name1 IS NOT NULL THEN
66 	 l_msg := p_name1 || '=' || p_value1;
67       END IF;
68 
69       IF p_name2 IS NOT NULL THEN
70 	 l_msg := ', ' || p_name2 || '=' || p_value2;
71       END IF;
72 
73       IF p_name3 IS NOT NULL THEN
74 	 l_msg := ', ' || p_name3 || '=' || p_value3;
75       END IF;
76 
77       IF l_msg IS NOT NULL THEN
78 	 -- the following if statement is not needed but we added
79 	 -- it so that the GSCC checker will not compaint
80 	 IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
81 	    fnd_log.string(fnd_log.level_statement,
82 			   p_module,
83 			   p_prefix || ' name values: ' || l_msg
84 			   );
85 	 END IF;
86       END IF;
87    END IF;
88 
89 END log_call_result;
90 
91 -- This procedure logs the current value of sqlerrm
92 PROCEDURE log_sqlerrm
93   (p_module        IN VARCHAR2,
94    p_prefix        IN VARCHAR2
95    )
96   IS
97 BEGIN
98    IF fnd_log.level_error >= fnd_log.g_current_runtime_level THEN
99       fnd_log.string (fnd_log.level_error
100                       , p_module
101                       , p_prefix || ' sqlerrm is ' || Sqlerrm
102                       );
103    END IF;
104 END log_sqlerrm;
105 
106 -- Warning: The following 3 procedures/function should be used together
107 -- Please read the instruction carefully before using them.
108 --
109 -- Usage: say you want to log field names and values of a plsql record type variable.
110 --     1. You should call set_msg_prefix so that your logs will share the common prefix
111 --        which you can use to correlate the logs.
112 --     2. Then you call set_msg_module so that your logs will share the same log module
113 --     3. Then you call log_field for each field name, and value.
114 --     4. You will then call finish_log_field at the end.
115 
116 PROCEDURE set_msg_prefix (p_prefix IN VARCHAR2) IS
117 BEGIN
118    g_msg_prefix := p_prefix || ': username [' || fnd_global.user_name || '] time [' ||
119      To_char(Sysdate, 'MMDDYYYY HH24:MI:SS') || ']:';
120 END set_msg_prefix;
121 
122 PROCEDURE set_msg_module (p_module IN VARCHAR2) IS
123 BEGIN
124    g_msg_module := p_module;
125 END set_msg_module;
126 
127 PROCEDURE log_field
128   (p_field_name   IN VARCHAR2,
129    p_field_value  IN VARCHAR2
130    )
131   IS
132 BEGIN
133 --   IF p_field_value IS NULL THEN
134   --    RETURN;
135   -- END IF;
136 
137    IF Lengthb(g_msg_prefix) + Lengthb(g_msg) + 4 + Lengthb(p_field_name) + Lengthb(p_field_value) > 4000 THEN
138       IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
139 	 fnd_log.string(fnd_log.level_procedure, g_msg_module, g_msg_prefix || g_msg);
140       END IF;
141       g_msg := NULL;
142    END IF;
143 
144    g_msg := g_msg || ' ' || p_field_name || '=[' || p_field_value || ']';
145 
146 END log_field;
147 
148 PROCEDURE finish_log_field IS
149 BEGIN
150    IF g_msg IS NOT NULL THEN
151       IF (fnd_log.level_procedure >= fnd_log.g_current_runtime_level) THEN
152 	 fnd_log.string(fnd_log.level_procedure, g_msg_module, g_msg_prefix || g_msg);
153       END IF;
154    END IF;
155 
156    g_msg := NULL;
157    g_msg_prefix := NULL;
158    g_msg_module := NULL;
159 
160 END finish_log_field;
161 
162 END pos_log;