[Home] [Help]
PACKAGE BODY: APPS.FND_VAL_ATTRIBUTE_TYPES_PKG
Source
1 package body FND_VAL_ATTRIBUTE_TYPES_PKG as
2 /* $Header: AFFFVATB.pls 120.2.12010000.1 2008/07/25 14:14:45 appldev ship $ */
3
4 procedure INSERT_ROW (
5 X_ROWID IN OUT NOCOPY VARCHAR2,
6 X_APPLICATION_ID in NUMBER,
7 X_ID_FLEX_CODE in VARCHAR2,
8 X_SEGMENT_ATTRIBUTE_TYPE in VARCHAR2,
9 X_VALUE_ATTRIBUTE_TYPE in VARCHAR2,
10 X_REQUIRED_FLAG in VARCHAR2,
11 X_APPLICATION_COLUMN_NAME in VARCHAR2,
12 X_DEFAULT_VALUE in VARCHAR2,
13 X_LOOKUP_TYPE in VARCHAR2,
14 X_DERIVATION_RULE_CODE in VARCHAR2,
15 X_DERIVATION_RULE_VALUE1 in VARCHAR2,
16 X_DERIVATION_RULE_VALUE2 in VARCHAR2,
17 X_PROMPT in VARCHAR2,
18 X_DESCRIPTION in VARCHAR2,
19 X_CREATION_DATE in DATE,
20 X_CREATED_BY in NUMBER,
21 X_LAST_UPDATE_DATE in DATE,
22 X_LAST_UPDATED_BY in NUMBER,
23 X_LAST_UPDATE_LOGIN in NUMBER
24 ) is
25 cursor C is select ROWID from FND_VALUE_ATTRIBUTE_TYPES
26 where APPLICATION_ID = X_APPLICATION_ID
27 and ID_FLEX_CODE = X_ID_FLEX_CODE
28 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
29 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE
30 ;
31 begin
32 insert into FND_VALUE_ATTRIBUTE_TYPES (
33 APPLICATION_ID,
34 ID_FLEX_CODE,
35 SEGMENT_ATTRIBUTE_TYPE,
36 VALUE_ATTRIBUTE_TYPE,
37 REQUIRED_FLAG,
38 APPLICATION_COLUMN_NAME,
39 DEFAULT_VALUE,
40 LOOKUP_TYPE,
41 DERIVATION_RULE_CODE,
42 DERIVATION_RULE_VALUE1,
43 DERIVATION_RULE_VALUE2,
44 CREATION_DATE,
45 CREATED_BY,
46 LAST_UPDATE_DATE,
47 LAST_UPDATED_BY,
48 LAST_UPDATE_LOGIN
49 ) values (
50 X_APPLICATION_ID,
51 X_ID_FLEX_CODE,
52 X_SEGMENT_ATTRIBUTE_TYPE,
53 X_VALUE_ATTRIBUTE_TYPE,
54 X_REQUIRED_FLAG,
55 X_APPLICATION_COLUMN_NAME,
56 X_DEFAULT_VALUE,
57 X_LOOKUP_TYPE,
58 X_DERIVATION_RULE_CODE,
59 X_DERIVATION_RULE_VALUE1,
60 X_DERIVATION_RULE_VALUE2,
61 X_CREATION_DATE,
62 X_CREATED_BY,
63 X_LAST_UPDATE_DATE,
64 X_LAST_UPDATED_BY,
65 X_LAST_UPDATE_LOGIN
66 );
67
68 insert into FND_VAL_ATTRIBUTE_TYPES_TL (
69 APPLICATION_ID,
70 ID_FLEX_CODE,
71 SEGMENT_ATTRIBUTE_TYPE,
72 VALUE_ATTRIBUTE_TYPE,
73 PROMPT,
74 LAST_UPDATE_DATE,
75 LAST_UPDATED_BY,
76 CREATION_DATE,
77 CREATED_BY,
78 LAST_UPDATE_LOGIN,
79 DESCRIPTION,
80 LANGUAGE,
81 SOURCE_LANG
82 ) select
83 X_APPLICATION_ID,
84 X_ID_FLEX_CODE,
85 X_SEGMENT_ATTRIBUTE_TYPE,
86 X_VALUE_ATTRIBUTE_TYPE,
87 X_PROMPT,
88 X_LAST_UPDATE_DATE,
89 X_LAST_UPDATED_BY,
90 X_CREATION_DATE,
91 X_CREATED_BY,
92 X_LAST_UPDATE_LOGIN,
93 X_DESCRIPTION,
94 L.LANGUAGE_CODE,
95 userenv('LANG')
96 from FND_LANGUAGES L
97 where L.INSTALLED_FLAG in ('I', 'B')
98 and not exists
99 (select NULL
100 from FND_VAL_ATTRIBUTE_TYPES_TL T
101 where T.APPLICATION_ID = X_APPLICATION_ID
102 and T.ID_FLEX_CODE = X_ID_FLEX_CODE
103 and T.SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
104 and T.VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE
105 and T.LANGUAGE = L.LANGUAGE_CODE);
106
107 open c;
108 fetch c into X_ROWID;
109 if (c%notfound) then
110 close c;
111 raise no_data_found;
112 end if;
113 close c;
114
115 end INSERT_ROW;
116
117 procedure LOCK_ROW (
118 X_APPLICATION_ID in NUMBER,
119 X_ID_FLEX_CODE in VARCHAR2,
120 X_SEGMENT_ATTRIBUTE_TYPE in VARCHAR2,
121 X_VALUE_ATTRIBUTE_TYPE in VARCHAR2,
122 X_REQUIRED_FLAG in VARCHAR2,
123 X_APPLICATION_COLUMN_NAME in VARCHAR2,
124 X_DEFAULT_VALUE in VARCHAR2,
125 X_LOOKUP_TYPE in VARCHAR2,
126 X_DERIVATION_RULE_CODE in VARCHAR2,
127 X_DERIVATION_RULE_VALUE1 in VARCHAR2,
128 X_DERIVATION_RULE_VALUE2 in VARCHAR2,
129 X_PROMPT in VARCHAR2,
130 X_DESCRIPTION in VARCHAR2
131 ) is
132 cursor c is select
133 REQUIRED_FLAG,
134 APPLICATION_COLUMN_NAME,
135 DEFAULT_VALUE,
136 LOOKUP_TYPE,
137 DERIVATION_RULE_CODE,
138 DERIVATION_RULE_VALUE1,
139 DERIVATION_RULE_VALUE2
140 from FND_VALUE_ATTRIBUTE_TYPES
141 where APPLICATION_ID = X_APPLICATION_ID
142 and ID_FLEX_CODE = X_ID_FLEX_CODE
143 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
144 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE
145 for update of APPLICATION_ID nowait;
146 recinfo c%rowtype;
147
148 cursor c1 is select
149 PROMPT,
150 DESCRIPTION
151 from FND_VAL_ATTRIBUTE_TYPES_TL
152 where APPLICATION_ID = X_APPLICATION_ID
153 and ID_FLEX_CODE = X_ID_FLEX_CODE
154 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
155 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE
156 and LANGUAGE = userenv('LANG')
157 for update of APPLICATION_ID nowait;
158 tlinfo c1%rowtype;
159
160 begin
161 open c;
162 fetch c into recinfo;
163 if (c%notfound) then
164 close c;
165 fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
166 app_exception.raise_exception;
167 end if;
168 close c;
169 if ( (recinfo.REQUIRED_FLAG = X_REQUIRED_FLAG)
170 AND (recinfo.APPLICATION_COLUMN_NAME = X_APPLICATION_COLUMN_NAME)
171 AND ((recinfo.DEFAULT_VALUE = X_DEFAULT_VALUE)
172 OR ((recinfo.DEFAULT_VALUE is null) AND (X_DEFAULT_VALUE is null)))
173 AND ((recinfo.LOOKUP_TYPE = X_LOOKUP_TYPE)
174 OR ((recinfo.LOOKUP_TYPE is null) AND (X_LOOKUP_TYPE is null)))
175 AND ((recinfo.DERIVATION_RULE_CODE = X_DERIVATION_RULE_CODE)
176 OR ((recinfo.DERIVATION_RULE_CODE is null) AND (X_DERIVATION_RULE_CODE is null)))
177 AND ((recinfo.DERIVATION_RULE_VALUE1 = X_DERIVATION_RULE_VALUE1)
178 OR ((recinfo.DERIVATION_RULE_VALUE1 is null) AND (X_DERIVATION_RULE_VALUE1 is null)))
179 AND ((recinfo.DERIVATION_RULE_VALUE2 = X_DERIVATION_RULE_VALUE2)
180 OR ((recinfo.DERIVATION_RULE_VALUE2 is null) AND (X_DERIVATION_RULE_VALUE2 is null)))
181 ) then
182 null;
183 else
184 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
185 app_exception.raise_exception;
186 end if;
187
188 open c1;
189 fetch c1 into tlinfo;
190 if (c1%notfound) then
191 close c1;
192 return;
193 end if;
194 close c1;
195
196 if ( (tlinfo.PROMPT = X_PROMPT)
197 AND ((tlinfo.DESCRIPTION = X_DESCRIPTION)
198 OR ((tlinfo.DESCRIPTION is null) AND (X_DESCRIPTION is null)))
199 ) then
200 null;
201 else
202 fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
203 app_exception.raise_exception;
204 end if;
205 return;
206 end LOCK_ROW;
207
208 procedure UPDATE_ROW (
209 X_APPLICATION_ID in NUMBER,
210 X_ID_FLEX_CODE in VARCHAR2,
211 X_SEGMENT_ATTRIBUTE_TYPE in VARCHAR2,
212 X_VALUE_ATTRIBUTE_TYPE in VARCHAR2,
213 X_REQUIRED_FLAG in VARCHAR2,
214 X_APPLICATION_COLUMN_NAME in VARCHAR2,
215 X_DEFAULT_VALUE in VARCHAR2,
216 X_LOOKUP_TYPE in VARCHAR2,
217 X_DERIVATION_RULE_CODE in VARCHAR2,
218 X_DERIVATION_RULE_VALUE1 in VARCHAR2,
219 X_DERIVATION_RULE_VALUE2 in VARCHAR2,
220 X_PROMPT in VARCHAR2,
221 X_DESCRIPTION in VARCHAR2,
222 X_LAST_UPDATE_DATE in DATE,
223 X_LAST_UPDATED_BY in NUMBER,
224 X_LAST_UPDATE_LOGIN in NUMBER
225 ) is
226 begin
227 update FND_VALUE_ATTRIBUTE_TYPES set
228 REQUIRED_FLAG = X_REQUIRED_FLAG,
229 APPLICATION_COLUMN_NAME = X_APPLICATION_COLUMN_NAME,
230 DEFAULT_VALUE = X_DEFAULT_VALUE,
231 LOOKUP_TYPE = X_LOOKUP_TYPE,
232 DERIVATION_RULE_CODE = X_DERIVATION_RULE_CODE,
233 DERIVATION_RULE_VALUE1 = X_DERIVATION_RULE_VALUE1,
234 DERIVATION_RULE_VALUE2 = X_DERIVATION_RULE_VALUE2,
235 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
236 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
237 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN
238 where APPLICATION_ID = X_APPLICATION_ID
239 and ID_FLEX_CODE = X_ID_FLEX_CODE
240 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
241 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE;
242
243 if (sql%notfound) then
244 raise no_data_found;
245 end if;
246
247 update FND_VAL_ATTRIBUTE_TYPES_TL set
248 PROMPT = X_PROMPT,
249 DESCRIPTION = X_DESCRIPTION,
250 LAST_UPDATE_DATE = X_LAST_UPDATE_DATE,
251 LAST_UPDATED_BY = X_LAST_UPDATED_BY,
252 LAST_UPDATE_LOGIN = X_LAST_UPDATE_LOGIN,
253 SOURCE_LANG = userenv('LANG')
254 where APPLICATION_ID = X_APPLICATION_ID
255 and ID_FLEX_CODE = X_ID_FLEX_CODE
256 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
257 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE
258 and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
259
260 if (sql%notfound) then
261 raise no_data_found;
262 end if;
263 end UPDATE_ROW;
264
265 procedure DELETE_ROW (
266 X_APPLICATION_ID in NUMBER,
267 X_ID_FLEX_CODE in VARCHAR2,
268 X_SEGMENT_ATTRIBUTE_TYPE in VARCHAR2,
269 X_VALUE_ATTRIBUTE_TYPE in VARCHAR2
270 ) is
271 begin
272 delete from FND_VALUE_ATTRIBUTE_TYPES
273 where APPLICATION_ID = X_APPLICATION_ID
274 and ID_FLEX_CODE = X_ID_FLEX_CODE
275 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
276 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE;
277
278 if (sql%notfound) then
279 raise no_data_found;
280 end if;
281
282 delete from FND_VAL_ATTRIBUTE_TYPES_TL
283 where APPLICATION_ID = X_APPLICATION_ID
284 and ID_FLEX_CODE = X_ID_FLEX_CODE
285 and SEGMENT_ATTRIBUTE_TYPE = X_SEGMENT_ATTRIBUTE_TYPE
286 and VALUE_ATTRIBUTE_TYPE = X_VALUE_ATTRIBUTE_TYPE;
287
288 if (sql%notfound) then
289 raise no_data_found;
290 end if;
291 end DELETE_ROW;
292
293 procedure ADD_LANGUAGE
294 is
295 begin
296 /* Mar/19/03 requested by Ric Ginsberg */
297 /* The following delete and update statements are commented out */
298 /* as a quick workaround to fix the time-consuming table handler issue */
299 /* Eventually we'll need to turn them into a separate fix_language procedure */
300 /*
301
302 delete from FND_VAL_ATTRIBUTE_TYPES_TL T
303 where not exists
304 (select NULL
305 from FND_VALUE_ATTRIBUTE_TYPES B
306 where B.APPLICATION_ID = T.APPLICATION_ID
307 and B.ID_FLEX_CODE = T.ID_FLEX_CODE
308 and B.SEGMENT_ATTRIBUTE_TYPE = T.SEGMENT_ATTRIBUTE_TYPE
309 and B.VALUE_ATTRIBUTE_TYPE = T.VALUE_ATTRIBUTE_TYPE
310 );
311
312 update FND_VAL_ATTRIBUTE_TYPES_TL T set (
313 PROMPT,
314 DESCRIPTION
315 ) = (select
316 B.PROMPT,
317 B.DESCRIPTION
318 from FND_VAL_ATTRIBUTE_TYPES_TL B
319 where B.APPLICATION_ID = T.APPLICATION_ID
320 and B.ID_FLEX_CODE = T.ID_FLEX_CODE
321 and B.SEGMENT_ATTRIBUTE_TYPE = T.SEGMENT_ATTRIBUTE_TYPE
322 and B.VALUE_ATTRIBUTE_TYPE = T.VALUE_ATTRIBUTE_TYPE
323 and B.LANGUAGE = T.SOURCE_LANG)
324 where (
325 T.APPLICATION_ID,
326 T.ID_FLEX_CODE,
327 T.SEGMENT_ATTRIBUTE_TYPE,
328 T.VALUE_ATTRIBUTE_TYPE,
329 T.LANGUAGE
330 ) in (select
331 SUBT.APPLICATION_ID,
332 SUBT.ID_FLEX_CODE,
333 SUBT.SEGMENT_ATTRIBUTE_TYPE,
334 SUBT.VALUE_ATTRIBUTE_TYPE,
335 SUBT.LANGUAGE
336 from FND_VAL_ATTRIBUTE_TYPES_TL SUBB, FND_VAL_ATTRIBUTE_TYPES_TL SUBT
337 where SUBB.APPLICATION_ID = SUBT.APPLICATION_ID
338 and SUBB.ID_FLEX_CODE = SUBT.ID_FLEX_CODE
339 and SUBB.SEGMENT_ATTRIBUTE_TYPE = SUBT.SEGMENT_ATTRIBUTE_TYPE
340 and SUBB.VALUE_ATTRIBUTE_TYPE = SUBT.VALUE_ATTRIBUTE_TYPE
341 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
342 and (SUBB.PROMPT <> SUBT.PROMPT
343 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
344 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
345 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
346 ));
347 */
348
349 insert into FND_VAL_ATTRIBUTE_TYPES_TL (
350 APPLICATION_ID,
351 ID_FLEX_CODE,
352 SEGMENT_ATTRIBUTE_TYPE,
353 VALUE_ATTRIBUTE_TYPE,
354 PROMPT,
355 LAST_UPDATE_DATE,
356 LAST_UPDATED_BY,
357 CREATION_DATE,
358 CREATED_BY,
359 LAST_UPDATE_LOGIN,
360 DESCRIPTION,
361 LANGUAGE,
362 SOURCE_LANG
363 ) select
364 B.APPLICATION_ID,
365 B.ID_FLEX_CODE,
366 B.SEGMENT_ATTRIBUTE_TYPE,
367 B.VALUE_ATTRIBUTE_TYPE,
368 B.PROMPT,
369 B.LAST_UPDATE_DATE,
370 B.LAST_UPDATED_BY,
371 B.CREATION_DATE,
372 B.CREATED_BY,
373 B.LAST_UPDATE_LOGIN,
374 B.DESCRIPTION,
375 L.LANGUAGE_CODE,
376 B.SOURCE_LANG
377 from FND_VAL_ATTRIBUTE_TYPES_TL B, FND_LANGUAGES L
378 where L.INSTALLED_FLAG in ('I', 'B')
379 and B.LANGUAGE = userenv('LANG')
380 and not exists
381 (select NULL
382 from FND_VAL_ATTRIBUTE_TYPES_TL T
383 where T.APPLICATION_ID = B.APPLICATION_ID
384 and T.ID_FLEX_CODE = B.ID_FLEX_CODE
385 and T.SEGMENT_ATTRIBUTE_TYPE = B.SEGMENT_ATTRIBUTE_TYPE
386 and T.VALUE_ATTRIBUTE_TYPE = B.VALUE_ATTRIBUTE_TYPE
387 and T.LANGUAGE = L.LANGUAGE_CODE);
388 end ADD_LANGUAGE;
389
390 PROCEDURE load_row
391 (x_application_short_name IN VARCHAR2,
392 x_id_flex_code IN VARCHAR2,
393 x_segment_attribute_type IN VARCHAR2,
394 x_value_attribute_type IN VARCHAR2,
395 x_who IN fnd_flex_loader_apis.who_type,
396 x_required_flag IN VARCHAR2,
397 x_application_column_name IN VARCHAR2,
398 x_default_value IN VARCHAR2,
399 x_lookup_type IN VARCHAR2,
400 x_derivation_rule_code IN VARCHAR2,
401 x_derivation_rule_value1 IN VARCHAR2,
402 x_derivation_rule_value2 IN VARCHAR2,
403 x_prompt IN VARCHAR2,
404 x_description IN VARCHAR2)
405 IS
406 l_application_id NUMBER;
407 l_rowid VARCHAR2(64);
408 BEGIN
409 SELECT application_id
410 INTO l_application_id
411 FROM fnd_application
412 WHERE application_short_name = x_application_short_name;
413
414 BEGIN
415 fnd_val_attribute_types_pkg.update_row
416 (X_APPLICATION_ID => l_application_id,
417 X_ID_FLEX_CODE => x_id_flex_code,
418 X_SEGMENT_ATTRIBUTE_TYPE => x_segment_attribute_type,
419 X_VALUE_ATTRIBUTE_TYPE => x_value_attribute_type,
420 X_REQUIRED_FLAG => x_required_flag,
421 X_APPLICATION_COLUMN_NAME => x_application_column_name,
422 X_DEFAULT_VALUE => x_default_value,
423 X_LOOKUP_TYPE => x_lookup_type,
424 X_DERIVATION_RULE_CODE => x_derivation_rule_code,
425 X_DERIVATION_RULE_VALUE1 => x_derivation_rule_value1,
426 X_DERIVATION_RULE_VALUE2 => x_derivation_rule_value2,
427 X_PROMPT => x_prompt,
428 X_DESCRIPTION => x_description,
429 X_LAST_UPDATE_DATE => x_who.last_update_date,
430 X_LAST_UPDATED_BY => x_who.last_updated_by,
431 X_LAST_UPDATE_LOGIN => x_who.last_update_login);
432 EXCEPTION
433 WHEN no_data_found THEN
434 fnd_val_attribute_types_pkg.insert_row
435 (X_ROWID => l_rowid,
436 X_APPLICATION_ID => l_application_id,
437 X_ID_FLEX_CODE => x_id_flex_code,
438 X_SEGMENT_ATTRIBUTE_TYPE => x_segment_attribute_type,
439 X_VALUE_ATTRIBUTE_TYPE => x_value_attribute_type,
440 X_REQUIRED_FLAG => x_required_flag,
441 X_APPLICATION_COLUMN_NAME => x_application_column_name,
442 X_DEFAULT_VALUE => x_default_value,
443 X_LOOKUP_TYPE => x_lookup_type,
444 X_DERIVATION_RULE_CODE => x_derivation_rule_code,
445 X_DERIVATION_RULE_VALUE1 => x_derivation_rule_value1,
446 X_DERIVATION_RULE_VALUE2 => x_derivation_rule_value2,
447 X_PROMPT => x_prompt,
448 X_DESCRIPTION => x_description,
449 X_CREATION_DATE => x_who.creation_date,
450 X_CREATED_BY => x_who.created_by,
451 X_LAST_UPDATE_DATE => x_who.last_update_date,
452 X_LAST_UPDATED_BY => x_who.last_updated_by,
453 X_LAST_UPDATE_LOGIN => x_who.last_update_login);
454 END;
455 END load_row;
456
457 PROCEDURE translate_row
458 (x_application_short_name IN VARCHAR2,
459 x_id_flex_code IN VARCHAR2,
460 x_segment_attribute_type IN VARCHAR2,
461 x_value_attribute_type IN VARCHAR2,
462 x_who IN fnd_flex_loader_apis.who_type,
463 x_prompt IN VARCHAR2,
464 x_description IN VARCHAR2)
465 IS
466 BEGIN
467 UPDATE fnd_val_attribute_types_tl SET
468 prompt = Nvl(x_prompt, prompt),
469 description = Nvl(x_description, description),
470 last_update_date = x_who.last_update_date,
471 last_updated_by = x_who.last_updated_by,
472 last_update_login = x_who.last_update_login,
473 source_lang = userenv('LANG')
474 WHERE application_id = (SELECT application_id
475 FROM fnd_application
476 WHERE application_short_name = x_application_short_name)
477 AND id_flex_code = x_id_flex_code
478 AND segment_attribute_type = x_segment_attribute_type
479 AND value_attribute_type = x_value_attribute_type
480 AND userenv('LANG') in (language, source_lang);
481 END translate_row;
482
483 end FND_VAL_ATTRIBUTE_TYPES_PKG;