1 package body WF_MESSAGE_ATTRIBUTES_PKG as
2 /* $Header: wfmsab.pls 120.2 2005/07/02 03:51:55 appldev ship $ */
3 procedure INSERT_ROW (
4 X_ROWID in out nocopy VARCHAR2,
5 X_MESSAGE_NAME in VARCHAR2,
6 X_MESSAGE_TYPE in VARCHAR2,
7 X_NAME in VARCHAR2,
8 X_SEQUENCE in NUMBER,
9 X_TYPE in VARCHAR2,
10 X_SUBTYPE in VARCHAR2,
11 X_VALUE_TYPE in VARCHAR2,
12 X_PROTECT_LEVEL in NUMBER,
13 X_CUSTOM_LEVEL in NUMBER,
14 X_FORMAT in VARCHAR2,
15 X_TEXT_DEFAULT in VARCHAR2,
16 X_NUMBER_DEFAULT in NUMBER,
17 X_DATE_DEFAULT in DATE,
18 X_DISPLAY_NAME in VARCHAR2,
19 X_DESCRIPTION in VARCHAR2,
20 X_ATTACH in VARCHAR2
21 ) is
22 cursor C is select ROWID from WF_MESSAGE_ATTRIBUTES
23 where MESSAGE_NAME = X_MESSAGE_NAME
24 and MESSAGE_TYPE = X_MESSAGE_TYPE
25 and NAME = X_NAME
26 ;
27 begin
28 insert into WF_MESSAGE_ATTRIBUTES (
29 MESSAGE_TYPE,
30 MESSAGE_NAME,
31 NAME,
32 SEQUENCE,
33 TYPE,
34 SUBTYPE,
35 VALUE_TYPE,
36 PROTECT_LEVEL,
37 CUSTOM_LEVEL,
38 FORMAT,
39 TEXT_DEFAULT,
40 NUMBER_DEFAULT,
41 DATE_DEFAULT,
42 ATTACH
43 ) values (
44 X_MESSAGE_TYPE,
45 X_MESSAGE_NAME,
46 X_NAME,
47 X_SEQUENCE,
48 X_TYPE,
49 X_SUBTYPE,
50 X_VALUE_TYPE,
51 X_PROTECT_LEVEL,
52 X_CUSTOM_LEVEL,
53 X_FORMAT,
54 X_TEXT_DEFAULT,
55 X_NUMBER_DEFAULT,
56 X_DATE_DEFAULT,
57 X_ATTACH
58 );
59
60 insert into WF_MESSAGE_ATTRIBUTES_TL (
61 MESSAGE_TYPE,
62 MESSAGE_NAME,
63 NAME,
64 DISPLAY_NAME,
65 PROTECT_LEVEL,
66 CUSTOM_LEVEL,
67 DESCRIPTION,
68 LANGUAGE,
69 SOURCE_LANG
70 ) select
71 X_MESSAGE_TYPE,
72 X_MESSAGE_NAME,
73 X_NAME,
74 X_DISPLAY_NAME,
75 X_PROTECT_LEVEL,
76 X_CUSTOM_LEVEL,
77 X_DESCRIPTION,
78 L.CODE,
79 userenv('LANG')
80 from WF_LANGUAGES L
81 where L.INSTALLED_FLAG = 'Y'
82 and not exists
83 (select NULL
84 from WF_MESSAGE_ATTRIBUTES_TL T
85 where T.MESSAGE_NAME = X_MESSAGE_NAME
86 and T.MESSAGE_TYPE = X_MESSAGE_TYPE
87 and T.NAME = X_NAME
88 and T.LANGUAGE = L.CODE);
89
90 open c;
91 fetch c into X_ROWID;
92 if (c%notfound) then
93 close c;
94 raise no_data_found;
95 end if;
96 close c;
97
98 exception
99 when others then
100 wf_core.context('Wf_Message_Attributes_Pkg', 'Insert_Row',
101 x_message_name, x_message_type, x_name);
102 raise;
103 end INSERT_ROW;
104
105 procedure LOCK_ROW (
106 X_MESSAGE_NAME in VARCHAR2,
107 X_MESSAGE_TYPE in VARCHAR2,
108 X_NAME in VARCHAR2,
109 X_SEQUENCE in NUMBER,
110 X_TYPE in VARCHAR2,
111 X_SUBTYPE in VARCHAR2,
112 X_VALUE_TYPE in VARCHAR2,
113 X_PROTECT_LEVEL in NUMBER,
114 X_CUSTOM_LEVEL in NUMBER,
115 X_FORMAT in VARCHAR2,
116 X_TEXT_DEFAULT in VARCHAR2,
117 X_NUMBER_DEFAULT in NUMBER,
118 X_DATE_DEFAULT in DATE,
119 X_DISPLAY_NAME in VARCHAR2,
120 X_DESCRIPTION in VARCHAR2
121 ) is
122 cursor c is select
123 SEQUENCE,
124 TYPE,
125 SUBTYPE,
126 VALUE_TYPE,
127 PROTECT_LEVEL,
128 CUSTOM_LEVEL,
129 FORMAT,
130 TEXT_DEFAULT,
131 NUMBER_DEFAULT,
132 DATE_DEFAULT
133 from WF_MESSAGE_ATTRIBUTES
134 where MESSAGE_NAME = X_MESSAGE_NAME
135 and MESSAGE_TYPE = X_MESSAGE_TYPE
136 and NAME = X_NAME
137 for update of MESSAGE_NAME nowait;
138 recinfo c%rowtype;
139
140 cursor c1 is select
141 DISPLAY_NAME,
142 DESCRIPTION
143 from WF_MESSAGE_ATTRIBUTES_TL
144 where MESSAGE_NAME = X_MESSAGE_NAME
145 and MESSAGE_TYPE = X_MESSAGE_TYPE
146 and NAME = X_NAME
147 and LANGUAGE = userenv('LANG')
148 for update of MESSAGE_NAME nowait;
149 tlinfo c1%rowtype;
150
151 begin
152 open c;
153 fetch c into recinfo;
154 if (c%notfound) then
155 close c;
156 wf_core.raise('WF_RECORD_DELETED');
157 end if;
158 close c;
159 if ( (recinfo.SEQUENCE = X_SEQUENCE)
160 AND (recinfo.TYPE = X_TYPE)
161 AND (recinfo.SUBTYPE = X_SUBTYPE)
162 AND (recinfo.VALUE_TYPE = X_VALUE_TYPE)
163 AND (recinfo.PROTECT_LEVEL = X_PROTECT_LEVEL)
164 AND (recinfo.CUSTOM_LEVEL = X_CUSTOM_LEVEL)
165 AND ((recinfo.FORMAT = X_FORMAT)
166 OR ((recinfo.FORMAT is null) AND (X_FORMAT is null)))
167 AND ((recinfo.TEXT_DEFAULT = X_TEXT_DEFAULT)
168 OR ((recinfo.TEXT_DEFAULT is null) AND (X_TEXT_DEFAULT is null)))
169 AND ((recinfo.NUMBER_DEFAULT = X_NUMBER_DEFAULT)
170 OR ((recinfo.NUMBER_DEFAULT is null) AND (X_NUMBER_DEFAULT is null)))
171 AND ((recinfo.DATE_DEFAULT = X_DATE_DEFAULT)
172 OR ((recinfo.DATE_DEFAULT is null) AND (X_DATE_DEFAULT is null)))
173 ) then
174 null;
175 else
176 wf_core.raise('WF_RECORD_CHANGED');
177 end if;
178
179 open c1;
180 fetch c1 into tlinfo;
181 if (c1%notfound) then
182 close c1;
183 return;
184 end if;
185 close c1;
186
187 if ( (tlinfo.DISPLAY_NAME = X_DISPLAY_NAME)
188 AND ((tlinfo.DESCRIPTION = X_DESCRIPTION)
189 OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
190 ) then
191 null;
192 else
193 wf_core.raise('WF_RECORD_CHANGED');
194 end if;
195 return;
196
197 exception
198 when others then
199 wf_core.context('Wf_Message_Attributes_Pkg', 'Lock_Row',
200 x_message_name, x_message_type, x_name);
201 raise;
202 end LOCK_ROW;
203
204 procedure UPDATE_ROW (
205 X_MESSAGE_NAME in VARCHAR2,
206 X_MESSAGE_TYPE in VARCHAR2,
207 X_NAME in VARCHAR2,
208 X_SEQUENCE in NUMBER,
209 X_TYPE in VARCHAR2,
210 X_SUBTYPE in VARCHAR2,
211 X_VALUE_TYPE in VARCHAR2,
212 X_PROTECT_LEVEL in NUMBER,
213 X_CUSTOM_LEVEL in NUMBER,
214 X_FORMAT in VARCHAR2,
215 X_TEXT_DEFAULT in VARCHAR2,
216 X_NUMBER_DEFAULT in NUMBER,
217 X_DATE_DEFAULT in DATE,
218 X_DISPLAY_NAME in VARCHAR2,
219 X_DESCRIPTION in VARCHAR2,
220 X_ATTACH in VARCHAR2
221 ) is
222 begin
223 update WF_MESSAGE_ATTRIBUTES set
224 SEQUENCE = X_SEQUENCE,
225 TYPE = X_TYPE,
226 SUBTYPE = X_SUBTYPE,
227 VALUE_TYPE = X_VALUE_TYPE,
228 PROTECT_LEVEL = X_PROTECT_LEVEL,
229 CUSTOM_LEVEL = X_CUSTOM_LEVEL,
230 FORMAT = X_FORMAT,
231 TEXT_DEFAULT = X_TEXT_DEFAULT,
232 NUMBER_DEFAULT = X_NUMBER_DEFAULT,
233 DATE_DEFAULT = X_DATE_DEFAULT,
234 ATTACH = X_ATTACH
235 where MESSAGE_NAME = X_MESSAGE_NAME
236 and MESSAGE_TYPE = X_MESSAGE_TYPE
237 and NAME = X_NAME;
238
239 if (sql%notfound) then
240 raise no_data_found;
241 end if;
242
243 update WF_MESSAGE_ATTRIBUTES_TL set
244 DISPLAY_NAME = X_DISPLAY_NAME,
245 DESCRIPTION = X_DESCRIPTION,
246 SOURCE_LANG = userenv('LANG')
247 where MESSAGE_NAME = X_MESSAGE_NAME
248 and MESSAGE_TYPE = X_MESSAGE_TYPE
249 and NAME = X_NAME
250 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
251
252 if (sql%notfound) then
253 raise no_data_found;
254 end if;
255
256 exception
257 when others then
258 wf_core.context('Wf_Message_Attributes_Pkg', 'Update_Row',
259 x_message_name, x_message_type, x_name);
260 raise;
261 end UPDATE_ROW;
262
263 procedure DELETE_ROW (
264 X_MESSAGE_NAME in VARCHAR2,
265 X_MESSAGE_TYPE in VARCHAR2,
266 X_NAME in VARCHAR2
267 ) is
268 begin
269 delete from WF_MESSAGE_ATTRIBUTES_TL
270 where MESSAGE_NAME = X_MESSAGE_NAME
271 and MESSAGE_TYPE = X_MESSAGE_TYPE
272 and NAME = X_NAME;
273
274 if (sql%notfound) then
275 raise no_data_found;
276 end if;
277
278 delete from WF_MESSAGE_ATTRIBUTES
279 where MESSAGE_NAME = X_MESSAGE_NAME
280 and MESSAGE_TYPE = X_MESSAGE_TYPE
281 and NAME = X_NAME;
282
283 if (sql%notfound) then
284 raise no_data_found;
285 end if;
286
287 exception
288 when others then
289 wf_core.context('Wf_Message_Attributes_Pkg', 'Delete_Row',
290 x_message_name, x_message_type, x_name);
291 raise;
292 end DELETE_ROW;
293
294 procedure ADD_LANGUAGE
295 is
296 begin
297 /* Mar/19/03 requested by Ric Ginsberg */
298 /* The following delete and update statements are commented out */
299 /* as a quick workaround to fix the time-consuming table handler issue */
300 /* Eventually we'll need to turn them into a separate fix_language procedure */
301 /*
302
303 delete from WF_MESSAGE_ATTRIBUTES_TL T
304 where not exists
305 (select NULL
306 from WF_MESSAGE_ATTRIBUTES B
307 where B.MESSAGE_NAME = T.MESSAGE_NAME
308 and B.MESSAGE_TYPE = T.MESSAGE_TYPE
309 and B.NAME = T.NAME
310 );
311
312 update WF_MESSAGE_ATTRIBUTES_TL T set (
313 DISPLAY_NAME,
314 DESCRIPTION
315 ) = (select
316 B.DISPLAY_NAME,
317 B.DESCRIPTION
318 from WF_MESSAGE_ATTRIBUTES_TL B
319 where B.MESSAGE_NAME = T.MESSAGE_NAME
320 and B.MESSAGE_TYPE = T.MESSAGE_TYPE
321 and B.NAME = T.NAME
322 and B.LANGUAGE = T.SOURCE_LANG)
323 where (
324 T.MESSAGE_NAME,
325 T.MESSAGE_TYPE,
326 T.NAME,
327 T.LANGUAGE
328 ) in (select
329 SUBT.MESSAGE_NAME,
330 SUBT.MESSAGE_TYPE,
331 SUBT.NAME,
332 SUBT.LANGUAGE
333 from WF_MESSAGE_ATTRIBUTES_TL SUBB, WF_MESSAGE_ATTRIBUTES_TL SUBT
334 where SUBB.MESSAGE_NAME = SUBT.MESSAGE_NAME
335 and SUBB.MESSAGE_TYPE = SUBT.MESSAGE_TYPE
336 and SUBB.NAME = SUBT.NAME
337 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
338 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
339 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
340 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
341 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
342 ));
343 */
344
345 insert /*+ append parallel */ into WF_MESSAGE_ATTRIBUTES_TL (
346 MESSAGE_TYPE,
347 MESSAGE_NAME,
348 NAME,
349 DISPLAY_NAME,
350 PROTECT_LEVEL,
351 CUSTOM_LEVEL,
352 DESCRIPTION,
353 LANGUAGE,
354 SOURCE_LANG
355 ) select
356 B.MESSAGE_TYPE,
357 B.MESSAGE_NAME,
358 B.NAME,
359 B.DISPLAY_NAME,
360 B.PROTECT_LEVEL,
361 B.CUSTOM_LEVEL,
362 B.DESCRIPTION,
363 L.CODE,
364 B.SOURCE_LANG
365 from WF_MESSAGE_ATTRIBUTES_TL B, WF_LANGUAGES L
366 where L.INSTALLED_FLAG = 'Y'
367 and B.LANGUAGE = userenv('LANG')
368 and ( B.MESSAGE_NAME,B.MESSAGE_TYPE, B.NAME , L.CODE) NOT IN
369 (select /*+ hash_aj index_ffs(T,WF_MESSAGE_ATTRIBUTES_TL_PK) */
370 T.MESSAGE_NAME ,T.MESSAGE_TYPE ,T.NAME ,T.LANGUAGE
371 from WF_MESSAGE_ATTRIBUTES_TL T);
372
373 end ADD_LANGUAGE;
374
375 end WF_MESSAGE_ATTRIBUTES_PKG;