[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