DBA Data[Home] [Help]

PACKAGE BODY: APPS.ECX_XREF_DTL_PKG

Source


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