DBA Data[Home] [Help]

PACKAGE BODY: APPS.IBC_CITEM_PREVIEW_PVT

Source


1 Package Body IBC_CITEM_PREVIEW_PVT as
2 /* $Header: ibcvcipb.pls 115.13 2004/04/09 00:09:20 srrangar ship $ */
3 
4 PROCEDURE Get_Citem_Version (
5 	p_init_msg_list			IN	VARCHAR2,
6 	p_content_item_id		IN	NUMBER,
7 	p_latest_component_versions	IN	VARCHAR2,
8 	x_citem_version_id		OUT NOCOPY	NUMBER,
9 	x_version_number		OUT NOCOPY	NUMBER,
10 	x_start_date			OUT NOCOPY	DATE,
11 	x_end_date			OUT NOCOPY	DATE,
12 	x_return_status			OUT NOCOPY   	VARCHAR2,
13         x_msg_count			OUT NOCOPY    	NUMBER,
14         x_msg_data			OUT NOCOPY   	VARCHAR2
15 ) AS
16 	CURSOR Get_Latest_Version IS
17 	select CITEM_VERSION_ID, VERSION_NUMBER, START_DATE, END_DATE
18 	from IBC_CITEM_VERSIONS_B
19 	where CONTENT_ITEM_ID = p_content_item_id
20 	and VERSION_NUMBER = (select max(VERSION_NUMBER)
21 			      from IBC_CITEM_VERSIONS_B
22 			      where CONTENT_ITEM_ID = p_content_item_id);
23 
24 	CURSOR Get_Latest_Approved_Version IS
25 	select CITEM_VERSION_ID, VERSION_NUMBER, START_DATE, END_DATE
26 	from IBC_CITEM_VERSIONS_B
27 	where CONTENT_ITEM_ID = p_content_item_id
28 	and VERSION_NUMBER = (select max(VERSION_NUMBER)
29 			      from IBC_CITEM_VERSIONS_B
30 			      where CONTENT_ITEM_ID = p_content_item_id
31 			      and CITEM_VERSION_STATUS = IBC_UTILITIES_PUB.G_STV_APPROVED);
32 
33 BEGIN
34     -- Initialize message list if p_init_msg_list is set to TRUE.
35     IF FND_API.to_Boolean( p_init_msg_list ) THEN
36         FND_MSG_PUB.initialize;
37     END IF;
38     --  Initialize API return status to success
39     x_return_status := FND_API.G_RET_STS_SUCCESS;
40 
41     IF (p_latest_component_versions = FND_API.G_TRUE) THEN
42        OPEN Get_Latest_Version;
43           FETCH Get_Latest_Version INTO x_citem_version_id, x_version_number,
44 					x_start_date, x_end_date;
45        CLOSE Get_Latest_Version;
46     ELSE
47        OPEN Get_Latest_Approved_Version;
48           FETCH Get_Latest_Approved_Version INTO x_citem_version_id, x_version_number,
49 						 x_start_date, x_end_date;
50        CLOSE Get_Latest_Approved_Version;
51     END IF;
52 
53 EXCEPTION
54    WHEN FND_API.G_EXC_ERROR THEN
55        x_return_status := FND_API.G_RET_STS_ERROR;
56        FND_MSG_PUB.Count_And_Get (	p_count => x_msg_count,
57 					p_data  => x_msg_data);
58 END Get_Citem_Version;
59 
60 
61 
62 
63 
64 
65 
66 PROCEDURE Preview_Citem_Xml (
67 	p_init_msg_list			IN	VARCHAR2,
68 	p_content_item_id		IN	NUMBER,
69 	p_citem_version_id		IN	NUMBER,
70 	p_lang_code			IN	VARCHAR2,
71 	p_version_number		IN	NUMBER,
72 	p_start_date			IN	DATE,
73 	p_end_date			IN	DATE,
74 	p_preview_mode			IN	VARCHAR2,
75 	p_xml_clob_loc			IN OUT	NOCOPY CLOB,
76 	p_num_levels			IN	NUMBER,
77 	x_num_levels_loaded		OUT NOCOPY	NUMBER,
78 	x_return_status			OUT NOCOPY   	VARCHAR2,
79         x_msg_count			OUT NOCOPY    	NUMBER,
80         x_msg_data			OUT NOCOPY   	VARCHAR2
81 ) AS
82 	l_version_number		NUMBER;
83 	l_start_date			DATE;
84 	l_end_date			DATE;
85 	l_content_type_code		IBC_CONTENT_ITEMS.CONTENT_TYPE_CODE%TYPE;
86 	l_item_reference_code		IBC_CONTENT_ITEMS.ITEM_REFERENCE_CODE%TYPE;
87 	l_encrypt_flag			VARCHAR2(1);
88 
89 	l_content_item_name		IBC_CITEM_VERSIONS_TL.CONTENT_ITEM_NAME%TYPE;
90 	l_description			IBC_CITEM_VERSIONS_TL.DESCRIPTION%TYPE;
91 	l_attachment_attribute_code	IBC_CITEM_VERSIONS_TL.ATTACHMENT_ATTRIBUTE_CODE%TYPE;
92 	l_attachment_file_id		NUMBER;
93 	l_attachment_file_name		IBC_CITEM_VERSIONS_TL.ATTACHMENT_FILE_NAME%TYPE;
94 	l_attribute_file_id		NUMBER;
95 	l_default_mime_type		IBC_CITEM_VERSIONS_TL.DEFAULT_RENDITION_MIME_TYPE%TYPE;
96 
97 	l_comp_content_item_id		NUMBER;
98 	l_comp_citem_version_id		NUMBER;
99 	l_comp_citem_version_number	NUMBER;
100 	l_comp_citem_start_date		DATE;
101 	l_comp_citem_end_date		DATE;
102 	l_tmp_num_levels		NUMBER;
103 	l_has_component_items		VARCHAR2(1) := FND_API.g_false;
104 	l_max_num_levels_loaded		NUMBER := 0;
105 --
106 	CURSOR Get_Citem IS
107 	select CONTENT_TYPE_CODE, ITEM_REFERENCE_CODE, ENCRYPT_FLAG
108 	from IBC_CONTENT_ITEMS
109 	where content_item_id = p_content_item_id;
110 
111 	CURSOR Get_Version IS
112 	select VERSION_NUMBER, START_DATE, END_DATE
113 	from IBC_CITEM_VERSIONS_B
114 	where CITEM_VERSION_ID = p_citem_version_id;
115 
116 	CURSOR Get_Citem_Meta_Csr IS
117 	select ATTRIBUTE_FILE_ID, CONTENT_ITEM_NAME, DESCRIPTION, ATTACHMENT_ATTRIBUTE_CODE,
118                ATTACHMENT_FILE_ID, ATTACHMENT_FILE_NAME, DEFAULT_RENDITION_MIME_TYPE
119 	from IBC_CITEM_VERSIONS_TL
120         where citem_version_id = p_citem_version_id
121         and language = nvl(p_lang_code, userenv('LANG'));
122 
123 
124 	CURSOR Get_Compound_Item_Ref IS
125 	select r.ATTRIBUTE_TYPE_CODE, r.CONTENT_ITEM_ID,
126 	       r.SUBITEM_VERSION_ID, c.ENCRYPT_FLAG
127 	from IBC_COMPOUND_RELATIONS r, IBC_CONTENT_ITEMS c
128 	where r.CITEM_VERSION_ID = p_citem_version_id
129 	and r.CONTENT_ITEM_ID = c.CONTENT_ITEM_ID
130 	order by r.SORT_ORDER;
131 
132 BEGIN
133 	-- Initialize message list if p_init_msg_list is set to TRUE.
134 	IF FND_API.to_Boolean( p_init_msg_list ) THEN
135            FND_MSG_PUB.initialize;
136 	END IF;
137 	--  Initialize API return status to success
138 	x_return_status := FND_API.G_RET_STS_SUCCESS;
139 
140 	-- **************** Real Logic Starts *****************
141 
142 	-- Retrieve Content Item
143 	OPEN Get_Citem;
144 	   FETCH Get_Citem INTO l_content_type_code, l_item_reference_code,l_encrypt_flag;
145 	   -- check if p_content_item_id is valid
146 	   IF Get_Citem%NOTFOUND THEN
147 	      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
148 	         FND_MESSAGE.Set_Name('IBC', 'INVALID_CITEM_ID');
149 	         FND_MESSAGE.Set_token('CITEM_ID', p_content_item_id);
150                  FND_MSG_PUB.ADD;
151 	      END IF;
152 	      RAISE FND_API.G_EXC_ERROR;
153 	   END IF;
154 	CLOSE Get_Citem;
155 
156 	-- Retrieve Meta Data
157 	OPEN Get_Citem_Meta_Csr;
158 	   FETCH Get_Citem_Meta_Csr INTO l_attribute_file_id, l_content_item_name, l_description,
159 					 l_attachment_attribute_code,
160 					 l_attachment_file_id,
161 					 l_attachment_file_name,
162 					 l_default_mime_type;
163 	   -- check if p_citem_version_id is valid
164 	   IF Get_Citem_Meta_Csr%NOTFOUND THEN
165 	      IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
166 	         FND_MESSAGE.Set_Name('IBC', 'INVALID_CITEM_VERSION_ID');
167 	         FND_MESSAGE.Set_token('CITEM_VERSION_ID', p_citem_version_id);
168                  FND_MSG_PUB.ADD;
169 	      END IF;
170 	      RAISE FND_API.G_EXC_ERROR;
171 	   END IF;
172 	CLOSE Get_Citem_Meta_Csr;
173 
174 	IF (p_version_number is NULL) THEN
175 	   OPEN Get_Version;
176 	      FETCH Get_Version INTO l_version_number, l_start_date,
177 			             l_end_date;
178 	   CLOSE Get_Version;
179 	ELSE
180 	   l_version_number := p_version_number;
181 	   l_start_date := p_start_date;
182 	   l_end_date := p_end_date;
183 	END IF;
184 
185 	-- Openning Tags (Root + Renditions + Name + Description + Attachment)
186 	IBC_UTILITIES_PVT.Build_Citem_Open_Tags (
187 		p_content_type_code =>		l_content_type_code,
188 		p_content_item_id =>		p_content_item_id,
189 		p_citem_version_id =>		p_citem_version_id,
190 	        p_lang_code =>			p_lang_code,
191 		p_version_number =>		l_version_number,
192 		p_start_date =>			l_start_date,
193 		p_end_date =>			l_end_date,
194 		p_item_reference_code =>	l_item_reference_code,
195 		p_encrypt_flag =>		l_encrypt_flag,
196 		p_content_item_name =>		l_content_item_name,
197 		p_description =>		l_description,
198 		p_attachment_attribute_code =>	l_attachment_attribute_code,
199 		p_attachment_file_id =>		l_attachment_file_id,
200 		p_attachment_file_name =>	l_attachment_file_name,
201 		p_default_mime_type =>		l_default_mime_type,
202 		p_is_preview =>			FND_API.G_TRUE,
203 		p_xml_clob_loc =>		p_xml_clob_loc
204 	);
205 	-- User defined primitive attributes
206 	IBC_UTILITIES_PVT.Build_Attribute_Bundle (
207 		p_file_id =>			l_attribute_file_id,
208 		p_xml_clob_loc =>		p_xml_clob_loc
209 	);
210 	-- Compound Item attributes
211 	IF (p_num_levels IS NULL OR p_num_levels > 0) THEN
212 
213 	   -- compound items expanded
214 	   FOR compound_item_rec IN Get_Compound_Item_Ref LOOP
215 
216 		l_has_component_items := FND_API.g_true;
217 		l_comp_content_item_id := compound_item_rec.content_item_id;
218 		l_comp_citem_version_id := compound_item_rec.subitem_version_id;
219 
220 		IF (p_preview_mode = IBC_CITEM_PREVIEW_GRP.G_LATEST_COMP_VERSIONS OR
221                     (p_preview_mode = IBC_CITEM_PREVIEW_GRP.G_DEFAULT_COMP_VERSIONS AND
222 		    l_comp_citem_version_id is NULL)) THEN
223 
224 		    -- if default versions specified, but value not set, also use latest versions.
225 		    Get_Citem_Version (
226 		       p_init_msg_list =>		p_init_msg_list,
227 		       p_content_item_id =>		l_comp_content_item_id,
228 		       p_latest_component_versions =>	FND_API.G_TRUE,
229 		       x_citem_version_id =>		l_comp_citem_version_id,
230 		       x_version_number =>		l_comp_citem_version_number,
231 		       x_start_date =>			l_comp_citem_start_date,
232 		       x_end_date =>			l_comp_citem_end_date,
233 		       x_return_status =>		x_return_status,
234 		       x_msg_count =>			x_msg_count,
235 		       x_msg_data =>			x_msg_data);
236 		ELSIF (p_preview_mode = IBC_CITEM_PREVIEW_GRP.G_LIVE_COMP_VERSIONS) THEN
237 		    Get_Citem_Version (
238 		       p_init_msg_list =>		p_init_msg_list,
239 		       p_content_item_id =>		l_comp_content_item_id,
240 		       p_latest_component_versions =>	FND_API.G_FALSE,
241 		       x_citem_version_id =>		l_comp_citem_version_id,
242 		       x_version_number =>		l_comp_citem_version_number,
243 		       x_start_date =>			l_comp_citem_start_date,
244 		       x_end_date =>			l_comp_citem_end_date,
245 		       x_return_status =>		x_return_status,
246 		       x_msg_count =>			x_msg_count,
247 		       x_msg_data =>			x_msg_data);
248 		END IF;
249 
250 		--
251 		-- No matter what the mode is : if the Subitem_version_id
252 		-- is specified for the Compound Content Item, it should
253 		-- be picked up.
254 		-- Only when the SubItemVersionId is NULL then the mode should
255 		-- be looked at to decide whether Live Or Latest Versions must
256 		-- be shown.
257 		-- Bug#3378895 and Bug#3378875
258 		--
259 		IF compound_item_rec.subitem_version_id IS NOT NULL THEN
260 		   l_comp_citem_version_id := compound_item_rec.subitem_version_id;
261 		END IF;
262 
263 		-- Siva Devaki 22-Jan-04
264 		-- Checking this condition to fix bug#3385548
265 		IF ( l_comp_citem_version_id IS NOT NULL ) THEN
266 
267  		    IBC_UTILITIES_PVT.Build_Preview_Cpnt_Open_Tag (
268 			p_attribute_type_code =>	compound_item_rec.attribute_type_code,
269 			p_content_item_id =>		l_comp_content_item_id,
270 			p_content_item_version_id =>	l_comp_citem_version_id,
271 			p_encrypt_flag =>		compound_item_rec.encrypt_flag,
272 			p_xml_clob_loc =>		p_xml_clob_loc
273 		    );
274 		    l_tmp_num_levels := p_num_levels - 1;
275 		    Preview_Citem_Xml (
276 			p_init_msg_list
277 			,l_comp_content_item_id
278 			,l_comp_citem_version_id
279 			,p_lang_code
280 			,l_comp_citem_version_number
281 			,l_comp_citem_start_date
282 			,l_comp_citem_end_date
283 			,p_preview_mode
284 			,p_xml_clob_loc
285 			,l_tmp_num_levels
286 			,x_num_levels_loaded
287 			,x_return_status
288 			,x_msg_count
289 			,x_msg_data
290 		    );
291 		    -- nested compounded items not valid
292 		    IF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
293 		        RAISE FND_API.G_EXC_ERROR;
294 		    END IF;
295 
296 		    IBC_UTILITIES_PVT.Build_Close_Tag (
297 			compound_item_rec.attribute_type_code,
298 			p_xml_clob_loc
299 		    );
300 
301 		    -- update max num levels
302 		    IF (x_num_levels_loaded > l_max_num_levels_loaded) THEN
303 		        l_max_num_levels_loaded := x_num_levels_loaded;
304 		    END IF;
305 
306 		END IF;
307 
308 
309 	   END LOOP;
310 
311 	   -- set number of levels loaded
312 	   IF (l_has_component_items = FND_API.g_false) THEN
313 	      x_num_levels_loaded := 0;
314 	   ELSE
315 	      x_num_levels_loaded := l_max_num_levels_loaded + 1;
316 	   END IF;
317 
318 	-- p_num_levels = 0
319 	ELSE
320 	   -- compound item references
321 	   IBC_UTILITIES_PVT.Build_Preview_Cpnt_References (
322 		p_citem_version_id =>	p_citem_version_id,
323 		p_xml_clob_loc =>	p_xml_clob_loc
324 	   );
325 	   -- set number of levels loaded
326 	   x_num_levels_loaded := 0;
327 
328 	END IF;
329 
330 	-- Close Root Tag
331 	IBC_UTILITIES_PVT.Build_Close_Tag (
332 		l_content_type_code,	-- p_content_type_code IN VARCHAR2
333 		p_xml_clob_loc		-- p_xml_clob_loc IN OUT CLOB
334 	);
335 	-- **************** Real Logic Ends *****************
336 
337 EXCEPTION
338    WHEN FND_API.G_EXC_ERROR THEN
339        x_return_status := FND_API.G_RET_STS_ERROR;
340        FND_MSG_PUB.Count_And_Get (	p_count => x_msg_count,
341 					p_data  => x_msg_data);
342 END Preview_Citem_Xml;
343 
344 
345 END IBC_CITEM_PREVIEW_PVT;