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