DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_DESCRIPTION_PKG

Source


1 PACKAGE BODY xla_cmp_description_pkg AS
2 /* $Header: xlacpdes.pkb 120.25.12010000.2 2010/01/31 14:50:27 vkasina 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_description_pkg                                                |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This is a XLA private package, which contains all the logic required   |
13 |     to generate description procedures from AMB specifcations              |
14 |                                                                            |
15 |                                                                            |
16 | HISTORY                                                                    |
17 |     25-JUN-2002 K.Boussema    Created                                      |
18 |     05-DEC-2002 K.Boussema    BUG 2693303                                  |
19 |     25-FEB-2003 K.Boussema    Added 'dbdrv' command                        |
20 |     13-MAR-2003 K.Boussema    Made changes for the new bulk approach of the|
21 |                               accounting engine                            |
22 |     19-MAR-2003 K.Boussema    Added amb_context_code column                |
23 |     22-APR-2003 K.Boussema    Included Error messages                      |
24 |     02-JUN-2003 K.Boussema    Modified to fix bug 2975670 and bug 2729143  |
25 |     27-JUN-2003 K.Boussema    Renamed XLA_DESCRIPTION_PRIO table           |
26 |     17-JUL-2003 K.Boussema    Reviewd the code                             |
27 |     24-JUL-2003 K.Boussema    Updated the error messages                   |
28 |     30-JUL-2003 K.Boussema    Updated the definition of C_FLEXFIELD_SEGMENT|
29 |     01-SEP-2003 K.Boussema   Changed the generation of Description function|
30 |     19-NOV-2003 K.boussema   Changed generate_body_desc to order the Journal Entry|
31 |                              description by user_sequence, bug 3266183     |
32 |     18-DEC-2003 K.Boussema    Changed to fix bug 3042840,3307761,3268940   |
33 |                               3310291 and 3320689                          |
34 |     23-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
35 |     12-MAR-2004 K.Boussema    Changed to incorporate the select of lookups |
36 |                               from the extract objects                     |
37 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
38 |                               and the procedure.                           |
39 |     11-MAY-2004 K.Boussema  Removed the call to XLA trace routine from     |
40 |                             trace() procedure                              |
41 |     20-Sep-2004 S.Singhania Added debug messages to GenerateDescriptions   |
42 |     07-Mar-2005 K.Boussema  Changed for ADR-enhancements.                  |
43 |     11-Jul-2005 A.Wan       Changed for MPA.                               |
44 +===========================================================================*/
45 
46 
47 /*------------------------------------------------------------+
48 |                                                             |
49 |                Description function template                |
50 |                                                             |
51 +------------------------------------------------------------*/
52 
53 C_DESC_PROC                    CONSTANT      VARCHAR2(20000):= '
54 ---------------------------------------
55 --
56 -- PRIVATE FUNCTION
57 --         Description_$desc_hash_id$
58 --
59 ---------------------------------------
60 FUNCTION Description_$desc_hash_id$ (
61   p_application_id      IN NUMBER
62 , p_ae_header_id        IN NUMBER DEFAULT NULL $parameters$
63 )
64 RETURN VARCHAR2
65 IS
66 l_component_type        VARCHAR2(80)   ;
67 l_component_code        VARCHAR2(30)   ;
68 l_component_type_code   VARCHAR2(1)    ;
69 l_component_appl_id     INTEGER        ;
70 l_amb_context_code      VARCHAR2(30)   ;
71 l_ledger_language       VARCHAR2(30)   ;
72 l_source                VARCHAR2(1996) ;
73 l_description           VARCHAR2(2000) ;
74 l_log_module            VARCHAR2(240)  ;
75 BEGIN
76 IF g_log_enabled THEN
77       l_log_module := C_DEFAULT_MODULE||''.Description_$desc_hash_id$'';
78 END IF;
79 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
80       trace
81          (p_msg      => ''BEGIN of Description_$desc_hash_id$''
82          ,p_level    => C_LEVEL_PROCEDURE
83          ,p_module   => l_log_module);
84 END IF;
85 
86 l_ledger_language       := xla_ae_journal_entry_pkg.g_cache_ledgers_info.description_language;
87 l_component_type        := ''AMB_DESCRIPTION'';
88 l_component_code        := ''$description_code$'';
89 l_component_type_code   := ''$desc_type_code$'';
90 l_component_appl_id     :=  $desc_appl_id$;
91 l_amb_context_code      := ''$amb_context_code$'';
92 l_source                := NULL;
93 l_description           := NULL;
94 
95 $desc_body$
96 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
97       trace
98          (p_msg      => ''END of Description_$desc_hash_id$''
99          ,p_level    => C_LEVEL_PROCEDURE
100          ,p_module   => l_log_module);
101 END IF;
102 RETURN NULL;
103 EXCEPTION
104   WHEN VALUE_ERROR THEN
105      IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
106             trace
107                (p_msg      => ''ERROR: ''||sqlerrm
108                ,p_level    => C_LEVEL_EXCEPTION
109                ,p_module   => l_log_module);
110      END IF;
111      RAISE;
112  WHEN xla_exceptions_pkg.application_exception THEN
113       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
114       trace
115          (p_msg      => ''ERROR: ''||sqlerrm
116          ,p_level    => C_LEVEL_EXCEPTION
117          ,p_module   => l_log_module);
118       END IF;
119       RAISE;
120  WHEN OTHERS THEN
121        xla_exceptions_pkg.raise_message
122            (p_location => ''$package_name$.Description_$desc_hash_id$'');
123 END Description_$desc_hash_id$;
124 ';
125 
126 
127 g_chr_newline      CONSTANT VARCHAR2(10):= xla_environment_pkg.g_chr_newline;
128 --
129 
130 --+==========================================================================+
131 --|                                                                          |
132 --|                                                                          |
133 --| Global variables                                                         |
134 --|                                                                          |
135 --|                                                                          |
136 --+==========================================================================+
137 --
138 g_component_type                VARCHAR2(30):='AMB_DESCRIPTION';
139 g_component_code                VARCHAR2(30);
140 g_component_type_code           VARCHAR2(1);
141 g_component_appl_id             INTEGER;
142 g_component_name                VARCHAR2(160);
143 g_amb_context_code              VARCHAR2(30);
144 --
145 g_package_name                  VARCHAR2(30);
146 g_IsCompiled                    BOOLEAN:=TRUE;
147 --
148 --=============================================================================
149 --
150 --
151 --
152 --
153 --
154 --
155 --
156 --
157 --
158 --
159 --
160 --
161 --
162 --
163 --
164 --
165 --
166 --
167 --
168 --
169 --
170 --
171 --=============================================================================
172 --=============================================================================
173 --               *********** Local Trace Routine **********
174 --=============================================================================
175 
176 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
177 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
178 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
179 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
180 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
181 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
182 
183 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
184 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_description_pkg';
185 
186 g_log_level           NUMBER;
187 g_log_enabled         BOOLEAN;
188 
189 PROCEDURE trace
190            (p_msg                        IN VARCHAR2
191            ,p_level                      IN NUMBER
192            ,p_module                     IN VARCHAR2)
193 IS
194 BEGIN
195 ----------------------------------------------------------------------------
196 -- Following is for FND log.
197 ----------------------------------------------------------------------------
198 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
199           fnd_log.message(p_level, p_module);
200 ELSIF p_level >= g_log_level THEN
201           fnd_log.string(p_level, p_module, p_msg);
202 END IF;
203 
204 EXCEPTION
205        WHEN xla_exceptions_pkg.application_exception THEN
206           RAISE;
207        WHEN OTHERS THEN
208           xla_exceptions_pkg.raise_message
209              (p_location   => 'xla_cmp_description_pkg.trace');
210 END trace;
211 
212 /*---------------------------------------------------------------------------+
213 | Private function                                                           |
214 |                                                                            |
215 |       GenerateDescriptions                                                 |
216 |                                                                            |
217 | Translates a line detail description in to PL/SQL code.                    |
218 |                                                                            |
219 +---------------------------------------------------------------------------*/
220 
221 FUNCTION generate_desc_details (
222     p_description_prio_id          IN NUMBER
223   , p_array_desc_source_index      IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
224   , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
225  )
226 RETURN VARCHAR2
227 IS
228 
229 C_LITERAL_DESC        CONSTANT  VARCHAR2(20000):='
230 l_ledger_language = ''$language$'' THEN
231     l_description :=  SUBSTR(CONCAT(l_description,''$literal$''),1,2000);
232     l_description :=  SUBSTR(CONCAT(l_description,'' ''),1,2000); '
233 ;
234 
235 C_NUM_SOURCE                      CONSTANT  VARCHAR2(20000):= '
236   l_source := SUBSTR(TO_CHAR($source$),1,1996);
237   IF l_source IS NOT NULL THEN
238     l_description :=  SUBSTR(CONCAT(l_description,l_source),1,2000);
239     l_description :=  SUBSTR(CONCAT(l_description,'' ''),1,2000);
240   END IF; '
241 ;
242 
243 C_CHAR_SOURCE                     CONSTANT  VARCHAR2(20000):= '
244   l_source := SUBSTR($source$,1,1996);
245   IF l_source IS NOT NULL THEN
246     l_description :=  SUBSTR(CONCAT(l_description,l_source),1,2000);
247     l_description :=  SUBSTR(CONCAT(l_description,'' ''),1,2000);
248   END IF; '
249 ;
250 
251 C_DATE_SOURCE                 CONSTANT  VARCHAR2(20000):= '
252   l_source := SUBSTR(xla_ae_sources_pkg.DATE_TO_CHAR($source$,
253                      xla_ae_journal_entry_pkg.g_cache_ledgers_info.nls_desc_language),1,1996);
254   IF l_source IS NOT NULL THEN
255     l_description :=  SUBSTR(CONCAT(l_description,l_source),1,2000);
256     l_description :=  SUBSTR(CONCAT(l_description,'' ''),1,2000);
257   END IF; '
258 ;
259 
260 
261 C_FLEXFIELD_SEGMENT         CONSTANT       VARCHAR2(20000):='
262 xla_ae_code_combination_pkg.get_flex_segment_value(
263    p_combination_id          =>  $ccid$
264   ,p_segment_code            => ''$segment_code$''
265   ,p_id_flex_code            => ''$id_flex_code$''
266   ,p_flex_application_id     => $flexfield_appl_id$
267   ,p_application_short_name  => ''$appl_short_name$''
268   ,p_source_code             => ''$source_code$''
269   ,p_source_type_code        => ''$source_type_code$''
270   ,p_source_application_id   => $source_application_id$
271   ,p_component_type          => l_component_type
272   ,p_component_code          => l_component_code
273   ,p_component_type_code     => l_component_type_code
274   ,p_component_appl_id       => l_component_appl_id
275   ,p_amb_context_code        => l_amb_context_code
276   ,p_entity_code             => NULL
277   ,p_event_class_code        => NULL
278   ,p_ae_header_id            => p_ae_header_id
279 ) '
280 ;
281 
282 C_FLEXFIELD_DESC            CONSTANT       VARCHAR2(20000):='
283 xla_ae_code_combination_pkg.get_flex_segment_desc(
284    p_combination_id          =>  $ccid$
285   ,p_segment_code            => ''$segment_code$''
286   ,p_id_flex_code            => ''$id_flex_code$''
287   ,p_flex_application_id     => $flexfield_appl_id$
288   ,p_application_short_name  => ''$appl_short_name$''
289   ,p_source_code             => ''$source_code$''
290   ,p_source_type_code        => ''$source_type_code$''
291   ,p_source_application_id   => $source_application_id$
292   ,p_component_type          => l_component_type
293   ,p_component_code          => l_component_code
294   ,p_component_type_code     => l_component_type_code
295   ,p_component_appl_id       => l_component_appl_id
296   ,p_amb_context_code        => l_amb_context_code
297   ,p_ae_header_id            => p_ae_header_id
298 ) '
299 ;
300 
301 l_first                BOOLEAN;
302 l_Index                BINARY_INTEGER;
303 l_description          VARCHAR2(32000);
304 l_desc_detail          VARCHAR2(32000);
305 l_log_module           VARCHAR2(240);
306 BEGIN
307 IF g_log_enabled THEN
308       l_log_module := C_DEFAULT_MODULE||'.generate_desc_details';
309 END IF;
310 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
311       trace
312          (p_msg      => 'BEGIN of generate_desc_details'
313          ,p_level    => C_LEVEL_PROCEDURE
314          ,p_module   => l_log_module);
315 END IF;
316 
317 l_description := NULL;
318 
319 FOR desc_details_rec IN (SELECT    description_detail_id
320                                  , value_type_code
321                                  , source_code
322                                  , source_type_code
323                                  , source_application_id
324                                  , flexfield_segment_code
325                                  , display_description_flag
326                                  , user_sequence
327                              FROM  xla_descript_details_b
328                             WHERE description_prio_id = p_description_prio_id
329                             ORDER BY user_sequence ) LOOP
330 
331 l_desc_detail := NULL;
332 
333 IF desc_details_rec.value_type_code = 'S' THEN
334  -- source
335    l_Index:= xla_cmp_source_pkg.StackSource (
336                 p_source_code                => desc_details_rec.source_code
337               , p_source_type_code           => desc_details_rec.source_type_code
338               , p_source_application_id      => desc_details_rec.source_application_id
339               , p_array_source_index         => p_array_desc_source_index
340               , p_rec_sources                => p_rec_sources
341               );
342 
343    CASE p_rec_sources.array_datatype_code(l_Index)
344          WHEN 'D' THEN l_desc_detail := l_desc_detail||' '||C_DATE_SOURCE;
345          WHEN 'C' THEN l_desc_detail := l_desc_detail||' '||C_CHAR_SOURCE;
346          ELSE          l_desc_detail := l_desc_detail||' '||C_NUM_SOURCE;
347    END CASE;
348 
349 
350    IF desc_details_rec.flexfield_segment_code IS NULL THEN
351       --not key flexfield
352        l_desc_detail := REPLACE(l_desc_detail,
353                        '$source$',    nvl(xla_cmp_source_pkg.GenerateSource(
354                                       p_Index                     => l_Index
355                                     , p_rec_sources               => p_rec_sources
356                                     , p_translated_flag           => 'Y'),' null')
357                                     );
358 
359    ELSIF desc_details_rec.flexfield_segment_code IS NOT NULL AND
360          nvl(desc_details_rec.display_description_flag,'N')='N' THEN
361 
362          l_desc_detail := REPLACE(l_desc_detail, '$source$', C_FLEXFIELD_SEGMENT);
363 
364          l_desc_detail := REPLACE(l_desc_detail,'$ccid$',
365                           xla_cmp_source_pkg.GenerateSource(
366                                       p_Index                     => l_Index
367                                     , p_rec_sources               => p_rec_sources
368                                     , p_translated_flag           => 'N')
369                                     );
370 
371          l_desc_detail := REPLACE(l_desc_detail,'$segment_code$',
372                                   desc_details_rec.flexfield_segment_code);
373 
374          l_desc_detail := REPLACE(l_desc_detail,'$id_flex_code$',
375                             p_rec_sources.array_id_flex_code(l_Index));
376 
377          l_desc_detail := REPLACE(l_desc_detail,'$flexfield_appl_id$',
378                             p_rec_sources.array_flexfield_appl_id(l_Index));
379 
380          l_desc_detail := REPLACE(l_desc_detail,'$appl_short_name$',
381                             p_rec_sources.array_appl_short_name(l_Index));
382 
383          l_desc_detail := REPLACE(l_desc_detail,'$source_code$',
384                             p_rec_sources.array_source_code(l_Index));
385 
386          l_desc_detail := REPLACE(l_desc_detail,'$source_type_code$',
387                             p_rec_sources.array_source_type_code(l_Index));
388 
389          l_desc_detail := REPLACE(l_desc_detail,'$source_application_id$',
390                             p_rec_sources.array_application_id(l_Index));
391 
392    --display flexfield description
393    ELSIF desc_details_rec.flexfield_segment_code IS NOT NULL AND
394          nvl(desc_details_rec.display_description_flag,'N')='Y' THEN
395 
396          l_desc_detail := REPLACE(l_desc_detail,
397                        '$source$', C_FLEXFIELD_DESC);
398 
399          l_desc_detail := REPLACE(l_desc_detail,'$ccid$',
400                           xla_cmp_source_pkg.GenerateSource(
401                                       p_Index                     => l_Index
402                                     , p_rec_sources               => p_rec_sources
403                                     , p_translated_flag           => 'N')
404                                     );
405 
406          l_desc_detail := REPLACE(l_desc_detail,'$segment_code$',
407                                   desc_details_rec.flexfield_segment_code);
408 
409          l_desc_detail := REPLACE(l_desc_detail,'$id_flex_code$',
410                             p_rec_sources.array_id_flex_code(l_Index));
411 
412          l_desc_detail := REPLACE(l_desc_detail,'$flexfield_appl_id$',
413                             p_rec_sources.array_flexfield_appl_id(l_Index));
414 
415          l_desc_detail := REPLACE(l_desc_detail,'$appl_short_name$',
416                             p_rec_sources.array_appl_short_name(l_Index));
417 
418          l_desc_detail := REPLACE(l_desc_detail,'$source_code$',
419                             p_rec_sources.array_source_code(l_Index));
420 
421          l_desc_detail := REPLACE(l_desc_detail,'$source_type_code$',
422                             p_rec_sources.array_source_type_code(l_Index));
423 
424          l_desc_detail := REPLACE(l_desc_detail,'$source_application_id$',
425                             p_rec_sources.array_application_id(l_Index));
426 
427     ELSE
428      null;
429    END IF;
430 
431 ELSIF desc_details_rec.value_type_code = 'L' THEN
432  --literal
433    l_first := TRUE;
434 
435    FOR literals_rec IN (SELECT  xddt.language                        language
436                               , REPLACE(xddt.literal, '''','''''')   literal
437                           FROM  xla_descript_details_tl  xddt
438                          WHERE xddt.description_detail_id   = desc_details_rec.description_detail_id
439                            AND xddt.literal IS NOT NULL ) LOOP
440      IF l_first THEN
441          l_desc_detail := l_desc_detail || g_chr_newline ||' IF '|| C_LITERAL_DESC ;
442          l_first       := FALSE;
443      ELSE
444          l_desc_detail := l_desc_detail || g_chr_newline ||' ELSIF '|| C_LITERAL_DESC ;
445      END IF;
446 
447      l_desc_detail  := REPLACE(l_desc_detail,'$language$',literals_rec.language);
448      l_desc_detail  := REPLACE(l_desc_detail,'$literal$', literals_rec.literal);
449 
450    END LOOP;
451    IF NOT l_first THEN l_desc_detail := l_desc_detail || g_chr_newline ||' END IF; '; END IF;
452 
453 ELSE
454    null;
455 END IF;
456 
457    l_description := l_description||' '||l_desc_detail;
458 
459 END LOOP;
460 
461 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
462       trace
463          (p_msg      => 'END of generate_desc_details'
464          ,p_level    => C_LEVEL_PROCEDURE
465          ,p_module   => l_log_module);
466 END IF;
467 RETURN l_description;
468 EXCEPTION
469   WHEN VALUE_ERROR THEN
470         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
471                     trace
472                        (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
473                        ,p_level    => C_LEVEL_EXCEPTION
474                        ,p_module   => l_log_module);
475         END IF;
476         RETURN NULL;
477  WHEN xla_exceptions_pkg.application_exception   THEN
478         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
479                     trace
480                        (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
481                        ,p_level    => C_LEVEL_EXCEPTION
482                        ,p_module   => l_log_module);
483         END IF;
484         RETURN NULL;
485    WHEN OTHERS    THEN
486       xla_exceptions_pkg.raise_message
487          (p_location => 'xla_cmp_description_pkg.generate_desc_details ');
488 END generate_desc_details;
489 
490 /*---------------------------------------------------------------------------+
491 | Private function                                                           |
492 |                                                                            |
493 |       generate_body_desc                                                   |
494 |                                                                            |
495 | Generates the body of the Description_X() function from the AMB definition |
496 |                                                                            |
497 +---------------------------------------------------------------------------*/
498 
499 FUNCTION generate_body_desc   (
500   p_application_id               IN NUMBER
501 , p_amb_context_code             IN VARCHAR2
502 , p_description_code             IN VARCHAR2
503 , p_description_type_code        IN VARCHAR2
504 , p_description_name             IN VARCHAR2
505 , p_array_desc_source_index      IN OUT NOCOPY xla_cmp_source_pkg.t_array_ByInt
506 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
507 , p_IsCompiled                   IN OUT NOCOPY BOOLEAN
508 )
509 RETURN CLOB
510 IS
511 
512 C_RETURN_DESC                     CONSTANT  VARCHAR2(10000):=
513 ' l_description := SUBSTR(l_description,1,1996);
514   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
515         trace
516            (p_msg      => ''END of Description_$desc_hash_id$''
517            ,p_level    => C_LEVEL_PROCEDURE
518            ,p_module   => l_log_module);
519 
520   END IF;
521   RETURN l_description;
522 ';
523 l_first              BOOLEAN;
524 l_endif              BOOLEAN;
525 
526 l_desc_body          CLOB;
527 l_desc_cond          VARCHAR2(32000);
528 l_desc_detail        VARCHAR2(32000);
529 l_log_module         VARCHAR2(240);
530 BEGIN
531 IF g_log_enabled THEN
532       l_log_module := C_DEFAULT_MODULE||'.generate_body_desc';
533 END IF;
534 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
535       trace
536          (p_msg      => 'BEGIN of generate_body_desc'
537          ,p_level    => C_LEVEL_PROCEDURE
538          ,p_module   => l_log_module);
539 END IF;
540 
541 l_desc_body    := NULL;
542 l_desc_cond    := NULL;
543 l_desc_detail  := NULL;
544 l_first        := TRUE;
545 l_endif        := TRUE;
546 
547 FOR desc_rec IN (SELECT description_prio_id
548                       , user_sequence
549                    FROM  xla_desc_priorities
550                   WHERE application_id        = p_application_id
551                     AND description_code      = p_description_code
552                     AND description_type_code = p_description_type_code
553                     AND amb_context_code      = p_amb_context_code
554                ORDER BY user_sequence) LOOP
555 
556   l_desc_detail:= NULL;
557   l_desc_cond  := NULL;
558 
559   l_desc_detail:= generate_desc_details(
560                     p_description_prio_id        => desc_rec.description_prio_id
561                   , p_array_desc_source_index    => p_array_desc_source_index
562                   , p_rec_sources                => p_rec_sources
563                    );
564 
565   IF l_desc_detail IS NULL THEN  l_desc_detail := 'l_description := null;'; END IF;
566 
567   l_desc_cond := xla_cmp_condition_pkg.GetCondition   (
568         p_application_id             => p_application_id
569       , p_component_type             => 'AMB_DESCRIPTION'
570       , p_component_code             => p_description_code
571       , p_component_type_code        => p_description_type_code
572       , p_component_name             => p_description_name
573       , p_amb_context_code           => p_amb_context_code
574       , p_description_prio_id        => desc_rec.description_prio_id
575       , p_array_cond_source_index    => p_array_desc_source_index
576       , p_rec_sources                => p_rec_sources
577        );
578 
579   IF l_desc_cond IS NULL THEN
580           IF l_endif THEN
581              l_desc_body   := l_desc_body ||g_chr_newline||l_desc_detail;
582              l_desc_body   := l_desc_body ||g_chr_newline||C_RETURN_DESC;
583              l_first  := TRUE;
584           ELSE
585              l_endif  := TRUE;
586              l_first  := TRUE;
587              l_desc_body   := l_desc_body ||g_chr_newline||'END IF;'||g_chr_newline;
588              l_desc_body   := l_desc_body ||g_chr_newline||l_desc_detail;
589              l_desc_body   := l_desc_body ||g_chr_newline||C_RETURN_DESC;
590           END IF;
591   ELSE
592         IF l_first THEN
593            l_desc_body     := l_desc_body ||g_chr_newline||' IF '||l_desc_cond||' THEN ';
594            l_desc_body     := l_desc_body ||g_chr_newline||l_desc_detail;
595            l_desc_body     := l_desc_body ||g_chr_newline||C_RETURN_DESC;
596            l_first    := FALSE;
597            l_endif    := FALSE;
598         ELSE
599             l_desc_body     := l_desc_body ||g_chr_newline||' ELSIF '||l_desc_cond||' THEN ';
600             l_desc_body     := l_desc_body ||g_chr_newline||l_desc_detail;
601             l_desc_body     := l_desc_body ||g_chr_newline||C_RETURN_DESC;
602             l_endif         := FALSE;
603         END IF;
604   END IF;
605 END LOOP;
606 
607 IF NOT l_endif AND l_desc_body IS NOT NULL THEN
608       l_desc_body := l_desc_body ||g_chr_newline||' END IF;';
609 ELSIF l_desc_body IS NULL THEN
610       l_desc_body := 'RETURN NULL;';
611 END IF;
612 
613 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
614       trace
615          (p_msg      => 'END of generate_body_desc'
616          ,p_level    => C_LEVEL_PROCEDURE
617          ,p_module   => l_log_module);
618 END IF;
619 p_IsCompiled := TRUE;
620 RETURN l_desc_body;
621 EXCEPTION
622  WHEN VALUE_ERROR THEN
623       p_IsCompiled := FALSE;
624       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
625             trace
626                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
627                 ,p_level    => C_LEVEL_EXCEPTION
628                 ,p_module   => l_log_module);
629       END IF;
630       RETURN NULL;
631  WHEN xla_exceptions_pkg.application_exception   THEN
632       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
633             trace
634                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
635                 ,p_level    => C_LEVEL_EXCEPTION
636                 ,p_module   => l_log_module);
637       END IF;
638       p_IsCompiled := FALSE;
639       RETURN NULL;
640  WHEN OTHERS    THEN
641       p_IsCompiled := FALSE;
642       xla_exceptions_pkg.raise_message
643          (p_location => 'xla_cmp_description_pkg.generate_body_desc ');
644 END generate_body_desc;
645 
646 /*---------------------------------------------------------------------------+
647 | Private function                                                           |
648 |                                                                            |
649 |     generate_desc_fct                                                      |
650 |                                                                            |
651 | Generates a Description_X() function from the AMB description definition.  |
652 |                                                                            |
653 +---------------------------------------------------------------------------*/
654 
655 FUNCTION generate_desc_fct (
656    p_application_id               IN NUMBER
657  , p_amb_context_code             IN VARCHAR2
658  , p_description_code             IN VARCHAR2
659  , p_description_type_code        IN VARCHAR2
660  , p_description_name             IN VARCHAR2
661  , p_description_level            IN VARCHAR2
662  , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
663  , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
664  , p_IsCompiled                   IN OUT NOCOPY BOOLEAN
665 )
666 RETURN DBMS_SQL.VARCHAR2S
667 IS
668 
669 l_array_desc                 DBMS_SQL.VARCHAR2S;
670 l_null_array_desc            DBMS_SQL.VARCHAR2S;
671 l_description                CLOB;
672 l_description_code           VARCHAR2(30);
673 l_array_desc_source_index    xla_cmp_source_pkg.t_array_ByInt;
674 l_log_module                 VARCHAR2(240);
675 BEGIN
676 IF g_log_enabled THEN
677       l_log_module := C_DEFAULT_MODULE||'.generate_desc_fct';
678 END IF;
679 
680 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
681       trace
682          (p_msg      => 'BEGIN of generate_desc_fct'
683          ,p_level    => C_LEVEL_PROCEDURE
684          ,p_module   => l_log_module);
685 END IF;
686 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
687       trace
688          (p_msg      => 'p_description_code = '||p_description_code ||
689                         ' - p_description_type_code = '||p_description_type_code ||
690                         ' - p_application_id = '||p_application_id ||
691                         ' - p_amb_context_code = '||p_amb_context_code
692          ,p_level    => C_LEVEL_STATEMENT
693          ,p_module   => l_log_module);
694 END IF;
695 
696 g_component_code                := p_description_code ;
697 g_component_type_code           := p_description_type_code;
698 g_component_appl_id             := p_application_id ;
699 g_component_name                := REPLACE(p_description_name, '''','''''');
700 g_amb_context_code              := p_amb_context_code ;
701 
702 l_description := C_DESC_PROC ;
703 l_description := xla_cmp_string_pkg.replace_token(l_description, '$desc_body$'   ,
704                  generate_body_desc (
705                   p_application_id              =>  p_application_id
706                 , p_amb_context_code            =>  p_amb_context_code
707                 , p_description_code            =>  p_description_code
708                 , p_description_type_code       =>  p_description_type_code
709                 , p_description_name            =>  p_description_name
710                 , p_array_desc_source_index     =>  l_array_desc_source_index
711                 , p_rec_sources                 =>  p_rec_sources
712                 , p_IsCompiled                  =>  p_IsCompiled
713                                )
714                 );
715 
716 l_description := xla_cmp_string_pkg.replace_token(l_description, '$parameters$'   ,
717             xla_cmp_source_pkg.GenerateParameters(
718                p_array_source_index   => l_array_desc_source_index
719              , p_rec_sources          => p_rec_sources)
720              );
721 
722 l_description := xla_cmp_string_pkg.replace_token(l_description, '$desc_hash_id$'    ,   -- 4417664
723                   TO_CHAR(xla_cmp_source_pkg.CacheAADObject (
724                                 p_object                    => p_description_level
725                               , p_object_code               => p_description_code
726                               , p_object_type_code          => p_description_type_code
727                               , p_application_id            => p_application_id
728                               , p_array_source_Index        => l_array_desc_source_index
729                               , p_rec_aad_objects           => p_rec_aad_objects
730                             )));
731 l_description := xla_cmp_string_pkg.replace_token(l_description, '$description_code$' , p_description_code);  -- 4417664
732 l_description := xla_cmp_string_pkg.replace_token(l_description, '$desc_type_code$'   , p_description_type_code);  -- 4417664
733 l_description := xla_cmp_string_pkg.replace_token(l_description, '$desc_appl_id$'     , TO_CHAR(p_application_id));  -- 4417664
734 l_description := xla_cmp_string_pkg.replace_token(l_description, '$amb_context_code$' , p_amb_context_code);  -- 4417664
735 l_description := xla_cmp_string_pkg.replace_token(l_description, '$package_name$'     , g_package_name);  -- 4417664
736 
737 xla_cmp_string_pkg.CreateString(
738                       p_package_text  => l_description
739                      ,p_array_string  => l_array_desc
740                      );
741 
742 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
743       trace
744          (p_msg      => 'END of generate_desc_fct = '||l_array_desc.COUNT
745          ,p_level    => C_LEVEL_PROCEDURE
746          ,p_module   => l_log_module);
747 END IF;
748 RETURN l_array_desc;
749 EXCEPTION
750     WHEN VALUE_ERROR THEN
751       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
752             trace
753                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
754                 ,p_level    => C_LEVEL_EXCEPTION
755                 ,p_module   => l_log_module);
756       END IF;
757       p_IsCompiled := FALSE;
758        RETURN l_null_array_desc;
759    WHEN xla_exceptions_pkg.application_exception   THEN
760       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
761             trace
762                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
763                 ,p_level    => C_LEVEL_EXCEPTION
764                 ,p_module   => l_log_module);
765       END IF;
766       p_IsCompiled := FALSE;
767        RETURN l_null_array_desc;
768    WHEN OTHERS    THEN
769       p_IsCompiled := FALSE;
770       xla_exceptions_pkg.raise_message
771          (p_location => 'xla_cmp_description_pkg.generate_desc_fct');
772 END generate_desc_fct;
773 
774 /*---------------------------------------------------------------------------+
775 | Private function                                                           |
776 |                                                                            |
777 |    get_aad_descriptions                                                    |
778 |                                                                            |
779 | Launches the generation of the descriptions assigned to the AAD            |
780 |                                                                            |
781 +---------------------------------------------------------------------------*/
782 
783 FUNCTION get_aad_descriptions(
784   p_product_rule_code            IN VARCHAR2
785 , p_product_rule_type_code       IN VARCHAR2
786 , p_application_id               IN NUMBER
787 , p_amb_context_code             IN VARCHAR2
788 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
789 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
790 , p_IsCompiled                   IN OUT NOCOPY BOOLEAN
791 )
792 RETURN DBMS_SQL.VARCHAR2S
793 IS
794 
795 
796 CURSOR description_cur
797 IS
798 --header description
799 (
800 SELECT
801         xpah.description_code
802       , xpah.description_type_code
803       , REPLACE( xdtl.name  , '''','''''')
804    FROM  xla_prod_acct_headers xpah
805       , xla_descriptions_tl   xdtl
806       , xla_descriptions_b    xdb
807       , xla_aad_line_defn_assgns  xald
808       , xla_line_definitions_b     xld
809 
810   WHERE  xpah.application_id            = p_application_id
811     AND  xpah.product_rule_type_code    = p_product_rule_type_code
812     AND  xpah.product_rule_code         = p_product_rule_code
813     AND  xpah.amb_context_code          = p_amb_context_code
814     AND  xpah.application_id            = xdb.application_id
815     AND  xpah.amb_context_code          = xdb.amb_context_code
816     AND  xpah.description_type_code     = xdb.description_type_code
817     AND  xpah.description_code          = xdb.description_code
818     AND  xpah.application_id            = xdtl.application_id (+)
819     AND  xpah.amb_context_code          = xdtl.amb_context_code (+)
820     AND  xpah.description_type_code     = xdtl.description_type_code (+)
821     AND  xpah.description_code          = xdtl.description_code (+)
822     AND  xpah.accounting_required_flag  = 'Y'
823     AND  xpah.validation_status_code    = 'R'
824     AND  xdtl.language             (+)  = USERENV('LANG')
825     AND  xpah.description_code          IS NOT NULL
826     AND  xald.application_id          = xpah.application_id
827     AND  xald.amb_context_code        = xpah.amb_context_code
828     AND  xald.event_class_code        = xpah.event_class_code
829     AND  xald.event_type_code         = xpah.event_type_code
830     AND  xald.product_rule_type_code = xpah.product_rule_type_code
831     AND  xald.product_rule_code       = xpah.product_rule_code
832     AND  xald.application_id          = xld.application_id
833     AND  xald.amb_context_code        = xld.amb_context_code
834     AND  xald.event_class_code        = xld.event_class_code
835     AND  xald.event_type_code         = xld.event_type_code
836     AND  xald.line_definition_owner_code = xld.line_definition_owner_code
837     AND  xald.line_definition_code    = xld.line_definition_code
838     AND  xld.budgetary_control_flag   = XLA_CMP_PAD_PKG.g_bc_pkg_flag
839 GROUP BY xpah.description_code, xpah.description_type_code, xdtl.name
840 )
841 UNION
842 --line description
843 (
844 SELECT
845         xldj.description_code
846       , xldj.description_type_code
847       , REPLACE(xdtl.name , '''','''''')
848   FROM  xla_aad_line_defn_assgns   xald
849       , xla_line_defn_jlt_assgns   xldj
850       , xla_prod_acct_headers      xpah
851       , xla_descriptions_tl        xdtl
852       , xla_descriptions_b         xdb
853       , xla_line_definitions_b     xld
854  WHERE  xpah.application_id             = p_application_id
855    AND  xpah.amb_context_code           = p_amb_context_code
856    AND  xpah.product_rule_type_code     = p_product_rule_type_code
857    AND  xpah.product_rule_code          = p_product_rule_code
858    AND  xpah.accounting_required_flag   = 'Y'
859    AND  xpah.validation_status_code     = 'R'
860    --
861    AND  xald.application_id             = xpah.application_id
862    AND  xald.amb_context_code           = xpah.amb_context_code
863    AND  xald.event_class_code           = xpah.event_class_code
864    AND  xald.event_type_code            = xpah.event_type_code
865    AND  xald.product_rule_type_code     = xpah.product_rule_type_code
866    AND  xald.product_rule_code          = xpah.product_rule_code
867    --
868    AND  xldj.application_id             = xald.application_id
869    AND  xldj.amb_context_code           = xald.amb_context_code
870    AND  xldj.event_class_code           = xald.event_class_code
871    AND  xldj.event_type_code            = xald.event_type_code
872    AND  xldj.line_definition_owner_code = xald.line_definition_owner_code
873    AND  xldj.line_definition_code       = xald.line_definition_code
874    AND  xldj.active_flag                = 'Y'
875    AND  xldj.description_code           IS NOT NULL
876    --
877    AND  xldj.application_id             = xdtl.application_id  (+)
878    AND  xldj.amb_context_code           = xdtl.amb_context_code (+)
879    AND  xldj.description_type_code      = xdtl.description_type_code (+)
880    AND  xldj.description_code           = xdtl.description_code (+)
881    AND  xdtl.language              (+)  = USERENV('LANG')
882    --
883    AND  xldj.application_id             = xdb.application_id
884    AND  xldj.amb_context_code           = xdb.amb_context_code
885    AND  xldj.description_type_code      = xdb.description_type_code
886    AND  xldj.description_code           = xdb.description_code
887    AND  xdb.enabled_flag                = 'Y'
888    --
889    AND  xald.application_id         = xld.application_id
890    AND  xald.amb_context_code       = xld.amb_context_code
891    AND  xald.event_class_code       = xld.event_class_code
892    AND  xald.event_type_code        = xld.event_type_code
893    AND  xald.line_definition_owner_code = xld.line_definition_owner_code
894    AND  xald.line_definition_code  = xld.line_definition_code
895    AND  xld.budgetary_control_flag = XLA_CMP_PAD_PKG.g_bc_pkg_flag
896 GROUP BY xldj.description_code, xldj.description_type_code, xdtl.name
897 )
898 UNION   -- 4262811
899 -- mpa header description
900 (
901 SELECT
902         xldj.mpa_header_desc_code
903       , xldj.mpa_header_desc_type_code
904       , REPLACE(xdtl.name , '''','''''')
905   FROM  xla_prod_acct_headers      xpah
906       , xla_aad_line_defn_assgns   xald
907       , xla_line_defn_jlt_assgns   xldj
908       , xla_descriptions_tl        xdtl
909       , xla_descriptions_b         xdb
910       , xla_line_definitions_b     xld
911  WHERE  xpah.application_id             = p_application_id
912    AND  xpah.amb_context_code           = p_amb_context_code
913    AND  xpah.product_rule_type_code     = p_product_rule_type_code
914    AND  xpah.product_rule_code          = p_product_rule_code
915    AND  xpah.accounting_required_flag   = 'Y'
916    AND  xpah.validation_status_code     = 'R'
917    --
918    AND  xald.application_id             = xpah.application_id
919    AND  xald.amb_context_code           = xpah.amb_context_code
920    AND  xald.event_class_code           = xpah.event_class_code
921    AND  xald.event_type_code            = xpah.event_type_code
922    AND  xald.product_rule_type_code     = xpah.product_rule_type_code
923    AND  xald.product_rule_code          = xpah.product_rule_code
924    --
925    AND  xldj.application_id             = xald.application_id
926    AND  xldj.amb_context_code           = xald.amb_context_code
927    AND  xldj.event_class_code           = xald.event_class_code
928    AND  xldj.event_type_code            = xald.event_type_code
929    AND  xldj.line_definition_owner_code = xald.line_definition_owner_code
930    AND  xldj.line_definition_code       = xald.line_definition_code
931    AND  xldj.active_flag                = 'Y'
932    AND  xldj.mpa_header_desc_code       IS NOT NULL
933    --
934    AND  xldj.application_id             = xdtl.application_id  (+)
935    AND  xldj.amb_context_code           = xdtl.amb_context_code (+)
936    AND  xldj.mpa_header_desc_type_code  = xdtl.description_type_code (+)
937    AND  xldj.mpa_header_desc_code       = xdtl.description_code (+)
938    AND  xdtl.language              (+)  = USERENV('LANG')
939    --
940    AND  xldj.application_id             = xdb.application_id
941    AND  xldj.amb_context_code           = xdb.amb_context_code
942    AND  xldj.mpa_header_desc_type_code  = xdb.description_type_code
943    AND  xldj.mpa_header_desc_code       = xdb.description_code
944    AND  xdb.enabled_flag                = 'Y'
945    --
946    AND xald.application_id         = xld.application_id
947    AND xald.amb_context_code       = xld.amb_context_code
948    AND xald.event_class_code       = xld.event_class_code
949    AND xald.event_type_code        = xld.event_type_code
950    AND xald.line_definition_owner_code = xld.line_definition_owner_code
951    AND xald.line_definition_code  = xld.line_definition_code
952    AND xld.budgetary_control_flag = XLA_CMP_PAD_PKG.g_bc_pkg_flag
953 )
954 UNION   -- 4262811
955 -- mpa line description
956 (
957 SELECT
958         xmja.description_code
959       , xmja.description_type_code
960       , REPLACE(xdtl.name , '''','''''')
961   FROM  xla_prod_acct_headers      xpah
962       , xla_aad_line_defn_assgns   xald
963       , xla_mpa_jlt_assgns         xmja
964       , xla_line_defn_jlt_assgns   xldj
965       , xla_descriptions_tl        xdtl
966       , xla_descriptions_b         xdb
967       , xla_line_definitions_b     xld
968  WHERE  xpah.application_id             = p_application_id
969    AND  xpah.amb_context_code           = p_amb_context_code
970    AND  xpah.product_rule_type_code     = p_product_rule_type_code
971    AND  xpah.product_rule_code          = p_product_rule_code
972    AND  xpah.accounting_required_flag   = 'Y'
973    AND  xpah.validation_status_code     = 'R'
974    --
975    AND  xald.application_id             = xpah.application_id
976    AND  xald.amb_context_code           = xpah.amb_context_code
977    AND  xald.event_class_code           = xpah.event_class_code
978    AND  xald.event_type_code            = xpah.event_type_code
979    AND  xald.product_rule_type_code     = xpah.product_rule_type_code
980    AND  xald.product_rule_code          = xpah.product_rule_code
981    --
982    AND  xmja.application_id             = xald.application_id
983    AND  xmja.amb_context_code           = xald.amb_context_code
984    AND  xmja.event_class_code           = xald.event_class_code
985    AND  xmja.event_type_code            = xald.event_type_code
986    AND  xmja.line_definition_owner_code = xald.line_definition_owner_code
987    AND  xmja.line_definition_code       = xald.line_definition_code
988    AND  xmja.description_code          IS NOT NULL
989    --
990    AND  xldj.application_id             = xmja.application_id
991    AND  xldj.amb_context_code           = xmja.amb_context_code
992    AND  xldj.event_class_code           = xmja.event_class_code
993    AND  xldj.event_type_code            = xmja.event_type_code
994    AND  xldj.line_definition_owner_code = xmja.line_definition_owner_code
995    AND  xldj.line_definition_code       = xmja.line_definition_code
996    AND  xldj.active_flag                = 'Y'
997    --
998    AND  xmja.application_id             = xdtl.application_id  (+)
999    AND  xmja.amb_context_code           = xdtl.amb_context_code (+)
1000    AND  xmja.description_type_code      = xdtl.description_type_code (+)
1001    AND  xmja.description_code           = xdtl.description_code (+)
1002    AND  xdtl.language              (+)  = USERENV('LANG')
1003    --
1004    AND  xmja.application_id             = xdb.application_id
1005    AND  xmja.amb_context_code           = xdb.amb_context_code
1006    AND  xmja.description_type_code      = xdb.description_type_code
1007    AND  xmja.description_code           = xdb.description_code
1008    AND  xdb.enabled_flag                = 'Y'
1009    --
1010    AND  xald.application_id         = xld.application_id
1011    AND  xald.amb_context_code       = xld.amb_context_code
1012    AND  xald.event_class_code       = xld.event_class_code
1013    AND  xald.event_type_code        = xld.event_type_code
1014    AND  xald.line_definition_owner_code = xld.line_definition_owner_code
1015    AND  xald.line_definition_code  = xld.line_definition_code
1016    AND  xld.budgetary_control_flag = XLA_CMP_PAD_PKG.g_bc_pkg_flag
1017 )
1018 ;
1019 
1020 l_array_desc_code               xla_cmp_source_pkg.t_array_VL30;
1021 l_array_desc_name               xla_cmp_source_pkg.t_array_VL80;
1022 l_array_desc_owner              xla_cmp_source_pkg.t_array_VL1;
1023 
1024 l_descriptions                  DBMS_SQL.VARCHAR2S;
1025 l_null_descriptions             DBMS_SQL.VARCHAR2S;
1026 
1027 l_IsCompiled             BOOLEAN;
1028 l_log_module             VARCHAR2(240);
1029 BEGIN
1030 IF g_log_enabled THEN
1031       l_log_module := C_DEFAULT_MODULE||'.get_aad_descriptions';
1032 END IF;
1033 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1034       trace
1035          (p_msg      => 'BEGIN of get_aad_descriptions'
1036          ,p_level    => C_LEVEL_PROCEDURE
1037          ,p_module   => l_log_module);
1038 END IF;
1039 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1040       trace
1041          (p_msg      => 'p_product_rule_code = '||p_product_rule_code||
1042                         ' - p_product_rule_type_code = '||p_product_rule_type_code||
1043                         ' - p_application_id = '||p_application_id||
1044                         ' - p_amb_context_code = '||p_amb_context_code
1045          ,p_level    => C_LEVEL_STATEMENT
1046          ,p_module   => l_log_module);
1047 END IF;
1048 l_descriptions   := l_null_descriptions;
1049 p_IsCompiled     := TRUE;
1050 l_IsCompiled     := TRUE;
1051 
1052 
1053 OPEN  description_cur ;
1054 
1055 FETCH description_cur  BULK COLLECT INTO   l_array_desc_code
1056                                          , l_array_desc_owner
1057                                          , l_array_desc_name
1058                                         ;
1059 CLOSE description_cur ;
1060 
1061 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1062       trace
1063          (p_msg      => '# number of descriptions = '||l_array_desc_code.COUNT
1064          ,p_level    => C_LEVEL_PROCEDURE
1065          ,p_module   => l_log_module);
1066 END IF;
1067 
1068 IF l_array_desc_code.COUNT > 0 THEN
1069 FOR Idx IN l_array_desc_code.FIRST .. l_array_desc_code.LAST  LOOP
1070 
1071   IF l_array_desc_code.EXISTS(Idx) THEN
1072 
1073      l_descriptions := xla_cmp_string_pkg.ConcatTwoStrings (
1074                             p_array_string_1    => l_descriptions
1075                            ,p_array_string_2    => generate_desc_fct (
1076                                        p_application_id         => p_application_id
1077                                      , p_amb_context_code       => p_amb_context_code
1078                                      , p_description_code       => l_array_desc_code(Idx)
1079                                      , p_description_type_code  => l_array_desc_owner(Idx)
1080                                      , p_description_name       => l_array_desc_name(Idx)
1081                                      , p_description_level      => xla_cmp_source_pkg.C_DESC
1082                                      , p_rec_aad_objects        => p_rec_aad_objects
1083                                      , p_rec_sources            => p_rec_sources
1084                                      , p_IsCompiled             => l_IsCompiled )
1085                       );
1086 
1087       p_IsCompiled := p_IsCompiled  AND l_IsCompiled ;
1088 
1089   END IF;
1090 END LOOP;
1091 END IF;
1092 
1093 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1094       trace
1095          (p_msg      => 'END of get_aad_descriptions'
1096          ,p_level    => C_LEVEL_PROCEDURE
1097          ,p_module   => l_log_module);
1098 END IF;
1099 RETURN l_descriptions;
1100 EXCEPTION
1101    WHEN xla_exceptions_pkg.application_exception   THEN
1102         IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1103             trace
1104                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
1105                 ,p_level    => C_LEVEL_EXCEPTION
1106                 ,p_module   => l_log_module);
1107         END IF;
1108         p_IsCompiled := FALSE;
1109         RETURN l_null_descriptions;
1110    WHEN OTHERS    THEN
1111       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1112             trace
1113                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
1114                 ,p_level    => C_LEVEL_EXCEPTION
1115                 ,p_module   => l_log_module);
1116       END IF;
1117       p_IsCompiled := FALSE;
1118       xla_exceptions_pkg.raise_message
1119          (p_location => 'xla_cmp_description_pkg.get_aad_descriptions');
1120 END get_aad_descriptions;
1121 
1122 /*---------------------------------------------------------------------------+
1123 | Public function                                                            |
1124 |                                                                            |
1125 |       GenerateDescriptions                                                 |
1126 |                                                                            |
1127 | Translates the AMB descriptions assigned to an AAD into PL/SQL functions   |
1128 | Description_XXX(). It returns True if the generation succeeds, False       |
1129 | otherwise.                                                                 |
1130 |                                                                            |
1131 +---------------------------------------------------------------------------*/
1132 
1133 FUNCTION GenerateDescriptions(
1134   p_product_rule_code            IN VARCHAR2
1135 , p_product_rule_type_code       IN VARCHAR2
1136 , p_application_id               IN NUMBER
1137 , p_amb_context_code             IN VARCHAR2
1138 , p_package_name                 IN VARCHAR2
1139 , p_rec_aad_objects              IN OUT NOCOPY xla_cmp_source_pkg.t_rec_aad_objects
1140 , p_rec_sources                  IN OUT NOCOPY xla_cmp_source_pkg.t_rec_sources
1141 , p_package_body                 OUT NOCOPY DBMS_SQL.VARCHAR2S
1142 )
1143 RETURN BOOLEAN
1144 IS
1145 l_descriptions            DBMS_SQL.VARCHAR2S;
1146 l_null_descriptions       DBMS_SQL.VARCHAR2S;
1147 l_IsCompiled              BOOLEAN;
1148 p_IsCompiled              BOOLEAN;
1149 l_log_module              VARCHAR2(240);
1150 BEGIN
1151 IF g_log_enabled THEN
1152       l_log_module := C_DEFAULT_MODULE||'.GenerateDescriptions';
1153 END IF;
1154 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1155       trace
1156          (p_msg      => 'BEGIN of GenerateDescriptions'
1157          ,p_level    => C_LEVEL_PROCEDURE
1158          ,p_module   => l_log_module);
1159 END IF;
1160 
1161 l_IsCompiled   := TRUE;
1162 p_IsCompiled   := TRUE;
1163 g_package_name := p_package_name;
1164 
1165 l_descriptions :=  get_aad_descriptions(
1166    p_product_rule_code         =>  p_product_rule_code
1167  , p_product_rule_type_code    =>  p_product_rule_type_code
1168  , p_application_id            =>  p_application_id
1169  , p_amb_context_code          =>  p_amb_context_code
1170  , p_rec_aad_objects           =>  p_rec_aad_objects
1171  , p_rec_sources               =>  p_rec_sources
1172  , p_IsCompiled                =>  l_IsCompiled
1173  );
1174 
1175 p_IsCompiled := p_IsCompiled  AND l_IsCompiled ;
1176 
1177 p_package_body := l_descriptions;
1178 g_package_name := NULL;
1179 
1180 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1181      trace
1182          (p_msg      => 'return value = '||
1183                            CASE p_IsCompiled
1184                              WHEN TRUE THEN 'TRUE'
1185                              ELSE 'FALSE'
1186                            END
1187          ,p_level    => C_LEVEL_PROCEDURE
1188          ,p_module   => l_log_module);
1189       trace
1190          (p_msg      => 'END of GenerateDescriptions = '
1191          ,p_level    => C_LEVEL_PROCEDURE
1192          ,p_module   => l_log_module);
1193 END IF;
1194 RETURN p_IsCompiled;
1195 EXCEPTION
1196 WHEN xla_exceptions_pkg.application_exception   THEN
1197    IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1198             trace
1199                 (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR= '||sqlerrm
1200                 ,p_level    => C_LEVEL_EXCEPTION
1201                 ,p_module   => l_log_module);
1202    END IF;
1203    RETURN FALSE;
1204 WHEN OTHERS THEN
1205    xla_exceptions_pkg.raise_message
1206       (p_location => 'xla_cmp_description_pkg.GenerateDesciptions');
1207 END GenerateDescriptions;
1208 --=============================================================================
1209 --
1210 --
1211 --
1212 --
1213 --
1214 --
1215 --
1216 --
1217 --
1218 --
1219 --
1220 --
1221 --
1222 --
1223 --
1224 --
1225 --
1226 --
1227 --
1228 --
1229 --
1230 --
1231 --=============================================================================
1232 --=============================================================================
1233 --          *********** Initialization routine **********
1234 --=============================================================================
1235 
1236 BEGIN
1237 
1238    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1239    g_log_enabled    := fnd_log.test
1240                           (log_level  => g_log_level
1241                           ,module     => C_DEFAULT_MODULE);
1242 
1243    IF NOT g_log_enabled  THEN
1244       g_log_level := C_LEVEL_LOG_DISABLED;
1245    END IF;
1246 
1247 END xla_cmp_description_pkg;
1248 --