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.25 2012/03/27 14:49:07 hgeorgi 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_seed_stage_util.insert_msg(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_seed_stage_util.insert_msg(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', '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, 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       -- Bug 13885279, this NLS code is no longer need as it has been moved
6543       -- to up_desc_flex_nls() and called from afffload.lct. We are leaving
6544       -- this code here for backward compatibility. If old vrsn of lct file
6545       -- is used, it will not cause bug 13885279. Also other code may call
6546       -- up_desc_flex like afcpprog.lct which have not been modified to call
6547       -- up_desc_flex_nls().
6548       IF (p_upload_mode = 'NLS') THEN
6549          --
6550          -- MLS translation.
6551          --
6552 
6553          --
6554          -- Gather WHO Information.
6555          --
6556          IF (get_dff_flx_tl(l_dff_flx,
6557                             userenv('LANG'),
6558                             l_dff_flx_tl)) THEN
6559             NULL;
6560          END IF;
6561 
6562          --
6563          -- Check WHO Information.
6564          --
6565          IF (NOT is_upload_allowed
6566              (p_custom_mode                  => p_custom_mode,
6567               p_file_owner                   => p_owner,
6568               p_file_last_update_date        => p_last_update_date,
6569               p_db_last_updated_by           => l_dff_flx_tl.last_updated_by,
6570               p_db_last_update_date          => l_dff_flx_tl.last_update_date,
6571               x_file_who                     => l_file_who)) THEN
6572             IF (g_debug_on) THEN
6573                debug(l_func_name, 'Upload is not allowed because of customization.');
6574             END IF;
6575             GOTO label_done;
6576          END IF;
6577 
6578          IF (g_debug_on) THEN
6579             debug(l_func_name, 'Translating DESC_FLEX.(MLS)');
6580          END IF;
6581          fnd_descriptive_flexs_pkg.translate_row
6582            (x_application_short_name       => p_application_short_name,
6583             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
6584             x_who                          => l_file_who,
6585             x_title                        => l_title,
6586             x_form_context_prompt          => p_form_context_prompt,
6587             x_description                  => p_description);
6588        ELSE
6589          --
6590          -- Usual upload.
6591          --
6592 
6593          --
6594          -- Check WHO Information.
6595          --
6596          IF (NOT is_upload_allowed
6597              (p_custom_mode                  => p_custom_mode,
6598               p_file_owner                   => p_owner,
6599               p_file_last_update_date        => p_last_update_date,
6600               p_db_last_updated_by           => l_dff_flx.last_updated_by,
6601               p_db_last_update_date          => l_dff_flx.last_update_date,
6602               x_file_who                     => l_file_who)) THEN
6603 
6604             --
6605             -- SRS DFFs are handled in upload_srs_desc_flex().
6606             --
6607             IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%')  THEN
6608                IF (g_debug_on) THEN
6609                   debug(l_func_name, 'Upload is not allowed because of customization.');
6610                END IF;
6611                GOTO label_done;
6612             else
6613                --
6614                -- Clear the customization message
6615                --
6616                fnd_message.clear();
6617             END IF;
6618          END IF;
6619 
6620          IF (l_descriptive_flexfield_name LIKE '$SRS$.%')  THEN
6621             --
6622             -- Come up with a unique LDT SRS Desc Flex Name.
6623             --
6624             g_srs_loader_flex_name := get_srs_loader_flex_name();
6625 
6626             --
6627             -- Delete the old LDT SRS Desc Flex.
6628             --
6629             delete_srs_desc_flex(p_application_short_name,
6630                                  g_srs_loader_flex_name);
6631 
6632             --
6633             -- LDT SRS Desc Flex.
6634             --
6635             l_descriptive_flexfield_name := g_srs_loader_flex_name;
6636             l_title := g_srs_loader_flex_name;
6637             IF (g_debug_on) THEN
6638                debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
6639             END IF;
6640          END IF;
6641 
6642          --
6643          -- Make sure Table exists.
6644          --
6645          get_tbl(p_table_application_short_name,
6646                  p_application_table_name,
6647                  l_tbl);
6648 
6649          --
6650          -- Make sure Context Override Value Set exists.
6651          --
6652          IF (p_context_override_value_set_n IS NOT NULL) THEN
6653             get_vst_set(p_context_override_value_set_n, l_vst_set);
6654          END IF;
6655 
6656          --
6657          -- Check protected flag
6658          --
6659          IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6660             IF (p_protected_flag <> 'S') THEN
6661                raise_error(l_func_name, ERROR_DFF_INV_PROT_FLG,
6662                            'PROTECTED_FLAG (' || p_protected_flag || ') must be S for SRS DFFs',
6663                            'Please fix this problem in source DB and re-download the ldt file');
6664             END IF;
6665           ELSE
6666             IF (p_protected_flag NOT IN ('Y', 'N')) THEN
6667                raise_error(l_func_name, ERROR_DFF_INV_PROT_FLG,
6668                            'PROTECTED_FLAG (' || p_protected_flag || ') must be either Y (developer DFF) or N (customer DFF)',
6669                            'Please fix this problem in source DB and re-download the ldt file');
6670             END IF;
6671          END IF;
6672 
6673          --
6674          -- Intentional/Unintentional NULL handling.
6675          --
6676          IF (p_concatenated_segs_view_name IS NULL) THEN
6677             l_concatenated_segs_view_name := l_dff_flx.concatenated_segs_view_name;
6678           ELSIF (p_concatenated_segs_view_name = g_null_value) THEN
6679             l_concatenated_segs_view_name := NULL;
6680           ELSE
6681             l_concatenated_segs_view_name := p_concatenated_segs_view_name;
6682          END IF;
6683 
6684          --
6685          -- Default value for context synchronization flag
6686          -- for backward compatibility
6687          --
6688          -- If parameter is not 'Y' / 'N'
6689          --   try db value first,
6690          --   if db value is also not 'Y' / 'N' then
6691          --     for conc program, sync flag is  'N'
6692          --     else
6693          --       if reference field has a value AND display flag is off then
6694          --         sync flag is 'Y'
6695          --       else sync flag is 'N'
6696          --
6697          l_context_synchronization_flag := Nvl(p_context_synchronization_flag, 'X');
6698          IF (l_context_synchronization_flag NOT IN ('Y', 'N')) THEN
6699             IF (l_dff_flx.context_synchronization_flag IN ('Y', 'N')) THEN
6700                l_context_synchronization_flag := l_dff_flx.context_synchronization_flag;
6701             ELSE
6702                IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6703                   l_context_synchronization_flag := 'N';
6704                ELSE
6705                   IF ((p_default_context_field_name is NOT NULL) AND
6706                       (p_context_user_override_flag = 'N')) THEN
6707                      l_context_synchronization_flag := 'Y';
6708                   ELSE
6709                      l_context_synchronization_flag := 'N';
6710                   END IF;
6711                END IF;
6712             END IF;
6713          END IF;
6714 
6715          IF (g_debug_on) THEN
6716             debug(l_func_name, 'Uploading DESC_FLEX.(MLS)');
6717          END IF;
6718          fnd_descriptive_flexs_pkg.load_row
6719            (x_application_short_name       => p_application_short_name,
6720             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
6721             x_who                          => l_file_who,
6722             x_table_application_short_name => p_table_application_short_name,
6723             x_application_table_name       => p_application_table_name,
6724             x_concatenated_segs_view_name  => l_concatenated_segs_view_name,
6725             x_context_required_flag        => p_context_required_flag,
6726             x_context_column_name          => p_context_column_name,
6727             x_context_user_override_flag   => p_context_user_override_flag,
6728             x_concatenated_segment_delimit => p_concatenated_segment_delimit,
6729             x_freeze_flex_definition_flag  => p_freeze_flex_definition_flag,
6730             x_protected_flag               => p_protected_flag,
6731             x_default_context_field_name   => p_default_context_field_name,
6732             x_default_context_value        => p_default_context_value,
6733             x_context_default_type         => p_context_default_type,
6734             x_context_default_value        => p_context_default_value,
6735             x_context_override_value_set_n => p_context_override_value_set_n,
6736             x_context_runtime_property_fun => p_context_runtime_property_fun,
6737             x_context_synchronization_flag => l_context_synchronization_flag,
6738             x_title                        => l_title,
6739             x_form_context_prompt          => p_form_context_prompt,
6740             x_description                  => p_description);
6741       END IF;
6742     ELSIF (p_upload_phase = 'END') THEN
6743       IF (p_upload_mode = 'NLS') THEN
6744          --
6745          -- MLS translation.
6746          --
6747          NULL;
6748        ELSE
6749          --
6750          -- Usual upload.
6751          --
6752 
6753          --
6754          -- LDT SRS Desc Flex.
6755          --
6756          IF (l_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6757             l_descriptive_flexfield_name := g_srs_loader_flex_name;
6758             IF (g_debug_on) THEN
6759                debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
6760             END IF;
6761          END IF;
6762 
6763          IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%') THEN
6764             --
6765             -- Make sure Context column is marked in fnd_columns.
6766             --
6767             fnd_flex_loader_apis.up_dff_column
6768               (p_upload_phase               => 'LEAF',
6769                p_upload_mode                => NULL,
6770                p_application_short_name     => p_application_short_name,
6771                p_descriptive_flexfield_name => l_descriptive_flexfield_name,
6772                p_column_name                => p_context_column_name,
6773                p_owner                      => p_owner,
6774                p_last_update_date           => p_last_update_date,
6775                p_flexfield_usage_code       => 'C');
6776          END IF;
6777 
6778          --
6779          -- Make sure Global Context is created.
6780          --
6781          get_dff_flx(p_application_short_name,
6782                      l_descriptive_flexfield_name,
6783                      l_dff_flx);
6784 
6785          IF (NOT get_dff_ctx(l_dff_flx,
6786                              'Global Data Elements',
6787                              l_dff_ctx)) THEN
6788             fnd_flex_loader_apis.up_dff_context
6789               (p_upload_phase                 => 'BEGIN',
6790                p_upload_mode                  => NULL,
6791                p_application_short_name       => p_application_short_name,
6792                p_descriptive_flexfield_name   => l_descriptive_flexfield_name,
6793                p_descriptive_flex_context_cod => 'Global Data Elements',
6794                p_owner                        => p_owner,
6795                p_last_update_date             => p_last_update_date,
6796                p_enabled_flag                 => 'Y',
6797                p_global_flag                  => 'Y',
6798                p_descriptive_flex_context_nam => 'Global Data Elements',
6799                p_description                  => 'Global Data Element Context');
6800          END IF;
6801 
6802          IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
6803             g_numof_changes := 0;
6804             upload_srs_desc_flex(p_custom_mode                => p_custom_mode,
6805                                  p_application_short_name     => p_application_short_name,
6806                                  p_descriptive_flexfield_name => p_descriptive_flexfield_name,
6807                                  p_title                      => p_title);
6808          END IF;
6809       END IF; -- p_upload_mode
6810       --
6811       -- Compile Flex, Generate View.
6812       --
6813       IF (g_numof_changes > 0) THEN
6814          call_cp(p_mode                       => 'DFF',
6815                  p_upload_mode                => p_upload_mode,
6816                  p_application_short_name     => p_application_short_name,
6817                  p_descriptive_flexfield_name => p_descriptive_flexfield_name);
6818       END IF;
6819       finish_transaction(ENTITY_DESC_FLEX);
6820     ELSE
6821       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
6822    END IF; -- p_upload_phase
6823 
6824    <<label_done>>
6825    done('DESC_FLEX', p_upload_phase);
6826 EXCEPTION
6827    WHEN OTHERS THEN
6828       report_public_api_exception(l_func_name,
6829                                   p_upload_phase,
6830                                   p_application_short_name,
6831                                   p_descriptive_flexfield_name);
6832 
6833       BEGIN
6834          release_entity();
6835          IF (p_upload_phase = 'END') THEN
6836             finish_transaction(ENTITY_DESC_FLEX);
6837          END IF;
6838       EXCEPTION
6839          WHEN OTHERS THEN
6840             report_public_api_exception(l_func_name,
6841                                         p_upload_phase,
6842                                         p_application_short_name,
6843                                         p_descriptive_flexfield_name);
6844       END;
6845 END up_desc_flex;
6846 
6847 -- --------------------------------------------------
6848 PROCEDURE up_dff_column
6849   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
6850    p_upload_mode                  IN VARCHAR2,
6851    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
6852    p_application_short_name       IN VARCHAR2,
6853    p_descriptive_flexfield_name   IN VARCHAR2,
6854    p_column_name                  IN VARCHAR2,
6855    p_owner                        IN VARCHAR2,
6856    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
6857    p_flexfield_usage_code         IN VARCHAR2)
6858   IS
6859      l_func_name VARCHAR2(80);
6860      l_dff_flx   dff_flx_type;
6861      l_col       col_type;
6862      l_file_who  who_type;
6863 BEGIN
6864    l_func_name := g_api_name || 'up_dff_column()';
6865    init('DFF_COLUMN', p_upload_phase);
6866    IF (g_debug_on) THEN
6867       debug(l_func_name,
6868             'PHASE:'  || p_upload_phase ||
6869             ',UMODE:' || p_upload_mode ||
6870             ',CMODE:' || p_custom_mode ||
6871             ',APPS:'  || p_application_short_name ||
6872             ',DFF:'   || p_descriptive_flexfield_name ||
6873             ',COL:'   || p_column_name ||
6874             ',USG:'   || p_flexfield_usage_code);
6875    END IF;
6876 
6877    IF (p_upload_mode = 'NLS') THEN
6878       --
6879       -- No translation here.
6880       --
6881       IF (g_debug_on) THEN
6882          debug(l_func_name, 'No translation here.');
6883       END IF;
6884       GOTO label_done;
6885    END IF;
6886 
6887    --
6888    -- Make sure DFF and Column exist.
6889    --
6890    get_dff_flx(p_application_short_name,
6891                p_descriptive_flexfield_name,
6892                l_dff_flx);
6893 
6894    get_col(l_dff_flx.table_application_id,
6895            l_dff_flx.application_table_name,
6896            p_column_name,
6897            l_col);
6898 
6899    --
6900    -- Check WHO Information.
6901    --
6902    IF (NOT is_upload_allowed
6903        (p_custom_mode                  => p_custom_mode,
6904         p_file_owner                   => p_owner,
6905         p_file_last_update_date        => p_last_update_date,
6906         p_db_last_updated_by           => l_col.last_updated_by,
6907         p_db_last_update_date          => l_col.last_update_date,
6908         x_file_who                     => l_file_who)) THEN
6909       IF (g_debug_on) THEN
6910          debug(l_func_name, 'Upload is not allowed because of customization.');
6911          debug(l_func_name, 'For data integrity upload must be done.');
6912       END IF;
6913 
6914       --
6915       -- Clear the customization message
6916       --
6917       fnd_message.clear();
6918    END IF;
6919 
6920    --
6921    -- Usual upload.
6922    --
6923    IF ((p_descriptive_flexfield_name NOT LIKE '$SRS$.%') AND
6924        (p_flexfield_usage_code IN ('C','D'))) THEN
6925       --
6926       -- Make sure column is not in use.
6927       --
6928       IF ((((l_col.flexfield_application_id IS NULL) OR
6929             (l_col.flexfield_application_id = l_dff_flx.application_id)) AND
6930            ((l_col.flexfield_name IS NULL) OR
6931             (l_col.flexfield_name = p_descriptive_flexfield_name)) AND
6932            ((l_col.flexfield_usage_code IS NULL) OR
6933             (l_col.flexfield_usage_code = p_flexfield_usage_code))) OR
6934           (l_col.flexfield_usage_code = 'N') OR
6935           ((l_col.flexfield_application_id = l_dff_flx.application_id) AND
6936            (l_col.flexfield_name = p_descriptive_flexfield_name) AND
6937            (l_col.flexfield_usage_code = 'D') AND
6938            (p_flexfield_usage_code = 'C'))) THEN
6939 
6940          IF (g_debug_on) THEN
6941             debug(l_func_name, 'Updating DFF_COLUMN.(no-TL)');
6942          END IF;
6943          UPDATE fnd_columns SET
6944            last_updated_by          = l_file_who.last_updated_by,
6945            last_update_date         = l_file_who.last_update_date,
6946            last_update_login        = l_file_who.last_update_login,
6947            flexfield_application_id = Decode(p_flexfield_usage_code,
6948                                              'N', NULL,
6949                                              l_dff_flx.application_id),
6950            flexfield_name           = Decode(p_flexfield_usage_code,
6951                                              'N', NULL,
6952                                              l_dff_flx.descriptive_flexfield_name),
6953            flexfield_usage_code     = p_flexfield_usage_code
6954            WHERE application_id = l_col.application_id
6955            AND table_id = l_col.table_id
6956            AND column_name = l_col.column_name;
6957          IF (SQL%rowcount > 0) THEN
6958             g_numof_changes := g_numof_changes + 1;
6959          END IF;
6960        ELSE
6961          raise_error(l_func_name, ERROR_DFF_COL_USED,
6962                      'COL:' || p_column_name || ' is used by ' ||
6963                      'APP Id:' || To_char(l_col.flexfield_application_id) ||
6964                      ' Flex Name:' || l_col.flexfield_name ||
6965                      ' Usage Code:' || l_col.flexfield_usage_code,
6966                      'You cannot use it in another flexfield');
6967       END IF;
6968    END IF;
6969 
6970    <<label_done>>
6971    done('DFF_COLUMN', p_upload_phase);
6972 EXCEPTION
6973    WHEN OTHERS THEN
6974       report_public_api_exception(l_func_name,
6975                                   p_upload_phase,
6976                                   p_application_short_name,
6977                                   p_descriptive_flexfield_name,
6978                                   p_column_name);
6979 END up_dff_column;
6980 
6981 -- --------------------------------------------------
6982 PROCEDURE up_dff_ref_field
6983   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
6984    p_upload_mode                  IN VARCHAR2,
6985    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
6986    p_application_short_name       IN VARCHAR2,
6987    p_descriptive_flexfield_name   IN VARCHAR2,
6988    p_default_context_field_name   IN VARCHAR2,
6989    p_owner                        IN VARCHAR2,
6990    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
6991    p_description                  IN VARCHAR2)
6992   IS
6993      l_func_name VARCHAR2(80);
6994      l_dff_flx   dff_flx_type;
6995      l_dff_ref   dff_ref_type;
6996      l_file_who  who_type;
6997 BEGIN
6998    l_func_name := g_api_name || 'up_dff_ref_field()';
6999    init('DFF_REF_FIELD', p_upload_phase);
7000    IF (g_debug_on) THEN
7001       debug(l_func_name,
7002             'PHASE:'  || p_upload_phase ||
7003             ',UMODE:' || p_upload_mode ||
7004             ',CMODE:' || p_custom_mode ||
7005             ',APPS:'  || p_application_short_name ||
7006             ',DFF:'   || p_descriptive_flexfield_name ||
7007             ',REF:'   || p_default_context_field_name);
7008    END IF;
7009 
7010    IF (p_descriptive_flexfield_name LIKE '$SRS$.%') THEN
7011       --
7012       -- No Reference Field for SRS.
7013       --
7014       IF (g_debug_on) THEN
7015          debug(l_func_name, 'No Reference Field for $SRS$.');
7016       END IF;
7017       GOTO label_done;
7018    END IF;
7019 
7020    --
7021    -- Gather WHO Information.
7022    --
7023    IF (get_dff_flx(p_application_short_name,
7024                    p_descriptive_flexfield_name,
7025                    l_dff_flx)) THEN
7026       IF (get_dff_ref(l_dff_flx,
7027                       p_default_context_field_name,
7028                       l_dff_ref)) THEN
7029          NULL;
7030       END IF;
7031    END IF;
7032 
7033    --
7034    -- Check WHO Information.
7035    --
7036    IF (NOT is_upload_allowed
7037        (p_custom_mode                  => p_custom_mode,
7038         p_file_owner                   => p_owner,
7039         p_file_last_update_date        => p_last_update_date,
7040         p_db_last_updated_by           => l_dff_ref.last_updated_by,
7041         p_db_last_update_date          => l_dff_ref.last_update_date,
7042         x_file_who                     => l_file_who)) THEN
7043       IF (g_debug_on) THEN
7044          debug(l_func_name, 'Upload is not allowed because of customization.');
7045       END IF;
7046       GOTO label_done;
7047    END IF;
7048 
7049    IF (p_upload_mode = 'NLS') THEN
7050       --
7051       -- non-MLS translation.
7052       --
7053       IF (g_debug_on) THEN
7054          debug(l_func_name, 'Translating DFF_REF_FIELD.(non-MLS)');
7055       END IF;
7056       UPDATE fnd_default_context_fields SET
7057         last_updated_by   = l_file_who.last_updated_by,
7058         last_update_date  = l_file_who.last_update_date,
7059         last_update_login = l_file_who.last_update_login,
7060         description       = Nvl(p_description, description)
7061         WHERE application_id = (SELECT application_id
7062                                 FROM fnd_application
7063                                 WHERE application_short_name = p_application_short_name)
7064         AND descriptive_flexfield_name = p_descriptive_flexfield_name
7065         AND default_context_field_name = p_default_context_field_name
7066         AND userenv('LANG') = (SELECT language_code
7067                                FROM fnd_languages
7068                                WHERE installed_flag = 'B');
7069       IF (SQL%notfound) THEN
7070          IF (g_debug_on) THEN
7071             debug(l_func_name, 'No entity to translate.');
7072          END IF;
7073       END IF;
7074       GOTO label_done;
7075     ELSE
7076       --
7077       -- Usual upload.
7078       --
7079 
7080       --
7081       -- Make sure DFF exists.
7082       --
7083       get_dff_flx(p_application_short_name,
7084                   p_descriptive_flexfield_name,
7085                   l_dff_flx);
7086 
7087       IF (g_debug_on) THEN
7088          debug(l_func_name, 'Updating DFF_REF_FIELD.(non-MLS)');
7089       END IF;
7090       UPDATE fnd_default_context_fields SET
7091         last_updated_by   = l_file_who.last_updated_by,
7092         last_update_date  = l_file_who.last_update_date,
7093         last_update_login = l_file_who.last_update_login,
7094         description       = p_description
7095         WHERE application_id = l_dff_flx.application_id
7096         AND descriptive_flexfield_name = l_dff_flx.descriptive_flexfield_name
7097         AND default_context_field_name = p_default_context_field_name;
7098 
7099       IF (SQL%notfound) THEN
7100          IF (g_debug_on) THEN
7101             debug(l_func_name, 'Inserting DFF_REF_FIELD.(non-MLS)');
7102          END IF;
7103          INSERT INTO fnd_default_context_fields
7104            (
7105             application_id,
7106             descriptive_flexfield_name,
7107             default_context_field_name,
7108 
7109             created_by,
7110             creation_date,
7111             last_updated_by,
7112             last_update_date,
7113             last_update_login,
7114 
7115             description
7116             )
7117            VALUES
7118            (
7119             l_dff_flx.application_id,
7120             l_dff_flx.descriptive_flexfield_name,
7121             p_default_context_field_name,
7122 
7123             l_file_who.created_by,
7124             l_file_who.creation_date,
7125             l_file_who.last_updated_by,
7126             l_file_who.last_update_date,
7127             l_file_who.last_update_login,
7128 
7129             p_description
7130             );
7131       END IF;
7132    END IF;
7133 
7134    <<label_done>>
7135    done('DFF_REF_FIELD', p_upload_phase);
7136 EXCEPTION
7137    WHEN OTHERS THEN
7138       report_public_api_exception(l_func_name,
7139                                   p_upload_phase,
7140                                   p_application_short_name,
7141                                   p_descriptive_flexfield_name,
7142                                   p_default_context_field_name);
7143 END up_dff_ref_field;
7144 
7145 -- --------------------------------------------------
7146 PROCEDURE up_dff_context
7147   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
7148    p_upload_mode                  IN VARCHAR2,
7149    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
7150    p_application_short_name       IN VARCHAR2,
7151    p_descriptive_flexfield_name   IN VARCHAR2,
7152    p_descriptive_flex_context_cod IN VARCHAR2,
7153    p_owner                        IN VARCHAR2,
7154    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
7155    p_enabled_flag                 IN VARCHAR2,
7156    p_global_flag                  IN VARCHAR2,
7157    p_descriptive_flex_context_nam IN VARCHAR2,
7158    p_description                  IN VARCHAR2)
7159   IS
7160      l_func_name  VARCHAR2(80);
7161      l_dff_flx    dff_flx_type;
7162      l_dff_ctx    dff_ctx_type;
7163      l_dff_ctx_tl dff_ctx_tl_type;
7164      l_file_who   who_type;
7165      l_descriptive_flexfield_name fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE;
7166 BEGIN
7167    l_func_name := g_api_name || 'up_dff_context()';
7168    l_descriptive_flexfield_name := p_descriptive_flexfield_name;
7169 
7170    init('DFF_CONTEXT', p_upload_phase);
7171    IF (g_debug_on) THEN
7172       debug(l_func_name,
7173             'PHASE:'  || p_upload_phase ||
7174             ',UMODE:' || p_upload_mode  ||
7175             ',CMODE:' || p_custom_mode  ||
7176             ',APPS:'  || p_application_short_name ||
7177             ',DFF:'   || l_descriptive_flexfield_name ||
7178             ',CTX:'   || p_descriptive_flex_context_cod);
7179    END IF;
7180 
7181    IF (p_upload_phase = 'BEGIN') THEN
7182       --
7183       -- Gather WHO Information.
7184       --
7185       IF (get_dff_flx(p_application_short_name,
7186                       l_descriptive_flexfield_name,
7187                       l_dff_flx)) THEN
7188          IF (get_dff_ctx(l_dff_flx,
7189                          p_descriptive_flex_context_cod,
7190                          l_dff_ctx)) THEN
7191             NULL;
7192          END IF;
7193       END IF;
7194 
7195       IF (p_upload_mode = 'NLS') THEN
7196          --
7197          -- MLS translation.
7198          --
7199 
7200          --
7201          -- Gather WHO Information.
7202          --
7203          IF (get_dff_ctx_tl(l_dff_ctx,
7204                             userenv('LANG'),
7205                             l_dff_ctx_tl)) THEN
7206             NULL;
7207          END IF;
7208 
7209          --
7210          -- Check WHO Information.
7211          --
7212          IF (NOT is_upload_allowed
7213              (p_custom_mode                  => p_custom_mode,
7214               p_file_owner                   => p_owner,
7215               p_file_last_update_date        => p_last_update_date,
7216               p_db_last_updated_by           => l_dff_ctx_tl.last_updated_by,
7217               p_db_last_update_date          => l_dff_ctx_tl.last_update_date,
7218               x_file_who                     => l_file_who)) THEN
7219             IF (g_debug_on) THEN
7220                debug(l_func_name, 'Upload is not allowed because of customization.');
7221             END IF;
7222             GOTO label_done;
7223          END IF;
7224 
7225          IF (g_debug_on) THEN
7226             debug(l_func_name, 'Translating DFF_CONTEXT.(MLS)');
7227          END IF;
7228          fnd_descr_flex_contexts_pkg.translate_row
7229            (x_application_short_name       => p_application_short_name,
7230             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7231             x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7232             x_who                          => l_file_who,
7233             x_description                  => p_description,
7234             x_descriptive_flex_context_nam => p_descriptive_flex_context_nam);
7235        ELSE
7236          --
7237          -- Usual upload.
7238          --
7239 
7240          --
7241          -- Check WHO Information.
7242          --
7243          IF (NOT is_upload_allowed
7244              (p_custom_mode                  => p_custom_mode,
7245               p_file_owner                   => p_owner,
7246               p_file_last_update_date        => p_last_update_date,
7247               p_db_last_updated_by           => l_dff_ctx.last_updated_by,
7248               p_db_last_update_date          => l_dff_ctx.last_update_date,
7249               x_file_who                     => l_file_who)) THEN
7250 
7251             --
7252             -- SRS DFFs are handled in upload_srs_desc_flex().
7253             --
7254             IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%')  THEN
7255                IF (g_debug_on) THEN
7256                   debug(l_func_name, 'Upload is not allowed because of customization.');
7257                END IF;
7258                GOTO label_done;
7259             else
7260                --
7261                -- Clear the customization message
7262                --
7263                fnd_message.clear();
7264             END IF;
7265          END IF;
7266 
7267          IF (l_descriptive_flexfield_name LIKE '$SRS$.%')  THEN
7268             --
7269             -- LDT SRS Desc Flex Global Data Elements.
7270             --
7271             l_descriptive_flexfield_name := g_srs_loader_flex_name;
7272             IF (g_debug_on) THEN
7273                debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
7274             END IF;
7275          END IF;
7276 
7277          --
7278          -- Make sure DFF exists.
7279          --
7280          get_dff_flx(p_application_short_name,
7281                      l_descriptive_flexfield_name,
7282                      l_dff_flx);
7283 
7284          IF (g_debug_on) THEN
7285             debug(l_func_name, 'Uploading DFF_CONTEXT.(MLS)');
7286          END IF;
7287          fnd_descr_flex_contexts_pkg.load_row
7288            (x_application_short_name       => p_application_short_name,
7289             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7290             x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7291             x_who                          => l_file_who,
7292             x_enabled_flag                 => p_enabled_flag,
7293             x_global_flag                  => p_global_flag,
7294             x_description                  => p_description,
7295             x_descriptive_flex_context_nam => p_descriptive_flex_context_nam);
7296       END IF;
7297     ELSIF (p_upload_phase = 'END') THEN
7298       IF (p_upload_mode = 'NLS') THEN
7299          --
7300          -- MLS translation.
7301          --
7302          NULL;
7303        ELSE
7304          --
7305          -- Usual upload.
7306          --
7307          NULL;
7308       END IF;
7309     ELSE
7310       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
7311    END IF;
7312 
7313    <<label_done>>
7314    done('DFF_CONTEXT', p_upload_phase);
7315 EXCEPTION
7316    WHEN OTHERS THEN
7317       report_public_api_exception(l_func_name,
7318                                   p_upload_phase,
7319                                   p_application_short_name,
7320                                   p_descriptive_flexfield_name,
7321                                   p_descriptive_flex_context_cod);
7322 END up_dff_context;
7323 
7324 -- --------------------------------------------------
7325 PROCEDURE up_dff_segment
7326   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
7327    p_upload_mode                  IN VARCHAR2,
7328    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
7329    p_application_short_name       IN VARCHAR2,
7330    p_descriptive_flexfield_name   IN VARCHAR2,
7331    p_descriptive_flex_context_cod IN VARCHAR2,
7332    p_end_user_column_name         IN VARCHAR2,
7333    p_application_column_name      IN VARCHAR2,
7334    p_owner                        IN VARCHAR2,
7335    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
7336    p_column_seq_num               IN VARCHAR2,
7337    p_enabled_flag                 IN VARCHAR2,
7338    p_display_flag                 IN VARCHAR2,
7339    p_required_flag                IN VARCHAR2,
7340    p_security_enabled_flag        IN VARCHAR2,
7341    p_flex_value_set_name          IN VARCHAR2,
7342    p_display_size                 IN VARCHAR2,
7343    p_maximum_description_len      IN VARCHAR2,
7344    p_concatenation_description_le IN VARCHAR2,
7345    p_range_code                   IN VARCHAR2,
7346    p_default_type                 IN VARCHAR2,
7347    p_default_value                IN VARCHAR2,
7348    p_runtime_property_function    IN VARCHAR2 DEFAULT NULL,
7349    p_srw_param                    IN VARCHAR2,
7350    p_form_left_prompt             IN VARCHAR2,
7351    p_form_above_prompt            IN VARCHAR2,
7352    p_description                  IN VARCHAR2)
7353   IS
7354      l_func_name  VARCHAR2(80);
7355      l_dff_flx    dff_flx_type;
7356      l_dff_ctx    dff_ctx_type;
7357      l_dff_seg    dff_seg_type;
7358      l_dff_seg_tl dff_seg_tl_type;
7359      l_vst_set    vst_set_type;
7360      l_col        col_type;
7361      l_file_who   who_type;
7362      l_descriptive_flexfield_name fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE;
7363 BEGIN
7364    l_func_name := g_api_name || 'up_dff_segment()';
7365    l_descriptive_flexfield_name := p_descriptive_flexfield_name;
7366 
7367    init('DFF_SEGMENT', p_upload_phase);
7368    IF (g_debug_on) THEN
7369       debug(l_func_name,
7370             'PHASE:'  || p_upload_phase ||
7371             ',UMODE:' || p_upload_mode ||
7372             ',CMODE:' || p_custom_mode ||
7373             ',APPS:'  || p_application_short_name ||
7374             ',DFF:'   || l_descriptive_flexfield_name ||
7375             ',CTX:'   || p_descriptive_flex_context_cod ||
7376             ',SEG:'   || p_end_user_column_name ||
7377             ',COL:'   || p_application_column_name);
7378    END IF;
7379 
7380    --
7381    -- Gather WHO Information.
7382    --
7383    IF (get_dff_flx(p_application_short_name,
7384                    l_descriptive_flexfield_name,
7385                    l_dff_flx)) THEN
7386       IF (get_dff_ctx(l_dff_flx,
7387                       p_descriptive_flex_context_cod,
7388                       l_dff_ctx)) THEN
7389          IF (get_dff_seg(l_dff_ctx,
7390                          p_application_column_name,
7391                          l_dff_seg)) THEN
7392             NULL;
7393          END IF;
7394       END IF;
7395    END IF;
7396 
7397    IF (p_upload_mode = 'NLS') THEN
7398       --
7399       -- MLS translation.
7400       --
7401 
7402       --
7403       -- Gather WHO Information.
7404       --
7405       IF (get_dff_seg_tl(l_dff_seg,
7406                          userenv('LANG'),
7407                          l_dff_seg_tl)) THEN
7408          NULL;
7409       END IF;
7410 
7411       --
7412       -- Check WHO Information.
7413       --
7414       IF (NOT is_upload_allowed
7415           (p_custom_mode                  => p_custom_mode,
7416            p_file_owner                   => p_owner,
7417            p_file_last_update_date        => p_last_update_date,
7418            p_db_last_updated_by           => l_dff_seg_tl.last_updated_by,
7419            p_db_last_update_date          => l_dff_seg_tl.last_update_date,
7420            x_file_who                     => l_file_who)) THEN
7421          IF (g_debug_on) THEN
7422             debug(l_func_name, 'Upload is not allowed because of customization.');
7423          END IF;
7424          GOTO label_done;
7425       END IF;
7426 
7427       IF (g_debug_on) THEN
7428          debug(l_func_name, 'Translating DFF_SEGMENT.(MLS)');
7429       END IF;
7430       fnd_descr_flex_col_usage_pkg.translate_row
7431         (x_application_short_name       => p_application_short_name,
7432          x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7433          x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7434          x_application_column_name      => p_application_column_name,
7435          x_who                          => l_file_who,
7436          x_form_left_prompt             => p_form_left_prompt,
7437          x_form_above_prompt            => p_form_above_prompt,
7438          x_description                  => p_description);
7439     ELSE
7440       --
7441       -- Usual upload.
7442       --
7443 
7444       --
7445       -- Check WHO Information.
7446       --
7447       IF (NOT is_upload_allowed
7448           (p_custom_mode                  => p_custom_mode,
7449            p_file_owner                   => p_owner,
7450            p_file_last_update_date        => p_last_update_date,
7451            p_db_last_updated_by           => l_dff_seg.last_updated_by,
7452            p_db_last_update_date          => l_dff_seg.last_update_date,
7453            x_file_who                     => l_file_who)) THEN
7454 
7455          --
7456          -- SRS DFFs are handled in upload_srs_desc_flex().
7457          --
7458          IF (l_descriptive_flexfield_name NOT LIKE '$SRS$.%')  THEN
7459             IF (g_debug_on) THEN
7460                debug(l_func_name, 'Upload is not allowed because of customization.');
7461             END IF;
7462             GOTO label_done;
7463          else
7464             --
7465             -- Clear the customization message
7466             --
7467             fnd_message.clear();
7468          END IF;
7469       END IF;
7470 
7471       IF (l_descriptive_flexfield_name LIKE '$SRS$.%')  THEN
7472          --
7473          -- LDT SRS Desc Flex Global Data Elements.
7474          --
7475          l_descriptive_flexfield_name := g_srs_loader_flex_name;
7476          IF (g_debug_on) THEN
7477             debug(l_func_name, 'SRS: Switched name to ' || l_descriptive_flexfield_name);
7478          END IF;
7479       END IF;
7480 
7481       --
7482       -- Make sure DFF, Context and Column exist.
7483       --
7484       get_dff_flx(p_application_short_name,
7485                   l_descriptive_flexfield_name,
7486                   l_dff_flx);
7487 
7488       get_dff_ctx(l_dff_flx,
7489                   p_descriptive_flex_context_cod,
7490                   l_dff_ctx);
7491 
7492       get_col(l_dff_flx.table_application_id,
7493               l_dff_flx.application_table_name,
7494               p_application_column_name,
7495               l_col);
7496 
7497       IF ((((l_col.flexfield_application_id = l_dff_flx.application_id) AND
7498             (l_col.flexfield_name = l_dff_flx.descriptive_flexfield_name)) OR
7499            (l_dff_flx.descriptive_flexfield_name LIKE '$SRS$.%')) AND
7500           (l_col.flexfield_usage_code = 'D')) THEN
7501          NULL;
7502        ELSE
7503          raise_error(l_func_name, ERROR_DFF_COL_NOT_REG,
7504                      'COL:' || l_col.column_name ||
7505                      ' is not registered properly. It is registered as ' ||
7506                      'APP Id:' || To_char(l_col.flexfield_application_id) ||
7507                      ' Flex Name:' || l_col.flexfield_name ||
7508                      ' Usage Code:' || l_col.flexfield_usage_code,
7509                      'Please use Application Developer:' ||
7510                      'Flexfield->Descriptive->Register form and ' ||
7511                      'make sure column is enabled. If this column is ' ||
7512                      'not in the list, it means it is used by another ' ||
7513                      'flexfield and you cannot use it');
7514       END IF;
7515 
7516       --
7517       -- Check for duplicate column usage between Global and any Context
7518       --
7519       DECLARE
7520         l_error_msg VARCHAR2(2000);
7521         l_ctx_code  fnd_descr_flex_contexts.descriptive_flex_context_code%TYPE;
7522       BEGIN
7523          SELECT fdfc.descriptive_flex_context_code
7524            INTO l_ctx_code
7525            FROM fnd_descr_flex_column_usages fdfcu,
7526                 fnd_descr_flex_contexts fdfc
7527           WHERE fdfcu.application_column_name = p_application_column_name
7528             AND fdfcu.descriptive_flex_context_code = fdfc.descriptive_flex_context_code
7529             AND fdfcu.descriptive_flexfield_name = fdfc.descriptive_flexfield_name
7530             AND fdfcu.application_id = fdfc.application_id
7531             AND fdfc.descriptive_flexfield_name = l_dff_ctx.descriptive_flexfield_name
7532             AND fdfc.application_id = l_dff_ctx.application_id
7533             AND fdfc.global_flag <> l_dff_ctx.global_flag
7534             AND ROWNUM < 2;
7535 
7536          IF (l_dff_ctx.global_flag = 'Y') THEN
7537             l_error_msg := 'Global Segment cannot be uploaded. ' ||
7538               'Its Column (' || p_application_column_name ||
7539               ') is already used in non-Global Context (' || l_ctx_code || ')';
7540           ELSE
7541             l_error_msg := 'Context sensitive segment cannot be uploaded. ' ||
7542               'Its Column (' || p_application_column_name ||
7543               ') is already used in Global Context';
7544          END IF;
7545 
7546          raise_error(l_func_name, ERROR_VST_GENERIC, l_error_msg);
7547       EXCEPTION
7548          WHEN no_data_found THEN
7549             NULL;
7550       END;
7551 
7552       IF (p_flex_value_set_name IS NOT NULL) THEN
7553          --
7554          -- Make sure Value Set exists.
7555          --
7556          get_vst_set(p_flex_value_set_name, l_vst_set);
7557       END IF;
7558 
7559       IF (g_debug_on) THEN
7560          debug(l_func_name, 'Uploading DFF_SEGMENT.(MLS)');
7561       END IF;
7562       fnd_descr_flex_col_usage_pkg.load_row
7563         (x_application_short_name       => p_application_short_name,
7564          x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
7565          x_descriptive_flex_context_cod => p_descriptive_flex_context_cod,
7566          x_application_column_name      => p_application_column_name,
7567          x_who                          => l_file_who,
7568          x_end_user_column_name         => p_end_user_column_name,
7569          x_column_seq_num               => p_column_seq_num,
7570          x_enabled_flag                 => p_enabled_flag,
7571          x_required_flag                => p_required_flag,
7572          x_security_enabled_flag        => p_security_enabled_flag,
7573          x_display_flag                 => p_display_flag,
7574          x_display_size                 => p_display_size,
7575          x_maximum_description_len      => p_maximum_description_len,
7576          x_concatenation_description_le => p_concatenation_description_le,
7577          x_flex_value_set_name          => p_flex_value_set_name,
7578          x_range_code                   => p_range_code,
7579          x_default_type                 => p_default_type,
7580          x_default_value                => p_default_value,
7581          x_runtime_property_function    => p_runtime_property_function,
7582          x_srw_param                    => p_srw_param,
7583          x_form_left_prompt             => p_form_left_prompt,
7584          x_form_above_prompt            => p_form_above_prompt,
7585          x_description                  => p_description);
7586    END IF;
7587 
7588    <<label_done>>
7589    done('DFF_SEGMENT', p_upload_phase);
7590 EXCEPTION
7591    WHEN OTHERS THEN
7592       report_public_api_exception(l_func_name,
7593                                   p_upload_phase,
7594                                   p_application_short_name,
7595                                   p_descriptive_flexfield_name,
7596                                   p_descriptive_flex_context_cod,
7597                                   p_application_column_name,
7598                                   p_end_user_column_name);
7599 END up_dff_segment;
7600 
7601 -- ==================================================
7602 --  KEY_FLEX
7603 -- ==================================================
7604 
7605 -- --------------------------------------------------
7606 -- Updates all foreign references of id_flex_num
7607 -- --------------------------------------------------
7608 PROCEDURE fix_id_flex_num(p_application_id         IN NUMBER,
7609                           p_id_flex_code           IN VARCHAR2,
7610                           p_id_flex_num_old        IN NUMBER,
7611                           p_id_flex_num_new        IN NUMBER)
7612   IS
7613 BEGIN
7614    --
7615    -- Update qualifier assignments
7616    --
7617    UPDATE fnd_segment_attribute_values
7618      SET id_flex_num = p_id_flex_num_new
7619      WHERE application_id = p_application_id
7620      AND id_flex_code = p_id_flex_code
7621      AND id_flex_num = p_id_flex_num_old;
7622 
7623    --
7624    -- Update segments
7625    --
7626    UPDATE fnd_id_flex_segments
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    UPDATE fnd_id_flex_segments_tl
7633      SET id_flex_num = p_id_flex_num_new
7634      WHERE application_id = p_application_id
7635      AND id_flex_code = p_id_flex_code
7636      AND id_flex_num = p_id_flex_num_old;
7637 
7638    --
7639    -- Update shorthand aliases
7640    --
7641    UPDATE fnd_shorthand_flex_aliases
7642      SET id_flex_num = p_id_flex_num_new
7643      WHERE application_id = p_application_id
7644      AND id_flex_code = p_id_flex_code
7645      AND id_flex_num = p_id_flex_num_old;
7646 
7647    --
7648    -- Update cross validation lines/rules/stats
7649    --
7650    UPDATE fnd_flex_exclude_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_include_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_rule_lines
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_validation_rules
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_vdation_rules_tl
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    UPDATE fnd_flex_validation_rule_stats
7681      SET id_flex_num = p_id_flex_num_new
7682      WHERE application_id = p_application_id
7683      AND id_flex_code = p_id_flex_code
7684      AND id_flex_num = p_id_flex_num_old;
7685 
7686    --
7687    -- Update Account Generator Processes
7688    --
7689    UPDATE fnd_flex_workflow_processes
7690      SET id_flex_num = p_id_flex_num_new
7691      WHERE application_id = p_application_id
7692      AND id_flex_code = p_id_flex_code
7693      AND id_flex_num = p_id_flex_num_old;
7694 
7695    --
7696    -- Update structure
7697    --
7698    UPDATE fnd_id_flex_structures
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    UPDATE fnd_id_flex_structures_tl
7705      SET id_flex_num = p_id_flex_num_new
7706      WHERE application_id = p_application_id
7707      AND id_flex_code = p_id_flex_code
7708      AND id_flex_num = p_id_flex_num_old;
7709 
7710    --
7711    -- Delete compiled data
7712    --
7713    DELETE FROM fnd_compiled_id_flex_structs
7714      WHERE application_id = p_application_id
7715      AND id_flex_code = p_id_flex_code
7716      AND id_flex_num = p_id_flex_num_old;
7717 
7718    IF (g_debug_on) THEN
7719       debug('LDR.fix_id_flex_num', 'Old id_flex_num: ' || p_id_flex_num_old ||
7720             ', New id_flex_num: ' || p_id_flex_num_new);
7721    END IF;
7722 END fix_id_flex_num;
7723 
7724 -- --------------------------------------------------
7725 PROCEDURE up_key_flex
7726   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
7727    p_upload_mode                  IN VARCHAR2,
7728    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
7729    p_application_short_name       IN VARCHAR2,
7730    p_id_flex_code                 IN VARCHAR2,
7731    p_owner                        IN VARCHAR2,
7732    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
7733    p_table_application_short_name IN VARCHAR2,
7734    p_application_table_name       IN VARCHAR2,
7735    p_concatenated_segs_view_name  IN VARCHAR2 DEFAULT NULL,
7736    p_allow_id_valuesets           IN VARCHAR2,
7737    p_dynamic_inserts_feasible_fla IN VARCHAR2,
7738    p_index_flag                   IN VARCHAR2,
7739    p_unique_id_column_name        IN VARCHAR2,
7740    p_application_table_type       IN VARCHAR2,
7741    p_set_defining_column_name     IN VARCHAR2,
7742    p_maximum_concatenation_len    IN VARCHAR2,
7743    p_concatenation_len_warning    IN VARCHAR2,
7744    p_id_flex_name                 IN VARCHAR2,
7745    p_description                  IN VARCHAR2)
7746   IS
7747      l_func_name VARCHAR2(80);
7748      l_tbl       tbl_type;
7749      l_app       app_type;
7750      l_kff_flx   kff_flx_type;
7751      l_kff_str   kff_str_type;
7752      l_101_code  VARCHAR2(2000);
7753      l_count     NUMBER;
7754      l_file_who who_type;
7755      l_concatenated_segs_view_name fnd_id_flexs.concatenated_segs_view_name%TYPE;
7756 BEGIN
7757    l_func_name := g_api_name || 'up_key_flex()';
7758    init('KEY_FLEX', p_upload_phase);
7759    IF (g_debug_on) THEN
7760       debug(l_func_name,
7761             'PHASE:'  || p_upload_phase ||
7762             ',UMODE:' || p_upload_mode  ||
7763             ',CMODE:' || p_custom_mode  ||
7764             ',APPS:'  || p_application_short_name ||
7765             ',KFF:'   || p_id_flex_code);
7766    END IF;
7767 
7768    IF (p_upload_phase = 'BEGIN') THEN
7769       start_transaction(ENTITY_KEY_FLEX);
7770       lock_entity('KEY_FLEX',
7771                   p_application_short_name,
7772                   p_id_flex_code);
7773 
7774       g_numof_changes := 0;
7775       --
7776       -- Gather WHO Information.
7777       --
7778       IF (get_kff_flx(p_application_short_name,
7779                       p_id_flex_code,
7780                       l_kff_flx)) THEN
7781          NULL;
7782       END IF;
7783 
7784       --
7785       -- Check WHO Information.
7786       --
7787       IF (NOT is_upload_allowed
7788           (p_custom_mode                  => p_custom_mode,
7789            p_file_owner                   => p_owner,
7790            p_file_last_update_date        => p_last_update_date,
7791            p_db_last_updated_by           => l_kff_flx.last_updated_by,
7792            p_db_last_update_date          => l_kff_flx.last_update_date,
7793            x_file_who                     => l_file_who)) THEN
7794          IF (g_debug_on) THEN
7795             debug(l_func_name, 'Upload is not allowed because of customization.');
7796          END IF;
7797          GOTO label_done;
7798       END IF;
7799 
7800       IF (p_upload_mode = 'NLS') THEN
7801          --
7802          -- non-MLS translation.
7803          --
7804          IF (g_debug_on) THEN
7805             debug(l_func_name, 'Translating KEY_FLEX.(non-MLS)');
7806          END IF;
7807          UPDATE fnd_id_flexs SET
7808            last_updated_by   = l_file_who.last_updated_by,
7809            last_update_date  = l_file_who.last_update_date,
7810            last_update_login = l_file_who.last_update_login,
7811            id_flex_name      = Nvl(p_id_flex_name, id_flex_name),
7812            description       = Nvl(p_description, description)
7813            WHERE application_id = (SELECT application_id
7814                                    FROM fnd_application
7815                                    WHERE application_short_name = p_application_short_name)
7816            AND id_flex_code = p_id_flex_code
7817            AND userenv('LANG') = (SELECT language_code
7818                                   FROM fnd_languages
7819                                   WHERE installed_flag = 'B');
7820          IF (SQL%notfound) THEN
7821             IF (g_debug_on) THEN
7822                debug(l_func_name, 'No entity to translate.');
7823             END IF;
7824          END IF;
7825          GOTO label_done;
7826        ELSE
7827          --
7828          -- Usual upload.
7829          --
7830 
7831          --
7832          -- Make sure Application and Table exist.
7833          --
7834          get_app(p_application_short_name,
7835                  l_app);
7836 
7837          get_tbl(p_table_application_short_name,
7838                  p_application_table_name,
7839                  l_tbl);
7840 
7841          --
7842          -- Intentional/Unintentional NULL handling.
7843          --
7844          IF (p_concatenated_segs_view_name IS NULL) THEN
7845             l_concatenated_segs_view_name := l_kff_flx.concatenated_segs_view_name;
7846           ELSIF (p_concatenated_segs_view_name = g_null_value) THEN
7847             l_concatenated_segs_view_name := NULL;
7848           ELSE
7849             l_concatenated_segs_view_name := p_concatenated_segs_view_name;
7850          END IF;
7851 
7852          IF (g_debug_on) THEN
7853             debug(l_func_name, 'Updating KEY_FLEX.(non-MLS)');
7854          END IF;
7855          UPDATE fnd_id_flexs SET
7856            last_updated_by               = l_file_who.last_updated_by,
7857            last_update_date              = l_file_who.last_update_date,
7858            last_update_login             = l_file_who.last_update_login,
7859            table_application_id          = l_tbl.application_id,
7860            application_table_name        = l_tbl.table_name,
7861            concatenated_segs_view_name   = l_concatenated_segs_view_name,
7862            allow_id_valuesets            = p_allow_id_valuesets,
7863            dynamic_inserts_feasible_flag = p_dynamic_inserts_feasible_fla,
7864            index_flag                    = p_index_flag,
7865            unique_id_column_name         = p_unique_id_column_name,
7866            application_table_type        = p_application_table_type,
7867            set_defining_column_name      = p_set_defining_column_name,
7868            maximum_concatenation_len     = p_maximum_concatenation_len,
7869            concatenation_len_warning     = p_concatenation_len_warning,
7870            id_flex_name                  = p_id_flex_name,
7871            description                   = p_description
7872            WHERE application_id = l_app.application_id
7873            AND id_flex_code = p_id_flex_code;
7874 
7875          IF (SQL%notfound) THEN
7876             IF (g_debug_on) THEN
7877                debug(l_func_name, 'Inserting KEY_FLEX.(non-MLS)');
7878             END IF;
7879             INSERT INTO fnd_id_flexs
7880               (
7881                application_id,
7882                id_flex_code,
7883 
7884                created_by,
7885                creation_date,
7886                last_updated_by,
7887                last_update_date,
7888                last_update_login,
7889 
7890                table_application_id,
7891                application_table_name,
7892                concatenated_segs_view_name,
7893                allow_id_valuesets,
7894                dynamic_inserts_feasible_flag,
7895                index_flag,
7896                unique_id_column_name,
7897                application_table_type,
7898                set_defining_column_name,
7899                maximum_concatenation_len,
7900                concatenation_len_warning,
7901                id_flex_name,
7902                description
7903                )
7904               VALUES
7905               (
7906                l_app.application_id,
7907                p_id_flex_code,
7908 
7909                l_file_who.created_by,
7910                l_file_who.creation_date,
7911                l_file_who.last_updated_by,
7912                l_file_who.last_update_date,
7913                l_file_who.last_update_login,
7914 
7915                l_tbl.application_id,
7916                l_tbl.table_name,
7917                l_concatenated_segs_view_name,
7918                p_allow_id_valuesets,
7919                p_dynamic_inserts_feasible_fla,
7920                p_index_flag,
7921                p_unique_id_column_name,
7922                p_application_table_type,
7923                p_set_defining_column_name,
7924                p_maximum_concatenation_len,
7925                p_concatenation_len_warning,
7926                p_id_flex_name,
7927                p_description
7928                );
7929          END IF;
7930       END IF;
7931     ELSIF (p_upload_phase = 'END') THEN
7932       IF (p_upload_mode = 'NLS') THEN
7933          --
7934          -- non-MLS translation.
7935          --
7936          NULL;
7937        ELSE
7938          --
7939          -- Usual upload.
7940          --
7941 
7942          --
7943          -- Make sure columns are marked in fnd_columns.
7944          --
7945          fnd_flex_loader_apis.up_kff_column
7946            (p_upload_phase           => 'LEAF',
7947             p_upload_mode            => NULL,
7948             p_application_short_name => p_application_short_name,
7949             p_id_flex_code           => p_id_flex_code,
7950             p_column_name            => p_unique_id_column_name,
7951             p_owner                  => p_owner,
7952             p_last_update_date       => p_last_update_date,
7953             p_flexfield_usage_code   => 'I');
7954 
7955          IF (p_set_defining_column_name IS NOT NULL) THEN
7956             fnd_flex_loader_apis.up_kff_column
7957               (p_upload_phase           => 'LEAF',
7958                p_upload_mode            => NULL,
7959                p_application_short_name => p_application_short_name,
7960                p_id_flex_code           => p_id_flex_code,
7961                p_column_name            => p_set_defining_column_name,
7962                p_owner                  => p_owner,
7963                p_last_update_date       => p_last_update_date,
7964                p_flexfield_usage_code   => 'S');
7965          END IF;
7966 
7967          --
7968          -- Make sure there is at least one structure.
7969          --
7970          get_app(p_application_short_name,
7971                  l_app);
7972 
7973          SELECT COUNT(*)
7974            INTO l_count
7975            FROM fnd_id_flex_structures
7976            WHERE application_id = l_app.application_id
7977            AND id_flex_code = p_id_flex_code;
7978 
7979          IF (l_count = 0) THEN
7980             --
7981             -- Create the 101 structure.
7982             --
7983             get_kff_flx(p_application_short_name,
7984                         p_id_flex_code,
7985                         l_kff_flx);
7986 
7987             l_101_code := REPLACE(Upper(p_id_flex_name),' ','_');
7988             fnd_flex_loader_apis.up_kff_structure
7989               (p_upload_phase                 => 'BEGIN',
7990                p_upload_mode                  => NULL,
7991                p_application_short_name       => p_application_short_name,
7992                p_id_flex_code                 => p_id_flex_code,
7993                p_id_flex_structure_code       => l_101_code,
7994                p_owner                        => p_owner,
7995                p_last_update_date             => p_last_update_date,
7996                p_concatenated_segment_delimit => '.',
7997                p_cross_segment_validation_fla => 'N',
7998                p_dynamic_inserts_allowed_flag => 'N',
7999                p_enabled_flag                 => 'Y',
8000                p_freeze_flex_definition_flag  => 'N',
8001                p_freeze_structured_hier_flag  => 'N',
8002                p_shorthand_enabled_flag       => 'N',
8003                p_shorthand_length             => NULL,
8004                p_structure_view_name          => NULL,
8005                p_id_flex_structure_name       => p_id_flex_name,
8006                p_description                  => NULL,
8007                p_shorthand_prompt             => NULL);
8008 
8009             --
8010             -- Update the id_flex_num to 101.
8011             --
8012             get_kff_str(l_kff_flx,
8013                         l_101_code,
8014                         l_kff_str);
8015 
8016             IF (l_kff_str.id_flex_num <> 101) THEN
8017                fix_id_flex_num(p_application_id  => l_kff_str.application_id,
8018                                p_id_flex_code    => l_kff_str.id_flex_code,
8019                                p_id_flex_num_old => l_kff_str.id_flex_num,
8020                                p_id_flex_num_new => 101);
8021             END IF;
8022          END IF;
8023 
8024          --
8025          -- Populate the missing wf processes.
8026          --
8027          DECLARE
8028             CURSOR missing_wfp_cur(p_application_id IN NUMBER,
8029                                    p_id_flex_code   IN VARCHAR2)
8030               IS
8031                  SELECT
8032                    ifst.id_flex_structure_code,
8033                    fwp.wf_item_type
8034                    FROM (SELECT DISTINCT
8035                          fwpx.application_id,
8036                          fwpx.id_flex_code,
8037                          fwpx.wf_item_type
8038                          FROM fnd_flex_workflow_processes fwpx
8039                          ) fwp,
8040                         fnd_id_flex_structures ifst
8041                    WHERE ifst.application_id = p_application_id
8042                    AND ifst.id_flex_code = p_id_flex_code
8043                    AND fwp.application_id = ifst.application_id
8044                    AND fwp.id_flex_code = ifst.id_flex_code
8045                    AND NOT exists
8046                    (SELECT NULL
8047                     FROM fnd_flex_workflow_processes fwp2
8048                     WHERE fwp2.application_id = ifst.application_id
8049                     AND fwp2.id_flex_code = ifst.id_flex_code
8050                     AND fwp2.id_flex_num = ifst.id_flex_num
8051                     AND fwp2.wf_item_type = fwp.wf_item_type);
8052          BEGIN
8053             FOR missing_wfp_rec IN missing_wfp_cur(l_app.application_id,
8054                                                    p_id_flex_code)
8055               LOOP
8056                  up_kff_wf_process
8057                    (p_upload_phase           => 'LEAF',
8058                     p_upload_mode            => NULL,
8059                     p_application_short_name => p_application_short_name,
8060                     p_id_flex_code           => p_id_flex_code,
8061                     p_id_flex_structure_code => missing_wfp_rec.id_flex_structure_code,
8062                     p_wf_item_type           => missing_wfp_rec.wf_item_type,
8063                     p_owner                  => p_owner,
8064                     p_last_update_date       => p_last_update_date,
8065                     p_wf_process_name        => 'DEFAULT_ACCOUNT_GENERATION');
8066               END LOOP;
8067          END;
8068       END IF;
8069       --
8070       -- Compile Flex, Generate View.
8071       --
8072       IF (g_numof_changes > 0) THEN
8073          call_cp(p_mode                       => 'KFF',
8074                  p_upload_mode                => p_upload_mode,
8075                  p_application_short_name     => p_application_short_name,
8076                  p_id_flex_code               => p_id_flex_code);
8077       END IF;
8078       finish_transaction(ENTITY_KEY_FLEX);
8079     ELSE
8080       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
8081    END IF;
8082 
8083    <<label_done>>
8084    done('KEY_FLEX', p_upload_phase);
8085 EXCEPTION
8086    WHEN OTHERS THEN
8087       report_public_api_exception(l_func_name,
8088                                   p_upload_phase,
8089                                   p_application_short_name,
8090                                   p_id_flex_code);
8091 
8092       BEGIN
8093          release_entity();
8094          IF (p_upload_phase = 'END') THEN
8095             finish_transaction(ENTITY_KEY_FLEX);
8096          END IF;
8097       EXCEPTION
8098          WHEN OTHERS THEN
8099             report_public_api_exception(l_func_name,
8100                                         p_upload_phase,
8101                                         p_application_short_name,
8102                                         p_id_flex_code);
8103       END;
8104 END up_key_flex;
8105 
8106 -- --------------------------------------------------
8107 PROCEDURE up_kff_column
8108   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8109    p_upload_mode                  IN VARCHAR2,
8110    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8111    p_application_short_name       IN VARCHAR2,
8112    p_id_flex_code                 IN VARCHAR2,
8113    p_column_name                  IN VARCHAR2,
8114    p_owner                        IN VARCHAR2,
8115    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8116    p_flexfield_usage_code         IN VARCHAR2)
8117   IS
8118      l_func_name VARCHAR2(80);
8119      l_kff_flx   kff_flx_type;
8120      l_col       col_type;
8121      l_file_who  who_type;
8122 BEGIN
8123    l_func_name := g_api_name || 'up_kff_column()';
8124    init('KFF_COLUMN', p_upload_phase);
8125    IF (g_debug_on) THEN
8126       debug(l_func_name,
8127             'PHASE:'  || p_upload_phase ||
8128             ',UMODE:' || p_upload_mode ||
8129             ',CMODE:' || p_custom_mode ||
8130             ',APPS:'  || p_application_short_name ||
8131             ',KFF:'   || p_id_flex_code ||
8132             ',COL:'   || p_column_name ||
8133             ',USG:'   || p_flexfield_usage_code);
8134    END IF;
8135 
8136    IF (p_upload_mode = 'NLS') THEN
8137       --
8138       -- No translation here.
8139       --
8140       IF (g_debug_on) THEN
8141          debug(l_func_name, 'No translation here.');
8142       END IF;
8143       GOTO label_done;
8144    END IF;
8145 
8146    --
8147    -- Make sure KFF and Column exist.
8148    --
8149    get_kff_flx(p_application_short_name,
8150                p_id_flex_code,
8151                l_kff_flx);
8152 
8153    get_col(l_kff_flx.table_application_id,
8154            l_kff_flx.application_table_name,
8155            p_column_name,
8156            l_col);
8157 
8158    --
8159    -- Check WHO Information.
8160    --
8161    IF (NOT is_upload_allowed
8162        (p_custom_mode                  => p_custom_mode,
8163         p_file_owner                   => p_owner,
8164         p_file_last_update_date        => p_last_update_date,
8165         p_db_last_updated_by           => l_col.last_updated_by,
8166         p_db_last_update_date          => l_col.last_update_date,
8167         x_file_who                     => l_file_who)) THEN
8168       IF (g_debug_on) THEN
8169          debug(l_func_name, 'Upload is not allowed because of customization.');
8170          debug(l_func_name, 'For data integrity upload must be done.');
8171       END IF;
8172       --
8173       -- Clear the customization message
8174       --
8175       fnd_message.clear();
8176    END IF;
8177 
8178    --
8179    -- Usual upload.
8180    --
8181    IF (p_flexfield_usage_code IN ('I','S','Q','K')) THEN
8182       --
8183       -- Make sure column is not in use.
8184       --
8185       IF ((((l_col.flexfield_application_id IS NULL) OR
8186             (l_col.flexfield_application_id = l_kff_flx.application_id)) AND
8187            ((l_col.flexfield_name IS NULL) OR
8188             (l_col.flexfield_name = p_id_flex_code)) AND
8189            ((l_col.flexfield_usage_code IS NULL) OR
8190             (l_col.flexfield_usage_code = p_flexfield_usage_code))) OR
8191           (l_col.flexfield_usage_code = 'N')) THEN
8192 
8193          IF (g_debug_on) THEN
8194             debug(l_func_name, 'Updating KFF_COLUMN.(no-TL)');
8195          END IF;
8196          UPDATE fnd_columns SET
8197            last_updated_by          = l_file_who.last_updated_by,
8198            last_update_date         = l_file_who.last_update_date,
8199            last_update_login        = l_file_who.last_update_login,
8200            flexfield_application_id = NULL,
8201            flexfield_name           = NULL,
8202            flexfield_usage_code     = p_flexfield_usage_code
8203            WHERE application_id = l_col.application_id
8204            AND table_id = l_col.table_id
8205            AND column_name = l_col.column_name;
8206          IF (SQL%rowcount > 0) THEN
8207             g_numof_changes := g_numof_changes + 1;
8208          END IF;
8209        ELSE
8210          raise_error(l_func_name, ERROR_KFF_COL_USED,
8211                      'COL:' || p_column_name || ' is used by ' ||
8212                      'APP Id:' || To_char(l_col.flexfield_application_id) ||
8213                      ' Flex Name:' || l_col.flexfield_name ||
8214                      ' Usage Code:' || l_col.flexfield_usage_code,
8215                      'You cannot use it in another flexfield');
8216       END IF;
8217    END IF;
8218 
8219    <<label_done>>
8220    done('KFF_COLUMN', p_upload_phase);
8221 EXCEPTION
8222    WHEN OTHERS THEN
8223       report_public_api_exception(l_func_name,
8224                                   p_upload_phase,
8225                                   p_application_short_name,
8226                                   p_id_flex_code,
8227                                   p_column_name);
8228 END up_kff_column;
8229 
8230 -- --------------------------------------------------
8231 PROCEDURE up_kff_flex_qual
8232   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8233    p_upload_mode                  IN VARCHAR2,
8234    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8235    p_application_short_name       IN VARCHAR2,
8236    p_id_flex_code                 IN VARCHAR2,
8237    p_segment_attribute_type       IN VARCHAR2,
8238    p_owner                        IN VARCHAR2,
8239    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8240    p_global_flag                  IN VARCHAR2,
8241    p_required_flag                IN VARCHAR2,
8242    p_unique_flag                  IN VARCHAR2,
8243    p_segment_prompt               IN VARCHAR2,
8244    p_description                  IN VARCHAR2)
8245   IS
8246      l_func_name VARCHAR2(80);
8247      l_kff_flx   kff_flx_type;
8248      l_kff_flq   kff_flq_type;
8249      l_file_who  who_type;
8250 BEGIN
8251    l_func_name := g_api_name || 'up_kff_flex_qual()';
8252    init('KFF_FLEX_QUAL', p_upload_phase);
8253    IF (g_debug_on) THEN
8254       debug(l_func_name,
8255             'PHASE:'  || p_upload_phase ||
8256             ',UMODE:' || p_upload_mode  ||
8257             ',CMODE:' || p_custom_mode  ||
8258             ',APPS:'  || p_application_short_name ||
8259             ',KFF:'   || p_id_flex_code ||
8260             ',FLEXQ:' || p_segment_attribute_type);
8261    END IF;
8262 
8263    IF (p_upload_phase = 'BEGIN') THEN
8264       --
8265       -- Gather WHO Information.
8266       --
8267       IF (get_kff_flx(p_application_short_name,
8268                       p_id_flex_code,
8269                       l_kff_flx)) THEN
8270          IF (get_kff_flq(l_kff_flx,
8271                          p_segment_attribute_type,
8272                          l_kff_flq)) THEN
8273             NULL;
8274          END IF;
8275       END IF;
8276 
8277       --
8278       -- Check WHO Information.
8279       --
8280       IF (NOT is_upload_allowed
8281           (p_custom_mode                  => p_custom_mode,
8282            p_file_owner                   => p_owner,
8283            p_file_last_update_date        => p_last_update_date,
8284            p_db_last_updated_by           => l_kff_flq.last_updated_by,
8285            p_db_last_update_date          => l_kff_flq.last_update_date,
8286            x_file_who                     => l_file_who)) THEN
8287          IF (g_debug_on) THEN
8288             debug(l_func_name, 'Upload is not allowed because of customization.');
8289          END IF;
8290          GOTO label_done;
8291       END IF;
8292 
8293       IF (p_upload_mode = 'NLS') THEN
8294          --
8295          -- non-MLS translation.
8296          --
8297          IF (g_debug_on) THEN
8298             debug(l_func_name, 'Translating KFF_FLEX_QUAL.(non-MLS)');
8299          END IF;
8300          UPDATE fnd_segment_attribute_types SET
8301            last_updated_by   = l_file_who.last_updated_by,
8302            last_update_date  = l_file_who.last_update_date,
8303            last_update_login = l_file_who.last_update_login,
8304            segment_prompt    = Nvl(p_segment_prompt, segment_prompt),
8305            description       = Nvl(p_description, description)
8306            WHERE application_id = (SELECT application_id
8307                                    FROM fnd_application
8308                                    WHERE application_short_name = p_application_short_name)
8309            AND id_flex_code = p_id_flex_code
8310            AND segment_attribute_type = p_segment_attribute_type
8311            AND userenv('LANG') = (SELECT language_code
8312                                   FROM fnd_languages
8313                                   WHERE installed_flag = 'B');
8314          IF (SQL%notfound) THEN
8315             IF (g_debug_on) THEN
8316                debug(l_func_name, 'No entity to translate.');
8317             END IF;
8318          END IF;
8319          GOTO label_done;
8320        ELSE
8321          --
8322          -- Usual upload.
8323          --
8324 
8325          --
8326          -- Make sure KFF exists.
8327          --
8328          get_kff_flx(p_application_short_name,
8329                      p_id_flex_code,
8330                      l_kff_flx);
8331 
8332          IF (g_debug_on) THEN
8333             debug(l_func_name, 'Updating KFF_FLEX_QUAL.(non-MLS)');
8334          END IF;
8335          UPDATE fnd_segment_attribute_types SET
8336            last_updated_by   = l_file_who.last_updated_by,
8337            last_update_date  = l_file_who.last_update_date,
8338            last_update_login = l_file_who.last_update_login,
8339            global_flag       = p_global_flag,
8340            required_flag     = p_required_flag,
8341            unique_flag       = p_unique_flag,
8342            segment_prompt    = p_segment_prompt,
8343            description       = p_description
8344            WHERE application_id = l_kff_flx.application_id
8345            AND id_flex_code = l_kff_flx.id_flex_code
8346            AND segment_attribute_type = p_segment_attribute_type;
8347 
8348          IF (SQL%notfound) THEN
8349             IF (g_debug_on) THEN
8350                debug(l_func_name, 'Inserting KFF_FLEX_QUAL.(non-MLS)');
8351             END IF;
8352             INSERT INTO fnd_segment_attribute_types
8353               (
8354                application_id,
8355                id_flex_code,
8356                segment_attribute_type,
8357 
8358                created_by,
8359                creation_date,
8360                last_updated_by,
8361                last_update_date,
8362                last_update_login,
8363 
8364                global_flag,
8365                required_flag,
8366                unique_flag,
8367                segment_prompt,
8368                description
8369                )
8370               VALUES
8371               (
8372                l_kff_flx.application_id,
8373                l_kff_flx.id_flex_code,
8374                p_segment_attribute_type,
8375 
8376                l_file_who.created_by,
8377                l_file_who.creation_date,
8378                l_file_who.last_updated_by,
8379                l_file_who.last_update_date,
8380                l_file_who.last_update_login,
8381 
8382                p_global_flag,
8383                p_required_flag,
8384                p_unique_flag,
8385                p_segment_prompt,
8386                p_description
8387                );
8388          END IF;
8389          --
8390          -- Populate the cross product table.
8391          --
8392          populate_kff_flexq_assign();
8393 
8394       END IF;
8395     ELSIF (p_upload_phase = 'END') THEN
8396       IF (p_upload_mode = 'NLS') THEN
8397          --
8398          -- non-MLS translation.
8399          --
8400          NULL;
8401        ELSE
8402          --
8403          -- Usual upload.
8404          --
8405          NULL;
8406       END IF;
8407     ELSE
8408       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
8409    END IF;
8410 
8411    <<label_done>>
8412    done('KFF_FLEX_QUAL', p_upload_phase);
8413 EXCEPTION
8414    WHEN OTHERS THEN
8415       report_public_api_exception(l_func_name,
8416                                   p_upload_phase,
8417                                   p_application_short_name,
8418                                   p_id_flex_code,
8419                                   p_segment_attribute_type);
8420 END up_kff_flex_qual;
8421 
8422 -- --------------------------------------------------
8423 PROCEDURE up_kff_segment_qual
8424   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8425    p_upload_mode                  IN VARCHAR2,
8426    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8427    p_application_short_name       IN VARCHAR2,
8428    p_id_flex_code                 IN VARCHAR2,
8429    p_segment_attribute_type       IN VARCHAR2,
8430    p_value_attribute_type         IN VARCHAR2,
8431    p_owner                        IN VARCHAR2,
8432    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8433    p_required_flag                IN VARCHAR2,
8434    p_application_column_name      IN VARCHAR2,
8435    p_default_value                IN VARCHAR2,
8436    p_lookup_type                  IN VARCHAR2,
8437    p_derivation_rule_code         IN VARCHAR2,
8438    p_derivation_rule_value1       IN VARCHAR2,
8439    p_derivation_rule_value2       IN VARCHAR2,
8440    p_prompt                       IN VARCHAR2,
8441    p_description                  IN VARCHAR2)
8442   IS
8443      l_func_name  VARCHAR2(80);
8444      l_kff_flx    kff_flx_type;
8445      l_kff_flq    kff_flq_type;
8446      l_kff_sgq    kff_sgq_type;
8447      l_kff_sgq_tl kff_sgq_tl_type;
8448      l_file_who   who_type;
8449 BEGIN
8450    l_func_name := g_api_name || 'up_kff_segment_qual()';
8451    init('KFF_SEGMENT_QUAL', p_upload_phase);
8452    IF (g_debug_on) THEN
8453       debug(l_func_name,
8454             'PHASE:'  || p_upload_phase ||
8455             ',UMODE:' || p_upload_mode ||
8456             ',CMODE:' || p_custom_mode ||
8457             ',APPS:'  || p_application_short_name ||
8458             ',KFF:'   || p_id_flex_code ||
8459             ',FLEXQ:' || p_segment_attribute_type ||
8460             ',SEGQ:'  || p_value_attribute_type);
8461    END IF;
8462 
8463    --
8464    -- Gather WHO Information.
8465    --
8466    IF (get_kff_flx(p_application_short_name,
8467                    p_id_flex_code,
8468                    l_kff_flx)) THEN
8469       IF (get_kff_flq(l_kff_flx,
8470                       p_segment_attribute_type,
8471                       l_kff_flq)) THEN
8472          IF (get_kff_sgq(l_kff_flq,
8473                          p_value_attribute_type,
8474                          l_kff_sgq)) THEN
8475             NULL;
8476          END IF;
8477       END IF;
8478    END IF;
8479 
8480    IF (p_upload_mode = 'NLS') THEN
8481       --
8482       -- MLS translation.
8483       --
8484 
8485       --
8486       -- Gather WHO Information.
8487       --
8488       IF (get_kff_sgq_tl(l_kff_sgq,
8489                          userenv('LANG'),
8490                          l_kff_sgq_tl)) THEN
8491          NULL;
8492       END IF;
8493 
8494       --
8495       -- Check WHO Information.
8496       --
8497       IF (NOT is_upload_allowed
8498           (p_custom_mode                  => p_custom_mode,
8499            p_file_owner                   => p_owner,
8500            p_file_last_update_date        => p_last_update_date,
8501            p_db_last_updated_by           => l_kff_sgq_tl.last_updated_by,
8502            p_db_last_update_date          => l_kff_sgq_tl.last_update_date,
8503            x_file_who                     => l_file_who)) THEN
8504          IF (g_debug_on) THEN
8505             debug(l_func_name, 'Upload is not allowed because of customization.');
8506          END IF;
8507          GOTO label_done;
8508       END IF;
8509 
8510       IF (g_debug_on) THEN
8511          debug(l_func_name, 'Translating KFF_SEGMENT_QUAL.(MLS)');
8512       END IF;
8513       fnd_val_attribute_types_pkg.translate_row
8514         (x_application_short_name       => p_application_short_name,
8515          x_id_flex_code                 => p_id_flex_code,
8516          x_segment_attribute_type       => p_segment_attribute_type,
8517          x_value_attribute_type         => p_value_attribute_type,
8518          x_who                          => l_file_who,
8519          x_prompt                       => p_prompt,
8520          x_description                  => p_description);
8521       GOTO label_done;
8522     ELSE
8523       --
8524       -- Usual upload.
8525       --
8526 
8527       --
8528       -- Check WHO Information.
8529       --
8530       IF (NOT is_upload_allowed
8531           (p_custom_mode                  => p_custom_mode,
8532            p_file_owner                   => p_owner,
8533            p_file_last_update_date        => p_last_update_date,
8534            p_db_last_updated_by           => l_kff_sgq.last_updated_by,
8535            p_db_last_update_date          => l_kff_sgq.last_update_date,
8536            x_file_who                     => l_file_who)) THEN
8537          IF (g_debug_on) THEN
8538             debug(l_func_name, 'Upload is not allowed because of customization.');
8539          END IF;
8540          GOTO label_done;
8541       END IF;
8542 
8543       --
8544       -- Make sure KFF and Flexfield Qualifier exist.
8545       --
8546       get_kff_flx(p_application_short_name,
8547                   p_id_flex_code,
8548                   l_kff_flx);
8549 
8550       get_kff_flq(l_kff_flx,
8551                   p_segment_attribute_type,
8552                   l_kff_flq);
8553 
8554       IF (g_debug_on) THEN
8555          debug(l_func_name, 'Uploading KFF_SEGMENT_QUAL.(MLS)');
8556       END IF;
8557       fnd_val_attribute_types_pkg.load_row
8558         (x_application_short_name       => p_application_short_name,
8559          x_id_flex_code                 => p_id_flex_code,
8560          x_segment_attribute_type       => p_segment_attribute_type,
8561          x_value_attribute_type         => p_value_attribute_type,
8562          x_who                          => l_file_who,
8563          x_required_flag                => p_required_flag,
8564          x_application_column_name      => p_application_column_name,
8565          x_default_value                => p_default_value,
8566          x_lookup_type                  => p_lookup_type,
8567          x_derivation_rule_code         => p_derivation_rule_code,
8568          x_derivation_rule_value1       => p_derivation_rule_value1,
8569          x_derivation_rule_value2       => p_derivation_rule_value2,
8570          x_prompt                       => p_prompt,
8571          x_description                  => p_description);
8572 
8573       --
8574       -- Make sure application column is marked in fnd_columns.
8575       --
8576       fnd_flex_loader_apis.up_kff_column
8577         (p_upload_phase           => 'LEAF',
8578          p_upload_mode            => NULL,
8579          p_application_short_name => p_application_short_name,
8580          p_id_flex_code           => p_id_flex_code,
8581          p_column_name            => p_application_column_name,
8582          p_owner                  => p_owner,
8583          p_last_update_date       => p_last_update_date,
8584          p_flexfield_usage_code   => 'Q');
8585 
8586       --
8587       -- Populate the cross product table.
8588       --
8589       populate_kff_segq_assign();
8590 
8591    END IF;
8592 
8593    <<label_done>>
8594    done('KFF_SEGMENT_QUAL', p_upload_phase);
8595 EXCEPTION
8596    WHEN OTHERS THEN
8597       report_public_api_exception(l_func_name,
8598                                   p_upload_phase,
8599                                   p_application_short_name,
8600                                   p_id_flex_code,
8601                                   p_segment_attribute_type,
8602                                   p_value_attribute_type);
8603 END up_kff_segment_qual;
8604 
8605 -- --------------------------------------------------
8606 FUNCTION is_single_structure_kff(p_kff_flx IN kff_flx_type)
8607   RETURN BOOLEAN
8608   IS
8609      l_return BOOLEAN;
8610 BEGIN
8611    l_return := FALSE;
8612 
8613    IF ((p_kff_flx.set_defining_column_name IS NULL) OR
8614        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MSTK') OR
8615        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MTLL') OR
8616        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MICG') OR
8617        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'MDSP') OR
8618        (p_kff_flx.application_id = 401 AND p_kff_flx.id_flex_code = 'SERV')) THEN
8619       l_return := TRUE;
8620    END IF;
8621 
8622    RETURN l_return;
8623 
8624 END is_single_structure_kff;
8625 
8626 -- --------------------------------------------------
8627 PROCEDURE up_kff_structure
8628   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8629    p_upload_mode                  IN VARCHAR2,
8630    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8631    p_application_short_name       IN VARCHAR2,
8632    p_id_flex_code                 IN VARCHAR2,
8633    p_id_flex_structure_code       IN VARCHAR2,
8634    p_owner                        IN VARCHAR2,
8635    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8636    p_concatenated_segment_delimit IN VARCHAR2,
8637    p_cross_segment_validation_fla IN VARCHAR2,
8638    p_dynamic_inserts_allowed_flag IN VARCHAR2,
8639    p_enabled_flag                 IN VARCHAR2,
8640    p_freeze_flex_definition_flag  IN VARCHAR2,
8641    p_freeze_structured_hier_flag  IN VARCHAR2,
8642    p_shorthand_enabled_flag       IN VARCHAR2,
8643    p_shorthand_length             IN VARCHAR2,
8644    p_structure_view_name          IN VARCHAR2,
8645    p_id_flex_structure_name       IN VARCHAR2,
8646    p_description                  IN VARCHAR2,
8647    p_shorthand_prompt             IN VARCHAR2)
8648   IS
8649      l_func_name  VARCHAR2(80);
8650      l_kff_flx    kff_flx_type;
8651      l_kff_str    kff_str_type;
8652      l_kff_str_tl kff_str_tl_type;
8653      l_file_who   who_type;
8654      l_count      NUMBER;
8655      l_kff_str2   kff_str_type;
8656 BEGIN
8657    l_func_name := g_api_name || 'up_kff_structure()';
8658    init('KFF_STRUCTURE', p_upload_phase);
8659    IF (g_debug_on) THEN
8660       debug(l_func_name,
8661             'PHASE:'  || p_upload_phase ||
8662             ',UMODE:' || p_upload_mode  ||
8663             ',CMODE:' || p_custom_mode  ||
8664             ',APPS:'  || p_application_short_name ||
8665             ',KFF:'   || p_id_flex_code ||
8666             ',STR:'   || p_id_flex_structure_code);
8667    END IF;
8668 
8669    IF (p_upload_phase = 'BEGIN') THEN
8670       g_numof_changes_kff_str := g_numof_changes;
8671       --
8672       -- Gather WHO Information.
8673       --
8674       IF (get_kff_flx(p_application_short_name,
8675                       p_id_flex_code,
8676                       l_kff_flx)) THEN
8677          IF (get_kff_str(l_kff_flx,
8678                          p_id_flex_structure_code,
8679                          l_kff_str)) THEN
8680             NULL;
8681          END IF;
8682       END IF;
8683 
8684       IF (p_upload_mode = 'NLS') THEN
8685          --
8686          -- MLS translation.
8687          --
8688 
8689          --
8690          -- Gather WHO Information.
8691          --
8692          IF (get_kff_str_tl(l_kff_str,
8693                             userenv('LANG'),
8694                             l_kff_str_tl)) THEN
8695             NULL;
8696          END IF;
8697 
8698          --
8699          -- Check WHO Information.
8700          --
8701          IF (NOT is_upload_allowed
8702              (p_custom_mode                  => p_custom_mode,
8703               p_file_owner                   => p_owner,
8704               p_file_last_update_date        => p_last_update_date,
8705               p_db_last_updated_by           => l_kff_str_tl.last_updated_by,
8706               p_db_last_update_date          => l_kff_str_tl.last_update_date,
8707               x_file_who                     => l_file_who)) THEN
8708             IF (g_debug_on) THEN
8709                debug(l_func_name, 'Upload is not allowed because of customization.');
8710             END IF;
8711             GOTO label_done;
8712          END IF;
8713 
8714          IF (g_debug_on) THEN
8715             debug(l_func_name, 'Translating KFF_STRUCTURE.(MLS)');
8716          END IF;
8717          fnd_id_flex_structures_pkg.translate_row
8718            (x_application_short_name       => p_application_short_name,
8719             x_id_flex_code                 => p_id_flex_code,
8720             x_id_flex_structure_code       => p_id_flex_structure_code,
8721             x_who                          => l_file_who,
8722             x_id_flex_structure_name       => p_id_flex_structure_name,
8723             x_description                  => p_description,
8724             x_shorthand_prompt             => p_shorthand_prompt);
8725        ELSE
8726          --
8727          -- Usual upload.
8728          --
8729 
8730          --
8731          -- Check WHO Information.
8732          --
8733          IF (NOT is_upload_allowed
8734              (p_custom_mode                  => p_custom_mode,
8735               p_file_owner                   => p_owner,
8736               p_file_last_update_date        => p_last_update_date,
8737               p_db_last_updated_by           => l_kff_str.last_updated_by,
8738               p_db_last_update_date          => l_kff_str.last_update_date,
8739               x_file_who                     => l_file_who)) THEN
8740             IF (g_debug_on) THEN
8741                debug(l_func_name, 'Upload is not allowed because of customization.');
8742             END IF;
8743             GOTO label_done;
8744          END IF;
8745 
8746          --
8747          -- Make sure KFF exists.
8748          --
8749          get_kff_flx(p_application_short_name,
8750                      p_id_flex_code,
8751                      l_kff_flx);
8752 
8753          --
8754          -- Check the consistency of single structure KFFs.
8755          --
8756          IF (is_single_structure_kff(l_kff_flx)) THEN
8757 
8758             SELECT COUNT(*)
8759               INTO l_count
8760               FROM fnd_id_flex_structures
8761               WHERE application_id = l_kff_flx.application_id
8762               AND id_flex_code = l_kff_flx.id_flex_code;
8763 
8764             IF (l_count > 1) THEN
8765                --
8766                -- There cannot be more than 1 structure.
8767                --
8768                raise_error(l_func_name, ERROR_KFF_GENERIC,
8769                            'Single structure KFF: There are more than 1 structures defined',
8770                            'Please apply patch 3498448 or one of its replacements');
8771 
8772              ELSIF (l_count = 1) THEN
8773                --
8774                -- Make sure primary keys are right.
8775                --
8776                SELECT *
8777                  INTO l_kff_str2
8778                  FROM fnd_id_flex_structures
8779                  WHERE application_id = l_kff_flx.application_id
8780                  AND id_flex_code = l_kff_flx.id_flex_code;
8781 
8782                IF (l_kff_str2.id_flex_structure_code <> p_id_flex_structure_code) THEN
8783                   raise_error(l_func_name, ERROR_KFF_GENERIC,
8784                               'Single structure KFF: Structure code does not match. ' ||
8785                               'Structure Code in DB: ' || l_kff_str2.id_flex_structure_code ||
8786                               ', Structure Code in LDT: ' || p_id_flex_structure_code,
8787                               'Please apply patch 3498448 or one of its replacements');
8788                END IF;
8789 
8790                IF (l_kff_str2.id_flex_num <> 101) THEN
8791                   fix_id_flex_num(p_application_id  => l_kff_str2.application_id,
8792                                   p_id_flex_code    => l_kff_str2.id_flex_code,
8793                                   p_id_flex_num_old => l_kff_str2.id_flex_num,
8794                                   p_id_flex_num_new => 101);
8795                END IF;
8796 
8797              ELSIF (l_count = 0) THEN
8798                --
8799                -- This is the first time this KFF is being uploaded.
8800                --
8801                NULL;
8802             END IF; -- l_count
8803          END IF; -- Single structure only KFF
8804 
8805          IF (g_debug_on) THEN
8806             debug(l_func_name, 'Uploading KFF_STRUCTURE.(MLS)');
8807          END IF;
8808          fnd_id_flex_structures_pkg.load_row
8809            (x_application_short_name       => p_application_short_name,
8810             x_id_flex_code                 => p_id_flex_code,
8811             x_id_flex_structure_code       => p_id_flex_structure_code,
8812             x_who                          => l_file_who,
8813             x_concatenated_segment_delimit => p_concatenated_segment_delimit,
8814             x_cross_segment_validation_fla => p_cross_segment_validation_fla,
8815             x_dynamic_inserts_allowed_flag => p_dynamic_inserts_allowed_flag,
8816             x_enabled_flag                 => p_enabled_flag,
8817             x_freeze_flex_definition_flag  => p_freeze_flex_definition_flag,
8818             x_freeze_structured_hier_flag  => p_freeze_structured_hier_flag,
8819             x_shorthand_enabled_flag       => p_shorthand_enabled_flag,
8820             x_shorthand_length             => p_shorthand_length,
8821             x_structure_view_name          => p_structure_view_name,
8822             x_id_flex_structure_name       => p_id_flex_structure_name,
8823             x_description                  => p_description,
8824             x_shorthand_prompt             => p_shorthand_prompt);
8825 
8826          --
8827          -- Make sure id_flex_num is 101 for single structure KFF.
8828          --
8829          IF (is_single_structure_kff(l_kff_flx)) THEN
8830             get_kff_str(l_kff_flx,
8831                         p_id_flex_structure_code,
8832                         l_kff_str2);
8833 
8834             IF (l_kff_str2.id_flex_num <> 101) THEN
8835                fix_id_flex_num(p_application_id  => l_kff_str2.application_id,
8836                                p_id_flex_code    => l_kff_str2.id_flex_code,
8837                                p_id_flex_num_old => l_kff_str2.id_flex_num,
8838                                p_id_flex_num_new => 101);
8839             END IF;
8840          END IF;
8841 
8842       END IF; -- p_upload_mode
8843     ELSIF (p_upload_phase = 'END') THEN
8844       IF (p_upload_mode = 'NLS') THEN
8845          --
8846          -- MLS translation.
8847          --
8848          NULL;
8849        ELSE
8850          --
8851          -- Usual upload.
8852          --
8853          NULL;
8854       END IF;
8855       --
8856       -- Compile Flex, Generate View.
8857       --
8858       IF (g_numof_changes > g_numof_changes_kff_str) THEN
8859          call_cp(p_mode                       => 'KFF-STR',
8860                  p_upload_mode                => p_upload_mode,
8861                  p_application_short_name     => p_application_short_name,
8862                  p_id_flex_code               => p_id_flex_code,
8863                  p_id_flex_structure_code     => p_id_flex_structure_code);
8864       END IF;
8865     ELSE
8866       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
8867    END IF;
8868 
8869    <<label_done>>
8870    done('KFF_STRUCTURE', p_upload_phase);
8871 EXCEPTION
8872    WHEN OTHERS THEN
8873       report_public_api_exception(l_func_name,
8874                                   p_upload_phase,
8875                                   p_application_short_name,
8876                                   p_id_flex_code,
8877                                   p_id_flex_structure_code);
8878 END up_kff_structure;
8879 
8880 -- --------------------------------------------------
8881 PROCEDURE up_kff_wf_process
8882   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
8883    p_upload_mode                  IN VARCHAR2,
8884    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
8885    p_application_short_name       IN VARCHAR2,
8886    p_id_flex_code                 IN VARCHAR2,
8887    p_id_flex_structure_code       IN VARCHAR2,
8888    p_wf_item_type                 IN VARCHAR2,
8889    p_owner                        IN VARCHAR2,
8890    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
8891    p_wf_process_name              IN VARCHAR2)
8892   IS
8893      l_func_name VARCHAR2(80);
8894      l_kff_flx   kff_flx_type;
8895      l_kff_str   kff_str_type;
8896      l_kff_wfp   kff_wfp_type;
8897      l_dummy     NUMBER;
8898      l_file_who  who_type;
8899 BEGIN
8900    l_func_name := g_api_name || 'up_kff_wf_process()';
8901    init('KFF_WF_PROCESS', p_upload_phase);
8902    IF (g_debug_on) THEN
8903       debug(l_func_name,
8904             'PHASE:'  || p_upload_phase ||
8905             ',UMODE:' || p_upload_mode ||
8906             ',CMODE:' || p_custom_mode ||
8907             ',APPS:'  || p_application_short_name ||
8908             ',KFF:'   || p_id_flex_code ||
8909             ',STR:'   || p_id_flex_structure_code ||
8910             ',WFI:'   || p_wf_item_type ||
8911             ',WFP:'   || p_wf_process_name);
8912    END IF;
8913 
8914    IF (p_upload_mode = 'NLS') THEN
8915       --
8916       -- No translation here.
8917       --
8918       IF (g_debug_on) THEN
8919          debug(l_func_name, 'No translation here.');
8920       END IF;
8921       GOTO label_done;
8922    END IF;
8923 
8924    --
8925    -- Make sure KFF and Structure exist.
8926    --
8927    get_kff_flx(p_application_short_name,
8928                p_id_flex_code,
8929                l_kff_flx);
8930 
8931    get_kff_str(l_kff_flx,
8932                p_id_flex_structure_code,
8933                l_kff_str);
8934 
8935    --
8936    -- Gather WHO Information.
8937    --
8938    IF (get_kff_wfp(l_kff_str,
8939                    p_wf_item_type,
8940                    l_kff_wfp)) THEN
8941       NULL;
8942    END IF;
8943 
8944    --
8945    -- Check WHO Information.
8946    --
8947    IF (NOT is_upload_allowed
8948        (p_custom_mode                  => p_custom_mode,
8949         p_file_owner                   => p_owner,
8950         p_file_last_update_date        => p_last_update_date,
8951         p_db_last_updated_by           => l_kff_wfp.last_updated_by,
8952         p_db_last_update_date          => l_kff_wfp.last_update_date,
8953         x_file_who                     => l_file_who)) THEN
8954       IF (g_debug_on) THEN
8955          debug(l_func_name, 'Upload is not allowed because of customization.');
8956       END IF;
8957       GOTO label_done;
8958    END IF;
8959 
8960    --
8961    -- Usual upload.
8962    --
8963 
8964    --
8965    -- Make sure Item Type and Process exist.
8966    -- Copied from AFFFWFPB.pls
8967    --
8968    BEGIN
8969       SELECT 1
8970         INTO l_dummy
8971         FROM wf_item_types_vl
8972         WHERE name = p_wf_item_type;
8973    EXCEPTION
8974       WHEN OTHERS THEN
8975          --
8976          -- GEO !!!
8977          --
8978          raise_not_exist(l_func_name,
8979                          'Please create the workflow item type.',
8980                          'WF Item Type', p_wf_item_type);
8981    END;
8982    BEGIN
8983       SELECT 1
8984         INTO l_dummy
8985         FROM wf_runnable_processes_v
8986         WHERE item_type = p_wf_item_type
8987         AND process_name = p_wf_process_name;
8988    EXCEPTION
8989       WHEN OTHERS THEN
8990          --
8991          -- GEO !!!
8992          --
8993          raise_not_exist(l_func_name,
8994                          'Please create the runnable workflow process.',
8995                          'WF Process Name', p_wf_process_name);
8996    END;
8997 
8998    IF (g_debug_on) THEN
8999       debug(l_func_name, 'Updating KFF_WF_PROCESS.(no-TL)');
9000    END IF;
9001    UPDATE fnd_flex_workflow_processes SET
9002      last_updated_by   = l_file_who.last_updated_by,
9003      last_update_date  = l_file_who.last_update_date,
9004      last_update_login = l_file_who.last_update_login,
9005      wf_process_name   = p_wf_process_name
9006      WHERE application_id = l_kff_flx.application_id
9007      AND id_flex_code = l_kff_flx.id_flex_code
9008      AND id_flex_num = l_kff_str.id_flex_num
9009      AND wf_item_type = p_wf_item_type;
9010 
9011    IF (SQL%notfound) THEN
9012       IF (g_debug_on) THEN
9013          debug(l_func_name, 'Inserting KFF_WF_PROCESS.(no-TL)');
9014       END IF;
9015       INSERT INTO fnd_flex_workflow_processes
9016         (
9017          application_id,
9018          id_flex_code,
9019          id_flex_num,
9020          wf_item_type,
9021 
9022          created_by,
9023          creation_date,
9024          last_updated_by,
9025          last_update_date,
9026          last_update_login,
9027 
9028          wf_process_name
9029          )
9030         VALUES
9031         (
9032          l_kff_flx.application_id,
9033          l_kff_flx.id_flex_code,
9034          l_kff_str.id_flex_num,
9035          p_wf_item_type,
9036 
9037          l_file_who.created_by,
9038          l_file_who.creation_date,
9039          l_file_who.last_updated_by,
9040          l_file_who.last_update_date,
9041          l_file_who.last_update_login,
9042 
9043          p_wf_process_name
9044          );
9045    END IF;
9046 
9047    <<label_done>>
9048    done('KFF_WF_PROCESS', p_upload_phase);
9049 EXCEPTION
9050    WHEN OTHERS THEN
9051       report_public_api_exception(l_func_name,
9052                                   p_upload_phase,
9053                                   p_application_short_name,
9054                                   p_id_flex_code,
9055                                   p_id_flex_structure_code,
9056                                   p_wf_item_type);
9057 END up_kff_wf_process;
9058 
9059 -- --------------------------------------------------
9060 PROCEDURE up_kff_sh_alias
9061   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9062    p_upload_mode                  IN VARCHAR2,
9063    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9064    p_application_short_name       IN VARCHAR2,
9065    p_id_flex_code                 IN VARCHAR2,
9066    p_id_flex_structure_code       IN VARCHAR2,
9067    p_alias_name                   IN VARCHAR2,
9068    p_owner                        IN VARCHAR2,
9069    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9070    p_concatenated_segments        IN VARCHAR2,
9071    p_enabled_flag                 IN VARCHAR2,
9072    p_start_date_active            IN VARCHAR2,
9073    p_end_date_active              IN VARCHAR2,
9074    p_attribute_category           IN VARCHAR2,
9075    p_attribute1                   IN VARCHAR2,
9076    p_attribute2                   IN VARCHAR2,
9077    p_attribute3                   IN VARCHAR2,
9078    p_attribute4                   IN VARCHAR2,
9079    p_attribute5                   IN VARCHAR2,
9080    p_attribute6                   IN VARCHAR2,
9081    p_attribute7                   IN VARCHAR2,
9082    p_attribute8                   IN VARCHAR2,
9083    p_attribute9                   IN VARCHAR2,
9084    p_attribute10                  IN VARCHAR2,
9085    p_attribute11                  IN VARCHAR2,
9086    p_attribute12                  IN VARCHAR2,
9087    p_attribute13                  IN VARCHAR2,
9088    p_attribute14                  IN VARCHAR2,
9089    p_attribute15                  IN VARCHAR2,
9090    p_description                  IN VARCHAR2)
9091   IS
9092      l_func_name VARCHAR2(80);
9093      l_kff_flx   kff_flx_type;
9094      l_kff_str   kff_str_type;
9095      l_kff_sha   kff_sha_type;
9096      l_file_who  who_type;
9097 BEGIN
9098    l_func_name := g_api_name || 'up_kff_sh_alias()';
9099    init('KFF_SH_ALIAS', p_upload_phase);
9100    IF (g_debug_on) THEN
9101       debug(l_func_name,
9102             'PHASE:'  || p_upload_phase ||
9103             ',UMODE:' || p_upload_mode ||
9104             ',CMODE:' || p_custom_mode ||
9105             ',APPS:'  || p_application_short_name ||
9106             ',KFF:'   || p_id_flex_code ||
9107             ',STR:'   || p_id_flex_structure_code ||
9108             ',SHA:'   || p_alias_name);
9109    END IF;
9110 
9111    --
9112    -- Gather WHO Information.
9113    --
9114    IF (get_kff_flx(p_application_short_name,
9115                    p_id_flex_code,
9116                    l_kff_flx)) THEN
9117       IF (get_kff_str(l_kff_flx,
9118                       p_id_flex_structure_code,
9119                       l_kff_str)) THEN
9120          IF (get_kff_sha(l_kff_str,
9121                          p_alias_name,
9122                          l_kff_sha)) THEN
9123             NULL;
9124          END IF;
9125       END IF;
9126    END IF;
9127 
9128    --
9129    -- Check WHO Information.
9130    --
9131    IF (NOT is_upload_allowed
9132        (p_custom_mode                  => p_custom_mode,
9133         p_file_owner                   => p_owner,
9134         p_file_last_update_date        => p_last_update_date,
9135         p_db_last_updated_by           => l_kff_sha.last_updated_by,
9136         p_db_last_update_date          => l_kff_sha.last_update_date,
9137         x_file_who                     => l_file_who)) THEN
9138       IF (g_debug_on) THEN
9139          debug(l_func_name, 'Upload is not allowed because of customization.');
9140       END IF;
9141       GOTO label_done;
9142    END IF;
9143 
9144    IF (p_upload_mode = 'NLS') THEN
9145       --
9146       -- non-MLS translation.
9147       --
9148       IF (g_debug_on) THEN
9149          debug(l_func_name, 'Translating KFF_SH_ALIAS.(non-MLS)');
9150       END IF;
9151       UPDATE fnd_shorthand_flex_aliases SET
9152         last_updated_by   = l_file_who.last_updated_by,
9153         last_update_date  = l_file_who.last_update_date,
9154         last_update_login = l_file_who.last_update_login,
9155         description       = Nvl(p_description, description)
9156         WHERE ((application_id, id_flex_code, id_flex_num) =
9157                (SELECT application_id, id_flex_code, id_flex_num
9158                 FROM fnd_id_flex_structures
9159                 WHERE application_id = (SELECT application_id
9160                                         FROM fnd_application
9161                                         WHERE application_short_name = p_application_short_name)
9162                 AND id_flex_code = p_id_flex_code
9163                 AND id_flex_structure_code = p_id_flex_structure_code))
9164         AND alias_name = p_alias_name
9165         AND userenv('LANG') = (SELECT language_code
9166                                FROM fnd_languages
9167                                WHERE installed_flag = 'B');
9168       IF (SQL%notfound) THEN
9169          IF (g_debug_on) THEN
9170             debug(l_func_name, 'No entity to translate.');
9171          END IF;
9172       END IF;
9173       GOTO label_done;
9174     ELSE
9175       --
9176       -- Usual upload.
9177       --
9178 
9179       --
9180       -- Make sure KFF and Structure exist.
9181       --
9182       get_kff_flx(p_application_short_name,
9183                   p_id_flex_code,
9184                   l_kff_flx);
9185 
9186       get_kff_str(l_kff_flx,
9187                   p_id_flex_structure_code,
9188                   l_kff_str);
9189 
9190       IF (g_debug_on) THEN
9191          debug(l_func_name, 'Updating KFF_SH_ALIAS.(non-MLS)');
9192       END IF;
9193       UPDATE fnd_shorthand_flex_aliases SET
9194         last_updated_by       = l_file_who.last_updated_by,
9195         last_update_date      = l_file_who.last_update_date,
9196         last_update_login     = l_file_who.last_update_login,
9197         concatenated_segments = p_concatenated_segments,
9198         enabled_flag          = p_enabled_flag,
9199         start_date_active     = To_date(p_start_date_active, g_date_mask),
9200         end_date_active       = To_date(p_end_date_active, g_date_mask),
9201         attribute_category    = p_attribute_category,
9202         attribute1            = p_attribute1,
9203         attribute2            = p_attribute2,
9204         attribute3            = p_attribute3,
9205         attribute4            = p_attribute4,
9206         attribute5            = p_attribute5,
9207         attribute6            = p_attribute6,
9208         attribute7            = p_attribute7,
9209         attribute8            = p_attribute8,
9210         attribute9            = p_attribute9,
9211         attribute10           = p_attribute10,
9212         attribute11           = p_attribute11,
9213         attribute12           = p_attribute12,
9214         attribute13           = p_attribute13,
9215         attribute14           = p_attribute14,
9216         attribute15           = p_attribute15,
9217         description           = p_description
9218         WHERE application_id = l_kff_flx.application_id
9219         AND id_flex_code = l_kff_flx.id_flex_code
9220         AND id_flex_num = l_kff_str.id_flex_num
9221         AND alias_name = p_alias_name;
9222 
9223       IF (SQL%notfound) THEN
9224          IF (g_debug_on) THEN
9225             debug(l_func_name, 'Inserting KFF_SH_ALIAS.(non-MLS)');
9226          END IF;
9227          INSERT INTO fnd_shorthand_flex_aliases
9228            (
9229             application_id,
9230             id_flex_code,
9231             id_flex_num,
9232             alias_name,
9233 
9234             created_by,
9235             creation_date,
9236             last_updated_by,
9237             last_update_date,
9238             last_update_login,
9239 
9240             concatenated_segments,
9241             enabled_flag,
9242             start_date_active,
9243             end_date_active,
9244             attribute_category,
9245             attribute1,
9246             attribute2,
9247             attribute3,
9248             attribute4,
9249             attribute5,
9250             attribute6,
9251             attribute7,
9252             attribute8,
9253             attribute9,
9254             attribute10,
9255             attribute11,
9256             attribute12,
9257             attribute13,
9258             attribute14,
9259             attribute15,
9260             description
9261             )
9262            VALUES
9263            (
9264             l_kff_flx.application_id,
9265             l_kff_flx.id_flex_code,
9266             l_kff_str.id_flex_num,
9267             p_alias_name,
9268 
9269             l_file_who.created_by,
9270             l_file_who.creation_date,
9271             l_file_who.last_updated_by,
9272             l_file_who.last_update_date,
9273             l_file_who.last_update_login,
9274 
9275             p_concatenated_segments,
9276             p_enabled_flag,
9277             To_date(p_start_date_active, g_date_mask),
9278             To_date(p_end_date_active, g_date_mask),
9279             p_attribute_category,
9280             p_attribute1,
9281             p_attribute2,
9282             p_attribute3,
9283             p_attribute4,
9284             p_attribute5,
9285             p_attribute6,
9286             p_attribute7,
9287             p_attribute8,
9288             p_attribute9,
9289             p_attribute10,
9290             p_attribute11,
9291             p_attribute12,
9292             p_attribute13,
9293             p_attribute14,
9294             p_attribute15,
9295             p_description
9296             );
9297       END IF;
9298    END IF;
9299 
9300    <<label_done>>
9301    done('KFF_SH_ALIAS', p_upload_phase);
9302 EXCEPTION
9303    WHEN OTHERS THEN
9304       report_public_api_exception(l_func_name,
9305                                   p_upload_phase,
9306                                   p_application_short_name,
9307                                   p_id_flex_code,
9308                                   p_id_flex_structure_code,
9309                                   p_alias_name);
9310 END up_kff_sh_alias;
9311 
9312 -- --------------------------------------------------
9313 FUNCTION check_cvr_trigger(p_trigger_name IN VARCHAR2)
9314   RETURN VARCHAR2
9315   IS
9316      l_func_name VARCHAR2(80);
9317      l_status    user_triggers.status%TYPE;
9318 BEGIN
9319    l_func_name := g_api_name || 'check_cvr_trigger()';
9320    --
9321    -- Get the status of this trigger
9322    --
9323    SELECT status
9324      INTO l_status
9325      FROM user_triggers
9326      WHERE trigger_name = p_trigger_name;
9327 
9328 
9329    IF (l_status <> 'ENABLED') THEN
9330       RETURN (p_trigger_name || ' trigger is not ENABLED.' || g_newline);
9331    END IF;
9332 
9333    RETURN NULL;
9334 EXCEPTION
9335    WHEN no_data_found THEN
9336       RETURN (p_trigger_name || ' trigger does not exist.' || g_newline);
9337    WHEN OTHERS THEN
9338       raise_when_others(l_func_name,
9339                         p_trigger_name);
9340 END check_cvr_trigger;
9341 
9342 -- --------------------------------------------------
9343 PROCEDURE check_cvr_triggers
9344   IS
9345      l_func_name  VARCHAR2(80);
9346      l_vc2 VARCHAR2(32000);
9347 BEGIN
9348    l_func_name := g_api_name || 'check_cvr_triggers()';
9349    l_vc2 := NULL;
9350    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VALIDATION_RULES_T1');
9351    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VALIDATION_RULES_T2');
9352    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VALIDATION_RULES_T3');
9353    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T1');
9354    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T2');
9355    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T3');
9356    l_vc2 := l_vc2 || check_cvr_trigger('FND_FLEX_VAL_RULE_LINES_T4');
9357 
9358    IF (l_vc2 IS NOT NULL) THEN
9359       raise_error(l_func_name, ERROR_KFF_GENERIC,
9360                   l_vc2,
9361                   'Please run $FND_TOP/patch/115/sql/afeffs04.sql');
9362    END IF;
9363 EXCEPTION
9364    WHEN OTHERS THEN
9365       raise_when_others(l_func_name);
9366 END check_cvr_triggers;
9367 
9368 -- --------------------------------------------------
9369 PROCEDURE up_kff_cvr_rule
9370   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9371    p_upload_mode                  IN VARCHAR2,
9372    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9373    p_application_short_name       IN VARCHAR2,
9374    p_id_flex_code                 IN VARCHAR2,
9375    p_id_flex_structure_code       IN VARCHAR2,
9376    p_flex_validation_rule_name    IN VARCHAR2,
9377    p_owner                        IN VARCHAR2,
9378    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9379    p_enabled_flag                 IN VARCHAR2,
9380    p_error_segment_column_name    IN VARCHAR2,
9381    p_start_date_active            IN VARCHAR2,
9382    p_end_date_active              IN VARCHAR2,
9383    p_error_message_text           IN VARCHAR2,
9384    p_description                  IN VARCHAR2)
9385   IS
9386      l_func_name  VARCHAR2(80);
9387      l_kff_flx    kff_flx_type;
9388      l_kff_str    kff_str_type;
9389      l_kff_cvr    kff_cvr_type;
9390      l_kff_cvr_tl kff_cvr_tl_type;
9391      l_file_who   who_type;
9392 BEGIN
9393    l_func_name := g_api_name || 'up_kff_cvr_rule()';
9394    --
9395    -- CVR stats table is populated by triggers.
9396    --
9397    init('KFF_CVR_RULE', p_upload_phase);
9398    IF (g_debug_on) THEN
9399       debug(l_func_name,
9400             'PHASE:'  || p_upload_phase ||
9401             ',UMODE:' || p_upload_mode  ||
9402             ',CMODE:' || p_custom_mode  ||
9403             ',APPS:'  || p_application_short_name ||
9404             ',KFF:'   || p_id_flex_code ||
9405             ',STR:'   || p_id_flex_structure_code ||
9406             ',CVR:'   || p_flex_validation_rule_name);
9407    END IF;
9408 
9409    IF (p_upload_phase = 'BEGIN') THEN
9410       --
9411       -- Gather WHO Information.
9412       --
9413       IF (get_kff_flx(p_application_short_name,
9414                       p_id_flex_code,
9415                       l_kff_flx)) THEN
9416          IF (get_kff_str(l_kff_flx,
9417                          p_id_flex_structure_code,
9418                          l_kff_str)) THEN
9419             IF (get_kff_cvr(l_kff_str,
9420                             p_flex_validation_rule_name,
9421                             l_kff_cvr)) THEN
9422                NULL;
9423             END IF;
9424          END IF;
9425       END IF;
9426 
9427       IF (p_upload_mode = 'NLS') THEN
9428          --
9429          -- MLS translation.
9430          --
9431 
9432          --
9433          -- Gather WHO Information.
9434          --
9435          IF (get_kff_cvr_tl(l_kff_cvr,
9436                             userenv('LANG'),
9437                             l_kff_cvr_tl)) THEN
9438             NULL;
9439          END IF;
9440 
9441          --
9442          -- Check WHO Information.
9443          --
9444          IF (NOT is_upload_allowed
9445              (p_custom_mode                  => p_custom_mode,
9446               p_file_owner                   => p_owner,
9447               p_file_last_update_date        => p_last_update_date,
9448               p_db_last_updated_by           => l_kff_cvr_tl.last_updated_by,
9449               p_db_last_update_date          => l_kff_cvr_tl.last_update_date,
9450               x_file_who                     => l_file_who)) THEN
9451             IF (g_debug_on) THEN
9452                debug(l_func_name, 'Upload is not allowed because of customization.');
9453             END IF;
9454             GOTO label_done;
9455          END IF;
9456 
9457          IF (g_debug_on) THEN
9458             debug(l_func_name, 'Translating KFF_CVR_RULE.(MLS)');
9459          END IF;
9460          fnd_flex_vdation_rules_pkg.translate_row
9461            (x_application_short_name       => p_application_short_name,
9462             x_id_flex_code                 => p_id_flex_code,
9463             x_id_flex_structure_code       => p_id_flex_structure_code,
9464             x_flex_validation_rule_name    => p_flex_validation_rule_name,
9465             x_who                          => l_file_who,
9466             x_error_message_text           => p_error_message_text,
9467             x_description                  => p_description);
9468        ELSE
9469          --
9470          -- Usual upload.
9471          --
9472 
9473          --
9474          -- Check WHO Information.
9475          --
9476          IF (NOT is_upload_allowed
9477              (p_custom_mode                  => p_custom_mode,
9478               p_file_owner                   => p_owner,
9479               p_file_last_update_date        => p_last_update_date,
9480               p_db_last_updated_by           => l_kff_cvr.last_updated_by,
9481               p_db_last_update_date          => l_kff_cvr.last_update_date,
9482               x_file_who                     => l_file_who)) THEN
9483             IF (g_debug_on) THEN
9484                debug(l_func_name, 'Upload is not allowed because of customization.');
9485             END IF;
9486             GOTO label_done;
9487          END IF;
9488 
9489          --
9490          -- Make sure KFF and Structure exist.
9491          --
9492          get_kff_flx(p_application_short_name,
9493                      p_id_flex_code,
9494                      l_kff_flx);
9495 
9496          get_kff_str(l_kff_flx,
9497                      p_id_flex_structure_code,
9498                      l_kff_str);
9499 
9500          IF (g_debug_on) THEN
9501             debug(l_func_name, 'Uploading KFF_CVR_RULE.(MLS)');
9502          END IF;
9503          fnd_flex_vdation_rules_pkg.load_row
9504            (x_application_short_name       => p_application_short_name,
9505             x_id_flex_code                 => p_id_flex_code,
9506             x_id_flex_structure_code       => p_id_flex_structure_code,
9507             x_flex_validation_rule_name    => p_flex_validation_rule_name,
9508             x_who                          => l_file_who,
9509             x_enabled_flag                 => p_enabled_flag,
9510             x_error_segment_column_name    => p_error_segment_column_name,
9511             x_start_date_active            => To_date(p_start_date_active,
9512                                                       g_date_mask),
9513             x_end_date_active              => To_date(p_end_date_active,
9514                                                       g_date_mask),
9515             x_error_message_text           => p_error_message_text,
9516             x_description                  => p_description);
9517       END IF;
9518     ELSIF (p_upload_phase = 'END') THEN
9519       IF (p_upload_mode = 'NLS') THEN
9520          --
9521          -- MLS translation.
9522          --
9523          NULL;
9524        ELSE
9525          --
9526          -- Usual upload.
9527          --
9528          NULL;
9529       END IF;
9530     ELSE
9531       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
9532    END IF;
9533 
9534    <<label_done>>
9535    done('KFF_CVR_RULE', p_upload_phase);
9536 EXCEPTION
9537    WHEN OTHERS THEN
9538       report_public_api_exception(l_func_name,
9539                                   p_upload_phase,
9540                                   p_application_short_name,
9541                                   p_id_flex_code,
9542                                   p_id_flex_structure_code,
9543                                   p_flex_validation_rule_name);
9544 
9545       BEGIN
9546          check_cvr_triggers();
9547       EXCEPTION
9548          WHEN OTHERS THEN
9549             report_public_api_exception(l_func_name,
9550                                         p_upload_phase,
9551                                         p_application_short_name,
9552                                         p_id_flex_code,
9553                                         p_id_flex_structure_code,
9554                                         p_flex_validation_rule_name);
9555       END;
9556 END up_kff_cvr_rule;
9557 
9558 -- --------------------------------------------------
9559 PROCEDURE up_kff_cvr_line
9560   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9561    p_upload_mode                  IN VARCHAR2,
9562    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9563    p_application_short_name       IN VARCHAR2,
9564    p_id_flex_code                 IN VARCHAR2,
9565    p_id_flex_structure_code       IN VARCHAR2,
9566    p_flex_validation_rule_name    IN VARCHAR2,
9567    p_include_exclude_indicator    IN VARCHAR2,
9568    p_concatenated_segments_low    IN VARCHAR2,
9569    p_concatenated_segments_high   IN VARCHAR2,
9570    p_owner                        IN VARCHAR2,
9571    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9572    p_enabled_flag                 IN VARCHAR2,
9573    p_description                  IN VARCHAR2)
9574   IS
9575      l_func_name VARCHAR2(80);
9576      l_kff_flx   kff_flx_type;
9577      l_kff_str   kff_str_type;
9578      l_kff_cvr   kff_cvr_type;
9579      l_kff_cvl   kff_cvl_type;
9580      l_file_who  who_type;
9581 BEGIN
9582    l_func_name := g_api_name || 'up_kff_cvr_line()';
9583    --
9584    -- CVR stats and I/E tables are populated by triggers.
9585    --
9586    init('KFF_CVR_LINE', p_upload_phase);
9587    IF (g_debug_on) THEN
9588       debug(l_func_name,
9589             'PHASE:'  || p_upload_phase ||
9590             ',UMODE:' || p_upload_mode ||
9591             ',CMODE:' || p_custom_mode ||
9592             ',APPS:'  || p_application_short_name ||
9593             ',KFF:'   || p_id_flex_code ||
9594             ',STR:'   || p_id_flex_structure_code ||
9595             ',CVR:'   || p_flex_validation_rule_name ||
9596             ',IE:'    || p_include_exclude_indicator ||
9597             ',LOW:'   || p_concatenated_segments_low ||
9598             ',HIGH:'  || p_concatenated_segments_high);
9599    END IF;
9600 
9601    --
9602    -- Gather WHO Information.
9603    --
9604    IF (get_kff_flx(p_application_short_name,
9605                    p_id_flex_code,
9606                    l_kff_flx)) THEN
9607       IF (get_kff_str(l_kff_flx,
9608                       p_id_flex_structure_code,
9609                       l_kff_str)) THEN
9610          IF (get_kff_cvr(l_kff_str,
9611                          p_flex_validation_rule_name,
9612                          l_kff_cvr)) THEN
9613             IF (get_kff_cvl(l_kff_cvr,
9614                             p_include_exclude_indicator,
9615                             p_concatenated_segments_low,
9616                             p_concatenated_segments_high,
9617                             l_kff_cvl)) THEN
9618                NULL;
9619             END IF;
9620          END IF;
9621       END IF;
9622    END IF;
9623 
9624    --
9625    -- Check WHO Information.
9626    --
9627    IF (NOT is_upload_allowed
9628        (p_custom_mode                  => p_custom_mode,
9629         p_file_owner                   => p_owner,
9630         p_file_last_update_date        => p_last_update_date,
9631         p_db_last_updated_by           => l_kff_cvl.last_updated_by,
9632         p_db_last_update_date          => l_kff_cvl.last_update_date,
9633         x_file_who                     => l_file_who)) THEN
9634       IF (g_debug_on) THEN
9635          debug(l_func_name, 'Upload is not allowed because of customization.');
9636       END IF;
9637       GOTO label_done;
9638    END IF;
9639 
9640    IF (p_upload_mode = 'NLS') THEN
9641       --
9642       -- non-MLS translation.
9643       --
9644       IF (g_debug_on) THEN
9645          debug(l_func_name, 'Translating KFF_CVR_LINE.(non-MLS)');
9646       END IF;
9647       UPDATE fnd_flex_validation_rule_lines SET
9648         last_updated_by   = l_file_who.last_updated_by,
9649         last_update_date  = l_file_who.last_update_date,
9650         last_update_login = l_file_who.last_update_login,
9651         description       = Nvl(p_description, description)
9652         WHERE ((application_id, id_flex_code, id_flex_num) =
9653                (SELECT application_id, id_flex_code, id_flex_num
9654                 FROM fnd_id_flex_structures
9655                 WHERE application_id = (SELECT application_id
9656                                         FROM fnd_application
9657                                         WHERE application_short_name = p_application_short_name)
9658                 AND id_flex_code = p_id_flex_code
9659                 AND id_flex_structure_code = p_id_flex_structure_code))
9660         AND flex_validation_rule_name = p_flex_validation_rule_name
9661         AND include_exclude_indicator = p_include_exclude_indicator
9662         AND concatenated_segments_low = p_concatenated_segments_low
9663         AND concatenated_segments_high = p_concatenated_segments_high
9664         AND userenv('LANG') = (SELECT language_code
9665                                FROM fnd_languages
9666                                WHERE installed_flag = 'B');
9667       IF (SQL%notfound) THEN
9668          IF (g_debug_on) THEN
9669             debug(l_func_name, 'No entity to translate.');
9670          END IF;
9671       END IF;
9672       GOTO label_done;
9673     ELSE
9674       --
9675       -- Usual upload.
9676       --
9677 
9678       --
9679       -- Make sure KFF, Structure and CVR exist.
9680       --
9681       get_kff_flx(p_application_short_name,
9682                   p_id_flex_code,
9683                   l_kff_flx);
9684 
9685       get_kff_str(l_kff_flx,
9686                   p_id_flex_structure_code,
9687                   l_kff_str);
9688 
9689       get_kff_cvr(l_kff_str,
9690                   p_flex_validation_rule_name,
9691                   l_kff_cvr);
9692 
9693       IF (g_debug_on) THEN
9694          debug(l_func_name, 'Updating KFF_CVR_LINE.(non-MLS)');
9695       END IF;
9696       UPDATE fnd_flex_validation_rule_lines SET
9697         last_updated_by   = l_file_who.last_updated_by,
9698         last_update_date  = l_file_who.last_update_date,
9699         last_update_login = l_file_who.last_update_login,
9700         enabled_flag      = p_enabled_flag,
9701         description       = p_description
9702         WHERE application_id = l_kff_flx.application_id
9703         AND id_flex_code = l_kff_flx.id_flex_code
9704         AND id_flex_num = l_kff_str.id_flex_num
9705         AND flex_validation_rule_name = l_kff_cvr.flex_validation_rule_name
9706         AND include_exclude_indicator = p_include_exclude_indicator
9707         AND concatenated_segments_low = p_concatenated_segments_low
9708         AND concatenated_segments_high = p_concatenated_segments_high;
9709 
9710       IF (SQL%notfound) THEN
9711          IF (g_debug_on) THEN
9712             debug(l_func_name, 'Inserting KFF_CVR_LINE.(non-MLS)');
9713          END IF;
9714          --
9715          -- rule_line_id is populated by fnd_flex_val_rule_lines_t1 trigger.
9716          --
9717          INSERT INTO fnd_flex_validation_rule_lines
9718            (
9719             application_id,
9720             id_flex_code,
9721             id_flex_num,
9722             flex_validation_rule_name,
9723             include_exclude_indicator,
9724             concatenated_segments_low,
9725             concatenated_segments_high,
9726 
9727             created_by,
9728             creation_date,
9729             last_updated_by,
9730             last_update_date,
9731             last_update_login,
9732 
9733             enabled_flag,
9734             description
9735             )
9736            VALUES
9737            (
9738             l_kff_flx.application_id,
9739             l_kff_flx.id_flex_code,
9740             l_kff_str.id_flex_num,
9741             l_kff_cvr.flex_validation_rule_name,
9742             p_include_exclude_indicator,
9743             p_concatenated_segments_low,
9744             p_concatenated_segments_high,
9745 
9746             l_file_who.created_by,
9747             l_file_who.creation_date,
9748             l_file_who.last_updated_by,
9749             l_file_who.last_update_date,
9750             l_file_who.last_update_login,
9751 
9752             p_enabled_flag,
9753             p_description
9754             );
9755       END IF;
9756    END IF;
9757 
9758    <<label_done>>
9759    done('KFF_CVR_LINE', p_upload_phase);
9760 EXCEPTION
9761    WHEN OTHERS THEN
9762       report_public_api_exception(l_func_name,
9763                                   p_upload_phase,
9764                                   p_application_short_name,
9765                                   p_id_flex_code,
9766                                   p_id_flex_structure_code,
9767                                   p_flex_validation_rule_name,
9768                                   p_include_exclude_indicator,
9769                                   p_concatenated_segments_low,
9770                                   p_concatenated_segments_high);
9771 
9772       BEGIN
9773          check_cvr_triggers();
9774       EXCEPTION
9775          WHEN OTHERS THEN
9776             report_public_api_exception(l_func_name,
9777                                         p_upload_phase,
9778                                         p_application_short_name,
9779                                         p_id_flex_code,
9780                                         p_id_flex_structure_code,
9781                                         p_flex_validation_rule_name,
9782                                         p_include_exclude_indicator,
9783                                         p_concatenated_segments_low,
9784                                         p_concatenated_segments_high);
9785       END;
9786 END up_kff_cvr_line;
9787 
9788 -- --------------------------------------------------
9789 PROCEDURE up_kff_segment
9790   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
9791    p_upload_mode                  IN VARCHAR2,
9792    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
9793    p_application_short_name       IN VARCHAR2,
9794    p_id_flex_code                 IN VARCHAR2,
9795    p_id_flex_structure_code       IN VARCHAR2,
9796    p_segment_name                 IN VARCHAR2,
9797    p_application_column_name      IN VARCHAR2,
9798    p_owner                        IN VARCHAR2,
9799    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
9800    p_segment_num                  IN VARCHAR2,
9801    p_application_column_index_fla IN VARCHAR2,
9802    p_enabled_flag                 IN VARCHAR2,
9803    p_required_flag                IN VARCHAR2,
9804    p_display_flag                 IN VARCHAR2,
9805    p_display_size                 IN VARCHAR2,
9806    p_security_enabled_flag        IN VARCHAR2,
9807    p_maximum_description_len      IN VARCHAR2,
9808    p_concatenation_description_le IN VARCHAR2,
9809    p_flex_value_set_name          IN VARCHAR2,
9810    p_range_code                   IN VARCHAR2,
9811    p_default_type                 IN VARCHAR2,
9812    p_default_value                IN VARCHAR2,
9813    p_runtime_property_function    IN VARCHAR2 DEFAULT NULL,
9814    p_additional_where_clause      IN VARCHAR2 DEFAULT NULL,
9815    p_form_left_prompt             IN VARCHAR2,
9816    p_form_above_prompt            IN VARCHAR2,
9817    p_description                  IN VARCHAR2)
9818   IS
9819      l_func_name  VARCHAR2(80);
9820      l_kff_flx    kff_flx_type;
9821      l_kff_str    kff_str_type;
9822      l_kff_seg    kff_seg_type;
9823      l_kff_seg_tl kff_seg_tl_type;
9824      l_vst_set    vst_set_type;
9825      l_col        col_type;
9826      l_file_who  who_type;
9827 BEGIN
9828    l_func_name := g_api_name || 'up_kff_segment()';
9829    init('KFF_SEGMENT', p_upload_phase);
9830    IF (g_debug_on) THEN
9831       debug(l_func_name,
9832             'PHASE:'  || p_upload_phase ||
9833             ',UMODE:' || p_upload_mode  ||
9834             ',CMODE:' || p_custom_mode  ||
9835             ',APPS:'  || p_application_short_name ||
9836             ',KFF:'   || p_id_flex_code ||
9837             ',STR:'   || p_id_flex_structure_code ||
9838             ',SEG:'   || p_segment_name ||
9839             ',COL:'   || p_application_column_name);
9840    END IF;
9841 
9842    IF (p_upload_phase = 'BEGIN') THEN
9843       --
9844       -- Gather WHO Information.
9845       --
9846       IF (get_kff_flx(p_application_short_name,
9847                       p_id_flex_code,
9848                       l_kff_flx)) THEN
9849          IF (get_kff_str(l_kff_flx,
9850                          p_id_flex_structure_code,
9851                          l_kff_str)) THEN
9852             IF (get_kff_seg(l_kff_str,
9853                             p_application_column_name,
9854                             l_kff_seg)) THEN
9855                NULL;
9856             END IF;
9857          END IF;
9858       END IF;
9859 
9860       IF (p_upload_mode = 'NLS') THEN
9861          --
9862          -- MLS translation.
9863          --
9864 
9865          --
9866          -- Gather WHO Information.
9867          --
9868          IF (get_kff_seg_tl(l_kff_seg,
9869                             userenv('LANG'),
9870                             l_kff_seg_tl)) THEN
9871             NULL;
9872          END IF;
9873 
9874          --
9875          -- Check WHO Information.
9876          --
9877          IF (NOT is_upload_allowed
9878              (p_custom_mode                  => p_custom_mode,
9879               p_file_owner                   => p_owner,
9880               p_file_last_update_date        => p_last_update_date,
9881               p_db_last_updated_by           => l_kff_seg_tl.last_updated_by,
9882               p_db_last_update_date          => l_kff_seg_tl.last_update_date,
9883               x_file_who                     => l_file_who)) THEN
9884             IF (g_debug_on) THEN
9885                debug(l_func_name, 'Upload is not allowed because of customization.');
9886             END IF;
9887             GOTO label_done;
9888          END IF;
9889 
9890          IF (g_debug_on) THEN
9891             debug(l_func_name, 'Translating KFF_SEGMENT.(MLS)');
9892          END IF;
9893          fnd_id_flex_segments_pkg.translate_row
9894            (x_application_short_name       => p_application_short_name,
9895             x_id_flex_code                 => p_id_flex_code,
9896             x_id_flex_structure_code       => p_id_flex_structure_code,
9897             x_application_column_name      => p_application_column_name,
9898             x_who                          => l_file_who,
9899             x_form_left_prompt             => p_form_left_prompt,
9900             x_form_above_prompt            => p_form_above_prompt,
9901             x_description                  => p_description);
9902          GOTO label_done;
9903        ELSE
9904          --
9905          -- Usual upload.
9906          --
9907 
9908          --
9909          -- Check WHO Information.
9910          --
9911          IF (NOT is_upload_allowed
9912              (p_custom_mode                  => p_custom_mode,
9913               p_file_owner                   => p_owner,
9914               p_file_last_update_date        => p_last_update_date,
9915               p_db_last_updated_by           => l_kff_seg.last_updated_by,
9916               p_db_last_update_date          => l_kff_seg.last_update_date,
9917               x_file_who                     => l_file_who)) THEN
9918             IF (g_debug_on) THEN
9919                debug(l_func_name, 'Upload is not allowed because of customization.');
9920             END IF;
9921             GOTO label_done;
9922          END IF;
9923 
9924          --
9925          -- Make sure KFF, Structure and Column exist.
9926          --
9927          get_kff_flx(p_application_short_name,
9928                      p_id_flex_code,
9929                      l_kff_flx);
9930 
9931          get_kff_str(l_kff_flx,
9932                      p_id_flex_structure_code,
9933                      l_kff_str);
9934 
9935          get_col(l_kff_flx.table_application_id,
9936                  l_kff_flx.application_table_name,
9937                  p_application_column_name,
9938                  l_col);
9939 
9940          IF (((l_col.flexfield_application_id IS NULL) OR
9941               (l_col.flexfield_application_id = l_kff_flx.application_id)) AND
9942              ((l_col.flexfield_name IS NULL) OR
9943               (l_col.flexfield_name = l_kff_flx.id_flex_code)) AND
9944              (l_col.flexfield_usage_code = 'K')) THEN
9945             NULL;
9946           ELSE
9947             raise_error(l_func_name, ERROR_KFF_COL_NOT_REG,
9948                         'COL:' || l_col.column_name ||
9949                         ' is not registered properly. It is registered as ' ||
9950                         'APP Id:' || To_char(l_col.flexfield_application_id) ||
9951                         ' Flex Name:' || l_col.flexfield_name ||
9952                         ' Usage Code:' || l_col.flexfield_usage_code,
9953                         'Please use Application Developer:' ||
9954                         'Flexfield->Key->Register form and ' ||
9955                         'make sure column is enabled. If this column is ' ||
9956                         'not in the list, it means it is used by another ' ||
9957                         'flexfield and you cannot use it');
9958          END IF;
9959 
9960          IF (p_flex_value_set_name IS NOT NULL) THEN
9961             get_vst_set(p_flex_value_set_name, l_vst_set);
9962          END IF;
9963 
9964          IF (g_debug_on) THEN
9965             debug(l_func_name, 'Uploading KFF_SEGMENT.(MLS)');
9966          END IF;
9967          fnd_id_flex_segments_pkg.load_row
9968            (x_application_short_name       => p_application_short_name,
9969             x_id_flex_code                 => p_id_flex_code,
9970             x_id_flex_structure_code       => p_id_flex_structure_code,
9971             x_application_column_name      => p_application_column_name,
9972             x_who                          => l_file_who,
9973             x_segment_name                 => p_segment_name,
9974             x_segment_num                  => p_segment_num,
9975             x_application_column_index_fla => p_application_column_index_fla,
9976             x_enabled_flag                 => p_enabled_flag,
9977             x_required_flag                => p_required_flag,
9978             x_display_flag                 => p_display_flag,
9979             x_display_size                 => p_display_size,
9980             x_security_enabled_flag        => p_security_enabled_flag,
9981             x_maximum_description_len      => p_maximum_description_len,
9982             x_concatenation_description_le => p_concatenation_description_le,
9983             x_flex_value_set_name          => p_flex_value_set_name,
9984             x_range_code                   => p_range_code,
9985             x_default_type                 => p_default_type,
9986             x_default_value                => p_default_value,
9987             x_runtime_property_function    => p_runtime_property_function,
9988             x_additional_where_clause      => p_additional_where_clause,
9989             x_form_left_prompt             => p_form_left_prompt,
9990             x_form_above_prompt            => p_form_above_prompt,
9991             x_description                  => p_description);
9992       END IF;
9993     ELSIF (p_upload_phase = 'END') THEN
9994       IF (p_upload_mode = 'NLS') THEN
9995          --
9996          -- MLS translation.
9997          --
9998          NULL;
9999        ELSE
10000          --
10001          -- Usual upload.
10002          --
10003          --
10004          -- Populate cross product tables.
10005          --
10006          populate_kff_flexq_assign();
10007          populate_kff_segq_assign();
10008       END IF;
10009     ELSE
10010       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
10011    END IF;
10012 
10013    <<label_done>>
10014    done('KFF_SEGMENT', p_upload_phase);
10015 EXCEPTION
10016    WHEN OTHERS THEN
10017       report_public_api_exception(l_func_name,
10018                                   p_upload_phase,
10019                                   p_application_short_name,
10020                                   p_id_flex_code,
10021                                   p_id_flex_structure_code,
10022                                   p_application_column_name,
10023                                   p_segment_name);
10024 END up_kff_segment;
10025 
10026 -- --------------------------------------------------
10027 PROCEDURE up_kff_flexq_assign
10028   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10029    p_upload_mode                  IN VARCHAR2,
10030    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10031    p_application_short_name       IN VARCHAR2,
10032    p_id_flex_code                 IN VARCHAR2,
10033    p_id_flex_structure_code       IN VARCHAR2,
10034    p_application_column_name      IN VARCHAR2,
10035    p_segment_attribute_type       IN VARCHAR2,
10036    p_owner                        IN VARCHAR2,
10037    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10038    p_attribute_value              IN VARCHAR2)
10039   IS
10040      l_func_name VARCHAR2(80);
10041      l_kff_flx   kff_flx_type;
10042      l_kff_flq   kff_flq_type;
10043      l_kff_str   kff_str_type;
10044      l_kff_seg   kff_seg_type;
10045      l_kff_fqa   kff_fqa_type;
10046      l_file_who  who_type;
10047 BEGIN
10048    l_func_name := g_api_name || 'up_kff_flexq_assign()';
10049    init('KFF_FLEXQ_ASSIGN', p_upload_phase);
10050    IF (g_debug_on) THEN
10051       debug(l_func_name,
10052             'PHASE:'  || p_upload_phase ||
10053             ',UMODE:' || p_upload_mode  ||
10054             ',CMODE:' || p_custom_mode  ||
10055             ',APPS:'  || p_application_short_name ||
10056             ',KFF:'   || p_id_flex_code ||
10057             ',STR:'   || p_id_flex_structure_code ||
10058             ',COL:'   || p_application_column_name ||
10059             ',FLEXQ:' || p_segment_attribute_type ||
10060             ',AVAL:'  || p_attribute_value);
10061    END IF;
10062 
10063    IF (p_upload_mode = 'NLS') THEN
10064       --
10065       -- No translation here.
10066       --
10067       IF (g_debug_on) THEN
10068          debug(l_func_name, 'No translation here.');
10069       END IF;
10070       GOTO label_done;
10071    END IF;
10072 
10073    --
10074    -- Make sure KFF, Flex Qual, Structure and Segment exist.
10075    --
10076    get_kff_flx(p_application_short_name,
10077                p_id_flex_code,
10078                l_kff_flx);
10079 
10080    get_kff_flq(l_kff_flx,
10081                p_segment_attribute_type,
10082                l_kff_flq);
10083 
10084    get_kff_str(l_kff_flx,
10085                p_id_flex_structure_code,
10086                l_kff_str);
10087 
10088    get_kff_seg(l_kff_str,
10089                p_application_column_name,
10090                l_kff_seg);
10091 
10092    IF (p_upload_phase = 'BEGIN') THEN
10093       --
10094       -- Gather WHO Information.
10095       --
10096       IF (get_kff_fqa(l_kff_flq,
10097                       l_kff_seg,
10098                       l_kff_fqa)) THEN
10099          NULL;
10100       END IF;
10101 
10102       --
10103       -- Check WHO Information.
10104       --
10105       IF (NOT is_upload_allowed
10106           (p_custom_mode                  => p_custom_mode,
10107            p_file_owner                   => p_owner,
10108            p_file_last_update_date        => p_last_update_date,
10109            p_db_last_updated_by           => l_kff_fqa.last_updated_by,
10110            p_db_last_update_date          => l_kff_fqa.last_update_date,
10111            x_file_who                     => l_file_who)) THEN
10112          IF (g_debug_on) THEN
10113             debug(l_func_name, 'Upload is not allowed because of customization.');
10114          END IF;
10115          GOTO label_done;
10116       END IF;
10117 
10118       --
10119       -- Usual upload.
10120       --
10121       IF (g_debug_on) THEN
10122          debug(l_func_name, 'Updating KFF_FLEXQ_ASSIGN.(no-TL)');
10123       END IF;
10124       UPDATE fnd_segment_attribute_values SET
10125         last_updated_by   = l_file_who.last_updated_by,
10126         last_update_date  = l_file_who.last_update_date,
10127         last_update_login = l_file_who.last_update_login,
10128         attribute_value   = p_attribute_value
10129         WHERE application_id = l_kff_flx.application_id
10130         AND id_flex_code = l_kff_flx.id_flex_code
10131         AND id_flex_num = l_kff_str.id_flex_num
10132         AND application_column_name = l_kff_seg.application_column_name
10133         AND segment_attribute_type = l_kff_flq.segment_attribute_type;
10134 
10135       IF (SQL%notfound) THEN
10136          IF (g_debug_on) THEN
10137             debug(l_func_name, 'Inserting KFF_FLEXQ_ASSIGN.(no-TL)');
10138          END IF;
10139          INSERT INTO fnd_segment_attribute_values
10140            (
10141             application_id,
10142             id_flex_code,
10143             id_flex_num,
10144             application_column_name,
10145             segment_attribute_type,
10146 
10147             created_by,
10148             creation_date,
10149             last_updated_by,
10150             last_update_date,
10151             last_update_login,
10152 
10153             attribute_value
10154             )
10155            VALUES
10156            (
10157             l_kff_flx.application_id,
10158             l_kff_flx.id_flex_code,
10159             l_kff_str.id_flex_num,
10160             l_kff_seg.application_column_name,
10161             l_kff_flq.segment_attribute_type,
10162 
10163             l_file_who.created_by,
10164             l_file_who.creation_date,
10165             l_file_who.last_updated_by,
10166             l_file_who.last_update_date,
10167             l_file_who.last_update_login,
10168 
10169             p_attribute_value
10170             );
10171       END IF;
10172     ELSIF (p_upload_phase = 'END') THEN
10173       --
10174       -- Usual upload.
10175       --
10176       NULL;
10177     ELSE
10178       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
10179    END IF;
10180 
10181    <<label_done>>
10182    done('KFF_FLEXQ_ASSIGN', p_upload_phase);
10183 EXCEPTION
10184    WHEN OTHERS THEN
10185       report_public_api_exception(l_func_name,
10186                                   p_upload_phase,
10187                                   p_application_short_name,
10188                                   p_id_flex_code,
10189                                   p_id_flex_structure_code,
10190                                   p_application_column_name,
10191                                   p_segment_attribute_type);
10192 END up_kff_flexq_assign;
10193 
10194 -- --------------------------------------------------
10195 PROCEDURE up_kff_segq_assign
10196   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10197    p_upload_mode                  IN VARCHAR2,
10198    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10199    p_application_short_name       IN VARCHAR2,
10200    p_id_flex_code                 IN VARCHAR2,
10201    p_id_flex_structure_code       IN VARCHAR2,
10202    p_application_column_name      IN VARCHAR2,
10203    p_segment_attribute_type       IN VARCHAR2,
10204    p_value_attribute_type         IN VARCHAR2,
10205    p_owner                        IN VARCHAR2 DEFAULT NULL,
10206    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10207    p_assignment_order             IN VARCHAR2,
10208    p_assignment_date              IN VARCHAR2)
10209   IS
10210      l_func_name VARCHAR2(80);
10211      l_kff_flx   kff_flx_type;
10212      l_kff_str   kff_str_type;
10213      l_kff_seg   kff_seg_type;
10214      l_kff_flq   kff_flq_type;
10215 BEGIN
10216    l_func_name := g_api_name || 'up_kff_segq_assign()';
10217    init('KFF_SEGQ_ASSIGN', p_upload_phase);
10218    IF (g_debug_on) THEN
10219       debug(l_func_name,
10220             'PHASE:'  || p_upload_phase ||
10221             ',UMODE:' || p_upload_mode ||
10222             ',APPS:'  || p_application_short_name ||
10223             ',KFF:'   || p_id_flex_code ||
10224             ',STR:'   || p_id_flex_structure_code ||
10225             ',COL:'   || p_application_column_name ||
10226             ',FLEXQ:' || p_segment_attribute_type ||
10227             ',SEGQ:'  || p_value_attribute_type);
10228    END IF;
10229 
10230    IF (p_upload_mode = 'NLS') THEN
10231       --
10232       -- No translation here.
10233       --
10234       IF (g_debug_on) THEN
10235          debug(l_func_name, 'No translation here.');
10236       END IF;
10237       GOTO label_done;
10238    END IF;
10239 
10240    --
10241    -- Usual upload.
10242    --
10243 
10244    --
10245    -- Make sure KFF, Flex Qual, Structure and Segment exist.
10246    --
10247    get_kff_flx(p_application_short_name,
10248                p_id_flex_code,
10249                l_kff_flx);
10250 
10251    get_kff_flq(l_kff_flx,
10252                p_segment_attribute_type,
10253                l_kff_flq);
10254 
10255    get_kff_str(l_kff_flx,
10256                p_id_flex_structure_code,
10257                l_kff_str);
10258 
10259    get_kff_seg(l_kff_str,
10260                p_application_column_name,
10261                l_kff_seg);
10262 
10263    IF (l_kff_seg.flex_value_set_id IS NOT NULL) THEN
10264       populate_kff_segq_assign();
10265    END IF;
10266 
10267    <<label_done>>
10268    done('KFF_SEGQ_ASSIGN', p_upload_phase);
10269 EXCEPTION
10270    WHEN OTHERS THEN
10271       report_public_api_exception(l_func_name,
10272                                   p_upload_phase,
10273                                   p_application_short_name,
10274                                   p_id_flex_code,
10275                                   p_id_flex_structure_code,
10276                                   p_application_column_name,
10277                                   p_segment_attribute_type,
10278                                   p_value_attribute_type);
10279 END up_kff_segq_assign;
10280 
10281 -- --------------------------------------------------
10282 PROCEDURE up_kff_qualifier
10283   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10284    p_upload_mode                  IN VARCHAR2,
10285    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10286    p_application_short_name       IN VARCHAR2,
10287    p_id_flex_code                 IN VARCHAR2,
10288    p_flex_value_set_name          IN VARCHAR2,
10289    p_segment_attribute_type       IN VARCHAR2,
10290    p_value_attribute_type         IN VARCHAR2,
10291    p_owner                        IN VARCHAR2,
10292    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10293    p_assignment_order             IN VARCHAR2,
10294    p_assignment_date              IN VARCHAR2)
10295   IS
10296      l_func_name VARCHAR2(80);
10297      l_vst_set   vst_set_type;
10298      l_kff_flx   kff_flx_type;
10299      l_kff_flq   kff_flq_type;
10300      l_kff_sgq   kff_sgq_type;
10301      l_file_who  who_type;
10302 BEGIN
10303    l_func_name := g_api_name || 'up_kff_qualifier()';
10304    init('KFF_QUALIFIER', p_upload_phase);
10305    IF (g_debug_on) THEN
10306       debug(l_func_name,
10307             'PHASE:'  || p_upload_phase ||
10308             'UMODE:'  || p_upload_mode ||
10309             ',CMODE:' || p_custom_mode ||
10310             ',APPS:'  || p_application_short_name ||
10311             ',KFF:'   || p_id_flex_code ||
10312             ',VSET:'  || p_flex_value_set_name ||
10313             ',FLEXQ:' || p_segment_attribute_type ||
10314             ',SEGQ:'  || p_value_attribute_type ||
10315             ',ORDER:' || p_assignment_order);
10316    END IF;
10317 
10318    IF (p_upload_mode = 'NLS') THEN
10319       --
10320       -- No translation here.
10321       --
10322       IF (g_debug_on) THEN
10323          debug(l_func_name, 'No translation here.');
10324       END IF;
10325       GOTO label_done;
10326    END IF;
10327 
10328    IF (p_upload_phase = 'BEGIN') THEN
10329       --
10330       -- Usual upload.
10331       --
10332 
10333       --
10334       -- Make sure Value Set exists.
10335       --
10336       get_vst_set(p_flex_value_set_name, l_vst_set);
10337 
10338       --
10339       -- Check WHO Information.
10340       --
10341       IF (NOT is_upload_allowed
10342           (p_custom_mode                  => p_custom_mode,
10343            p_file_owner                   => p_owner,
10344            p_file_last_update_date        => p_last_update_date,
10345            p_db_last_updated_by           => l_vst_set.last_updated_by,
10346            p_db_last_update_date          => l_vst_set.last_update_date,
10347            x_file_who                     => l_file_who)) THEN
10348          IF (g_debug_on) THEN
10349             debug(l_func_name, 'Upload is not allowed because of customization.');
10350             debug(l_func_name, 'For data integrity upload must be done.');
10351          END IF;
10352          --
10353          -- Clear the customization message
10354          --
10355          fnd_message.clear();
10356       END IF;
10357 
10358       --
10359       -- Make sure KFF, Flexfield Qualifier and Segment Qualifier exist.
10360       --
10361       get_kff_flx(p_application_short_name,
10362                   p_id_flex_code,
10363                   l_kff_flx);
10364       get_kff_flq(l_kff_flx,
10365                   p_segment_attribute_type,
10366                   l_kff_flq);
10367       get_kff_sgq(l_kff_flq,
10368                   p_value_attribute_type,
10369                   l_kff_sgq);
10370 
10371       --
10372       -- Populate cross product tables.
10373       --
10374       populate_kff_flexq_assign();
10375       populate_kff_segq_assign();
10376     ELSIF (p_upload_phase = 'END') THEN
10377       --
10378       -- Usual upload.
10379       --
10380       NULL;
10381     ELSE
10382       raise_error(l_func_name, ERROR_UNKNOWN_UP_PHASE, 'Unknown UPLOAD_PHASE');
10383    END IF;
10384 
10385    <<label_done>>
10386    done('KFF_QUALIFIER', p_upload_phase);
10387 EXCEPTION
10388    WHEN OTHERS THEN
10389       report_public_api_exception(l_func_name,
10390                                   p_upload_phase,
10391                                   p_application_short_name,
10392                                   p_id_flex_code,
10393                                   p_flex_value_set_name,
10394                                   p_segment_attribute_type,
10395                                   p_value_attribute_type);
10396 END up_kff_qualifier;
10397 
10398 -- --------------------------------------------------
10399 PROCEDURE up_kff_qualifier_value
10400   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10401    p_upload_mode                  IN VARCHAR2,
10402    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10403    p_application_short_name       IN VARCHAR2,
10404    p_id_flex_code                 IN VARCHAR2,
10405    p_flex_value_set_name          IN VARCHAR2,
10406    p_segment_attribute_type       IN VARCHAR2,
10407    p_value_attribute_type         IN VARCHAR2,
10408    p_parent_flex_value_low        IN VARCHAR2,
10409    p_flex_value                   IN VARCHAR2,
10410    p_owner                        IN VARCHAR2,
10411    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10412    p_compiled_value_attribute_val IN VARCHAR2)
10413   IS
10414      l_func_name VARCHAR2(80);
10415 BEGIN
10416    l_func_name := g_api_name || 'up_kff_qualifier_value()';
10417    init('KFF_QUALIFIER_VALUE', p_upload_phase);
10418    IF (g_debug_on) THEN
10419       debug(l_func_name,
10420             'PHASE:'  || p_upload_phase ||
10421             ',UMODE:' || p_upload_mode ||
10422             ',CMODE:' || p_custom_mode ||
10423             ',APPS:'  || p_application_short_name ||
10424             ',KFF:'   || p_id_flex_code ||
10425             ',VSET:'  || p_flex_value_set_name ||
10426             ',FLEXQ:' || p_segment_attribute_type ||
10427             ',SEGQ:'  || p_value_attribute_type ||
10428             ',PRNT:'  || p_parent_flex_value_low ||
10429             ',VAL:'   || p_flex_value ||
10430             ',CVAL:'  || p_compiled_value_attribute_val);
10431    END IF;
10432 
10433    upload_value_qualifier_value
10434      (p_caller_entity                => 'KFF_QUALIFIER_VALUE',
10435       p_upload_phase                 => p_upload_phase,
10436       p_upload_mode                  => p_upload_mode,
10437       p_custom_mode                  => p_custom_mode,
10438       p_flex_value_set_name          => p_flex_value_set_name,
10439       p_application_short_name       => p_application_short_name,
10440       p_id_flex_code                 => p_id_flex_code,
10441       p_segment_attribute_type       => p_segment_attribute_type,
10442       p_value_attribute_type         => p_value_attribute_type,
10443       p_parent_flex_value_low        => p_parent_flex_value_low,
10444       p_flex_value                   => p_flex_value,
10445       p_owner                        => p_owner,
10446       p_last_update_date             => p_last_update_date,
10447       p_compiled_value_attribute_val => p_compiled_value_attribute_val);
10448 
10449    <<label_done>>
10450    done('KFF_QUALIFIER_VALUE', p_upload_phase);
10451 EXCEPTION
10452    WHEN OTHERS THEN
10453       report_public_api_exception(l_func_name,
10454                                   p_upload_phase,
10455                                   p_application_short_name,
10456                                   p_id_flex_code,
10457                                   p_flex_value_set_name,
10458                                   p_segment_attribute_type,
10459                                   p_value_attribute_type,
10460                                   p_parent_flex_value_low,
10461                                   p_flex_value);
10462 END up_kff_qualifier_value;
10463 
10464 -- --------------------------------------------------
10465 FUNCTION get_qualifier_value
10466   (p_compiled_value_attributes    IN VARCHAR2,
10467    p_assignment_order             IN VARCHAR2)
10468   RETURN VARCHAR2
10469   IS
10470      l_newline        VARCHAR2(10);
10471      l_newline_length NUMBER;
10472      l_pos1           NUMBER;
10473      l_pos2           NUMBER;
10474      l_cva            VARCHAR2(32000);
10475 BEGIN
10476    l_newline := fnd_global.newline; -- for pragma rnps.
10477    l_newline_length := Length(l_newline);
10478 
10479    l_cva := l_newline || p_compiled_value_attributes || l_newline;
10480    l_pos1 := Instr(l_cva, l_newline, 1, p_assignment_order);
10481    l_pos2 := Instr(l_cva, l_newline, 1, p_assignment_order + 1);
10482    RETURN(Substr(l_cva, l_pos1 + l_newline_length,
10483                  l_pos2 - l_pos1 - l_newline_length));
10484 EXCEPTION
10485    WHEN OTHERS THEN
10486       RETURN NULL;
10487 END get_qualifier_value;
10488 
10489 /****** Should be removed later - begin ******/
10490 -- ==================================================
10491 --  VALUE_SECURITY_RULE
10492 -- ==================================================
10493 PROCEDURE up_value_security_rule
10494   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10495    p_upload_mode                  IN VARCHAR2,
10496    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10497    p_flex_value_set_name          IN VARCHAR2,
10498    p_flex_value_rule_name         IN VARCHAR2,
10499    p_parent_flex_value_low        IN VARCHAR2,
10500    p_owner                        IN VARCHAR2,
10501    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10502    p_parent_flex_value_high       IN VARCHAR2,
10503    p_error_message                IN VARCHAR2,
10504    p_description                  IN VARCHAR2)
10505   IS
10506      l_func_name VARCHAR2(80);
10507 BEGIN
10508    l_func_name := g_api_name || 'up_value_security_rule()';
10509    init('VALUE_SECURITY_RULE', p_upload_phase);
10510    up_vset_security_rule
10511      (p_upload_phase                    => p_upload_phase,
10512       p_upload_mode                     => p_upload_mode,
10513       p_custom_mode                     => p_custom_mode,
10514       p_flex_value_set_name             => p_flex_value_set_name,
10515       p_flex_value_rule_name            => p_flex_value_rule_name,
10516       p_parent_flex_value_low           => p_parent_flex_value_low,
10517       p_owner                           => p_owner,
10518       p_last_update_date                => p_last_update_date,
10519       p_parent_flex_value_high          => p_parent_flex_value_high,
10520       p_error_message                   => p_error_message,
10521       p_description                     => p_description);
10522    <<label_done>>
10523    done('VALUE_SECURITY_RULE', p_upload_phase);
10524 EXCEPTION
10525    WHEN OTHERS THEN
10526       IF (g_debug_on) THEN
10527          debug_exception_top_level(l_func_name);
10528       END IF;
10529       RAISE;
10530 END up_value_security_rule;
10531 
10532 -- --------------------------------------------------
10533 PROCEDURE up_vsec_line
10534   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10535    p_upload_mode                  IN VARCHAR2,
10536    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10537    p_flex_value_set_name          IN VARCHAR2,
10538    p_flex_value_rule_name         IN VARCHAR2,
10539    p_parent_flex_value_low        IN VARCHAR2,
10540    p_include_exclude_indicator    IN VARCHAR2,
10541    p_flex_value_low               IN VARCHAR2,
10542    p_flex_value_high              IN VARCHAR2,
10543    p_owner                        IN VARCHAR2,
10544    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10545    p_parent_flex_value_high       IN VARCHAR2)
10546   IS
10547      l_func_name VARCHAR2(80);
10548 BEGIN
10549    l_func_name := g_api_name || 'up_vsec_line()';
10550    init('VSEC_LINE', p_upload_phase);
10551    up_vset_security_line
10552      (p_upload_phase                    => p_upload_phase,
10553       p_upload_mode                     => p_upload_mode,
10554       p_custom_mode                     => p_custom_mode,
10555       p_flex_value_set_name             => p_flex_value_set_name,
10556       p_flex_value_rule_name            => p_flex_value_rule_name,
10557       p_parent_flex_value_low           => p_parent_flex_value_low,
10558       p_include_exclude_indicator       => p_include_exclude_indicator,
10559       p_flex_value_low                  => p_flex_value_low,
10560       p_flex_value_high                 => p_flex_value_high,
10561       p_owner                           => p_owner,
10562       p_last_update_date                => p_last_update_date,
10563       p_parent_flex_value_high          => p_parent_flex_value_high);
10564    <<label_done>>
10565    done('VSEC_LINE', p_upload_phase);
10566 EXCEPTION
10567    WHEN OTHERS THEN
10568       IF (g_debug_on) THEN
10569          debug_exception_top_level(l_func_name);
10570       END IF;
10571       RAISE;
10572 END up_vsec_line;
10573 
10574 -- --------------------------------------------------
10575 PROCEDURE up_vsec_usage
10576   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10577    p_upload_mode                  IN VARCHAR2,
10578    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10579    p_flex_value_set_name          IN VARCHAR2,
10580    p_flex_value_rule_name         IN VARCHAR2,
10581    p_parent_flex_value_low        IN VARCHAR2,
10582    p_application_short_name       IN VARCHAR2,
10583    p_responsibility_key           IN VARCHAR2,
10584    p_owner                        IN VARCHAR2,
10585    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10586    p_parent_flex_value_high       IN VARCHAR2)
10587   IS
10588      l_func_name VARCHAR2(80);
10589 BEGIN
10590    l_func_name := g_api_name || 'up_vsec_usage()';
10591    init('VSEC_USAGE', p_upload_phase);
10592    up_vset_security_usage
10593      (p_upload_phase                    => p_upload_phase,
10594       p_upload_mode                     => p_upload_mode,
10595       p_custom_mode                     => p_custom_mode,
10596       p_flex_value_set_name             => p_flex_value_set_name,
10597       p_flex_value_rule_name            => p_flex_value_rule_name,
10598       p_parent_flex_value_low           => p_parent_flex_value_low,
10599       p_application_short_name          => p_application_short_name,
10600       p_responsibility_key              => p_responsibility_key,
10601       p_owner                           => p_owner,
10602       p_last_update_date                => p_last_update_date,
10603       p_parent_flex_value_high          => p_parent_flex_value_high);
10604    <<label_done>>
10605    done('VSEC_USAGE', p_upload_phase);
10606 EXCEPTION
10607    WHEN OTHERS THEN
10608       IF (g_debug_on) THEN
10609          debug_exception_top_level(l_func_name);
10610       END IF;
10611       RAISE;
10612 END up_vsec_usage;
10613 
10614 -- ==================================================
10615 -- VALUE_ROLLUP_GROUP
10616 -- ==================================================
10617 PROCEDURE up_value_rollup_group
10618   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10619    p_upload_mode                  IN VARCHAR2,
10620    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10621    p_flex_value_set_name          IN VARCHAR2,
10622    p_hierarchy_code               IN VARCHAR2,
10623    p_owner                        IN VARCHAR2,
10624    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10625    p_hierarchy_name               IN VARCHAR2,
10626    p_description                  IN VARCHAR2)
10627   IS
10628      l_func_name VARCHAR2(80);
10629 BEGIN
10630    l_func_name := g_api_name || 'up_value_rollup_group()';
10631    init('VALUE_ROLLUP_GROUP', p_upload_phase);
10632    up_vset_rollup_group
10633      (p_upload_phase                    => p_upload_phase,
10634       p_upload_mode                     => p_upload_mode,
10635       p_custom_mode                     => p_custom_mode,
10636       p_flex_value_set_name             => p_flex_value_set_name,
10637       p_hierarchy_code                  => p_hierarchy_code,
10638       p_owner                           => p_owner,
10639       p_last_update_date                => p_last_update_date,
10640       p_hierarchy_name                  => p_hierarchy_name,
10641       p_description                     => p_description);
10642    <<label_done>>
10643    done('VALUE_ROLLUP_GROUP', p_upload_phase);
10644 EXCEPTION
10645    WHEN OTHERS THEN
10646       IF (g_debug_on) THEN
10647          debug_exception_top_level(l_func_name);
10648       END IF;
10649       RAISE;
10650 END up_value_rollup_group;
10651 
10652 -- ==================================================
10653 -- VALUE_SET_VALUE
10654 -- ==================================================
10655 PROCEDURE up_value_set_value
10656   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10657    p_upload_mode                  IN VARCHAR2,
10658    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10659    p_flex_value_set_name          IN VARCHAR2,
10660    p_parent_flex_value_low        IN VARCHAR2,
10661    p_flex_value                   IN VARCHAR2,
10662    p_owner                        IN VARCHAR2,
10663    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10664    p_enabled_flag                 IN VARCHAR2,
10665    p_summary_flag                 IN VARCHAR2,
10666    p_start_date_active            IN VARCHAR2,
10667    p_end_date_active              IN VARCHAR2,
10668    p_parent_flex_value_high       IN VARCHAR2,
10669    p_rollup_flex_value_set_name   IN VARCHAR2,
10670    p_rollup_hierarchy_code        IN VARCHAR2,
10671    p_hierarchy_level              IN VARCHAR2,
10672    p_compiled_value_attributes    IN VARCHAR2,
10673    p_value_category               IN VARCHAR2,
10674    p_attribute1                   IN VARCHAR2,
10675    p_attribute2                   IN VARCHAR2,
10676    p_attribute3                   IN VARCHAR2,
10677    p_attribute4                   IN VARCHAR2,
10678    p_attribute5                   IN VARCHAR2,
10679    p_attribute6                   IN VARCHAR2,
10680    p_attribute7                   IN VARCHAR2,
10681    p_attribute8                   IN VARCHAR2,
10682    p_attribute9                   IN VARCHAR2,
10683    p_attribute10                  IN VARCHAR2,
10684    p_attribute11                  IN VARCHAR2,
10685    p_attribute12                  IN VARCHAR2,
10686    p_attribute13                  IN VARCHAR2,
10687    p_attribute14                  IN VARCHAR2,
10688    p_attribute15                  IN VARCHAR2,
10689    p_attribute16                  IN VARCHAR2,
10690    p_attribute17                  IN VARCHAR2,
10691    p_attribute18                  IN VARCHAR2,
10692    p_attribute19                  IN VARCHAR2,
10693    p_attribute20                  IN VARCHAR2,
10694    p_attribute21                  IN VARCHAR2,
10695    p_attribute22                  IN VARCHAR2,
10696    p_attribute23                  IN VARCHAR2,
10697    p_attribute24                  IN VARCHAR2,
10698    p_attribute25                  IN VARCHAR2,
10699    p_attribute26                  IN VARCHAR2,
10700    p_attribute27                  IN VARCHAR2,
10701    p_attribute28                  IN VARCHAR2,
10702    p_attribute29                  IN VARCHAR2,
10703    p_attribute30                  IN VARCHAR2,
10704    p_attribute31                  IN VARCHAR2,
10705    p_attribute32                  IN VARCHAR2,
10706    p_attribute33                  IN VARCHAR2,
10707    p_attribute34                  IN VARCHAR2,
10708    p_attribute35                  IN VARCHAR2,
10709    p_attribute36                  IN VARCHAR2,
10710    p_attribute37                  IN VARCHAR2,
10711    p_attribute38                  IN VARCHAR2,
10712    p_attribute39                  IN VARCHAR2,
10713    p_attribute40                  IN VARCHAR2,
10714    p_attribute41                  IN VARCHAR2,
10715    p_attribute42                  IN VARCHAR2,
10716    p_attribute43                  IN VARCHAR2,
10717    p_attribute44                  IN VARCHAR2,
10718    p_attribute45                  IN VARCHAR2,
10719    p_attribute46                  IN VARCHAR2,
10720    p_attribute47                  IN VARCHAR2,
10721    p_attribute48                  IN VARCHAR2,
10722    p_attribute49                  IN VARCHAR2,
10723    p_attribute50                  IN VARCHAR2,
10724    p_flex_value_meaning           IN VARCHAR2,
10725    p_description                  IN VARCHAR2)
10726   IS
10727      l_func_name VARCHAR2(80);
10728 BEGIN
10729    l_func_name := g_api_name || 'up_value_set_value()';
10730    init('VALUE_SET_VALUE', p_upload_phase);
10731    up_vset_value
10732      (p_upload_phase                    => p_upload_phase,
10733       p_upload_mode                     => p_upload_mode,
10734       p_custom_mode                     => p_custom_mode,
10735       p_flex_value_set_name             => p_flex_value_set_name,
10736       p_parent_flex_value_low           => p_parent_flex_value_low,
10737       p_flex_value                      => p_flex_value,
10738       p_owner                           => p_owner,
10739       p_last_update_date                => p_last_update_date,
10740       p_enabled_flag                    => p_enabled_flag,
10741       p_summary_flag                    => p_summary_flag,
10742       p_start_date_active               => p_start_date_active,
10743       p_end_date_active                 => p_end_date_active,
10744       p_parent_flex_value_high          => p_parent_flex_value_high,
10745       p_rollup_hierarchy_code           => p_rollup_hierarchy_code,
10746       p_hierarchy_level                 => p_hierarchy_level,
10747       p_compiled_value_attributes       => p_compiled_value_attributes,
10748       p_value_category                  => p_value_category,
10749       p_attribute1                      => p_attribute1,
10750       p_attribute2                      => p_attribute2,
10751       p_attribute3                      => p_attribute3,
10752       p_attribute4                      => p_attribute4,
10753       p_attribute5                      => p_attribute5,
10754       p_attribute6                      => p_attribute6,
10755       p_attribute7                      => p_attribute7,
10756       p_attribute8                      => p_attribute8,
10757       p_attribute9                      => p_attribute9,
10758       p_attribute10                     => p_attribute10,
10759       p_attribute11                     => p_attribute11,
10760       p_attribute12                     => p_attribute12,
10761       p_attribute13                     => p_attribute13,
10762       p_attribute14                     => p_attribute14,
10763       p_attribute15                     => p_attribute15,
10764       p_attribute16                     => p_attribute16,
10765       p_attribute17                     => p_attribute17,
10766       p_attribute18                     => p_attribute18,
10767       p_attribute19                     => p_attribute19,
10768       p_attribute20                     => p_attribute20,
10769       p_attribute21                     => p_attribute21,
10770       p_attribute22                     => p_attribute22,
10771       p_attribute23                     => p_attribute23,
10772       p_attribute24                     => p_attribute24,
10773       p_attribute25                     => p_attribute25,
10774       p_attribute26                     => p_attribute26,
10775       p_attribute27                     => p_attribute27,
10776       p_attribute28                     => p_attribute28,
10777       p_attribute29                     => p_attribute29,
10778       p_attribute30                     => p_attribute30,
10779       p_attribute31                     => p_attribute31,
10780       p_attribute32                     => p_attribute32,
10781       p_attribute33                     => p_attribute33,
10782       p_attribute34                     => p_attribute34,
10783       p_attribute35                     => p_attribute35,
10784       p_attribute36                     => p_attribute36,
10785       p_attribute37                     => p_attribute37,
10786       p_attribute38                     => p_attribute38,
10787       p_attribute39                     => p_attribute39,
10788       p_attribute40                     => p_attribute40,
10789       p_attribute41                     => p_attribute41,
10790       p_attribute42                     => p_attribute42,
10791       p_attribute43                     => p_attribute43,
10792       p_attribute44                     => p_attribute44,
10793       p_attribute45                     => p_attribute45,
10794       p_attribute46                     => p_attribute46,
10795       p_attribute47                     => p_attribute47,
10796       p_attribute48                     => p_attribute48,
10797       p_attribute49                     => p_attribute49,
10798       p_attribute50                     => p_attribute50,
10799       p_attribute_sort_order            => NULL,
10800       p_flex_value_meaning              => p_flex_value_meaning,
10801       p_description                     => p_description);
10802    <<label_done>>
10803    done('VALUE_SET_VALUE', p_upload_phase);
10804 EXCEPTION
10805    WHEN OTHERS THEN
10806       IF (g_debug_on) THEN
10807          debug_exception_top_level(l_func_name);
10808       END IF;
10809       RAISE;
10810 END up_value_set_value;
10811 
10812 -- --------------------------------------------------
10813 PROCEDURE up_val_norm_hierarchy
10814   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10815    p_upload_mode                  IN VARCHAR2,
10816    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10817    p_flex_value_set_name          IN VARCHAR2,
10818    p_parent_flex_value            IN VARCHAR2,
10819    p_range_attribute              IN VARCHAR2,
10820    p_child_flex_value_low         IN VARCHAR2,
10821    p_child_flex_value_high        IN VARCHAR2,
10822    p_owner                        IN VARCHAR2,
10823    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10824    p_start_date_active            IN VARCHAR2,
10825    p_end_date_active              IN VARCHAR2)
10826   IS
10827      l_func_name VARCHAR2(80);
10828 BEGIN
10829    l_func_name := g_api_name || 'up_val_norm_hierarchy()';
10830    init('VAL_NORM_HIERARCHY', p_upload_phase);
10831    up_vset_value_hierarchy
10832      (p_upload_phase                    => p_upload_phase,
10833       p_upload_mode                     => p_upload_mode,
10834       p_custom_mode                     => p_custom_mode,
10835       p_flex_value_set_name             => p_flex_value_set_name,
10836       p_parent_flex_value               => p_parent_flex_value,
10837       p_range_attribute                 => p_range_attribute,
10838       p_child_flex_value_low            => p_child_flex_value_low,
10839       p_child_flex_value_high           => p_child_flex_value_high,
10840       p_owner                           => p_owner,
10841       p_last_update_date                => p_last_update_date,
10842       p_start_date_active               => p_start_date_active,
10843       p_end_date_active                 => p_end_date_active);
10844    <<label_done>>
10845    done('VAL_NORM_HIERARCHY', p_upload_phase);
10846 EXCEPTION
10847    WHEN OTHERS THEN
10848       IF (g_debug_on) THEN
10849          debug_exception_top_level(l_func_name);
10850       END IF;
10851       RAISE;
10852 END up_val_norm_hierarchy;
10853 
10854 -- --------------------------------------------------
10855 PROCEDURE up_val_qual_value
10856   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10857    p_upload_mode                  IN VARCHAR2,
10858    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10859    p_flex_value_set_name          IN VARCHAR2,
10860    p_parent_flex_value_low        IN VARCHAR2,
10861    p_flex_value                   IN VARCHAR2,
10862    p_id_flex_application_short_na IN VARCHAR2,
10863    p_id_flex_code                 IN VARCHAR2,
10864    p_segment_attribute_type       IN VARCHAR2,
10865    p_value_attribute_type         IN VARCHAR2,
10866    p_owner                        IN VARCHAR2,
10867    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10868    p_assignment_order             IN VARCHAR2,
10869    p_assignment_date              IN VARCHAR2,
10870    p_compiled_value_attribute_val IN VARCHAR2)
10871   IS
10872      l_func_name VARCHAR2(80);
10873 BEGIN
10874    l_func_name := g_api_name || 'up_val_qual_value()';
10875    init('VAL_QUAL_VALUE', p_upload_phase);
10876    up_vset_value_qual_value
10877      (p_upload_phase                    => p_upload_phase,
10878       p_upload_mode                     => p_upload_mode,
10879       p_custom_mode                     => p_custom_mode,
10880       p_flex_value_set_name             => p_flex_value_set_name,
10881       p_parent_flex_value_low           => p_parent_flex_value_low,
10882       p_flex_value                      => p_flex_value,
10883       p_id_flex_application_short_na    => p_id_flex_application_short_na,
10884       p_id_flex_code                    => p_id_flex_code,
10885       p_segment_attribute_type          => p_segment_attribute_type,
10886       p_value_attribute_type            => p_value_attribute_type,
10887       p_owner                           => p_owner,
10888       p_last_update_date                => p_last_update_date,
10889       p_compiled_value_attribute_val    => p_compiled_value_attribute_val);
10890    <<label_done>>
10891    done('VAL_QUAL_VALUE', p_upload_phase);
10892 EXCEPTION
10893    WHEN OTHERS THEN
10894       IF (g_debug_on) THEN
10895          debug_exception_top_level(l_func_name);
10896       END IF;
10897       RAISE;
10898 END up_val_qual_value;
10899 
10900 PROCEDURE up_desc_flex_nls
10901   (p_upload_phase                 IN VARCHAR2 DEFAULT NULL,
10902    p_upload_mode                  IN VARCHAR2,
10903    p_custom_mode                  IN VARCHAR2 DEFAULT NULL,
10904    p_application_short_name       IN VARCHAR2,
10905    p_descriptive_flexfield_name   IN VARCHAR2,
10906    p_owner                        IN VARCHAR2,
10907    p_last_update_date             IN VARCHAR2 DEFAULT NULL,
10908    p_table_application_short_name IN VARCHAR2,
10909    p_application_table_name       IN VARCHAR2,
10910    p_concatenated_segs_view_name  IN VARCHAR2 DEFAULT NULL,
10911    p_context_column_name          IN VARCHAR2,
10912    p_context_required_flag        IN VARCHAR2,
10913    p_context_user_override_flag   IN VARCHAR2,
10914    p_concatenated_segment_delimit IN VARCHAR2,
10915    p_freeze_flex_definition_flag  IN VARCHAR2,
10916    p_protected_flag               IN VARCHAR2,
10917    p_default_context_field_name   IN VARCHAR2,
10918    p_default_context_value        IN VARCHAR2,
10919    p_context_default_type         IN VARCHAR2 DEFAULT NULL,
10920    p_context_default_value        IN VARCHAR2 DEFAULT NULL,
10921    p_context_override_value_set_n IN VARCHAR2 DEFAULT NULL,
10922    p_context_runtime_property_fun IN VARCHAR2 DEFAULT NULL,
10923    p_context_synchronization_flag IN VARCHAR2 DEFAULT NULL,
10924    p_title                        IN VARCHAR2,
10925    p_form_context_prompt          IN VARCHAR2,
10926    p_description                  IN VARCHAR2)
10927   IS
10928      l_func_name  VARCHAR2(80);
10929      l_tbl        tbl_type;
10930      l_dff_flx    dff_flx_type;
10931      l_dff_flx_tl dff_flx_tl_type;
10932      l_dff_ctx    dff_ctx_type;
10933      l_vst_set    vst_set_type;
10934      l_app        app_type;
10935      l_file_who   who_type;
10936      l_descriptive_flexfield_name  fnd_descriptive_flexs_vl.descriptive_flexfield_name%TYPE;
10937      l_title                       fnd_descriptive_flexs_vl.title%TYPE;
10938      l_concatenated_segs_view_name fnd_descriptive_flexs_vl.concatenated_segs_view_name%TYPE;
10939      l_context_synchronization_flag fnd_descriptive_flexs.context_synchronization_flag%TYPE;
10940 BEGIN
10941    l_func_name := g_api_name || 'up_desc_flex_nls()';
10942    l_descriptive_flexfield_name := p_descriptive_flexfield_name;
10943    l_title := p_title;
10944 
10945    IF (g_debug_on) THEN
10946       debug(l_func_name,
10947             'PHASE:'  || p_upload_phase ||
10948             ',UMODE:' || p_upload_mode  ||
10949             ',CMODE:' || p_custom_mode  ||
10950             ',APPS:'  || p_application_short_name ||
10951             ',DFF:'   ||l_descriptive_flexfield_name);
10952    END IF;
10953 
10954    IF (g_savepoint_entity_name IS NULL) THEN
10955        start_transaction(ENTITY_DESC_FLEX);
10956    END IF;
10957 
10958    IF (g_lock_handle IS NULL) THEN
10959        lock_entity('DESC_FLEX',
10960                     p_application_short_name,
10961                     p_descriptive_flexfield_name);
10962    END IF;
10963 
10964    g_numof_changes := 0;
10965 
10966       --
10967       -- Gather WHO Information.
10968       --
10969     IF (get_dff_flx_tl(l_dff_flx,
10970                        userenv('LANG'),
10971                      l_dff_flx_tl)) THEN
10972         NULL;
10973     END IF;
10974 
10975      --
10976      -- Check WHO Information.
10977      --
10978      IF (is_upload_allowed
10979         (p_custom_mode                  => p_custom_mode,
10980          p_file_owner                   => p_owner,
10981          p_file_last_update_date        => p_last_update_date,
10982          p_db_last_updated_by           => l_dff_flx_tl.last_updated_by,
10983          p_db_last_update_date          => l_dff_flx_tl.last_update_date,
10984          x_file_who                     => l_file_who)) THEN
10985 
10986          IF (g_debug_on) THEN
10987             debug(l_func_name, 'Translating DESC_FLEX.(MLS)');
10988          END IF;
10989 
10990          fnd_descriptive_flexs_pkg.translate_row
10991            (x_application_short_name       => p_application_short_name,
10992             x_descriptive_flexfield_name   => l_descriptive_flexfield_name,
10993             x_who                          => l_file_who,
10994             x_title                        => l_title,
10995             x_form_context_prompt          => p_form_context_prompt,
10996             x_description                  => p_description);
10997       ELSE
10998        IF (g_debug_on) THEN
10999           debug(l_func_name, 'Upload is not allowed because of customization.');
11000        END IF;
11001       END IF;
11002 END;
11003 
11004 
11005 
11006 /****** Should be removed later - end ******/
11007 
11008 BEGIN
11009    g_debug_on := FALSE;
11010    g_left_margin := '';
11011    g_numof_changes := 0;
11012    g_numof_changes_kff_str := 0;
11013    g_lock_handle := NULL;
11014    g_root_error := NULL;
11015    g_call_stack := NULL;
11016    g_savepoint_entity_name := NULL;
11017    g_is_commit_ok := NULL;
11018 
11019    --
11020    -- Declaring a constant and then assigning a global variable to it solves
11021    -- 2 problems.
11022    --
11023    -- 1. Because of purity problems, fnd_load_util.null_value() cannot be
11024    --    called here.
11025    --    It has to be called when a constant variable is declared.
11026    -- 2. PL/SQL has a bug and if a constant is initialized with a function call,
11027    --    PL/SQL calls that function every time this constant is used.
11028    --
11029    -- So, declaring a constant variable and initializing it
11030    -- with fnd_load_util.null_value() solves the purity problem.
11031    -- Then copying this value to another global variable solves
11032    -- the PL/SQL problem.
11033    --
11034    g_null_value  := g_null_value_constant;
11035 
11036    g_newline     := fnd_global.newline();
11037    --
11038    -- Old ldt files do not have LAST_UPDATE_DATE data in them. So
11039    -- use 2001/12/15 as their last update date. This is the date when
11040    -- this change was added. It is as good as any other date.
11041    -- Do not change this date, otherwise it will cause unnecessary
11042    -- re-uploads.
11043    --
11044    g_default_lud := To_date('2001/12/15 00:00:00', g_date_mask);
11045 END fnd_flex_loader_apis;