DBA Data[Home] [Help]

PACKAGE BODY: APPS.HR_NAVIGATION_PATHS_PKG

Source


1 package body HR_NAVIGATION_PATHS_PKG as
2 /* $Header: hrnvplct.pkb 120.0 2005/05/31 01:37:32 appldev noship $ */
3 
4 procedure OWNER_TO_WHO (
5   X_OWNER in VARCHAR2,
6   X_CREATION_DATE out nocopy DATE,
7   X_CREATED_BY out nocopy NUMBER,
8   X_LAST_UPDATE_DATE out nocopy DATE,
9   X_LAST_UPDATED_BY out nocopy NUMBER,
10   X_LAST_UPDATE_LOGIN out nocopy NUMBER
11 ) is
12 begin
13   if X_OWNER = 'SEED' then
14     X_CREATED_BY := 1;
15     X_LAST_UPDATED_BY := 1;
16   else
17     X_CREATED_BY := 0;
18     X_LAST_UPDATED_BY := 0;
19   end if;
20   X_CREATION_DATE := sysdate;
21   X_LAST_UPDATE_DATE := sysdate;
22   X_LAST_UPDATE_LOGIN := 0;
23 end OWNER_TO_WHO;
24 
25 procedure INSERT_ROW (
26   X_ROWID in out nocopy VARCHAR2,
27   X_NAV_PATH_ID in NUMBER,
28   X_FROM_NAV_NODE_USAGE_ID in NUMBER,
29   X_TO_NAV_NODE_USAGE_ID in NUMBER,
30   X_NAV_BUTTON_REQUIRED in VARCHAR2,
31   X_SEQUENCE in NUMBER,
32   X_OVERRIDE_LABEL in VARCHAR2,
33   X_LANGUAGE_CODE in varchar2 default hr_api.userenv_lang
34 ) is
35 l_language_code varchar2(3);
36   cursor C is select ROWID from HR_NAVIGATION_PATHS
37     where NAV_PATH_ID = X_NAV_PATH_ID
38     ;
39 begin
40 -- Validate the language parameter. l_language_code should be passed
41   -- instead of x_language_code from now on, to allow an IN OUT parameter to
42   -- be passed through.
43   --
44   l_language_code := x_language_code;
45   hr_api.validate_language_code(p_language_code => l_language_code);
46 
47   insert into HR_NAVIGATION_PATHS (
48     NAV_PATH_ID,
49     FROM_NAV_NODE_USAGE_ID,
50     TO_NAV_NODE_USAGE_ID,
51     NAV_BUTTON_REQUIRED,
52     SEQUENCE,
53     OVERRIDE_LABEL
54     ) values (
55     X_NAV_PATH_ID,
56     X_FROM_NAV_NODE_USAGE_ID,
57     X_TO_NAV_NODE_USAGE_ID,
58     X_NAV_BUTTON_REQUIRED,
59     X_SEQUENCE,
60     X_OVERRIDE_LABEL
61     );
62 
63 INSERT INTO HR_NAVIGATION_PATHS_TL(
64           nav_path_id,
65           override_label,
66           language,
67           source_lang)
68           select
69           X_Nav_Path_Id,
70      	  x_override_label,
71           l.language_code,
72           userenv('LANG')
73           from FND_LANGUAGES L
74   where L.INSTALLED_FLAG in ('I', 'B')
75   and not exists
76     (select NULL
77     from HR_NAVIGATION_PATHS_TL T
78     where T.NAV_PATH_ID = X_NAV_PATH_ID
79     and T.LANGUAGE = L.LANGUAGE_CODE);
80 
81          open c;
82   fetch c into X_ROWID;
83   if (c%notfound) then
84     close c;
85     raise no_data_found;
86   end if;
87   close c;
88 
89 end INSERT_ROW;
90 
91 procedure LOCK_ROW (
92   X_NAV_PATH_ID in NUMBER,
93   X_FROM_NAV_NODE_USAGE_ID in NUMBER,
94   X_TO_NAV_NODE_USAGE_ID in NUMBER,
95   X_NAV_BUTTON_REQUIRED in VARCHAR2,
96   X_SEQUENCE in NUMBER,
97   X_OVERRIDE_LABEL in VARCHAR2
98 ) is
99   cursor c1 is select
100       FROM_NAV_NODE_USAGE_ID,
101       TO_NAV_NODE_USAGE_ID,
102       NAV_BUTTON_REQUIRED,
103       SEQUENCE,
104       OVERRIDE_LABEL
105     from HR_NAVIGATION_PATHS
106     where NAV_PATH_ID = X_NAV_PATH_ID
107     for update of NAV_PATH_ID nowait;
108 
109      cursor CSR_HR_NAVIGATION_PATHS_TL is
110     select OVERRIDE_LABEL,
111       decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
112     from HR_NAVIGATION_PATHS_TL TL
113     where nav_path_id = x_nav_path_id
114     and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
115     for update of nav_path_id nowait;
116 
117 begin
118   for tlinfo in c1 loop
119       if (
120           (tlinfo.FROM_NAV_NODE_USAGE_ID = X_FROM_NAV_NODE_USAGE_ID)
121           AND (tlinfo.TO_NAV_NODE_USAGE_ID = X_TO_NAV_NODE_USAGE_ID)
122           AND (tlinfo.NAV_BUTTON_REQUIRED = X_NAV_BUTTON_REQUIRED)
123           AND (tlinfo.SEQUENCE = X_SEQUENCE)
124       ) then
125         null;
126       else
127         fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
128         app_exception.raise_exception;
129       end if;
130   end loop;
131 
132   for tlinf in CSR_HR_NAVIGATION_PATHS_TL loop
133     if (tlinf.BASELANG = 'Y') then
134       if (    ((tlinf.OVERRIDE_LABEL = X_OVERRIDE_LABEL)
135              OR ((tlinf.OVERRIDE_LABEL is null) AND (X_OVERRIDE_LABEL is null)))
136       ) then
137         null;
138       else
139         fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
140         app_exception.raise_exception;
141       end if;
142     end if;
143   end loop;
144 
145   return;
146 end LOCK_ROW;
147 
148 procedure UPDATE_ROW (
149   X_NAV_PATH_ID in NUMBER,
150   X_FROM_NAV_NODE_USAGE_ID in NUMBER,
151   X_TO_NAV_NODE_USAGE_ID in NUMBER,
152   X_NAV_BUTTON_REQUIRED in VARCHAR2,
153   X_SEQUENCE in NUMBER,
154   X_OVERRIDE_LABEL in VARCHAR2,
155   X_LANGUAGE_CODE in varchar2 default hr_api.userenv_lang
156 ) is
157 l_language_code varchar2(3);
158 begin
159 -- Validate the language parameter. l_language_code should be passed
160   -- instead of x_language_code from now on, to allow an IN OUT parameter to
161   -- be passed through.
162   --
163   l_language_code := x_language_code;
164   hr_api.validate_language_code(p_language_code => l_language_code);
165 
166   update HR_NAVIGATION_PATHS set
167     FROM_NAV_NODE_USAGE_ID = X_FROM_NAV_NODE_USAGE_ID,
168     TO_NAV_NODE_USAGE_ID = X_TO_NAV_NODE_USAGE_ID,
169     NAV_BUTTON_REQUIRED = X_NAV_BUTTON_REQUIRED,
170     SEQUENCE = X_SEQUENCE,
171     OVERRIDE_LABEL = X_OVERRIDE_LABEL
172   where NAV_PATH_ID = X_NAV_PATH_ID;
173 
174   if (sql%notfound) then
175     raise no_data_found;
176   end if;
177 
178     update HR_NAVIGATION_PATHS_TL
179     set
180     OVERRIDE_LABEL = X_OVERRIDE_LABEL,
181     SOURCE_LANG = userenv('LANG')
182   where NAV_PATH_ID = X_NAV_PATH_ID
183   and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
184 
185     if (sql%notfound) then
186     raise no_data_found;
187   end if;
188 
189 end UPDATE_ROW;
190 
191 procedure DELETE_ROW (
192   X_NAV_PATH_ID in NUMBER
193 ) is
194 begin
195 
196   delete from HR_NAVIGATION_PATHS_TL
197   where NAV_PATH_ID = X_NAV_PATH_ID;
198 
199   if (sql%notfound) then
200     raise no_data_found;
201   end if;
202 
203   delete from HR_NAVIGATION_PATHS
204   where NAV_PATH_ID = X_NAV_PATH_ID;
205 
206   if (sql%notfound) then
207     raise no_data_found;
208   end if;
209 
210 end DELETE_ROW;
211 
212 procedure ADD_LANGUAGE
213 is
214 begin
215   delete from HR_NAVIGATION_PATHS_TL T
216   where not exists
217     (select NULL
218     from HR_NAVIGATION_PATHS B
219     where B.NAV_PATH_ID = T.NAV_PATH_ID
220     );
221 
222   update HR_NAVIGATION_PATHS_TL T set (
223       OVERRIDE_LABEL
224     ) = (select
225       B.OVERRIDE_LABEL
226     from HR_NAVIGATION_PATHS_TL B
227     where B.NAV_PATH_ID = T.NAV_PATH_ID
228     and B.LANGUAGE = T.SOURCE_LANG)
229   where (
230       T.NAV_PATH_ID,
231       T.LANGUAGE
232   ) in (select
233       SUBT.NAV_PATH_ID,
234       SUBT.LANGUAGE
235     from HR_NAVIGATION_PATHS_TL SUBB, HR_NAVIGATION_PATHS_TL SUBT
236     where SUBB.NAV_PATH_ID = SUBT.NAV_PATH_ID
237     and SUBB.LANGUAGE = SUBT.SOURCE_LANG
238     and (SUBB.OVERRIDE_LABEL <> SUBT.OVERRIDE_LABEL
239       or (SUBB.OVERRIDE_LABEL is null and SUBT.OVERRIDE_LABEL is not null)
240       or (SUBB.OVERRIDE_LABEL is not null and SUBT.OVERRIDE_LABEL is null)
241   ));
242 
243   insert into HR_NAVIGATION_PATHS_TL (
244     NAV_PATH_ID,
245     OVERRIDE_LABEL,
246     LANGUAGE,
247     SOURCE_LANG
248   ) select
249     B.NAV_PATH_ID,
250     B.OVERRIDE_LABEL,
251     L.LANGUAGE_CODE,
252     B.SOURCE_LANG
253   from HR_NAVIGATION_PATHS_TL B, FND_LANGUAGES L
254   where L.INSTALLED_FLAG in ('I', 'B')
255   and B.LANGUAGE = userenv('LANG')
256   and not exists
257     (select NULL
258     from HR_NAVIGATION_PATHS_TL T
259     where T.NAV_PATH_ID = B.NAV_PATH_ID
260     and T.LANGUAGE = L.LANGUAGE_CODE);
261 end ADD_LANGUAGE;
262 
263 procedure LOAD_ROW(
264   X_WORKFLOW_NAME in VARCHAR2,
265   X_NODE_NAME_FROM in VARCHAR2,
266   X_NODE_NAME_TO in VARCHAR2,
267   X_NAV_BUTTON_REQUIRED in VARCHAR2,
268   X_SEQUENCE in VARCHAR2,
269   X_OVERRIDE_LABEL in VARCHAR2,
270   X_NVP_FLAG in VARCHAR2
271 ) is
272 X_WORKFLOW_ID NUMBER;
273 X_FROM_NAV_NODE_ID NUMBER;
274 X_TO_NAV_NODE_ID NUMBER;
275 X_NAV_PATH_ID NUMBER;
276 X_ROWID VARCHAR2(30);
277 X_FROM_NAV_NODE_USAGE_ID NUMBER;
278 X_TO_NAV_NODE_USAGE_ID NUMBER;
279 l_flag varchar2(1) := 'Y';
280 begin
281 
282 -- Note that for navigation paths, the upload will fail if either
283 -- of the nav_node_usage_id's have not been extracted in the download or are
284 -- not already present on the remote site.  This can happen because a
285 -- navigation node usage can exist across taskflows and therefore need not
286 -- be extracted for a particular taskflow.  However, to ensure that
287 -- this does not stop the data upload on the remote site, the uploader
288 -- traps and surpresses any error raised because of this.  Since the
289 -- downloader downloads for the occurrence of navigation node usage in both
290 -- from and to nav_node_usage_id columns, the relevant records will get
291 -- populated when the other navigation node usage is being loaded.
292 -- x_nav_flag is used to raise an application error if no data is
293 -- found when 'to' navigation node usages are being handled.  The l_flag
294 -- is used to surpress errors when 'from' navigtion node usages are being
295 -- handled.
296 
297 
298   if hr_workflows_pkg.g_load_taskflow <> 'N' then
299     l_flag := 'Y';
300 
301     select WORKFLOW_ID
302     into X_WORKFLOW_ID
303     from HR_WORKFLOWS
304     where WORKFLOW_NAME = X_WORKFLOW_NAME;
305 
306     begin
307 
308       select NAV_NODE_ID
309       into X_FROM_NAV_NODE_ID
310       from HR_NAVIGATION_NODES
311       where NAME = X_NODE_NAME_FROM;
312 
313       select NAV_NODE_USAGE_ID
314       into X_FROM_NAV_NODE_USAGE_ID
315       from HR_NAVIGATION_NODE_USAGES
316       where WORKFLOW_ID = X_WORKFLOW_ID
317       and NAV_NODE_ID = X_FROM_NAV_NODE_ID;
318 
319     exception
320       when no_data_found then
321         if x_nvp_flag = 'FROM' then
322           raise;
323         else
324           l_flag := 'N';
325         end if;
326     end;
327 
328     begin
329 
330       select NAV_NODE_ID
331       into X_TO_NAV_NODE_ID
332       from HR_NAVIGATION_NODES
333       where NAME = X_NODE_NAME_TO;
334 
335       select NAV_NODE_USAGE_ID
336       into X_TO_NAV_NODE_USAGE_ID
337       from HR_NAVIGATION_NODE_USAGES
338       where WORKFLOW_ID = X_WORKFLOW_ID
339       and NAV_NODE_ID = X_TO_NAV_NODE_ID;
340 
341     exception
342       when no_data_found then
343         if x_nvp_flag = 'TO' then
344           raise;
345         else
346           l_flag := 'N';
347         end if;
348     end;
349 
350     if l_flag = 'Y' then
351       begin
352         select NAV_PATH_ID
353         into X_NAV_PATH_ID
354         from HR_NAVIGATION_PATHS
355         where FROM_NAV_NODE_USAGE_ID = X_FROM_NAV_NODE_USAGE_ID
356         and TO_NAV_NODE_USAGE_ID = X_TO_NAV_NODE_USAGE_ID;
357       exception
358           when no_data_found then
359             select HR_NAVIGATION_PATHS_S.NEXTVAL
360             into X_NAV_PATH_ID
361             from dual;
362       end;
363 
364       begin
365         UPDATE_ROW(
366           X_NAV_PATH_ID,
367           X_FROM_NAV_NODE_USAGE_ID,
368           X_TO_NAV_NODE_USAGE_ID,
369           X_NAV_BUTTON_REQUIRED,
370           X_SEQUENCE,
371           X_OVERRIDE_LABEL
372         );
373       exception
374           when no_data_found then
375             INSERT_ROW(
376               X_ROWID,
377               X_NAV_PATH_ID,
378               X_FROM_NAV_NODE_USAGE_ID,
379               X_TO_NAV_NODE_USAGE_ID,
380               X_NAV_BUTTON_REQUIRED,
381               X_SEQUENCE,
382               X_OVERRIDE_LABEL
383             );
384       end;
385 
386     end if;
387 
388   end if;
389 
390 end LOAD_ROW;
391 
392 procedure TRANSLATE_ROW (
393   X_WORKFLOW_NAME in VARCHAR2,
394   X_NODE_NAME_FROM in VARCHAR2,
395   X_NODE_NAME_TO in VARCHAR2,
396   X_OVERRIDE_LABEL in VARCHAR2,
397   X_NVP_LABEL in VARCHAR2
398 ) is
399 X_WORKFLOW_ID NUMBER;
400 X_FROM_NAV_NODE_ID NUMBER;
401 X_TO_NAV_NODE_ID NUMBER;
402 X_NAV_PATH_ID NUMBER;
403 X_ROWID VARCHAR2(30);
404 X_FROM_NAV_NODE_USAGE_ID NUMBER;
405 X_TO_NAV_NODE_USAGE_ID NUMBER;
406 l_flag varchar2(1) := 'Y';
407 x_nvp_flag varchar2(30) := x_nvp_label;
408 begin
409 
410 
411  l_flag := 'Y';
412 
413     select WORKFLOW_ID
414     into X_WORKFLOW_ID
415     from HR_WORKFLOWS
416     where WORKFLOW_NAME = X_WORKFLOW_NAME;
417 
418     begin
419 
420       select NAV_NODE_ID
421       into X_FROM_NAV_NODE_ID
422       from HR_NAVIGATION_NODES
423       where NAME = X_NODE_NAME_FROM;
424 
425       select NAV_NODE_USAGE_ID
426       into X_FROM_NAV_NODE_USAGE_ID
427       from HR_NAVIGATION_NODE_USAGES
428       where WORKFLOW_ID = X_WORKFLOW_ID
429       and NAV_NODE_ID = X_FROM_NAV_NODE_ID;
430 
431     exception
432       when no_data_found then
433         if x_nvp_flag = 'FROM' then
434           raise;
435         else
436           l_flag := 'N';
437         end if;
438     end;
439 
440     begin
441 
442       select NAV_NODE_ID
443       into X_TO_NAV_NODE_ID
444       from HR_NAVIGATION_NODES
445       where NAME = X_NODE_NAME_TO;
446 
447       select NAV_NODE_USAGE_ID
448       into X_TO_NAV_NODE_USAGE_ID
449       from HR_NAVIGATION_NODE_USAGES
450       where WORKFLOW_ID = X_WORKFLOW_ID
451       and NAV_NODE_ID = X_TO_NAV_NODE_ID;
452 
453     exception
454       when no_data_found then
455         if x_nvp_flag = 'TO' then
456           raise;
457         else
458           l_flag := 'N';
459         end if;
460     end;
461 
462     if l_flag = 'Y' then
463 
464       begin
465         select NAV_PATH_ID
466         into X_NAV_PATH_ID
467         from HR_NAVIGATION_PATHS
468         where FROM_NAV_NODE_USAGE_ID = X_FROM_NAV_NODE_USAGE_ID
469         and TO_NAV_NODE_USAGE_ID = X_TO_NAV_NODE_USAGE_ID;
470       exception
471           when no_data_found then
472             select HR_NAVIGATION_PATHS_S.NEXTVAL
473             into X_NAV_PATH_ID
474             from dual;
475       end;
476 
477   begin
478   update HR_NAVIGATION_PATHS_TL
479   set    OVERRIDE_LABEL = X_OVERRIDE_LABEL,
480          SOURCE_LANG = userenv('LANG')
481   where  userenv('LANG') in (LANGUAGE,SOURCE_LANG)
482   and    nav_path_id = x_nav_path_id;
483       end;
484 
485     end if;
486  -- Fix for Bug 4109347 starts here. Added exception block.
487  exception
488       when no_data_found then
489         null;
490       when others then
491         raise;
492   -- Fix for bug 4109347 ends here.
493 end TRANSLATE_ROW;
494 
495 end HR_NAVIGATION_PATHS_PKG;