DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMO_DVC_INTG_PVT

Source


1 PACKAGE BODY GMO_DVC_INTG_PVT AS
2 /* $Header: GMOVDVCB.pls 120.4 2005/10/25 01:02 rahugupt noship $ */
3 
4 
5 -- internal constants used in this package body
6 ACTION_INSERT_RESPONSE CONSTANT VARCHAR2(30) := 'INSERT_RESPONSE';
7 ACTION_UPDATE_RESPONSE CONSTANT VARCHAR2(30) := 'UPDATE_RESPONSE';
8 ACTION_INSERT_REQUEST CONSTANT VARCHAR2(30) := 'INSERT_REQUEST';
9 ACTION_UPDATE_DEVICE_STATUS CONSTANT VARCHAR2(30) := 'UPDATE_DEVICE_STATUS';
10 ACTION_UPDATE_DEVICE_RESPONSE CONSTANT VARCHAR2(30) := 'UPDATE_DEVICE_RESPONSE';
11 
12 
13 --This procedure would lock the device.
14 procedure LOCK_DEVICE	 (P_DEVICE_ID IN NUMBER,
15                           P_REQUESTER IN NUMBER,
16                           P_ORGANIZATION_ID IN NUMBER,
17 			  X_DEVICE_TYPE     OUT NOCOPY VARCHAR2,
18 			  X_DEVICE_DESC     OUT NOCOPY VARCHAR2,
19   			  X_SUBINVENTORY    OUT NOCOPY VARCHAR2,
20 			  X_RETURN_STATUS   OUT NOCOPY VARCHAR2,
21 			  X_MSG_COUNT       OUT NOCOPY NUMBER,
22 			  X_MSG_DATA        OUT NOCOPY VARCHAR2)
23 
24 IS PRAGMA AUTONOMOUS_TRANSACTION;
25 
26 l_device_name varchar2(30);
27 l_signon_wrk_stn varchar2(100);
28 cursor c_get_device_details is select name from wms_devices_vl where device_id = P_DEVICE_ID;
29 
30 BEGIN
31 
32 	open c_get_device_details;
33 	fetch c_get_device_details into l_device_name;
34 	close c_get_device_details;
35 
36 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
37 
38 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_LOCK_DEVICE_MSG');
39 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
40 		FND_MESSAGE.SET_TOKEN('DEVICE_NAME',l_device_name);
41 		FND_MESSAGE.SET_TOKEN('REQUESTER',P_REQUESTER);
42 		FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',P_ORGANIZATION_ID);
43 
44 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.lock_device', FALSE);
45 	end if;
46 
47 	-- call the wms api to lock the device
48 	WMS_WCS_DEVICE_GRP.DEVICE_SIGN_ON
49 	(
50 		P_DEVICE_ID => P_DEVICE_ID,
51 		P_DEVICE_NAME => L_DEVICE_NAME,
52 		P_EMPLOYEE_ID => P_REQUESTER,
53 		P_ORGANIZATION_ID => P_ORGANIZATION_ID,
54 		X_DEVICE_TYPE => X_DEVICE_TYPE,
55 		X_DEVICE_DESC => X_DEVICE_DESC,
56 		X_SUBINVENTORY => X_SUBINVENTORY,
57 		X_SIGNON_WRK_STN => l_signon_wrk_stn,
58 		X_RETURN_STATUS => X_RETURN_STATUS,
59 		X_MSG_COUNT => X_MSG_COUNT,
60 		X_MSG_DATA => X_MSG_DATA
61 	);
62 	COMMIT;
63 EXCEPTION
64 	WHEN OTHERS THEN
65 		ROLLBACK;
66 		X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
67 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNEXPECTED_DB_ERR');
68 		FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
69 		FND_MESSAGE.SET_TOKEN('ERROR_CODE',SQLCODE);
70 		FND_MSG_PUB.ADD;
71 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
72 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
73 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_pvt.lock_device', FALSE);
74 		end if;
75 END LOCK_DEVICE;
76 
77 --This procdeure would unlock the device.
78 procedure UNLOCK_DEVICE	 (P_DEVICE_ID IN NUMBER,
79                           P_REQUESTER IN NUMBER,
80                           P_ORGANIZATION_ID IN NUMBER,
81 			  X_RETURN_STATUS   OUT NOCOPY VARCHAR2,
82 			  X_MSG_COUNT       OUT NOCOPY NUMBER,
83 			  X_MSG_DATA        OUT NOCOPY VARCHAR2)
84 
85 
86 IS PRAGMA AUTONOMOUS_TRANSACTION;
87 
88 BEGIN
89 
90 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
91 
92 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNLOCK_DEVICE_MSG');
93 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
94 		FND_MESSAGE.SET_TOKEN('REQUESTER',P_REQUESTER);
95 		FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',P_ORGANIZATION_ID);
96 
97 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.unlock_device', FALSE);
98 	end if;
99 
100 	-- call the wms api to unlock the device
101 	WMS_WCS_DEVICE_GRP.SINGLE_DEVICE_SIGN_OFF
102 	(
103 		P_EMPLOYEE_ID => P_REQUESTER,
104 		P_ORG_ID => P_ORGANIZATION_ID,
105 		P_DEVICE_ID => P_DEVICE_ID,
106 		X_RETURN_STATUS => X_RETURN_STATUS,
107 		X_MSG_COUNT => X_MSG_COUNT,
108 		X_MSG_DATA => X_MSG_DATA
109 	);
110 	COMMIT;
111 EXCEPTION
112 	WHEN OTHERS THEN
113 		ROLLBACK;
114 		X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
115 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNEXPECTED_DB_ERR');
116 		FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
117 		FND_MESSAGE.SET_TOKEN('ERROR_CODE',SQLCODE);
118 		FND_MSG_PUB.ADD;
119 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
120 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
121 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_pvt.unlock_device', FALSE);
122 		end if;
123 END UNLOCK_DEVICE;
124 
125 -- this is an internal procedure to invoke wms device request api
126 PROCEDURE DEVICE_REQUEST (P_BUS_EVENT IN NUMBER,
127 			  P_ORG_ID IN NUMBER,
128 			  P_SUBINV IN VARCHAR2,
129 			  P_DEVICE_ID IN NUMBER,
130 			  X_REQUEST_MSG OUT NOCOPY VARCHAR2,
131 			  X_RETURN_STATUS OUT NOCOPY VARCHAR2,
132 			  X_MSG_COUNT OUT NOCOPY NUMBER,
133 			  X_MSG_DATA OUT NOCOPY VARCHAR2,
134 			  X_REQUEST_ID OUT NOCOPY VARCHAR2)
135 
136 IS PRAGMA AUTONOMOUS_TRANSACTION;
137 
138 BEGIN
139 	WMS_WCS_DEVICE_GRP.DEVICE_REQUEST
140 	(
141                 P_INIT_MSG_LIST    => fnd_api.g_false,
142                 P_BUS_EVENT        => P_BUS_EVENT,
143                 P_CALL_CTX          => 'U',
144                 P_TASK_TRX_ID        => NULL,
145                 P_ORG_ID           => P_ORG_ID,
146                 P_ITEM_ID          => -1,
147                 P_SUBINV           => P_SUBINV,
148                 P_LOCATOR_ID       => -1,
149                 P_LPN_ID           => -1,
150                 P_XFR_ORG_ID       => -1,
151                 P_XFR_SUBINV       => null,
152                 P_XFR_LOCATOR_ID     => -1,
153                 P_TRX_QTY            => -1,
154                 P_TRX_UOM            => '###',
155                 P_REV                => '###',
156                 X_REQUEST_MSG        => X_REQUEST_MSG,
157                 X_RETURN_STATUS    => X_RETURN_STATUS,
158                 X_MSG_COUNT        => X_MSG_COUNT,
159                 X_MSG_DATA            => X_MSG_DATA,
160                 P_REQUEST_ID        => X_REQUEST_ID,
161                 P_DEVICE_ID        => P_DEVICE_ID
162         );
163 	COMMIT;
164 EXCEPTION
165 	WHEN OTHERS THEN
166 		ROLLBACK;
167 END DEVICE_REQUEST;
168 
169 --This procdeure would clean the data from the temporary tables.
170 procedure TEMP_DATA_CLEANUP	 (P_CLEANUP_TO_DATE IN DATE DEFAULT NULL,
171                           	  X_RETURN_STATUS OUT NOCOPY VARCHAR2,
172                           	  X_MSG_COUNT OUT NOCOPY NUMBER,
173                           	  X_MSG_DATA OUT NOCOPY VARCHAR2)
174 
175 IS
176 
177 l_cleanup_to_date date;
178 
179 BEGIN
180 
181 	l_cleanup_to_date := P_CLEANUP_TO_DATE;
182 
183 	IF (l_cleanup_to_date IS NULL) THEN
184 		l_cleanup_to_date := sysdate -2;
185 	END IF;
186 
187 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
188 
189 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_CLEANUP_DATA_MSG');
190 		FND_MESSAGE.SET_TOKEN('CLEANUP_TO_DATE',P_CLEANUP_TO_DATE);
191 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.temp_data_cleanup', FALSE);
192 	end if;
193 
194 	DELETE FROM GMO_DEVICE_RESPONSES_T WHERE REQUEST_ID IN
195     (SELECT REQUEST_ID FROM GMO_DEVICE_REQUESTS_T
196       WHERE CREATION_DATE < l_cleanup_to_date );
197 
198 	DELETE FROM GMO_DEVICE_REQUESTS_T WHERE CREATION_DATE < l_cleanup_to_date;
199 
200 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
201 
202 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_CLEANUP_SUCCESS_MSG');
203 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.temp_data_cleanup', FALSE);
204 	end if;
205 
206 	X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
207 EXCEPTION
208 	WHEN OTHERS THEN
209 		X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
210 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNEXPECTED_DB_ERR');
211 		FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
212 		FND_MESSAGE.SET_TOKEN('ERROR_CODE',SQLCODE);
213 		FND_MSG_PUB.ADD;
214 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
215 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
216 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_grp.temp_data_cleanup', FALSE);
217 		end if;
218 END TEMP_DATA_CLEANUP;
219 
220 -- Internal procedure to insert the device response component for a request
221 -- This procedure is autonoumous as device request and response are in different db sessions
222 -- and we want the request to be available for response
223 
224 PROCEDURE POST_RESPONSE (P_ACTION IN VARCHAR2, P_REQUEST_ID IN NUMBER, P_RESP_COMP_CODE IN VARCHAR2, P_RESP_COMP_CODE_VALUE IN VARCHAR2)
225 IS PRAGMA AUTONOMOUS_TRANSACTION;
226 BEGIN
227 
228 	IF (P_ACTION = ACTION_INSERT_RESPONSE) then
229 		insert into gmo_device_responses_t
230 			(
231 				RESPONSE_ID,
232 				REQUEST_ID,
233 				RESP_COMP_CODE,
234 				RESP_COMP_CODE_VALUE,
235 				CREATED_BY,
236 				CREATION_DATE,
237 				LAST_UPDATED_BY,
238 				LAST_UPDATE_LOGIN,
239 				LAST_UPDATE_DATE
240 			) values(
241 				GMO_DEVICE_RESPONSES_T_S.nextval,
242 				P_REQUEST_ID,
243 				P_RESP_COMP_CODE,
244 				P_RESP_COMP_CODE_VALUE,
245 				FND_GLOBAL.USER_ID,
246 				sysdate,
247 				FND_GLOBAL.USER_ID,
248 				FND_GLOBAL.LOGIN_ID,
249 				sysdate
250 			);
251 	ELSIF (P_ACTION = ACTION_UPDATE_RESPONSE) then
252 
253 		update gmo_device_responses_t set
254 			RESP_COMP_CODE_VALUE = P_RESP_COMP_CODE_VALUE,
255 			LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
256 			LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
257 			LAST_UPDATE_DATE = sysdate
258 		where REQUEST_ID = P_REQUEST_ID
259 		and RESP_COMP_CODE = P_RESP_COMP_CODE;
260 
261 	END IF;
262 
263 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
264 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_REQUEST_COMP_OPRN_MSG');
265 		FND_MESSAGE.SET_TOKEN('ACTION', P_ACTION);
266 		FND_MESSAGE.SET_TOKEN('REQUEST_ID',P_REQUEST_ID);
267 		FND_MESSAGE.SET_TOKEN('COMPONENT',P_RESP_COMP_CODE);
268 		FND_MESSAGE.SET_TOKEN('COMPONENT_VALUE',P_RESP_COMP_CODE_VALUE);
269 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.post_response', FALSE);
270 	end if;
271 
272 	commit;
273 
274 EXCEPTION
275 	WHEN OTHERS THEN
276 		ROLLBACK;
277 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
278 			FND_MESSAGE.SET_NAME('GMO','GMO_DVC_REQUEST_COMP_OPRN_ERR');
279 			FND_MESSAGE.SET_TOKEN('ACTION', P_ACTION);
280 			FND_MESSAGE.SET_TOKEN('REQUEST_ID',P_REQUEST_ID);
281 			FND_MESSAGE.SET_TOKEN('COMPONENT',P_RESP_COMP_CODE);
282 			FND_MESSAGE.SET_TOKEN('COMPONENT_VALUE',P_RESP_COMP_CODE_VALUE);
283 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_grp.post_response', FALSE);
284 		end if;
285 		RAISE;
286 END;
287 
288 -- Internal procedure to insert the device request
289 -- This procedure is autonoumous as device request and response are in different db sessions
290 -- and we want the request to be available for response
291 
292 PROCEDURE POST_REQUEST (P_ACTION IN VARCHAR2, P_REQUEST_ID IN NUMBER, P_DEVICE_ID IN NUMBER, P_REQUESTER IN NUMBER, P_DEVICE_STATUS IN VARCHAR2)
293 IS PRAGMA AUTONOMOUS_TRANSACTION;
294 BEGIN
295 
296 	IF (P_ACTION = ACTION_INSERT_REQUEST) then
297 
298 		INSERT INTO GMO_DEVICE_REQUESTS_T (REQUEST_ID, DEVICE_ID, REQUESTER, RESPONSE_STATUS, DEVICE_STATUS, REQUEST_DATE, CREATED_BY, CREATION_DATE, LAST_UPDATED_BY, LAST_UPDATE_LOGIN, LAST_UPDATE_DATE)
299 		VALUES (P_REQUEST_ID, P_DEVICE_ID, P_REQUESTER, '', P_DEVICE_STATUS, SYSDATE, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.USER_ID, FND_GLOBAL.LOGIN_ID, SYSDATE);
300 
301 	ELSIF (P_ACTION = ACTION_UPDATE_DEVICE_STATUS) then
302 
303 		UPDATE GMO_DEVICE_REQUESTS_T SET
304 			DEVICE_STATUS = P_DEVICE_STATUS,
305 			LAST_UPDATE_DATE = sysdate,
306 			LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
307 			LAST_UPDATED_BY = FND_GLOBAL.USER_ID
308 			WHERE REQUEST_ID = P_REQUEST_ID AND DEVICE_ID = P_DEVICE_ID;
309 
310 	ELSIF (P_ACTION = ACTION_UPDATE_DEVICE_RESPONSE) then
311 		-- update process_device_response
312 		UPDATE GMO_DEVICE_REQUESTS_T SET
313 			RESPONSE_STATUS = FND_API.G_RET_STS_SUCCESS,
314 			LAST_UPDATE_DATE = sysdate,
315 			LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
316 			LAST_UPDATED_BY = FND_GLOBAL.USER_ID
317 		WHERE REQUEST_ID = P_REQUEST_ID AND DEVICE_ID = P_DEVICE_ID;
318 	END IF;
319 
320 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
321 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_REQUEST_OPRN_MSG');
322 		FND_MESSAGE.SET_TOKEN('ACTION', P_ACTION);
323 		FND_MESSAGE.SET_TOKEN('REQUEST_ID',P_REQUEST_ID);
324 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
325 		FND_MESSAGE.SET_TOKEN('REQUESTER',P_REQUESTER);
326 		FND_MESSAGE.SET_TOKEN('DEVICE_STATUS',P_DEVICE_STATUS);
327 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.post_request', FALSE);
328 	end if;
329 
330 	commit;
331 
332 EXCEPTION
333 	WHEN OTHERS THEN
334 		ROLLBACK;
335 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
336 			FND_MESSAGE.SET_NAME('GMO','GMO_DVC_REQUEST_OPRN_ERR');
337 			FND_MESSAGE.SET_TOKEN('ACTION', P_ACTION);
338 			FND_MESSAGE.SET_TOKEN('REQUEST_ID',P_REQUEST_ID);
339 			FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
340 			FND_MESSAGE.SET_TOKEN('REQUESTER',P_REQUESTER);
341 			FND_MESSAGE.SET_TOKEN('DEVICE_STATUS',P_DEVICE_STATUS);
342 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_grp.post_request', FALSE);
343 		end if;
344 		RAISE;
345 END;
346 
347 
348 --This procedure reads the device.
349 procedure READ_DEVICE  (P_RESOURCE_ID IN NUMBER,
350 			P_DEVICE_ID IN NUMBER,
351 			P_ORGANIZATION_ID IN NUMBER,
352 			P_EVENT_ID IN NUMBER,
353 			P_LOCK_UNLOCK IN VARCHAR2 DEFAULT GMO_CONSTANTS_GRP.YES,
354 			P_REQUESTER IN NUMBER,
355 			P_PARAMETER_ID 	IN FND_TABLE_OF_VARCHAR2_255,
356 			P_PARAMETER_UOM_DEFN IN FND_TABLE_OF_VARCHAR2_255,
357 			X_PARAMETER_VALUE OUT NOCOPY FND_TABLE_OF_VARCHAR2_255,
358 			X_PARAMETER_UOM	OUT NOCOPY FND_TABLE_OF_VARCHAR2_255,
359 			X_DEVICE_STATUS OUT NOCOPY VARCHAR2,
360 			X_RETURN_STATUS OUT NOCOPY VARCHAR2,
361 			X_MSG_COUNT OUT NOCOPY NUMBER,
362 			X_MSG_DATA OUT NOCOPY VARCHAR2)
363 
364 IS
365 l_msg_component fnd_table_of_varchar2_255;
366 l_param_id number;
367 l_response_code varchar2(30);
368 l_response_uom varchar2(30);
369 l_counter binary_integer;
370 l_param_error varchar2(4000);
371 l_parameter_name varchar2(300);
372 l_parameter_map_err exception;
373 l_response_values fnd_table_of_varchar2_255;
374 l_uom_counter binary_integer;
375 l_value_counter binary_integer;
376 
377 l_uom_mismatch_err exception;
378 
379 
380 
381 cursor c_get_msg_component is select RESP_COMP_CODE_VALUE, RESP_COMP_CODE_UOM from gmp_resource_device_messages where resource_id = P_RESOURCE_ID and device_id = P_DEVICE_ID and process_param_id = L_PARAM_ID AND EVENT_ID = P_EVENT_ID;
382 cursor c_get_parameter_details is select parameter_name from gmp_process_parameters where parameter_id = l_param_id;
383 BEGIN
384 
385 	l_msg_component := fnd_table_of_varchar2_255();
386 	l_counter := 0;
387 
388 	FOR J IN 1..P_PARAMETER_ID.count LOOP
389 		l_param_id := P_PARAMETER_ID(J);
390 
391 		-- get the message components (code, and uom) for the parameter
392 		open c_get_msg_component;
393 		fetch c_get_msg_component into l_response_code, l_response_uom;
394 		close c_get_msg_component;
395 
396 		-- check if they exist, add them to the list
397 		if (l_response_code is not null and l_response_uom is not null) then
398 			l_msg_component.extend;
399 			l_counter := l_counter + 1;
400 			l_msg_component(l_counter) := l_response_code;
401 
402 			if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
403 
404 				FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_COMPONENT_MSG');
405 				FND_MESSAGE.SET_TOKEN('COMPONENT',l_response_code);
406 				FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
407 			end if;
408 
409 			l_msg_component.extend;
410 			l_counter := l_counter + 1;
411 			l_msg_component(l_counter) := l_response_uom;
412 
413 			if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
414 
415 				FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_COMPONENT_MSG');
416 				FND_MESSAGE.SET_TOKEN('COMPONENT',l_response_uom);
417 				FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
418 			end if;
419 
420 		else
421 			-- if the parameter has no message components, create the error parameter list
422 			if (l_param_error is not null and length(l_param_error) > 0) then
423 				l_param_error := l_param_error || ',';
424 			end if;
425 			open c_get_parameter_details;
426 			fetch c_get_parameter_details into l_parameter_name;
427 			close c_get_parameter_details;
428 			if (l_parameter_name is null) then
429 				l_parameter_name := l_param_id;
430 			end if;
431 			l_param_error := l_param_error || l_parameter_name;
432 		end if;
433 
434 	END LOOP;
435 
436 	-- validate if there were any parameters not mapped
437 	IF (l_param_error is not null and length(l_param_error) > 0) then
438 		raise l_parameter_map_err;
439 	end if;
440 
441 	READ_DEVICE
442 	(
443 		P_DEVICE_ID => P_DEVICE_ID,
444 		P_ORGANIZATION_ID => P_ORGANIZATION_ID,
445 		P_EVENT_ID => P_EVENT_ID,
446 		P_LOCK_UNLOCK => P_LOCK_UNLOCK,
447 		P_REQUESTER => P_REQUESTER,
448 		P_MSG_COMPONENT => L_MSG_COMPONENT,
449 		X_VALUE => l_response_values,
450 		X_DEVICE_STATUS => X_DEVICE_STATUS ,
451 		X_RETURN_STATUS => X_RETURN_STATUS,
452 		X_MSG_COUNT => X_MSG_COUNT ,
453 		X_MSG_DATA => X_MSG_DATA
454 	);
455 
456 	X_PARAMETER_UOM := fnd_table_of_varchar2_255();
457 	X_PARAMETER_VALUE := fnd_table_of_varchar2_255();
458 
459 	IF (X_RETURN_STATUS = FND_API.G_RET_STS_SUCCESS) THEN
460 
461 		l_uom_counter := 0;
462 		l_value_counter := 0;
463 
464 		FOR K IN 1..l_response_values.count LOOP
465 			 -- when we added the message components, code was added first
466 			 -- and then uom, so all odd elements are value for code
467 			 -- and all even element are value for parameter UOM
468 			IF (MOD(K,2) = 0) THEN
469 				l_uom_counter := l_uom_counter + 1;
470 				X_PARAMETER_UOM.extend;
471 				X_PARAMETER_UOM(l_uom_counter) := l_response_values(K);
472 			else
473 				l_value_counter := l_value_counter + 1;
474 				X_PARAMETER_VALUE.extend;
475 				X_PARAMETER_VALUE(l_value_counter) := l_response_values(K);
476 			END IF;
477 		END LOOP;
478 
479 		l_param_error := '';
480 
481 		-- validate if the parameter definition uom are passed
482 		-- if yes match them against the device uom
483 
484 		IF (P_PARAMETER_UOM_DEFN is not null and P_PARAMETER_UOM_DEFN.count > 0) THEN
485 			FOR I IN 1..P_PARAMETER_UOM_DEFN.count LOOP
486 
487 				IF (P_PARAMETER_UOM_DEFN(I) <> X_PARAMETER_UOM(I)) THEN
488 
489 					if (l_param_error is not null and length(l_param_error) > 0) then
490 						l_param_error := l_param_error || ',';
491 					end if;
492 
493 					l_param_id := P_PARAMETER_ID(I);
494 
495 					open c_get_parameter_details;
496 					fetch c_get_parameter_details into l_parameter_name;
497 					close c_get_parameter_details;
498 
499 					if (l_parameter_name is null) then
500 						l_parameter_name := l_param_id;
501 					end if;
502 
503 					l_param_error := l_param_error || l_parameter_name;
504 
505 				END IF;
506 
507 			END LOOP;
508 		END IF;
509 
510 		IF (l_param_error is not null and length(l_param_error) > 0) then
511 			raise l_uom_mismatch_err;
512 		end if;
513 
514 	end if;
515 
516 EXCEPTION
517 	WHEN L_PARAMETER_MAP_ERR THEN
518 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
519 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_PARAM_MAP_ERR');
520 		FND_MESSAGE.SET_TOKEN('PARAMS',l_param_error);
521 		FND_MSG_PUB.ADD;
522 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
523 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
524 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
525 		end if;
526 --		APP_EXCEPTION.RAISE_EXCEPTION;
527 	WHEN L_UOM_MISMATCH_ERR THEN
528 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
529 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_PARAM_UOM_MISMATCH_ERR');
530 		FND_MESSAGE.SET_TOKEN('PARAMS',l_param_error);
531 		FND_MSG_PUB.ADD;
532 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
533 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
534 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
535 		end if;
536 --		APP_EXCEPTION.RAISE_EXCEPTION;
537 	WHEN OTHERS THEN
538 		X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
539 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNEXPECTED_DB_ERR');
540 		FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
541 		FND_MESSAGE.SET_TOKEN('ERROR_CODE',SQLCODE);
542 		FND_MSG_PUB.ADD;
543 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
544 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
545 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_grp.batchstep_material_available', FALSE);
546 		end if;
547 --		APP_EXCEPTION.RAISE_EXCEPTION;
548 END READ_DEVICE;
549 
550 --This procedure reads the device.
551 procedure READ_DEVICE  (P_DEVICE_ID IN NUMBER,
552 			P_ORGANIZATION_ID IN NUMBER,
553 			P_EVENT_ID IN NUMBER,
554 			P_LOCK_UNLOCK IN VARCHAR2 DEFAULT GMO_CONSTANTS_GRP.YES,
555 			P_REQUESTER IN NUMBER,
556 			P_MSG_COMPONENT IN FND_TABLE_OF_VARCHAR2_255,
557 			X_VALUE OUT NOCOPY FND_TABLE_OF_VARCHAR2_255,
558 			X_DEVICE_STATUS OUT NOCOPY VARCHAR2,
559 			X_RETURN_STATUS OUT NOCOPY VARCHAR2,
560 			X_MSG_COUNT OUT NOCOPY NUMBER,
561 			X_MSG_DATA OUT NOCOPY VARCHAR2)
562 
563 IS
564 
565 l_wcs_enabled varchar2(1);
566 l_wcs_disabled_err exception;
567 l_device_op_method_err exception;
568 l_org_code varchar2(3);
569 l_output_method varchar2(30);
570 l_output_method_id varchar2(30);
571 l_device_name varchar2(100);
572 l_device_type varchar2(100);
573 l_device_desc varchar2(100);
574 l_subinventory varchar2(30);
575 l_return_status varchar2(10);
576 l_msg_count number;
577 l_msg_data varchar2(4000);
578 l_lock_device_err exception;
579 l_unlock_device_err exception;
580 l_request_id number;
581 l_read_device_err exception;
582 l_response_code varchar2(300);
583 l_response_value varchar2(4000);
584 l_profile_value varchar2(300);
585 l_request_msg varchar2(4000);
586 l_request_start_date date;
587 l_request_current_date date;
588 l_timeout_profile_value number;
589 l_request_exec_time number;
590 l_response_status varchar2(300);
591 L_DEVICE_RESPONSE_ERR exception;
592 L_DEVICE_REQUEST_END boolean;
593 L_TIMEOUT_ERR exception;
594 l_device_subinv_err exception;
595 
596 l_is_device_locked boolean;
597 
598 l_no_msg_components_err exception;
599 cursor c_get_org_details is select organization_code from mtl_parameters where organization_id = P_ORGANIZATION_ID;
600 cursor c_get_device_details is select output_method, output_method_id, name, subinventory_code from wms_devices_vl where device_id = P_DEVICE_ID;
601 cursor c_get_device_response is select RESP_COMP_CODE_VALUE from gmo_device_responses_t where request_id = l_request_id and RESP_COMP_CODE = l_response_code;
602 
603 
604 
605 BEGIN
606 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
607 
608 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_DEVICE_MSG');
609 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
610 		FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',P_ORGANIZATION_ID);
611 		FND_MESSAGE.SET_TOKEN('REQUESTER',P_REQUESTER);
612 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
613 	end if;
614 
615 	-- validate if any message components were passed
616 	IF (P_MSG_COMPONENT is null or P_MSG_COMPONENT.COUNT = 0) THEN
617 		raise l_no_msg_components_err;
618 	END IF;
619 
620 	l_wcs_enabled := WMS_WCS_DEVICE_GRP.IS_WCS_ENABLED (P_ORGANIZATION_ID);
621 
622 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
623 
624 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_WCS_ORG_ENABLED_MSG');
625 		FND_MESSAGE.SET_TOKEN('ORGANIZATION_ID',P_ORGANIZATION_ID);
626 		FND_MESSAGE.SET_TOKEN('ENABLED_FLAG',l_wcs_enabled);
627 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
628 	end if;
629 
630 	-- check if the organization is wcs enabled
631 	-- this is required from wms architecture perspective
632 
633 	if (nvl (l_wcs_enabled, GMO_CONSTANTS_GRP.NO) = GMO_CONSTANTS_GRP.NO) then
634 
635 		open c_get_org_details;
636 		fetch c_get_org_details into l_org_code;
637 		close c_get_org_details;
638 
639 		raise l_wcs_disabled_err;
640 	end if;
641 
642 	open c_get_device_details;
643 	fetch c_get_device_details into l_output_method, l_output_method_id, l_device_name, l_subinventory;
644 	close c_get_device_details;
645 
646 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
647 
648 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_OUTPUT_METHOD_MSG');
649 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
650 		FND_MESSAGE.SET_TOKEN('DEVICE',l_device_name);
651 		FND_MESSAGE.SET_TOKEN('OUTPUT_METHOD',l_output_method);
652 		FND_MESSAGE.SET_TOKEN('OUTPUT_METHOD_ID',l_output_method_id);
653 		 FND_MESSAGE.SET_TOKEN('SUBINVENTORY', l_subinventory);
654 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
655 	end if;
656 
657 	-- for device response, the output method should always be API (outputmethod id 2).
658 	if (l_output_method_id <> '2') then
659 		raise l_device_op_method_err;
660 	end if;
661 
662 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
663 
664 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_REQUEST_ID_MSG');
665 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
666 		FND_MESSAGE.SET_TOKEN('REQUEST_ID',l_request_id);
667 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
668 	end if;
669 
670 
671 
672 	if (P_LOCK_UNLOCK = GMO_CONSTANTS_GRP.YES) THEN
673 		l_is_device_locked := true;
674 		LOCK_DEVICE	 (P_DEVICE_ID => P_DEVICE_ID,
675                       P_REQUESTER => P_REQUESTER,
676                       P_ORGANIZATION_ID => P_ORGANIZATION_ID,
677 					  X_DEVICE_TYPE     => l_device_type,
678 					  X_DEVICE_DESC     => l_device_desc,
679   					  X_SUBINVENTORY    => l_subinventory,
680 					  X_RETURN_STATUS   => l_return_status,
681 					  X_MSG_COUNT => l_msg_count,
682 					  X_MSG_DATA  => l_msg_data);
683 		IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
684 			RAISE L_LOCK_DEVICE_ERR;
685 		end if;
686 	end if;
687 
688 	-- validate the device is associated to a subinventory.
689 	if (l_subinventory is null or length(l_subinventory) = 0) then
690 		raise l_device_subinv_err;
691 	end if;
692 
693 	select sysdate into l_request_start_date from dual;
694 
695 
696 	DEVICE_REQUEST
697 	(
698 		P_BUS_EVENT        => p_event_id, -- business event id 18 or 19
699 		P_ORG_ID           => p_organization_id, -- organization id
700 		P_SUBINV           => l_subinventory, -- it will have the device sub inventory
701 		P_DEVICE_ID        => p_device_id, -- device id
702 		X_REQUEST_MSG        => l_request_msg, -- out parameter
703 		X_RETURN_STATUS    => l_return_status, -- out parameter
704 		X_MSG_COUNT        => l_msg_count, -- out parameter
705 		X_MSG_DATA            => l_msg_data, -- out parameter
706 		X_REQUEST_ID        => l_request_id -- out parameter
707 	);
708 
709 	POST_REQUEST (P_ACTION => ACTION_INSERT_REQUEST, P_REQUEST_ID => l_request_id, P_DEVICE_ID => P_DEVICE_ID , P_REQUESTER => P_REQUESTER , P_DEVICE_STATUS => '');
710 
711 	FOR I IN 1..P_MSG_COMPONENT.count LOOP
712 		POST_RESPONSE (P_ACTION => ACTION_INSERT_RESPONSE, P_REQUEST_ID => l_request_id, P_RESP_COMP_CODE => P_MSG_COMPONENT(I), P_RESP_COMP_CODE_VALUE => '');
713 	END LOOP;
714 
715 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
716 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_DEVICE_STATUS_MSG');
717 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
718 		FND_MESSAGE.SET_TOKEN('DEVICE_STATUS',l_return_status);
719 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
720 	end if;
721 
722 	POST_REQUEST (P_ACTION => ACTION_UPDATE_DEVICE_STATUS, P_REQUEST_ID => l_request_id, P_DEVICE_ID => P_DEVICE_ID , P_REQUESTER => P_REQUESTER , P_DEVICE_STATUS => l_return_status);
723 	X_DEVICE_STATUS := l_return_status;
724 
725  	IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
726 		RAISE l_read_device_err;
727 	end if;
728 
729 	L_DEVICE_REQUEST_END := FALSE;
730 
731 	l_timeout_profile_value := -1;
732 	l_profile_value := fnd_profile.value(NAME => 'GMO_DVC_READ_TIMEOUT');
733 	if (l_profile_value is not null) then
734 		l_timeout_profile_value := to_number(l_profile_value);
735 	end if;
736 
737 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
738 
739 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_TIMEOUT_VALUE_MSG');
740 		FND_MESSAGE.SET_TOKEN('TIMEOUT',l_profile_value);
741 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
742 	end if;
743 
744 
745 	-- we will loop till the response is recevied or timeout (based on profile) has reached.
746 
747 	WHILE NOT L_DEVICE_REQUEST_END LOOP
748 
749 	   select sysdate into l_request_current_date from dual;
750 	   l_request_exec_time := (l_request_current_date - l_request_start_date)*24*60*60;
751 
752 	   select RESPONSE_STATUS into l_response_status from gmo_device_requests_t where request_id = l_request_id;
753 
754 	   if (l_response_status is not null) then
755 	   		L_DEVICE_REQUEST_END := TRUE;
756 
757 			if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
758 				FND_MESSAGE.SET_NAME('GMO','GMO_DVC_RESPONSE_RECD_MSG');
759 				FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
760 			end if;
761 
762 			IF (l_response_status <> FND_API.G_RET_STS_SUCCESS) THEN
763 				RAISE L_DEVICE_RESPONSE_ERR;
764 			END IF;
765 	   elsif (l_timeout_profile_value > -1 and l_request_exec_time > l_timeout_profile_value) then
766 			if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
767 				FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_TIMEOUT_MSG');
768 				FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
769 			end if;
770 			L_DEVICE_REQUEST_END := TRUE;
771 
772 			raise l_timeout_err;
773 	   end if;
774 
775 	END LOOP;
776 
777 	X_VALUE := fnd_table_of_varchar2_255();
778 
779 	if (P_LOCK_UNLOCK = GMO_CONSTANTS_GRP.YES) THEN
780 		UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID,
781 					  P_REQUESTER => P_REQUESTER,
782                       P_ORGANIZATION_ID => P_ORGANIZATION_ID,
783 					  X_RETURN_STATUS   => l_return_status,
784 					  X_MSG_COUNT => l_msg_count,
785 					  X_MSG_DATA  => l_msg_data);
786 		IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
787 			RAISE L_UNLOCK_DEVICE_ERR;
788 		end if;
789 	end if;
790 
791 	FOR K IN 1..P_MSG_COMPONENT.count LOOP
792 		l_response_code := P_MSG_COMPONENT(K);
793 		open c_get_device_response;
794 		fetch c_get_device_response into l_response_value;
795 		close c_get_device_response;
796 
797 		X_VALUE.extend;
798 		X_VALUE(K) := l_response_value;
799 
800 	END LOOP;
801 
802 	X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
803 
804 EXCEPTION
805 	WHEN L_NO_MSG_COMPONENTS_ERR THEN
806 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
807 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_NO_MSG_COMP_ERR');
808 		FND_MSG_PUB.ADD;
809 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
810 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
811 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
812 		end if;
813 --		APP_EXCEPTION.RAISE_EXCEPTION;
814 	WHEN L_WCS_DISABLED_ERR THEN
815 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
816 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_WCS_DISABLED_ORG_ERR');
817 		FND_MESSAGE.SET_TOKEN('ORGN',L_ORG_CODE);
818 		FND_MSG_PUB.ADD;
819 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
820 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
821 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
822 		end if;
823 --		APP_EXCEPTION.RAISE_EXCEPTION;
824 	WHEN L_DEVICE_OP_METHOD_ERR THEN
825 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
826 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_OUTPUT_METHOD_ERR');
827 		FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
828 		FND_MSG_PUB.ADD;
829 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
830 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
831 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
832 		end if;
833 --		APP_EXCEPTION.RAISE_EXCEPTION;
834 	WHEN L_LOCK_DEVICE_ERR THEN
835 		if (l_is_device_locked = true) then
836 			UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
837 					X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
838 		end if;
839 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
840 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_LOCK_DEVICE_ERR');
841 		FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
842 		FND_MSG_PUB.ADD;
843 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
844 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
845 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
846 		end if;
847 --		APP_EXCEPTION.RAISE_EXCEPTION;
848 	WHEN l_device_subinv_err THEN
849 		if (l_is_device_locked = true) then
850                         UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
851                                         X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
852                 end if;
853 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
854                 FND_MESSAGE.SET_NAME('GMO','GMO_DVC_SUBINV_DEVICE_ERR');
855                 FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
856                 FND_MSG_PUB.ADD;
857                 FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
858                 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
859                         FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
860                 end if;
861 --                APP_EXCEPTION.RAISE_EXCEPTION;
862 	WHEN L_READ_DEVICE_ERR THEN
863 		if (l_is_device_locked = true) then
864                         UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
865                                         X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
866                 end if;
867 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
868 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_DEVICE_ERR');
869 		FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
870 		FND_MSG_PUB.ADD;
871 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
872 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
873 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
874 		end if;
875 --		APP_EXCEPTION.RAISE_EXCEPTION;
876 	WHEN L_TIMEOUT_ERR	THEN
877 		if (l_is_device_locked = true) then
878                         UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
879                                         X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
880                 end if;
881 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
882 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_READ_TIMEOUT_ERR');
883 		FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
884 		FND_MSG_PUB.ADD;
885 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
886 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
887 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
888 		end if;
889 --		APP_EXCEPTION.RAISE_EXCEPTION;
890 	WHEN L_DEVICE_RESPONSE_ERR THEN
891 		if (l_is_device_locked = true) then
892                         UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
893                                         X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
894                 end if;
895 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
896 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_RESPONSE_ERR');
897 		FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
898 		FND_MSG_PUB.ADD;
899 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
900 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
901 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
902 		end if;
903 --		APP_EXCEPTION.RAISE_EXCEPTION;
904 	WHEN L_UNLOCK_DEVICE_ERR THEN
905 		if (l_is_device_locked = true) then
906                         UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
907                                         X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
908                 end if;
909 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
910 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNLOCK_DEVICE_ERR');
911 		FND_MESSAGE.SET_TOKEN('DEVICE',L_DEVICE_NAME);
912 		FND_MSG_PUB.ADD;
913 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
914 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
915 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
916 		end if;
917 --		APP_EXCEPTION.RAISE_EXCEPTION;
918 	WHEN OTHERS THEN
919 		if (l_is_device_locked = true) then
920                         UNLOCK_DEVICE(P_DEVICE_ID => P_DEVICE_ID, P_REQUESTER => P_REQUESTER, P_ORGANIZATION_ID => P_ORGANIZATION_ID,
921                                         X_RETURN_STATUS   => l_return_status, X_MSG_COUNT => l_msg_count, X_MSG_DATA  => l_msg_data);
922                 end if;
923 		X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
924 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNEXPECTED_DB_ERR');
925 		FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
926 		FND_MESSAGE.SET_TOKEN('ERROR_CODE',SQLCODE);
927 		FND_MSG_PUB.ADD;
928 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
929 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
930 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_grp.read_device', FALSE);
931 		end if;
932 --		APP_EXCEPTION.RAISE_EXCEPTION;
933 END READ_DEVICE;
934 
935 
936 --This procedure would process the device response
937 PROCEDURE PROCESS_DEVICE_RESPONSE ( P_REQUEST_ID IN NUMBER,
938 				    P_DEVICE_ID IN NUMBER,
939 				    P_PARAM_VALUES_RECORD IN  WMS_WCS_DEVICE_GRP.MSG_COMPONENT_LOOKUP_TYPE,
940 				    X_RETURN_STATUS OUT NOCOPY VARCHAR2,
941 				    X_MSG_COUNT OUT NOCOPY NUMBER,
942 				    X_MSG_DATA OUT NOCOPY VARCHAR2)
943 
944 IS
945 
946 l_count number;
947 l_request_not_found_err exception;
948 
949 BEGIN
950 
951 	if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
952 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_PROCESS_RESPONSE_MSG');
953 		FND_MESSAGE.SET_TOKEN('REQUEST_ID',P_REQUEST_ID);
954 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
955 		FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,'gmo.plsql.gmo_dvc_intg_pvt.read_device', FALSE);
956 	end if;
957 
958 	select count(*) into l_count from GMO_DEVICE_REQUESTS_T WHERE REQUEST_ID = P_REQUEST_ID AND DEVICE_ID = P_DEVICE_ID;
959 
960 	if (l_count = 0) then
961 		raise l_request_not_found_err;
962 	end if;
963 
964 	-- the P_RESP_COMP_CODE is based on the lookup type WMS_DEVICE_MSG_COMPONENTS,
965 	-- which was used during resource-device mapping
966 
967 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'1' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.ORGANIZATION);
968 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'2' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.ORDER_NUMBER);
969 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'3' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.ITEM);
970 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'4' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.BUSINESS_EVENT);
971 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'10' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.LPN);
972 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'11' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.LOT);
973 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'12' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.UOM);
974 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'13' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.CYCLE_COUNT_ID);
975 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'14' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.QUANTITY);
976 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'15' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.REQUESTED_QUANTITY);
977 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'16' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.WEIGHT);
978 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'17' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.WEIGHT_UOM_CODE);
979 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'18' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.VOLUME);
980 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'19' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.VOLUME_UOM_CODE);
981 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'20' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.LENGTH);
982 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'21' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.WIDTH);
983 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'22' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.HEIGHT);
984 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'23' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DIMENSIONAL_WEIGHT);
985 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'24' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DIMENSIONAL_WEIGHT_FACTOR);
986 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'25' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.NET_WEIGHT);
987 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'26' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.RECEIVED_REQUEST_DATE_AND_TIME);
988 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'27' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.MEASUREMENT_DATE_AND_TIME);
989 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'28' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.RESPONSE_DATE_AND_TIME);
990 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'29' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.TEMPERATURE);
991 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'30' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.TEMPERATURE_UOM);
992 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'31' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.REASON_ID);
993 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'32' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.REASON_TYPE);
994 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'33' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.SENSOR_MEASUREMENT_TYPE);
995 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'34' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.VALUE);
996 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'35' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.QUALITY);
997 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'36' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.OPC_VARIANT_CODE);
998 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'37' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.EPC);
999 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'38' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.UNUSED);
1000 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'39' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.BATCH);
1001 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'40' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_1);
1002 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'41' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_2);
1003 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'42' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_3);
1004 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'43' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_4);
1005 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'44' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_5);
1006 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'45' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_6);
1007 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'46' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_7);
1008 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'47' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_8);
1009 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'48' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_9);
1010 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'49' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_COMPONENT_10);
1011 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'50' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.RELATION_ID);
1012 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'51' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.TASK_ID);
1013 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'52' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.TASK_SUMMARY);
1014 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'53' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.ORGANIZATION_ID);
1015 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'54' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.INVENTORY_ITEM_ID);
1016 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'55' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DEVICE_STATUS);
1017 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'56' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.TRANSFER_LPN_ID);
1018 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'57' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DESTINATION_SUBINVENTORY);
1019 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'58' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.DESTINATION_LOCATOR_ID);
1020 	POST_RESPONSE (P_ACTION => ACTION_UPDATE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_RESP_COMP_CODE =>'59' , P_RESP_COMP_CODE_VALUE => P_PARAM_VALUES_RECORD.SOURCE_LOCATOR_ID);
1021 
1022 	-- update process_device_response
1023 	POST_REQUEST (P_ACTION => ACTION_UPDATE_DEVICE_RESPONSE, P_REQUEST_ID => P_REQUEST_ID, P_DEVICE_ID => P_DEVICE_ID , P_REQUESTER => FND_GLOBAL.USER_ID , P_DEVICE_STATUS => '');
1024 
1025 	X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
1026 
1027 EXCEPTION
1028 	WHEN L_REQUEST_NOT_FOUND_ERR THEN
1029 		X_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
1030 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_REQUEST_FOR_RESP_ERR');
1031 		FND_MESSAGE.SET_TOKEN('REQUEST_ID',P_REQUEST_ID);
1032 		FND_MESSAGE.SET_TOKEN('DEVICE_ID',P_DEVICE_ID);
1033 		FND_MSG_PUB.ADD;
1034 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
1035 		if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1036 			FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,'gmo.plsql.gmo_dvc_intg_grp.process_device_response', FALSE);
1037 		end if;
1038 	WHEN OTHERS THEN
1039 		X_RETURN_STATUS := FND_API.G_RET_STS_UNEXP_ERROR;
1040 		FND_MESSAGE.SET_NAME('GMO','GMO_DVC_UNEXPECTED_DB_ERR');
1041 		FND_MESSAGE.SET_TOKEN('ERROR_TEXT',SQLERRM);
1042 		FND_MESSAGE.SET_TOKEN('ERROR_CODE',SQLCODE);
1043 		FND_MSG_PUB.ADD;
1044 		FND_MSG_PUB.Count_And_Get (p_count => x_msg_count, p_data => x_msg_data);
1045 		if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1046 			FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,'gmo.plsql.gmo_dvc_intg_grp.process_device_response', FALSE);
1047 		end if;
1048 END PROCESS_DEVICE_RESPONSE;
1049 
1050 END GMO_DVC_INTG_PVT;