1 package body FND_FORM_FUNCTIONS_PKG as
2 /* $Header: AFFMFUNB.pls 120.2 2006/02/17 09:19:42 jvalenti ship $ */
3
4 -- private
5 function FUNCTION_VALIDATION (application_id in out nocopy number,
6 form_id in out nocopy number,
7 type in out nocopy varchar2,
8 parameters in out nocopy varchar2,
9 web_html_call in out nocopy varchar2,
10 web_host_name in varchar2,
11 region_application_id in out nocopy number,
12 region_code in out nocopy varchar2,
13 function_name in varchar2) return varchar2 is
14 columns_name varchar2(2000) := '';
15 begin
16 /*
17 ** Restore UNKNOWN functions
18 ** functions with region_application_id were converted to REGION
19 ** - region_application_id and region code used only in WEBPORTLET
20 ** - form reference (with no web call) is a FORM
21 ** - %.JSP web call is a JSP
22 ** - %.% web call is a WWW
23 ** - web call with no '%.%' is a DBPORTLET
24 ** - REGION type function not used
25 */
26
27 if type is null then
28 type := 'UNKNOWN';
29 columns_name := 'TYPE = UNKNOWN';
30 end if;
31
32 if ( (type = 'REGION' or type = 'UNKNOWN') and
33 (region_application_id is not null) and
34 (region_code is not null) and
35 (web_html_call is not null) and
36 (form_id is null) ) then
37 type := 'WEBPORTLET';
38 columns_name := 'TYPE = WEBPORTLET';
39 end if;
40
41 /* Note: SUBFUNCTIONS will be converted to FORMS... */
42 if ( (type = 'REGION' or type = 'UNKNOWN') and
43 (application_id is not null) and
44 (web_html_call is null) and
45 (form_id is not null) ) then
46 type := 'FORM';
47 columns_name := 'TYPE = FORM';
48 end if;
49
50 if ( (type = 'REGION' or type = 'UNKNOWN') and
51 (upper(web_html_call) like '%.JSP%')) then
52 type := 'JSP';
53 columns_name := 'TYPE = JSP';
54 end if;
55
56 if ( (type = 'REGION' or type = 'UNKNOWN') and
57 (upper(web_html_call) like '%.%')) then
58 type := 'WWW';
59 columns_name := 'TYPE = WWW';
60 end if;
61
62 if ( (type = 'WWW' or type = 'REGION' or type = 'UNKNOWN') and
63 (web_html_call not like '%.%') and
64 (web_html_call not like '%=%')) then
65 type := 'DBPORTLET';
66 columns_name := 'TYPE = DBPORTLET';
67 end if;
68
69 if (type = 'REGION') then
70 type := 'UNKNOWN';
71 columns_name := 'TYPE = UNKNOWN';
72 end if;
73
74 /*
75 ** Restore UNKNOWN functions
76 ** functions with no form, region, or web call were set to UNKNOWN
77 ** - restore PROCESS type functions
78 ** - convert to SUBFUNCTION
79 */
80
81 if (type = 'UNKNOWN' and
82 parameters like '%:%' and
83 parameters not like '%=%') then
84 type := 'PROCESS';
85 columns_name := 'TYPE = PROCESS';
86 end if;
87
88 if (type = 'UNKNOWN' and
89 form_id is null and
90 application_id is null and
91 web_html_call is null) then
92 type := 'SUBFUNCTION';
93 columns_name := 'TYPE = SUBFUNCTION';
94 end if;
95
96 /*
97 ** SUBFUNCTIONs with wrong type
98 ** - FORM type with no form_id
99 ** - "WEB" type with no web_html_call
100 */
101
102 if (type = 'FORM' and
103 form_id is null and
104 application_id is null) then
105 type := 'SUBFUNCTION';
106 columns_name := 'TYPE = SUBFUNCTION';
107 end if;
108
109 if ((type = 'WWW' or
110 type = 'WWL' or
111 type = 'WWLG' or
112 type = 'WWK') and
113 (web_html_call is null) and
114 (web_host_name is null)) then
115 type := 'SUBFUNCTION';
116 columns_name := 'TYPE = SUBFUNCTION';
117 end if;
118
119 if ((type = 'JSP' or
120 type = 'INTEROPJSP' or
121 type = 'SERVLET' or
122 type = 'WEBPORTLET' or
123 type = 'JTFWEBPORTLET' or
124 type = 'DBPORTLET' or
125 type = 'MOBILE') and
126 (web_html_call is null)) then
127 type := 'SUBFUNCTION';
128 columns_name := 'TYPE = SUBFUNCTION';
129 end if;
130
131 /*
132 ** Mispellings
133 */
134 if (type like 'SUB%' and
135 type <> 'SUBFUNCTION') then
136 type := 'SUBFUNCTION';
137 columns_name := 'TYPE = SUBFUNCTION';
138 end if;
139
140 if (type = 'SERVELET') then
141 type := 'SERVLET';
142 columns_name := 'TYPE = SERVLET';
143 end if;
144
145 /*
146 ** Obsolete types: PL/SQL web type functions
147 ** web functions must be one of
148 ** WWW - general web page
149 ** WWK - "kiosk" web page
150 ** WWL - Responsibility-specific PHP plug-in
151 ** WWLG - Global PHP plug-in
152 ** DBPORTLET - Portal portlet
153 */
154 if ((web_html_call is not null) and
155 (form_id is null) and
156 (application_id is null) and
157 (type like 'WW%') and
158 (type not in ('WWW', 'WWK', 'WWL', 'WWLG')) and
159 (type = 'WWP') )then
160 type := 'DBPORTLET';
161 columns_name := 'TYPE = DBPORTLET';
162 end if;
163
164 if ((web_html_call is not null) and
165 (form_id is null) and
166 (application_id is null) and
167 (type like 'WW%') and
168 (type not in ('WWW', 'WWK', 'WWL', 'WWLG')) and
169 (type = 'WWR') )then
170 type := 'WWL';
171 columns_name := 'TYPE = WWL';
172 end if;
173
174 if ((web_html_call is not null) and
175 (form_id is null) and
176 (application_id is null) and
177 (type like 'WW%') and
178 (type not in ('WWW', 'WWK', 'WWL', 'WWLG')) and
179 (type = 'WWRG') )then
180 type := 'WWLG';
181 columns_name := 'TYPE = WWLG';
182 end if;
183
184 if ((web_html_call is not null) and
185 (form_id is null) and
186 (application_id is null) and
187 (type like 'WW%') and
188 (type not in ('WWW', 'WWK', 'WWL', 'WWLG'))) then
189 type := 'WWW';
190 columns_name := 'TYPE = WWW';
191 end if;
192
193 /*
194 ** Obsolete / unrecognized types: FORM type functions
195 */
196
197 if (type <> 'FORM'
198 and type <> 'SUBFUNCTION'
199 and type <> 'PROCESS'
200 and type <> 'WWW'
201 and type <> 'JSP'
202 and type <> 'SERVLET'
203 and type <> 'DBPORTLET'
204 and type <> 'WEBPORTLET'
205 and type <> 'WWK'
206 and type <> 'WWL'
207 and type <> 'WWLG'
208 and form_id is not null
209 and application_id is not null) then
210 type := 'FORM';
211 columns_name := 'TYPE = FORM';
212 end if;
213
214
215 /*
216 ** June 2003: Clean up invalid function type.
217 ** The script is developed after product team have reviewed
218 ** our proposal.
219 ** Note: Case 1 to 6 is being done in the above sql scripts.
220 */
221
222 -- For formatting purpose
223 if (columns_name is not null) then
224 columns_name := columns_name||fnd_global.newline;
225 end if;
226
227 declare
228 applname varchar2(8);
229 begin
230
231 if (((type='FORM' and substr(function_name,1,3)
232 in ('WIP','INV','WMS','WMA')) or
233 (type='FORM' and substr(function_name,1,2) = 'QA') or
234 (type = 'WWW' and substr(function_name,1,3)
235 in ('WIP','INV','WMS','WMA')) or
236 (type = 'WWW' and substr(function_name,1,2) = 'QA')) and
237 (web_html_call is not null) and
238 (application_id is not null) and
239 (upper(web_html_call) not like 'ORACLE.APPS.%') and
240 (upper(web_html_call) not like '%.JSP%') ) then
241
242 select lower(application_short_name)
243 into applname
244 from fnd_application
245 where application_id = FUNCTION_VALIDATION.application_id;
246
247 web_html_call := 'oracle.apps.'||applname||'.'||web_html_call;
248 columns_name := columns_name||'WEB_HTML_CALL = '||web_html_call;
249 end if;
250 end;
251
252 if (form_id is not null and
253 web_html_call is not null and
254 upper(web_html_call) not like '%.JSP%' and
255 ((type='FORM' and substr(function_name,1,3) in ('WIP','INV','WMS','WMA')) or
256 (type='FORM' and substr(function_name,1,2)='QA') or
257 (type='WWW' and substr(function_name,1,3) in ('INV','WMS','WMA', 'WIP')) or
258 (type='WWW' and substr(function_name,1,2) = 'QA'))) then
259 form_id := '';
260 application_id := '';
261 type := 'MOBILE';
262 columns_name := columns_name||'FORM_ID = null'||fnd_global.newline;
263 columns_name := columns_name||'APPLICATION_ID = null'||fnd_global.newline;
264 columns_name := columns_name||'TYPE = MOBILE'||fnd_global.newline;
265 end if;
266
267 if (upper(web_html_call) like '%MOBILE%' and
268 function_name in ('PN_MOBILE_CUST_DIR',
269 'HZ_MOBILE_CUSTOMER',
270 'AP_OME_EXPENSES',
271 'AP_OME_EXPENSES_QUICK',
272 'AR_MAM_APPLICATION_FUNCTION')) then
273 type := 'MOBILE';
274 form_id := '';
275 application_id := '';
276 columns_name := columns_name||'FORM_ID = null'||fnd_global.newline;
277 columns_name := columns_name||'APPLICATION_ID = null'||fnd_global.newline;
278 columns_name := columns_name||'TYPE = MOBILE'||fnd_global.newline;
279 end if;
280
281 if (type = 'FORM' and
282 web_html_call is not null) then
283 web_html_call := '';
284 columns_name := columns_name||'WEB_HTML_CALL = null'||fnd_global.newline;
285 end if;
286
287 /*
288 +-----+-------------------------------+---------------------------------+-----+
289 | 8 | TYPE='FORM' & | Set REGION_APPLICATION_ID to | 30 |
290 | | REGION_APPLICATION_ID has data| null | |
291 +-----+-------------------------------+---------------------------------+-----+
292 */
293 if (type = 'FORM' and
294 region_application_id is not null) then
295 region_application_id := '';
296 columns_name := columns_name||'REGION_APPLICATION_ID = null'||
297 fnd_global.newline;
298 end if;
299
300 /*
301 +-----+-------------------------------+---------------------------------+-----+
302 | 9 | TYPE='JSP' & | Change TYPE to UNKNOWN | 36 |
303 | | WEB_HTML_CALL not like '%jsp%'| | |
304 +-----+-------------------------------+---------------------------------+-----+
305 */
306 if (type = 'JSP' and
307 upper(web_html_call) not like '%JSP%' and
308 upper(web_html_call) not like '%JAVASCRIPT%') then
309 type := 'UNKNOWN';
310 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
311 end if;
312
313 /*
314 +-----+-------------------------------+---------------------------------+-----+
315 | 10 | TYPE='JSP' & | Set FORM_ID to NULL | 44 |
316 | | FORM_ID has data & | Set APPLICATION_ID to NULL | |
317 | | APPLICATION_ID has data | | |
318 +-----+-------------------------------+---------------------------------+-----+
319 */
320 if (type = 'JSP' and
321 form_id is not null and
322 application_id is not null) then
323 form_id := '';
324 application_id := '';
325 columns_name := columns_name||'FORM_ID = null'||fnd_global.newline;
326 columns_name := columns_name||'APPLICATION_ID = null'||fnd_global.newline;
327 end if;
328
329 /*
330 +-----+-------------------------------+---------------------------------+-----+
331 | 11 | TYPE='WWW' & | Set FORM_ID to NULL | 98 |
332 | | FORM_ID has data & | Set APPLICATION_ID to NULL | |
333 | | APPLICATION_ID has data | | |
334 +-----+-------------------------------+---------------------------------+-----+
335 */
336 if (type = 'WWW' and
337 (form_id is not null or application_id is not null)) then
338 form_id := '';
339 application_id := '';
340 columns_name := columns_name||'FORM_ID = null'||fnd_global.newline;
341 columns_name := columns_name||'APPLICATION_ID = null'||fnd_global.newline;
342 end if;
343
344 /*
348 | | PARAMETERS is null & | | |
345 +-----+-------------------------------+---------------------------------+-----+
346 | 12 | TYPE='SUBFUNCTION' & | Chage TYPE to FORM | 353 |
347 | | FORM_ID has data & | | |
349 | | WEB_HTML_CALL is null & | | |
350 | | REGION_CODE is null | | |
351 +-----+----------------------------- -+---------------------------------+-----+
352 */
353 if ( type = 'SUBFUNCTION'
354 and form_id is not null
355 and parameters is null
356 and web_html_call is null
357 and region_code is null) then
358 type := 'FORM';
359 columns_name := columns_name||'TYPE = FORM'||fnd_global.newline;
360 end if;
361
362 /*
363 +-----+----------------------------- -+---------------------------------+-----+
364 | 13 | TYPE='SUBFUNCTION' & | Set REGION_CODE to null | 114 |
365 | | REGION_CODE has data & | | |
366 | | FORM_ID is null& | | |
367 | | PARAMETERS is null & | | |
368 | | WEB_HTML_CALL is null & | | |
369 +-----+----------------------------- -+---------------------------------+-----+
370 */
371 if ( type = 'SUBFUNCTION'
372 and form_id is null
373 and parameters is null
374 and web_html_call is null
375 and region_code is not null) then
376 region_code := '';
377 columns_name := columns_name||'REGION_CODE = null'||fnd_global.newline;
378 end if;
379
380 /*
381 +-----+----------------------------- -+---------------------------------+-----+
382 | 14 | TYPE='SUBFUNCTION' & | Change TYPE to JSP | 6 |
383 | | WEB_HTML_CALL has data & | | |
384 | | WEB_HTML_CALL like '%jsp%' | | |
385 | | REGION_CODE is null & | | |
386 | | FORM_ID is null & | | |
387 | | PARAMETERS is null | | |
388 +-----+-------------------------------+---------------------------------+-----+
389 */
390 if ( type = 'SUBFUNCTION'
391 and form_id is null
392 and parameters is null
393 and web_html_call is not null
394 and upper(web_html_call) like '%JSP%'
395 and region_code is null) then
396 type := 'JSP';
397 columns_name := columns_name||'TYPE = JSP'||fnd_global.newline;
398 end if;
399
400 /*
401 +-----+-------------------------------+---------------------------------+-----+
402 | 15 | TYPE='SUBFUNCTION' & | Change TYPE to UNKNOWN | 1 |
403 | | WEB_HTML_CALL has data & | | |
404 | | WEB_HTML_CALL like '%mailto%' | | |
405 | | REGION_CODE is null & | | |
406 | | FORM_ID is null & | | |
407 | | PARAMETERS is null | | |
408 +-----+-------------------------------+---------------------------------+-----+
409 */
410 if ( type = 'SUBFUNCTION'
411 and form_id is null
412 and parameters is null
413 and web_html_call is not null
414 and upper(web_html_call) not like '%JSP%'
415 and region_code is null) then
416 type := 'UNKNOWN';
417 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
418 end if;
419
420 /*
421 +-----+-------------------------------+---------------------------------+-----+
422 | 16 | TYPE='SUBFUNCTION' & | Change TYPE to FORM | 16 |
423 | | FORM_ID has data & | | |
424 | | PARAMETERS has data & | | |
425 | | WEB_HTML_CALL is null & | | |
426 | | REGION_CODE is null | | |
427 +-----+-------------------------------+---------------------------------+-----+
428 */
429 if ( type = 'SUBFUNCTION'
430 and form_id is not null
431 and parameters is not null
432 and web_html_call is null
433 and region_code is null ) then
434 type := 'FORM';
435 columns_name := columns_name||'TYPE = FORM'||fnd_global.newline;
436 end if;
437
438 /*
439 +-----+-------------------------------+---------------------------------+-----+
440 | 17 | TYPE='JTFWEBPORTLET' & | Change TYPE to UNKNOWN | 3 |
441 | | WEB_HTML_CALL is null | | |
442 +-----+-------------------------------+---------------------------------+-----+
443 */
444 if ( type = 'JTFWEBPORTLET'
445 and web_html_call is null) then
446 type := 'UNKNOWN';
447 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
448 end if;
449
450 /*
451 +-----+-------------------------------+---------------------------------+-----+
452 | 18 | TYPE='INTEROPJSP' & | Change TYPE to UNKNOWN | 5 |
453 | | WEB_HTML_CALL is null | | |
454 +-----+-------------------------------+---------------------------------+-----+
455 */
456 if ( type = 'INTEROPJSP'
457 and web_html_call is null) then
458 type := 'UNKNOWN';
459 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
460 end if;
461
462 /*
463 +-----+-------------------------------+---------------------------------+-----+
464 | 20 | TYPE='OBJECT' | Change TYPE to UNKNOWN | 26 |
465 +-----+-------------------------------+---------------------------------+-----+
466 */
470 end if;
467 if (type = 'OBJECT') then
468 type := 'UNKNOWN';
469 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
471
472 /*
473 +-----+-------------------------------+---------------------------------+-----+
474 | 21 | TYPE='HTML' & | Change TYPE to JSP | 2 |
475 | | WEB_HTML_CALL like %jsp% | | |
476 +-----+-------------------------------+---------------------------------+-----+
477 */
478 if (type = 'HTML') then
479 type := 'UNKNOWN';
480 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
481 end if;
482
483 /* Bug4507567 - Added for R12
484 +-----+-------------------------------+---------------------------------+-----+
485 | | TYPE='INTERFACE'|| | Change TYPE to UNKNOWN | |
486 | | TYPE='SB_INDIRECT_OP'& | | |
487 | | irep_method_name is null | | |
488 | | irep_scope is null | | |
489 | | irep_lifecycle is null | | |
490 | | irep_description is null | | |
491 | | Irep_class_id is null | | |
492 +-----+-------------------------------+---------------------------------+-----+
493
494 if ((type = 'INTERFACE' or type = 'SB_INDIRECT_OP')
495 and irep_method_name is null
496 and irep_scope is null
497 and irep_lifecycle is null
498 and irep_description is null
499 and irep_class_id is null) then
500 type := 'UNKNOWN';
501 columns_name := columns_name||'TYPE = UNKNOWN'||fnd_global.newline;
502 end if;
503 */
504
505 return(columns_name);
506
507 end FUNCTION_VALIDATION;
508
509
510 procedure INSERT_ROW (
511 X_ROWID in out nocopy VARCHAR2,
512 X_FUNCTION_ID in NUMBER,
513 X_WEB_HOST_NAME in VARCHAR2,
514 X_WEB_AGENT_NAME in VARCHAR2,
515 X_WEB_HTML_CALL in VARCHAR2,
516 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
517 X_WEB_SECURED in VARCHAR2,
518 X_WEB_ICON in VARCHAR2,
519 X_OBJECT_ID in NUMBER,
520 X_REGION_APPLICATION_ID in NUMBER,
521 X_REGION_CODE in VARCHAR2,
522 X_FUNCTION_NAME in VARCHAR2,
523 X_APPLICATION_ID in NUMBER,
524 X_FORM_ID in NUMBER,
525 X_PARAMETERS in VARCHAR2,
526 X_TYPE in VARCHAR2,
527 X_USER_FUNCTION_NAME in VARCHAR2,
528 X_DESCRIPTION in VARCHAR2,
529 X_CREATION_DATE in DATE,
530 X_CREATED_BY in NUMBER,
531 X_LAST_UPDATE_DATE in DATE,
532 X_LAST_UPDATED_BY in NUMBER,
533 X_LAST_UPDATE_LOGIN in NUMBER
534 ) is
535 begin
536 fnd_form_functions_pkg.INSERT_ROW(
537 X_ROWID => X_ROWID,
538 X_FUNCTION_ID => X_FUNCTION_ID,
539 X_WEB_HOST_NAME => X_WEB_HOST_NAME,
540 X_WEB_AGENT_NAME => X_WEB_AGENT_NAME,
541 X_WEB_HTML_CALL => X_WEB_HTML_CALL,
542 X_WEB_ENCRYPT_PARAMETERS => X_WEB_ENCRYPT_PARAMETERS,
543 X_WEB_SECURED => X_WEB_SECURED,
544 X_WEB_ICON => X_WEB_ICON,
545 X_OBJECT_ID => X_OBJECT_ID,
546 X_REGION_APPLICATION_ID => X_REGION_APPLICATION_ID,
547 X_REGION_CODE => X_REGION_CODE,
548 X_FUNCTION_NAME => X_FUNCTION_NAME,
549 X_APPLICATION_ID => X_APPLICATION_ID,
550 X_FORM_ID => X_FORM_ID,
551 X_PARAMETERS => X_PARAMETERS,
552 X_TYPE => X_TYPE,
553 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
554 X_DESCRIPTION => X_DESCRIPTION,
555 X_CREATION_DATE => X_CREATION_DATE,
556 X_CREATED_BY => X_CREATED_BY,
557 X_LAST_UPDATE_DATE => X_LAST_UPDATE_DATE,
558 X_LAST_UPDATED_BY => X_LAST_UPDATED_BY,
559 X_LAST_UPDATE_LOGIN => X_LAST_UPDATE_LOGIN,
560 X_MAINTENANCE_MODE_SUPPORT => NULL,
561 X_CONTEXT_DEPENDENCE => NULL,
562 X_JRAD_REF_PATH => NULL);
563 end INSERT_ROW;
564
565 procedure LOCK_ROW (
566 X_FUNCTION_ID in NUMBER,
567 X_WEB_HOST_NAME in VARCHAR2,
568 X_WEB_AGENT_NAME in VARCHAR2,
569 X_WEB_HTML_CALL in VARCHAR2,
570 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
571 X_WEB_SECURED in VARCHAR2,
572 X_WEB_ICON in VARCHAR2,
573 X_OBJECT_ID in NUMBER,
574 X_REGION_APPLICATION_ID in NUMBER,
575 X_REGION_CODE in VARCHAR2,
576 X_FUNCTION_NAME in VARCHAR2,
577 X_APPLICATION_ID in NUMBER,
578 X_FORM_ID in NUMBER,
579 X_PARAMETERS in VARCHAR2,
580 X_TYPE in VARCHAR2,
581 X_USER_FUNCTION_NAME in VARCHAR2,
582 X_DESCRIPTION in VARCHAR2
583 ) is
584 begin
585 fnd_form_functions_pkg.LOCK_ROW(
586 X_FUNCTION_ID => X_FUNCTION_ID,
587 X_WEB_HOST_NAME => X_WEB_HOST_NAME,
588 X_WEB_AGENT_NAME => X_WEB_AGENT_NAME,
589 X_WEB_HTML_CALL => X_WEB_HTML_CALL,
590 X_WEB_ENCRYPT_PARAMETERS => X_WEB_ENCRYPT_PARAMETERS,
591 X_WEB_SECURED => X_WEB_SECURED,
592 X_WEB_ICON => X_WEB_ICON,
593 X_OBJECT_ID => X_OBJECT_ID,
594 X_REGION_APPLICATION_ID => X_REGION_APPLICATION_ID,
595 X_REGION_CODE => X_REGION_CODE,
596 X_FUNCTION_NAME => X_FUNCTION_NAME,
597 X_APPLICATION_ID => X_APPLICATION_ID,
598 X_FORM_ID => X_FORM_ID,
599 X_PARAMETERS => X_PARAMETERS,
600 X_TYPE => X_TYPE,
601 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
602 X_DESCRIPTION => X_DESCRIPTION,
606
603 X_MAINTENANCE_MODE_SUPPORT => NULL,
604 X_CONTEXT_DEPENDENCE => NULL,
605 X_JRAD_REF_PATH => NULL);
607 end LOCK_ROW;
608
609 procedure UPDATE_ROW (
610 X_FUNCTION_ID in NUMBER,
611 X_WEB_HOST_NAME in VARCHAR2,
612 X_WEB_AGENT_NAME in VARCHAR2,
613 X_WEB_HTML_CALL in VARCHAR2,
614 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
615 X_WEB_SECURED in VARCHAR2,
616 X_WEB_ICON in VARCHAR2,
617 X_OBJECT_ID in NUMBER,
618 X_REGION_APPLICATION_ID in NUMBER,
619 X_REGION_CODE in VARCHAR2,
620 X_FUNCTION_NAME in VARCHAR2,
621 X_APPLICATION_ID in NUMBER,
622 X_FORM_ID in NUMBER,
623 X_PARAMETERS in VARCHAR2,
624 X_TYPE in VARCHAR2,
625 X_USER_FUNCTION_NAME in VARCHAR2,
626 X_DESCRIPTION in VARCHAR2,
627 X_LAST_UPDATE_DATE in DATE,
628 X_LAST_UPDATED_BY in NUMBER,
629 X_LAST_UPDATE_LOGIN in NUMBER
630 ) is
631 begin
632 fnd_form_functions_pkg.UPDATE_ROW(
633 X_FUNCTION_ID => X_FUNCTION_ID,
634 X_WEB_HOST_NAME => X_WEB_HOST_NAME,
635 X_WEB_AGENT_NAME => X_WEB_AGENT_NAME,
636 X_WEB_HTML_CALL => X_WEB_HTML_CALL,
637 X_WEB_ENCRYPT_PARAMETERS => X_WEB_ENCRYPT_PARAMETERS,
638 X_WEB_SECURED => X_WEB_SECURED,
639 X_WEB_ICON => X_WEB_ICON,
640 X_OBJECT_ID => X_OBJECT_ID,
641 X_REGION_APPLICATION_ID => X_REGION_APPLICATION_ID,
642 X_REGION_CODE => X_REGION_CODE,
643 X_FUNCTION_NAME => X_FUNCTION_NAME,
644 X_APPLICATION_ID => X_APPLICATION_ID,
645 X_FORM_ID => X_FORM_ID,
646 X_PARAMETERS => X_PARAMETERS,
647 X_TYPE => X_TYPE,
648 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
649 X_DESCRIPTION => X_DESCRIPTION,
650 X_LAST_UPDATE_DATE => X_LAST_UPDATE_DATE,
651 X_LAST_UPDATED_BY => X_LAST_UPDATED_BY,
652 X_LAST_UPDATE_LOGIN => X_LAST_UPDATE_LOGIN,
653 X_MAINTENANCE_MODE_SUPPORT => NULL,
654 X_CONTEXT_DEPENDENCE => NULL,
655 X_JRAD_REF_PATH => NULL);
656 end UPDATE_ROW;
657
658 /* Overloaded version below */
659 procedure LOAD_ROW (
660 X_FUNCTION_NAME in VARCHAR2,
661 X_APPLICATION_SHORT_NAME in VARCHAR2,
662 X_FORM_NAME in VARCHAR2,
663 X_PARAMETERS in VARCHAR2,
664 X_TYPE in VARCHAR2,
665 X_WEB_HOST_NAME in VARCHAR2,
666 X_WEB_AGENT_NAME in VARCHAR2,
667 X_WEB_HTML_CALL in VARCHAR2,
668 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
669 X_WEB_SECURED in VARCHAR2,
670 X_WEB_ICON in VARCHAR2,
671 X_OBJECT_NAME in VARCHAR2,
672 X_REGION_APPLICATION_NAME in VARCHAR2,
673 X_REGION_CODE in VARCHAR2,
674 X_USER_FUNCTION_NAME in VARCHAR2,
675 X_DESCRIPTION in VARCHAR2,
676 X_OWNER in VARCHAR2,
677 X_CUSTOM_MODE in VARCHAR2
678 ) is
679 begin
680 fnd_form_functions_pkg.LOAD_ROW (
681 X_FUNCTION_NAME => X_FUNCTION_NAME,
682 X_APPLICATION_SHORT_NAME => X_APPLICATION_SHORT_NAME,
683 X_FORM_NAME => X_FORM_NAME,
684 X_PARAMETERS => X_PARAMETERS,
685 X_TYPE => X_TYPE,
686 X_WEB_HOST_NAME => X_WEB_HOST_NAME,
687 X_WEB_AGENT_NAME => X_WEB_AGENT_NAME,
688 X_WEB_HTML_CALL => X_WEB_HTML_CALL,
689 X_WEB_ENCRYPT_PARAMETERS => X_WEB_ENCRYPT_PARAMETERS,
690 X_WEB_SECURED => X_WEB_SECURED,
691 X_WEB_ICON => X_WEB_ICON,
692 X_OBJECT_NAME => X_OBJECT_NAME,
693 X_REGION_APPLICATION_NAME => X_REGION_APPLICATION_NAME,
694 X_REGION_CODE => X_REGION_CODE,
695 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
696 X_DESCRIPTION => X_DESCRIPTION,
697 X_OWNER => X_OWNER,
698 X_CUSTOM_MODE => X_CUSTOM_MODE,
699 X_LAST_UPDATE_DATE => NULL,
700 X_MAINTENANCE_MODE_SUPPORT => NULL,
701 X_CONTEXT_DEPENDENCE => NULL,
702 X_JRAD_REF_PATH => NULL
703 );
704 end LOAD_ROW;
705
706 /* Overloaded version above */
707 procedure LOAD_ROW (
708 X_FUNCTION_NAME in VARCHAR2,
709 X_APPLICATION_SHORT_NAME in VARCHAR2,
710 X_FORM_NAME in VARCHAR2,
711 X_PARAMETERS in VARCHAR2,
712 X_TYPE in VARCHAR2,
713 X_WEB_HOST_NAME in VARCHAR2,
714 X_WEB_AGENT_NAME in VARCHAR2,
715 X_WEB_HTML_CALL in VARCHAR2,
716 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
717 X_WEB_SECURED in VARCHAR2,
718 X_WEB_ICON in VARCHAR2,
719 X_OBJECT_NAME in VARCHAR2,
720 X_REGION_APPLICATION_NAME in VARCHAR2,
721 X_REGION_CODE in VARCHAR2,
722 X_USER_FUNCTION_NAME in VARCHAR2,
723 X_DESCRIPTION in VARCHAR2,
724 X_OWNER in VARCHAR2,
725 X_CUSTOM_MODE in VARCHAR2,
726 X_LAST_UPDATE_DATE in VARCHAR2,
727 X_MAINTENANCE_MODE_SUPPORT in VARCHAR2, /* NULL='NONE' */
728 X_CONTEXT_DEPENDENCE in VARCHAR2, /* NULL='RESP' */
729 X_JRAD_REF_PATH in VARCHAR2 default NULL
730 ) is
731 -- The following four variables could be null;
732 app_id number;
733 rapp_id number;
734 frm_id number;
735 obj_id number;
736 fun_id number;
737 row_id varchar2(64);
738 f_luby number; -- entity owner in file
739 f_ludate date; -- entity update date in file
740 db_luby number; -- entity owner in db
741 db_ludate date; -- entity update date in db
742 l_form_name varchar2(4000); -- bug2438503
743 l_object_name varchar2(4000); -- bug2438503
744 l_region_application_name varchar2(4000); -- bug2438503
745 l_parameters varchar2(4000); --bug2662933 added the following variables.
746 l_web_host_name varchar2(4000);
750 l_web_secured varchar2(4000);
747 l_web_agent_name varchar2(4000);
748 l_web_html_call varchar2(4000);
749 l_web_encrypt_parameters varchar2(4000);
751 l_web_icon varchar2(4000);
752 l_region_code varchar2(4000);
753
754 L_MAINTENANCE_MODE_SUPPORT VARCHAR2(8) := X_MAINTENANCE_MODE_SUPPORT;
755 L_CONTEXT_DEPENDENCE VARCHAR2(8) := X_CONTEXT_DEPENDENCE;
756
757 -- added for adding new column JRAD_REF_PATH for bug 2747925
758 L_JRAD_REF_PATH VARCHAR2(1000) := X_JRAD_REF_PATH;
759
760 begin
761 if (L_MAINTENANCE_MODE_SUPPORT is NULL) then
762 L_MAINTENANCE_MODE_SUPPORT := 'NONE';
763 end if;
764
765 if (L_CONTEXT_DEPENDENCE is NULL) then
766 L_CONTEXT_DEPENDENCE := 'RESP';
767 end if;
768
769
770 begin
771 select application_id into app_id
772 from fnd_application
773 where application_short_name = X_APPLICATION_SHORT_NAME;
774 exception when no_data_found then
775 app_id := null;
776 end;
777
778 -- Bug2662933 Get possible null values before calling UPDATE_ROW.
779
780 select decode(X_PARAMETERS, fnd_load_util.null_value, null,
781 null, X_PARAMETERS, X_PARAMETERS),
782 decode(X_WEB_HOST_NAME, fnd_load_util.null_value, null,
783 null, X_WEB_HOST_NAME, X_WEB_HOST_NAME),
784 decode(X_WEB_AGENT_NAME, fnd_load_util.null_value, null,
785 null, X_WEB_AGENT_NAME, X_WEB_AGENT_NAME),
786 decode(X_WEB_HTML_CALL, fnd_load_util.null_value, null,
787 null, X_WEB_HTML_CALL, X_WEB_HTML_CALL),
788 decode(X_WEB_ENCRYPT_PARAMETERS, fnd_load_util.null_value, null,
789 null, X_WEB_ENCRYPT_PARAMETERS, X_WEB_ENCRYPT_PARAMETERS),
790 decode(X_WEB_SECURED, fnd_load_util.null_value, null,
791 null, X_WEB_SECURED, X_WEB_SECURED),
792 decode(X_WEB_ICON, fnd_load_util.null_value, null,
793 null, X_WEB_ICON, X_WEB_ICON),
794 decode(X_REGION_CODE, fnd_load_util.null_value, null,
795 null, X_REGION_CODE, X_REGION_CODE),
796 decode(X_JRAD_REF_PATH, fnd_load_util.null_value, null,
797 null, X_JRAD_REF_PATH, X_JRAD_REF_PATH)
798 into l_parameters, l_web_host_name, l_web_agent_name,
799 l_web_html_call, l_web_encrypt_parameters, l_web_secured,
800 l_web_icon, l_region_code, L_JRAD_REF_PATH
801 from dual;
802
803 select decode(X_FORM_NAME,
804 fnd_load_util.null_value, null,
805 null, X_FORM_NAME,
806 X_FORM_NAME) into l_form_name from dual;
807
808 if (l_form_name is not null) then
809 begin
810 select form_id into frm_id
811 from fnd_form
812 where form_name = X_FORM_NAME
813 and application_id = app_id;
814 exception when no_data_found then
815 frm_id := null;
816 end;
817 else frm_id := null;
818 end if;
819
820 select decode(X_OBJECT_NAME,
821 fnd_load_util.null_value, null,
822 null, X_OBJECT_NAME,
823 X_OBJECT_NAME) into l_object_name from dual;
824
825 if (l_object_name is not null) then
826 begin
827 select object_id into obj_id
828 from fnd_objects
829 where obj_name = X_OBJECT_NAME;
830 exception when no_data_found then
831 obj_id := null;
832 end;
833 else obj_id := null;
834 end if;
835
836 select decode(X_REGION_APPLICATION_NAME,
837 fnd_load_util.null_value, null,
838 null, X_REGION_APPLICATION_NAME,
839 X_REGION_APPLICATION_NAME)
840 into l_region_application_name from dual;
841
842 if (l_region_application_name is not null) then
843 begin
844 select application_id into rapp_id
845 from fnd_application
846 where application_short_name = X_REGION_APPLICATION_NAME;
847 exception when no_data_found then
848 rapp_id := null;
849 end;
850 else rapp_id := null;
851 end if;
852
853 -- Translate owner to file_last_updated_by
854 f_luby := fnd_load_util.owner_id(x_owner);
855
856 -- Translate char last_update_date to date
857 f_ludate := nvl(to_date(x_last_update_date, 'YYYY/MM/DD'), sysdate);
858
859 select function_id, last_updated_by, last_update_date
860 into fun_id, db_luby, db_ludate
861 from fnd_form_functions
862 where function_name = X_FUNCTION_NAME;
863
864 if (fnd_load_util.upload_test(f_luby, f_ludate, db_luby,
865 db_ludate, X_CUSTOM_MODE)) then
866 fnd_form_functions_pkg.UPDATE_ROW (
867 X_FUNCTION_ID => fun_id,
868 X_WEB_HOST_NAME => l_WEB_HOST_NAME,
869 X_WEB_AGENT_NAME => l_WEB_AGENT_NAME,
870 X_WEB_HTML_CALL => l_WEB_HTML_CALL,
871 X_WEB_ENCRYPT_PARAMETERS => l_WEB_ENCRYPT_PARAMETERS,
872 X_WEB_SECURED => l_WEB_SECURED,
873 X_WEB_ICON => l_WEB_ICON,
874 X_OBJECT_ID => obj_id,
875 X_REGION_APPLICATION_ID => rapp_id,
876 X_REGION_CODE => l_REGION_CODE,
877 X_FUNCTION_NAME => X_FUNCTION_NAME,
878 X_APPLICATION_ID => app_id,
879 X_FORM_ID => frm_id,
880 X_PARAMETERS => l_PARAMETERS,
881 X_TYPE => X_TYPE,
882 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
883 X_DESCRIPTION => X_DESCRIPTION,
884 X_LAST_UPDATE_DATE => f_ludate,
885 X_LAST_UPDATED_BY => f_luby,
886 X_LAST_UPDATE_LOGIN => 0,
887 X_MAINTENANCE_MODE_SUPPORT => L_MAINTENANCE_MODE_SUPPORT,
888 X_CONTEXT_DEPENDENCE => L_CONTEXT_DEPENDENCE,
889 X_JRAD_REF_PATH => L_JRAD_REF_PATH);
890 end if;
894
891
892 exception
893 when NO_DATA_FOUND then
895 select fnd_form_functions_s.nextval into fun_id from dual;
896
897 fnd_form_functions_pkg.INSERT_ROW(
898 X_ROWID => row_id,
899 X_FUNCTION_ID => fun_id,
900 X_WEB_HOST_NAME => l_WEB_HOST_NAME,
901 X_WEB_AGENT_NAME => l_WEB_AGENT_NAME,
902 X_WEB_HTML_CALL => l_WEB_HTML_CALL,
903 X_WEB_ENCRYPT_PARAMETERS => l_WEB_ENCRYPT_PARAMETERS,
904 X_WEB_SECURED => l_WEB_SECURED,
905 X_WEB_ICON => l_WEB_ICON,
906 X_OBJECT_ID => obj_id,
907 X_REGION_APPLICATION_ID => rapp_id,
908 X_REGION_CODE => l_REGION_CODE,
909 X_FUNCTION_NAME => X_FUNCTION_NAME,
910 X_APPLICATION_ID => app_id,
911 X_FORM_ID => frm_id,
912 X_PARAMETERS => l_PARAMETERS,
913 X_TYPE => X_TYPE,
914 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
915 X_DESCRIPTION => X_DESCRIPTION,
916 X_CREATION_DATE => f_ludate,
917 X_CREATED_BY => f_luby,
918 X_LAST_UPDATE_DATE => f_ludate,
919 X_LAST_UPDATED_BY => f_luby,
920 X_LAST_UPDATE_LOGIN => 0,
921 X_MAINTENANCE_MODE_SUPPORT => L_MAINTENANCE_MODE_SUPPORT,
922 X_CONTEXT_DEPENDENCE => L_CONTEXT_DEPENDENCE,
923 X_JRAD_REF_PATH => L_JRAD_REF_PATH);
924 end LOAD_ROW;
925
926 procedure DELETE_ROW (
927 X_FUNCTION_ID in NUMBER
928 ) is
929 begin
930 delete from FND_FORM_FUNCTIONS
931 where FUNCTION_ID = X_FUNCTION_ID;
932
933 if (sql%notfound) then
934 raise no_data_found;
935 else
936 -- This means that a function was deleted.
937 -- Added for Function Security Cache Invalidation Project
938 fnd_function_security_cache.delete_function(X_FUNCTION_ID);
939 end if;
940
941 delete from FND_FORM_FUNCTIONS_TL
942 where FUNCTION_ID = X_FUNCTION_ID;
943
944 if (sql%notfound) then
945 raise no_data_found;
946 end if;
947 end DELETE_ROW;
948
949 procedure ADD_LANGUAGE
950 is
951 begin
952 /* Mar/19/03 requested by Ric Ginsberg */
953 /* The following delete and update statements are commented out */
954 /* as a quick workaround to fix the time-consuming table handler issue */
955 /* Eventually we'll need to turn them into a separate fix_language procedure */
956 /*
957
958 delete from FND_FORM_FUNCTIONS_TL T
959 where not exists
960 (select NULL
961 from FND_FORM_FUNCTIONS B
962 where B.FUNCTION_ID = T.FUNCTION_ID
963 );
964
965 update FND_FORM_FUNCTIONS_TL T set (
966 USER_FUNCTION_NAME,
967 DESCRIPTION
968 ) = (select
969 B.USER_FUNCTION_NAME,
970 B.DESCRIPTION
971 from FND_FORM_FUNCTIONS_TL B
972 where B.FUNCTION_ID = T.FUNCTION_ID
973 and B.LANGUAGE = T.SOURCE_LANG)
974 where (
975 T.FUNCTION_ID,
976 T.LANGUAGE
977 ) in (select
978 SUBT.FUNCTION_ID,
979 SUBT.LANGUAGE
980 from FND_FORM_FUNCTIONS_TL SUBB, FND_FORM_FUNCTIONS_TL SUBT
981 where SUBB.FUNCTION_ID = SUBT.FUNCTION_ID
982 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
983 and (SUBB.USER_FUNCTION_NAME <> SUBT.USER_FUNCTION_NAME
984 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
985 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
986 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
987 ));
988 */
989
990 insert /*+ append parallel(TT) */ into
991 FND_FORM_FUNCTIONS_TL TT(
992 FUNCTION_ID,
993 USER_FUNCTION_NAME,
994 CREATION_DATE,
995 CREATED_BY,
996 LAST_UPDATE_DATE,
997 LAST_UPDATED_BY,
998 LAST_UPDATE_LOGIN,
999 DESCRIPTION,
1000 LANGUAGE,
1001 SOURCE_LANG
1002 ) select /*+ parallel(V) parallel(T) use_nl(T) */ V.* from
1003 ( select /*+ no_merge ordered parallel(B) */
1004 B.FUNCTION_ID,
1005 B.USER_FUNCTION_NAME,
1006 B.CREATION_DATE,
1007 B.CREATED_BY,
1008 B.LAST_UPDATE_DATE,
1009 B.LAST_UPDATED_BY,
1010 B.LAST_UPDATE_LOGIN,
1011 B.DESCRIPTION,
1012 L.LANGUAGE_CODE,
1013 B.SOURCE_LANG
1014 from FND_FORM_FUNCTIONS_TL B, FND_LANGUAGES L
1015 where L.INSTALLED_FLAG in ('I', 'B')
1016 and B.LANGUAGE = userenv('LANG')
1017 )V, FND_FORM_FUNCTIONS_TL T
1018 where T.function_id(+) = V.function_id
1019 and T.language(+) = V.language_code
1020 and T.function_id is NULL;
1021 end ADD_LANGUAGE;
1022
1023 /* Overloaded version below */
1024 procedure TRANSLATE_ROW (
1025 X_FUNCTION_ID in NUMBER,
1026 X_USER_FUNCTION_NAME in VARCHAR2,
1027 X_DESCRIPTION in VARCHAR2,
1028 X_OWNER in VARCHAR2,
1029 X_CUSTOM_MODE in VARCHAR2
1030 ) is
1031 begin
1032 fnd_form_functions_pkg.TRANSLATE_ROW (
1033 X_FUNCTION_ID => X_FUNCTION_ID,
1034 X_USER_FUNCTION_NAME => X_USER_FUNCTION_NAME,
1035 X_DESCRIPTION => X_DESCRIPTION,
1036 X_OWNER => X_OWNER,
1037 X_CUSTOM_MODE => X_CUSTOM_MODE,
1038 X_LAST_UPDATE_DATE => null
1039 );
1040 end TRANSLATE_ROW;
1041
1042 /* Overloaded version above */
1043 procedure TRANSLATE_ROW (
1044 X_FUNCTION_ID in NUMBER,
1045 X_USER_FUNCTION_NAME in VARCHAR2,
1046 X_DESCRIPTION in VARCHAR2,
1047 X_OWNER in VARCHAR2,
1048 X_CUSTOM_MODE in VARCHAR2,
1049 X_LAST_UPDATE_DATE in VARCHAR2
1050 ) is
1054 db_ludate date; -- entity update date in db
1051 f_luby number; -- entity owner in file
1052 f_ludate date; -- entity update date in file
1053 db_luby number; -- entity owner in db
1055 begin
1056 -- Translate owner to file_last_updated_by
1057 f_luby := fnd_load_util.owner_id(x_owner);
1058
1059 -- Translate char last_update_date to date
1060 f_ludate := nvl(to_date(x_last_update_date, 'YYYY/MM/DD'), sysdate);
1061
1062 select LAST_UPDATED_BY, LAST_UPDATE_DATE
1063 into db_luby, db_ludate
1064 from FND_FORM_FUNCTIONS_TL
1065 where FUNCTION_ID = X_FUNCTION_ID
1066 and userenv('LANG') = LANGUAGE;
1067
1068 if (fnd_load_util.upload_test(f_luby, f_ludate, db_luby,
1069 db_ludate, X_CUSTOM_MODE)) then
1070 update FND_FORM_FUNCTIONS_TL set
1071 USER_FUNCTION_NAME = X_USER_FUNCTION_NAME,
1072 DESCRIPTION = X_DESCRIPTION,
1073 LAST_UPDATE_DATE = f_ludate,
1074 LAST_UPDATED_BY = f_luby,
1075 LAST_UPDATE_LOGIN = 0,
1076 SOURCE_LANG = userenv('LANG')
1077 where FUNCTION_ID = X_FUNCTION_ID
1078 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
1079 end if;
1080
1081 if (sql%notfound) then
1082 raise no_data_found;
1083 end if;
1084 end TRANSLATE_ROW;
1085
1086 procedure INSERT_ROW (
1087 X_ROWID in out nocopy VARCHAR2,
1088 X_FUNCTION_ID in NUMBER,
1089 X_WEB_HOST_NAME in VARCHAR2,
1090 X_WEB_AGENT_NAME in VARCHAR2,
1091 X_WEB_HTML_CALL in VARCHAR2,
1092 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
1093 X_WEB_SECURED in VARCHAR2,
1094 X_WEB_ICON in VARCHAR2,
1095 X_OBJECT_ID in NUMBER,
1096 X_REGION_APPLICATION_ID in NUMBER,
1097 X_REGION_CODE in VARCHAR2,
1098 X_FUNCTION_NAME in VARCHAR2,
1099 X_APPLICATION_ID in NUMBER,
1100 X_FORM_ID in NUMBER,
1101 X_PARAMETERS in VARCHAR2,
1102 X_TYPE in VARCHAR2,
1103 X_USER_FUNCTION_NAME in VARCHAR2,
1104 X_DESCRIPTION in VARCHAR2,
1105 X_CREATION_DATE in DATE,
1106 X_CREATED_BY in NUMBER,
1107 X_LAST_UPDATE_DATE in DATE,
1108 X_LAST_UPDATED_BY in NUMBER,
1109 X_LAST_UPDATE_LOGIN in NUMBER,
1110 X_MAINTENANCE_MODE_SUPPORT in VARCHAR2, /* NULL='NONE' */
1111 X_CONTEXT_DEPENDENCE in VARCHAR2, /* NULL='RESP' */
1112 X_JRAD_REF_PATH in VARCHAR2 default NULL
1113 ) is
1114 cursor C is select ROWID from FND_FORM_FUNCTIONS
1115 where FUNCTION_ID = X_FUNCTION_ID;
1116 L_MAINTENANCE_MODE_SUPPORT VARCHAR2(8) := X_MAINTENANCE_MODE_SUPPORT;
1117 L_CONTEXT_DEPENDENCE VARCHAR2(8) := X_CONTEXT_DEPENDENCE;
1118
1119 -- Function type validation purpose arguments
1120 L_APPLICATION_ID NUMBER;
1121 L_FORM_ID NUMBER;
1122 L_TYPE VARCHAR2(30);
1123 L_PARAMETERS VARCHAR2(2000);
1124 L_WEB_HTML_CALL VARCHAR2(240);
1125 L_REGION_APPLICATION_ID NUMBER;
1126 L_REGION_CODE VARCHAR2(30);
1127 columns_name VARCHAR2(2000);
1128
1129 begin
1130 if (L_MAINTENANCE_MODE_SUPPORT is NULL) then
1131 L_MAINTENANCE_MODE_SUPPORT := 'NONE';
1132 end if;
1133
1134 if (L_CONTEXT_DEPENDENCE is NULL) then
1135 L_CONTEXT_DEPENDENCE := 'RESP';
1136 end if;
1137
1138 -- Function type validation
1139 L_APPLICATION_ID := X_APPLICATION_ID;
1140 L_FORM_ID := X_FORM_ID;
1141 L_TYPE := X_TYPE;
1142 L_PARAMETERS := X_PARAMETERS;
1143 L_WEB_HTML_CALL := X_WEB_HTML_CALL;
1144 L_REGION_APPLICATION_ID := X_REGION_APPLICATION_ID;
1145 L_REGION_CODE := X_REGION_CODE;
1146
1147 columns_name := FUNCTION_VALIDATION(L_APPLICATION_ID,
1148 L_FORM_ID,
1149 L_TYPE,
1150 L_PARAMETERS,
1151 L_WEB_HTML_CALL,
1152 X_WEB_HOST_NAME,
1153 L_REGION_APPLICATION_ID,
1154 L_REGION_CODE,
1155 X_FUNCTION_NAME);
1156
1157 insert into FND_FORM_FUNCTIONS (
1158 WEB_ICON,
1159 WEB_HOST_NAME,
1160 WEB_AGENT_NAME,
1161 WEB_HTML_CALL,
1162 WEB_ENCRYPT_PARAMETERS,
1163 WEB_SECURED,
1164 OBJECT_ID,
1165 REGION_APPLICATION_ID,
1166 REGION_CODE,
1167 FUNCTION_ID,
1168 FUNCTION_NAME,
1169 APPLICATION_ID,
1170 FORM_ID,
1171 PARAMETERS,
1172 TYPE,
1173 CREATION_DATE,
1174 CREATED_BY,
1175 LAST_UPDATE_DATE,
1176 LAST_UPDATED_BY,
1177 LAST_UPDATE_LOGIN,
1178 MAINTENANCE_MODE_SUPPORT,
1179 CONTEXT_DEPENDENCE,
1180 JRAD_REF_PATH
1181 ) values (
1182 X_WEB_ICON,
1183 X_WEB_HOST_NAME,
1184 X_WEB_AGENT_NAME,
1185 L_WEB_HTML_CALL,
1186 X_WEB_ENCRYPT_PARAMETERS,
1187 X_WEB_SECURED,
1188 X_OBJECT_ID,
1189 L_REGION_APPLICATION_ID,
1190 L_REGION_CODE,
1191 X_FUNCTION_ID,
1192 X_FUNCTION_NAME,
1193 L_APPLICATION_ID,
1194 L_FORM_ID,
1195 L_PARAMETERS,
1196 L_TYPE,
1197 X_CREATION_DATE,
1198 X_CREATED_BY,
1199 X_LAST_UPDATE_DATE,
1200 X_LAST_UPDATED_BY,
1201 X_LAST_UPDATE_LOGIN,
1202 L_MAINTENANCE_MODE_SUPPORT,
1203 L_CONTEXT_DEPENDENCE,
1204 X_JRAD_REF_PATH
1205 );
1206
1207 -- Added for Function Security Cache Invalidation Project
1208 fnd_function_security_cache.insert_function(X_FUNCTION_ID);
1209
1210 if (columns_name is not null) then
1211 -- print out message about which column has been changed to
1212 -- meet the function type validation rule
1213 fnd_message.set_name('FND', 'FUNCTION_TYPE_COLUMNS_CHANGED');
1214 fnd_message.set_token('NAME', X_FUNCTION_NAME);
1215 fnd_message.set_token('COLUMNS', columns_name);
1216 end if;
1217
1221 CREATION_DATE,
1218 insert into FND_FORM_FUNCTIONS_TL (
1219 FUNCTION_ID,
1220 USER_FUNCTION_NAME,
1222 CREATED_BY,
1223 LAST_UPDATE_DATE,
1224 LAST_UPDATED_BY,
1225 LAST_UPDATE_LOGIN,
1226 DESCRIPTION,
1227 LANGUAGE,
1228 SOURCE_LANG
1229 ) select
1230 X_FUNCTION_ID,
1231 X_USER_FUNCTION_NAME,
1232 X_CREATION_DATE,
1233 X_CREATED_BY,
1234 X_LAST_UPDATE_DATE,
1235 X_LAST_UPDATED_BY,
1236 X_LAST_UPDATE_LOGIN,
1237 X_DESCRIPTION,
1238 L.LANGUAGE_CODE,
1239 userenv('LANG')
1240 from FND_LANGUAGES L
1241 where L.INSTALLED_FLAG in ('I', 'B')
1242 and not exists
1243 (select NULL
1244 from FND_FORM_FUNCTIONS_TL T
1245 where T.FUNCTION_ID = X_FUNCTION_ID
1246 and T.LANGUAGE = L.LANGUAGE_CODE);
1247
1248 open c;
1249 fetch c into X_ROWID;
1250 if (c%notfound) then
1251 close c;
1252 raise no_data_found;
1253 end if;
1254 close c;
1255
1256 end INSERT_ROW;
1257
1258 procedure LOCK_ROW (
1259 X_FUNCTION_ID in NUMBER,
1260 X_WEB_HOST_NAME in VARCHAR2,
1261 X_WEB_AGENT_NAME in VARCHAR2,
1262 X_WEB_HTML_CALL in VARCHAR2,
1263 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
1264 X_WEB_SECURED in VARCHAR2,
1265 X_WEB_ICON in VARCHAR2,
1266 X_OBJECT_ID in NUMBER,
1267 X_REGION_APPLICATION_ID in NUMBER,
1268 X_REGION_CODE in VARCHAR2,
1269 X_FUNCTION_NAME in VARCHAR2,
1270 X_APPLICATION_ID in NUMBER,
1271 X_FORM_ID in NUMBER,
1272 X_PARAMETERS in VARCHAR2,
1273 X_TYPE in VARCHAR2,
1274 X_USER_FUNCTION_NAME in VARCHAR2,
1275 X_DESCRIPTION in VARCHAR2,
1276 X_MAINTENANCE_MODE_SUPPORT in VARCHAR2, /* NULL='NONE' */
1277 X_CONTEXT_DEPENDENCE in VARCHAR2, /* NULL='RESP' */
1278 X_JRAD_REF_PATH in VARCHAR2 default NULL
1279
1280 ) is
1281 cursor c is select
1282 WEB_ICON,
1283 WEB_HOST_NAME,
1284 WEB_AGENT_NAME,
1285 WEB_HTML_CALL,
1286 WEB_ENCRYPT_PARAMETERS,
1287 WEB_SECURED,
1288 OBJECT_ID,
1289 REGION_APPLICATION_ID,
1290 REGION_CODE,
1291 FUNCTION_NAME,
1292 APPLICATION_ID,
1293 FORM_ID,
1294 PARAMETERS,
1295 TYPE,
1296 MAINTENANCE_MODE_SUPPORT,
1297 CONTEXT_DEPENDENCE,
1298 JRAD_REF_PATH
1299 from FND_FORM_FUNCTIONS
1300 where FUNCTION_ID = X_FUNCTION_ID
1301 for update of FUNCTION_ID nowait;
1302 recinfo c%rowtype;
1303
1304 cursor c1 is select
1305 USER_FUNCTION_NAME,
1306 DESCRIPTION
1307 from FND_FORM_FUNCTIONS_TL
1308 where FUNCTION_ID = X_FUNCTION_ID
1309 and LANGUAGE = userenv('LANG')
1310 for update of FUNCTION_ID nowait;
1311 tlinfo c1%rowtype;
1312
1313 L_MAINTENANCE_MODE_SUPPORT VARCHAR2(8) := X_MAINTENANCE_MODE_SUPPORT;
1314 L_CONTEXT_DEPENDENCE VARCHAR2(8) := X_CONTEXT_DEPENDENCE;
1315 begin
1316 if (L_MAINTENANCE_MODE_SUPPORT is NULL) then
1317 L_MAINTENANCE_MODE_SUPPORT := 'NONE';
1318 end if;
1319
1320 if (L_CONTEXT_DEPENDENCE is NULL) then
1321 L_CONTEXT_DEPENDENCE := 'RESP';
1322 end if;
1323
1324 open c;
1325 fetch c into recinfo;
1326 if (c%notfound) then
1327 close c;
1328 fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
1329 app_exception.raise_exception;
1330 end if;
1331 close c;
1332 if ( ((recinfo.WEB_ICON = X_WEB_ICON)
1333 OR ((recinfo.WEB_ICON is null) AND (X_WEB_ICON is null)))
1334 AND ((recinfo.WEB_HOST_NAME = X_WEB_HOST_NAME)
1335 OR ((recinfo.WEB_HOST_NAME is null) AND (X_WEB_HOST_NAME is null)))
1336 AND ((recinfo.WEB_AGENT_NAME = X_WEB_AGENT_NAME)
1337 OR ((recinfo.WEB_AGENT_NAME is null) AND (X_WEB_AGENT_NAME is null)))
1338 AND ((recinfo.WEB_HTML_CALL = X_WEB_HTML_CALL)
1339 OR ((recinfo.WEB_HTML_CALL is null) AND (X_WEB_HTML_CALL is null)))
1340 AND ((recinfo.WEB_ENCRYPT_PARAMETERS = X_WEB_ENCRYPT_PARAMETERS)
1341 OR ((recinfo.WEB_ENCRYPT_PARAMETERS is null) AND (X_WEB_ENCRYPT_PARAMETERS is null)))
1342 AND ((recinfo.WEB_SECURED = X_WEB_SECURED)
1343 OR ((recinfo.WEB_SECURED is null) AND (X_WEB_SECURED is null)))
1344 AND ((recinfo.OBJECT_ID = X_OBJECT_ID)
1345 OR ((recinfo.OBJECT_ID is null) AND (X_OBJECT_ID is null)))
1346 AND ((recinfo.REGION_APPLICATION_ID = X_REGION_APPLICATION_ID)
1347 OR ((recinfo.REGION_APPLICATION_ID is null) AND
1348 (X_REGION_APPLICATION_ID is null)))
1349 AND ((recinfo.REGION_CODE = X_REGION_CODE)
1350 OR ((recinfo.REGION_CODE is null) AND (X_REGION_CODE is null)))
1351 AND (recinfo.FUNCTION_NAME = X_FUNCTION_NAME)
1352 AND ((recinfo.APPLICATION_ID = X_APPLICATION_ID)
1353 OR ((recinfo.APPLICATION_ID is null) AND (X_APPLICATION_ID is null)))
1354 AND ((recinfo.FORM_ID = X_FORM_ID)
1355 OR ((recinfo.FORM_ID is null) AND (X_FORM_ID is null)))
1356 AND ((recinfo.PARAMETERS = X_PARAMETERS)
1357 OR ((recinfo.PARAMETERS is null) AND (X_PARAMETERS is null)))
1358 AND ((recinfo.TYPE = X_TYPE)
1359 OR ((recinfo.TYPE is null) AND (X_TYPE is null)))
1360 AND (recinfo.MAINTENANCE_MODE_SUPPORT = L_MAINTENANCE_MODE_SUPPORT)
1361 AND (recinfo.CONTEXT_DEPENDENCE = L_CONTEXT_DEPENDENCE)
1362 AND ((recinfo.JRAD_REF_PATH = X_JRAD_REF_PATH)
1363 OR ((recinfo.JRAD_REF_PATH is null) AND (X_JRAD_REF_PATH is null)))
1364 ) then
1365 null;
1366 else
1367 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
1368 app_exception.raise_exception;
1369 end if;
1370
1371 open c1;
1372 fetch c1 into tlinfo;
1373 if (c1%notfound) then
1377 close c1;
1374 close c1;
1375 return;
1376 end if;
1378
1379 if ( (tlinfo.USER_FUNCTION_NAME = X_USER_FUNCTION_NAME)
1380 AND ((tlinfo.DESCRIPTION = X_DESCRIPTION)
1381 OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
1382 ) then
1383 null;
1384 else
1385 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
1386 app_exception.raise_exception;
1387 end if;
1388 return;
1389 end LOCK_ROW;
1390
1391 procedure UPDATE_ROW (
1392 X_FUNCTION_ID in NUMBER,
1393 X_WEB_HOST_NAME in VARCHAR2,
1394 X_WEB_AGENT_NAME in VARCHAR2,
1395 X_WEB_HTML_CALL in VARCHAR2,
1396 X_WEB_ENCRYPT_PARAMETERS in VARCHAR2,
1397 X_WEB_SECURED in VARCHAR2,
1398 X_WEB_ICON in VARCHAR2,
1399 X_OBJECT_ID in NUMBER,
1400 X_REGION_APPLICATION_ID in NUMBER,
1401 X_REGION_CODE in VARCHAR2,
1402 X_FUNCTION_NAME in VARCHAR2,
1403 X_APPLICATION_ID in NUMBER,
1404 X_FORM_ID in NUMBER,
1405 X_PARAMETERS in VARCHAR2,
1406 X_TYPE in VARCHAR2,
1407 X_USER_FUNCTION_NAME in VARCHAR2,
1408 X_DESCRIPTION in VARCHAR2,
1409 X_LAST_UPDATE_DATE in DATE,
1410 X_LAST_UPDATED_BY in NUMBER,
1411 X_LAST_UPDATE_LOGIN in NUMBER,
1412 X_MAINTENANCE_MODE_SUPPORT in VARCHAR2, /* NULL='NONE' */
1413 X_CONTEXT_DEPENDENCE in VARCHAR2, /* NULL='RESP' */
1414 X_JRAD_REF_PATH in VARCHAR2 default NULL
1415 ) is
1416 L_MAINTENANCE_MODE_SUPPORT VARCHAR2(8) := X_MAINTENANCE_MODE_SUPPORT;
1417 L_CONTEXT_DEPENDENCE VARCHAR2(8) := X_CONTEXT_DEPENDENCE;
1418 -- Function type validation purpose arguments
1419 L_APPLICATION_ID NUMBER;
1420 L_FORM_ID NUMBER;
1421 L_TYPE VARCHAR2(30);
1422 L_PARAMETERS VARCHAR2(2000);
1423 L_WEB_HTML_CALL VARCHAR2(240);
1424 L_REGION_APPLICATION_ID NUMBER;
1425 L_REGION_CODE VARCHAR2(30);
1426 columns_name VARCHAR2(2000);
1427 begin
1428 if (L_MAINTENANCE_MODE_SUPPORT is NULL) then
1429 L_MAINTENANCE_MODE_SUPPORT := 'NONE';
1430 end if;
1431
1432 if (L_CONTEXT_DEPENDENCE is NULL) then
1433 L_CONTEXT_DEPENDENCE := 'RESP';
1434 end if;
1435
1436 -- Function type validation
1437 L_APPLICATION_ID := X_APPLICATION_ID;
1438 L_FORM_ID := X_FORM_ID;
1439 L_TYPE := X_TYPE;
1440 L_PARAMETERS := X_PARAMETERS;
1441 L_WEB_HTML_CALL := X_WEB_HTML_CALL;
1442 L_REGION_APPLICATION_ID := X_REGION_APPLICATION_ID;
1443 L_REGION_CODE := X_REGION_CODE;
1444
1445 columns_name := FUNCTION_VALIDATION(L_APPLICATION_ID,
1446 L_FORM_ID,
1447 L_TYPE,
1448 L_PARAMETERS,
1449 L_WEB_HTML_CALL,
1450 X_WEB_HOST_NAME,
1451 L_REGION_APPLICATION_ID,
1452 L_REGION_CODE,
1453 X_FUNCTION_NAME);
1454
1455 update FND_FORM_FUNCTIONS set
1456 WEB_ICON = X_WEB_ICON,
1457 WEB_HOST_NAME = X_WEB_HOST_NAME,
1458 WEB_AGENT_NAME = X_WEB_AGENT_NAME,
1459 WEB_HTML_CALL = L_WEB_HTML_CALL,
1460 WEB_ENCRYPT_PARAMETERS = X_WEB_ENCRYPT_PARAMETERS,
1461 WEB_SECURED = X_WEB_SECURED,
1462 OBJECT_ID = X_OBJECT_ID,
1463 REGION_APPLICATION_ID = L_REGION_APPLICATION_ID,
1464 REGION_CODE = L_REGION_CODE,
1465 APPLICATION_ID = L_APPLICATION_ID,
1466 FORM_ID = L_FORM_ID,
1467 PARAMETERS = L_PARAMETERS,
1468 TYPE = L_TYPE,
1469 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
1470 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
1471 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
1472 MAINTENANCE_MODE_SUPPORT = L_MAINTENANCE_MODE_SUPPORT,
1473 CONTEXT_DEPENDENCE = L_CONTEXT_DEPENDENCE,
1474 JRAD_REF_PATH = X_JRAD_REF_PATH
1475 where FUNCTION_ID = X_FUNCTION_ID;
1476
1477 if (columns_name is not null) then
1478 -- print out message about which column has been changed to
1479 -- meet the function type validation rule
1480 fnd_message.set_name('FND', 'FUNCTION_TYPE_COLUMNS_CHANGED');
1481 fnd_message.set_token('NAME', X_FUNCTION_NAME);
1482 fnd_message.set_token('COLUMNS', columns_name);
1483 end if;
1484
1485 if (sql%notfound) then
1486 raise no_data_found;
1487 else
1488 -- This means that a function was updated.
1489 -- Added for Function Security Cache Invalidation Project
1490 fnd_function_security_cache.update_function(X_FUNCTION_ID);
1491 end if;
1492
1493 update FND_FORM_FUNCTIONS_TL set
1494 USER_FUNCTION_NAME = X_USER_FUNCTION_NAME,
1495 DESCRIPTION = X_DESCRIPTION,
1496 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
1497 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
1498 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
1499 SOURCE_LANG = userenv('LANG')
1500 where FUNCTION_ID = X_FUNCTION_ID
1501 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
1502
1503 if (sql%notfound) then
1504 raise no_data_found;
1505 end if;
1506 end UPDATE_ROW;
1507
1508 procedure SET_FUNCTION_MODE (x_function_name in varchar2,
1509 x_function_mode in varchar2) is
1510 valid_mode number;
1511 begin
1512 if (x_function_name is null) then
1513 return;
1514 end if;
1515
1516 -- Validate the function maintenance mode
1517 begin
1518 select 1 into valid_mode
1519 from dual
1520 where x_function_mode in (
1521 select lv.lookup_code
1522 from fnd_lookup_values lv
1523 where lv.lookup_type = 'APPS_MAINTENANCE_MODE_SUPPORT'
1524 and lv.language = userenv('LANG'));
1525 exception
1526 when no_data_found then
1527 fnd_message.set_name('FND', 'FND_INVALID_MAINTENANCE_MODE');
1528 fnd_message.set_token('MODE', x_function_mode);
1529 app_exception.raise_exception;
1530 end;
1531
1535
1532 update fnd_form_functions
1533 set maintenance_mode_support = x_function_mode
1534 where function_name like x_function_name;
1536 -- Function name does not exist
1537 if (sql%notfound) then
1538 fnd_message.set_name('FND', 'FND_FUNCTION_NOT_FOUND');
1539 fnd_message.set_token('NAME', x_function_name);
1540 app_exception.raise_exception;
1541 end if;
1542
1543
1544 end SET_FUNCTION_MODE;
1545
1546
1547
1548 end FND_FORM_FUNCTIONS_PKG;