[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