DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_FLEX_LOADER_APIS

Source


1 PACKAGE BODY fnd_flex_loader_apis AS
2 /* $Header: AFFFLDRB.pls 120.20.12010000.1 2008/07/25 14:14:09 appldev ship $ */
3 
4 
5 -- ==================================================
6 -- Constants and Types.
7 -- ==================================================
8 g_newline               VARCHAR2(10);
9 g_api_name              CONSTANT VARCHAR2(10) := 'LDR.';
10 g_date_mask             CONSTANT VARCHAR2(100) := 'YYYY/MM/DD HH24:MI:SS';
11 g_default_lud           DATE;
12 g_debug_on              BOOLEAN;
13 g_left_margin           VARCHAR2(100);
14 g_line_size             CONSTANT NUMBER := 99;
15 g_lub_seed_boundary     CONSTANT NUMBER := 1000;
16 g_unset_lub             CONSTANT NUMBER := -9;
17 g_unset_lud             CONSTANT DATE := To_date('1234/05/06 07:08:09', g_date_mask);
18 g_numof_changes         NUMBER;
19 g_numof_changes_kff_str NUMBER;
20 g_srs_loader_flex_name  VARCHAR2(40);
21 g_default_argument      CONSTANT VARCHAR2(100) := chr(0);
22 g_nvl_value             CONSTANT VARCHAR2(100) := '$FLEX$.$NULL$';
23 g_null_value_constant   CONSTANT VARCHAR2(100) := fnd_load_util.null_value();
24 g_null_value            VARCHAR2(100);
25 g_lock_handle           VARCHAR2(128);
26 g_root_error            VARCHAR2(32000);
27 g_call_stack            VARCHAR2(32000);
28 g_savepoint_entity_name VARCHAR2(30);
29 g_is_commit_ok          BOOLEAN;
30 
31 ENTITY_VALUE_SET        CONSTANT VARCHAR2(30) := 'VALUE_SET';
32 ENTITY_DESC_FLEX        CONSTANT VARCHAR2(30) := 'DESC_FLEX';
33 ENTITY_KEY_FLEX         CONSTANT VARCHAR2(30) := 'KEY_FLEX';
34 
35 -- ERROR_ constants
36 ERROR_LDR_GENERIC              CONSTANT NUMBER := -20000;
37 ERROR_WHEN_OTHERS              CONSTANT NUMBER := -20001;
38 ERROR_NOT_EXIST                CONSTANT NUMBER := -20002;
39 ERROR_UNABLE_TO_LOCK           CONSTANT NUMBER := -20003;
40 ERROR_UNKNOWN_UP_PHASE         CONSTANT NUMBER := -20004;
41 
42 ERROR_VST_GENERIC              CONSTANT NUMBER := -20100;
43 ERROR_VST_TYPE_MISMATCH        CONSTANT NUMBER := -20101;
44 ERROR_VST_NOT_TABLE_VST        CONSTANT NUMBER := -20102;
45 ERROR_VST_NOT_UEXIT_VST        CONSTANT NUMBER := -20103;
46 ERROR_VST_INVALID_PARENT       CONSTANT NUMBER := -20104;
47 ERROR_VST_INVALID_CH_RNG       CONSTANT NUMBER := -20105;
48 
49 ERROR_DFF_GENERIC              CONSTANT NUMBER := -20200;
50 ERROR_DFF_NO_SRS_LOCK          CONSTANT NUMBER := -20201;
51 ERROR_DFF_NO_LDT_DATA          CONSTANT NUMBER := -20202;
52 ERROR_DFF_INV_PROT_FLG         CONSTANT NUMBER := -20203;
53 ERROR_DFF_COL_USED             CONSTANT NUMBER := -20204;
54 ERROR_DFF_COL_NOT_REG          CONSTANT NUMBER := -20205;
55 
56 ERROR_KFF_GENERIC              CONSTANT NUMBER := -20300;
57 ERROR_KFF_NO_QUALIFIERS        CONSTANT NUMBER := -20301;
58 ERROR_KFF_NOT_QUALIFIED        CONSTANT NUMBER := -20302;
59 ERROR_KFF_COL_USED             CONSTANT NUMBER := -20303;
60 ERROR_KFF_COL_NOT_REG          CONSTANT NUMBER := -20304;
61 
62 
63 SUBTYPE app_type          IS fnd_application%ROWTYPE;
64 SUBTYPE tbl_type          IS fnd_tables%ROWTYPE;
65 SUBTYPE col_type          IS fnd_columns%ROWTYPE;
66 SUBTYPE resp_type         IS fnd_responsibility%ROWTYPE;
67 
68 SUBTYPE vst_set_type      IS fnd_flex_value_sets%ROWTYPE;
69 SUBTYPE vst_tbl_type      IS fnd_flex_validation_tables%ROWTYPE;
70 SUBTYPE vst_evt_type      IS fnd_flex_validation_events%ROWTYPE;
71 SUBTYPE vst_scr_type      IS fnd_flex_value_rules%ROWTYPE;
72 SUBTYPE vst_scr_tl_type   IS fnd_flex_value_rules_tl%ROWTYPE;
73 SUBTYPE vst_scl_type      IS fnd_flex_value_rule_lines%ROWTYPE;
74 SUBTYPE vst_scu_type      IS fnd_flex_value_rule_usages%ROWTYPE;
75 SUBTYPE vst_rgr_type      IS fnd_flex_hierarchies%ROWTYPE;
76 SUBTYPE vst_rgr_tl_type   IS fnd_flex_hierarchies_tl%ROWTYPE;
77 SUBTYPE vst_val_type      IS fnd_flex_values%ROWTYPE;
78 SUBTYPE vst_val_tl_type   IS fnd_flex_values_tl%ROWTYPE;
79 SUBTYPE vst_vlh_type      IS fnd_flex_value_norm_hierarchy%ROWTYPE;
80 
81 SUBTYPE dff_flx_type      IS fnd_descriptive_flexs%ROWTYPE;
82 SUBTYPE dff_flx_tl_type   IS fnd_descriptive_flexs_tl%ROWTYPE;
83 SUBTYPE dff_ref_type      IS fnd_default_context_fields%ROWTYPE;
84 SUBTYPE dff_ctx_type      IS fnd_descr_flex_contexts%ROWTYPE;
85 SUBTYPE dff_ctx_tl_type   IS fnd_descr_flex_contexts_tl%ROWTYPE;
86 SUBTYPE dff_seg_type      IS fnd_descr_flex_column_usages%ROWTYPE;
87 SUBTYPE dff_seg_tl_type   IS fnd_descr_flex_col_usage_tl%ROWTYPE;
88 
89 SUBTYPE kff_flx_type      IS fnd_id_flexs%ROWTYPE;
90 SUBTYPE kff_flq_type      IS fnd_segment_attribute_types%ROWTYPE;
91 SUBTYPE kff_sgq_type      IS fnd_value_attribute_types%ROWTYPE;
92 SUBTYPE kff_sgq_tl_type   IS fnd_val_attribute_types_tl%ROWTYPE;
93 SUBTYPE kff_str_type      IS fnd_id_flex_structures%ROWTYPE;
94 SUBTYPE kff_str_tl_type   IS fnd_id_flex_structures_tl%ROWTYPE;
95 SUBTYPE kff_wfp_type      IS fnd_flex_workflow_processes%ROWTYPE;
96 SUBTYPE kff_sha_type      IS fnd_shorthand_flex_aliases%ROWTYPE;
97 SUBTYPE kff_cvr_type      IS fnd_flex_validation_rules%ROWTYPE;
98 SUBTYPE kff_cvr_tl_type   IS fnd_flex_vdation_rules_tl%ROWTYPE;
99 SUBTYPE kff_cvl_type      IS fnd_flex_validation_rule_lines%ROWTYPE;
100 SUBTYPE kff_seg_type      IS fnd_id_flex_segments%ROWTYPE;
101 SUBTYPE kff_seg_tl_type   IS fnd_id_flex_segments_tl%ROWTYPE;
102 SUBTYPE kff_fqa_type      IS fnd_segment_attribute_values%ROWTYPE;
103 
104 TYPE vtv_rec_type IS RECORD
105   (
106    id_flex_application_id NUMBER,
107    id_flex_code           VARCHAR2(10),
108    segment_attribute_type VARCHAR2(100),
109    value_attribute_type   VARCHAR2(100),
110    assignment_date        DATE,
111    lookup_type            VARCHAR2(100),
112    default_value          VARCHAR2(100),
113    qualifier_value        VARCHAR2(100)
114    );
115 
116 TYPE vtv_arr_type IS TABLE OF vtv_rec_type INDEX BY BINARY_INTEGER;
117 TYPE dff_seg_arr_type IS TABLE OF dff_seg_type INDEX BY BINARY_INTEGER;
118 
119 -- ==================================================
120 -- Helper functions.
121 -- ==================================================
122 
123 -- --------------------------------------------------
124 PROCEDURE set_context
125   (p_name                         IN VARCHAR2,
126    p_value                        IN VARCHAR2)
127   IS
128 BEGIN
129    NULL;
130 END set_context;
131 
132 -- --------------------------------------------------
133 PROCEDURE set_debugging(p_debug_flag IN VARCHAR2)
134   IS
135 BEGIN
136    IF (Nvl(Upper(Substr(p_debug_flag,1,1)),'N') = 'Y') THEN
137       g_debug_on := TRUE;
138     ELSE
139       g_debug_on := FALSE;
140    END IF;
141 END set_debugging;
142 
143 -- --------------------------------------------------
144 FUNCTION indent_lines(p_text   IN VARCHAR2,
145                       p_indent IN NUMBER) RETURN VARCHAR2
146   IS
147      l_result    VARCHAR2(32000);
148      l_vc2       VARCHAR2(32000);
149      l_text      VARCHAR2(32000);
150      l_lm_length NUMBER;
151      l_nl_used   BOOLEAN;
152      l_nl_pos    NUMBER;
153      l_cut_pos   NUMBER;
154 BEGIN
155    l_text := p_text;
156    l_lm_length := Nvl(Length(g_left_margin), 0);
157    --
158    -- +---------------------------------------------
159    -- |left
160    -- |margin  indent
161    -- <------><---->
162    -- | | | | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
163    -- | | | |       xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n
164    -- | | | |       xxxxxxxxxxxxxxxxxxxxxxx\n
165    -- <-------------------------------------------->
166    -- |           line size
167    -- +---------------------------------------------
168    --
169    --
170    -- First Line.
171    --
172 
173    l_nl_pos := Instr(l_text, g_newline, 1, 1);
174    l_nl_used := FALSE;
175 
176    IF ((0 < l_nl_pos) AND (l_nl_pos < g_line_size - l_lm_length)) THEN
177       l_cut_pos := l_nl_pos - 1;
178       l_nl_used := TRUE;
179     ELSE
180       l_cut_pos := g_line_size - l_lm_length;
181    END IF;
182 
183    l_result := (g_left_margin ||
184                 Substr(l_text, 1, l_cut_pos) ||
185                 g_newline);
186 
187    IF (l_nl_used) THEN
188       l_cut_pos := l_cut_pos + 1;
189    END IF;
190 
191    l_text := Substr(l_text, l_cut_pos + 1);
192 
193    --
194    -- Remaining Lines:
195    --
196    WHILE (l_text IS NOT NULL) LOOP
197       l_nl_pos := Instr(l_text, g_newline, 1, 1);
198       l_nl_used := FALSE;
199 
200       IF ((0 < l_nl_pos) AND (l_nl_pos < g_line_size - p_indent - l_lm_length)) THEN
201          l_cut_pos := l_nl_pos - 1;
202          l_nl_used := TRUE;
203        ELSE
204          l_cut_pos := g_line_size - p_indent - l_lm_length;
205       END IF;
206 
207       l_result := (l_result ||
208                    g_left_margin ||
209                    Rpad(' ', p_indent, ' ') ||
210                    Substr(l_text, 1, l_cut_pos) ||
211                    g_newline);
212 
213       IF (l_nl_used) THEN
214          l_cut_pos := l_cut_pos + 1;
215       END IF;
216 
217       l_text := Substr(l_text, l_cut_pos + 1);
218    END LOOP;
219    RETURN(l_result);
220 EXCEPTION
221    WHEN OTHERS THEN
222       RETURN(p_text);
223 END indent_lines;
224 
225 -- --------------------------------------------------
226 PROCEDURE debug_raw(p_debug IN VARCHAR2)
227   IS
228 BEGIN
229    --
230    -- Sample Output :
231    --
232    --<debug>
233    --
234    IF (g_debug_on) THEN
235       fnd_file.put(fnd_file.Log, p_debug);
236    END IF;
237 EXCEPTION
238    WHEN OTHERS THEN
239       NULL;
240 END debug_raw;
241 
242 -- --------------------------------------------------
243 PROCEDURE debug(p_debug IN VARCHAR2)
244   IS
245 BEGIN
246    --
247    -- Sample Output :
248    --
249    -- left
250    -- margin
251    --<------>
252    --| | | | <debug>
253    --
254    IF (g_debug_on) THEN
255       debug_raw(indent_lines(p_debug, 9));
256    END IF;
257 EXCEPTION
258    WHEN OTHERS THEN
259       NULL;
260 END debug;
261 
262 -- --------------------------------------------------
263 PROCEDURE debug(p_func_name  IN VARCHAR2,
264                 p_debug1     IN VARCHAR2,
265                 p_debug2     IN VARCHAR2 DEFAULT NULL,
266                 p_debug3     IN VARCHAR2 DEFAULT NULL,
267                 p_debug4     IN VARCHAR2 DEFAULT NULL,
268                 p_debug5     IN VARCHAR2 DEFAULT NULL)
269   IS
270 BEGIN
271    --
272    -- Sample Output :
273    --
274    -- left
275    -- margin
276    --<------>
277    --| | | | FUNCTION:LDR.up_kff_column()
278    --| | | | DEBUG   :UMODE:,CMODE:,APPS:SQLGL,KFF:GL#,COL:SEGMENT9,USG:K
279    --| | | |
280    --
281    IF (g_debug_on) THEN
282       debug('FUNCTION:' || p_func_name);
283       debug('DEBUG   :' || p_debug1);
284       IF (p_debug2 IS NOT NULL) THEN
285          debug('DEBUG   :' || p_debug2);
286       END IF;
287       IF (p_debug3 IS NOT NULL) THEN
288          debug('DEBUG   :' || p_debug3);
289       END IF;
290       IF (p_debug4 IS NOT NULL) THEN
291          debug('DEBUG   :' || p_debug4);
292       END IF;
293       IF (p_debug5 IS NOT NULL) THEN
294          debug('DEBUG   :' || p_debug5);
295       END IF;
296       debug(' ');
297    END IF;
298 EXCEPTION
299    WHEN OTHERS THEN
300       NULL;
301 END debug;
302 
303 -- --------------------------------------------------
304 PROCEDURE debug_exception(p_func_name  IN VARCHAR2,
305                           p_error      IN VARCHAR2)
306   IS
307      l_sqlerrm VARCHAR2(32000) := NULL;
308 BEGIN
309    --
310    -- Sample Output :
311    --
312    --|  ERROR in flex loader function :'LDR.get_app(short_name, P)'
313    --|  DEBUG   :Error...
314    --|  SQLERRM :ORA-0000: normal, successful completion
315    --|
316    --
317    IF (g_debug_on) THEN
318       IF (SQLCODE <> 0) THEN
319          l_sqlerrm := indent_lines('SQLERRM :' || Sqlerrm, 9);
320        ELSE
321          --
322          -- SQLERRM is already indented.
323          --
324          l_sqlerrm := g_left_margin || 'SQLERRM :' || Sqlerrm || g_newline;
325       END IF;
326 
327       debug('ERROR in flex loader function :'''|| p_func_name || '''');
328       debug('DEBUG   :' || p_error);
329       debug_raw(l_sqlerrm);
330       debug(' ');
331    END IF;
332 EXCEPTION
333    WHEN OTHERS THEN
334       NULL;
335 END debug_exception;
336 
337 -- --------------------------------------------------
338 PROCEDURE debug_exception_top_level(p_func_name IN VARCHAR2)
339   IS
340 BEGIN
341    IF (g_debug_on) THEN
342       debug_exception(p_func_name, 'Top Level EXCEPTION OTHERS.');
343    END IF;
344 EXCEPTION
345    WHEN OTHERS THEN
346       NULL;
347 END debug_exception_top_level;
348 
349 -- --------------------------------------------------
350 PROCEDURE raise_error(p_func_name  IN VARCHAR2,
351                       p_error_code IN NUMBER,
352                       p_error      IN VARCHAR2,
353                       p_solution   IN VARCHAR2 DEFAULT NULL)
354   IS
355      l_error VARCHAR2(32000);
356 BEGIN
357    IF (g_debug_on) THEN
358       debug_exception(p_func_name, p_error);
359    END IF;
360 
361    IF (p_solution IS NULL) THEN
362       l_error := p_error || '.';
363     ELSE
364       l_error := p_error || '. ' || p_solution || '.';
365    END IF;
366 
367    raise_application_error(p_error_code, l_error, TRUE);
368 
369 EXCEPTION
370    WHEN OTHERS THEN
371       IF (g_root_error IS NULL) THEN
372          --
373          -- This is the main error, record the error, and the call stack.
374          --
375          g_root_error := dbms_utility.format_error_stack();
376          g_call_stack := dbms_utility.format_call_stack();
377          g_is_commit_ok := FALSE;
378       END IF;
379       RAISE;
380 END raise_error;
381 
382 -- --------------------------------------------------
383 PROCEDURE raise_not_exist(p_func_name IN VARCHAR2,
384                           p_solution  IN VARCHAR2,
385                           p_key1      IN VARCHAR2,
386                           p_value1    IN VARCHAR2,
387                           p_key2      IN VARCHAR2 DEFAULT NULL,
388                           p_value2    IN VARCHAR2 DEFAULT NULL,
389                           p_key3      IN VARCHAR2 DEFAULT NULL,
390                           p_value3    IN VARCHAR2 DEFAULT NULL,
391                           p_key4      IN VARCHAR2 DEFAULT NULL,
392                           p_value4    IN VARCHAR2 DEFAULT NULL,
393                           p_key5      IN VARCHAR2 DEFAULT NULL,
394                           p_value5    IN VARCHAR2 DEFAULT NULL,
395                           p_key6      IN VARCHAR2 DEFAULT NULL,
396                           p_value6    IN VARCHAR2 DEFAULT NULL,
397                           p_key7      IN VARCHAR2 DEFAULT NULL,
398                           p_value7    IN VARCHAR2 DEFAULT NULL)
399   IS
400      l_error VARCHAR2(32000);
401 BEGIN
402    l_error := (Upper(p_func_name) || ' is not able to find ' ||
403                Upper(p_key1) || ':''' || p_value1 || '''');
404    IF (p_key2 IS NOT NULL) THEN
405       l_error := l_error || ', ' || Upper(p_key2) || ':''' || p_value2 || '''';
406    END IF;
407    IF (p_key3 IS NOT NULL) THEN
408       l_error := l_error || ', ' || Upper(p_key3) || ':''' || p_value3 || '''';
409    END IF;
410    IF (p_key4 IS NOT NULL) THEN
411       l_error := l_error || ', ' || Upper(p_key4) || ':''' || p_value4 || '''';
412    END IF;
413    IF (p_key5 IS NOT NULL) THEN
414       l_error := l_error || ', ' || Upper(p_key5) || ':''' || p_value5 || '''';
415    END IF;
416    IF (p_key6 IS NOT NULL) THEN
417       l_error := l_error || ', ' || Upper(p_key6) || ':''' || p_value6 || '''';
418    END IF;
419    IF (p_key7 IS NOT NULL) THEN
420       l_error := l_error || ', ' || Upper(p_key7) || ':''' || p_value7 || '''';
421    END IF;
422 
423    raise_error(p_func_name, ERROR_NOT_EXIST, l_error, p_solution);
424    --
425    -- No exception handling here.
426    --
427 END raise_not_exist;
428 
429 -- --------------------------------------------------
430 FUNCTION signature(p_func_name IN VARCHAR2,
431                    p_arg1      IN VARCHAR2 DEFAULT g_default_argument,
432                    p_arg2      IN VARCHAR2 DEFAULT g_default_argument,
433                    p_arg3      IN VARCHAR2 DEFAULT g_default_argument,
434                    p_arg4      IN VARCHAR2 DEFAULT g_default_argument,
435                    p_arg5      IN VARCHAR2 DEFAULT g_default_argument,
436                    p_arg6      IN VARCHAR2 DEFAULT g_default_argument,
437                    p_arg7      IN VARCHAR2 DEFAULT g_default_argument,
438                    p_arg8      IN VARCHAR2 DEFAULT g_default_argument,
439                    p_arg9      IN VARCHAR2 DEFAULT g_default_argument,
440                    p_arg10     IN VARCHAR2 DEFAULT g_default_argument)
441   RETURN VARCHAR2
442   IS
443      l_signature VARCHAR2(32000);
444 
445      PROCEDURE add_argument(px_signature IN OUT nocopy VARCHAR2,
446                             p_arg        IN VARCHAR2 DEFAULT g_default_argument)
447        IS
448      BEGIN
449         IF (Nvl(p_arg, 'X') <> g_default_argument) THEN
450            px_signature := px_signature || ', ' || p_arg;
451         END IF;
452      END add_argument;
453 
454 BEGIN
455    l_signature := p_func_name || '(';
456 
457    --
458    -- Add first argument (no comma before first arg)
459    --
460    IF (Nvl(p_arg1, 'X') <> g_default_argument) THEN
461       l_signature := l_signature || p_arg1;
462    END IF;
463 
464    --
465    -- Add other arguments
466    --
467    add_argument(l_signature, p_arg2);
468    add_argument(l_signature, p_arg3);
469    add_argument(l_signature, p_arg4);
470    add_argument(l_signature, p_arg5);
471    add_argument(l_signature, p_arg6);
472    add_argument(l_signature, p_arg7);
473    add_argument(l_signature, p_arg8);
474    add_argument(l_signature, p_arg9);
475    add_argument(l_signature, p_arg10);
476 
477    l_signature := l_signature || ')';
478 
479    RETURN l_signature;
480 EXCEPTION
481    WHEN OTHERS THEN
482       RETURN p_func_name || '(signature)';
483 END signature;
484 
485 -- --------------------------------------------------
486 PROCEDURE raise_when_others(p_func_name IN VARCHAR2,
487                             p_arg1      IN VARCHAR2 DEFAULT g_default_argument,
488                             p_arg2      IN VARCHAR2 DEFAULT g_default_argument,
489                             p_arg3      IN VARCHAR2 DEFAULT g_default_argument,
490                             p_arg4      IN VARCHAR2 DEFAULT g_default_argument,
491                             p_arg5      IN VARCHAR2 DEFAULT g_default_argument,
492                             p_arg6      IN VARCHAR2 DEFAULT g_default_argument,
493                             p_arg7      IN VARCHAR2 DEFAULT g_default_argument,
494                             p_arg8      IN VARCHAR2 DEFAULT g_default_argument,
495                             p_arg9      IN VARCHAR2 DEFAULT g_default_argument,
496                             p_arg10     IN VARCHAR2 DEFAULT g_default_argument)
497 IS
498    l_error VARCHAR2(32000);
499 BEGIN
500    l_error := signature(p_func_name,
501                         p_arg1, p_arg2, p_arg3, p_arg4, p_arg5,
502                         p_arg6, p_arg7, p_arg8, p_arg9, p_arg10) ||
503      ' raised exception';
504 
505    raise_error(p_func_name, ERROR_WHEN_OTHERS, l_error);
506 
507    -- No exception handling here
508 end raise_when_others;
509 
510 -- --------------------------------------------------
511 PROCEDURE report_exception
512   IS
513      PROCEDURE print(p_text IN VARCHAR2)
514        IS
515      BEGIN
516         fnd_file.put_line(fnd_file.Log, p_text);
517      END print;
518 BEGIN
519    print(Rpad('=', 80, '='));
520    print(g_root_error);
521    print(' ');
522    print(Rpad('-', 5, '-') || ' Error Message Stack ' || Rpad('-', 5, '-'));
523    print(dbms_utility.format_error_stack());
524    print(' ');
525    print(dbms_utility.format_call_stack());
526    print(rpad('=', 80, '='));
527 
528    g_root_error := NULL;
529    g_call_stack := NULL;
530 
531 EXCEPTION
532    WHEN OTHERS THEN
533       g_root_error := NULL;
534       g_call_stack := NULL;
535 
536       raise_when_others('report_exception');
537 END report_exception;
538 
539 -- --------------------------------------------------
540 PROCEDURE report_public_api_exception
541   (p_func_name IN VARCHAR2,
542    p_arg1      IN VARCHAR2 DEFAULT g_default_argument,
543    p_arg2      IN VARCHAR2 DEFAULT g_default_argument,
544    p_arg3      IN VARCHAR2 DEFAULT g_default_argument,
545    p_arg4      IN VARCHAR2 DEFAULT g_default_argument,
546    p_arg5      IN VARCHAR2 DEFAULT g_default_argument,
547    p_arg6      IN VARCHAR2 DEFAULT g_default_argument,
548    p_arg7      IN VARCHAR2 DEFAULT g_default_argument,
549    p_arg8      IN VARCHAR2 DEFAULT g_default_argument,
550    p_arg9      IN VARCHAR2 DEFAULT g_default_argument,
551    p_arg10     IN VARCHAR2 DEFAULT g_default_argument)
552   IS
553 BEGIN
554    IF (g_debug_on) THEN
555       --
556       -- GEO!!
557       --
558       debug_exception_top_level(p_func_name);
559    END IF;
560 
561    BEGIN
562       --
563       -- Add the caller's signature to the exception stack
564       --
565       raise_when_others(p_func_name,
566                         p_arg1, p_arg2, p_arg3, p_arg4, p_arg5,
567                         p_arg6, p_arg7, p_arg8, p_arg9, p_arg10);
568    EXCEPTION
569       WHEN OTHERS THEN
570          report_exception();
571    END;
572 EXCEPTION
573    WHEN OTHERS THEN
574       raise_when_others('report_public_api_exception',
575                         p_func_name);
576 END report_public_api_exception;
577 
578 -- --------------------------------------------------
579 PROCEDURE set_left_margin(p_indent_unindent IN NUMBER)
580   IS
581 BEGIN
582    IF (p_indent_unindent = 1) THEN
583       g_left_margin := g_left_margin || '| ';
584     ELSIF (p_indent_unindent = -1) THEN
585       g_left_margin := Rtrim(Rtrim(g_left_margin, ' '), '|');
586     ELSE
587       NULL;
588    END IF;
589 END set_left_margin;
590 
591 -- --------------------------------------------------
592 PROCEDURE init(p_entity       IN VARCHAR2,
593                p_upload_phase IN VARCHAR2)
594   IS
595      l_func_name    VARCHAR2(80);
596      l_vc2          VARCHAR2(2000);
597      l_upload_phase VARCHAR2(100);
598 BEGIN
599    l_func_name := g_api_name || 'init()';
600 
601    l_upload_phase := Nvl(p_upload_phase, 'LEAF');
602    IF (g_debug_on) THEN
603       --
604       -- Sample Output:
605       --
606       --
607       --| | +--KFF_COLUMN------------ 2002/08/22 14:21:15 --
608       --| | |
609       --
610       IF (l_upload_phase IN ('BEGIN', 'LEAF')) THEN
611          l_vc2 := (Rpad(g_left_margin || '+-' || '-' || p_entity,
612                         g_line_size - 23,
613                         '-') ||
614                    ' ' || To_char(Sysdate, g_date_mask) ||
615                    ' -' || '-' ||
616                    g_newline);
617          debug_raw(l_vc2);
618          set_left_margin(1);
619          debug(' ');
620       END IF;
621    END IF;
622 EXCEPTION
623    WHEN OTHERS THEN
624       --
625       -- GEO!!
626       --
627       IF (g_debug_on) THEN
628          debug_exception_top_level(l_func_name);
629       END IF;
630 END init;
631 
632 -- --------------------------------------------------
633 PROCEDURE done(p_entity       IN VARCHAR2,
634                p_upload_phase IN VARCHAR2)
635   IS
636      l_func_name    VARCHAR2(80);
637      l_vc2          VARCHAR2(2000);
638      l_upload_phase VARCHAR2(100);
639 BEGIN
640    l_func_name := g_api_name || 'done()';
641 
642    l_upload_phase := Nvl(p_upload_phase, 'LEAF');
643    IF (g_debug_on) THEN
644       --
645       -- Sample Output:
646       --
647       --| | | +---------------------------------KFF_COLUMN--
648       --| | |
649       --
650       IF (l_upload_phase IN ('LEAF', 'END')) THEN
651          set_left_margin(-1);
652          l_vc2 := (Rpad(g_left_margin || '+',
653                         g_line_size - Length(p_entity) - 2,
654                         '-') ||
655                    p_entity || '--' ||
656                    g_newline);
657          debug_raw(l_vc2);
658          debug(' ');
659       END IF;
660    END IF;
661 EXCEPTION
662    WHEN OTHERS THEN
663       --
664       -- GEO!!
665       --
666       IF (g_debug_on) THEN
667          debug_exception_top_level(l_func_name);
668       END IF;
669 END done;
670 
671 -- --------------------------------------------------
672 PROCEDURE start_transaction(p_entity_name IN VARCHAR2)
673   IS
674      l_func_name  VARCHAR2(80);
675 BEGIN
676    l_func_name := g_api_name || 'start_transaction()';
677 
678    IF (g_savepoint_entity_name IS NOT NULL) THEN
679       raise_error(l_func_name, ERROR_LDR_GENERIC,
680                   'Flex developer error. ' ||
681                   'Loader should not start a new transaction while it is ' ||
682                   'processing an existing transaction. Entity Name of ' ||
683                   'existing transaction: ' || g_savepoint_entity_name);
684    END IF;
685 
686    IF (p_entity_name = ENTITY_VALUE_SET) THEN
687       SAVEPOINT savepoint_value_set;
688 
689     ELSIF (p_entity_name = ENTITY_DESC_FLEX) THEN
690       SAVEPOINT savepoint_desc_flex;
691 
692     ELSIF (p_entity_name = ENTITY_KEY_FLEX) THEN
693       SAVEPOINT savepoint_key_flex;
694 
695     ELSE
696       raise_error(l_func_name, ERROR_LDR_GENERIC,
697                   'Flex developer error. Unknown Entity Name');
698    END IF;
699 
700    g_savepoint_entity_name := p_entity_name;
701    g_is_commit_ok := TRUE;
702 EXCEPTION
703    WHEN OTHERS THEN
704       raise_when_others('start_transaction',
705                         p_entity_name);
706 END start_transaction;
707 
708 -- --------------------------------------------------
709 PROCEDURE finish_transaction(p_entity_name IN VARCHAR2)
710   IS
711      l_func_name  VARCHAR2(80);
712 BEGIN
713    l_func_name := g_api_name || 'finish_transaction()';
714 
715    IF (g_savepoint_entity_name IS NULL) THEN
716       raise_error(l_func_name, ERROR_LDR_GENERIC,
717                   'Flex developer error. No transaction was started');
718    END IF;
719 
720    IF (g_is_commit_ok IS NULL) THEN
721       raise_error(l_func_name, ERROR_LDR_GENERIC,
722                   'Flex developer error. Commit state is set to null');
723     ELSIF (g_is_commit_ok) THEN
724       --
725       -- Let FNDLOAD do the commit.
726       --
727       NULL;
728 
729     ELSE
730       --
731       -- There was an error, rollback to the savepoint.
732       --
733       IF (g_savepoint_entity_name = ENTITY_VALUE_SET) THEN
734          ROLLBACK TO savepoint_value_set;
735 
736        ELSIF (g_savepoint_entity_name = ENTITY_DESC_FLEX) THEN
737          ROLLBACK TO savepoint_desc_flex;
738 
739        ELSIF (g_savepoint_entity_name = ENTITY_KEY_FLEX) THEN
740          ROLLBACK TO savepoint_key_flex;
741 
742        ELSE
743       raise_error(l_func_name, ERROR_LDR_GENERIC,
744                   'Flex developer error. Unknown Savepoint Entity Name: ' ||
745                   g_savepoint_entity_name);
746 
747       END IF;
748    END IF;
749 
750    g_savepoint_entity_name := NULL;
751    g_is_commit_ok := NULL;
752 EXCEPTION
753    WHEN OTHERS THEN
754       raise_when_others('finish_transaction',
755                         p_entity_name);
756 END finish_transaction;
757 
758 -- --------------------------------------------------
759 FUNCTION is_upload_allowed(p_custom_mode                  IN VARCHAR2,
760                            p_file_owner                   IN VARCHAR2,
761                            p_file_last_update_date        IN VARCHAR2,
762                            p_db_last_updated_by           IN NUMBER,
763                            p_db_last_update_date          IN DATE,
764                            x_file_who                     IN OUT nocopy who_type)
765   RETURN BOOLEAN
766   IS
767      l_func_name  VARCHAR2(80);
768      l_db_who     who_type;
769      l_file_owner VARCHAR2(100);
770      l_db_owner   VARCHAR2(100);
771      l_return     BOOLEAN;
772      l_vc2        VARCHAR2(100);
773 BEGIN
774    l_func_name := g_api_name || 'is_upload_allowed()';
775    --
776    -- Set File (Source) WHO.
777    --
778    BEGIN
779       l_file_owner                 := p_file_owner;
780       x_file_who.last_updated_by   := fnd_load_util.owner_id(l_file_owner);
781       --
782       -- Remove the time component from file LUD. We used to use Sysdate for
783       -- NULL case, but it is better to use a fixed date.
784       --
785       x_file_who.last_update_date  := Trunc(Nvl(To_date(p_file_last_update_date,
786                                                         g_date_mask),
787                                                 g_default_lud));
788       x_file_who.last_update_login := 0;
789       x_file_who.created_by        := x_file_who.last_updated_by;
790       x_file_who.creation_date     := x_file_who.last_update_date;
791    EXCEPTION
792       WHEN OTHERS THEN
793          l_file_owner                 := 'SEED'; -- 1
794          x_file_who.last_updated_by   := fnd_load_util.owner_id(l_file_owner);
795          x_file_who.last_update_date  := Trunc(g_default_lud);
796          x_file_who.last_update_login := 0;
797          x_file_who.created_by        := x_file_who.last_updated_by;
798          x_file_who.creation_date     := x_file_who.last_update_date;
799    END;
800 
801    --
802    -- Set DB (Destination) WHO
803    --
804    l_db_who.last_updated_by   := Nvl(p_db_last_updated_by,
805                                      x_file_who.last_updated_by);
806    l_db_owner                 := fnd_load_util.owner_name(l_db_who.last_updated_by);
807    l_db_who.last_update_date  := Nvl(p_db_last_update_date,
808                                      x_file_who.last_update_date - 1);
809    l_db_who.last_update_login := 0;
810    l_db_who.created_by        := l_db_who.last_updated_by;
811    l_db_who.creation_date     := l_db_who.last_update_date;
812 
813    --
814    -- Check if UPLOAD is allowed. i.e. no customizations.
815    --
816    -- Return TRUE  if
817    -- - custom_mode = 'FORCE'.
818    -- - db (destination) is owned by SEED but file (source)is not owned by SEED.
819    -- - owners are same but destination is older.
820    --
821    --  IF ((p_custom_mode = 'FORCE') OR
822    --   ((l_db_who.last_updated_by = 1) AND
823    --   (x_file_who.last_updated_by <> 1)) OR
824    --   ((l_db_who.last_updated_by = x_file_who.last_updated_by) AND
825    --   (l_db_who.last_update_date <= x_file_who.last_update_date)))
826 
827    l_return := fnd_load_util.upload_test
828      (p_file_id     => x_file_who.last_updated_by,
829       p_file_lud    => x_file_who.last_update_date,
830       p_db_id       => l_db_who.last_updated_by,
831       p_db_lud      => l_db_who.last_update_date,
832       p_custom_mode => p_custom_mode);
833 
834    IF (l_return IS NULL) THEN
835       l_vc2 := 'NULL';
836       l_return := FALSE;
837     ELSIF (l_return) THEN
838       l_vc2 := 'TRUE';
839     ELSE
840       l_vc2 := 'FALSE';
841    END IF;
842 
843    IF (g_debug_on) THEN
844       --
845       -- Print out [F]ile/[D]atabase [O]wner/last_update_[D]ate.
846       --
847       IF (p_custom_mode IS NOT NULL) THEN
848          l_vc2 := l_vc2 || ' (CUSTOM_MODE = ' || p_custom_mode || ')';
849       END IF;
850       debug(l_func_name || ' = ' || l_vc2,
851             ('File LUB: ' || Rpad(x_file_who.last_updated_by ||
852                                   '/' || l_file_owner, 15) ||
853              '  LUD: ' || To_char(x_file_who.last_update_date, g_date_mask)),
854             ('  DB LUB: ' || Rpad(l_db_who.last_updated_by ||
855                                   '/' || l_db_owner, 15) ||
856              '  LUD: ' || To_char(l_db_who.last_update_date, g_date_mask)));
857 
858    END IF;
859 
860    --
861    -- If upload is allowed then there will be changes.
862    --
863    IF (l_return) THEN
864       g_numof_changes := g_numof_changes + 1;
865    END IF;
866    RETURN(l_return);
867 EXCEPTION
868    WHEN OTHERS THEN
869       --
870       -- GEO!!
871       --
872       IF (g_debug_on) THEN
873          debug_exception_top_level(l_func_name);
874       END IF;
875       RETURN(FALSE);
876 END is_upload_allowed;
877 
878 -- --------------------------------------------------
879 PROCEDURE create_lock(p_lock_name   IN VARCHAR2,
880                       x_lock_handle OUT nocopy VARCHAR2)
881   IS
882      PRAGMA AUTONOMOUS_TRANSACTION;
883 BEGIN
884    dbms_lock.allocate_unique(lockname        => p_lock_name,
885                              lockhandle      => x_lock_handle,
886                              expiration_secs => 1*24*60*60); -- 1 day.
887 
888    COMMIT;
889 END create_lock;
890 
891 -- --------------------------------------------------
892 PROCEDURE lock_entity(p_entity_name IN VARCHAR2,
893                       p_key1        IN VARCHAR2,
894                       p_key2        IN VARCHAR2 DEFAULT NULL)
895   IS
896      l_func_name   VARCHAR2(80);
897      l_lock_name   VARCHAR2(128);
898      l_lock_handle VARCHAR2(128);
899      l_lock_status INTEGER;
900 BEGIN
901    l_func_name := g_api_name || 'lock_entity()';
902    l_lock_name := p_entity_name || '.' || p_key1 || '.' || p_key2;
903 
904    create_lock(l_lock_name, l_lock_handle);
905 
906    IF (g_debug_on) THEN
907       debug(l_func_name,
908             'Lock Name : ' || l_lock_name,
909             'Lock Handle : ' || l_lock_handle,
910             'Requesting the lock. Sysdate: ' || To_char(Sysdate, g_date_mask));
911    END IF;
912 
913    l_lock_status := dbms_lock.request(lockhandle        => l_lock_handle,
914                                       lockmode          => dbms_lock.x_mode,
915                                       timeout           => dbms_lock.maxwait,
916                                       release_on_commit => TRUE);
917 
918    IF (l_lock_status <> 0) THEN
919       raise_error(l_func_name, ERROR_UNABLE_TO_LOCK,
920                   'Unable to lock entity : ' || l_lock_name ||
921                   '. dbms_lock.request() returned : ' ||
922                   l_lock_status);
923    END IF;
924 
925    g_lock_handle := l_lock_handle;
926 
927    IF (g_debug_on) THEN
928       debug(l_func_name, 'Got the lock. Sysdate: ' ||
929                          To_char(Sysdate, g_date_mask));
930    END IF;
931 END lock_entity;
932 
933 -- --------------------------------------------------
934 PROCEDURE release_entity
935   IS
936      l_func_name   VARCHAR2(80);
937      l_lock_status INTEGER;
938 BEGIN
939    l_func_name := g_api_name || 'release_entity()';
940 
941    IF (g_lock_handle is not null) THEN
942       IF (g_debug_on) THEN
943          debug(l_func_name,
944                'Lock Handle : ' || g_lock_handle,
945                'Releasing the lock. Sysdate: ' || To_char(Sysdate, g_date_mask));
946       END IF;
947 
948       l_lock_status := dbms_lock.release(lockhandle => g_lock_handle);
949 
950       IF (g_debug_on) THEN
951          debug(l_func_name, 'Released the lock. Release Status: ' || l_lock_status || ', Sysdate: ' || To_char(Sysdate, g_date_mask));
952       END IF;
953    END IF;
954 EXCEPTION
955    WHEN OTHERS THEN
956       --
957       -- GEO!!
958       --
959       IF (g_debug_on) THEN
960          debug_exception_top_level(l_func_name);
961       END IF;
962 END release_entity;
963 
964 -- --------------------------------------------------
965 FUNCTION get_sample_template(p_key     IN VARCHAR2,
966                              x_value   OUT nocopy VARCHAR2)
967   RETURN BOOLEAN
968   IS
969      l_func_name VARCHAR2(80);
970 BEGIN
971    l_func_name := g_api_name || 'get_sample_template(F)';
972    SELECT 'Sample Template'
973      INTO x_value
974      FROM dual
975      WHERE 'KEY_COLUMN' = p_key;
976    RETURN TRUE;
977 EXCEPTION
978    WHEN no_data_found THEN
979       RETURN FALSE;
980    WHEN OTHERS THEN
981       raise_when_others(l_func_name,
982                         p_key);
983 END get_sample_template;
984 --
985 PROCEDURE get_sample_template(p_key     IN VARCHAR2,
986                               x_value   OUT nocopy VARCHAR2)
987   IS
988      l_func_name VARCHAR2(80);
989 BEGIN
990    l_func_name := g_api_name || 'get_sample_template(P)';
991    IF (NOT get_sample_template(p_key, x_value)) THEN
992       raise_not_exist(l_func_name,
993                       'Please define KEY',
994                       'KEY', p_key);
995    END IF;
996 EXCEPTION
997    WHEN OTHERS THEN
998       raise_when_others(l_func_name,
999                         p_key);
1000 END get_sample_template;
1001 
1002 -- --------------------------------------------------
1003 FUNCTION get_app(p_application_short_name IN VARCHAR2,
1004                  x_app                    OUT nocopy app_type)
1005   RETURN BOOLEAN
1006   IS
1007      l_func_name VARCHAR2(80);
1008 BEGIN
1009    l_func_name := g_api_name || 'get_app(short_name, F)';
1010    SELECT *
1011      INTO x_app
1012      FROM fnd_application
1013      WHERE application_short_name = p_application_short_name;
1014    RETURN TRUE;
1015 EXCEPTION
1016    WHEN no_data_found THEN
1017       RETURN FALSE;
1018    WHEN OTHERS THEN
1019       raise_when_others(l_func_name,
1020                         p_application_short_name);
1021 END get_app;
1022 --
1023 PROCEDURE get_app(p_application_short_name IN VARCHAR2,
1024                   x_app                    OUT nocopy app_type)
1025   IS
1026      l_func_name VARCHAR2(80);
1027 BEGIN
1028    l_func_name := g_api_name || 'get_app(short_name, P)';
1029    IF (NOT get_app(p_application_short_name, x_app)) THEN
1030       raise_not_exist(l_func_name,
1031                       'Please use Application Developer:' ||
1032                       'Application->Register form and ' ||
1033                       'register the application.',
1034                       'APP Short Name', p_application_short_name);
1035    END IF;
1036 EXCEPTION
1037    WHEN OTHERS THEN
1038       raise_when_others(l_func_name,
1039                         p_application_short_name);
1040 END get_app;
1041 --
1042 FUNCTION get_app(p_application_id IN NUMBER,
1043                  x_app            OUT nocopy app_type)
1044   RETURN BOOLEAN
1045   IS
1046      l_func_name VARCHAR2(80);
1047 BEGIN
1048    l_func_name := g_api_name || 'get_app(id, F)';
1049    SELECT *
1050      INTO x_app
1051      FROM fnd_application
1052      WHERE application_id = p_application_id;
1053    RETURN TRUE;
1054 EXCEPTION
1055    WHEN no_data_found THEN
1056       RETURN FALSE;
1057    WHEN OTHERS THEN
1058       raise_when_others(l_func_name,
1059                         p_application_id);
1060 END get_app;
1061 --
1062 PROCEDURE get_app(p_application_id IN NUMBER,
1063                   x_app            OUT nocopy app_type)
1064   IS
1065      l_func_name VARCHAR2(80);
1066 BEGIN
1067    l_func_name := g_api_name || 'get_app(id, P)';
1068    IF (NOT get_app(p_application_id, x_app)) THEN
1069       raise_not_exist(l_func_name,
1070                       'Please use Application Developer:' ||
1071                       'Application->Register form and ' ||
1072                       'register the application.',
1073                       'APP ID', To_char(p_application_id));
1074    END IF;
1075 EXCEPTION
1076    WHEN OTHERS THEN
1077       raise_when_others(l_func_name,
1078                         p_application_id);
1079 END get_app;
1080 
1081 -- --------------------------------------------------
1082 FUNCTION get_tbl(p_application_short_name IN VARCHAR2,
1083                  p_table_name             IN VARCHAR2,
1084                  x_tbl                    OUT nocopy tbl_type)
1085   RETURN BOOLEAN
1086   IS
1087      l_func_name VARCHAR2(80);
1088      l_app       app_type;
1089 BEGIN
1090    l_func_name := g_api_name || 'get_tbl(F)';
1091    --
1092    -- Make sure Application exists.
1093    --
1094    get_app(p_application_short_name, l_app);
1095 
1096    SELECT *
1097      INTO x_tbl
1098      FROM fnd_tables
1099      WHERE application_id = l_app.application_id
1100      AND table_name = p_table_name;
1101    RETURN TRUE;
1102 EXCEPTION
1103    WHEN no_data_found THEN
1104       RETURN FALSE;
1105    WHEN OTHERS THEN
1106       raise_when_others(l_func_name,
1107                         p_application_short_name,
1108                         p_table_name);
1109 END get_tbl;
1110 --
1111 PROCEDURE get_tbl(p_application_short_name IN VARCHAR2,
1112                   p_table_name             IN VARCHAR2,
1113                   x_tbl                    OUT nocopy tbl_type)
1114   IS
1115      l_func_name VARCHAR2(80);
1116 BEGIN
1117    l_func_name := g_api_name || 'get_tbl(P)';
1118    IF (NOT get_tbl(p_application_short_name, p_table_name, x_tbl)) THEN
1119       raise_not_exist(l_func_name,
1120                       'Please use Application Developer:' ||
1121                       'Application->Database->Table form and ' ||
1122                       'register the table, or use AD_DD PL/SQL package, ' ||
1123                       'or use FNDLOAD (afdict.lct).',
1124                       'APP Short Name', p_application_short_name,
1125                       'Table Name', p_table_name);
1126    END IF;
1127 EXCEPTION
1128    WHEN OTHERS THEN
1129       raise_when_others(l_func_name,
1130                         p_application_short_name,
1131                         p_table_name);
1132 END get_tbl;
1133 
1134 -- --------------------------------------------------
1135 FUNCTION get_col(p_application_id IN NUMBER,
1136                  p_table_name     IN VARCHAR2,
1137                  p_column_name    IN VARCHAR2,
1138                  x_col            OUT nocopy col_type)
1139   RETURN BOOLEAN
1140   IS
1141      l_func_name VARCHAR2(80);
1142      l_app       app_type;
1143      l_tbl       tbl_type;
1144 BEGIN
1145    l_func_name := g_api_name || 'get_col(F)';
1146    --
1147    -- Make sure Application exists.
1148    --
1149    get_app(p_application_id, l_app);
1150 
1151    --
1152    -- Make sure Table exists.
1153    --
1154    get_tbl(l_app.application_short_name, p_table_name, l_tbl);
1155 
1156    SELECT *
1157      INTO x_col
1158      FROM fnd_columns
1159      WHERE application_id = l_tbl.application_id
1160      AND table_id = l_tbl.table_id
1161      AND column_name = p_column_name;
1162    RETURN TRUE;
1163 EXCEPTION
1164    WHEN no_data_found THEN
1165       RETURN FALSE;
1166    WHEN OTHERS THEN
1167       raise_when_others(l_func_name,
1168                         p_application_id,
1169                         p_table_name,
1170                         p_column_name);
1171 END get_col;
1172 --
1173 PROCEDURE get_col(p_application_id IN NUMBER,
1174                   p_table_name     IN VARCHAR2,
1175                   p_column_name    IN VARCHAR2,
1176                   x_col            OUT nocopy col_type)
1177   IS
1178      l_func_name VARCHAR2(80);
1179 BEGIN
1180    l_func_name := g_api_name || 'get_col(P)';
1181    IF (NOT get_col(p_application_id, p_table_name, p_column_name, x_col)) THEN
1182       raise_not_exist(l_func_name,
1183                       'Please use Application Developer:' ||
1184                       'Application->Database->Table form and '||
1185                       'register the column, or use AD_DD PL/SQL package, ' ||
1186                       'or use FNDLOAD (afdict.lct).',
1187                       'APP Id', To_char(p_application_id),
1188                       'Table Name', p_table_name,
1189                       'Column Name', p_column_name);
1190    END IF;
1191 EXCEPTION
1192    WHEN OTHERS THEN
1193       raise_when_others(l_func_name,
1194                         p_application_id,
1195                         p_table_name,
1196                         p_column_name);
1197 END get_col;
1198 
1199 -- --------------------------------------------------
1200 FUNCTION get_resp(p_application_short_name IN VARCHAR2,
1201                   p_responsibility_key     IN VARCHAR2,
1202                   x_resp                   OUT nocopy resp_type)
1203   RETURN BOOLEAN
1204   IS
1205      l_func_name VARCHAR2(80);
1206      l_app       app_type;
1207 BEGIN
1208    l_func_name := g_api_name || 'get_resp(F)';
1209    --
1210    -- Make sure Application exists.
1211    --
1212    get_app(p_application_short_name, l_app);
1213 
1214    SELECT *
1215      INTO x_resp
1216      FROM fnd_responsibility
1217      WHERE application_id = l_app.application_id
1218      AND responsibility_key = p_responsibility_key;
1219    RETURN TRUE;
1220 EXCEPTION
1221    WHEN no_data_found THEN
1222       RETURN FALSE;
1223    WHEN OTHERS THEN
1224       raise_when_others(l_func_name,
1225                         p_application_short_name,
1226                         p_responsibility_key);
1227 END get_resp;
1228 --
1229 PROCEDURE get_resp(p_application_short_name IN VARCHAR2,
1230                    p_responsibility_key     IN VARCHAR2,
1231                    x_resp                   OUT nocopy resp_type)
1232   IS
1233      l_func_name VARCHAR2(80);
1234 BEGIN
1235    l_func_name := g_api_name || 'get_resp(P)';
1236    IF (NOT get_resp(p_application_short_name, p_responsibility_key,
1237                     x_resp)) THEN
1238       raise_not_exist(l_func_name,
1239                       'Please use System Administrator:' ||
1240                       'Security->Responsibility->Define form and ' ||
1241                       'create the responsibility, ' ||
1242                       'or use FNDLOAD (afscursp.lct).',
1243                       'APP Short Name', p_application_short_name,
1244                       'RESP Key', p_responsibility_key);
1245    END IF;
1246 EXCEPTION
1247    WHEN OTHERS THEN
1248       raise_when_others(l_func_name,
1249                         p_application_short_name,
1250                         p_responsibility_key);
1251 END get_resp;
1252 
1253 -- --------------------------------------------------
1254 FUNCTION get_vst_set(p_flex_value_set_name IN VARCHAR2,
1255                      x_vst_set             OUT nocopy vst_set_type)
1256   RETURN BOOLEAN
1257   IS
1258      l_func_name VARCHAR2(80);
1259 BEGIN
1260    l_func_name := g_api_name || 'get_vst_set(F)';
1261    SELECT *
1262      INTO x_vst_set
1263      FROM fnd_flex_value_sets
1264      WHERE flex_value_set_name = p_flex_value_set_name;
1265    RETURN TRUE;
1266 EXCEPTION
1267    WHEN no_data_found THEN
1268       RETURN FALSE;
1269    WHEN OTHERS THEN
1270       raise_when_others(l_func_name,
1271                         p_flex_value_set_name);
1272 END get_vst_set;
1273 --
1274 PROCEDURE get_vst_set(p_flex_value_set_name IN VARCHAR2,
1275                       x_vst_set             OUT nocopy vst_set_type)
1276   IS
1277      l_func_name VARCHAR2(80);
1278 BEGIN
1279    l_func_name := g_api_name || 'get_vst_set(P)';
1280    IF (NOT get_vst_set(p_flex_value_set_name, x_vst_set)) THEN
1281       raise_not_exist(l_func_name,
1282                       'Please use Application Developer:' ||
1283                       'Application->Validation->Set form and ' ||
1284                       'create the value set, ' ||
1285                       'or use FNDLOAD (afffload.lct).',
1286                       'Value Set', p_flex_value_set_name);
1287    END IF;
1288 EXCEPTION
1289    WHEN OTHERS THEN
1290       raise_when_others(l_func_name,
1291                         p_flex_value_set_name);
1292 END get_vst_set;
1293 
1294 -- --------------------------------------------------
1295 FUNCTION get_vst_tbl(p_vst_set IN vst_set_type,
1296                      x_vst_tbl OUT nocopy vst_tbl_type)
1297   RETURN BOOLEAN
1298   IS
1299      l_func_name VARCHAR2(80);
1300 BEGIN
1301    l_func_name := g_api_name || 'get_vst_tbl(F)';
1302    SELECT *
1303      INTO x_vst_tbl
1304      FROM fnd_flex_validation_tables
1305      WHERE flex_value_set_id = p_vst_set.flex_value_set_id;
1306    RETURN TRUE;
1307 EXCEPTION
1308    WHEN no_data_found THEN
1309       RETURN FALSE;
1310    WHEN OTHERS THEN
1311       raise_when_others(l_func_name,
1312                         p_vst_set.flex_value_set_name,
1313                         p_vst_set.flex_value_set_id);
1314 END get_vst_tbl;
1315 --
1316 PROCEDURE get_vst_tbl(p_vst_set IN vst_set_type,
1317                       x_vst_tbl OUT nocopy vst_tbl_type)
1318   IS
1319      l_func_name VARCHAR2(80);
1320 BEGIN
1321    l_func_name := g_api_name || 'get_vst_tbl(P)';
1322    IF (NOT get_vst_tbl(p_vst_set, x_vst_tbl)) THEN
1323       raise_not_exist(l_func_name,
1324                       'Please use Application Developer:' ||
1325                       'Application->Validation->Set form and ' ||
1326                       'create the table validated value set, ' ||
1327                       'or use FNDLOAD (afffload.lct).',
1328                       'Value Set', p_vst_set.flex_value_set_name);
1329    END IF;
1330 EXCEPTION
1331    WHEN OTHERS THEN
1332       raise_when_others(l_func_name,
1333                         p_vst_set.flex_value_set_name,
1334                         p_vst_set.flex_value_set_id);
1335 END get_vst_tbl;
1336 
1337 -- --------------------------------------------------
1338 FUNCTION get_vst_evt(p_vst_set    IN vst_set_type,
1339                      p_event_code IN VARCHAR2,
1340                      x_vst_evt    OUT nocopy vst_evt_type)
1341   RETURN BOOLEAN
1342   IS
1343      l_func_name VARCHAR2(80);
1344 BEGIN
1345    l_func_name := g_api_name || 'get_vst_evt(F)';
1346    SELECT *
1347      INTO x_vst_evt
1348      FROM fnd_flex_validation_events
1349      WHERE flex_value_set_id = p_vst_set.flex_value_set_id
1350      AND event_code = p_event_code;
1351    RETURN TRUE;
1352 EXCEPTION
1353    WHEN no_data_found THEN
1354       RETURN FALSE;
1355    WHEN OTHERS THEN
1356       raise_when_others(l_func_name,
1357                         p_vst_set.flex_value_set_name,
1358                         p_vst_set.flex_value_set_id,
1359                         p_event_code);
1360 END get_vst_evt;
1361 --
1362 PROCEDURE get_vst_evt(p_vst_set    IN vst_set_type,
1363                       p_event_code IN VARCHAR2,
1364                       x_vst_evt    OUT nocopy vst_evt_type)
1365   IS
1366      l_func_name VARCHAR2(80);
1367 BEGIN
1368    l_func_name := g_api_name || 'get_vst_evt(P)';
1369    IF (NOT get_vst_evt(p_vst_set, p_event_code, x_vst_evt)) THEN
1370       raise_not_exist(l_func_name,
1371                       'Please use Application Developer:' ||
1372                       'Application->Validation->Set form and ' ||
1373                       'create the user exit validated value set, ' ||
1374                       'or use FNDLOAD (afffload.lct).',
1375                       'Value Set', p_vst_set.flex_value_set_name,
1376                       'Event Code', p_event_code);
1377    END IF;
1378 EXCEPTION
1379    WHEN OTHERS THEN
1380       raise_when_others(l_func_name,
1381                         p_vst_set.flex_value_set_name,
1382                         p_vst_set.flex_value_set_id,
1383                         p_event_code);
1384 END get_vst_evt;
1385 
1386 -- --------------------------------------------------
1387 FUNCTION get_vst_scr(p_vst_set               IN vst_set_type,
1388                      p_flex_value_rule_name  IN VARCHAR2,
1389                      p_parent_flex_value_low IN VARCHAR2,
1390                      x_vst_scr               OUT nocopy vst_scr_type)
1391   RETURN BOOLEAN
1392   IS
1393      l_func_name VARCHAR2(80);
1394 BEGIN
1395    l_func_name := g_api_name || 'get_vst_scr(F)';
1396    IF (p_vst_set.validation_type = 'D') THEN
1397       SELECT *
1398         INTO x_vst_scr
1399         FROM fnd_flex_value_rules
1400         WHERE flex_value_set_id = p_vst_set.flex_value_set_id
1401         AND parent_flex_value_low = p_parent_flex_value_low
1402         AND flex_value_rule_name = p_flex_value_rule_name;
1403     ELSE
1404       SELECT *
1405         INTO x_vst_scr
1406         FROM fnd_flex_value_rules
1407         WHERE flex_value_set_id = p_vst_set.flex_value_set_id
1408         AND flex_value_rule_name = p_flex_value_rule_name;
1409    END IF;
1410    RETURN TRUE;
1411 EXCEPTION
1412    WHEN no_data_found THEN
1413       RETURN FALSE;
1414    WHEN OTHERS THEN
1415       raise_when_others(l_func_name,
1416                         p_vst_set.flex_value_set_name,
1417                         p_vst_set.flex_value_set_id,
1418                         p_flex_value_rule_name,
1419                         p_parent_flex_value_low);
1420 END get_vst_scr;
1421 --
1422 PROCEDURE get_vst_scr(p_vst_set               IN vst_set_type,
1423                       p_flex_value_rule_name  IN VARCHAR2,
1424                       p_parent_flex_value_low IN VARCHAR2,
1425                       x_vst_scr               OUT nocopy vst_scr_type)
1426   IS
1427      l_func_name VARCHAR2(80);
1428 BEGIN
1429    l_func_name := g_api_name || 'get_vst_scr(P)';
1430    IF (NOT get_vst_scr(p_vst_set, p_flex_value_rule_name,
1431                        p_parent_flex_value_low,
1432                        x_vst_scr)) THEN
1433       raise_not_exist(l_func_name,
1434                       'Please use System Administrator:' ||
1435                       'Security->Responsibility->ValueSet->Define form and ' ||
1436                       'create the security rule, ' ||
1437                       'or use FNDLOAD (afffload.lct).',
1438                       'Value Set', p_vst_set.flex_value_set_name,
1439                       'Security Rule', p_flex_value_rule_name,
1440                       'Parent Value', p_parent_flex_value_low);
1441    END IF;
1442 EXCEPTION
1443    WHEN OTHERS THEN
1444       raise_when_others(l_func_name,
1445                         p_vst_set.flex_value_set_name,
1446                         p_vst_set.flex_value_set_id,
1447                         p_flex_value_rule_name,
1448                         p_parent_flex_value_low);
1449 END get_vst_scr;
1450 --
1451 FUNCTION get_vst_scr_tl(p_vst_scr    IN vst_scr_type,
1452                         p_language   IN VARCHAR2,
1453                         x_vst_scr_tl OUT nocopy vst_scr_tl_type)
1454   RETURN BOOLEAN
1455   IS
1456      l_func_name VARCHAR2(80);
1457 BEGIN
1458    l_func_name := g_api_name || 'get_vst_scr_tl(F)';
1459    SELECT *
1460      INTO x_vst_scr_tl
1461      FROM fnd_flex_value_rules_tl
1462      WHERE flex_value_rule_id = p_vst_scr.flex_value_rule_id
1463      AND language = p_language;
1464    RETURN TRUE;
1465 EXCEPTION
1466    WHEN no_data_found THEN
1467       RETURN FALSE;
1468    WHEN OTHERS THEN
1469       raise_when_others(l_func_name,
1470                         p_vst_scr.flex_value_set_id,
1471                         p_vst_scr.flex_value_rule_name,
1472                         p_vst_scr.flex_value_rule_id,
1473                         p_language);
1474 END get_vst_scr_tl;
1475 
1476 -- --------------------------------------------------
1477 FUNCTION get_vst_scl(p_vst_set                   IN vst_set_type,
1478                      p_vst_scr                   IN vst_scr_type,
1479                      p_include_exclude_indicator IN VARCHAR2,
1480                      p_flex_value_low            IN VARCHAR2,
1481                      p_flex_value_high           IN VARCHAR2,
1482                      x_vst_scl                   OUT nocopy vst_scl_type)
1483   RETURN BOOLEAN
1484   IS
1485      l_func_name VARCHAR2(80);
1486 BEGIN
1487    l_func_name := g_api_name || 'get_vst_scl(F)';
1488    IF (p_vst_set.validation_type = 'D') THEN
1489       SELECT *
1490         INTO x_vst_scl
1491         FROM fnd_flex_value_rule_lines
1492         WHERE flex_value_set_id = p_vst_scr.flex_value_set_id
1493         AND flex_value_rule_id = p_vst_scr.flex_value_rule_id
1494         AND parent_flex_value_low = p_vst_scr.parent_flex_value_low
1495         AND include_exclude_indicator = p_include_exclude_indicator
1496         AND flex_value_low = p_flex_value_low
1497         AND flex_value_high = p_flex_value_high;
1498     ELSE
1499       SELECT *
1500         INTO x_vst_scl
1501         FROM fnd_flex_value_rule_lines
1502         WHERE flex_value_set_id = p_vst_scr.flex_value_set_id
1503         AND flex_value_rule_id = p_vst_scr.flex_value_rule_id
1504         AND include_exclude_indicator = p_include_exclude_indicator
1505         AND flex_value_low = p_flex_value_low
1506         AND flex_value_high = p_flex_value_high;
1507    END IF;
1508    RETURN TRUE;
1509 EXCEPTION
1510    WHEN no_data_found THEN
1511       RETURN FALSE;
1512    WHEN OTHERS THEN
1513       raise_when_others(l_func_name,
1514                         p_vst_set.flex_value_set_name,
1515                         p_vst_set.flex_value_set_id,
1516                         p_vst_scr.flex_value_rule_name,
1517                         p_vst_scr.flex_value_rule_id,
1518                         p_vst_scr.parent_flex_value_low,
1519                         p_include_exclude_indicator,
1520                         p_flex_value_low,
1521                         p_flex_value_high);
1522 END get_vst_scl;
1523 --
1524 PROCEDURE get_vst_scl(p_vst_set                   IN vst_set_type,
1525                       p_vst_scr                   IN vst_scr_type,
1526                       p_include_exclude_indicator IN VARCHAR2,
1527                       p_flex_value_low            IN VARCHAR2,
1528                       p_flex_value_high           IN VARCHAR2,
1529                       x_vst_scl                   OUT nocopy vst_scl_type)
1530   IS
1531      l_func_name VARCHAR2(80);
1532 BEGIN
1533    l_func_name := g_api_name || 'get_vst_scl(P)';
1534    IF (NOT get_vst_scl(p_vst_set, p_vst_scr, p_include_exclude_indicator,
1535                        p_flex_value_low, p_flex_value_high,
1536                        x_vst_scl)) THEN
1537       raise_not_exist(l_func_name,
1538                       'Please use System Administrator:' ||
1539                       'Security->Responsibility->ValueSet->Define form and ' ||
1540                       'create the security rule line, ' ||
1541                       'or use FNDLOAD (afffload.lct).',
1542                       'Value Set', p_vst_set.flex_value_set_name,
1543                       'Security Rule', p_vst_scr.flex_value_rule_name,
1544                       'Parent Value', p_vst_scr.parent_flex_value_low,
1545                       'I/E Indicator', p_include_exclude_indicator,
1546                       'Value Low', p_flex_value_low,
1547                       'Value High', p_flex_value_high);
1548    END IF;
1549 EXCEPTION
1550    WHEN OTHERS THEN
1551       raise_when_others(l_func_name,
1552                         p_vst_set.flex_value_set_name,
1553                         p_vst_set.flex_value_set_id,
1554                         p_vst_scr.flex_value_rule_name,
1555                         p_vst_scr.flex_value_rule_id,
1556                         p_vst_scr.parent_flex_value_low,
1557                         p_include_exclude_indicator,
1558                         p_flex_value_low,
1559                         p_flex_value_high);
1560 END get_vst_scl;
1561 
1562 -- --------------------------------------------------
1563 FUNCTION get_vst_scu(p_vst_set IN vst_set_type,
1564                      p_vst_scr IN vst_scr_type,
1565                      p_resp    IN resp_type,
1566                      x_vst_scu OUT nocopy vst_scu_type)
1567   RETURN BOOLEAN
1568   IS
1569      l_func_name VARCHAR2(80);
1570 BEGIN
1571    l_func_name := g_api_name || 'get_vst_scu(F)';
1572    IF (p_vst_set.validation_type = 'D') THEN
1573       SELECT *
1574         INTO x_vst_scu
1575         FROM fnd_flex_value_rule_usages
1576         WHERE application_id = p_resp.application_id
1577         AND responsibility_id = p_resp.responsibility_id
1578         AND flex_value_set_id = p_vst_scr.flex_value_set_id
1579         AND flex_value_rule_id = p_vst_scr.flex_value_rule_id
1580         AND parent_flex_value_low = p_vst_scr.parent_flex_value_low;
1581     ELSE
1582       SELECT *
1583         INTO x_vst_scu
1584         FROM fnd_flex_value_rule_usages
1585         WHERE application_id = p_resp.application_id
1586         AND responsibility_id = p_resp.responsibility_id
1587         AND flex_value_set_id = p_vst_scr.flex_value_set_id
1588         AND flex_value_rule_id = p_vst_scr.flex_value_rule_id;
1589    END IF;
1590    RETURN TRUE;
1591 EXCEPTION
1592    WHEN no_data_found THEN
1593       RETURN FALSE;
1594    WHEN OTHERS THEN
1595       raise_when_others(l_func_name,
1596                         p_vst_set.flex_value_set_name,
1597                         p_vst_set.flex_value_set_id,
1598                         p_vst_scr.flex_value_rule_name,
1599                         p_vst_scr.flex_value_rule_id,
1600                         p_vst_scr.parent_flex_value_low,
1601                         p_resp.application_id,
1602                         p_resp.responsibility_key,
1603                         p_resp.responsibility_id);
1604 END get_vst_scu;
1605 --
1606 PROCEDURE get_vst_scu(p_vst_set IN vst_set_type,
1607                       p_vst_scr IN vst_scr_type,
1608                       p_resp    IN resp_type,
1609                       x_vst_scu OUT nocopy vst_scu_type)
1610   IS
1611      l_func_name VARCHAR2(80);
1612 BEGIN
1613    l_func_name := g_api_name || 'get_vst_scu(P)';
1614    IF (NOT get_vst_scu(p_vst_set, p_vst_scr, p_resp,
1615                        x_vst_scu)) THEN
1616       raise_not_exist(l_func_name,
1617                       'Please use System Administrator:' ||
1618                       'Security->Responsibility->ValueSet->Assign form and ' ||
1619                       'create the security rule usage, ' ||
1620                       'or use FNDLOAD (afffload.lct).',
1621                       'Value Set', p_vst_set.flex_value_set_name,
1622                       'Security Rule', p_vst_scr.flex_value_rule_name,
1623                       'Parent Value', p_vst_scr.parent_flex_value_low,
1624                       'App ID', p_resp.application_id,
1625                       'Resp Key', p_resp.responsibility_key);
1626    END IF;
1627 EXCEPTION
1628    WHEN OTHERS THEN
1629       raise_when_others(l_func_name,
1630                         p_vst_set.flex_value_set_name,
1631                         p_vst_set.flex_value_set_id,
1632                         p_vst_scr.flex_value_rule_name,
1633                         p_vst_scr.flex_value_rule_id,
1634                         p_vst_scr.parent_flex_value_low,
1635                         p_resp.application_id,
1636                         p_resp.responsibility_key,
1637                         p_resp.responsibility_id);
1638 END get_vst_scu;
1639 
1640 -- --------------------------------------------------
1641 FUNCTION get_vst_rgr(p_vst_set        IN vst_set_type,
1642                      p_hierarchy_code IN VARCHAR2,
1643                      x_vst_rgr        OUT nocopy vst_rgr_type)
1644   RETURN BOOLEAN
1645   IS
1646      l_func_name VARCHAR2(80);
1647 BEGIN
1648    l_func_name := g_api_name || 'get_vst_rgr(F)';
1649    SELECT *
1650      INTO x_vst_rgr
1651      FROM fnd_flex_hierarchies
1652      WHERE flex_value_set_id = p_vst_set.flex_value_set_id
1653      AND hierarchy_code = p_hierarchy_code;
1654    RETURN TRUE;
1655 EXCEPTION
1656    WHEN no_data_found THEN
1657       RETURN FALSE;
1658    WHEN OTHERS THEN
1659       raise_when_others(l_func_name,
1660                         p_vst_set.flex_value_set_name,
1661                         p_vst_set.flex_value_set_id,
1662                         p_hierarchy_code);
1663 END get_vst_rgr;
1664 --
1665 PROCEDURE get_vst_rgr(p_vst_set        IN vst_set_type,
1666                       p_hierarchy_code IN VARCHAR2,
1667                       x_vst_rgr        OUT nocopy vst_rgr_type)
1668   IS
1669      l_func_name VARCHAR2(80);
1670 BEGIN
1671    l_func_name := g_api_name || 'get_vst_rgr(P)';
1672    IF (NOT get_vst_rgr(p_vst_set, p_hierarchy_code, x_vst_rgr)) THEN
1673       raise_not_exist(l_func_name,
1674                       'Please use Application Developer:' ||
1675                       'Flexfield->Key->Groups form and ' ||
1676                       'create the hierarchy, ' ||
1677                       'or use FNDLOAD (afffload.lct).',
1678                       'Value Set', p_vst_set.flex_value_set_name,
1679                       'Hierarchy Code', p_hierarchy_code);
1680    END IF;
1681 EXCEPTION
1682    WHEN OTHERS THEN
1683       raise_when_others(l_func_name,
1684                         p_vst_set.flex_value_set_name,
1685                         p_vst_set.flex_value_set_id,
1686                         p_hierarchy_code);
1687 END get_vst_rgr;
1688 --
1689 FUNCTION get_vst_rgr_tl(p_vst_rgr    IN vst_rgr_type,
1690                         p_language   IN VARCHAR2,
1691                         x_vst_rgr_tl OUT nocopy vst_rgr_tl_type)
1692   RETURN BOOLEAN
1693   IS
1694      l_func_name VARCHAR2(80);
1695 BEGIN
1696    l_func_name := g_api_name || 'get_vst_rgr_tl(F)';
1697    SELECT *
1698      INTO x_vst_rgr_tl
1699      FROM fnd_flex_hierarchies_tl
1700      WHERE flex_value_set_id = p_vst_rgr.flex_value_set_id
1701      AND hierarchy_id = p_vst_rgr.hierarchy_id
1702      AND language = p_language;
1703    RETURN TRUE;
1704 EXCEPTION
1705    WHEN no_data_found THEN
1706       RETURN FALSE;
1707    WHEN OTHERS THEN
1708       raise_when_others(l_func_name,
1709                         p_vst_rgr.flex_value_set_id,
1710                         p_vst_rgr.hierarchy_code,
1711                         p_vst_rgr.hierarchy_id,
1712                         p_language);
1713 END get_vst_rgr_tl;
1714 
1715 -- --------------------------------------------------
1716 FUNCTION get_vst_val(p_vst_set               IN vst_set_type,
1717                      p_parent_flex_value_low IN VARCHAR2,
1718                      p_flex_value            IN VARCHAR2,
1719                      x_vst_val               OUT nocopy vst_val_type)
1720   RETURN BOOLEAN
1721   IS
1722      l_func_name VARCHAR2(80);
1723 BEGIN
1724    l_func_name := g_api_name || 'get_vst_val(F)';
1725    IF (p_vst_set.validation_type IN ('D', 'Y')) THEN
1726       SELECT *
1727         INTO x_vst_val
1728         FROM fnd_flex_values
1729         WHERE flex_value_set_id = p_vst_set.flex_value_set_id
1730         AND (parent_flex_value_low = p_parent_flex_value_low OR
1731              (parent_flex_value_low IS NULL AND
1732               p_parent_flex_value_low IS NULL))
1733         AND flex_value = p_flex_value;
1734     ELSE
1735       SELECT *
1736         INTO x_vst_val
1737         FROM fnd_flex_values
1738         WHERE flex_value_set_id = p_vst_set.flex_value_set_id
1739         AND flex_value = p_flex_value;
1740    END IF;
1741    RETURN TRUE;
1742 EXCEPTION
1743    WHEN no_data_found THEN
1744       RETURN FALSE;
1745    WHEN OTHERS THEN
1746       raise_when_others(l_func_name,
1747                         p_vst_set.flex_value_set_name,
1748                         p_vst_set.flex_value_set_id,
1749                         p_parent_flex_value_low,
1750                         p_flex_value);
1751 END get_vst_val;
1752 --
1753 PROCEDURE get_vst_val(p_vst_set               IN vst_set_type,
1754                       p_parent_flex_value_low IN VARCHAR2,
1755                       p_flex_value            IN VARCHAR2,
1756                       x_vst_val               OUT nocopy vst_val_type)
1757   IS
1758      l_func_name VARCHAR2(80);
1759 BEGIN
1760    l_func_name := g_api_name || 'get_vst_val(P)';
1761    IF (NOT get_vst_val(p_vst_set, p_parent_flex_value_low,
1762                        p_flex_value, x_vst_val)) THEN
1763       raise_not_exist(l_func_name,
1764                       'Please use Application Developer:' ||
1765                       'Application->Validation->Value form and ' ||
1766                       'create the value, ' ||
1767                       'or use FNDLOAD (afffload.lct).',
1768                       'Value Set', p_vst_set.flex_value_set_name,
1769                       'Parent Value', p_parent_flex_value_low,
1770                       'Flex Value', p_flex_value);
1771    END IF;
1772 EXCEPTION
1773    WHEN OTHERS THEN
1774       raise_when_others(l_func_name,
1775                         p_vst_set.flex_value_set_name,
1776                         p_vst_set.flex_value_set_id,
1777                         p_parent_flex_value_low,
1778                         p_flex_value);
1779 END get_vst_val;
1780 --
1781 FUNCTION get_vst_val_tl(p_vst_val    IN vst_val_type,
1782                         p_language   IN VARCHAR2,
1783                         x_vst_val_tl OUT nocopy vst_val_tl_type)
1784   RETURN BOOLEAN
1785   IS
1786      l_func_name VARCHAR2(80);
1787 BEGIN
1788    l_func_name := g_api_name || 'get_vst_val_tl(F)';
1789    SELECT *
1790      INTO x_vst_val_tl
1791      FROM fnd_flex_values_tl
1792      WHERE flex_value_id = p_vst_val.flex_value_id
1793      AND language = p_language;
1794    RETURN TRUE;
1795 EXCEPTION
1796    WHEN no_data_found THEN
1797       RETURN FALSE;
1798    WHEN OTHERS THEN
1799       raise_when_others(l_func_name,
1800                         p_vst_val.flex_value_set_id,
1801                         p_vst_val.parent_flex_value_low,
1802                         p_vst_val.flex_value,
1803                         p_vst_val.flex_value_id,
1804                         p_language);
1805 END get_vst_val_tl;
1806 
1807 -- --------------------------------------------------
1808 FUNCTION get_vst_vlh(p_vst_val               IN vst_val_type,
1809                      p_range_attribute       IN VARCHAR2,
1810                      p_child_flex_value_low  IN VARCHAR2,
1811                      p_child_flex_value_high IN VARCHAR2,
1812                      x_vst_vlh               OUT nocopy vst_vlh_type)
1813   RETURN BOOLEAN
1814   IS
1815      l_func_name VARCHAR2(80);
1816 BEGIN
1817    l_func_name := g_api_name || 'get_vst_vlh(F)';
1818    SELECT *
1819      INTO x_vst_vlh
1820      FROM fnd_flex_value_norm_hierarchy
1821      WHERE flex_value_set_id = p_vst_val.flex_value_set_id
1822      AND parent_flex_value = p_vst_val.flex_value
1823      AND range_attribute = p_range_attribute
1824      AND child_flex_value_low = p_child_flex_value_low
1825      AND child_flex_value_high = p_child_flex_value_high;
1826    RETURN TRUE;
1827 EXCEPTION
1828    WHEN no_data_found THEN
1829       RETURN FALSE;
1830    WHEN OTHERS THEN
1831       raise_when_others(l_func_name,
1832                         p_vst_val.flex_value_set_id,
1833                         p_vst_val.parent_flex_value_low,
1834                         p_vst_val.flex_value,
1835                         p_vst_val.flex_value_id,
1836                         p_range_attribute,
1837                         p_child_flex_value_low,
1838                         p_child_flex_value_high);
1839 END get_vst_vlh;
1840 --
1841 PROCEDURE get_vst_vlh(p_vst_val               IN vst_val_type,
1842                       p_range_attribute       IN VARCHAR2,
1843                       p_child_flex_value_low  IN VARCHAR2,
1844                       p_child_flex_value_high IN VARCHAR2,
1845                       x_vst_vlh               OUT nocopy vst_vlh_type)
1846   IS
1847      l_func_name VARCHAR2(80);
1848 BEGIN
1849    l_func_name := g_api_name || 'get_vst_vlh(P)';
1850    IF (NOT get_vst_vlh(p_vst_val, p_range_attribute,
1851                         p_child_flex_value_low, p_child_flex_value_high,
1852                         x_vst_vlh)) THEN
1853       raise_not_exist(l_func_name,
1854                       'Please use Application Developer:' ||
1855                       'Application->Validation->Value form and ' ||
1856                       'create the value hierarchy, ' ||
1857                       'or use FNDLOAD (afffload.lct).',
1858                       'Value Set Id', p_vst_val.flex_value_set_id,
1859                       'Parent Value', p_vst_val.flex_value,
1860                       'Range Attribute', p_range_attribute,
1861                       'Child Value Low', p_child_flex_value_low,
1862                       'Child Value High', p_child_flex_value_high);
1863    END IF;
1864 EXCEPTION
1865    WHEN OTHERS THEN
1866       raise_when_others(l_func_name,
1867                         p_vst_val.flex_value_set_id,
1868                         p_vst_val.parent_flex_value_low,
1869                         p_vst_val.flex_value,
1870                         p_vst_val.flex_value_id,
1871                         p_range_attribute,
1872                         p_child_flex_value_low,
1873                         p_child_flex_value_high);
1874 END get_vst_vlh;
1875 
1876 -- --------------------------------------------------
1877 PROCEDURE get_vtv_arr(p_vst_set      IN vst_set_type,
1878                       x_vtv_arr_size OUT nocopy NUMBER,
1879                       x_vtv_arr      OUT nocopy vtv_arr_type)
1880   IS
1881      l_func_name VARCHAR2(80);
1882 
1883      CURSOR vtv_cur(p_flex_value_set_id IN NUMBER) IS
1884         SELECT
1885           fvq.id_flex_application_id,
1886           fvq.id_flex_code,
1887           fvq.segment_attribute_type,
1888           fvq.value_attribute_type,
1889           fvq.assignment_date,
1890           vat.lookup_type,
1891           vat.default_value,
1892           NULL
1893           FROM fnd_flex_validation_qualifiers fvq,
1894           fnd_value_attribute_types vat
1895           WHERE fvq.flex_value_set_id    = p_flex_value_set_id
1896           AND fvq.id_flex_application_id = vat.application_id(+)
1897           AND fvq.id_flex_code           = vat.id_flex_code(+)
1898           AND fvq.segment_attribute_type = vat.segment_attribute_type(+)
1899           AND fvq.value_attribute_type   = vat.value_attribute_type(+)
1900           ORDER BY fvq.assignment_date, fvq.value_attribute_type;
1901      i NUMBER;
1902 BEGIN
1903    l_func_name := g_api_name || 'get_vtv_arr()';
1904    i := 0;
1905    FOR vtv_rec IN vtv_cur(p_vst_set.flex_value_set_id) LOOP
1906       i := i + 1;
1907       x_vtv_arr(i).id_flex_application_id := vtv_rec.id_flex_application_id;
1908       x_vtv_arr(i).id_flex_code           := vtv_rec.id_flex_code;
1909       x_vtv_arr(i).segment_attribute_type := vtv_rec.segment_attribute_type;
1910       x_vtv_arr(i).value_attribute_type   := vtv_rec.value_attribute_type;
1911       x_vtv_arr(i).assignment_date        := vtv_rec.assignment_date;
1912       x_vtv_arr(i).lookup_type            := vtv_rec.lookup_type;
1913       x_vtv_arr(i).default_value          := vtv_rec.default_value;
1914       x_vtv_arr(i).qualifier_value        := NULL;
1915    END LOOP;
1916    x_vtv_arr_size := i;
1917 EXCEPTION
1918    WHEN OTHERS THEN
1919       raise_when_others(l_func_name,
1920                         p_vst_set.flex_value_set_name,
1921                         p_vst_set.flex_value_set_id);
1922 END get_vtv_arr;
1923 
1924 -- --------------------------------------------------
1925 FUNCTION get_dff_flx(p_application_short_name     IN VARCHAR2,
1926                      p_descriptive_flexfield_name IN VARCHAR2,
1927                      x_dff_flx                    OUT nocopy dff_flx_type)
1928   RETURN BOOLEAN
1929   IS
1930      l_func_name VARCHAR2(80);
1931      l_app       app_type;
1932 BEGIN
1933    l_func_name := g_api_name || 'get_dff_flx(F)';
1934    --
1935    -- Make sure Application exists.
1936    --
1937    get_app(p_application_short_name, l_app);
1938 
1939    SELECT *
1940      INTO x_dff_flx
1941      FROM fnd_descriptive_flexs
1942      WHERE application_id =  l_app.application_id
1943      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
1944    RETURN TRUE;
1945 EXCEPTION
1946    WHEN no_data_found THEN
1947       RETURN FALSE;
1948    WHEN OTHERS THEN
1949       raise_when_others(l_func_name,
1950                         p_application_short_name,
1951                         p_descriptive_flexfield_name);
1952 END get_dff_flx;
1953 --
1954 PROCEDURE get_dff_flx(p_application_short_name     IN VARCHAR2,
1955                       p_descriptive_flexfield_name IN VARCHAR2,
1956                       x_dff_flx                    OUT nocopy dff_flx_type)
1957   IS
1958      l_func_name VARCHAR2(80);
1959 BEGIN
1960    l_func_name := g_api_name || 'get_dff_flx(P)';
1961    IF (NOT get_dff_flx(p_application_short_name, p_descriptive_flexfield_name,
1962                        x_dff_flx)) THEN
1963       raise_not_exist(l_func_name,
1964                       'Please use Application Developer:' ||
1965                       'Flexfield->Descriptive->Register form and ' ||
1966                       'register the descriptive flexfield, ' ||
1967                       'or use FNDLOAD (afffload.lct).',
1968                       'APP Short Name', p_application_short_name,
1969                       'DFF Name', p_descriptive_flexfield_name);
1970    END IF;
1971 EXCEPTION
1972    WHEN OTHERS THEN
1973       raise_when_others(l_func_name,
1974                         p_application_short_name,
1975                         p_descriptive_flexfield_name);
1976 END get_dff_flx;
1977 --
1978 FUNCTION get_dff_flx_tl(p_dff_flx    IN dff_flx_type,
1979                         p_language   IN VARCHAR2,
1980                         x_dff_flx_tl OUT nocopy dff_flx_tl_type)
1981   RETURN BOOLEAN
1982   IS
1983      l_func_name VARCHAR2(80);
1984 BEGIN
1985    l_func_name := g_api_name || 'get_dff_flx_tl(F)';
1986    SELECT *
1987      INTO x_dff_flx_tl
1988      FROM fnd_descriptive_flexs_tl
1989      WHERE application_id = p_dff_flx.application_id
1990      AND descriptive_flexfield_name = p_dff_flx.descriptive_flexfield_name
1991      AND language = p_language;
1992    RETURN TRUE;
1993 EXCEPTION
1994    WHEN no_data_found THEN
1995       RETURN FALSE;
1996    WHEN OTHERS THEN
1997       raise_when_others(l_func_name,
1998                         p_dff_flx.application_id,
1999                         p_dff_flx.descriptive_flexfield_name,
2000                         p_language);
2001 END get_dff_flx_tl;
2002 
2003 -- --------------------------------------------------
2004 FUNCTION get_dff_ref(p_dff_flx                    IN dff_flx_type,
2005                      p_default_context_field_name IN VARCHAR2,
2006                      x_dff_ref                    OUT nocopy dff_ref_type)
2007   RETURN BOOLEAN
2008   IS
2009      l_func_name VARCHAR2(80);
2010 BEGIN
2011    l_func_name := g_api_name || 'get_dff_ref(F)';
2012    SELECT *
2013      INTO x_dff_ref
2014      FROM fnd_default_context_fields
2015      WHERE application_id = p_dff_flx.application_id
2016      AND descriptive_flexfield_name = p_dff_flx.descriptive_flexfield_name
2017      AND default_context_field_name = p_default_context_field_name;
2018    RETURN TRUE;
2019 EXCEPTION
2020    WHEN no_data_found THEN
2021       RETURN FALSE;
2022    WHEN OTHERS THEN
2023       raise_when_others(l_func_name,
2024                         p_dff_flx.application_id,
2025                         p_dff_flx.descriptive_flexfield_name,
2026                         p_default_context_field_name);
2027 END get_dff_ref;
2028 --
2029 PROCEDURE get_dff_ref(p_dff_flx                    IN dff_flx_type,
2030                       p_default_context_field_name IN VARCHAR2,
2031                       x_dff_ref                    OUT nocopy dff_ref_type)
2032   IS
2033      l_func_name VARCHAR2(80);
2034 BEGIN
2035    l_func_name := g_api_name || 'get_dff_ref(P)';
2036    IF (NOT get_dff_ref(p_dff_flx, p_default_context_field_name,
2037                        x_dff_ref)) THEN
2038       raise_not_exist(l_func_name,
2039                       'Please use Application Developer:' ||
2040                       'Flexfield->Descriptive->Register form and ' ||
2041                       'create the reference field, ' ||
2042                       'or use FNDLOAD (afffload.lct).',
2043                       'APP Id', To_char(p_dff_flx.application_id),
2044                       'DFF Name', p_dff_flx.descriptive_flexfield_name,
2045                       'Reference Field', p_default_context_field_name);
2046    END IF;
2047 EXCEPTION
2048    WHEN OTHERS THEN
2049       raise_when_others(l_func_name,
2050                         p_dff_flx.application_id,
2051                         p_dff_flx.descriptive_flexfield_name,
2052                         p_default_context_field_name);
2053 END get_dff_ref;
2054 
2055 -- --------------------------------------------------
2056 FUNCTION get_dff_ctx(p_dff_flx                      IN dff_flx_type,
2057                      p_descriptive_flex_context_cod IN VARCHAR2,
2058                      x_dff_ctx                      OUT nocopy dff_ctx_type)
2059   RETURN BOOLEAN
2060   IS
2061      l_func_name VARCHAR2(80);
2062 BEGIN
2063    l_func_name := g_api_name || 'get_dff_ctx(F)';
2064    SELECT *
2065      INTO x_dff_ctx
2066      FROM fnd_descr_flex_contexts
2067      WHERE application_id = p_dff_flx.application_id
2068      AND descriptive_flexfield_name = p_dff_flx.descriptive_flexfield_name
2069      AND descriptive_flex_context_code = p_descriptive_flex_context_cod;
2070    RETURN TRUE;
2071 EXCEPTION
2072    WHEN no_data_found THEN
2073       RETURN FALSE;
2074    WHEN OTHERS THEN
2075       raise_when_others(l_func_name,
2076                         p_dff_flx.application_id,
2077                         p_dff_flx.descriptive_flexfield_name,
2078                         p_descriptive_flex_context_cod);
2079 END get_dff_ctx;
2080 --
2081 PROCEDURE get_dff_ctx(p_dff_flx                      IN dff_flx_type,
2082                       p_descriptive_flex_context_cod IN VARCHAR2,
2083                       x_dff_ctx                      OUT nocopy dff_ctx_type)
2084   IS
2085      l_func_name VARCHAR2(80);
2086 BEGIN
2087    l_func_name := g_api_name || 'get_dff_ctx(P)';
2088    IF (NOT get_dff_ctx(p_dff_flx, p_descriptive_flex_context_cod,
2089                        x_dff_ctx)) THEN
2090       raise_not_exist(l_func_name,
2091                       'Please use Application Developer:' ||
2092                       'Flexfield->Descriptive->Segments form and ' ||
2093                       'create the context, ' ||
2094                       'or use FNDLOAD (afffload.lct).',
2095                       'APP Id', To_char(p_dff_flx.application_id),
2096                       'DFF Name', p_dff_flx.descriptive_flexfield_name,
2097                       'Context Code', p_descriptive_flex_context_cod);
2098    END IF;
2099 EXCEPTION
2100    WHEN OTHERS THEN
2101       raise_when_others(l_func_name,
2102                         p_dff_flx.application_id,
2103                         p_dff_flx.descriptive_flexfield_name,
2104                         p_descriptive_flex_context_cod);
2105 END get_dff_ctx;
2106 --
2107 FUNCTION get_dff_ctx_tl(p_dff_ctx    IN dff_ctx_type,
2108                         p_language   IN VARCHAR2,
2109                         x_dff_ctx_tl OUT nocopy dff_ctx_tl_type)
2110   RETURN BOOLEAN
2111   IS
2112      l_func_name VARCHAR2(80);
2113 BEGIN
2114    l_func_name := g_api_name || 'get_dff_ctx_tl(F)';
2115    SELECT *
2116      INTO x_dff_ctx_tl
2117      FROM fnd_descr_flex_contexts_tl
2118      WHERE application_id = p_dff_ctx.application_id
2119      AND descriptive_flexfield_name = p_dff_ctx.descriptive_flexfield_name
2120      AND descriptive_flex_context_code = p_dff_ctx.descriptive_flex_context_code
2121      AND language = p_language;
2122    RETURN TRUE;
2123 EXCEPTION
2124    WHEN no_data_found THEN
2125       RETURN FALSE;
2126    WHEN OTHERS THEN
2127       raise_when_others(l_func_name,
2128                         p_dff_ctx.application_id,
2129                         p_dff_ctx.descriptive_flexfield_name,
2130                         p_dff_ctx.descriptive_flex_context_code,
2131                         p_language);
2132 END get_dff_ctx_tl;
2133 
2134 -- --------------------------------------------------
2135 FUNCTION get_dff_seg(p_dff_ctx                 IN dff_ctx_type,
2136                      p_application_column_name IN VARCHAR2,
2137                      x_dff_seg                 OUT nocopy dff_seg_type)
2138   RETURN BOOLEAN
2139   IS
2140      l_func_name VARCHAR2(80);
2141 BEGIN
2142    l_func_name := g_api_name || 'get_dff_seg(F)';
2143    SELECT *
2144      INTO x_dff_seg
2145      FROM fnd_descr_flex_column_usages
2146      WHERE application_id = p_dff_ctx.application_id
2147      AND descriptive_flexfield_name = p_dff_ctx.descriptive_flexfield_name
2148      AND descriptive_flex_context_code = p_dff_ctx.descriptive_flex_context_code
2149      AND application_column_name = p_application_column_name;
2150    RETURN TRUE;
2151 EXCEPTION
2152    WHEN no_data_found THEN
2153       RETURN FALSE;
2154    WHEN OTHERS THEN
2155       raise_when_others(l_func_name,
2156                         p_dff_ctx.application_id,
2157                         p_dff_ctx.descriptive_flexfield_name,
2158                         p_dff_ctx.descriptive_flex_context_code,
2159                         p_application_column_name);
2160 END get_dff_seg;
2161 --
2162 PROCEDURE get_dff_seg(p_dff_ctx                 IN dff_ctx_type,
2163                       p_application_column_name IN VARCHAR2,
2164                       x_dff_seg                 OUT nocopy dff_seg_type)
2165   IS
2166      l_func_name VARCHAR2(80);
2167 BEGIN
2168    l_func_name := g_api_name || 'get_dff_seg(P)';
2169    IF (NOT get_dff_seg(p_dff_ctx, p_application_column_name,
2170                        x_dff_seg)) THEN
2171       raise_not_exist(l_func_name,
2172                       'Please use Application Developer:' ||
2173                       'Flexfield->Descriptive->Segments form and ' ||
2174                       'create the segment, ' ||
2175                       'or use FNDLOAD (afffload.lct).',
2176                       'APP Id', To_char(p_dff_ctx.application_id),
2177                       'DFF Name', p_dff_ctx.descriptive_flexfield_name,
2178                       'Context Code', p_dff_ctx.descriptive_flex_context_code,
2179                       'Segment Col Name', p_application_column_name);
2180    END IF;
2181 EXCEPTION
2182    WHEN OTHERS THEN
2183       raise_when_others(l_func_name,
2184                         p_dff_ctx.application_id,
2185                         p_dff_ctx.descriptive_flexfield_name,
2186                         p_dff_ctx.descriptive_flex_context_code,
2187                         p_application_column_name);
2188 END get_dff_seg;
2189 --
2190 FUNCTION get_dff_seg_tl(p_dff_seg    IN dff_seg_type,
2191                         p_language   IN VARCHAR2,
2192                         x_dff_seg_tl OUT nocopy dff_seg_tl_type)
2193   RETURN BOOLEAN
2194   IS
2195      l_func_name VARCHAR2(80);
2196 BEGIN
2197    l_func_name := g_api_name || 'get_dff_seg_tl(F)';
2198    SELECT *
2199      INTO x_dff_seg_tl
2200      FROM fnd_descr_flex_col_usage_tl
2201      WHERE application_id = p_dff_seg.application_id
2202      AND descriptive_flexfield_name = p_dff_seg.descriptive_flexfield_name
2203      AND descriptive_flex_context_code = p_dff_seg.descriptive_flex_context_code
2204      AND application_column_name = p_dff_seg.application_column_name
2205      AND language = p_language;
2206    RETURN TRUE;
2207 EXCEPTION
2208    WHEN no_data_found THEN
2209       RETURN FALSE;
2210    WHEN OTHERS THEN
2211       raise_when_others(l_func_name,
2212                         p_dff_seg.application_id,
2213                         p_dff_seg.descriptive_flexfield_name,
2214                         p_dff_seg.descriptive_flex_context_code,
2215                         p_dff_seg.application_column_name,
2216                         p_dff_seg.end_user_column_name,
2217                         p_language);
2218 END get_dff_seg_tl;
2219 
2220 -- --------------------------------------------------
2221 FUNCTION get_kff_flx(p_application_short_name IN VARCHAR2,
2222                      p_id_flex_code           IN VARCHAR2,
2223                      x_kff_flx                OUT nocopy kff_flx_type)
2224   RETURN BOOLEAN
2225   IS
2226      l_func_name VARCHAR2(80);
2227      l_app       app_type;
2228 BEGIN
2229    l_func_name := g_api_name || 'get_kff_flx(F)';
2230    --
2231    -- Make sure Application exists.
2232    --
2233    get_app(p_application_short_name, l_app);
2234 
2235    SELECT *
2236      INTO x_kff_flx
2237      FROM fnd_id_flexs
2238      WHERE application_id = l_app.application_id
2239      AND id_flex_code = p_id_flex_code;
2240    RETURN TRUE;
2241 EXCEPTION
2242    WHEN no_data_found THEN
2243       RETURN FALSE;
2244    WHEN OTHERS THEN
2245       raise_when_others(l_func_name,
2246                         p_application_short_name,
2247                         p_id_flex_code);
2248 END get_kff_flx;
2249 --
2250 PROCEDURE get_kff_flx(p_application_short_name IN VARCHAR2,
2251                       p_id_flex_code           IN VARCHAR2,
2252                       x_kff_flx                OUT nocopy kff_flx_type)
2253   IS
2254      l_func_name VARCHAR2(80);
2255 BEGIN
2256    l_func_name := g_api_name || 'get_kff_flx(P)';
2257    IF (NOT get_kff_flx(p_application_short_name, p_id_flex_code,
2258                        x_kff_flx)) THEN
2259       raise_not_exist(l_func_name,
2260                       'Please use Application Developer:' ||
2261                       'Flexfield->Key->Register form and ' ||
2262                       'register the key flexfield, ' ||
2263                       'or use FNDLOAD (afffload.lct).',
2264                       'APP Short Name', p_application_short_name,
2265                       'KFF Code', p_id_flex_code);
2266    END IF;
2267 EXCEPTION
2268    WHEN OTHERS THEN
2269       raise_when_others(l_func_name,
2270                         p_application_short_name,
2271                         p_id_flex_code);
2272 END get_kff_flx;
2273 
2274 -- --------------------------------------------------
2275 FUNCTION get_kff_flq(p_kff_flx                IN kff_flx_type,
2276                      p_segment_attribute_type IN VARCHAR2,
2277                      x_kff_flq                OUT nocopy kff_flq_type)
2278   RETURN BOOLEAN
2279   IS
2280      l_func_name VARCHAR2(80);
2281 BEGIN
2282    l_func_name := g_api_name || 'get_kff_flq(F)';
2283    SELECT *
2284      INTO x_kff_flq
2285      FROM fnd_segment_attribute_types
2286      WHERE application_id = p_kff_flx.application_id
2287      AND id_flex_code = p_kff_flx.id_flex_code
2288      AND segment_attribute_type = p_segment_attribute_type;
2289    RETURN TRUE;
2290 EXCEPTION
2291    WHEN no_data_found THEN
2292       RETURN FALSE;
2293    WHEN OTHERS THEN
2294       raise_when_others(l_func_name,
2295                         p_kff_flx.application_id,
2296                         p_kff_flx.id_flex_code,
2297                         p_segment_attribute_type);
2298 END get_kff_flq;
2299 --
2300 PROCEDURE get_kff_flq(p_kff_flx                IN kff_flx_type,
2301                       p_segment_attribute_type IN VARCHAR2,
2302                       x_kff_flq                OUT nocopy kff_flq_type)
2303   IS
2304      l_func_name VARCHAR2(80);
2305 BEGIN
2306    l_func_name := g_api_name || 'get_kff_flq(P)';
2307    IF (NOT get_kff_flq(p_kff_flx, p_segment_attribute_type,
2308                        x_kff_flq)) THEN
2309       raise_not_exist(l_func_name,
2310                       'Please use Application Developer:' ||
2311                       'Flexfield->Key->Register form and ' ||
2312                       'create the flexfield qualifier, ' ||
2313                       'or use FNDLOAD (afffload.lct).',
2314                       'APP Id', To_char(p_kff_flx.application_id),
2315                       'KFF Code', p_kff_flx.id_flex_code,
2316                       'Flex Qual', p_segment_attribute_type);
2317    END IF;
2318 EXCEPTION
2319    WHEN OTHERS THEN
2320       raise_when_others(l_func_name,
2321                         p_kff_flx.application_id,
2322                         p_kff_flx.id_flex_code,
2323                         p_segment_attribute_type);
2324 END get_kff_flq;
2325 
2326 -- --------------------------------------------------
2327 FUNCTION get_kff_sgq(p_kff_flq              IN kff_flq_type,
2328                      p_value_attribute_type IN VARCHAR2,
2329                      x_kff_sgq              OUT nocopy kff_sgq_type)
2330   RETURN BOOLEAN
2331   IS
2332      l_func_name VARCHAR2(80);
2333 BEGIN
2334    l_func_name := g_api_name || 'get_kff_sgq(F)';
2335    SELECT *
2336      INTO x_kff_sgq
2337      FROM fnd_value_attribute_types
2338      WHERE application_id = p_kff_flq.application_id
2339      AND id_flex_code = p_kff_flq.id_flex_code
2340      AND segment_attribute_type = p_kff_flq.segment_attribute_type
2341      AND value_attribute_type = p_value_attribute_type;
2342    RETURN TRUE;
2343 EXCEPTION
2344    WHEN no_data_found THEN
2345       RETURN FALSE;
2346    WHEN OTHERS THEN
2347       raise_when_others(l_func_name,
2348                         p_kff_flq.application_id,
2349                         p_kff_flq.id_flex_code,
2350                         p_kff_flq.segment_attribute_type,
2351                         p_value_attribute_type);
2352 END get_kff_sgq;
2353 --
2354 PROCEDURE get_kff_sgq(p_kff_flq              IN kff_flq_type,
2355                       p_value_attribute_type IN VARCHAR2,
2356                       x_kff_sgq              OUT nocopy kff_sgq_type)
2357   IS
2358      l_func_name VARCHAR2(80);
2359 BEGIN
2360    l_func_name := g_api_name || 'get_kff_sgq(P)';
2361    IF (NOT get_kff_sgq(p_kff_flq, p_value_attribute_type,
2362                        x_kff_sgq)) THEN
2363       raise_not_exist(l_func_name,
2364                       'Please use Application Developer:' ||
2365                       'Flexfield->Key->Register form and ' ||
2366                       'create the segment qualifier, ' ||
2367                       'or use FNDLOAD (afffload.lct).',
2368                       'APP Id', To_char(p_kff_flq.application_id),
2369                       'KFF Code', p_kff_flq.id_flex_code,
2370                       'Flex Qual', p_kff_flq.segment_attribute_type,
2371                       'Segment Qual', p_value_attribute_type);
2372    END IF;
2373 EXCEPTION
2374    WHEN OTHERS THEN
2375       raise_when_others(l_func_name,
2376                         p_kff_flq.application_id,
2377                         p_kff_flq.id_flex_code,
2378                         p_kff_flq.segment_attribute_type,
2379                         p_value_attribute_type);
2380 END get_kff_sgq;
2381 --
2382 FUNCTION get_kff_sgq_tl(p_kff_sgq    IN kff_sgq_type,
2383                         p_language   IN VARCHAR2,
2384                         x_kff_sgq_tl OUT nocopy kff_sgq_tl_type)
2385   RETURN BOOLEAN
2386   IS
2387      l_func_name VARCHAR2(80);
2388 BEGIN
2389    l_func_name := g_api_name || 'get_kff_sgq_tl(F)';
2390    SELECT *
2391      INTO x_kff_sgq_tl
2392      FROM fnd_val_attribute_types_tl
2393      WHERE application_id = p_kff_sgq.application_id
2394      AND id_flex_code = p_kff_sgq.id_flex_code
2395      AND segment_attribute_type = p_kff_sgq.segment_attribute_type
2396      AND value_attribute_type = p_kff_sgq.value_attribute_type
2397      AND language = p_language;
2398    RETURN TRUE;
2399 EXCEPTION
2400    WHEN no_data_found THEN
2401       RETURN FALSE;
2402    WHEN OTHERS THEN
2403       raise_when_others(l_func_name,
2404                         p_kff_sgq.application_id,
2405                         p_kff_sgq.id_flex_code,
2406                         p_kff_sgq.segment_attribute_type,
2407                         p_kff_sgq.value_attribute_type,
2408                         p_language);
2409 END get_kff_sgq_tl;
2410 
2411 -- --------------------------------------------------
2412 FUNCTION get_kff_str(p_kff_flx                IN kff_flx_type,
2413                      p_id_flex_structure_code IN VARCHAR2,
2414                      x_kff_str                OUT nocopy kff_str_type)
2415   RETURN BOOLEAN
2416   IS
2417      l_func_name VARCHAR2(80);
2418 BEGIN
2419    l_func_name := g_api_name || 'get_kff_str(code,F)';
2420    SELECT *
2421      INTO x_kff_str
2422      FROM fnd_id_flex_structures
2423      WHERE application_id =  p_kff_flx.application_id
2424      AND id_flex_code = p_kff_flx.id_flex_code
2425      AND id_flex_structure_code = p_id_flex_structure_code;
2426    RETURN TRUE;
2427 EXCEPTION
2428    WHEN no_data_found THEN
2429       RETURN FALSE;
2430    WHEN OTHERS THEN
2431       raise_when_others(l_func_name,
2432                         p_kff_flx.application_id,
2433                         p_kff_flx.id_flex_code,
2434                         p_id_flex_structure_code);
2435 END get_kff_str;
2436 --
2437 PROCEDURE get_kff_str(p_kff_flx                IN kff_flx_type,
2438                       p_id_flex_structure_code IN VARCHAR2,
2439                       x_kff_str                OUT nocopy kff_str_type)
2440   IS
2441      l_func_name VARCHAR2(80);
2442 BEGIN
2443    l_func_name := g_api_name || 'get_kff_str(code,P)';
2444    IF (NOT get_kff_str(p_kff_flx, p_id_flex_structure_code,
2445                        x_kff_str)) THEN
2446       raise_not_exist(l_func_name,
2447                       'Please use Application Developer:' ||
2448                       'Flexfield->Key->Segments form and ' ||
2449                       'create the structure, ' ||
2450                       'or use FNDLOAD (afffload.lct).',
2451                       'APP Id', To_char(p_kff_flx.application_id),
2452                       'KFF Code', p_kff_flx.id_flex_code,
2453                       'Structure Code', p_id_flex_structure_code);
2454    END IF;
2455 EXCEPTION
2456    WHEN OTHERS THEN
2457       raise_when_others(l_func_name,
2458                         p_kff_flx.application_id,
2459                         p_kff_flx.id_flex_code,
2460                         p_id_flex_structure_code);
2461 END get_kff_str;
2462 --
2463 FUNCTION get_kff_str(p_kff_flx     IN kff_flx_type,
2464                      p_id_flex_num IN NUMBER,
2465                      x_kff_str     OUT nocopy kff_str_type)
2466   RETURN BOOLEAN
2467   IS
2468      l_func_name VARCHAR2(80);
2469 BEGIN
2470    l_func_name := g_api_name || 'get_kff_str(num,F)';
2471    SELECT *
2472      INTO x_kff_str
2473      FROM fnd_id_flex_structures
2474      WHERE application_id =  p_kff_flx.application_id
2475      AND id_flex_code = p_kff_flx.id_flex_code
2476      AND id_flex_num = p_id_flex_num;
2477    RETURN TRUE;
2478 EXCEPTION
2479    WHEN no_data_found THEN
2480       RETURN FALSE;
2481    WHEN OTHERS THEN
2482       raise_when_others(l_func_name,
2483                         p_kff_flx.application_id,
2484                         p_kff_flx.id_flex_code,
2485                         p_id_flex_num);
2486 END get_kff_str;
2487 --
2488 PROCEDURE get_kff_str(p_kff_flx     IN kff_flx_type,
2489                       p_id_flex_num IN NUMBER,
2490                       x_kff_str     OUT nocopy kff_str_type)
2491   IS
2492      l_func_name VARCHAR2(80);
2493 BEGIN
2494    l_func_name := g_api_name || 'get_kff_str(num,P)';
2495    IF (NOT get_kff_str(p_kff_flx, p_id_flex_num,
2496                        x_kff_str)) THEN
2497       raise_not_exist(l_func_name,
2498                       'Please use Application Developer:' ||
2499                       'Flexfield->Key->Segments form and ' ||
2500                       'create the structure, ' ||
2501                       'or use FNDLOAD (afffload.lct).',
2502                       'APP Id', To_char(p_kff_flx.application_id),
2503                       'KFF Code', p_kff_flx.id_flex_code,
2504                       'Structure Num', To_char(p_id_flex_num));
2505    END IF;
2506 EXCEPTION
2507    WHEN OTHERS THEN
2508       raise_when_others(l_func_name,
2509                         p_kff_flx.application_id,
2510                         p_kff_flx.id_flex_code,
2511                         p_id_flex_num);
2512 END get_kff_str;
2513 --
2514 FUNCTION get_kff_str_tl(p_kff_str    IN kff_str_type,
2515                         p_language   IN VARCHAR2,
2516                         x_kff_str_tl OUT nocopy kff_str_tl_type)
2517   RETURN BOOLEAN
2518   IS
2519      l_func_name VARCHAR2(80);
2520 BEGIN
2521    l_func_name := g_api_name || 'get_kff_str_tl(F)';
2522    SELECT *
2523      INTO x_kff_str_tl
2524      FROM fnd_id_flex_structures_tl
2525      WHERE application_id =  p_kff_str.application_id
2526      AND id_flex_code = p_kff_str.id_flex_code
2527      AND id_flex_num = p_kff_str.id_flex_num
2528      AND language = p_language;
2529    RETURN TRUE;
2530 EXCEPTION
2531    WHEN no_data_found THEN
2532       RETURN FALSE;
2533    WHEN OTHERS THEN
2534       raise_when_others(l_func_name,
2535                         p_kff_str.application_id,
2536                         p_kff_str.id_flex_code,
2537                         p_kff_str.id_flex_structure_code,
2538                         p_kff_str.id_flex_num,
2539                         p_language);
2540 END get_kff_str_tl;
2541 
2542 -- --------------------------------------------------
2543 FUNCTION get_kff_wfp(p_kff_str      IN kff_str_type,
2544                      p_wf_item_type IN VARCHAR2,
2545                      x_kff_wfp      OUT nocopy kff_wfp_type)
2546   RETURN BOOLEAN
2547   IS
2548      l_func_name VARCHAR2(80);
2549 BEGIN
2550    l_func_name := g_api_name || 'get_kff_wfp(F)';
2551    SELECT *
2552      INTO x_kff_wfp
2553      FROM fnd_flex_workflow_processes
2554      WHERE application_id =  p_kff_str.application_id
2555      AND id_flex_code = p_kff_str.id_flex_code
2556      AND id_flex_num = p_kff_str.id_flex_num
2557      AND wf_item_type = p_wf_item_type;
2558    RETURN TRUE;
2559 EXCEPTION
2560    WHEN no_data_found THEN
2561       RETURN FALSE;
2562    WHEN OTHERS THEN
2563       raise_when_others(l_func_name,
2564                         p_kff_str.application_id,
2565                         p_kff_str.id_flex_code,
2566                         p_kff_str.id_flex_structure_code,
2567                         p_kff_str.id_flex_num,
2568                         p_wf_item_type);
2569 END get_kff_wfp;
2570 --
2571 PROCEDURE get_kff_wfp(p_kff_str      IN kff_str_type,
2572                       p_wf_item_type IN VARCHAR2,
2573                       x_kff_wfp      OUT nocopy kff_wfp_type)
2574   IS
2575      l_func_name VARCHAR2(80);
2576 BEGIN
2577    l_func_name := g_api_name || 'get_kff_wfp(P)';
2578    IF (NOT get_kff_wfp(p_kff_str, p_wf_item_type,
2579                        x_kff_wfp)) THEN
2580       raise_not_exist(l_func_name,
2581                       'Please use Application Developer:' ||
2582                       'Flexfield->Key->Accounts form and ' ||
2583                       'create the WF Item Type, ' ||
2584                       'or use FNDLOAD (afffload.lct).',
2585                       'APP Id', To_char(p_kff_str.application_id),
2586                       'KFF Code', p_kff_str.id_flex_code,
2587                       'Structure Code', p_kff_str.id_flex_structure_code,
2588                       'WF Item Type', p_wf_item_type);
2589    END IF;
2590 EXCEPTION
2591    WHEN OTHERS THEN
2592       raise_when_others(l_func_name,
2593                         p_kff_str.application_id,
2594                         p_kff_str.id_flex_code,
2595                         p_kff_str.id_flex_structure_code,
2596                         p_kff_str.id_flex_num,
2597                         p_wf_item_type);
2598 END get_kff_wfp;
2599 
2600 -- --------------------------------------------------
2601 FUNCTION get_kff_sha(p_kff_str    IN kff_str_type,
2602                      p_alias_name IN VARCHAR2,
2603                      x_kff_sha    OUT nocopy kff_sha_type)
2604   RETURN BOOLEAN
2605   IS
2606      l_func_name VARCHAR2(80);
2607 BEGIN
2608    l_func_name := g_api_name || 'get_kff_sha(F)';
2609    SELECT *
2610      INTO x_kff_sha
2611      FROM fnd_shorthand_flex_aliases
2612      WHERE application_id =  p_kff_str.application_id
2613      AND id_flex_code = p_kff_str.id_flex_code
2614      AND id_flex_num = p_kff_str.id_flex_num
2615      AND alias_name = p_alias_name;
2616    RETURN TRUE;
2617 EXCEPTION
2618    WHEN no_data_found THEN
2619       RETURN FALSE;
2620    WHEN OTHERS THEN
2621       raise_when_others(l_func_name,
2622                         p_kff_str.application_id,
2623                         p_kff_str.id_flex_code,
2624                         p_kff_str.id_flex_structure_code,
2625                         p_kff_str.id_flex_num,
2626                         p_alias_name);
2627 END get_kff_sha;
2628 --
2629 PROCEDURE get_kff_sha(p_kff_str    IN kff_str_type,
2630                       p_alias_name IN VARCHAR2,
2631                       x_kff_sha    OUT nocopy kff_sha_type)
2632   IS
2633      l_func_name VARCHAR2(80);
2634 BEGIN
2635    l_func_name := g_api_name || 'get_kff_sha(P)';
2636    IF (NOT get_kff_sha(p_kff_str, p_alias_name,
2637                        x_kff_sha)) THEN
2638       raise_not_exist(l_func_name,
2639                       'Please use Application Developer:' ||
2640                       'Flexfield->Key->Aliases form and ' ||
2641                       'create the alias, ' ||
2642                       'or use FNDLOAD (afffload.lct).',
2643                       'APP Id', To_char(p_kff_str.application_id),
2644                       'KFF Code', p_kff_str.id_flex_code,
2645                       'Structure Code', p_kff_str.id_flex_structure_code,
2646                       'Alias Name', p_alias_name);
2647    END IF;
2648 EXCEPTION
2649    WHEN OTHERS THEN
2650       raise_when_others(l_func_name,
2651                         p_kff_str.application_id,
2652                         p_kff_str.id_flex_code,
2653                         p_kff_str.id_flex_structure_code,
2654                         p_kff_str.id_flex_num,
2655                         p_alias_name);
2656 END get_kff_sha;
2657 
2658 -- --------------------------------------------------
2659 FUNCTION get_kff_cvr(p_kff_str                   IN kff_str_type,
2660                      p_flex_validation_rule_name IN VARCHAR2,
2661                      x_kff_cvr                   OUT nocopy kff_cvr_type)
2662   RETURN BOOLEAN
2663   IS
2664      l_func_name VARCHAR2(80);
2665 BEGIN
2666    l_func_name := g_api_name || 'get_kff_cvr(F)';
2667    SELECT *
2668      INTO x_kff_cvr
2669      FROM fnd_flex_validation_rules
2670      WHERE application_id =  p_kff_str.application_id
2671      AND id_flex_code = p_kff_str.id_flex_code
2672      AND id_flex_num = p_kff_str.id_flex_num
2673      AND flex_validation_rule_name = p_flex_validation_rule_name;
2674    RETURN TRUE;
2675 EXCEPTION
2676    WHEN no_data_found THEN
2677       RETURN FALSE;
2678    WHEN OTHERS THEN
2679       raise_when_others(l_func_name,
2680                         p_kff_str.application_id,
2681                         p_kff_str.id_flex_code,
2682                         p_kff_str.id_flex_structure_code,
2683                         p_kff_str.id_flex_num,
2684                         p_flex_validation_rule_name);
2685 END get_kff_cvr;
2686 --
2687 PROCEDURE get_kff_cvr(p_kff_str                   IN kff_str_type,
2688                       p_flex_validation_rule_name IN VARCHAR2,
2689                       x_kff_cvr                   OUT nocopy kff_cvr_type)
2690   IS
2691      l_func_name VARCHAR2(80);
2692 BEGIN
2693    l_func_name := g_api_name || 'get_kff_cvr(P)';
2694    IF (NOT get_kff_cvr(p_kff_str, p_flex_validation_rule_name,
2695                        x_kff_cvr)) THEN
2696       raise_not_exist(l_func_name,
2697                       'Please use Application Developer:' ||
2698                       'Flexfield->Key->CrossValidation form and ' ||
2699                       'create the cross validation rule, ' ||
2700                       'or use FNDLOAD (afffload.lct).',
2701                       'APP Id', To_char(p_kff_str.application_id),
2702                       'KFF Code', p_kff_str.id_flex_code,
2703                       'Structure Code', p_kff_str.id_flex_structure_code,
2704                       'CVR Name', p_flex_validation_rule_name);
2705    END IF;
2706 EXCEPTION
2707    WHEN OTHERS THEN
2708       raise_when_others(l_func_name,
2709                         p_kff_str.application_id,
2710                         p_kff_str.id_flex_code,
2711                         p_kff_str.id_flex_structure_code,
2712                         p_kff_str.id_flex_num,
2713                         p_flex_validation_rule_name);
2714 END get_kff_cvr;
2715 --
2716 FUNCTION get_kff_cvr_tl(p_kff_cvr    IN kff_cvr_type,
2717                         p_language   IN VARCHAR2,
2718                         x_kff_cvr_tl OUT nocopy kff_cvr_tl_type)
2719   RETURN BOOLEAN
2720   IS
2721      l_func_name VARCHAR2(80);
2722 BEGIN
2723    l_func_name := g_api_name || 'get_kff_cvr_tl(F)';
2724    SELECT *
2725      INTO x_kff_cvr_tl
2726      FROM fnd_flex_vdation_rules_tl
2727      WHERE application_id =  p_kff_cvr.application_id
2728      AND id_flex_code = p_kff_cvr.id_flex_code
2729      AND id_flex_num = p_kff_cvr.id_flex_num
2730      AND flex_validation_rule_name = p_kff_cvr.flex_validation_rule_name
2731      AND language = p_language;
2732    RETURN TRUE;
2733 EXCEPTION
2734    WHEN no_data_found THEN
2735       RETURN FALSE;
2736    WHEN OTHERS THEN
2737       raise_when_others(l_func_name,
2738                         p_kff_cvr.application_id,
2739                         p_kff_cvr.id_flex_code,
2740                         p_kff_cvr.id_flex_num,
2741                         p_kff_cvr.flex_validation_rule_name,
2742                         p_language);
2743 END get_kff_cvr_tl;
2744 
2745 -- --------------------------------------------------
2746 FUNCTION get_kff_cvl(p_kff_cvr                    IN kff_cvr_type,
2747                      p_include_exclude_indicator  IN VARCHAR2,
2748                      p_concatenated_segments_low  IN VARCHAR2,
2749                      p_concatenated_segments_high IN VARCHAR2,
2750                      x_kff_cvl                    OUT nocopy kff_cvl_type)
2751   RETURN BOOLEAN
2752   IS
2753      l_func_name VARCHAR2(80);
2754 BEGIN
2755    l_func_name := g_api_name || 'get_kff_cvl(F)';
2756    SELECT *
2757      INTO x_kff_cvl
2758      FROM fnd_flex_validation_rule_lines
2759      WHERE application_id =  p_kff_cvr.application_id
2760      AND id_flex_code = p_kff_cvr.id_flex_code
2761      AND id_flex_num = p_kff_cvr.id_flex_num
2762      AND flex_validation_rule_name = p_kff_cvr.flex_validation_rule_name
2763      AND include_exclude_indicator = p_include_exclude_indicator
2764      AND concatenated_segments_low = p_concatenated_segments_low
2765      AND concatenated_segments_high = p_concatenated_segments_high;
2766    RETURN TRUE;
2767 EXCEPTION
2768    WHEN no_data_found THEN
2769       RETURN FALSE;
2770    WHEN OTHERS THEN
2771       raise_when_others(l_func_name,
2772                         p_kff_cvr.application_id,
2773                         p_kff_cvr.id_flex_code,
2774                         p_kff_cvr.id_flex_num,
2775                         p_kff_cvr.flex_validation_rule_name,
2776                         p_include_exclude_indicator,
2777                         p_concatenated_segments_low,
2778                         p_concatenated_segments_high);
2779 END get_kff_cvl;
2780 --
2781 PROCEDURE get_kff_cvl(p_kff_cvr                    IN kff_cvr_type,
2782                       p_include_exclude_indicator  IN VARCHAR2,
2783                       p_concatenated_segments_low  IN VARCHAR2,
2784                       p_concatenated_segments_high IN VARCHAR2,
2785                       x_kff_cvl                    OUT nocopy kff_cvl_type)
2786   IS
2787      l_func_name VARCHAR2(80);
2788 BEGIN
2789    l_func_name := g_api_name || 'get_kff_cvl(P)';
2790    IF (NOT get_kff_cvl(p_kff_cvr, p_include_exclude_indicator,
2791                        p_concatenated_segments_low,
2792                        p_concatenated_segments_high,
2793                        x_kff_cvl)) THEN
2794       raise_not_exist(l_func_name,
2795                       'Please use Application Developer:' ||
2796                       'Flexfield->Key->CrossValidation form and ' ||
2797                       'create the cross validation rule line, ' ||
2798                       'or use FNDLOAD (afffload.lct)',
2799                       'APP Id', To_char(p_kff_cvr.application_id),
2800                       'KFF Code', p_kff_cvr.id_flex_code,
2801                       'Structure Num', To_char(p_kff_cvr.id_flex_num),
2802                       'CVR Name', p_kff_cvr.flex_validation_rule_name,
2803                       'I/E Indicator', p_include_exclude_indicator,
2804                       'Segments Low', p_concatenated_segments_low,
2805                       'Segments High', p_concatenated_segments_high);
2806    END IF;
2807 EXCEPTION
2808    WHEN OTHERS THEN
2809       raise_when_others(l_func_name,
2810                         p_kff_cvr.application_id,
2811                         p_kff_cvr.id_flex_code,
2812                         p_kff_cvr.id_flex_num,
2813                         p_kff_cvr.flex_validation_rule_name,
2814                         p_include_exclude_indicator,
2815                         p_concatenated_segments_low,
2816                         p_concatenated_segments_high);
2817 END get_kff_cvl;
2818 
2819 -- --------------------------------------------------
2820 FUNCTION get_kff_seg(p_kff_str                 IN kff_str_type,
2821                      p_application_column_name IN VARCHAR2,
2822                      x_kff_seg                 OUT nocopy kff_seg_type)
2823   RETURN BOOLEAN
2824   IS
2825      l_func_name VARCHAR2(80);
2826 BEGIN
2827    l_func_name := g_api_name || 'get_kff_seg(F)';
2828    SELECT *
2829      INTO x_kff_seg
2830      FROM fnd_id_flex_segments
2831      WHERE application_id =  p_kff_str.application_id
2832      AND id_flex_code = p_kff_str.id_flex_code
2833      AND id_flex_num = p_kff_str.id_flex_num
2834      AND application_column_name = p_application_column_name;
2835    RETURN TRUE;
2836 EXCEPTION
2837    WHEN no_data_found THEN
2838       RETURN FALSE;
2839    WHEN OTHERS THEN
2840       raise_when_others(l_func_name,
2841                         p_kff_str.application_id,
2842                         p_kff_str.id_flex_code,
2843                         p_kff_str.id_flex_structure_code,
2844                         p_kff_str.id_flex_num,
2845                         p_application_column_name);
2846 END get_kff_seg;
2847 --
2848 PROCEDURE get_kff_seg(p_kff_str                 IN kff_str_type,
2849                       p_application_column_name IN VARCHAR2,
2850                       x_kff_seg                 OUT nocopy kff_seg_type)
2851   IS
2852      l_func_name VARCHAR2(80);
2853 BEGIN
2854    l_func_name := g_api_name || 'get_kff_seg(P)';
2855    IF (NOT get_kff_seg(p_kff_str, p_application_column_name,
2856                        x_kff_seg)) THEN
2857       raise_not_exist(l_func_name,
2858                       'Please use Application Developer:' ||
2859                       'Flexfield->Key->Segments form and ' ||
2860                       'create the segment, ' ||
2861                       'or use FNDLOAD (afffload.lct).',
2862                       'APP Id', To_char(p_kff_str.application_id),
2863                       'KFF Code', p_kff_str.id_flex_code,
2864                       'Structure Code', p_kff_str.id_flex_structure_code,
2865                       'COL Name', p_application_column_name);
2866    END IF;
2867 EXCEPTION
2868    WHEN OTHERS THEN
2869       raise_when_others(l_func_name,
2870                         p_kff_str.application_id,
2871                         p_kff_str.id_flex_code,
2872                         p_kff_str.id_flex_structure_code,
2873                         p_kff_str.id_flex_num,
2874                         p_application_column_name);
2875 END get_kff_seg;
2876 --
2877 FUNCTION get_kff_seg_tl(p_kff_seg    IN kff_seg_type,
2878                         p_language   IN VARCHAR2,
2879                         x_kff_seg_tl OUT nocopy kff_seg_tl_type)
2880   RETURN BOOLEAN
2881   IS
2882      l_func_name VARCHAR2(80);
2883 BEGIN
2884    l_func_name := g_api_name || 'get_kff_seg_tl(F)';
2885    SELECT *
2886      INTO x_kff_seg_tl
2887      FROM fnd_id_flex_segments_tl
2888      WHERE application_id =  p_kff_seg.application_id
2889      AND id_flex_code = p_kff_seg.id_flex_code
2890      AND id_flex_num = p_kff_seg.id_flex_num
2891      AND application_column_name = p_kff_seg.application_column_name
2892      AND language = p_language;
2893    RETURN TRUE;
2894 EXCEPTION
2895    WHEN no_data_found THEN
2896       RETURN FALSE;
2897    WHEN OTHERS THEN
2898       raise_when_others(l_func_name,
2899                         p_kff_seg.application_id,
2900                         p_kff_seg.id_flex_code,
2901                         p_kff_seg.id_flex_num,
2902                         p_kff_seg.application_column_name,
2903                         p_kff_seg.segment_name,
2904                         p_language);
2905 END get_kff_seg_tl;
2906 
2907 -- --------------------------------------------------
2908 FUNCTION get_kff_fqa(p_kff_flq IN kff_flq_type,
2909                      p_kff_seg IN kff_seg_type,
2910                      x_kff_fqa OUT nocopy kff_fqa_type)
2911   RETURN BOOLEAN
2912   IS
2913      l_func_name VARCHAR2(80);
2914 BEGIN
2915    l_func_name := g_api_name || 'get_kff_fqa(F)';
2916    SELECT *
2917      INTO x_kff_fqa
2918      FROM fnd_segment_attribute_values
2919      WHERE application_id =  p_kff_flq.application_id
2920      AND id_flex_code = p_kff_flq.id_flex_code
2921      AND segment_attribute_type = p_kff_flq.segment_attribute_type
2922      AND id_flex_num = p_kff_seg.id_flex_num
2923      AND application_column_name = p_kff_seg.application_column_name
2924      AND p_kff_seg.application_id = p_kff_flq.application_id
2925      AND p_kff_seg.id_flex_code = p_kff_flq.id_flex_code;
2926    RETURN TRUE;
2927 EXCEPTION
2928    WHEN no_data_found THEN
2929       RETURN FALSE;
2930    WHEN OTHERS THEN
2931       raise_when_others(l_func_name,
2932                         p_kff_flq.application_id,
2933                         p_kff_flq.id_flex_code,
2934                         p_kff_flq.segment_attribute_type,
2935                         p_kff_seg.application_id,
2936                         p_kff_seg.id_flex_code,
2937                         p_kff_seg.id_flex_num,
2938                         p_kff_seg.application_column_name);
2939 END get_kff_fqa;
2940 --
2941 PROCEDURE get_kff_fqa(p_kff_flq IN kff_flq_type,
2942                       p_kff_seg IN kff_seg_type,
2943                       x_kff_fqa OUT nocopy kff_fqa_type)
2944   IS
2945      l_func_name VARCHAR2(80);
2946 BEGIN
2947    l_func_name := g_api_name || 'get_kff_fqa(P)';
2948    IF (NOT get_kff_fqa(p_kff_flq, p_kff_seg,
2949                        x_kff_fqa)) THEN
2950       raise_not_exist(l_func_name,
2951                       'Please use Application Developer:' ||
2952                       'Flexfield->Key->Register form and ' ||
2953                       'create the flexfield qualifier, ' ||
2954                       'or use FNDLOAD (afffload.lct).',
2955                       'APP Id', To_char(p_kff_flq.application_id),
2956                       'KFF Code', p_kff_flq.id_flex_code,
2957                       'Flex Qual', p_kff_flq.segment_attribute_type,
2958                       'Structure Num', To_char(p_kff_seg.id_flex_num),
2959                       'COL Name', p_kff_seg.application_column_name);
2960    END IF;
2961 EXCEPTION
2962    WHEN OTHERS THEN
2963       raise_when_others(l_func_name,
2964                         p_kff_flq.application_id,
2965                         p_kff_flq.id_flex_code,
2966                         p_kff_flq.segment_attribute_type,
2967                         p_kff_seg.application_id,
2968                         p_kff_seg.id_flex_code,
2969                         p_kff_seg.id_flex_num,
2970                         p_kff_seg.application_column_name);
2971 END get_kff_fqa;
2972 
2973 -- --------------------------------------------------
2974 PROCEDURE populate_kff_flexq_assign
2975   IS
2976      l_func_name VARCHAR2(80);
2977 
2978      CURSOR missing_sav_cur IS
2979         SELECT
2980           ifsg.application_id,
2981           ifsg.id_flex_code,
2982           ifsg.id_flex_num,
2983           ifsg.application_column_name,
2984           sat.segment_attribute_type,
2985 
2986           ifsg.created_by        ifsg_created_by,
2987           ifsg.creation_date     ifsg_creation_date,
2988           ifsg.last_updated_by   ifsg_last_updated_by,
2989           ifsg.last_update_date  ifsg_last_update_date,
2990           ifsg.last_update_login ifsg_last_update_login,
2991 
2992           sat.created_by         sat_created_by,
2993           sat.creation_date      sat_creation_date,
2994           sat.last_updated_by    sat_last_updated_by,
2995           sat.last_update_date   sat_last_update_date,
2996           sat.last_update_login  sat_last_update_login,
2997 
2998           sat.global_flag
2999           FROM fnd_id_flex_segments ifsg, fnd_segment_attribute_types sat
3000           WHERE sat.application_id = ifsg.application_id
3001           AND sat.id_flex_code = ifsg.id_flex_code
3002           AND NOT exists
3003           (SELECT NULL
3004            FROM fnd_segment_attribute_values sav
3005            WHERE sav.application_id = ifsg.application_id
3006            AND sav.id_flex_code = ifsg.id_flex_code
3007            AND sav.id_flex_num = ifsg.id_flex_num
3008            AND sav.application_column_name = ifsg.application_column_name
3009            AND sav.segment_attribute_type = sat.segment_attribute_type);
3010 
3011      l_who who_type;
3012 BEGIN
3013    l_func_name := g_api_name || 'populate_kff_flexq_assign()';
3014    --
3015    -- Populate the cross product table. Copied from AFFFKAIB.pls
3016    --
3017    IF (g_debug_on) THEN
3018       debug(l_func_name, 'Populating KFF_FLEXQ_ASSIGN.(no-TL)');
3019    END IF;
3020 
3021    --
3022    -- This code fixes if there are data inconsistencies.
3023    --
3024    FOR missing_sav_rec IN missing_sav_cur LOOP
3025       --
3026       -- Compute the who data of missing row
3027       --
3028       IF (missing_sav_rec.sat_creation_date >
3029           missing_sav_rec.ifsg_creation_date) THEN
3030          --
3031          -- Flex Qualifier was created last, SAV row should get
3032          -- the WHO data from Flex Qualifier.
3033          --
3034 
3035          l_who.created_by := missing_sav_rec.sat_created_by;
3036          l_who.creation_date := missing_sav_rec.sat_creation_date;
3037          l_who.last_updated_by := missing_sav_rec.sat_last_updated_by;
3038          l_who.last_update_date := missing_sav_rec.sat_last_update_date;
3039          l_who.last_update_login := missing_sav_rec.sat_last_update_login;
3040        ELSE
3041 
3042          l_who.created_by := missing_sav_rec.ifsg_created_by;
3043          l_who.creation_date := missing_sav_rec.ifsg_creation_date;
3044          l_who.last_updated_by := missing_sav_rec.ifsg_last_updated_by;
3045          l_who.last_update_date := missing_sav_rec.ifsg_last_update_date;
3046          l_who.last_update_login := missing_sav_rec.ifsg_last_update_login;
3047       END IF;
3048 
3049       --
3050       -- Insert the missing row
3051       --
3052       INSERT INTO fnd_segment_attribute_values
3053         (
3054          application_id,
3055          id_flex_code,
3056          id_flex_num,
3057          application_column_name,
3058          segment_attribute_type,
3059 
3060          created_by,
3061          creation_date,
3062          last_updated_by,
3063          last_update_date,
3064          last_update_login,
3065 
3066          attribute_value
3067          )
3068         SELECT
3069         ifsg.application_id,
3070         ifsg.id_flex_code,
3071         ifsg.id_flex_num,
3072         ifsg.application_column_name,
3073         sat.segment_attribute_type,
3074 
3075         l_who.created_by,
3076         l_who.creation_date,
3077         l_who.last_updated_by,
3078         l_who.last_update_date,
3079         l_who.last_update_login,
3080 
3081         sat.global_flag
3082         FROM fnd_id_flex_segments ifsg, fnd_segment_attribute_types sat
3083         WHERE sat.application_id = ifsg.application_id
3084         AND sat.id_flex_code = ifsg.id_flex_code
3085         AND ifsg.application_id = missing_sav_rec.application_id
3086         AND ifsg.id_flex_code = missing_sav_rec.id_flex_code
3087         AND ifsg.id_flex_num = missing_sav_rec.id_flex_num
3088         AND ifsg.application_column_name = missing_sav_rec.application_column_name
3089         AND sat.segment_attribute_type = missing_sav_rec.segment_attribute_type
3090         AND NOT exists
3091         (SELECT NULL
3092          FROM fnd_segment_attribute_values sav
3093          WHERE sav.application_id = ifsg.application_id
3094          AND sav.id_flex_code = ifsg.id_flex_code
3095          AND sav.id_flex_num = ifsg.id_flex_num
3096          AND sav.application_column_name = ifsg.application_column_name
3097          AND sav.segment_attribute_type = sat.segment_attribute_type);
3098 
3099       IF (SQL%rowcount > 0) THEN
3100          g_numof_changes := g_numof_changes + 1;
3101       END IF;
3102    END LOOP;
3103 
3104 EXCEPTION
3105    WHEN OTHERS THEN
3106       raise_when_others(l_func_name);
3107 END populate_kff_flexq_assign;
3108 
3109 -- --------------------------------------------------
3110 PROCEDURE populate_kff_segq_assign
3111   IS
3112      l_func_name VARCHAR2(80);
3113      l_sysdate   DATE;
3114 BEGIN
3115    l_func_name := g_api_name || 'populate_kff_segq_assign()';
3116    --
3117    -- Populate the qualifiers table. Copied from AFFFKAIB.pls
3118    --
3119    IF (g_debug_on) THEN
3120       debug(l_func_name, 'Populating KFF_SEGQ_ASSIGN.(no-TL)');
3121    END IF;
3122 
3123    l_sysdate := Sysdate;
3124    INSERT INTO fnd_flex_validation_qualifiers
3125      (
3126       flex_value_set_id,
3127       id_flex_application_id,
3128       id_flex_code,
3129       segment_attribute_type,
3130       value_attribute_type,
3131       assignment_date
3132       )
3133      SELECT DISTINCT ifsg.flex_value_set_id,
3134      ifsg.application_id,
3135      ifsg.id_flex_code,
3136      vat.segment_attribute_type,
3137      vat.value_attribute_type,
3138      l_sysdate
3139      FROM
3140      fnd_val_attribute_types_vl vat,
3141      fnd_segment_attribute_values sav,
3142      fnd_id_flex_segments_vl ifsg
3143      WHERE sav.application_id = ifsg.application_id
3144      AND sav.id_flex_code = ifsg.id_flex_code
3145      AND sav.id_flex_num = ifsg.id_flex_num
3146      AND sav.application_column_name = ifsg.application_column_name
3147      AND sav.attribute_value = 'Y'
3148      AND vat.application_id = sav.application_id
3149      AND vat.id_flex_code = sav.id_flex_code
3150      AND vat.segment_attribute_type = sav.segment_attribute_type
3151      AND ifsg.enabled_flag = 'Y'
3152      AND ifsg.flex_value_set_id IS NOT NULL
3153      AND NOT exists
3154      (SELECT NULL
3155       FROM fnd_flex_validation_qualifiers fvq
3156       WHERE fvq.flex_value_set_id = ifsg.flex_value_set_id
3157       AND fvq.id_flex_application_id = ifsg.application_id
3158       AND fvq.id_flex_code = ifsg.id_flex_code
3159       AND fvq.segment_attribute_type = sav.segment_attribute_type
3160       AND fvq.value_attribute_type = vat.value_attribute_type);
3161    IF (SQL%rowcount > 0) THEN
3162       g_numof_changes := g_numof_changes + 1;
3163    END IF;
3164 EXCEPTION
3165    WHEN OTHERS THEN
3166       raise_when_others(l_func_name);
3167 END populate_kff_segq_assign;
3168 
3169 -- --------------------------------------------------
3170 PROCEDURE delete_compiled_data(p_mode                       IN VARCHAR2,
3171                                p_application_id             IN NUMBER,
3172                                p_descriptive_flexfield_name IN VARCHAR2 DEFAULT NULL,
3173                                p_id_flex_code               IN VARCHAR2 DEFAULT NULL,
3174                                p_id_flex_num                IN NUMBER DEFAULT NULL)
3175   IS
3176      l_func_name VARCHAR2(80);
3177 BEGIN
3178    l_func_name := g_api_name || 'delete_compiled_data()';
3179 
3180    IF (p_mode = 'DFF') THEN
3181 
3182       DELETE FROM fnd_compiled_descriptive_flexs fcdf
3183         WHERE fcdf.application_id = p_application_id
3184         AND fcdf.descriptive_flexfield_name = p_descriptive_flexfield_name;
3185 
3186     ELSIF (p_mode = 'KFF-STR') THEN
3187 
3188       DELETE FROM fnd_compiled_id_flex_structs fcifs
3189         WHERE fcifs.application_id = p_application_id
3190         AND fcifs.id_flex_code = p_id_flex_code
3191         AND fcifs.id_flex_num = p_id_flex_num;
3192 
3193       DELETE FROM fnd_compiled_id_flexs fcif
3194         WHERE fcif.application_id = p_application_id
3195         AND fcif.id_flex_code = p_id_flex_code;
3196 
3197    END IF;
3198 EXCEPTION
3199    WHEN OTHERS THEN
3200       raise_when_others(l_func_name,
3201                         p_mode,
3202                         p_application_id,
3203                         p_descriptive_flexfield_name,
3204                         p_id_flex_code,
3205                         p_id_flex_num);
3206 END delete_compiled_data;
3207 
3208 -- --------------------------------------------------
3209 FUNCTION apps_initialize
3210   RETURN BOOLEAN
3211   IS
3212      l_func_name    VARCHAR2(80);
3213      l_user_id      NUMBER;
3214      l_resp_id      NUMBER;
3215      l_resp_appl_id NUMBER;
3216 BEGIN
3217    l_func_name := g_api_name || 'apps_initialize';
3218 
3219    l_user_id      := fnd_global.user_id;
3220    l_resp_id      := fnd_global.resp_id;
3221    l_resp_appl_id := fnd_global.resp_appl_id;
3222    --
3223    -- If context is not set:
3224    -- Set the Apps Context. This is a workaround. CP team should set
3225    -- an ANONYMOUS context. See bug2014695.
3226    --
3227    IF (l_user_id <> -1 OR
3228        l_resp_id <> -1 OR
3229        l_resp_appl_id <> -1) THEN
3230       --
3231       -- Context was already set.
3232       --
3233       IF (g_debug_on) THEN
3234          debug(l_func_name, ('Apps Context was already set to ' ||
3235                              '(user_id=' || l_user_id ||
3236                              ', resp_id=' || l_resp_id ||
3237                              ', resp_appl_id=' || l_resp_appl_id || ')'));
3238       END IF;
3239 
3240     ELSE
3241 
3242       SELECT u.user_id
3243         INTO l_user_id
3244         FROM fnd_user u
3245         WHERE u.user_name = 'SYSADMIN';
3246 
3247       SELECT r.application_id, r.responsibility_id
3248         INTO l_resp_appl_id, l_resp_id
3249         FROM fnd_application a, fnd_responsibility r
3250         WHERE r.application_id = a.application_id
3251         AND a.application_short_name = 'SYSADMIN'
3252         AND r.responsibility_key = 'SYSTEM_ADMINISTRATOR';
3253 
3254       fnd_global.apps_initialize(user_id      => l_user_id,
3255                                  resp_id      => l_resp_id,
3256                                  resp_appl_id => l_resp_appl_id);
3257 
3258       IF (g_debug_on) THEN
3259          debug(l_func_name, ('Apps Context is set to (SYSADMIN)=' ||
3260                              '(user_id=' || l_user_id ||
3261                              ', resp_id=' || l_resp_id ||
3262                              ', resp_appl_id=' || l_resp_appl_id || ')'));
3263       END IF;
3264    END IF;
3265    RETURN(TRUE);
3266 EXCEPTION
3267    WHEN OTHERS THEN
3268       --
3269       -- GEO!!
3270       --
3271       IF (g_debug_on) THEN
3272          debug(l_func_name,('Unable to set SYSADMIN context. ' ||
3273                             'SQLERRM : ' || Sqlerrm ||
3274                             'fnd_message : ' || fnd_message.get));
3275       END IF;
3276       RETURN(FALSE);
3277 END apps_initialize;
3278 
3279 -- --------------------------------------------------
3280 function submit_cp_request(p_application_short_name  in varchar2,
3281                            p_concurrent_program_name in varchar2,
3282                            px_description            in out nocopy varchar2,
3283                            p_argument_count          in number,
3284                            p_argument1               in varchar2,
3285                            p_argument2               in varchar2 default null,
3286                            p_argument3               in varchar2 default null,
3287                            p_argument4               in varchar2 default null,
3288                            p_argument5               in varchar2 default null)
3289   return varchar2
3290 is
3291    l_request_id     number;
3292    l_request_id_vc2 varchar2(1000);
3293    l_description    varchar2(32000);
3294    l_argument2      VARCHAR2(1024);
3295    l_argument3      VARCHAR2(1024);
3296    l_argument4      VARCHAR2(1024);
3297    l_argument5      VARCHAR2(1024);
3298 begin
3299    l_argument2 := g_default_argument;
3300    l_argument3 := g_default_argument;
3301    l_argument4 := g_default_argument;
3302    l_argument5 := g_default_argument;
3303 
3304    --
3305    -- Dump the arguments to description.
3306    --
3307    l_description := 'Flex Loader: ' || p_concurrent_program_name || '(' || p_argument1;
3308 
3309    if (p_argument_count > 1) then
3310       l_argument2 := p_argument2;
3311       l_description := l_description || ',' || l_argument2;
3312 
3313       if (p_argument_count > 2) then
3314          l_argument3 := p_argument3;
3315          l_description := l_description || ',' || l_argument3;
3316 
3317          if (p_argument_count > 3) then
3318             l_argument4 := p_argument4;
3319             l_description := l_description || ',' || l_argument4;
3320 
3321             if (p_argument_count > 4) then
3322                l_argument5 := p_argument5;
3323                l_description := l_description || ',' || l_argument5;
3324             end if;
3325          end if;
3326       end if;
3327    end if;
3328 
3329    l_description := l_description || ')';
3330 
3331    px_description := substrb(l_description, 1, 240);
3332 
3333    --
3334    -- See if the same request with the same arguments was already submitted.
3335    --
3336    begin
3337       SELECT request_id
3338         INTO l_request_id
3339         FROM fnd_concurrent_requests fcr,
3340              fnd_concurrent_programs fcp,
3341              fnd_application fa
3342         WHERE fa.application_short_name = p_application_short_name
3343         AND fcp.application_id = fa.application_id
3344         AND fcp.concurrent_program_name = p_concurrent_program_name
3345         AND fcr.program_application_id = fcp.application_id
3346         AND fcr.concurrent_program_id  = fcp.concurrent_program_id
3347         AND fcr.status_code in ('I',  -- ' Normal'
3348                                 'Q',  -- 'StandBy'
3349                                 'R')  -- '  Normal'
3350         AND fcr.phase_code = 'P'      -- 'Pending'
3351         --
3352         -- p_argument1 is mandatory and cannot be NULL
3353         --
3354         AND nvl(fcr.argument1, g_nvl_value) = p_argument1
3355         --
3356         -- Other arguments are optional and can be NULL
3357         --
3358         AND ((p_argument_count < 2) OR
3359              (nvl(fcr.argument2, g_nvl_value) = nvl(l_argument2, g_nvl_value)))
3360         AND ((p_argument_count < 3) OR
3361              (nvl(fcr.argument3, g_nvl_value) = nvl(l_argument3, g_nvl_value)))
3362         AND ((p_argument_count < 4) OR
3363              (nvl(fcr.argument4, g_nvl_value) = nvl(l_argument4, g_nvl_value)))
3364         AND ((p_argument_count < 5) OR
3365              (nvl(fcr.argument5, g_nvl_value) = nvl(l_argument5, g_nvl_value)))
3366         AND ROWNUM = 1;
3367 
3368       l_request_id_vc2 := To_char(l_request_id) || ' was already submitted';
3369    exception
3370       when others then
3371          l_request_id_vc2 := '0';
3372    end;
3373 
3374    if (l_request_id_vc2 = '0') then
3375 
3376       l_request_id_vc2 := fnd_request.submit_request
3377         (application => p_application_short_name,
3378          program     => p_concurrent_program_name,
3379          description => px_description,
3380          start_time  => NULL,
3381          sub_request => FALSE,
3382          argument1   => p_argument1,
3383          argument2   => l_argument2,
3384          argument3   => l_argument3,
3385          argument4   => l_argument4,
3386          argument5   => l_argument5);
3387 
3388    end if;
3389 
3390    return l_request_id_vc2;
3391 
3392 exception
3393    when others THEN
3394       --
3395       -- GEO report the error!!
3396       --
3397       return '0';
3398 end submit_cp_request;
3399 
3400 -- --------------------------------------------------
3401 PROCEDURE call_cp(p_mode                       IN VARCHAR2,
3402                   p_upload_mode                IN VARCHAR2,
3403                   p_application_short_name     IN VARCHAR2 DEFAULT NULL,
3404                   p_id_flex_code               IN VARCHAR2 DEFAULT NULL,
3405                   p_id_flex_structure_code     IN VARCHAR2 DEFAULT NULL,
3406                   p_descriptive_flexfield_name IN VARCHAR2 DEFAULT NULL,
3407                   p_flex_value_set_name        IN VARCHAR2 DEFAULT NULL)
3408   IS
3409      l_func_name      VARCHAR2(80);
3410      l_vst_set        vst_set_type;
3411      l_dff_flx        dff_flx_type;
3412      l_kff_flx        kff_flx_type;
3413      l_kff_str        kff_str_type;
3414      l_request_id_vc2 VARCHAR2(1000);
3415      l_set_usage_flag VARCHAR2(10);
3416      l_description    VARCHAR2(240);
3417 
3418 BEGIN
3419    l_func_name := g_api_name || 'call_cp(' || p_mode || ')';
3420    --
3421    -- Get the definitions.
3422    --
3423    IF (p_mode = 'VST') THEN
3424       IF (NOT get_vst_set(p_flex_value_set_name,
3425                           l_vst_set)) THEN
3426          IF (g_debug_on) THEN
3427             debug(l_func_name, 'Unable to find VST.');
3428          END IF;
3429          GOTO label_done;
3430       END IF;
3431     ELSIF (p_mode = 'DFF') THEN
3432       IF (NOT get_dff_flx(p_application_short_name,
3433                           p_descriptive_flexfield_name,
3434                           l_dff_flx)) THEN
3435          IF (g_debug_on) THEN
3436             debug(l_func_name, 'Unable to find DFF.');
3437          END IF;
3438          GOTO label_done;
3439       END IF;
3440     ELSIF (p_mode LIKE 'KFF%') THEN
3441       IF (NOT get_kff_flx(p_application_short_name,
3442                           p_id_flex_code,
3443                           l_kff_flx)) THEN
3444          IF (g_debug_on) THEN
3445             debug(l_func_name, 'Unable to find KFF.');
3446          END IF;
3447          GOTO label_done;
3448       END IF;
3449       IF (p_mode = 'KFF-STR') THEN
3450          IF (NOT get_kff_str(l_kff_flx,
3451                              p_id_flex_structure_code,
3452                              l_kff_str)) THEN
3453             IF (g_debug_on) THEN
3454                debug(l_func_name, 'Unable to find KFF-STR.');
3455             END IF;
3456             GOTO label_done;
3457          END IF;
3458       END IF;
3459    END IF;
3460 
3461    --
3462    -- Initialize the apps context.
3463    --
3464    IF (NOT apps_initialize()) THEN
3465       IF (g_debug_on) THEN
3466          debug(l_func_name, ('Cannot set Apps Context, cannot submit ' ||
3467                              'concurrent programs.'));
3468       END IF;
3469       GOTO label_done;
3470    END IF;
3471 
3472    --
3473    -- Submit compile requests with high priority.
3474    --
3475    fnd_profile.put('CONC_PRIORITY', 1);
3476 
3477    IF (p_mode = 'VST') THEN
3478       --
3479       -- Nothing to compile in NLS mode.
3480       --
3481       IF (p_upload_mode = 'NLS') THEN
3482          GOTO label_done;
3483       END IF;
3484 
3485       --
3486       -- Compile the value hierarchies.
3487       --
3488       l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3489                                             p_concurrent_program_name => 'FDFCHY',
3490                                             px_description            => l_description,
3491                                             p_argument_count          => 1,
3492                                             p_argument1               => p_flex_value_set_name);
3493 
3494    ELSIF (p_mode = 'DFF') THEN
3495       delete_compiled_data(p_mode                       => p_mode,
3496                            p_application_id             => l_dff_flx.application_id,
3497                            p_descriptive_flexfield_name => p_descriptive_flexfield_name);
3498 
3499       --
3500       -- Submit compiler request if this DFF is frozen.
3501       --
3502       IF (l_dff_flx.freeze_flex_definition_flag = 'Y') THEN
3503          --
3504          -- Compile non-compiled flexfields
3505          --
3506          l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3507                                                p_concurrent_program_name => 'FDFCMPN',
3508                                                px_description            => l_description,
3509                                                p_argument_count          => 1,
3510                                                p_argument1               => 'N');
3511 
3512          if (l_request_id_vc2 = '0') then
3513             --
3514             -- Probably FDFCMPN has not been defined yet.
3515             -- This section of the code should be removed later.
3516             --
3517             if (g_debug_on) then
3518                debug(l_func_name, 'FDFCMPN is not defined.');
3519             end if;
3520             l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3521                                                   p_concurrent_program_name => 'FDFCMPD',
3522                                                   px_description            => l_description,
3523                                                   p_argument_count          => 3,
3524                                                   p_argument1               => 'D',
3525                                                   p_argument2               => p_application_short_name,
3526                                                   p_argument3               => p_descriptive_flexfield_name);
3527          end if;
3528 
3529        ELSE
3530          l_request_id_vc2 := 'DFF is not frozen.';
3531 
3532       END IF;
3533 
3534     ELSIF (p_mode = 'KFF') THEN
3535       GOTO label_fndffvgn;
3536 
3537     ELSIF (p_mode = 'KFF-STR') THEN
3538       delete_compiled_data(p_mode           => p_mode,
3539                            p_application_id => l_kff_flx.application_id,
3540                            p_id_flex_code   => p_id_flex_code,
3541                            p_id_flex_num    => l_kff_str.id_flex_num);
3542 
3543       --
3544       -- Submit compiler request if this KFF Structure is frozen.
3545       --
3546       IF (l_kff_str.freeze_flex_definition_flag = 'Y') THEN
3547          --
3548          -- Compile non-compiled flexfields
3549          --
3550          l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3551                                                p_concurrent_program_name => 'FDFCMPN',
3552                                                px_description            => l_description,
3553                                                p_argument_count          => 1,
3554                                                p_argument1               => 'N');
3555 
3556          if (l_request_id_vc2 = '0') then
3557             --
3558             -- Probably FDFCMPN has not been defined yet.
3559             -- This section of the code should be removed later.
3560             --
3561             if (g_debug_on) then
3562                debug(l_func_name, 'FDFCMPN is not defined.');
3563             end if;
3564             l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3565                                                   p_concurrent_program_name => 'FDFCMPK',
3566                                                   px_description            => l_description,
3567                                                   p_argument_count          => 4,
3568                                                   p_argument1               => 'K',
3569                                                   p_argument2               => p_application_short_name,
3570                                                   p_argument3               => p_id_flex_code,
3571                                                   p_argument4               => l_kff_str.id_flex_num);
3572          end if;
3573 
3574        ELSE
3575          l_request_id_vc2 := 'KFF Structure is not frozen.';
3576 
3577       END IF;
3578    END IF;
3579 
3580    IF (g_debug_on) THEN
3581       IF (l_request_id_vc2 = '0') THEN
3582          debug(l_func_name, ('Unable to submit ' || l_description || '. ' ||
3583                              'ERROR: ' || fnd_message.get));
3584        ELSE
3585          debug(l_func_name, ('Submitted ' || l_description || '. ' ||
3586                              'Request ID: ' || l_request_id_vc2));
3587       END IF;
3588    END IF;
3589 
3590 <<label_fndffvgn>>
3591    --
3592    -- Generate the view.
3593    --
3594    IF (p_mode = 'VST') THEN
3595       GOTO label_done;
3596    ELSIF (p_mode = 'DFF') THEN
3597       --
3598       -- Nothing to generate in NLS mode.
3599       --
3600       IF (p_upload_mode = 'NLS') THEN
3601          GOTO label_done;
3602       END IF;
3603 
3604       IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
3605          GOTO label_done;
3606       ELSE
3607          --
3608          -- Submit generate view request if this DFF is frozen.
3609          --
3610          IF (l_dff_flx.freeze_flex_definition_flag = 'Y') THEN
3611             --
3612             -- Generate _DFV.
3613             --
3614             l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3615                                                   p_concurrent_program_name => 'FDFVGN',
3616                                                   px_description            => l_description,
3617                                                   p_argument_count          => 3,
3618                                                   p_argument1               => '3',
3619                                                   p_argument2               => l_dff_flx.application_id,
3620                                                   p_argument3               => p_descriptive_flexfield_name);
3621 
3622           ELSE
3623             l_request_id_vc2 := 'DFF is not frozen.';
3624 
3625          END IF;
3626       END IF;
3627    ELSIF (p_mode = 'KFF') THEN
3628       --
3629       -- Nothing to generate in NLS mode.
3630       --
3631       IF (p_upload_mode = 'NLS') THEN
3632          GOTO label_done;
3633       END IF;
3634 
3635       --
3636       -- Generate _KFV.
3637       --
3638       IF ((p_application_short_name = 'INV' AND p_id_flex_code = 'MSTK') OR
3639           (p_application_short_name = 'INV' AND p_id_flex_code = 'MTLL') OR
3640           (p_application_short_name = 'INV' AND p_id_flex_code = 'MICG') OR
3641           (p_application_short_name = 'INV' AND p_id_flex_code = 'MDSP') OR
3642           (p_application_short_name = 'INV' AND p_id_flex_code = 'SERV')) THEN
3643          l_set_usage_flag := 'Y';
3644       ELSE
3645          l_set_usage_flag := 'N';
3646       END IF;
3647 
3648       l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3649                                             p_concurrent_program_name => 'FDFVGN',
3650                                             px_description            => l_description,
3651                                             p_argument_count          => 5,
3652                                             p_argument1               => '2',
3653                                             p_argument2               => l_kff_flx.application_id,
3654                                             p_argument3               => p_id_flex_code,
3655                                             p_argument4               => NULL,
3656                                             p_argument5               => l_set_usage_flag);
3657 
3658     ELSIF (p_mode = 'KFF-STR') THEN
3659       --
3660       -- Nothing to generate in NLS mode.
3661       --
3662       IF (p_upload_mode = 'NLS') THEN
3663          GOTO label_done;
3664       END IF;
3665 
3666       --
3667       -- Generate Structure View.
3668       --
3669       IF (l_kff_str.structure_view_name IS NULL) THEN
3670          GOTO label_done;
3671       ELSE
3672          --
3673          -- Submit generate view request if this KFF Structure is frozen.
3674          --
3675          IF (l_kff_str.freeze_flex_definition_flag = 'Y') THEN
3676 
3677             l_request_id_vc2 := submit_cp_request(p_application_short_name  => 'FND',
3678                                                   p_concurrent_program_name => 'FDFVGN',
3679                                                   px_description            => l_description,
3680                                                   p_argument_count          => 5,
3681                                                   p_argument1               => '1',
3682                                                   p_argument2               => l_kff_str.application_id,
3683                                                   p_argument3               => p_id_flex_code,
3684                                                   p_argument4               => l_kff_str.id_flex_num,
3685                                                   p_argument5               => l_kff_str.structure_view_name);
3686           ELSE
3687             l_request_id_vc2 := 'KFF Structure is not frozen.';
3688 
3689          END IF;
3690       END IF;
3691    END IF;
3692 
3693    IF (g_debug_on) THEN
3694       IF (l_request_id_vc2 = '0') THEN
3695          debug(l_func_name, ('Unable to submit ' || l_description || '. ' ||
3696                              'ERROR: ' || fnd_message.get));
3697        ELSE
3698          debug(l_func_name, ('Submitted ' || l_description || '. ' ||
3699                              'Request ID: ' || l_request_id_vc2));
3700       END IF;
3701    END IF;
3702 
3703 <<label_done>>
3704    fnd_message.clear();
3705 
3706 EXCEPTION
3707    WHEN OTHERS THEN
3708       --
3709       -- GEO!!
3710       --
3711       IF (g_debug_on) THEN
3712          debug(l_func_name, ('Not handling the top level exception. ' ||
3713                              'SQLERRM : ' || Sqlerrm));
3714       END IF;
3715 
3716       BEGIN
3717          fnd_message.clear();
3718       EXCEPTION
3719          WHEN OTHERS THEN
3720             NULL;
3721       END;
3722 END call_cp;
3723 
3724 -- --------------------------------------------------
3725 PROCEDURE upload_value_qualifier_value
3726   (p_caller_entity                IN VARCHAR2,
3727    p_upload_phase                 IN VARCHAR2,
3728    p_upload_mode                  IN VARCHAR2,
3729    p_custom_mode                  IN VARCHAR2,
3730    p_flex_value_set_name          IN VARCHAR2,
3731    p_application_short_name       IN VARCHAR2,
3732    p_id_flex_code                 IN VARCHAR2,
3733    p_segment_attribute_type       IN VARCHAR2,
3734    p_value_attribute_type         IN VARCHAR2,
3735    p_parent_flex_value_low        IN VARCHAR2,
3736    p_flex_value                   IN VARCHAR2,
3737    p_owner                        IN VARCHAR2,
3738    p_last_update_date             IN VARCHAR2,
3739    p_compiled_value_attribute_val IN VARCHAR2)
3740   IS
3741      l_func_name    VARCHAR2(80);
3742      l_app          app_type;
3743      l_kff_flx      kff_flx_type;
3744      l_kff_flq      kff_flq_type;
3745      l_kff_sgq      kff_sgq_type;
3746 
3747      l_vst_set      vst_set_type;
3748      l_vst_val      vst_val_type;
3749 
3750      l_vtv_arr_size NUMBER;
3751      l_vtv_arr      vtv_arr_type;
3752 
3753      i              NUMBER;
3754      l_cva          VARCHAR2(32000);
3755      l_pos          NUMBER;
3756      l_assigned     BOOLEAN;
3757      l_file_who     who_type;
3758 BEGIN
3759    l_func_name := g_api_name || 'upload_value_qualifier_value()';
3760    init('VALUE_QUALIFIER_VALUE', p_upload_phase);
3761    IF (g_debug_on) THEN
3762       debug(l_func_name,
3763             'PHASE:'  || p_upload_phase ||
3764             ',UMODE:' || p_upload_mode ||
3765             ',CMODE:' || p_custom_mode ||
3766             ',CALL:'  || p_caller_entity ||
3767             ',VSET:'  || p_flex_value_set_name ||
3768             ',APPS:'  || p_application_short_name ||
3769             ',KFF:'   || p_id_flex_code ||
3770             ',FLEXQ:' || p_segment_attribute_type ||
3771             ',SEGQ:'  || p_value_attribute_type ||
3772             ',PRNT:'  || p_parent_flex_value_low ||
3773             ',VAL:'   || p_flex_value ||
3774             ',CVAL:'  || p_compiled_value_attribute_val);
3775    END IF;
3776 
3777    IF (p_upload_mode = 'NLS') THEN
3778       --
3779       -- No translation here.
3780       --
3781       IF (g_debug_on) THEN
3782          debug(l_func_name, 'No translation here.');
3783       END IF;
3784       GOTO label_done;
3785    END IF;
3786 
3787    --
3788    -- Make sure Value Set and Value exist.
3789    --
3790    get_vst_set(p_flex_value_set_name,
3791                l_vst_set);
3792    get_vst_val(l_vst_set,
3793                p_parent_flex_value_low,
3794                p_flex_value,
3795                l_vst_val);
3796 
3797    --
3798    -- Check WHO Information.
3799    --
3800    IF (NOT is_upload_allowed
3801        (p_custom_mode                  => p_custom_mode,
3802         p_file_owner                   => p_owner,
3803         p_file_last_update_date        => p_last_update_date,
3804         p_db_last_updated_by           => l_vst_val.last_updated_by,
3805         p_db_last_update_date          => l_vst_val.last_update_date,
3806         x_file_who                     => l_file_who)) THEN
3807       IF (g_debug_on) THEN
3808          debug(l_func_name, 'Upload is not allowed because of customization.');
3809       END IF;
3810       GOTO label_done;
3811    END IF;
3812 
3813    --
3814    -- Get the application_id
3815    --
3816    IF (p_caller_entity = 'KFF_QUALIFIER_VALUE') THEN
3817       get_app(p_application_short_name, l_app);
3818     ELSE
3819       IF (NOT get_app(p_application_short_name, l_app)) THEN
3820          GOTO label_done;
3821       END IF;
3822    END IF;
3823 
3824    IF (p_caller_entity = 'KFF_QUALIFIER_VALUE') THEN
3825       --
3826       -- Make sure KFF, Flexfield Qualifier and Segment Qualifier exist.
3827       --
3828       get_kff_flx(p_application_short_name,
3829                   p_id_flex_code,
3830                   l_kff_flx);
3831       get_kff_flq(l_kff_flx,
3832                   p_segment_attribute_type,
3833                   l_kff_flq);
3834       get_kff_sgq(l_kff_flq,
3835                   p_value_attribute_type,
3836                   l_kff_sgq);
3837    END IF;
3838 
3839    --
3840    -- Usual upload.
3841    --
3842 
3843    --
3844    -- Get the qualifier details for this value set.
3845    --
3846    get_vtv_arr(l_vst_set,
3847                l_vtv_arr_size,
3848                l_vtv_arr);
3849 
3850    IF (p_caller_entity = 'KFF_QUALIFIER_VALUE') THEN
3851       IF (l_vtv_arr_size = 0) THEN
3852          raise_error(l_func_name, ERROR_KFF_NO_QUALIFIERS,
3853                      'There are no qualifiers defined for Value Set : ' ||
3854                      l_vst_set.flex_value_set_name);
3855       END IF;
3856    END IF;
3857 
3858    --
3859    -- De-normalize the concatenated qualifier values.
3860    --
3861    l_cva := l_vst_val.compiled_value_attributes || g_newline;
3862    i := 1;
3863    WHILE ((l_cva IS NOT NULL) AND (i <= l_vtv_arr_size)) LOOP
3864       l_pos := Instr(l_cva, g_newline, 1, 1);
3865       l_vtv_arr(i).qualifier_value := Substr(l_cva, 1, l_pos - 1);
3866       l_cva := Substr(l_cva, l_pos + 1);
3867       i := i + 1;
3868    END LOOP;
3869 
3870    WHILE (i <= l_vtv_arr_size) LOOP
3871       l_vtv_arr(i).qualifier_value := l_vtv_arr(i).default_value;
3872       i := i + 1;
3873    END LOOP;
3874 
3875    --
3876    -- Concatenate the values.
3877    --
3878    i := 0;
3879    l_cva := NULL;
3880    l_assigned := FALSE;
3881    FOR i IN 1..l_vtv_arr_size LOOP
3882       IF ((l_vtv_arr(i).id_flex_application_id = l_app.application_id) AND
3883           (l_vtv_arr(i).id_flex_code           = p_id_flex_code) AND
3884           (l_vtv_arr(i).segment_attribute_type = p_segment_attribute_type) AND
3885           (l_vtv_arr(i).value_attribute_type   = p_value_attribute_type)) THEN
3886          IF (p_compiled_value_attribute_val IS NOT NULL) THEN
3887             l_vtv_arr(i).qualifier_value := p_compiled_value_attribute_val;
3888          END IF;
3889          l_assigned := TRUE;
3890       END IF;
3891       l_cva := l_cva || g_newline || l_vtv_arr(i).qualifier_value;
3892    END LOOP;
3893 
3894    IF (p_caller_entity = 'KFF_QUALIFIER_VALUE') THEN
3895       IF (NOT l_assigned) THEN
3896          raise_error(l_func_name, ERROR_KFF_NOT_QUALIFIED,
3897                      p_flex_value_set_name ||
3898                      ' value set is not qualified by the qualifier: '   ||
3899                      ' APP Id: '    || l_kff_sgq.application_id         ||
3900                      ' KFF Code: '  || l_kff_sgq.id_flex_code           ||
3901                      ' FLEX Qual: ' || l_kff_sgq.segment_attribute_type ||
3902                      ' SEG Qual: '  || l_kff_sgq.value_attribute_type);
3903       END IF;
3904    END IF;
3905 
3906    --
3907    -- Remove the first newline.
3908    --
3909    l_cva := Substr(l_cva, Length(g_newline) + 1);
3910 
3911    IF (g_debug_on) THEN
3912       debug(l_func_name, 'Updating VALUE_QUALIFIER_VALUE.(no-TL)');
3913    END IF;
3914    UPDATE fnd_flex_values SET
3915      last_updated_by           = l_file_who.last_updated_by,
3916      last_update_date          = l_file_who.last_update_date,
3917      last_update_login         = l_file_who.last_update_login,
3918      compiled_value_attributes = l_cva
3919      WHERE flex_value_set_id = l_vst_set.flex_value_set_id
3920      AND flex_value_id = l_vst_val.flex_value_id;
3921 
3922    <<label_done>>
3923    done('VALUE_QUALIFIER_VALUE', p_upload_phase);
3924 EXCEPTION
3925    WHEN OTHERS THEN
3926       raise_when_others(l_func_name,
3927                         p_caller_entity,
3928                         p_flex_value_set_name,
3929                         p_application_short_name,
3930                         p_id_flex_code,
3931                         p_segment_attribute_type,
3932                         p_value_attribute_type,
3933                         p_parent_flex_value_low,
3934                         p_flex_value,
3935                         p_compiled_value_attribute_val);
3936 END upload_value_qualifier_value;
3937 
3938 -- ==================================================
3939 --  VALUE_SET
3940 -- ==================================================
3941 PROCEDURE up_value_set
3942   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
3943    p_upload_mode                  IN VARCHAR2,
3944    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
3945    p_flex_value_set_name          IN VARCHAR2,
3946    p_owner                        IN VARCHAR2,
3947    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
3948    p_validation_type              IN VARCHAR2,
3949    p_protected_flag               IN VARCHAR2,
3950    p_security_enabled_flag        IN VARCHAR2,
3951    p_longlist_flag                IN VARCHAR2,
3952    p_format_type                  IN VARCHAR2,
3953    p_maximum_size                 IN VARCHAR2,
3954    p_number_precision             IN VARCHAR2,
3955    p_alphanumeric_allowed_flag    IN VARCHAR2,
3956    p_uppercase_only_flag          IN VARCHAR2,
3957    p_numeric_mode_enabled_flag    IN VARCHAR2,
3958    p_minimum_value                IN VARCHAR2,
3959    p_maximum_value                IN VARCHAR2,
3960    p_parent_flex_value_set_name   IN VARCHAR2,
3961    p_dependant_default_value      IN VARCHAR2,
3962    p_dependant_default_meaning    IN VARCHAR2,
3963    p_description                  IN VARCHAR2)
3964   IS
3965      l_func_name         VARCHAR2(80);
3966      l_parent_vst_set    vst_set_type;
3967      l_parent_vst_set_id NUMBER := NULL;
3968      l_vst_set           vst_set_type;
3969      l_file_who          who_type;
3970      l_count             NUMBER;
3971 BEGIN
3972    l_func_name := g_api_name || 'up_value_set()';
3973    init('VALUE_SET', p_upload_phase);
3974    IF (g_debug_on) THEN
3975       debug(l_func_name,
3976             'PHASE:'  || p_upload_phase ||
3977             ',UMODE:' || p_upload_mode  ||
3978             ',CMODE:' || p_custom_mode  ||
3979             ',VSET:'  || p_flex_value_set_name ||
3980             ',VTYPE:' || p_validation_type ||
3981             ',FTYPE:' || p_format_type);
3982    END IF;
3983 
3984    IF (p_upload_phase = 'BEGIN') THEN
3985       start_transaction(ENTITY_VALUE_SET);
3986       lock_entity('VALUE_SET',
3987                   p_flex_value_set_name);
3988 
3989       g_numof_changes := 0;
3990       --
3991       -- Gather WHO Information.
3992       --
3993       IF (get_vst_set(p_flex_value_set_name => p_flex_value_set_name,
3994                       x_vst_set             => l_vst_set)) THEN
3995          NULL;
3996       END IF;
3997 
3998       --
3999       -- Check WHO Information.
4000       --
4001       IF (NOT is_upload_allowed
4002           (p_custom_mode                  => p_custom_mode,
4003            p_file_owner                   => p_owner,
4004            p_file_last_update_date        => p_last_update_date,
4005            p_db_last_updated_by           => l_vst_set.last_updated_by,
4006            p_db_last_update_date          => l_vst_set.last_update_date,
4007            x_file_who                     => l_file_who)) THEN
4008          IF (g_debug_on) THEN
4009             debug(l_func_name, 'Upload is not allowed because of customization.');
4010          END IF;
4011          GOTO label_done;
4012       END IF;
4013 
4014       IF (p_upload_mode = 'NLS') THEN
4015          --
4016          -- non-MLS translation.
4017          --
4018          IF (g_debug_on) THEN
4019             debug(l_func_name, 'Translating VALUE_SET.(non-MLS)');
4020          END IF;
4021          UPDATE fnd_flex_value_sets SET
4022            last_updated_by   = l_file_who.last_updated_by,
4023            last_update_date  = l_file_who.last_update_date,
4024            last_update_login = l_file_who.last_update_login,
4025            description       = Nvl(p_description, description)
4026            WHERE flex_value_set_name = p_flex_value_set_name
4027            AND userenv('LANG') = (SELECT language_code
4028                                   FROM fnd_languages
4029                                   WHERE installed_flag = 'B');
4030          IF (SQL%notfound) THEN
4031             IF (g_debug_on) THEN
4032                debug(l_func_name, 'No entity to translate.');
4033             END IF;
4034          END IF;
4035          GOTO label_done;
4036        ELSE
4037          --
4038          -- Usual upload.
4039          --
4040          IF (p_validation_type IN ('D','Y')) THEN
4041             --
4042             -- Make sure Parent Value Set exists.
4043             --
4044             get_vst_set(p_parent_flex_value_set_name, l_parent_vst_set);
4045             l_parent_vst_set_id := l_parent_vst_set.flex_value_set_id;
4046          END IF;
4047 
4048          IF (g_debug_on) THEN
4049             debug(l_func_name, 'Updating VALUE_SET.(non-MLS)');
4050          END IF;
4051          UPDATE fnd_flex_value_sets SET
4052            last_updated_by           = l_file_who.last_updated_by,
4053            last_update_date          = l_file_who.last_update_date,
4054            last_update_login         = l_file_who.last_update_login,
4055            description               = p_description,
4056            validation_type           = p_validation_type,
4057            protected_flag            = p_protected_flag,
4058            security_enabled_flag     = p_security_enabled_flag,
4059            longlist_flag             = p_longlist_flag,
4060            format_type               = p_format_type,
4061            maximum_size              = p_maximum_size,
4062            number_precision          = p_number_precision,
4063            alphanumeric_allowed_flag = p_alphanumeric_allowed_flag,
4064            uppercase_only_flag       = p_uppercase_only_flag,
4065            numeric_mode_enabled_flag = p_numeric_mode_enabled_flag,
4066            minimum_value             = p_minimum_value,
4067            maximum_value             = p_maximum_value,
4068            parent_flex_value_set_id  = l_parent_vst_set_id,
4069            dependant_default_value   = p_dependant_default_value,
4070            dependant_default_meaning = p_dependant_default_meaning
4071            WHERE flex_value_set_name = p_flex_value_set_name;
4072 
4073          IF (SQL%notfound) THEN
4074             IF (g_debug_on) THEN
4075                debug(l_func_name, 'Inserting VALUE_SET.(non-MLS)');
4076             END IF;
4077             INSERT INTO fnd_flex_value_sets
4078               (
4079                flex_value_set_id,
4080                flex_value_set_name,
4081 
4082                created_by,
4083                creation_date,
4084                last_updated_by,
4085                last_update_date,
4086                last_update_login,
4087 
4088                description,
4089                validation_type,
4090                protected_flag,
4091                security_enabled_flag,
4092                longlist_flag,
4093                format_type,
4094                maximum_size,
4095                number_precision,
4096                alphanumeric_allowed_flag,
4097                uppercase_only_flag,
4098                numeric_mode_enabled_flag,
4099                minimum_value,
4100                maximum_value,
4101                parent_flex_value_set_id,
4102                dependant_default_value,
4103                dependant_default_meaning
4104                )
4105               VALUES
4106               (
4107                fnd_flex_value_sets_s.NEXTVAL,
4108                p_flex_value_set_name,
4109 
4110                l_file_who.created_by,
4111                l_file_who.creation_date,
4112                l_file_who.last_updated_by,
4113                l_file_who.last_update_date,
4114                l_file_who.last_update_login,
4115 
4116                p_description,
4117                p_validation_type,
4118                p_protected_flag,
4119                p_security_enabled_flag,
4120                p_longlist_flag,
4121                p_format_type,
4122                p_maximum_size,
4123                p_number_precision,
4124                p_alphanumeric_allowed_flag,
4125                p_uppercase_only_flag,
4126                p_numeric_mode_enabled_flag,
4127                p_minimum_value,
4128                p_maximum_value,
4129                l_parent_vst_set_id,
4130                p_dependant_default_value,
4131                p_dependant_default_meaning
4132                );
4133          END IF;
4134       END IF;
4135     ELSIF (p_upload_phase = 'END') THEN
4136       IF (p_upload_mode = 'NLS') THEN
4137          --
4138          -- non-MLS translation.
4139          --
4140          NULL;
4141        ELSE
4142          --
4143          -- Usual upload.
4144          --
4145          NULL;
4146       END IF;
4147       --
4148       -- Compile value hierarchies.
4149       --
4150       IF (g_numof_changes > 0) THEN
4151          SELECT COUNT(*)
4152            INTO l_count
4153            FROM fnd_flex_value_norm_hierarchy
4154            WHERE flex_value_set_id =
4155            (SELECT flex_value_set_id
4156             FROM fnd_flex_value_sets
4157             WHERE flex_value_set_name = p_flex_value_set_name);
4158          IF (l_count > 0) THEN
4159             call_cp(p_mode                => 'VST',
4160                     p_upload_mode         => p_upload_mode,
4161                     p_flex_value_set_name => p_flex_value_set_name);
4162          END IF;
4163       END IF;
4164       finish_transaction(ENTITY_VALUE_SET);
4165     ELSE
4166       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
4167    END IF;
4168 
4169    <<label_done>>
4170    done('VALUE_SET', p_upload_phase);
4171 EXCEPTION
4172    WHEN OTHERS THEN
4173       --
4174       -- First report the existing exception
4175       --
4176       report_public_api_exception(l_func_name,
4177                                   p_upload_phase,
4178                                   p_flex_value_set_name);
4179 
4180       BEGIN
4181          release_entity();
4182          IF (p_upload_phase = 'END') THEN
4183             finish_transaction(ENTITY_VALUE_SET);
4184          END IF;
4185       EXCEPTION
4186          WHEN OTHERS THEN
4187             report_public_api_exception(l_func_name,
4188                                         p_upload_phase,
4189                                         p_flex_value_set_name);
4190       END;
4191 END up_value_set;
4192 
4193 -- --------------------------------------------------
4194 PROCEDURE up_vset_depends_on
4195   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
4196    p_upload_mode                  IN VARCHAR2,
4197    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
4198    p_flex_value_set_name          IN VARCHAR2,
4199    p_ind_flex_value_set_name      IN VARCHAR2,
4200    p_owner                        IN VARCHAR2,
4201    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
4202    p_ind_validation_type          IN VARCHAR2,
4203    p_dep_validation_type          IN VARCHAR2)
4204   IS
4205      l_func_name    VARCHAR2(80);
4206      l_dep_vst_set  vst_set_type;
4207      l_ind_vst_set  vst_set_type;
4208 BEGIN
4209    l_func_name := g_api_name || 'up_vset_depends_on()';
4210    init('VSET_DEPENDS_ON', p_upload_phase);
4211    IF (g_debug_on) THEN
4212       debug(l_func_name,
4213             'PHASE:'  || p_upload_phase ||
4214             ',UMODE:'  || p_upload_mode ||
4215             ',DEP_VSET:' || p_flex_value_set_name ||
4216             ',IND_VSET:' || p_ind_flex_value_set_name ||
4217             ',VTYPES:' || p_dep_validation_type || '->' || p_ind_validation_type);
4218    END IF;
4219 
4220    IF (p_upload_mode = 'NLS') THEN
4221       --
4222       -- No translation here.
4223       --
4224       IF (g_debug_on) THEN
4225          debug(l_func_name, 'No translation here.');
4226       END IF;
4227       GOTO label_done;
4228    END IF;
4229 
4230    --
4231    -- Make sure Value Sets exist.
4232    --
4233    get_vst_set(p_ind_flex_value_set_name, l_ind_vst_set);
4234    get_vst_set(p_flex_value_set_name, l_dep_vst_set);
4235 
4236    IF ((l_dep_vst_set.validation_type = 'D' AND
4237         l_ind_vst_set.validation_type = 'I') OR
4238        (l_dep_vst_set.validation_type = 'Y' AND
4239         l_ind_vst_set.validation_type = 'X')) THEN
4240       NULL;
4241     ELSE
4242       raise_error(l_func_name, ERROR_VST_TYPE_MISMATCH,
4243                   'Independent Value Set Validation Type Mismatch',
4244                   'Please make sure Dependent Value Set depends on ' ||
4245                   'an Independent Value Set');
4246    END IF;
4247 
4248    <<label_done>>
4249    done('VSET_DEPENDS_ON', p_upload_phase);
4250 EXCEPTION
4251    WHEN OTHERS THEN
4252       report_public_api_exception(l_func_name,
4253                                   p_upload_phase,
4254                                   p_flex_value_set_name,
4255                                   p_ind_flex_value_set_name);
4256 END up_vset_depends_on;
4257 
4258 -- --------------------------------------------------
4259 PROCEDURE up_vset_table
4260   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
4261    p_upload_mode                  IN VARCHAR2,
4262    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
4263    p_flex_value_set_name          IN VARCHAR2,
4264    p_owner                        IN VARCHAR2,
4265    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
4266    p_table_application_short_name IN VARCHAR2,
4267    p_application_table_name       IN VARCHAR2,
4268    p_summary_allowed_flag         IN VARCHAR2,
4269    p_value_column_name            IN VARCHAR2,
4270    p_value_column_type            IN VARCHAR2,
4271    p_value_column_size            IN VARCHAR2,
4272    p_id_column_name               IN VARCHAR2,
4273    p_id_column_type               IN VARCHAR2,
4274    p_id_column_size               IN VARCHAR2,
4275    p_meaning_column_name          IN VARCHAR2,
4276    p_meaning_column_type          IN VARCHAR2,
4277    p_meaning_column_size          IN VARCHAR2,
4278    p_enabled_column_name          IN VARCHAR2,
4279    p_compiled_attribute_column_na IN VARCHAR2,
4280    p_hierarchy_level_column_name  IN VARCHAR2,
4281    p_start_date_column_name       IN VARCHAR2,
4282    p_end_date_column_name         IN VARCHAR2,
4283    p_summary_column_name          IN VARCHAR2,
4284    p_additional_where_clause      IN VARCHAR2,
4285    p_additional_quickpick_columns IN VARCHAR2)
4286   IS
4287      l_func_name  VARCHAR2(80);
4288      l_vst_set    vst_set_type;
4289      l_vst_tbl    vst_tbl_type;
4290      l_table_app  app_type;
4291      l_file_who   who_type;
4292      l_result     VARCHAR2(100);
4293      l_message    VARCHAR2(32000);
4294 BEGIN
4295    l_func_name := g_api_name || 'up_vset_table()';
4296    init('VSET_TABLE', p_upload_phase);
4297    IF (g_debug_on) THEN
4298       debug(l_func_name,
4299             'PHASE:'  || p_upload_phase ||
4300             ',UMODE:' || p_upload_mode ||
4301             ',CMODE:' || p_custom_mode ||
4302             ',VSET:'  || p_flex_value_set_name ||
4303             ',TNAME:' || p_application_table_name);
4304    END IF;
4305 
4306    IF (p_upload_mode = 'NLS') THEN
4307       --
4308       -- No translation here.
4309       --
4310       IF (g_debug_on) THEN
4311          debug(l_func_name, 'No translation here.');
4312       END IF;
4313       GOTO label_done;
4314    END IF;
4315 
4316    --
4317    -- Make sure Value Set exists.
4318    --
4319    get_vst_set(p_flex_value_set_name, l_vst_set);
4320 
4321    IF (l_vst_set.validation_type <> 'F') THEN
4322       raise_error(l_func_name, ERROR_VST_NOT_TABLE_VST, 'Not a table validated value set');
4323    END IF;
4324 
4325    --
4326    -- Gather WHO Information.
4327    --
4328    IF (get_vst_tbl(p_vst_set => l_vst_set,
4329                    x_vst_tbl => l_vst_tbl)) THEN
4330       NULL;
4331    END IF;
4332 
4333    --
4334    -- Check WHO Information.
4335    --
4336    IF (NOT is_upload_allowed
4337        (p_custom_mode                  => p_custom_mode,
4338         p_file_owner                   => p_owner,
4339         p_file_last_update_date        => p_last_update_date,
4340         p_db_last_updated_by           => l_vst_tbl.last_updated_by,
4341         p_db_last_update_date          => l_vst_tbl.last_update_date,
4342         x_file_who                     => l_file_who)) THEN
4343       IF (g_debug_on) THEN
4344          debug(l_func_name, 'Upload is not allowed because of customization.');
4345       END IF;
4346       GOTO label_done;
4347    END IF;
4348 
4349    --
4350    -- Usual upload.
4351    --
4352    IF (p_table_application_short_name IS NOT NULL) THEN
4353       --
4354       -- Make sure Application exists.
4355       --
4356       get_app(p_table_application_short_name, l_table_app);
4357    END IF;
4358 
4359    --
4360    -- Validate the table value set
4361    --
4362 --   fnd_flex_val_api.validate_table_vset
4363 --     (p_flex_value_set_name           => p_flex_value_set_name,
4364 --      p_id_column_name                => p_id_column_name,
4365 --      p_value_column_name             => p_value_column_name,
4366 --      p_meaning_column_name           => p_meaning_column_name,
4367 --      p_additional_quickpick_columns  => p_additional_quickpick_columns,
4368 --      p_application_table_name        => p_application_table_name,
4369 --      p_additional_where_clause       => p_additional_where_clause,
4370 --      x_result                        => l_result,
4371 --      x_message                       => l_message);
4372 --
4373 --   IF (l_result = 'Failure') THEN
4374 --      raise_error(l_func_name, l_message);
4375 --   END IF;
4376 
4377    IF (g_debug_on) THEN
4378       debug(l_func_name, 'Updating VSET_TABLE.(no-TL)');
4379    END IF;
4380    UPDATE fnd_flex_validation_tables SET
4381      last_updated_by                = l_file_who.last_updated_by,
4382      last_update_date               = l_file_who.last_update_date,
4383      last_update_login              = l_file_who.last_update_login,
4384      table_application_id           = l_table_app.application_id,
4385      application_table_name         = p_application_table_name,
4386      summary_allowed_flag           = p_summary_allowed_flag,
4387      value_column_name              = p_value_column_name,
4388      value_column_type              = p_value_column_type,
4389      value_column_size              = p_value_column_size,
4390      id_column_name                 = p_id_column_name,
4391      id_column_type                 = p_id_column_type,
4392      id_column_size                 = p_id_column_size,
4393      meaning_column_name            = p_meaning_column_name,
4394      meaning_column_type            = p_meaning_column_type,
4395      meaning_column_size            = p_meaning_column_size,
4396      enabled_column_name            = p_enabled_column_name,
4397      compiled_attribute_column_name = p_compiled_attribute_column_na,
4398      hierarchy_level_column_name    = p_hierarchy_level_column_name,
4399      start_date_column_name         = p_start_date_column_name,
4400      end_date_column_name           = p_end_date_column_name,
4401      summary_column_name            = p_summary_column_name,
4402      additional_where_clause        = p_additional_where_clause,
4403      additional_quickpick_columns   = p_additional_quickpick_columns
4404      WHERE flex_value_set_id = l_vst_set.flex_value_set_id;
4405 
4406    IF (SQL%notfound) THEN
4407       IF (g_debug_on) THEN
4408          debug(l_func_name, 'Inserting VSET_TABLE.(no-TL)');
4409       END IF;
4410       INSERT INTO fnd_flex_validation_tables
4411         (
4412          flex_value_set_id,
4413 
4414          created_by,
4415          creation_date,
4416          last_updated_by,
4417          last_update_date,
4418          last_update_login,
4419 
4420          table_application_id,
4421          application_table_name,
4422          summary_allowed_flag,
4423          value_column_name,
4424          value_column_type,
4425          value_column_size,
4426          id_column_name,
4427          id_column_type,
4428          id_column_size,
4429          meaning_column_name,
4430          meaning_column_type,
4431          meaning_column_size,
4432          enabled_column_name,
4433          compiled_attribute_column_name,
4434          hierarchy_level_column_name,
4435          start_date_column_name,
4436          end_date_column_name,
4437          summary_column_name,
4438          additional_where_clause,
4439          additional_quickpick_columns
4440          )
4441         VALUES
4442         (
4443          l_vst_set.flex_value_set_id,
4444 
4445          l_file_who.created_by,
4446          l_file_who.creation_date,
4447          l_file_who.last_updated_by,
4448          l_file_who.last_update_date,
4449          l_file_who.last_update_login,
4450 
4451          l_table_app.application_id,
4452          p_application_table_name,
4453          p_summary_allowed_flag,
4454          p_value_column_name,
4455          p_value_column_type,
4456          p_value_column_size,
4457          p_id_column_name,
4458          p_id_column_type,
4459          p_id_column_size,
4460          p_meaning_column_name,
4461          p_meaning_column_type,
4462          p_meaning_column_size,
4463          p_enabled_column_name,
4464          p_compiled_attribute_column_na,
4465          p_hierarchy_level_column_name,
4466          p_start_date_column_name,
4467          p_end_date_column_name,
4468          p_summary_column_name,
4469          p_additional_where_clause,
4470          p_additional_quickpick_columns
4471          );
4472    END IF;
4473 
4474    <<label_done>>
4475    done('VSET_TABLE', p_upload_phase);
4476 EXCEPTION
4477    WHEN OTHERS THEN
4478       report_public_api_exception(l_func_name,
4479                                   p_upload_phase,
4480                                   p_flex_value_set_name);
4481 END up_vset_table;
4482 
4483 -- --------------------------------------------------
4484 PROCEDURE up_vset_event
4485   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
4486    p_upload_mode                  IN VARCHAR2,
4487    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
4488    p_flex_value_set_name          IN VARCHAR2,
4489    p_event_code                   IN VARCHAR2,
4490    p_owner                        IN VARCHAR2,
4491    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
4492    p_user_exit                    IN VARCHAR2)
4493   IS
4494      l_func_name VARCHAR2(80);
4495      l_vst_set   vst_set_type;
4496      l_vst_evt   vst_evt_type;
4497      l_file_who  who_type;
4498 BEGIN
4499    l_func_name := g_api_name || 'up_vset_event()';
4500    init('VSET_EVENT', p_upload_phase);
4501    IF (g_debug_on) THEN
4502       debug(l_func_name,
4503             'PHASE:'  || p_upload_phase ||
4504             ',UMODE:' || p_upload_mode ||
4505             ',CMODE:' || p_custom_mode ||
4506             ',VSET:'  || p_flex_value_set_name ||
4507             ',ECODE:' || p_event_code);
4508    END IF;
4509 
4510    IF (p_upload_mode = 'NLS') THEN
4511       --
4512       -- No translation here.
4513       --
4514       IF (g_debug_on) THEN
4515          debug(l_func_name, 'No translation here.');
4516       END IF;
4517       GOTO label_done;
4518    END IF;
4519 
4520    --
4521    -- Make sure Value Set exists.
4522    --
4523    get_vst_set(p_flex_value_set_name, l_vst_set);
4524 
4525    IF (NOT (l_vst_set.validation_type IN ('U', 'P'))) THEN
4526       raise_error(l_func_name, ERROR_VST_NOT_UEXIT_VST, 'Not a user_exit validated value set');
4527    END IF;
4528 
4529    --
4530    -- Gather WHO Information.
4531    --
4532    IF (get_vst_evt(p_vst_set    => l_vst_set,
4533                    p_event_code => p_event_code,
4534                    x_vst_evt    => l_vst_evt)) THEN
4535       NULL;
4536    END IF;
4537 
4538    --
4539    -- Check WHO Information.
4540    --
4541    IF (NOT is_upload_allowed
4542        (p_custom_mode                  => p_custom_mode,
4543         p_file_owner                   => p_owner,
4544         p_file_last_update_date        => p_last_update_date,
4545         p_db_last_updated_by           => l_vst_evt.last_updated_by,
4546         p_db_last_update_date          => l_vst_evt.last_update_date,
4547         x_file_who                     => l_file_who)) THEN
4548       IF (g_debug_on) THEN
4549          debug(l_func_name, 'Upload is not allowed because of customization.');
4550       END IF;
4551       GOTO label_done;
4552    END IF;
4553 
4554    --
4555    -- Usual upload.
4556    --
4557    IF (g_debug_on) THEN
4558       debug(l_func_name, 'Updating VSET_EVENT.(no-TL)');
4559    END IF;
4560    UPDATE fnd_flex_validation_events SET
4561      last_updated_by   = l_file_who.last_updated_by,
4562      last_update_date  = l_file_who.last_update_date,
4563      last_update_login = l_file_who.last_update_login,
4564      user_exit         = p_user_exit
4565      WHERE flex_value_set_id = l_vst_set.flex_value_set_id
4566      AND event_code = p_event_code;
4567 
4568    IF (SQL%notfound) THEN
4569       IF (g_debug_on) THEN
4570          debug(l_func_name, 'Inserting VSET_EVENT.(no-TL)');
4571       END IF;
4572       INSERT INTO fnd_flex_validation_events
4573         (
4574          flex_value_set_id,
4575          event_code,
4576 
4577          created_by,
4578          creation_date,
4579          last_updated_by,
4580          last_update_date,
4581          last_update_login,
4582 
4583          user_exit
4584          )
4585         VALUES
4586         (
4587          l_vst_set.flex_value_set_id,
4588          p_event_code,
4589 
4590          l_file_who.created_by,
4591          l_file_who.creation_date,
4592          l_file_who.last_updated_by,
4593          l_file_who.last_update_date,
4594          l_file_who.last_update_login,
4595 
4596          p_user_exit
4597          );
4598    END IF;
4599 
4600    <<label_done>>
4601    done('VSET_EVENT', p_upload_phase);
4602 EXCEPTION
4603    WHEN OTHERS THEN
4604       report_public_api_exception(l_func_name,
4605                                   p_upload_phase,
4606                                   p_flex_value_set_name,
4607                                   p_event_code);
4608 END up_vset_event;
4609 
4610 -- --------------------------------------------------
4611 PROCEDURE up_vset_security_rule
4612   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
4613    p_upload_mode                  IN VARCHAR2,
4614    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
4615    p_flex_value_set_name          IN VARCHAR2,
4616    p_flex_value_rule_name         IN VARCHAR2,
4617    p_parent_flex_value_low        IN VARCHAR2,
4618    p_owner                        IN VARCHAR2,
4619    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
4620    p_parent_flex_value_high       IN VARCHAR2,
4621    p_error_message                IN VARCHAR2,
4622    p_description                  IN VARCHAR2)
4623   IS
4624      l_func_name  VARCHAR2(80);
4625      l_vst_set    vst_set_type;
4626      l_vst_scr    vst_scr_type;
4627      l_vst_scr_tl vst_scr_tl_type;
4628      l_file_who   who_type;
4629 BEGIN
4630    l_func_name := g_api_name || 'up_vset_security_rule()';
4631    init('VSET_SECURITY_RULE', p_upload_phase);
4632    IF (g_debug_on) THEN
4633       debug(l_func_name,
4634             'PHASE:'  || p_upload_phase ||
4635             ',UMODE:' || p_upload_mode  ||
4636             ',CMODE:' || p_custom_mode  ||
4637             ',VSET:'  || p_flex_value_set_name ||
4638             ',SECR:'  || p_flex_value_rule_name ||
4639             ',PRNT:'  || p_parent_flex_value_low);
4640    END IF;
4641 
4642    IF (p_upload_phase = 'BEGIN') THEN
4643       --
4644       -- Gather WHO Information.
4645       --
4646       IF (get_vst_set(p_flex_value_set_name,
4647                       l_vst_set)) THEN
4648          IF (get_vst_scr(l_vst_set,
4649                          p_flex_value_rule_name,
4650                          p_parent_flex_value_low,
4651                          l_vst_scr)) THEN
4652             NULL;
4653          END IF;
4654       END IF;
4655 
4656       IF (p_upload_mode = 'NLS') THEN
4657          --
4658          -- MLS translation.
4659          --
4660 
4661          --
4662          -- Gather WHO Information.
4663          --
4664          IF (get_vst_scr_tl(l_vst_scr,
4665                             userenv('LANG'),
4666                             l_vst_scr_tl)) THEN
4667             NULL;
4668          END IF;
4669 
4670          --
4671          -- Check WHO Information.
4672          --
4673          IF (NOT is_upload_allowed
4674              (p_custom_mode                  => p_custom_mode,
4675               p_file_owner                   => p_owner,
4676               p_file_last_update_date        => p_last_update_date,
4677               p_db_last_updated_by           => l_vst_scr_tl.last_updated_by,
4678               p_db_last_update_date          => l_vst_scr_tl.last_update_date,
4679               x_file_who                     => l_file_who)) THEN
4680             IF (g_debug_on) THEN
4681                debug(l_func_name, 'Upload is not allowed because of customization.');
4682             END IF;
4683             GOTO label_done;
4684          END IF;
4685 
4686          IF (g_debug_on) THEN
4687             debug(l_func_name, 'Translating VSET_SECURITY_RULE.(MLS)');
4688          END IF;
4689          fnd_flex_value_rules_pkg.translate_row
4690            (x_flex_value_set_name          => p_flex_value_set_name,
4691             x_parent_flex_value_low        => p_parent_flex_value_low,
4692             x_flex_value_rule_name         => p_flex_value_rule_name,
4693             x_who                          => l_file_who,
4694             x_error_message                => p_error_message,
4695             x_description                  => p_description);
4696          GOTO label_done;
4697        ELSE
4698          --
4699          -- Usual upload.
4700          --
4701 
4702          --
4703          -- Check WHO Information.
4704          --
4705          IF (NOT is_upload_allowed
4706              (p_custom_mode                  => p_custom_mode,
4707               p_file_owner                   => p_owner,
4708               p_file_last_update_date        => p_last_update_date,
4709               p_db_last_updated_by           => l_vst_scr.last_updated_by,
4710               p_db_last_update_date          => l_vst_scr.last_update_date,
4711               x_file_who                     => l_file_who)) THEN
4712             IF (g_debug_on) THEN
4713                debug(l_func_name, 'Upload is not allowed because of customization.');
4714             END IF;
4715             GOTO label_done;
4716          END IF;
4717 
4718          --
4719          -- Make sure Value Set exists.
4720          --
4721          get_vst_set(p_flex_value_set_name, l_vst_set);
4722 
4723          IF (g_debug_on) THEN
4724             debug(l_func_name, 'Uploading VSET_SECURITY_RULE.(MLS)');
4725          END IF;
4726          fnd_flex_value_rules_pkg.load_row
4727            (x_flex_value_set_name          => p_flex_value_set_name,
4728             x_parent_flex_value_low        => p_parent_flex_value_low,
4729             x_flex_value_rule_name         => p_flex_value_rule_name,
4730             x_who                          => l_file_who,
4731             x_parent_flex_value_high       => p_parent_flex_value_high,
4732             x_error_message                => p_error_message,
4733             x_description                  => p_description);
4734       END IF;
4735     ELSIF (p_upload_phase = 'END') THEN
4736       IF (p_upload_mode = 'NLS') THEN
4737          --
4738          -- MLS translation.
4739          --
4740          NULL;
4741        ELSE
4742          --
4743          -- Usual upload.
4744          --
4745          NULL;
4746       END IF;
4747     ELSE
4748       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
4749    END IF;
4750 
4751    <<label_done>>
4752    done('VSET_SECURITY_RULE', p_upload_phase);
4753 EXCEPTION
4754    WHEN OTHERS THEN
4755       report_public_api_exception(l_func_name,
4756                                   p_upload_phase,
4757                                   p_flex_value_set_name,
4758                                   p_flex_value_rule_name,
4759                                   p_parent_flex_value_low);
4760 END up_vset_security_rule;
4761 
4762 -- --------------------------------------------------
4763 PROCEDURE up_vset_security_line
4764   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
4765    p_upload_mode                  IN VARCHAR2,
4766    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
4767    p_flex_value_set_name          IN VARCHAR2,
4768    p_flex_value_rule_name         IN VARCHAR2,
4769    p_parent_flex_value_low        IN VARCHAR2,
4770    p_include_exclude_indicator    IN VARCHAR2,
4771    p_flex_value_low               IN VARCHAR2,
4772    p_flex_value_high              IN VARCHAR2,
4773    p_owner                        IN VARCHAR2,
4774    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
4775    p_parent_flex_value_high       IN VARCHAR2)
4776   IS
4777      l_func_name VARCHAR2(80);
4778      l_vst_set   vst_set_type;
4779      l_vst_scr   vst_scr_type;
4780      l_vst_scl   vst_scl_type;
4781      l_file_who  who_type;
4782 BEGIN
4783    l_func_name := g_api_name || 'up_vset_security_line()';
4784    init('VSET_SECURITY_LINE', p_upload_phase);
4785    IF (g_debug_on) THEN
4786       debug(l_func_name,
4787             'PHASE:'  || p_upload_phase ||
4788             ',UMODE:' || p_upload_mode ||
4789             ',CMODE:' || p_custom_mode ||
4790             ',VSET:'  || p_flex_value_set_name ||
4791             ',SECR:'  || p_flex_value_rule_name ||
4792             ',PRNT:'  || p_parent_flex_value_low ||
4793             ',IE:'    || p_include_exclude_indicator ||
4794             ',LOW:'   || p_flex_value_low ||
4795             ',HIGH:'  || p_flex_value_high);
4796    END IF;
4797 
4798    IF (p_upload_mode = 'NLS') THEN
4799       --
4800       -- No translation here.
4801       --
4802       IF (g_debug_on) THEN
4803          debug(l_func_name, 'No translation here.');
4804       END IF;
4805       GOTO label_done;
4806    END IF;
4807 
4808    --
4809    -- Make sure Value Set and Security Rule exist.
4810    --
4811    get_vst_set(p_flex_value_set_name,
4812                l_vst_set);
4813 
4814    get_vst_scr(l_vst_set,
4815                p_flex_value_rule_name,
4816                p_parent_flex_value_low,
4817                l_vst_scr);
4818 
4819    --
4820    -- Gather WHO Information.
4821    --
4822    IF (get_vst_scl(l_vst_set,
4823                    l_vst_scr,
4824                    p_include_exclude_indicator,
4825                    p_flex_value_low,
4826                    p_flex_value_high,
4827                    l_vst_scl  )) THEN
4828       NULL;
4829    END IF;
4830 
4831    --
4832    -- Check WHO Information.
4833    --
4834    IF (NOT is_upload_allowed
4835        (p_custom_mode                  => p_custom_mode,
4836         p_file_owner                   => p_owner,
4837         p_file_last_update_date        => p_last_update_date,
4838         p_db_last_updated_by           => l_vst_scl.last_updated_by,
4839         p_db_last_update_date          => l_vst_scl.last_update_date,
4840         x_file_who                     => l_file_who)) THEN
4841       IF (g_debug_on) THEN
4842          debug(l_func_name, 'Upload is not allowed because of customization.');
4843       END IF;
4844       GOTO label_done;
4845    END IF;
4846 
4847    --
4848    -- Usual upload.
4849    --
4850    IF (g_debug_on) THEN
4851       debug(l_func_name, 'Updating VSET_SECURITY_LINE.(no-TL)');
4852    END IF;
4853    IF (l_vst_set.validation_type = 'D') THEN
4854       UPDATE fnd_flex_value_rule_lines SET
4855         last_updated_by        = l_file_who.last_updated_by,
4856         last_update_date       = l_file_who.last_update_date,
4857         last_update_login      = l_file_who.last_update_login,
4858         parent_flex_value_high = p_parent_flex_value_high
4859         WHERE flex_value_set_id = l_vst_set.flex_value_set_id
4860         AND flex_value_rule_id = l_vst_scr.flex_value_rule_id
4861         AND parent_flex_value_low = p_parent_flex_value_low
4862         AND include_exclude_indicator = p_include_exclude_indicator
4863         AND flex_value_low = p_flex_value_low
4864         AND flex_value_high = p_flex_value_high;
4865     ELSE
4866       UPDATE fnd_flex_value_rule_lines SET
4867         last_updated_by        = l_file_who.last_updated_by,
4868         last_update_date       = l_file_who.last_update_date,
4869         last_update_login      = l_file_who.last_update_login,
4870         parent_flex_value_low  = p_parent_flex_value_low,
4871         parent_flex_value_high = p_parent_flex_value_high
4872         WHERE flex_value_set_id = l_vst_set.flex_value_set_id
4873         AND flex_value_rule_id = l_vst_scr.flex_value_rule_id
4874         AND include_exclude_indicator = p_include_exclude_indicator
4875         AND flex_value_low = p_flex_value_low
4876         AND flex_value_high = p_flex_value_high;
4877    END IF;
4878 
4879    IF (SQL%notfound) THEN
4880       IF (g_debug_on) THEN
4881          debug(l_func_name, 'Inserting VSET_SECURITY_LINE.(no-TL)');
4882       END IF;
4883       INSERT INTO fnd_flex_value_rule_lines
4884         (
4885          flex_value_set_id,
4886          flex_value_rule_id,
4887          parent_flex_value_low,
4888          include_exclude_indicator,
4889          flex_value_low,
4890          flex_value_high,
4891 
4892          created_by,
4893          creation_date,
4894          last_updated_by,
4895          last_update_date,
4896          last_update_login,
4897 
4898          parent_flex_value_high
4899          )
4900         VALUES
4901         (
4902          l_vst_set.flex_value_set_id,
4903          l_vst_scr.flex_value_rule_id,
4904          p_parent_flex_value_low,
4905          p_include_exclude_indicator,
4906          p_flex_value_low,
4907          p_flex_value_high,
4908 
4909          l_file_who.created_by,
4910          l_file_who.creation_date,
4911          l_file_who.last_updated_by,
4912          l_file_who.last_update_date,
4913          l_file_who.last_update_login,
4914 
4915          p_parent_flex_value_high
4916          );
4917    END IF;
4918 
4919    <<label_done>>
4920    done('VSET_SECURITY_LINE', p_upload_phase);
4921 EXCEPTION
4922    WHEN OTHERS THEN
4923       report_public_api_exception(l_func_name,
4924                                   p_upload_phase,
4925                                   p_flex_value_set_name,
4926                                   p_flex_value_rule_name,
4927                                   p_parent_flex_value_low,
4928                                   p_include_exclude_indicator,
4929                                   p_flex_value_low,
4930                                   p_flex_value_high);
4931 END up_vset_security_line;
4932 
4933 -- --------------------------------------------------
4934 PROCEDURE up_vset_security_usage
4935   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
4936    p_upload_mode                  IN VARCHAR2,
4937    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
4938    p_flex_value_set_name          IN VARCHAR2,
4939    p_flex_value_rule_name         IN VARCHAR2,
4940    p_parent_flex_value_low        IN VARCHAR2,
4941    p_application_short_name       IN VARCHAR2,
4942    p_responsibility_key           IN VARCHAR2,
4943    p_owner                        IN VARCHAR2,
4944    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
4945    p_parent_flex_value_high       IN VARCHAR2)
4946   IS
4947      l_func_name VARCHAR2(80);
4948      l_vst_set   vst_set_type;
4949      l_vst_scr   vst_scr_type;
4950      l_vst_scu   vst_scu_type;
4951      l_resp      resp_type;
4952      l_file_who  who_type;
4953 BEGIN
4954    l_func_name := g_api_name || 'up_vset_security_usage()';
4955    init('VSET_SECURITY_USAGE', p_upload_phase);
4956    IF (g_debug_on) THEN
4957       debug(l_func_name,
4958             'PHASE:'  || p_upload_phase ||
4959             ',UMODE:' || p_upload_mode ||
4960             ',CMODE:' || p_custom_mode ||
4961             ',VSET:'  || p_flex_value_set_name ||
4962             ',SECR:'  || p_flex_value_rule_name ||
4963             ',PRNT:'  || p_parent_flex_value_low ||
4964             ',APPS:'  || p_application_short_name ||
4965             ',RESP:'  || p_responsibility_key);
4966    END IF;
4967 
4968    IF (p_upload_mode = 'NLS') THEN
4969       --
4970       -- No translation here.
4971       --
4972       IF (g_debug_on) THEN
4973          debug(l_func_name, 'No translation here.');
4974       END IF;
4975       GOTO label_done;
4976    END IF;
4977 
4978    --
4979    -- Make sure Value Set, Security Rule and Responsibility exist.
4980    --
4981    get_vst_set(p_flex_value_set_name,
4982                l_vst_set);
4983 
4984    get_vst_scr(l_vst_set,
4985                p_flex_value_rule_name,
4986                p_parent_flex_value_low,
4987                l_vst_scr);
4988 
4989    get_resp(p_application_short_name,
4990             p_responsibility_key,
4991             l_resp);
4992 
4993    --
4994    -- Gather WHO Information.
4995    --
4996    IF (get_vst_scu(l_vst_set,
4997                    l_vst_scr,
4998                    l_resp,
4999                    l_vst_scu)) THEN
5000       NULL;
5001    END IF;
5002 
5003    --
5004    -- Check WHO Information.
5005    --
5006    IF (NOT is_upload_allowed
5007        (p_custom_mode                  => p_custom_mode,
5008         p_file_owner                   => p_owner,
5009         p_file_last_update_date        => p_last_update_date,
5010         p_db_last_updated_by           => l_vst_scu.last_updated_by,
5011         p_db_last_update_date          => l_vst_scu.last_update_date,
5012         x_file_who                     => l_file_who)) THEN
5013       IF (g_debug_on) THEN
5014          debug(l_func_name, 'Upload is not allowed because of customization.');
5015       END IF;
5016       GOTO label_done;
5017    END IF;
5018 
5019    --
5020    -- Usual upload.
5021    --
5022    IF (g_debug_on) THEN
5023       debug(l_func_name, 'Updating VSET_SECURITY_USAGE.(no-TL)');
5024    END IF;
5025    IF (l_vst_set.validation_type = 'D') THEN
5026       UPDATE fnd_flex_value_rule_usages SET
5027         last_updated_by        = l_file_who.last_updated_by,
5028         last_update_date       = l_file_who.last_update_date,
5029         last_update_login      = l_file_who.last_update_login,
5030         parent_flex_value_high = p_parent_flex_value_high
5031         WHERE application_id = l_resp.application_id
5032         AND responsibility_id = l_resp.responsibility_id
5033         AND flex_value_set_id = l_vst_set.flex_value_set_id
5034         AND flex_value_rule_id = l_vst_scr.flex_value_rule_id
5035         AND parent_flex_value_low = p_parent_flex_value_low;
5036     ELSE
5037       UPDATE fnd_flex_value_rule_usages SET
5038         last_updated_by        = l_file_who.last_updated_by,
5039         last_update_date       = l_file_who.last_update_date,
5040         last_update_login      = l_file_who.last_update_login,
5041         parent_flex_value_low  = p_parent_flex_value_low,
5042         parent_flex_value_high = p_parent_flex_value_high
5043         WHERE application_id = l_resp.application_id
5044         AND responsibility_id = l_resp.responsibility_id
5045         AND flex_value_set_id = l_vst_set.flex_value_set_id
5046         AND flex_value_rule_id = l_vst_scr.flex_value_rule_id;
5047    END IF;
5048 
5049    IF (SQL%notfound) THEN
5050       IF (g_debug_on) THEN
5051          debug(l_func_name, 'Inserting VSET_SECURITY_USAGE.(no-TL)');
5052       END IF;
5053       INSERT INTO fnd_flex_value_rule_usages
5054         (
5055          application_id,
5056          responsibility_id,
5057          flex_value_set_id,
5058          flex_value_rule_id,
5059          parent_flex_value_low,
5060 
5061          created_by,
5062          creation_date,
5063          last_updated_by,
5064          last_update_date,
5065          last_update_login,
5066 
5067          parent_flex_value_high
5068          )
5069         VALUES
5070         (
5071          l_resp.application_id,
5072          l_resp.responsibility_id,
5073          l_vst_set.flex_value_set_id,
5074          l_vst_scr.flex_value_rule_id,
5075          p_parent_flex_value_low,
5076 
5077          l_file_who.created_by,
5078          l_file_who.creation_date,
5079          l_file_who.last_updated_by,
5080          l_file_who.last_update_date,
5081          l_file_who.last_update_login,
5082 
5083          p_parent_flex_value_high
5084          );
5085    END IF;
5086 
5087    <<label_done>>
5088    done('VSET_SECURITY_USAGE', p_upload_phase);
5089 EXCEPTION
5090    WHEN OTHERS THEN
5091       report_public_api_exception(l_func_name,
5092                                   p_upload_phase,
5093                                   p_flex_value_set_name,
5094                                   p_flex_value_rule_name,
5095                                   p_parent_flex_value_low,
5096                                   p_application_short_name,
5097                                   p_responsibility_key);
5098 END up_vset_security_usage;
5099 
5100 -- --------------------------------------------------
5101 PROCEDURE up_vset_rollup_group
5102   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
5103    p_upload_mode                  IN VARCHAR2,
5104    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
5105    p_flex_value_set_name          IN VARCHAR2,
5106    p_hierarchy_code               IN VARCHAR2,
5107    p_owner                        IN VARCHAR2,
5108    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
5109    p_hierarchy_name               IN VARCHAR2,
5110    p_description                  IN VARCHAR2)
5111   IS
5112      l_func_name  VARCHAR2(80);
5113      l_vst_set    vst_set_type;
5114      l_vst_rgr    vst_rgr_type;
5115      l_vst_rgr_tl vst_rgr_tl_type;
5116      l_file_who   who_type;
5117 BEGIN
5118    l_func_name := g_api_name || 'up_vset_rollup_group()';
5119    init('VSET_ROLLUP_GROUP', p_upload_phase);
5120    IF (g_debug_on) THEN
5121       debug(l_func_name,
5122             'PHASE:'  || p_upload_phase ||
5123             ',UMODE:' || p_upload_mode ||
5124             ',CMODE:' || p_custom_mode ||
5125             ',VSET:'  || p_flex_value_set_name ||
5126             ',HIER:'  || p_hierarchy_code);
5127    END IF;
5128 
5129    --
5130    -- Gather WHO Information.
5131    --
5132    IF (get_vst_set(p_flex_value_set_name,
5133                    l_vst_set)) THEN
5134       IF (get_vst_rgr(l_vst_set,
5135                       p_hierarchy_code,
5136                       l_vst_rgr)) THEN
5137          NULL;
5138       END IF;
5139    END IF;
5140 
5141    IF (p_upload_mode = 'NLS') THEN
5142       --
5143       -- MLS translation.
5144       --
5145 
5146       --
5147       -- Gather WHO Information.
5148       --
5149       IF (get_vst_rgr_tl(l_vst_rgr,
5150                          userenv('LANG'),
5151                          l_vst_rgr_tl)) THEN
5152          NULL;
5153       END IF;
5154 
5155       --
5156       -- Check WHO Information.
5157       --
5158       IF (NOT is_upload_allowed
5159           (p_custom_mode                  => p_custom_mode,
5160            p_file_owner                   => p_owner,
5161            p_file_last_update_date        => p_last_update_date,
5162            p_db_last_updated_by           => l_vst_rgr_tl.last_updated_by,
5163            p_db_last_update_date          => l_vst_rgr_tl.last_update_date,
5164            x_file_who                     => l_file_who)) THEN
5165          IF (g_debug_on) THEN
5166             debug(l_func_name, 'Upload is not allowed because of customization.');
5167          END IF;
5168          GOTO label_done;
5169       END IF;
5170 
5171       IF (g_debug_on) THEN
5172          debug(l_func_name, 'Translating VSET_ROLLUP_GROUP.(MLS)');
5173       END IF;
5174       fnd_flex_hierarchies_pkg.translate_row
5175         (x_flex_value_set_name          => p_flex_value_set_name,
5176          x_hierarchy_code               => p_hierarchy_code,
5177          x_who                          => l_file_who,
5178          x_hierarchy_name               => p_hierarchy_name,
5179          x_description                  => p_description);
5180     ELSE
5181       --
5182       -- Usual upload.
5183       --
5184 
5185       --
5186       -- Check WHO Information.
5187       --
5188       IF (NOT is_upload_allowed
5189           (p_custom_mode                  => p_custom_mode,
5190            p_file_owner                   => p_owner,
5191            p_file_last_update_date        => p_last_update_date,
5192            p_db_last_updated_by           => l_vst_rgr.last_updated_by,
5193            p_db_last_update_date          => l_vst_rgr.last_update_date,
5194            x_file_who                     => l_file_who)) THEN
5195          IF (g_debug_on) THEN
5196             debug(l_func_name, 'Upload is not allowed because of customization.');
5197          END IF;
5198          GOTO label_done;
5199       END IF;
5200 
5201       --
5202       -- Make sure Value Set exists.
5203       --
5204       get_vst_set(p_flex_value_set_name, l_vst_set);
5205 
5206       IF (g_debug_on) THEN
5207          debug(l_func_name, 'Uploading VSET_ROLLUP_GROUP.(MLS)');
5208       END IF;
5209       fnd_flex_hierarchies_pkg.load_row
5210         (x_flex_value_set_name          => p_flex_value_set_name,
5211          x_hierarchy_code               => p_hierarchy_code,
5212          x_who                          => l_file_who,
5213          x_hierarchy_name               => p_hierarchy_name,
5214          x_description                  => p_description);
5215    END IF;
5216 
5217    <<label_done>>
5218    done('VSET_ROLLUP_GROUP', p_upload_phase);
5219 EXCEPTION
5220    WHEN OTHERS THEN
5221       report_public_api_exception(l_func_name,
5222                                   p_upload_phase,
5223                                   p_flex_value_set_name,
5224                                   p_hierarchy_code);
5225 END up_vset_rollup_group;
5226 
5227 -- --------------------------------------------------
5228 PROCEDURE up_vset_qualifier
5229   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
5230    p_upload_mode                  IN VARCHAR2,
5231    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
5232    p_flex_value_set_name          IN VARCHAR2,
5233    p_id_flex_application_short_na IN VARCHAR2,
5234    p_id_flex_code                 IN VARCHAR2,
5235    p_segment_attribute_type       IN VARCHAR2,
5236    p_value_attribute_type         IN VARCHAR2,
5237    p_owner                        IN VARCHAR2,
5238    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
5239    p_assignment_order             IN VARCHAR2,
5240    p_assignment_date              IN VARCHAR2)
5241   IS
5242      l_func_name VARCHAR2(80);
5243      l_vst_set   vst_set_type;
5244      l_file_who  who_type;
5245 BEGIN
5246    l_func_name := g_api_name || 'up_vset_qualifier()';
5247    init('VSET_QUALIFIER', p_upload_phase);
5248    IF (g_debug_on) THEN
5249       debug(l_func_name,
5250             'PHASE:'  || p_upload_phase ||
5251             ',UMODE:' || p_upload_mode ||
5252             ',CMODE:' || p_custom_mode ||
5253             ',VSET:'  || p_flex_value_set_name ||
5254             ',APPS:'  || p_id_flex_application_short_na ||
5255             ',KFF:'   || p_id_flex_code ||
5256             ',FLEXQ:' || p_segment_attribute_type ||
5257             ',SEGQ:'  || p_value_attribute_type ||
5258             ',ORDER:' || p_assignment_order);
5259    END IF;
5260 
5261    IF (p_upload_mode = 'NLS') THEN
5262       --
5263       -- No translation here.
5264       --
5265       IF (g_debug_on) THEN
5266          debug(l_func_name, 'No translation here.');
5267       END IF;
5268       GOTO label_done;
5269    END IF;
5270 
5271    --
5272    -- Usual upload.
5273    --
5274 
5275    --
5276    -- Make sure Value Set exists.
5277    --
5278    get_vst_set(p_flex_value_set_name, l_vst_set);
5279 
5280    --
5281    -- Check WHO Information.
5282    --
5283    IF (NOT is_upload_allowed
5284        (p_custom_mode                  => p_custom_mode,
5285         p_file_owner                   => p_owner,
5286         p_file_last_update_date        => p_last_update_date,
5287         p_db_last_updated_by           => l_vst_set.last_updated_by,
5288         p_db_last_update_date          => l_vst_set.last_update_date,
5289         x_file_who                     => l_file_who)) THEN
5290       IF (g_debug_on) THEN
5291          debug(l_func_name, 'Upload is not allowed because of customization.');
5292          debug(l_func_name, 'For data integrity upload must be done.');
5293       END IF;
5294       --
5295       -- Clear the customization message
5296       --
5297       fnd_message.clear();
5298    END IF;
5299 
5300    --
5301    -- Populate cross product tables.
5302    --
5303    populate_kff_flexq_assign();
5304    populate_kff_segq_assign();
5305 
5306    <<label_done>>
5307    done('VSET_QUALIFIER', p_upload_phase);
5308 EXCEPTION
5309    WHEN OTHERS THEN
5310       report_public_api_exception(l_func_name,
5311                                   p_upload_phase,
5312                                   p_flex_value_set_name,
5313                                   p_id_flex_application_short_na,
5314                                   p_id_flex_code,
5315                                   p_segment_attribute_type,
5316                                   p_value_attribute_type);
5317 END up_vset_qualifier;
5318 
5319 -- --------------------------------------------------
5320 PROCEDURE up_vset_value
5321   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
5322    p_upload_mode                  IN VARCHAR2,
5323    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
5324    p_flex_value_set_name          IN VARCHAR2,
5325    p_parent_flex_value_low        IN VARCHAR2,
5326    p_flex_value                   IN VARCHAR2,
5327    p_owner                        IN VARCHAR2,
5328    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
5329    p_enabled_flag                 IN VARCHAR2,
5330    p_summary_flag                 IN VARCHAR2,
5331    p_start_date_active            IN VARCHAR2,
5332    p_end_date_active              IN VARCHAR2,
5333    p_parent_flex_value_high       IN VARCHAR2,
5334    p_rollup_hierarchy_code        IN VARCHAR2,
5335    p_hierarchy_level              IN VARCHAR2,
5336    p_compiled_value_attributes    IN VARCHAR2,
5337    p_value_category               IN VARCHAR2,
5338    p_attribute1                   IN VARCHAR2,
5339    p_attribute2                   IN VARCHAR2,
5340    p_attribute3                   IN VARCHAR2,
5341    p_attribute4                   IN VARCHAR2,
5342    p_attribute5                   IN VARCHAR2,
5343    p_attribute6                   IN VARCHAR2,
5344    p_attribute7                   IN VARCHAR2,
5345    p_attribute8                   IN VARCHAR2,
5346    p_attribute9                   IN VARCHAR2,
5347    p_attribute10                  IN VARCHAR2,
5348    p_attribute11                  IN VARCHAR2,
5349    p_attribute12                  IN VARCHAR2,
5350    p_attribute13                  IN VARCHAR2,
5351    p_attribute14                  IN VARCHAR2,
5352    p_attribute15                  IN VARCHAR2,
5353    p_attribute16                  IN VARCHAR2,
5354    p_attribute17                  IN VARCHAR2,
5355    p_attribute18                  IN VARCHAR2,
5356    p_attribute19                  IN VARCHAR2,
5357    p_attribute20                  IN VARCHAR2,
5358    p_attribute21                  IN VARCHAR2,
5359    p_attribute22                  IN VARCHAR2,
5360    p_attribute23                  IN VARCHAR2,
5361    p_attribute24                  IN VARCHAR2,
5362    p_attribute25                  IN VARCHAR2,
5363    p_attribute26                  IN VARCHAR2,
5364    p_attribute27                  IN VARCHAR2,
5365    p_attribute28                  IN VARCHAR2,
5366    p_attribute29                  IN VARCHAR2,
5367    p_attribute30                  IN VARCHAR2,
5368    p_attribute31                  IN VARCHAR2,
5369    p_attribute32                  IN VARCHAR2,
5370    p_attribute33                  IN VARCHAR2,
5371    p_attribute34                  IN VARCHAR2,
5372    p_attribute35                  IN VARCHAR2,
5373    p_attribute36                  IN VARCHAR2,
5374    p_attribute37                  IN VARCHAR2,
5375    p_attribute38                  IN VARCHAR2,
5376    p_attribute39                  IN VARCHAR2,
5377    p_attribute40                  IN VARCHAR2,
5378    p_attribute41                  IN VARCHAR2,
5379    p_attribute42                  IN VARCHAR2,
5380    p_attribute43                  IN VARCHAR2,
5381    p_attribute44                  IN VARCHAR2,
5382    p_attribute45                  IN VARCHAR2,
5383    p_attribute46                  IN VARCHAR2,
5384    p_attribute47                  IN VARCHAR2,
5385    p_attribute48                  IN VARCHAR2,
5386    p_attribute49                  IN VARCHAR2,
5387    p_attribute50                  IN VARCHAR2,
5388    p_attribute_sort_order         IN VARCHAR2 DEFAULT NULL,
5389    p_flex_value_meaning           IN VARCHAR2,
5390    p_description                  IN VARCHAR2)
5391   IS
5392      l_func_name  VARCHAR2(80);
5393      l_vst_set    vst_set_type;
5394      l_vst_rgr    vst_rgr_type;
5395      l_vst_val    vst_val_type;
5396      l_vst_val_tl vst_val_tl_type;
5397      l_file_who   who_type;
5398      l_flex_value_meaning fnd_flex_values_tl.flex_value_meaning%TYPE;
5399 BEGIN
5400    l_func_name := g_api_name || 'up_vset_value()';
5401    init('VSET_VALUE', p_upload_phase);
5402    IF (g_debug_on) THEN
5403       debug(l_func_name,
5404             'PHASE:'  || p_upload_phase ||
5405             ',UMODE:' || p_upload_mode  ||
5406             ',CMODE:' || p_custom_mode  ||
5407             ',VSET:'  || p_flex_value_set_name ||
5408             ',PRNT:'  || p_parent_flex_value_low ||
5409             ',VAL:'   || p_flex_value);
5410    END IF;
5411 
5412    IF (p_upload_phase = 'BEGIN') THEN
5413       --
5414       -- Make sure Value Set exists.
5415       --
5416       get_vst_set(p_flex_value_set_name, l_vst_set);
5417 
5418       --
5419       -- Gather WHO Information.
5420       --
5421       IF (get_vst_val(l_vst_set,
5422                       p_parent_flex_value_low,
5423                       p_flex_value,
5424                       l_vst_val)) THEN
5425          NULL;
5426       END IF;
5427 
5428       IF (l_vst_set.validation_type IN ('D', 'Y') AND
5429           p_parent_flex_value_low IS NULL) THEN
5430          raise_error(l_func_name, ERROR_VST_INVALID_PARENT,
5431                      'NULL is not a valid parent value');
5432       END IF;
5433 
5434       l_flex_value_meaning := Nvl(p_flex_value_meaning, p_flex_value);
5435 
5436       IF (p_upload_mode = 'NLS') THEN
5437          --
5438          -- MLS translation.
5439          --
5440 
5441          --
5442          -- Gather WHO Information.
5443          --
5444          IF (get_vst_val_tl(l_vst_val,
5445                             userenv('LANG'),
5446                             l_vst_val_tl)) THEN
5447             NULL;
5448          END IF;
5449 
5450          --
5451          -- Check WHO Information.
5452          --
5453          IF (NOT is_upload_allowed
5454              (p_custom_mode                  => p_custom_mode,
5455               p_file_owner                   => p_owner,
5456               p_file_last_update_date        => p_last_update_date,
5457               p_db_last_updated_by           => l_vst_val_tl.last_updated_by,
5458               p_db_last_update_date          => l_vst_val_tl.last_update_date,
5459               x_file_who                     => l_file_who)) THEN
5460             IF (g_debug_on) THEN
5461                debug(l_func_name, 'Upload is not allowed because of customization.');
5462             END IF;
5463             GOTO label_done;
5464          END IF;
5465 
5466          IF (g_debug_on) THEN
5467             debug(l_func_name, 'Translating VSET_VALUE.(MLS)');
5468          END IF;
5469          fnd_flex_values_pkg.translate_row
5470            (x_flex_value_set_name          => p_flex_value_set_name,
5471             x_parent_flex_value_low        => p_parent_flex_value_low,
5472             x_flex_value                   => p_flex_value,
5473             x_who                          => l_file_who,
5474             x_flex_value_meaning           => l_flex_value_meaning,
5475             x_description                  => p_description);
5476          GOTO label_done;
5477        ELSE
5478          --
5479          -- Usual upload.
5480          --
5481 
5482          --
5483          -- Check WHO Information.
5484          --
5485          IF (NOT is_upload_allowed
5486              (p_custom_mode                  => p_custom_mode,
5487               p_file_owner                   => p_owner,
5488               p_file_last_update_date        => p_last_update_date,
5489               p_db_last_updated_by           => l_vst_val.last_updated_by,
5490               p_db_last_update_date          => l_vst_val.last_update_date,
5491               x_file_who                     => l_file_who)) THEN
5492             IF (g_debug_on) THEN
5493                debug(l_func_name, 'Upload is not allowed because of customization.');
5494             END IF;
5495             GOTO label_done;
5496          END IF;
5497 
5498          l_vst_rgr.hierarchy_id := NULL;
5499          IF (p_rollup_hierarchy_code IS NOT NULL) THEN
5500             --
5501             -- Make sure Rollup Group exists.
5502             --
5503             get_vst_rgr(l_vst_set, p_rollup_hierarchy_code, l_vst_rgr);
5504          END IF;
5505 
5506          IF (g_debug_on) THEN
5507             debug(l_func_name, 'Uploading VSET_VALUE.(MLS)');
5508          END IF;
5509          fnd_flex_values_pkg.load_row
5510            (x_flex_value_set_name          => p_flex_value_set_name,
5511             x_parent_flex_value_low        => p_parent_flex_value_low,
5512             x_flex_value                   => p_flex_value,
5513             x_who                          => l_file_who,
5514             x_enabled_flag                 => p_enabled_flag,
5515             x_summary_flag                 => p_summary_flag,
5516             x_start_date_active            => To_date(p_start_date_active,
5517                                                       g_date_mask),
5518             x_end_date_active              => To_date(p_end_date_active,
5519                                                       g_date_mask),
5520             x_parent_flex_value_high       => p_parent_flex_value_high,
5521             x_structured_hierarchy_level   => l_vst_rgr.hierarchy_id,
5522             x_hierarchy_level              => p_hierarchy_level,
5523             x_compiled_value_attributes    => p_compiled_value_attributes,
5524             x_value_category               => p_value_category,
5525             x_attribute1                   => p_attribute1,
5526             x_attribute2                   => p_attribute2,
5527             x_attribute3                   => p_attribute3,
5528            x_attribute4                   => p_attribute4,
5529            x_attribute5                   => p_attribute5,
5530            x_attribute6                   => p_attribute6,
5531            x_attribute7                   => p_attribute7,
5532            x_attribute8                   => p_attribute8,
5533            x_attribute9                   => p_attribute9,
5534            x_attribute10                  => p_attribute10,
5535            x_attribute11                  => p_attribute11,
5536            x_attribute12                  => p_attribute12,
5537            x_attribute13                  => p_attribute13,
5538            x_attribute14                  => p_attribute14,
5539            x_attribute15                  => p_attribute15,
5540            x_attribute16                  => p_attribute16,
5541            x_attribute17                  => p_attribute17,
5542            x_attribute18                  => p_attribute18,
5543            x_attribute19                  => p_attribute19,
5544            x_attribute20                  => p_attribute20,
5545            x_attribute21                  => p_attribute21,
5546            x_attribute22                  => p_attribute22,
5547            x_attribute23                  => p_attribute23,
5548            x_attribute24                  => p_attribute24,
5549            x_attribute25                  => p_attribute25,
5550            x_attribute26                  => p_attribute26,
5551            x_attribute27                  => p_attribute27,
5552            x_attribute28                  => p_attribute28,
5553            x_attribute29                  => p_attribute29,
5554            x_attribute30                  => p_attribute30,
5555            x_attribute31                  => p_attribute31,
5556            x_attribute32                  => p_attribute32,
5557            x_attribute33                  => p_attribute33,
5558            x_attribute34                  => p_attribute34,
5559            x_attribute35                  => p_attribute35,
5560            x_attribute36                  => p_attribute36,
5561            x_attribute37                  => p_attribute37,
5562            x_attribute38                  => p_attribute38,
5563            x_attribute39                  => p_attribute39,
5564            x_attribute40                  => p_attribute40,
5565            x_attribute41                  => p_attribute41,
5566            x_attribute42                  => p_attribute42,
5567            x_attribute43                  => p_attribute43,
5568            x_attribute44                  => p_attribute44,
5569            x_attribute45                  => p_attribute45,
5570            x_attribute46                  => p_attribute46,
5571            x_attribute47                  => p_attribute47,
5572            x_attribute48                  => p_attribute48,
5573            x_attribute49                  => p_attribute49,
5574            x_attribute50                  => p_attribute50,
5575            x_attribute_sort_order         => p_attribute_sort_order,
5576            x_flex_value_meaning           => l_flex_value_meaning,
5577            x_description                  => p_description);
5578       END IF;
5579     ELSIF (p_upload_phase = 'END') THEN
5580       IF (p_upload_mode = 'NLS') THEN
5581          --
5582          -- MLS translation.
5583          --
5584          NULL;
5585        ELSE
5586          --
5587          -- Usual upload.
5588          --
5589          NULL;
5590       END IF;
5591     ELSE
5592       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
5593    END IF;
5594 
5595    <<label_done>>
5596    done('VSET_VALUE', p_upload_phase);
5597 EXCEPTION
5598    WHEN OTHERS THEN
5599       report_public_api_exception(l_func_name,
5600                                   p_upload_phase,
5601                                   p_flex_value_set_name,
5602                                   p_parent_flex_value_low,
5603                                   p_flex_value);
5604 END up_vset_value;
5605 
5606 -- --------------------------------------------------
5607 PROCEDURE up_vset_value_hierarchy
5608   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
5609    p_upload_mode                  IN VARCHAR2,
5610    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
5611    p_flex_value_set_name          IN VARCHAR2,
5612    p_parent_flex_value            IN VARCHAR2,
5613    p_range_attribute              IN VARCHAR2,
5614    p_child_flex_value_low         IN VARCHAR2,
5615    p_child_flex_value_high        IN VARCHAR2,
5616    p_owner                        IN VARCHAR2,
5617    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
5618    p_start_date_active            IN VARCHAR2,
5619    p_end_date_active              IN VARCHAR2)
5620   IS
5621      l_func_name VARCHAR2(80);
5622      l_vst_set   vst_set_type;
5623      l_vst_val   vst_val_type;
5624      l_vst_vlh   vst_vlh_type;
5625      l_file_who  who_type;
5626 BEGIN
5627    l_func_name := g_api_name || 'up_vset_value_hierarchy()';
5628    init('VSET_VALUE_HIERARCHY', p_upload_phase);
5629    IF (g_debug_on) THEN
5630       debug(l_func_name,
5631             'PHASE:'  || p_upload_phase ||
5632             ',UMODE:' || p_upload_mode ||
5633             ',CMODE:' || p_custom_mode ||
5634             ',VSET:'  || p_flex_value_set_name ||
5635             ',PRNT:'  || p_parent_flex_value ||
5636             ',RANGE:' || p_range_attribute ||
5637             ',LOW:'   || p_child_flex_value_low ||
5638             ',HIGH:'  || p_child_flex_value_high);
5639    END IF;
5640 
5641    IF (p_upload_mode = 'NLS') THEN
5642       --
5643       -- No translation here.
5644       --
5645       IF (g_debug_on) THEN
5646          debug(l_func_name, 'No translation here.');
5647       END IF;
5648       GOTO label_done;
5649    END IF;
5650 
5651    --
5652    -- Make sure Value Set and Value exist.
5653    --
5654    get_vst_set(p_flex_value_set_name,
5655                l_vst_set);
5656 
5657    IF (l_vst_set.validation_type IN ('D', 'X', 'Y', 'U', 'P', 'F', 'N')) THEN
5658       raise_error(l_func_name, ERROR_VST_INVALID_CH_RNG,
5659                   'Child ranges cannot be defined for D, X, Y, U, P, F, N vsets');
5660    END IF;
5661 
5662    get_vst_val(l_vst_set,
5663                NULL,
5664                p_parent_flex_value,
5665                l_vst_val);
5666 
5667    --
5668    -- Gather WHO Information.
5669    --
5670    IF (NOT get_vst_vlh(l_vst_val,
5671                        p_range_attribute,
5672                        p_child_flex_value_low,
5673                        p_child_flex_value_high,
5674                        l_vst_vlh)) THEN
5675       NULL;
5676    END IF;
5677 
5678    --
5679    -- Check WHO Information.
5680    --
5681    IF (NOT is_upload_allowed
5682        (p_custom_mode                  => p_custom_mode,
5683         p_file_owner                   => p_owner,
5684         p_file_last_update_date        => p_last_update_date,
5685         p_db_last_updated_by           => l_vst_vlh.last_updated_by,
5686         p_db_last_update_date          => l_vst_vlh.last_update_date,
5687         x_file_who                     => l_file_who)) THEN
5688       IF (g_debug_on) THEN
5689          debug(l_func_name, 'Upload is not allowed because of customization.');
5690       END IF;
5691       GOTO label_done;
5692    END IF;
5693 
5694    --
5695    -- Usual upload.
5696    --
5697    IF (g_debug_on) THEN
5698       debug(l_func_name, 'Updating VSET_VALUE_HIERARCHY.(no-TL)');
5699    END IF;
5700    UPDATE fnd_flex_value_norm_hierarchy SET
5701      last_updated_by   = l_file_who.last_updated_by,
5702      last_update_date  = l_file_who.last_update_date,
5703      last_update_login = l_file_who.last_update_login,
5704      start_date_active = To_date(p_start_date_active, g_date_mask),
5705      end_date_active   = To_date(p_end_date_active, g_date_mask)
5706      WHERE flex_value_set_id = l_vst_set.flex_value_set_id
5707      AND parent_flex_value = l_vst_val.flex_value
5708      AND range_attribute = p_range_attribute
5709      AND child_flex_value_low = p_child_flex_value_low
5710      AND child_flex_value_high = p_child_flex_value_high;
5711 
5712    IF (SQL%notfound) THEN
5713       IF (g_debug_on) THEN
5714          debug(l_func_name, 'Inserting VSET_VALUE_HIERARCHY.(no-TL)');
5715       END IF;
5716       INSERT INTO fnd_flex_value_norm_hierarchy
5717         (
5718          flex_value_set_id,
5719          parent_flex_value,
5720          range_attribute,
5721          child_flex_value_low,
5722          child_flex_value_high,
5723 
5724          created_by,
5725          creation_date,
5726          last_updated_by,
5727          last_update_date,
5728          last_update_login,
5729 
5730          start_date_active,
5731          end_date_active
5732          )
5733         VALUES
5734         (
5735          l_vst_set.flex_value_set_id,
5736          l_vst_val.flex_value,
5737          p_range_attribute,
5738          p_child_flex_value_low,
5739          p_child_flex_value_high,
5740 
5741          l_file_who.created_by,
5742          l_file_who.creation_date,
5743          l_file_who.last_updated_by,
5744          l_file_who.last_update_date,
5745          l_file_who.last_update_login,
5746 
5747          To_date(p_start_date_active, g_date_mask),
5748          To_date(p_end_date_active, g_date_mask)
5749          );
5750    END IF;
5751 
5752    <<label_done>>
5753    done('VSET_VALUE_HIERARCHY', p_upload_phase);
5754 EXCEPTION
5755    WHEN OTHERS THEN
5756       report_public_api_exception(l_func_name,
5757                                   p_upload_phase,
5758                                   p_flex_value_set_name,
5759                                   p_parent_flex_value,
5760                                   p_range_attribute,
5761                                   p_child_flex_value_low,
5762                                   p_child_flex_value_high);
5763 END up_vset_value_hierarchy;
5764 
5765 -- --------------------------------------------------
5766 PROCEDURE up_vset_value_qual_value
5767   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
5768    p_upload_mode                  IN VARCHAR2,
5769    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
5770    p_flex_value_set_name          IN VARCHAR2,
5771    p_parent_flex_value_low        IN VARCHAR2,
5772    p_flex_value                   IN VARCHAR2,
5773    p_id_flex_application_short_na IN VARCHAR2,
5774    p_id_flex_code                 IN VARCHAR2,
5775    p_segment_attribute_type       IN VARCHAR2,
5776    p_value_attribute_type         IN VARCHAR2,
5777    p_owner                        IN VARCHAR2,
5778    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
5779    p_compiled_value_attribute_val IN VARCHAR2)
5780   IS
5781      l_func_name VARCHAR2(80);
5782 BEGIN
5783    l_func_name := g_api_name || 'up_vset_value_qual_value()';
5784    init('VSET_VALUE_QUAL_VALUE', p_upload_phase);
5785    IF (g_debug_on) THEN
5786       debug(l_func_name,
5787             'PHASE:'  || p_upload_phase ||
5788             ',UMODE:' || p_upload_mode ||
5789             ',CMODE:' || p_custom_mode ||
5790             ',VSET:'  || p_flex_value_set_name ||
5791             ',PRNT:'  || p_parent_flex_value_low ||
5792             ',VAL:'   || p_flex_value ||
5793             ',APPS:'  || p_id_flex_application_short_na ||
5794             ',KFF:'   || p_id_flex_code ||
5795             ',FLEXQ:' || p_segment_attribute_type ||
5796             ',SEGQ:'  || p_value_attribute_type ||
5797             ',CVAL:'  || p_compiled_value_attribute_val);
5798    END IF;
5799 
5800    upload_value_qualifier_value
5801      (p_caller_entity                => 'VSET_VALUE_QUAL_VALUE',
5802       p_upload_phase                 => p_upload_phase,
5803       p_upload_mode                  => p_upload_mode,
5804       p_custom_mode                  => p_custom_mode,
5805       p_flex_value_set_name          => p_flex_value_set_name,
5806       p_application_short_name       => p_id_flex_application_short_na,
5807       p_id_flex_code                 => p_id_flex_code,
5808       p_segment_attribute_type       => p_segment_attribute_type,
5809       p_value_attribute_type         => p_value_attribute_type,
5810       p_parent_flex_value_low        => p_parent_flex_value_low,
5811       p_flex_value                   => p_flex_value,
5812       p_owner                        => p_owner,
5813       p_last_update_date             => p_last_update_date,
5814       p_compiled_value_attribute_val => p_compiled_value_attribute_val);
5815 
5816    <<label_done>>
5817    done('VSET_VALUE_QUAL_VALUE', p_upload_phase);
5818 EXCEPTION
5819    WHEN OTHERS THEN
5820       report_public_api_exception(l_func_name,
5821                                   p_upload_phase,
5822                                   p_flex_value_set_name,
5823                                   p_parent_flex_value_low,
5824                                   p_flex_value,
5825                                   p_id_flex_application_short_na,
5826                                   p_id_flex_code,
5827                                   p_segment_attribute_type,
5828                                   p_value_attribute_type);
5829 END up_vset_value_qual_value;
5830 
5831 -- ==================================================
5832 --  DESC_FLEX
5833 -- ==================================================
5834 FUNCTION get_srs_loader_flex_name
5835   RETURN VARCHAR2
5836   IS
5837      l_func_name VARCHAR2(80);
5838      l_return    VARCHAR2(40);
5839      l_counter   NUMBER;
5840 BEGIN
5841    l_func_name := g_api_name || 'get_srs_loader_flex_name()';
5842    l_counter := 0;
5843    WHILE (l_counter < 1000) LOOP
5844       BEGIN
5845          SELECT '$SRS$.$FLEX$.$LOADER$.' || hash_value
5846            INTO l_return
5847            FROM fnd_flex_hash
5848            WHERE hash_value = l_counter
5849            FOR UPDATE NOWAIT;
5850          EXIT;
5851       EXCEPTION
5852          WHEN OTHERS THEN
5853             l_counter := l_counter + 1;
5854       END;
5855    END LOOP;
5856 
5857    IF (l_counter = 1000) THEN
5858       raise_error(l_func_name, ERROR_DFF_NO_SRS_LOCK,
5859                   'Unable to lock a row for SRS handling',
5860                   'Please re-run FNDLOAD');
5861    END IF;
5862 
5863    RETURN l_return;
5864 EXCEPTION
5865    WHEN OTHERS THEN
5866       raise_when_others(l_func_name);
5867 END get_srs_loader_flex_name;
5868 
5869 -- --------------------------------------------------
5870 PROCEDURE delete_srs_desc_flex(p_application_short_name     IN VARCHAR2,
5871                                p_descriptive_flexfield_name IN VARCHAR2)
5872   IS
5873      l_func_name VARCHAR2(80);
5874      l_app app_type;
5875 BEGIN
5876    l_func_name := g_api_name || 'delete_srs_desc_flex()';
5877 
5878    get_app(p_application_short_name, l_app);
5879 
5880    DELETE
5881      FROM fnd_descriptive_flexs
5882      WHERE application_id = l_app.application_id
5883      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
5884 
5885    DELETE
5886      FROM fnd_descriptive_flexs_tl
5887      WHERE application_id = l_app.application_id
5888      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
5889 
5890    DELETE
5891      FROM fnd_descr_flex_contexts
5892      WHERE application_id = l_app.application_id
5893      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
5894 
5895    DELETE
5896      FROM fnd_descr_flex_contexts_tl
5897      WHERE application_id = l_app.application_id
5898      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
5899 
5900    DELETE
5901      FROM fnd_descr_flex_column_usages
5902      WHERE application_id = l_app.application_id
5903      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
5904 
5905    DELETE
5906      FROM fnd_descr_flex_col_usage_tl
5907      WHERE application_id = l_app.application_id
5908      AND descriptive_flexfield_name = p_descriptive_flexfield_name;
5909 
5910 EXCEPTION
5911    WHEN OTHERS THEN
5912       raise_when_others(l_func_name,
5913                         p_application_short_name,
5914                         p_descriptive_flexfield_name);
5915 END delete_srs_desc_flex;
5916 
5917 -- --------------------------------------------------
5918 PROCEDURE rename_srs_loader_flex(p_application_short_name     IN VARCHAR2,
5919                                  p_descriptive_flexfield_name IN VARCHAR2,
5920                                  p_title                      IN VARCHAR2)
5921   IS
5922      l_func_name VARCHAR2(80);
5923      l_app app_type;
5924 BEGIN
5925    l_func_name := g_api_name || 'rename_srs_loader_flex()';
5926 
5927    get_app(p_application_short_name, l_app);
5928 
5929    UPDATE fnd_descriptive_flexs
5930      SET descriptive_flexfield_name = p_descriptive_flexfield_name
5931      WHERE application_id = l_app.application_id
5932      AND descriptive_flexfield_name = g_srs_loader_flex_name;
5933 
5934    UPDATE fnd_descriptive_flexs_tl
5935      SET descriptive_flexfield_name = p_descriptive_flexfield_name,
5936          title = p_title
5937      WHERE application_id = l_app.application_id
5938      AND descriptive_flexfield_name = g_srs_loader_flex_name;
5939 
5940    UPDATE fnd_descr_flex_contexts
5941      SET descriptive_flexfield_name = p_descriptive_flexfield_name
5942      WHERE application_id = l_app.application_id
5943      AND descriptive_flexfield_name = g_srs_loader_flex_name;
5944 
5945    UPDATE fnd_descr_flex_contexts_tl
5946      SET descriptive_flexfield_name = p_descriptive_flexfield_name
5947      WHERE application_id = l_app.application_id
5948      AND descriptive_flexfield_name = g_srs_loader_flex_name;
5949 
5950    UPDATE fnd_descr_flex_column_usages
5951      SET descriptive_flexfield_name = p_descriptive_flexfield_name
5952      WHERE application_id = l_app.application_id
5953      AND descriptive_flexfield_name = g_srs_loader_flex_name;
5954 
5955    UPDATE fnd_descr_flex_col_usage_tl
5956      SET descriptive_flexfield_name = p_descriptive_flexfield_name
5957      WHERE application_id = l_app.application_id
5958      AND descriptive_flexfield_name = g_srs_loader_flex_name;
5959 
5960 EXCEPTION
5961    WHEN OTHERS THEN
5962       raise_when_others(l_func_name,
5963                         p_application_short_name,
5964                         p_descriptive_flexfield_name,
5965                         p_title);
5966 END rename_srs_loader_flex;
5967 
5968 -- --------------------------------------------------
5969 -- Upload logic for SRS:
5970 --
5971 -- Owners are grouped into 2 categories:
5972 --    SEED   : LAST_UPDATED_BY <= g_lub_seed_boundary
5973 --    CUSTOM : LAST_UPDATED_BY >  g_lub_seed_boundary
5974 --
5975 -- Overall SRS data is grouped into 3 categories:
5976 --    ALL_SEED   :  All LUBs <= g_lub_seed_boundary
5977 --    SOME_SEED  : Some LUBs <= g_lub_seed_boundary < Some LUBs
5978 --    ALL_CUSTOM :  All LUBs >  g_lub_seed_boundary
5979 --
5980 -- Then following logic is applied:
5981 --
5982 -- LDT         DB          Result
5983 -- ----------  ----------  -------------------------------------
5984 -- ALL_SEED    ALL_SEED    Decide using max SEED LUBs and LUDs
5985 -- ALL_SEED    SOME_SEED   Decide using max SEED LUBs and LUDs
5986 -- SOME_SEED   ALL_SEED    Decide using max SEED LUBs and LUDs
5987 -- SOME_SEED   SOME_SEED   Decide using max SEED LUBs and LUDs
5988 --
5989 -- ALL_SEED    ALL_CUSTOM  Upload
5990 -- SOME_SEED   ALL_CUSTOM  Upload
5991 --
5992 -- ALL_CUSTOM  ALL_SEED    Ignore
5993 -- ALL_CUSTOM  SOME_SEED   Ignore
5994 --
5995 -- ALL_CUSTOM  ALL_CUSTOM  Decide using max CUSTOM LUBs and LUDs
5996 --
5997 -- --------------------------------------------------
5998 PROCEDURE upload_srs_desc_flex
5999   (p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
6000    p_application_short_name       IN VARCHAR2,
6001    p_descriptive_flexfield_name   IN VARCHAR2,
6002    p_title                        IN VARCHAR2)
6003   IS
6004      l_func_name          VARCHAR2(80);
6005 
6006      i                    NUMBER;
6007      l_boolean            BOOLEAN;
6008      l_is_upload_allowed  BOOLEAN;
6009 
6010      l_header1            VARCHAR2(200);
6011      l_header2            VARCHAR2(200);
6012 
6013      l_ldt_dff_seg_arr    dff_seg_arr_type;
6014      l_ldt_dff_seg_count  NUMBER;
6015 
6016      l_ldt_data_status    VARCHAR2(30);
6017      l_ldt_max_seed_lub   NUMBER;
6018      l_ldt_max_seed_lud   DATE;
6019      l_ldt_max_custom_lub NUMBER;
6020      l_ldt_max_custom_lud DATE;
6021 
6022      l_db_dff_seg_arr     dff_seg_arr_type;
6023      l_db_dff_seg_count   NUMBER;
6024 
6025      l_db_data_status     VARCHAR2(30);
6026      l_db_max_seed_lub    NUMBER;
6027      l_db_max_seed_lud    DATE;
6028      l_db_max_custom_lub  NUMBER;
6029      l_db_max_custom_lud  DATE;
6030 
6031      PROCEDURE compute_max_lub_and_max_lud
6032        (px_max_seed_lub    IN OUT nocopy NUMBER,
6033         px_max_seed_lud    IN OUT nocopy DATE,
6034         px_max_custom_lub  IN OUT nocopy NUMBER,
6035         px_max_custom_lud  IN OUT nocopy DATE,
6036         p_lub              IN NUMBER,
6037         p_lud              IN DATE,
6038         p_debug            IN VARCHAR2)
6039        IS
6040           l_debug VARCHAR2(2000);
6041      BEGIN
6042         l_debug := Rpad(p_debug, 40);
6043         --
6044         -- Compute the max SEED/CUSTOM LUB/LUD.
6045         --
6046         IF (p_lub <= g_lub_seed_boundary) THEN
6047            --
6048            -- This is assumed to be SEED data.
6049            --
6050            l_debug := l_debug || ' S:';
6051            IF (p_lub > px_max_seed_lub) THEN
6052               px_max_seed_lub := p_lub;
6053               l_debug := l_debug || '+';
6054             ELSIF (p_lub = px_max_seed_lub) THEN
6055               l_debug := l_debug || '=';
6056             ELSE
6057               l_debug := l_debug || '-';
6058            END IF;
6059 
6060            IF (p_lud > px_max_seed_lud) THEN
6061               px_max_seed_lud := p_lud;
6062               l_debug := l_debug || '+';
6063             ELSIF (p_lud = px_max_seed_lud) THEN
6064               l_debug := l_debug || '=';
6065             ELSE
6066               l_debug := l_debug || '-';
6067            END IF;
6068 
6069          ELSE
6070            --
6071            -- This is assumed to be CUSTOM data.
6072            --
6073            l_debug := l_debug || ' C:';
6074            IF (p_lub > px_max_custom_lub) THEN
6075               px_max_custom_lub := p_lub;
6076               l_debug := l_debug || '+';
6077             ELSIF (p_lub = px_max_custom_lub) THEN
6078               l_debug := l_debug || '=';
6079             ELSE
6080               l_debug := l_debug || '-';
6081            END IF;
6082 
6083            IF (p_lud > px_max_custom_lud) THEN
6084               px_max_custom_lud := p_lud;
6085               l_debug := l_debug || '+';
6086             ELSIF (p_lud = px_max_custom_lud) THEN
6087               l_debug := l_debug || '=';
6088             ELSE
6089               l_debug := l_debug || '-';
6090            END IF;
6091 
6092         END IF;
6093 
6094         IF (g_debug_on) THEN
6095            debug(l_debug || ' ' ||
6096                  Rpad(p_lub || '/' || fnd_load_util.owner_name(p_lub),
6097                       15) || ' ' ||
6098                  To_char(p_lud, g_date_mask));
6099         END IF;
6100 
6101      END compute_max_lub_and_max_lud;
6102 
6103      PROCEDURE compute_max_who
6104        (p_application_short_name       IN VARCHAR2,
6105         p_descriptive_flexfield_name   IN VARCHAR2,
6106         px_data_status                 IN OUT nocopy VARCHAR2,
6107         px_max_seed_lub                IN OUT nocopy NUMBER,
6108         px_max_seed_lud                IN OUT nocopy DATE,
6109         px_max_custom_lub              IN OUT nocopy NUMBER,
6110         px_max_custom_lud              IN OUT nocopy DATE,
6111         px_dff_seg_arr                 IN OUT nocopy dff_seg_arr_type,
6112         px_dff_seg_count               IN OUT nocopy NUMBER)
6113        IS
6114           CURSOR l_dff_seg_cursor(p_application_id               IN NUMBER,
6115                                   p_descriptive_flexfield_name   IN VARCHAR2,
6116                                   p_descriptive_flex_context_cod IN VARCHAR2)
6117             IS
6118                SELECT *
6119                  FROM fnd_descr_flex_column_usages
6120                  WHERE application_id = p_application_id
6121                  AND descriptive_flexfield_name = p_descriptive_flexfield_name
6122                  AND descriptive_flex_context_code = p_descriptive_flex_context_cod
6123                  ORDER BY application_column_name;
6124 
6125           l_dff_flx        dff_flx_type;
6126           l_dff_ctx        dff_ctx_type;
6127      BEGIN
6128         px_data_status    := 'NOT_COMPUTED';
6129         px_max_seed_lub   := g_unset_lub;
6130         px_max_seed_lud   := g_unset_lud;
6131         px_max_custom_lub := g_unset_lub;
6132         px_max_custom_lud := g_unset_lud;
6133 
6134         --
6135         -- Get SRS Desc Flex.
6136         --
6137         IF (NOT get_dff_flx(p_application_short_name,
6138                             p_descriptive_flexfield_name,
6139                             l_dff_flx)) THEN
6140            --
6141            -- SRS Desc Flex doesn't exist.
6142            --
6143            IF (g_debug_on) THEN
6144               debug(l_func_name,
6145                     'SRS: Desc Flex does not exist.',
6146                     'APPLICATION_SHORT_NAME=' || p_application_short_name,
6147                     'DESCRIPTIVE_FLEXFIELD_NAME=' || p_descriptive_flexfield_name);
6148            END IF;
6149            px_data_status := 'DOES_NOT_EXIST';
6150            GOTO label_done;
6151         END IF;
6152 
6153         compute_max_lub_and_max_lud
6154           (px_max_seed_lub,
6155            px_max_seed_lud,
6156            px_max_custom_lub,
6157            px_max_custom_lud,
6158            l_dff_flx.last_updated_by,
6159            l_dff_flx.last_update_date,
6160            l_dff_flx.descriptive_flexfield_name);
6161 
6162         --
6163         -- Get the SRS Desc Flex Global Data Elements Context.
6164         --
6165         IF (NOT get_dff_ctx(l_dff_flx,
6166                             'Global Data Elements',
6167                             l_dff_ctx)) THEN
6168            --
6169            -- SRS Desc Flex Global Data Elements doesn't exist.
6170            --
6171            IF (g_debug_on) THEN
6172               debug(l_func_name,
6173                     'SRS: Desc Flex Global Ctx does not exist.',
6174                     'APPLICATION_SHORT_NAME=' || p_application_short_name,
6175                     'DESCRIPTIVE_FLEXFIELD_NAME=' || p_descriptive_flexfield_name);
6176            END IF;
6177            px_data_status := 'DOES_NOT_EXIST';
6178            GOTO label_done;
6179         END IF;
6180 
6181         compute_max_lub_and_max_lud
6182           (px_max_seed_lub,
6183            px_max_seed_lud,
6184            px_max_custom_lub,
6185            px_max_custom_lud,
6186            l_dff_ctx.last_updated_by,
6187            l_dff_ctx.last_update_date,
6188            '  ' || l_dff_ctx.descriptive_flex_context_code);
6189 
6190         --
6191         -- Get the SRS Parameters.
6192         --
6193         i := 0;
6194         FOR l_dff_seg_cursor_rec IN l_dff_seg_cursor(l_dff_flx.application_id,
6195                                                      l_dff_flx.descriptive_flexfield_name,
6196                                                      l_dff_ctx.descriptive_flex_context_code) LOOP
6197            i := i + 1;
6198            px_dff_seg_arr(i) := l_dff_seg_cursor_rec;
6199 
6200            compute_max_lub_and_max_lud
6201              (px_max_seed_lub,
6202               px_max_seed_lud,
6203               px_max_custom_lub,
6204               px_max_custom_lud,
6205               px_dff_seg_arr(i).last_updated_by,
6206               px_dff_seg_arr(i).last_update_date,
6207               '    ' || px_dff_seg_arr(i).application_column_name ||
6208               '.' || px_dff_seg_arr(i).end_user_column_name);
6209         END LOOP;
6210         px_dff_seg_count := i;
6211 
6212         --
6213         -- Compute the final status of data
6214         --
6215         IF (px_max_custom_lub = g_unset_lub) THEN
6216            px_data_status := 'ALL_SEED';
6217 
6218          ELSIF (px_max_seed_lub = g_unset_lub) THEN
6219            px_data_status := 'ALL_CUSTOM';
6220 
6221          ELSE
6222            px_data_status := 'SOME_SEED';
6223 
6224         END IF;
6225 
6226         IF (g_debug_on) THEN
6227            debug(l_header2);
6228            debug('Max LUB and max LUD                   SEED:   ' ||
6229                  Rpad(px_max_seed_lub || '/' ||
6230                       fnd_load_util.owner_name(px_max_seed_lub),
6231                       15) || ' ' ||
6232                  To_char(px_max_seed_lud, g_date_mask));
6233            debug('                                    CUSTOM:   ' ||
6234                  Rpad(px_max_custom_lub || '/' ||
6235                       fnd_load_util.owner_name(px_max_custom_lub),
6236                       15) || ' ' ||
6237                  To_char(px_max_custom_lud, g_date_mask));
6238            debug('                              Final Status:   ' ||
6239                  px_data_status);
6240 
6241            debug(' ');
6242         END IF;
6243 
6244         <<label_done>>
6245           NULL;
6246      END compute_max_who;
6247 
6248 BEGIN
6249    l_func_name := g_api_name || 'upload_srs_desc_flex()';
6250 
6251    init('SRS_DESC_FLEX', 'LEAF');
6252    IF (g_debug_on) THEN
6253       debug(l_func_name,
6254             'CMODE:' || p_custom_mode  ||
6255             ',APPS:'  || p_application_short_name ||
6256             ',DFF:'   || p_descriptive_flexfield_name);
6257 
6258       l_header1 := Rpad('Entity', 41) || Rpad('Owner', 21) || 'Last Update Date';
6259       l_header2 := Rpad('-', 40, '-') || ' ' || Rpad('-', 20, '-') || ' ' || Rpad('-', 19, '-');
6260       debug(l_header1);
6261       debug(l_header2);
6262    END IF;
6263 
6264    --
6265    -- Compute Max WHO and Status for LDT data
6266    --
6267    compute_max_who(p_application_short_name,
6268                    g_srs_loader_flex_name,
6269                    l_ldt_data_status,
6270                    l_ldt_max_seed_lub,
6271                    l_ldt_max_seed_lud,
6272                    l_ldt_max_custom_lub,
6273                    l_ldt_max_custom_lud,
6274                    l_ldt_dff_seg_arr,
6275                    l_ldt_dff_seg_count);
6276 
6277    IF (l_ldt_data_status = 'DOES_NOT_EXIST') THEN
6278       --
6279       -- This should not happen.
6280       --
6281       raise_error(l_func_name, ERROR_DFF_NO_LDT_DATA,
6282                   'LDT SRS data does not exist',
6283                   'Please file a bug against 510/FLEXFIELDS');
6284    END IF;
6285 
6286    IF (g_debug_on) THEN
6287       debug(l_header1);
6288       debug(l_header2);
6289    END IF;
6290 
6291    --
6292    -- Compute Max WHO and Status for DB data
6293    --
6294    compute_max_who(p_application_short_name,
6295                    p_descriptive_flexfield_name,
6296                    l_db_data_status,
6297                    l_db_max_seed_lub,
6298                    l_db_max_seed_lud,
6299                    l_db_max_custom_lub,
6300                    l_db_max_custom_lud,
6301                    l_db_dff_seg_arr,
6302                    l_db_dff_seg_count);
6303 
6304    IF (l_db_data_status = 'DOES_NOT_EXIST') THEN
6305       --
6306       -- This can happen. This is the first time an SRS definition is uploaded.
6307       --
6308       GOTO label_insert_ldt;
6309    END IF;
6310 
6311    --
6312    -- Now we have LDT and DB data.
6313    -- It is time to do version checking.
6314    --
6315 
6316    --
6317    -- Following IF is added for future use.
6318    -- It simply is GOTO label_usual_upload;
6319    --
6320    IF (l_db_dff_seg_count = l_ldt_dff_seg_count) THEN
6321       --
6322       -- Both have same number of parameters.
6323       --
6324       --
6325       -- Let's see if the order and the names are same.
6326       --
6327       l_boolean := TRUE;
6328       FOR i IN 1..l_db_dff_seg_count LOOP
6329          IF ((l_db_dff_seg_arr(i).application_column_name =
6330               l_ldt_dff_seg_arr(i).application_column_name) AND
6331              (l_db_dff_seg_arr(i).end_user_column_name =
6332               l_ldt_dff_seg_arr(i).end_user_column_name) AND
6333              (l_db_dff_seg_arr(i).column_seq_num =
6334               l_ldt_dff_seg_arr(i).column_seq_num)) THEN
6335             NULL;
6336           ELSE
6337             l_boolean := FALSE;
6338             EXIT;
6339          END IF;
6340       END LOOP;
6341 
6342       IF (l_boolean) THEN
6343          --
6344          -- Everything matched, structures are same.
6345          --
6346          GOTO label_usual_upload;
6347        ELSE
6348          --
6349          -- There is change in the structure.
6350          --
6351          GOTO label_usual_upload;
6352       END IF;
6353     ELSE
6354       --
6355       -- Different number of parameters.
6356       --
6357       GOTO label_usual_upload;
6358    END IF;
6359 
6360    <<label_usual_upload>>
6361      BEGIN
6362         l_is_upload_allowed := FALSE;
6363 
6364         IF (l_ldt_data_status IN ('ALL_SEED', 'SOME_SEED')) THEN
6365            --
6366            -- LDT has SEED data.
6367            --
6368            IF (l_db_data_status IN ('ALL_SEED', 'SOME_SEED')) THEN
6369               --
6370               -- DB has SEED data.
6371               --
6372               l_is_upload_allowed := fnd_load_util.upload_test
6373                 (p_file_id     => l_ldt_max_seed_lub,
6374                  p_file_lud    => l_ldt_max_seed_lud,
6375                  p_db_id       => l_db_max_seed_lub,
6376                  p_db_lud      => l_db_max_seed_lud,
6377                  p_custom_mode => p_custom_mode);
6378             ELSIF (l_db_data_status IN ('ALL_CUSTOM')) THEN
6379               --
6380               -- DB is ALL_CUSTOM.
6381               -- SRS customizations are not supported.
6382               -- Overwrite the customizations.
6383               --
6384               -- This branch is very unlikely.
6385               --
6386               l_is_upload_allowed := TRUE;
6387            END IF;
6388 
6389          ELSIF (l_ldt_data_status IN ('ALL_CUSTOM')) THEN
6390            --
6391            -- LDT is ALL_CUSTOM.
6392            --
6393            IF (l_db_data_status IN ('ALL_SEED', 'SOME_SEED')) THEN
6394               --
6395               -- DB has SEED data...
6396               -- SRS customizations are not supported.
6397               -- Preserve the seed data.
6398               --
6399               -- This branch is very unlikely.
6400               --
6401               l_is_upload_allowed := FALSE;
6402 
6403             ELSIF (l_db_data_status IN ('ALL_CUSTOM')) THEN
6404               --
6405               -- DB is ALL_CUSTOM.
6406               -- Customer might be moving CUSTOM SRS from one db to another.
6407               --
6408               l_is_upload_allowed := fnd_load_util.upload_test
6409                 (p_file_id     => l_ldt_max_custom_lub,
6410                  p_file_lud    => l_ldt_max_custom_lud,
6411                  p_db_id       => l_db_max_custom_lub,
6412                  p_db_lud      => l_db_max_custom_lud,
6413                  p_custom_mode => p_custom_mode);
6414            END IF;
6415         END IF;
6416 
6417         IF (l_is_upload_allowed) THEN
6418            IF (g_debug_on) THEN
6419               debug(l_func_name, 'SRS: Upload is allowed.');
6420            END IF;
6421            GOTO label_insert_ldt;
6422          ELSE
6423            IF (g_debug_on) THEN
6424               debug(l_func_name, 'SRS: Upload is not allowed.');
6425            END IF;
6426            GOTO label_done;
6427         END IF;
6428      END;
6429 
6430      <<label_insert_ldt>>
6431      BEGIN
6432         --
6433         -- Delete the existing DB SRS Desc Flex.
6434         --
6435         delete_srs_desc_flex(p_application_short_name,
6436                              p_descriptive_flexfield_name);
6437 
6438         --
6439         -- Rename the LDT SRS Desc Flex.
6440         --
6441         rename_srs_loader_flex(p_application_short_name,
6442                                p_descriptive_flexfield_name,
6443                                p_title);
6444 
6445         --
6446         -- 1 Flex, 1 Global Data Elements, Parameters
6447         --
6448         g_numof_changes := g_numof_changes + 1 + 1 + l_ldt_dff_seg_count;
6449 
6450         GOTO label_done;
6451      END;
6452 
6453    <<label_done>>
6454      BEGIN
6455         --
6456         -- We are done with LDT SRS Desc Flex.
6457         --
6458         delete_srs_desc_flex(p_application_short_name,
6459                              g_srs_loader_flex_name);
6460      END;
6461    done('SRS_DESC_FLEX', 'LEAF');
6462 EXCEPTION
6463    WHEN OTHERS THEN
6464       raise_when_others(l_func_name,
6465                         p_application_short_name,
6466                         p_descriptive_flexfield_name,
6467                         p_title);
6468 END upload_srs_desc_flex;
6469 
6470 -- --------------------------------------------------
6471 PROCEDURE up_desc_flex
6472   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
6473    p_upload_mode                  IN VARCHAR2,
6474    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
6475    p_application_short_name       IN VARCHAR2,
6476    p_descriptive_flexfield_name   IN VARCHAR2,
6477    p_owner                        IN VARCHAR2,
6478    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
6479    p_table_application_short_name IN VARCHAR2,
6480    p_application_table_name       IN VARCHAR2,
6481    p_concatenated_segs_view_name  IN VARCHAR2 DEFAULT NULL,
6482    p_context_column_name          IN VARCHAR2,
6483    p_context_required_flag        IN VARCHAR2,
6484    p_context_user_override_flag   IN VARCHAR2,
6485    p_concatenated_segment_delimit IN VARCHAR2,
6486    p_freeze_flex_definition_flag  IN VARCHAR2,
6487    p_protected_flag               IN VARCHAR2,
6488    p_default_context_field_name   IN VARCHAR2,
6489    p_default_context_value        IN VARCHAR2,
6490    p_context_default_type         IN VARCHAR2 DEFAULT NULL,
6491    p_context_default_value        IN VARCHAR2 DEFAULT NULL,
6492    p_context_override_value_set_n IN VARCHAR2 DEFAULT NULL,
6493    p_context_runtime_property_fun IN VARCHAR2 DEFAULT NULL,
6494    p_context_synchronization_flag IN VARCHAR2 DEFAULT NULL,
6495    p_title                        IN VARCHAR2,
6496    p_form_context_prompt          IN VARCHAR2,
6497    p_description                  IN VARCHAR2)
6498   IS
6499      l_func_name  VARCHAR2(80);
6500      l_tbl        tbl_type;
6501      l_dff_flx    dff_flx_type;
6502      l_dff_flx_tl dff_flx_tl_type;
6503      l_dff_ctx    dff_ctx_type;
6504      l_vst_set    vst_set_type;
6505      l_app        app_type;
6506      l_file_who   who_type;
6507      l_descriptive_flexfield_name  fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE;
6508      l_title                       fnd_descriptive_flexs_vl.title%TYPE;
6509      l_concatenated_segs_view_name fnd_descriptive_flexs_vl.concatenated_segs_view_name%TYPE;
6510      l_context_synchronization_flag fnd_descriptive_flexs.context_synchronization_flag%TYPE;
6511 BEGIN
6512    l_func_name := g_api_name || 'up_desc_flex()';
6513    l_descriptive_flexfield_name := p_descriptive_flexfield_name;
6514    l_title := p_title;
6515 
6516    init('DESC_FLEX', p_upload_phase);
6517    IF (g_debug_on) THEN
6518       debug(l_func_name,
6519             'PHASE:'  || p_upload_phase ||
6520             ',UMODE:' || p_upload_mode  ||
6521             ',CMODE:' || p_custom_mode  ||
6522             ',APPS:'  || p_application_short_name ||
6523             ',DFF:'   || l_descriptive_flexfield_name);
6524    END IF;
6525 
6526    IF (p_upload_phase = 'BEGIN') THEN
6527       start_transaction(ENTITY_DESC_FLEX);
6528       lock_entity('DESC_FLEX',
6529                   p_application_short_name,
6530                   p_descriptive_flexfield_name);
6531 
6532       g_numof_changes := 0;
6533       --
6534       -- Gather WHO Information.
6535       --
6536       IF (get_dff_flx(p_application_short_name,
6537                       l_descriptive_flexfield_name,
6538                       l_dff_flx)) THEN
6539          NULL;
6540       END IF;
6541 
6542       IF (p_upload_mode = 'NLS') THEN
6543          --
6544          -- MLS translation.
6545          --
6546 
6547          --
6548          -- Gather WHO Information.
6549          --
6550          IF (get_dff_flx_tl(l_dff_flx,
6551                             userenv('LANG'),
6552                             l_dff_flx_tl)) THEN
6553             NULL;
6554          END IF;
6555 
6556          --
6557          -- Check WHO Information.
6558          --
6559          IF (NOT is_upload_allowed
6560              (p_custom_mode                  => p_custom_mode,
6561               p_file_owner                   => p_owner,
6562               p_file_last_update_date        => p_last_update_date,
6563               p_db_last_updated_by           => l_dff_flx_tl.last_updated_by,
6564               p_db_last_update_date          => l_dff_flx_tl.last_update_date,
6565               x_file_who                     => l_file_who)) THEN
6566             IF (g_debug_on) THEN
6567                debug(l_func_name, 'Upload is not allowed because of customization.');
6568             END IF;
6569             GOTO label_done;
6570          END IF;
6571 
6572          IF (g_debug_on) THEN
6573             debug(l_func_name, 'Translating DESC_FLEX.(MLS)');
6574          END IF;
6575          fnd_descriptive_flexs_pkg.translate_row
6576            (x_application_short_name       => p_application_short_name,
6577             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
6578             x_who                          => l_file_who,
6579             x_title                        => l_title,
6580             x_form_context_prompt          => p_form_context_prompt,
6581             x_description                  => p_description);
6582        ELSE
6583          --
6584          -- Usual upload.
6585          --
6586 
6587          --
6588          -- Check WHO Information.
6589          --
6590          IF (NOT is_upload_allowed
6591              (p_custom_mode                  => p_custom_mode,
6592               p_file_owner                   => p_owner,
6593               p_file_last_update_date        => p_last_update_date,
6594               p_db_last_updated_by           => l_dff_flx.last_updated_by,
6595               p_db_last_update_date          => l_dff_flx.last_update_date,
6596               x_file_who                     => l_file_who)) THEN
6597 
6598             --
6599             -- SRS DFFs are handled in upload_srs_desc_flex().
6600             --
6601             IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%')  THEN
6602                IF (g_debug_on) THEN
6603                   debug(l_func_name, 'Upload is not allowed because of customization.');
6604                END IF;
6605                GOTO label_done;
6606             else
6607                --
6608                -- Clear the customization message
6609                --
6610                fnd_message.clear();
6611             END IF;
6612          END IF;
6613 
6614          IF (l_descriptive_flexfield_name LIKE '$SRS$.%')  THEN
6615             --
6616             -- Come up with a unique LDT SRS Desc Flex Name.
6617             --
6618             g_srs_loader_flex_name := get_srs_loader_flex_name();
6619 
6620             --
6621             -- Delete the old LDT SRS Desc Flex.
6622             --
6623             delete_srs_desc_flex(p_application_short_name,
6624                                  g_srs_loader_flex_name);
6625 
6626             --
6627             -- LDT SRS Desc Flex.
6628             --
6629             l_descriptive_flexfield_name := g_srs_loader_flex_name;
6630             l_title := g_srs_loader_flex_name;
6631             IF (g_debug_on) THEN
6632                debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
6633             END IF;
6634          END IF;
6635 
6636          --
6637          -- Make sure Table exists.
6638          --
6639          get_tbl(p_table_application_short_name,
6640                  p_application_table_name,
6641                  l_tbl);
6642 
6643          --
6644          -- Make sure Context Override Value Set exists.
6645          --
6646          IF (p_context_override_value_set_n IS NOT NULL) THEN
6647             get_vst_set(p_context_override_value_set_n, l_vst_set);
6648          END IF;
6649 
6650          --
6651          -- Check protected flag
6652          --
6653          IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6654             IF (p_protected_flag <> 'S') THEN
6655                raise_error(l_func_name, ERROR_DFF_INV_PROT_FLG,
6656                            'PROTECTED_FLAG (' || p_protected_flag || ') must be S for SRS DFFs',
6657                            'Please fix this problem in source DB and re-download the ldt file');
6658             END IF;
6659           ELSE
6660             IF (p_protected_flag NOT IN ('Y', 'N')) THEN
6661                raise_error(l_func_name, ERROR_DFF_INV_PROT_FLG,
6662                            'PROTECTED_FLAG (' || p_protected_flag || ') must be either Y (developer DFF) or N (customer DFF)',
6663                            'Please fix this problem in source DB and re-download the ldt file');
6664             END IF;
6665          END IF;
6666 
6667          --
6668          -- Intentional/Unintentional NULL handling.
6669          --
6670          IF (p_concatenated_segs_view_name IS NULL) THEN
6671             l_concatenated_segs_view_name := l_dff_flx.concatenated_segs_view_name;
6672           ELSIF (p_concatenated_segs_view_name = g_null_value) THEN
6673             l_concatenated_segs_view_name := NULL;
6674           ELSE
6675             l_concatenated_segs_view_name := p_concatenated_segs_view_name;
6676          END IF;
6677 
6678          --
6679          -- Default value for context synchronization flag
6680          -- for backward compatibility
6681          --
6682          -- If parameter is not 'Y' / 'N'
6683          --   try db value first,
6684          --   if db value is also not 'Y' / 'N' then
6685          --     for conc program, sync flag is  'N'
6686          --     else
6687          --       if reference field has a value AND display flag is off then
6688          --         sync flag is 'Y'
6689          --       else sync flag is 'N'
6690          --
6691          l_context_synchronization_flag := Nvl(p_context_synchronization_flag, 'X');
6692          IF (l_context_synchronization_flag NOT IN ('Y', 'N')) THEN
6693             IF (l_dff_flx.context_synchronization_flag IN ('Y', 'N')) THEN
6694                l_context_synchronization_flag := l_dff_flx.context_synchronization_flag;
6695             ELSE
6696                IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6697                   l_context_synchronization_flag := 'N';
6698                ELSE
6699                   IF ((p_default_context_field_name is NOT NULL) AND
6700                       (p_context_user_override_flag = 'N')) THEN
6701                      l_context_synchronization_flag := 'Y';
6702                   ELSE
6703                      l_context_synchronization_flag := 'N';
6704                   END IF;
6705                END IF;
6706             END IF;
6707          END IF;
6708 
6709          IF (g_debug_on) THEN
6710             debug(l_func_name, 'Uploading DESC_FLEX.(MLS)');
6711          END IF;
6712          fnd_descriptive_flexs_pkg.load_row
6713            (x_application_short_name       => p_application_short_name,
6714             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
6715             x_who                          => l_file_who,
6716             x_table_application_short_name => p_table_application_short_name,
6717             x_application_table_name       => p_application_table_name,
6718             x_concatenated_segs_view_name  => l_concatenated_segs_view_name,
6719             x_context_required_flag        => p_context_required_flag,
6720             x_context_column_name          => p_context_column_name,
6721             x_context_user_override_flag   => p_context_user_override_flag,
6722             x_concatenated_segment_delimit => p_concatenated_segment_delimit,
6723             x_freeze_flex_definition_flag  => p_freeze_flex_definition_flag,
6724             x_protected_flag               => p_protected_flag,
6725             x_default_context_field_name   => p_default_context_field_name,
6726             x_default_context_value        => p_default_context_value,
6727             x_context_default_type         => p_context_default_type,
6728             x_context_default_value        => p_context_default_value,
6729             x_context_override_value_set_n => p_context_override_value_set_n,
6730             x_context_runtime_property_fun => p_context_runtime_property_fun,
6731             x_context_synchronization_flag => l_context_synchronization_flag,
6732             x_title                        => l_title,
6733             x_form_context_prompt          => p_form_context_prompt,
6734             x_description                  => p_description);
6735       END IF;
6736     ELSIF (p_upload_phase = 'END') THEN
6737       IF (p_upload_mode = 'NLS') THEN
6738          --
6739          -- MLS translation.
6740          --
6741          NULL;
6742        ELSE
6743          --
6744          -- Usual upload.
6745          --
6746 
6747          --
6748          -- LDT SRS Desc Flex.
6749          --
6750          IF (l_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6751             l_descriptive_flexfield_name := g_srs_loader_flex_name;
6752             IF (g_debug_on) THEN
6753                debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
6754             END IF;
6755          END IF;
6756 
6757          IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%') THEN
6758             --
6759             -- Make sure Context column is marked in fnd_columns.
6760             --
6761             fnd_flex_loader_apis.up_dff_column
6762               (p_upload_phase               => 'LEAF',
6763                p_upload_mode                => NULL,
6764                p_application_short_name     => p_application_short_name,
6765                p_descriptive_flexfield_name => l_descriptive_flexfield_name,
6766                p_column_name                => p_context_column_name,
6767                p_owner                      => p_owner,
6768                p_last_update_date           => p_last_update_date,
6769                p_flexfield_usage_code       => 'C');
6770          END IF;
6771 
6772          --
6773          -- Make sure Global Context is created.
6774          --
6775          get_dff_flx(p_application_short_name,
6776                      l_descriptive_flexfield_name,
6777                      l_dff_flx);
6778 
6779          IF (NOT get_dff_ctx(l_dff_flx,
6780                              'Global Data Elements',
6781                              l_dff_ctx)) THEN
6782             fnd_flex_loader_apis.up_dff_context
6783               (p_upload_phase                 => 'BEGIN',
6784                p_upload_mode                  => NULL,
6785                p_application_short_name       => p_application_short_name,
6786                p_descriptive_flexfield_name   => l_descriptive_flexfield_name,
6787                p_descriptive_flex_context_cod => 'Global Data Elements',
6788                p_owner                        => p_owner,
6789                p_last_update_date             => p_last_update_date,
6790                p_enabled_flag                 => 'Y',
6791                p_global_flag                  => 'Y',
6792                p_descriptive_flex_context_nam => 'Global Data Elements',
6793                p_description                  => 'Global Data Element Context');
6794          END IF;
6795 
6796          IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6797             g_numof_changes := 0;
6798             upload_srs_desc_flex(p_custom_mode                => p_custom_mode,
6799                                  p_application_short_name     => p_application_short_name,
6800                                  p_descriptive_flexfield_name => p_descriptive_flexfield_name,
6801                                  p_title                      => p_title);
6802          END IF;
6803       END IF; -- p_upload_mode
6804       --
6805       -- Compile Flex, Generate View.
6806       --
6807       IF (g_numof_changes > 0) THEN
6808          call_cp(p_mode                       => 'DFF',
6809                  p_upload_mode                => p_upload_mode,
6810                  p_application_short_name     => p_application_short_name,
6811                  p_descriptive_flexfield_name => p_descriptive_flexfield_name);
6812       END IF;
6813       finish_transaction(ENTITY_DESC_FLEX);
6814     ELSE
6815       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
6816    END IF; -- p_upload_phase
6817 
6818    <<label_done>>
6819    done('DESC_FLEX', p_upload_phase);
6820 EXCEPTION
6821    WHEN OTHERS THEN
6822       report_public_api_exception(l_func_name,
6823                                   p_upload_phase,
6824                                   p_application_short_name,
6825                                   p_descriptive_flexfield_name);
6826 
6827       BEGIN
6828          release_entity();
6829          IF (p_upload_phase = 'END') THEN
6830             finish_transaction(ENTITY_DESC_FLEX);
6831          END IF;
6832       EXCEPTION
6833          WHEN OTHERS THEN
6834             report_public_api_exception(l_func_name,
6835                                         p_upload_phase,
6836                                         p_application_short_name,
6837                                         p_descriptive_flexfield_name);
6838       END;
6839 END up_desc_flex;
6840 
6841 -- --------------------------------------------------
6842 PROCEDURE up_dff_column
6843   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
6844    p_upload_mode                  IN VARCHAR2,
6845    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
6846    p_application_short_name       IN VARCHAR2,
6847    p_descriptive_flexfield_name   IN VARCHAR2,
6848    p_column_name                  IN VARCHAR2,
6849    p_owner                        IN VARCHAR2,
6850    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
6851    p_flexfield_usage_code         IN VARCHAR2)
6852   IS
6853      l_func_name VARCHAR2(80);
6854      l_dff_flx   dff_flx_type;
6855      l_col       col_type;
6856      l_file_who  who_type;
6857 BEGIN
6858    l_func_name := g_api_name || 'up_dff_column()';
6859    init('DFF_COLUMN', p_upload_phase);
6860    IF (g_debug_on) THEN
6861       debug(l_func_name,
6862             'PHASE:'  || p_upload_phase ||
6863             ',UMODE:' || p_upload_mode ||
6864             ',CMODE:' || p_custom_mode ||
6865             ',APPS:'  || p_application_short_name ||
6866             ',DFF:'   || p_descriptive_flexfield_name ||
6867             ',COL:'   || p_column_name ||
6868             ',USG:'   || p_flexfield_usage_code);
6869    END IF;
6870 
6871    IF (p_upload_mode = 'NLS') THEN
6872       --
6873       -- No translation here.
6874       --
6875       IF (g_debug_on) THEN
6876          debug(l_func_name, 'No translation here.');
6877       END IF;
6878       GOTO label_done;
6879    END IF;
6880 
6881    --
6882    -- Make sure DFF and Column exist.
6883    --
6884    get_dff_flx(p_application_short_name,
6885                p_descriptive_flexfield_name,
6886                l_dff_flx);
6887 
6888    get_col(l_dff_flx.table_application_id,
6889            l_dff_flx.application_table_name,
6890            p_column_name,
6891            l_col);
6892 
6893    --
6894    -- Check WHO Information.
6895    --
6896    IF (NOT is_upload_allowed
6897        (p_custom_mode                  => p_custom_mode,
6898         p_file_owner                   => p_owner,
6899         p_file_last_update_date        => p_last_update_date,
6900         p_db_last_updated_by           => l_col.last_updated_by,
6901         p_db_last_update_date          => l_col.last_update_date,
6902         x_file_who                     => l_file_who)) THEN
6903       IF (g_debug_on) THEN
6904          debug(l_func_name, 'Upload is not allowed because of customization.');
6905          debug(l_func_name, 'For data integrity upload must be done.');
6906       END IF;
6907 
6908       --
6909       -- Clear the customization message
6910       --
6911       fnd_message.clear();
6912    END IF;
6913 
6914    --
6915    -- Usual upload.
6916    --
6917    IF ((p_descriptive_flexfield_name NOT LIKE '$SRS$.%') AND
6918        (p_flexfield_usage_code IN ('C','D'))) THEN
6919       --
6920       -- Make sure column is not in use.
6921       --
6922       IF ((((l_col.flexfield_application_id IS NULL) OR
6923             (l_col.flexfield_application_id = l_dff_flx.application_id)) AND
6924            ((l_col.flexfield_name IS NULL) OR
6925             (l_col.flexfield_name = p_descriptive_flexfield_name)) AND
6926            ((l_col.flexfield_usage_code IS NULL) OR
6927             (l_col.flexfield_usage_code = p_flexfield_usage_code))) OR
6928           (l_col.flexfield_usage_code = 'N') OR
6929           ((l_col.flexfield_application_id = l_dff_flx.application_id) AND
6930            (l_col.flexfield_name = p_descriptive_flexfield_name) AND
6931            (l_col.flexfield_usage_code = 'D') AND
6932            (p_flexfield_usage_code = 'C'))) THEN
6933 
6934          IF (g_debug_on) THEN
6935             debug(l_func_name, 'Updating DFF_COLUMN.(no-TL)');
6936          END IF;
6937          UPDATE fnd_columns SET
6938            last_updated_by          = l_file_who.last_updated_by,
6939            last_update_date         = l_file_who.last_update_date,
6940            last_update_login        = l_file_who.last_update_login,
6941            flexfield_application_id = Decode(p_flexfield_usage_code,
6942                                              'N', NULL,
6943                                              l_dff_flx.application_id),
6944            flexfield_name           = Decode(p_flexfield_usage_code,
6945                                              'N', NULL,
6946                                              l_dff_flx.descriptive_flexfield_name),
6947            flexfield_usage_code     = p_flexfield_usage_code
6948            WHERE application_id = l_col.application_id
6949            AND table_id = l_col.table_id
6950            AND column_name = l_col.column_name;
6951          IF (SQL%rowcount > 0) THEN
6952             g_numof_changes := g_numof_changes + 1;
6953          END IF;
6954        ELSE
6955          raise_error(l_func_name, ERROR_DFF_COL_USED,
6956                      'COL:' || p_column_name || ' is used by ' ||
6957                      'APP Id:' || To_char(l_col.flexfield_application_id) ||
6958                      ' Flex Name:' || l_col.flexfield_name ||
6959                      ' Usage Code:' || l_col.flexfield_usage_code,
6960                      'You cannot use it in another flexfield');
6961       END IF;
6962    END IF;
6963 
6964    <<label_done>>
6965    done('DFF_COLUMN', p_upload_phase);
6966 EXCEPTION
6967    WHEN OTHERS THEN
6968       report_public_api_exception(l_func_name,
6969                                   p_upload_phase,
6970                                   p_application_short_name,
6971                                   p_descriptive_flexfield_name,
6972                                   p_column_name);
6973 END up_dff_column;
6974 
6975 -- --------------------------------------------------
6976 PROCEDURE up_dff_ref_field
6977   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
6978    p_upload_mode                  IN VARCHAR2,
6979    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
6980    p_application_short_name       IN VARCHAR2,
6981    p_descriptive_flexfield_name   IN VARCHAR2,
6982    p_default_context_field_name   IN VARCHAR2,
6983    p_owner                        IN VARCHAR2,
6984    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
6985    p_description                  IN VARCHAR2)
6986   IS
6987      l_func_name VARCHAR2(80);
6988      l_dff_flx   dff_flx_type;
6989      l_dff_ref   dff_ref_type;
6990      l_file_who  who_type;
6991 BEGIN
6992    l_func_name := g_api_name || 'up_dff_ref_field()';
6993    init('DFF_REF_FIELD', p_upload_phase);
6994    IF (g_debug_on) THEN
6995       debug(l_func_name,
6996             'PHASE:'  || p_upload_phase ||
6997             ',UMODE:' || p_upload_mode ||
6998             ',CMODE:' || p_custom_mode ||
6999             ',APPS:'  || p_application_short_name ||
7000             ',DFF:'   || p_descriptive_flexfield_name ||
7001             ',REF:'   || p_default_context_field_name);
7002    END IF;
7003 
7004    IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
7005       --
7006       -- No Reference Field for SRS.
7007       --
7008       IF (g_debug_on) THEN
7009          debug(l_func_name, 'No Reference Field for $SRS$.');
7010       END IF;
7011       GOTO label_done;
7012    END IF;
7013 
7014    --
7015    -- Gather WHO Information.
7016    --
7017    IF (get_dff_flx(p_application_short_name,
7018                    p_descriptive_flexfield_name,
7019                    l_dff_flx)) THEN
7020       IF (get_dff_ref(l_dff_flx,
7021                       p_default_context_field_name,
7022                       l_dff_ref)) THEN
7023          NULL;
7024       END IF;
7025    END IF;
7026 
7027    --
7028    -- Check WHO Information.
7029    --
7030    IF (NOT is_upload_allowed
7031        (p_custom_mode                  => p_custom_mode,
7032         p_file_owner                   => p_owner,
7033         p_file_last_update_date        => p_last_update_date,
7034         p_db_last_updated_by           => l_dff_ref.last_updated_by,
7035         p_db_last_update_date          => l_dff_ref.last_update_date,
7036         x_file_who                     => l_file_who)) THEN
7037       IF (g_debug_on) THEN
7038          debug(l_func_name, 'Upload is not allowed because of customization.');
7039       END IF;
7040       GOTO label_done;
7041    END IF;
7042 
7043    IF (p_upload_mode = 'NLS') THEN
7044       --
7045       -- non-MLS translation.
7046       --
7047       IF (g_debug_on) THEN
7048          debug(l_func_name, 'Translating DFF_REF_FIELD.(non-MLS)');
7049       END IF;
7050       UPDATE fnd_default_context_fields SET
7051         last_updated_by   = l_file_who.last_updated_by,
7052         last_update_date  = l_file_who.last_update_date,
7053         last_update_login = l_file_who.last_update_login,
7054         description       = Nvl(p_description, description)
7055         WHERE application_id = (SELECT application_id
7056                                 FROM fnd_application
7057                                 WHERE application_short_name = p_application_short_name)
7058         AND descriptive_flexfield_name = p_descriptive_flexfield_name
7059         AND default_context_field_name = p_default_context_field_name
7060         AND userenv('LANG') = (SELECT language_code
7061                                FROM fnd_languages
7062                                WHERE installed_flag = 'B');
7063       IF (SQL%notfound) THEN
7064          IF (g_debug_on) THEN
7065             debug(l_func_name, 'No entity to translate.');
7066          END IF;
7067       END IF;
7068       GOTO label_done;
7069     ELSE
7070       --
7071       -- Usual upload.
7072       --
7073 
7074       --
7075       -- Make sure DFF exists.
7076       --
7077       get_dff_flx(p_application_short_name,
7078                   p_descriptive_flexfield_name,
7079                   l_dff_flx);
7080 
7081       IF (g_debug_on) THEN
7082          debug(l_func_name, 'Updating DFF_REF_FIELD.(non-MLS)');
7083       END IF;
7084       UPDATE fnd_default_context_fields SET
7085         last_updated_by   = l_file_who.last_updated_by,
7086         last_update_date  = l_file_who.last_update_date,
7087         last_update_login = l_file_who.last_update_login,
7088         description       = p_description
7089         WHERE application_id = l_dff_flx.application_id
7090         AND descriptive_flexfield_name = l_dff_flx.descriptive_flexfield_name
7091         AND default_context_field_name = p_default_context_field_name;
7092 
7093       IF (SQL%notfound) THEN
7094          IF (g_debug_on) THEN
7095             debug(l_func_name, 'Inserting DFF_REF_FIELD.(non-MLS)');
7096          END IF;
7097          INSERT INTO fnd_default_context_fields
7098            (
7099             application_id,
7100             descriptive_flexfield_name,
7101             default_context_field_name,
7102 
7103             created_by,
7104             creation_date,
7105             last_updated_by,
7106             last_update_date,
7107             last_update_login,
7108 
7109             description
7110             )
7111            VALUES
7112            (
7113             l_dff_flx.application_id,
7114             l_dff_flx.descriptive_flexfield_name,
7115             p_default_context_field_name,
7116 
7117             l_file_who.created_by,
7118             l_file_who.creation_date,
7119             l_file_who.last_updated_by,
7120             l_file_who.last_update_date,
7121             l_file_who.last_update_login,
7122 
7123             p_description
7124             );
7125       END IF;
7126    END IF;
7127 
7128    <<label_done>>
7129    done('DFF_REF_FIELD', p_upload_phase);
7130 EXCEPTION
7131    WHEN OTHERS THEN
7132       report_public_api_exception(l_func_name,
7133                                   p_upload_phase,
7134                                   p_application_short_name,
7135                                   p_descriptive_flexfield_name,
7136                                   p_default_context_field_name);
7137 END up_dff_ref_field;
7138 
7139 -- --------------------------------------------------
7140 PROCEDURE up_dff_context
7141   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
7142    p_upload_mode                  IN VARCHAR2,
7143    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
7144    p_application_short_name       IN VARCHAR2,
7145    p_descriptive_flexfield_name   IN VARCHAR2,
7146    p_descriptive_flex_context_cod IN VARCHAR2,
7147    p_owner                        IN VARCHAR2,
7148    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
7149    p_enabled_flag                 IN VARCHAR2,
7150    p_global_flag                  IN VARCHAR2,
7151    p_descriptive_flex_context_nam IN VARCHAR2,
7152    p_description                  IN VARCHAR2)
7153   IS
7154      l_func_name  VARCHAR2(80);
7155      l_dff_flx    dff_flx_type;
7156      l_dff_ctx    dff_ctx_type;
7157      l_dff_ctx_tl dff_ctx_tl_type;
7158      l_file_who   who_type;
7159      l_descriptive_flexfield_name fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE;
7160 BEGIN
7161    l_func_name := g_api_name || 'up_dff_context()';
7162    l_descriptive_flexfield_name := p_descriptive_flexfield_name;
7163 
7164    init('DFF_CONTEXT', p_upload_phase);
7165    IF (g_debug_on) THEN
7166       debug(l_func_name,
7167             'PHASE:'  || p_upload_phase ||
7168             ',UMODE:' || p_upload_mode  ||
7169             ',CMODE:' || p_custom_mode  ||
7170             ',APPS:'  || p_application_short_name ||
7171             ',DFF:'   || l_descriptive_flexfield_name ||
7172             ',CTX:'   || p_descriptive_flex_context_cod);
7173    END IF;
7174 
7175    IF (p_upload_phase = 'BEGIN') THEN
7176       --
7177       -- Gather WHO Information.
7178       --
7179       IF (get_dff_flx(p_application_short_name,
7180                       l_descriptive_flexfield_name,
7181                       l_dff_flx)) THEN
7182          IF (get_dff_ctx(l_dff_flx,
7183                          p_descriptive_flex_context_cod,
7184                          l_dff_ctx)) THEN
7185             NULL;
7186          END IF;
7187       END IF;
7188 
7189       IF (p_upload_mode = 'NLS') THEN
7190          --
7191          -- MLS translation.
7192          --
7193 
7194          --
7195          -- Gather WHO Information.
7196          --
7197          IF (get_dff_ctx_tl(l_dff_ctx,
7198                             userenv('LANG'),
7199                             l_dff_ctx_tl)) THEN
7200             NULL;
7201          END IF;
7202 
7203          --
7204          -- Check WHO Information.
7205          --
7206          IF (NOT is_upload_allowed
7207              (p_custom_mode                  => p_custom_mode,
7208               p_file_owner                   => p_owner,
7209               p_file_last_update_date        => p_last_update_date,
7210               p_db_last_updated_by           => l_dff_ctx_tl.last_updated_by,
7211               p_db_last_update_date          => l_dff_ctx_tl.last_update_date,
7212               x_file_who                     => l_file_who)) THEN
7213             IF (g_debug_on) THEN
7214                debug(l_func_name, 'Upload is not allowed because of customization.');
7215             END IF;
7216             GOTO label_done;
7217          END IF;
7218 
7219          IF (g_debug_on) THEN
7220             debug(l_func_name, 'Translating DFF_CONTEXT.(MLS)');
7221          END IF;
7222          fnd_descr_flex_contexts_pkg.translate_row
7223            (x_application_short_name       => p_application_short_name,
7224             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7225             x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7226             x_who                          => l_file_who,
7227             x_description                  => p_description,
7228             x_descriptive_flex_context_nam => p_descriptive_flex_context_nam);
7229        ELSE
7230          --
7231          -- Usual upload.
7232          --
7233 
7234          --
7235          -- Check WHO Information.
7236          --
7237          IF (NOT is_upload_allowed
7238              (p_custom_mode                  => p_custom_mode,
7239               p_file_owner                   => p_owner,
7240               p_file_last_update_date        => p_last_update_date,
7241               p_db_last_updated_by           => l_dff_ctx.last_updated_by,
7242               p_db_last_update_date          => l_dff_ctx.last_update_date,
7243               x_file_who                     => l_file_who)) THEN
7244 
7245             --
7246             -- SRS DFFs are handled in upload_srs_desc_flex().
7247             --
7248             IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%')  THEN
7249                IF (g_debug_on) THEN
7250                   debug(l_func_name, 'Upload is not allowed because of customization.');
7251                END IF;
7252                GOTO label_done;
7253             else
7254                --
7255                -- Clear the customization message
7256                --
7257                fnd_message.clear();
7258             END IF;
7259          END IF;
7260 
7261          IF (l_descriptive_flexfield_name LIKE '$SRS$.%')  THEN
7262             --
7263             -- LDT SRS Desc Flex Global Data Elements.
7264             --
7265             l_descriptive_flexfield_name := g_srs_loader_flex_name;
7266             IF (g_debug_on) THEN
7267                debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
7268             END IF;
7269          END IF;
7270 
7271          --
7272          -- Make sure DFF exists.
7273          --
7274          get_dff_flx(p_application_short_name,
7275                      l_descriptive_flexfield_name,
7276                      l_dff_flx);
7277 
7278          IF (g_debug_on) THEN
7279             debug(l_func_name, 'Uploading DFF_CONTEXT.(MLS)');
7280          END IF;
7281          fnd_descr_flex_contexts_pkg.load_row
7282            (x_application_short_name       => p_application_short_name,
7283             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7284             x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7285             x_who                          => l_file_who,
7286             x_enabled_flag                 => p_enabled_flag,
7287             x_global_flag                  => p_global_flag,
7288             x_description                  => p_description,
7289             x_descriptive_flex_context_nam => p_descriptive_flex_context_nam);
7290       END IF;
7291     ELSIF (p_upload_phase = 'END') THEN
7292       IF (p_upload_mode = 'NLS') THEN
7293          --
7294          -- MLS translation.
7295          --
7296          NULL;
7297        ELSE
7298          --
7299          -- Usual upload.
7300          --
7301          NULL;
7302       END IF;
7303     ELSE
7304       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
7305    END IF;
7306 
7307    <<label_done>>
7308    done('DFF_CONTEXT', p_upload_phase);
7309 EXCEPTION
7310    WHEN OTHERS THEN
7311       report_public_api_exception(l_func_name,
7312                                   p_upload_phase,
7313                                   p_application_short_name,
7314                                   p_descriptive_flexfield_name,
7315                                   p_descriptive_flex_context_cod);
7316 END up_dff_context;
7317 
7318 -- --------------------------------------------------
7319 PROCEDURE up_dff_segment
7320   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
7321    p_upload_mode                  IN VARCHAR2,
7322    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
7323    p_application_short_name       IN VARCHAR2,
7324    p_descriptive_flexfield_name   IN VARCHAR2,
7325    p_descriptive_flex_context_cod IN VARCHAR2,
7326    p_end_user_column_name         IN VARCHAR2,
7327    p_application_column_name      IN VARCHAR2,
7328    p_owner                        IN VARCHAR2,
7329    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
7330    p_column_seq_num               IN VARCHAR2,
7331    p_enabled_flag                 IN VARCHAR2,
7332    p_display_flag                 IN VARCHAR2,
7333    p_required_flag                IN VARCHAR2,
7334    p_security_enabled_flag        IN VARCHAR2,
7335    p_flex_value_set_name          IN VARCHAR2,
7336    p_display_size                 IN VARCHAR2,
7337    p_maximum_description_len      IN VARCHAR2,
7338    p_concatenation_description_le IN VARCHAR2,
7339    p_range_code                   IN VARCHAR2,
7340    p_default_type                 IN VARCHAR2,
7341    p_default_value                IN VARCHAR2,
7342    p_runtime_property_function    IN VARCHAR2 DEFAULT NULL,
7343    p_srw_param                    IN VARCHAR2,
7344    p_form_left_prompt             IN VARCHAR2,
7345    p_form_above_prompt            IN VARCHAR2,
7346    p_description                  IN VARCHAR2)
7347   IS
7348      l_func_name  VARCHAR2(80);
7349      l_dff_flx    dff_flx_type;
7350      l_dff_ctx    dff_ctx_type;
7351      l_dff_seg    dff_seg_type;
7352      l_dff_seg_tl dff_seg_tl_type;
7353      l_vst_set    vst_set_type;
7354      l_col        col_type;
7355      l_file_who   who_type;
7356      l_descriptive_flexfield_name fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE;
7357 BEGIN
7358    l_func_name := g_api_name || 'up_dff_segment()';
7359    l_descriptive_flexfield_name := p_descriptive_flexfield_name;
7360 
7361    init('DFF_SEGMENT', p_upload_phase);
7362    IF (g_debug_on) THEN
7363       debug(l_func_name,
7364             'PHASE:'  || p_upload_phase ||
7365             ',UMODE:' || p_upload_mode ||
7366             ',CMODE:' || p_custom_mode ||
7367             ',APPS:'  || p_application_short_name ||
7368             ',DFF:'   || l_descriptive_flexfield_name ||
7369             ',CTX:'   || p_descriptive_flex_context_cod ||
7370             ',SEG:'   || p_end_user_column_name ||
7371             ',COL:'   || p_application_column_name);
7372    END IF;
7373 
7374    --
7375    -- Gather WHO Information.
7376    --
7377    IF (get_dff_flx(p_application_short_name,
7378                    l_descriptive_flexfield_name,
7379                    l_dff_flx)) THEN
7380       IF (get_dff_ctx(l_dff_flx,
7381                       p_descriptive_flex_context_cod,
7382                       l_dff_ctx)) THEN
7383          IF (get_dff_seg(l_dff_ctx,
7384                          p_application_column_name,
7385                          l_dff_seg)) THEN
7386             NULL;
7387          END IF;
7388       END IF;
7389    END IF;
7390 
7391    IF (p_upload_mode = 'NLS') THEN
7392       --
7393       -- MLS translation.
7394       --
7395 
7396       --
7397       -- Gather WHO Information.
7398       --
7399       IF (get_dff_seg_tl(l_dff_seg,
7400                          userenv('LANG'),
7401                          l_dff_seg_tl)) THEN
7402          NULL;
7403       END IF;
7404 
7405       --
7406       -- Check WHO Information.
7407       --
7408       IF (NOT is_upload_allowed
7409           (p_custom_mode                  => p_custom_mode,
7410            p_file_owner                   => p_owner,
7411            p_file_last_update_date        => p_last_update_date,
7412            p_db_last_updated_by           => l_dff_seg_tl.last_updated_by,
7413            p_db_last_update_date          => l_dff_seg_tl.last_update_date,
7414            x_file_who                     => l_file_who)) THEN
7415          IF (g_debug_on) THEN
7416             debug(l_func_name, 'Upload is not allowed because of customization.');
7417          END IF;
7418          GOTO label_done;
7419       END IF;
7420 
7421       IF (g_debug_on) THEN
7422          debug(l_func_name, 'Translating DFF_SEGMENT.(MLS)');
7423       END IF;
7424       fnd_descr_flex_col_usage_pkg.translate_row
7425         (x_application_short_name       => p_application_short_name,
7426          x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7427          x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7428          x_application_column_name      => p_application_column_name,
7429          x_who                          => l_file_who,
7430          x_form_left_prompt             => p_form_left_prompt,
7431          x_form_above_prompt            => p_form_above_prompt,
7432          x_description                  => p_description);
7433     ELSE
7434       --
7435       -- Usual upload.
7436       --
7437 
7438       --
7439       -- Check WHO Information.
7440       --
7441       IF (NOT is_upload_allowed
7442           (p_custom_mode                  => p_custom_mode,
7443            p_file_owner                   => p_owner,
7444            p_file_last_update_date        => p_last_update_date,
7445            p_db_last_updated_by           => l_dff_seg.last_updated_by,
7446            p_db_last_update_date          => l_dff_seg.last_update_date,
7447            x_file_who                     => l_file_who)) THEN
7448 
7449          --
7450          -- SRS DFFs are handled in upload_srs_desc_flex().
7451          --
7452          IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%')  THEN
7453             IF (g_debug_on) THEN
7454                debug(l_func_name, 'Upload is not allowed because of customization.');
7455             END IF;
7456             GOTO label_done;
7457          else
7458             --
7459             -- Clear the customization message
7460             --
7461             fnd_message.clear();
7462          END IF;
7463       END IF;
7464 
7465       IF (l_descriptive_flexfield_name LIKE '$SRS$.%')  THEN
7466          --
7467          -- LDT SRS Desc Flex Global Data Elements.
7468          --
7469          l_descriptive_flexfield_name := g_srs_loader_flex_name;
7470          IF (g_debug_on) THEN
7471             debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
7472          END IF;
7473       END IF;
7474 
7475       --
7476       -- Make sure DFF, Context and Column exist.
7477       --
7478       get_dff_flx(p_application_short_name,
7479                   l_descriptive_flexfield_name,
7480                   l_dff_flx);
7481 
7482       get_dff_ctx(l_dff_flx,
7483                   p_descriptive_flex_context_cod,
7484                   l_dff_ctx);
7485 
7486       get_col(l_dff_flx.table_application_id,
7487               l_dff_flx.application_table_name,
7488               p_application_column_name,
7489               l_col);
7490 
7491       IF ((((l_col.flexfield_application_id = l_dff_flx.application_id) AND
7492             (l_col.flexfield_name = l_dff_flx.descriptive_flexfield_name)) OR
7493            (l_dff_flx.descriptive_flexfield_name LIKE '$SRS$.%')) AND
7494           (l_col.flexfield_usage_code = 'D')) THEN
7495          NULL;
7496        ELSE
7497          raise_error(l_func_name, ERROR_DFF_COL_NOT_REG,
7498                      'COL:' || l_col.column_name ||
7499                      ' is not registered properly. It is registered as ' ||
7500                      'APP Id:' || To_char(l_col.flexfield_application_id) ||
7501                      ' Flex Name:' || l_col.flexfield_name ||
7502                      ' Usage Code:' || l_col.flexfield_usage_code,
7503                      'Please use Application Developer:' ||
7504                      'Flexfield->Descriptive->Register form and ' ||
7505                      'make sure column is enabled. If this column is ' ||
7506                      'not in the list, it means it is used by another ' ||
7507                      'flexfield and you cannot use it');
7508       END IF;
7509 
7510       --
7511       -- Check for duplicate column usage between Global and any Context
7512       --
7513       DECLARE
7514         l_error_msg VARCHAR2(2000);
7515         l_ctx_code  fnd_descr_flex_contexts.descriptive_flex_context_code%TYPE;
7516       BEGIN
7517          SELECT fdfc.descriptive_flex_context_code
7518            INTO l_ctx_code
7519            FROM fnd_descr_flex_column_usages fdfcu,
7520                 fnd_descr_flex_contexts fdfc
7521           WHERE fdfcu.application_column_name = p_application_column_name
7522             AND fdfcu.descriptive_flex_context_code = fdfc.descriptive_flex_context_code
7523             AND fdfcu.descriptive_flexfield_name = fdfc.descriptive_flexfield_name
7524             AND fdfcu.application_id = fdfc.application_id
7525             AND fdfc.descriptive_flexfield_name = l_dff_ctx.descriptive_flexfield_name
7526             AND fdfc.application_id = l_dff_ctx.application_id
7527             AND fdfc.global_flag <> l_dff_ctx.global_flag
7528             AND ROWNUM < 2;
7529 
7530          IF (l_dff_ctx.global_flag = 'Y') THEN
7531             l_error_msg := 'Global Segment cannot be uploaded. ' ||
7532               'Its Column (' || p_application_column_name ||
7533               ') is already used in non-Global Context (' || l_ctx_code || ')';
7534           ELSE
7535             l_error_msg := 'Context sensitive segment cannot be uploaded. ' ||
7536               'Its Column (' || p_application_column_name ||
7537               ') is already used in Global Context';
7538          END IF;
7539 
7540          raise_error(l_func_name, ERROR_VST_GENERIC, l_error_msg);
7541       EXCEPTION
7542          WHEN no_data_found THEN
7543             NULL;
7544       END;
7545 
7546       IF (p_flex_value_set_name IS NOT NULL) THEN
7547          --
7548          -- Make sure Value Set exists.
7549          --
7550          get_vst_set(p_flex_value_set_name, l_vst_set);
7551       END IF;
7552 
7553       IF (g_debug_on) THEN
7554          debug(l_func_name, 'Uploading DFF_SEGMENT.(MLS)');
7555       END IF;
7556       fnd_descr_flex_col_usage_pkg.load_row
7557         (x_application_short_name       => p_application_short_name,
7558          x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7559          x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7560          x_application_column_name      => p_application_column_name,
7561          x_who                          => l_file_who,
7562          x_end_user_column_name         => p_end_user_column_name,
7563          x_column_seq_num               => p_column_seq_num,
7564          x_enabled_flag                 => p_enabled_flag,
7565          x_required_flag                => p_required_flag,
7566          x_security_enabled_flag        => p_security_enabled_flag,
7567          x_display_flag                 => p_display_flag,
7568          x_display_size                 => p_display_size,
7569          x_maximum_description_len      => p_maximum_description_len,
7570          x_concatenation_description_le => p_concatenation_description_le,
7571          x_flex_value_set_name          => p_flex_value_set_name,
7572          x_range_code                   => p_range_code,
7573          x_default_type                 => p_default_type,
7574          x_default_value                => p_default_value,
7575          x_runtime_property_function    => p_runtime_property_function,
7576          x_srw_param                    => p_srw_param,
7577          x_form_left_prompt             => p_form_left_prompt,
7578          x_form_above_prompt            => p_form_above_prompt,
7579          x_description                  => p_description);
7580    END IF;
7581 
7582    <<label_done>>
7583    done('DFF_SEGMENT', p_upload_phase);
7584 EXCEPTION
7585    WHEN OTHERS THEN
7586       report_public_api_exception(l_func_name,
7587                                   p_upload_phase,
7588                                   p_application_short_name,
7589                                   p_descriptive_flexfield_name,
7590                                   p_descriptive_flex_context_cod,
7591                                   p_application_column_name,
7592                                   p_end_user_column_name);
7593 END up_dff_segment;
7594 
7595 -- ==================================================
7596 --  KEY_FLEX
7597 -- ==================================================
7598 
7599 -- --------------------------------------------------
7600 -- Updates all foreign references of id_flex_num
7601 -- --------------------------------------------------
7602 PROCEDURE fix_id_flex_num(p_application_id         IN NUMBER,
7603                           p_id_flex_code           IN VARCHAR2,
7604                           p_id_flex_num_old        IN NUMBER,
7605                           p_id_flex_num_new        IN NUMBER)
7606   IS
7607 BEGIN
7608    --
7609    -- Update qualifier assignments
7610    --
7611    UPDATE fnd_segment_attribute_values
7612      SET id_flex_num = p_id_flex_num_new
7613      WHERE application_id = p_application_id
7614      AND id_flex_code = p_id_flex_code
7615      AND id_flex_num = p_id_flex_num_old;
7616 
7617    --
7618    -- Update segments
7619    --
7620    UPDATE fnd_id_flex_segments
7621      SET id_flex_num = p_id_flex_num_new
7622      WHERE application_id = p_application_id
7623      AND id_flex_code = p_id_flex_code
7624      AND id_flex_num = p_id_flex_num_old;
7625 
7626    UPDATE fnd_id_flex_segments_tl
7627      SET id_flex_num = p_id_flex_num_new
7628      WHERE application_id = p_application_id
7629      AND id_flex_code = p_id_flex_code
7630      AND id_flex_num = p_id_flex_num_old;
7631 
7632    --
7633    -- Update shorthand aliases
7634    --
7635    UPDATE fnd_shorthand_flex_aliases
7636      SET id_flex_num = p_id_flex_num_new
7637      WHERE application_id = p_application_id
7638      AND id_flex_code = p_id_flex_code
7639      AND id_flex_num = p_id_flex_num_old;
7640 
7641    --
7642    -- Update cross validation lines/rules/stats
7643    --
7644    UPDATE fnd_flex_exclude_rule_lines
7645      SET id_flex_num = p_id_flex_num_new
7646      WHERE application_id = p_application_id
7647      AND id_flex_code = p_id_flex_code
7648      AND id_flex_num = p_id_flex_num_old;
7649 
7650    UPDATE fnd_flex_include_rule_lines
7651      SET id_flex_num = p_id_flex_num_new
7652      WHERE application_id = p_application_id
7653      AND id_flex_code = p_id_flex_code
7654      AND id_flex_num = p_id_flex_num_old;
7655 
7656    UPDATE fnd_flex_validation_rule_lines
7657      SET id_flex_num = p_id_flex_num_new
7658      WHERE application_id = p_application_id
7659      AND id_flex_code = p_id_flex_code
7660      AND id_flex_num = p_id_flex_num_old;
7661 
7662    UPDATE fnd_flex_validation_rules
7663      SET id_flex_num = p_id_flex_num_new
7664      WHERE application_id = p_application_id
7665      AND id_flex_code = p_id_flex_code
7666      AND id_flex_num = p_id_flex_num_old;
7667 
7668    UPDATE fnd_flex_vdation_rules_tl
7669      SET id_flex_num = p_id_flex_num_new
7670      WHERE application_id = p_application_id
7671      AND id_flex_code = p_id_flex_code
7672      AND id_flex_num = p_id_flex_num_old;
7673 
7674    UPDATE fnd_flex_validation_rule_stats
7675      SET id_flex_num = p_id_flex_num_new
7676      WHERE application_id = p_application_id
7677      AND id_flex_code = p_id_flex_code
7678      AND id_flex_num = p_id_flex_num_old;
7679 
7680    --
7681    -- Update Account Generator Processes
7682    --
7683    UPDATE fnd_flex_workflow_processes
7684      SET id_flex_num = p_id_flex_num_new
7685      WHERE application_id = p_application_id
7686      AND id_flex_code = p_id_flex_code
7687      AND id_flex_num = p_id_flex_num_old;
7688 
7689    --
7690    -- Update structure
7691    --
7692    UPDATE fnd_id_flex_structures
7693      SET id_flex_num = p_id_flex_num_new
7694      WHERE application_id = p_application_id
7695      AND id_flex_code = p_id_flex_code
7696      AND id_flex_num = p_id_flex_num_old;
7697 
7698    UPDATE fnd_id_flex_structures_tl
7699      SET id_flex_num = p_id_flex_num_new
7700      WHERE application_id = p_application_id
7701      AND id_flex_code = p_id_flex_code
7702      AND id_flex_num = p_id_flex_num_old;
7703 
7704    --
7705    -- Delete compiled data
7706    --
7707    DELETE FROM fnd_compiled_id_flex_structs
7708      WHERE application_id = p_application_id
7709      AND id_flex_code = p_id_flex_code
7710      AND id_flex_num = p_id_flex_num_old;
7711 
7712    IF (g_debug_on) THEN
7713       debug('LDR.fix_id_flex_num', 'Old id_flex_num: ' || p_id_flex_num_old ||
7714             ', New id_flex_num: ' || p_id_flex_num_new);
7715    END IF;
7716 END fix_id_flex_num;
7717 
7718 -- --------------------------------------------------
7719 PROCEDURE up_key_flex
7720   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
7721    p_upload_mode                  IN VARCHAR2,
7722    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
7723    p_application_short_name       IN VARCHAR2,
7724    p_id_flex_code                 IN VARCHAR2,
7725    p_owner                        IN VARCHAR2,
7726    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
7727    p_table_application_short_name IN VARCHAR2,
7728    p_application_table_name       IN VARCHAR2,
7729    p_concatenated_segs_view_name  IN VARCHAR2 DEFAULT NULL,
7730    p_allow_id_valuesets           IN VARCHAR2,
7731    p_dynamic_inserts_feasible_fla IN VARCHAR2,
7732    p_index_flag                   IN VARCHAR2,
7733    p_unique_id_column_name        IN VARCHAR2,
7734    p_application_table_type       IN VARCHAR2,
7735    p_set_defining_column_name     IN VARCHAR2,
7736    p_maximum_concatenation_len    IN VARCHAR2,
7737    p_concatenation_len_warning    IN VARCHAR2,
7738    p_id_flex_name                 IN VARCHAR2,
7739    p_description                  IN VARCHAR2)
7740   IS
7741      l_func_name VARCHAR2(80);
7742      l_tbl       tbl_type;
7743      l_app       app_type;
7744      l_kff_flx   kff_flx_type;
7745      l_kff_str   kff_str_type;
7746      l_101_code  VARCHAR2(2000);
7747      l_count     NUMBER;
7748      l_file_who who_type;
7749      l_concatenated_segs_view_name fnd_id_flexs.concatenated_segs_view_name%TYPE;
7750 BEGIN
7751    l_func_name := g_api_name || 'up_key_flex()';
7752    init('KEY_FLEX', p_upload_phase);
7753    IF (g_debug_on) THEN
7754       debug(l_func_name,
7755             'PHASE:'  || p_upload_phase ||
7756             ',UMODE:' || p_upload_mode  ||
7757             ',CMODE:' || p_custom_mode  ||
7758             ',APPS:'  || p_application_short_name ||
7759             ',KFF:'   || p_id_flex_code);
7760    END IF;
7761 
7762    IF (p_upload_phase = 'BEGIN') THEN
7763       start_transaction(ENTITY_KEY_FLEX);
7764       lock_entity('KEY_FLEX',
7765                   p_application_short_name,
7766                   p_id_flex_code);
7767 
7768       g_numof_changes := 0;
7769       --
7770       -- Gather WHO Information.
7771       --
7772       IF (get_kff_flx(p_application_short_name,
7773                       p_id_flex_code,
7774                       l_kff_flx)) THEN
7775          NULL;
7776       END IF;
7777 
7778       --
7779       -- Check WHO Information.
7780       --
7781       IF (NOT is_upload_allowed
7782           (p_custom_mode                  => p_custom_mode,
7783            p_file_owner                   => p_owner,
7784            p_file_last_update_date        => p_last_update_date,
7785            p_db_last_updated_by           => l_kff_flx.last_updated_by,
7786            p_db_last_update_date          => l_kff_flx.last_update_date,
7787            x_file_who                     => l_file_who)) THEN
7788          IF (g_debug_on) THEN
7789             debug(l_func_name, 'Upload is not allowed because of customization.');
7790          END IF;
7791          GOTO label_done;
7792       END IF;
7793 
7794       IF (p_upload_mode = 'NLS') THEN
7795          --
7796          -- non-MLS translation.
7797          --
7798          IF (g_debug_on) THEN
7799             debug(l_func_name, 'Translating KEY_FLEX.(non-MLS)');
7800          END IF;
7801          UPDATE fnd_id_flexs SET
7802            last_updated_by   = l_file_who.last_updated_by,
7803            last_update_date  = l_file_who.last_update_date,
7804            last_update_login = l_file_who.last_update_login,
7805            id_flex_name      = Nvl(p_id_flex_name, id_flex_name),
7806            description       = Nvl(p_description, description)
7807            WHERE application_id = (SELECT application_id
7808                                    FROM fnd_application
7809                                    WHERE application_short_name = p_application_short_name)
7810            AND id_flex_code = p_id_flex_code
7811            AND userenv('LANG') = (SELECT language_code
7812                                   FROM fnd_languages
7813                                   WHERE installed_flag = 'B');
7814          IF (SQL%notfound) THEN
7815             IF (g_debug_on) THEN
7816                debug(l_func_name, 'No entity to translate.');
7817             END IF;
7818          END IF;
7819          GOTO label_done;
7820        ELSE
7821          --
7822          -- Usual upload.
7823          --
7824 
7825          --
7826          -- Make sure Application and Table exist.
7827          --
7828          get_app(p_application_short_name,
7829                  l_app);
7830 
7831          get_tbl(p_table_application_short_name,
7832                  p_application_table_name,
7833                  l_tbl);
7834 
7835          --
7836          -- Intentional/Unintentional NULL handling.
7837          --
7838          IF (p_concatenated_segs_view_name IS NULL) THEN
7839             l_concatenated_segs_view_name := l_kff_flx.concatenated_segs_view_name;
7840           ELSIF (p_concatenated_segs_view_name = g_null_value) THEN
7841             l_concatenated_segs_view_name := NULL;
7842           ELSE
7843             l_concatenated_segs_view_name := p_concatenated_segs_view_name;
7844          END IF;
7845 
7846          IF (g_debug_on) THEN
7847             debug(l_func_name, 'Updating KEY_FLEX.(non-MLS)');
7848          END IF;
7849          UPDATE fnd_id_flexs SET
7850            last_updated_by               = l_file_who.last_updated_by,
7851            last_update_date              = l_file_who.last_update_date,
7852            last_update_login             = l_file_who.last_update_login,
7853            table_application_id          = l_tbl.application_id,
7854            application_table_name        = l_tbl.table_name,
7855            concatenated_segs_view_name   = l_concatenated_segs_view_name,
7856            allow_id_valuesets            = p_allow_id_valuesets,
7857            dynamic_inserts_feasible_flag = p_dynamic_inserts_feasible_fla,
7858            index_flag                    = p_index_flag,
7859            unique_id_column_name         = p_unique_id_column_name,
7860            application_table_type        = p_application_table_type,
7861            set_defining_column_name      = p_set_defining_column_name,
7862            maximum_concatenation_len     = p_maximum_concatenation_len,
7863            concatenation_len_warning     = p_concatenation_len_warning,
7864            id_flex_name                  = p_id_flex_name,
7865            description                   = p_description
7866            WHERE application_id = l_app.application_id
7867            AND id_flex_code = p_id_flex_code;
7868 
7869          IF (SQL%notfound) THEN
7870             IF (g_debug_on) THEN
7871                debug(l_func_name, 'Inserting KEY_FLEX.(non-MLS)');
7872             END IF;
7873             INSERT INTO fnd_id_flexs
7874               (
7875                application_id,
7876                id_flex_code,
7877 
7878                created_by,
7879                creation_date,
7880                last_updated_by,
7881                last_update_date,
7882                last_update_login,
7883 
7884                table_application_id,
7885                application_table_name,
7886                concatenated_segs_view_name,
7887                allow_id_valuesets,
7888                dynamic_inserts_feasible_flag,
7889                index_flag,
7890                unique_id_column_name,
7891                application_table_type,
7892                set_defining_column_name,
7893                maximum_concatenation_len,
7894                concatenation_len_warning,
7895                id_flex_name,
7896                description
7897                )
7898               VALUES
7899               (
7900                l_app.application_id,
7901                p_id_flex_code,
7902 
7903                l_file_who.created_by,
7904                l_file_who.creation_date,
7905                l_file_who.last_updated_by,
7906                l_file_who.last_update_date,
7907                l_file_who.last_update_login,
7908 
7909                l_tbl.application_id,
7910                l_tbl.table_name,
7911                l_concatenated_segs_view_name,
7912                p_allow_id_valuesets,
7913                p_dynamic_inserts_feasible_fla,
7914                p_index_flag,
7915                p_unique_id_column_name,
7916                p_application_table_type,
7917                p_set_defining_column_name,
7918                p_maximum_concatenation_len,
7919                p_concatenation_len_warning,
7920                p_id_flex_name,
7921                p_description
7922                );
7923          END IF;
7924       END IF;
7925     ELSIF (p_upload_phase = 'END') THEN
7926       IF (p_upload_mode = 'NLS') THEN
7927          --
7928          -- non-MLS translation.
7929          --
7930          NULL;
7931        ELSE
7932          --
7933          -- Usual upload.
7934          --
7935 
7936          --
7937          -- Make sure columns are marked in fnd_columns.
7938          --
7939          fnd_flex_loader_apis.up_kff_column
7940            (p_upload_phase           => 'LEAF',
7941             p_upload_mode            => NULL,
7942             p_application_short_name => p_application_short_name,
7943             p_id_flex_code           => p_id_flex_code,
7944             p_column_name            => p_unique_id_column_name,
7945             p_owner                  => p_owner,
7946             p_last_update_date       => p_last_update_date,
7947             p_flexfield_usage_code   => 'I');
7948 
7949          IF (p_set_defining_column_name IS NOT NULL) THEN
7950             fnd_flex_loader_apis.up_kff_column
7951               (p_upload_phase           => 'LEAF',
7952                p_upload_mode            => NULL,
7953                p_application_short_name => p_application_short_name,
7954                p_id_flex_code           => p_id_flex_code,
7955                p_column_name            => p_set_defining_column_name,
7956                p_owner                  => p_owner,
7957                p_last_update_date       => p_last_update_date,
7958                p_flexfield_usage_code   => 'S');
7959          END IF;
7960 
7961          --
7962          -- Make sure there is at least one structure.
7963          --
7964          get_app(p_application_short_name,
7965                  l_app);
7966 
7967          SELECT COUNT(*)
7968            INTO l_count
7969            FROM fnd_id_flex_structures
7970            WHERE application_id = l_app.application_id
7971            AND id_flex_code = p_id_flex_code;
7972 
7973          IF (l_count = 0) THEN
7974             --
7975             -- Create the 101 structure.
7976             --
7977             get_kff_flx(p_application_short_name,
7978                         p_id_flex_code,
7979                         l_kff_flx);
7980 
7981             l_101_code := REPLACE(Upper(p_id_flex_name),' ','_');
7982             fnd_flex_loader_apis.up_kff_structure
7983               (p_upload_phase                 => 'BEGIN',
7984                p_upload_mode                  => NULL,
7985                p_application_short_name       => p_application_short_name,
7986                p_id_flex_code                 => p_id_flex_code,
7987                p_id_flex_structure_code       => l_101_code,
7988                p_owner                        => p_owner,
7989                p_last_update_date             => p_last_update_date,
7990                p_concatenated_segment_delimit => '.',
7991                p_cross_segment_validation_fla => 'N',
7992                p_dynamic_inserts_allowed_flag => 'N',
7993                p_enabled_flag                 => 'Y',
7994                p_freeze_flex_definition_flag  => 'N',
7995                p_freeze_structured_hier_flag  => 'N',
7996                p_shorthand_enabled_flag       => 'N',
7997                p_shorthand_length             => NULL,
7998                p_structure_view_name          => NULL,
7999                p_id_flex_structure_name       => p_id_flex_name,
8000                p_description                  => NULL,
8001                p_shorthand_prompt             => NULL);
8002 
8003             --
8004             -- Update the id_flex_num to 101.
8005             --
8006             get_kff_str(l_kff_flx,
8007                         l_101_code,
8008                         l_kff_str);
8009 
8010             IF (l_kff_str.id_flex_num <> 101) THEN
8011                fix_id_flex_num(p_application_id  => l_kff_str.application_id,
8012                                p_id_flex_code    => l_kff_str.id_flex_code,
8013                                p_id_flex_num_old => l_kff_str.id_flex_num,
8014                                p_id_flex_num_new => 101);
8015             END IF;
8016          END IF;
8017 
8018          --
8019          -- Populate the missing wf processes.
8020          --
8021          DECLARE
8022             CURSOR missing_wfp_cur(p_application_id IN NUMBER,
8023                                    p_id_flex_code   IN VARCHAR2)
8024               IS
8025                  SELECT
8026                    ifst.id_flex_structure_code,
8027                    fwp.wf_item_type
8028                    FROM (SELECT DISTINCT
8029                          fwpx.application_id,
8030                          fwpx.id_flex_code,
8031                          fwpx.wf_item_type
8032                          FROM fnd_flex_workflow_processes fwpx
8033                          ) fwp,
8034                         fnd_id_flex_structures ifst
8035                    WHERE ifst.application_id = p_application_id
8036                    AND ifst.id_flex_code = p_id_flex_code
8037                    AND fwp.application_id = ifst.application_id
8038                    AND fwp.id_flex_code = ifst.id_flex_code
8039                    AND NOT exists
8040                    (SELECT NULL
8041                     FROM fnd_flex_workflow_processes fwp2
8042                     WHERE fwp2.application_id = ifst.application_id
8043                     AND fwp2.id_flex_code = ifst.id_flex_code
8044                     AND fwp2.id_flex_num = ifst.id_flex_num
8045                     AND fwp2.wf_item_type = fwp.wf_item_type);
8046          BEGIN
8047             FOR missing_wfp_rec IN missing_wfp_cur(l_app.application_id,
8048                                                    p_id_flex_code)
8049               LOOP
8050                  up_kff_wf_process
8051                    (p_upload_phase           => 'LEAF',
8052                     p_upload_mode            => NULL,
8053                     p_application_short_name => p_application_short_name,
8054                     p_id_flex_code           => p_id_flex_code,
8055                     p_id_flex_structure_code => missing_wfp_rec.id_flex_structure_code,
8056                     p_wf_item_type           => missing_wfp_rec.wf_item_type,
8057                     p_owner                  => p_owner,
8058                     p_last_update_date       => p_last_update_date,
8059                     p_wf_process_name        => 'DEFAULT_ACCOUNT_GENERATION');
8060               END LOOP;
8061          END;
8062       END IF;
8063       --
8064       -- Compile Flex, Generate View.
8065       --
8066       IF (g_numof_changes > 0) THEN
8067          call_cp(p_mode                       => 'KFF',
8068                  p_upload_mode                => p_upload_mode,
8069                  p_application_short_name     => p_application_short_name,
8070                  p_id_flex_code               => p_id_flex_code);
8071       END IF;
8072       finish_transaction(ENTITY_KEY_FLEX);
8073     ELSE
8074       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
8075    END IF;
8076 
8077    <<label_done>>
8078    done('KEY_FLEX', p_upload_phase);
8079 EXCEPTION
8080    WHEN OTHERS THEN
8081       report_public_api_exception(l_func_name,
8082                                   p_upload_phase,
8083                                   p_application_short_name,
8084                                   p_id_flex_code);
8085 
8086       BEGIN
8087          release_entity();
8088          IF (p_upload_phase = 'END') THEN
8089             finish_transaction(ENTITY_KEY_FLEX);
8090          END IF;
8091       EXCEPTION
8092          WHEN OTHERS THEN
8093             report_public_api_exception(l_func_name,
8094                                         p_upload_phase,
8095                                         p_application_short_name,
8096                                         p_id_flex_code);
8097       END;
8098 END up_key_flex;
8099 
8100 -- --------------------------------------------------
8101 PROCEDURE up_kff_column
8102   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8103    p_upload_mode                  IN VARCHAR2,
8104    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8105    p_application_short_name       IN VARCHAR2,
8106    p_id_flex_code                 IN VARCHAR2,
8107    p_column_name                  IN VARCHAR2,
8108    p_owner                        IN VARCHAR2,
8109    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8110    p_flexfield_usage_code         IN VARCHAR2)
8111   IS
8112      l_func_name VARCHAR2(80);
8113      l_kff_flx   kff_flx_type;
8114      l_col       col_type;
8115      l_file_who  who_type;
8116 BEGIN
8117    l_func_name := g_api_name || 'up_kff_column()';
8118    init('KFF_COLUMN', p_upload_phase);
8119    IF (g_debug_on) THEN
8120       debug(l_func_name,
8121             'PHASE:'  || p_upload_phase ||
8122             ',UMODE:' || p_upload_mode ||
8123             ',CMODE:' || p_custom_mode ||
8124             ',APPS:'  || p_application_short_name ||
8125             ',KFF:'   || p_id_flex_code ||
8126             ',COL:'   || p_column_name ||
8127             ',USG:'   || p_flexfield_usage_code);
8128    END IF;
8129 
8130    IF (p_upload_mode = 'NLS') THEN
8131       --
8132       -- No translation here.
8133       --
8134       IF (g_debug_on) THEN
8135          debug(l_func_name, 'No translation here.');
8136       END IF;
8137       GOTO label_done;
8138    END IF;
8139 
8140    --
8141    -- Make sure KFF and Column exist.
8142    --
8143    get_kff_flx(p_application_short_name,
8144                p_id_flex_code,
8145                l_kff_flx);
8146 
8147    get_col(l_kff_flx.table_application_id,
8148            l_kff_flx.application_table_name,
8149            p_column_name,
8150            l_col);
8151 
8152    --
8153    -- Check WHO Information.
8154    --
8155    IF (NOT is_upload_allowed
8156        (p_custom_mode                  => p_custom_mode,
8157         p_file_owner                   => p_owner,
8158         p_file_last_update_date        => p_last_update_date,
8159         p_db_last_updated_by           => l_col.last_updated_by,
8160         p_db_last_update_date          => l_col.last_update_date,
8161         x_file_who                     => l_file_who)) THEN
8162       IF (g_debug_on) THEN
8163          debug(l_func_name, 'Upload is not allowed because of customization.');
8164          debug(l_func_name, 'For data integrity upload must be done.');
8165       END IF;
8166       --
8167       -- Clear the customization message
8168       --
8169       fnd_message.clear();
8170    END IF;
8171 
8172    --
8173    -- Usual upload.
8174    --
8175    IF (p_flexfield_usage_code IN ('I','S','Q','K')) THEN
8176       --
8177       -- Make sure column is not in use.
8178       --
8179       IF ((((l_col.flexfield_application_id IS NULL) OR
8180             (l_col.flexfield_application_id = l_kff_flx.application_id)) AND
8181            ((l_col.flexfield_name IS NULL) OR
8182             (l_col.flexfield_name = p_id_flex_code)) AND
8183            ((l_col.flexfield_usage_code IS NULL) OR
8184             (l_col.flexfield_usage_code = p_flexfield_usage_code))) OR
8185           (l_col.flexfield_usage_code = 'N')) THEN
8186 
8187          IF (g_debug_on) THEN
8188             debug(l_func_name, 'Updating KFF_COLUMN.(no-TL)');
8189          END IF;
8190          UPDATE fnd_columns SET
8191            last_updated_by          = l_file_who.last_updated_by,
8192            last_update_date         = l_file_who.last_update_date,
8193            last_update_login        = l_file_who.last_update_login,
8194            flexfield_application_id = NULL,
8195            flexfield_name           = NULL,
8196            flexfield_usage_code     = p_flexfield_usage_code
8197            WHERE application_id = l_col.application_id
8198            AND table_id = l_col.table_id
8199            AND column_name = l_col.column_name;
8200          IF (SQL%rowcount > 0) THEN
8201             g_numof_changes := g_numof_changes + 1;
8202          END IF;
8203        ELSE
8204          raise_error(l_func_name, ERROR_KFF_COL_USED,
8205                      'COL:' || p_column_name || ' is used by ' ||
8206                      'APP Id:' || To_char(l_col.flexfield_application_id) ||
8207                      ' Flex Name:' || l_col.flexfield_name ||
8208                      ' Usage Code:' || l_col.flexfield_usage_code,
8209                      'You cannot use it in another flexfield');
8210       END IF;
8211    END IF;
8212 
8213    <<label_done>>
8214    done('KFF_COLUMN', p_upload_phase);
8215 EXCEPTION
8216    WHEN OTHERS THEN
8217       report_public_api_exception(l_func_name,
8218                                   p_upload_phase,
8219                                   p_application_short_name,
8220                                   p_id_flex_code,
8221                                   p_column_name);
8222 END up_kff_column;
8223 
8224 -- --------------------------------------------------
8225 PROCEDURE up_kff_flex_qual
8226   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8227    p_upload_mode                  IN VARCHAR2,
8228    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8229    p_application_short_name       IN VARCHAR2,
8230    p_id_flex_code                 IN VARCHAR2,
8231    p_segment_attribute_type       IN VARCHAR2,
8232    p_owner                        IN VARCHAR2,
8233    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8234    p_global_flag                  IN VARCHAR2,
8235    p_required_flag                IN VARCHAR2,
8236    p_unique_flag                  IN VARCHAR2,
8237    p_segment_prompt               IN VARCHAR2,
8238    p_description                  IN VARCHAR2)
8239   IS
8240      l_func_name VARCHAR2(80);
8241      l_kff_flx   kff_flx_type;
8242      l_kff_flq   kff_flq_type;
8243      l_file_who  who_type;
8244 BEGIN
8245    l_func_name := g_api_name || 'up_kff_flex_qual()';
8246    init('KFF_FLEX_QUAL', p_upload_phase);
8247    IF (g_debug_on) THEN
8248       debug(l_func_name,
8249             'PHASE:'  || p_upload_phase ||
8250             ',UMODE:' || p_upload_mode  ||
8251             ',CMODE:' || p_custom_mode  ||
8252             ',APPS:'  || p_application_short_name ||
8253             ',KFF:'   || p_id_flex_code ||
8254             ',FLEXQ:' || p_segment_attribute_type);
8255    END IF;
8256 
8257    IF (p_upload_phase = 'BEGIN') THEN
8258       --
8259       -- Gather WHO Information.
8260       --
8261       IF (get_kff_flx(p_application_short_name,
8262                       p_id_flex_code,
8263                       l_kff_flx)) THEN
8264          IF (get_kff_flq(l_kff_flx,
8265                          p_segment_attribute_type,
8266                          l_kff_flq)) THEN
8267             NULL;
8268          END IF;
8269       END IF;
8270 
8271       --
8272       -- Check WHO Information.
8273       --
8274       IF (NOT is_upload_allowed
8275           (p_custom_mode                  => p_custom_mode,
8276            p_file_owner                   => p_owner,
8277            p_file_last_update_date        => p_last_update_date,
8278            p_db_last_updated_by           => l_kff_flq.last_updated_by,
8279            p_db_last_update_date          => l_kff_flq.last_update_date,
8280            x_file_who                     => l_file_who)) THEN
8281          IF (g_debug_on) THEN
8282             debug(l_func_name, 'Upload is not allowed because of customization.');
8283          END IF;
8284          GOTO label_done;
8285       END IF;
8286 
8287       IF (p_upload_mode = 'NLS') THEN
8288          --
8289          -- non-MLS translation.
8290          --
8291          IF (g_debug_on) THEN
8292             debug(l_func_name, 'Translating KFF_FLEX_QUAL.(non-MLS)');
8293          END IF;
8294          UPDATE fnd_segment_attribute_types SET
8295            last_updated_by   = l_file_who.last_updated_by,
8296            last_update_date  = l_file_who.last_update_date,
8297            last_update_login = l_file_who.last_update_login,
8298            segment_prompt    = Nvl(p_segment_prompt, segment_prompt),
8299            description       = Nvl(p_description, description)
8300            WHERE application_id = (SELECT application_id
8301                                    FROM fnd_application
8302                                    WHERE application_short_name = p_application_short_name)
8303            AND id_flex_code = p_id_flex_code
8304            AND segment_attribute_type = p_segment_attribute_type
8305            AND userenv('LANG') = (SELECT language_code
8306                                   FROM fnd_languages
8307                                   WHERE installed_flag = 'B');
8308          IF (SQL%notfound) THEN
8309             IF (g_debug_on) THEN
8310                debug(l_func_name, 'No entity to translate.');
8311             END IF;
8312          END IF;
8313          GOTO label_done;
8314        ELSE
8315          --
8316          -- Usual upload.
8317          --
8318 
8319          --
8320          -- Make sure KFF exists.
8321          --
8322          get_kff_flx(p_application_short_name,
8323                      p_id_flex_code,
8324                      l_kff_flx);
8325 
8326          IF (g_debug_on) THEN
8327             debug(l_func_name, 'Updating KFF_FLEX_QUAL.(non-MLS)');
8328          END IF;
8329          UPDATE fnd_segment_attribute_types SET
8330            last_updated_by   = l_file_who.last_updated_by,
8331            last_update_date  = l_file_who.last_update_date,
8332            last_update_login = l_file_who.last_update_login,
8333            global_flag       = p_global_flag,
8334            required_flag     = p_required_flag,
8335            unique_flag       = p_unique_flag,
8336            segment_prompt    = p_segment_prompt,
8337            description       = p_description
8338            WHERE application_id = l_kff_flx.application_id
8339            AND id_flex_code = l_kff_flx.id_flex_code
8340            AND segment_attribute_type = p_segment_attribute_type;
8341 
8342          IF (SQL%notfound) THEN
8343             IF (g_debug_on) THEN
8344                debug(l_func_name, 'Inserting KFF_FLEX_QUAL.(non-MLS)');
8345             END IF;
8346             INSERT INTO fnd_segment_attribute_types
8347               (
8348                application_id,
8349                id_flex_code,
8350                segment_attribute_type,
8351 
8352                created_by,
8353                creation_date,
8354                last_updated_by,
8355                last_update_date,
8356                last_update_login,
8357 
8358                global_flag,
8359                required_flag,
8360                unique_flag,
8361                segment_prompt,
8362                description
8363                )
8364               VALUES
8365               (
8366                l_kff_flx.application_id,
8367                l_kff_flx.id_flex_code,
8368                p_segment_attribute_type,
8369 
8370                l_file_who.created_by,
8371                l_file_who.creation_date,
8372                l_file_who.last_updated_by,
8373                l_file_who.last_update_date,
8374                l_file_who.last_update_login,
8375 
8376                p_global_flag,
8377                p_required_flag,
8378                p_unique_flag,
8379                p_segment_prompt,
8380                p_description
8381                );
8382          END IF;
8383          --
8384          -- Populate the cross product table.
8385          --
8386          populate_kff_flexq_assign();
8387 
8388       END IF;
8389     ELSIF (p_upload_phase = 'END') THEN
8390       IF (p_upload_mode = 'NLS') THEN
8391          --
8392          -- non-MLS translation.
8393          --
8394          NULL;
8395        ELSE
8396          --
8397          -- Usual upload.
8398          --
8399          NULL;
8400       END IF;
8401     ELSE
8402       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
8403    END IF;
8404 
8405    <<label_done>>
8406    done('KFF_FLEX_QUAL', p_upload_phase);
8407 EXCEPTION
8408    WHEN OTHERS THEN
8409       report_public_api_exception(l_func_name,
8410                                   p_upload_phase,
8411                                   p_application_short_name,
8412                                   p_id_flex_code,
8413                                   p_segment_attribute_type);
8414 END up_kff_flex_qual;
8415 
8416 -- --------------------------------------------------
8417 PROCEDURE up_kff_segment_qual
8418   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8419    p_upload_mode                  IN VARCHAR2,
8420    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8421    p_application_short_name       IN VARCHAR2,
8422    p_id_flex_code                 IN VARCHAR2,
8423    p_segment_attribute_type       IN VARCHAR2,
8424    p_value_attribute_type         IN VARCHAR2,
8425    p_owner                        IN VARCHAR2,
8426    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8427    p_required_flag                IN VARCHAR2,
8428    p_application_column_name      IN VARCHAR2,
8429    p_default_value                IN VARCHAR2,
8430    p_lookup_type                  IN VARCHAR2,
8431    p_derivation_rule_code         IN VARCHAR2,
8432    p_derivation_rule_value1       IN VARCHAR2,
8433    p_derivation_rule_value2       IN VARCHAR2,
8434    p_prompt                       IN VARCHAR2,
8435    p_description                  IN VARCHAR2)
8436   IS
8437      l_func_name  VARCHAR2(80);
8438      l_kff_flx    kff_flx_type;
8439      l_kff_flq    kff_flq_type;
8440      l_kff_sgq    kff_sgq_type;
8441      l_kff_sgq_tl kff_sgq_tl_type;
8442      l_file_who   who_type;
8443 BEGIN
8444    l_func_name := g_api_name || 'up_kff_segment_qual()';
8445    init('KFF_SEGMENT_QUAL', p_upload_phase);
8446    IF (g_debug_on) THEN
8447       debug(l_func_name,
8448             'PHASE:'  || p_upload_phase ||
8449             ',UMODE:' || p_upload_mode ||
8450             ',CMODE:' || p_custom_mode ||
8451             ',APPS:'  || p_application_short_name ||
8452             ',KFF:'   || p_id_flex_code ||
8453             ',FLEXQ:' || p_segment_attribute_type ||
8454             ',SEGQ:'  || p_value_attribute_type);
8455    END IF;
8456 
8457    --
8458    -- Gather WHO Information.
8459    --
8460    IF (get_kff_flx(p_application_short_name,
8461                    p_id_flex_code,
8462                    l_kff_flx)) THEN
8463       IF (get_kff_flq(l_kff_flx,
8464                       p_segment_attribute_type,
8465                       l_kff_flq)) THEN
8466          IF (get_kff_sgq(l_kff_flq,
8467                          p_value_attribute_type,
8468                          l_kff_sgq)) THEN
8469             NULL;
8470          END IF;
8471       END IF;
8472    END IF;
8473 
8474    IF (p_upload_mode = 'NLS') THEN
8475       --
8476       -- MLS translation.
8477       --
8478 
8479       --
8480       -- Gather WHO Information.
8481       --
8482       IF (get_kff_sgq_tl(l_kff_sgq,
8483                          userenv('LANG'),
8484                          l_kff_sgq_tl)) THEN
8485          NULL;
8486       END IF;
8487 
8488       --
8489       -- Check WHO Information.
8490       --
8491       IF (NOT is_upload_allowed
8492           (p_custom_mode                  => p_custom_mode,
8493            p_file_owner                   => p_owner,
8494            p_file_last_update_date        => p_last_update_date,
8495            p_db_last_updated_by           => l_kff_sgq_tl.last_updated_by,
8496            p_db_last_update_date          => l_kff_sgq_tl.last_update_date,
8497            x_file_who                     => l_file_who)) THEN
8498          IF (g_debug_on) THEN
8499             debug(l_func_name, 'Upload is not allowed because of customization.');
8500          END IF;
8501          GOTO label_done;
8502       END IF;
8503 
8504       IF (g_debug_on) THEN
8505          debug(l_func_name, 'Translating KFF_SEGMENT_QUAL.(MLS)');
8506       END IF;
8507       fnd_val_attribute_types_pkg.translate_row
8508         (x_application_short_name       => p_application_short_name,
8509          x_id_flex_code                 => p_id_flex_code,
8510          x_segment_attribute_type       => p_segment_attribute_type,
8511          x_value_attribute_type         => p_value_attribute_type,
8512          x_who                          => l_file_who,
8513          x_prompt                       => p_prompt,
8514          x_description                  => p_description);
8515       GOTO label_done;
8516     ELSE
8517       --
8518       -- Usual upload.
8519       --
8520 
8521       --
8522       -- Check WHO Information.
8523       --
8524       IF (NOT is_upload_allowed
8525           (p_custom_mode                  => p_custom_mode,
8526            p_file_owner                   => p_owner,
8527            p_file_last_update_date        => p_last_update_date,
8528            p_db_last_updated_by           => l_kff_sgq.last_updated_by,
8529            p_db_last_update_date          => l_kff_sgq.last_update_date,
8530            x_file_who                     => l_file_who)) THEN
8531          IF (g_debug_on) THEN
8532             debug(l_func_name, 'Upload is not allowed because of customization.');
8533          END IF;
8534          GOTO label_done;
8535       END IF;
8536 
8537       --
8538       -- Make sure KFF and Flexfield Qualifier exist.
8539       --
8540       get_kff_flx(p_application_short_name,
8541                   p_id_flex_code,
8542                   l_kff_flx);
8543 
8544       get_kff_flq(l_kff_flx,
8545                   p_segment_attribute_type,
8546                   l_kff_flq);
8547 
8548       IF (g_debug_on) THEN
8549          debug(l_func_name, 'Uploading KFF_SEGMENT_QUAL.(MLS)');
8550       END IF;
8551       fnd_val_attribute_types_pkg.load_row
8552         (x_application_short_name       => p_application_short_name,
8553          x_id_flex_code                 => p_id_flex_code,
8554          x_segment_attribute_type       => p_segment_attribute_type,
8555          x_value_attribute_type         => p_value_attribute_type,
8556          x_who                          => l_file_who,
8557          x_required_flag                => p_required_flag,
8558          x_application_column_name      => p_application_column_name,
8559          x_default_value                => p_default_value,
8560          x_lookup_type                  => p_lookup_type,
8561          x_derivation_rule_code         => p_derivation_rule_code,
8562          x_derivation_rule_value1       => p_derivation_rule_value1,
8563          x_derivation_rule_value2       => p_derivation_rule_value2,
8564          x_prompt                       => p_prompt,
8565          x_description                  => p_description);
8566 
8567       --
8568       -- Make sure application column is marked in fnd_columns.
8569       --
8570       fnd_flex_loader_apis.up_kff_column
8571         (p_upload_phase           => 'LEAF',
8572          p_upload_mode            => NULL,
8573          p_application_short_name => p_application_short_name,
8574          p_id_flex_code           => p_id_flex_code,
8575          p_column_name            => p_application_column_name,
8576          p_owner                  => p_owner,
8577          p_last_update_date       => p_last_update_date,
8578          p_flexfield_usage_code   => 'Q');
8579 
8580       --
8581       -- Populate the cross product table.
8582       --
8583       populate_kff_segq_assign();
8584 
8585    END IF;
8586 
8587    <<label_done>>
8588    done('KFF_SEGMENT_QUAL', p_upload_phase);
8589 EXCEPTION
8590    WHEN OTHERS THEN
8591       report_public_api_exception(l_func_name,
8592                                   p_upload_phase,
8593                                   p_application_short_name,
8594                                   p_id_flex_code,
8595                                   p_segment_attribute_type,
8596                                   p_value_attribute_type);
8597 END up_kff_segment_qual;
8598 
8599 -- --------------------------------------------------
8600 FUNCTION is_single_structure_kff(p_kff_flx IN kff_flx_type)
8601   RETURN BOOLEAN
8602   IS
8603      l_return BOOLEAN;
8604 BEGIN
8605    l_return := FALSE;
8606 
8607    IF ((p_kff_flx.set_defining_column_name IS NULL) OR
8608        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MSTK') OR
8609        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MTLL') OR
8610        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MICG') OR
8611        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MDSP') OR
8612        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'SERV')) THEN
8613       l_return := TRUE;
8614    END IF;
8615 
8616    RETURN l_return;
8617 
8618 END is_single_structure_kff;
8619 
8620 -- --------------------------------------------------
8621 PROCEDURE up_kff_structure
8622   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8623    p_upload_mode                  IN VARCHAR2,
8624    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8625    p_application_short_name       IN VARCHAR2,
8626    p_id_flex_code                 IN VARCHAR2,
8627    p_id_flex_structure_code       IN VARCHAR2,
8628    p_owner                        IN VARCHAR2,
8629    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8630    p_concatenated_segment_delimit IN VARCHAR2,
8631    p_cross_segment_validation_fla IN VARCHAR2,
8632    p_dynamic_inserts_allowed_flag IN VARCHAR2,
8633    p_enabled_flag                 IN VARCHAR2,
8634    p_freeze_flex_definition_flag  IN VARCHAR2,
8635    p_freeze_structured_hier_flag  IN VARCHAR2,
8636    p_shorthand_enabled_flag       IN VARCHAR2,
8637    p_shorthand_length             IN VARCHAR2,
8638    p_structure_view_name          IN VARCHAR2,
8639    p_id_flex_structure_name       IN VARCHAR2,
8640    p_description                  IN VARCHAR2,
8641    p_shorthand_prompt             IN VARCHAR2)
8642   IS
8643      l_func_name  VARCHAR2(80);
8644      l_kff_flx    kff_flx_type;
8645      l_kff_str    kff_str_type;
8646      l_kff_str_tl kff_str_tl_type;
8647      l_file_who   who_type;
8648      l_count      NUMBER;
8649      l_kff_str2   kff_str_type;
8650 BEGIN
8651    l_func_name := g_api_name || 'up_kff_structure()';
8652    init('KFF_STRUCTURE', p_upload_phase);
8653    IF (g_debug_on) THEN
8654       debug(l_func_name,
8655             'PHASE:'  || p_upload_phase ||
8656             ',UMODE:' || p_upload_mode  ||
8657             ',CMODE:' || p_custom_mode  ||
8658             ',APPS:'  || p_application_short_name ||
8659             ',KFF:'   || p_id_flex_code ||
8660             ',STR:'   || p_id_flex_structure_code);
8661    END IF;
8662 
8663    IF (p_upload_phase = 'BEGIN') THEN
8664       g_numof_changes_kff_str := g_numof_changes;
8665       --
8666       -- Gather WHO Information.
8667       --
8668       IF (get_kff_flx(p_application_short_name,
8669                       p_id_flex_code,
8670                       l_kff_flx)) THEN
8671          IF (get_kff_str(l_kff_flx,
8672                          p_id_flex_structure_code,
8673                          l_kff_str)) THEN
8674             NULL;
8675          END IF;
8676       END IF;
8677 
8678       IF (p_upload_mode = 'NLS') THEN
8679          --
8680          -- MLS translation.
8681          --
8682 
8683          --
8684          -- Gather WHO Information.
8685          --
8686          IF (get_kff_str_tl(l_kff_str,
8687                             userenv('LANG'),
8688                             l_kff_str_tl)) THEN
8689             NULL;
8690          END IF;
8691 
8692          --
8693          -- Check WHO Information.
8694          --
8695          IF (NOT is_upload_allowed
8696              (p_custom_mode                  => p_custom_mode,
8697               p_file_owner                   => p_owner,
8698               p_file_last_update_date        => p_last_update_date,
8699               p_db_last_updated_by           => l_kff_str_tl.last_updated_by,
8700               p_db_last_update_date          => l_kff_str_tl.last_update_date,
8701               x_file_who                     => l_file_who)) THEN
8702             IF (g_debug_on) THEN
8703                debug(l_func_name, 'Upload is not allowed because of customization.');
8704             END IF;
8705             GOTO label_done;
8706          END IF;
8707 
8708          IF (g_debug_on) THEN
8709             debug(l_func_name, 'Translating KFF_STRUCTURE.(MLS)');
8710          END IF;
8711          fnd_id_flex_structures_pkg.translate_row
8712            (x_application_short_name       => p_application_short_name,
8713             x_id_flex_code                 => p_id_flex_code,
8714             x_id_flex_structure_code       => p_id_flex_structure_code,
8715             x_who                          => l_file_who,
8716             x_id_flex_structure_name       => p_id_flex_structure_name,
8717             x_description                  => p_description,
8718             x_shorthand_prompt             => p_shorthand_prompt);
8719        ELSE
8720          --
8721          -- Usual upload.
8722          --
8723 
8724          --
8725          -- Check WHO Information.
8726          --
8727          IF (NOT is_upload_allowed
8728              (p_custom_mode                  => p_custom_mode,
8729               p_file_owner                   => p_owner,
8730               p_file_last_update_date        => p_last_update_date,
8731               p_db_last_updated_by           => l_kff_str.last_updated_by,
8732               p_db_last_update_date          => l_kff_str.last_update_date,
8733               x_file_who                     => l_file_who)) THEN
8734             IF (g_debug_on) THEN
8735                debug(l_func_name, 'Upload is not allowed because of customization.');
8736             END IF;
8737             GOTO label_done;
8738          END IF;
8739 
8740          --
8741          -- Make sure KFF exists.
8742          --
8743          get_kff_flx(p_application_short_name,
8744                      p_id_flex_code,
8745                      l_kff_flx);
8746 
8747          --
8748          -- Check the consistency of single structure KFFs.
8749          --
8750          IF (is_single_structure_kff(l_kff_flx)) THEN
8751 
8752             SELECT COUNT(*)
8753               INTO l_count
8754               FROM fnd_id_flex_structures
8755               WHERE application_id = l_kff_flx.application_id
8756               AND id_flex_code = l_kff_flx.id_flex_code;
8757 
8758             IF (l_count > 1) THEN
8759                --
8760                -- There cannot be more than 1 structure.
8761                --
8762                raise_error(l_func_name, ERROR_KFF_GENERIC,
8763                            'Single structure KFF: There are more than 1 structures defined',
8764                            'Please apply patch 3498448 or one of its replacements');
8765 
8766              ELSIF (l_count = 1) THEN
8767                --
8768                -- Make sure primary keys are right.
8769                --
8770                SELECT *
8771                  INTO l_kff_str2
8772                  FROM fnd_id_flex_structures
8773                  WHERE application_id = l_kff_flx.application_id
8774                  AND id_flex_code = l_kff_flx.id_flex_code;
8775 
8776                IF (l_kff_str2.id_flex_structure_code <> p_id_flex_structure_code) THEN
8777                   raise_error(l_func_name, ERROR_KFF_GENERIC,
8778                               'Single structure KFF: Structure code does not match. ' ||
8779                               'Structure Code in DB: ' || l_kff_str2.id_flex_structure_code ||
8780                               ', Structure Code in LDT: ' || p_id_flex_structure_code,
8781                               'Please apply patch 3498448 or one of its replacements');
8782                END IF;
8783 
8784                IF (l_kff_str2.id_flex_num <> 101) THEN
8785                   fix_id_flex_num(p_application_id  => l_kff_str2.application_id,
8786                                   p_id_flex_code    => l_kff_str2.id_flex_code,
8787                                   p_id_flex_num_old => l_kff_str2.id_flex_num,
8788                                   p_id_flex_num_new => 101);
8789                END IF;
8790 
8791              ELSIF (l_count = 0) THEN
8792                --
8793                -- This is the first time this KFF is being uploaded.
8794                --
8795                NULL;
8796             END IF; -- l_count
8797          END IF; -- Single structure only KFF
8798 
8799          IF (g_debug_on) THEN
8800             debug(l_func_name, 'Uploading KFF_STRUCTURE.(MLS)');
8801          END IF;
8802          fnd_id_flex_structures_pkg.load_row
8803            (x_application_short_name       => p_application_short_name,
8804             x_id_flex_code                 => p_id_flex_code,
8805             x_id_flex_structure_code       => p_id_flex_structure_code,
8806             x_who                          => l_file_who,
8807             x_concatenated_segment_delimit => p_concatenated_segment_delimit,
8808             x_cross_segment_validation_fla => p_cross_segment_validation_fla,
8809             x_dynamic_inserts_allowed_flag => p_dynamic_inserts_allowed_flag,
8810             x_enabled_flag                 => p_enabled_flag,
8811             x_freeze_flex_definition_flag  => p_freeze_flex_definition_flag,
8812             x_freeze_structured_hier_flag  => p_freeze_structured_hier_flag,
8813             x_shorthand_enabled_flag       => p_shorthand_enabled_flag,
8814             x_shorthand_length             => p_shorthand_length,
8815             x_structure_view_name          => p_structure_view_name,
8816             x_id_flex_structure_name       => p_id_flex_structure_name,
8817             x_description                  => p_description,
8818             x_shorthand_prompt             => p_shorthand_prompt);
8819 
8820          --
8821          -- Make sure id_flex_num is 101 for single structure KFF.
8822          --
8823          IF (is_single_structure_kff(l_kff_flx)) THEN
8824             get_kff_str(l_kff_flx,
8825                         p_id_flex_structure_code,
8826                         l_kff_str2);
8827 
8828             IF (l_kff_str2.id_flex_num <> 101) THEN
8829                fix_id_flex_num(p_application_id  => l_kff_str2.application_id,
8830                                p_id_flex_code    => l_kff_str2.id_flex_code,
8831                                p_id_flex_num_old => l_kff_str2.id_flex_num,
8832                                p_id_flex_num_new => 101);
8833             END IF;
8834          END IF;
8835 
8836       END IF; -- p_upload_mode
8837     ELSIF (p_upload_phase = 'END') THEN
8838       IF (p_upload_mode = 'NLS') THEN
8839          --
8840          -- MLS translation.
8841          --
8842          NULL;
8843        ELSE
8844          --
8845          -- Usual upload.
8846          --
8847          NULL;
8848       END IF;
8849       --
8850       -- Compile Flex, Generate View.
8851       --
8852       IF (g_numof_changes > g_numof_changes_kff_str) THEN
8853          call_cp(p_mode                       => 'KFF-STR',
8854                  p_upload_mode                => p_upload_mode,
8855                  p_application_short_name     => p_application_short_name,
8856                  p_id_flex_code               => p_id_flex_code,
8857                  p_id_flex_structure_code     => p_id_flex_structure_code);
8858       END IF;
8859     ELSE
8860       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
8861    END IF;
8862 
8863    <<label_done>>
8864    done('KFF_STRUCTURE', p_upload_phase);
8865 EXCEPTION
8866    WHEN OTHERS THEN
8867       report_public_api_exception(l_func_name,
8868                                   p_upload_phase,
8869                                   p_application_short_name,
8870                                   p_id_flex_code,
8871                                   p_id_flex_structure_code);
8872 END up_kff_structure;
8873 
8874 -- --------------------------------------------------
8875 PROCEDURE up_kff_wf_process
8876   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8877    p_upload_mode                  IN VARCHAR2,
8878    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8879    p_application_short_name       IN VARCHAR2,
8880    p_id_flex_code                 IN VARCHAR2,
8881    p_id_flex_structure_code       IN VARCHAR2,
8882    p_wf_item_type                 IN VARCHAR2,
8883    p_owner                        IN VARCHAR2,
8884    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8885    p_wf_process_name              IN VARCHAR2)
8886   IS
8887      l_func_name VARCHAR2(80);
8888      l_kff_flx   kff_flx_type;
8889      l_kff_str   kff_str_type;
8890      l_kff_wfp   kff_wfp_type;
8891      l_dummy     NUMBER;
8892      l_file_who  who_type;
8893 BEGIN
8894    l_func_name := g_api_name || 'up_kff_wf_process()';
8895    init('KFF_WF_PROCESS', p_upload_phase);
8896    IF (g_debug_on) THEN
8897       debug(l_func_name,
8898             'PHASE:'  || p_upload_phase ||
8899             ',UMODE:' || p_upload_mode ||
8900             ',CMODE:' || p_custom_mode ||
8901             ',APPS:'  || p_application_short_name ||
8902             ',KFF:'   || p_id_flex_code ||
8903             ',STR:'   || p_id_flex_structure_code ||
8904             ',WFI:'   || p_wf_item_type ||
8905             ',WFP:'   || p_wf_process_name);
8906    END IF;
8907 
8908    IF (p_upload_mode = 'NLS') THEN
8909       --
8910       -- No translation here.
8911       --
8912       IF (g_debug_on) THEN
8913          debug(l_func_name, 'No translation here.');
8914       END IF;
8915       GOTO label_done;
8916    END IF;
8917 
8918    --
8919    -- Make sure KFF and Structure exist.
8920    --
8921    get_kff_flx(p_application_short_name,
8922                p_id_flex_code,
8923                l_kff_flx);
8924 
8925    get_kff_str(l_kff_flx,
8926                p_id_flex_structure_code,
8927                l_kff_str);
8928 
8929    --
8930    -- Gather WHO Information.
8931    --
8932    IF (get_kff_wfp(l_kff_str,
8933                    p_wf_item_type,
8934                    l_kff_wfp)) THEN
8935       NULL;
8936    END IF;
8937 
8938    --
8939    -- Check WHO Information.
8940    --
8941    IF (NOT is_upload_allowed
8942        (p_custom_mode                  => p_custom_mode,
8943         p_file_owner                   => p_owner,
8944         p_file_last_update_date        => p_last_update_date,
8945         p_db_last_updated_by           => l_kff_wfp.last_updated_by,
8946         p_db_last_update_date          => l_kff_wfp.last_update_date,
8947         x_file_who                     => l_file_who)) THEN
8948       IF (g_debug_on) THEN
8949          debug(l_func_name, 'Upload is not allowed because of customization.');
8950       END IF;
8951       GOTO label_done;
8952    END IF;
8953 
8954    --
8955    -- Usual upload.
8956    --
8957 
8958    --
8959    -- Make sure Item Type and Process exist.
8960    -- Copied from AFFFWFPB.pls
8961    --
8962    BEGIN
8963       SELECT 1
8964         INTO l_dummy
8965         FROM wf_item_types_vl
8966         WHERE name = p_wf_item_type;
8967    EXCEPTION
8968       WHEN OTHERS THEN
8969          --
8970          -- GEO !!!
8971          --
8972          raise_not_exist(l_func_name,
8973                          'Please create the workflow item type.',
8974                          'WF Item Type', p_wf_item_type);
8975    END;
8976    BEGIN
8977       SELECT 1
8978         INTO l_dummy
8979         FROM wf_runnable_processes_v
8980         WHERE item_type = p_wf_item_type
8981         AND process_name = p_wf_process_name;
8982    EXCEPTION
8983       WHEN OTHERS THEN
8984          --
8985          -- GEO !!!
8986          --
8987          raise_not_exist(l_func_name,
8988                          'Please create the runnable workflow process.',
8989                          'WF Process Name', p_wf_process_name);
8990    END;
8991 
8992    IF (g_debug_on) THEN
8993       debug(l_func_name, 'Updating KFF_WF_PROCESS.(no-TL)');
8994    END IF;
8995    UPDATE fnd_flex_workflow_processes SET
8996      last_updated_by   = l_file_who.last_updated_by,
8997      last_update_date  = l_file_who.last_update_date,
8998      last_update_login = l_file_who.last_update_login,
8999      wf_process_name   = p_wf_process_name
9000      WHERE application_id = l_kff_flx.application_id
9001      AND id_flex_code = l_kff_flx.id_flex_code
9002      AND id_flex_num = l_kff_str.id_flex_num
9003      AND wf_item_type = p_wf_item_type;
9004 
9005    IF (SQL%notfound) THEN
9006       IF (g_debug_on) THEN
9007          debug(l_func_name, 'Inserting KFF_WF_PROCESS.(no-TL)');
9008       END IF;
9009       INSERT INTO fnd_flex_workflow_processes
9010         (
9011          application_id,
9012          id_flex_code,
9013          id_flex_num,
9014          wf_item_type,
9015 
9016          created_by,
9017          creation_date,
9018          last_updated_by,
9019          last_update_date,
9020          last_update_login,
9021 
9022          wf_process_name
9023          )
9024         VALUES
9025         (
9026          l_kff_flx.application_id,
9027          l_kff_flx.id_flex_code,
9028          l_kff_str.id_flex_num,
9029          p_wf_item_type,
9030 
9031          l_file_who.created_by,
9032          l_file_who.creation_date,
9033          l_file_who.last_updated_by,
9034          l_file_who.last_update_date,
9035          l_file_who.last_update_login,
9036 
9037          p_wf_process_name
9038          );
9039    END IF;
9040 
9041    <<label_done>>
9042    done('KFF_WF_PROCESS', p_upload_phase);
9043 EXCEPTION
9044    WHEN OTHERS THEN
9045       report_public_api_exception(l_func_name,
9046                                   p_upload_phase,
9047                                   p_application_short_name,
9048                                   p_id_flex_code,
9049                                   p_id_flex_structure_code,
9050                                   p_wf_item_type);
9051 END up_kff_wf_process;
9052 
9053 -- --------------------------------------------------
9054 PROCEDURE up_kff_sh_alias
9055   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9056    p_upload_mode                  IN VARCHAR2,
9057    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9058    p_application_short_name       IN VARCHAR2,
9059    p_id_flex_code                 IN VARCHAR2,
9060    p_id_flex_structure_code       IN VARCHAR2,
9061    p_alias_name                   IN VARCHAR2,
9062    p_owner                        IN VARCHAR2,
9063    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9064    p_concatenated_segments        IN VARCHAR2,
9065    p_enabled_flag                 IN VARCHAR2,
9066    p_start_date_active            IN VARCHAR2,
9067    p_end_date_active              IN VARCHAR2,
9068    p_attribute_category           IN VARCHAR2,
9069    p_attribute1                   IN VARCHAR2,
9070    p_attribute2                   IN VARCHAR2,
9071    p_attribute3                   IN VARCHAR2,
9072    p_attribute4                   IN VARCHAR2,
9073    p_attribute5                   IN VARCHAR2,
9074    p_attribute6                   IN VARCHAR2,
9075    p_attribute7                   IN VARCHAR2,
9076    p_attribute8                   IN VARCHAR2,
9077    p_attribute9                   IN VARCHAR2,
9078    p_attribute10                  IN VARCHAR2,
9079    p_attribute11                  IN VARCHAR2,
9080    p_attribute12                  IN VARCHAR2,
9081    p_attribute13                  IN VARCHAR2,
9082    p_attribute14                  IN VARCHAR2,
9083    p_attribute15                  IN VARCHAR2,
9084    p_description                  IN VARCHAR2)
9085   IS
9086      l_func_name VARCHAR2(80);
9087      l_kff_flx   kff_flx_type;
9088      l_kff_str   kff_str_type;
9089      l_kff_sha   kff_sha_type;
9090      l_file_who  who_type;
9091 BEGIN
9092    l_func_name := g_api_name || 'up_kff_sh_alias()';
9093    init('KFF_SH_ALIAS', p_upload_phase);
9094    IF (g_debug_on) THEN
9095       debug(l_func_name,
9096             'PHASE:'  || p_upload_phase ||
9097             ',UMODE:' || p_upload_mode ||
9098             ',CMODE:' || p_custom_mode ||
9099             ',APPS:'  || p_application_short_name ||
9100             ',KFF:'   || p_id_flex_code ||
9101             ',STR:'   || p_id_flex_structure_code ||
9102             ',SHA:'   || p_alias_name);
9103    END IF;
9104 
9105    --
9106    -- Gather WHO Information.
9107    --
9108    IF (get_kff_flx(p_application_short_name,
9109                    p_id_flex_code,
9110                    l_kff_flx)) THEN
9111       IF (get_kff_str(l_kff_flx,
9112                       p_id_flex_structure_code,
9113                       l_kff_str)) THEN
9114          IF (get_kff_sha(l_kff_str,
9115                          p_alias_name,
9116                          l_kff_sha)) THEN
9117             NULL;
9118          END IF;
9119       END IF;
9120    END IF;
9121 
9122    --
9123    -- Check WHO Information.
9124    --
9125    IF (NOT is_upload_allowed
9126        (p_custom_mode                  => p_custom_mode,
9127         p_file_owner                   => p_owner,
9128         p_file_last_update_date        => p_last_update_date,
9129         p_db_last_updated_by           => l_kff_sha.last_updated_by,
9130         p_db_last_update_date          => l_kff_sha.last_update_date,
9131         x_file_who                     => l_file_who)) THEN
9132       IF (g_debug_on) THEN
9133          debug(l_func_name, 'Upload is not allowed because of customization.');
9134       END IF;
9135       GOTO label_done;
9136    END IF;
9137 
9138    IF (p_upload_mode = 'NLS') THEN
9139       --
9140       -- non-MLS translation.
9141       --
9142       IF (g_debug_on) THEN
9143          debug(l_func_name, 'Translating KFF_SH_ALIAS.(non-MLS)');
9144       END IF;
9145       UPDATE fnd_shorthand_flex_aliases SET
9146         last_updated_by   = l_file_who.last_updated_by,
9147         last_update_date  = l_file_who.last_update_date,
9148         last_update_login = l_file_who.last_update_login,
9149         description       = Nvl(p_description, description)
9150         WHERE ((application_id, id_flex_code, id_flex_num) =
9151                (SELECT application_id, id_flex_code, id_flex_num
9152                 FROM fnd_id_flex_structures
9153                 WHERE application_id = (SELECT application_id
9154                                         FROM fnd_application
9155                                         WHERE application_short_name = p_application_short_name)
9156                 AND id_flex_code = p_id_flex_code
9157                 AND id_flex_structure_code = p_id_flex_structure_code))
9158         AND alias_name = p_alias_name
9159         AND userenv('LANG') = (SELECT language_code
9160                                FROM fnd_languages
9161                                WHERE installed_flag = 'B');
9162       IF (SQL%notfound) THEN
9163          IF (g_debug_on) THEN
9164             debug(l_func_name, 'No entity to translate.');
9165          END IF;
9166       END IF;
9167       GOTO label_done;
9168     ELSE
9169       --
9170       -- Usual upload.
9171       --
9172 
9173       --
9174       -- Make sure KFF and Structure exist.
9175       --
9176       get_kff_flx(p_application_short_name,
9177                   p_id_flex_code,
9178                   l_kff_flx);
9179 
9180       get_kff_str(l_kff_flx,
9181                   p_id_flex_structure_code,
9182                   l_kff_str);
9183 
9184       IF (g_debug_on) THEN
9185          debug(l_func_name, 'Updating KFF_SH_ALIAS.(non-MLS)');
9186       END IF;
9187       UPDATE fnd_shorthand_flex_aliases SET
9188         last_updated_by       = l_file_who.last_updated_by,
9189         last_update_date      = l_file_who.last_update_date,
9190         last_update_login     = l_file_who.last_update_login,
9191         concatenated_segments = p_concatenated_segments,
9192         enabled_flag          = p_enabled_flag,
9193         start_date_active     = To_date(p_start_date_active, g_date_mask),
9194         end_date_active       = To_date(p_end_date_active, g_date_mask),
9195         attribute_category    = p_attribute_category,
9196         attribute1            = p_attribute1,
9197         attribute2            = p_attribute2,
9198         attribute3            = p_attribute3,
9199         attribute4            = p_attribute4,
9200         attribute5            = p_attribute5,
9201         attribute6            = p_attribute6,
9202         attribute7            = p_attribute7,
9203         attribute8            = p_attribute8,
9204         attribute9            = p_attribute9,
9205         attribute10           = p_attribute10,
9206         attribute11           = p_attribute11,
9207         attribute12           = p_attribute12,
9208         attribute13           = p_attribute13,
9209         attribute14           = p_attribute14,
9210         attribute15           = p_attribute15,
9211         description           = p_description
9212         WHERE application_id = l_kff_flx.application_id
9213         AND id_flex_code = l_kff_flx.id_flex_code
9214         AND id_flex_num = l_kff_str.id_flex_num
9215         AND alias_name = p_alias_name;
9216 
9217       IF (SQL%notfound) THEN
9218          IF (g_debug_on) THEN
9219             debug(l_func_name, 'Inserting KFF_SH_ALIAS.(non-MLS)');
9220          END IF;
9221          INSERT INTO fnd_shorthand_flex_aliases
9222            (
9223             application_id,
9224             id_flex_code,
9225             id_flex_num,
9226             alias_name,
9227 
9228             created_by,
9229             creation_date,
9230             last_updated_by,
9231             last_update_date,
9232             last_update_login,
9233 
9234             concatenated_segments,
9235             enabled_flag,
9236             start_date_active,
9237             end_date_active,
9238             attribute_category,
9239             attribute1,
9240             attribute2,
9241             attribute3,
9242             attribute4,
9243             attribute5,
9244             attribute6,
9245             attribute7,
9246             attribute8,
9247             attribute9,
9248             attribute10,
9249             attribute11,
9250             attribute12,
9251             attribute13,
9252             attribute14,
9253             attribute15,
9254             description
9255             )
9256            VALUES
9257            (
9258             l_kff_flx.application_id,
9259             l_kff_flx.id_flex_code,
9260             l_kff_str.id_flex_num,
9261             p_alias_name,
9262 
9263             l_file_who.created_by,
9264             l_file_who.creation_date,
9265             l_file_who.last_updated_by,
9266             l_file_who.last_update_date,
9267             l_file_who.last_update_login,
9268 
9269             p_concatenated_segments,
9270             p_enabled_flag,
9271             To_date(p_start_date_active, g_date_mask),
9272             To_date(p_end_date_active, g_date_mask),
9273             p_attribute_category,
9274             p_attribute1,
9275             p_attribute2,
9276             p_attribute3,
9277             p_attribute4,
9278             p_attribute5,
9279             p_attribute6,
9280             p_attribute7,
9281             p_attribute8,
9282             p_attribute9,
9283             p_attribute10,
9284             p_attribute11,
9285             p_attribute12,
9286             p_attribute13,
9287             p_attribute14,
9288             p_attribute15,
9289             p_description
9290             );
9291       END IF;
9292    END IF;
9293 
9294    <<label_done>>
9295    done('KFF_SH_ALIAS', p_upload_phase);
9296 EXCEPTION
9297    WHEN OTHERS THEN
9298       report_public_api_exception(l_func_name,
9299                                   p_upload_phase,
9300                                   p_application_short_name,
9301                                   p_id_flex_code,
9302                                   p_id_flex_structure_code,
9303                                   p_alias_name);
9304 END up_kff_sh_alias;
9305 
9306 -- --------------------------------------------------
9307 FUNCTION check_cvr_trigger(p_trigger_name IN VARCHAR2)
9308   RETURN VARCHAR2
9309   IS
9310      l_func_name VARCHAR2(80);
9311      l_status    user_triggers.status%TYPE;
9312 BEGIN
9313    l_func_name := g_api_name || 'check_cvr_trigger()';
9314    --
9315    -- Get the status of this trigger
9316    --
9317    SELECT status
9318      INTO l_status
9319      FROM user_triggers
9320      WHERE trigger_name = p_trigger_name;
9321 
9322 
9323    IF (l_status <> 'ENABLED') THEN
9324       RETURN (p_trigger_name || ' trigger is not ENABLED.' || g_newline);
9325    END IF;
9326 
9327    RETURN NULL;
9328 EXCEPTION
9329    WHEN no_data_found THEN
9330       RETURN (p_trigger_name || ' trigger does not exist.' || g_newline);
9331    WHEN OTHERS THEN
9332       raise_when_others(l_func_name,
9333                         p_trigger_name);
9334 END check_cvr_trigger;
9335 
9336 -- --------------------------------------------------
9337 PROCEDURE check_cvr_triggers
9338   IS
9339      l_func_name  VARCHAR2(80);
9340      l_vc2 VARCHAR2(32000);
9341 BEGIN
9342    l_func_name := g_api_name || 'check_cvr_triggers()';
9343    l_vc2 := NULL;
9344    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VALIDATION_RULES_T1');
9345    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VALIDATION_RULES_T2');
9346    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VALIDATION_RULES_T3');
9347    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T1');
9348    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T2');
9349    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T3');
9350    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T4');
9351 
9352    IF (l_vc2 IS NOT NULL) THEN
9353       raise_error(l_func_name, ERROR_KFF_GENERIC,
9354                   l_vc2,
9355                   'Please run $FND_TOP/patch/115/sql/afeffs04.sql');
9356    END IF;
9357 EXCEPTION
9358    WHEN OTHERS THEN
9359       raise_when_others(l_func_name);
9360 END check_cvr_triggers;
9361 
9362 -- --------------------------------------------------
9363 PROCEDURE up_kff_cvr_rule
9364   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9365    p_upload_mode                  IN VARCHAR2,
9366    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9367    p_application_short_name       IN VARCHAR2,
9368    p_id_flex_code                 IN VARCHAR2,
9369    p_id_flex_structure_code       IN VARCHAR2,
9370    p_flex_validation_rule_name    IN VARCHAR2,
9371    p_owner                        IN VARCHAR2,
9372    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9373    p_enabled_flag                 IN VARCHAR2,
9374    p_error_segment_column_name    IN VARCHAR2,
9375    p_start_date_active            IN VARCHAR2,
9376    p_end_date_active              IN VARCHAR2,
9377    p_error_message_text           IN VARCHAR2,
9378    p_description                  IN VARCHAR2)
9379   IS
9380      l_func_name  VARCHAR2(80);
9381      l_kff_flx    kff_flx_type;
9382      l_kff_str    kff_str_type;
9383      l_kff_cvr    kff_cvr_type;
9384      l_kff_cvr_tl kff_cvr_tl_type;
9385      l_file_who   who_type;
9386 BEGIN
9387    l_func_name := g_api_name || 'up_kff_cvr_rule()';
9388    --
9389    -- CVR stats table is populated by triggers.
9390    --
9391    init('KFF_CVR_RULE', p_upload_phase);
9392    IF (g_debug_on) THEN
9393       debug(l_func_name,
9394             'PHASE:'  || p_upload_phase ||
9395             ',UMODE:' || p_upload_mode  ||
9396             ',CMODE:' || p_custom_mode  ||
9397             ',APPS:'  || p_application_short_name ||
9398             ',KFF:'   || p_id_flex_code ||
9399             ',STR:'   || p_id_flex_structure_code ||
9400             ',CVR:'   || p_flex_validation_rule_name);
9401    END IF;
9402 
9403    IF (p_upload_phase = 'BEGIN') THEN
9404       --
9405       -- Gather WHO Information.
9406       --
9407       IF (get_kff_flx(p_application_short_name,
9408                       p_id_flex_code,
9409                       l_kff_flx)) THEN
9410          IF (get_kff_str(l_kff_flx,
9411                          p_id_flex_structure_code,
9412                          l_kff_str)) THEN
9413             IF (get_kff_cvr(l_kff_str,
9414                             p_flex_validation_rule_name,
9415                             l_kff_cvr)) THEN
9416                NULL;
9417             END IF;
9418          END IF;
9419       END IF;
9420 
9421       IF (p_upload_mode = 'NLS') THEN
9422          --
9423          -- MLS translation.
9424          --
9425 
9426          --
9427          -- Gather WHO Information.
9428          --
9429          IF (get_kff_cvr_tl(l_kff_cvr,
9430                             userenv('LANG'),
9431                             l_kff_cvr_tl)) THEN
9432             NULL;
9433          END IF;
9434 
9435          --
9436          -- Check WHO Information.
9437          --
9438          IF (NOT is_upload_allowed
9439              (p_custom_mode                  => p_custom_mode,
9440               p_file_owner                   => p_owner,
9441               p_file_last_update_date        => p_last_update_date,
9442               p_db_last_updated_by           => l_kff_cvr_tl.last_updated_by,
9443               p_db_last_update_date          => l_kff_cvr_tl.last_update_date,
9444               x_file_who                     => l_file_who)) THEN
9445             IF (g_debug_on) THEN
9446                debug(l_func_name, 'Upload is not allowed because of customization.');
9447             END IF;
9448             GOTO label_done;
9449          END IF;
9450 
9451          IF (g_debug_on) THEN
9452             debug(l_func_name, 'Translating KFF_CVR_RULE.(MLS)');
9453          END IF;
9454          fnd_flex_vdation_rules_pkg.translate_row
9455            (x_application_short_name       => p_application_short_name,
9456             x_id_flex_code                 => p_id_flex_code,
9457             x_id_flex_structure_code       => p_id_flex_structure_code,
9458             x_flex_validation_rule_name    => p_flex_validation_rule_name,
9459             x_who                          => l_file_who,
9460             x_error_message_text           => p_error_message_text,
9461             x_description                  => p_description);
9462        ELSE
9463          --
9464          -- Usual upload.
9465          --
9466 
9467          --
9468          -- Check WHO Information.
9469          --
9470          IF (NOT is_upload_allowed
9471              (p_custom_mode                  => p_custom_mode,
9472               p_file_owner                   => p_owner,
9473               p_file_last_update_date        => p_last_update_date,
9474               p_db_last_updated_by           => l_kff_cvr.last_updated_by,
9475               p_db_last_update_date          => l_kff_cvr.last_update_date,
9476               x_file_who                     => l_file_who)) THEN
9477             IF (g_debug_on) THEN
9478                debug(l_func_name, 'Upload is not allowed because of customization.');
9479             END IF;
9480             GOTO label_done;
9481          END IF;
9482 
9483          --
9484          -- Make sure KFF and Structure exist.
9485          --
9486          get_kff_flx(p_application_short_name,
9487                      p_id_flex_code,
9488                      l_kff_flx);
9489 
9490          get_kff_str(l_kff_flx,
9491                      p_id_flex_structure_code,
9492                      l_kff_str);
9493 
9494          IF (g_debug_on) THEN
9495             debug(l_func_name, 'Uploading KFF_CVR_RULE.(MLS)');
9496          END IF;
9497          fnd_flex_vdation_rules_pkg.load_row
9498            (x_application_short_name       => p_application_short_name,
9499             x_id_flex_code                 => p_id_flex_code,
9500             x_id_flex_structure_code       => p_id_flex_structure_code,
9501             x_flex_validation_rule_name    => p_flex_validation_rule_name,
9502             x_who                          => l_file_who,
9503             x_enabled_flag                 => p_enabled_flag,
9504             x_error_segment_column_name    => p_error_segment_column_name,
9505             x_start_date_active            => To_date(p_start_date_active,
9506                                                       g_date_mask),
9507             x_end_date_active              => To_date(p_end_date_active,
9508                                                       g_date_mask),
9509             x_error_message_text           => p_error_message_text,
9510             x_description                  => p_description);
9511       END IF;
9512     ELSIF (p_upload_phase = 'END') THEN
9513       IF (p_upload_mode = 'NLS') THEN
9514          --
9515          -- MLS translation.
9516          --
9517          NULL;
9518        ELSE
9519          --
9520          -- Usual upload.
9521          --
9522          NULL;
9523       END IF;
9524     ELSE
9525       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
9526    END IF;
9527 
9528    <<label_done>>
9529    done('KFF_CVR_RULE', p_upload_phase);
9530 EXCEPTION
9531    WHEN OTHERS THEN
9532       report_public_api_exception(l_func_name,
9533                                   p_upload_phase,
9534                                   p_application_short_name,
9535                                   p_id_flex_code,
9536                                   p_id_flex_structure_code,
9537                                   p_flex_validation_rule_name);
9538 
9539       BEGIN
9540          check_cvr_triggers();
9541       EXCEPTION
9542          WHEN OTHERS THEN
9543             report_public_api_exception(l_func_name,
9544                                         p_upload_phase,
9545                                         p_application_short_name,
9546                                         p_id_flex_code,
9547                                         p_id_flex_structure_code,
9548                                         p_flex_validation_rule_name);
9549       END;
9550 END up_kff_cvr_rule;
9551 
9552 -- --------------------------------------------------
9553 PROCEDURE up_kff_cvr_line
9554   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9555    p_upload_mode                  IN VARCHAR2,
9556    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9557    p_application_short_name       IN VARCHAR2,
9558    p_id_flex_code                 IN VARCHAR2,
9559    p_id_flex_structure_code       IN VARCHAR2,
9560    p_flex_validation_rule_name    IN VARCHAR2,
9561    p_include_exclude_indicator    IN VARCHAR2,
9562    p_concatenated_segments_low    IN VARCHAR2,
9563    p_concatenated_segments_high   IN VARCHAR2,
9564    p_owner                        IN VARCHAR2,
9565    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9566    p_enabled_flag                 IN VARCHAR2,
9567    p_description                  IN VARCHAR2)
9568   IS
9569      l_func_name VARCHAR2(80);
9570      l_kff_flx   kff_flx_type;
9571      l_kff_str   kff_str_type;
9572      l_kff_cvr   kff_cvr_type;
9573      l_kff_cvl   kff_cvl_type;
9574      l_file_who  who_type;
9575 BEGIN
9576    l_func_name := g_api_name || 'up_kff_cvr_line()';
9577    --
9578    -- CVR stats and I/E tables are populated by triggers.
9579    --
9580    init('KFF_CVR_LINE', p_upload_phase);
9581    IF (g_debug_on) THEN
9582       debug(l_func_name,
9583             'PHASE:'  || p_upload_phase ||
9584             ',UMODE:' || p_upload_mode ||
9585             ',CMODE:' || p_custom_mode ||
9586             ',APPS:'  || p_application_short_name ||
9587             ',KFF:'   || p_id_flex_code ||
9588             ',STR:'   || p_id_flex_structure_code ||
9589             ',CVR:'   || p_flex_validation_rule_name ||
9590             ',IE:'    || p_include_exclude_indicator ||
9591             ',LOW:'   || p_concatenated_segments_low ||
9592             ',HIGH:'  || p_concatenated_segments_high);
9593    END IF;
9594 
9595    --
9596    -- Gather WHO Information.
9597    --
9598    IF (get_kff_flx(p_application_short_name,
9599                    p_id_flex_code,
9600                    l_kff_flx)) THEN
9601       IF (get_kff_str(l_kff_flx,
9602                       p_id_flex_structure_code,
9603                       l_kff_str)) THEN
9604          IF (get_kff_cvr(l_kff_str,
9605                          p_flex_validation_rule_name,
9606                          l_kff_cvr)) THEN
9607             IF (get_kff_cvl(l_kff_cvr,
9608                             p_include_exclude_indicator,
9609                             p_concatenated_segments_low,
9610                             p_concatenated_segments_high,
9611                             l_kff_cvl)) THEN
9612                NULL;
9613             END IF;
9614          END IF;
9615       END IF;
9616    END IF;
9617 
9618    --
9619    -- Check WHO Information.
9620    --
9621    IF (NOT is_upload_allowed
9622        (p_custom_mode                  => p_custom_mode,
9623         p_file_owner                   => p_owner,
9624         p_file_last_update_date        => p_last_update_date,
9625         p_db_last_updated_by           => l_kff_cvl.last_updated_by,
9626         p_db_last_update_date          => l_kff_cvl.last_update_date,
9627         x_file_who                     => l_file_who)) THEN
9628       IF (g_debug_on) THEN
9629          debug(l_func_name, 'Upload is not allowed because of customization.');
9630       END IF;
9631       GOTO label_done;
9632    END IF;
9633 
9634    IF (p_upload_mode = 'NLS') THEN
9635       --
9636       -- non-MLS translation.
9637       --
9638       IF (g_debug_on) THEN
9639          debug(l_func_name, 'Translating KFF_CVR_LINE.(non-MLS)');
9640       END IF;
9641       UPDATE fnd_flex_validation_rule_lines SET
9642         last_updated_by   = l_file_who.last_updated_by,
9643         last_update_date  = l_file_who.last_update_date,
9644         last_update_login = l_file_who.last_update_login,
9645         description       = Nvl(p_description, description)
9646         WHERE ((application_id, id_flex_code, id_flex_num) =
9647                (SELECT application_id, id_flex_code, id_flex_num
9648                 FROM fnd_id_flex_structures
9649                 WHERE application_id = (SELECT application_id
9650                                         FROM fnd_application
9651                                         WHERE application_short_name = p_application_short_name)
9652                 AND id_flex_code = p_id_flex_code
9653                 AND id_flex_structure_code = p_id_flex_structure_code))
9654         AND flex_validation_rule_name = p_flex_validation_rule_name
9655         AND include_exclude_indicator = p_include_exclude_indicator
9656         AND concatenated_segments_low = p_concatenated_segments_low
9657         AND concatenated_segments_high = p_concatenated_segments_high
9658         AND userenv('LANG') = (SELECT language_code
9659                                FROM fnd_languages
9660                                WHERE installed_flag = 'B');
9661       IF (SQL%notfound) THEN
9662          IF (g_debug_on) THEN
9663             debug(l_func_name, 'No entity to translate.');
9664          END IF;
9665       END IF;
9666       GOTO label_done;
9667     ELSE
9668       --
9669       -- Usual upload.
9670       --
9671 
9672       --
9673       -- Make sure KFF, Structure and CVR exist.
9674       --
9675       get_kff_flx(p_application_short_name,
9676                   p_id_flex_code,
9677                   l_kff_flx);
9678 
9679       get_kff_str(l_kff_flx,
9680                   p_id_flex_structure_code,
9681                   l_kff_str);
9682 
9683       get_kff_cvr(l_kff_str,
9684                   p_flex_validation_rule_name,
9685                   l_kff_cvr);
9686 
9687       IF (g_debug_on) THEN
9688          debug(l_func_name, 'Updating KFF_CVR_LINE.(non-MLS)');
9689       END IF;
9690       UPDATE fnd_flex_validation_rule_lines SET
9691         last_updated_by   = l_file_who.last_updated_by,
9692         last_update_date  = l_file_who.last_update_date,
9693         last_update_login = l_file_who.last_update_login,
9694         enabled_flag      = p_enabled_flag,
9695         description       = p_description
9696         WHERE application_id = l_kff_flx.application_id
9697         AND id_flex_code = l_kff_flx.id_flex_code
9698         AND id_flex_num = l_kff_str.id_flex_num
9699         AND flex_validation_rule_name = l_kff_cvr.flex_validation_rule_name
9700         AND include_exclude_indicator = p_include_exclude_indicator
9701         AND concatenated_segments_low = p_concatenated_segments_low
9702         AND concatenated_segments_high = p_concatenated_segments_high;
9703 
9704       IF (SQL%notfound) THEN
9705          IF (g_debug_on) THEN
9706             debug(l_func_name, 'Inserting KFF_CVR_LINE.(non-MLS)');
9707          END IF;
9708          --
9709          -- rule_line_id is populated by fnd_flex_val_rule_lines_t1 trigger.
9710          --
9711          INSERT INTO fnd_flex_validation_rule_lines
9712            (
9713             application_id,
9714             id_flex_code,
9715             id_flex_num,
9716             flex_validation_rule_name,
9717             include_exclude_indicator,
9718             concatenated_segments_low,
9719             concatenated_segments_high,
9720 
9721             created_by,
9722             creation_date,
9723             last_updated_by,
9724             last_update_date,
9725             last_update_login,
9726 
9727             enabled_flag,
9728             description
9729             )
9730            VALUES
9731            (
9732             l_kff_flx.application_id,
9733             l_kff_flx.id_flex_code,
9734             l_kff_str.id_flex_num,
9735             l_kff_cvr.flex_validation_rule_name,
9736             p_include_exclude_indicator,
9737             p_concatenated_segments_low,
9738             p_concatenated_segments_high,
9739 
9740             l_file_who.created_by,
9741             l_file_who.creation_date,
9742             l_file_who.last_updated_by,
9743             l_file_who.last_update_date,
9744             l_file_who.last_update_login,
9745 
9746             p_enabled_flag,
9747             p_description
9748             );
9749       END IF;
9750    END IF;
9751 
9752    <<label_done>>
9753    done('KFF_CVR_LINE', p_upload_phase);
9754 EXCEPTION
9755    WHEN OTHERS THEN
9756       report_public_api_exception(l_func_name,
9757                                   p_upload_phase,
9758                                   p_application_short_name,
9759                                   p_id_flex_code,
9760                                   p_id_flex_structure_code,
9761                                   p_flex_validation_rule_name,
9762                                   p_include_exclude_indicator,
9763                                   p_concatenated_segments_low,
9764                                   p_concatenated_segments_high);
9765 
9766       BEGIN
9767          check_cvr_triggers();
9768       EXCEPTION
9769          WHEN OTHERS THEN
9770             report_public_api_exception(l_func_name,
9771                                         p_upload_phase,
9772                                         p_application_short_name,
9773                                         p_id_flex_code,
9774                                         p_id_flex_structure_code,
9775                                         p_flex_validation_rule_name,
9776                                         p_include_exclude_indicator,
9777                                         p_concatenated_segments_low,
9778                                         p_concatenated_segments_high);
9779       END;
9780 END up_kff_cvr_line;
9781 
9782 -- --------------------------------------------------
9783 PROCEDURE up_kff_segment
9784   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9785    p_upload_mode                  IN VARCHAR2,
9786    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9787    p_application_short_name       IN VARCHAR2,
9788    p_id_flex_code                 IN VARCHAR2,
9789    p_id_flex_structure_code       IN VARCHAR2,
9790    p_segment_name                 IN VARCHAR2,
9791    p_application_column_name      IN VARCHAR2,
9792    p_owner                        IN VARCHAR2,
9793    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9794    p_segment_num                  IN VARCHAR2,
9795    p_application_column_index_fla IN VARCHAR2,
9796    p_enabled_flag                 IN VARCHAR2,
9797    p_required_flag                IN VARCHAR2,
9798    p_display_flag                 IN VARCHAR2,
9799    p_display_size                 IN VARCHAR2,
9800    p_security_enabled_flag        IN VARCHAR2,
9801    p_maximum_description_len      IN VARCHAR2,
9802    p_concatenation_description_le IN VARCHAR2,
9803    p_flex_value_set_name          IN VARCHAR2,
9804    p_range_code                   IN VARCHAR2,
9805    p_default_type                 IN VARCHAR2,
9806    p_default_value                IN VARCHAR2,
9807    p_runtime_property_function    IN VARCHAR2 DEFAULT NULL,
9808    p_additional_where_clause      IN VARCHAR2 DEFAULT NULL,
9809    p_form_left_prompt             IN VARCHAR2,
9810    p_form_above_prompt            IN VARCHAR2,
9811    p_description                  IN VARCHAR2)
9812   IS
9813      l_func_name  VARCHAR2(80);
9814      l_kff_flx    kff_flx_type;
9815      l_kff_str    kff_str_type;
9816      l_kff_seg    kff_seg_type;
9817      l_kff_seg_tl kff_seg_tl_type;
9818      l_vst_set    vst_set_type;
9819      l_col        col_type;
9820      l_file_who  who_type;
9821 BEGIN
9822    l_func_name := g_api_name || 'up_kff_segment()';
9823    init('KFF_SEGMENT', p_upload_phase);
9824    IF (g_debug_on) THEN
9825       debug(l_func_name,
9826             'PHASE:'  || p_upload_phase ||
9827             ',UMODE:' || p_upload_mode  ||
9828             ',CMODE:' || p_custom_mode  ||
9829             ',APPS:'  || p_application_short_name ||
9830             ',KFF:'   || p_id_flex_code ||
9831             ',STR:'   || p_id_flex_structure_code ||
9832             ',SEG:'   || p_segment_name ||
9833             ',COL:'   || p_application_column_name);
9834    END IF;
9835 
9836    IF (p_upload_phase = 'BEGIN') THEN
9837       --
9838       -- Gather WHO Information.
9839       --
9840       IF (get_kff_flx(p_application_short_name,
9841                       p_id_flex_code,
9842                       l_kff_flx)) THEN
9843          IF (get_kff_str(l_kff_flx,
9844                          p_id_flex_structure_code,
9845                          l_kff_str)) THEN
9846             IF (get_kff_seg(l_kff_str,
9847                             p_application_column_name,
9848                             l_kff_seg)) THEN
9849                NULL;
9850             END IF;
9851          END IF;
9852       END IF;
9853 
9854       IF (p_upload_mode = 'NLS') THEN
9855          --
9856          -- MLS translation.
9857          --
9858 
9859          --
9860          -- Gather WHO Information.
9861          --
9862          IF (get_kff_seg_tl(l_kff_seg,
9863                             userenv('LANG'),
9864                             l_kff_seg_tl)) THEN
9865             NULL;
9866          END IF;
9867 
9868          --
9869          -- Check WHO Information.
9870          --
9871          IF (NOT is_upload_allowed
9872              (p_custom_mode                  => p_custom_mode,
9873               p_file_owner                   => p_owner,
9874               p_file_last_update_date        => p_last_update_date,
9875               p_db_last_updated_by           => l_kff_seg_tl.last_updated_by,
9876               p_db_last_update_date          => l_kff_seg_tl.last_update_date,
9877               x_file_who                     => l_file_who)) THEN
9878             IF (g_debug_on) THEN
9879                debug(l_func_name, 'Upload is not allowed because of customization.');
9880             END IF;
9881             GOTO label_done;
9882          END IF;
9883 
9884          IF (g_debug_on) THEN
9885             debug(l_func_name, 'Translating KFF_SEGMENT.(MLS)');
9886          END IF;
9887          fnd_id_flex_segments_pkg.translate_row
9888            (x_application_short_name       => p_application_short_name,
9889             x_id_flex_code                 => p_id_flex_code,
9890             x_id_flex_structure_code       => p_id_flex_structure_code,
9891             x_application_column_name      => p_application_column_name,
9892             x_who                          => l_file_who,
9893             x_form_left_prompt             => p_form_left_prompt,
9894             x_form_above_prompt            => p_form_above_prompt,
9895             x_description                  => p_description);
9896          GOTO label_done;
9897        ELSE
9898          --
9899          -- Usual upload.
9900          --
9901 
9902          --
9903          -- Check WHO Information.
9904          --
9905          IF (NOT is_upload_allowed
9906              (p_custom_mode                  => p_custom_mode,
9907               p_file_owner                   => p_owner,
9908               p_file_last_update_date        => p_last_update_date,
9909               p_db_last_updated_by           => l_kff_seg.last_updated_by,
9910               p_db_last_update_date          => l_kff_seg.last_update_date,
9911               x_file_who                     => l_file_who)) THEN
9912             IF (g_debug_on) THEN
9913                debug(l_func_name, 'Upload is not allowed because of customization.');
9914             END IF;
9915             GOTO label_done;
9916          END IF;
9917 
9918          --
9919          -- Make sure KFF, Structure and Column exist.
9920          --
9921          get_kff_flx(p_application_short_name,
9922                      p_id_flex_code,
9923                      l_kff_flx);
9924 
9925          get_kff_str(l_kff_flx,
9926                      p_id_flex_structure_code,
9927                      l_kff_str);
9928 
9929          get_col(l_kff_flx.table_application_id,
9930                  l_kff_flx.application_table_name,
9931                  p_application_column_name,
9932                  l_col);
9933 
9934          IF (((l_col.flexfield_application_id IS NULL) OR
9935               (l_col.flexfield_application_id = l_kff_flx.application_id)) AND
9936              ((l_col.flexfield_name IS NULL) OR
9937               (l_col.flexfield_name = l_kff_flx.id_flex_code)) AND
9938              (l_col.flexfield_usage_code = 'K')) THEN
9939             NULL;
9940           ELSE
9941             raise_error(l_func_name, ERROR_KFF_COL_NOT_REG,
9942                         'COL:' || l_col.column_name ||
9943                         ' is not registered properly. It is registered as ' ||
9944                         'APP Id:' || To_char(l_col.flexfield_application_id) ||
9945                         ' Flex Name:' || l_col.flexfield_name ||
9946                         ' Usage Code:' || l_col.flexfield_usage_code,
9947                         'Please use Application Developer:' ||
9948                         'Flexfield->Key->Register form and ' ||
9949                         'make sure column is enabled. If this column is ' ||
9950                         'not in the list, it means it is used by another ' ||
9951                         'flexfield and you cannot use it');
9952          END IF;
9953 
9954          IF (p_flex_value_set_name IS NOT NULL) THEN
9955             get_vst_set(p_flex_value_set_name, l_vst_set);
9956          END IF;
9957 
9958          IF (g_debug_on) THEN
9959             debug(l_func_name, 'Uploading KFF_SEGMENT.(MLS)');
9960          END IF;
9961          fnd_id_flex_segments_pkg.load_row
9962            (x_application_short_name       => p_application_short_name,
9963             x_id_flex_code                 => p_id_flex_code,
9964             x_id_flex_structure_code       => p_id_flex_structure_code,
9965             x_application_column_name      => p_application_column_name,
9966             x_who                          => l_file_who,
9967             x_segment_name                 => p_segment_name,
9968             x_segment_num                  => p_segment_num,
9969             x_application_column_index_fla => p_application_column_index_fla,
9970             x_enabled_flag                 => p_enabled_flag,
9971             x_required_flag                => p_required_flag,
9972             x_display_flag                 => p_display_flag,
9973             x_display_size                 => p_display_size,
9974             x_security_enabled_flag        => p_security_enabled_flag,
9975             x_maximum_description_len      => p_maximum_description_len,
9976             x_concatenation_description_le => p_concatenation_description_le,
9977             x_flex_value_set_name          => p_flex_value_set_name,
9978             x_range_code                   => p_range_code,
9979             x_default_type                 => p_default_type,
9980             x_default_value                => p_default_value,
9981             x_runtime_property_function    => p_runtime_property_function,
9982             x_additional_where_clause      => p_additional_where_clause,
9983             x_form_left_prompt             => p_form_left_prompt,
9984             x_form_above_prompt            => p_form_above_prompt,
9985             x_description                  => p_description);
9986       END IF;
9987     ELSIF (p_upload_phase = 'END') THEN
9988       IF (p_upload_mode = 'NLS') THEN
9989          --
9990          -- MLS translation.
9991          --
9992          NULL;
9993        ELSE
9994          --
9995          -- Usual upload.
9996          --
9997          --
9998          -- Populate cross product tables.
9999          --
10000          populate_kff_flexq_assign();
10001          populate_kff_segq_assign();
10002       END IF;
10003     ELSE
10004       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
10005    END IF;
10006 
10007    <<label_done>>
10008    done('KFF_SEGMENT', p_upload_phase);
10009 EXCEPTION
10010    WHEN OTHERS THEN
10011       report_public_api_exception(l_func_name,
10012                                   p_upload_phase,
10013                                   p_application_short_name,
10014                                   p_id_flex_code,
10015                                   p_id_flex_structure_code,
10016                                   p_application_column_name,
10017                                   p_segment_name);
10018 END up_kff_segment;
10019 
10020 -- --------------------------------------------------
10021 PROCEDURE up_kff_flexq_assign
10022   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10023    p_upload_mode                  IN VARCHAR2,
10024    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10025    p_application_short_name       IN VARCHAR2,
10026    p_id_flex_code                 IN VARCHAR2,
10027    p_id_flex_structure_code       IN VARCHAR2,
10028    p_application_column_name      IN VARCHAR2,
10029    p_segment_attribute_type       IN VARCHAR2,
10030    p_owner                        IN VARCHAR2,
10031    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10032    p_attribute_value              IN VARCHAR2)
10033   IS
10034      l_func_name VARCHAR2(80);
10035      l_kff_flx   kff_flx_type;
10036      l_kff_flq   kff_flq_type;
10037      l_kff_str   kff_str_type;
10038      l_kff_seg   kff_seg_type;
10039      l_kff_fqa   kff_fqa_type;
10040      l_file_who  who_type;
10041 BEGIN
10042    l_func_name := g_api_name || 'up_kff_flexq_assign()';
10043    init('KFF_FLEXQ_ASSIGN', p_upload_phase);
10044    IF (g_debug_on) THEN
10045       debug(l_func_name,
10046             'PHASE:'  || p_upload_phase ||
10047             ',UMODE:' || p_upload_mode  ||
10048             ',CMODE:' || p_custom_mode  ||
10049             ',APPS:'  || p_application_short_name ||
10050             ',KFF:'   || p_id_flex_code ||
10051             ',STR:'   || p_id_flex_structure_code ||
10052             ',COL:'   || p_application_column_name ||
10053             ',FLEXQ:' || p_segment_attribute_type ||
10054             ',AVAL:'  || p_attribute_value);
10055    END IF;
10056 
10057    IF (p_upload_mode = 'NLS') THEN
10058       --
10059       -- No translation here.
10060       --
10061       IF (g_debug_on) THEN
10062          debug(l_func_name, 'No translation here.');
10063       END IF;
10064       GOTO label_done;
10065    END IF;
10066 
10067    --
10068    -- Make sure KFF, Flex Qual, Structure and Segment exist.
10069    --
10070    get_kff_flx(p_application_short_name,
10071                p_id_flex_code,
10072                l_kff_flx);
10073 
10074    get_kff_flq(l_kff_flx,
10075                p_segment_attribute_type,
10076                l_kff_flq);
10077 
10078    get_kff_str(l_kff_flx,
10079                p_id_flex_structure_code,
10080                l_kff_str);
10081 
10082    get_kff_seg(l_kff_str,
10083                p_application_column_name,
10084                l_kff_seg);
10085 
10086    IF (p_upload_phase = 'BEGIN') THEN
10087       --
10088       -- Gather WHO Information.
10089       --
10090       IF (get_kff_fqa(l_kff_flq,
10091                       l_kff_seg,
10092                       l_kff_fqa)) THEN
10093          NULL;
10094       END IF;
10095 
10096       --
10097       -- Check WHO Information.
10098       --
10099       IF (NOT is_upload_allowed
10100           (p_custom_mode                  => p_custom_mode,
10101            p_file_owner                   => p_owner,
10102            p_file_last_update_date        => p_last_update_date,
10103            p_db_last_updated_by           => l_kff_fqa.last_updated_by,
10104            p_db_last_update_date          => l_kff_fqa.last_update_date,
10105            x_file_who                     => l_file_who)) THEN
10106          IF (g_debug_on) THEN
10107             debug(l_func_name, 'Upload is not allowed because of customization.');
10108          END IF;
10109          GOTO label_done;
10110       END IF;
10111 
10112       --
10113       -- Usual upload.
10114       --
10115       IF (g_debug_on) THEN
10116          debug(l_func_name, 'Updating KFF_FLEXQ_ASSIGN.(no-TL)');
10117       END IF;
10118       UPDATE fnd_segment_attribute_values SET
10119         last_updated_by   = l_file_who.last_updated_by,
10120         last_update_date  = l_file_who.last_update_date,
10121         last_update_login = l_file_who.last_update_login,
10122         attribute_value   = p_attribute_value
10123         WHERE application_id = l_kff_flx.application_id
10124         AND id_flex_code = l_kff_flx.id_flex_code
10125         AND id_flex_num = l_kff_str.id_flex_num
10126         AND application_column_name = l_kff_seg.application_column_name
10127         AND segment_attribute_type = l_kff_flq.segment_attribute_type;
10128 
10129       IF (SQL%notfound) THEN
10130          IF (g_debug_on) THEN
10131             debug(l_func_name, 'Inserting KFF_FLEXQ_ASSIGN.(no-TL)');
10132          END IF;
10133          INSERT INTO fnd_segment_attribute_values
10134            (
10135             application_id,
10136             id_flex_code,
10137             id_flex_num,
10138             application_column_name,
10139             segment_attribute_type,
10140 
10141             created_by,
10142             creation_date,
10143             last_updated_by,
10144             last_update_date,
10145             last_update_login,
10146 
10147             attribute_value
10148             )
10149            VALUES
10150            (
10151             l_kff_flx.application_id,
10152             l_kff_flx.id_flex_code,
10153             l_kff_str.id_flex_num,
10154             l_kff_seg.application_column_name,
10155             l_kff_flq.segment_attribute_type,
10156 
10157             l_file_who.created_by,
10158             l_file_who.creation_date,
10159             l_file_who.last_updated_by,
10160             l_file_who.last_update_date,
10161             l_file_who.last_update_login,
10162 
10163             p_attribute_value
10164             );
10165       END IF;
10166     ELSIF (p_upload_phase = 'END') THEN
10167       --
10168       -- Usual upload.
10169       --
10170       NULL;
10171     ELSE
10172       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
10173    END IF;
10174 
10175    <<label_done>>
10176    done('KFF_FLEXQ_ASSIGN', p_upload_phase);
10177 EXCEPTION
10178    WHEN OTHERS THEN
10179       report_public_api_exception(l_func_name,
10180                                   p_upload_phase,
10181                                   p_application_short_name,
10182                                   p_id_flex_code,
10183                                   p_id_flex_structure_code,
10184                                   p_application_column_name,
10185                                   p_segment_attribute_type);
10186 END up_kff_flexq_assign;
10187 
10188 -- --------------------------------------------------
10189 PROCEDURE up_kff_segq_assign
10190   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10191    p_upload_mode                  IN VARCHAR2,
10192    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10193    p_application_short_name       IN VARCHAR2,
10194    p_id_flex_code                 IN VARCHAR2,
10195    p_id_flex_structure_code       IN VARCHAR2,
10196    p_application_column_name      IN VARCHAR2,
10197    p_segment_attribute_type       IN VARCHAR2,
10198    p_value_attribute_type         IN VARCHAR2,
10199    p_owner                        IN VARCHAR2 DEFAULT NULL,
10200    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10201    p_assignment_order             IN VARCHAR2,
10202    p_assignment_date              IN VARCHAR2)
10203   IS
10204      l_func_name VARCHAR2(80);
10205      l_kff_flx   kff_flx_type;
10206      l_kff_str   kff_str_type;
10207      l_kff_seg   kff_seg_type;
10208      l_kff_flq   kff_flq_type;
10209 BEGIN
10210    l_func_name := g_api_name || 'up_kff_segq_assign()';
10211    init('KFF_SEGQ_ASSIGN', p_upload_phase);
10212    IF (g_debug_on) THEN
10213       debug(l_func_name,
10214             'PHASE:'  || p_upload_phase ||
10215             ',UMODE:' || p_upload_mode ||
10216             ',APPS:'  || p_application_short_name ||
10217             ',KFF:'   || p_id_flex_code ||
10218             ',STR:'   || p_id_flex_structure_code ||
10219             ',COL:'   || p_application_column_name ||
10220             ',FLEXQ:' || p_segment_attribute_type ||
10221             ',SEGQ:'  || p_value_attribute_type);
10222    END IF;
10223 
10224    IF (p_upload_mode = 'NLS') THEN
10225       --
10226       -- No translation here.
10227       --
10228       IF (g_debug_on) THEN
10229          debug(l_func_name, 'No translation here.');
10230       END IF;
10231       GOTO label_done;
10232    END IF;
10233 
10234    --
10235    -- Usual upload.
10236    --
10237 
10238    --
10239    -- Make sure KFF, Flex Qual, Structure and Segment exist.
10240    --
10241    get_kff_flx(p_application_short_name,
10242                p_id_flex_code,
10243                l_kff_flx);
10244 
10245    get_kff_flq(l_kff_flx,
10246                p_segment_attribute_type,
10247                l_kff_flq);
10248 
10249    get_kff_str(l_kff_flx,
10250                p_id_flex_structure_code,
10251                l_kff_str);
10252 
10253    get_kff_seg(l_kff_str,
10254                p_application_column_name,
10255                l_kff_seg);
10256 
10257    IF (l_kff_seg.flex_value_set_id IS NOT NULL) THEN
10258       populate_kff_segq_assign();
10259    END IF;
10260 
10261    <<label_done>>
10262    done('KFF_SEGQ_ASSIGN', p_upload_phase);
10263 EXCEPTION
10264    WHEN OTHERS THEN
10265       report_public_api_exception(l_func_name,
10266                                   p_upload_phase,
10267                                   p_application_short_name,
10268                                   p_id_flex_code,
10269                                   p_id_flex_structure_code,
10270                                   p_application_column_name,
10271                                   p_segment_attribute_type,
10272                                   p_value_attribute_type);
10273 END up_kff_segq_assign;
10274 
10275 -- --------------------------------------------------
10276 PROCEDURE up_kff_qualifier
10277   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10278    p_upload_mode                  IN VARCHAR2,
10279    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10280    p_application_short_name       IN VARCHAR2,
10281    p_id_flex_code                 IN VARCHAR2,
10282    p_flex_value_set_name          IN VARCHAR2,
10283    p_segment_attribute_type       IN VARCHAR2,
10284    p_value_attribute_type         IN VARCHAR2,
10285    p_owner                        IN VARCHAR2,
10286    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10287    p_assignment_order             IN VARCHAR2,
10288    p_assignment_date              IN VARCHAR2)
10289   IS
10290      l_func_name VARCHAR2(80);
10291      l_vst_set   vst_set_type;
10292      l_kff_flx   kff_flx_type;
10293      l_kff_flq   kff_flq_type;
10294      l_kff_sgq   kff_sgq_type;
10295      l_file_who  who_type;
10296 BEGIN
10297    l_func_name := g_api_name || 'up_kff_qualifier()';
10298    init('KFF_QUALIFIER', p_upload_phase);
10299    IF (g_debug_on) THEN
10300       debug(l_func_name,
10301             'PHASE:'  || p_upload_phase ||
10302             'UMODE:'  || p_upload_mode ||
10303             ',CMODE:' || p_custom_mode ||
10304             ',APPS:'  || p_application_short_name ||
10305             ',KFF:'   || p_id_flex_code ||
10306             ',VSET:'  || p_flex_value_set_name ||
10307             ',FLEXQ:' || p_segment_attribute_type ||
10308             ',SEGQ:'  || p_value_attribute_type ||
10309             ',ORDER:' || p_assignment_order);
10310    END IF;
10311 
10312    IF (p_upload_mode = 'NLS') THEN
10313       --
10314       -- No translation here.
10315       --
10316       IF (g_debug_on) THEN
10317          debug(l_func_name, 'No translation here.');
10318       END IF;
10319       GOTO label_done;
10320    END IF;
10321 
10322    IF (p_upload_phase = 'BEGIN') THEN
10323       --
10324       -- Usual upload.
10325       --
10326 
10327       --
10328       -- Make sure Value Set exists.
10329       --
10330       get_vst_set(p_flex_value_set_name, l_vst_set);
10331 
10332       --
10333       -- Check WHO Information.
10334       --
10335       IF (NOT is_upload_allowed
10336           (p_custom_mode                  => p_custom_mode,
10337            p_file_owner                   => p_owner,
10338            p_file_last_update_date        => p_last_update_date,
10339            p_db_last_updated_by           => l_vst_set.last_updated_by,
10340            p_db_last_update_date          => l_vst_set.last_update_date,
10341            x_file_who                     => l_file_who)) THEN
10342          IF (g_debug_on) THEN
10343             debug(l_func_name, 'Upload is not allowed because of customization.');
10344             debug(l_func_name, 'For data integrity upload must be done.');
10345          END IF;
10346          --
10347          -- Clear the customization message
10348          --
10349          fnd_message.clear();
10350       END IF;
10351 
10352       --
10353       -- Make sure KFF, Flexfield Qualifier and Segment Qualifier exist.
10354       --
10355       get_kff_flx(p_application_short_name,
10356                   p_id_flex_code,
10357                   l_kff_flx);
10358       get_kff_flq(l_kff_flx,
10359                   p_segment_attribute_type,
10360                   l_kff_flq);
10361       get_kff_sgq(l_kff_flq,
10362                   p_value_attribute_type,
10363                   l_kff_sgq);
10364 
10365       --
10366       -- Populate cross product tables.
10367       --
10368       populate_kff_flexq_assign();
10369       populate_kff_segq_assign();
10370     ELSIF (p_upload_phase = 'END') THEN
10371       --
10372       -- Usual upload.
10373       --
10374       NULL;
10375     ELSE
10376       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
10377    END IF;
10378 
10379    <<label_done>>
10380    done('KFF_QUALIFIER', p_upload_phase);
10381 EXCEPTION
10382    WHEN OTHERS THEN
10383       report_public_api_exception(l_func_name,
10384                                   p_upload_phase,
10385                                   p_application_short_name,
10386                                   p_id_flex_code,
10387                                   p_flex_value_set_name,
10388                                   p_segment_attribute_type,
10389                                   p_value_attribute_type);
10390 END up_kff_qualifier;
10391 
10392 -- --------------------------------------------------
10393 PROCEDURE up_kff_qualifier_value
10394   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10395    p_upload_mode                  IN VARCHAR2,
10396    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10397    p_application_short_name       IN VARCHAR2,
10398    p_id_flex_code                 IN VARCHAR2,
10399    p_flex_value_set_name          IN VARCHAR2,
10400    p_segment_attribute_type       IN VARCHAR2,
10401    p_value_attribute_type         IN VARCHAR2,
10402    p_parent_flex_value_low        IN VARCHAR2,
10403    p_flex_value                   IN VARCHAR2,
10404    p_owner                        IN VARCHAR2,
10405    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10406    p_compiled_value_attribute_val IN VARCHAR2)
10407   IS
10408      l_func_name VARCHAR2(80);
10409 BEGIN
10410    l_func_name := g_api_name || 'up_kff_qualifier_value()';
10411    init('KFF_QUALIFIER_VALUE', p_upload_phase);
10412    IF (g_debug_on) THEN
10413       debug(l_func_name,
10414             'PHASE:'  || p_upload_phase ||
10415             ',UMODE:' || p_upload_mode ||
10416             ',CMODE:' || p_custom_mode ||
10417             ',APPS:'  || p_application_short_name ||
10418             ',KFF:'   || p_id_flex_code ||
10419             ',VSET:'  || p_flex_value_set_name ||
10420             ',FLEXQ:' || p_segment_attribute_type ||
10421             ',SEGQ:'  || p_value_attribute_type ||
10422             ',PRNT:'  || p_parent_flex_value_low ||
10423             ',VAL:'   || p_flex_value ||
10424             ',CVAL:'  || p_compiled_value_attribute_val);
10425    END IF;
10426 
10427    upload_value_qualifier_value
10428      (p_caller_entity                => 'KFF_QUALIFIER_VALUE',
10429       p_upload_phase                 => p_upload_phase,
10430       p_upload_mode                  => p_upload_mode,
10431       p_custom_mode                  => p_custom_mode,
10432       p_flex_value_set_name          => p_flex_value_set_name,
10433       p_application_short_name       => p_application_short_name,
10434       p_id_flex_code                 => p_id_flex_code,
10435       p_segment_attribute_type       => p_segment_attribute_type,
10436       p_value_attribute_type         => p_value_attribute_type,
10437       p_parent_flex_value_low        => p_parent_flex_value_low,
10438       p_flex_value                   => p_flex_value,
10439       p_owner                        => p_owner,
10440       p_last_update_date             => p_last_update_date,
10441       p_compiled_value_attribute_val => p_compiled_value_attribute_val);
10442 
10443    <<label_done>>
10444    done('KFF_QUALIFIER_VALUE', p_upload_phase);
10445 EXCEPTION
10446    WHEN OTHERS THEN
10447       report_public_api_exception(l_func_name,
10448                                   p_upload_phase,
10449                                   p_application_short_name,
10450                                   p_id_flex_code,
10451                                   p_flex_value_set_name,
10452                                   p_segment_attribute_type,
10453                                   p_value_attribute_type,
10454                                   p_parent_flex_value_low,
10455                                   p_flex_value);
10456 END up_kff_qualifier_value;
10457 
10458 -- --------------------------------------------------
10459 FUNCTION get_qualifier_value
10460   (p_compiled_value_attributes    IN VARCHAR2,
10461    p_assignment_order             IN VARCHAR2)
10462   RETURN VARCHAR2
10463   IS
10464      l_newline        VARCHAR2(10);
10465      l_newline_length NUMBER;
10466      l_pos1           NUMBER;
10467      l_pos2           NUMBER;
10468      l_cva            VARCHAR2(32000);
10469 BEGIN
10470    l_newline := fnd_global.newline; -- for pragma rnps.
10471    l_newline_length := Length(l_newline);
10472 
10473    l_cva := l_newline || p_compiled_value_attributes || l_newline;
10474    l_pos1 := Instr(l_cva, l_newline, 1, p_assignment_order);
10475    l_pos2 := Instr(l_cva, l_newline, 1, p_assignment_order + 1);
10476    RETURN(Substr(l_cva, l_pos1 + l_newline_length,
10477                  l_pos2 - l_pos1 - l_newline_length));
10478 EXCEPTION
10479    WHEN OTHERS THEN
10480       RETURN NULL;
10481 END get_qualifier_value;
10482 
10483 /****** Should be removed later - begin ******/
10484 -- ==================================================
10485 --  VALUE_SECURITY_RULE
10486 -- ==================================================
10487 PROCEDURE up_value_security_rule
10488   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10489    p_upload_mode                  IN VARCHAR2,
10490    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10491    p_flex_value_set_name          IN VARCHAR2,
10492    p_flex_value_rule_name         IN VARCHAR2,
10493    p_parent_flex_value_low        IN VARCHAR2,
10494    p_owner                        IN VARCHAR2,
10495    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10496    p_parent_flex_value_high       IN VARCHAR2,
10497    p_error_message                IN VARCHAR2,
10498    p_description                  IN VARCHAR2)
10499   IS
10500      l_func_name VARCHAR2(80);
10501 BEGIN
10502    l_func_name := g_api_name || 'up_value_security_rule()';
10503    init('VALUE_SECURITY_RULE', p_upload_phase);
10504    up_vset_security_rule
10505      (p_upload_phase                    => p_upload_phase,
10506       p_upload_mode                     => p_upload_mode,
10507       p_custom_mode                     => p_custom_mode,
10508       p_flex_value_set_name             => p_flex_value_set_name,
10509       p_flex_value_rule_name            => p_flex_value_rule_name,
10510       p_parent_flex_value_low           => p_parent_flex_value_low,
10511       p_owner                           => p_owner,
10512       p_last_update_date                => p_last_update_date,
10513       p_parent_flex_value_high          => p_parent_flex_value_high,
10514       p_error_message                   => p_error_message,
10515       p_description                     => p_description);
10516    <<label_done>>
10517    done('VALUE_SECURITY_RULE', p_upload_phase);
10518 EXCEPTION
10519    WHEN OTHERS THEN
10520       IF (g_debug_on) THEN
10521          debug_exception_top_level(l_func_name);
10522       END IF;
10523       RAISE;
10524 END up_value_security_rule;
10525 
10526 -- --------------------------------------------------
10527 PROCEDURE up_vsec_line
10528   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10529    p_upload_mode                  IN VARCHAR2,
10530    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10531    p_flex_value_set_name          IN VARCHAR2,
10532    p_flex_value_rule_name         IN VARCHAR2,
10533    p_parent_flex_value_low        IN VARCHAR2,
10534    p_include_exclude_indicator    IN VARCHAR2,
10535    p_flex_value_low               IN VARCHAR2,
10536    p_flex_value_high              IN VARCHAR2,
10537    p_owner                        IN VARCHAR2,
10538    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10539    p_parent_flex_value_high       IN VARCHAR2)
10540   IS
10541      l_func_name VARCHAR2(80);
10542 BEGIN
10543    l_func_name := g_api_name || 'up_vsec_line()';
10544    init('VSEC_LINE', p_upload_phase);
10545    up_vset_security_line
10546      (p_upload_phase                    => p_upload_phase,
10547       p_upload_mode                     => p_upload_mode,
10548       p_custom_mode                     => p_custom_mode,
10549       p_flex_value_set_name             => p_flex_value_set_name,
10550       p_flex_value_rule_name            => p_flex_value_rule_name,
10551       p_parent_flex_value_low           => p_parent_flex_value_low,
10552       p_include_exclude_indicator       => p_include_exclude_indicator,
10553       p_flex_value_low                  => p_flex_value_low,
10554       p_flex_value_high                 => p_flex_value_high,
10555       p_owner                           => p_owner,
10556       p_last_update_date                => p_last_update_date,
10557       p_parent_flex_value_high          => p_parent_flex_value_high);
10558    <<label_done>>
10559    done('VSEC_LINE', p_upload_phase);
10560 EXCEPTION
10561    WHEN OTHERS THEN
10562       IF (g_debug_on) THEN
10563          debug_exception_top_level(l_func_name);
10564       END IF;
10565       RAISE;
10566 END up_vsec_line;
10567 
10568 -- --------------------------------------------------
10569 PROCEDURE up_vsec_usage
10570   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10571    p_upload_mode                  IN VARCHAR2,
10572    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10573    p_flex_value_set_name          IN VARCHAR2,
10574    p_flex_value_rule_name         IN VARCHAR2,
10575    p_parent_flex_value_low        IN VARCHAR2,
10576    p_application_short_name       IN VARCHAR2,
10577    p_responsibility_key           IN VARCHAR2,
10578    p_owner                        IN VARCHAR2,
10579    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10580    p_parent_flex_value_high       IN VARCHAR2)
10581   IS
10582      l_func_name VARCHAR2(80);
10583 BEGIN
10584    l_func_name := g_api_name || 'up_vsec_usage()';
10585    init('VSEC_USAGE', p_upload_phase);
10586    up_vset_security_usage
10587      (p_upload_phase                    => p_upload_phase,
10588       p_upload_mode                     => p_upload_mode,
10589       p_custom_mode                     => p_custom_mode,
10590       p_flex_value_set_name             => p_flex_value_set_name,
10591       p_flex_value_rule_name            => p_flex_value_rule_name,
10592       p_parent_flex_value_low           => p_parent_flex_value_low,
10593       p_application_short_name          => p_application_short_name,
10594       p_responsibility_key              => p_responsibility_key,
10595       p_owner                           => p_owner,
10596       p_last_update_date                => p_last_update_date,
10597       p_parent_flex_value_high          => p_parent_flex_value_high);
10598    <<label_done>>
10599    done('VSEC_USAGE', p_upload_phase);
10600 EXCEPTION
10601    WHEN OTHERS THEN
10602       IF (g_debug_on) THEN
10603          debug_exception_top_level(l_func_name);
10604       END IF;
10605       RAISE;
10606 END up_vsec_usage;
10607 
10608 -- ==================================================
10609 -- VALUE_ROLLUP_GROUP
10610 -- ==================================================
10611 PROCEDURE up_value_rollup_group
10612   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10613    p_upload_mode                  IN VARCHAR2,
10614    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10615    p_flex_value_set_name          IN VARCHAR2,
10616    p_hierarchy_code               IN VARCHAR2,
10617    p_owner                        IN VARCHAR2,
10618    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10619    p_hierarchy_name               IN VARCHAR2,
10620    p_description                  IN VARCHAR2)
10621   IS
10622      l_func_name VARCHAR2(80);
10623 BEGIN
10624    l_func_name := g_api_name || 'up_value_rollup_group()';
10625    init('VALUE_ROLLUP_GROUP', p_upload_phase);
10626    up_vset_rollup_group
10627      (p_upload_phase                    => p_upload_phase,
10628       p_upload_mode                     => p_upload_mode,
10629       p_custom_mode                     => p_custom_mode,
10630       p_flex_value_set_name             => p_flex_value_set_name,
10631       p_hierarchy_code                  => p_hierarchy_code,
10632       p_owner                           => p_owner,
10633       p_last_update_date                => p_last_update_date,
10634       p_hierarchy_name                  => p_hierarchy_name,
10635       p_description                     => p_description);
10636    <<label_done>>
10637    done('VALUE_ROLLUP_GROUP', p_upload_phase);
10638 EXCEPTION
10639    WHEN OTHERS THEN
10640       IF (g_debug_on) THEN
10641          debug_exception_top_level(l_func_name);
10642       END IF;
10643       RAISE;
10644 END up_value_rollup_group;
10645 
10646 -- ==================================================
10647 -- VALUE_SET_VALUE
10648 -- ==================================================
10649 PROCEDURE up_value_set_value
10650   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10651    p_upload_mode                  IN VARCHAR2,
10652    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10653    p_flex_value_set_name          IN VARCHAR2,
10654    p_parent_flex_value_low        IN VARCHAR2,
10655    p_flex_value                   IN VARCHAR2,
10656    p_owner                        IN VARCHAR2,
10657    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10658    p_enabled_flag                 IN VARCHAR2,
10659    p_summary_flag                 IN VARCHAR2,
10660    p_start_date_active            IN VARCHAR2,
10661    p_end_date_active              IN VARCHAR2,
10662    p_parent_flex_value_high       IN VARCHAR2,
10663    p_rollup_flex_value_set_name   IN VARCHAR2,
10664    p_rollup_hierarchy_code        IN VARCHAR2,
10665    p_hierarchy_level              IN VARCHAR2,
10666    p_compiled_value_attributes    IN VARCHAR2,
10667    p_value_category               IN VARCHAR2,
10668    p_attribute1                   IN VARCHAR2,
10669    p_attribute2                   IN VARCHAR2,
10670    p_attribute3                   IN VARCHAR2,
10671    p_attribute4                   IN VARCHAR2,
10672    p_attribute5                   IN VARCHAR2,
10673    p_attribute6                   IN VARCHAR2,
10674    p_attribute7                   IN VARCHAR2,
10675    p_attribute8                   IN VARCHAR2,
10676    p_attribute9                   IN VARCHAR2,
10677    p_attribute10                  IN VARCHAR2,
10678    p_attribute11                  IN VARCHAR2,
10679    p_attribute12                  IN VARCHAR2,
10680    p_attribute13                  IN VARCHAR2,
10681    p_attribute14                  IN VARCHAR2,
10682    p_attribute15                  IN VARCHAR2,
10683    p_attribute16                  IN VARCHAR2,
10684    p_attribute17                  IN VARCHAR2,
10685    p_attribute18                  IN VARCHAR2,
10686    p_attribute19                  IN VARCHAR2,
10687    p_attribute20                  IN VARCHAR2,
10688    p_attribute21                  IN VARCHAR2,
10689    p_attribute22                  IN VARCHAR2,
10690    p_attribute23                  IN VARCHAR2,
10691    p_attribute24                  IN VARCHAR2,
10692    p_attribute25                  IN VARCHAR2,
10693    p_attribute26                  IN VARCHAR2,
10694    p_attribute27                  IN VARCHAR2,
10695    p_attribute28                  IN VARCHAR2,
10696    p_attribute29                  IN VARCHAR2,
10697    p_attribute30                  IN VARCHAR2,
10698    p_attribute31                  IN VARCHAR2,
10699    p_attribute32                  IN VARCHAR2,
10700    p_attribute33                  IN VARCHAR2,
10701    p_attribute34                  IN VARCHAR2,
10702    p_attribute35                  IN VARCHAR2,
10703    p_attribute36                  IN VARCHAR2,
10704    p_attribute37                  IN VARCHAR2,
10705    p_attribute38                  IN VARCHAR2,
10706    p_attribute39                  IN VARCHAR2,
10707    p_attribute40                  IN VARCHAR2,
10708    p_attribute41                  IN VARCHAR2,
10709    p_attribute42                  IN VARCHAR2,
10710    p_attribute43                  IN VARCHAR2,
10711    p_attribute44                  IN VARCHAR2,
10712    p_attribute45                  IN VARCHAR2,
10713    p_attribute46                  IN VARCHAR2,
10714    p_attribute47                  IN VARCHAR2,
10715    p_attribute48                  IN VARCHAR2,
10716    p_attribute49                  IN VARCHAR2,
10717    p_attribute50                  IN VARCHAR2,
10718    p_flex_value_meaning           IN VARCHAR2,
10719    p_description                  IN VARCHAR2)
10720   IS
10721      l_func_name VARCHAR2(80);
10722 BEGIN
10723    l_func_name := g_api_name || 'up_value_set_value()';
10724    init('VALUE_SET_VALUE', p_upload_phase);
10725    up_vset_value
10726      (p_upload_phase                    => p_upload_phase,
10727       p_upload_mode                     => p_upload_mode,
10728       p_custom_mode                     => p_custom_mode,
10729       p_flex_value_set_name             => p_flex_value_set_name,
10730       p_parent_flex_value_low           => p_parent_flex_value_low,
10731       p_flex_value                      => p_flex_value,
10732       p_owner                           => p_owner,
10733       p_last_update_date                => p_last_update_date,
10734       p_enabled_flag                    => p_enabled_flag,
10735       p_summary_flag                    => p_summary_flag,
10736       p_start_date_active               => p_start_date_active,
10737       p_end_date_active                 => p_end_date_active,
10738       p_parent_flex_value_high          => p_parent_flex_value_high,
10739       p_rollup_hierarchy_code           => p_rollup_hierarchy_code,
10740       p_hierarchy_level                 => p_hierarchy_level,
10741       p_compiled_value_attributes       => p_compiled_value_attributes,
10742       p_value_category                  => p_value_category,
10743       p_attribute1                      => p_attribute1,
10744       p_attribute2                      => p_attribute2,
10745       p_attribute3                      => p_attribute3,
10746       p_attribute4                      => p_attribute4,
10747       p_attribute5                      => p_attribute5,
10748       p_attribute6                      => p_attribute6,
10749       p_attribute7                      => p_attribute7,
10750       p_attribute8                      => p_attribute8,
10751       p_attribute9                      => p_attribute9,
10752       p_attribute10                     => p_attribute10,
10753       p_attribute11                     => p_attribute11,
10754       p_attribute12                     => p_attribute12,
10755       p_attribute13                     => p_attribute13,
10756       p_attribute14                     => p_attribute14,
10757       p_attribute15                     => p_attribute15,
10758       p_attribute16                     => p_attribute16,
10759       p_attribute17                     => p_attribute17,
10760       p_attribute18                     => p_attribute18,
10761       p_attribute19                     => p_attribute19,
10762       p_attribute20                     => p_attribute20,
10763       p_attribute21                     => p_attribute21,
10764       p_attribute22                     => p_attribute22,
10765       p_attribute23                     => p_attribute23,
10766       p_attribute24                     => p_attribute24,
10767       p_attribute25                     => p_attribute25,
10768       p_attribute26                     => p_attribute26,
10769       p_attribute27                     => p_attribute27,
10770       p_attribute28                     => p_attribute28,
10771       p_attribute29                     => p_attribute29,
10772       p_attribute30                     => p_attribute30,
10773       p_attribute31                     => p_attribute31,
10774       p_attribute32                     => p_attribute32,
10775       p_attribute33                     => p_attribute33,
10776       p_attribute34                     => p_attribute34,
10777       p_attribute35                     => p_attribute35,
10778       p_attribute36                     => p_attribute36,
10779       p_attribute37                     => p_attribute37,
10780       p_attribute38                     => p_attribute38,
10781       p_attribute39                     => p_attribute39,
10782       p_attribute40                     => p_attribute40,
10783       p_attribute41                     => p_attribute41,
10784       p_attribute42                     => p_attribute42,
10785       p_attribute43                     => p_attribute43,
10786       p_attribute44                     => p_attribute44,
10787       p_attribute45                     => p_attribute45,
10788       p_attribute46                     => p_attribute46,
10789       p_attribute47                     => p_attribute47,
10790       p_attribute48                     => p_attribute48,
10791       p_attribute49                     => p_attribute49,
10792       p_attribute50                     => p_attribute50,
10793       p_attribute_sort_order            => NULL,
10794       p_flex_value_meaning              => p_flex_value_meaning,
10795       p_description                     => p_description);
10796    <<label_done>>
10797    done('VALUE_SET_VALUE', p_upload_phase);
10798 EXCEPTION
10799    WHEN OTHERS THEN
10800       IF (g_debug_on) THEN
10801          debug_exception_top_level(l_func_name);
10802       END IF;
10803       RAISE;
10804 END up_value_set_value;
10805 
10806 -- --------------------------------------------------
10807 PROCEDURE up_val_norm_hierarchy
10808   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10809    p_upload_mode                  IN VARCHAR2,
10810    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10811    p_flex_value_set_name          IN VARCHAR2,
10812    p_parent_flex_value            IN VARCHAR2,
10813    p_range_attribute              IN VARCHAR2,
10814    p_child_flex_value_low         IN VARCHAR2,
10815    p_child_flex_value_high        IN VARCHAR2,
10816    p_owner                        IN VARCHAR2,
10817    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10818    p_start_date_active            IN VARCHAR2,
10819    p_end_date_active              IN VARCHAR2)
10820   IS
10821      l_func_name VARCHAR2(80);
10822 BEGIN
10823    l_func_name := g_api_name || 'up_val_norm_hierarchy()';
10824    init('VAL_NORM_HIERARCHY', p_upload_phase);
10825    up_vset_value_hierarchy
10826      (p_upload_phase                    => p_upload_phase,
10827       p_upload_mode                     => p_upload_mode,
10828       p_custom_mode                     => p_custom_mode,
10829       p_flex_value_set_name             => p_flex_value_set_name,
10830       p_parent_flex_value               => p_parent_flex_value,
10831       p_range_attribute                 => p_range_attribute,
10832       p_child_flex_value_low            => p_child_flex_value_low,
10833       p_child_flex_value_high           => p_child_flex_value_high,
10834       p_owner                           => p_owner,
10835       p_last_update_date                => p_last_update_date,
10836       p_start_date_active               => p_start_date_active,
10837       p_end_date_active                 => p_end_date_active);
10838    <<label_done>>
10839    done('VAL_NORM_HIERARCHY', p_upload_phase);
10840 EXCEPTION
10841    WHEN OTHERS THEN
10842       IF (g_debug_on) THEN
10843          debug_exception_top_level(l_func_name);
10844       END IF;
10845       RAISE;
10846 END up_val_norm_hierarchy;
10847 
10848 -- --------------------------------------------------
10849 PROCEDURE up_val_qual_value
10850   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10851    p_upload_mode                  IN VARCHAR2,
10852    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10853    p_flex_value_set_name          IN VARCHAR2,
10854    p_parent_flex_value_low        IN VARCHAR2,
10855    p_flex_value                   IN VARCHAR2,
10856    p_id_flex_application_short_na IN VARCHAR2,
10857    p_id_flex_code                 IN VARCHAR2,
10858    p_segment_attribute_type       IN VARCHAR2,
10859    p_value_attribute_type         IN VARCHAR2,
10860    p_owner                        IN VARCHAR2,
10861    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10862    p_assignment_order             IN VARCHAR2,
10863    p_assignment_date              IN VARCHAR2,
10864    p_compiled_value_attribute_val IN VARCHAR2)
10865   IS
10866      l_func_name VARCHAR2(80);
10867 BEGIN
10868    l_func_name := g_api_name || 'up_val_qual_value()';
10869    init('VAL_QUAL_VALUE', p_upload_phase);
10870    up_vset_value_qual_value
10871      (p_upload_phase                    => p_upload_phase,
10872       p_upload_mode                     => p_upload_mode,
10873       p_custom_mode                     => p_custom_mode,
10874       p_flex_value_set_name             => p_flex_value_set_name,
10875       p_parent_flex_value_low           => p_parent_flex_value_low,
10876       p_flex_value                      => p_flex_value,
10877       p_id_flex_application_short_na    => p_id_flex_application_short_na,
10878       p_id_flex_code                    => p_id_flex_code,
10879       p_segment_attribute_type          => p_segment_attribute_type,
10880       p_value_attribute_type            => p_value_attribute_type,
10881       p_owner                           => p_owner,
10882       p_last_update_date                => p_last_update_date,
10883       p_compiled_value_attribute_val    => p_compiled_value_attribute_val);
10884    <<label_done>>
10885    done('VAL_QUAL_VALUE', p_upload_phase);
10886 EXCEPTION
10887    WHEN OTHERS THEN
10888       IF (g_debug_on) THEN
10889          debug_exception_top_level(l_func_name);
10890       END IF;
10891       RAISE;
10892 END up_val_qual_value;
10893 /****** Should be removed later - end ******/
10894 
10895 BEGIN
10896    g_debug_on := FALSE;
10897    g_left_margin := '';
10898    g_numof_changes := 0;
10899    g_numof_changes_kff_str := 0;
10900    g_lock_handle := NULL;
10901    g_root_error := NULL;
10902    g_call_stack := NULL;
10903    g_savepoint_entity_name := NULL;
10904    g_is_commit_ok := NULL;
10905 
10906    --
10907    -- Declaring a constant and then assigning a global variable to it solves
10908    -- 2 problems.
10909    --
10910    -- 1. Because of purity problems, fnd_load_util.null_value() cannot be
10911    --    called here.
10912    --    It has to be called when a constant variable is declared.
10913    -- 2. PL/SQL has a bug and if a constant is initialized with a function call,
10914    --    PL/SQL calls that function every time this constant is used.
10915    --
10916    -- So, declaring a constant variable and initializing it
10917    -- with fnd_load_util.null_value() solves the purity problem.
10918    -- Then copying this value to another global variable solves
10919    -- the PL/SQL problem.
10920    --
10921    g_null_value  := g_null_value_constant;
10922 
10923    g_newline     := fnd_global.newline();
10924    --
10925    -- Old ldt files do not have LAST_UPDATE_DATE data in them. So
10926    -- use 2001/12/15 as their last update date. This is the date when
10927    -- this change was added. It is as good as any other date.
10928    -- Do not change this date, otherwise it will cause unnecessary
10929    -- re-uploads.
10930    --
10931    g_default_lud := To_date('2001/12/15 00:00:00', g_date_mask);
10932 END fnd_flex_loader_apis;