1 PACKAGE BODY igs_ad_gen_016 AS
2 /* $Header: IGSAD99B.pls 120.1 2005/09/30 04:45:35 appldev ship $ */
3 /* ------------------------------------------------------------------------------------------------------------------------
4 ||Created By : knag
5 ||Date Created By : 05-NOV-2003
6 ||Purpose:
7 ||Known limitations,enhancements,remarks:
8 ||Change History
9 ||Who When What
10 rbezawad 30-Oct-2004 Added check_security_exception procedure to verity if there is any Security Policy error
11 IGS_SC_POLICY_EXCEPTION or IGS_SC_POLICY_UPD_DEL_EXCEP is set in message stack w.r.t. bug fix 3919112.
12 ||-----------------------------------------------------------------------------------------------------------------------*/
13
14 l_language VARCHAR2(2000);
15 l_security_group_id NUMBER := 0;
16
17 -- Lookups
18 FUNCTION get_lookup (p_lookup_type IN VARCHAR2,
19 p_lookup_code IN VARCHAR2,
20 p_application_id IN NUMBER,
21 p_enabled_flag IN VARCHAR2 DEFAULT NULL)
22 RETURN VARCHAR2 -- Returns TRUE/FALSE
23 IS
24 lv_ret_success VARCHAR2(5);
25 ln_hash_lkcode_idx NUMBER;
26 ln_hash_lktype_idx NUMBER;
27 lb_is_lktype_cached BOOLEAN;
28
29 CURSOR c_lookup (lv_lookup_type VARCHAR2, ln_appl_id NUMBER)
30 IS
31 SELECT lookup_code, enabled_flag, meaning
32 FROM fnd_lookup_values
33 WHERE lookup_type = lv_lookup_type
34 AND view_application_id = ln_appl_id
35 AND language = l_language
36 AND security_group_id = l_security_group_id;
37
38 lr_fetched_lkcode c_lookup%ROWTYPE;
39
40 BEGIN
41 IF l_language IS NULL THEN
42 SELECT USERENV('LANG') INTO l_language FROM DUAL;
43 END IF;
44
45 -- If parameters are not valid return
46 IF (p_lookup_code IS NULL OR p_lookup_type IS NULL OR p_application_id IS NULL) THEN
47 RETURN ('FALSE');
48
49 ELSE
50 lv_ret_success := 'FALSE';
51 -- Get the hash value of the Type + Code + View Appl ID
52 ln_hash_lkcode_idx := DBMS_UTILITY.get_hash_value (
53 p_lookup_type||'@*?'||p_lookup_code||'@*?'||igs_ge_number.to_cann(p_application_id)
54 ||'@*?'||l_language||'@*?'||igs_ge_number.to_cann(l_security_group_id),
55 1000,
56 25000);
57
58 IF g_hash_lookup_code_tab.EXISTS(ln_hash_lkcode_idx) THEN
59 lv_ret_success := 'TRUE';
60 IF p_enabled_flag IS NOT NULL AND
61 p_enabled_flag <> g_hash_lookup_code_tab(ln_hash_lkcode_idx).enabled_flag THEN
62 lv_ret_success := 'FALSE';
63 END IF;
64 RETURN (lv_ret_success);
65
66 ELSE
67 -- Check if the Type is already cached
68 -- Get the hash value of the Type + View Appl ID
69 ln_hash_lktype_idx := DBMS_UTILITY.get_hash_value (
70 p_lookup_type||'@*?'||igs_ge_number.to_cann(p_application_id)
71 ||'@*?'||igs_ge_number.to_cann(l_security_group_id),
72 1000,
73 25000);
74
75 IF g_hash_lookup_type_tab.EXISTS(ln_hash_lktype_idx) THEN
76 -- Since all lookup codes are already hashed,
77 -- so the parameter one is invalid
78 RETURN ('FALSE');
79
80 ELSE
81 -- Type is not cached so cache it.
82 lb_is_lktype_cached := FALSE;
83
84 lv_ret_success := 'FALSE';
85 OPEN c_lookup (p_lookup_type, p_application_id);
86 LOOP
87 FETCH c_lookup into lr_fetched_lkcode;
88 EXIT WHEN c_lookup%NOTFOUND;
89
90 -- Cache the Lookup Type only once
91 IF NOT lb_is_lktype_cached THEN
92 lb_is_lktype_cached := TRUE;
93 g_hash_lookup_type_tab(ln_hash_lktype_idx) := p_lookup_type;
94 END IF;
95
96 ln_hash_lkcode_idx := DBMS_UTILITY.get_hash_value (
97 p_lookup_type||'@*?'||lr_fetched_lkcode.lookup_code||'@*?'||igs_ge_number.to_cann(p_application_id)
98 ||'@*?'||l_language||'@*?'||igs_ge_number.to_cann(l_security_group_id),
99 1000,
100 25000);
101
102 g_hash_lookup_code_tab(ln_hash_lkcode_idx).lookup_code := lr_fetched_lkcode.lookup_code;
103 g_hash_lookup_code_tab(ln_hash_lkcode_idx).enabled_flag := lr_fetched_lkcode.enabled_flag;
104 g_hash_lookup_code_tab(ln_hash_lkcode_idx).meaning := lr_fetched_lkcode.meaning;
105
106
107 IF p_lookup_code = lr_fetched_lkcode.lookup_code THEN
108 lv_ret_success := 'TRUE';
109 IF p_enabled_flag IS NOT NULL AND
110 p_enabled_flag <> lr_fetched_lkcode.enabled_flag THEN
111 lv_ret_success := 'FALSE';
112 END IF;
113 END IF;
114
115 END LOOP;
116 CLOSE c_lookup;
117
118 RETURN (lv_ret_success);
119
120 END IF;
121 END IF;
122 END IF;
123 END get_lookup;
124
125 FUNCTION get_lkup_meaning (p_lookup_type IN VARCHAR2,
126 p_lookup_code IN VARCHAR2,
127 p_application_id IN NUMBER)
128 RETURN VARCHAR2 -- Returns meaning
129 IS
130 lv_ret_success VARCHAR2(5);
131 ln_hash_lkcode_idx NUMBER;
132 ln_hash_lktype_idx NUMBER;
133 lb_is_lktype_cached BOOLEAN;
134
135 CURSOR c_lookup (lv_lookup_type VARCHAR2, ln_appl_id NUMBER)
136 IS
137 SELECT lookup_code, enabled_flag, meaning
138 FROM fnd_lookup_values
139 WHERE lookup_type = lv_lookup_type
140 AND view_application_id = ln_appl_id
141 AND language = l_language
142 AND security_group_id = l_security_group_id;
143
144 lr_fetched_lkcode c_lookup%ROWTYPE;
145
146 BEGIN
147 IF l_language IS NULL THEN
148 SELECT USERENV('LANG') INTO l_language FROM DUAL;
149 END IF;
150
151 -- If parameters are not valid return
152 IF (p_lookup_code IS NULL OR p_lookup_type IS NULL OR p_application_id IS NULL) THEN
153 RETURN ('FALSE');
154
155 ELSE
156 IF get_lookup (p_lookup_type => p_lookup_type,
157 p_lookup_code => p_lookup_code,
158 p_application_id => p_application_id) = 'TRUE' THEN
159
160 -- Get the hash value of the Type + Code + View Appl ID
161 ln_hash_lkcode_idx := DBMS_UTILITY.get_hash_value (
162 p_lookup_type||'@*?'||p_lookup_code||'@*?'||igs_ge_number.to_cann(p_application_id)
163 ||'@*?'||l_language||'@*?'||igs_ge_number.to_cann(l_security_group_id),
164 1000,
165 25000);
166
167 RETURN (g_hash_lookup_code_tab(ln_hash_lkcode_idx).meaning);
168 END IF;
169 RETURN (NULL);
170 END IF;
171 END get_lkup_meaning;
172
173 -- Messages
174 FUNCTION is_err_msg (p_message_name IN VARCHAR2,
175 p_application_short_name IN VARCHAR2)
176 RETURN VARCHAR2 -- Returns TRUE/FALSE
177 IS
178 lv_ret_success VARCHAR2(5);
179 ln_hash_msg_type_idx NUMBER;
180
181 CURSOR c_appl_id (lv_appl_short_name VARCHAR2)
182 IS
183 SELECT application_id
184 FROM fnd_application
185 WHERE application_short_name = lv_appl_short_name;
186
187 ln_application_id fnd_application.application_id%TYPE;
188
189 CURSOR c_msg_type (lv_message_name VARCHAR2, ln_appl_id NUMBER)
190 IS
191 SELECT NVL(type,'ERROR') type
192 FROM fnd_new_messages
193 WHERE message_name = lv_message_name
194 AND application_id = ln_appl_id
195 AND language_code = l_language;
196
197 lr_fetched_msg_type c_msg_type%ROWTYPE;
198
199 BEGIN
200 IF l_language IS NULL THEN
201 SELECT USERENV('LANG') INTO l_language FROM DUAL;
202 END IF;
203
204 OPEN c_appl_id (p_application_short_name);
205 FETCH c_appl_id INTO ln_application_id;
206 CLOSE c_appl_id;
207
208 -- If parameters are not valid return
209 IF (p_message_name IS NULL OR ln_application_id IS NULL) THEN
210 RETURN ('FALSE');
211
212 ELSE
213 lv_ret_success := 'FALSE';
214 -- Get the hash value of the Type + Code + View Appl ID
215 ln_hash_msg_type_idx := DBMS_UTILITY.get_hash_value (
216 p_message_name||'@*?'||igs_ge_number.to_cann(ln_application_id)||'@*?'||l_language,
217 1000,
218 25000);
219
220 IF g_hash_msg_type_tab.EXISTS(ln_hash_msg_type_idx) THEN
221 lv_ret_success := 'TRUE';
222 IF NVL(g_hash_msg_type_tab(ln_hash_msg_type_idx),'@*?') <> 'ERROR' THEN
223 lv_ret_success := 'FALSE';
224 END IF;
225 RETURN (lv_ret_success);
226
227 ELSE
228 lv_ret_success := 'FALSE';
229 OPEN c_msg_type (p_message_name, ln_application_id);
230 LOOP
231 FETCH c_msg_type into lr_fetched_msg_type;
232 EXIT WHEN c_msg_type%NOTFOUND;
233
234 ln_hash_msg_type_idx := DBMS_UTILITY.get_hash_value (
235 p_message_name||'@*?'||igs_ge_number.to_cann(ln_application_id)||'@*?'||l_language,
236 1000,
237 25000);
238
239 g_hash_msg_type_tab(ln_hash_msg_type_idx) := lr_fetched_msg_type.type;
240
241 lv_ret_success := 'TRUE';
242 IF NVL(lr_fetched_msg_type.type,'@*?') <> 'ERROR' THEN
243 lv_ret_success := 'FALSE';
244 END IF;
245 END LOOP;
246 CLOSE c_msg_type;
247
248 RETURN (lv_ret_success);
249 END IF;
250 END IF;
251 END is_err_msg;
252
253 -- Import process source categories
254 FUNCTION chk_src_cat (p_source_type_id IN NUMBER,
255 p_category IN VARCHAR2)
256 RETURN BOOLEAN
257 IS
258 lv_ret_success VARCHAR2(5);
259 lv_include_ind igs_ad_source_cat_all.include_ind%TYPE;
260 lv_detail_level_ind igs_ad_source_cat_all.detail_level_ind%TYPE;
261 lv_discrepancy_rule_cd igs_ad_source_cat_all.discrepancy_rule_cd%TYPE;
262 BEGIN
263 lv_include_ind := 'Y';
264 lv_ret_success := get_srccat (p_source_type_id => p_source_type_id,
265 p_category_name => p_category,
266 p_include_ind => lv_include_ind,
267 p_detail_level_ind => lv_detail_level_ind,
268 p_discrepancy_rule_cd => lv_discrepancy_rule_cd);
269
270 IF lv_ret_success = 'TRUE' THEN
271 RETURN (TRUE);
272 ELSE
273 RETURN (FALSE);
274 END IF;
275 END chk_src_cat;
276
277 FUNCTION find_source_cat_rule (p_source_type_id IN NUMBER,
278 p_category IN VARCHAR2)
279 RETURN VARCHAR2
280 IS
281 lv_ret_success VARCHAR2(5);
282 lv_include_ind igs_ad_source_cat_all.include_ind%TYPE;
283 lv_detail_level_ind igs_ad_source_cat_all.detail_level_ind%TYPE;
284 lv_discrepancy_rule_cd igs_ad_source_cat_all.discrepancy_rule_cd%TYPE;
285 BEGIN
286 lv_ret_success := get_srccat (p_source_type_id => p_source_type_id,
287 p_category_name => p_category,
288 p_include_ind => lv_include_ind,
289 p_detail_level_ind => lv_detail_level_ind,
290 p_discrepancy_rule_cd => lv_discrepancy_rule_cd);
291
292 RETURN (lv_discrepancy_rule_cd);
293 END find_source_cat_rule;
294
295 FUNCTION get_srccat (p_source_type_id IN NUMBER,
296 p_category_name IN VARCHAR2,
297 p_include_ind IN VARCHAR2 DEFAULT NULL)
298 RETURN VARCHAR2 -- Returns TRUE/FALSE
299 IS
300 lv_detail_level_ind igs_ad_source_cat_all.detail_level_ind%TYPE;
301 lv_discrepancy_rule_cd igs_ad_source_cat_all.discrepancy_rule_cd%TYPE;
302 BEGIN
303 RETURN (get_srccat (p_source_type_id => p_source_type_id,
304 p_category_name => p_category_name,
305 p_include_ind => p_include_ind,
306 p_detail_level_ind => lv_detail_level_ind,
307 p_discrepancy_rule_cd => lv_discrepancy_rule_cd));
308 END get_srccat;
309
310 FUNCTION get_srccat (p_source_type_id IN NUMBER,
311 p_category_name IN VARCHAR2,
312 p_include_ind IN VARCHAR2 DEFAULT NULL,
313 p_detail_level_ind IN OUT NOCOPY VARCHAR2,
314 p_discrepancy_rule_cd OUT NOCOPY VARCHAR2)
315 RETURN VARCHAR2 -- Returns TRUE/FALSE
316 IS
317 lv_ret_success VARCHAR2(5);
318 ln_hash_srccat_idx NUMBER;
319 ln_hash_stypeid_idx NUMBER;
320 lb_is_stypeid_cached BOOLEAN;
321
322 CURSOR c_srccat (ln_source_type_id NUMBER)
323 IS
324 SELECT category_name, include_ind, detail_level_ind, discrepancy_rule_cd
325 FROM igs_ad_source_cat_all
326 WHERE source_type_id = ln_source_type_id;
327
328 lr_fetched_srccat c_srccat%ROWTYPE;
329
330 BEGIN
331 -- If parameters are not valid return
332 IF (p_source_type_id IS NULL OR p_category_name IS NULL) THEN
333 RETURN ('FALSE');
334
335 ELSE
336 lv_ret_success := 'FALSE';
337 -- Get the hash value of the Source Type ID + Category
338 ln_hash_srccat_idx := DBMS_UTILITY.get_hash_value (
339 igs_ge_number.to_cann(p_source_type_id)||'@*?'||p_category_name,
340 1000,
341 25000);
342
343 IF g_hash_srccat_tab.EXISTS(ln_hash_srccat_idx) THEN
344 lv_ret_success := 'TRUE';
345 IF p_include_ind IS NOT NULL AND
346 p_include_ind <> g_hash_srccat_tab(ln_hash_srccat_idx).include_ind THEN
347 lv_ret_success := 'FALSE';
348 END IF;
349
350 IF p_detail_level_ind IS NOT NULL AND
354
351 p_detail_level_ind <> NVL(g_hash_srccat_tab(ln_hash_srccat_idx).detail_level_ind,'@*?') THEN
352 lv_ret_success := 'FALSE';
353 END IF;
355 IF lv_ret_success = 'TRUE' THEN
356 IF p_detail_level_ind IS NULL THEN
357 p_detail_level_ind := g_hash_srccat_tab(ln_hash_srccat_idx).detail_level_ind;
358 END IF;
359
360 IF p_detail_level_ind = 'Y' THEN
361 -- Get discrepancy rule from attribute level discrepancy rule
362 p_discrepancy_rule_cd := 'D';
363 ELSE
364 -- Get discrepancy rule for the entity (category)
365 p_discrepancy_rule_cd := g_hash_srccat_tab(ln_hash_srccat_idx).discrepancy_rule_cd;
366 END IF;
367 END IF;
368 RETURN (lv_ret_success);
369
370 ELSE
371 -- Check if the Source Type ID is already cached
372 -- Get the hash value of the Source Type ID
373 ln_hash_stypeid_idx := DBMS_UTILITY.get_hash_value (
374 igs_ge_number.to_cann(p_source_type_id),
375 1000,
376 25000);
377
378 IF g_hash_stypeid_tab.EXISTS(ln_hash_stypeid_idx) THEN
379 -- Since all categories are already hashed,
380 -- so the parameter one is invalid
381 RETURN ('FALSE');
382
383 ELSE
384 -- Source Type ID is not cached so cache it.
385 lb_is_stypeid_cached := FALSE;
386
387 lv_ret_success := 'FALSE';
388 OPEN c_srccat (p_source_type_id);
389 LOOP
390 FETCH c_srccat into lr_fetched_srccat;
391 EXIT WHEN c_srccat%NOTFOUND;
392
393 -- Cache the Source Type ID only once
394 IF NOT lb_is_stypeid_cached THEN
395 lb_is_stypeid_cached := TRUE;
396 g_hash_stypeid_tab(ln_hash_stypeid_idx) := p_source_type_id;
397 END IF;
398
399 ln_hash_srccat_idx := DBMS_UTILITY.get_hash_value (
400 igs_ge_number.to_cann(p_source_type_id)||'@*?'||lr_fetched_srccat.category_name,
401 1000,
402 25000);
403
404 g_hash_srccat_tab(ln_hash_srccat_idx).category_name := lr_fetched_srccat.category_name;
405 g_hash_srccat_tab(ln_hash_srccat_idx).include_ind := lr_fetched_srccat.include_ind;
406 g_hash_srccat_tab(ln_hash_srccat_idx).detail_level_ind := lr_fetched_srccat.detail_level_ind;
407 g_hash_srccat_tab(ln_hash_srccat_idx).discrepancy_rule_cd := lr_fetched_srccat.discrepancy_rule_cd;
408
409 IF p_category_name = g_hash_srccat_tab(ln_hash_srccat_idx).category_name THEN
410 lv_ret_success := 'TRUE';
411
412 IF p_include_ind IS NOT NULL AND
413 p_include_ind <> g_hash_srccat_tab(ln_hash_srccat_idx).include_ind THEN
414 lv_ret_success := 'FALSE';
415 END IF;
416
417 IF p_detail_level_ind IS NOT NULL AND
418 p_detail_level_ind <> NVL(g_hash_srccat_tab(ln_hash_srccat_idx).detail_level_ind,'@*?') THEN
419 lv_ret_success := 'FALSE';
420 END IF;
421
422 IF lv_ret_success = 'TRUE' THEN
423 IF p_detail_level_ind IS NULL THEN
424 p_detail_level_ind := g_hash_srccat_tab(ln_hash_srccat_idx).detail_level_ind;
425 END IF;
426
427 IF p_detail_level_ind = 'Y' THEN
428 -- Get discrepancy rule from attribute level discrepancy rule
429 p_discrepancy_rule_cd := 'D';
430 ELSE
431 -- Get discrepancy rule for the entity (category)
432 p_discrepancy_rule_cd := g_hash_srccat_tab(ln_hash_srccat_idx).discrepancy_rule_cd;
433 END IF;
434 END IF;
435 END IF;
436
437 END LOOP;
438 CLOSE c_srccat;
439
440 RETURN (lv_ret_success);
441 END IF;
442 END IF;
443 END IF;
444 END get_srccat;
445
446 -- Code Classes
447 FUNCTION get_codeclass (p_class IN VARCHAR2,
448 p_code_id IN NUMBER)
449 RETURN VARCHAR2 -- Returns TRUE/FALSE
450 IS
451 ln_code_id igs_ad_code_classes.code_id%TYPE;
452 lv_name igs_ad_code_classes.name%TYPE;
453 lv_system_status igs_ad_code_classes.system_status%TYPE;
454 lv_closed_ind igs_ad_code_classes.closed_ind%TYPE;
455 BEGIN
456 ln_code_id := p_code_id;
457 lv_closed_ind := 'N';
458 RETURN (get_codeclass (p_class => p_class,
459 p_code_id => ln_code_id,
460 p_name => lv_name,
461 p_system_status => lv_system_status,
462 p_closed_ind => lv_closed_ind));
463 END get_codeclass;
464
465 FUNCTION get_codeclass (p_class IN VARCHAR2,
466 p_name IN VARCHAR2)
467 RETURN VARCHAR2 -- Returns TRUE/FALSE
468 IS
469 ln_code_id igs_ad_code_classes.code_id%TYPE;
470 lv_name igs_ad_code_classes.name%TYPE;
471 lv_system_status igs_ad_code_classes.system_status%TYPE;
472 lv_closed_ind igs_ad_code_classes.closed_ind%TYPE;
473 BEGIN
474 lv_name := p_name;
475 lv_closed_ind := 'N';
476 RETURN (get_codeclass (p_class => p_class,
477 p_code_id => ln_code_id,
478 p_name => lv_name,
479 p_system_status => lv_system_status,
480 p_closed_ind => lv_closed_ind));
481 END get_codeclass;
482
483 FUNCTION get_codeclass (p_class IN VARCHAR2,
484 p_code_id IN OUT NOCOPY NUMBER,
485 p_name IN OUT NOCOPY VARCHAR2)
486 RETURN VARCHAR2 -- Returns TRUE/FALSE
487 IS
488 lv_system_status igs_ad_code_classes.system_status%TYPE;
489 lv_closed_ind igs_ad_code_classes.closed_ind%TYPE;
490 BEGIN
491 lv_closed_ind := 'N';
492 RETURN (get_codeclass (p_class => p_class,
493 p_code_id => p_code_id,
494 p_name => p_name,
495 p_system_status => lv_system_status,
496 p_closed_ind => lv_closed_ind));
497 END get_codeclass;
498
499 FUNCTION get_def_code (p_class IN VARCHAR2,
500 p_code_id OUT NOCOPY NUMBER,
501 p_name OUT NOCOPY VARCHAR2,
502 p_system_status IN VARCHAR2)
503 RETURN VARCHAR2 -- Returns TRUE/FALSE
504 IS
505 lv_ret_success VARCHAR2(5);
506 ln_code_id igs_ad_code_classes.code_id%TYPE;
507 lv_name igs_ad_code_classes.name%TYPE;
508 lv_system_status igs_ad_code_classes.system_status%TYPE;
509 lv_closed_ind igs_ad_code_classes.closed_ind%TYPE;
510 ln_hash_dflt_cc_id_hashidx_idx NUMBER;
511 ln_hash_ccode_idx NUMBER;
512 BEGIN
513 -- If parameters are not valid return
514 IF (p_class IS NULL OR p_system_status IS NULL) THEN
515 RETURN ('FALSE');
516
517 ELSE
518 ln_hash_dflt_cc_id_hashidx_idx := DBMS_UTILITY.get_hash_value (
519 p_class||'@*?'||p_system_status||'@*?'||'Y',
520 1000,
521 25000);
522
523 IF g_hash_dflt_cc_id_hashidx_tab.EXISTS(ln_hash_dflt_cc_id_hashidx_idx) THEN
524 ln_hash_ccode_idx := g_hash_dflt_cc_id_hashidx_tab(ln_hash_dflt_cc_id_hashidx_idx);
525 ln_code_id := g_hash_ccode_tab(ln_hash_ccode_idx).code_id;
526 lv_name := g_hash_ccode_tab(ln_hash_ccode_idx).name;
527 lv_ret_success := 'TRUE';
528 END IF;
529
530 IF ln_code_id IS NULL THEN
531 lv_system_status := p_system_status;
532 lv_closed_ind := 'N';
533 lv_ret_success := get_codeclass (p_class => p_class,
534 p_code_id => ln_code_id,
535 p_name => lv_name,
536 p_system_status => lv_system_status,
537 p_closed_ind => lv_closed_ind);
538 END IF;
539 p_code_id := ln_code_id;
540 p_name := lv_name;
541 RETURN (lv_ret_success);
542 END IF;
543 END get_def_code;
544
545 FUNCTION get_codeclass (p_class IN VARCHAR2,
546 p_code_id IN OUT NOCOPY NUMBER,
547 p_name IN OUT NOCOPY VARCHAR2,
548 p_system_status IN OUT NOCOPY VARCHAR2,
549 p_closed_ind IN VARCHAR2 DEFAULT NULL)
550 RETURN VARCHAR2 -- Returns TRUE/FALSE
551 IS
552 lv_ret_success VARCHAR2(5);
553 ln_hash_name_cc_id_hashidx_idx NUMBER;
554 ln_hash_dflt_cc_id_hashidx_idx NUMBER;
555 ln_hash_ccode_idx NUMBER;
556 ln_hash_cclass_idx NUMBER;
557 lb_is_cclass_cached BOOLEAN;
558
559 CURSOR c_ccode (lv_class VARCHAR2)
560 IS
561 SELECT code_id, name, system_status, closed_ind, system_default
562 FROM igs_ad_code_classes
563 WHERE class = lv_class
564 AND CLASS_TYPE_CODE='ADM_CODE_CLASSES';
565
566 lr_fetched_ccode c_ccode%ROWTYPE;
567
568 BEGIN
569 -- If parameters are not valid return
570 IF (p_class IS NULL OR (p_code_id IS NULL AND p_name IS NULL)) AND
571 (p_class IS NULL OR p_system_status IS NULL) THEN
572 RETURN ('FALSE');
573
574 ELSE
575 -- Code name has been passed
576 IF p_name IS NOT NULL THEN
577 -- Get the hash value of the Class + Code Name
578 ln_hash_name_cc_id_hashidx_idx := DBMS_UTILITY.get_hash_value (
579 p_class||'@*?'||p_name,
580 1000,
581 25000);
582
583 IF g_hash_name_cc_id_hashidx_tab.EXISTS(ln_hash_name_cc_id_hashidx_idx) THEN
587 ELSIF p_code_id IS NOT NULL THEN
584 ln_hash_ccode_idx := g_hash_name_cc_id_hashidx_tab(ln_hash_name_cc_id_hashidx_idx);
585 END IF;
586
588 -- Get the hash value of the Type + Code ID
589 ln_hash_ccode_idx := DBMS_UTILITY.get_hash_value (
590 p_class||'@*?'||igs_ge_number.to_cann(p_code_id),
591 1000,
592 25000);
593 END IF;
594
595 lv_ret_success := 'TRUE';
596
597 IF ln_hash_ccode_idx IS NOT NULL AND
598 g_hash_ccode_tab.EXISTS(ln_hash_ccode_idx) THEN
599 IF p_code_id IS NOT NULL AND
600 p_code_id <> g_hash_ccode_tab(ln_hash_ccode_idx).code_id THEN
601 lv_ret_success := 'FALSE';
602 END IF;
603
604 IF p_name IS NOT NULL AND
605 p_name <> g_hash_ccode_tab(ln_hash_ccode_idx).name THEN
606 lv_ret_success := 'FALSE';
607 END IF;
608
609 IF p_system_status IS NOT NULL AND
610 p_system_status <> NVL(g_hash_ccode_tab(ln_hash_ccode_idx).system_status,'@*?') THEN
611 lv_ret_success := 'FALSE';
612 END IF;
613
614 IF p_closed_ind IS NOT NULL AND
615 p_closed_ind <> g_hash_ccode_tab(ln_hash_ccode_idx).closed_ind THEN
616 lv_ret_success := 'FALSE';
617 END IF;
618
619 IF lv_ret_success = 'TRUE' THEN
620 IF p_code_id IS NULL THEN
621 p_code_id := g_hash_ccode_tab(ln_hash_ccode_idx).code_id;
622 END IF;
623
624 IF p_name IS NULL THEN
625 p_name := g_hash_ccode_tab(ln_hash_ccode_idx).name;
626 END IF;
627
628 IF p_system_status IS NULL THEN
629 p_system_status := g_hash_ccode_tab(ln_hash_ccode_idx).system_status;
630 END IF;
631 END IF;
632 RETURN (lv_ret_success);
633
634 ELSE
635 -- Check if the Class is already cached
636 -- Get the hash value of the Class
637 ln_hash_cclass_idx := DBMS_UTILITY.get_hash_value (
638 p_class,
639 1000,
640 25000);
641
642 IF g_hash_cclass_tab.EXISTS(ln_hash_cclass_idx) THEN
643 -- Since all codes are already hashed,
644 -- so the parameter one is invalid
645 RETURN ('FALSE');
646
647 ELSE
648 -- Class is not cached so cache it.
649 lb_is_cclass_cached := FALSE;
650
651 lv_ret_success := 'FALSE';
652 OPEN c_ccode (p_class);
653 LOOP
654 FETCH c_ccode into lr_fetched_ccode;
655 EXIT WHEN c_ccode%NOTFOUND;
656
657 -- Cache the Class only once
658 IF NOT lb_is_cclass_cached THEN
659 lb_is_cclass_cached := TRUE;
660 g_hash_cclass_tab(ln_hash_cclass_idx) := p_class;
661 END IF;
662
663 ln_hash_ccode_idx := DBMS_UTILITY.get_hash_value (
664 p_class||'@*?'||igs_ge_number.to_cann(lr_fetched_ccode.code_id),
665 1000,
666 25000);
667
668 g_hash_ccode_tab(ln_hash_ccode_idx).code_id := lr_fetched_ccode.code_id;
669 g_hash_ccode_tab(ln_hash_ccode_idx).name := lr_fetched_ccode.name;
670 g_hash_ccode_tab(ln_hash_ccode_idx).system_status := lr_fetched_ccode.system_status;
671 g_hash_ccode_tab(ln_hash_ccode_idx).closed_ind := lr_fetched_ccode.closed_ind;
672 g_hash_ccode_tab(ln_hash_ccode_idx).system_default := lr_fetched_ccode.system_default;
673
674 ln_hash_name_cc_id_hashidx_idx := DBMS_UTILITY.get_hash_value (
675 p_class||'@*?'||lr_fetched_ccode.name,
676 1000,
677 25000);
678
679 g_hash_name_cc_id_hashidx_tab(ln_hash_name_cc_id_hashidx_idx) := ln_hash_ccode_idx;
680
681 IF lr_fetched_ccode.closed_ind = 'N' AND
682 NVL(lr_fetched_ccode.system_default,'N') = 'Y' AND
683 lr_fetched_ccode.system_status IS NOT NULL THEN
684 ln_hash_dflt_cc_id_hashidx_idx := DBMS_UTILITY.get_hash_value (
685 p_class||'@*?'||lr_fetched_ccode.system_status||'@*?'||'Y',
686 1000,
687 25000);
688
689 g_hash_dflt_cc_id_hashidx_tab(ln_hash_dflt_cc_id_hashidx_idx) := ln_hash_ccode_idx;
690 END IF;
691
692 IF (NVL(p_code_id,-1) = g_hash_ccode_tab(ln_hash_ccode_idx).code_id) OR
693 (NVL(p_name,'@*?') = g_hash_ccode_tab(ln_hash_ccode_idx).name) OR
694 (NVL(p_system_status,'@*?') = NVL(g_hash_ccode_tab(ln_hash_ccode_idx).system_status,'?*@') AND
695 p_code_id IS NULL AND p_name IS NULL) THEN
696 lv_ret_success := 'TRUE';
697
698 IF p_code_id IS NOT NULL AND
699 p_code_id <> g_hash_ccode_tab(ln_hash_ccode_idx).code_id THEN
700 lv_ret_success := 'FALSE';
701 END IF;
702
703 IF p_name IS NOT NULL AND
704 p_name <> g_hash_ccode_tab(ln_hash_ccode_idx).name THEN
705 lv_ret_success := 'FALSE';
706 END IF;
707
708 IF p_system_status IS NOT NULL AND
709 p_system_status <> NVL(g_hash_ccode_tab(ln_hash_ccode_idx).system_status,'@*?') THEN
710 lv_ret_success := 'FALSE';
711 END IF;
712
713 IF p_closed_ind IS NOT NULL AND
714 p_closed_ind <> g_hash_ccode_tab(ln_hash_ccode_idx).closed_ind THEN
715 lv_ret_success := 'FALSE';
716 END IF;
717
718 IF lv_ret_success = 'TRUE' THEN
719 IF p_code_id IS NULL THEN
720 p_code_id := g_hash_ccode_tab(ln_hash_ccode_idx).code_id;
721 END IF;
722
723 IF p_name IS NULL THEN
724 p_name := g_hash_ccode_tab(ln_hash_ccode_idx).name;
725 END IF;
726
727 IF p_system_status IS NULL THEN
728 p_system_status := g_hash_ccode_tab(ln_hash_ccode_idx).system_status;
729 END IF;
730 END IF;
731 END IF;
732
733 END LOOP;
734 CLOSE c_ccode;
735
736 RETURN (lv_ret_success);
737 END IF;
738 END IF;
739 END IF;
740 END get_codeclass;
741
742 -- Application Type to Admission Process Category
743 FUNCTION get_appl_type_apc (p_application_type IN VARCHAR2)
744 RETURN VARCHAR2 -- Returns TRUE/FALSE
745 IS
746 lv_admission_cat igs_ad_prcs_cat.admission_cat%TYPE;
747 lv_s_admission_process_type igs_ad_prcs_cat.s_admission_process_type%TYPE;
748 BEGIN
749 RETURN (get_appl_type_apc (p_application_type => p_application_type,
750 p_admission_cat => lv_admission_cat,
751 p_s_admission_process_type => lv_s_admission_process_type));
752 END get_appl_type_apc;
753
754 FUNCTION get_appl_type_apc (p_application_type IN VARCHAR2,
755 p_admission_cat OUT NOCOPY VARCHAR2,
756 p_s_admission_process_type OUT NOCOPY VARCHAR2)
757 RETURN VARCHAR2 -- Returns TRUE/FALSE
758 IS
759 lv_ret_success VARCHAR2(5);
760 ln_hash_appl_type_apc_idx NUMBER;
761
762 CURSOR c_appl_type_apc
763 IS
764 SELECT admission_application_type, admission_cat, s_admission_process_type
765 FROM igs_ad_ss_appl_typ;
766
767 lr_fetched_appl_type_apc c_appl_type_apc%ROWTYPE;
768
769 BEGIN
770
771 -- If parameters are not valid return
772 IF (p_application_type IS NULL) THEN
773 RETURN ('FALSE');
774
775 ELSE
776 -- Get the hash value of the Application Type
777 ln_hash_appl_type_apc_idx := DBMS_UTILITY.get_hash_value (
778 p_application_type,
779 1000,
780 25000);
781
782 IF g_hash_appl_type_apc_tab.EXISTS(ln_hash_appl_type_apc_idx) THEN
783 p_admission_cat := g_hash_appl_type_apc_tab(ln_hash_appl_type_apc_idx).admission_cat;
784 p_s_admission_process_type := g_hash_appl_type_apc_tab(ln_hash_appl_type_apc_idx).s_admission_process_type;
785 RETURN ('TRUE');
786
787 ELSE
788 IF g_hash_appl_type_apc_tab.COUNT > 0 THEN
789 RETURN ('FALSE');
790
791 ELSE
792 lv_ret_success := 'FALSE';
793
794 OPEN c_appl_type_apc;
795 LOOP
796 FETCH c_appl_type_apc into lr_fetched_appl_type_apc;
797 EXIT WHEN c_appl_type_apc%NOTFOUND;
798
799 ln_hash_appl_type_apc_idx := DBMS_UTILITY.get_hash_value (
800 lr_fetched_appl_type_apc.admission_application_type,
801 1000,
802 25000);
803
804 g_hash_appl_type_apc_tab(ln_hash_appl_type_apc_idx).admission_cat := lr_fetched_appl_type_apc.admission_cat;
805 g_hash_appl_type_apc_tab(ln_hash_appl_type_apc_idx).s_admission_process_type := lr_fetched_appl_type_apc.s_admission_process_type;
806
807 IF p_application_type = lr_fetched_appl_type_apc.admission_application_type THEN
808 p_admission_cat := lr_fetched_appl_type_apc.admission_cat;
809 p_s_admission_process_type := lr_fetched_appl_type_apc.s_admission_process_type;
810 lv_ret_success := 'TRUE';
811 END IF;
812
813 END LOOP;
814 CLOSE c_appl_type_apc;
815
816 RETURN (lv_ret_success);
817
818 END IF;
819 END IF;
820 END IF;
821 END get_appl_type_apc;
822
823 -- Admission Process Category Steps
824 FUNCTION get_apcs (p_admission_cat IN VARCHAR2,
825 p_s_admission_process_type IN VARCHAR2,
826 p_s_admission_step_type IN VARCHAR2)
827 RETURN VARCHAR2 -- Returns TRUE/FALSE
828 IS
829 lv_mandatory_step_ind igs_ad_prcs_cat_step_all.mandatory_step_ind%TYPE;
830 ln_step_type_restriction_num igs_ad_prcs_cat_step_all.step_type_restriction_num%TYPE;
831 BEGIN
832 RETURN (get_apcs (p_admission_cat => p_admission_cat,
833 p_s_admission_process_type => p_s_admission_process_type,
834 p_s_admission_step_type => p_s_admission_step_type,
835 p_mandatory_step_ind => lv_mandatory_step_ind,
836 p_step_type_restriction_num => ln_step_type_restriction_num));
837 END get_apcs;
838
839 FUNCTION get_apcs_mnd (p_admission_cat IN VARCHAR2,
840 p_s_admission_process_type IN VARCHAR2,
841 p_s_admission_step_type IN VARCHAR2)
842 RETURN VARCHAR2 -- Returns TRUE/FALSE
843 IS
844 lv_mandatory_step_ind igs_ad_prcs_cat_step_all.mandatory_step_ind%TYPE;
845 ln_step_type_restriction_num igs_ad_prcs_cat_step_all.step_type_restriction_num%TYPE;
846 BEGIN
847 lv_mandatory_step_ind := 'Y';
848 RETURN (get_apcs (p_admission_cat => p_admission_cat,
849 p_s_admission_process_type => p_s_admission_process_type,
850 p_s_admission_step_type => p_s_admission_step_type,
851 p_mandatory_step_ind => lv_mandatory_step_ind,
852 p_step_type_restriction_num => ln_step_type_restriction_num));
853 END get_apcs_mnd;
854
855 FUNCTION get_apcs (p_admission_cat IN VARCHAR2,
856 p_s_admission_process_type IN VARCHAR2,
857 p_s_admission_step_type IN VARCHAR2,
858 p_mandatory_step_ind IN OUT NOCOPY VARCHAR2)
859 RETURN VARCHAR2 -- Returns TRUE/FALSE
860 IS
861 ln_step_type_restriction_num igs_ad_prcs_cat_step_all.step_type_restriction_num%TYPE;
862 BEGIN
863 RETURN (get_apcs (p_admission_cat => p_admission_cat,
864 p_s_admission_process_type => p_s_admission_process_type,
865 p_s_admission_step_type => p_s_admission_step_type,
866 p_mandatory_step_ind => p_mandatory_step_ind,
867 p_step_type_restriction_num => ln_step_type_restriction_num));
868 END get_apcs;
869
870 FUNCTION get_apcs (p_admission_cat IN VARCHAR2,
871 p_s_admission_process_type IN VARCHAR2,
872 p_s_admission_step_type IN VARCHAR2,
873 p_mandatory_step_ind IN OUT NOCOPY VARCHAR2,
874 p_step_type_restriction_num OUT NOCOPY NUMBER)
875 RETURN VARCHAR2 -- Returns TRUE/FALSE
876 IS
877 lv_ret_success VARCHAR2(5);
878 ln_hash_apcs_idx NUMBER;
879 ln_hash_apc_idx NUMBER;
880 lb_is_apc_cached BOOLEAN;
881 lv_step_group_type_excl igs_ad_prcs_cat_step_all.step_group_type%TYPE;
882
883 CURSOR c_apcs (lv_admission_cat VARCHAR2, lv_s_admission_process_type VARCHAR2)
884 IS
885 SELECT s_admission_step_type, mandatory_step_ind, step_type_restriction_num
886 FROM igs_ad_prcs_cat_step_all
887 WHERE admission_cat = lv_admission_cat
888 AND s_admission_process_type = lv_s_admission_process_type
889 AND step_group_type <> lv_step_group_type_excl;
890
891 lr_fetched_apcs c_apcs%ROWTYPE;
892
893 BEGIN
894
895 lv_step_group_type_excl := 'TRACK';
896 -- If parameters are not valid return
897 IF (p_admission_cat IS NULL OR p_s_admission_process_type IS NULL OR p_s_admission_step_type IS NULL) THEN
898 RETURN ('FALSE');
899
900 ELSE
901 -- Get the hash value of the Admission Category + System Process Type + System Step
902 ln_hash_apcs_idx := DBMS_UTILITY.get_hash_value (
903 p_admission_cat||'@*?'||p_s_admission_process_type||'@*?'||p_s_admission_step_type,
904 1000,
905 25000);
906
907 lv_ret_success := 'TRUE';
908
909 IF g_hash_apcs_tab.EXISTS(ln_hash_apcs_idx) THEN
910 IF p_mandatory_step_ind IS NOT NULL AND
911 p_mandatory_step_ind <> g_hash_apcs_tab(ln_hash_apcs_idx).mandatory_step_ind THEN
912 lv_ret_success := 'FALSE';
913 END IF;
914
915 IF lv_ret_success = 'TRUE' THEN
916 IF p_mandatory_step_ind IS NULL THEN
917 p_mandatory_step_ind := g_hash_apcs_tab(ln_hash_apcs_idx).mandatory_step_ind;
918 END IF;
919
920 p_step_type_restriction_num := g_hash_apcs_tab(ln_hash_apcs_idx).step_type_restriction_num;
921 END IF;
922
923 RETURN (lv_ret_success);
924
925 ELSE
926 -- Check if the Admission Category + System Process Type is already cached
927 -- Get the hash value of the Admission Category + System Process Type
928 ln_hash_apc_idx := DBMS_UTILITY.get_hash_value (
929 p_admission_cat||'@*?'||p_s_admission_process_type,
930 1000,
931 25000);
932
933 IF g_hash_apc_tab.EXISTS(ln_hash_apc_idx) THEN
934 -- Since all codes are already hashed,
935 -- so the parameter one is invalid
936 RETURN ('FALSE');
937
938 ELSE
939 -- Admission Category + System Process Type is not cached so cache it.
940 lb_is_apc_cached := FALSE;
941
942 lv_ret_success := 'FALSE';
943 OPEN c_apcs (p_admission_cat, p_s_admission_process_type);
944 LOOP
945 FETCH c_apcs into lr_fetched_apcs;
946 EXIT WHEN c_apcs%NOTFOUND;
947
948 -- Cache the Admission Category + System Process Type only once
949 IF NOT lb_is_apc_cached THEN
950 lb_is_apc_cached := TRUE;
951 g_hash_apc_tab(ln_hash_apc_idx).admission_cat := p_admission_cat;
952 g_hash_apc_tab(ln_hash_apc_idx).s_admission_process_type := p_s_admission_process_type;
953 END IF;
954
955 ln_hash_apcs_idx := DBMS_UTILITY.get_hash_value (
956 p_admission_cat||'@*?'||p_s_admission_process_type||'@*?'||lr_fetched_apcs.s_admission_step_type,
957 1000,
958 25000);
959
960 g_hash_apcs_tab(ln_hash_apcs_idx).s_admission_step_type := lr_fetched_apcs.s_admission_step_type;
961 g_hash_apcs_tab(ln_hash_apcs_idx).mandatory_step_ind := lr_fetched_apcs.mandatory_step_ind;
962 g_hash_apcs_tab(ln_hash_apcs_idx).step_type_restriction_num := lr_fetched_apcs.step_type_restriction_num;
963
964 IF (p_s_admission_step_type = g_hash_apcs_tab(ln_hash_apcs_idx).s_admission_step_type) THEN
965 lv_ret_success := 'TRUE';
966
967 IF p_mandatory_step_ind IS NOT NULL AND
968 p_mandatory_step_ind <> g_hash_apcs_tab(ln_hash_apcs_idx).mandatory_step_ind THEN
969 lv_ret_success := 'FALSE';
970 END IF;
971
972 IF lv_ret_success = 'TRUE' THEN
973 IF p_mandatory_step_ind IS NULL THEN
974 p_mandatory_step_ind := g_hash_apcs_tab(ln_hash_apcs_idx).mandatory_step_ind;
975 END IF;
976
977 p_step_type_restriction_num := g_hash_apcs_tab(ln_hash_apcs_idx).step_type_restriction_num;
978 END IF;
979 END IF;
980
981 END LOOP;
982 CLOSE c_apcs;
983
984 RETURN (lv_ret_success);
985 END IF;
986 END IF;
987 END IF;
988 END get_apcs;
989
990 -- Extract message from stack
991 PROCEDURE extract_msg_from_stack (p_msg_at_index NUMBER,
992 p_return_status OUT NOCOPY VARCHAR2,
993 p_msg_count OUT NOCOPY NUMBER,
994 p_msg_data OUT NOCOPY VARCHAR2,
995 p_hash_msg_name_text_type_tab OUT NOCOPY igs_ad_gen_016.g_msg_name_text_type_table)
996 IS
997 l_old_msg_count NUMBER;
998 l_new_msg_count NUMBER;
999 l_msg_inc_factr NUMBER := 1;
1000 l_msg_idx_start NUMBER;
1001 l_msg_txt fnd_new_messages.message_text%TYPE;
1002 l_app_nme varchar2(1000);
1003 l_msg_nme varchar2(2000);
1004 l_err_msg_logged varchar2(5);
1005 l_hash_msg_name_text_type_tab g_msg_name_text_type_table;
1006 l_table_index binary_integer := 0;
1007 l_msg_ret fnd_new_messages.message_text%TYPE;
1008 l_msg_sqlerrm VARCHAR2(4000);
1009 BEGIN
1010 l_old_msg_count := p_msg_at_index;
1011 l_new_msg_count := igs_ge_msg_stack.count_msg;
1012 --dbms_output.put_line('upper bound message level - '||to_char(l_new_msg_count));
1013
1014 p_msg_count := l_new_msg_count - l_old_msg_count;
1015
1016 WHILE (l_new_msg_count - l_old_msg_count) > 0
1017 LOOP
1018 --igs_ge_msg_stack.get(l_old_msg_count+l_msg_inc_factr,'F',l_msg_txt,l_msg_idx_start);
1019 igs_ge_msg_stack.get(l_old_msg_count+l_msg_inc_factr,'T',l_msg_txt,l_msg_idx_start);
1020
1021 --dbms_output.put_line('message read from stack index - '||to_char(l_msg_idx_start));
1022
1023 igs_ge_msg_stack.delete_msg(l_msg_idx_start);
1024 l_new_msg_count := l_new_msg_count -1;
1025
1026 fnd_message.parse_encoded (l_msg_txt, l_app_nme, l_msg_nme);
1027 fnd_message.set_encoded (l_msg_txt);
1028 l_msg_txt := fnd_message.get;
1029
1030 --dbms_output.put_line(fnd_global.tab||l_app_nme||' '||l_msg_nme||' '||l_msg_txt);
1031
1032 IF NVL(l_err_msg_logged,'@*?') <> 'TRUE' THEN
1033 l_err_msg_logged := igs_ad_gen_016.is_err_msg (l_msg_nme, l_app_nme);
1034 IF NVL(l_err_msg_logged,'@*?') <> 'TRUE' THEN
1035 IF l_msg_ret IS NULL THEN
1036 IF SUBSTR(l_msg_txt,1,4) <> 'ORA-' THEN
1037 l_msg_ret := l_msg_txt;
1038 ELSE
1039 l_msg_ret := SUBSTR(l_msg_txt,12,LENGTH(l_msg_txt));
1040 END IF;
1041 p_return_status := 'S';
1042 END IF;
1043 ELSE
1044 IF SUBSTR(l_msg_txt,1,4) <> 'ORA-' THEN
1045 l_msg_ret := l_msg_txt;
1046 ELSE
1047 l_msg_ret := SUBSTR(l_msg_txt,12,LENGTH(l_msg_txt));
1048 END IF;
1049 p_return_status := 'E';
1050 END IF;
1051 END IF;
1052
1053 l_hash_msg_name_text_type_tab(l_table_index).appl := l_app_nme;
1054 IF igs_ad_gen_016.is_err_msg (l_msg_nme, l_app_nme) = 'TRUE' THEN
1055 l_hash_msg_name_text_type_tab(l_table_index).type := 'E';
1056 ELSE
1057 l_hash_msg_name_text_type_tab(l_table_index).type := 'S';
1058 END IF;
1059 l_hash_msg_name_text_type_tab(l_table_index).name := l_msg_nme;
1060 l_hash_msg_name_text_type_tab(l_table_index).text := l_msg_txt;
1061 l_table_index := l_table_index + 1;
1062 END LOOP;
1063
1064 l_msg_sqlerrm := SQLERRM;
1065 IF SQLCODE <> 0 THEN
1066 IF ABS(TO_CHAR(SQLCODE)) > 20000 THEN
1067 p_return_status := 'E';
1068 ELSE
1069 p_return_status := 'U';
1070 p_msg_count := l_hash_msg_name_text_type_tab.COUNT + 1;
1071 l_hash_msg_name_text_type_tab(l_table_index).appl := 'ORA';
1072 l_hash_msg_name_text_type_tab(l_table_index).type := 'U';
1073 l_hash_msg_name_text_type_tab(l_table_index).name := 'ORA';
1074 l_hash_msg_name_text_type_tab(l_table_index).text := l_msg_sqlerrm;
1075 l_msg_ret := l_msg_sqlerrm;
1076 END IF;
1077 END IF;
1078
1079 p_msg_data := l_msg_ret;
1080 p_hash_msg_name_text_type_tab := l_hash_msg_name_text_type_tab;
1081
1082 --dbms_output.put_line('returned message - '||l_msg_ret);
1083 --dbms_output.put_line('returned SQLERR message - '||l_msg_sqlerrm);
1084 --dbms_output.put_line('message level when done - '||to_char(igs_ge_msg_stack.count_msg));
1085 --dbms_output.put_line('return status - '||p_return_status||' message count - '||to_char(p_msg_count)||' message data - '||p_msg_data);
1086 END extract_msg_from_stack;
1087
1088
1089
1090 PROCEDURE check_security_exception
1091 IS
1092 /* ------------------------------------------------------------------------------------------------------------------------
1093 Created By : rbezawad
1094 Date Created By : 30-Oct-04
1095 Purpose: This procedure will be called from Library(pld) to check if there are any error messages set in the stack
1096 which are related to Security Policies (IGS_SC_POLICY_EXCEPTION, IGS_SC_POLICY_UPD_DEL_EXCEP). And it again sets
1097 Security Policy error on top, so that this can be shown to the user on form. It also clears the Message stack so that
1098 user won't see the same error message again and again when some other operation is performed from the same form
1099 i.e., in same session.
1100 Known limitations,enhancements,remarks:
1101 Change History
1102 Who When What
1103 -----------------------------------------------------------------------------------------------------------------------*/
1104 l_encoded_text VARCHAR2(4000);
1105 l_msg_count NUMBER;
1106 l_msg_index NUMBER;
1107 l_app_short_name VARCHAR2(50);
1108 l_message_name VARCHAR2(50);
1109
1110 BEGIN
1111
1112 l_msg_count := IGS_GE_MSG_STACK.COUNT_MSG;
1113 WHILE l_msg_count <> 0 loop
1114 IGS_GE_MSG_STACK.GET(l_msg_count, 'T', l_encoded_text, l_msg_index);
1115 IGS_GE_MSG_STACK.DELETE_MSG(l_msg_index);
1116 fnd_message.parse_encoded(l_encoded_text, l_app_short_name, l_message_name);
1117 IF l_message_name = 'IGS_SC_POLICY_EXCEPTION' OR l_message_name = 'IGS_SC_POLICY_UPD_DEL_EXCEP' THEN
1118 fnd_message.set_encoded(l_encoded_text);
1119 END IF;
1120 l_msg_count := l_msg_count -1;
1121 END LOOP;
1122
1123 END check_security_exception;
1124
1125 END igs_ad_gen_016;