DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_TAB_PKG

Source


1 PACKAGE BODY xla_tab_pkg AS
2 /* $Header: xlatbtab.pkb 120.2 2005/04/28 18:45:45 masada ship $ */
3 /*======================================================================+
4 |             Copyright (c) 1995-2002 Oracle Corporation                |
5 |                       Redwood Shores, CA, USA                         |
6 |                         All rights reserved.                          |
7 +=======================================================================+
8 | PACKAGE NAME                                                          |
9 |    xla_tab_pkg                                                        |
10 |                                                                       |
11 | DESCRIPTION                                                           |
12 |    Transaction Account Builder API                                    |
13 |                                                                       |
14 | HISTORY                                                               |
15 |                                                                       |
16 |    26-JAN-04 A. Quaglia     Created                                   |
17 |    28-JUL-04 A. Quaglia     Changed message tokens                    |
18 |                             run:                                      |
19 |                               added logic to derive token values      |
20 |                                                                       |
21 +======================================================================*/
22 
23 -- Private exceptions
24 
25    le_fatal_error                   EXCEPTION;
26 
27 
28 --Public constants
29    C_RET_STS_SUCCESS      CONSTANT VARCHAR2(1)  := FND_API.G_RET_STS_SUCCESS;
30    C_RET_STS_ERROR        CONSTANT VARCHAR2(1)  := FND_API.G_RET_STS_ERROR;
31    C_RET_STS_UNEXP_ERROR  CONSTANT VARCHAR2(1)  := FND_API.G_RET_STS_UNEXP_ERROR;
32    C_FALSE                CONSTANT VARCHAR2(1)  := FND_API.G_FALSE;
33    C_TRUE                 CONSTANT VARCHAR2(1)  := FND_API.G_TRUE;
34 
35 
36 --Private constants
37 C_API_VERSION          CONSTANT NUMBER        := 1;
38 C_PACKAGE_NAME         CONSTANT VARCHAR2(30)  := 'XLA_TAB_PKG';
39 
40 G_COMPILE_STATUS_YES       CONSTANT VARCHAR2(1)   := 'Y';
41 G_COMPILE_STATUS_NO        CONSTANT VARCHAR2(1)   := 'N';
42 G_COMPILE_STATUS_RUNNING   CONSTANT VARCHAR2(1)   := 'R';
43 G_COMPILE_STATUS_ERROR     CONSTANT VARCHAR2(1)   := 'E';
44 
45 G_DEFAULT_AMB_CONTEXT  CONSTANT VARCHAR2(30)  := 'DEFAULT';
46 
47 
48 -- Private variables
49    g_application_info        xla_cmp_common_pkg.lt_application_info;
50 
51 
52 --=============================================================================
53 --               *********** Local Trace Routine **********
54 --=============================================================================
55 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
56 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
57 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
58 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
59 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
60 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
61 
62 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
63 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_tab_pkg';
64 
65 g_log_level           NUMBER;
66 g_log_enabled         BOOLEAN;
67 
68 --1-STATEMENT, 2-PROCEDURE, 3-EVENT, 4-EXCEPTION, 5-ERROR, 6-UNEXPECTED
69 
70 PROCEDURE trace
71        ( p_module                     IN VARCHAR2 DEFAULT C_DEFAULT_MODULE
72         ,p_msg                        IN VARCHAR2
73         ,p_level                      IN NUMBER
74         ) IS
75 BEGIN
76    IF (p_msg IS NULL AND p_level >= g_log_level) THEN
77       fnd_log.message(p_level, p_module);
78    ELSIF p_level >= g_log_level THEN
79       fnd_log.string(p_level, p_module, p_msg);
80    END IF;
81 
82 EXCEPTION
83    WHEN xla_exceptions_pkg.application_exception THEN
84       RAISE;
85    WHEN OTHERS THEN
86       xla_exceptions_pkg.raise_message
87          (p_location   => 'xla_tab_pkg.trace');
88 END trace;
89 
90 
91 
92 PROCEDURE run
93           (
94             p_api_version                  IN NUMBER
95            ,p_application_id               IN NUMBER
96            ,p_account_definition_type_code IN VARCHAR2
97            ,p_account_definition_code      IN VARCHAR2
98            ,p_transaction_coa_id           IN NUMBER
99            ,p_mode                         IN VARCHAR2
100            ,x_return_status                OUT NOCOPY VARCHAR2
101            ,x_msg_count                    OUT NOCOPY NUMBER
102            ,x_msg_data                     OUT NOCOPY VARCHAR2
103           )
104 IS
105 l_compile_status_code      VARCHAR2( 1);
106 l_tad_coa_id               NUMBER;
107 l_tad_coa_name             VARCHAR2(80);
108 l_transaction_coa_name     VARCHAR2(80);
109 l_tad_name                 VARCHAR2(80);
110 l_amb_context_code         VARCHAR2(30);
111 l_tad_package_name         VARCHAR2(30);
112 l_tad_procedure_name       VARCHAR2(30);
113 l_dynamic_sql              VARCHAR2(5000);
114 l_return_status            VARCHAR2(1);
115 l_msg_count                NUMBER;
116 l_msg_data                 VARCHAR2(2000);
117 
118 l_return_msg_name          VARCHAR2(30);
119 l_log_module               VARCHAR2 (2000);
120 BEGIN
121    IF g_log_enabled THEN
122       l_log_module := C_DEFAULT_MODULE||'.run';
123    END IF;
124 
125    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
126       trace
127          (p_module => l_log_module
128          ,p_msg      => 'BEGIN ' || l_log_module
129          ,p_level    => C_LEVEL_PROCEDURE);
130    END IF;
131 
132    IF NOT FND_API.Compatible_API_Call
133       (
134         p_current_version_number => C_API_VERSION
135        ,p_caller_version_number  => p_api_version
136        ,p_api_name               => 'write_online_tab'
137        ,p_pkg_name               => C_PACKAGE_NAME
138       )
139    THEN
140       IF (C_LEVEL_UNEXPECTED >= g_log_level) THEN
141          trace
142             ( p_module => l_log_module
143              ,p_msg      => 'Incompatible API versions!'
144              ,p_level    => C_LEVEL_UNEXPECTED);
145          trace
146             (p_module => l_log_module
147              ,p_msg      => 'Current version: ' || C_API_VERSION
148              ,p_level    => C_LEVEL_UNEXPECTED);
149          trace
150             ( p_module => l_log_module
151              ,p_msg      => 'Caller  version: ' || p_api_version
152              ,p_level    => C_LEVEL_UNEXPECTED);
153       END IF;
154       l_return_status   := C_RET_STS_UNEXP_ERROR;
155       l_return_msg_name := 'XLA_TAB_INCOMP_API_VERSION';
156       RAISE le_fatal_error;
157    END IF;
158 
159    BEGIN
160       --Get the chart of accounts name
161       SELECT id_flex_structure_name
162         INTO l_transaction_coa_name
163         FROM fnd_id_flex_structures_vl ffsvl
164        WHERE ffsvl.application_id = 101
165          AND ffsvl.id_flex_code   = 'GL#'
166          AND ffsvl.id_flex_num    = p_transaction_coa_id;
167    EXCEPTION
168    WHEN NO_DATA_FOUND
169    THEN
170       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
171          trace
172             (p_msg      => 'EXCEPTION:'
173             ,p_level    => C_LEVEL_EXCEPTION);
174          trace
175             (p_msg      => 'The specified Chart Of accounts Id cannot be found.'
176             ,p_level    => C_LEVEL_EXCEPTION);
177             trace
178                ( p_msg      => 'p_transaction_coa_id     : '
179                                || p_transaction_coa_id
180                 ,p_level    => C_LEVEL_ERROR);
181       END IF;
182       l_return_status := C_RET_STS_UNEXP_ERROR;
183 
184       fnd_message.set_name
185             (
186               application => 'XLA'
187              ,name        => 'XLA_TAB_COA_NOT_FOUND'
188             );
189       fnd_message.set_token
190             (
191               token => 'STRUCTURE_ID'
192              ,value => p_transaction_coa_id
193             );
194       fnd_msg_pub.add;
195       RAISE le_fatal_error;
196    END;
197 
198    --Retrieve and set the application info
199    IF NOT xla_cmp_common_pkg.get_application_info
200                   (
201                     p_application_id   => p_application_id
202                    ,p_application_info => g_application_info
203                   )
204    THEN
205       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
206          trace
207             (p_msg      => 'EXCEPTION:' ||
208                            ' Cannot read application info, aborting...'
209             ,p_level    => C_LEVEL_EXCEPTION);
210       END IF;
211       l_return_status := C_RET_STS_UNEXP_ERROR;
212       l_return_msg_name := 'XLA_TAB_CANT_READ_APP_INFO';
213       RAISE le_fatal_error;
214    END IF;
215 
216    --Retrieve the AMB context code
217    l_amb_context_code := NVL( fnd_profile.value('XLA_AMB_CONTEXT')
218                              ,G_DEFAULT_AMB_CONTEXT
219                             );
220 
221    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
222       trace
223       (p_msg      => 'Current AMB context code: ' || l_amb_context_code
224       ,p_level    => C_LEVEL_STATEMENT);
225    END IF;
226 
227    --Retrieve the compilation status of the TAD and the chart of accounts id
228    BEGIN
229       SELECT compile_status_code
230             ,chart_of_accounts_id
231             ,name
232         INTO l_compile_status_code
233             ,l_tad_coa_id
234             ,l_tad_name
235         FROM xla_tab_acct_defs_vl xtd
236        WHERE xtd.application_id               = g_application_info.application_id
237          AND xtd.account_definition_code      = p_account_definition_code
238          AND xtd.account_definition_type_code = p_account_definition_type_code
239          AND xtd.amb_context_code             = l_amb_context_code;
240 
241       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
242          trace
243          (p_module => l_log_module
244          ,p_msg      => 'TAD Compile status: ' || l_compile_status_code
245          ,p_level    => C_LEVEL_STATEMENT);
246          trace
247          (p_module => l_log_module
248          ,p_msg      => 'TAD Chart of Accounts Id: '
249                         || l_tad_coa_id
250          ,p_level    => C_LEVEL_STATEMENT);
251       END IF;
252 
253       --If not compiled or compiled in error try to compile it
254       IF    l_compile_status_code = G_COMPILE_STATUS_NO
255          OR l_compile_status_code = G_COMPILE_STATUS_ERROR
256       THEN
257          --If compilation failed abort
258          IF NOT xla_cmp_tad_pkg.compile_tad_AUTONOMOUS
259                            ( p_application_id               => 222
260                             ,p_account_definition_code      => p_account_definition_code
261                             ,p_account_definition_type_code => p_account_definition_type_code
262                             ,p_amb_context_code             => l_amb_context_code
263                            )
264          THEN
265             IF (C_LEVEL_ERROR >= g_log_level) THEN
266                trace
267                ( p_msg      => 'ERROR:'
268                 ,p_level    => C_LEVEL_ERROR);
269                trace
270                ( p_msg      => 'The TAD is not compiled and the '
271                                || 'recompilation fails.'
272                 ,p_level    => C_LEVEL_ERROR);
273                trace
274                ( p_msg      => 'Please go to the Transaction Account '
275                                || 'Definition Setup page and recompile it' ||
276                                ' manually'
277                 ,p_level    => C_LEVEL_ERROR);
278                trace
279                ( p_msg      => 'p_account_definition_code     : '
280                                || p_account_definition_code
281                 ,p_level    => C_LEVEL_ERROR);
282                trace
283                ( p_msg      => 'p_account_definition_type_code: '
284                                || p_account_definition_type_code
285                 ,p_level    => C_LEVEL_ERROR);
286                trace
287                ( p_msg      => 'amb_context_code              : '
288                                || l_amb_context_code
289                 ,p_level    => C_LEVEL_ERROR);
290             END IF;
291             l_return_msg_name := 'XLA_TAB_CANT_COMPILE_TAD';
292             l_return_status := C_RET_STS_ERROR;
293             RAISE le_fatal_error;
294          END IF;
295       --
296       ELSIF l_compile_status_code = G_COMPILE_STATUS_RUNNING
297       THEN
298          IF (C_LEVEL_ERROR >= g_log_level) THEN
299             trace
300                ( p_msg      => 'ERROR:'
301                 ,p_level    => C_LEVEL_ERROR);
302             trace
303                ( p_msg      => 'The TAD is being recompiled. Try again later.'
304                 ,p_level    => C_LEVEL_ERROR);
305             trace
306                ( p_msg      => 'p_account_definition_code     : '
307                                || p_account_definition_code
308                 ,p_level    => C_LEVEL_ERROR);
309             trace
310                ( p_msg      => 'p_account_definition_type_code: '
311                                || p_account_definition_type_code
312                 ,p_level    => C_LEVEL_ERROR);
313             trace
314                ( p_msg      => 'amb_context_code              : '
315                                || l_amb_context_code
316                 ,p_level    => C_LEVEL_ERROR);
317          END IF;
318          l_return_msg_name := 'XLA_TAB_TAD_COMP_RUNNING';
319          l_return_status := C_RET_STS_ERROR;
320          RAISE le_fatal_error;
321       END IF;
322    EXCEPTION
323    WHEN NO_DATA_FOUND
324    THEN
325       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
326          trace
327             (p_msg      => 'EXCEPTION:'
328             ,p_level    => C_LEVEL_EXCEPTION);
329          trace
330             (p_msg      => 'The specified TAD cannot be found '
331                            || 'in the table xla_tab_acct_defs_b:'
332             ,p_level    => C_LEVEL_EXCEPTION);
333             trace
334                ( p_msg      => 'p_account_definition_code     : '
335                                || p_account_definition_code
336                 ,p_level    => C_LEVEL_ERROR);
337             trace
338                ( p_msg      => 'p_account_definition_type_code: '
339                                || p_account_definition_type_code
340                 ,p_level    => C_LEVEL_ERROR);
341             trace
342                ( p_msg      => 'amb_context_code              : '
343                                || l_amb_context_code
344                 ,p_level    => C_LEVEL_ERROR);
345       END IF;
346       l_return_status := C_RET_STS_UNEXP_ERROR;
347 
348       DECLARE
349          l_amb_context_meaning VARCHAR2(80);
350          l_owner_meaning       VARCHAR2(80);
351       BEGIN
352          --Try to get the meaning of the amb context code
353          BEGIN
354             l_amb_context_meaning := xla_lookups_pkg.get_meaning
355             (
356                p_lookup_type   => 'XLA_AMB_CONTEXT_TYPE'
357               ,p_lookup_code   => l_amb_context_code
358             );
359          EXCEPTION
360          --If not possible use the amb context code
361          WHEN OTHERS
362          THEN
363             l_amb_context_meaning := l_amb_context_code;
364          END;
365          --Try to get the meaning of the owner
366          BEGIN
367 
368             l_owner_meaning := xla_lookups_pkg.get_meaning
369             (
370                p_lookup_type   => 'XLA_OWNER_TYPE'
371               ,p_lookup_code   => p_account_definition_type_code
372             );
373          EXCEPTION
374          --If not possible use the the type_code
375          WHEN OTHERS
376          THEN
377             l_owner_meaning := p_account_definition_type_code;
378          END;
379 
380          fnd_message.set_name
381             (
382               application => 'XLA'
383              ,name        => 'XLA_TAB_CANT_FIND_TAD'
384             );
385          fnd_message.set_token
386             (
387               token => 'AMB_CONTEXT'
388              ,value => l_amb_context_meaning
389             );
390          fnd_message.set_token
391             (
392               token => 'OWNER'
393              ,value => l_owner_meaning
394             );
395          fnd_message.set_token
396             (
397               token => 'TRX_ACCT_DEF_CODE'
398              ,value => p_account_definition_code
399             );
400          fnd_msg_pub.add;
401 
402          RAISE le_fatal_error;
403       END;
404    END;
405 
406    --If the TAD chart of accounts id is not null
407    --and it does not match p_transaction_coa_id
408    IF l_tad_coa_id IS NOT NULL
409    AND l_tad_coa_id <> p_transaction_coa_id
410    THEN
411    BEGIN
412       --Get the tad chart of accounts name
413       SELECT id_flex_structure_name
414         INTO l_tad_coa_name
415         FROM fnd_id_flex_structures_vl ffsvl
416        WHERE ffsvl.application_id = 101
417          AND ffsvl.id_flex_code   = 'GL#'
418          AND ffsvl.id_flex_num    = l_tad_coa_id;
419 
420 
421       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
422          trace
423             (p_msg      => 'EXCEPTION:'
424             ,p_level    => C_LEVEL_EXCEPTION);
425          trace
426             (p_msg      => 'TAD coa id  and p_transaction_coa_id cannot differ'
427             ,p_level    => C_LEVEL_EXCEPTION);
428          trace
429             (p_msg      => 'l_tad_coa_id = '  || l_tad_coa_id
430             ,p_level    => C_LEVEL_EXCEPTION);
431          trace
432             (p_msg      => 'p_transaction_coa_id = '  || p_transaction_coa_id
433             ,p_level    => C_LEVEL_EXCEPTION);
434       END IF;
435 
436       fnd_message.set_name
437             (
438               application => 'XLA'
439              ,name        => 'XLA_TAB_TAD_COA_DIFF_TRANS_COA'
440             );
441       fnd_message.set_token
442             (
443               token => 'TRX_ACCT_DEF'
444              ,value => l_tad_name
445             );
446       fnd_message.set_token
447             (
448               token => 'STRUCTURE_NAME'
449              ,value => l_tad_coa_name
450             );
451       fnd_msg_pub.add;
452       RAISE le_fatal_error;
453    END;
454 
455    END IF;
456 
457    --Build the package name
458    IF NOT xla_cmp_tad_pkg.get_tad_package_name
459                    (
460                       p_application_id               => p_application_id
461                      ,p_account_definition_code      => p_account_definition_code
462                      ,p_account_definition_type_code => p_account_definition_type_code
463                      ,p_amb_context_code             => l_amb_context_code
464                      ,p_tad_package_name             => l_tad_package_name
465                    )
466    THEN
467       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
468          trace
469             (p_msg      => 'EXCEPTION:' ||
470                            'get_tad_package_name failed'
471             ,p_level    => C_LEVEL_EXCEPTION);
472       END IF;
473       x_return_status := C_RET_STS_UNEXP_ERROR;
474       RAISE le_fatal_error;
475    END IF;
476 
477    IF p_mode = 'ONLINE'
478    THEN
479       l_tad_procedure_name := 'trans_account_def_online';
480    ELSIF p_mode = 'BATCH'
481    THEN
482       l_tad_procedure_name := 'trans_account_def_batch';
483    ELSE
484       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
485          trace
486             (p_msg      => 'EXCEPTION:' ||
487                            'Invalid p_mode:' || p_mode
488             ,p_level    => C_LEVEL_EXCEPTION);
489       END IF;
490       --Set the message on the stack
491       fnd_message.set_name
492             (
493               application => 'XLA'
494              ,name        => 'XLA_TAB_INVALID_MODE'
495             );
496       fnd_message.set_token
497             (
498               token => 'FUNCTION_NAME'
499              ,value => 'XLA_TAB_PKG.run'
500             );
501       fnd_message.set_token
502             (
503               token => 'MODE'
504              ,value => NVL(p_mode, '(NULL)')
505             );
506       --Add the message to the stack
507       fnd_msg_pub.add;
508       --Raise a local exception
509       RAISE le_fatal_error;
510    END IF;
511 
512    l_dynamic_sql :=
513    'BEGIN ' || l_tad_package_name || '.' || l_tad_procedure_name
514    || '
515     (
516       p_transaction_coa_id => :1
517      ,p_accounting_coa_id  => :2
518      ,x_return_status      => :3
519      ,x_msg_count          => :4
520      ,x_msg_data           => :5
521     );
522     END;
523     ';
524 
525    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
526 
527       trace
528       (p_msg      => 'Dynamic sql'
529       ,p_level    => C_LEVEL_STATEMENT);
530 
531       xla_cmp_common_pkg.dump_text
532                     (
533                       p_text          => l_dynamic_sql
534                     );
535    END IF;
536 
537    --execute the dynamic SQL in an anonymous block
538    BEGIN
539       EXECUTE IMMEDIATE l_dynamic_sql
540       USING IN p_transaction_coa_id
541            ,IN p_transaction_coa_id
542            ,OUT l_return_status
543            ,OUT l_msg_count
544            ,OUT l_msg_data;
545 
546       EXCEPTION
547       WHEN OTHERS
548       THEN
549 
550          IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
551             trace
552                (p_msg      => 'EXCEPTION:' ||
553                               'The TAD procedure '
554                ,p_level    => C_LEVEL_EXCEPTION);
555             trace
556                (p_msg      => 'EXCEPTION:' ||
557                               l_tad_package_name || '.' || l_tad_procedure_name
558                ,p_level    => C_LEVEL_EXCEPTION);
559             trace
560                (p_msg      => 'EXCEPTION:' ||
561                               'could not be invoked because of the following '
562                ,p_level    => C_LEVEL_EXCEPTION);
563             trace
564                (p_msg      => 'EXCEPTION:' ||
565                               'database error: '
566                ,p_level    => C_LEVEL_EXCEPTION);
567             trace
568                (p_msg      => 'Error message: '|| SQLERRM
569                ,p_level    => C_LEVEL_EXCEPTION);
570          END IF;
571          fnd_message.set_name
572          (
573            application => 'XLA'
574           ,name        => 'XLA_TAB_CANT_INVOKE_TAD_PROC'
575          );
576          fnd_message.set_token
577          (
578            token => 'PROCEDURE'
579           ,value => l_tad_package_name || '.' || l_tad_procedure_name
580          );
581          fnd_message.set_token
582          (
583            token => 'ERROR'
584           ,value => SQLERRM
585          );
586          fnd_msg_pub.add;
587 
588          RAISE le_fatal_error;
589    END;
590 
591    --Assign out parameters
592    x_msg_count     := NVL(l_msg_count, 0); --NVL for java callers
593    x_msg_data      := l_msg_data;
594    x_return_status := l_return_status;
595 
596    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
597       trace
598          (p_module => l_log_module
599          ,p_msg      => 'END ' || l_log_module
600          ,p_level    => C_LEVEL_PROCEDURE);
601    END IF;
602 
603 EXCEPTION
604 WHEN le_fatal_error
605 THEN
606    IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
607          trace
608             (p_msg      => 'EXCEPTION:' ||
609                            ' Fatal error, aborting...'
610             ,p_level    => C_LEVEL_EXCEPTION);
611    END IF;
612    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
613       trace
614          (p_module   => l_log_module
615          ,p_msg      => 'END ' || l_log_module
616          ,p_level    => C_LEVEL_PROCEDURE);
617    END IF;
618    IF l_return_status IS NULL
619    THEN
620       l_return_status := C_RET_STS_UNEXP_ERROR;
621    END IF;
622    IF l_return_msg_name IS NOT NULL
623    THEN
624       --There is a detailed message to push
625       fnd_message.set_name
626       (
627         application => 'XLA'
628        ,name        => l_return_msg_name
629       );
630       fnd_msg_pub.add;
631    END IF;
632    fnd_msg_pub.Count_And_Get
633       (
634         p_count => l_msg_count
635        ,p_data  => l_msg_data
636       );
637    --for Forms callers
638    fnd_message.set_encoded
639       (
640         encoded_message => l_msg_data
641       );
642    --Assign out parameters
643    x_msg_count     := NVL(l_msg_count, 0); --NVL for java callers
644    x_msg_data      := l_msg_data;
645    x_return_status := l_return_status;
646 
647 WHEN xla_exceptions_pkg.application_exception
648 THEN
649    RAISE;
650 WHEN OTHERS
651 THEN
652    xla_exceptions_pkg.raise_message
653       (p_location => 'xla_tab_pkg.run');
654 
655 END run;
656 
657 
658 
659 
660 --Trace initialization
661 BEGIN
662    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
663    g_log_enabled    := fnd_log.test
664                           (log_level  => g_log_level
665                           ,module     => C_DEFAULT_MODULE);
666 
667    IF NOT g_log_enabled  THEN
668       g_log_level := C_LEVEL_LOG_DISABLED;
669    END IF;
670 
671 END xla_tab_pkg;