DBA Data[Home] [Help]

PACKAGE BODY: APPS.XNP_MSG_SCHEMA

Source


1 PACKAGE BODY xnp_msg_schema AS
2 /* $Header: XNPMBLVB.pls 120.2 2006/02/13 07:51:31 dputhiye ship $ */
3 
4 PROCEDURE check_source(p_element_id IN NUMBER,
5 		p_element_name IN VARCHAR2,
6 		p_source_type IN VARCHAR2,
7 		p_data_source IN VARCHAR2,
8 		p_data_ref IN VARCHAR2,
9 		x_error_code OUT NOCOPY NUMBER,
10 		x_error_message OUT NOCOPY VARCHAR2);
11 
12 FUNCTION check_exists(p_msg_code IN VARCHAR2 ) RETURN NUMBER;
13 
14 FUNCTION check_parameter_pool
15 	(p_element_name IN VARCHAR2,
16 	p_reference IN VARCHAR2) RETURN NUMBER;
17 
18 FUNCTION check_if_parent(p_element_id NUMBER) RETURN NUMBER;
19 
20 PROCEDURE validate (
21 	p_msg_code IN VARCHAR2,
22 	x_error_code OUT NOCOPY NUMBER,
23 	x_error_message OUT NOCOPY VARCHAR2
24 )
25 
26 IS
27 
28 	CURSOR get_msg_data IS
29 		SELECT met.name,
30 			met.msg_element_id,
31 			met.parameter_flag,
32 			mse.data_source,
33 			mse.data_source_type,
34 			mse.data_source_reference
35 		FROM xnp_msg_elements met, xnp_msg_structures mse
36 		WHERE met.msg_code = mse.msg_code
37 		AND met.msg_code = p_msg_code
38                 -- skilaru 03/27/2001
39 		-- AND met.msg_element_id IN( mse.child_element_id);
40 		AND met.msg_element_id = mse.child_element_id;
41 
42 
43 
44 	l_exists NUMBER;
45 	l_parent NUMBER;
46 
47 BEGIN
48 
49 	x_error_code := 0;
50 	x_error_message := NULL;
51 
52 	--check to see if a database object exists with the
53 	--same name as the message code
54 
55 	l_exists := check_exists(p_msg_code) ;
56 
57 	IF (l_exists <> 0) THEN
58 		fnd_message.set_name('XNP', 'DUPLICATE_OBJECT');
59 		fnd_message.set_token('NAME',p_msg_code);
60 		x_error_message := fnd_message.get ;
61 		x_error_code := xnp_errors.g_duplicate_object;
62 		RETURN ;
63 	END IF ;
64 
65 	FOR rec IN get_msg_data LOOP
66 
67 	-- check if the element has a parameter
68 	-- or alternate data source
69 
70 		IF ((rec.parameter_flag = 'N') AND
71 			(rec.data_source_type IS NULL) AND
72 			(rec.data_source IS NULL) AND
73 			(rec.data_source_reference IS NULL))
74 		THEN
75 
76 
77 			l_parent := 0;
78 
79 			l_parent := check_if_parent(rec.msg_element_id) ;
80 
81 			IF (l_parent = 0) THEN
82 
83 	--  No data source has been defined for the leaf element
84 	--  But the Message code element is an exception
85 
86 			IF (rec.name <> p_msg_code) THEN
87 				fnd_message.set_name ('XNP','NO_DATA_SOURCE') ;
88 				fnd_message.set_token ('NAME',rec.name) ;
89 				x_error_message := fnd_message.get;
90 				x_error_code := xnp_errors.g_no_data_source;
91 				RETURN;
92 			END IF;
93 
94 			END IF;
95 
96 		ELSE
97 			IF (rec.parameter_flag = 'N') THEN
98 				check_source(p_element_id=>rec.msg_element_id,
99 					p_element_name=>rec.name,
100 					p_source_type => rec.data_source_type,
101 					p_data_source => rec.data_source,
102 					p_data_ref => rec.data_source_reference,
103 					x_error_code => x_error_code,
104 					x_error_message => x_error_message);
105 				IF (x_error_code <> 0) THEN
106 					RETURN;
107 				END IF;
108 			END IF;
109 
110 		END IF;
111 
112 	END LOOP;
113 
114 	EXCEPTION
115 		WHEN OTHERS THEN
116 			x_error_code := SQLCODE;
117 			x_error_message := SQLERRM;
118 
119 
120 END validate;
121 
122 /***********************************************************************/
123 
124 PROCEDURE check_source(p_element_id IN NUMBER,
125 		p_element_name IN VARCHAR2,
126 		p_source_type IN VARCHAR2,
127 		p_data_source IN VARCHAR2,
128 		p_data_ref IN VARCHAR2,
129 		x_error_code OUT NOCOPY NUMBER,
130 		x_error_message OUT NOCOPY VARCHAR2)
131 
132 IS
133 
134 	l_exists NUMBER;
135 	l_parent NUMBER;
136 	l_data_source VARCHAR2(4000) ;
137 
138 BEGIN
139 
140 	x_error_code := 0;
141 	x_error_message := NULL;
142 
143 	IF (p_source_type = 'SQL') THEN
144 		IF (p_data_source IS NULL) THEN
145 			fnd_message.set_name('XNP', 'NULL_SQL_SOURCE');
146 			fnd_message.set_token('NAME', p_element_name);
147 			x_error_message := fnd_message.get ;
148 			x_error_code := xnp_errors.g_null_sql_source;
149 			RETURN;
150 		END IF;
151 
152 		--check for semicolon
153 
154 		l_data_source := RTRIM(p_data_source) ;
155 
156 		l_exists := INSTR(l_data_source, ';') ;
157 
158 		IF (l_exists <> 0) THEN
159 			fnd_message.set_name('XNP', 'SEMI_COLON_ERROR');
160 			x_error_message := fnd_message.get ;
161 			x_error_code := xnp_errors.g_semi_colon_error;
162 			RETURN;
163 		END IF;
164 
165 	-- check if leaf element and see if there is a data reference
166 
167 		l_parent := check_if_parent(p_element_id) ;
168 
169 		IF (l_parent = 0) AND (p_data_ref IS NULL) THEN
170 			fnd_message.set_name('XNP', 'NO_DATA_REFERENCE');
171 			fnd_message.set_token('NAME',p_element_name) ;
172 			x_error_message := fnd_message.get ;
173 			x_error_code := xnp_errors.g_no_data_reference;
174 			RETURN;
175 		END IF;
176 
177 	END IF;
178 
179 	IF (p_source_type = 'PROCEDURE') THEN
180 
181 	-- check if procedure name is defined
182 
183 		IF (p_data_ref IS NULL) THEN
184 			fnd_message.set_name('XNP', 'UNDEFINED_FUNCTION');
185 			fnd_message.set_token('NAME', p_element_name);
186 			x_error_message := fnd_message.get ;
187 			x_error_code := xnp_errors.g_undefined_function;
188 			RETURN;
189 		END IF;
190 
191 	END IF;
192 
193 	IF (p_source_type = 'SDP_WI') THEN
194 
195 	-- check if parameter exists in parameter pool
196 
197 		l_exists := check_parameter_pool(
198 			p_element_name => p_element_name,
199 			p_reference => p_data_ref) ;
200 
201 		IF (l_exists = 0) THEN
202 			fnd_message.set_name('XNP', 'UNDEFINED_WI_PARAMETER');
203 			IF (p_data_ref IS NULL) THEN
204 				fnd_message.set_token('NAME',p_element_name);
205 			ELSE
206 				fnd_message.set_token('NAME',p_data_ref);
207 			END IF;
208 			x_error_message := fnd_message.get ;
209 			x_error_code := xnp_errors.g_undefined_wi_parameter;
210 			RETURN;
211 		END IF;
212 
213 	END IF;
214 
215 
216 	IF (p_source_type = 'ORDER') THEN
217         -- rnyberg, 09/26/2001. Removed check for Order Parameters in pool
218         -- by putting section below within comments.
219         -- Order Parameters do not have to exist in a pool.
220         NULL;
221  /*
222 
223 	-- check if parameter exists in parameter pool
224 
225 		l_exists := check_parameter_pool(
226 			p_element_name => p_element_name,
227 			p_reference => p_data_ref) ;
228 
229 		IF (l_exists = 0) THEN
230 			fnd_message.set_name('XNP', 'UNDEFINED_ORDER_PARAMETER');
231 			IF (p_data_ref IS NULL) THEN
232 				fnd_message.set_token('NAME',p_element_name);
233 			ELSE
234 				fnd_message.set_token('NAME',p_data_ref);
235 			END IF;
236 			x_error_message := fnd_message.get ;
237 			x_error_code := xnp_errors.g_undefined_order_parameter;
238 			RETURN;
239 		END IF;
240  */
241 	END IF;
242 
243 	IF (p_source_type = 'SDP_FA') THEN
244 
245         -- rnyberg, 09/26/2001. Removed check for FA Parameters in pool
246         -- by putting section below within comments.
247         -- As of R11.5.6, FA Parameters are not stored in a pool.
248         NULL;
249  /*
250 	-- check if parameter exists in parameter pool
251 
252 		l_exists := check_parameter_pool(
253 			p_element_name => p_element_name,
254 			p_reference => p_data_ref) ;
255 
256 		IF (l_exists = 0) THEN
257 			fnd_message.set_name('XNP', 'UNDEFINED_FA_PARAMETER');
258 			IF (p_data_ref IS NULL) THEN
259 				fnd_message.set_token('NAME',p_element_name);
260 			ELSE
261 				fnd_message.set_token('NAME',p_data_ref);
262 			END IF;
263 			x_error_message := fnd_message.get ;
264 			x_error_code := xnp_errors.g_undefined_fa_parameter;
265 			RETURN;
266 		END IF;
267  */
268 	END IF;
269 
270 	EXCEPTION
271 		WHEN OTHERS THEN
272 			x_error_code := SQLCODE;
273 			x_error_message := SQLERRM;
274 
275 END check_source;
276 
277 /*******************************************************************/
278 
279 
280 
281 FUNCTION check_exists(p_msg_code IN VARCHAR2 ) RETURN NUMBER
282 
283 IS
284 
285 	CURSOR get_object IS
286 		SELECT object_name FROM user_objects
287 		WHERE object_name = p_msg_code
288 		AND OBJECT_TYPE <> 'SYNONYM';
289 
290 	l_object_name VARCHAR2(128);
291 
292 BEGIN
293 
294 	OPEN get_object;
295 	FETCH get_object INTO l_object_name;
296 
297 	IF (get_object%NOTFOUND) THEN
298 		CLOSE get_object;
299 		RETURN 0;
300 
301 	ELSE
302 		CLOSE get_object;
303 		RETURN 1;
304 	END IF ;
305 
306 END check_exists ;
307 
308 /***********************************************************************/
309 
310 FUNCTION check_if_parent(p_element_id NUMBER) RETURN NUMBER
311 
312 IS
313 
314 	CURSOR get_parent IS
315                 --skilaru 03/27/2001
316 		--SELECT * FROM xnp_msg_structures
317 		SELECT 'Y' FROM xnp_msg_structures
318 		WHERE parent_element_id = p_element_id ;
319         --skilaru 03/27/2001
320 	--l_row xnp_msg_structures%ROWTYPE ;
321 	l_row VARCHAR2(1) ;
322 
323 BEGIN
324 
325 	OPEN get_parent;
326 	FETCH get_parent INTO l_row;
327 
328 	IF (get_parent%NOTFOUND) THEN
329 		CLOSE get_parent;
330 		RETURN 0;
331 
332 	ELSE
333 		CLOSE get_parent;
334 		RETURN 1;
335 	END IF ;
336 
337 END check_if_parent ;
338 
339 
340 /***********************************************************************/
341 
342 FUNCTION check_parameter_pool
343 	(p_element_name IN VARCHAR2,
344 	 p_reference IN VARCHAR2) RETURN NUMBER
345 
346 IS
347 
348         -- rnyberg, 09/26/2001. Replaced CSI_EXT_ with CSI_EXTEND_
349         --          Also replaced FND_LOOKUPS with CSI_LOOKUPS
350 	CURSOR get_parameter (l_parameter_name IN VARCHAR2) IS
351 		SELECT lookup_code FROM CSI_LOOKUPS
352 		WHERE lookup_code = l_parameter_name
353                 AND lookup_type = 'CSI_EXTEND_ATTRIB_POOL';
354 
355 	l_parameter VARCHAR2(80);
356 
357 BEGIN
358 
359 	IF (p_reference IS NOT NULL) THEN
360 		OPEN get_parameter(p_reference) ;
361 	ELSE
362 		OPEN get_parameter(p_element_name) ;
363 	END IF;
364 
365 	FETCH get_parameter INTO l_parameter;
366 
367 	IF (get_parameter%NOTFOUND) THEN
368 		CLOSE get_parameter;
369 		RETURN 0;
370 
371 	ELSE
372 		CLOSE get_parameter;
373 		RETURN 1;
374 	END IF ;
375 
376 END check_parameter_pool ;
377 
378 
379 END xnp_msg_schema;