[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;