1 package body ECX_XREF_HDR_PKG as
2 /* $Header: ECXXRFHB.pls 120.2 2005/06/30 11:19:14 appldev ship $ */
3
4 procedure TRANSLATE_ROW (
5 X_XREF_CATEGORY_CODE IN VARCHAR2,
6 X_DESCRIPTION IN VARCHAR2,
7 X_OWNER IN VARCHAR2,
8 X_CUSTOM_MODE IN VARCHAR2
9 )
10 is
11 l_luby number; -- entity owner in file
12 l_ludate date; -- entity update date in file
13 l_db_luby number; -- entity owner in db
14 l_db_ludate date; -- entity update date in db
15 l_hdr_id number;
16 begin
17
18 -- Translate owner to file_last_updated_by
19 if (x_owner = 'SEED') then
20 l_luby := 1;
21 else
22 l_luby := 0;
23 end if;
24
25 l_ludate := sysdate;
26
27 begin
28 select xref_category_id
29 into l_hdr_id
30 from ecx_xref_hdr
31 where XREF_CATEGORY_CODE = x_xref_category_code;
32
33 select LAST_UPDATED_BY, LAST_UPDATE_DATE
34 into l_db_luby, l_db_ludate
35 from ECX_XREF_HDR_TL
36 where XREF_CATEGORY_ID = l_hdr_id
37 and LANGUAGE = userenv('LANG');
38
39 -- Update record, honoring customization mode.
40 -- Record should be updated only if:
41 -- a. CUSTOM_MODE = FORCE, or
42 -- b. file owner is CUSTOM, db owner is SEED
43 -- c. owners are the same, and file_date > db_date
44 if ((x_custom_mode = 'FORCE') or
45 ((l_luby = 0) and (l_db_luby = 1)) or
46 ((l_luby = l_db_luby) and (l_ludate > l_db_ludate)))
47 then
48 update ECX_XREF_HDR_TL set
49 DESCRIPTION = nvl(x_description, DESCRIPTION),
50 SOURCE_LANG = userenv('LANG'),
51 LAST_UPDATE_DATE = l_ludate,
52 LAST_UPDATED_BY = l_luby,
53 LAST_UPDATE_LOGIN = 0
54 where XREF_CATEGORY_ID = l_hdr_id
55 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
56 end if;
57 exception
58 when no_data_found then
59 null;
60 end;
61 end TRANSLATE_ROW;
62
63 procedure LOAD_ROW (
64 X_XREF_CATEGORY_CODE IN VARCHAR2,
65 X_DESCRIPTION IN VARCHAR2,
66 X_OWNER IN VARCHAR2,
67 X_CUSTOM_MODE IN VARCHAR2
68 )
69 is
70 profo_id number := 0;
71 user_id number := 0;
72 row_id varchar2(64);
73 l_luby number; -- entity owner in file
74 l_ludate date; -- entity update date in file
75 l_db_luby number; -- entity owner in db
76 l_db_ludate date; -- entity update date in db
77 l_ret_code pls_integer :=0;
78 l_errmsg varchar2(2000) := null;
79 l_hdr_id number := 0;
80 begin
81 -- Translate owner to file_last_updated_by
82 if (x_owner = 'SEED') then
83 l_luby := 1;
84 else
85 l_luby := 0;
86 end if;
87
88 -- Translate char last_update_date to date
89 l_ludate := sysdate;
90
91 begin
92 select XREF_CATEGORY_ID, LAST_UPDATED_BY, LAST_UPDATE_DATE
93 into l_hdr_id, l_db_luby, l_db_ludate
94 from ECX_XREF_HDR_B
95 where XREF_CATEGORY_CODE = x_xref_category_code;
96
97 -- Update record, honoring customization mode.
98 -- Record should be updated only if:
99 -- a. CUSTOM_MODE = FORCE, or
100 -- b. file owner is CUSTOM, db owner is SEED
101 -- c. owners are the same, and file_date > db_date
102 if ((x_custom_mode = 'FORCE') or
103 ((l_luby = 0) and (l_db_luby = 1)) or
104 ((l_luby = l_db_luby) and (l_ludate > l_db_ludate)))
105 then
106 ecx_xref_api.update_code_category(
107 x_return_status => l_ret_code,
108 x_msg => l_errmsg,
109 p_xref_category_id => l_hdr_id,
110 p_xref_category_code => x_xref_category_code,
111 p_description => x_description,
112 p_owner => x_owner);
113 if NOT(l_ret_code = ECX_UTIL_API.G_NO_ERROR) then
114 raise_application_error(-20000, l_errmsg);
115 end if;
116
117 end if;
118 exception
119 when no_data_found then
120 ecx_xref_api.create_code_category(
121 x_return_status => l_ret_code,
122 x_msg => l_errmsg,
123 x_xref_hdr_id => l_hdr_id,
124 p_xref_category_code => x_xref_category_code,
125 p_description => x_description,
126 p_owner => x_owner);
127 if NOT(l_ret_code = ECX_UTIL_API.G_NO_ERROR) then
128 raise_application_error(-20000, l_errmsg);
129 end if;
130 when others then
131 raise;
132 end;
133 end LOAD_ROW;
134
135
136 procedure INSERT_ROW (
137 X_ROWID in out nocopy VARCHAR2,
138 X_XREF_CATEGORY_ID in NUMBER,
139 X_XREF_CATEGORY_CODE in VARCHAR2,
140 X_DESCRIPTION in VARCHAR2,
141 X_CREATION_DATE in DATE,
142 X_CREATED_BY in NUMBER,
143 X_LAST_UPDATE_DATE in DATE,
144 X_LAST_UPDATED_BY in NUMBER,
145 X_LAST_UPDATE_LOGIN in NUMBER
146 ) is
147 cursor C is select ROWID from ECX_XREF_HDR_B
148 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID
149 ;
150 begin
151 insert into ECX_XREF_HDR_B (
152 XREF_CATEGORY_ID,
153 XREF_CATEGORY_CODE,
154 CREATION_DATE,
155 CREATED_BY,
156 LAST_UPDATE_DATE,
157 LAST_UPDATED_BY,
158 LAST_UPDATE_LOGIN
159 ) values (
160 X_XREF_CATEGORY_ID,
161 X_XREF_CATEGORY_CODE,
162 X_CREATION_DATE,
163 X_CREATED_BY,
164 X_LAST_UPDATE_DATE,
165 X_LAST_UPDATED_BY,
166 X_LAST_UPDATE_LOGIN
167 );
168
169 insert into ECX_XREF_HDR_TL (
170 DESCRIPTION,
171 LAST_UPDATE_DATE,
172 LAST_UPDATED_BY,
173 CREATION_DATE,
174 CREATED_BY,
175 LAST_UPDATE_LOGIN,
176 XREF_CATEGORY_ID,
177 LANGUAGE,
178 SOURCE_LANG
179 ) select
180 X_DESCRIPTION,
181 X_LAST_UPDATE_DATE,
182 X_LAST_UPDATED_BY,
183 X_CREATION_DATE,
184 X_CREATED_BY,
185 X_LAST_UPDATE_LOGIN,
186 X_XREF_CATEGORY_ID,
187 L.CODE,
188 userenv('LANG')
189 from WF_LANGUAGES L
190 where L.INSTALLED_FLAG = 'Y'
191 and not exists
192 (select NULL
193 from ECX_XREF_HDR_TL T
194 where T.XREF_CATEGORY_ID = X_XREF_CATEGORY_ID
195 and T.LANGUAGE = L.CODE);
196
197 open c;
198 fetch c into X_ROWID;
199 if (c%notfound) then
200 close c;
201 raise no_data_found;
202 end if;
203 close c;
204
205 end INSERT_ROW;
206
207 procedure LOCK_ROW (
208 X_XREF_CATEGORY_ID in NUMBER,
209 X_XREF_CATEGORY_CODE in VARCHAR2,
210 X_DESCRIPTION in VARCHAR2
211 ) is
212 cursor c is select
213 XREF_CATEGORY_CODE
214 from ECX_XREF_HDR_B
215 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID
216 for update of XREF_CATEGORY_ID nowait;
217 recinfo c%rowtype;
218
219 cursor c1 is select
220 DESCRIPTION,
221 decode(LANGUAGE, userenv('LANG'), 'Y', 'N') BASELANG
222 from ECX_XREF_HDR_TL
223 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID
224 and userenv('LANG') in (LANGUAGE, SOURCE_LANG)
225 for update of XREF_CATEGORY_ID nowait;
226 begin
227 open c;
228 fetch c into recinfo;
229 if (c%notfound) then
230 close c;
231 fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
232 app_exception.raise_exception;
233 end if;
234 close c;
235 if ( (recinfo.XREF_CATEGORY_CODE = X_XREF_CATEGORY_CODE)
236 ) then
237 null;
238 else
239 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
240 app_exception.raise_exception;
241 end if;
242
243 for tlinfo in c1 loop
244 if (tlinfo.BASELANG = 'Y') then
245 if ( ((tlinfo.DESCRIPTION = X_DESCRIPTION)
246 OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
247 ) then
248 null;
249 else
250 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
251 app_exception.raise_exception;
252 end if;
253 end if;
254 end loop;
255 return;
256 end LOCK_ROW;
257
258 procedure UPDATE_ROW (
259 X_XREF_CATEGORY_ID in NUMBER,
260 X_XREF_CATEGORY_CODE in VARCHAR2,
261 X_DESCRIPTION in VARCHAR2,
262 X_LAST_UPDATE_DATE in DATE,
263 X_LAST_UPDATED_BY in NUMBER,
264 X_LAST_UPDATE_LOGIN in NUMBER
265 ) is
266 begin
267 update ECX_XREF_HDR_B set
268 XREF_CATEGORY_CODE = X_XREF_CATEGORY_CODE,
269 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
270 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
271 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
272 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID;
273
274 if (sql%notfound) then
275 raise no_data_found;
276 end if;
277
278 update ECX_XREF_HDR_TL set
279 DESCRIPTION = X_DESCRIPTION,
280 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
281 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
282 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
283 SOURCE_LANG = userenv('LANG')
284 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID
285 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
286
287 if (sql%notfound) then
288 raise no_data_found;
289 end if;
290 end UPDATE_ROW;
291
292 procedure DELETE_ROW (
293 X_XREF_CATEGORY_ID in NUMBER
294 ) is
295 begin
296 delete from ECX_XREF_HDR_TL
297 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID;
298
299 if (sql%notfound) then
300 raise no_data_found;
301 end if;
302
303 delete from ECX_XREF_HDR_B
304 where XREF_CATEGORY_ID = X_XREF_CATEGORY_ID;
305
306 if (sql%notfound) then
307 raise no_data_found;
308 end if;
309 end DELETE_ROW;
310
311 procedure ADD_LANGUAGE
312 is
313 begin
314 delete from ECX_XREF_HDR_TL T
315 where not exists
316 (select NULL
317 from ECX_XREF_HDR_B B
318 where B.XREF_CATEGORY_ID = T.XREF_CATEGORY_ID
319 );
320
321 update ECX_XREF_HDR_TL T set (
322 DESCRIPTION
323 ) = (select
324 B.DESCRIPTION
325 from ECX_XREF_HDR_TL B
326 where B.XREF_CATEGORY_ID = T.XREF_CATEGORY_ID
327 and B.LANGUAGE = T.SOURCE_LANG)
328 where (
329 T.XREF_CATEGORY_ID,
330 T.LANGUAGE
331 ) in (select
332 SUBT.XREF_CATEGORY_ID,
333 SUBT.LANGUAGE
334 from ECX_XREF_HDR_TL SUBB, ECX_XREF_HDR_TL SUBT
335 where SUBB.XREF_CATEGORY_ID = SUBT.XREF_CATEGORY_ID
336 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
337 and (SUBB.DESCRIPTION <> SUBT.DESCRIPTION
338 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
339 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
340 ));
341
342 insert into ECX_XREF_HDR_TL (
343 DESCRIPTION,
344 LAST_UPDATE_DATE,
345 LAST_UPDATED_BY,
346 CREATION_DATE,
347 CREATED_BY,
348 LAST_UPDATE_LOGIN,
349 XREF_CATEGORY_ID,
350 LANGUAGE,
351 SOURCE_LANG
352 ) select
353 B.DESCRIPTION,
354 B.LAST_UPDATE_DATE,
355 B.LAST_UPDATED_BY,
356 B.CREATION_DATE,
357 B.CREATED_BY,
358 B.LAST_UPDATE_LOGIN,
359 B.XREF_CATEGORY_ID,
360 L.CODE,
361 B.SOURCE_LANG
362 from ECX_XREF_HDR_TL B, WF_LANGUAGES L
363 where L.INSTALLED_FLAG = 'Y'
364 and B.LANGUAGE = userenv('LANG')
365 and not exists
366 (select NULL
367 from ECX_XREF_HDR_TL T
368 where T.XREF_CATEGORY_ID = B.XREF_CATEGORY_ID
369 and T.LANGUAGE = L.CODE);
370 end ADD_LANGUAGE;
371
372 end ECX_XREF_HDR_PKG;