DBA Data[Home] [Help]

PACKAGE BODY: APPS.RRS_ATTR_PANE

Source


1 PACKAGE BODY RRS_ATTR_PANE AS
2 /* $Header: RRSGATPB.pls 120.18 2010/12/06 22:35:12 jijiao noship $ */
3 
4 /*Get Basic Information for the object*/
5 PROCEDURE Get_Primary_Attributes
6 (
7 	p_object_type		IN		VARCHAR2,
8 	p_object_id		IN		VARCHAR2,
9 	x_primary_attributes	OUT NOCOPY 	rrs_primary_attribute_rec,
10 	x_error_messages	OUT NOCOPY 	rrs_error_msg_tab
11 ) IS
12 
13 l_object_table_name	VARCHAR2(30);
14 l_pk_name		VARCHAR2(30);
15 l_classification_name	VARCHAR2(30);
16 l_date_format_mask	VARCHAR2(100);
17 
18 BEGIN
19 	--Bug Fix for Bug 9027024, need display the start/end date in the format as set in user preference
20 	SELECT FND_PROFILE.VALUE('ICX_DATE_FORMAT_MASK')
21 	  INTO l_date_format_mask
22 	  FROM DUAL;
23 
24 	/* decide which object type we are processing*/
25 	--Add RBAC on Site Object View
26 	IF UPPER(p_object_type) = 'SITE' AND RRS_SECURITY_PUB.Check_Object_View_Privilege(1.0, 'RRS_SITE', p_object_id) = 'T' THEN
27 		BEGIN
28 		SELECT RRS_PRIMARY_ATTRIBUTE_REC(
29 			SITE_ID,
30 			SITE_IDENTIFICATION_NUMBER,
31 			NAME,
32 			(SELECT MEANING
33 			   FROM RRS_SITE_USES RSU, AR_LOOKUPS LK
34 			  WHERE RSU.SITE_ID = p_object_id
35 			    AND RSU.IS_PRIMARY_FLAG = 'Y'
36 			    AND LK.LOOKUP_TYPE (+) = 'PARTY_SITE_USE_CODE'
37 			    AND RSU.SITE_USE_TYPE_CODE = LK.LOOKUP_CODE (+)
38 			),
39 			DESCRIPTION,
40 			(SELECT MEANING FROM RRS_LOOKUPS_V WHERE LOOKUP_TYPE = 'RRS_SITE_TYPE' AND LOOKUP_CODE = RSV.SITE_TYPE_CODE),
41 			(SELECT MEANING FROM RRS_LOOKUPS_V WHERE LOOKUP_TYPE = 'RRS_SITE_STATUS' AND LOOKUP_CODE = RSV.SITE_STATUS_CODE),
42 			TO_CHAR(START_DATE, l_date_format_mask), --Bug Fix for Bug 9027024, need display the start/end date in the format as set in user preference
43 			TO_CHAR(END_DATE, l_date_format_mask),   --Bug Fix for Bug 9027024, need display the start/end date in the format as set in user preference
44 			(HZ_FORMAT_PUB.format_address(RSV.location_id, null, null, ', ' , null) || ', ' || (SELECT COUNTRY FROM RRS_LOCATIONS_V WHERE LOCATION_ID = RSV.LOCATION_ID)
45 			),
46 			NULL,
47 			NULL,
48 			NULL)
49 		   INTO x_primary_attributes
50 		   FROM RRS_SITES_VL RSV
51 		  WHERE SITE_ID = p_object_id;
52 
53 		EXCEPTION
54 			WHEN NO_DATA_FOUND THEN
55 				Record_Error('No primary attributes were found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
56 			WHEN OTHERS THEN
57 				Record_Error('Get_Primary_Attributes: ' || dbms_utility.format_error_backtrace, x_error_messages);
58 
59 		END;
60 
61 	ELSIF UPPER(p_object_type) = 'LOCATION' THEN
62 		BEGIN
63 		SELECT RRS_PRIMARY_ATTRIBUTE_REC(
64 			LOCATION_ID,
65 			NULL,
66 			NULL,
67 			COUNTRY,
68 			DESCRIPTION,
69 			NULL,
70 			NULL,
71 			NULL,
72 			NULL,
73 			(HZ_FORMAT_PUB.format_address(RLV.location_id, null, null, ',' , null) || ', ' || COUNTRY
74 			),
75 			COUNTRY,
76 			NULL,
77 			NULL)
78 		   INTO x_primary_attributes
79 		   FROM RRS_LOCATIONS_V RLV
83 				Record_Error('No primary attributes were found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
80 		  WHERE LOCATION_ID = p_object_id;
81 		  EXCEPTION
82 		  	WHEN NO_DATA_FOUND THEN
84 			WHEN OTHERS THEN
85 				Record_Error('Get_Primary_Attributes: ' || dbms_utility.format_error_backtrace, x_error_messages);
86 
87 		  END;
88 
89 	ELSIF UPPER(p_object_type) = 'NODE' THEN
90 		 BEGIN
91 		 SELECT RRS_PRIMARY_ATTRIBUTE_REC(
92 			SITE_GROUP_NODE_ID,
93 			NODE_IDENTIFICATION_NUMBER,
94 			NAME,
95 			(SELECT MEANING
96 			   FROM RRS_LOOKUPS_V LK
97 			  WHERE LK.LOOKUP_TYPE (+) = 'RRS_NODE_PURPOSE'
98 			    AND RSGNV.NODE_PURPOSE_CODE = LK.LOOKUP_CODE (+)
99 			),
100 			DESCRIPTION,
101 			NULL,
102 			NULL,
103 			NULL,
104 			NULL,
105 			NULL,
106 			NULL,
107 			NULL,
108 			NULL)
109 		   INTO x_primary_attributes
110 		   FROM RRS_SITE_GROUP_NODES_VL RSGNV
111 		  WHERE SITE_GROUP_NODE_ID = p_object_id;
112 
113 		  EXCEPTION
114 		  	WHEN NO_DATA_FOUND THEN
115 				Record_Error('No primary attributes were found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
116 			WHEN OTHERS THEN
117 				Record_Error('Get_Primary_Attributes: ' || dbms_utility.format_error_backtrace, x_error_messages);
118 		  END;
119 
120 	/*ELSIF UPPER(p_object_type) = 'TRADE AREA' THEN
121 		SELECT RRS_PRIMARY_ATTRIBUTE_REC(
122 			GROUP_ID,
123 			SITE_IDENTIFICATION_NUMBER,
124 			NAME,
125 			(SELECT MEANING
126 			   FROM RRS_SITE_USES RSU, AR_LOOKUPS LK
127 			  WHERE RSU.SITE_ID = p_object_id
128 			    AND RSU.IS_PRIMARY_FLAG = 'Y'
129 			    AND LK.LOOKUP_TYPE = 'PARTY_SITE_USE_CODE'
130 			    AND RSU.SITE_USE_TYPE_CODE = LK.LOOKUP_CODE
131 			),
132 			DESCRIPTION,
133 			(SELECT MEANING FROM RRS_LOOKUPS_V WHERE LOOKUP_TYPE = 'RRS_SITE_TYPE' AND LOOKUP_CODE = RSV.SITE_TYPE_CODE),
134 			(SELECT MEANING FROM RRS_LOOKUPS_V WHERE LOOKUP_TYPE = 'RRS_SITE_STATUS' AND LOOKUP_CODE = RSV.SITE_STATUS_CODE),
135 			START_DATE,
136 			END_DATE,
137 			(HZ_FORMAT_PUB.format_address(RSV.location_id, null, null, ',' , null) || ', ' || (SELECT COUNTRY FROM RRS_LOCATIONS_V WHERE LOCATION_ID = RSV.LOCATION_ID)
138 			),
139 			(SELECT MEANING FROM RRS_LOOKUPS_V WHERE LOOKUP_TYPE = 'RRS_TRADE_AREA_GROUP_TYPE' AND LOOKUP_CODE = RTAGV.GROUP_TYPE_CODE),
140 			NULL,
141 			NULL)
142 		   INTO x_primary_attributes
143 		   FROM RRS_TRADE_AREA_GROUPS_VL RTAGV
144 		  WHERE GROUP_ID = p_object_id;
145 	*/
146 	--Add RBAC on Hierarchy object VIEW
147 	ELSIF UPPER(p_object_type) = 'HIERARCHY' AND RRS_SECURITY_PUB.Check_Object_View_Privilege(1.0, 'RRS_HIERARCHY', p_object_id) = 'T' THEN
148 		 BEGIN
149 		 SELECT RRS_PRIMARY_ATTRIBUTE_REC(
150 			SITE_GROUP_ID,
151 			NULL,
152 			NAME,
153 			(SELECT MEANING
154 			   FROM RRS_LOOKUPS_V LK
155 			  WHERE LK.LOOKUP_TYPE(+) = 'RRS_HIERARCHY_PURPOSE'
156 			    AND RSGV.GROUP_PURPOSE_CODE = LK.LOOKUP_CODE (+)
157 			),
158 			DESCRIPTION,
159 			NULL,
160 			NULL,
161 			TO_CHAR(START_DATE, l_date_format_mask),  --Bug Fix for Bug 9027024, need display the start/end date in the format as set in user preference
162 			TO_CHAR(END_DATE, l_date_format_mask),    --Bug Fix for Bug 9027024, need display the start/end date in the format as set in user preference
163 			NULL,
164 			NULL,
165 			SITE_GROUP_TYPE_CODE,
166 			NULL)
167 		   INTO x_primary_attributes
168 		   FROM RRS_SITE_GROUPS_VL RSGV
169 		  WHERE SITE_GROUP_ID = (SELECT SITE_GROUP_ID FROM RRS_SITE_GROUP_VERSIONS WHERE SITE_GROUP_VERSION_ID = p_object_id);
170 
171 		 EXCEPTION
172 		  	WHEN NO_DATA_FOUND THEN
173 		  		Record_Error('No primary attributes were found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
174 		  	WHEN OTHERS THEN
175 		  		Record_Error('Get_Primary_Attributes: ' || dbms_utility.format_error_backtrace, x_error_messages);
176 
177 		 END;
178 	END IF;
179 
180 EXCEPTION
181 	WHEN NO_DATA_FOUND THEN
182 		Record_Error('No primary attributes were found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
183 	WHEN OTHERS THEN
184 		Record_Error('Get_Primary_Attributes: ' || dbms_utility.format_error_backtrace, x_error_messages);
185 END;
186 
187 
188 PROCEDURE Get_Attribute_Page
189 (
190 	p_where_used		IN		VARCHAR2,
191 	p_object_type		IN		VARCHAR2,
192 	p_object_id		IN		NUMBER,
193 	p_object1		IN		VARCHAR2,
194 	p_classification_code1	IN		VARCHAR2,
195 	p_object2		IN		VARCHAR2,
196 	p_classification_code2	IN		VARCHAR2,
197 	x_primary_attributes	OUT NOCOPY	rrs_primary_attribute_rec,
198 	x_ag_page_tab		OUT NOCOPY	rrs_attr_group_page_tab,
199 	x_attr_group_tab	OUT NOCOPY	rrs_attribute_group_tab,
200 	x_attribute_tab		OUT NOCOPY	rrs_attribute_tab,
201 	x_error_messages	OUT NOCOPY	rrs_error_msg_tab
202 ) IS
203 
204 l_classification_code	VARCHAR2(30);
205 l_page_id_array		t_array_of_number;
206 l_attr_group_page_rec	rrs_attr_group_page_rec;
207 l_attr_group_page_tab	rrs_attr_group_page_tab;
208 l_attribute_group_rec	rrs_attribute_group_rec;
209 l_page_entries		t_page_entry_tab;
210 l_ext_id_array		t_array_of_number;
211 
215 l_attribute_tab		t_attribute_tab;
212 l_ext_table_name	VARCHAR2(30);
213 l_pk_name		VARCHAR2(30);
214 l_classification_name	VARCHAR2(30);
216 
217 l_x_display_value	VARCHAR2(1000);
218 l_x_display_type	VARCHAR2(200);
219 l_x_dynamic_url		VARCHAR2(1000);
220 
221 l_query			VARCHAR2(1000);
222 l_display_type_code	VARCHAR2(10);
223 l_has_view_priv	VARCHAR2(10);
224 l_obj_name		VARCHAR2(60);
225 
226 
227 BEGIN
228 
229 	Get_Primary_Attributes(p_object_type,
230 			       p_object_id,
231 			       x_primary_attributes,
232 			       x_error_messages);
233 	--x_primary_attributes IS NULL means user cannot view this object.
234 	IF x_primary_attributes IS NULL THEN
235 		RETURN;
236 	END IF;
237 
238 	/* decide which object type we are processing*/
239 	IF UPPER(p_object_type) = 'NODE' THEN
240 		RAISE e_no_uda;
241 	ELSIF UPPER(p_object_type) = 'SITE' THEN
242 		l_obj_name := 'RRS_SITE';
243 		l_ext_table_name := 'RRS_SITES_EXT_VL';
244 		l_pk_name := 'SITE_ID';
245 		l_classification_name := 'SITE_USE_TYPE_CODE';
246 	ELSIF UPPER(p_object_type) = 'LOCATION' THEN
247 		l_obj_name := 'RRS_LOCATION';
248 		l_ext_table_name := 'RRS_LOCATIONS_EXT_VL';
249 		l_pk_name := 'LOCATION_ID';
250 		l_classification_name := 'COUNTRY';
251 	ELSIF UPPER(p_object_type) = 'TRADE AREA' THEN
252 		l_obj_name := 'RRS_TRADE_AREA';
253 		l_ext_table_name := 'RRS_TRADE_AREAS_EXT_VL';
254 		l_pk_name := 'TRADE_AREA_ID';
255 		l_classification_name := 'GROUP_ID';
256 	ELSIF UPPER(p_object_type) = 'HIERARCHY' THEN
257 		l_obj_name := 'RRS_HIERARCHY';
258 		l_ext_table_name := 'RRS_HIERARCHIES_EXT_VL';
259 		l_pk_name := 'SITE_GROUP_VERSION_ID';
260 		l_classification_name := 'HIERARCHY_PURPOSE_CODE';
261 	END IF;
262 
263 	/*Get Page IDs*/
264 	BEGIN
265 	IF p_object2 IS NOT NULL AND p_classification_code2 IS NOT NULL THEN
266 		SELECT ATTRIBUTE_PAGE_ID
267 		  BULK COLLECT
268 		  INTO l_page_id_array
269 		  FROM RRS_ATTR_PAGE_SETTINGS
270 		 WHERE WHERE_USED = p_where_used
271 		   AND OBJECT_TYPE = p_object_type
272 		   AND CATEGORIZATION_OBJECT1 = p_object1
273 		   AND CLASSIFICATION_CODE1 = p_classification_code1
274 		   AND CATEGORIZATION_OBJECT2 = p_object2
275 	   	   AND CLASSIFICATION_CODE2 = p_classification_code2;
276 
277 	ELSIF p_object2 IS NULL AND p_classification_code2 IS NULL THEN
278 		SELECT ATTRIBUTE_PAGE_ID
279 		  BULK COLLECT
280 		  INTO l_page_id_array
281 		  FROM RRS_ATTR_PAGE_SETTINGS
282 		 WHERE WHERE_USED = p_where_used
283 		   AND OBJECT_TYPE = p_object_type
284 		   AND CATEGORIZATION_OBJECT1 = p_object1
285 		   AND CLASSIFICATION_CODE1 = p_classification_code1
286 		   AND CATEGORIZATION_OBJECT2 IS NULL
287 	   	   AND CLASSIFICATION_CODE2 IS NULL;
288 
289 	ELSIF p_classification_code2 IS NULL THEN
290 		SELECT ATTRIBUTE_PAGE_ID
291 		  BULK COLLECT
292 		  INTO l_page_id_array
293 		  FROM RRS_ATTR_PAGE_SETTINGS
294 		 WHERE WHERE_USED = p_where_used
295 		   AND OBJECT_TYPE = p_object_type
296 		   AND CATEGORIZATION_OBJECT1 = p_object1
297 		   AND CLASSIFICATION_CODE1 = p_classification_code1
298 		   AND CATEGORIZATION_OBJECT2 = p_object2
299 	   	   AND CLASSIFICATION_CODE2 IS NULL;
300 	END IF;
301 
302 	EXCEPTION
303 		WHEN NO_DATA_FOUND THEN
304 
305 			IF x_error_messages IS NULL THEN
306 				x_error_messages := new rrs_error_msg_tab();
307 			END IF;
308 			x_error_messages.EXTEND();
309 			x_error_messages(x_error_messages.LAST) := 'Get_Attribute_Group_Page: No attribute page was found for ' || p_object_type || ' ' || p_object_id || '.';
310 			--Record_Error('Get_Attribute_Group_Page: No attribute page was found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
311 			RAISE e_no_page_found;
312 	END;
313 
314 	IF l_page_id_array IS NULL OR l_page_id_array.COUNT = 0 THEN
315 
316 			IF x_error_messages IS NULL THEN
317 				x_error_messages := new rrs_error_msg_tab();
318 			END IF;
319 			x_error_messages.EXTEND();
320 			x_error_messages(x_error_messages.LAST) := 'Get_Attribute_Group_Page: No attribute page was found for ' || p_object_type || ' ' || p_object_id || '.';
321 			--Record_Error('Get_Attribute_Group_Page: No attribute page was found for ' || p_object_type || ' ' || p_object_id || '.', x_error_messages);
322 			RAISE e_no_page_found;
323 	END IF;
324 
325 	/*Decide the classification for the page*/
326 	IF p_classification_code2 IS NULL THEN
327 		l_classification_code := p_classification_code1;
328 	ELSE
329 		l_classification_code := p_classification_code2;
330 	END IF;
331 
332 	/*For each page, get page information*/
333         FOR i in 1 .. l_page_id_array.COUNT
334         LOOP
335         	/*Get Page Information*/
336 		BEGIN
337 		SELECT RRS_ATTR_GROUP_PAGE_REC(
338 		       PAGE_ID,
339 		       OBJECT_NAME,
340 		       CLASSIFICATION_CODE,
341 		       DATA_LEVEL_INT_NAME, INTERNAL_NAME, DISPLAY_NAME,
342 		       DESCRIPTION, SEQUENCE)
343 		  INTO l_attr_group_page_rec
344 		  FROM EGO_PAGES_V
345 		 WHERE PAGE_ID = l_page_id_array(i);
346 
347 		 IF l_attr_group_page_tab IS NULL THEN
348 		 	l_attr_group_page_tab := new rrs_attr_group_page_tab();
349 		 END IF;
350 
351 		 l_attr_group_page_tab.EXTEND();
352 		 l_attr_group_page_tab(l_attr_group_page_tab.LAST) := new rrs_attr_group_page_rec(
353 									l_attr_group_page_rec.PAGE_ID,
354 									l_attr_group_page_rec.OBJECT_NAME,
355 									l_attr_group_page_rec.CLASSIFICATION_CODE,
356 									l_attr_group_page_rec.DATA_LEVEL_INT_NAME,
360 									l_attr_group_page_rec.SEQUENCE
357 									l_attr_group_page_rec.INTERNAL_NAME,
358 									l_attr_group_page_rec.DISPLAY_NAME,
359 									l_attr_group_page_rec.DESCRIPTION,
361 								      );
362 
363 		EXCEPTION
364 			WHEN NO_DATA_FOUND THEN
365 				Record_Error('Get_Attribute_Group_Page: No attribute page was found for Page Id ' || l_page_id_array(i) || '.', x_error_messages);
366 				RAISE e_no_page_found;
367 		END;
368         END LOOP;
369 
370         SELECT RRS_ATTR_GROUP_PAGE_REC(
371 		PAGE_ID, OBJECT_NAME, CLASSIFICATION_CODE,
372 		DATA_LEVEL_INT_NAME, INTERNAL_NAME, DISPLAY_NAME,
373 		DESCRIPTION, SEQUENCE)
374           BULK COLLECT
375           INTO x_ag_page_tab
376           FROM TABLE(l_attr_group_page_tab)
377           ORDER BY SEQUENCE;
378 
379 
380 
381         /*For each page, get the Page Entries Information*/
382         FOR i in 1 .. x_ag_page_tab.COUNT
383         LOOP
384 		/*Get Page Entries In the Order of SEQUENCE*/
385 		BEGIN
386 		SELECT ATTR_GROUP_TYPE, ATTR_GROUP_NAME, SEQUENCE
387 		  BULK COLLECT
388 		  INTO l_page_entries
389 		  FROM EGO_PAGE_ENTRIES_V
390 		 WHERE PAGE_ID = l_page_id_array(i)
391 		   AND CLASSIFICATION_CODE = l_classification_code
392 	      ORDER BY SEQUENCE;
393 
394 	      	EXCEPTION
395 	      		WHEN NO_DATA_FOUND THEN
396 				Record_Error('Get_Attribute_Group_Page: No attribute page entry was found for page ' || l_page_id_array(i) || '.', x_error_messages);
397 	      			RAISE e_no_page_entry_found;
398 	      	END;
399 
400 	      	IF l_page_entries IS NULL OR l_page_entries.COUNT = 0 THEN
401 				Record_Error('Get_Attribute_Group_Page: No attribute page entry was found for page ' || l_page_id_array(i) || '.', x_error_messages);
402 	      			RAISE e_no_page_entry_found;
403 	      	END IF;
404 
405 		/*Get Attribute Group Information*/
406 		FOR j in 1 .. l_page_entries.COUNT
407 		LOOP
408 			BEGIN
409 			SELECT RRS_ATTRIBUTE_GROUP_REC(
410 			       l_page_id_array(i),
411 			       ATTR_GROUP_ID,
412 			       ATTR_GROUP_TYPE,
413 			       ATTR_GROUP_NAME,
414 			       ATTR_GROUP_DISP_NAME,
415 			       DESCRIPTION,
416 			       MULTI_ROW_CODE,
417 			       SECURITY_CODE,
418 			       NUM_OF_COLS,
419 			       NUM_OF_ROWS,
420 			       l_page_entries(j).sequence)
421 			  INTO l_attribute_group_rec
422 			  FROM EGO_ATTR_GROUPS_V
423 			 WHERE APPLICATION_ID = 718
424 			   AND ATTR_GROUP_TYPE = l_page_entries(j).attr_group_type
425 			   AND ATTR_GROUP_NAME = l_page_entries(j).attr_group_name;
426 
427 			/*Added for RBAC Project, check View privilege*/
428 			l_has_view_priv := RRS_SECURITY_PUB.Check_UDA_View_Privilege(p_api_version		=> 1.0,
429 																		 p_attr_group_id 	=> l_attribute_group_rec.ATTR_GROUP_ID,
430 																		 p_object_name		=> l_obj_name,
431 																		 p_object_key		=> p_object_id);
432 			--if user has view privelege on this attribute group, we process this attribute group; otherwise we will not include this attribute group in the bracket for the further process.
433 			IF l_has_view_priv = FND_API.G_TRUE THEN
434 				IF x_attr_group_tab IS NULL THEN
435 					x_attr_group_tab := new rrs_attribute_group_tab();
436 				END IF;
437 
438 				x_attr_group_tab.EXTEND();
439 				x_attr_group_tab(x_attr_group_tab.LAST) := new rrs_attribute_group_rec(
440 										l_attribute_group_rec.PAGE_ID,
441 										l_attribute_group_rec.ATTR_GROUP_ID,
442 										l_attribute_group_rec.ATTR_GROUP_TYPE,
443 										l_attribute_group_rec.ATTR_GROUP_NAME,
444 										l_attribute_group_rec.ATTR_GROUP_DISP_NAME,
445 										l_attribute_group_rec.DESCRIPTION,
446 										l_attribute_group_rec.MULTI_ROW_CODE,
447 										l_attribute_group_rec.SECURITY_CODE,
448 										l_attribute_group_rec.NUM_OF_COLS,
449 										l_attribute_group_rec.NUM_OF_ROWS,
450 										l_attribute_group_rec.SEQUENCE);
451 
452 			END IF;
453 			EXCEPTION
454 				WHEN NO_DATA_FOUND THEN
455 					Record_Error('Get_Attribute_Group_Page: No attribute group was found for page entry ' || l_page_entries(j).attr_group_type || ' ' || l_page_entries(j).attr_group_name || '.', x_error_messages);
456 					RAISE e_no_attr_group_found;
457 			END;
458 		END LOOP;
459 
460 
461 		/*For each attribute group, get attributes*/
462 		FOR j in 1 .. x_attr_group_tab.COUNT
463 		LOOP
464 			BEGIN
465 			/*For each attribute group, get Extension IDs*/
466 			l_query := 'SELECT EXTENSION_ID' ||
467 			           '  FROM ' || l_ext_table_name ||
468 			 	   ' WHERE ' || l_pk_name || ' = :1'||
469 			 	   '   AND ' || l_classification_name || ' = :2'||
470 			 	   '   AND ATTR_GROUP_ID = :3';
471 			EXECUTE IMMEDIATE l_query
472 			BULK COLLECT INTO l_ext_id_array
473 			            USING p_object_id, l_classification_code, x_attr_group_tab(j).ATTR_GROUP_ID;
474 
475 			/*Get Attribute Names for the attribute group*/
476 			BEGIN
477 			SELECT ATTR_NAME, ATTR_DISPLAY_NAME, DISPLAY_CODE, DESCRIPTION, SEQUENCE
478 			  BULK COLLECT
479 			  INTO l_attribute_tab
480 			  FROM EGO_ATTRS_V
481 			 WHERE APPLICATION_ID = 718
482 			   AND ATTR_GROUP_TYPE = x_attr_group_tab(j).ATTR_GROUP_TYPE
483 			   AND ATTR_GROUP_NAME = x_attr_group_tab(j).ATTR_GROUP_NAME
484 			   AND ENABLED_FLAG = 'Y'	--Bug Fix 9709262: The disabled attribute will not show up.
485 			 ORDER BY SEQUENCE;
486 
487 			EXCEPTION
488 				WHEN NO_DATA_FOUND THEN
489 					Record_Error('Get_Attribute_Group_Page: No attribute was found for ' || x_attr_group_tab(j).ATTR_GROUP_TYPE || ' ' || x_attr_group_tab(j).ATTR_GROUP_NAME || '.', x_error_messages);
490 					RAISE e_no_attribute_found;
494 				Record_Error('Get_Attribute_Group_Page: No attribute was found for ' || x_attr_group_tab(j).ATTR_GROUP_TYPE || ' ' || x_attr_group_tab(j).ATTR_GROUP_NAME || '.', x_error_messages);
491 			END;
492 
493 			IF l_attribute_tab IS NULL OR l_attribute_tab.COUNT = 0 THEN
495 				RAISE e_no_attribute_found;
496 			END IF;
497 
498 			/*For each EXT Row, we get the display value for each attribute*/
499 			FOR k in 1 .. l_ext_id_array.COUNT
500 			LOOP
501 				FOR p in 1 .. l_attribute_tab.COUNT
502 				LOOP
503 					--DBMS_OUTPUT.PUT_LINE('p_attr_group_type: ' || x_attr_group_tab(j).ATTR_GROUP_TYPE);
504 					Get_Display_Value(p_object_type,
505 					                  p_object_id,
506 					                  x_attr_group_tab(j).ATTR_GROUP_TYPE,
507 					                  x_attr_group_tab(j).ATTR_GROUP_NAME,
508 					                  l_attribute_tab(p).ATTR_NAME,
509 					                  l_ext_id_array(k),
510 					                  l_x_display_value,
511 					                  l_x_display_type,
512 					                  l_x_dynamic_url,
513 					                  x_error_messages);
514 
515 					IF x_attribute_tab IS NULL THEN
516 						x_attribute_tab := new rrs_attribute_tab();
517 					END IF;
518 
519 					x_attribute_tab.EXTEND();
520 					x_attribute_tab(x_attribute_tab.LAST) := new rrs_attribute_rec(
521 											x_attr_group_tab(j).ATTR_GROUP_TYPE,
522 											x_attr_group_tab(j).ATTR_GROUP_NAME,
523 											l_ext_id_array(k),
524 											l_attribute_tab(p).ATTR_NAME,
525 											l_attribute_tab(p).ATTR_DISPLAY_NAME,
526 											l_attribute_tab(p).DESCRIPTION,
527 											l_x_display_value,
528 											l_x_display_type,
529 											l_x_dynamic_url,
530 											l_attribute_tab(p).SEQUENCE);
531 				END LOOP;
532 			END LOOP;
533 
534 			/*if there is no ext row for this attribute group, we still return the attribute names without any value*/
535 			IF l_ext_id_array IS NULL OR l_ext_id_array.COUNT = 0 THEN
536 				FOR p in 1 .. l_attribute_tab.COUNT
537 				LOOP
538 					IF x_attribute_tab IS NULL THEN
539 						x_attribute_tab := new rrs_attribute_tab();
540 					END IF;
541 					x_attribute_tab.EXTEND();
542 					l_display_type_code := 'T of C'; -- dummy display type
543 					--Bug Fix 9453429: Need consider the Hidden Data Type even for the empty attribute group
544 					IF l_attribute_tab(p).DISPLAY_CODE = 'H' THEN
545 						l_display_type_code := 'H of C';
546 					END IF;
547 					x_attribute_tab(x_attribute_tab.LAST) := new rrs_attribute_rec(
548 												x_attr_group_tab(j).ATTR_GROUP_TYPE,
549 												x_attr_group_tab(j).ATTR_GROUP_NAME,
550 												NULL, 					-- ext_id
551 												l_attribute_tab(p).ATTR_NAME,
552 												l_attribute_tab(p).ATTR_DISPLAY_NAME,
553 												l_attribute_tab(p).DESCRIPTION,
554 												NULL,					-- display value
555 												l_display_type_code,
556 												NULL,
557 												l_attribute_tab(p).SEQUENCE);
558 				END LOOP;
559 			END IF;
560 			EXCEPTION
561 				WHEN e_no_attribute_found THEN
562 					DBMS_OUTPUT.PUT_LINE('No availabe attributes for attribute group ' || x_attr_group_tab(j).ATTR_GROUP_NAME);
563 			END;
564 		END LOOP;	--AG LOOP
565     END LOOP;	-- PAGE LOOP
566 
567 
568 EXCEPTION
569 	WHEN e_no_uda THEN
570 		Record_Error('e_no_uda: ' || p_object_type || ' does not have UDA.', x_error_messages);
571 	WHEN e_no_page_found THEN
572 		Record_Error('e_no_page_found', x_error_messages);
573 	WHEN e_no_page_entry_found THEN
574 		Record_Error('e_no_page_entry_found', x_error_messages);
575 	WHEN e_no_attr_group_found THEN
576 		Record_Error('e_no_attr_group_found', x_error_messages);
577 	WHEN e_no_ext_row_found THEN
578 		Record_Error('e_no_ext_row_found', x_error_messages);
579 	WHEN e_no_attribute_found THEN
580 		Record_Error('e_no_attribute_found', x_error_messages);
581 	WHEN OTHERS THEN
582 		Record_Error('Get_Attribute_Group_Page: ' || dbms_utility.format_error_backtrace, x_error_messages);
583 		--DBMS_OUTPUT.PUT_LINE('Other exceptions in Get_Attribute_Page');
584 		--dbms_output.put_line(dbms_utility.format_error_backtrace);
585 END;
586 
587 
588 PROCEDURE Get_Display_Value
589 (
590 	p_object_type		IN		VARCHAR2,
591 	p_object_id		IN		NUMBER,
592 	p_attr_group_type	IN		VARCHAR2,
593 	p_attr_group_name	IN		VARCHAR2,
594 	p_attr_name 		IN		VARCHAR2,
595 	p_ext_id		IN		NUMBER,
596 	x_display_value		OUT NOCOPY	VARCHAR2,
597 	x_display_type		OUT NOCOPY	VARCHAR2,
598 	x_dynamic_url		OUT NOCOPY	VARCHAR2,
599 	x_error_messages	OUT NOCOPY 	rrs_error_msg_tab
600 ) IS
601 
602 
603 l_query			VARCHAR2(2000);
604 
605 l_ext_table_name	VARCHAR2(200);
606 l_pk_name		VARCHAR2(30);
607 l_attr_group_id		EGO_ATTR_GROUPS_V.ATTR_GROUP_ID%TYPE;
608 
609 l_attr_info		attr_info_rec;
610 l_code_value		VARCHAR2(1000);
611 l_date_value		DATE;
612 
613 l_uom_code		RRS_SITES_EXT_VL.UOM_EXT_ATTR1%TYPE;
614 l_uom			MTL_UNITS_OF_MEASURE_VL.UNIT_OF_MEASURE_TL%TYPE;
615 l_uom_conversion_rate	MTL_UOM_CONVERSIONS.CONVERSION_RATE%TYPE;
616 
617 l_index			NUMBER := 1;
618 l_dynamic_url		EGO_ATTRS_V.INFO_1%TYPE;
619 l_url_value		EGO_ATTRS_V.INFO_1%TYPE;
620 l_url_tokens		array_of_string := new array_of_string();
621 
622 l_x_display_value	VARCHAR2(1000);
623 l_x_display_type	VARCHAR2(200);
624 l_x_dynamic_url		VARCHAR2(1000);
625 
626 /*For Table Value Set query*/
627 l_app_table_name	FND_FLEX_VALIDATION_TABLES.APPLICATION_TABLE_NAME%TYPE;
628 l_value_column_name	FND_FLEX_VALIDATION_TABLES.VALUE_COLUMN_NAME%TYPE;
629 l_value_column_type	FND_FLEX_VALIDATION_TABLES.VALUE_COLUMN_TYPE%TYPE;
633 
630 l_id_column_name	FND_FLEX_VALIDATION_TABLES.ID_COLUMN_NAME%TYPE;
631 l_add_where_clause	FND_FLEX_VALIDATION_TABLES.ADDITIONAL_WHERE_CLAUSE%TYPE;
632 l_add_where_clause_holder	l_add_where_clause%TYPE;
634 l_date_format_mask	VARCHAR2(100);
635 
636 --Bug Fix for Bug 9012596 - jijiao 10/15/2009
637 l_dep_attr_name		EGO_ATTRS_V.ATTR_NAME%TYPE;
638 l_start_index		NUMBER;
639 l_next_space_index      NUMBER;
640 l_dep_column		EGO_ATTRS_V.DATABASE_COLUMN%TYPE;
641 l_dep_data_type		EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
642 l_dep_code_value	VARCHAR2(1000);
643 l_dep_date_value	DATE;
644 
645 BEGIN
646 
647 --DBMS_OUTPUT.PUT_LINE('p_object_type: ' || p_object_type);
648 /* decide which object type we are processing*/
649 IF UPPER(p_object_type) = 'SITE' THEN
650 	l_ext_table_name := 'RRS_SITES_EXT_VL';
651 	l_pk_name := 'SITE_ID';
652 ELSIF UPPER(p_object_type) = 'LOCATION' THEN
653 	l_ext_table_name := 'RRS_LOCATIONS_EXT_VL';
654 	l_pk_name := 'LOCATION_ID';
655 ELSIF UPPER(p_object_type) = 'TRADE AREA' THEN
656 	l_ext_table_name := 'RRS_TRADE_AREAS_EXT_VL';
657 	l_pk_name := 'TRADE_AREA_ID';
658 ELSIF UPPER(p_object_type) = 'HIERARCHY' THEN
659 	l_ext_table_name := 'RRS_HIERARCHIES_EXT_VL';
660 	l_pk_name := 'SITE_GROUP_VERSION_ID';
661 END IF;
662 
663 --DBMS_OUTPUT.PUT_LINE('l_ext_table_name: ' || l_ext_table_name);
664 --DBMS_OUTPUT.PUT_LINE('l_attr_group_name: ' || p_attr_group_type);
665 
666 /* query for database column set up for the attribute*/
667 BEGIN
668 --DBMS_OUTPUT.PUT_LINE('p_attr_group_type: ' || p_attr_group_type);
669 --DBMS_OUTPUT.PUT_LINE('p_attr_group_name: ' || p_attr_group_name);
670 --DBMS_OUTPUT.PUT_LINE('p_attr_name: ' || p_attr_name);
671 
672 	--Bug Fix 8989777 - jijiao 10/12/2009
673 	--Need add Attribute Group Type to the where clause to handle the Same Attribute Group Names for the different Attribute Group Types
674 	BEGIN
675 		SELECT DATABASE_COLUMN, DATA_TYPE_CODE, INFO_1, UOM_CLASS, VALUE_SET_ID, VALIDATION_CODE, DISPLAY_CODE, DISPLAY_MEANING
676 		  INTO l_attr_info
677 		  FROM EGO_ATTRS_V
678 		 WHERE APPLICATION_ID = 718
679 		   AND ATTR_GROUP_TYPE = p_attr_group_type
680 		   AND ATTR_GROUP_NAME = p_attr_group_name
681 		   AND ATTR_NAME = p_attr_name;
682 	EXCEPTION
683 		WHEN NO_DATA_FOUND THEN
684 			Record_Error('Get_Display_Value: No Display Value is found.', x_error_messages);
685 		WHEN OTHERS THEN
686 			Record_Error('Get_Display_Value: When getting display value, get '|| sqlcode ||': '||sqlerrm, x_error_messages);
687 	END;
688 --DBMS_OUTPUT.PUT_LINE('l_database_column: ' || l_attr_info.value_set_id);
689 
690 EXCEPTION
691 	WHEN NO_DATA_FOUND THEN
692 		Record_Error('Get_Display_Value: No attribute was found for ' || p_attr_group_type || ' ' || p_attr_group_name || '.', x_error_messages);
693 		RAISE e_no_attribute_found;
694 END;
695 
696 
697 /* query attribute group id */
698 BEGIN
699 	SELECT ATTR_GROUP_ID
700 	  INTO l_attr_group_id
701 	  FROM EGO_ATTR_GROUPS_V
702 	 WHERE APPLICATION_ID = 718
703 	   AND ATTR_GROUP_TYPE = p_attr_group_type
704 	   AND ATTR_GROUP_NAME = p_attr_group_name;
705 --DBMS_OUTPUT.PUT_LINE('l_attr_group_id: ' || l_attr_group_id);
706 
707 EXCEPTION
708 	WHEN NO_DATA_FOUND THEN
709 		Record_Error('Get_Display_Value: No attribute group was found for attribute group name ' || p_attr_group_name || '.', x_error_messages);
710 		RAISE e_no_attr_group_found;
711 END;
712 
713 
714 /* query the code value*/
715 BEGIN
716 	/*For Date or DateTime Attributes, we need maintain the DATE data type to keep the full date/time infomation*/
717 	IF l_attr_info.data_type_code = 'X' OR l_attr_info.data_type_code = 'Y' THEN
718 		l_query := 'SELECT ' || l_attr_info.database_column ||
719 		    	    ' FROM ' || l_ext_table_name ||
720 		   	   ' WHERE ' || l_pk_name || ' = :1' ||
721 		   	     ' AND ATTR_GROUP_ID = :2' ||
722 		   	     ' AND EXTENSION_ID = :3';
723 		EXECUTE IMMEDIATE l_query INTO l_date_value USING p_object_id, l_attr_group_id, p_ext_id;
724 	/* for Numeric Attribute, we need consider UOM*/
725 	ElSIF l_attr_info.uom_class IS NOT NULL THEN
726 		l_query := 'SELECT ' || l_attr_info.database_column || ', ' || REPLACE(l_attr_info.database_column, 'N', 'UOM') ||
727 		    	    ' FROM ' || l_ext_table_name ||
728 		   	   ' WHERE ' || l_pk_name || ' = :1' ||
729 		   	     ' AND ATTR_GROUP_ID = :2' ||
730 		   	     ' AND EXTENSION_ID = :3';
731 		EXECUTE IMMEDIATE l_query INTO l_code_value, l_uom_code USING p_object_id, l_attr_group_id, p_ext_id;
732 		--DBMS_OUTPUT.PUT_LINE(l_attr_info.database_column);
733 		--DBMS_OUTPUT.PUT_LINE(l_code_value || ' ' || l_uom_code);
734 
735 	ELSE
736 		l_query := 'SELECT ' || l_attr_info.database_column ||
737 		    	    ' FROM ' || l_ext_table_name ||
738 		   	   ' WHERE ' || l_pk_name || ' = :1' ||
739 		   	     ' AND ATTR_GROUP_ID = :2' ||
740 		   	     ' AND EXTENSION_ID = :3';
741 		--DBMS_OUTPUT.PUT_LINE(l_query);
745 EXCEPTION
742 		EXECUTE IMMEDIATE l_query INTO l_code_value USING p_object_id, l_attr_group_id, p_ext_id;
743 	END IF;
744 
746 	WHEN NO_DATA_FOUND THEN
747 		Record_Error('Get_Display_Value: No extension row was found for Extension Id ' || p_ext_id || '.', x_error_messages);
748 		RAISE e_no_ext_row_found;
749 END;
750 
751 /* Can I say: Because only Numeric Attribute can have UOM, so the attribute has UOM is Numeric.
752 	      And because the Numeric Value Set's value code will be identifcal with the value meaning,
753 	      so for the attribute with UOM I do not need consider Value Set issue, but just directly display the value stored in N_EXT_ATTR column of the EXT table?*/
754 IF l_attr_info.data_type_code = 'N' AND l_uom_code IS NOT NULL THEN
755 	/* NEED CONVERT The Numberic Value stored in N_EXT_ATTR column from the BASE UOM to the UOM user input*/
756 	BEGIN
757 		/* query for the translated uom meaning*/
758 		SELECT UNIT_OF_MEASURE_TL
759 		  INTO l_uom
760 		  FROM MTL_UNITS_OF_MEASURE_VL
761 		 WHERE UOM_CODE = l_uom_code;
762 
763 		/* query for the uom conversion rate*/
764 		SELECT CONVERSION_RATE
765 		  INTO l_uom_conversion_rate
766 		  FROM MTL_UOM_CONVERSIONS
767 		  WHERE UOM_CODE = l_uom_code;
768 
769 		--DBMS_OUTPUT.PUT_LINE(l_uom_conversion_rate);
770 
771 		/* construct the display value at the proper uom*/
772 		SELECT ((l_code_value / l_uom_conversion_rate) || ' ' || l_uom)
773 		  INTO x_display_value
774 		  FROM DUAL;
775 		--Bug 9247705: Use display_code rather than display_meaning.
776 		x_display_type := l_attr_info.display_code || ' of ' || l_attr_info.data_type_code || ' with UOM';
777 
778 		--DBMS_OUTPUT.PUT_LINE(x_display_value || ' is displayed as ' || x_display_type);
779 	EXCEPTION
780 		WHEN NO_DATA_FOUND THEN
781 			Record_Error('Get_Display_Value: No Unit Of Measure was found for the UOM Code ' || l_uom_code || '.', x_error_messages);
782 			RAISE e_no_uom_found;
783 	END;
784 -- Bug 9247705: Use display_code rather than display_meaning.
785 -- T	Text Field
786 -- A	Attachment
787 -- D	Dynamic URL
788 -- L	Text Area
789 -- S	Static URL
790 -- C	Checkbox
791 -- H	Hidden
792 -- R	Radio Group
793 ELSIF l_attr_info.display_code = 'D' THEN
794 	/* NEED QUERY The Display Value for the TOKEN. For the Numeric Value with UOM, we only need the Numeric Value, but need conert the value from BASE UOM to the UOM user input*/
795 	BEGIN
796 		l_dynamic_url := l_attr_info.info_1;
797 		LOOP
798 			-- NO dollar sign found - no token in the url
799 			EXIT WHEN (INSTR(l_dynamic_url, '$', 1, l_index) = 0);
800 			l_index := l_index + 1;
801 			l_url_tokens.EXTEND;
802 			l_url_tokens(l_url_tokens.LAST) := SUBSTR(l_dynamic_url, INSTR(l_dynamic_url, '$', 1, l_index-1) + 1,
803 					     			  INSTR(l_dynamic_url, '$', 1, l_index) - INSTR(l_dynamic_url, '$', 1, l_index-1) -1
804 					    				       );
805 			--DBMS_OUTPUT.PUT_LINE(l_url_tokens(l_url_tokens.LAST));
806 
807 			Get_Display_Value(p_object_type,
808 					  p_object_id,
809 					  p_attr_group_type,
810 					  p_attr_group_name,
811 					  l_url_tokens(l_url_tokens.LAST),
812 					  p_ext_id,
813 					  l_x_display_value,
814 					  l_x_display_type,
815 					  l_x_dynamic_url,
816 					  x_error_messages);
817 
818 			--DBMS_OUTPUT.PUT_LINE(l_x_display_value);
819 			/*if there is UOM with the Numeric value, then we need get rid of the UOM, because in the Dynamic URL, we only use the EXT_ATTR value to take place of the token*/
820 			IF INSTR(l_x_display_type, 'N with UOM') > 0 THEN
821 				l_dynamic_url := REPLACE(l_dynamic_url, '$'||(l_url_tokens(l_url_tokens.LAST))||'$', SUBSTR(l_x_display_value, 1, INSTR(l_x_display_value, ' ')-1));
822 			ELSE
823 				l_dynamic_url := REPLACE(l_dynamic_url, '$'||(l_url_tokens(l_url_tokens.LAST))||'$', l_x_display_value);
824 			END IF;
825 
826 			l_index := 1;
827 		END LOOP;
828 
829 		x_display_value := l_code_value;
830 		--Bug 9247705: Use display_code rather than display_meaning.
831 		x_display_type := l_attr_info.display_code || ' of ' || l_attr_info.data_type_code;
832 		x_dynamic_url := l_dynamic_url;
833 
834 		--DBMS_OUTPUT.PUT_LINE('x_display_value: ' || x_display_value);
835 		--DBMS_OUTPUT.PUT_LINE('x_display_type: ' || x_display_type);
836 		--DBMS_OUTPUT.PUT_LINE('x_dynamic_url: ' || x_dynamic_url);
837 	END;
838 
839 /*The attribute with value set*/
840 ELSIF l_attr_info.value_set_id IS NOT NULL THEN
841 	BEGIN
842 	/*For the regular independent value set, we direclty reutrn FLEX_VALUE stored in EXT_ATTR column*/
843 	IF l_attr_info.validation_code = 'I' THEN
844 		 /*If the attribute is DATE type, we need convert the format*/
845 		IF l_attr_info.data_type_code = 'X' OR l_attr_info.data_type_code = 'Y' THEN
846 
847 			SELECT FND_PROFILE.VALUE('ICX_DATE_FORMAT_MASK')
848 			INTO l_date_format_mask
849 			FROM DUAL;
850 
851 			IF l_attr_info.data_type_code = 'Y' THEN
852 				l_date_format_mask := l_date_format_mask || ' HH24:MI:SS';
853 			END IF;
854 
855 			--Bug Fix 9709269
856 			l_date_value := To_Client_Timezone(l_date_value);
857 			--End Bug Fix 9709269
858 			x_display_value := TO_CHAR(l_date_value, l_date_format_mask);
859 		ELSE
860 			x_display_value := l_code_value;
861 		END IF;
862 
863 	/*For the translatable value set, we return FLEX_VALUE_MEANING*/
864 	ELSIF l_attr_info.validation_code = 'X' THEN
865 		BEGIN
866 		 	/*If the attribute is DATE type, we need convert the format*/
867 			IF (l_attr_info.data_type_code = 'X' OR l_attr_info.data_type_code = 'Y') AND l_date_value IS NOT NULL THEN
868 				SELECT FLEX_VALUE_MEANING
869 				  INTO x_display_value
873 
870 				  FROM FND_FLEX_VALUES_VL
871 				 WHERE FLEX_VALUE_SET_ID = l_attr_info.value_set_id
872 				   AND FLEX_VALUE = l_date_value;
874 				SELECT FND_PROFILE.VALUE('ICX_DATE_FORMAT_MASK')
875 				INTO l_date_format_mask
876 				FROM DUAL;
877 
878 				IF l_attr_info.data_type_code = 'Y' THEN
879 					l_date_format_mask := l_date_format_mask || ' HH24:MI:SS';
880 				END IF;
881 
882 				--Bug Fix 9709269
883 				x_display_value := To_Client_Timezone(x_display_value);
884 				--End Bug Fix 9709269
885 
886 				x_display_value := TO_CHAR(x_display_value, l_date_format_mask);
887 				--Bug 9247705: Use display_code rather than display_meaning.
888 				x_display_type := l_attr_info.display_code || ' of ' || l_attr_info.data_type_code;
889 			ELSIF l_code_value IS NOT NULL THEN
890 				SELECT FLEX_VALUE_MEANING
891 				  INTO x_display_value
892 				  FROM FND_FLEX_VALUES_VL
893 				 WHERE FLEX_VALUE_SET_ID = l_attr_info.value_set_id
894 				   AND FLEX_VALUE = l_code_value;
895 			END IF;
896 		EXCEPTION
897 			WHEN NO_DATA_FOUND THEN
898 				RAISE e_no_value_set_value_found;
899 			WHEN OTHERS THEN
900 				Record_Error('Get_Display_Value: ' || dbms_utility.format_error_backtrace, x_error_messages);
901 		END;
902 	/*For the table value set, we assemble the query to get the value from the target table*/
903 	ELSIF l_attr_info.validation_code = 'F' THEN
904 		SELECT APPLICATION_TABLE_NAME, VALUE_COLUMN_NAME,
905 		       VALUE_COLUMN_TYPE, ID_COLUMN_NAME, ADDITIONAL_WHERE_CLAUSE
906 		  INTO l_app_table_name, l_value_column_name,
907 		       l_value_column_type, l_id_column_name, l_add_where_clause
908 		  FROM FND_FLEX_VALIDATION_TABLES
909 		 WHERE FLEX_VALUE_SET_ID = l_attr_info.value_set_id;
910 
911 		 IF l_add_where_clause IS NOT NULL THEN
912 		 	-- use l_add_where_clause_holder as an index ruler for the l_add_where_clause
913 		 	-- because we cannot predict what user will enter. There could be no WHERE in Where Clause or different combination of capitalization
914 		 	-- We cannot simply UPPER the original l_add_where_clause, because that will modify the original dependent attribute name, which is CASE SENSITIVE.
915 		 	-- But the $ATTRIBUTEGROUP$ has to be all UPPER case, otherwise OA page will also error out.
916 		 	l_add_where_clause_holder := UPPER(l_add_where_clause);
917 		 	IF INSTR(l_add_where_clause_holder, 'WHERE') > 0 THEN
918 		 		l_add_where_clause := SUBSTR(l_add_where_clause, INSTR(l_add_where_clause_holder, 'WHERE') + 6);
919 		 		-- keep consistency between original l_add_where_clause and index ruler l_add_where_clause_holder
920 		 		l_add_where_clause_holder := SUBSTR(l_add_where_clause_holder, INSTR(l_add_where_clause_holder, 'WHERE') + 6);
921 		 	END IF;
922                         --DBMS_OUTPUT.PUT_LINE(l_add_where_clause);
923                         --DBMS_OUTPUT.PUT_LINE(l_add_where_clause_holder);
924 		 	--Bug Fix for Bug 9029322 - jijiao 10/15/2009
925 		 	--Need handle the DEPENDENT value set, which is depends on another attributes in the same attribute group
926 		 	IF INSTR(l_add_where_clause, ':$ATTRIBUTEGROUP$') > 0 THEN
927 		 		l_start_index := INSTR(l_add_where_clause, ':$ATTRIBUTEGROUP$.') + 18;
928 		 		l_next_space_index := INSTR(l_add_where_clause, ' ', INSTR(l_add_where_clause, ':$ATTRIBUTEGROUP$'), 1);
929 
930 		 		IF l_next_space_index > 0 THEN
931 		 			l_dep_attr_name := SUBSTR(l_add_where_clause, l_start_index, (l_next_space_index - l_start_index));
932 		 		ELSE
933 					--if the dependent value is written at the end of the Where Clause
934 		 			l_dep_attr_name := SUBSTR(l_add_where_clause, l_start_index, LENGTH(l_add_where_clause) - l_start_index + 1);
935 		 		END IF;
936 		 		--DBMS_OUTPUT.PUT_LINE('l_next_space_index: ' || l_next_space_index);
937 		 		--DBMS_OUTPUT.PUT_LINE('l_dep_attr_name: ' || l_dep_attr_name);
938 
939 				BEGIN
940                                		SELECT DATABASE_COLUMN, DATA_TYPE_CODE
941                                 	  INTO l_dep_column, l_dep_data_type
942                                   	  FROM EGO_ATTRS_V
943                                  	 WHERE APPLICATION_ID = 718
944                                    	   AND ATTR_GROUP_TYPE = p_attr_group_type
945                                    	   AND ATTR_GROUP_NAME = p_attr_group_name
946                                    	   AND ATTR_NAME = l_dep_attr_name;
947 	   			EXCEPTION
948 	   			   	WHEN NO_DATA_FOUND THEN
949 	   			   		Record_Error('Get_Display_Value: Dependent Attribute is not found', x_error_messages);
950 	   			   	WHEN OTHERS THEN
951 	   			   		Record_Error('Other exception'||sqlerrm||' and code '||sqlcode, x_error_messages);
952 	   		        END;
953 
954 	   			l_query := 'SELECT ' || l_dep_column ||
955 	   				   '  FROM ' || l_ext_table_name ||
956 					   ' WHERE ' || l_pk_name || ' = :1' ||
957 					     ' AND ATTR_GROUP_ID = :2' ||
958 					     ' AND EXTENSION_ID = :3';
959                                 --DBMS_OUTPUT.PUT_LINE(l_query);
960 				IF l_dep_data_type = 'X' OR l_dep_data_type = 'Y' THEN
961 					EXECUTE IMMEDIATE l_query INTO l_dep_date_value USING p_object_id, l_attr_group_id, p_ext_id;
962 					IF l_dep_date_value IS NOT NULL THEN
963 						-- For the dependent value set that depends on a Date type value set, in the query, we need explictly convert the CHAR type of date value TO DATE.
964 						l_add_where_clause := REPLACE(l_add_where_clause, ':$ATTRIBUTEGROUP$.' || l_dep_attr_name, 'TO_DATE(''' || l_dep_date_value || ''')');
965 					ELSE
966 						IF INSTR(l_add_where_clause, '= :$ATTRIBUTEGROUP$.') > 0 THEN
967 							l_add_where_clause := REPLACE(l_add_where_clause, '= :$ATTRIBUTEGROUP$.' || l_dep_attr_name, ' IS NULL');
968 						ELSIF INSTR(l_add_where_clause, '=:$ATTRIBUTEGROUP$.') > 0 THEN
972 
969 							l_add_where_clause := REPLACE(l_add_where_clause, '=:$ATTRIBUTEGROUP$.' || l_dep_attr_name, ' IS NULL');
970 						END IF;
971 					END IF;
973 				ELSE
974 					EXECUTE IMMEDIATE l_query INTO l_dep_code_value USING p_object_id, l_attr_group_id, p_ext_id;
975 					IF l_dep_code_value IS NOT NULL THEN
976                                                 -- Bug Fix 9029322 - If the dependent value is CHAR, we have to put single quotes around the value in the query condition.
977                                                 -- Actually here we also embrace Number by the single quotes, but SQL compiler will do the convertion for us. - jijiao 12/5/2009
978 						l_add_where_clause := REPLACE(l_add_where_clause, ':$ATTRIBUTEGROUP$.' || l_dep_attr_name, '''' || l_dep_code_value || '''');
979 					ELSE
980 						IF INSTR(l_add_where_clause, '= :$ATTRIBUTEGROUP$.') > 0 THEN
981 							l_add_where_clause := REPLACE(l_add_where_clause, '= :$ATTRIBUTEGROUP$.' || l_dep_attr_name, ' IS NULL');
982 						ELSIF INSTR(l_add_where_clause, '=:$ATTRIBUTEGROUP$.') > 0 THEN
983 							l_add_where_clause := REPLACE(l_add_where_clause, '=:$ATTRIBUTEGROUP$.' || l_dep_attr_name, ' IS NULL');
984 						END IF;
985 					END IF;
986 
987 				END IF;
988 		 		--DBMS_OUTPUT.PUT_LINE('l_add_where_clause: ' || l_add_where_clause);
989 
990 		 	END IF;
991 
992 		 	-- Bug Fix 9029322, Need handle the case where user does not define ID COLUMN for the value set.
993 			IF l_id_column_name IS NOT NULL THEN
994 				l_query := 'SELECT ' || l_value_column_name ||
995 				    '  FROM ' || l_app_table_name ||
996 				    ' WHERE ' || l_id_column_name || ' = :1' ||
997 				    '   AND ' || l_add_where_clause;
998 			ELSE
999 				l_query := 'SELECT ' || l_value_column_name ||
1000 				    '  FROM ' || l_app_table_name ||
1001 				    ' WHERE ' || l_add_where_clause;
1002 			END IF;
1003 			--DBMS_OUTPUT.PUT_LINE(l_add_where_clause);
1004 			--DBMS_OUTPUT.PUT_LINE(l_query);
1005 		 -- Bug Fix for Bug 9012596 - jijiao 10/12/2009
1006 		 -- Need handle the case there is no Additional Where Clause
1007 		 -- ALSO NEED HANDLE NO ID COLUMN - THE POPLIST VALUE SET CASE! - jijiao 10/16/2009
1008 		 ELSIF l_id_column_name IS NOT NULL THEN
1009 			 l_query := 'SELECT ' || l_value_column_name ||
1010 				    '  FROM ' || l_app_table_name ||
1011 				    ' WHERE ' || l_id_column_name || ' = :1';
1012 		 -- End of Bug Fix
1013 		 END IF;
1014 		 /*If the attribute is DATE type, we need convert the format*/
1015 		 -- Bug Fix for Bug 9012630 - jijiao 10/12/2009
1016 		 -- Need handle the  l_date_value is NULL case, which means there is no value for this  Value Set attribute
1017 		 IF (l_attr_info.data_type_code = 'X' OR l_attr_info.data_type_code = 'Y') AND l_date_value IS NOT NULL THEN
1018 			 -- Bug Fix for Bug 9012596
1019 			 -- ALSO NEED HANDLE NO ID COLUMN - THE POPLIST VALUE SET CASE! - jijiao 10/16/2009
1020 		 	IF l_id_column_name IS NOT NULL THEN
1021 		 		EXECUTE IMMEDIATE l_query INTO x_display_value USING l_date_value;
1022 		 	ELSE
1023 		 		-- for the POPLIST value set, the display value is stored directly in the EXT TABLE
1024 		 		x_display_value := l_date_value;
1025 		 	END IF;
1026 		 	SELECT FND_PROFILE.VALUE('ICX_DATE_FORMAT_MASK')
1027 				INTO l_date_format_mask
1028 				FROM DUAL;
1029 
1030 				IF l_attr_info.data_type_code = 'Y' THEN
1031 					l_date_format_mask := l_date_format_mask || ' HH24:MI:SS';
1032 				END IF;
1033 			--Bug Fix 9709269
1034 			x_display_value := To_Client_Timezone(x_display_value);
1035 			--End Bug Fix 9709269
1036 
1037 			x_display_value := TO_CHAR(x_display_value, l_date_format_mask);
1038 		 -- Bug Fix for Bug 9012630 - jijiao 10/12/2009
1039 		 -- Need handle the  l_code_value is NULL case, which means there is no value for this  Value Set attribute
1040 		 ELSIF l_code_value IS NOT NULL THEN
1041 		 	BEGIN
1042                                  --DBMS_OUTPUT.PUT_LINE(l_query);
1043 
1044 				 -- Bug Fix for Bug 9012596
1045 				 -- ALSO NEED HANDLE NO ID COLUMN - THE POPLIST VALUE SET CASE! - jijiao 10/16/2009
1046 		 		IF l_id_column_name IS NOT NULL THEN
1047 		 			EXECUTE IMMEDIATE l_query INTO x_display_value USING l_code_value;
1048 		 		ELSE
1049 		 			-- for the POPLIST value set, the display value is stored directly in the EXT TABLE
1050 		 			x_display_value := l_code_value;
1051 		 		END IF;
1052 			EXCEPTION
1053 				WHEN NO_DATA_FOUND THEN
1054 					Record_Error('Get_Display_Value: No Display Value is found.', x_error_messages);
1055 				WHEN OTHERS THEN
1056 					Record_Error('Get_Display_Value: When getting display value, get '|| sqlcode ||': '||sqlerrm, x_error_messages);
1057 			END;
1058 
1059 		END IF;
1060 	-- Bug Fix for 9098853 - jijiao 11/11/2009
1061 	-- Need deal with None Validation explicitly.  For the None Vadilation Type, because here we only retrieve and display the UDA data
1062 	-- we can assume the data has been passed the None Vadlidation, such as the Maximum/minimum length.
1063 	-- And once the attribute is associated with None Validation Type value set, it can only be the simple type, which no need to lookup any Independent/Table value set anymore
1064 	-- For the only special case which is Number with UOM, it has been handled at the beginning of this procedure, Number with UOM case.
1065 	/*Do nothing for the None Validation Type*/
1066 	ELSIF l_attr_info.validation_code = 'N' THEN
1067 		--DATE OR DATETIME data type
1068 		IF (l_attr_info.data_type_code = 'X' OR l_attr_info.data_type_code = 'Y') AND l_date_value IS NOT NULL THEN
1069 		      SELECT FND_PROFILE.VALUE('ICX_DATE_FORMAT_MASK')
1070 			INTO l_date_format_mask
1071 			FROM DUAL;
1072 
1073 			IF l_attr_info.data_type_code = 'Y' THEN
1074 				l_date_format_mask := l_date_format_mask || ' HH24:MI:SS';
1075 			END IF;
1079 			x_display_value := TO_CHAR(l_date_value, l_date_format_mask);
1076 			--Bug Fix 9709269
1077 			l_date_value := To_Client_Timezone(l_date_value);
1078 			--End Bug Fix 9709269
1080 		-- CHAR data type
1081 		ELSIF l_code_value IS NOT NULL THEN
1082 			x_display_value := l_code_value;
1083 		END IF;
1084 
1085 	END IF;
1086 	--Bug 9247705: Use display_code rather than display_meaning.
1087 	x_display_type := l_attr_info.display_code || ' of ' || l_attr_info.data_type_code;
1088 
1089 	EXCEPTION
1090 		WHEN e_invalid_where_clause THEN
1091 			Record_Error('Invalid WHERE Clause defined in Dependent Value Set.', x_error_messages);
1092 		WHEN OTHERS THEN
1093 			Record_Error('Get_Display_Value: ' || dbms_utility.format_error_backtrace, x_error_messages);
1094 	END;
1095 
1096 /*For the DATE or DATETIME data types, the value stored in EXT table is the same as the value in value set meaning column*/
1097 /*What we need to do is to format the date value into the right format for the environment the user is in*/
1098 ELSIF l_attr_info.data_type_code = 'X' OR l_attr_info.data_type_code = 'Y' THEN
1099 
1100 	SELECT FND_PROFILE.VALUE('ICX_DATE_FORMAT_MASK')
1101 	INTO l_date_format_mask
1102 	FROM DUAL;
1103 
1104 	IF l_attr_info.data_type_code = 'Y' THEN
1105 		l_date_format_mask := l_date_format_mask || ' HH24:MI:SS';
1106 	END IF;
1107 	--Bug Fix 9709269
1108 	l_date_value := To_Client_Timezone(l_date_value);
1109 	--End Bug Fix 9709269
1110 
1111 	--DBMS_OUTPUT.PUT_LINE(l_date_format_mask);
1112 	--DBMS_OUTPUT.PUT_LINE(l_code_value);
1113 	x_display_value := TO_CHAR(l_date_value, l_date_format_mask);
1114 	--DBMS_OUTPUT.PUT_LINE(x_display_value);
1115 	--Bug 9247705: Use display_code rather than display_meaning.
1116 	x_display_type := l_attr_info.display_code || ' of ' || l_attr_info.data_type_code;
1117 
1118 /*For the rest cases, we just display as the value is in EXT table*/
1119 ELSE
1120 	x_display_value := l_code_value;
1121 	--Bug 9247705: Use display_code rather than display_meaning.
1122 	x_display_type := l_attr_info.display_code || ' of ' || l_attr_info.data_type_code;
1123 
1124 END IF;
1125 
1126 		--DBMS_OUTPUT.PUT_LINE('x_display_value: ' || x_display_value);
1127 		--DBMS_OUTPUT.PUT_LINE('x_display_type: ' || x_display_type);
1128 		--DBMS_OUTPUT.PUT_LINE('x_dynamic_url: ' || x_dynamic_url);
1129 
1130 
1131 
1132 EXCEPTION
1133 	WHEN e_no_attribute_found THEN
1134 		Record_Error('e_no_attribute_found', x_error_messages);
1135 	WHEN e_no_attr_group_found THEN
1136 		Record_Error('e_no_attr_group_found', x_error_messages);
1137 	WHEN e_no_ext_row_found THEN
1138 		Record_Error('e_no_ext_row_found', x_error_messages);
1139 	WHEN e_no_uom_found THEN
1140 		Record_Error('e_no_uom_found', x_error_messages);
1141 	WHEN e_no_value_set_value_found THEN
1142 		Record_Error('e_no_value_set_value_found', x_error_messages);
1143 	WHEN OTHERS THEN
1144 		Record_Error('Get_Display_Value: ' || dbms_utility.format_error_backtrace, x_error_messages);
1145 END;
1146 
1147 
1148 Procedure Get_Display_Value
1149 (
1150 	p_object_type		IN		VARCHAR2,
1151 	p_object_id		IN		NUMBER,
1152 	p_attr_group_id		IN		NUMBER,
1153 	p_ext_id		IN		NUMBER,
1154 	p_column_name 		IN		VARCHAR2,
1155 	x_display_value		OUT NOCOPY	VARCHAR2,
1156 	x_msg_data		OUT NOCOPY 	VARCHAR2
1157 ) IS
1158 
1159 l_object_type_val	VARCHAR2(30);	-- convert to the object type value that consumed by RRS_ATTR_PANE.Get_Display_Value
1160 l_attr_group_type	VARCHAR2(30);
1161 l_attr_group_name	VARCHAR2(30);
1162 l_attr_name		VARCHAR2(30);
1163 l_x_display_value	VARCHAR2(1000);
1164 l_x_display_type	VARCHAR2(200);
1165 l_x_dynamic_url		VARCHAR2(1000);
1166 l_x_error_messages	rrs_error_msg_tab;
1167 
1168 BEGIN
1169 	-- convert to the object type value that consumed by RRS_ATTR_PANE.Get_Display_Value
1170 	IF p_object_type = 'RRS_SITE' THEN
1171 		l_object_type_val := 'SITE';
1172 	ELSIF p_object_type = 'RRS_LOCATION' THEN
1173 		l_object_type_val := 'LOCATION';
1174 	ELSIF p_object_type = 'RRS_TRADE_AREA' THEN
1175 		l_object_type_val := 'TRADE AREA';
1176 	ELSIF p_object_type = 'RRS_HIERARCHY' THEN
1177 		l_object_type_val := 'HIERARCHY';
1178 	END IF;
1179 
1180 	-- convert attribute group id to attribute group name
1181 	SELECT ATTR_GROUP_TYPE, ATTR_GROUP_NAME
1182 	  INTO l_attr_group_type, l_attr_group_name
1183 	  FROM EGO_ATTR_GROUPS_V
1184 	 WHERE ATTR_GROUP_ID = p_attr_group_id;
1185 
1186 	-- query the corresponding attribute name of the data column name
1187 	SELECT ATTR_NAME
1188 	  INTO l_attr_name
1189 	  FROM EGO_ATTRS_V
1190 	 WHERE APPLICATION_ID = 718
1191 	   AND ATTR_GROUP_TYPE = l_attr_group_type
1192 	   AND ATTR_GROUP_NAME = l_attr_group_name
1193 	   AND DATABASE_COLUMN = p_column_name;
1194 
1195 	-- invoke the RRS_ATTR_PANE.Get_Display_Value
1196 	Get_Display_Value(l_object_type_val,
1197 			  p_object_id,
1198 			  l_attr_group_type,
1199 			  l_attr_group_name,
1200 			  l_attr_name,
1201 			  p_ext_id,
1202 			  l_x_display_value,
1203 			  l_x_display_type,
1204 			  l_x_dynamic_url,
1205 		  	  l_x_error_messages);
1206 
1207 	x_display_value := l_x_display_value;
1208 
1209 	IF l_x_error_messages IS NOT NULL AND l_x_error_messages.COUNT > 0 THEN
1210 		x_msg_data := l_x_error_messages(0);
1211 	END IF;
1212 
1213 EXCEPTION
1214 	WHEN NO_DATA_FOUND THEN
1215 		x_msg_data := 'Get_Display_Value: No data found with ' ||
1216 				p_object_type || ', ' || p_object_id || ', ' || p_attr_group_id || ', ' ||
1220 END Get_Display_Value;
1217 				p_ext_id || ', ' || p_column_name || '.';
1218 	WHEN OTHERS THEN
1219 		x_msg_data := 'Get_Display_Value: Unexcepted Error - ' || dbms_utility.format_error_backtrace;
1221 
1222 
1223 --Added for Bug Fix 6969229
1224 Procedure Get_Disp_Value_Without_UOM
1225 (
1226 	p_object_type		IN		VARCHAR2,
1227 	p_object_id		IN		NUMBER,
1228 	p_attr_group_id		IN		NUMBER,
1229 	p_ext_id		IN		NUMBER,
1230 	p_column_name 		IN		VARCHAR2,
1231 	x_display_value		OUT NOCOPY	VARCHAR2,
1232 	x_msg_data		OUT NOCOPY 	VARCHAR2
1233 ) IS
1234 
1235 l_object_type_val	VARCHAR2(30);	-- convert to the object type value that consumed by RRS_ATTR_PANE.Get_Display_Value
1236 l_attr_group_type	VARCHAR2(30);
1237 l_attr_group_name	VARCHAR2(30);
1238 l_attr_name		VARCHAR2(30);
1239 l_x_display_value	VARCHAR2(1000);
1240 l_x_display_type	VARCHAR2(200);
1241 l_x_dynamic_url		VARCHAR2(1000);
1242 l_x_error_messages	rrs_error_msg_tab;
1243 
1244 BEGIN
1245 	-- convert to the object type value that consumed by RRS_ATTR_PANE.Get_Display_Value
1246 	IF p_object_type = 'RRS_SITE' THEN
1247 		l_object_type_val := 'SITE';
1248 	ELSIF p_object_type = 'RRS_LOCATION' THEN
1249 		l_object_type_val := 'LOCATION';
1250 	ELSIF p_object_type = 'RRS_TRADE_AREA' THEN
1251 		l_object_type_val := 'TRADE AREA';
1252 	ELSIF p_object_type = 'RRS_HIERARCHY' THEN
1253 		l_object_type_val := 'HIERARCHY';
1254 	END IF;
1255 
1256 	-- convert attribute group id to attribute group name
1257 	SELECT ATTR_GROUP_TYPE, ATTR_GROUP_NAME
1258 	  INTO l_attr_group_type, l_attr_group_name
1259 	  FROM EGO_ATTR_GROUPS_V
1260 	 WHERE ATTR_GROUP_ID = p_attr_group_id;
1261 
1262 	-- query the corresponding attribute name of the data column name
1263 	SELECT ATTR_NAME
1264 	  INTO l_attr_name
1265 	  FROM EGO_ATTRS_V
1266 	 WHERE APPLICATION_ID = 718
1267 	   AND ATTR_GROUP_TYPE = l_attr_group_type
1268 	   AND ATTR_GROUP_NAME = l_attr_group_name
1269 	   AND DATABASE_COLUMN = p_column_name;
1270 
1271 	-- invoke the RRS_ATTR_PANE.Get_Display_Value
1272 	Get_Display_Value(l_object_type_val,
1273 			  p_object_id,
1274 			  l_attr_group_type,
1275 			  l_attr_group_name,
1276 			  l_attr_name,
1277 			  p_ext_id,
1278 			  l_x_display_value,
1279 			  l_x_display_type,
1280 			  l_x_dynamic_url,
1281 		  	  l_x_error_messages);
1282 
1283 	-- strip the UOM from the display value for the Number type
1284 	IF INSTR(p_column_name, 'N') = 1 AND INSTR(l_x_display_value, ' ') <> 0 THEN
1285 		x_display_value := SUBSTR(l_x_display_value, 1, INSTR(l_x_display_value, ' ') - 1);
1286 	ELSE
1287 		x_display_value := l_x_display_value;
1288 	END IF;
1289 
1290 	IF l_x_error_messages IS NOT NULL AND l_x_error_messages.COUNT > 0 THEN
1291 		x_msg_data := l_x_error_messages(0);
1292 	END IF;
1293 
1294 EXCEPTION
1295 	WHEN NO_DATA_FOUND THEN
1296 		x_msg_data := 'Get_Disp_Value_Without_UOM: No data found with ' ||
1297 				p_object_type || ', ' || p_object_id || ', ' || p_attr_group_id || ', ' ||
1298 				p_ext_id || ', ' || p_column_name || '.';
1299 	WHEN OTHERS THEN
1300 		x_msg_data := 'Get_Disp_Value_Without_UOM: Unexcepted Error - ' || dbms_utility.format_error_backtrace;
1301 END Get_Disp_Value_Without_UOM;
1302 
1303 
1304 -- Bug Fix 9709269: Convert Server Timezone to Client Timezone.  Oracle only does Timezone conversion for DateTime type
1305 FUNCTION To_Client_Timezone(p_date IN DATE)
1306 RETURN TIMESTAMP
1307 IS
1308 l_timestamp TIMESTAMP;
1309 
1310 BEGIN
1311 
1312 	--IF p_date IS NULL THEN
1313 	--DBMS_OUTPUT.PUT_LINE('p_date is null at beginning');
1314 	--END IF;
1315 
1316     SELECT FROM_TZ(CAST(p_date AS TIMESTAMP), FND_TIMEZONES.GET_SERVER_TIMEZONE_CODE) AT TIME ZONE FND_TIMEZONES.GET_CLIENT_TIMEZONE_CODE
1317       INTO l_timestamp
1318 	  FROM DUAL;
1319 
1320 	--SELECT TO_TIMESTAMP(p_date) AT TIME ZONE FND_TIMEZONES.GET_CLIENT_TIMEZONE_CODE
1321 	--  INTO l_timestamp
1322 	--  FROM DUAL;
1323 
1324 	--IF p_date IS NULL THEN
1325 	--DBMS_OUTPUT.PUT_LINE('p_date is null');
1326 	--ELSIF l_timestamp IS NULL THEN
1327 	--DBMS_OUTPUT.PUT_LINE('l_timestamp is null');
1328 	--END IF;
1329 
1330 	--DBMS_OUTPUT.PUT_LINE('p_date: ' || TO_CHAR(TO_DATE(p_date, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS'));
1331 	--DBMS_OUTPUT.PUT_LINE('l_timestamp: ' || TO_CHAR(l_timestamp, 'YYYY-MM-DD HH24:MI:SS'));
1332 
1333 	RETURN l_timestamp;
1334 END To_Client_Timezone;
1335 
1336 /*Record the Errors*/
1337 PROCEDURE Record_Error
1338 (
1339 	p_error_message		IN		VARCHAR2,
1340 	x_error_messages	OUT NOCOPY	rrs_error_msg_tab
1341 ) IS
1342 
1343 BEGIN
1344 	IF x_error_messages IS NULL THEN
1345 		x_error_messages := new rrs_error_msg_tab();
1346 	END IF;
1347 	x_error_messages.EXTEND();
1348 	x_error_messages(x_error_messages.LAST) := p_error_message;
1349 END Record_Error;
1350 
1351 
1352 /*TEST METHODS*/
1353 /*
1354 PROCEDURE TEST IS
1355 x_display_value VARCHAR2(1000);
1356 x_display_type VARCHAR2(200);
1357 x_dynamic_url VARCHAR2(1000);
1358 
1359 x_ag_page_tab		rrs_attr_group_page_tab;
1360 x_attr_group_tab	rrs_attribute_group_tab;
1361 x_attribute_tab		rrs_attribute_tab;
1362 
1363 x_primary_attributes	rrs_primary_attribute_rec;
1364 x_error_data		VARCHAR2(1000);
1365 x_error_messages	rrs_error_msg_tab;
1366 
1367 BEGIN
1368 
1369 	Get_Display_Value('RRS_TRADE_AREA',
1370 			  17003,
1371 			  1535,
1372 			  66754,
1373 			  'N_EXT_ATTR2',
1374 			  x_display_value,
1375 			  x_error_data);
1379 
1376 	DBMS_OUTPUT.PUT_LINE('x_display_value: ' || x_display_value);
1377 	DBMS_OUTPUT.PUT_LINE('x_error_data: ' || x_error_data);
1378 
1380 	Get_Display_Value('SITE',
1381 			  62142,
1382 			  'RRS_SITEMGMT_GROUP',
1383 			  'TEST_CLIENT_TIMEZONE',
1384 			  'TEST_DATE_1',
1385 			  67978,
1386 			  x_display_value,
1387 			  x_display_type,
1388 			  x_dynamic_url,
1389 			  x_error_messages);
1390 
1391 
1392 	DBMS_OUTPUT.PUT_LINE('x_display_value: ' || x_display_value);
1393 	DBMS_OUTPUT.PUT_LINE('x_display_type: ' || x_display_type);
1394 	IF x_error_messages IS NOT NULL AND x_error_messages.COUNT > 0 THEN
1395 		DBMS_OUTPUT.PUT_LINE(x_error_messages.COUNT);
1396 		FOR i in 1 .. x_error_messages.COUNT
1397 		LOOP
1398 			DBMS_OUTPUT.PUT_LINE(x_error_messages(i));
1399 		END LOOP;
1400         END IF;
1401 
1402 	Get_Attribute_Page('HIERARCHY',
1403 	                         'HIERARCHY',
1404 	                         31000,
1405 	                         'HIERARCHY',
1406 	                          'ROOT',
1407 	                          NULL,
1408 	                          NULL,
1409 	                         x_primary_attributes,
1410 	                         x_ag_page_tab,
1411 	                         x_attr_group_tab,
1412 	                         x_attribute_tab,
1413 	                         x_error_messages);
1414 
1415 
1416 	DBMS_OUTPUT.PUT_LINE('Primary Attributes');
1417 	DBMS_OUTPUT.PUT_LINE('============================');
1418 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.OBJECT_ID);
1419 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.OBJECT_IDENTIFICATION_NUMBER);
1420 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.OBJECT_NAME);
1421 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.CLASSIFICATION);
1422 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.DESCRIPTION);
1423 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.SITE_TYPE);
1424 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.STATUS);
1425 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.START_DATE);
1426 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.END_DATE);
1427 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.ADDRESS);
1428 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.COUNTRY);
1429 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.GROUP_TYPE);
1430 	DBMS_OUTPUT.PUT_LINE(x_primary_attributes.UNIT_OF_MEASURE);
1431 	DBMS_OUTPUT.PUT_LINE('----------------------------');
1432 
1433 	DBMS_OUTPUT.PUT_LINE('Page Information');
1434 	DBMS_OUTPUT.PUT_LINE('====================================');
1435 
1436 	IF x_ag_page_tab IS NOT NULL AND x_ag_page_tab.COUNT > 0 THEN
1437 	FOR i in 1 .. x_ag_page_tab.COUNT
1438 	LOOP
1439 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).PAGE_ID);
1440 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).OBJECT_NAME);
1441 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).CLASSIFICATION_CODE);
1442 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).DATA_LEVEL_INT_NAME);
1443 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).INTERNAL_NAME);
1444 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).DISPLAY_NAME);
1445 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).DESCRIPTION);
1446 		DBMS_OUTPUT.PUT_LINE(x_ag_page_tab(i).SEQUENCE);
1447 		DBMS_OUTPUT.PUT_LINE('--------------------------------');
1448 	END LOOP;
1449 	END IF;
1450 
1451 	DBMS_OUTPUT.PUT_LINE('Attribute Group Information');
1452 	DBMS_OUTPUT.PUT_LINE('====================================');
1453 
1454 	IF x_attr_group_tab IS NOT NULL AND x_attr_group_tab.COUNT > 0 THEN
1455 	FOR j in 1 .. x_attr_group_tab.COUNT
1456 	LOOP
1457 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).PAGE_ID);
1458 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).ATTR_GROUP_ID);
1459 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).ATTR_GROUP_TYPE);
1460 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).ATTR_GROUP_NAME);
1461 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).ATTR_GROUP_DISP_NAME);
1462 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).DESCRIPTION);
1463 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).MULTI_ROW_CODE);
1464 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).SECURITY_CODE);
1465 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).NUM_OF_COLS);
1466 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).NUM_OF_ROWS);
1467 		DBMS_OUTPUT.PUT_LINE(x_attR_group_tab(j).SEQUENCE);
1468 		DBMS_OUTPUT.PUT_LINE('--------------------------------');
1469 	END LOOP;
1470 	END IF;
1471 
1472 	IF x_attribute_tab IS NOT NULL AND x_attribute_tab.COUNT > 0 THEN
1473 	DBMS_OUTPUT.PUT_LINE('Attribute Information');
1474 	DBMS_OUTPUT.PUT_LINE('====================================');
1475 	FOR i in 1 .. x_attribute_tab.COUNT
1476 	LOOP
1477 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).ATTR_GROUP_TYPE);
1478 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).ATTR_GROUP_NAME);
1479 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).EXTENSION_ID);
1480 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).ATTR_NAME);
1481 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).ATTR_DISPLAY_NAME);
1482 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).DESCRIPTION);
1483 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).DISPLAY_VALUE);
1484 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).DISPLAY_TYPE);
1485 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).DYNAMIC_URL);
1486 		DBMS_OUTPUT.PUT_LINE(x_attribute_tab(i).SEQUENCE);
1487 		DBMS_OUTPUT.PUT_LINE('--------------------------------');
1488 	END LOOP;
1489 	END IF;
1490 
1491 	IF x_error_messages IS NOT NULL AND x_error_messages.COUNT > 0 THEN
1492 		DBMS_OUTPUT.PUT_LINE(x_error_messages.COUNT);
1493 		FOR i in 1 .. x_error_messages.COUNT
1494 		LOOP
1495 			DBMS_OUTPUT.PUT_LINE(x_error_messages(i));
1496 		END LOOP;
1497         END IF;
1498 
1499 	Get_Primary_Attributes('HIERARCHY',
1500 			        10000,
1501 			        x_primary_attributes,
1502 	                        x_error_messages);
1503 
1504 END TEST;*/
1505 
1506 
1507 END RRS_ATTR_PANE;