DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_GENERATE

Source


1 PACKAGE BODY OE_GENERATE AS
2 /* $Header: OEXTGENB.pls 120.0 2005/06/01 23:18:13 appldev noship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME      	CONSTANT    VARCHAR2(30):='OE_GENERATE';
7 
8 FUNCTION Gen_Start_Token
9 (   p_text	IN  VARCHAR2
10 )
11 RETURN VARCHAR2
12 IS
13 BEGIN
14 
15     RETURN SUBSTR(p_text,15);
16 
17 END Gen_Start_Token;
18 
19 FUNCTION Gen_End_Token
20 (   p_text	IN  VARCHAR2
21 )
22 RETURN VARCHAR2
23 IS
24 BEGIN
25 
26     RETURN SUBSTR(p_text,13);
27 
28 END Gen_End_Token;
29 
30 FUNCTION Is_Gen_Start
31 (   p_text	IN  VARCHAR2
32 )
33 RETURN BOOLEAN
34 IS
35 BEGIN
36 
37     RETURN ( SUBSTR(p_text,1,13) = '--  START GEN');
38 
39 END Is_Gen_Start;
40 
41 FUNCTION Is_Gen_End
42 (   p_text	IN  VARCHAR2
43 )
44 RETURN BOOLEAN
45 IS
46 BEGIN
47 
48     RETURN ( SUBSTR(p_text,1,11) = '--  END GEN');
49 
50 END Is_Gen_End;
51 
52 PROCEDURE Start_Gen
53 (   p_file	IN  UTL_FILE.file_type
54 ,   p_text	IN  VARCHAR2
55 )
56 IS
57 BEGIN
58 
59     Comment ( p_file , 'START GEN '||p_text,0,FALSE,FALSE);
60 
61 END Start_Gen;
62 
63 PROCEDURE End_Gen
64 (   p_file	IN  UTL_FILE.file_type
65 ,   p_text	IN  VARCHAR2
66 )
67 IS
68 BEGIN
69 
70     Comment ( p_file , 'END GEN '||p_text,0,FALSE,FALSE);
71 
72 END End_Gen;
73 
74 PROCEDURE Load_File
75 (   p_file	IN  UTL_FILE.file_type
76 )
77 IS
78 l_buffer	VARCHAR2(240);
79 l_count		NUMBER := 0;
80 BEGIN
81 
82     --	Init g_src_tbl
83 
84     g_src_tbl.DELETE;
85 
86     --	Read from file.
87 
88     WHILE TRUE LOOP
89 
90 	l_count := l_count + 1;
91 	UTL_FILE.get_line ( p_file , l_buffer );
92 	g_src_tbl(l_count) := l_buffer;
93 
94     END LOOP;
95 
96 EXCEPTION
97 
98     WHEN NO_DATA_FOUND THEN
99 
100 	NULL;
101 
102 END Load_File;
103 
104 PROCEDURE Parameter
105 (   p_file	IN  UTL_FILE.file_type
106 ,   p_param	IN  VARCHAR2
107 ,   p_mode	IN  VARCHAR2 := 'IN'
108 ,   p_type	IN  VARCHAR2 := G_TYPE_NUMBER
109 ,   p_level	IN  NUMBER := 1
110 ,   p_rpad	IN  NUMBER := 30
111 ,   p_first	IN  BOOLEAN := FALSE
112 )
113 IS
114 l_first		varchar2(1);
115 l_prefix	VARCHAR2(10);
116 BEGIN
117 
118     IF p_mode = 'IN' THEN
119 	l_prefix := '   p_';
120     ELSE
121 	l_prefix := '   x_';
122     END IF;
123 
124     IF p_first THEN
125 	l_first := '(';
126     ELSE
127 	l_first := ',';
128     END IF;
129 
130     Text(   p_file
131 	,   l_first||l_prefix||RPAD(p_param,p_rpad)||RPAD(p_mode,4)||p_type
132 	,   p_level
133 	);
134 
135 END Parameter;
136 
137 PROCEDURE Element
138 (   p_file	IN  UTL_FILE.file_type
139 ,   p_element	IN  VARCHAR2
140 ,   p_type	IN  VARCHAR2 := G_TYPE_NUMBER
141 ,   p_level	IN  NUMBER := 1
142 ,   p_rpad	IN  NUMBER := 30
143 ,   p_first	IN  BOOLEAN := FALSE
144 )
145 IS
146 l_first		varchar2(1);
147 BEGIN
148 
149     IF p_first THEN
150 	l_first := '(';
151     ELSE
152 	l_first := ',';
153     END IF;
154 
155     Text(   p_file
156 	,   l_first||'   '||RPAD(p_element,p_rpad)||p_type
157 	,   p_level
158 	);
159 
160 END Element;
161 
162 PROCEDURE Variable
163 (   p_file	IN  UTL_FILE.file_type
164 ,   p_var	IN  VARCHAR2
165 ,   p_type	IN  VARCHAR2
166 ,   p_level	IN  NUMBER := 1
167 ,   p_rpad	IN  NUMBER := 30
168 )
169 IS
170 l_rpad 		NUMBER := p_rpad;
171 BEGIN
172 
173     IF LENGTH(p_var) >= 30 THEN
174 	l_rpad := LENGTH(p_var)+1;
175     END IF;
176 
177     Text(   p_file
178 	,   RPAD(p_var,l_rpad)||p_type||';'
179 	,   p_level
180 	);
181 
182 END Variable;
183 
184 PROCEDURE Assign
185 (   p_file	IN  UTL_FILE.file_type
186 ,   p_left	IN  VARCHAR2
187 ,   p_right	IN  VARCHAR2
188 ,   p_level	IN  NUMBER := 1
189 ,   p_rpad	IN  NUMBER := 30
190 )
191 IS
192 l_rpad		NUMBER:=p_rpad;
193 BEGIN
194 
195     IF p_rpad = -1 OR
196 	p_rpad < LENGTH(p_left)
197     THEN
198 	l_rpad := LENGTH(p_left);
199     END IF;
200 
201     Text(   p_file
202 	,   RPAD(p_left,l_rpad)||' := '||p_right||';'
203 	,   p_level
204 	);
205 
206 END Assign;
207 
208 PROCEDURE Call_Param
209 (   p_file	IN  UTL_FILE.file_type
210 ,   p_param	IN  VARCHAR2
211 ,   p_val	IN  VARCHAR2
212 ,   p_level	IN  NUMBER := 1
213 ,   p_rpad	IN  NUMBER := 30
214 ,   p_first	IN  BOOLEAN := FALSE
215 )
216 IS
217 l_first		varchar2(1);
218 BEGIN
219 
220     IF p_first THEN
221 	l_first := '(';
222     ELSE
223 	l_first := ',';
224     END IF;
225 
226     UTL_FILE.put_line( p_file ,
227 	LPAD(l_first,p_level*4+1)||'   '||RPAD(p_param,p_rpad)||'=> '||p_val);
228 
229 END Call_Param;
230 
231 PROCEDURE End_Call
232 (   p_file	IN  UTL_FILE.file_type
233 ,   p_level	IN  NUMBER := 1
234 )
235 IS
236 BEGIN
237 
238     Text (p_file,');',p_level);
239 
240 END End_Call;
241 
242 PROCEDURE Get_Msg
243 (   p_file	IN  UTL_FILE.file_type
244 ,   p_level	IN  NUMBER := 1
245 )
246 IS
247 BEGIN
248 
249     Comment (p_file,'Get message count and data',p_level);
250     Text (p_file,'FND_MSG_PUB.Count_And_Get',p_level);
251     Call_Param (p_file,'p_count','x_msg_count',p_level,30,TRUE);
252     Call_Param (p_file,'p_data','x_msg_data',p_level);
253     End_Call (p_file,p_level);
254     UTL_FILE.new_line(p_file);
255 
256 END Get_Msg;
257 
258 PROCEDURE Pkg_Header
259 (   p_file	IN  UTL_FILE.file_type
260 ,   p_filename	IN  VARCHAR2
261 ,   p_pkg_name	IN  VARCHAR2
262 ,   p_pkg_type	IN  VARCHAR2
263 )
264 IS
265 BEGIN
266 
267     --	Copyright section.
268 
269     Comment ( p_file , '',0,FALSE,FALSE);
270     Comment ( p_file ,
271 	'Copyright (c) 1996 Oracle Corporation, Redwood Shores, CA, USA',
272 				0,FALSE,FALSE);
273     Comment ( p_file , 'All rights reserved.',0,FALSE,FALSE);
274     Comment ( p_file , '',0,FALSE,FALSE);
275     Comment ( p_file , 'FILENAME',0,FALSE,FALSE);
276     Comment ( p_file , '',0,FALSE,FALSE);
277     Comment ( p_file , '    '||p_filename,0,FALSE,FALSE);
278     Comment ( p_file , '',0,FALSE,FALSE);
279     Comment ( p_file , 'DESCRIPTION',0,FALSE,FALSE);
280     Comment ( p_file , '',0,FALSE,FALSE);
281     Comment ( p_file , '    '||INITCAP(p_pkg_type)||' of package '
282 		||p_pkg_name,0,FALSE,FALSE);
283     Comment ( p_file , '',0,FALSE,FALSE);
284     Comment ( p_file ,'NOTES',0,FALSE,FALSE);
285     Comment ( p_file , '',0,FALSE,FALSE);
286     Comment ( p_file ,'HISTORY',0,FALSE,FALSE);
287     Comment ( p_file , '',0,FALSE,FALSE);
288     Comment ( p_file , TO_CHAR(SYSDATE)||' Created',0,FALSE,FALSE);
289     Comment ( p_file , '',0,FALSE,TRUE);
290 
291     --	Standard WHENEVER clause.
292 
293     Text ( p_file,'WHENEVER SQLERROR EXIT FAILURE ROLLBACK;',0);
294 
295     --	Define package.
296 
297     UTL_FILE.new_line ( p_file );
298     IF p_pkg_type = G_PKG_TYPE_BODY THEN
299 	Text ( p_file ,'CREATE or REPLACE PACKAGE BODY '||
300 		p_pkg_name|| ' AS',0);
301     ELSE
302 	Text ( p_file ,'CREATE or REPLACE PACKAGE '||
303 		p_pkg_name|| ' AS',0);
304     END IF;
305 
306     --	$Header clause.
307 
308     UTL_FILE.new_line ( p_file );
309     Text (p_file,'/* $Header: OEXTGENB.pls 120.0 2005/06/01 23:18:13 appldev noship $ */',0);
310 
311     --	Global constant holding package name.
312 
313     IF p_pkg_type = G_PKG_TYPE_BODY THEN
314 	Comment ( p_file , 'Global constant holding the package name',0);
315 	Text ( p_file,RPAD('G_PKG_NAME',30)||'CONSTANT '||
316 		    'VARCHAR2(30) := '''||p_pkg_name||''';',0);
317     END IF;
318 
319 END Pkg_Header;
320 
321 PROCEDURE Pkg_End
322 (   p_file	IN  UTL_FILE.file_type
323 ,   p_pkg_name	IN  VARCHAR2
324 ,   p_pkg_type	IN  VARCHAR2
325 ,   p_filename	IN  VARCHAR2 := NULL
326 )
327 IS
328 BEGIN
329 
330     --	end statement.
331 
332     UTL_FILE.new_line(p_file);
333     Text ( p_file , 'END '||p_pkg_name||';',0);
334     Text ( p_file , '/',0);
335     --	Show errors.
336 
337     UTL_FILE.new_line(p_file);
338     IF p_pkg_type = G_PKG_TYPE_BODY THEN
339 	Text ( p_file ,'SHOW ERRORS PACKAGE BODY '||
340 		p_pkg_name||';' ,0);
341     ELSE
342 	Text ( p_file ,'SHOW ERRORS PACKAGE '||
343 		p_pkg_name||';' ,0);
344     END IF;
345 
346     --	Commit and Exit.
347 
348     UTL_FILE.new_line(p_file);
349     Text ( p_file , 'COMMIT;',0);
350     Comment ( p_file , 'EXIT;',0);
351 
352     --	Log an entry in the compile file if p_filename is not NULL.
353 
354     IF p_filename IS NOT NULL THEN
355 
356 	Log_Compile
357 	(   p_pkg_name
358 	,   p_filename
359 	,   p_pkg_type
360 	);
361 
362     END IF;
363 
364 END Pkg_End;
365 
366 PROCEDURE Check_Status
367 (   p_file	IN  UTL_FILE.file_type
368 ,   p_variable	IN  VARCHAR2
369 ,   p_level	IN  NUMBER := 1
370 )
371 IS
372 BEGIN
373 
374     UTL_FILE.new_line (p_file);
375     Text (p_file,
376 'IF '||p_variable||' = FND_API.G_RET_STS_UNEXP_ERROR THEN',p_level);
377     Text (p_file , 'RAISE FND_API.G_EXC_UNEXPECTED_ERROR;',p_level+1);
378     Text (p_file,
379 'ELSIF '||p_variable||' = FND_API.G_RET_STS_ERROR THEN',p_level);
380     Text (p_file ,'RAISE FND_API.G_EXC_ERROR;',p_level+1);
381     Text (p_file ,'END IF;',p_level);
382     UTL_FILE.new_line (p_file);
383 
384 END Check_Status;
385 
386 
387 PROCEDURE Exc_Msg
388 (   p_file	IN  UTL_FILE.file_type
389 ,   p_procedure	IN  VARCHAR2
390 ,   p_error	IN  VARCHAR2 := NULL
391 ,   p_level	IN  NUMBER := 2
392 ,   p_text	IN  BOOLEAN := FALSE
393 )
394 IS
395 BEGIN
396 
397     Text (p_file,'IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)',p_level);
398     Text (p_file,'THEN',p_level);
399     Text (p_file,'FND_MSG_PUB.Add_Exc_Msg',p_level+1);
400     Text (p_file,'(   G_PKG_NAME',p_level+1);
401     Text (p_file,',   '''||p_procedure||'''',p_level+1);
402 
403     IF p_error IS NOT NULL THEN
404        IF p_text THEN
405 	  Text (p_file, p_error, p_level+1);
406 	ELSE
407 	  Text (p_file, ',   ''' || p_error || '''', p_level+1);
408        END IF;
409     END IF;
410 
411     Text (p_file,');',p_level+1);
412     Text (p_file,'END IF;',p_level);
413 
414 END Exc_Msg;
415 
416 PROCEDURE Error_Msg
417 (   p_file	IN  UTL_FILE.file_type
418 ,   p_product	IN  VARCHAR2
419 ,   p_name	IN  VARCHAR2
420 ,   p_level	IN  NUMBER := 2
421 ,   p_tk1	IN  VARCHAR2 := NULL
422 ,   p_tk1_val	IN  VARCHAR2 := NULL
423 ,   p_tk2	IN  VARCHAR2 := NULL
424 ,   p_tk2_val	IN  VARCHAR2 := NULL
425 ,   p_tk3	IN  VARCHAR2 := NULL
426 ,   p_tk3_val	IN  VARCHAR2 := NULL
427 ,   p_tk4	IN  VARCHAR2 := NULL
428 ,   p_tk4_val	IN  VARCHAR2 := NULL
429 ,   p_tk5	IN  VARCHAR2 := NULL
430 ,   p_tk5_val	IN  VARCHAR2 := NULL
431 ,   p_tk1_is_text IN  BOOLEAN := TRUE
432 ,   p_tk2_is_text IN  BOOLEAN := TRUE
433 ,   p_tk3_is_text IN  BOOLEAN := TRUE
434 ,   p_tk4_is_text IN  BOOLEAN := TRUE
435 ,   p_tk5_is_text IN  BOOLEAN := TRUE
436 )
437 IS
438 BEGIN
439 
440     Msg
441     (   p_file	    =>	p_file
442     ,   p_product   =>	p_product
443     ,   p_name	    =>	p_name
444     ,   p_level	    =>	p_level
445     ,   p_tk1	    =>	p_tk1
446     ,   p_tk1_val   =>	p_tk1_val
447     ,   p_tk2	    =>	p_tk2
448     ,   p_tk2_val   =>	p_tk2_val
449     ,   p_tk3	    =>	p_tk3
450     ,   p_tk3_val   =>	p_tk3_val
451     ,   p_tk4	    =>	p_tk4
452     ,   p_tk4_val   =>	p_tk4_val
453     ,   p_tk5	    =>	p_tk5
454     ,   p_tk5_val   =>	p_tk5_val
455     ,   p_type	    =>	G_MSG_ERROR
456     ,   p_tk1_is_text	=>  p_tk1_is_text
457     ,   p_tk2_is_text	=>  p_tk2_is_text
458     ,   p_tk3_is_text	=>  p_tk3_is_text
459     ,   p_tk4_is_text	=>  p_tk4_is_text
460     ,   p_tk5_is_text	=>  p_tk5_is_text
461     );
462 
463 END Error_Msg;
464 
465 PROCEDURE Msg
466 (   p_file	IN  UTL_FILE.file_type
467 ,   p_product	IN  VARCHAR2
468 ,   p_name	IN  VARCHAR2
469 ,   p_level	IN  NUMBER := 2
470 ,   p_tk1	IN  VARCHAR2 := NULL
471 ,   p_tk1_val	IN  VARCHAR2 := NULL
472 ,   p_tk2	IN  VARCHAR2 := NULL
473 ,   p_tk2_val	IN  VARCHAR2 := NULL
474 ,   p_tk3	IN  VARCHAR2 := NULL
475 ,   p_tk3_val	IN  VARCHAR2 := NULL
476 ,   p_tk4	IN  VARCHAR2 := NULL
477 ,   p_tk4_val	IN  VARCHAR2 := NULL
478 ,   p_tk5	IN  VARCHAR2 := NULL
479 ,   p_tk5_val	IN  VARCHAR2 := NULL
480 ,   p_type	IN  NUMBER   := G_MSG_ERROR
481 ,   p_tk1_is_text IN  BOOLEAN := TRUE
482 ,   p_tk2_is_text IN  BOOLEAN := TRUE
483 ,   p_tk3_is_text IN  BOOLEAN := TRUE
484 ,   p_tk4_is_text IN  BOOLEAN := TRUE
485 ,   p_tk5_is_text IN  BOOLEAN := TRUE
486 )
487 IS
488 l_buffer    VARCHAR2(30);
489 l_quotes    VARCHAR2(3);
490 BEGIN
491 
492     IF p_type = G_MSG_ERROR THEN
493 	l_buffer    :=	'G_MSG_LVL_ERROR';
494     ELSIF p_type = G_MSG_SUCCESS THEN
495 	l_buffer    :=	'G_MSG_LVL_SUCCESS';
496     ELSIF p_type = G_MSG_UNEXP_ERROR THEN
497 	l_buffer    :=	'G_MSG_LVL_UNEXP_ERROR';
498     END IF;
499 
500     Text (p_file,'IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.'||
501 	l_buffer||')',p_level);
502 
503     Text (p_file,'THEN',p_level);
504 
505     UTL_FILE.new_line(p_file);
506     Text(p_file,'FND_MESSAGE.SET_NAME('''||p_product||''','''||p_name||''');'
507 	    ,p_level+1);
508 
512 	    l_quotes := '''';
509     IF p_tk1 IS NOT NULL THEN
510 
511 	IF p_tk1_is_text THEN
513 	ELSE
514 	    l_quotes := NULL;
515 	END IF;
516 
517 	Text(p_file,'FND_MESSAGE.SET_TOKEN('''||p_tk1||''','||
518 		l_quotes||p_tk1_val||l_quotes||');',p_level+1);
519     END IF;
520 
521     IF p_tk2 IS NOT NULL THEN
522 
523 	IF p_tk2_is_text THEN
524 	    l_quotes := '''';
525 	ELSE
526 	    l_quotes := NULL;
527 	END IF;
528 
529 	Text(p_file,'FND_MESSAGE.SET_TOKEN('''||p_tk2||''','||
530 		l_quotes||p_tk2_val||l_quotes||');',p_level+1);
531 
532     END IF;
533 
534     IF p_tk3 IS NOT NULL THEN
535 
536 	IF p_tk3_is_text THEN
537 	    l_quotes := '''';
538 	ELSE
539 	    l_quotes := NULL;
540 	END IF;
541 
542 	Text(p_file,'FND_MESSAGE.SET_TOKEN('''||p_tk3||''','||
543 		l_quotes||p_tk3_val||l_quotes||');',p_level+1);
544     END IF;
545 
546     IF p_tk4 IS NOT NULL THEN
547 
548 	IF p_tk4_is_text THEN
549 	    l_quotes := '''';
550 	ELSE
551 	    l_quotes := NULL;
552 	END IF;
553 
554 	Text(p_file,'FND_MESSAGE.SET_TOKEN('''||p_tk4||''','||
555 		l_quotes||p_tk4_val||l_quotes||');',p_level+1);
556     END IF;
557 
558     IF p_tk5 IS NOT NULL THEN
559 
560 	IF p_tk5_is_text THEN
561 	    l_quotes := '''';
562 	ELSE
563 	    l_quotes := NULL;
564 	END IF;
565 
566 	Text(p_file,'FND_MESSAGE.SET_TOKEN('''||p_tk5||''','||
567 		l_quotes||p_tk5_val||l_quotes||');',p_level+1);
568     END IF;
569 
570     Text(p_file,'FND_MSG_PUB.Add;',p_level+1);
571 
572     UTL_FILE.new_line(p_file);
573     Text (p_file,'END IF;',p_level);
574 
575 END Msg;
576 
577 
578 PROCEDURE Comment
579 (   p_file	    IN  UTL_FILE.file_type
580 ,   p_comment	    IN  VARCHAR2
581 ,   p_level	    IN  NUMBER := 1
582 ,   p_line_before   IN	BOOLEAN := TRUE
583 ,   p_line_after    IN	BOOLEAN := TRUE
584 )
585 IS
586 BEGIN
587 
588     IF p_line_before THEN
589         UTL_FILE.new_line(p_file);
590     END IF;
591 
592     Text(p_file,'--  '||p_comment,p_level);
593 
594     IF p_line_after THEN
595         UTL_FILE.new_line(p_file);
596     END IF;
597 
598 END Comment;
599 
600 PROCEDURE API_Out_Vars
601 (   p_file	    IN  UTL_FILE.file_type
602 ,   p_entity_tbl    IN  Entity_Tbl_Type
603 ,   p_pkg	    IN	VARCHAR2
604 ,   p_level	    IN  NUMBER := 1
605 )
606 IS
607 BEGIN
608 
609     FOR I IN 1..p_entity_tbl.COUNT LOOP
610 
611 	IF Multiple_Branch(I) THEN
612 
613 	    Variable
614 	    (	p_file
615 	    ,	'l_x_'||p_entity_tbl(I).name||'_rec'
616 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'
617 	    ,	p_level
618 	    );
619 
620 	    Variable
621 	    (	p_file
622 	    ,	'l_x_'||p_entity_tbl(I).name||'_tbl'
623 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type'
624 	    ,	p_level
625 	    );
626 
627 	ELSE
628 
629 	    Variable
630 	    (	p_file
631 	    ,	'l_x_'||p_entity_tbl(I).name||'_rec'
632 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'
633 	    ,	p_level
634 	    );
635 
636 	END IF;
637 
638     END LOOP;
639 
640 END API_Out_Vars;
641 
642 PROCEDURE API_Out_Param
643 (   p_file	    IN  UTL_FILE.file_type
644 ,   p_entity_tbl    IN  Entity_Tbl_Type
645 ,   p_level	    IN  NUMBER := 1
646 ,   p_entity_prefix IN	VARCHAR2 := 'l_'
647 ,   p_type	    IN	VARCHAR2 := G_API_TYPE_PVT
648 )
649 IS
650 BEGIN
651 
652     FOR I IN 1..p_entity_tbl.COUNT LOOP
653 
654 	IF Multiple_Branch(I) THEN
655 
656 	    Call_Param
657 	    (	p_file
658 	    ,	'x_'||p_entity_tbl(I).name||'_tbl'
659 	    ,	p_entity_prefix||p_entity_tbl(I).name||'_tbl'
660 	    ,	p_level
661 	    );
662 
663 	    IF p_type = G_API_TYPE_PUB THEN
664 		Call_Param
665 		(   p_file
666 		,   'x_'||p_entity_tbl(I).name||'_val_tbl'
667 		,   p_entity_prefix||p_entity_tbl(I).name||'_val_tbl'
668 		,   p_level
669 		);
670 	    END IF;
671 
672 	ELSE
673 
674 	    Call_Param
675 	    (	p_file
676 	    ,	'x_'||p_entity_tbl(I).name||'_rec'
677 	    ,	p_entity_prefix||p_entity_tbl(I).name||'_rec'
678 	    ,	p_level
679 	    );
680 
681 	    IF p_type = G_API_TYPE_PUB THEN
682 		Call_Param
683 		(   p_file
684 		,   'x_'||p_entity_tbl(I).name||'_val_rec'
685 		,   p_entity_prefix||p_entity_tbl(I).name||'_val_rec'
686 		,   p_level
687 		);
688 	    END IF;
689 
690 	END IF;
691 
692     END LOOP;
693 
694 END API_Out_Param;
695 
696 PROCEDURE API_In_Param
697 (   p_file	    IN  UTL_FILE.file_type
698 ,   p_entity_tbl    IN  Entity_Tbl_Type
699 ,   p_level	    IN  NUMBER := 1
703 ,   p_id_param      IN	BOOLEAN := FALSE
700 ,   p_entity_prefix IN	VARCHAR2 := 'l_'
701 ,   p_old_param	    IN	BOOLEAN := TRUE
702 ,   p_val_param     IN	BOOLEAN := FALSE
704 )
705 IS
706 BEGIN
707 
708     FOR I IN 1..p_entity_tbl.COUNT LOOP
709 
710        -- Id and tbls/recs are mutually exclusive
711 
712        IF p_id_param THEN	-- Add Id's as parameters
713 
714 	  -- If root entity
715 	  IF p_entity_tbl(i).parent IS NULL THEN
716 
717 	    Load_Entity_Attributes(p_entity_tbl(I));
718 
719 	     FOR I IN 1..g_pk_attr_tbl.COUNT LOOP
720 
721 		Call_Param
722 		(  p_file
723 		,  'p_' || g_pk_attr_tbl(I).code
724 		,  p_entity_prefix || g_pk_attr_tbl(I).code
725 		,  p_level
726 		);
727 
728 	     END LOOP;
729 
730 	  END IF;
731 
732 	ELSE			-- Add tables/records as parameters
733 
734 	    IF Multiple_Branch(I) THEN
735 
736 	     Call_Param
737 	     (  p_file
738 	     ,	'p_'||p_entity_tbl(I).name||'_tbl'
739 	     ,	p_entity_prefix||p_entity_tbl(I).name||'_tbl'
740 	     ,	p_level
741 	     );
742 
743 	     IF p_old_param THEN
744 	    	Call_Param
745 		(  p_file
746 		,  'p_old_'||p_entity_tbl(I).name||'_tbl'
747 		,  p_entity_prefix||'old_'||p_entity_tbl(I).name||'_tbl'
748 		,  p_level
749 		);
750 	     END IF;
751 
752 	     IF p_val_param THEN
753 	    	Call_Param
754 		(  p_file
755 		,  'p_'||p_entity_tbl(I).name||'_val_tbl'
756 		,  p_entity_prefix||p_entity_tbl(I).name||'_val_tbl'
757 		,  p_level
758 		);
759 	     END IF;
760 
761 	   ELSE		-- if entity branch not multiple
762 
763 	     Call_Param
764 	     (	p_file
765 	     ,	'p_'||p_entity_tbl(I).name||'_rec'
766 	     ,	p_entity_prefix||p_entity_tbl(I).name||'_rec'
767 	     ,	p_level
768 	     );
769 
770 	     IF p_old_param THEN
771 	    	Call_Param
772 		(  p_file
773 		,   'p_old_'||p_entity_tbl(I).name||'_rec'
774 		,   p_entity_prefix||'old_'||p_entity_tbl(I).name||'_rec'
775 		,   p_level
776 		);
777 	     END IF;
778 
779 	     IF p_val_param THEN
780 	    	Call_Param
781 		(  p_file
782 		,   'p_'||p_entity_tbl(I).name||'_val_rec'
783 		,   p_entity_prefix||p_entity_tbl(I).name||'_val_rec'
784 		,   p_level
785 		);
786 	     END IF;
787 
788 	  END IF;
789 
790        END IF;
791 
792     END LOOP;
793 
794 END API_In_Param;
795 
796 PROCEDURE API_Local_Vars
797 (   p_file	    IN  UTL_FILE.file_type
798 ,   p_entity_tbl    IN  Entity_Tbl_Type
799 ,   p_pkg	    IN	VARCHAR2
800 )
801 IS
802 BEGIN
803 
804     FOR I IN 1..p_entity_tbl.COUNT LOOP
805 
806 	IF Multiple_Branch(I) THEN
807 
808 	    Variable
809 	    (	p_file
810 	    ,	'l_'||p_entity_tbl(I).name||'_rec'
811 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'
812 	    ,	0
813 	    );
814 
815 	    Variable
816 	    (	p_file
817 	    ,	'l_'||p_entity_tbl(I).name||'_tbl'
818 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type'
819 	    ,	0
820 	    );
821 
822 	    Variable
823 	    (	p_file
824 	    ,	'l_old_'||p_entity_tbl(I).name||'_rec'
825 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'
826 	    ,	0
827 	    );
828 
829 	    Variable
830 	    (	p_file
831 	    ,	'l_old_'||p_entity_tbl(I).name||'_tbl'
832 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type'
833 	    ,	0
834 	    );
835 
836 	ELSE
837 
838 	    Variable
839 	    (	p_file
840 	    ,	'l_'||p_entity_tbl(I).name||'_rec'
841 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'||
842 	    	' := p_'||p_entity_tbl(I).name||'_rec'
843 	    ,	0
844 	    );
845 
846 	    Variable
847 	    (	p_file
848 	    ,	'l_old_'||p_entity_tbl(I).name||'_rec'
849 	    ,	p_pkg||'.'||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'||
850 	    	' := p_old_'||p_entity_tbl(I).name||'_rec'
851 	    ,	0
852 	    );
853 
854 	END IF;
855 
856     END LOOP;
857 
858 END API_Local_Vars;
859 
860 PROCEDURE Text
861 (   p_file	IN  UTL_FILE.file_type
862 ,   p_string	IN  VARCHAR2
863 ,   p_level	IN  NUMBER := 1
864 )
865 IS
866 BEGIN
867 
868     UTL_FILE.put_line (p_file ,LPAD(p_string,p_level*4+LENGTH(p_string)));
869 
870 END text;
871 
872 PROCEDURE Comp_Check
873 (   p_file	IN  UTL_FILE.file_type
874 )
875 IS
876 BEGIN
877 
878     Comment (p_file,'Standard call to check for call compatibility');
879 
880     Text (p_file,'IF NOT FND_API.Compatible_API_Call');
881     Text (p_file,'       (   l_api_version_number');
882     Text (p_file,'       ,   p_api_version_number');
883     Text (p_file,'       ,   l_api_name');
884     Text (p_file,'       ,   G_PKG_NAME');
885     Text (p_file,'       )');
886     Text (p_file,'THEN');
887     Text (p_file,'RAISE FND_API.G_EXC_UNEXPECTED_ERROR;',2);
891 
888     Text (p_file,'END IF;');
889 
890 END Comp_Check;
892 PROCEDURE Std_Exc_Handler
893 (   p_file	IN  UTL_FILE.file_type
894 ,   p_name	IN  VARCHAR2 := NULL
895 ,   p_savepoint	IN  VARCHAR2 := NULL
896 )
897 IS
898 BEGIN
899 
900     UTL_FILE.new_line (p_file);
901     Text (p_file,'EXCEPTION',0);
902 
903     UTL_FILE.new_line (p_file);
904     Text (p_file,'WHEN FND_API.G_EXC_ERROR THEN',1);
905     UTL_FILE.new_line (p_file);
906     Text (p_file,'x_return_status := FND_API.G_RET_STS_ERROR;',2);
907     Get_Msg (p_file,2);
908     IF p_savepoint IS NOT NULL THEN
909 	Add_Rollback ( p_file , p_savepoint , 2 );
910     END IF;
911 
912     Text (p_file,'WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN',1);
913     UTL_FILE.new_line (p_file);
914     Text (p_file,'x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;',2);
915     Get_Msg (p_file,2);
916     IF p_savepoint IS NOT NULL THEN
917 	Add_Rollback ( p_file , p_savepoint , 2 );
918     END IF;
919 
920     Text (p_file,'WHEN OTHERS THEN',1);
921     UTL_FILE.new_line (p_file);
922     Text (p_file,'x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;',2);
923     UTL_FILE.new_line (p_file);
924     Exc_Msg (p_file,p_name,NULL,2);
925     Get_Msg (p_file,2);
926     IF p_savepoint IS NOT NULL THEN
927 	Add_Rollback ( p_file , p_savepoint , 2 );
928     END IF;
929 
930 END Std_Exc_Handler;
931 
932 PROCEDURE Others_Exc
933 (   p_file	IN  UTL_FILE.file_type
934 ,   p_name	IN  VARCHAR2	:= NULL
935 ,   p_level	IN  NUMBER	:= 0
936 ,   p_raise_exc	IN  BOOLEAN	:= TRUE
937 )
938 IS
939 BEGIN
940 
941     UTL_FILE.new_line (p_file);
942     Text (p_file,'EXCEPTION',p_level);
943     UTL_FILE.new_line (p_file);
944     Text (p_file,'WHEN OTHERS THEN',p_level+1);
945     UTL_FILE.new_line (p_file);
946     Exc_Msg (p_file,p_name,NULL,p_level+2);
947     UTL_FILE.new_line (p_file);
948 
949     IF p_raise_exc THEN
950 	Text (p_file,'RAISE FND_API.G_EXC_UNEXPECTED_ERROR;',p_level+2);
951     ELSE
952 	Assign
953 	(   p_file
954 	,   'x_return_status'
955 	,   'FND_API.G_RET_STS_UNEXP_ERROR'
956 	,   p_level+2
957 	,   -1
958 	);
959 
960 	Get_Msg
961 	(   p_file
962 	,   p_level+2
963 	);
964 
965     END IF;
966 
967     UTL_FILE.new_line (p_file);
968 
969 END Others_Exc;
970 
971 PROCEDURE Client_Exception
972 (   p_file	IN  UTL_FILE.file_type
973 ,   p_name	IN  VARCHAR2	:=  NULL
974 ,   p_level	IN  NUMBER	:= 0
975 )
976 IS
977 BEGIN
978 
979     UTL_FILE.new_line (p_file);
980     Text (p_file,'EXCEPTION',p_level);
981 
982     UTL_FILE.new_line (p_file);
983     Text (p_file,'WHEN VALUE_ERROR THEN',p_level+1);
984     UTL_FILE.new_line (p_file);
985     Text (p_file,'Message(''Error calling server API in procedure '||
986 	p_name||''');',p_level+2);
987     OE_GENERATE.Text(p_file,'RAISE FORM_TRIGGER_FAILURE;',p_level+2);
988     UTL_FILE.new_line (p_file);
989 
990 END Client_Exception;
991 
992 PROCEDURE API_Parameters
993 (   p_file	    IN  UTL_FILE.file_type
994 ,   p_product	    IN	VARCHAR2
995 ,   p_object	    IN	VARCHAR2
996 ,   p_name	    IN  VARCHAR2
997 ,   p_type	    IN  VARCHAR2
998 ,   p_entity_tbl    IN	Entity_Tbl_Type
999 ,   p_lock_api	    IN	BOOLEAN := FALSE
1000 )
1001 IS
1002 l_p_pkg	    VARCHAR2(30):=NULL;
1003 BEGIN
1004 
1005     IF p_type <> G_API_TYPE_PUB THEN
1006 	l_p_pkg := p_product||'_'||INITCAP(p_object)||'_PUB.';
1007     END IF;
1008 
1009     Text (p_file ,'PROCEDURE '||p_name,0);
1010     Parameter(p_file,'api_version_number','IN',
1011 			    G_TYPE_NUMBER,0,30,TRUE);
1012     Parameter(p_file,'init_msg_list','IN',
1013 			    'VARCHAR2 := FND_API.G_FALSE',0);
1014 
1015     IF p_type = G_API_TYPE_PUB THEN
1016 
1017 	Parameter(p_file,'return_values','IN',
1018 			    'VARCHAR2 := FND_API.G_FALSE',0);
1019     END IF;
1020 
1021     IF NOT p_lock_api THEN
1022 	Parameter(p_file,'commit','IN',
1023 			    'VARCHAR2 := FND_API.G_FALSE',0);
1024 
1025 	IF p_type = G_API_TYPE_PVT THEN
1026 	    Parameter(p_file,'validation_level','IN'
1027 			    ,'NUMBER := FND_API.G_VALID_LEVEL_FULL',0);
1028 	    Parameter
1029 	    (   p_file
1030 	    ,   'control_rec'
1031 	    ,   'IN'
1032 	    ,   p_product||'_GLOBALS.Control_Rec_Type :='
1033 	    ,   0
1034 	    );
1035 
1036 	    Text
1037 	    (   p_file
1038 	    ,   p_product||'_GLOBALS.G_MISS_CONTROL_REC'
1039 	    ,   10
1040 	    );
1041 
1042 	END IF;
1043 
1044 
1045     END IF;
1046 
1047     Parameter(p_file,'return_status','OUT',
1048 			    G_TYPE_CHAR,0);
1049     Parameter(p_file,'msg_count','OUT',
1050 			    G_TYPE_NUMBER,0);
1051     Parameter(p_file,'msg_data','OUT',
1052 			    G_TYPE_CHAR,0);
1053 
1054     FOR I IN 1..p_entity_tbl.COUNT LOOP
1055 
1056 	--  for each entity add two INs (new and old)
1060 
1057 	--  If it is a public api add a third value parameter.
1058 
1059 	IF Multiple_Branch(I) THEN
1061 	    --	Add tbl.
1062 
1063 	    Parameter
1064 	    (	p_file
1065 	    ,	p_entity_tbl(I).name||'_tbl'
1066 	    ,	'IN'
1067 	    ,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type :='
1068 	    ,	0
1069 	    );
1070 
1071 	    Text
1072 	    (	p_file
1073 	    ,	l_p_pkg||'G_MISS_'||UPPER(p_entity_tbl(I).name)||'_TBL'
1074 	    ,	10
1075 	    );
1076 
1077 	    --	For public APIs ad value based parameters.
1078 
1079 	    IF p_type = G_API_TYPE_PUB THEN
1080 
1081 		Parameter
1082 		(   p_file
1083 		,   p_entity_tbl(I).name||'_val_tbl'
1084 		,   'IN'
1085 		,   l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Val_Tbl_Type :='
1086 		,   0
1087 		);
1088 
1089 		Text
1090 		(   p_file
1091 		,   l_p_pkg||'G_MISS_'||UPPER(p_entity_tbl(I).name)||'_VAL_TBL'
1092 		,   10
1093 		);
1094 
1095 	    END IF;
1096 
1097 	    IF NOT p_lock_api AND
1098 		p_type = G_API_TYPE_PVT
1099 	    THEN
1100 
1101 		--  Add old parameters for private APIs only.
1102 
1103 		Parameter
1104 		(	p_file
1105 		,	'old_'||p_entity_tbl(I).name||'_tbl'
1106 		,	'IN'
1107 		,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type :='
1108 		,	0
1109 		);
1110 
1111 		Text
1112 		(	p_file
1113 		,	l_p_pkg||'G_MISS_'||UPPER(p_entity_tbl(I).name)||'_TBL'
1114 		,	10
1115 		);
1116 
1117 	    END IF;
1118 
1119 	ELSE
1120 
1121 	    --	Add Rec
1122 
1123 	    Parameter
1124 	    (	p_file
1125 	    ,	p_entity_tbl(I).name||'_rec'
1126 	    ,	'IN'
1127 	    ,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Rec_Type :='
1128 	    ,	0
1129 	    );
1130 
1131 	    Text
1132 	    (	p_file
1133 	    ,	l_p_pkg||'G_MISS_'||UPPER(p_entity_tbl(I).name)||'_REC'
1134 	    ,	10
1135 	    );
1136 
1137 	    --	For public APIs ad value based parameters.
1138 
1139 	    IF p_type = G_API_TYPE_PUB THEN
1140 
1141 		Parameter
1142 		(   p_file
1143 		,   p_entity_tbl(I).name||'_val_rec'
1144 		,   'IN'
1145 		,   l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Val_Rec_Type :='
1146 		,   0
1147 		);
1148 
1149 		Text
1150 		(   p_file
1151 		,   l_p_pkg||'G_MISS_'||UPPER(p_entity_tbl(I).name)||'_VAL_REC'
1152 		,   10
1153 		);
1154 
1155 	    END IF;
1156 
1157 	    IF NOT p_lock_api AND
1158 		p_type = G_API_TYPE_PVT
1159 	    THEN
1160 
1161 	    Parameter
1162 	    (	p_file
1163 	    ,	'old_'||p_entity_tbl(I).name||'_rec'
1164 	    ,	'IN'
1165 	    ,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Rec_Type :='
1166 	    ,	0
1167 	    );
1168 
1169 	    Text
1170 	    (	p_file
1171 	    ,	l_p_pkg||'G_MISS_'||UPPER(p_entity_tbl(I).name)||'_REC'
1172 	    ,	10
1173 	    );
1174 
1175 	END IF;
1176 
1177 	END IF;
1178 
1179     END LOOP;
1180 
1181     --	OUT parameters.
1182 
1183     FOR I IN 1..p_entity_tbl.COUNT LOOP
1184 
1185 	--  for each entity add one OUT
1186 
1187 	IF Multiple_Branch(I) THEN
1188 
1189 	    --	Add tbl.
1190 
1191 	    Parameter
1192 	    (	p_file
1193 	    ,	p_entity_tbl(I).name||'_tbl'
1194 	    ,	'OUT'
1195 	    ,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type'
1196 	    ,	0
1197 	    );
1198 
1199 	    --	Add value out parameters.
1200 
1201 	    IF p_type = G_API_TYPE_PUB THEN
1202 
1203 		Parameter
1204 		(	p_file
1205 		,	p_entity_tbl(I).name||'_val_tbl'
1206 		,	'OUT'
1207 		,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Val_Tbl_Type'
1208 		,	0
1209 		);
1210 
1211 	    END IF;
1212 
1213 	ELSE
1214 
1215 	    --	Add Rec
1216 
1217 	    Parameter
1218 	    (	p_file
1219 	    ,	p_entity_tbl(I).name||'_rec'
1220 	    ,	'OUT'
1221 	    ,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'
1222 	    ,	0
1223 	    );
1224 
1225 	    --	Add value out parameters.
1226 
1227 	    IF p_type = G_API_TYPE_PUB THEN
1228 
1229 		Parameter
1230 		(	p_file
1231 		,	p_entity_tbl(I).name||'_val_rec'
1232 		,	'OUT'
1233 		,	l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Val_Rec_Type'
1234 		,	0
1235 		);
1236 
1237 	    END IF;
1238 
1239 	END IF;
1240 
1241     END LOOP;
1242 
1243 END API_Parameters;
1244 
1245 PROCEDURE API_Header
1246 (   p_file	IN  UTL_FILE.file_type
1247 ,   p_name	IN  VARCHAR2
1248 ,   p_type	IN  VARCHAR2
1249 )
1250 IS
1251 BEGIN
1252 
1253     Comment ( p_file,'Start of Comments',0,TRUE,FALSE);
1254     Comment ( p_file,RPAD('API name',12)||p_name
1255 	,0,FALSE,FALSE);
1256     Comment ( p_file,RPAD('Type',12)||INITCAP(p_type),0,FALSE,FALSE);
1257     Comment ( p_file,'Function',0,FALSE,FALSE);
1258     Comment ( p_file,'',0,FALSE,FALSE);
1262     Comment ( p_file,'',0,FALSE,FALSE);
1259     Comment ( p_file,'Pre-reqs',0,FALSE,FALSE);
1260     Comment ( p_file,'',0,FALSE,FALSE);
1261     Comment ( p_file,'Parameters',0,FALSE,FALSE);
1263     Comment ( p_file,RPAD('Version',12)||
1264 	'Current version = 1.0',0,FALSE,FALSE);
1265     Comment ( p_file,LPAD('Initial version = 1.0',33),0,FALSE,FALSE);
1266     Comment ( p_file,'',0,FALSE,FALSE);
1267     Comment ( p_file,'Notes',0,FALSE,FALSE);
1268     Comment ( p_file,'',0,FALSE,FALSE);
1269     Comment ( p_file,'End of Comments',0,FALSE,TRUE);
1270 
1271 END API_Header;
1272 
1273 PROCEDURE Load_PK_Attr_Tbl
1274 IS
1275 BEGIN
1276 
1277     g_pk_attr_tbl.DELETE;
1278 
1279     FOR I IN 1..g_attr_tbl.COUNT LOOP
1280 
1281 	IF g_attr_tbl(I).pk_flag THEN
1282 
1283 	    g_pk_attr_tbl(g_pk_attr_tbl.COUNT+1) := g_attr_tbl(I);
1284 
1285 	END IF;
1286 
1287     END LOOP;
1288 
1289 END Load_PK_Attr_Tbl;
1290 
1291 PROCEDURE Load_Flex_Attr_Tbl
1292 (   p_flex_name	    IN	VARCHAR2
1293 )
1294 IS
1295 l_count	    NUMBER := 1;
1296 l_attr_rec  Attribute_Rec_Type;
1297 BEGIN
1298 
1299     g_flex_attr_tbl.DELETE;
1300 
1301     FOR I IN 1..g_attr_tbl.COUNT LOOP
1302 
1303 	l_attr_rec := g_attr_tbl(I);
1304 
1305 	IF  (	l_attr_rec.category = G_CAT_DESC_FLEX
1306 	    OR	l_attr_rec.category = G_CAT_KEY_FLEX )
1307 	AND l_attr_rec.text1 = p_flex_name
1308 	THEN
1309 
1310 	    g_flex_attr_tbl(l_count) := l_attr_rec;
1311 	    l_count := l_count + 1;
1312 
1313 	END IF;
1314 
1315     END LOOP;
1316 
1317 END Load_Flex_Attr_Tbl;
1318 
1319 PROCEDURE Load_Flex_Tables
1320 IS
1321 l_exists	BOOLEAN;
1322 l_flex_rec	Flex_Rec_Type;
1323 l_attr_rec	Attribute_Rec_Type;
1324 BEGIN
1325 
1326     g_desc_flex_tbl.DELETE;
1327     g_key_flex_tbl.DELETE;
1328 
1329     FOR I IN 1..g_attr_tbl.COUNT LOOP
1330 
1331 	l_attr_rec := g_attr_tbl(I);
1332 
1333 	IF l_attr_rec.category = G_CAT_DESC_FLEX THEN
1334 
1335 	    l_exists	:= FALSE;
1336 
1337 	    FOR J IN 1..g_desc_flex_tbl.COUNT LOOP
1338 
1339 		l_flex_rec := g_desc_flex_tbl(J);
1340 
1341 		IF l_attr_rec.text1 = l_flex_rec.name THEN
1342 
1343 		    --	Flexfield already in g_desc_flex_tbl
1344 
1345 		    l_exists := TRUE;
1346 		    g_desc_flex_tbl(J).seg_count := l_flex_rec.seg_count + 1;
1347 
1348 		END IF;
1349 
1350 	    END LOOP;
1351 
1352 	    --	Check whether the flexfield was found or not.
1353 
1354 	    IF NOT l_exists THEN
1355 
1356 		l_flex_rec.name		:= l_attr_rec.text1;
1357 		l_flex_rec.seg_count	:= 0;
1358 
1359 		g_desc_flex_tbl(g_desc_flex_tbl.COUNT+1) := l_flex_rec;
1360 
1361 	    END IF;
1362 
1363 	ELSIF l_attr_rec.category = G_CAT_KEY_FLEX THEN
1364 
1365 	    l_exists	:= FALSE;
1366 
1367 	    FOR J IN 1..g_key_flex_tbl.COUNT LOOP
1368 
1369 		l_flex_rec := g_key_flex_tbl(J);
1370 
1371 		IF l_attr_rec.text1 = l_flex_rec.name THEN
1372 
1373 		    --	Flexfield already in g_key_flex_tbl
1374 
1375 		    l_exists := TRUE;
1376 		    g_key_flex_tbl(J).seg_count := l_flex_rec.seg_count + 1;
1377 
1378 		END IF;
1379 
1380 	    END LOOP;
1381 
1382 	    --	Check whether the flexfield was found or not.
1383 
1384 	    IF NOT l_exists THEN
1385 
1386 		l_flex_rec.name		:= l_attr_rec.text1;
1387 		l_flex_rec.seg_count	:= 0;
1388 
1389 		g_key_flex_tbl(g_key_flex_tbl.COUNT+1) := l_flex_rec;
1390 
1391 	    END IF;
1392 
1393 	END IF;
1394 
1395     END LOOP;
1396 
1397 END Load_Flex_Tables;
1398 
1399 PROCEDURE Parameter_PK
1400 (   p_file	   IN  UTL_FILE.file_type
1401 ,   p_mode	   IN  VARCHAR2 := 'IN'
1402 ,   p_level	   IN  NUMBER := 0
1403 ,   p_rpad	   IN  NUMBER := 30
1404 ,   p_first	   IN  BOOLEAN := FALSE
1405 ,   p_default_miss IN  BOOLEAN := FALSE
1406 ,   p_value	   IN  BOOLEAN := FALSE
1407 ,   p_attr_tbl	   IN  Attribute_Tbl_Type :=
1408 		       G_MISS_ATTR_TBL
1409 )
1410 IS
1411 l_attr_rec	    Attribute_Rec_Type;
1412 l_first		    BOOLEAN := p_first;
1413 l_pk_attr_type	    VARCHAR2(240) := NULL;
1414 l_pk_value_tbl	    Attribute_Tbl_Type;
1415 l_attr_tbl	    Attribute_Tbl_Type;
1416 BEGIN
1417 
1418    IF p_attr_tbl.COUNT = 0 THEN
1419       l_attr_tbl := g_pk_attr_tbl;
1420     ELSE
1421       l_attr_tbl := p_attr_tbl;
1422    END IF;
1423 
1424     FOR I IN 1..l_attr_tbl.COUNT LOOP
1425 
1426 	l_attr_rec := l_attr_tbl(I);
1427 
1428 	IF p_default_miss THEN
1429 	   l_pk_attr_type := l_attr_rec.TYPE || ' := ';
1430 	 ELSE
1431 	   l_pk_attr_type := l_attr_rec.TYPE;
1432 	END IF;
1433 
1434 	Parameter
1435 	(   p_file
1436 	,   l_attr_rec.code
1437 	,   p_mode
1438 	,   l_pk_attr_type
1439 	,   p_level
1440 	,   p_rpad
1441 	,   l_first
1442 	);
1443 
1444 	IF p_default_miss THEN
1445 
1446 	   IF l_attr_rec.TYPE = OE_GENERATE.G_TYPE_NUMBER THEN
1450 	    ELSIF l_attr_rec.TYPE = OE_GENERATE.G_TYPE_DATE THEN
1447 	      l_pk_attr_type := 'FND_API.G_MISS_NUM';
1448 	    ELSIF l_attr_rec.TYPE = OE_GENERATE.G_TYPE_CHAR THEN
1449 	      l_pk_attr_type := 'FND_API.G_MISS_CHAR';
1451 	      l_pk_attr_type := 'FND_API.G_MISS_DATE';
1452 	   END IF;
1453 
1454 	   Text
1455 	   (  p_file
1456 	   ,  l_pk_attr_type
1457 	   ,  p_level + 10
1458 	   );
1459 
1460 	END IF;
1461 
1462 	-- Add value parameters
1463 
1464 	IF (p_value
1465 	    AND
1466 	    l_attr_rec.value) THEN
1467 
1468 	  l_pk_value_tbl := Get_Attr_Values(l_attr_rec.code);
1469 
1470 	  FOR j IN 1..l_pk_value_tbl.COUNT LOOP
1471 
1472 	     IF p_default_miss THEN
1473 		l_pk_attr_type := l_pk_value_tbl(j).type || ' := ';
1474 	      ELSE
1475 		l_pk_attr_type := l_pk_value_tbl(j).type;
1476 	     END IF;
1477 
1478 	     Parameter
1479 	     (   p_file
1480 	     ,   l_pk_value_tbl(j).name
1481 	     ,   p_mode
1482 	     ,   l_pk_attr_type
1483 	     ,   p_level
1484 	     ,   p_rpad
1485 	     ,   l_first
1486 	     );
1487 
1488 	     IF p_default_miss THEN
1489 
1490 		IF l_pk_value_tbl(j).type = OE_GENERATE.G_TYPE_NUMBER THEN
1491 		   l_pk_attr_type := 'FND_API.G_MISS_NUM';
1492 		 ELSIF l_pk_value_tbl(j).type = OE_GENERATE.G_TYPE_CHAR THEN
1493 		   l_pk_attr_type := 'FND_API.G_MISS_CHAR';
1494 		 ELSIF l_pk_value_tbl(j).type = OE_GENERATE.G_TYPE_DATE THEN
1495 		   l_pk_attr_type := 'FND_API.G_MISS_DATE';
1496 		END IF;
1497 
1498 		Text
1499 		( p_file
1500 		, l_pk_attr_type
1501 		, p_level + 10
1502 		);
1503 
1504 	     END IF;
1505 
1506 	  END LOOP;
1507 
1508 	END IF;
1509 
1510 	l_first := FALSE;
1511 
1512     END LOOP;
1513 
1514 END Parameter_PK;
1515 
1516 PROCEDURE Call_Param_PK
1517 (   p_file	IN  UTL_FILE.file_type
1518 ,   p_param	IN  VARCHAR2 := NULL
1519 ,   p_val	IN  VARCHAR2 := NULL
1520 ,   p_level	IN  NUMBER := 1
1521 ,   p_rpad	IN  NUMBER := 30
1522 ,   p_first	IN  BOOLEAN := FALSE
1523 )
1524 IS
1525 l_pk_attr_rec	    Attribute_Rec_Type;
1526 l_first		    BOOLEAN := p_first;
1527 BEGIN
1528 
1529     FOR I IN 1..g_pk_attr_tbl.COUNT LOOP
1530 
1531 	l_pk_attr_rec := g_pk_attr_tbl(I);
1532 
1533 	Call_Param
1534 	(   p_file
1535 	,   p_param||l_pk_attr_rec.code
1536 	,   p_val||l_pk_attr_rec.code
1537 	,   p_level
1538 	,   p_rpad
1539 	,   l_first
1540 	);
1541 
1542 	l_first := FALSE;
1543 
1544     END LOOP;
1545 
1546 END Call_Param_PK;
1547 
1548 PROCEDURE Add_Savepoint
1549 (   p_file	IN  UTL_FILE.file_type
1550 ,   p_name	IN  VARCHAR2
1551 ,   p_level	IN  NUMBER := 1
1552 )
1553 IS
1554 BEGIN
1555 
1556     Comment ( p_file , 'Set Savepoint' , p_level );
1557     Text    ( p_file , 'SAVEPOINT '||p_name||';' , p_level );
1558 
1559 END Add_Savepoint;
1560 
1561 PROCEDURE Add_Rollback
1562 (   p_file	IN  UTL_FILE.file_type
1563 ,   p_name	IN  VARCHAR2
1564 ,   p_level	IN  NUMBER := 1
1565 )
1566 IS
1567 BEGIN
1568 
1569     Comment ( p_file , 'Rollback' , p_level , FALSE, TRUE);
1570     Text    ( p_file , 'ROLLBACK TO '||p_name||';' , p_level );
1571     UTL_FILE.new_line (p_file);
1572 
1573 END Add_Rollback;
1574 
1575 PROCEDURE Load_Constants
1576 (   p_entity_name	    IN	VARCHAR2
1577 )
1578 IS
1579 BEGIN
1580 
1581     CONS_l_g_rec	    := 'g_'	||p_entity_name||'_rec';
1582     CONS_l_g_db_rec	    := 'g_db_'	||p_entity_name||'_rec';
1583     CONS_l_l_rec	    := 'l_'	||p_entity_name||'_rec';
1584     CONS_l_p_rec	    := 'p_'	||p_entity_name||'_rec';
1585     CONS_l_l_x_rec	    := 'l_x_'	||p_entity_name||'_rec';
1586     CONS_l_x_rec	    := 'x_'	||p_entity_name||'_rec';
1587     CONS_l_l_old_rec	    := 'l_old_'	||p_entity_name||'_rec';
1588     CONS_l_p_old_rec	    := 'p_old_'	||p_entity_name||'_rec';
1589     CONS_l_x_old_rec	    := 'x_old_'	||p_entity_name||'_rec';
1590     CONS_l_l_val_rec	    := 'l_'	||p_entity_name||'_val_rec';
1591     CONS_l_p_val_rec	    := 'p_'	||p_entity_name||'_val_rec';
1592     CONS_l_g_val_rec	    := 'g_'	||p_entity_name||'_val_rec';
1593     CONS_l_x_val_rec	    := 'x_'	||p_entity_name||'_val_rec';
1594     CONS_l_l_tbl	    := 'l_'	||p_entity_name||'_tbl';
1595     CONS_l_g_tbl	    := 'g_'	||p_entity_name||'_tbl';
1596     CONS_l_p_tbl	    := 'p_'	||p_entity_name||'_tbl';
1597     CONS_l_l_x_tbl	    := 'l_x_'	||p_entity_name||'_tbl';
1598     CONS_l_x_tbl	    := 'x_'	||p_entity_name||'_tbl';
1599     CONS_l_l_old_tbl	    := 'l_old_'	||p_entity_name||'_tbl';
1600     CONS_l_p_old_tbl	    := 'p_old_'	||p_entity_name||'_tbl';
1601     CONS_l_x_old_tbl	    := 'x_old_'	||p_entity_name||'_tbl';
1602     CONS_l_g_val_tbl	    := 'g_'	||p_entity_name||'_val_tbl';
1603     CONS_l_p_val_tbl	    := 'p_'	||p_entity_name||'_val_tbl';
1604     CONS_l_x_val_tbl	    := 'x_'	||p_entity_name||'_val_tbl';
1605 
1606     CONS_l_pub_bus_obj_pkg  :=	g_product || '_' ||
1607 				INITCAP(g_object_name) || '_PUB';
1608     CONS_l_pvt_bus_obj_pkg  :=	g_product || '_' ||
1612     CONS_l_rec_type	    :=	CONS_l_pub_bus_obj_pkg || '.' ||
1609 				INITCAP(g_object_name) || '_PVT';
1610     CONS_l_entity_attr_pkg  :=	g_product || '_' ||
1611 				UPPER(p_entity_name) || '_ATTR';
1613 				INITCAP(p_entity_name) || '_Rec_Type';
1614     CONS_l_tbl_type	    :=	CONS_l_pub_bus_obj_pkg || '.' ||
1615 				INITCAP(p_entity_name) || '_Tbl_Type';
1616     CONS_l_val_rec_type	    :=	CONS_l_pub_bus_obj_pkg || '.' ||
1617 				INITCAP(p_entity_name) ||'_Val_Rec_Type';
1618     CONS_l_val_tbl_type	    :=	CONS_l_pub_bus_obj_pkg || '.' ||
1619 				INITCAP(p_entity_name) ||'_Val_Tbl_Type';
1620     CONS_l_ctrl_rec_type    :=	g_product||'_GLOBALS.Control_Rec_Type';
1621     CONS_l_entity_prefix    :=	g_product || '_GLOBALS.G_ENTITY_';
1622     CONS_l_form_pkg	    :=  g_product||'_'||g_form_code||'_Form_'||
1623 				INITCAP(p_entity_name);
1624 
1625     CONS_l_util_pkg	    :=	g_product||'_'||
1626 				INITCAP(p_entity_name)||'_Util';
1627     CONS_l_def_pkg	    :=	g_product||'_Default_'||
1628 				INITCAP(p_entity_name);
1629     CONS_l_val_pkg	    :=	g_product||'_Validate_'||
1630 				INITCAP(p_entity_name);
1631     CONS_l_id_to_value_pkg  :=	g_product||'_Id_To_Value';
1632     CONS_l_glb_pkg	    :=	g_product||'_GLOBALS';
1633 
1634     CONS_l_val_to_id_pkg    :=	g_product||'_Value_To_Id';
1635 
1636     CONS_l_miss_rec	    := 	CONS_l_pub_bus_obj_pkg||'.G_MISS_'||
1637 				UPPER(p_entity_name)||'_REC';
1638     CONS_l_miss_val_rec	    := 	CONS_l_pub_bus_obj_pkg||'.G_MISS_'||
1639 				UPPER(p_entity_name)||'_VAL_REC';
1640     CONS_l_miss_tbl	    := 	CONS_l_pub_bus_obj_pkg||'.G_MISS_'||
1641 				UPPER(p_entity_name)||'_TBL';
1642     CONS_l_miss_val_tbl	    := 	CONS_l_pub_bus_obj_pkg||'.G_MISS_'||
1643 				UPPER(p_entity_name)||'_VAL_TBL';
1644 
1645 END Load_Constants;
1646 
1647 PROCEDURE End_If
1648 (   p_file	IN  UTL_FILE.file_type
1649 ,   p_level	IN  NUMBER := 1
1650 )
1651 IS
1652 BEGIN
1653 
1654     Text    ( p_file , 'END IF;' , p_level );
1655 
1656 END End_If;
1657 
1658 PROCEDURE Add_Then
1659 (   p_file	IN  UTL_FILE.file_type
1660 ,   p_level	IN  NUMBER := 1
1661 )
1662 IS
1663 BEGIN
1664 
1665     Text    ( p_file , 'THEN' , p_level );
1666 
1667 END Add_Then;
1668 
1669 PROCEDURE Add_Is
1670 (   p_file	IN  UTL_FILE.file_type
1671 ,   p_level	IN  NUMBER := 0
1672 )
1673 IS
1674 BEGIN
1675 
1676     Text    ( p_file , 'IS' , p_level );
1677 
1678 END Add_Is;
1679 
1680 PROCEDURE Add_Begin
1681 (   p_file	IN  UTL_FILE.file_type
1682 ,   p_level	IN  NUMBER := 0
1683 )
1684 IS
1685 BEGIN
1686 
1687     Text    ( p_file , 'BEGIN' , p_level );
1688 
1689 END Add_Begin;
1690 
1691 PROCEDURE Add_Else
1692 (   p_file	IN  UTL_FILE.file_type
1693 ,   p_level	IN  NUMBER := 1
1694 )
1695 IS
1696 BEGIN
1697 
1698     Text    ( p_file , 'ELSE' , p_level );
1699 
1700 END Add_Else;
1701 
1702 PROCEDURE End_Loop
1703 (   p_file	IN  UTL_FILE.file_type
1704 ,   p_level	IN  NUMBER := 1
1705 )
1706 IS
1707 BEGIN
1708 
1709     Text    ( p_file , 'END LOOP;' , p_level );
1710 
1711 END End_Loop;
1712 
1713 PROCEDURE Log_Compile
1714 (   p_pkg_name	    IN	VARCHAR2
1715 ,   p_filename	    IN	VARCHAR2
1716 ,   p_pkg_type	    IN	VARCHAR2
1717 )
1718 IS
1719 l_gen_pkg_rec	gen_pkg_rec_type;
1720 BEGIN
1721 
1722     --	Add package to generated package table.
1723 
1724     l_gen_pkg_rec.name := p_pkg_name;
1725     l_gen_pkg_rec.type := p_pkg_type;
1726     l_gen_pkg_rec.filename := p_filename;
1727 
1728     g_gen_pkg_tbl(g_gen_pkg_tbl.COUNT+1) := l_gen_pkg_rec;
1729 
1730 END Log_Compile;
1731 
1732 FUNCTION Get_Name_In
1733 (   p_attr_rec	    IN	Attribute_Rec_type
1734 ,   p_block_name    IN	VARCHAR2
1735 )
1736 RETURN VARCHAR2
1737 IS
1738 BEGIN
1739 
1740     IF p_attr_rec.type = G_TYPE_DATE THEN
1741 	RETURN 'Dates_NLS.Char_To_Date(Name_In('''||p_block_name||'.'
1742 	    ||UPPER(p_attr_rec.code)||'''))';
1743     ELSE
1744 	RETURN 'Name_In('''||p_block_name||'.'||UPPER(p_attr_rec.code)||''')';
1745     END IF;
1746 
1747 END Get_Name_In;
1748 
1749 PROCEDURE Add_Copy
1750 (   p_file	    IN	UTL_FILE.file_type
1751 ,   p_source	    IN	VARCHAR2
1752 ,   p_dest	    IN	VARCHAR2
1753 ,   p_type	    IN	VARCHAR2 := G_TYPE_CHAR
1754 ,   p_level	    IN	NUMBER := 1
1755 )
1756 IS
1757 BEGIN
1758 
1759     IF p_type = G_TYPE_NUMBER THEN
1760 	Text(p_file,'Copy(To_Char('||p_source||'),'''||p_dest||''');',p_level);
1761     ELSIF p_type = G_TYPE_DATE THEN
1762 	Text(p_file,'Copy(Dates_NLS.Date_To_Char('||p_source||'),'''||p_dest||''');',p_level);
1763     ELSIF p_type = G_TYPE_CHAR THEN
1764 	Text (p_file,'Copy('||p_source||','''||p_dest||''');',p_level);
1765     END IF;
1766 
1767 END Add_Copy;
1768 
1769 PROCEDURE IDL_Comment
1770 (   p_file	    IN  UTL_FILE.file_type
1771 ,   p_comment	    IN  VARCHAR2
1772 ,   p_level	    IN  NUMBER := 1
1776 IS
1773 ,   p_line_before   IN	BOOLEAN := TRUE
1774 ,   p_line_after    IN	BOOLEAN := TRUE
1775 )
1777 BEGIN
1778 
1779     IF p_line_before THEN
1780         UTL_FILE.new_line(p_file);
1781     END IF;
1782 
1783     Text(p_file,'//  '||p_comment,p_level);
1784 
1785     IF p_line_after THEN
1786         UTL_FILE.new_line(p_file);
1787     END IF;
1788 
1789 END IDL_Comment;
1790 
1791 PROCEDURE IDL_Header
1792 (   p_file	    IN  UTL_FILE.file_type
1793 ,   p_filename	    IN  VARCHAR2
1794 ,   p_object_name   IN  VARCHAR2
1795 )
1796 IS
1797 BEGIN
1798 
1799     --	Copyright section.
1800 
1801     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1802     IDL_Comment ( p_file ,
1803 	'Copyright (c) 1996 Oracle Corporation, Redwood Shores, CA, USA',
1804 				0,FALSE,FALSE);
1805     IDL_Comment ( p_file , 'All rights reserved.',0,FALSE,FALSE);
1806     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1807     IDL_Comment ( p_file , 'FILENAME',0,FALSE,FALSE);
1808     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1809     IDL_Comment ( p_file , '    '||p_filename,0,FALSE,FALSE);
1810     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1811     IDL_Comment ( p_file , 'DESCRIPTION',0,FALSE,FALSE);
1812     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1813     IDL_Comment ( p_file , '    '||'CORBA IDL for '||p_object_name||
1814 			' business object.' ,0,FALSE,FALSE);
1815     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1816     IDL_Comment ( p_file ,'NOTES',0,FALSE,FALSE);
1817     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1818     IDL_Comment ( p_file ,'HISTORY',0,FALSE,FALSE);
1819     IDL_Comment ( p_file , '',0,FALSE,FALSE);
1820     IDL_Comment ( p_file , TO_CHAR(SYSDATE)||' Created',0,FALSE,FALSE);
1821     IDL_Comment ( p_file , '',0,FALSE,TRUE);
1822 
1823     --	$Header clause.
1824 
1825     Text (p_file,'/* $Header: OEXTGENB.pls 120.0 2005/06/01 23:18:13 appldev noship $ */',0);
1826 
1827     --	Standard INCLUDE clause.
1828 
1829     IDL_Comment ( p_file , 'Standard Include',0);
1830     Text ( p_file,'#include "../fnd/arb/arb.idl"',0);
1831 
1832     --	Module name
1833 
1834     IDL_Comment ( p_file , 'Module definition',0);
1835     Text ( p_file,'module '||p_object_name||' { module IDL {',0);
1836 
1837 END IDL_Header;
1838 
1839 FUNCTION Strip_Underscore
1840 (   p_string	    IN	VARCHAR2
1841 )
1842 RETURN VARCHAR2
1843 IS
1844 l_buffer	VARCHAR2(2000);
1845 l_begin		NUMBER;
1846 l_position	NUMBER;
1847 BEGIN
1848 
1849     l_begin	:=  1;
1850     l_buffer	:=  NULL;
1851 
1852     l_position	:= INSTR ( p_string , '_' , l_begin , 1 );
1853 
1854     WHILE l_position <> 0 LOOP
1855 
1856 
1857 	l_buffer := l_buffer ||
1858 		    INITCAP(SUBSTR(p_string,l_begin,l_position-l_begin)) ;
1859 
1860 
1861 	l_begin := l_position + 1 ;
1862 
1863 	l_position	:= INSTR ( p_string , '_' , l_begin , 1 );
1864 
1865     END LOOP;
1866 
1867     RETURN l_buffer||INITCAP(SUBSTR(p_string,l_begin,
1868 		LENGTH(p_string)-l_begin+1)) ;
1869 
1870 END Strip_Underscore;
1871 
1872 PROCEDURE Strip_Entities
1873 IS
1874 BEGIN
1875 
1876     --	Object name
1877 
1878     g_object_name := Strip_Underscore ( g_object_name );
1879 
1880     --	Entity names
1881 
1882     FOR I IN 1..g_entity_tbl.COUNT LOOP
1883 
1884 	g_entity_tbl(I).name := Strip_Underscore (g_entity_tbl(I).name);
1885 
1886     END LOOP;
1887 
1888 END Strip_Entities;
1889 
1890 FUNCTION Strip_Attributes
1891 (   p_attr_tbl	    IN	Attribute_Tbl_Type
1892 )
1893 RETURN Attribute_Tbl_Type
1894 IS
1895 l_attr_tbl  Attribute_Tbl_Type;
1896 l_attr_rec  Attribute_Rec_Type;
1897 BEGIN
1898 
1899     FOR I IN 1..p_attr_tbl.COUNT LOOP
1900 
1901 	l_attr_rec := p_attr_tbl(I);
1902 	l_attr_rec.name := Strip_Underscore (l_attr_rec.name);
1903 	l_attr_tbl(I) := l_attr_rec;
1904 
1905     END LOOP;
1906 
1907     RETURN l_attr_tbl;
1908 
1909 END Strip_Attributes;
1910 
1911 PROCEDURE IDL_Parameter
1912 (   p_file	IN  UTL_FILE.file_type
1913 ,   p_param	IN  VARCHAR2
1914 ,   p_mode	IN  VARCHAR2 := 'in'
1915 ,   p_type	IN  VARCHAR2
1916 ,   p_level	IN  NUMBER := 1
1917 ,   p_first	IN  BOOLEAN := FALSE
1918 )
1919 IS
1920 l_first		varchar2(1);
1921 l_prefix	VARCHAR2(10);
1922 l_rpad		NUMBER;
1923 BEGIN
1924 
1925     IF p_mode = 'in' THEN
1926 	l_prefix := 'p';
1927     ELSE
1928 	l_prefix := 'x';
1929     END IF;
1930 
1931     IF p_first THEN
1932 	l_first := '(';
1933     ELSE
1934 	l_first := ',';
1935     END IF;
1936 
1937     IF 32 <= LENGTH(p_type) THEN
1938 	l_rpad := LENGTH(p_type) +1;
1939     ELSE
1940 	l_rpad := 32;
1941     END IF;
1942 
1943     Text(   p_file
1944 	,   RPAD(l_first,4)||RPAD(p_mode,4)||RPAD(p_type,l_rpad)
1945 	    ||l_prefix||p_param
1946 	,   p_level
1947 	);
1948 
1949 END IDL_Parameter;
1950 
1951 FUNCTION Get_Attr_Values
1952 (   p_attr_code	    IN	VARCHAR2
1953 ) RETURN Attribute_Tbl_Type
1957 
1954 IS
1955 l_attr_tbl	Attribute_Tbl_Type;
1956 BEGIN
1958     FOR I IN 1..g_attr_value_tbl.COUNT LOOP
1959 
1960 	IF g_attr_value_tbl(I).code = p_attr_code THEN
1961 
1962 	    l_attr_tbl(l_attr_tbl.COUNT+1) := g_attr_value_tbl(I);
1963 
1964 	END IF;
1965 
1966     END LOOP;
1967 
1968     RETURN l_attr_tbl;
1969 
1970 END Get_Attr_Values;
1971 
1972 PROCEDURE Get_Api_Parameters
1973 (   p_file	    IN  UTL_FILE.file_type
1974 ,   p_product	    IN	VARCHAR2
1975 ,   p_object	    IN	VARCHAR2
1976 ,   p_name	    IN  VARCHAR2
1977 ,   p_type	    IN  VARCHAR2 := G_API_TYPE_PVT
1978 ,   p_entity_tbl    IN	Entity_Tbl_Type
1979 )
1980 IS
1981    l_entity_attr_tbl	Attribute_Tbl_Type;
1982    l_p_pkg		VARCHAR2(30) := NULL;
1983    l_attr_csr		INTEGER;
1984    l_result		INTEGER;
1985    l_default_and_val	BOOLEAN := FALSE;
1986 BEGIN
1987 
1988    IF p_type <> G_API_TYPE_PUB
1989      THEN
1990       l_p_pkg := p_product || '_' || INITCAP(p_object) || '_PUB.';
1991    END IF;
1992 
1993    IF p_type = G_API_TYPE_PUB THEN
1994       l_default_and_val := TRUE;
1995    END IF;
1996 
1997    Text (p_file ,'PROCEDURE '||p_name,0);
1998 
1999    --	IN parameters.
2000 
2001    Parameter(p_file,'api_version_number','IN',
2002 	     G_TYPE_NUMBER,0,30,TRUE);
2003    Parameter(p_file,'init_msg_list','IN',
2004 	     'VARCHAR2 := FND_API.G_FALSE',0);
2005 
2006    IF p_type = G_API_TYPE_PUB
2007      THEN
2008       Parameter(p_file,'return_values','IN',
2009 		'VARCHAR2 := FND_API.G_FALSE',0);
2010    END IF;
2011 
2012    Parameter(p_file,'return_status','OUT',
2013 	     G_TYPE_CHAR,0);
2014    Parameter(p_file,'msg_count','OUT',
2015 	     G_TYPE_NUMBER,0);
2016    Parameter(p_file,'msg_data','OUT',
2017 	     G_TYPE_CHAR,0);
2018 
2019    --	In ID and Value parameters.
2020 
2021    FOR I IN 1..p_entity_tbl.COUNT LOOP
2022 
2023       -- For root object
2024 
2025       IF p_entity_tbl(I).parent IS NULL
2026 	THEN
2027 
2028 	 Load_Entity_Attributes(p_entity_tbl(I));
2029 
2030 	 Load_Entity_Attribute_Values(p_entity_tbl(I));
2031 
2032 	 Parameter_PK
2033 	 (   p_file		=>  p_file
2034 	 ,   p_first		=>  FALSE
2035 	 ,   p_default_miss	=>  l_default_and_val
2036 	 ,   p_value		=>  l_default_and_val
2037 	 );
2038 
2039       END IF;
2040 
2041    END LOOP;
2042 
2043    --	OUT parameters.
2044 
2045    FOR I IN 1..p_entity_tbl.COUNT LOOP
2046 
2047       --  for each entity add one OUT
2048 
2049 	IF Multiple_Branch(I) THEN
2050 
2051 	 --	Add tbl.
2052 
2053 	 Parameter
2054 	 (   p_file
2055 	 ,   p_entity_tbl(I).name||'_tbl'
2056 	 ,   'OUT'
2057 	 ,   l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Tbl_Type'
2058 	 ,   0
2059 	 );
2060 
2061 	 IF p_type = G_API_TYPE_PUB THEN
2062 
2063 	    Parameter
2064 	    (p_file
2065 	    ,p_entity_tbl(I).name||'_val_tbl'
2066 	    ,'OUT'
2067 	    ,l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Val_Tbl_Type'
2068 	    ,0
2069 	    );
2070 
2071 	 END IF;
2072 
2073        ELSE
2074 
2075 	 --	Add Rec
2076 
2077 	 Parameter
2078 	   (p_file
2079 	    ,p_entity_tbl(I).name||'_rec'
2080 	    ,'OUT'
2081 	    ,l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Rec_Type'
2082 	    ,0
2083 	    );
2084 
2085 	 IF p_type = G_API_TYPE_PUB THEN
2086 
2087 	    Parameter
2088 	    (p_file
2089 	    ,p_entity_tbl(I).name||'_val_rec'
2090 	    ,'OUT'
2091 	    ,l_p_pkg||INITCAP(p_entity_tbl(I).name)||'_Val_Rec_Type'
2092 	    ,0
2093 	    );
2094 
2095 	 END IF;
2096 
2097       END IF;
2098 
2099    END LOOP;
2100 
2101 END Get_Api_Parameters;
2102 
2103 PROCEDURE Null_Or_Missing
2104 (  p_file		IN  UTL_FILE.file_type
2105 ,  p_attribute		IN  attribute_rec_type
2106 ,  p_prefix_text	IN  VARCHAR2 := NULL
2107 ,  p_not		IN  BOOLEAN := TRUE
2108 ,  p_and		IN  BOOLEAN := TRUE
2109 ,  p_level		IN  NUMBER  := 1
2110 ,  p_first		IN  BOOLEAN := FALSE
2111 )
2112 IS
2113    l_buffer1		VARCHAR2(100) := NULL;
2114    l_buffer2		VARCHAR2(10) := NULL;
2115    l_buffer3		VARCHAR2(10) := NULL;
2116    l_pk_attr_type	VARCHAR2(30) := NULL;
2117 BEGIN
2118 
2119 
2120    IF p_attribute.type = OE_GENERATE.G_TYPE_NUMBER THEN
2121       l_pk_attr_type := 'FND_API.G_MISS_NUM';
2122     ELSIF p_attribute.type = OE_GENERATE.G_TYPE_CHAR THEN
2123       l_pk_attr_type := 'FND_API.G_MISS_CHAR';
2124     ELSIF p_attribute.type = OE_GENERATE.G_TYPE_DATE THEN
2125       l_pk_attr_type := 'FND_API.G_MISS_DATE';
2126    END IF;
2127 
2128    l_buffer1 := p_prefix_text || p_attribute.code;
2129 
2130    IF p_not THEN
2131       l_buffer2 := ' NOT';
2132       l_buffer3 := ' <> ';
2133     ELSE
2134       l_buffer2 := NULL;
2135       l_buffer3 := ' = ';
2136    END IF;
2137 
2138    IF NOT p_first THEN
2139       IF p_and THEN
2140 	 OE_GENERATE.Text (p_file , 'AND' , p_level);
2141        ELSE
2145    END IF;
2142 	 OE_GENERATE.Text (p_file , 'OR' , p_level);
2143       END IF;
2144       -- UTL_FILE.new_line(p_file);
2146 
2147    OE_GENERATE.Text
2148    (   p_file
2149    ,   '(' || l_buffer1 || ' IS' || l_buffer2 || ' NULL'
2150    ,   p_level
2151    );
2152 
2153    IF p_and THEN
2154       OE_GENERATE.Text (p_file , ' AND' , p_level);
2155     ELSE
2156       OE_GENERATE.Text (p_file , ' OR' , p_level);
2157    END IF;
2158 
2159    OE_GENERATE.Text
2160    (   p_file
2161    ,   ' ' || l_buffer1 || l_buffer3 || l_pk_attr_type || ')'
2162    ,   p_level
2163    );
2164 
2165 END Null_Or_Missing;
2166 
2167 PROCEDURE Load_Entity_Attributes
2168 (   p_entity_rec    IN  Entity_Rec_Type
2169 )
2170 IS
2171    l_attr_csr		INTEGER;
2172    l_result		INTEGER;
2173 BEGIN
2174 
2175    --  Get entity attributes. Use dynamic SQL.
2176 
2177    l_attr_csr := DBMS_SQL.open_cursor;
2178 
2179    --  Parse statement.
2180 
2181    DBMS_SQL.parse
2182      (c		=> l_attr_csr,
2183       statement	=> 'BEGIN ' || g_product || '_' ||
2184 		   p_entity_rec.name ||
2185 		   '_Attr.Get_Attr_tbl; END;',
2186       language_flag	=> DBMS_SQL.native
2187       );
2188 
2189    --  Execute procedure
2190 
2191    l_result := DBMS_SQL.execute(l_attr_csr);
2192 
2193    IF l_result = 0 THEN
2194 
2195       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2196 
2197    END IF;
2198 
2199    --  Close the cursor.
2200 
2201    DBMS_SQL.close_cursor (l_attr_csr);
2202 
2203    --  Load the primary key attribute table.
2204 
2205    Load_PK_Attr_Tbl;
2206 
2207 END Load_Entity_Attributes;
2208 
2209 PROCEDURE Load_Entity_Attribute_Values
2210 (   p_entity_rec    IN  Entity_Rec_Type
2211 )
2212 IS
2213    l_attr_csr		INTEGER;
2214    l_result		INTEGER;
2215 BEGIN
2216 
2217    --  Get entity attributes. Use dynamic SQL.
2218 
2219    l_attr_csr := DBMS_SQL.open_cursor;
2220 
2221    --  Parse statement.
2222 
2223    DBMS_SQL.parse
2224      (c		=> l_attr_csr,
2225       statement	=> 'BEGIN ' || g_product || '_' ||
2226 		   p_entity_rec.name ||
2227 		   '_Attr.Get_Attr_Value_tbl; END;',
2228       language_flag	=> DBMS_SQL.native
2229       );
2230 
2231    --  Execute procedure
2232 
2233    l_result := DBMS_SQL.execute(l_attr_csr);
2234 
2235    IF l_result = 0 THEN
2236 
2237       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2238 
2239    END IF;
2240 
2241    --  Close the cursor.
2242 
2243    DBMS_SQL.close_cursor (l_attr_csr);
2244 
2245 END Load_Entity_Attribute_Values;
2246 
2247 FUNCTION Multiple_Branch
2248 (   p_index	    IN	NUMBER
2249 ) RETURN BOOLEAN
2250 IS
2251 BEGIN
2252 
2253     IF p_index IS NULL THEN
2254 	RETURN FALSE;
2255     END IF;
2256 
2257     IF g_entity_tbl(p_index).multiple THEN
2258 	RETURN TRUE;
2259     ELSE
2260 	RETURN Multiple_Branch(g_entity_tbl(p_index).parent);
2261     END IF;
2262 
2263 END Multiple_Branch;
2264 
2265 FUNCTION Multiple_Branch
2266 (   p_entity_name    IN  VARCHAR2
2267 )   RETURN BOOLEAN
2268 IS
2269 BEGIN
2270 
2271     FOR I IN 1..g_entity_tbl.COUNT LOOP
2272 
2273 	IF p_entity_name = g_entity_tbl(I).name	THEN
2274 
2275 	    RETURN Multiple_Branch(I);
2276 
2277 	END IF;
2278 
2279     END LOOP;
2280 
2281 
2282     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2283 
2284 END Multiple_Branch;
2285 
2286 FUNCTION Convert_Entity_Rec_Type
2287 (   p_runtime_entity_rec	    IN	FND_API.Entity_Rec_Type
2288 ) RETURN OE_GENERATE.Entity_Rec_Type
2289 IS
2290 l_entity_rec	    OE_GENERATE.Entity_Rec_Type;
2291 BEGIN
2292 
2293     l_entity_rec.name	    := p_runtime_entity_rec.name ;
2294     l_entity_rec.tbl	    := p_runtime_entity_rec.tbl ;
2295     l_entity_rec.parent	    := p_runtime_entity_rec.parent ;
2296     l_entity_rec.multiple   := p_runtime_entity_rec.multiple ;
2297     l_entity_rec.code	    := p_runtime_entity_rec.code ;
2298     l_entity_rec.pk_column  := p_runtime_entity_rec.pk_column ;
2299     l_entity_rec.text1	    := p_runtime_entity_rec.text1 ;
2300     l_entity_rec.text2	    := p_runtime_entity_rec.text2 ;
2301     l_entity_rec.text3	    := p_runtime_entity_rec.text3 ;
2302 
2303     RETURN l_entity_rec;
2304 
2305 END Convert_Entity_Rec_Type;
2306 
2307 FUNCTION Convert_Entity_Tbl_Type
2308 (   p_runtime_entity_tbl	    IN	FND_API.Entity_Tbl_Type
2309 ) RETURN OE_GENERATE.Entity_Tbl_Type
2310 IS
2311 l_entity_tbl	    OE_GENERATE.Entity_Tbl_Type;
2312 BEGIN
2313 
2314     FOR I IN 1..p_runtime_entity_tbl.COUNT LOOP
2315 
2316 	l_entity_tbl(I)  := Convert_Entity_Rec_Type(p_runtime_entity_tbl(I));
2317 
2318     END LOOP;
2319 
2320     RETURN l_entity_tbl;
2321 
2324 END OE_GENERATE;
2322 END Convert_Entity_Tbl_Type;
2323