DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_CALL_FCT_PKG

Source


1 PACKAGE BODY xla_cmp_call_fct_pkg AS
2 /* $Header: xlacpcll.pkb 120.19 2006/04/06 19:39:58 wychan ship $   */
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | PACKAGE NAME                                                               |
9 |     xla_cmp_call_fct_pkg                                                   |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This is a XLA private package, which contains all the logic required   |
13 |     to generate function/procedure calls                                   |
14 |                                                                            |
15 |                                                                            |
16 | HISTORY                                                                    |
17 |     25-JUN-2002 K.Boussema  Created                                        |
18 |     20-FEB-2003 K.Boussema  Added 'dbdrv' command                          |
19 |     22-APR-2003 K.Boussema    Included error messages                      |
20 |     17-JUL-2003 K.Boussema    Reviewd the code                             |
21 |     18-DEC-2003 K.Boussema    Changed to fix bug 3042840,3307761,3268940   |
22 |                               3310291 and 3320689                          |
23 |     23-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
24 |     12-MAR-2004 K.Boussema    Changed to incorporate the select of lookups |
25 |                               from the extract objects                     |
26 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
27 |                               and the procedure.                           |
28 |     20-Sep-2004 S.Singhania   Made ffg chganges for the BULK performance   |
29 |                                 - Modifed routines GenerateCallHdrDescALT, |
30 |                                   GetHeaderParameters, GetLineParameters,  |
31 |                                   GenerateCallHeaderDesc, GenerateCallLineD|
32 |                                   esc, GenerateCallAcctLineType            |
33 |                                 - Replaced LONG with CLOB                  |
34 |                                 - xla_cmp_string_pkg.replace_token was used|
35 |                                   to perform REPLACE on CLOB variables.    |
36 |     21-Sep-2004 S.Singhania   Added NOCOPY hint to the OUT parameters.     |
37 |     28-Feb-2005 W. Shen       change made for ledger currency project      |
38 |                                 GenerateCallADR                            |
39 |     07-Mar-2005 K.Boussema    Changed for ADR-enhancements.                |
40 +===========================================================================*/
41 --
42 g_chr_newline      CONSTANT VARCHAR2(10):= xla_environment_pkg.g_chr_newline;
43 --
44 
45 --
46 --=============================================================================
47 --               *********** Local Trace Routine **********
48 --=============================================================================
49 
50 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
51 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
52 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
53 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
54 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
55 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
56 
57 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
58 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_call_fct_pkg';
59 
60 g_log_level           NUMBER;
61 g_log_enabled         BOOLEAN;
62 
63 PROCEDURE trace
64            (p_msg                        IN VARCHAR2
65            ,p_level                      IN NUMBER
66            ,p_module                     IN VARCHAR2)
67 IS
68 BEGIN
69 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
70           fnd_log.message(p_level, p_module);
71 ELSIF p_level >= g_log_level THEN
72           fnd_log.string(p_level, p_module, p_msg);
73 END IF;
74 
75 EXCEPTION
76        WHEN xla_exceptions_pkg.application_exception THEN
77           RAISE;
78        WHEN OTHERS THEN
79           xla_exceptions_pkg.raise_message
80              (p_location   => 'xla_cmp_call_fct_pkg.trace');
81 END trace;
82 
83 
84 /*-----------------------------------------------------------------+
85 |                                                                  |
86 |   Public Function                                                |
87 |                                                                  |
88 |   GetSourceParameters                                            |
89 |                                                                  |
90 |   Generates the source parameters in function/procedure call     |
91 |                                                                  |
92 |   Example: p_source_1 => p_source_1,                             |
93 |            p_source_2 => p_source_2, ...                         |
94 |            p_source_2_meaning => p_source_2_meaning, ...         |
95 |                                                                  |
96 +-----------------------------------------------------------------*/
97 
98 FUNCTION GetSourceParameters(
99   p_array_source_index    IN xla_cmp_source_pkg.t_array_ByInt
100 , p_rec_sources          IN xla_cmp_source_pkg.t_rec_sources
101 )
102 RETURN CLOB
103 IS
104 --
105 C_PARAMETER        CONSTANT VARCHAR2(1000) := ', p_source_$Index$ => p_source_$Index$';
106 C_MNG_PARAMETER    CONSTANT VARCHAR2(1000) := ', p_source_$Index$_meaning => p_source_$Index$_meaning';
107 --
108 l_parameters       CLOB;
109 l_one_param        VARCHAR2(10000);
110 l_log_module       VARCHAR2(240);
111 BEGIN
112 IF g_log_enabled THEN
113       l_log_module := C_DEFAULT_MODULE||'.GetSourceParameters';
114 END IF;
115 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
116       trace
117          (p_msg      => 'BEGIN of GetSourceParameters'
118          ,p_level    => C_LEVEL_PROCEDURE
119          ,p_module   => l_log_module);
120       trace
121          (p_msg      => 'p_array_source_index.COUNT = '||p_array_source_index.COUNT
122          ,p_level    => C_LEVEL_PROCEDURE
123          ,p_module   => l_log_module);
124 END IF;
125 
126 l_parameters :=  NULL;
127 
128 IF p_array_source_index.COUNT > 0 THEN
129 
130 FOR Idx IN p_array_source_index.FIRST ..  p_array_source_index.LAST LOOP
131   IF  p_array_source_index.EXISTS(Idx) THEN
132 
133        l_one_param  := C_PARAMETER;
134 
135        IF p_rec_sources.array_lookup_type.EXISTS(Idx)
136        AND  p_rec_sources.array_lookup_type(Idx) IS NOT NULL
137        AND  p_rec_sources.array_view_application_id.EXISTS(Idx)
138        AND  p_rec_sources.array_view_application_id(Idx) IS NOT NULL THEN
139 
140          l_one_param  := l_one_param || g_chr_newline || C_MNG_PARAMETER;
141 
142     END IF;
143 
144     l_one_param  := REPLACE(l_one_param,'$Index$',Idx) ;
145     l_parameters := l_parameters || g_chr_newline || l_one_param ;
146 
147   END IF;
148 END LOOP;
149 END IF;
150 
151 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
152       trace
153          (p_msg      => 'END of GetSourceParameters'
154          ,p_level    => C_LEVEL_PROCEDURE
155          ,p_module   => l_log_module);
156 END IF;
157 RETURN l_parameters;
158 EXCEPTION
159    WHEN VALUE_ERROR THEN
160         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
161             trace
162                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
163                ,p_level    => C_LEVEL_EXCEPTION
164                ,p_module   => l_log_module);
165         END IF;
166         RAISE;
167    WHEN xla_exceptions_pkg.application_exception   THEN
168         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
169             trace
170                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
171                ,p_level    => C_LEVEL_EXCEPTION
172                ,p_module   => l_log_module);
173         END IF;
174         RAISE;
175    WHEN OTHERS THEN
176       xla_exceptions_pkg.raise_message
177          (p_location => 'xla_cmp_call_fct_pkg.GetSourceParameters');
178 END GetSourceParameters;
179 
180 /*-----------------------------------------------------------------+
181 |                                                                  |
182 |   Public Function                                                |
183 |                                                                  |
184 |   GetHeaderParameters                                            |
185 |                                                                  |
186 |   Generates the source parameters in header fct/prod call        |
187 |                                                                  |
188 |   Example: p_source_1 => l_source_1,                             |
189 |            p_source_2 => l_source_2, ...                         |
190 |            p_source_2_meaning => l_source_2_meaning, ...         |
191 |                                                                  |
192 +-----------------------------------------------------------------*/
193 
194 FUNCTION GetHeaderParameters(
195   p_array_source_index           IN xla_cmp_source_pkg.t_array_ByInt
196 , p_rec_sources                  IN xla_cmp_source_pkg.t_rec_sources
197 )
198 RETURN CLOB
199 IS
200 C_PARAMETER        CONSTANT VARCHAR2(2000) :=
201 ' , p_source_$Index$ => g_array_event(l_event_id).array_value_$datatype$(''source_$Index$'')';
202 C_MNG_PARAMETER    CONSTANT VARCHAR2(2000) :=
203 ' , p_source_$Index$_meaning => g_array_event(l_event_id).array_value_char(''source_$Index$_meaning'')';
204 
205 l_parameters       CLOB;
206 l_one_param        VARCHAR2(10000);
207 l_log_module       VARCHAR2(240);
208 BEGIN
209 IF g_log_enabled THEN
210       l_log_module := C_DEFAULT_MODULE||'.GetHeaderParameters';
211 END IF;
212 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
213       trace
214          (p_msg      => 'BEGIN of GetHeaderParameters'
215          ,p_level    => C_LEVEL_PROCEDURE
216          ,p_module   => l_log_module);
217 END IF;
218 
219 l_parameters :=  NULL;
220 
221 IF p_array_source_index.COUNT >  0 THEN
222 FOR Idx IN p_array_source_index.FIRST ..  p_array_source_index.LAST LOOP
223 
224   IF  p_array_source_index.EXISTS(Idx) THEN
225 
226     l_one_param  := C_PARAMETER;
227 
228     IF p_rec_sources.array_lookup_type.EXISTS(Idx) AND
229        p_rec_sources.array_lookup_type(Idx) IS NOT NULL AND
230        p_rec_sources.array_view_application_id.EXISTS(Idx) AND
231        p_rec_sources.array_view_application_id(Idx) IS NOT NULL THEN
232 
233         l_one_param  := l_one_param || g_chr_newline || C_MNG_PARAMETER;
234 
235     END IF;
236 
237     l_one_param  := REPLACE(l_one_param,'$Index$',Idx) ;
238 
239     CASE p_rec_sources.array_datatype_code(Idx)
240 
241         WHEN 'I' then
242               l_one_param  := REPLACE(l_one_param,'$datatype$','num') ;
243         WHEN 'F' then
244               l_one_param  := REPLACE(l_one_param,'$datatype$','num') ;
245         WHEN 'N' then
246               l_one_param  := REPLACE(l_one_param,'$datatype$','num') ;
247         WHEN 'C' then
248               l_one_param  := REPLACE(l_one_param,'$datatype$','char') ;
249         WHEN 'D' then
250               l_one_param  := REPLACE(l_one_param,'$datatype$','date') ;
251         ELSE
252               l_one_param  := REPLACE(l_one_param,'$datatype$',p_rec_sources.array_datatype_code(Idx)) ;
253      END CASE;
254 
255      l_parameters := l_parameters ||g_chr_newline|| l_one_param ;
256 
257   END IF;
258 END LOOP;
259 END IF;
260 
261 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
262       trace
263          (p_msg      => 'END of GetHeaderParameters'
264          ,p_level    => C_LEVEL_PROCEDURE
265          ,p_module   => l_log_module);
266 END IF;
267 RETURN l_parameters;
268 EXCEPTION
269    WHEN VALUE_ERROR THEN
270         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
271             trace
272                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
273                ,p_level    => C_LEVEL_EXCEPTION
274                ,p_module   => l_log_module);
275         END IF;
276         RAISE;
277    WHEN xla_exceptions_pkg.application_exception   THEN
278         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
279             trace
280                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
281                ,p_level    => C_LEVEL_EXCEPTION
282                ,p_module   => l_log_module);
283         END IF;
284         RAISE;
285    WHEN OTHERS THEN
286       xla_exceptions_pkg.raise_message
287          (p_location => 'xla_cmp_call_fct_pkg.GetHeaderParameters');
288 END GetHeaderParameters;
289 
290 /*--------------------------------------------------------------------------+
291 |                                                                           |
292 |   Public Function                                                         |
293 |                                                                           |
294 |   GetLineParameters                                                       |
295 |                                                                           |
296 |   Generates the source parameters in line fct/prod call                   |
297 |                                                                           |
298 |   Example: p_source_1 => l_array_source_1(Idx),                           |
299 |   p_source_1_meaning => l_array_source_1_meaning(Idx),                    |
300 |  p_source_2 => g_array_event(l_event_id).array_value_num('source_1'), ... |
301 |                                                                           |
302 +--------------------------------------------------------------------------*/
303 
304 FUNCTION GetLineParameters(
305    p_array_source_index           IN xla_cmp_source_pkg.t_array_ByInt
306  , p_array_source_level           IN xla_cmp_source_pkg.t_array_VL1
307  , p_rec_sources                  IN xla_cmp_source_pkg.t_rec_sources
308 )
309 RETURN CLOB
310 IS
311 
312 C_L_PARAMETER      CONSTANT VARCHAR2(1000) :=
313 ' , p_source_$Index$ => l_array_source_$Index$(Idx)';
314 C_L_MNG_PARAMETER  CONSTANT VARCHAR2(1000) :=
315 ' , p_source_$Index$_meaning => l_array_source_$Index$_meaning(Idx)';
316 C_H_PARAMETER      CONSTANT VARCHAR2(1000) :=
317 ' , p_source_$Index$ => g_array_event(l_event_id).array_value_$datatype$(''source_$Index$'')';
321 l_parameters       CLOB;
318 C_H_MNG_PARAMETER  CONSTANT VARCHAR2(1000) :=
319 ' , p_source_$Index$_meaning => g_array_event(l_event_id).array_value_char(''source_$Index$_meaning'')';
320 --
322 l_one_param        VARCHAR2(32000) ;
323 l_log_module       VARCHAR2(240);
324 invalid_source     EXCEPTION;
325 --
326 BEGIN
327 IF g_log_enabled THEN
328       l_log_module := C_DEFAULT_MODULE||'.GetLineParameters';
329 END IF;
330 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
331       trace
332          (p_msg      => 'BEGIN of GetLineParameters'
333          ,p_level    => C_LEVEL_PROCEDURE
334          ,p_module   => l_log_module);
335 END IF;
336 
337 l_parameters :=  NULL;
338 
339 IF p_array_source_index.COUNT > 0 THEN
340 
341 FOR Idx IN p_array_source_index.FIRST ..  p_array_source_index.LAST LOOP
342 
343   IF  p_array_source_index.EXISTS(Idx) AND
344       p_array_source_level.EXISTS(Idx) THEN
345 
346     IF p_array_source_level(Idx) ='H' THEN
347 
348       l_one_param  := C_H_PARAMETER;
349 
350       IF p_rec_sources.array_lookup_type.EXISTS(Idx) AND
351          p_rec_sources.array_lookup_type(Idx) IS NOT NULL AND
352          p_rec_sources.array_view_application_id.EXISTS(Idx) AND
353          p_rec_sources.array_view_application_id(Idx) IS NOT NULL THEN
354 
355          l_one_param  := l_one_param || g_chr_newline || C_H_MNG_PARAMETER;
356 
357       END IF;
358 
359     ELSIF p_array_source_level(Idx) ='L' THEN
360     --
361       l_one_param  := C_L_PARAMETER;
362 
363       IF p_rec_sources.array_lookup_type.EXISTS(Idx) AND
364          p_rec_sources.array_lookup_type(Idx) IS NOT NULL AND
365          p_rec_sources.array_view_application_id.EXISTS(Idx) AND
366          p_rec_sources.array_view_application_id(Idx) IS NOT NULL THEN
367 
368          l_one_param  := l_one_param || g_chr_newline || C_L_MNG_PARAMETER;
369 
370       END IF;
371 
372     ELSE
373       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
374             trace
375                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||
376                               ' invalid source level : header source nor line source ='||
377                               p_rec_sources.array_source_code(Idx) ||' - '||
378                               p_rec_sources.array_source_type_code(Idx) ||' - '||
379                               p_rec_sources.array_application_id(Idx)
380                ,p_level    => C_LEVEL_EXCEPTION
381                ,p_module   => l_log_module);
382       END IF;
383       RAISE invalid_source;
384     END IF;
385     --
386     l_one_param  := REPLACE(l_one_param,'$Index$',Idx) ;
387 
388     case p_rec_sources.array_datatype_code(Idx)
389     when 'F' then
390        l_one_param  := REPLACE(l_one_param,'$datatype$','num') ;
391     when 'N' then
392        l_one_param  := REPLACE(l_one_param,'$datatype$','num') ;
393     when 'I' then
394        l_one_param  := REPLACE(l_one_param,'$datatype$','num') ;
395     when 'C' then
396        l_one_param  := REPLACE(l_one_param,'$datatype$','char') ;
397     when 'D' then
398        l_one_param  := REPLACE(l_one_param,'$datatype$','date') ;
399     else
400        l_one_param  := REPLACE(l_one_param,'$datatype$',p_rec_sources.array_datatype_code(Idx)) ;
401     end case;
402 
403     l_parameters := l_parameters || g_chr_newline||  l_one_param ;
404 
405   END IF;
406 END LOOP;
407 
408 END IF;
409 
410 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
411       trace
412          (p_msg      => 'END of GetLineParameters'
413          ,p_level    => C_LEVEL_PROCEDURE
414          ,p_module   => l_log_module);
415 END IF;
416 RETURN l_parameters;
417 EXCEPTION
418    WHEN invalid_source THEN
419       RAISE;
420    WHEN VALUE_ERROR THEN
421         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
422             trace
423                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
424                ,p_level    => C_LEVEL_EXCEPTION
425                ,p_module   => l_log_module);
426         END IF;
427         RAISE;
428    WHEN xla_exceptions_pkg.application_exception   THEN
429         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
430             trace
431                (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR = '||sqlerrm
432                ,p_level    => C_LEVEL_EXCEPTION
433                ,p_module   => l_log_module);
434         END IF;
435          RAISE;
436    WHEN OTHERS THEN
437       xla_exceptions_pkg.raise_message
438          (p_location => 'xla_cmp_call_fct_pkg.GetLineParameters');
439 END GetLineParameters;
440 
441 --
442 --=============================================================================
443 --
444 --
445 --
446 --
447 --
448 --
449 --
450 --
451 --
452 --
453 --
454 --
455 --
456 --
457 --
458 --
459 --
460 --
461 --
462 --
463 --
464 --
465 --=============================================================================
466 --=============================================================================
467 --          *********** Initialization routine **********
468 --=============================================================================
469 
470 BEGIN
471 
472    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
473    g_log_enabled    := fnd_log.test
474                           (log_level  => g_log_level
475                           ,module     => C_DEFAULT_MODULE);
476 
477    IF NOT g_log_enabled  THEN
478       g_log_level := C_LEVEL_LOG_DISABLED;
479    END IF;
480 
481 END xla_cmp_call_fct_pkg; --