DBA Data[Home] [Help]

PACKAGE BODY: APPS.EAM_OBJECTINSTANTIATION_PUB

Source


1 PACKAGE BODY EAM_OBJECTINSTANTIATION_PUB AS
2 /* $Header: EAMPMOIB.pls 120.11 2006/06/22 12:36:52 yjhabak noship $ */
3 
4 G_PKG_NAME 	CONSTANT VARCHAR2(30):='EAM_ObjectInstantiation_PUB';
5 
6 
7 -- ======================================================================
8 
9 -- This is a wrapper for Instantiate_Object.
10 -- It takes current_organization_id, inventory_item_id, serial_number
11 -- and looks up the Gen_Object_Id before calling Instantiate_Object.
12 
13 PROCEDURE Instantiate_Serial_Number
14 ( 	p_api_version           	IN	NUMBER,
15   	p_init_msg_list			IN	VARCHAR2,
16 	p_commit	    		IN  	VARCHAR2,
17 	p_validation_level		IN  	NUMBER,
18 	x_return_status			OUT NOCOPY	VARCHAR2,
19 	x_msg_count			OUT NOCOPY	NUMBER,
20 	x_msg_data			OUT NOCOPY	VARCHAR2,
21 	-- inputs: specify a Serial Number
22 	p_current_organization_id	IN	NUMBER,
23 	p_inventory_item_id		IN	NUMBER,
24 	p_serial_number			IN	VARCHAR2
25 )
26 IS
27 
28 l_api_name			CONSTANT VARCHAR2(30)	:= 'Instantiate_Serial_Number';
29 l_api_version           	CONSTANT NUMBER 	:= 1.0;
30 
31 l_x_return_status		VARCHAR2(2000);
32 l_x_msg_count			NUMBER;
33 l_x_msg_data			VARCHAR2(4000);
34 
35 l_maintenance_object_id		NUMBER;
36 
37 l_module            varchar2(200) ;
38 l_log_level CONSTANT NUMBER := fnd_log.g_current_runtime_level;
39 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level ;
40 l_pLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_procedure >= l_log_level;
41 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
42 
43 BEGIN
44       if( l_ulog) then
45            l_module := 'eam.plsql.'||g_pkg_name|| '.' || l_api_name;
46       end if;
47 
48 
49 	if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
50 		'==================== Entered EAM_ObjectInstantiation_PUB.Instantiate_Serial_Number ===================='
51 		|| 'p_current_organization_id = ' || p_current_organization_id
52 		|| 'p_inventory_item_id = ' || p_inventory_item_id
53  		|| 'p_serial_number = ' || p_serial_number);
54 	end if;
55 
56 /* Following code has been commented for bug # 4659202.
57    Instantiation process will be taken care by IB api */
58 /*
59 	BEGIN
60 		SELECT 	instance_id INTO l_maintenance_object_id
61 		FROM 	csi_item_instances
62 		WHERE 	inventory_item_id = p_inventory_item_id
63 		AND	serial_number = p_serial_number;
64 
65 		if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
66 			'l_maintenance_object_id = ' || l_maintenance_object_id);
67 		end if;
68 
69 	EXCEPTION
70 		WHEN OTHERS THEN
71 			IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
72 				FND_MESSAGE.SET_NAME('EAM', 'EAM_ABO_INVALID_GEN_ID');
73 				FND_MSG_PUB.ADD;
74 			END IF;
75 			x_return_status := FND_API.G_RET_STS_ERROR;
76 			FND_MSG_PUB.Count_And_Get
77     			(  	p_count         	=>      x_msg_count     	,
78         			p_data          	=>      x_msg_data
79     			);
80 			x_msg_data := substr(x_msg_data,1,4000);
81 			RETURN;
82 	END;
83 
84 
85 	if (l_slog) then FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, l_module,
86 		'Calling EAM_ObjectInstantiation_PUB.Instantiate_Object...');
87 	end if;
88 
89 	Instantiate_Object
90 	( 	p_api_version           	=> p_api_version,
91   		p_init_msg_list			=> p_init_msg_list,
92 		p_commit	    		=> p_commit,
93 		p_validation_level		=> p_validation_level,
94 		x_return_status			=> l_x_return_status,
95 		x_msg_count			=> l_x_msg_count,
96 		x_msg_data			=> l_x_msg_data,
97 		-- input: maintenance object (id and type)
98 		p_maintenance_object_id		=> l_maintenance_object_id,
99 		p_maintenance_object_type 	=> 3
100 	);
101 */
102 	-- Assign outputs
103 	x_return_status := FND_API.G_RET_STS_SUCCESS;
104 	x_msg_count := l_x_msg_count;
105 	x_msg_data := l_x_msg_data;
106 	x_msg_data := substr(x_msg_data,1,4000);
107 
108 END;
109 
110 -- ======================================================================
111 
112 PROCEDURE Instantiate_Object
113 ( 	p_api_version           	IN	NUMBER,
114   	p_init_msg_list			IN	VARCHAR2,
115 	p_commit	    		IN  	VARCHAR2,
116 	p_validation_level		IN  	NUMBER,
117 	x_return_status			OUT NOCOPY	VARCHAR2,
118 	x_msg_count			OUT NOCOPY	NUMBER,
119 	x_msg_data			OUT NOCOPY	VARCHAR2,
120 	-- input: maintenance object (id and type)
121 	p_maintenance_object_id		IN	NUMBER, -- for Maintenance Object Type of 3, this should be INSTANCE_Id
122 	p_maintenance_object_type	IN	NUMBER -- only supports Type 3 (Serialized Asset Numbers) for now
123 )
124 IS
125 
126 l_api_name			CONSTANT VARCHAR2(30)	:= 'Instantiate_Object';
127 l_api_version           	CONSTANT NUMBER 	:= 1.0;
128 
129 l_eam_instantiation_flag	VARCHAR2(1);
130 l_network_asset_flag            VARCHAR2(1);
131 l_current_status		NUMBER;
132 l_owning_department_id		NUMBER;
133 l_class_code			VARCHAR2(10);
134 
135 -- local variables for call the Activity Instantiation Package
136 l_x_act_return_status		VARCHAR2(1);
137 l_x_act_msg_count		NUMBER;
138 l_x_act_msg_data		VARCHAR2(4000);
139 l_x_meter_return_status           VARCHAR2(1);
140 l_x_meter_msg_count               NUMBER;
141 l_x_meter_msg_data                VARCHAR2(4000);
142 l_x_pm_return_status           VARCHAR2(1);
143 l_x_pm_msg_count               NUMBER;
144 l_x_pm_msg_data                VARCHAR2(4000);
145 l_x_supp_return_status           VARCHAR2(1);
146 l_x_supp_msg_count               NUMBER;
147 l_x_supp_msg_data                VARCHAR2(4000);
148 l_x_act_association_id_tbl	EAM_ObjectInstantiation_PUB.Association_Id_Tbl_Type;
149 
150 
151  /* R12 Hook for Asset Log #4141712*/
152  l_maint_orgid			NUMBER;
153  l_event_type			VARCHAR2(30)	:= 'EAM_SYSTEM_EVENTS';
154  l_event_date			DATE	:= sysdate;
155  l_reference			VARCHAR2(30);
156  l_operational_log_flag		VARCHAR2(1);
157  l_return_status		VARCHAR2(5);
158  l_comments			VARCHAR2(2000)  := 'Initial Creation of Asset';
159 
160 l_module             varchar2(200) ;
161 l_log_level CONSTANT NUMBER := fnd_log.g_current_runtime_level;
162 l_uLog CONSTANT BOOLEAN := fnd_log.level_unexpected >= l_log_level ;
163 l_exLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_exception >= l_log_level;
164 l_pLog CONSTANT BOOLEAN := l_uLog AND fnd_log.level_procedure >= l_log_level;
165 l_sLog CONSTANT BOOLEAN := l_pLog AND fnd_log.level_statement >= l_log_level;
166 
167 l_date				DATE;
168 
169 BEGIN
170       if( l_ulog) then
171            l_module    := 'eam.plsql.'||g_pkg_name|| '.' || l_api_name;
172       end if;
173 
174 	if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
175 		'==================== Entered EAM_ObjectInstantiation_PUB.Instantiate_Object ===================='
176 		|| 'p_maintenance_object_id = ' || p_maintenance_object_id
177 		|| 'p_maintenance_object_type = ' || p_maintenance_object_type);
178 	end if;
179 
180 	-- Standard Start of API savepoint
181     	SAVEPOINT	Instantiate_Object_PUB;
182 
183     	-- Standard call to check for call compatibility.
184     	IF NOT FND_API.Compatible_API_Call ( 	l_api_version        	,
185         	    	    	    	 	p_api_version        	,
186    	       	    	 			l_api_name 	    	,
187 		    	    	    	    	G_PKG_NAME )
188 	THEN
189 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
190 	END IF;
191 
192 	-- Initialize message list if p_init_msg_list is set to TRUE.
193 	IF FND_API.to_Boolean( p_init_msg_list ) THEN
194 		FND_MSG_PUB.initialize;
195 	END IF;
196 
197 	--  Initialize API return status to success
198    	x_return_status := FND_API.G_RET_STS_SUCCESS;
199 
200 	-- API body
201 
202 
203 	-- 1: Check Maintenance Object Type, only support 3 (Serialized Asset Numbers) for now
204 	IF p_maintenance_object_type <> 3 THEN
205 		IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
206 			FND_MESSAGE.SET_NAME('EAM', 'EAM_ABO_INVALID_MAINT_OBJ_TYPE');
207 			FND_MSG_PUB.ADD;
208 		END IF;
209 		RAISE FND_API.G_EXC_ERROR;
210 	END IF;
211 
212 	-- 2: add code when the column is added to MSN
213 	-- Check PM_INSTANTIATED flag in MSN, if flag is checked, do nothing and return SUCCESS
214 
215 	select cii.instantiation_flag, cii.network_asset_flag
216 	  into l_eam_instantiation_flag, l_network_asset_flag
217 	from csi_item_instances cii
218 	where cii.instance_id = p_maintenance_object_id;
219 
220 	begin
221 		select eomd.accounting_class_code, eomd.owning_department_id
222 		INTO l_class_code, l_owning_department_id
223 		FROM	csi_item_instances cii, eam_org_maint_defaults eomd, mtl_parameters mp
224 		WHERE	cii.instance_id = p_maintenance_object_id
225 		and eomd.object_type = 50
226 		and eomd.object_id  = cii.instance_id
227 		and mp.organization_id = cii.last_vld_organization_id
228 		and eomd.organization_id = mp.maint_organization_id;
229 	exception
230 		when others then
231 			l_class_code := null;
232 			l_owning_department_id := null;
233 	end;
234 
235 	if (l_slog) then FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT, l_module,
236 		'l_eam_instantiation_flag=' || l_eam_instantiation_flag);
237 	end if;
238 
239 	IF (NVL(l_eam_instantiation_flag, 'N') <> 'Y' AND NVL(l_network_asset_flag, 'N') <> 'Y' ) THEN
240 
241 		IF (l_plog) THEN FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
242 			'Calling EAM_ActivityAssociation_PVT.Inst_Activity_Template...');
243 		END IF;
244 
245 		-- 3: Call the Activity Instantiation API
246 		EAM_ActivityAssociation_PVT.Inst_Activity_Template(
247 		 		p_api_version			=> 1.0,
248 
249 				x_return_status			=> l_x_act_return_status,
250 				x_msg_count			=> l_x_act_msg_count,
251 				x_msg_data			=> l_x_act_msg_data,
252 
253 				p_maintenance_object_id		=> p_maintenance_object_id,
254 				p_maintenance_object_type	=> p_maintenance_object_type,
255 				-- output for activity association
256 				x_activity_association_id_tbl	=> l_x_act_association_id_tbl
257 
258 				-- BUG: 3683229
259 				,p_class_code			=> l_class_code
260 				,p_owning_department_id		=> l_owning_department_id
261 			);
262 
263 		if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
264 			'Returned from EAM_ActivityAssociation_PVT.Inst_Activity_Template'
265 			|| 'l_x_act_return_status = ' || l_x_act_return_status
266 			|| 'l_x_act_msg_count = ' || l_x_act_msg_count
267 			|| 'l_x_act_msg_data = ' || l_x_act_msg_data
268 			|| 'Calling eam_pmdef_pub.instantiate_pm_defs...');
269 		end if;
270 
271 		eam_pmdef_pub.instantiate_pm_defs
272 		(
273 			p_api_version=>1.0,
274 			x_return_status=> l_x_pm_return_status,
275 			x_msg_count=> l_x_pm_msg_count,
276 			x_msg_data => l_x_pm_msg_data,
277 			p_activity_assoc_id_tbl=> l_x_act_association_id_tbl
278 		);
279 
280 		if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
281 			'Returned from eam_pmdef_pub.instantiate_pm_defs'
282 			|| 'l_x_pm_return_status = ' || l_x_pm_return_status
283 			|| 'l_x_pm_msg_count = ' || l_x_pm_msg_count
284 			|| 'l_x_pm_msg_data = ' || l_x_pm_msg_data
285 			|| 'Calling eam_pm_suppressions.instantiate_supp_defs...');
286 		end if;
287 
288 		-- 4.5 Instantiate suppressions
289 	 	eam_pm_suppressions.instantiate_suppressions(
290   			p_api_version => 1.0,
291 			x_return_status=> l_x_supp_return_status,
292 			x_msg_count => l_x_supp_msg_count,
293 			x_msg_data => l_x_supp_msg_data,
294 			p_maintenance_object_id=> p_maintenance_object_id
295 		);
296 
297 		if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
298 			'Returned from eam_pm_suppressions.instantiate_supp_defs'
299 			|| 'l_x_supp_return_status = ' || l_x_supp_return_status
300 			|| 'l_x_supp_msg_count = ' || l_x_supp_msg_count
301 			|| 'l_x_supp_msg_data = ' || l_x_supp_msg_data);
302 		end if;
303 
304 		-- 5: Procedure call only successful if all sub-procedures returned status success
305 		IF l_x_act_return_status <> FND_API.G_RET_STS_SUCCESS OR
306 			l_x_pm_return_status <> FND_API.G_RET_STS_SUCCESS OR
307                 	l_x_supp_return_status <> FND_API.G_RET_STS_SUCCESS
308 		THEN
309 			IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
310 				FND_MESSAGE.SET_NAME('EAM', 'EAM_ABO_INST_API_FAILED');
311 				FND_MSG_PUB.ADD;
312 			END IF;
313 			RAISE FND_API.G_EXC_ERROR;
314 		END IF;
315 
316 		-- 6:Set PM_INSTANTIATED flag in MSN
317 		UPDATE	csi_item_instances
318 		SET	instantiation_flag = 'Y'
319 		WHERE	instance_id = p_maintenance_object_id;
320 
321 		-- 7: Insert Log into EAM_ASSET_LOG for Activate Asset Event while Asset Creation
322 		--    with Active Status and Operational Log Flag Checked.
323 
324 		SELECT  mp.maint_organization_id, cii.instance_number, cii.active_start_date, cii.operational_log_flag
325 		INTO  l_maint_orgid, l_reference, l_event_date, l_operational_log_flag
326 		FROM csi_item_instances cii, mtl_parameters mp
327 		WHERE cii.instance_id = p_maintenance_object_id
328 		AND cii.last_vld_organization_id = mp.organization_id ;
329 
330                 IF (l_operational_log_flag = 'Y' ) THEN
331 
332 		   eam_asset_log_pvt.insert_row
333 		   (
334 		      p_event_date	    =>	l_event_date,
335 		      p_event_type	    =>	l_event_type,
336 		      p_event_id	    =>	1,
337 		      p_organization_id	    =>	l_maint_orgid,
338 		      p_instance_id	    =>	p_maintenance_object_id,
339 		      p_reference	    =>	l_reference,
340 		      p_ref_id		    =>	p_maintenance_object_id,
341 		      p_instance_number	    =>	l_reference,
342 		      p_comments	    =>	l_comments,
343 		      x_return_status	    =>	l_return_status,
344 		      x_msg_count	    =>	x_msg_count,
345 		      x_msg_data	    =>	x_msg_data
346 		    );
347                 END IF;
348 
349 	ELSE
350 		-- Instantiated already, do nothing
351 		NULL;
352 	END IF;
353 
354 	-- 8: Insert into EAM_ASSET_TEXT for text Search
355 
356         eam_text_util.process_asset_update_event
357         (
358             p_event         => 'INSERT'
359            ,p_instance_id   => p_maintenance_object_id
360         );
361 
362 	-- End of API body.
363 	-- Standard check of p_commit.
364 	IF FND_API.To_Boolean( p_commit ) THEN
365 		COMMIT WORK;
366 	END IF;
367 	-- Standard call to get message count and if count is 1, get message info.
368 	FND_MSG_PUB.Count_And_Get
369     	(  	p_count         	=>      x_msg_count     	,
370         	p_data          	=>      x_msg_data
371     	);
372 	x_msg_data := substr(x_msg_data,1,4000);
373 
374 	if (l_plog) then FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE, l_module,
375 		'==================== Exiting EAM_ObjectInstantiation_PUB.Instantiate_Object ====================');
376 	end if;
377 
378 EXCEPTION
379     WHEN FND_API.G_EXC_ERROR THEN
380 	ROLLBACK TO Instantiate_Object_PUB;
381 
382 	if (l_exlog) then FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, l_module,
383 			'==================== EAM_ObjectInstantiation_PUB.Instantiate_Object: EXPECTED ERROR ====================');
384 	end if;
385 
386 	x_return_status := FND_API.G_RET_STS_ERROR ;
387 
388 	FND_MSG_PUB.Count_And_Get
389     	(  	p_count         	=>      x_msg_count     	,
390         	p_data          	=>      x_msg_data
391     	);
392 
393 	 x_msg_data := substr(x_msg_data,1,4000);
394 
395     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
396 	ROLLBACK TO Instantiate_Object_PUB;
397 
398 	if (l_exlog) then FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, l_module,
399 			'==================== EAM_ObjectInstantiation_PUB.Instantiate_Object: UNEXPECTED ERROR ====================');
400 	end if;
401 
402 	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
403 
404 	FND_MSG_PUB.Count_And_Get
405     	(  	p_count         	=>      x_msg_count     	,
406         	p_data          	=>      x_msg_data
407     	);
408 
409 	x_msg_data := substr(x_msg_data,1,4000);
410 
411     WHEN OTHERS THEN
412 	ROLLBACK TO Instantiate_Object_PUB;
413 
414 	if (l_exlog) then FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION, l_module,
415 			'==================== EAM_ObjectInstantiation_PUB.Instantiate_Object: OTHER ERROR ====================');
416 	end if;
417 
418 	x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
419 
420 	IF 	FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
421 	THEN
422         	FND_MSG_PUB.Add_Exc_Msg
423     	   	(	G_PKG_NAME  	    ,
424     	    		l_api_name
425 	    	);
426 	END IF;
427 
428 	FND_MSG_PUB.Count_And_Get
429     	(  	p_count         	=>      x_msg_count     	,
430         	p_data          	=>      x_msg_data
431     	);
432 
433 	x_msg_data := substr(x_msg_data,1,4000);
434 
435 END Instantiate_Object;
436 
437 END EAM_ObjectInstantiation_PUB;
438