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