DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_FLEX_VDATION_RULES_PKG

Source


1 package body FND_FLEX_VDATION_RULES_PKG as
2 /* $Header: AFFFVDRB.pls 120.2.12010000.1 2008/07/25 14:14:48 appldev ship $ */
3 
4 procedure INSERT_ROW (
5   X_ROWID IN OUT NOCOPY VARCHAR2,
6   X_APPLICATION_ID in NUMBER,
7   X_ID_FLEX_CODE in VARCHAR2,
8   X_ID_FLEX_NUM in NUMBER,
9   X_FLEX_VALIDATION_RULE_NAME in VARCHAR2,
10   X_ENABLED_FLAG in VARCHAR2,
11   X_ERROR_SEGMENT_COLUMN_NAME in VARCHAR2,
12   X_START_DATE_ACTIVE in DATE,
13   X_END_DATE_ACTIVE in DATE,
14   X_ERROR_MESSAGE_TEXT in VARCHAR2,
15   X_DESCRIPTION in VARCHAR2,
16   X_CREATION_DATE in DATE,
17   X_CREATED_BY in NUMBER,
18   X_LAST_UPDATE_DATE in DATE,
19   X_LAST_UPDATED_BY in NUMBER,
20   X_LAST_UPDATE_LOGIN in NUMBER
21 ) is
22   cursor C is select ROWID from FND_FLEX_VALIDATION_RULES
23     where APPLICATION_ID = X_APPLICATION_ID
24     and ID_FLEX_CODE = X_ID_FLEX_CODE
25     and ID_FLEX_NUM = X_ID_FLEX_NUM
26     and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME
27     ;
28 begin
29   insert into FND_FLEX_VALIDATION_RULES (
30     APPLICATION_ID,
31     ID_FLEX_CODE,
32     ID_FLEX_NUM,
33     FLEX_VALIDATION_RULE_NAME,
34     ENABLED_FLAG,
35     ERROR_SEGMENT_COLUMN_NAME,
36     START_DATE_ACTIVE,
37     END_DATE_ACTIVE,
38     CREATION_DATE,
39     CREATED_BY,
40     LAST_UPDATE_DATE,
41     LAST_UPDATED_BY,
42     LAST_UPDATE_LOGIN
43   ) values (
44     X_APPLICATION_ID,
45     X_ID_FLEX_CODE,
46     X_ID_FLEX_NUM,
47     X_FLEX_VALIDATION_RULE_NAME,
48     X_ENABLED_FLAG,
49     X_ERROR_SEGMENT_COLUMN_NAME,
50     X_START_DATE_ACTIVE,
51     X_END_DATE_ACTIVE,
52     X_CREATION_DATE,
53     X_CREATED_BY,
54     X_LAST_UPDATE_DATE,
55     X_LAST_UPDATED_BY,
56     X_LAST_UPDATE_LOGIN
57   );
58 
59   insert into FND_FLEX_VDATION_RULES_TL (
60     DESCRIPTION,
61     APPLICATION_ID,
62     ID_FLEX_CODE,
63     ID_FLEX_NUM,
64     FLEX_VALIDATION_RULE_NAME,
65     LAST_UPDATE_DATE,
66     LAST_UPDATED_BY,
67     CREATION_DATE,
68     CREATED_BY,
69     LAST_UPDATE_LOGIN,
70     ERROR_MESSAGE_TEXT,
71     LANGUAGE,
72     SOURCE_LANG
73   ) select
74     X_DESCRIPTION,
75     X_APPLICATION_ID,
76     X_ID_FLEX_CODE,
77     X_ID_FLEX_NUM,
78     X_FLEX_VALIDATION_RULE_NAME,
79     X_LAST_UPDATE_DATE,
80     X_LAST_UPDATED_BY,
81     X_CREATION_DATE,
82     X_CREATED_BY,
83     X_LAST_UPDATE_LOGIN,
84     X_ERROR_MESSAGE_TEXT,
85     L.LANGUAGE_CODE,
86     userenv('LANG')
87   from FND_LANGUAGES L
88   where L.INSTALLED_FLAG in ('I', 'B')
89   and not exists
90     (select NULL
91     from FND_FLEX_VDATION_RULES_TL T
92     where T.APPLICATION_ID = X_APPLICATION_ID
93     and T.ID_FLEX_CODE = X_ID_FLEX_CODE
94     and T.ID_FLEX_NUM = X_ID_FLEX_NUM
95     and T.FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME
96     and T.LANGUAGE = L.LANGUAGE_CODE);
97 
98   open c;
99   fetch c into X_ROWID;
100   if (c%notfound) then
101     close c;
102     raise no_data_found;
103   end if;
104   close c;
105 
106 end INSERT_ROW;
107 
108 procedure LOCK_ROW (
109   X_APPLICATION_ID in NUMBER,
110   X_ID_FLEX_CODE in VARCHAR2,
111   X_ID_FLEX_NUM in NUMBER,
112   X_FLEX_VALIDATION_RULE_NAME in VARCHAR2,
113   X_ENABLED_FLAG in VARCHAR2,
114   X_ERROR_SEGMENT_COLUMN_NAME in VARCHAR2,
115   X_START_DATE_ACTIVE in DATE,
116   X_END_DATE_ACTIVE in DATE,
117   X_ERROR_MESSAGE_TEXT in VARCHAR2,
118   X_DESCRIPTION in VARCHAR2
119 ) is
120   cursor c is select
121       ENABLED_FLAG,
122       ERROR_SEGMENT_COLUMN_NAME,
123       START_DATE_ACTIVE,
124       END_DATE_ACTIVE
125     from FND_FLEX_VALIDATION_RULES
126     where APPLICATION_ID = X_APPLICATION_ID
127     and ID_FLEX_CODE = X_ID_FLEX_CODE
128     and ID_FLEX_NUM = X_ID_FLEX_NUM
129     and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME
130     for update of APPLICATION_ID nowait;
131   recinfo c%rowtype;
132 
133   cursor c1 is select
134       ERROR_MESSAGE_TEXT,
135       DESCRIPTION,
136       decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
137     from FND_FLEX_VDATION_RULES_TL
138     where APPLICATION_ID = X_APPLICATION_ID
139     and ID_FLEX_CODE = X_ID_FLEX_CODE
140     and ID_FLEX_NUM = X_ID_FLEX_NUM
141     and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME
142     and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
143     for update of APPLICATION_ID nowait;
144 begin
145   open c;
146   fetch c into recinfo;
147   if (c%notfound) then
148     close c;
149     fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
150     app_exception.raise_exception;
151   end if;
152   close c;
153   if (    (recinfo.ENABLED_FLAG = X_ENABLED_FLAG)
154       AND ((recinfo.ERROR_SEGMENT_COLUMN_NAME = X_ERROR_SEGMENT_COLUMN_NAME)
155            OR ((recinfo.ERROR_SEGMENT_COLUMN_NAME is null) AND (X_ERROR_SEGMENT_COLUMN_NAME is null)))
156       AND ((recinfo.START_DATE_ACTIVE = X_START_DATE_ACTIVE)
157            OR ((recinfo.START_DATE_ACTIVE is null) AND (X_START_DATE_ACTIVE is null)))
158       AND ((recinfo.END_DATE_ACTIVE = X_END_DATE_ACTIVE)
159            OR ((recinfo.END_DATE_ACTIVE is null) AND (X_END_DATE_ACTIVE is null)))
160   ) then
161     null;
162   else
163     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
164     app_exception.raise_exception;
165   end if;
166 
167   for tlinfo in c1 loop
168     if (tlinfo.BASELANG = 'Y') then
169       if (    (tlinfo.ERROR_MESSAGE_TEXT = X_ERROR_MESSAGE_TEXT)
170           AND ((tlinfo.DESCRIPTION = X_DESCRIPTION)
171                OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
172       ) then
173         null;
174       else
175         fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
176         app_exception.raise_exception;
177       end if;
178     end if;
179   end loop;
180   return;
181 end LOCK_ROW;
182 
183 procedure UPDATE_ROW (
184   X_APPLICATION_ID in NUMBER,
185   X_ID_FLEX_CODE in VARCHAR2,
186   X_ID_FLEX_NUM in NUMBER,
187   X_FLEX_VALIDATION_RULE_NAME in VARCHAR2,
188   X_ENABLED_FLAG in VARCHAR2,
189   X_ERROR_SEGMENT_COLUMN_NAME in VARCHAR2,
190   X_START_DATE_ACTIVE in DATE,
191   X_END_DATE_ACTIVE in DATE,
192   X_ERROR_MESSAGE_TEXT in VARCHAR2,
193   X_DESCRIPTION in VARCHAR2,
194   X_LAST_UPDATE_DATE in DATE,
195   X_LAST_UPDATED_BY in NUMBER,
196   X_LAST_UPDATE_LOGIN in NUMBER
197 ) is
198 begin
199   update FND_FLEX_VALIDATION_RULES set
200     ENABLED_FLAG = X_ENABLED_FLAG,
201     ERROR_SEGMENT_COLUMN_NAME = X_ERROR_SEGMENT_COLUMN_NAME,
202     START_DATE_ACTIVE = X_START_DATE_ACTIVE,
203     END_DATE_ACTIVE = X_END_DATE_ACTIVE,
204     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
205     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
206     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
207   where APPLICATION_ID = X_APPLICATION_ID
208   and ID_FLEX_CODE = X_ID_FLEX_CODE
209   and ID_FLEX_NUM = X_ID_FLEX_NUM
210   and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME;
211 
212   if (sql%notfound) then
213     raise no_data_found;
214   end if;
215 
216   update FND_FLEX_VDATION_RULES_TL set
217     ERROR_MESSAGE_TEXT = X_ERROR_MESSAGE_TEXT,
218     DESCRIPTION = X_DESCRIPTION,
219     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
220     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
221     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
222     SOURCE_LANG = userenv('LANG')
223   where APPLICATION_ID = X_APPLICATION_ID
224   and ID_FLEX_CODE = X_ID_FLEX_CODE
225   and ID_FLEX_NUM = X_ID_FLEX_NUM
226   and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME
227   and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
228 
229   if (sql%notfound) then
230     raise no_data_found;
231   end if;
232 end UPDATE_ROW;
233 
234 procedure DELETE_ROW (
235   X_APPLICATION_ID in NUMBER,
236   X_ID_FLEX_CODE in VARCHAR2,
237   X_ID_FLEX_NUM in NUMBER,
238   X_FLEX_VALIDATION_RULE_NAME in VARCHAR2
239 ) is
240 begin
241   delete from FND_FLEX_VDATION_RULES_TL
242   where APPLICATION_ID = X_APPLICATION_ID
243   and ID_FLEX_CODE = X_ID_FLEX_CODE
244   and ID_FLEX_NUM = X_ID_FLEX_NUM
245   and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME;
246 
247   if (sql%notfound) then
248     raise no_data_found;
249   end if;
250 
251   delete from FND_FLEX_VALIDATION_RULES
252   where APPLICATION_ID = X_APPLICATION_ID
253   and ID_FLEX_CODE = X_ID_FLEX_CODE
254   and ID_FLEX_NUM = X_ID_FLEX_NUM
255   and FLEX_VALIDATION_RULE_NAME = X_FLEX_VALIDATION_RULE_NAME;
256 
257   if (sql%notfound) then
258     raise no_data_found;
259   end if;
260 end DELETE_ROW;
261 
262 procedure ADD_LANGUAGE
263  is
264  begin
265 /* Mar/19/03 requested by Ric Ginsberg */
266 /* The following delete and update statements are commented out */
267 /* as a quick workaround to fix the time-consuming table handler issue */
268 /* Eventually we'll need to turn them into a separate fix_language procedure */
269 /*
270 
271    delete from FND_FLEX_VDATION_RULES_TL T
272    where not exists
273      (select NULL
274      from FND_FLEX_VALIDATION_RULES B
275      where B.APPLICATION_ID = T.APPLICATION_ID
276      and B.ID_FLEX_CODE = T.ID_FLEX_CODE
277      and B.ID_FLEX_NUM = T.ID_FLEX_NUM
278      and B.FLEX_VALIDATION_RULE_NAME = T.FLEX_VALIDATION_RULE_NAME
279      );
280 
281    update FND_FLEX_VDATION_RULES_TL T set (
282        ERROR_MESSAGE_TEXT,
283        DESCRIPTION
284      ) = (select
285        B.ERROR_MESSAGE_TEXT,
286        B.DESCRIPTION
287      from FND_FLEX_VDATION_RULES_TL B
288      where B.APPLICATION_ID = T.APPLICATION_ID
289      and B.ID_FLEX_CODE = T.ID_FLEX_CODE
290      and B.ID_FLEX_NUM = T.ID_FLEX_NUM
291      and B.FLEX_VALIDATION_RULE_NAME = T.FLEX_VALIDATION_RULE_NAME
292      and B.LANGUAGE = T.SOURCE_LANG)
293    where (
294        T.APPLICATION_ID,
295        T.ID_FLEX_CODE,
296        T.ID_FLEX_NUM,
297        T.FLEX_VALIDATION_RULE_NAME,
298        T.LANGUAGE
299    ) in (select
300        SUBT.APPLICATION_ID,
301        SUBT.ID_FLEX_CODE,
302        SUBT.ID_FLEX_NUM,
303        SUBT.FLEX_VALIDATION_RULE_NAME,
304        SUBT.LANGUAGE
305      from FND_FLEX_VDATION_RULES_TL SUBB, FND_FLEX_VDATION_RULES_TL SUBT
306      where SUBB.APPLICATION_ID = SUBT.APPLICATION_ID
307      and SUBB.ID_FLEX_CODE = SUBT.ID_FLEX_CODE
308      and SUBB.ID_FLEX_NUM = SUBT.ID_FLEX_NUM
309      and SUBB.FLEX_VALIDATION_RULE_NAME = SUBT.FLEX_VALIDATION_RULE_NAME
310      and SUBB.LANGUAGE = SUBT.SOURCE_LANG
311      and (SUBB.ERROR_MESSAGE_TEXT <> SUBT.ERROR_MESSAGE_TEXT
312        or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
313        or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
314        or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
315    ));
316 */
317 
318    insert /*+ append parallel(tt) */ into FND_FLEX_VDATION_RULES_TL tt (
319      DESCRIPTION,
320      APPLICATION_ID,
321      ID_FLEX_CODE,
322      ID_FLEX_NUM,
323      FLEX_VALIDATION_RULE_NAME,
324      LAST_UPDATE_DATE,
325      LAST_UPDATED_BY,
326      CREATION_DATE,
327      CREATED_BY,
328      LAST_UPDATE_LOGIN,
329      ERROR_MESSAGE_TEXT,
330      LANGUAGE,
331      SOURCE_LANG
332    )
333      select /*+ parallel(v) parallel(t) use_nl(t) */ v.* from
334      (select /*+ no_merge ordered parallel(b) */
335      B.DESCRIPTION,
336      B.APPLICATION_ID,
337      B.ID_FLEX_CODE,
338      B.ID_FLEX_NUM,
339      B.FLEX_VALIDATION_RULE_NAME,
340      B.LAST_UPDATE_DATE,
341      B.LAST_UPDATED_BY,
342      B.CREATION_DATE,
343      B.CREATED_BY,
344      B.LAST_UPDATE_LOGIN,
345      B.ERROR_MESSAGE_TEXT,
346      L.LANGUAGE_CODE,
347      B.SOURCE_LANG
348    from FND_FLEX_VDATION_RULES_TL B, FND_LANGUAGES L
349    where L.INSTALLED_FLAG in ('I', 'B')
350    and B.LANGUAGE = userenv('LANG')
351    ) v, FND_FLEX_VDATION_RULES_TL t
352    where t.application_id(+) = v.application_id
353    and t.id_flex_code(+) = v.id_flex_code
354    and t.id_flex_num(+) = v.id_flex_num
355    and t.flex_validation_rule_name(+) = v.flex_validation_rule_name
356    and t.language(+) = v.language_code
357    and t.application_id is NULL
358    and t.id_flex_code is NULL
359    and t.id_flex_num is NULL
360    and t.flex_validation_rule_name is NULL;
361 
362 end ADD_LANGUAGE;
363 
364 PROCEDURE load_row
365   (x_application_short_name       IN VARCHAR2,
366    x_id_flex_code                 IN VARCHAR2,
367    x_id_flex_structure_code       IN VARCHAR2,
368    x_flex_validation_rule_name    IN VARCHAR2,
369    x_who                          IN fnd_flex_loader_apis.who_type,
370    x_enabled_flag                 IN VARCHAR2,
371    x_error_segment_column_name    IN VARCHAR2,
372    x_start_date_active            IN DATE,
373    x_end_date_active              IN DATE,
374    x_error_message_text           IN VARCHAR2,
375    x_description                  IN VARCHAR2)
376   IS
377      l_application_id    NUMBER;
378      l_id_flex_num       NUMBER;
379      l_rowid             VARCHAR2(64);
380 BEGIN
381    SELECT application_id
382      INTO l_application_id
383      FROM fnd_application
384      WHERE application_short_name = x_application_short_name;
385 
386    SELECT id_flex_num
387      INTO l_id_flex_num
388      FROM fnd_id_flex_structures
389      WHERE application_id = l_application_id
390      AND id_flex_code = x_id_flex_code
391      AND id_flex_structure_code = x_id_flex_structure_code;
392 
393    BEGIN
394       fnd_flex_vdation_rules_pkg.update_row
395 	(X_APPLICATION_ID               => l_application_id,
396 	 X_ID_FLEX_CODE                 => x_id_flex_code,
397 	 X_ID_FLEX_NUM                  => l_id_flex_num,
398 	 X_FLEX_VALIDATION_RULE_NAME    => x_flex_validation_rule_name,
399 	 X_DESCRIPTION                  => x_description,
400 	 X_ENABLED_FLAG                 => x_enabled_flag,
401 	 X_ERROR_SEGMENT_COLUMN_NAME    => x_error_segment_column_name,
402 	 X_START_DATE_ACTIVE            => x_start_date_active,
403 	 X_END_DATE_ACTIVE              => x_end_date_active,
404 	 X_ERROR_MESSAGE_TEXT           => x_error_message_text,
405 	 X_LAST_UPDATE_DATE             => x_who.last_update_date,
406 	 X_LAST_UPDATED_BY              => x_who.last_updated_by,
407 	 X_LAST_UPDATE_LOGIN            => x_who.last_update_login);
408    EXCEPTION
409       WHEN no_data_found THEN
410 	 fnd_flex_vdation_rules_pkg.insert_row
411 	   (X_ROWID                        => l_rowid,
412 	    X_APPLICATION_ID               => l_application_id,
413 	    X_ID_FLEX_CODE                 => x_id_flex_code,
414 	    X_ID_FLEX_NUM                  => l_id_flex_num,
415 	    X_FLEX_VALIDATION_RULE_NAME    => x_flex_validation_rule_name,
416 	    X_DESCRIPTION                  => x_description,
417 	    X_ENABLED_FLAG                 => x_enabled_flag,
418 	    X_ERROR_SEGMENT_COLUMN_NAME    => x_error_segment_column_name,
419 	    X_START_DATE_ACTIVE            => x_start_date_active,
420 	    X_END_DATE_ACTIVE              => x_end_date_active,
421 	    X_ERROR_MESSAGE_TEXT           => x_error_message_text,
422 	    X_CREATION_DATE                => x_who.creation_date,
423   	    X_CREATED_BY                   => x_who.created_by,
424 	    X_LAST_UPDATE_DATE             => x_who.last_update_date,
425 	    X_LAST_UPDATED_BY              => x_who.last_updated_by,
426 	    X_LAST_UPDATE_LOGIN            => x_who.last_update_login);
427    END;
428 END load_row;
429 
430 PROCEDURE translate_row
431   (x_application_short_name       IN VARCHAR2,
432    x_id_flex_code                 IN VARCHAR2,
433    x_id_flex_structure_code       IN VARCHAR2,
434    x_flex_validation_rule_name    IN VARCHAR2,
435    x_who                          IN fnd_flex_loader_apis.who_type,
436    x_error_message_text           IN VARCHAR2,
437    x_description                  IN VARCHAR2)
438   IS
439 BEGIN
440    UPDATE fnd_flex_vdation_rules_tl SET
441      error_message_text = Nvl(x_error_message_text, error_message_text),
442      description        = Nvl(x_description, description),
443      last_update_date   = x_who.last_update_date,
444      last_updated_by    = x_who.last_updated_by,
445      last_update_login  = x_who.last_update_login,
446      source_lang        = userenv('LANG')
447      WHERE ((application_id, id_flex_code, id_flex_num) =
448 	    (SELECT application_id, id_flex_code, id_flex_num
449 	     FROM fnd_id_flex_structures
450 	     WHERE (application_id =
451 		    (SELECT application_id
452 		     FROM fnd_application
453                      WHERE application_short_name = x_application_short_name))
454 	     AND id_flex_code = x_id_flex_code
455              AND id_flex_structure_code = x_id_flex_structure_code))
456      AND flex_validation_rule_name = x_flex_validation_rule_name
457      AND userenv('LANG') in (language, source_lang);
458 END translate_row;
459 
460 end FND_FLEX_VDATION_RULES_PKG;