[Home] [Help]
PACKAGE BODY: APPS.HR_UTIL_FLEX_WEB
Source
1 package body hr_util_flex_web as
2 /* $Header: hrutlflw.pkb 115.0 99/07/17 18:18:07 porting ship $ */
3 --
4 -- ---------------------------------------------------------------------------
5 -- ------------------- <get_keyflex_mapped_column_name> ----------------------
6 -- ---------------------------------------------------------------------------
7 -- Usage: This procedure allows a user to enter two most important keyflex
8 -- segments for use in display for each keyflex code as profile options.
9 --
10 -- Input: p_business_group_id - logged in user's business group id.
11 -- p_keyflex_code - FND flex code for the 5 key flexfields in HRMS
12 -- - Flex Code App Short Name
13 -- - -------------------------- --------------
14 -- - 'GRD'=Grade Key Flex PER
15 -- - 'GRP'=People Group Key Flex PAY
16 -- - 'JOB'=Job Key Flexfield PER
17 -- - 'POS'=POS Key Flex PER
18 -- - 'COST'=Costing Key Flex PAY
19 Procedure get_keyflex_mapped_column_name
20 (p_business_group_id in number
21 ,p_keyflex_code in varchar2
22 ,p_mapped_col_name1 out varchar2
23 ,p_mapped_col_name2 out varchar2
24 ,p_keyflex_id_flex_num out number
25 ,p_segment_separator out varchar2
26 ,p_warning out varchar2) is
27
28 l_id_flex_num number(15) := 0;
29
30 -- For 11.0 patch, only up to 2 segments can be specified by the user in the
31 -- profile option.
32 l_segment_name1 varchar2(30) default null;
33 l_segment_name2 varchar2(30) default null;
34 l_segment_name_valid varchar2(1) default null;
35 l_tbl_col_name_used varchar2(1) default null;
36 --
37 l_mapped_col_name1 varchar2(30) default null;
38 l_mapped_col_name2 varchar2(30) default null;
39 --
40 l_flexfield_rec fnd_flex_key_api.flexfield_type;
41 l_structure_rec fnd_flex_key_api.structure_type;
42 l_segment_rec1 fnd_flex_key_api.segment_type;
43 l_segment_rec2 fnd_flex_key_api.segment_type;
44 l_length number;
45 l_index binary_integer default 0;
46
47 --
48 l_per_short_name varchar2(3) default 'PER';
49 l_pay_short_name varchar2(3) default 'PAY';
50 l_grade_flex_code varchar2(3) default 'GRD';
51 l_group_flex_code varchar2(3) default 'GRP';
52 l_job_flex_code varchar2(3) default 'JOB';
53 l_pos_flex_code varchar2(3) default 'POS';
54 l_cost_flex_code varchar2(4) default 'COST';
55
56
57 --
58 -- Grade Keyflex Id is stored in org_information4 in hr_organization_information
59 cursor csr_get_grade_flex_id is
60 select org_information4
61 from hr_organization_information
62 where organization_id = p_business_group_id
63 and org_information_context = 'Business Group Information';
64 --
65 -- People Group Keyflex Id is stored in org_information5 in
66 -- hr_organization_information.
67 cursor csr_get_people_group_flex_id is
68 select org_information5
69 from hr_organization_information
70 where organization_id = p_business_group_id
71 and org_information_context = 'Business Group Information';
72 --
73 -- Job Keyflex Id is stored in org_information6 in hr_organization_information
74 cursor csr_get_job_flex_id is
75 select org_information6
76 from hr_organization_information
77 where organization_id = p_business_group_id
78 and org_information_context = 'Business Group Information';
79 --
80 -- Costing Keyflex Id is stored in org_information7 in
81 -- hr_organization_information.
82 cursor csr_get_costing_flex_id is
83 select org_information7
84 from hr_organization_information
85 where organization_id = p_business_group_id
86 and org_information_context = 'Business Group Information';
87 --
88 -- Position Keyflex Id is stored in org_information8 in
89 -- hr_organization_information.
90 cursor csr_get_position_flex_id is
91 select org_information8
92 from hr_organization_information
93 where organization_id = p_business_group_id
94 and org_information_context = 'Business Group Information';
95 --
96 Begin
97
98 l_structure_rec.segment_separator := ' ';
99 --
100 -- --------------------------------------------------------------------------
101 -- For each key flexfield type, do:
102 -- 1) Get the id flex num for the business group.
103 -- 2) Get segment name for the flexfield from the profile option.
104 -- We allow users to enter either "user segment name, such as: Job Code, Job
105 -- Title" or physical segment column name, such as SEGMENT1 ... SEGMENT30.
106 -- 3) Once segment name is returned, check whether the segment name starts with
107 -- 'SEGMENT%'. If it does, then we will validate the physical segment name
108 -- by comparing with the application_column_name in fnd_id_flex_segments
109 -- table for the structure and flex_code. If the segment names are equal,
110 -- then the segment name entered is valid for the structure, stop here.
111 -- Otherwise, raise an error.
112 --
113 -- If the segment name does not begin with 'SEGMENT%', then the system will
114 -- assume that user segment name is used. The system will progress to the
115 -- the next step to obtain the physical segment column name.
116 -- 4) Get the mapped table column name for the user segment name.
117 -- --------------------------------------------------------------------------
118 --
119 p_warning := null;
120
121 IF upper(p_keyflex_code) = l_grade_flex_code THEN
122 open csr_get_grade_flex_id;
123 fetch csr_get_grade_flex_id into l_id_flex_num;
124 IF csr_get_grade_flex_id%NOTFOUND THEN
125 close csr_get_grade_flex_id;
126 raise g_flexfield_not_found;
127 ELSE
128 close csr_get_grade_flex_id;
129 l_segment_name1 := fnd_profile.value('HR_GRADE_KEYFLEX_SEGMENT1');
130 l_segment_name2 := fnd_profile.value('HR_GRADE_KEYFLEX_SEGMENT2');
131 --
132 --
133 validate_seg_col_name(p_segment_name1 => l_segment_name1
134 ,p_segment_name2 => l_segment_name2
135 ,p_app_short_name => l_per_short_name
136 ,p_flex_code => l_grade_flex_code
137 ,p_id_flex_num => l_id_flex_num
138 ,p_segment_name_valid => l_segment_name_valid
139 ,p_tbl_col_name_used => l_tbl_col_name_used
140 ,p_flexfield_rec => l_flexfield_rec
141 ,p_structure_rec => l_structure_rec);
142
143 IF l_segment_name_valid = 'Y' and l_tbl_col_name_used = 'Y' THEN
144 l_mapped_col_name1 := upper(l_segment_name1);
145 l_mapped_col_name2 := upper(l_segment_name2);
146 ELSE -- user segment names were entered
147 IF l_segment_name_valid = 'Y' THEN
148 get_keyflex_info (p_app_short_name => l_per_short_name
149 ,p_flex_code => l_grade_flex_code
150 ,p_id_flex_num => l_id_flex_num
151 ,p_segment_name1 =>l_segment_name1
152 ,p_segment_name2 =>l_segment_name2
153 ,p_mapped_tbl_col_name1 => l_mapped_col_name1
154 ,p_mapped_tbl_col_name2 => l_mapped_col_name2
155 ,p_flexfield_rec => l_flexfield_rec
156 ,p_structure_rec => l_structure_rec);
157 END IF;
158 END IF;
159 END IF;
160 --
161 ELSIF upper(p_keyflex_code) = l_job_flex_code THEN
162 open csr_get_job_flex_id;
163 fetch csr_get_job_flex_id into l_id_flex_num;
164 IF csr_get_job_flex_id%NOTFOUND THEN
165 close csr_get_job_flex_id;
166 raise g_flexfield_not_found;
167 ELSE
168 close csr_get_job_flex_id;
169 l_segment_name1 := fnd_profile.value('HR_JOB_KEYFLEX_SEGMENT1');
170 l_segment_name2 := fnd_profile.value('HR_JOB_KEYFLEX_SEGMENT2');
171 --
172 --
173 validate_seg_col_name(p_segment_name1 => l_segment_name1
174 ,p_segment_name2 => l_segment_name2
175 ,p_app_short_name => l_per_short_name
176 ,p_flex_code => l_job_flex_code
177 ,p_id_flex_num => l_id_flex_num
178 ,p_segment_name_valid => l_segment_name_valid
179 ,p_tbl_col_name_used => l_tbl_col_name_used
180 ,p_flexfield_rec => l_flexfield_rec
181 ,p_structure_rec => l_structure_rec);
182
183 IF l_segment_name_valid = 'Y' and l_tbl_col_name_used = 'Y' THEN
184 l_mapped_col_name1 := upper(l_segment_name1);
185 l_mapped_col_name2 := upper(l_segment_name2);
186 ELSE -- user segment names were entered
187 IF l_segment_name_valid = 'Y' THEN
188 get_keyflex_info (p_app_short_name => l_per_short_name
189 ,p_flex_code => l_job_flex_code
190 ,p_id_flex_num => l_id_flex_num
191 ,p_segment_name1 => l_segment_name1
192 ,p_segment_name2 => l_segment_name2
193 ,p_mapped_tbl_col_name1 => l_mapped_col_name1
194 ,p_mapped_tbl_col_name2 => l_mapped_col_name2
195 ,p_flexfield_rec => l_flexfield_rec
196 ,p_structure_rec => l_structure_rec);
197 END IF;
198 END IF;
199 END IF;
200 --
201 ELSIF upper(p_keyflex_code) = l_pos_flex_code THEN
202 open csr_get_position_flex_id;
203 fetch csr_get_position_flex_id into l_id_flex_num;
204 IF csr_get_position_flex_id%NOTFOUND THEN
205 close csr_get_position_flex_id;
206 raise g_flexfield_not_found;
207 ELSE
208 close csr_get_position_flex_id;
209 l_segment_name1 := fnd_profile.value('HR_POS_KEYFLEX_SEGMENT1');
210 l_segment_name2 := fnd_profile.value('HR_POS_KEYFLEX_SEGMENT2');
211 --
212 --
213 validate_seg_col_name(p_segment_name1 => l_segment_name1
214 ,p_segment_name2 => l_segment_name2
215 ,p_app_short_name => l_per_short_name
216 ,p_flex_code => l_pos_flex_code
217 ,p_id_flex_num => l_id_flex_num
218 ,p_segment_name_valid => l_segment_name_valid
219 ,p_tbl_col_name_used => l_tbl_col_name_used
220 ,p_flexfield_rec => l_flexfield_rec
221 ,p_structure_rec => l_structure_rec);
222
223 IF l_segment_name_valid = 'Y' and l_tbl_col_name_used = 'Y' THEN
224 l_mapped_col_name1 := upper(l_segment_name1);
225 l_mapped_col_name2 := upper(l_segment_name2);
226 ELSE -- user segment names were entered
227 IF l_segment_name_valid = 'Y' THEN
228 get_keyflex_info (p_app_short_name => l_per_short_name
229 ,p_flex_code => l_pos_flex_code
230 ,p_id_flex_num => l_id_flex_num
231 ,p_segment_name1 => l_segment_name1
232 ,p_segment_name2 => l_segment_name2
233 ,p_mapped_tbl_col_name1 => l_mapped_col_name1
234 ,p_mapped_tbl_col_name2 => l_mapped_col_name2
235 ,p_flexfield_rec => l_flexfield_rec
236 ,p_structure_rec => l_structure_rec);
237 END IF;
238 END IF;
239 END IF;
240 --
241 ELSIF upper(p_keyflex_code) = l_group_flex_code THEN
242 open csr_get_people_group_flex_id;
243 fetch csr_get_people_group_flex_id into l_id_flex_num;
244 IF csr_get_people_group_flex_id%NOTFOUND THEN
245 close csr_get_people_group_flex_id;
246 raise g_flexfield_not_found;
247 ELSE
248 close csr_get_people_group_flex_id;
249 l_segment_name1 := fnd_profile.value('HR_PEOPLE_GRP_KEYFLEX_SEGMENT1');
250 l_segment_name2 := fnd_profile.value('HR_PEOPLE_GRP_KEYFLEX_SEGMENT2');
251 --
252 validate_seg_col_name(p_segment_name1 => l_segment_name1
253 ,p_segment_name2 => l_segment_name2
254 ,p_app_short_name => l_pay_short_name
255 ,p_flex_code => l_group_flex_code
256 ,p_id_flex_num => l_id_flex_num
257 ,p_segment_name_valid => l_segment_name_valid
258 ,p_tbl_col_name_used => l_tbl_col_name_used
259 ,p_flexfield_rec => l_flexfield_rec
260 ,p_structure_rec => l_structure_rec);
261
262 IF l_segment_name_valid = 'Y' and l_tbl_col_name_used = 'Y' THEN
263 l_mapped_col_name1 := upper(l_segment_name1);
264 l_mapped_col_name2 := upper(l_segment_name2);
265 ELSE -- user segment names were entered
266 IF l_segment_name_valid = 'Y' THEN
267 get_keyflex_info (p_app_short_name => l_per_short_name
268 ,p_flex_code => l_group_flex_code
269 ,p_id_flex_num => l_id_flex_num
270 ,p_segment_name1 => l_segment_name1
271 ,p_segment_name2 => l_segment_name2
272 ,p_mapped_tbl_col_name1 => l_mapped_col_name1
273 ,p_mapped_tbl_col_name2 => l_mapped_col_name2
274 ,p_flexfield_rec => l_flexfield_rec
275 ,p_structure_rec => l_structure_rec);
276 END IF;
277 END IF;
278 END IF;
279 --
280 ELSIF upper(p_keyflex_code) = l_cost_flex_code THEN
281 open csr_get_costing_flex_id;
282 fetch csr_get_costing_flex_id into l_id_flex_num;
283 IF csr_get_costing_flex_id%NOTFOUND THEN
284 close csr_get_costing_flex_id;
285 raise g_flexfield_not_found;
286 ELSE
287 close csr_get_costing_flex_id;
288 l_segment_name1 := fnd_profile.value('HR_COSTING_KEYFLEX_SEGMENT1');
289 l_segment_name2 := fnd_profile.value('HR_COSTING_KEYFLEX_SEGMENT2');
290 --
291 validate_seg_col_name(p_segment_name1 => l_segment_name1
292 ,p_segment_name2 => l_segment_name2
293 ,p_app_short_name => l_pay_short_name
294 ,p_flex_code => l_cost_flex_code
295 ,p_id_flex_num => l_id_flex_num
296 ,p_segment_name_valid => l_segment_name_valid
297 ,p_tbl_col_name_used => l_tbl_col_name_used
298 ,p_flexfield_rec => l_flexfield_rec
299 ,p_structure_rec => l_structure_rec);
300
301 IF l_segment_name_valid = 'Y' and l_tbl_col_name_used = 'Y' THEN
302 l_mapped_col_name1 := upper(l_segment_name1);
303 l_mapped_col_name2 := upper(l_segment_name2);
304 ELSE -- user segment names were entered
305 IF l_segment_name_valid = 'Y' THEN
306 get_keyflex_info (p_app_short_name => l_per_short_name
307 ,p_flex_code => l_cost_flex_code
308 ,p_id_flex_num => l_id_flex_num
309 ,p_segment_name1 => l_segment_name1
310 ,p_segment_name2 => l_segment_name2
311 ,p_mapped_tbl_col_name1 => l_mapped_col_name1
312 ,p_mapped_tbl_col_name2 => l_mapped_col_name2
313 ,p_flexfield_rec => l_flexfield_rec
314 ,p_structure_rec => l_structure_rec);
315 END IF;
316 END IF;
317 END IF;
318 ELSE
319 l_id_flex_num := null;
320 l_mapped_col_name1 := null;
321 l_mapped_col_name2 := null;
322 END IF;
323
324 --
325 p_mapped_col_name1 := l_mapped_col_name1;
326 p_mapped_col_name2 := l_mapped_col_name2;
327 p_keyflex_id_flex_num := l_id_flex_num;
328 p_segment_separator := l_structure_rec.segment_separator;
329 --
330 --
331 Exception
332 When g_flexfield_not_found or NO_DATA_FOUND THEN
333 p_warning := 'HR_FLEXFIELD_NOT_FOUND';
334
335 When g_both_seg_name_invalid THEN
336 p_warning := 'HR_SEG_NAME_INVALID';
337
338 When g_seg_name1_invalid THEN
339 p_warning := 'HR_SEG_NAME_INVALID';
340
341 When g_seg_name2_invalid THEN
342 p_warning := 'HR_SEG_NAME_INVALID';
343
344 End get_keyflex_mapped_column_name;
345
346
347 ------------------------------------------------------------------------------
348 -- ------------------------< validate_seg_col_name > -------------------------
349 ------------------------------------------------------------------------------
350 Procedure validate_seg_col_name(p_segment_name1 in varchar2 default null
351 ,p_segment_name2 in varchar2 default null
352 ,p_app_short_name in varchar2
353 ,p_flex_code in varchar2
354 ,p_id_flex_num in number
355 ,p_segment_name_valid out varchar2
356 ,p_tbl_col_name_used out varchar2
357 ,p_flexfield_rec out
358 fnd_flex_key_api.flexfield_type
359 ,p_structure_rec out
360 fnd_flex_key_api.structure_type) IS
361
362 l_flexfield_rec fnd_flex_key_api.flexfield_type;
363 l_structure_rec fnd_flex_key_api.structure_type;
364 l_segment_list fnd_flex_key_api.segment_list;
365 l_index binary_integer default 0;
366 l_num_of_segments number default 0;
367 l_length number default 0;
368 l_seg_name_tmp varchar2(100) default null;
369 l_seg_col_name_ok boolean default false;
370 l_seg_name1_valid varchar2(1) default null;
371 l_seg_name2_valid varchar2(1) default null;
372 l_app_col_name varchar2(30);
373 l_app_id number default null;
374
375 cursor csr_chk_flex_app_col_name is
376 select APPLICATION_COLUMN_NAME
377 from fnd_id_flex_segments
378 where APPLICATION_ID = l_app_id
379 and ID_FLEX_CODE = p_flex_code
380 and ID_FLEX_NUM = p_id_flex_num;
381 --
382 --
383 Begin
384 l_app_id := null;
385 l_app_col_name := null;
386 l_seg_col_name_ok := false;
387 p_segment_name_valid := null;
388 p_tbl_col_name_used := null;
389 --
390 IF p_app_short_name = 'PER' THEN
391 l_app_id := 800;
392 ELSE
393 l_app_id := 801;
394 END IF;
395 --
396 l_length := length(p_segment_name1);
397 IF l_length is not null and l_length >= 7 THEN
398 l_seg_name_tmp := upper(p_segment_name1);
399 IF instr(l_seg_name_tmp, 'SEGMENT', 1, 1) = 1 THEN
400 l_seg_col_name_ok := true;
401 END IF;
402 END IF;
403 --
404 l_length := length(p_segment_name2);
405 IF l_length is not null and l_length >= 7 THEN
406 l_seg_name_tmp := upper(p_segment_name2);
407 IF instr(l_seg_name_tmp, 'SEGMENT', 1, 1) = 1 THEN
408 l_seg_col_name_ok := true;
409 END IF;
410 END IF;
411
412 -- Validate the physical column name entered by the user
413 IF l_seg_col_name_ok THEN
414 p_tbl_col_name_used := 'Y';
415 open csr_chk_flex_app_col_name;
416 IF csr_chk_flex_app_col_name%NOTFOUND THEN
417 close csr_chk_flex_app_col_name;
418 raise g_flexfield_not_found;
419 END IF;
420 --
421 l_seg_name1_valid := 'N';
422 l_seg_name2_valid := 'N';
423 --
424 Loop
425 fetch csr_chk_flex_app_col_name into l_app_col_name;
426 exit when csr_chk_flex_app_col_name%NOTFOUND;
427 IF p_segment_name1 is NOT NULL and l_seg_name1_valid = 'N' THEN
428 IF l_app_col_name = upper(p_segment_name1) THEN
429 l_seg_name1_valid := 'Y';
430 END IF;
431 END IF;
432 --
433 IF p_segment_name2 is NOT NULL and l_seg_name2_valid = 'N' THEN
434 IF l_app_col_name = upper(p_segment_name2) THEN
435 l_seg_name2_valid := 'Y';
436 END IF;
437 END IF;
438 --
439 END LOOP;
440 --
441 --
442 close csr_chk_flex_app_col_name;
443 --
444 ELSE -- check user segment name entered by the user
445 l_flexfield_rec := fnd_flex_key_api.find_flexfield
446 (p_app_short_name, p_flex_code);
447 --
448 l_structure_rec := fnd_flex_key_api.find_structure
449 (l_flexfield_rec, p_id_flex_num);
450 --
451 fnd_flex_key_api.get_segments(flexfield => l_flexfield_rec
452 ,structure => l_structure_rec
453 ,enabled_only => True
454 ,nsegments => l_num_of_segments
455 ,segments => l_segment_list);
456
457 l_seg_name1_valid := 'N';
458 l_seg_name2_valid := 'N';
459 --
460 IF l_num_of_segments > 0 THEN
461 For l_index in 1..l_num_of_segments LOOP
462 IF p_segment_name1 is NOT NULL and l_seg_name1_valid = 'N' THEN
463 IF l_segment_list(l_index) = p_segment_name1 THEN
464 l_seg_name1_valid := 'Y';
465 END IF;
466 END IF;
467 --
468 IF p_segment_name2 is NOT NULL and l_seg_name2_valid = 'N' THEN
469 IF l_segment_list(l_index) = p_segment_name2 THEN
470 l_seg_name2_valid := 'Y';
471 END IF;
472 END IF;
473 END LOOP;
474 END IF;
475 END IF;
476 --
477 -- Now set the output parm p_segment_name_valid accordingly for either
478 -- physical column name or user segment name.
479 --
480 IF (l_seg_name1_valid = 'Y' and l_seg_name2_valid = 'Y') OR
481 (l_seg_name1_valid = 'Y' and l_seg_name2_valid = 'N' ) OR
482 (l_seg_name1_valid = 'N' and l_seg_name2_valid = 'Y') THEN
483 p_segment_name_valid := 'Y';
484 p_flexfield_rec := l_flexfield_rec;
485 p_structure_rec := l_structure_rec;
486 ELSE
487 IF l_seg_name1_valid = 'N' and l_seg_name2_valid = 'N' THEN
488 p_segment_name_valid := 'N';
489 raise g_both_seg_name_invalid;
490 ELSE
491 IF l_seg_name1_valid = 'N' THEN
492 p_segment_name_valid := 'N';
493 raise g_seg_name1_invalid;
494 ELSE
495 IF l_seg_name2_valid = 'N' THEN
496 p_segment_name_valid := 'N';
497 raise g_seg_name2_invalid;
498 END IF;
499 END IF;
500 END IF;
501 END IF;
502
503 END validate_seg_col_name;
504 --
505 ------------------------------------------------------------------------------
506 -- -------------------------< get_keyflex_info > -----------------------------
507 ------------------------------------------------------------------------------
508 Procedure get_keyflex_info(p_app_short_name in varchar2
509 ,p_flex_code in varchar2
510 ,p_id_flex_num in number
511 ,p_segment_name1 in varchar2 default null
512 ,p_segment_name2 in varchar2 default null
513 ,p_mapped_tbl_col_name1 out varchar2
514 ,p_mapped_tbl_col_name2 out varchar2
515 ,p_flexfield_rec in
516 fnd_flex_key_api.flexfield_type
517 ,p_structure_rec in
518 fnd_flex_key_api.structure_type) IS
519 --
520 -- ---------------------------------------------------------------------
521 -- Parameters values:
522 -- 1) p_app_short_name - 'PER' or 'PAY'
523 -- 2) p_flex_code - 'GRP' for People Group
524 -- - 'GRD' for Grade
525 -- - 'JOB' for Job
526 -- - 'POS' for Position
527 -- - 'COST' for Cost Allocation
528 -- ---------------------------------------------------------------------
529 l_mapped_col_name1 varchar2(30) default null;
530 l_mapped_col_name2 varchar2(30) default null;
531 --
532 l_flexfield_rec fnd_flex_key_api.flexfield_type;
533 l_structure_rec fnd_flex_key_api.structure_type;
534 l_segment_rec1 fnd_flex_key_api.segment_type;
535 l_segment_rec2 fnd_flex_key_api.segment_type;
536
537 --
538 Begin
539 IF p_segment_name1 is not null THEN
540 l_segment_rec1 := fnd_flex_key_api.find_segment
541 (p_flexfield_rec, p_structure_rec,
542 p_segment_name1);
543 l_mapped_col_name1 := l_segment_rec1.column_name;
544 p_mapped_tbl_col_name1 := l_mapped_col_name1;
545 END IF;
546 --
547 IF p_segment_name2 is not null THEN
548 l_segment_rec2 := fnd_flex_key_api.find_segment
549 (p_flexfield_rec, p_structure_rec,
550 p_segment_name2);
551 l_mapped_col_name2 := l_segment_rec2.column_name;
552 p_mapped_tbl_col_name2 := l_mapped_col_name2;
553 END IF;
554 --
555 END get_keyflex_info;
556
557 END hr_util_flex_web;