DBA Data[Home] [Help]

PACKAGE BODY: APPS.FUN_RULE_OBJECTS_PKG

Source


1 PACKAGE BODY FUN_RULE_OBJECTS_PKG AS
2 /*$Header: FUNXTMRULROBTBB.pls 120.11.12010000.2 2008/08/06 07:44:51 makansal ship $ */
3 
4 PROCEDURE INSERT_ROW (
5   X_ROWID 			IN OUT NOCOPY VARCHAR2,
6   X_RULE_OBJECT_ID 		IN NUMBER,
7   X_APPLICATION_ID 		IN NUMBER,
8   X_RULE_OBJECT_NAME 		IN VARCHAR2,
9   X_RESULT_TYPE 		IN VARCHAR2,
10   X_REQUIRED_FLAG 		IN VARCHAR2,
11   X_USE_DEFAULT_VALUE_FLAG      IN VARCHAR2,
12   X_DEFAULT_APPLICATION_ID 	IN NUMBER,
13   X_DEFAULT_VALUE 		IN VARCHAR2,
14   X_FLEX_VALUE_SET_ID 		IN NUMBER,
15   X_FLEXFIELD_NAME              IN VARCHAR2,
16   X_FLEXFIELD_APP_SHORT_NAME    IN VARCHAR2,
17   X_MULTI_RULE_RESULT_FLAG      IN VARCHAR2,
18   X_CREATED_BY_MODULE 		IN VARCHAR2,
19   X_USER_RULE_OBJECT_NAME 	IN VARCHAR2,
20   X_DESCRIPTION 		IN VARCHAR2,
21   X_USE_INSTANCE_FLAG           IN VARCHAR2 DEFAULT NULL,
22   X_INSTANCE_LABEL              IN VARCHAR2 DEFAULT NULL,
23   X_PARENT_RULE_OBJECT_ID       IN NUMBER   DEFAULT NULL,
24   X_ORG_ID                      IN NUMBER   DEFAULT NULL,
25   X_CREATION_DATE               IN DATE DEFAULT NULL,
26   X_CREATED_BY                  IN NUMBER DEFAULT NULL,
27   X_LAST_UPDATE_DATE            IN DATE DEFAULT NULL,
28   X_LAST_UPDATED_BY             IN NUMBER DEFAULT NULL,
29   X_LAST_UPDATE_LOGIN           IN NUMBER DEFAULT NULL
30 ) IS
31   l_roa_rowid varchar2(64);
32   l_seq_val                FUN_RULE_OBJECTS_B.RULE_OBJECT_ID%TYPE;
33 begin
34 
35   --
36   --Always derive the RULE_OBJECT_ID here else in INSERT_ROW proc for
37   --FUN_RULE_OBJ_ATTRIBUTES table, it will be hard to derive the RULE_OBJECT_ID
38   --For the current Rule Object from RULE_OBJECT_NAME. Because, Rule Object Instances
39   --will share the same Rule Object Name as of the Parent Rule Object Id.
40 
41   IF X_RULE_OBJECT_ID IS NULL THEN
42      select FUN_RULE_OBJECTS_S.NEXTVAL into l_seq_val from dual;
43   END IF;
44 
45 
46   INSERT_ROW(X_ROWID,
47              NVL(X_RULE_OBJECT_ID,l_seq_val),
48              X_APPLICATION_ID,
49              X_RULE_OBJECT_NAME,
50              X_RESULT_TYPE,
51              X_REQUIRED_FLAG,
52              X_USE_DEFAULT_VALUE_FLAG,
53              X_FLEX_VALUE_SET_ID,
54              X_FLEXFIELD_NAME,
55              X_FLEXFIELD_APP_SHORT_NAME,
56              X_MULTI_RULE_RESULT_FLAG,
57              X_CREATED_BY_MODULE,
58              X_USER_RULE_OBJECT_NAME,
59              X_DESCRIPTION,
60              NVL(X_USE_INSTANCE_FLAG,'N'),   --override internally to N
61              X_INSTANCE_LABEL,
62              X_PARENT_RULE_OBJECT_ID,
63              X_ORG_ID,
64 	     X_CREATION_DATE,
65              X_CREATED_BY,
66              X_LAST_UPDATE_DATE,
67              X_LAST_UPDATED_BY,
68              X_LAST_UPDATE_LOGIN
69 	     );
70 
71   INSERT_ROW(l_roa_rowid,
72              NVL(X_RULE_OBJECT_ID,l_seq_val),
73              X_APPLICATION_ID,
74              X_RULE_OBJECT_NAME,
75              X_DEFAULT_APPLICATION_ID,
76              X_DEFAULT_VALUE,
77 	     X_CREATION_DATE,
78              X_CREATED_BY,
79              X_LAST_UPDATE_DATE,
80              X_LAST_UPDATED_BY,
81              X_LAST_UPDATE_LOGIN
82 	     );
83 end INSERT_ROW;
84 
85 PROCEDURE INSERT_ROW (
86   X_ROWID 			IN OUT NOCOPY VARCHAR2,
87   X_RULE_OBJECT_ID 		IN NUMBER,
88   X_APPLICATION_ID 		IN NUMBER,
89   X_RULE_OBJECT_NAME 		IN VARCHAR2,
90   X_RESULT_TYPE 		IN VARCHAR2,
91   X_REQUIRED_FLAG 		IN VARCHAR2,
92   X_USE_DEFAULT_VALUE_FLAG        IN VARCHAR2,
93   X_FLEX_VALUE_SET_ID 		IN NUMBER,
94   X_FLEXFIELD_NAME              IN VARCHAR2,
95   X_FLEXFIELD_APP_SHORT_NAME    IN VARCHAR2,
96   X_MULTI_RULE_RESULT_FLAG      IN VARCHAR2,
97   X_CREATED_BY_MODULE 		IN VARCHAR2,
98   X_USER_RULE_OBJECT_NAME 	IN VARCHAR2,
99   X_DESCRIPTION 		IN VARCHAR2,
100   X_USE_INSTANCE_FLAG           IN VARCHAR2 DEFAULT NULL,
101   X_INSTANCE_LABEL              IN VARCHAR2 DEFAULT NULL,
102   X_PARENT_RULE_OBJECT_ID       IN NUMBER   DEFAULT NULL,
103   X_ORG_ID                      IN NUMBER   DEFAULT NULL,
104   X_CREATION_DATE               IN DATE DEFAULT NULL,
105   X_CREATED_BY                  IN NUMBER DEFAULT NULL,
106   X_LAST_UPDATE_DATE            IN DATE DEFAULT NULL,
107   X_LAST_UPDATED_BY             IN NUMBER DEFAULT NULL,
108   X_LAST_UPDATE_LOGIN           IN NUMBER DEFAULT NULL
109 ) IS
110 
111   cursor C(id number) is select ROWID from FUN_RULE_OBJECTS_B
112     where APPLICATION_ID = X_APPLICATION_ID
113     and RULE_OBJECT_ID = id
114     ;
115 
116   l_orig_rule_object_name  FUN_RULE_OBJECTS_B.RULE_OBJECT_NAME%TYPE;
117   l_parent_rule_object_id  FUN_RULE_OBJECTS_B.PARENT_RULE_OBJECT_ID%TYPE := NULL;
118 
119 BEGIN
120 
121   --Derive the parent_rule_object_id if the X_INSTANCE_LABEL is NOT NULL
122   --or ORG_ID is NOT NULL.
123 
124   BEGIN
125      IF (X_INSTANCE_LABEL IS NOT NULL OR X_ORG_ID IS NOT NULL) THEN
126         SELECT RULE_OBJECT_ID INTO l_parent_rule_object_id
127         FROM FUN_RULE_OBJECTS_B
128         WHERE RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
129 	AND   UPPER(USE_INSTANCE_FLAG) = 'Y'
130 	AND   INSTANCE_LABEL IS NULL
131 	AND   ORG_ID   IS NULL
132 	AND   PARENT_RULE_OBJECT_ID  IS NULL;
133 
134      END IF;
135 
136   EXCEPTION
137      WHEN NO_DATA_FOUND THEN
138        -- Since this should never happen if the code flow has reached till here.
139        -- Throwing an exception with hard coded message text
140        app_exception.raise_exception(exception_text=>'Invalid rule object name - '||X_RULE_OBJECT_NAME);
141   END ;
142 
143   insert into FUN_RULE_OBJECTS_B (
144     RULE_OBJECT_ID,
145     APPLICATION_ID,
146     RULE_OBJECT_NAME,
147     RESULT_TYPE,
148     REQUIRED_FLAG,
149     USE_DEFAULT_VALUE_FLAG,
150     FLEX_VALUE_SET_ID,
151     FLEXFIELD_NAME,
152     FLEXFIELD_APP_SHORT_NAME,
153     MULTI_RULE_RESULT_FLAG,
154     OBJECT_VERSION_NUMBER,
155     USE_INSTANCE_FLAG,
156     INSTANCE_LABEL,
157     PARENT_RULE_OBJECT_ID,
158     ORG_ID,
159     CREATED_BY_MODULE,
160     CREATED_BY,
161     CREATION_DATE,
162     LAST_UPDATE_LOGIN,
163     LAST_UPDATE_DATE,
164     LAST_UPDATED_BY
165   ) values (
166     X_RULE_OBJECT_ID,
167     X_APPLICATION_ID,
168     X_RULE_OBJECT_NAME,
169     X_RESULT_TYPE,
170     X_REQUIRED_FLAG,
171     X_USE_DEFAULT_VALUE_FLAG,
172     X_FLEX_VALUE_SET_ID,
173     X_FLEXFIELD_NAME,
174     X_FLEXFIELD_APP_SHORT_NAME,
175     X_MULTI_RULE_RESULT_FLAG,
176     1,
177     NVL(X_USE_INSTANCE_FLAG,'N'),   --override internally to N
178     X_INSTANCE_LABEL,
179     NVL(X_PARENT_RULE_OBJECT_ID,l_parent_rule_object_id),
180     X_ORG_ID,
181     X_CREATED_BY_MODULE,
182     NVL(X_CREATED_BY,FUN_RULE_UTILITY_PKG.CREATED_BY),
183     NVL(X_CREATION_DATE,FUN_RULE_UTILITY_PKG.CREATION_DATE),
184     NVL(X_LAST_UPDATE_LOGIN,FUN_RULE_UTILITY_PKG.LAST_UPDATE_LOGIN),
185     NVL(X_LAST_UPDATE_DATE,FUN_RULE_UTILITY_PKG.LAST_UPDATE_DATE),
186     NVL(X_LAST_UPDATED_BY,FUN_RULE_UTILITY_PKG.LAST_UPDATED_BY)
187   )RETURNING ROWID INTO X_ROWID;
188 
189 
190   insert into FUN_RULE_OBJECTS_TL (
191     RULE_OBJECT_ID,
192     USER_RULE_OBJECT_NAME,
193     DESCRIPTION,
194     CREATED_BY,
195     CREATION_DATE,
196     LAST_UPDATE_LOGIN,
197     LAST_UPDATE_DATE,
198     LAST_UPDATED_BY,
199     LANGUAGE,
200     SOURCE_LANG
201   ) select
202     X_RULE_OBJECT_ID,
203     X_USER_RULE_OBJECT_NAME,
204     X_DESCRIPTION,
205     NVL(X_CREATED_BY,FUN_RULE_UTILITY_PKG.CREATED_BY),
206     NVL(X_CREATION_DATE,FUN_RULE_UTILITY_PKG.CREATION_DATE),
207     NVL(X_LAST_UPDATE_LOGIN,FUN_RULE_UTILITY_PKG.LAST_UPDATE_LOGIN),
208     NVL(X_LAST_UPDATE_DATE,FUN_RULE_UTILITY_PKG.LAST_UPDATE_DATE),
209     NVL(X_LAST_UPDATED_BY,FUN_RULE_UTILITY_PKG.LAST_UPDATED_BY),
210     L.LANGUAGE_CODE,
211     userenv('LANG')
212   from FND_LANGUAGES L
213   where L.INSTALLED_FLAG in ('I', 'B')
214   and not exists
215     (select NULL
216     from FUN_RULE_OBJECTS_TL T
217     where T.RULE_OBJECT_ID = X_RULE_OBJECT_ID
218     and T.LANGUAGE = L.LANGUAGE_CODE);
219 
220   open c(X_RULE_OBJECT_ID);
221   fetch c into X_ROWID;
222   if (c%notfound) then
223     close c;
224     raise no_data_found;
225   end if;
226   close c;
227 END INSERT_ROW;
228 
229 PROCEDURE INSERT_ROW (
230   X_ROWID 			IN OUT NOCOPY VARCHAR2,
231   X_RULE_OBJECT_ID 		IN NUMBER,
232   X_APPLICATION_ID 		IN NUMBER,
233   X_RULE_OBJECT_NAME 		IN VARCHAR2,
234   X_DEFAULT_APPLICATION_ID 	IN NUMBER,
235   X_DEFAULT_VALUE 		IN VARCHAR2,
236   X_CREATION_DATE               IN DATE DEFAULT NULL,
237   X_CREATED_BY                  IN NUMBER DEFAULT NULL,
238   X_LAST_UPDATE_DATE            IN DATE DEFAULT NULL,
239   X_LAST_UPDATED_BY             IN NUMBER DEFAULT NULL,
240   X_LAST_UPDATE_LOGIN           IN NUMBER DEFAULT NULL
241 ) IS
242 
243   cursor C(id number) is select ROWID from FUN_RULE_OBJ_ATTRIBUTES
244     where RULE_OBJECT_ID = id
245     ;
246 
247 
248 BEGIN
249 
250   insert into FUN_RULE_OBJ_ATTRIBUTES (
251     RULE_OBJECT_ID,
252     DEFAULT_APPLICATION_ID,
253     DEFAULT_VALUE,
254     CREATED_BY,
255     CREATION_DATE,
256     LAST_UPDATE_LOGIN,
257     LAST_UPDATE_DATE,
258     LAST_UPDATED_BY
259   )
260  values (
261     X_RULE_OBJECT_ID,
262     X_DEFAULT_APPLICATION_ID,
263     X_DEFAULT_VALUE,
264     NVL(X_CREATED_BY,FUN_RULE_UTILITY_PKG.CREATED_BY),
265     NVL(X_CREATION_DATE,FUN_RULE_UTILITY_PKG.CREATION_DATE),
266     NVL(X_LAST_UPDATE_LOGIN,FUN_RULE_UTILITY_PKG.LAST_UPDATE_LOGIN),
267     NVL(X_LAST_UPDATE_DATE,FUN_RULE_UTILITY_PKG.LAST_UPDATE_DATE),
268     NVL(X_LAST_UPDATED_BY,FUN_RULE_UTILITY_PKG.LAST_UPDATED_BY)
269 );
270 
271   open c(X_RULE_OBJECT_ID);
272   fetch c into X_ROWID;
273   if (c%notfound) then
274     close c;
275     raise no_data_found;
276   end if;
277   close c;
278 END INSERT_ROW;
279 
280 
281 PROCEDURE LOCK_ROW (
282   X_RULE_OBJECT_ID 		IN NUMBER,
283   X_OBJECT_VERSION_NUMBER 	IN NUMBER
284 ) IS
285   cursor c is select
286       OBJECT_VERSION_NUMBER
287     from FUN_RULE_OBJECTS_B
288     where RULE_OBJECT_ID = X_RULE_OBJECT_ID
289     for update of RULE_OBJECT_ID nowait;
290   recinfo c%rowtype;
291 
292 begin
293   open c;
294   fetch c into recinfo;
295   if (c%notfound) then
296     close c;
297     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
298     app_exception.raise_exception;
299   end if;
300   close c;
301   if (((recinfo.OBJECT_VERSION_NUMBER = X_OBJECT_VERSION_NUMBER)
302            OR ((recinfo.OBJECT_VERSION_NUMBER is null) AND (X_OBJECT_VERSION_NUMBER is null)))
303   ) then
304     null;
305   else
306     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
307     app_exception.raise_exception;
308   end if;
309   return;
310 end LOCK_ROW;
311 
312 PROCEDURE UPDATE_ROW (
313   X_RULE_OBJECT_ID 		IN NUMBER,
314   X_APPLICATION_ID 		IN NUMBER,
315   X_RULE_OBJECT_NAME 		IN VARCHAR2,
316   X_RESULT_TYPE 		IN VARCHAR2,
317   X_REQUIRED_FLAG 		IN VARCHAR2,
318   X_USE_DEFAULT_VALUE_FLAG        IN VARCHAR2,
319   X_DEFAULT_APPLICATION_ID 	IN NUMBER,
320   X_DEFAULT_VALUE 		IN VARCHAR2,
321   X_FLEX_VALUE_SET_ID 		IN NUMBER,
322   X_FLEXFIELD_NAME              IN VARCHAR2,
323   X_FLEXFIELD_APP_SHORT_NAME    IN VARCHAR2,
324   X_MULTI_RULE_RESULT_FLAG      IN VARCHAR2,
325   X_OBJECT_VERSION_NUMBER 	IN NUMBER,
326   X_CREATED_BY_MODULE 		IN VARCHAR2,
327   X_USER_RULE_OBJECT_NAME 	IN VARCHAR2,
328   X_DESCRIPTION 		IN VARCHAR2,
329   X_USE_INSTANCE_FLAG           IN VARCHAR2 DEFAULT NULL,
330   X_INSTANCE_LABEL              IN VARCHAR2 DEFAULT NULL,
331   X_PARENT_RULE_OBJECT_ID       IN NUMBER DEFAULT NULL,
332   X_ORG_ID                      IN NUMBER DEFAULT NULL,
333   X_LAST_UPDATE_DATE            IN DATE       DEFAULT NULL,
334   X_LAST_UPDATED_BY             IN NUMBER     DEFAULT NULL,
335   X_LAST_UPDATE_LOGIN           IN NUMBER DEFAULT NULL
336 ) IS
337 begin
338 
339   update_row(X_APPLICATION_ID,
340              X_RULE_OBJECT_ID,
341              X_RULE_OBJECT_NAME,
342              X_RESULT_TYPE,
343              X_REQUIRED_FLAG,
344              X_USE_DEFAULT_VALUE_FLAG,
345              X_FLEX_VALUE_SET_ID,
346              X_FLEXFIELD_NAME,
347              X_FLEXFIELD_APP_SHORT_NAME,
348              X_MULTI_RULE_RESULT_FLAG,
349              X_CREATED_BY_MODULE,
350              X_USER_RULE_OBJECT_NAME,
351              X_DESCRIPTION,
352              X_USE_INSTANCE_FLAG,
353              X_INSTANCE_LABEL,
354              X_PARENT_RULE_OBJECT_ID,
355              X_ORG_ID,
356              X_LAST_UPDATE_DATE,
357              X_LAST_UPDATED_BY,
358              X_LAST_UPDATE_LOGIN
359 	     );
360 
361   update_row(X_APPLICATION_ID,
362              X_RULE_OBJECT_ID,
363              X_DEFAULT_APPLICATION_ID,
364              X_DEFAULT_VALUE,
365              X_LAST_UPDATE_DATE,
366              X_LAST_UPDATED_BY,
367              X_LAST_UPDATE_LOGIN
368 	     );
369 
370 end UPDATE_ROW;
371 
372 procedure UPDATE_ROW (
373   X_APPLICATION_ID in NUMBER,
374   X_RULE_OBJECT_ID in NUMBER,
375   X_RULE_OBJECT_NAME in VARCHAR2,
376   X_RESULT_TYPE in VARCHAR2,
377   X_REQUIRED_FLAG in VARCHAR2,
378   X_USE_DEFAULT_VALUE_FLAG  IN VARCHAR2,
379   X_FLEX_VALUE_SET_ID in NUMBER,
380   X_FLEXFIELD_NAME in VARCHAR2,
381   X_FLEXFIELD_APP_SHORT_NAME in VARCHAR2,
382   X_MULTI_RULE_RESULT_FLAG in VARCHAR2,
383   X_CREATED_BY_MODULE in VARCHAR2,
384   X_USER_RULE_OBJECT_NAME in VARCHAR2,
385   X_DESCRIPTION in VARCHAR2,
386   X_USE_INSTANCE_FLAG           IN VARCHAR2 DEFAULT NULL,
387   X_INSTANCE_LABEL              IN VARCHAR2 DEFAULT NULL,
388   X_PARENT_RULE_OBJECT_ID       IN NUMBER DEFAULT NULL,
389   X_ORG_ID                      IN NUMBER DEFAULT NULL,
390   X_LAST_UPDATE_DATE            IN DATE DEFAULT NULL,
391   X_LAST_UPDATED_BY             IN NUMBER DEFAULT NULL,
392   X_LAST_UPDATE_LOGIN           IN NUMBER DEFAULT NULL
393 ) is
394 begin
395 
396   update FUN_RULE_OBJECTS_B set
397     RULE_OBJECT_NAME             = X_RULE_OBJECT_NAME,
398     RESULT_TYPE                  = X_RESULT_TYPE,
399     REQUIRED_FLAG                = X_REQUIRED_FLAG,
400     USE_DEFAULT_VALUE_FLAG       = X_USE_DEFAULT_VALUE_FLAG,
401     FLEX_VALUE_SET_ID            = X_FLEX_VALUE_SET_ID,
402     FLEXFIELD_NAME               = X_FLEXFIELD_NAME,
403     FLEXFIELD_APP_SHORT_NAME     = X_FLEXFIELD_APP_SHORT_NAME,
404     MULTI_RULE_RESULT_FLAG       = X_MULTI_RULE_RESULT_FLAG,
405     OBJECT_VERSION_NUMBER        = OBJECT_VERSION_NUMBER + 1,
406     CREATED_BY_MODULE            = X_CREATED_BY_MODULE,
407     USE_INSTANCE_FLAG            = NVL(X_USE_INSTANCE_FLAG,'N'),
408     INSTANCE_LABEL               = X_INSTANCE_LABEL,
409     PARENT_RULE_OBJECT_ID        = X_PARENT_RULE_OBJECT_ID,
410     ORG_ID                       = X_ORG_ID,
411     LAST_UPDATE_DATE             = NVL(X_LAST_UPDATE_DATE,FUN_RULE_UTILITY_PKG.LAST_UPDATE_DATE),
412     LAST_UPDATED_BY              = NVL(X_LAST_UPDATED_BY,FUN_RULE_UTILITY_PKG.LAST_UPDATED_BY),
413     LAST_UPDATE_LOGIN            = NVL(X_LAST_UPDATE_LOGIN,FUN_RULE_UTILITY_PKG.LAST_UPDATE_LOGIN)
414   where RULE_OBJECT_ID = X_RULE_OBJECT_ID;
415 
416   if (sql%notfound) then
417     raise no_data_found;
418   end if;
419 
420   update FUN_RULE_OBJECTS_TL set
421     USER_RULE_OBJECT_NAME = X_USER_RULE_OBJECT_NAME,
422     DESCRIPTION = X_DESCRIPTION,
423     LAST_UPDATE_DATE = NVL(X_LAST_UPDATE_DATE,FUN_RULE_UTILITY_PKG.LAST_UPDATE_DATE),
424     LAST_UPDATED_BY = NVL(X_LAST_UPDATED_BY,FUN_RULE_UTILITY_PKG.LAST_UPDATED_BY),
425     LAST_UPDATE_LOGIN = NVL(X_LAST_UPDATE_LOGIN,FUN_RULE_UTILITY_PKG.LAST_UPDATE_LOGIN),
426     SOURCE_LANG = userenv('LANG')
427   where RULE_OBJECT_ID = X_RULE_OBJECT_ID
428   and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
429 
430   if (sql%notfound) then
431     raise no_data_found;
432   end if;
433 end UPDATE_ROW;
434 
435 procedure UPDATE_ROW (
436   X_APPLICATION_ID in NUMBER,
437   X_RULE_OBJECT_ID in NUMBER,
438   X_DEFAULT_APPLICATION_ID in NUMBER,
439   X_DEFAULT_VALUE in VARCHAR2,
440   X_LAST_UPDATE_DATE            IN DATE DEFAULT NULL,
441   X_LAST_UPDATED_BY             IN NUMBER DEFAULT NULL,
442   X_LAST_UPDATE_LOGIN           IN NUMBER DEFAULT NULL
443 ) is
444 begin
445   update FUN_RULE_OBJ_ATTRIBUTES set
446     DEFAULT_APPLICATION_ID = X_DEFAULT_APPLICATION_ID,
447     DEFAULT_VALUE = X_DEFAULT_VALUE,
448     LAST_UPDATE_DATE = NVL(X_LAST_UPDATE_DATE,FUN_RULE_UTILITY_PKG.LAST_UPDATE_DATE),
449     LAST_UPDATED_BY = NVL(X_LAST_UPDATED_BY,FUN_RULE_UTILITY_PKG.LAST_UPDATED_BY),
450     LAST_UPDATE_LOGIN = NVL(X_LAST_UPDATE_LOGIN,FUN_RULE_UTILITY_PKG.LAST_UPDATE_LOGIN)
451   where RULE_OBJECT_ID = X_RULE_OBJECT_ID;
452 
453   if (sql%notfound) then
454     raise no_data_found;
455   end if;
456 end UPDATE_ROW;
457 
458 PROCEDURE DELETE_ROW (
459    X_RULE_OBJECT_NAME                     IN VARCHAR2,
460    X_APPLICATION_ID                       IN NUMBER
461 
462 ) IS
463 begin
464 
465   delete from FUN_RULE_OBJ_ATTRIBUTES
466   where RULE_OBJECT_ID in (select RULE_OBJECT_ID
467                            from FUN_RULE_OBJECTS_B
468                            where RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
469                            AND   APPLICATION_ID = X_APPLICATION_ID
470                            );
471 
472   if (sql%notfound) then
473     raise no_data_found;
474   end if;
475 
476   delete from FUN_RULE_OBJECTS_TL
477   where RULE_OBJECT_ID in (select RULE_OBJECT_ID
478                            from FUN_RULE_OBJECTS_B
479                            where RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
480                            AND   APPLICATION_ID = X_APPLICATION_ID
481                            );
482 
483   if (sql%notfound) then
484     raise no_data_found;
485   end if;
486 
487   delete from FUN_RULE_OBJECTS_B
488   where RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
489   AND   APPLICATION_ID = X_APPLICATION_ID;
490 
491 
492   if (sql%notfound) then
493     raise no_data_found;
494   end if;
495 
496 end DELETE_ROW;
497 
498 
499 PROCEDURE DELETE_ROW (
500    X_RULE_OBJECT_NAME                     IN VARCHAR2,
501    X_APPLICATION_ID                       IN NUMBER,
502    X_INSTANCE_LABEL                       IN VARCHAR2,
503    X_ORG_ID                               IN NUMBER
504 ) IS
505 begin
506 
507   delete from FUN_RULE_OBJECTS_B
508   where RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
509   AND   APPLICATION_ID = X_APPLICATION_ID
510   AND
511      ( (INSTANCE_LABEL IS NULL AND X_INSTANCE_LABEL IS NULL) OR
512        (INSTANCE_LABEL IS NOT NULL AND X_INSTANCE_LABEL IS NOT NULL AND INSTANCE_LABEL = X_INSTANCE_LABEL))
513   AND
514      ( (ORG_ID IS NULL AND X_ORG_ID IS NULL) OR
515        (ORG_ID IS NOT NULL AND X_ORG_ID IS NOT NULL AND ORG_ID = X_ORG_ID))
516   AND PARENT_RULE_OBJECT_ID IS NOT NULL;
517 
518 
519   if (sql%notfound) then
520     raise no_data_found;
521   end if;
522 
523 end DELETE_ROW;
524 
525 PROCEDURE DELETE_ROW (
526    X_RULE_OBJECT_ID                     IN NUMBER
527 ) IS
528 begin
529   delete from FUN_RULE_OBJECTS_TL
530   where RULE_OBJECT_ID = X_RULE_OBJECT_ID;
531 
532   if (sql%notfound) then
533     raise no_data_found;
534   end if;
535 
536   delete from FUN_RULE_OBJECTS_B
537   where RULE_OBJECT_ID = X_RULE_OBJECT_ID;
538 
539   if (sql%notfound) then
540     raise no_data_found;
541   end if;
542 
543   delete from FUN_RULE_OBJ_ATTRIBUTES
544   where RULE_OBJECT_ID = X_RULE_OBJECT_ID;
545 
546   if (sql%notfound) then
547     raise no_data_found;
548   end if;
549 
550 end DELETE_ROW;
551 
552 
553 PROCEDURE Select_Row (
554     X_RULE_OBJECT_NAME		    	    IN  OUT NOCOPY   VARCHAR2,
555     X_RULE_OBJECT_ID                        OUT NOCOPY     NUMBER,
556     X_APPLICATION_ID		            IN  OUT NOCOPY     NUMBER,
557     X_USER_RULE_OBJECT_NAME		    OUT NOCOPY     VARCHAR2,
558     X_DESCRIPTION			    OUT NOCOPY     VARCHAR2,
559     X_RESULT_TYPE			    OUT NOCOPY     VARCHAR2,
560     X_REQUIRED_FLAG			    OUT NOCOPY     VARCHAR2,
561     X_USE_DEFAULT_VALUE_FLAG                OUT NOCOPY     VARCHAR2,
562     X_DEFAULT_APPLICATION_ID		    OUT NOCOPY     NUMBER,
563     X_DEFAULT_VALUE			    OUT NOCOPY     VARCHAR2,
564     X_FLEX_VALUE_SET_ID                     OUT NOCOPY     NUMBER,
565     X_FLEXFIELD_NAME                        OUT NOCOPY     VARCHAR2,
566     X_FLEXFIELD_APP_SHORT_NAME              OUT NOCOPY     VARCHAR2,
567     X_MULTI_RULE_RESULT_FLAG                OUT NOCOPY     VARCHAR2,
568     X_CREATED_BY_MODULE                     OUT NOCOPY     VARCHAR2,
569     X_USE_INSTANCE_FLAG                     OUT NOCOPY     VARCHAR2,
570     X_INSTANCE_LABEL                        OUT NOCOPY     VARCHAR2,
571     X_PARENT_RULE_OBJECT_ID                 OUT NOCOPY     NUMBER,
572     X_ORG_ID                                OUT NOCOPY     NUMBER
573 ) IS
574 
575 l_count      NUMBER;
576 BEGIN
577 
578 -- If INSTANCE_LABEL IS NULL and ORG_ID is NULL , then we want the parent rule object
579 -- to be returned to public api. otherwiase we will return the record
580 -- with the instance label passed from the public api.
581 
582 IF(X_INSTANCE_LABEL IS NULL AND X_ORG_ID IS NULL) THEN
583    SELECT
584         RULE_OBJECT_NAME,
585         RULE_OBJECT_ID,
586         APPLICATION_ID,
587         USER_RULE_OBJECT_NAME,
588         DESCRIPTION,
589         RESULT_TYPE,
590         REQUIRED_FLAG,
591         USE_DEFAULT_VALUE_FLAG,
592         DEFAULT_APPLICATION_ID,
593         DEFAULT_VALUE,
594         FLEX_VALUE_SET_ID,
595         FLEXFIELD_NAME,
596         FLEXFIELD_APP_SHORT_NAME,
597         MULTI_RULE_RESULT_FLAG,
598         CREATED_BY_MODULE,
599         USE_INSTANCE_FLAG ,
600         INSTANCE_LABEL ,
601         PARENT_RULE_OBJECT_ID ,
602         ORG_ID
603     INTO
604 	X_RULE_OBJECT_NAME,
605         X_RULE_OBJECT_ID,
606         X_APPLICATION_ID,
607         X_USER_RULE_OBJECT_NAME,
608         X_DESCRIPTION,
609         X_RESULT_TYPE,
610         X_REQUIRED_FLAG,
611         X_USE_DEFAULT_VALUE_FLAG,
612         X_DEFAULT_APPLICATION_ID,
613         X_DEFAULT_VALUE,
614         X_FLEX_VALUE_SET_ID,
615         X_FLEXFIELD_NAME,
616         X_FLEXFIELD_APP_SHORT_NAME,
617         X_MULTI_RULE_RESULT_FLAG,
618         X_CREATED_BY_MODULE,
619         X_USE_INSTANCE_FLAG,
620         X_INSTANCE_LABEL,
621         X_PARENT_RULE_OBJECT_ID,
622         X_ORG_ID
623     FROM FUN_RULE_OBJECTS_VL
624     WHERE RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
625     AND   APPLICATION_ID = X_APPLICATION_ID
626     AND   INSTANCE_LABEL IS NULL
627     AND   ORG_ID IS NULL;
628 ELSE
629    SELECT
630         RULE_OBJECT_NAME,
631         RULE_OBJECT_ID,
632         APPLICATION_ID,
633         USER_RULE_OBJECT_NAME,
634         DESCRIPTION,
635         RESULT_TYPE,
636         REQUIRED_FLAG,
637         USE_DEFAULT_VALUE_FLAG,
638         DEFAULT_APPLICATION_ID,
639         DEFAULT_VALUE,
640         FLEX_VALUE_SET_ID,
641         FLEXFIELD_NAME,
642         FLEXFIELD_APP_SHORT_NAME,
643         MULTI_RULE_RESULT_FLAG,
644         CREATED_BY_MODULE,
645         USE_INSTANCE_FLAG ,
646         INSTANCE_LABEL ,
647         PARENT_RULE_OBJECT_ID ,
648         ORG_ID
649     INTO
650 	X_RULE_OBJECT_NAME,
651         X_RULE_OBJECT_ID,
652         X_APPLICATION_ID,
653         X_USER_RULE_OBJECT_NAME,
654         X_DESCRIPTION,
655         X_RESULT_TYPE,
656         X_REQUIRED_FLAG,
657         X_USE_DEFAULT_VALUE_FLAG,
658         X_DEFAULT_APPLICATION_ID,
659         X_DEFAULT_VALUE,
660         X_FLEX_VALUE_SET_ID,
661         X_FLEXFIELD_NAME,
662         X_FLEXFIELD_APP_SHORT_NAME,
663         X_MULTI_RULE_RESULT_FLAG,
664         X_CREATED_BY_MODULE,
665         X_USE_INSTANCE_FLAG,
666         X_INSTANCE_LABEL,
667         X_PARENT_RULE_OBJECT_ID,
668         X_ORG_ID
669     FROM FUN_RULE_OBJECTS_VL
670     WHERE RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
671     AND   APPLICATION_ID = X_APPLICATION_ID
672     AND
673      ( (INSTANCE_LABEL IS NULL AND X_INSTANCE_LABEL IS NULL) OR
674        (INSTANCE_LABEL IS NOT NULL AND X_INSTANCE_LABEL IS NOT NULL AND INSTANCE_LABEL = X_INSTANCE_LABEL))
675     AND
676      ( (ORG_ID IS NULL AND X_ORG_ID IS NULL) OR
677        (ORG_ID IS NOT NULL AND X_ORG_ID IS NOT NULL AND ORG_ID = X_ORG_ID))
678     AND   PARENT_RULE_OBJECT_ID  IS NOT NULL;
679 END IF;
680 
681 EXCEPTION
682     WHEN NO_DATA_FOUND THEN
683         FND_MESSAGE.SET_NAME( 'FUN', 'FUN_RULE_API_NO_RECORD' );
684         FND_MESSAGE.SET_TOKEN( 'RECORD', 'p_rule_objects_rec');
685         FND_MESSAGE.SET_TOKEN( 'VALUE', X_RULE_OBJECT_NAME );
686         FND_MSG_PUB.ADD;
687         RAISE FND_API.G_EXC_ERROR;
688 END Select_Row;
689 
690 /*Overloaded procedure to select Rule Objects record based on the RULE_OBJECT_ID passed*/
691 
692 PROCEDURE Select_Row_Rob_Id (
693     X_RULE_OBJECT_NAME		            OUT NOCOPY   VARCHAR2,
694     X_RULE_OBJECT_ID                        IN  OUT NOCOPY          NUMBER,
695     X_APPLICATION_ID		            OUT NOCOPY     NUMBER,
696     X_USER_RULE_OBJECT_NAME		    OUT NOCOPY     VARCHAR2,
697     X_DESCRIPTION			    OUT NOCOPY     VARCHAR2,
698     X_RESULT_TYPE			    OUT NOCOPY     VARCHAR2,
699     X_REQUIRED_FLAG			    OUT NOCOPY     VARCHAR2,
700     X_USE_DEFAULT_VALUE_FLAG                OUT NOCOPY     VARCHAR2,
701     X_DEFAULT_APPLICATION_ID		    OUT NOCOPY     NUMBER,
702     X_DEFAULT_VALUE			    OUT NOCOPY     VARCHAR2,
703     X_FLEX_VALUE_SET_ID                     OUT NOCOPY     NUMBER,
704     X_FLEXFIELD_NAME                        OUT NOCOPY     VARCHAR2,
705     X_FLEXFIELD_APP_SHORT_NAME              OUT NOCOPY     VARCHAR2,
706     X_MULTI_RULE_RESULT_FLAG                OUT NOCOPY     VARCHAR2,
707     X_CREATED_BY_MODULE                     OUT NOCOPY     VARCHAR2,
708     X_USE_INSTANCE_FLAG                     OUT NOCOPY     VARCHAR2,
709     X_INSTANCE_LABEL                        OUT NOCOPY     VARCHAR2,
710     X_PARENT_RULE_OBJECT_ID                 OUT NOCOPY     NUMBER,
711     X_ORG_ID                                OUT NOCOPY     NUMBER
712 ) IS
713 
714 l_count      NUMBER;
715 BEGIN
716 
717    SELECT
718         RULE_OBJECT_NAME,
719         RULE_OBJECT_ID,
720         APPLICATION_ID,
721         USER_RULE_OBJECT_NAME,
722         DESCRIPTION,
723         RESULT_TYPE,
724         REQUIRED_FLAG,
725         USE_DEFAULT_VALUE_FLAG,
726         DEFAULT_APPLICATION_ID,
727         DEFAULT_VALUE,
728         FLEX_VALUE_SET_ID,
729         FLEXFIELD_NAME,
730         FLEXFIELD_APP_SHORT_NAME,
731         MULTI_RULE_RESULT_FLAG,
732         CREATED_BY_MODULE,
733         USE_INSTANCE_FLAG ,
734         INSTANCE_LABEL ,
735         PARENT_RULE_OBJECT_ID ,
736         ORG_ID
737     INTO
738 	X_RULE_OBJECT_NAME,
739         X_RULE_OBJECT_ID,
740         X_APPLICATION_ID,
741         X_USER_RULE_OBJECT_NAME,
742         X_DESCRIPTION,
743         X_RESULT_TYPE,
744         X_REQUIRED_FLAG,
745         X_USE_DEFAULT_VALUE_FLAG,
746         X_DEFAULT_APPLICATION_ID,
747         X_DEFAULT_VALUE,
748         X_FLEX_VALUE_SET_ID,
749         X_FLEXFIELD_NAME,
750         X_FLEXFIELD_APP_SHORT_NAME,
751         X_MULTI_RULE_RESULT_FLAG,
752         X_CREATED_BY_MODULE,
753         X_USE_INSTANCE_FLAG,
754         X_INSTANCE_LABEL,
755         X_PARENT_RULE_OBJECT_ID,
756         X_ORG_ID
757     FROM FUN_RULE_OBJECTS_VL
758     WHERE RULE_OBJECT_ID = X_RULE_OBJECT_ID;
759 
760 EXCEPTION
761     WHEN NO_DATA_FOUND THEN
762         FND_MESSAGE.SET_NAME( 'FUN', 'FUN_RULE_API_NO_RECORD' );
763         FND_MESSAGE.SET_TOKEN( 'RECORD', 'p_rule_objects_rec');
764         FND_MESSAGE.SET_TOKEN( 'VALUE', X_RULE_OBJECT_NAME );
765         FND_MSG_PUB.ADD;
766         RAISE FND_API.G_EXC_ERROR;
767 END Select_Row_Rob_Id;
768 
769 procedure ADD_LANGUAGE
770 is
771 begin
772   delete from FUN_RULE_OBJECTS_TL T
773   where not exists
774     (select NULL
775     from FUN_RULE_OBJECTS_B B
776     where B.RULE_OBJECT_ID = T.RULE_OBJECT_ID
777     );
778 
779   update FUN_RULE_OBJECTS_TL T set (
780       USER_RULE_OBJECT_NAME,
781       DESCRIPTION
782     ) = (select
783       B.USER_RULE_OBJECT_NAME,
784       B.DESCRIPTION
785     from FUN_RULE_OBJECTS_TL B
786     where B.RULE_OBJECT_ID = T.RULE_OBJECT_ID
787     and B.LANGUAGE = T.SOURCE_LANG)
788   where (
789       T.RULE_OBJECT_ID,
790       T.LANGUAGE
791   ) in (select
792       SUBT.RULE_OBJECT_ID,
793       SUBT.LANGUAGE
794     from FUN_RULE_OBJECTS_TL SUBB, FUN_RULE_OBJECTS_TL SUBT
795     where SUBB.RULE_OBJECT_ID = SUBT.RULE_OBJECT_ID
796     and SUBB.LANGUAGE = SUBT.SOURCE_LANG
797     and (SUBB.USER_RULE_OBJECT_NAME <> SUBT.USER_RULE_OBJECT_NAME
798       or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
799       or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
800       or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
801   ));
802 
803 
804   insert into FUN_RULE_OBJECTS_TL (
805     RULE_OBJECT_ID,
806     USER_RULE_OBJECT_NAME,
807     DESCRIPTION,
808     CREATION_DATE,
809     CREATED_BY,
810     LAST_UPDATE_DATE,
811     LAST_UPDATED_BY,
812     LAST_UPDATE_LOGIN,
813     LANGUAGE,
814     SOURCE_LANG
815   ) select /*+ ORDERED */
816     B.RULE_OBJECT_ID,
817     B.USER_RULE_OBJECT_NAME,
818     B.DESCRIPTION,
819     B.CREATION_DATE,
820     B.CREATED_BY,
821     B.LAST_UPDATE_DATE,
822     B.LAST_UPDATED_BY,
823     B.LAST_UPDATE_LOGIN,
824     L.LANGUAGE_CODE,
825     B.SOURCE_LANG
826   from FUN_RULE_OBJECTS_TL B, FND_LANGUAGES L
827   where L.INSTALLED_FLAG in ('I', 'B')
828   and B.LANGUAGE = userenv('LANG')
829   and not exists
830     (select NULL
831     from FUN_RULE_OBJECTS_TL T
832     where T.RULE_OBJECT_ID = B.RULE_OBJECT_ID
833     and T.LANGUAGE = L.LANGUAGE_CODE);
834 end ADD_LANGUAGE;
835 
836 
837 
838 PROCEDURE TRANSLATE_ROW(
839   X_APP_SHORT_NAME in VARCHAR2,
840   X_RULE_OBJECT_NAME in VARCHAR2,
841   X_OWNER in VARCHAR2,
842   X_USER_RULE_OBJECT_NAME in VARCHAR2,
843   X_DESCRIPTION in VARCHAR2,
844   X_CUSTOM_MODE in VARCHAR2,
845   X_LAST_UPDATE_DATE in VARCHAR2
846 )
847 IS
848   appid number;
849   roid number;
850 
851   f_luby    number;  -- entity owner in file
852   f_ludate  date;    -- entity update date in file
853   db_luby   number;  -- entity owner in db
854   db_ludate date;    -- entity update date in db
855 BEGIN
856 
857   -- Translate owner to file_last_updated_by
858   f_luby := fnd_load_util.owner_id(x_owner);
859 
860   -- Translate char last_update_date to date
861   f_ludate := nvl(to_date(x_last_update_date, 'YYYY/MM/DD'), sysdate);
862 
863  BEGIN
864   SELECT application_id INTO appid
865   FROM fnd_application
866   WHERE application_short_name = X_APP_SHORT_NAME;
867  EXCEPTION
868   WHEN NO_DATA_FOUND THEN
869      -- Since this should never happen, throwing an exception with hard coded message text
870       app_exception.raise_exception(exception_text=>'Invalid application short name - '||X_APP_SHORT_NAME);
871  END;
872 
873  BEGIN
874   select RULE_OBJECT_ID
875   into roid
876   from FUN_RULE_OBJECTS_B
877   where APPLICATION_ID = appid
878   and RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
879   AND PARENT_RULE_OBJECT_ID IS NULL;
880 
881  EXCEPTION
882   WHEN NO_DATA_FOUND THEN
883      -- Since this should never happen, throwing an exception with hard coded message text
884      app_exception.raise_exception(exception_text=>'Invalid rule object name - '||x_rule_object_name);
885  END;
886 
887  BEGIN
888   select last_updated_by, last_update_date
889   into db_luby, db_ludate
890   from FUN_RULE_OBJECTS_TL
891   where rule_object_id = roid
892   and language = userenv('LANG');
893  EXCEPTION
894   WHEN NO_DATA_FOUND THEN
895      -- Since this should never happen, throwing an exception with hard coded message text
896      app_exception.raise_exception(exception_text=>'Unable to find translation row for rule object - '||x_rule_object_name||','||userenv('LANG'));
897  END;
898 
899   -- c. owners are the same, and file_date > db_date
900   if (fnd_load_util.UPLOAD_TEST(
901              p_file_id     => f_luby,
902              p_file_lud    => f_ludate,
903              p_db_id       => db_luby,
904              p_db_lud      => db_ludate,
905              p_custom_mode => x_custom_mode))
906   then
907     update FUN_RULE_OBJECTS_TL
908     set user_rule_object_name = nvl(x_user_rule_object_name, user_rule_object_name),
909         description = nvl(x_description, description),
910 	source_lang = userenv('LANG')
911     where rule_object_id = roid
912     and userenv('LANG') in (language, source_lang);
913   end if;
914 END TRANSLATE_ROW;
915 
916 
917 /* Currently we are not supporting the seeding of Rule Object Instances.
918    Only if the USE_INSTANCE_FLAG is Y and update mode, then we will propagate
919    the changes to all the instances. */
920 
921 procedure LOAD_ROW (
922   X_APP_SHORT_NAME in VARCHAR2,
923   X_RULE_OBJECT_NAME in VARCHAR2,
924   X_RESULT_TYPE in VARCHAR2,
925   X_REQUIRED_FLAG in VARCHAR2,
926   X_USE_DEFAULT_VALUE_FLAG IN VARCHAR2,
927   X_DEFAULT_APP_SHORT_NAME in VARCHAR2,
928   X_DEFAULT_VALUE in VARCHAR2,
929   X_FLEX_VALUE_SET_NAME in VARCHAR2,
930   X_FLEXFIELD_NAME in VARCHAR2,
931   X_FLEXFIELD_APP_SHORT_NAME in VARCHAR2,
932   X_MULTI_RULE_RESULT_FLAG in VARCHAR2,
933   X_USER_RULE_OBJECT_NAME in VARCHAR2,
934   X_DESCRIPTION in VARCHAR2,
935   X_USE_INSTANCE_FLAG           IN VARCHAR2 DEFAULT NULL,
936   X_OWNER                       IN VARCHAR2,
937   X_LAST_UPDATE_DATE            IN VARCHAR2,
938   X_ATT_OWNER                   IN VARCHAR2,
939   X_ATT_LAST_UPDATE_DATE        IN VARCHAR2,
940   X_CUSTOM_MODE                 IN VARCHAR2)
941 is
942 begin
943   LOAD_ROW(X_APP_SHORT_NAME,
944            X_RULE_OBJECT_NAME,
945            X_RESULT_TYPE,
946            X_REQUIRED_FLAG,
947            X_USE_DEFAULT_VALUE_FLAG,
948            X_FLEX_VALUE_SET_NAME,
949            X_FLEXFIELD_NAME,
950            X_FLEXFIELD_APP_SHORT_NAME,
951            X_MULTI_RULE_RESULT_FLAG,
952            X_USER_RULE_OBJECT_NAME,
953            X_DESCRIPTION,
954            NVL(X_USE_INSTANCE_FLAG, 'N'),
955            X_OWNER,
956            X_LAST_UPDATE_DATE,
957            X_CUSTOM_MODE);
958 
959   LOAD_ROW(X_APP_SHORT_NAME,
960            X_RULE_OBJECT_NAME,
961            X_DEFAULT_APP_SHORT_NAME,
962            X_DEFAULT_VALUE,
963            X_OWNER,
964            X_LAST_UPDATE_DATE,
965            X_CUSTOM_MODE);
966 end LOAD_ROW;
967 
968 procedure LOAD_ROW (
969   X_APP_SHORT_NAME in VARCHAR2,
970   X_RULE_OBJECT_NAME in VARCHAR2,
971   X_RESULT_TYPE in VARCHAR2,
972   X_REQUIRED_FLAG in VARCHAR2,
973   X_USE_DEFAULT_VALUE_FLAG  IN VARCHAR2,
974   X_FLEX_VALUE_SET_NAME in VARCHAR2,
975   X_FLEXFIELD_NAME in VARCHAR2,
976   X_FLEXFIELD_APP_SHORT_NAME in VARCHAR2,
977   X_MULTI_RULE_RESULT_FLAG in VARCHAR2,
978   X_USER_RULE_OBJECT_NAME in VARCHAR2,
979   X_DESCRIPTION in VARCHAR2,
980   X_USE_INSTANCE_FLAG           IN VARCHAR2  DEFAULT NULL,
981   X_OWNER                       IN VARCHAR2,
982   X_LAST_UPDATE_DATE            IN VARCHAR2,
983   X_CUSTOM_MODE                 IN VARCHAR2)
984 is
985    appid number := null;
986    vsid number := null;
987 
988   row_id varchar2(64);
989   f_luby    number;  -- entity owner in file
990   f_ludate  date;    -- entity update date in file
991   db_luby   number;  -- entity owner in db
992   db_ludate date;    -- entity update date in db
993   l_use_instance_flag   VARCHAR2(1);
994   l_parent_rule_object_id   fun_rule_objects_b.parent_rule_object_id%type;
995 
996   roid number;
997 
998   --For restoring the original values related to INSTANCE information.
999 
1000     CURSOR FUN_RULE_OBJECTS_CUR(p_rule_object_id NUMBER) IS
1001     SELECT
1002       B.RULE_OBJECT_ID,
1003       B.USE_INSTANCE_FLAG,
1004       B.INSTANCE_LABEL,
1005       B.PARENT_RULE_OBJECT_ID,
1006       B.ORG_ID
1007     FROM FUN_RULE_OBJECTS_B B
1008     WHERE B.PARENT_RULE_OBJECT_ID = p_rule_object_id;
1009 
1010 begin
1011    --
1012    -- Get the APPLICATION_ID. Required
1013   begin
1014     SELECT application_id INTO appid
1015     FROM fnd_application
1016     WHERE application_short_name = X_APP_SHORT_NAME;
1017   exception
1018      WHEN NO_DATA_FOUND THEN
1019      -- Since this should never happen, throwing an exception with hard coded message text
1020       app_exception.raise_exception(exception_text=>'Invalid application short name - '||X_APP_SHORT_NAME);
1021   end;
1022 
1023   --
1024   -- Get the FLEX_VALUE_SET_ID. Required only if name is not null
1025   IF x_flex_value_set_name IS NOT NULL THEN
1026     begin
1027       select flex_value_set_id into vsid
1028       from fnd_flex_value_sets
1029       where flex_value_set_name = X_FLEX_VALUE_SET_NAME;
1030     exception
1031       WHEN NO_DATA_FOUND THEN
1032      -- Since this should never happen, throwing an exception with hard coded message text
1033         app_exception.raise_exception(exception_text=>'Invalid value set name - '||x_flex_value_set_name);
1034     end;
1035    ELSE
1036     vsid := NULL;
1037   END IF;
1038 
1039   -- Translate owner to file_last_updated_by
1040   f_luby := fnd_load_util.owner_id(x_owner);
1041 
1042   -- Translate char last_update_date to date
1043   f_ludate := nvl(to_date(x_last_update_date, 'YYYY/MM/DD'), sysdate);
1044 
1045   --
1046   -- Get the RULE_OBJECT_ID, LAST_UPDATED_BY, LAST_UPDATE_DATE
1047   --
1048   -- Allow the SELECT to raise NO_DATA_FOUND so that it is caught and we
1049   -- go through the INSERT routine.
1050 
1051   select RULE_OBJECT_ID, LAST_UPDATED_BY, LAST_UPDATE_DATE , USE_INSTANCE_FLAG
1052   into roid, db_luby, db_ludate, l_use_instance_flag
1053   from FUN_RULE_OBJECTS_B
1054   where APPLICATION_ID = appid
1055   and RULE_OBJECT_NAME = X_RULE_OBJECT_NAME
1056   AND PARENT_RULE_OBJECT_ID IS NULL;
1057 
1058   --Raise an internal error, if developer wants to update the USE_INSTANCE_FLAG from Y to N.
1059   --Else, if the flag is NULL and NULL is passed, then make it as N
1060   if (  l_use_instance_flag  = 'Y' AND X_USE_INSTANCE_FLAG = 'N') then
1061     app_exception.raise_exception(exception_text=>'Cannot update USE_INSTANCE_FLAG from Y to N. Please use the upgrdae script for this');
1062   elsif ( l_use_instance_flag IS NULL AND  X_USE_INSTANCE_FLAG IS NULL) then
1063     l_use_instance_flag := 'N';
1064   else
1065     l_use_instance_flag := X_USE_INSTANCE_FLAG;
1066   end if;
1067 
1068 
1069   if (fnd_load_util.UPLOAD_TEST(
1070       p_file_id     => f_luby,
1071       p_file_lud    => f_ludate,
1072       p_db_id       => db_luby,
1073       p_db_lud      => db_ludate,
1074       p_custom_mode => x_custom_mode))
1075 
1076   then
1077     /*For Parent Rule Object, dont allow the users to Update the USE_INSTANCE_FLAG.
1078       Also, for these rule objects, INSTANCE_LABEL, PARENT_RULE_OBJECT_ID, ORG_ID
1079       should always be NULL. */
1080 
1081     UPDATE_ROW (
1082       appid,
1083       roid,
1084       X_RULE_OBJECT_NAME,
1085       X_RESULT_TYPE,
1086       X_REQUIRED_FLAG,
1087       X_USE_DEFAULT_VALUE_FLAG,
1088       vsid,
1089       X_FLEXFIELD_NAME,
1090       X_FLEXFIELD_APP_SHORT_NAME,
1091       X_MULTI_RULE_RESULT_FLAG,
1092       'ORACLE',
1093       X_USER_RULE_OBJECT_NAME,
1094       X_DESCRIPTION,
1095       l_use_instance_flag,
1096       null,           --INSTANCE_LABEL,
1097       null,           --PARENT_RULE_OBJECT_ID,
1098       null,           --ORG_ID,
1099       f_ludate,
1100       f_luby,
1101       0);
1102 
1103      --After successful Update to Parent Rule Object,
1104      --we should check if any Rule Object Instances exists or not . If exists,
1105      --then propagate the changes from Parent Rule Object's non Instance information
1106      --to Rule Object Instances.
1107 
1108      BEGIN
1109        IF(upper(l_use_instance_flag) = 'Y') THEN
1110           FOR C_REC IN FUN_RULE_OBJECTS_CUR(roid) LOOP
1111 
1112              UPDATE_ROW (
1113                     appid,
1114                     C_REC.RULE_OBJECT_ID,
1115                     X_RULE_OBJECT_NAME,
1116                     X_RESULT_TYPE,
1117                     X_REQUIRED_FLAG,
1118                     X_USE_DEFAULT_VALUE_FLAG,
1119                     vsid,
1120                     X_FLEXFIELD_NAME,
1121                     X_FLEXFIELD_APP_SHORT_NAME,
1122                     X_MULTI_RULE_RESULT_FLAG,
1123                    'ORACLE',
1124                     X_USER_RULE_OBJECT_NAME,
1125                     X_DESCRIPTION,
1126                     C_REC.USE_INSTANCE_FLAG,
1127                     C_REC.INSTANCE_LABEL,
1128                     C_REC.PARENT_RULE_OBJECT_ID,
1129                     C_REC.ORG_ID,
1130                     f_ludate,
1131                     f_luby,
1132                     0);
1133 
1134 	  END LOOP;
1135        END IF;
1136      EXCEPTION
1137         WHEN NO_DATA_FOUND THEN
1138 	   NULL;
1139      END;
1140      --End of Rule Object Instance changes propagation for UPDATE Mode.
1141   end if;
1142 
1143 EXCEPTION
1144 
1145 WHEN NO_DATA_FOUND THEN
1146   SELECT fun_rule_objects_s.nextval into roid from dual;
1147 
1148   --Pass NULL values for INSTANCE_LABEL, PARENT_RULE_OBJECT_ID, ORG_ID
1149   --for Rule Object Instances because we dont support seeding of the
1150   --Rule Object Instance. may be we need it later.
1151 
1152   INSERT_ROW (
1153     row_id,
1154     roid,
1155     appid,
1156     X_RULE_OBJECT_NAME,
1157     X_RESULT_TYPE,
1158     X_REQUIRED_FLAG,
1159     X_USE_DEFAULT_VALUE_FLAG,
1160     vsid,
1161     X_FLEXFIELD_NAME,
1162     X_FLEXFIELD_APP_SHORT_NAME,
1163     X_MULTI_RULE_RESULT_FLAG,
1164     'ORACLE',
1165     X_USER_RULE_OBJECT_NAME,
1166     X_DESCRIPTION,
1167     X_USE_INSTANCE_FLAG,
1168     null,   --INSTANCE_LABEL
1169     null,   --PARENT_RULE_OBJECT_ID
1170     null,   --ORG_ID
1171     f_ludate,
1172     f_luby,
1173     f_ludate,
1174     f_luby,
1175     0);
1176 
1177 end LOAD_ROW;
1178 
1179 
1180 procedure LOAD_ROW (
1181   X_APP_SHORT_NAME in VARCHAR2,
1182   X_RULE_OBJECT_NAME in VARCHAR2,
1183   X_DEFAULT_APP_SHORT_NAME in VARCHAR2,
1184   X_DEFAULT_VALUE in VARCHAR2,
1185   X_OWNER                       IN VARCHAR2,
1186   X_LAST_UPDATE_DATE            IN VARCHAR2,
1187   X_CUSTOM_MODE                 IN VARCHAR2)
1188 is
1189    appid number;
1190    default_appid number;
1191 
1192   row_id varchar2(64);
1193   f_luby    number;  -- entity owner in file
1194   f_ludate  date;    -- entity update date in file
1195   db_luby   number;  -- entity owner in db
1196   db_ludate date;    -- entity update date in db
1197 
1198   roid number;
1199 begin
1200 
1201  BEGIN
1202   SELECT application_id INTO appid
1203   FROM fnd_application
1204   WHERE application_short_name = X_APP_SHORT_NAME;
1205  EXCEPTION
1206   WHEN NO_DATA_FOUND THEN
1207      -- Since this should never happen, throwing an exception with hard coded message text
1208       app_exception.raise_exception(exception_text=>'Invalid application short name - '||X_APP_SHORT_NAME);
1209  END;
1210 
1211   if (X_DEFAULT_APP_SHORT_NAME IS NOT NULL) then
1212     SELECT application_id INTO default_appid
1213     FROM fnd_application
1214     WHERE application_short_name = X_DEFAULT_APP_SHORT_NAME;
1215   else
1216     default_appid := null;
1217   end if;
1218 
1219   -- Translate owner to file_last_updated_by
1220   f_luby := fnd_load_util.owner_id(x_owner);
1221 
1222   -- Translate char last_update_date to date
1223   f_ludate := nvl(to_date(x_last_update_date, 'YYYY/MM/DD'), sysdate);
1224 
1225  BEGIN
1226   SELECT RULE_OBJECT_ID
1227   into roid
1228   FROM FUN_RULE_OBJECTS_B
1229   WHERE application_id = appid
1230   AND   rule_object_name = X_RULE_OBJECT_NAME
1231   AND   parent_rule_object_id IS NULL;
1232  EXCEPTION
1233   WHEN NO_DATA_FOUND THEN
1234      -- Since this should never happen, throwing an exception with hard coded message text
1235      app_exception.raise_exception(exception_text=>'Invalid rule object name - '||x_rule_object_name);
1236  END;
1237 
1238 
1239   BEGIN
1240     select LAST_UPDATED_BY, LAST_UPDATE_DATE
1241     into db_luby, db_ludate
1242     from FUN_RULE_OBJ_ATTRIBUTES
1243     where RULE_OBJECT_ID = roid;
1244 
1245     if (fnd_load_util.UPLOAD_TEST(
1246         p_file_id     => f_luby,
1247         p_file_lud    => f_ludate,
1248         p_db_id       => db_luby,
1249         p_db_lud      => db_ludate,
1250         p_custom_mode => x_custom_mode))
1251     then
1252       UPDATE_ROW (
1253         appid,
1254         roid,
1255         default_appid,
1256         X_DEFAULT_VALUE,
1257         f_ludate,
1258         f_luby,
1259         0);
1260     end if;
1261 
1262   EXCEPTION
1263   WHEN NO_DATA_FOUND THEN
1264     INSERT_ROW (row_id,
1265                 roid,
1266                 appid,
1267                 X_RULE_OBJECT_NAME,
1268                 default_appid,
1269                 X_DEFAULT_VALUE,
1270                 f_ludate,
1271                 f_luby,
1272                 f_ludate,
1273                 f_luby,
1274                 0);
1275 
1276   END;
1277 end LOAD_ROW;
1278 
1279 END FUN_RULE_OBJECTS_PKG;