DBA Data[Home] [Help]

PACKAGE BODY: APPS.ECX_XREF_STANDARDS_PKG

Source


1 package body ECX_XREF_STANDARDS_PKG as
2 /* $Header: ECXXRFSB.pls 120.3 2006/05/24 16:39:39 sbastida ship $ */
3 
4 
5 procedure TRANSLATE_ROW (
6   X_XREF_CATEGORY_ID in NUMBER,
7   X_STANDARD_ID in NUMBER,
8   X_XREF_STD_VALUE in VARCHAR2,
9   X_XREF_INT_VALUE in VARCHAR2,
10   X_DESCRIPTION in VARCHAR2,
11   X_OWNER in VARCHAR2,
12   X_CUSTOM_MODE in VARCHAR2)
13 is
14   l_luby             number;  -- entity owner in file
15   l_ludate           date;    -- entity update date in file
16   l_db_luby          number;  -- entity owner in db
17   l_db_ludate        date;    -- entity update date in db
18   l_xref_standard_id  number;
19 begin
20 
21   -- Translate owner to file_last_updated_by
22   if (x_owner = 'SEED') then
23     l_luby := 1;
24   else
25     l_luby := 0;
26   end if;
27 
28   -- Translate char last_update_date to date
29    -- l_ludate := to_date(sysdate,wf_core.canonical_date_mask); BUG:5241678
30   l_ludate := sysdate;
31 
32   begin
33     select xref_standard_id
34       into l_xref_standard_id
35       from ecx_xref_standards_b
36      where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID
37       and STANDARD_ID = X_STANDARD_ID
38       and XREF_STD_VALUE = X_XREF_STD_VALUE
39       and XREF_INT_VALUE = X_XREF_INT_VALUE;
40 
41     select LAST_UPDATED_BY, LAST_UPDATE_DATE
42     into l_db_luby, l_db_ludate
43     from ECX_XREF_STANDARDS_TL
44     where XREF_STANDARD_ID = l_xref_standard_id
45       and LANGUAGE = userenv('LANG');
46 
47     -- Update record, honoring customization mode.
48     -- Record should be updated only if:
49     -- a. CUSTOM_MODE = FORCE, or
50     -- b. file owner is CUSTOM, db owner is SEED
51     -- c. owners are the same, and file_date > db_date
52     if ((x_custom_mode = 'FORCE') or
53         ((l_luby = 0) and (l_db_luby = 1)) or
54         ((l_luby = l_db_luby) and (l_ludate > l_db_ludate)))
55     then
56       update ECX_XREF_STANDARDS_TL set
57         DESCRIPTION              = nvl(x_description, DESCRIPTION),
58         SOURCE_LANG              = userenv('LANG'),
59         LAST_UPDATE_DATE         = l_ludate,
60         LAST_UPDATED_BY          = l_luby,
61         LAST_UPDATE_LOGIN        = 0
62       where XREF_STANDARD_ID = l_xref_standard_id
63       and LANGUAGE = userenv('LANG')
64       and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
65     end if;
66   exception
67     when no_data_found then
68       null;
69   end;
70 end TRANSLATE_ROW;
71 
72 procedure LOAD_ROW (
73   X_XREF_CATEGORY_CODE IN VARCHAR2 ,
74   X_STANDARD_CODE IN VARCHAR2,
75   X_STANDARD_TYPE IN VARCHAR2,
76   X_XREF_STD_VALUE IN VARCHAR2,
77   X_XREF_INT_VALUE IN VARCHAR2,
78   X_DESCRIPTION IN VARCHAR2,
79   X_OWNER IN VARCHAR2,
80   X_CUSTOM_MODE IN VARCHAR2
81 )
82 is
83   l_luby                  number;  -- entity owner in file
84   l_ludate                date;    -- entity update date in file
85   l_db_luby               number;  -- entity owner in db
86   l_db_ludate             date;    -- entity update date in db
87   l_ret_code              pls_integer :=0;
88   l_errmsg                varchar2(2000) := null;
89   l_xref_standard_id      number := 0;
90   l_standard_id           number := 0;
91   l_hdr_id                number :=0;
92   l_data_seeded           varchar2(1) := 'Y';
93 begin
94   -- Translate owner to file_last_updated_by
95   if (x_owner = 'SEED') then
96     l_luby := 1;
97     l_data_seeded := 'Y';
98   else
99     l_luby := 0;
100     l_data_seeded := 'N';
101   end if;
102 
103   l_ludate := sysdate;
104   begin
105     select XREF_CATEGORY_ID
106       into l_hdr_id
107       from ecx_xref_hdr
108      where xref_category_code = X_XREF_CATEGORY_CODE;
109 
110     select STANDARD_ID
111       into l_standard_id
112       from ecx_standards
113      where standard_code = X_STANDARD_CODE
114        and standard_type = nvl(X_STANDARD_TYPE, 'XML');
115 
116     select XREF_STANDARD_ID, LAST_UPDATED_BY, LAST_UPDATE_DATE
117       into l_xref_standard_id, l_db_luby, l_db_ludate
118       from ECX_XREF_STANDARDS_B
119      where XREF_CATEGORY_ID = l_hdr_id
120        and STANDARD_ID = l_standard_id
121        and XREF_STD_VALUE = X_XREF_STD_VALUE
122        and XREF_INT_VALUE = X_XREF_INT_VALUE;
123 
124     -- Update record, honoring customization mode.
125     -- Record should be updated only if:
126     -- a. CUSTOM_MODE = FORCE, or
127     -- b. file owner is CUSTOM, db owner is SEED
128     -- c. owners are the same, and file_date > db_date
129     if ((x_custom_mode = 'FORCE') or
130         ((l_luby = 0) and (l_db_luby = 1)) or
131         ((l_luby = l_db_luby) and (l_ludate > l_db_ludate)))
132     then
133         ecx_xref_api.update_standard_code_values(
134           x_return_status     => l_ret_code,
135           x_msg               => l_errmsg,
136           p_xref_standard_id  => l_xref_standard_id,
137           p_xref_std_value    => X_XREF_STD_VALUE,
138           p_xref_int_value    => X_XREF_INT_VALUE,
139           p_description       => X_DESCRIPTION,
140           p_owner             => X_OWNER);
141 
142         if NOT(l_ret_code = ECX_UTIL_API.G_NO_ERROR) then
143          raise_application_error(-20000, l_errmsg);
144         end if;
145 
146     end if;
147   exception
148      when no_data_found then
149         ecx_xref_api.create_standard_code_values(
150           x_return_status       => l_ret_code,
151           x_msg                 => l_errmsg,
152           x_xref_std_id         => l_xref_standard_id,
153           x_xref_category_id    => l_hdr_id,
154           p_xref_category_code  => X_XREF_CATEGORY_CODE,
155           p_standard            => X_STANDARD_CODE,
156           p_xref_std_value      => X_XREF_STD_VALUE,
157           p_xref_int_value      => X_XREF_INT_VALUE,
158           p_description         => X_DESCRIPTION,
159           p_data_seeded         => l_data_seeded,
160           p_owner               => X_OWNER,
161           p_standard_type       => nvl(X_STANDARD_TYPE, 'XML'));
162 
163         if NOT(l_ret_code = ECX_UTIL_API.G_NO_ERROR) then
164           /** Adding this dup val check for backward compatibility
165               prior to ecx_xref_standards index change.
166               We do not want to insert duplicates or
167               have patch error out for duplicates. **/
168           if NOT(l_ret_code = ECX_UTIL_API.G_DUP_ERROR) then
169             raise_application_error(-20000, l_errmsg);
170           end if;
171         end if;
172      when others then
173        raise;
174   end;
175 end LOAD_ROW;
176 
177 procedure INSERT_ROW (
178   X_ROWID in out nocopy VARCHAR2,
179   X_XREF_STANDARD_ID in NUMBER,
180   X_XREF_CATEGORY_ID in NUMBER,
181   X_STANDARD_ID in NUMBER,
182   X_XREF_STANDARD_CODE in VARCHAR2,
183   X_XREF_STD_VALUE in VARCHAR2,
184   X_XREF_INT_VALUE in VARCHAR2,
185   X_DATA_SEEDED in VARCHAR2,
186   X_DESCRIPTION in VARCHAR2,
187   X_CREATION_DATE in DATE,
188   X_CREATED_BY in NUMBER,
189   X_LAST_UPDATE_DATE in DATE,
190   X_LAST_UPDATED_BY in NUMBER,
191   X_LAST_UPDATE_LOGIN in NUMBER
192 ) is
193   cursor C is select ROWID from ECX_XREF_STANDARDS_B
194     where XREF_STANDARD_ID = X_XREF_STANDARD_ID
195     ;
196 begin
197   insert into ECX_XREF_STANDARDS_B (
198     XREF_STANDARD_ID,
199     XREF_CATEGORY_ID,
200     STANDARD_ID,
201     XREF_STANDARD_CODE,
202     XREF_STD_VALUE,
203     XREF_INT_VALUE,
204     DATA_SEEDED,
205     CREATION_DATE,
206     CREATED_BY,
207     LAST_UPDATE_DATE,
208     LAST_UPDATED_BY,
209     LAST_UPDATE_LOGIN
210   ) values (
211     X_XREF_STANDARD_ID,
212     X_XREF_CATEGORY_ID,
213     X_STANDARD_ID,
214     X_XREF_STANDARD_CODE,
215     X_XREF_STD_VALUE,
216     X_XREF_INT_VALUE,
217     X_DATA_SEEDED,
218     X_CREATION_DATE,
219     X_CREATED_BY,
220     X_LAST_UPDATE_DATE,
221     X_LAST_UPDATED_BY,
222     X_LAST_UPDATE_LOGIN
223   );
224 
225   insert into ECX_XREF_STANDARDS_TL (
226     XREF_STANDARD_ID,
227     DESCRIPTION,
228     LAST_UPDATE_DATE,
229     LAST_UPDATED_BY,
230     CREATION_DATE,
231     CREATED_BY,
232     LAST_UPDATE_LOGIN,
233     LANGUAGE,
234     SOURCE_LANG
235   ) select
236     X_XREF_STANDARD_ID,
237     X_DESCRIPTION,
238     X_LAST_UPDATE_DATE,
239     X_LAST_UPDATED_BY,
240     X_CREATION_DATE,
241     X_CREATED_BY,
242     X_LAST_UPDATE_LOGIN,
243     L.CODE,
244     userenv('LANG')
245   from WF_LANGUAGES L
246   where L.INSTALLED_FLAG = 'Y'
247   and not exists
248     (select NULL
249     from ECX_XREF_STANDARDS_TL T
250     where T.XREF_STANDARD_ID = X_XREF_STANDARD_ID
251     and T.LANGUAGE = L.CODE);
252 
253   open c;
254   fetch c into X_ROWID;
255   if (c%notfound) then
256     close c;
257     raise no_data_found;
258   end if;
259   close c;
260 
261 end INSERT_ROW;
262 
263 procedure LOCK_ROW (
264   X_XREF_STANDARD_ID in NUMBER,
265   X_XREF_CATEGORY_ID in NUMBER,
266   X_STANDARD_ID in NUMBER,
267   X_XREF_STANDARD_CODE in VARCHAR2,
268   X_XREF_STD_VALUE in VARCHAR2,
269   X_XREF_INT_VALUE in VARCHAR2,
270   X_DATA_SEEDED in VARCHAR2,
271   X_DESCRIPTION in VARCHAR2
272 ) is
273   cursor c is select
274       XREF_CATEGORY_ID,
275       STANDARD_ID,
276       XREF_STANDARD_CODE,
277       XREF_STD_VALUE,
278       XREF_INT_VALUE,
279       DATA_SEEDED
280     from ECX_XREF_STANDARDS_B
281     where XREF_STANDARD_ID = X_XREF_STANDARD_ID
282     for update of XREF_STANDARD_ID nowait;
283   recinfo c%rowtype;
284 
285   cursor c1 is select
286       DESCRIPTION,
287       decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
288     from ECX_XREF_STANDARDS_TL
289     where XREF_STANDARD_ID = X_XREF_STANDARD_ID
290     and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
291     for update of XREF_STANDARD_ID nowait;
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.XREF_CATEGORY_ID = X_XREF_CATEGORY_ID)
302       AND (recinfo.STANDARD_ID = X_STANDARD_ID)
303       AND ((recinfo.XREF_STANDARD_CODE = X_XREF_STANDARD_CODE)
304            OR ((recinfo.XREF_STANDARD_CODE is null) AND (X_XREF_STANDARD_CODE is null)))
305       AND ((recinfo.XREF_STD_VALUE = X_XREF_STD_VALUE)
306            OR ((recinfo.XREF_STD_VALUE is null) AND (X_XREF_STD_VALUE is null)))
307       AND (recinfo.XREF_INT_VALUE = X_XREF_INT_VALUE)
308       AND ((recinfo.DATA_SEEDED = X_DATA_SEEDED)
309            OR ((recinfo.DATA_SEEDED is null) AND (X_DATA_SEEDED is null)))
310   ) then
311     null;
312   else
313     fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
314     app_exception.raise_exception;
315   end if;
316 
317   for tlinfo in c1 loop
318     if (tlinfo.BASELANG = 'Y') then
319       if (    ((tlinfo.DESCRIPTION = X_DESCRIPTION)
320                OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
321       ) then
322         null;
323       else
324         fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
325         app_exception.raise_exception;
326       end if;
327     end if;
328   end loop;
329   return;
330 end LOCK_ROW;
331 
332 procedure UPDATE_ROW (
333   X_XREF_STANDARD_ID in NUMBER,
334   X_XREF_CATEGORY_ID in NUMBER,
335   X_STANDARD_ID in NUMBER,
336   X_XREF_STANDARD_CODE in VARCHAR2,
337   X_XREF_STD_VALUE in VARCHAR2,
338   X_XREF_INT_VALUE in VARCHAR2,
339   X_DATA_SEEDED in VARCHAR2,
340   X_DESCRIPTION in VARCHAR2,
341   X_LAST_UPDATE_DATE in DATE,
342   X_LAST_UPDATED_BY in NUMBER,
343   X_LAST_UPDATE_LOGIN in NUMBER
344 ) is
345 begin
346   update ECX_XREF_STANDARDS_B set
347     XREF_CATEGORY_ID = X_XREF_CATEGORY_ID,
348     STANDARD_ID = X_STANDARD_ID,
349     XREF_STANDARD_CODE = X_XREF_STANDARD_CODE,
350     XREF_STD_VALUE = X_XREF_STD_VALUE,
351     XREF_INT_VALUE = X_XREF_INT_VALUE,
352     DATA_SEEDED = X_DATA_SEEDED,
353     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
354     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
355     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
356   where XREF_STANDARD_ID = X_XREF_STANDARD_ID;
357 
358   if (sql%notfound) then
359     raise no_data_found;
360   end if;
361 
362   update ECX_XREF_STANDARDS_TL set
363     DESCRIPTION = X_DESCRIPTION,
364     LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
365     LAST_UPDATED_BY = X_LAST_UPDATED_BY,
366     LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
367     SOURCE_LANG = userenv('LANG')
368   where XREF_STANDARD_ID = X_XREF_STANDARD_ID
369   and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
370 
371   if (sql%notfound) then
372     raise no_data_found;
373   end if;
374 end UPDATE_ROW;
375 
376 procedure DELETE_ROW (
377   X_XREF_STANDARD_ID in NUMBER
378 ) is
379 begin
380   delete from ECX_XREF_STANDARDS_TL
381   where XREF_STANDARD_ID = X_XREF_STANDARD_ID;
382 
383   if (sql%notfound) then
384     raise no_data_found;
385   end if;
386 
387   delete from ECX_XREF_STANDARDS_B
388   where XREF_STANDARD_ID = X_XREF_STANDARD_ID;
389 
390   if (sql%notfound) then
391     raise no_data_found;
392   end if;
393 end DELETE_ROW;
394 
395 procedure ADD_LANGUAGE
396 is
397 begin
398   delete from ECX_XREF_STANDARDS_TL T
399   where not exists
400     (select NULL
401     from ECX_XREF_STANDARDS_B B
402     where B.XREF_STANDARD_ID = T.XREF_STANDARD_ID
403     );
404 
405   update ECX_XREF_STANDARDS_TL T set (
406       DESCRIPTION
407     ) = (select
408       B.DESCRIPTION
409     from ECX_XREF_STANDARDS_TL B
410     where B.XREF_STANDARD_ID = T.XREF_STANDARD_ID
411     and B.LANGUAGE = T.SOURCE_LANG)
412   where (
413       T.XREF_STANDARD_ID,
414       T.LANGUAGE
415   ) in (select
416       SUBT.XREF_STANDARD_ID,
417       SUBT.LANGUAGE
418     from ECX_XREF_STANDARDS_TL SUBB, ECX_XREF_STANDARDS_TL SUBT
419     where SUBB.XREF_STANDARD_ID = SUBT.XREF_STANDARD_ID
420     and SUBB.LANGUAGE = SUBT.SOURCE_LANG
421     and (SUBB.DESCRIPTION <> SUBT.DESCRIPTION
422       or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
423       or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
424   ));
425 
426   insert into ECX_XREF_STANDARDS_TL (
427     XREF_STANDARD_ID,
428     DESCRIPTION,
429     LAST_UPDATE_DATE,
430     LAST_UPDATED_BY,
431     CREATION_DATE,
432     CREATED_BY,
433     LAST_UPDATE_LOGIN,
434     LANGUAGE,
435     SOURCE_LANG
436   ) select
437     B.XREF_STANDARD_ID,
438     B.DESCRIPTION,
439     B.LAST_UPDATE_DATE,
440     B.LAST_UPDATED_BY,
441     B.CREATION_DATE,
442     B.CREATED_BY,
443     B.LAST_UPDATE_LOGIN,
444     L.CODE,
445     B.SOURCE_LANG
446   from ECX_XREF_STANDARDS_TL B, WF_LANGUAGES L
447   where L.INSTALLED_FLAG = 'Y'
448   and B.LANGUAGE = userenv('LANG')
449   and not exists
450     (select NULL
451     from ECX_XREF_STANDARDS_TL T
452     where T.XREF_STANDARD_ID = B.XREF_STANDARD_ID
453     and T.LANGUAGE = L.CODE);
454 end ADD_LANGUAGE;
455 
456 end ECX_XREF_STANDARDS_PKG;