1 PACKAGE BODY AMS_Dm_Target_Value_PVT as
2 /* $Header: amsvdtvb.pls 115.9 2003/03/19 06:08:40 rosharma noship $ */
3 -- ===============================================================
4 -- Start of Comments
5 -- Package name
6 -- AMS_Dm_Target_Value_PVT
7 -- Purpose
8 --
9 -- History
10 -- 08-Oct-2002 nyostos Added value_condition column
11 -- 16-Oct-2002 choang Added target_operator and range_value, replacing value_condition
12 -- 28-Nov-2002 rosharma Added validation for numeric vs varchar target value depending on the field type
13 -- 17-Mar-2003 nyostos Added unqiueness check for target_operator + target_value in UPDATE mode.
14 -- Fix for bug 2853646.
15 -- 19-Feb-2003 rosharma Bug # 2853640
16 --
17 -- NOTE
18 --
19 -- End of Comments
20 -- ===============================================================
21
22
23 G_PKG_NAME CONSTANT VARCHAR2(30) := 'AMS_Dm_Target_Value_PVT';
24 G_FILE_NAME CONSTANT VARCHAR2(12) := 'amsvdtvb.pls';
25
26 G_USER_ID NUMBER := FND_GLOBAL.USER_ID;
27 G_LOGIN_ID NUMBER := FND_GLOBAL.CONC_LOGIN_ID;
28
29
30 AMS_DEBUG_HIGH_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
31 AMS_DEBUG_LOW_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
32 AMS_DEBUG_MEDIUM_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
33
34 PROCEDURE Complete_dm_target_value_Rec (
35 p_dm_target_value_rec IN dm_target_value_rec_type,
36 x_complete_rec OUT NOCOPY dm_target_value_rec_type
37 );
38
39
40
41 -- Hint: Primary key needs to be returned.
42 PROCEDURE Create_Dm_Target_Value(
43 p_api_version_number IN NUMBER,
44 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
45 p_commit IN VARCHAR2 := FND_API.G_FALSE,
46 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
47
48 x_return_status OUT NOCOPY VARCHAR2,
49 x_msg_count OUT NOCOPY NUMBER,
50 x_msg_data OUT NOCOPY VARCHAR2,
51
52 p_dm_target_value_rec IN dm_target_value_rec_type := g_miss_dm_target_value_rec,
53 x_target_value_id OUT NOCOPY NUMBER
54 )
55
56 IS
57 L_API_NAME CONSTANT VARCHAR2(30) := 'Create_Dm_Target_Value';
58 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
59 l_return_status_full VARCHAR2(1);
60 l_object_version_number NUMBER := 1;
61 l_org_id NUMBER := FND_API.G_MISS_NUM;
62 l_TARGET_VALUE_ID NUMBER;
63 l_dummy NUMBER;
64 l_dm_target_value_rec AMS_Dm_Target_Value_PVT.dm_target_value_rec_type := p_dm_target_value_rec;
65 l_datasource_id NUMBER;
66
67 CURSOR c_id IS
68 SELECT AMS_DM_TARGET_VALUES_B_s.NEXTVAL
69 FROM dual;
70
71 CURSOR c_id_exists (l_id IN NUMBER) IS
72 SELECT 1
73 FROM AMS_DM_TARGET_VALUES_VL
74 WHERE TARGET_VALUE_ID = l_id;
75
76 -- Cursor to get the data source id for the target
77 CURSOR c_datasource_id (l_tgtId IN NUMBER) IS
78 SELECT data_source_id
79 FROM ams_dm_targets_vl
80 WHERE target_id = l_tgtId;
81
82
83 BEGIN
84 -- Standard Start of API savepoint
85 SAVEPOINT CREATE_Dm_Target_Value_PVT;
86
87 -- Standard call to check for call compatibility.
88 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
89 p_api_version_number,
90 l_api_name,
91 G_PKG_NAME)
92 THEN
93 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
94 END IF;
95
96 -- Initialize message list if p_init_msg_list is set to TRUE.
97 IF FND_API.to_Boolean( p_init_msg_list )
98 THEN
99 FND_MSG_PUB.initialize;
100 END IF;
101
102 -- Debug Message
103 IF (AMS_DEBUG_HIGH_ON) THEN
104
105 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
106 END IF;
107
108
109 -- Initialize API return status to SUCCESS
110 x_return_status := FND_API.G_RET_STS_SUCCESS;
111
112 -- Local variable initialization
113 IF l_dm_target_value_rec.TARGET_VALUE_ID IS NULL OR l_dm_target_value_rec.TARGET_VALUE_ID = FND_API.g_miss_num THEN
114 LOOP
115 l_dummy := NULL;
116 OPEN c_id;
117 FETCH c_id INTO l_dm_target_value_rec.TARGET_VALUE_ID;
118 CLOSE c_id;
119
120 OPEN c_id_exists(l_dm_target_value_rec.TARGET_VALUE_ID);
121 FETCH c_id_exists INTO l_dummy;
122 CLOSE c_id_exists;
123
124 EXIT WHEN l_dummy IS NULL;
125 END LOOP;
126 END IF;
127
128 IF (AMS_DEBUG_HIGH_ON) THEN
129
130
131
132 AMS_UTILITY_PVT.debug_message( l_api_name || ' New Target Value ID to Insert = ' || l_dm_target_value_rec.TARGET_VALUE_ID);
133
134 END IF;
135
136 -- =========================================================================
137 -- Validate Environment
138 -- =========================================================================
139
140 IF FND_GLOBAL.User_Id IS NULL
141 THEN
142 AMS_Utility_PVT.Error_Message(p_message_name => 'USER_PROFILE_MISSING');
143 RAISE FND_API.G_EXC_ERROR;
144 END IF;
145
146 IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
147 THEN
148 -- Invoke validation procedures
149 Validate_dm_target_value(
150 p_api_version_number => 1.0,
151 p_init_msg_list => FND_API.G_FALSE,
152 p_validation_level => p_validation_level,
153 p_validation_mode => JTF_PLSQL_API.g_create,
154 p_dm_target_value_rec => l_dm_target_value_rec,
155 x_return_status => x_return_status,
156 x_msg_count => x_msg_count,
157 x_msg_data => x_msg_data);
158 END IF;
159
160 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
161 RAISE FND_API.G_EXC_ERROR;
162 END IF;
163
164
165 -- Debug Message
166 IF (AMS_DEBUG_HIGH_ON) THEN
167
168 AMS_UTILITY_PVT.debug_message( 'Private API: Calling create table handler');
169 END IF;
170
171 -- Invoke table handler(AMS_DM_TARGET_VALUES_B_PKG.Insert_Row)
172 AMS_DM_TARGET_VALUES_B_PKG.Insert_Row(
173 px_target_value_id => l_dm_target_value_rec.TARGET_VALUE_ID,
174 p_last_update_date => SYSDATE,
175 p_last_updated_by => G_USER_ID,
176 p_creation_date => SYSDATE,
177 p_created_by => G_USER_ID,
178 p_last_update_login => G_LOGIN_ID,
179 px_object_version_number => l_object_version_number,
180 p_target_id => l_dm_target_value_rec.target_id,
181 p_target_value => l_dm_target_value_rec.target_value,
182 p_target_operator => l_dm_target_value_rec.target_operator,
183 p_range_value => l_dm_target_value_rec.range_value,
184 p_description => l_dm_target_value_rec.description
185 );
186
187 -- Set the return value for the new target value id
188 x_target_value_id := l_dm_target_value_rec.target_value_id;
189
190 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
191 RAISE FND_API.G_EXC_ERROR;
192 END IF;
193
194 IF (AMS_DEBUG_HIGH_ON) THEN
195
196
197
198 AMS_UTILITY_PVT.debug_message( l_api_name || ' Going to activate target: ' || l_dm_target_value_rec.target_id);
199
200 END IF;
201
202 -- After successfully inserting the target value record, Set the target to Active
203 update ams_dm_targets_b
204 set active_flag = 'Y'
205 where target_id = l_dm_target_value_rec.target_id;
206
207 -- Also enable the associated data source
208 -- Get the data source id for this target
209 OPEN c_datasource_id(l_dm_target_value_rec.target_id);
210 FETCH c_datasource_id INTO l_datasource_id;
211 CLOSE c_datasource_id;
212
213 update ams_list_src_types
214 set enabled_flag = 'Y',
215 object_version_number = object_version_number + 1
216 where list_source_type_id = l_datasource_id;
217
218 --
219 -- End of API body
220 --
221
222 -- Standard check for p_commit
223 IF FND_API.to_Boolean( p_commit ) THEN
224 COMMIT WORK;
225 END IF;
226
227 -- Debug Message
228 IF (AMS_DEBUG_HIGH_ON) THEN
229
230 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
231 END IF;
232
233 -- Standard call to get message count and if count is 1, get message info.
234 FND_MSG_PUB.Count_And_Get
235 (p_count => x_msg_count,
236 p_data => x_msg_data
237 );
238 EXCEPTION
239
240 WHEN AMS_Utility_PVT.resource_locked THEN
241 x_return_status := FND_API.g_ret_sts_error;
242 AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
243
244 WHEN FND_API.G_EXC_ERROR THEN
245 ROLLBACK TO CREATE_Dm_Target_Value_PVT;
246 x_return_status := FND_API.G_RET_STS_ERROR;
247 -- Standard call to get message count and if count=1, get the message
248 FND_MSG_PUB.Count_And_Get (
249 p_encoded => FND_API.G_FALSE,
250 p_count => x_msg_count,
251 p_data => x_msg_data
252 );
253
254 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
255 ROLLBACK TO CREATE_Dm_Target_Value_PVT;
256 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
257 -- Standard call to get message count and if count=1, get the message
258 FND_MSG_PUB.Count_And_Get (
259 p_encoded => FND_API.G_FALSE,
260 p_count => x_msg_count,
261 p_data => x_msg_data
262 );
263
264 WHEN OTHERS THEN
265 ROLLBACK TO CREATE_Dm_Target_Value_PVT;
266 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
267 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
268 THEN
269 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
270 END IF;
271 -- Standard call to get message count and if count=1, get the message
272 FND_MSG_PUB.Count_And_Get (
273 p_encoded => FND_API.G_FALSE,
274 p_count => x_msg_count,
275 p_data => x_msg_data
276 );
277 End Create_Dm_Target_Value;
278
279
280 PROCEDURE Update_Dm_Target_Value(
281 p_api_version_number IN NUMBER,
282 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
283 p_commit IN VARCHAR2 := FND_API.G_FALSE,
284 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
285
286 x_return_status OUT NOCOPY VARCHAR2,
287 x_msg_count OUT NOCOPY NUMBER,
288 x_msg_data OUT NOCOPY VARCHAR2,
289
290 p_dm_target_value_rec IN dm_target_value_rec_type,
291 x_object_version_number OUT NOCOPY NUMBER
292 )
293
294 IS
295
296
297 CURSOR c_get_dm_target_value(p_target_value_id NUMBER) IS
298 SELECT *
299 FROM AMS_DM_TARGET_VALUES_VL
300 WHERE target_value_id = p_target_value_id;
301
302
303 L_API_NAME CONSTANT VARCHAR2(30) := 'Update_Dm_Target_Value';
304 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
305
306 -- Local Variables
307 l_object_version_number NUMBER;
308 l_TARGET_VALUE_ID NUMBER;
309 l_ref_dm_target_value_rec c_get_Dm_Target_Value%ROWTYPE ;
310 l_tar_dm_target_value_rec AMS_Dm_Target_Value_PVT.dm_target_value_rec_type := P_dm_target_value_rec;
311 l_rowid ROWID;
312
313 BEGIN
314 -- Standard Start of API savepoint
315 SAVEPOINT UPDATE_Dm_Target_Value_PVT;
316
317 -- Debug Message
318 IF (AMS_DEBUG_HIGH_ON) THEN
319
320 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
321 END IF;
322
323 -- Standard call to check for call compatibility.
324 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
325 p_api_version_number,
326 l_api_name,
327 G_PKG_NAME)
328 THEN
329 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
330 END IF;
331
332 -- Initialize message list if p_init_msg_list is set to TRUE.
333 IF FND_API.to_Boolean( p_init_msg_list )
334 THEN
335 FND_MSG_PUB.initialize;
336 END IF;
337
338
339 -- Initialize API return status to SUCCESS
340 x_return_status := FND_API.G_RET_STS_SUCCESS;
341
342 -- Debug Message
343 IF (AMS_DEBUG_HIGH_ON) THEN
344
345 AMS_UTILITY_PVT.debug_message('Private API: - Going to Complete Record');
346 END IF;
347
348
349 -- Complete missing entries in the record before updating
350 Complete_dm_target_value_Rec(
351 p_dm_target_value_rec => p_dm_target_value_rec,
352 x_complete_rec => l_tar_dm_target_value_rec
353 );
354
355 -- Debug Message
356 IF (AMS_DEBUG_HIGH_ON) THEN
357
358 AMS_UTILITY_PVT.debug_message('Private API: - Open Reference Cursor');
359 END IF;
360
361 IF (AMS_DEBUG_HIGH_ON) THEN
362
363
364
365 AMS_UTILITY_PVT.debug_message('target value id: ' || l_tar_dm_target_value_rec.target_value_id);
366
367 END IF;
368
369 -- get the reference target, which contains
370 -- data before the update operation.
371 OPEN c_get_Dm_Target_Value( l_tar_dm_target_value_rec.target_value_id);
372 FETCH c_get_Dm_Target_Value INTO l_ref_dm_target_value_rec ;
373
374 If ( c_get_Dm_Target_Value%NOTFOUND) THEN
375 AMS_Utility_PVT.Error_Message(p_message_name => 'API_MISSING_UPDATE_TARGET',
376 p_token_name => 'INFO',
377 p_token_value => 'Dm_Target_Value') ;
378 RAISE FND_API.G_EXC_ERROR;
379 END IF;
380
381 -- Debug Message
382 IF (AMS_DEBUG_HIGH_ON) THEN
383
384 AMS_UTILITY_PVT.debug_message('Private API: - Close Reference Cursor');
385 END IF;
386 CLOSE c_get_Dm_Target_Value;
387
388
389 If (l_tar_dm_target_value_rec.object_version_number is NULL or
390 l_tar_dm_target_value_rec.object_version_number = FND_API.G_MISS_NUM ) Then
391 AMS_Utility_PVT.Error_Message(p_message_name => 'API_VERSION_MISSING',
392 p_token_name => 'COLUMN',
393 p_token_value => 'Last_Update_Date') ;
394 raise FND_API.G_EXC_ERROR;
395 End if;
396 -- Check Whether record has been changed by someone else
397 If (l_tar_dm_target_value_rec.object_version_number <> l_ref_dm_target_value_rec.object_version_number) Then
398 AMS_Utility_PVT.Error_Message(p_message_name => 'API_RECORD_CHANGED',
399 p_token_name => 'INFO',
400 p_token_value => 'Dm_Target_Value') ;
401 raise FND_API.G_EXC_ERROR;
402 End if;
403
404 IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
405 THEN
406 -- Invoke validation procedures
407 Validate_dm_target_value(
408 p_api_version_number => 1.0,
409 p_init_msg_list => FND_API.G_FALSE,
410 p_validation_level => p_validation_level,
411 p_validation_mode => JTF_PLSQL_API.g_update,
412 p_dm_target_value_rec => l_tar_dm_target_value_rec,
413 x_return_status => x_return_status,
414 x_msg_count => x_msg_count,
415 x_msg_data => x_msg_data);
416 END IF;
417
418 IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
419 RAISE FND_API.G_EXC_ERROR;
420 END IF;
421
422 -- Debug Message
423 IF (AMS_DEBUG_HIGH_ON) THEN
424
425 AMS_UTILITY_PVT.debug_message('Private API: Calling update table handler');
426 END IF;
427
428 -- Invoke table handler(AMS_DM_TARGET_VALUES_B_PKG.Update_Row)
429 AMS_DM_TARGET_VALUES_B_PKG.Update_Row(
430 p_target_value_id => l_tar_dm_target_value_rec.target_value_id,
431 p_last_update_date => SYSDATE,
432 p_last_updated_by => G_USER_ID,
433 p_last_update_login => G_LOGIN_ID,
434 p_object_version_number => l_tar_dm_target_value_rec.object_version_number + 1,
435 p_target_id => l_tar_dm_target_value_rec.target_id,
436 p_target_value => l_tar_dm_target_value_rec.target_value,
437 p_target_operator => l_tar_dm_target_value_rec.target_operator,
438 p_range_value => l_tar_dm_target_value_rec.range_value,
439 p_description => l_tar_dm_target_value_rec.description
440 );
441
442 x_object_version_number := l_tar_dm_target_value_rec.object_version_number + 1;
443
444 --
445 -- End of API body.
446 --
447
448 -- Standard check for p_commit
449 IF FND_API.to_Boolean( p_commit )
450 THEN
451 COMMIT WORK;
452 END IF;
453
454 -- Debug Message
455 IF (AMS_DEBUG_HIGH_ON) THEN
456
457 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
458 END IF;
459
460 -- Standard call to get message count and if count is 1, get message info.
461 FND_MSG_PUB.Count_And_Get
462 (p_count => x_msg_count,
463 p_data => x_msg_data
464 );
465 EXCEPTION
466
467 WHEN AMS_Utility_PVT.resource_locked THEN
468 x_return_status := FND_API.g_ret_sts_error;
469 AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
470
471 WHEN FND_API.G_EXC_ERROR THEN
472 ROLLBACK TO UPDATE_Dm_Target_Value_PVT;
473 x_return_status := FND_API.G_RET_STS_ERROR;
474 -- Standard call to get message count and if count=1, get the message
475 FND_MSG_PUB.Count_And_Get (
476 p_encoded => FND_API.G_FALSE,
477 p_count => x_msg_count,
478 p_data => x_msg_data
479 );
480
481 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
482 ROLLBACK TO UPDATE_Dm_Target_Value_PVT;
483 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
484 -- Standard call to get message count and if count=1, get the message
485 FND_MSG_PUB.Count_And_Get (
486 p_encoded => FND_API.G_FALSE,
487 p_count => x_msg_count,
488 p_data => x_msg_data
489 );
490
491 WHEN OTHERS THEN
492 ROLLBACK TO UPDATE_Dm_Target_Value_PVT;
493 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
494 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
495 THEN
496 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
497 END IF;
498 -- Standard call to get message count and if count=1, get the message
499 FND_MSG_PUB.Count_And_Get (
500 p_encoded => FND_API.G_FALSE,
501 p_count => x_msg_count,
502 p_data => x_msg_data
503 );
504 End Update_Dm_Target_Value;
505
506 PROCEDURE Delete_TgtValues_For_Target ( p_target_id IN NUMBER)
507 IS
508 L_API_NAME CONSTANT VARCHAR2(30) := 'Delete_TgtValues_For_Target';
509
510 BEGIN
511 -- Standard Start of API savepoint
512 SAVEPOINT Delete_TgtValues_For_Target;
513
514 -- Debug Message
515 IF (AMS_DEBUG_HIGH_ON) THEN
516
517 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
518 END IF;
519
520 --
521 -- Api body
522 --
523 DELETE FROM ams_dm_target_values_tl
524 WHERE TARGET_VALUE_ID in (SELECT TARGET_VALUE_ID FROM AMS_DM_TARGET_VALUES_B WHERE TARGET_ID = p_TARGET_ID);
525
526 DELETE FROM AMS_DM_TARGET_VALUES_B
527 WHERE TARGET_ID = p_TARGET_ID;
528
529 --
530 -- End of API body
531 --
532
533 -- Debug Message
534 IF (AMS_DEBUG_HIGH_ON) THEN
535
536 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
537 END IF;
538
539 EXCEPTION
540
541 WHEN AMS_Utility_PVT.resource_locked THEN
542 AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
543
544 WHEN FND_API.G_EXC_ERROR THEN
545 ROLLBACK TO Delete_TgtValues_For_Target;
546
547 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
548 ROLLBACK TO Delete_TgtValues_For_Target;
549
550 WHEN OTHERS THEN
551 ROLLBACK TO Delete_TgtValues_For_Target;
552
553 End Delete_TgtValues_For_Target;
554
555
556
557
558 PROCEDURE Delete_Dm_Target_Value(
559 p_api_version_number IN NUMBER,
560 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
561 p_commit IN VARCHAR2 := FND_API.G_FALSE,
562 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
563 x_return_status OUT NOCOPY VARCHAR2,
564 x_msg_count OUT NOCOPY NUMBER,
565 x_msg_data OUT NOCOPY VARCHAR2,
566 p_target_value_id IN NUMBER,
567 p_object_version_number IN NUMBER
568 )
569
570 IS
571 L_API_NAME CONSTANT VARCHAR2(30) := 'Delete_Dm_Target_Value';
572 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
573 l_object_version_number NUMBER;
574 l_no_of_target_values NUMBER;
575 l_target_id NUMBER;
576 l_no_of_active_targets NUMBER;
577 l_datasource_id NUMBER;
578
579 -- Cursor to get the target id for the target value
580 CURSOR c_target_id (l_tgtValueId IN NUMBER) IS
581 SELECT target_id
582 FROM ams_dm_target_values_vl
583 WHERE target_value_id = l_tgtValueId;
584
585 -- Cursor to count the target values for a target
586 CURSOR c_target_values_count (l_tgtId IN NUMBER) IS
587 SELECT count(*)
588 FROM AMS_DM_TARGET_VALUES_VL
589 WHERE TARGET_ID = l_tgtId;
590
591 -- Cursor to get the data source id for the target
592 CURSOR c_datasource_id (l_tgtId IN NUMBER) IS
593 SELECT data_source_id
594 FROM ams_dm_targets_vl
595 WHERE target_id = l_tgtId;
596
597 -- Cursor to count the active targets defined for a data source
598 CURSOR c_target_count (l_dsId IN NUMBER) IS
599 SELECT count(*)
600 FROM AMS_DM_TARGETS_VL
601 WHERE DATA_SOURCE_ID = l_dsId
602 AND ACTIVE_FLAG = 'Y';
603
604 BEGIN
605 -- Standard Start of API savepoint
606 SAVEPOINT DELETE_Dm_Target_Value_PVT;
607
608 -- Standard call to check for call compatibility.
609 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
610 p_api_version_number,
611 l_api_name,
612 G_PKG_NAME)
613 THEN
614 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
615 END IF;
616
617 -- Initialize message list if p_init_msg_list is set to TRUE.
618 IF FND_API.to_Boolean( p_init_msg_list )
619 THEN
620 FND_MSG_PUB.initialize;
621 END IF;
622
623 -- Debug Message
624 IF (AMS_DEBUG_HIGH_ON) THEN
625
626 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
627 END IF;
628
629
630 -- Initialize API return status to SUCCESS
631 x_return_status := FND_API.G_RET_STS_SUCCESS;
632
633 --
634 -- Api body
635 --
636 -- Debug Message
637 IF (AMS_DEBUG_HIGH_ON) THEN
638
639 AMS_UTILITY_PVT.debug_message( 'Private API: Calling delete table handler');
640 END IF;
641
642 -- Get the target id for this target value record before deleting it
643 OPEN c_target_id(p_target_value_id);
644 FETCH c_target_id INTO l_target_id;
645 CLOSE c_target_id;
646
647 IF (AMS_DEBUG_HIGH_ON) THEN
648
649
650
651 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || ' Before Delete: TARGET_ID = ' || l_target_id );
652
653 END IF;
654
655 -- Invoke table handler(AMS_DM_TARGET_VALUES_B_PKG.Delete_Row)
656 AMS_DM_TARGET_VALUES_B_PKG.Delete_Row(
657 p_TARGET_VALUE_ID => p_TARGET_VALUE_ID);
658
659
660 -- After successfully deleteing the target value, check if there are no more
661 -- target values for the target. If none exist, then de-activate the target.
662 OPEN c_target_values_count(l_target_id);
663 FETCH c_target_values_count INTO l_no_of_target_values;
664 CLOSE c_target_values_count;
665
666
667 IF l_no_of_target_values = 0 THEN
668
669 -- Disable this target
670 update ams_dm_targets_b
671 set active_flag = 'N'
672 where target_id = l_target_id;
673
674 -- Also disable the associated data source if it has no more active targets
675 -- Get the data source id for this target
676 OPEN c_datasource_id(l_target_id);
677 FETCH c_datasource_id INTO l_datasource_id;
678 CLOSE c_datasource_id;
679
680 -- Count the number of active targets for the data source
681 OPEN c_target_count(l_datasource_id);
682 FETCH c_target_count INTO l_no_of_active_targets;
683 CLOSE c_target_count;
684
685 IF l_no_of_active_targets = 0 THEN
686 update ams_list_src_types
687 set enabled_flag = 'N'
688 where list_source_type_id = l_datasource_id;
689 END IF;
690
691 END IF;
692
693
694 --
695 -- End of API body
696 --
697
698 -- Standard check for p_commit
699 IF FND_API.to_Boolean( p_commit )
700 THEN
701 COMMIT WORK;
702 END IF;
703
704
705
706 -- Debug Message
707 IF (AMS_DEBUG_HIGH_ON) THEN
708
709 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
710 END IF;
711
712 -- Standard call to get message count and if count is 1, get message info.
713 FND_MSG_PUB.Count_And_Get
714 (p_count => x_msg_count,
715 p_data => x_msg_data
716 );
717 EXCEPTION
718
719 WHEN AMS_Utility_PVT.resource_locked THEN
720 x_return_status := FND_API.g_ret_sts_error;
721 AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
722
723 WHEN FND_API.G_EXC_ERROR THEN
724 ROLLBACK TO DELETE_Dm_Target_Value_PVT;
725 x_return_status := FND_API.G_RET_STS_ERROR;
726 -- Standard call to get message count and if count=1, get the message
727 FND_MSG_PUB.Count_And_Get (
728 p_encoded => FND_API.G_FALSE,
729 p_count => x_msg_count,
730 p_data => x_msg_data
731 );
732
733 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
734 ROLLBACK TO DELETE_Dm_Target_Value_PVT;
735 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
736 -- Standard call to get message count and if count=1, get the message
737 FND_MSG_PUB.Count_And_Get (
738 p_encoded => FND_API.G_FALSE,
739 p_count => x_msg_count,
740 p_data => x_msg_data
741 );
742
743 WHEN OTHERS THEN
744 ROLLBACK TO DELETE_Dm_Target_Value_PVT;
745 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
746 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
747 THEN
748 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
749 END IF;
750 -- Standard call to get message count and if count=1, get the message
751 FND_MSG_PUB.Count_And_Get (
752 p_encoded => FND_API.G_FALSE,
753 p_count => x_msg_count,
754 p_data => x_msg_data
755 );
756 End Delete_Dm_Target_Value;
757
758
759
760 -- Hint: Primary key needs to be returned.
761 PROCEDURE Lock_Dm_Target_Value(
762 p_api_version_number IN NUMBER,
763 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
764
765 x_return_status OUT NOCOPY VARCHAR2,
766 x_msg_count OUT NOCOPY NUMBER,
767 x_msg_data OUT NOCOPY VARCHAR2,
768
769 p_target_value_id IN NUMBER,
770 p_object_version IN NUMBER
771 )
772
773 IS
774 L_API_NAME CONSTANT VARCHAR2(30) := 'Lock_Dm_Target_Value';
775 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
776 L_FULL_NAME CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
777 l_TARGET_VALUE_ID NUMBER;
778
779 CURSOR c_Dm_Target_Value IS
780 SELECT TARGET_VALUE_ID
781 FROM AMS_DM_TARGET_VALUES_B
782 WHERE TARGET_VALUE_ID = p_TARGET_VALUE_ID
783 AND object_version_number = p_object_version
784 FOR UPDATE NOWAIT;
785
786 BEGIN
787
788 -- Debug Message
789 IF (AMS_DEBUG_HIGH_ON) THEN
790
791 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
792 END IF;
793
794 -- Initialize message list if p_init_msg_list is set to TRUE.
795 IF FND_API.to_Boolean( p_init_msg_list )
796 THEN
797 FND_MSG_PUB.initialize;
798 END IF;
799
800 -- Standard call to check for call compatibility.
801 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
802 p_api_version_number,
803 l_api_name,
804 G_PKG_NAME)
805 THEN
806 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
807 END IF;
808
809
810 -- Initialize API return status to SUCCESS
811 x_return_status := FND_API.G_RET_STS_SUCCESS;
812
813
814 ------------------------ lock -------------------------
815
816 IF (AMS_DEBUG_HIGH_ON) THEN
817
818
819
820 AMS_Utility_PVT.debug_message(l_full_name||': start');
821
822 END IF;
823 OPEN c_Dm_Target_Value;
824
825 FETCH c_Dm_Target_Value INTO l_TARGET_VALUE_ID;
826
827 IF (c_Dm_Target_Value%NOTFOUND) THEN
828 CLOSE c_Dm_Target_Value;
829 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
830 FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
831 FND_MSG_PUB.add;
832 END IF;
833 RAISE FND_API.g_exc_error;
834 END IF;
835
836 CLOSE c_Dm_Target_Value;
837
838 -------------------- finish --------------------------
839 FND_MSG_PUB.count_and_get(
840 p_encoded => FND_API.g_false,
841 p_count => x_msg_count,
842 p_data => x_msg_data);
843 IF (AMS_DEBUG_HIGH_ON) THEN
844
845 AMS_Utility_PVT.debug_message(l_full_name ||': end');
846 END IF;
847 EXCEPTION
848
849 WHEN AMS_Utility_PVT.resource_locked THEN
850 x_return_status := FND_API.g_ret_sts_error;
851 AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
852
853 WHEN FND_API.G_EXC_ERROR THEN
854 ROLLBACK TO LOCK_Dm_Target_Value_PVT;
855 x_return_status := FND_API.G_RET_STS_ERROR;
856 -- Standard call to get message count and if count=1, get the message
857 FND_MSG_PUB.Count_And_Get (
858 p_encoded => FND_API.G_FALSE,
859 p_count => x_msg_count,
860 p_data => x_msg_data
861 );
862
863 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
864 ROLLBACK TO LOCK_Dm_Target_Value_PVT;
865 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
866 -- Standard call to get message count and if count=1, get the message
867 FND_MSG_PUB.Count_And_Get (
868 p_encoded => FND_API.G_FALSE,
869 p_count => x_msg_count,
870 p_data => x_msg_data
871 );
872
873 WHEN OTHERS THEN
874 ROLLBACK TO LOCK_Dm_Target_Value_PVT;
875 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
876 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
877 THEN
878 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
879 END IF;
880 -- Standard call to get message count and if count=1, get the message
881 FND_MSG_PUB.Count_And_Get (
882 p_encoded => FND_API.G_FALSE,
883 p_count => x_msg_count,
884 p_data => x_msg_data
885 );
886 End Lock_Dm_Target_Value;
887
888
889 PROCEDURE check_uk_items(
890 p_dm_target_value_rec IN dm_target_value_rec_type,
891 p_validation_mode IN VARCHAR2 := JTF_PLSQL_API.g_create,
892 x_return_status OUT NOCOPY VARCHAR2)
893 IS
894 l_valid_flag VARCHAR2(1);
895
896 CURSOR c_op_value IS
897 SELECT FND_API.g_false
898 FROM ams_dm_target_values_b tvb
899 WHERE tvb.target_id = p_dm_target_value_rec.target_id
900 AND tvb.target_operator = p_dm_target_value_rec.target_operator
901 AND tvb.target_value = p_dm_target_value_rec.target_value
902 ;
903
904 -- March 17, 2003 - nyostos
905 -- Added following query for UPDATE mode
906 CURSOR c_op_value_updt IS
907 SELECT FND_API.g_false
908 FROM ams_dm_target_values_b tvb
909 WHERE tvb.target_id = p_dm_target_value_rec.target_id
910 AND tvb.target_operator = p_dm_target_value_rec.target_operator
911 AND tvb.target_value = p_dm_target_value_rec.target_value
912 AND tvb.target_value_id <> p_dm_target_value_rec.target_value_id
913 ;
914
915 BEGIN
916 x_return_status := FND_API.g_ret_sts_success;
917
918 -- validate uniqueness of primary key
919 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
920 l_valid_flag := AMS_Utility_PVT.check_uniqueness(
921 'AMS_DM_TARGET_VALUES_B',
922 'TARGET_VALUE_ID = ''' || p_dm_target_value_rec.TARGET_VALUE_ID ||''''
923 );
924 ELSE
925 l_valid_flag := AMS_Utility_PVT.check_uniqueness(
926 'AMS_DM_TARGET_VALUES_B',
927 'TARGET_VALUE_ID = ''' || p_dm_target_value_rec.TARGET_VALUE_ID ||
928 ''' AND TARGET_VALUE_ID <> ' || p_dm_target_value_rec.TARGET_VALUE_ID
929 );
930 END IF;
931
932 IF l_valid_flag = FND_API.g_false THEN
933 AMS_Utility_PVT.Error_Message('AMS_API_DUPLICATE_ID', 'ID_FIELD','TARGET_VALUE_ID');
934 x_return_status := FND_API.g_ret_sts_error;
935 RETURN;
936 END IF;
937
938 -- validate uniqueness of target_id, target_operator and target_value
939 l_valid_flag := FND_API.g_true;
940 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
941 OPEN c_op_value;
942 FETCH c_op_value INTO l_valid_flag;
943 CLOSE c_op_value;
944 ELSE
945 -- March 17, 2003 - nyostos
946 -- Added following check for UPDATE mode
947 OPEN c_op_value_updt;
948 FETCH c_op_value_updt INTO l_valid_flag;
949 CLOSE c_op_value_updt;
950 END IF;
951
952 IF l_valid_flag = FND_API.g_false THEN
953 AMS_Utility_PVT.Error_Message('AMS_API_DUPLICATE_ID', 'ID_FIELD','TARGET_OPERATOR');
954 x_return_status := FND_API.g_ret_sts_error;
955 END IF;
956 END check_uk_items;
957
958 PROCEDURE check_req_items(
959 p_dm_target_value_rec IN dm_target_value_rec_type,
960 p_validation_mode IN VARCHAR2 := JTF_PLSQL_API.g_create,
961 x_return_status OUT NOCOPY VARCHAR2
962 )
963 IS
964 BEGIN
965 x_return_status := FND_API.g_ret_sts_success;
966
967 IF p_validation_mode = JTF_PLSQL_API.g_create THEN
968
969 IF (AMS_DEBUG_HIGH_ON) THEN
970
971
972
973 ams_utility_pvt.debug_message('Private API:check_req_items for CREATE');
974
975 END IF;
976
977 IF p_dm_target_value_rec.target_value_id = FND_API.g_miss_num OR p_dm_target_value_rec.target_value_id IS NULL THEN
978 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_VALUE_ID');
979 x_return_status := FND_API.g_ret_sts_error;
980 END IF;
981 IF p_dm_target_value_rec.target_id = FND_API.g_miss_num OR p_dm_target_value_rec.target_id IS NULL THEN
982 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_ID');
983 x_return_status := FND_API.g_ret_sts_error;
984 END IF;
985 IF p_dm_target_value_rec.target_value = FND_API.g_miss_char OR p_dm_target_value_rec.target_value IS NULL THEN
986 --changed rosharma 19-feb-2003 Bug # 2853640
987 --AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_VALUE');
988 AMS_Utility_PVT.Error_Message('AMS_DM_NO_TARVAL');
989 --end change rosharma 19-feb-2003 Bug # 2853640
990 x_return_status := FND_API.g_ret_sts_error;
991 END IF;
992 IF p_dm_target_value_rec.target_operator = FND_API.g_miss_char OR p_dm_target_value_rec.target_operator IS NULL THEN
993 --changed rosharma 19-feb-2003 Bug # 2853640
994 --AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_OPERATOR');
995 AMS_Utility_PVT.Error_Message('AMS_DM_NO_TARVAL_OP');
996 --end change rosharma 19-feb-2003 Bug # 2853640
997 x_return_status := FND_API.g_ret_sts_error;
998 END IF;
999 ELSE
1000 IF (AMS_DEBUG_HIGH_ON) THEN
1001
1002 ams_utility_pvt.debug_message('Private API:check_req_items for UPDATE');
1003 END IF;
1004 IF p_dm_target_value_rec.target_value_id IS NULL THEN
1005 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_VALUE_ID');
1006 x_return_status := FND_API.g_ret_sts_error;
1007 END IF;
1008 IF p_dm_target_value_rec.last_update_date IS NULL THEN
1009 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','LAST_UPDATE_DATE');
1010 x_return_status := FND_API.g_ret_sts_error;
1011 END IF;
1012 IF p_dm_target_value_rec.last_updated_by IS NULL THEN
1013 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','LAST_UPDATED_BY');
1014 x_return_status := FND_API.g_ret_sts_error;
1015 END IF;
1016 IF p_dm_target_value_rec.creation_date IS NULL THEN
1017 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','CREATION_DATE');
1018 x_return_status := FND_API.g_ret_sts_error;
1019 END IF;
1020 IF p_dm_target_value_rec.created_by IS NULL THEN
1021 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','CREATED_BY');
1022 x_return_status := FND_API.g_ret_sts_error;
1023 END IF;
1024 IF p_dm_target_value_rec.last_update_login IS NULL THEN
1025 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','LAST_UPDATE_LOGIN');
1026 x_return_status := FND_API.g_ret_sts_error;
1027 END IF;
1028 IF p_dm_target_value_rec.object_version_number IS NULL THEN
1029 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','OBJECT_VERSION_NUMBER');
1030 x_return_status := FND_API.g_ret_sts_error;
1031 END IF;
1032 IF p_dm_target_value_rec.target_id IS NULL THEN
1033 AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_ID');
1034 x_return_status := FND_API.g_ret_sts_error;
1035 END IF;
1036 IF p_dm_target_value_rec.target_value IS NULL THEN
1037 --changed rosharma 19-feb-2003 Bug # 2853640
1038 --AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_VALUE');
1039 AMS_Utility_PVT.Error_Message('AMS_DM_NO_TARVAL');
1040 --end change rosharma 19-feb-2003 Bug # 2853640
1041 x_return_status := FND_API.g_ret_sts_error;
1042 END IF;
1043 IF p_dm_target_value_rec.target_operator IS NULL THEN
1044 --changed rosharma 19-feb-2003 Bug # 2853640
1045 --AMS_Utility_PVT.Error_Message('AMS_API_MISSING_FIELD', 'MISS_FIELD','TARGET_OPERATOR');
1046 AMS_Utility_PVT.Error_Message('AMS_DM_NO_TARVAL_OP');
1047 --end change rosharma 19-feb-2003 Bug # 2853640
1048 x_return_status := FND_API.g_ret_sts_error;
1049 END IF;
1050 END IF;
1051
1052 END check_req_items;
1053
1054 PROCEDURE check_dm_target_value_FK_items(
1055 p_dm_target_value_rec IN dm_target_value_rec_type,
1056 x_return_status OUT NOCOPY VARCHAR2
1057 )
1058 IS
1059 BEGIN
1060 x_return_status := FND_API.g_ret_sts_success;
1061
1062 --------------------target_id---------------------------
1063 IF p_dm_target_value_rec.target_id <> FND_API.g_miss_num THEN
1064 IF AMS_Utility_PVT.check_fk_exists(
1065 'ams_dm_targets_b',
1066 'target_id',
1067 p_dm_target_value_rec.target_id
1068 ) = FND_API.g_false
1069 THEN
1070 AMS_Utility_PVT.error_message ('AMS_API_INVALID_FK', 'COLUMN_NAME', 'TARGET_ID');
1071 x_return_status := FND_API.g_ret_sts_error;
1072 END IF;
1073 END IF;
1074
1075 END check_dm_target_value_FK_items;
1076
1077 PROCEDURE check_Lookup_items(
1078 p_dm_target_value_rec IN dm_target_value_rec_type,
1079 x_return_status OUT NOCOPY VARCHAR2
1080 )
1081 IS
1082 BEGIN
1083 x_return_status := FND_API.g_ret_sts_success;
1084
1085 -- target operator --
1086 IF p_dm_target_value_rec.target_operator <> FND_API.g_miss_char THEN
1087 IF AMS_Utility_PVT.check_lookup_exists(
1088 p_lookup_type => 'AMS_DM_TARGET_OPERATORS',
1089 p_lookup_code => p_dm_target_value_rec.target_operator
1090 ) = FND_API.g_false
1091 THEN
1092 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
1093 FND_MESSAGE.set_name('AMS', 'AMS_API_INVALID_LOOKUP');
1094 FND_MESSAGE.set_token ('LOOKUP_CODE', p_dm_target_value_rec.target_operator);
1095 FND_MESSAGE.set_token ('COLUMN_NAME', 'TARGET_OPERATOR');
1096 FND_MSG_PUB.add;
1097 END IF;
1098 x_return_status := FND_API.g_ret_sts_error;
1099 END IF;
1100 END IF;
1101 END check_Lookup_items;
1102
1103 PROCEDURE Check_dm_target_value_Items (
1104 P_dm_target_value_rec IN dm_target_value_rec_type,
1105 p_validation_mode IN VARCHAR2,
1106 x_return_status OUT NOCOPY VARCHAR2
1107 )
1108 IS
1109 BEGIN
1110
1111 -- Check Items Uniqueness API calls
1112
1113 check_uk_items(
1114 p_dm_target_value_rec => p_dm_target_value_rec,
1115 p_validation_mode => p_validation_mode,
1116 x_return_status => x_return_status);
1117 IF x_return_status <> FND_API.g_ret_sts_success THEN
1118 RETURN;
1119 END IF;
1120
1121 -- Check Items Required/NOT NULL API calls
1122 check_req_items(
1123 p_dm_target_value_rec => p_dm_target_value_rec,
1124 p_validation_mode => p_validation_mode,
1125 x_return_status => x_return_status);
1126 IF x_return_status <> FND_API.g_ret_sts_success THEN
1127 RETURN;
1128 END IF;
1129
1130 -- Check Items Foreign Keys API calls
1131 check_dm_target_value_FK_items(
1132 p_dm_target_value_rec => p_dm_target_value_rec,
1133 x_return_status => x_return_status);
1134 IF x_return_status <> FND_API.g_ret_sts_success THEN
1135 RETURN;
1136 END IF;
1137
1138 -- Check Items Lookups
1139 check_Lookup_items(
1140 p_dm_target_value_rec => p_dm_target_value_rec,
1141 x_return_status => x_return_status);
1142 IF x_return_status <> FND_API.g_ret_sts_success THEN
1143 RETURN;
1144 END IF;
1145
1146 END Check_dm_target_value_Items;
1147
1148
1149
1150 PROCEDURE Complete_dm_target_value_Rec (
1151 p_dm_target_value_rec IN dm_target_value_rec_type,
1152 x_complete_rec OUT NOCOPY dm_target_value_rec_type)
1153 IS
1154 l_return_status VARCHAR2(1);
1155
1156 CURSOR c_complete IS
1157 SELECT *
1158 FROM ams_dm_target_values_vl
1159 WHERE target_value_id = p_dm_target_value_rec.target_value_id;
1160 l_dm_target_value_rec c_complete%ROWTYPE;
1161 BEGIN
1162
1163 x_complete_rec := p_dm_target_value_rec;
1164
1165
1166 OPEN c_complete;
1167 FETCH c_complete INTO l_dm_target_value_rec;
1168 CLOSE c_complete;
1169
1170 -- target_value_id
1171 IF p_dm_target_value_rec.target_value_id = FND_API.g_miss_num THEN
1172 x_complete_rec.target_value_id := l_dm_target_value_rec.target_value_id;
1173 END IF;
1174
1175 -- last_update_date
1176 IF p_dm_target_value_rec.last_update_date = FND_API.g_miss_date THEN
1177 x_complete_rec.last_update_date := l_dm_target_value_rec.last_update_date;
1178 END IF;
1179
1180 -- last_updated_by
1181 IF p_dm_target_value_rec.last_updated_by = FND_API.g_miss_num THEN
1182 x_complete_rec.last_updated_by := l_dm_target_value_rec.last_updated_by;
1183 END IF;
1184
1185 -- creation_date
1186 IF p_dm_target_value_rec.creation_date = FND_API.g_miss_date THEN
1187 x_complete_rec.creation_date := l_dm_target_value_rec.creation_date;
1188 END IF;
1189
1190 -- created_by
1191 IF p_dm_target_value_rec.created_by = FND_API.g_miss_num THEN
1192 x_complete_rec.created_by := l_dm_target_value_rec.created_by;
1193 END IF;
1194
1195 -- last_update_login
1196 IF p_dm_target_value_rec.last_update_login = FND_API.g_miss_num THEN
1197 x_complete_rec.last_update_login := l_dm_target_value_rec.last_update_login;
1198 END IF;
1199
1200 -- object_version_number
1201 IF p_dm_target_value_rec.object_version_number = FND_API.g_miss_num THEN
1202 x_complete_rec.object_version_number := l_dm_target_value_rec.object_version_number;
1203 END IF;
1204
1205 -- target_id
1206 IF p_dm_target_value_rec.target_id = FND_API.g_miss_num THEN
1207 x_complete_rec.target_id := l_dm_target_value_rec.target_id;
1208 END IF;
1209
1210 -- target_value
1211 IF p_dm_target_value_rec.target_value = FND_API.g_miss_char THEN
1212 x_complete_rec.target_value := l_dm_target_value_rec.target_value;
1213 END IF;
1214
1215 -- target_operator
1216 IF p_dm_target_value_rec.target_operator = FND_API.g_miss_char THEN
1217 x_complete_rec.target_operator := l_dm_target_value_rec.target_operator;
1218 END IF;
1219
1220 -- range_value
1221 IF p_dm_target_value_rec.range_value = FND_API.g_miss_char THEN
1222 x_complete_rec.range_value := l_dm_target_value_rec.range_value;
1223 END IF;
1224
1225 -- description
1226 IF p_dm_target_value_rec.description = FND_API.g_miss_char THEN
1227 x_complete_rec.description := l_dm_target_value_rec.description;
1228 END IF;
1229
1230 END Complete_dm_target_value_Rec;
1231
1232 PROCEDURE Validate_dm_target_value(
1233 p_api_version_number IN NUMBER,
1234 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1235 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
1236 p_dm_target_value_rec IN dm_target_value_rec_type,
1237 p_validation_mode IN VARCHAR2,
1238 x_return_status OUT NOCOPY VARCHAR2,
1239 x_msg_count OUT NOCOPY NUMBER,
1240 x_msg_data OUT NOCOPY VARCHAR2
1241 )
1242 IS
1243 L_API_NAME CONSTANT VARCHAR2(30) := 'Validate_Dm_Target_Value';
1244 L_API_VERSION_NUMBER CONSTANT NUMBER := 1.0;
1245 l_object_version_number NUMBER;
1246 -- l_dm_target_value_rec AMS_Dm_Target_Value_PVT.dm_target_value_rec_type;
1247
1248 BEGIN
1249 -- Standard Start of API savepoint
1250 SAVEPOINT VALIDATE_Dm_Target_Value_;
1251
1252 -- Standard call to check for call compatibility.
1253 IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1254 p_api_version_number,
1255 l_api_name,
1256 G_PKG_NAME)
1257 THEN
1258 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1259 END IF;
1260
1261 -- Initialize message list if p_init_msg_list is set to TRUE.
1262 IF FND_API.to_Boolean( p_init_msg_list )
1263 THEN
1264 FND_MSG_PUB.initialize;
1265 END IF;
1266 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1267 Check_dm_target_value_Items(
1268 p_dm_target_value_rec => p_dm_target_value_rec,
1269 p_validation_mode => p_validation_mode,
1270 x_return_status => x_return_status
1271 );
1272
1273 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1274 RAISE FND_API.G_EXC_ERROR;
1275 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1276 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1277 END IF;
1278 END IF;
1279
1280 IF p_validation_level >= JTF_PLSQL_API.g_valid_level_record THEN
1281 Validate_dm_target_value_Rec(
1282 p_api_version_number => 1.0,
1283 p_init_msg_list => FND_API.G_FALSE,
1284 x_return_status => x_return_status,
1285 x_msg_count => x_msg_count,
1286 x_msg_data => x_msg_data,
1287 p_dm_target_value_rec => p_dm_target_value_rec);
1288
1289 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1290 RAISE FND_API.G_EXC_ERROR;
1291 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1292 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1293 END IF;
1294 END IF;
1295
1296
1297 -- Debug Message
1298 IF (AMS_DEBUG_HIGH_ON) THEN
1299
1300 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
1301 END IF;
1302
1303
1304 -- Initialize API return status to SUCCESS
1305 x_return_status := FND_API.G_RET_STS_SUCCESS;
1306
1307
1308 -- Debug Message
1309 IF (AMS_DEBUG_HIGH_ON) THEN
1310
1311 AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
1312 END IF;
1313
1314 -- Standard call to get message count and if count is 1, get message info.
1315 FND_MSG_PUB.Count_And_Get
1316 (p_count => x_msg_count,
1317 p_data => x_msg_data
1318 );
1319 EXCEPTION
1320
1321 WHEN AMS_Utility_PVT.resource_locked THEN
1322 x_return_status := FND_API.g_ret_sts_error;
1323 AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
1324
1325 WHEN FND_API.G_EXC_ERROR THEN
1326 ROLLBACK TO VALIDATE_Dm_Target_Value_;
1327 x_return_status := FND_API.G_RET_STS_ERROR;
1328 -- Standard call to get message count and if count=1, get the message
1329 FND_MSG_PUB.Count_And_Get (
1330 p_encoded => FND_API.G_FALSE,
1331 p_count => x_msg_count,
1332 p_data => x_msg_data
1333 );
1334
1335 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1336 ROLLBACK TO VALIDATE_Dm_Target_Value_;
1337 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1338 -- Standard call to get message count and if count=1, get the message
1339 FND_MSG_PUB.Count_And_Get (
1340 p_encoded => FND_API.G_FALSE,
1341 p_count => x_msg_count,
1342 p_data => x_msg_data
1343 );
1344
1345 WHEN OTHERS THEN
1346 ROLLBACK TO VALIDATE_Dm_Target_Value_;
1347 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1348 IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1349 THEN
1350 FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1351 END IF;
1352 -- Standard call to get message count and if count=1, get the message
1353 FND_MSG_PUB.Count_And_Get (
1354 p_encoded => FND_API.G_FALSE,
1355 p_count => x_msg_count,
1356 p_data => x_msg_data
1357 );
1358 End Validate_Dm_Target_Value;
1359
1360
1361 PROCEDURE Validate_dm_target_value_rec(
1362 p_api_version_number IN NUMBER,
1363 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1364 x_return_status OUT NOCOPY VARCHAR2,
1365 x_msg_count OUT NOCOPY NUMBER,
1366 x_msg_data OUT NOCOPY VARCHAR2,
1367 p_dm_target_value_rec IN dm_target_value_rec_type
1368 )
1369 IS
1370 l_data_type VARCHAR2(30) := NULL;
1371
1372 -- Cursor to get the data type for the target field
1373 -- Added rosharma 28-Nov-2002
1374 CURSOR c_field_data_type (l_tgtId IN NUMBER) IS
1375 SELECT a.field_data_type
1376 FROM ams_list_src_fields a, ams_dm_targets_b b
1377 WHERE b.target_id = l_tgtId
1378 AND a.list_source_field_id = b.source_field_id;
1379
1380 BEGIN
1381 -- Debug Message
1382 IF (AMS_DEBUG_HIGH_ON) THEN
1383
1384 AMS_UTILITY_PVT.debug_message('Private API: Validate_dm_target_value_rec');
1385 END IF;
1386
1387 -- Initialize message list if p_init_msg_list is set to TRUE.
1388 IF FND_API.to_Boolean( p_init_msg_list )
1389 THEN
1390 FND_MSG_PUB.initialize;
1391 END IF;
1392
1393 -- Initialize API return status to SUCCESS
1394 x_return_status := FND_API.G_RET_STS_SUCCESS;
1395
1396 -- if target_operator = BETWEEN then range value is required
1397 -- and the range must be from lower value to higher value
1398 IF p_dm_target_value_rec.target_operator IS NOT NULL AND
1399 p_dm_target_value_rec.target_operator <> FND_API.g_miss_char THEN
1400 IF p_dm_target_value_rec.target_operator = 'BETWEEN' THEN
1401 IF p_dm_target_value_rec.range_value IS NULL OR
1402 p_dm_target_value_rec.range_value = FND_API.g_miss_char THEN
1403 AMS_Utility_PVT.error_message ('AMS_DM_TARVAL_NO_BETWEEN');
1404 x_return_status := FND_API.G_RET_STS_ERROR;
1405 ELSE
1406 DECLARE
1407 l_low NUMBER;
1408 l_high NUMBER;
1409 BEGIN
1410 -- try to convert to numbers to do
1411 -- between numbers, else use chars
1412 -- if invalid number exception thrown
1413 l_low := TO_NUMBER (p_dm_target_value_rec.target_value);
1414 l_high := TO_NUMBER (p_dm_target_value_rec.range_value);
1415 IF l_low > l_high THEN
1416 AMS_Utility_PVT.error_message ('AMS_DM_TARVAL_INVALID_RANGE');
1417 x_return_status := FND_API.G_RET_STS_ERROR;
1418 END IF;
1419 EXCEPTION
1420 WHEN VALUE_ERROR THEN
1421 NULL; -- we don't care about char comparisons for between
1422 END;
1423 END IF;
1424 END IF;
1425 -- x_return_status := FND_API.G_RET_STS_ERROR;
1426 END IF;
1427
1428 -- start add rosharma 28-Nov-2002
1429 -- if target field type is NUMBER then value must be a number
1430 OPEN c_field_data_type(p_dm_target_value_rec.TARGET_ID);
1431 FETCH c_field_data_type INTO l_data_type;
1432 CLOSE c_field_data_type;
1433
1434 IF l_data_type = 'NUMBER' THEN
1435 DECLARE
1436 l_value NUMBER;
1437 BEGIN
1438 l_value := TO_NUMBER (p_dm_target_value_rec.target_value);
1439 IF p_dm_target_value_rec.target_operator IS NOT NULL AND
1440 p_dm_target_value_rec.target_operator <> FND_API.g_miss_char THEN
1441 IF p_dm_target_value_rec.target_operator = 'BETWEEN' THEN
1442 DECLARE
1443 l_high_value NUMBER;
1444 BEGIN
1445 l_high_value := TO_NUMBER (p_dm_target_value_rec.range_value);
1446 END;
1447 END IF;
1448 END IF;
1449 EXCEPTION
1450 WHEN VALUE_ERROR THEN
1451 AMS_Utility_PVT.error_message ('AMS_DM_TARVAL_NOT_NUMBER');
1452 x_return_status := FND_API.G_RET_STS_ERROR;
1453 END;
1454 END IF;
1455 -- end add rosharma 28-Nov-2002
1456
1457 -- Standard call to get message count and if count is 1, get message info.
1458 FND_MSG_PUB.Count_And_Get
1459 (p_count => x_msg_count,
1460 p_data => x_msg_data
1461 );
1462 END Validate_dm_target_value_Rec;
1463
1464 END AMS_Dm_Target_Value_PVT;