DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_CMP_HASH_PKG

Source


1 PACKAGE BODY xla_cmp_hash_pkg AS
2 /* $Header: xlacphsh.pkb 120.19.12010000.4 2010/07/05 13:47:31 karamakr 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_hash_pkg                                                       |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |                                                                            |
13 |                                                                            |
14 | HISTORY                                                                    |
15 |     25-JUL-2002 K.Boussema    Created                                      |
16 |     11-FEB-2003 K.Boussema    Added Drop package API                       |
17 |     18-FEB-2003 K.Boussema    Added Hash product rule code API             |
18 |     18-MAR-2003 K.Boussema    Added amb_context_code column                |
19 |     22-APR-2003 K.Boussema    Included error messages                      |
20 |     22-JUN-2003 K.Boussema    Updated error messages                       |
21 |     17-JUL-2003 K.Boussema    Reviewd the code                             |
22 |     23-FEB-2004 K.Boussema    Made changes for the FND_LOG.                |
23 |     17-MAR-2004 K.Boussema    Reviewed GetPADHashId to handle multiple AADs|
24 |                               with the same name (same product_rule_code)  |
25 |     22-MAR-2004 K.Boussema    Added a parameter p_module to the TRACE calls|
26 |                               and the procedure.                           |
27 |     11-MAY-2004 K.Boussema  Removed the call to XLA trace routine from     |
28 |                             trace() procedure                              |
29 |     24-JUN-2005 K.Boussema  Redefined the GetPADHashId function as an      |
30 |                             autonomous transaction                         |
31 |     26-JUN-2005 W.Chan      Add application_id and product_rule_type_code  |
32 |                             when looking up the hash id for the aad.       |
33 |     12-AUG-2005 W.Chan      bug 4549711 - Redefined the GetPADHashId       |
34 |                             function as an non-autonomous transaction      |
35 |     31-AUG-2005 W.Chan      bug 4585458 - Fix GetPADHashId to not to       |
36 |                             update the xla_product_rules_b with            |
37 |                             product_rule_hash_id if one is not found       |
38 +===========================================================================*/
39 --
40 --
41 --
42 --=============================================================================
43 --               *********** Local Trace Routine **********
44 --=============================================================================
45 
46 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
47 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
48 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
49 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
50 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
51 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
52 
53 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
54 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_hash_pkg';
55 
56 g_log_level           NUMBER;
57 g_log_enabled         BOOLEAN;
58 g_product_rule_hash_id NUMBER;
59 g_application_id       NUMBER;
60 g_product_rule_code   VARCHAR2(30);
61 g_product_rule_type_code VARCHAR2(30);
62 g_amb_context_code     VARCHAR2(30);
63 
64 PROCEDURE trace
65            (p_msg                        IN VARCHAR2
66            ,p_level                      IN NUMBER
67            ,p_module                     IN VARCHAR2 DEFAULT C_DEFAULT_MODULE) IS
68 BEGIN
69 ----------------------------------------------------------------------------
70 -- Following is for FND log.
71 ----------------------------------------------------------------------------
72 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
73           fnd_log.message(p_level, p_module);
74 ELSIF p_level >= g_log_level THEN
75           fnd_log.string(p_level, p_module, p_msg);
76 END IF;
77 
78 EXCEPTION
79        WHEN xla_exceptions_pkg.application_exception THEN
80           RAISE;
81        WHEN OTHERS THEN
82           xla_exceptions_pkg.raise_message
83              (p_location   => 'xla_cmp_hash_pkg.trace');
84 END trace;
85 --+==========================================================================+
86 --|                                                                          |
87 --| OVERVIEW of private procedures and functions                             |
88 --|                                                                          |
89 --+==========================================================================+
90 --
91 
92 --
93 /*======================================================================+
94 |                                                                       |
95 | Public Function                                                       |
96 |                                                                       |
97 | GetPADHashId                                                          |
98 |                                                                       |
99 | Determines the product hash id associated to the current product rule |
100 | code, returns a number                                                |
101 |                                                                       |
102 | Parameters:                                                           |
103 |         1  IN  p_product_rule_code       VARCHAR2 product rule        |
104 |         2  IN  p_amb_context_code        VARCHAR2 AMB context         |
105 +======================================================================*/
106 --
107 FUNCTION GetPADHashId      (p_product_rule_code         IN  VARCHAR2
108                            ,p_amb_context_code          IN  VARCHAR2
109                            ,p_application_id            IN  INTEGER
110                            ,p_product_rule_type_code    IN  VARCHAR2)
111 RETURN NUMBER
112 IS
113 l_HashID             NUMBER;
114 l_log_module         VARCHAR2(240);
115 BEGIN
116 IF g_log_enabled THEN
117       l_log_module := C_DEFAULT_MODULE||'.GetPADHashId';
118 END IF;
119 
120 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
121       trace
122          (p_msg      => 'BEGIN of GetPADHashId'
123          ,p_level    => C_LEVEL_PROCEDURE
124          ,p_module   => l_log_module);
125 END IF;
126 
127 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
128 
129       trace
130          (p_msg      => 'p_product_rule_code = '||p_product_rule_code ||
131                         ' - p_amb_context_code = '|| p_amb_context_code
132          ,p_level    => C_LEVEL_STATEMENT
133          ,p_module   => l_log_module);
134 
135       trace
136          (p_msg      => 'SQL - select from xla_product_rules_b'
137          ,p_level    => C_LEVEL_STATEMENT
138          ,p_module   => l_log_module);
139 
140 END IF;
141 
142 BEGIN
143 
144 SELECT  DISTINCT product_rule_hash_id
145   INTO  l_HashID
146   FROM  xla_product_rules_b
147  WHERE  product_rule_code           = p_product_rule_code
148    AND  amb_context_code            = p_amb_context_code
149    AND  application_id              = p_application_id
150    AND  product_rule_type_code      = p_product_rule_type_code
151    AND  product_rule_hash_id        IS NOT NULL
152 ;
153 
154 EXCEPTION
155 
156   WHEN NO_DATA_FOUND THEN
157 
158    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
159            trace
160                (p_msg      => 'SQL - update xla_product_rules_b'
161                ,p_level    => C_LEVEL_STATEMENT
162                ,p_module   => l_log_module);
163 
164    END IF;
165 
166    -- Fix bug 4585458
167    -- When this is called by xla_cmp_hash_pkg.BuildPADName in the
168    -- xla_accounting_cashe_pkg.load_application_ledgers, it error with ORA-14551
169 /*
170    UPDATE xla_product_rules_b  xprb
171      SET xprb.product_rule_hash_id      = (SELECT NVL(MAX(xpr.product_rule_hash_id),0) + 1
172                                              FROM xla_product_rules_b xpr)
173    WHERE xprb.amb_context_code          = p_amb_context_code
174      AND xprb.product_rule_code         = p_product_rule_code
175      AND xprb.application_id            = p_application_id
176      AND xprb.product_rule_type_code    = p_product_rule_type_code
177      RETURNING xprb.product_rule_hash_id INTO l_HashID
178    ;
179 */
180 
181     /*
182     SELECT NVL(MAX(product_rule_hash_id),0) + 1
183      INTO l_HashID
184      FROM xla_product_rules_b;
185      */
186 
187    -- Fix bug 9325005
188    -- When 2 AADs are being Validated from 2 different machines at same time, the NVL((MAX)+1)
189    -- fetches same value for the 2 new AADs.
190    --  Thereby, the 2 new AADs will have same product rule hash id and only 1 package would
191    -- get created for both of these AADs.
192    --
193    -- Hence creating a new sequence for the same.
194    IF g_product_rule_hash_id is NULL
195    OR nvl(g_product_rule_code,' ') <> p_product_rule_code
196    OR nvl(g_product_rule_type_code,' ') <>  p_product_rule_type_code
197    OR nvl(g_amb_context_code,' ') <>  p_amb_context_code
198    OR nvl(g_application_id,-1) <>  p_application_id
199    THEN
200      SELECT xla_prod_rule_hash_s.nextval
201      INTO l_HashID
202      FROM dual;
203      g_product_rule_hash_id := l_HashID;
204      g_product_rule_code := p_product_rule_code;
205      g_product_rule_type_code := p_product_rule_type_code;
206      g_amb_context_code := p_amb_context_code;
207      g_application_id := p_application_id;
208    ELSE
209      l_HashID := g_product_rule_hash_id;
210    END IF;
211 
212 
213   WHEN TOO_MANY_ROWS THEN
214 
215      IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
216           trace
217             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR: TWO OR MORE HASH_ID FOR THE SAME AAD code'
218             ,p_level    => C_LEVEL_EXCEPTION
219             ,p_module   => l_log_module);
220      END IF;
221 
222      l_HashID:= NULL;
223 
224 END ;
225 
226 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
227       trace
228          (p_msg      => 'return value. = '||l_HashID
229          ,p_level    => C_LEVEL_PROCEDURE
230          ,p_module   => l_log_module);
231 
232       trace
233          (p_msg      => 'END of GetPADHashId'
234          ,p_level    => C_LEVEL_PROCEDURE
235          ,p_module   => l_log_module);
236 
237 END IF;
238 
239 RETURN l_HashID;
240 EXCEPTION
241 WHEN xla_exceptions_pkg.application_exception THEN
242    IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
243           trace
244             (p_msg      => 'ERROR: XLA_CMP_COMPILER_ERROR: FAILED TO CREATE THE AAD HASH_ID VALUE'
245             ,p_level    => C_LEVEL_EXCEPTION
246             ,p_module   => l_log_module);
247    END IF;
248    RAISE;
249 WHEN OTHERS                                  THEN
250    xla_exceptions_pkg.raise_message
251          (p_location => 'xla_cmp_hash_pkg.GetPADHashId');
252 END GetPADHashId;
253 --
254 
255 --
256 /*======================================================================+
257 |                                                                       |
258 | Public Function                                                       |
259 |                                                                       |
260 | GetPackageName                                                        |
261 |                                                                       |
262 | Get package name                                                      |
263 |                                                                       |
264 | Parameters                                                            |
265 |         1  IN  p_application_id          NUMBER   application id      |
266 |         2  IN  p_product_rule_type_code  VARCHAR2 product rule type   |
267 |         3  IN  p_product_rule_hash_id    NUMBER   product rule hash id|
268 +======================================================================*/
269 FUNCTION  GetPackageName   (  p_application_id            IN  NUMBER
270                              ,p_product_rule_type_code    IN  VARCHAR2
271                              ,p_product_rule_hash_id      IN  NUMBER )
272 RETURN VARCHAR2
273 IS
274 --
275 l_name               VARCHAR2(30);
276 l_hashApplication    VARCHAR2(30);
277 l_HashRuleCode       VARCHAR2(30);
278 l_log_module         VARCHAR2(240);
279 --
280 BEGIN
281 IF g_log_enabled THEN
282       l_log_module := C_DEFAULT_MODULE||'.GetPackageName';
283 END IF;
284 
285 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
286       trace
287          (p_msg      => 'BEGIN of GetPackageName'
288          ,p_level    => C_LEVEL_PROCEDURE
289          ,p_module   => l_log_module);
290 END IF;
291 
292 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
293       trace
294          (p_msg      => 'p_application_id = '||p_application_id ||
295                         ' - p_product_rule_type_code = '||p_product_rule_type_code ||
296                         ' - p_product_rule_hash_id = '||p_product_rule_hash_id
297          ,p_level    => C_LEVEL_PROCEDURE
298          ,p_module   => l_log_module);
299 END IF;
300 
301 l_hashApplication := LPAD(SUBSTR(TO_CHAR(ABS(p_application_id)), 1, 5), 5, '0');
302 l_HashRuleCode    := LPAD(SUBSTR(TO_CHAR(p_product_rule_hash_id), 1, 6), 6, '0');
303 
304 l_name := C_PACKAGE_NAME;
305 l_name := REPLACE(l_name,'$id1$',l_hashApplication);
306 l_name := REPLACE(l_name,'$id2$',p_product_rule_type_code);
307 l_name := REPLACE(l_name,'$id3$',l_HashRuleCode);
308 
309 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
310       trace
311          (p_msg      => 'return value. package_name = '||l_name
312          ,p_level    => C_LEVEL_PROCEDURE
316          ,p_level    => C_LEVEL_PROCEDURE
313          ,p_module   => l_log_module);
314       trace
315          (p_msg      => 'END of GetPackageName'
317          ,p_module   => l_log_module);
318 END IF;
319 RETURN l_name;
320 EXCEPTION
321 WHEN xla_exceptions_pkg.application_exception THEN
322    RAISE;
323 WHEN OTHERS                                  THEN
324   xla_exceptions_pkg.raise_message
325          (p_location => 'xla_cmp_hash_pkg.GetPackageName');
326 END GetPackageName;
327 --
328 --
329 /*======================================================================+
330 |                                                                       |
331 | Private function                                                      |
332 |                                                                       |
333 | Parameters                                                            |
334 |         1  IN  p_application_id          NUMBER   application id      |
335 |         2  IN  p_product_rule_code       VARCHAR2 product rule        |
336 |         3  IN  p_product_rule_type_code  VARCHAR2 product rule type   |
337 |         4  IN  p_amb_context_code        VARCHAR2 AMB context         |
338 |         5 OUT  p_product_rule_hash_id    NUMBER   product rule hash id|
339 +======================================================================*/
340 FUNCTION SearchPAD    ( p_application_id            IN  NUMBER
341                        ,p_product_rule_code         IN  VARCHAR2
342                        ,p_product_rule_type_code    IN  VARCHAR2
343                        ,p_amb_context_code          IN  VARCHAR2
344                        ,p_product_rule_hash_id      OUT NOCOPY NUMBER)
345 RETURN BOOLEAN
346 IS
347 l_log_module         VARCHAR2(240);
348 BEGIN
349 --
350 IF g_log_enabled THEN
351       l_log_module := C_DEFAULT_MODULE||'.SearchPAD';
352 END IF;
353 
354 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
355 
356       trace
357          (p_msg      => 'BEGIN of SearchPAD'
358          ,p_level    => C_LEVEL_PROCEDURE
359          ,p_module   => l_log_module);
360 
361 END IF;
362 
363 SELECT  product_rule_hash_id
364 INTO    p_product_rule_hash_id
365 FROM    xla_product_rules_b
366 WHERE   product_rule_code           = p_product_rule_code
367   AND   product_rule_type_code      = p_product_rule_type_code
368   AND   application_id              = p_application_id
369   AND   amb_context_code            = p_amb_context_code
370 ;
371 
372 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
373       IF (p_product_rule_hash_id IS NOT NULL) THEN
374             trace
375                (p_msg      => 'return value. = TRUE'
376                ,p_level    => C_LEVEL_PROCEDURE
377                ,p_module   => l_log_module);
378       ELSE
379             trace
380                (p_msg      => 'return value. = FALSE'
381                ,p_level    => C_LEVEL_PROCEDURE
382                ,p_module   => l_log_module);
383       END IF;
384 
385       trace
386          (p_msg      => 'END of SearchPAD'
387          ,p_level    => C_LEVEL_PROCEDURE
388          ,p_module   => l_log_module);
389 
390 END IF;
391 RETURN (p_product_rule_hash_id IS NOT NULL);
392 EXCEPTION
393 WHEN NO_DATA_FOUND THEN
394    RETURN FALSE;
395 WHEN xla_exceptions_pkg.application_exception THEN
396    RAISE;
397 WHEN OTHERS                                  THEN
398    xla_exceptions_pkg.raise_message
399          (p_location => 'xla_cmp_hash_pkg.SearchPAD');
400 END SearchPAD;
401 --
402 /*======================================================================+
403 |                                                                       |
404 | Public Procedure                                                      |
405 |                                                                       |
406 | DropPadPkg                                                            |
407 |                                                                       |
408 | Drop PAD package for the current application,product rule code,       |
409 |          , product rule type code                                     |
410 |                                                                       |
411 | Parameters:                                                           |
412 |         1  IN  p_application_id          NUMBER   application id      |
413 |         2  IN  p_product_rule_code       VARCHAR2 product rule        |
414 |         3  IN  p_product_rule_type_code  VARCHAR2 product rule type   |
415 |         4  IN  p_amb_context_code        VARCHAR2 AMB context         |
416 +======================================================================*/
417 PROCEDURE DropPadPkg        ( p_application_id            IN  NUMBER
418                              ,p_product_rule_code         IN  VARCHAR2
419                              ,p_product_rule_type_code    IN  VARCHAR2
420                              ,p_amb_context_code          IN  VARCHAR2
421                              )
422 IS
423 
424 l_statement       VARCHAR2(200);
425 l_package_name    VARCHAR2(30) ;
426 l_PADId           NUMBER;
427 --
428 package_does_not_exist                     EXCEPTION;
429 package_locked                             EXCEPTION;
430 
431 PRAGMA EXCEPTION_INIT(package_locked        ,-04021);
432 PRAGMA EXCEPTION_INIT(package_does_not_exist,-04043);
433 --
434 l_log_module         VARCHAR2(240);
438 IF g_log_enabled THEN
435 --
436 BEGIN
437 --
439       l_log_module := C_DEFAULT_MODULE||'.DropPadPkg';
440 END IF;
441 --
442 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
443 
444       trace
445          (p_msg      => 'BEGIN of DropPadPkg'
446          ,p_level    => C_LEVEL_PROCEDURE
447          ,p_module   => l_log_module);
448 
449       trace
450          (p_msg      => 'p_application_id = '||p_application_id ||
451                         ' - p_product_rule_code = '||p_product_rule_code ||
452                         ' - p_product_rule_type_code = '||p_product_rule_type_code ||
453                         ' - p_amb_context_code = '||p_amb_context_code
454          ,p_level    => C_LEVEL_PROCEDURE
455          ,p_module   => l_log_module);
456 
457 END IF;
458 
459 IF SearchPAD      ( p_application_id             => p_application_id
460                     ,p_product_rule_code         => p_product_rule_code
461                     ,p_product_rule_type_code    => p_product_rule_type_code
462                     ,p_amb_context_code          => p_amb_context_code
463                     ,p_product_rule_hash_id      => l_PADId)
464 THEN
465 --
466 -- package exists in the Data Base
467 --
468       l_package_name := GetPackageName (
469                            p_application_id            => p_application_id
470                           ,p_product_rule_type_code    => p_product_rule_type_code
471                           ,p_product_rule_hash_id      => l_PADId
472                           );
473 
474       --
475       -- drop specification package
476       --
477       l_statement := 'DROP PACKAGE '||l_package_name ;
478 
479       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
480 
481             trace
482                (p_msg      => '>> EXECUTE dynamic SQL = '||l_statement
483                ,p_level    => C_LEVEL_STATEMENT
484                ,p_module   => l_log_module);
485 
486       END IF;
487 
488           EXECUTE IMMEDIATE l_statement;
489 
490       --
491       -- drop body package
492       --
493       l_statement := 'DROP PACKAGE BODY '||l_package_name ;
494 
495       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
496 
497             trace
498                (p_msg      => '>> EXECUTE dynamic SQL = '||l_statement
499                ,p_level    => C_LEVEL_STATEMENT
500                ,p_module   => l_log_module);
501 
502       END IF;
503 
504       EXECUTE IMMEDIATE l_statement;
505       --
506  END IF;
507       --
508 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
509 
510             trace
511                (p_msg      => 'END of DropPadPkg'
512                ,p_level    => C_LEVEL_PROCEDURE
513                ,p_module   => l_log_module);
514 
515 END IF;
516 --
517 EXCEPTION
518 WHEN package_does_not_exist THEN
519 
520        IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
521           trace
522             (p_msg      => 'WARNNING: Package '|| l_package_name ||' does not exist '
523             ,p_level    => C_LEVEL_EXCEPTION
524             ,p_module   => l_log_module);
525        END IF;
526 
527        IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
528 
529          trace
530              (p_msg      => 'END of DropPadPkg'
531              ,p_level    => C_LEVEL_PROCEDURE
532              ,p_module   => l_log_module);
533 
534        END IF;
535 
536 WHEN package_locked         THEN
537 
538        IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
539           trace
540             (p_msg      => 'ERROR: XLA_CMP_PACKAGE_LOCKED'
541             ,p_level    => C_LEVEL_EXCEPTION
542             ,p_module   => l_log_module);
543        END IF;
544        xla_exceptions_pkg.raise_message
545                                        ('XLA'
546                                        ,'XLA_CMP_PACKAGE_LOCKED'
547                                        ,'PACKAGE_NAME'
548                                        , l_package_name
549                                );
550 WHEN xla_exceptions_pkg.application_exception THEN
551    RAISE;
552 WHEN OTHERS                                  THEN
553    xla_exceptions_pkg.raise_message
554          (p_location => 'xla_cmp_hash_pkg.DropPadPkg');
555 END DropPadPkg;
556 --
557 --
558 /*======================================================================+
559 |                                                                       |
560 | Public Function                                                       |
561 |                                                                       |
562 | DropPadPkg                                                            |
563 |                                                                       |
564 | Drop PAD package for the current application,product rule code,       |
565 |          , product rule type code                                     |
566 |                                                                       |
567 | Parameters:                                                           |
568 |         1  IN  p_application_id          NUMBER   application id      |
569 |         2  IN  p_product_rule_code       VARCHAR2 product rule        |
573 +======================================================================*/
570 |         3  IN  p_product_rule_type_code  VARCHAR2 product rule type   |
571 |         4  IN  p_amb_context_code        VARCHAR2 AMB context         |
572 |                                                                       |
574 FUNCTION DropPadPkg         ( p_application_id            IN  NUMBER
575                              ,p_product_rule_code         IN  VARCHAR2
576                              ,p_product_rule_type_code    IN  VARCHAR2
577                              ,p_amb_context_code          IN  VARCHAR2
578                              )
579 RETURN BOOLEAN
580 IS
581 l_log_module         VARCHAR2(240);
582 BEGIN
583 --
584 DropPadPkg (p_application_id           => p_application_id
585            ,p_product_rule_code        => p_product_rule_code
586            ,p_product_rule_type_code   => p_product_rule_type_code
587            ,p_amb_context_code         => p_amb_context_code
588            )
589 ;
590 RETURN TRUE;
591 --
592 EXCEPTION
593 WHEN OTHERS   THEN
594   RETURN FALSE;
595 END;
596 --
597 /*======================================================================+
598 |                                                                       |
599 | Public Function                                                       |
600 |                                                                       |
601 | BuildPackageName                                                      |
602 |                                                                       |
603 | Build a package name                                                  |
604 |                                                                       |
605 | Parameters                                                            |
606 |         1  IN  p_application_id          NUMBER   application id      |
607 |         2  IN  p_product_rule_code       VARCHAR2 product rule        |
608 |         3  IN  p_product_rule_type_code  VARCHAR2 product rule type   |
609 |         4  IN  p_amb_context_code        VARCHAR2 AMB context         |
610 +======================================================================*/
611 FUNCTION  BuildPackageName   (p_application_id            IN  NUMBER
612                              ,p_product_rule_code         IN  VARCHAR2
613                              ,p_product_rule_type_code    IN  VARCHAR2
614                              ,p_amb_context_code          IN  VARCHAR2
615                              )
616 RETURN VARCHAR2
617 IS
618 --
619 l_PADId              NUMBER      :=NULL;
620 l_name               VARCHAR2(30):=NULL;
621 l_hashApplication    VARCHAR2(30);
622 --
623 l_pad_name           VARCHAR2(80);
624 l_log_module         VARCHAR2(240);
625 BEGIN
626 
627 IF g_log_enabled THEN
628       l_log_module := C_DEFAULT_MODULE||'.BuildPackageName';
629 END IF;
630 
631 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
632 
633       trace
634          (p_msg      => 'BEGIN of BuildPackageName'
635          ,p_level    => C_LEVEL_PROCEDURE
636          ,p_module   => l_log_module);
637 
638       trace
639          (p_msg      => 'p_application_id = '||p_application_id ||
640                         ' - p_product_rule_code = '||p_product_rule_code ||
641                         ' - p_product_rule_type_code = '||p_product_rule_type_code ||
642                         ' - p_amb_context_code = '||p_amb_context_code
643          ,p_level    => C_LEVEL_PROCEDURE
644          ,p_module   => l_log_module);
645 
646 END IF;
647 
648 IF SearchPAD   ( p_application_id            => p_application_id
649                 ,p_product_rule_code         => p_product_rule_code
650                 ,p_product_rule_type_code    => p_product_rule_type_code
651                 ,p_amb_context_code          => p_amb_context_code
652                 ,p_product_rule_hash_id      => l_PADId)
653 THEN
654     l_name  := GetPackageName (
655                      p_application_id            => p_application_id
656                     ,p_product_rule_type_code    => p_product_rule_type_code
657                     ,p_product_rule_hash_id      => l_PADId
658                    );
659 ELSE
660 
661    l_PADId:= GetPADHashId (p_product_rule_code         => p_product_rule_code
662                           ,p_amb_context_code          => p_amb_context_code
663                           ,p_application_id            => p_application_id
664                           ,p_product_rule_type_code    => p_product_rule_type_code) ;
665 
666 
667    IF  l_PADId IS NOT NULL THEN
668 
669        l_name        := GetPackageName (
670                         p_application_id            => p_application_id
671                        ,p_product_rule_type_code    => p_product_rule_type_code
672                        ,p_product_rule_hash_id      => l_PADId
673                        );
674    ELSE
675       -- raise an error
676       BEGIN
677 
678       SELECT xprt.name
679         INTO l_pad_name
680         FROM xla_product_rules_tl xprt
681        WHERE xprt.application_id         = p_application_id
682          AND xprt.product_rule_code      = p_product_rule_code
683          AND xprt.product_rule_type_code = p_product_rule_type_code
684          AND xprt.amb_context_code       = p_amb_context_code
685          AND nvl(xprt.language ,USERENV('LANG'))  = USERENV('LANG')
686          ;
687 
688       EXCEPTION
689 
690       WHEN OTHERS THEN
694       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
691         l_pad_name  := p_product_rule_code;
692       END;
693 
695           trace
696             (p_msg      => 'ERROR: XLA_CMP_NO_PAD_PACKAGE'
697             ,p_level    => C_LEVEL_EXCEPTION
698             ,p_module   => l_log_module);
699       END IF;
700 
701       xla_exceptions_pkg.raise_message
702                                 ('XLA'
703                                 ,'XLA_CMP_NO_PAD_PACKAGE'
704                                 ,'PAD_NAME'
705                                 , l_pad_name
706                                 ,'OWNER'
707                                 , xla_lookups_pkg.get_meaning(
708                                               p_lookup_type    => 'XLA_OWNER_TYPE'
709                                             , p_lookup_code    => p_product_rule_type_code
710                                               )
711                                );
712 
713     END IF;
714 END IF;
715 
716 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
717      trace
718          (p_msg      => 'END of BuildPackageName'
719          ,p_level    => C_LEVEL_PROCEDURE
720          ,p_module   => l_log_module);
721 END IF;
722 RETURN l_name;
723 EXCEPTION
724 WHEN xla_exceptions_pkg.application_exception THEN
725    RAISE;
726 WHEN OTHERS                                  THEN
727   xla_exceptions_pkg.raise_message
728          (p_location => 'xla_cmp_hash_pkg.BuildPackageName');
729 END BuildPackageName;
730 --=============================================================================
731 --
732 --
733 --
734 --
735 --
736 --
737 --
738 --
739 --
740 --
741 --
742 --
743 --
744 --
745 --
746 --
747 --
748 --
749 --
750 --
751 --
752 --
753 --=============================================================================
754 --=============================================================================
755 --          *********** Initialization routine **********
756 --=============================================================================
757 
758 BEGIN
759 
760    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
761    g_log_enabled    := fnd_log.test
762                           (log_level  => g_log_level
763                           ,module     => C_DEFAULT_MODULE);
764 
765    IF NOT g_log_enabled  THEN
766       g_log_level := C_LEVEL_LOG_DISABLED;
767    END IF;
768 
769 END xla_cmp_hash_pkg; --