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