DBA Data[Home] [Help]

PACKAGE BODY: APPS.AMS_MET_TPL_DTL_PVT

Source


1 PACKAGE BODY Ams_Met_Tpl_Dtl_Pvt AS
2 /* $Header: amsvmtdb.pls 115.8 2003/10/25 00:21:35 choang ship $ */
3 -- ===============================================================
4 -- Start of Comments
5 -- Package name
6 --          AMS_Met_Tpl_Dtl_PVT
7 -- Purpose
8 --
9 -- History
10 --   03/05/2002  dmvincen  Created.
11 --   30/01/2003  sunkumar  restricted updation for seeded metrics apart from the enable flag.
12 --  24-oct-2003  choang    added FORMULA for enh 3130095
13 --
14 -- NOTE
15 --
16 -- End of Comments
17 -- ===============================================================
18 
19 
20 G_PKG_NAME CONSTANT VARCHAR2(30):= 'AMS_Met_Tpl_Dtl_PVT';
21 G_FILE_NAME CONSTANT VARCHAR2(12) := 'amsvmtdb.pls';
22 
23 AMS_DEBUG_HIGH_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH);
24 AMS_DEBUG_LOW_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW);
25 AMS_DEBUG_MEDIUM_ON boolean := FND_MSG_PUB.CHECK_MSG_LEVEL(FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM);
26 
27 PROCEDURE Complete_met_tpl_dtl_Rec (
28    p_ref_met_tpl_dtl_rec IN met_tpl_dtl_rec_type,
29    x_tar_met_tpl_dtl_rec IN OUT NOCOPY met_tpl_dtl_rec_type);
30 
31 -- Hint: Primary key needs to be returned.
32 PROCEDURE Create_Met_Tpl_Dtl(
33     p_api_version_number         IN   NUMBER,
34     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
35     p_commit                     IN   VARCHAR2     := FND_API.G_FALSE,
36     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
37 
38     x_return_status              OUT NOCOPY  VARCHAR2,
39     x_msg_count                  OUT NOCOPY  NUMBER,
40     x_msg_data                   OUT NOCOPY  VARCHAR2,
41 
42     p_met_tpl_dtl_rec            IN   met_tpl_dtl_rec_type := g_miss_met_tpl_dtl_rec,
43     x_metric_template_detail_id  OUT NOCOPY  NUMBER
44      )
45 
46 IS
47    L_API_NAME                  CONSTANT VARCHAR2(30) := 'Create_Met_Tpl_Dtl';
48    L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
49    l_return_status_full        VARCHAR2(1);
50    l_object_version_number     NUMBER := 1;
51    l_org_id                    NUMBER := FND_API.G_MISS_NUM;
52    l_METRIC_TEMPLATE_DETAIL_ID NUMBER;
53    l_dummy                     NUMBER;
54 
55    CURSOR c_id IS
56       SELECT AMS_MET_TPL_DETAILS_s.NEXTVAL
57       FROM dual;
58 
59    CURSOR c_id_exists (l_id IN NUMBER) IS
60       SELECT 1
61       FROM AMS_MET_TPL_DETAILS
62       WHERE METRIC_TEMPLATE_DETAIL_ID = l_id;
63 
64    l_met_tpl_dtl_rec  met_tpl_dtl_rec_type := p_met_tpl_dtl_rec;
65 
66 BEGIN
67    -- Standard Start of API savepoint
68    SAVEPOINT CREATE_Met_Tpl_Dtl_PVT;
69 
70    -- Standard call to check for call compatibility.
71    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
72                                         p_api_version_number,
73                                         l_api_name,
74                                         G_PKG_NAME)
75    THEN
76        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
77    END IF;
78 
79    -- Initialize message list if p_init_msg_list is set to TRUE.
80    IF FND_API.to_Boolean( p_init_msg_list )
81    THEN
82       FND_MSG_PUB.initialize;
83    END IF;
84 
85    -- Debug Message
86    IF (AMS_DEBUG_HIGH_ON) THEN
87 
88    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': start');
89    END IF;
90 
91    --sunkumar 30/01/2003
92   --check if the template is a seeded one
93  /* IF p_met_tpl_dtl_rec.metric_tpl_header_id  < 10000 THEN
94    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
95       THEN
96          Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_METR_TPL_SEEDED');
97       END IF;
98 
99       RAISE FND_API.G_EXC_ERROR;
100     END IF; */
101 
102 
103    -- Initialize API return status to SUCCESS
104    x_return_status := FND_API.G_RET_STS_SUCCESS;
105 
106    -- Local variable initialization
107 
108    IF l_met_tpl_dtl_rec.METRIC_TEMPLATE_DETAIL_ID IS NULL OR
109       l_met_tpl_dtl_rec.METRIC_TEMPLATE_DETAIL_ID = FND_API.g_miss_num THEN
110       LOOP
111          l_dummy := NULL;
112          OPEN c_id;
113          FETCH c_id INTO l_METRIC_TEMPLATE_DETAIL_ID;
114          CLOSE c_id;
115 
116          OPEN c_id_exists(l_METRIC_TEMPLATE_DETAIL_ID);
117          FETCH c_id_exists INTO l_dummy;
118          CLOSE c_id_exists;
119          EXIT WHEN l_dummy IS NULL;
120       END LOOP;
121       l_met_tpl_dtl_rec.metric_template_detail_id := l_metric_template_detail_id;
122    END IF;
123 
124    -- =========================================================================
125    -- Validate Environment
126    -- =========================================================================
127 
128    IF FND_GLOBAL.User_Id IS NULL
129    THEN
130       Ams_Utility_Pvt.Error_Message(p_message_name => 'USER_PROFILE_MISSING');
131       RAISE FND_API.G_EXC_ERROR;
132    END IF;
133 
134    IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
135    THEN
136        -- Debug message
137        IF (AMS_DEBUG_HIGH_ON) THEN
138 
139        Ams_Utility_Pvt.debug_message('Private API: Validate_Met_Tpl_Dtl');
140        END IF;
141 
142        -- Invoke validation procedures
143        Validate_met_tpl_dtl(
144          p_api_version_number     => 1.0,
145          p_init_msg_list    => FND_API.G_FALSE,
146          p_validation_level => p_validation_level,
147          p_validation_mode => JTF_PLSQL_API.g_create,
148          p_met_tpl_dtl_rec  =>  l_met_tpl_dtl_rec,
149          x_return_status    => x_return_status,
150          x_msg_count        => x_msg_count,
151          x_msg_data         => x_msg_data);
152    END IF;
153 
154    IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
155        RAISE FND_API.G_EXC_ERROR;
156    END IF;
157 
158 
159    -- Debug Message
160    IF (AMS_DEBUG_HIGH_ON) THEN
161 
162    Ams_Utility_Pvt.debug_message( 'Private API: Calling create table handler');
163    END IF;
164 
165    -- Invoke table handler(AMS_MET_TPL_DETAILS_PKG.Insert_Row)
166    Ams_Met_Tpl_Details_Pkg.Insert_Row(
167        px_metric_template_detail_id  => l_metric_template_detail_id,
168        p_last_update_date  => SYSDATE,
169        p_last_updated_by  => FND_GLOBAL.USER_ID,
170        p_creation_date  => SYSDATE,
171        p_created_by  => FND_GLOBAL.USER_ID,
172        p_last_update_login  => FND_GLOBAL.CONC_LOGIN_ID,
173        px_object_version_number  => l_object_version_number,
174        p_metric_tpl_header_id  => p_met_tpl_dtl_rec.metric_tpl_header_id,
175        p_metric_id  => p_met_tpl_dtl_rec.metric_id,
176        p_enabled_flag  => p_met_tpl_dtl_rec.enabled_flag);
177 
178        x_metric_template_detail_id := l_metric_template_detail_id;
179    IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
180        RAISE FND_API.G_EXC_ERROR;
181    END IF;
182 --
183 -- End of API body
184 --
185 
186    -- Standard check for p_commit
187    IF FND_API.to_Boolean( p_commit )
188    THEN
189       COMMIT WORK;
190    END IF;
191 
192 
193    -- Debug Message
194    IF (AMS_DEBUG_HIGH_ON) THEN
195 
196    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': end');
197    END IF;
198 
199    -- Standard call to get message count and if count is 1, get message info.
200    FND_MSG_PUB.Count_And_Get
201      (p_count          =>   x_msg_count,
202       p_data           =>   x_msg_data
203    );
204 EXCEPTION
205 
206    WHEN Ams_Utility_Pvt.resource_locked THEN
207      x_return_status := FND_API.g_ret_sts_error;
208      Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
209 
210    WHEN FND_API.G_EXC_ERROR THEN
211      ROLLBACK TO CREATE_Met_Tpl_Dtl_PVT;
212      x_return_status := FND_API.G_RET_STS_ERROR;
213      -- Standard call to get message count and if count=1, get the message
214      FND_MSG_PUB.Count_And_Get (
215             p_encoded => FND_API.G_FALSE,
216             p_count   => x_msg_count,
217             p_data    => x_msg_data
218      );
219 
220    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
221      ROLLBACK TO CREATE_Met_Tpl_Dtl_PVT;
222      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
223      -- Standard call to get message count and if count=1, get the message
224      FND_MSG_PUB.Count_And_Get (
225             p_encoded => FND_API.G_FALSE,
226             p_count => x_msg_count,
227             p_data  => x_msg_data
228      );
229 
230    WHEN OTHERS THEN
231      ROLLBACK TO CREATE_Met_Tpl_Dtl_PVT;
232      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
233      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
234      THEN
235         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
236      END IF;
237      -- Standard call to get message count and if count=1, get the message
238      FND_MSG_PUB.Count_And_Get (
239             p_encoded => FND_API.G_FALSE,
240             p_count => x_msg_count,
241             p_data  => x_msg_data
242      );
243 END Create_Met_Tpl_Dtl;
244 
245 
246 PROCEDURE Update_Met_Tpl_Dtl(
247    p_api_version_number         IN   NUMBER,
248    p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
249    p_commit                     IN   VARCHAR2     := FND_API.G_FALSE,
250    p_validation_level           IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
251 
252    x_return_status              OUT NOCOPY  VARCHAR2,
253    x_msg_count                  OUT NOCOPY  NUMBER,
254    x_msg_data                   OUT NOCOPY  VARCHAR2,
255 
256    p_met_tpl_dtl_rec            IN    met_tpl_dtl_rec_type,
257    x_object_version_number      OUT NOCOPY  NUMBER
258    )
259 
260 IS
261    CURSOR c_get_met_tpl_dtl(l_metric_template_detail_id NUMBER) IS
262        SELECT METRIC_TEMPLATE_DETAIL_ID,
263              LAST_UPDATE_DATE,
264             LAST_UPDATED_BY,
265             CREATION_DATE,
266             CREATED_BY,
267             LAST_UPDATE_LOGIN,
268             OBJECT_VERSION_NUMBER,
269             METRIC_TPL_HEADER_ID,
270             METRIC_ID,
271             ENABLED_FLAG
272        FROM  AMS_MET_TPL_DETAILS
273       WHERE METRIC_TEMPLATE_DETAIL_ID = l_metric_template_detail_id;
274 
275    L_API_NAME                  CONSTANT VARCHAR2(30) := 'Update_Met_Tpl_Dtl';
276    L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
277    -- Local Variables
278    l_object_version_number     NUMBER;
279    l_METRIC_TEMPLATE_DETAIL_ID NUMBER;
280    l_ref_met_tpl_dtl_rec  met_tpl_dtl_rec_type ;
281    l_tar_met_tpl_dtl_rec  met_tpl_dtl_rec_type := p_met_tpl_dtl_rec;
282    l_rowid  ROWID;
283 
284 BEGIN
285    -- Standard Start of API savepoint
286    SAVEPOINT UPDATE_Met_Tpl_Dtl_PVT;
287 
288    -- Standard call to check for call compatibility.
289    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
290                                         p_api_version_number,
291                                         l_api_name,
292                                         G_PKG_NAME)
293    THEN
294        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
295    END IF;
296 
297    -- Initialize message list if p_init_msg_list is set to TRUE.
298    IF FND_API.to_Boolean( p_init_msg_list )
299    THEN
300       FND_MSG_PUB.initialize;
301    END IF;
302 
303    -- Debug Message
304    IF (AMS_DEBUG_HIGH_ON) THEN
305 
306    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': start');
307    END IF;
308 
309 
310    -- Initialize API return status to SUCCESS
311    x_return_status := FND_API.G_RET_STS_SUCCESS;
312 
313    -- Debug Message
314    IF (AMS_DEBUG_HIGH_ON) THEN
315 
316    Ams_Utility_Pvt.debug_message('Private API: - Open Cursor to Select');
317    END IF;
318 
319    OPEN c_get_Met_Tpl_Dtl( l_tar_met_tpl_dtl_rec.metric_template_detail_id);
320 
321    FETCH c_get_Met_Tpl_Dtl INTO l_ref_met_tpl_dtl_rec;
322 
323    IF ( c_get_Met_Tpl_Dtl%NOTFOUND) THEN
324       CLOSE c_get_Met_Tpl_Dtl;
325       Ams_Utility_Pvt.Error_Message(p_message_name => 'API_MISSING_UPDATE_TARGET',
326          p_token_name   => 'INFO',
327          p_token_value  => 'Met_Tpl_Dtl');
328       RAISE FND_API.G_EXC_ERROR;
329    END IF;
330 
331    -- Debug Message
332    IF (AMS_DEBUG_HIGH_ON) THEN
333 
334    Ams_Utility_Pvt.debug_message('Private API: - Close Cursor');
335    END IF;
336    CLOSE c_get_Met_Tpl_Dtl;
337 
338    Complete_met_tpl_dtl_rec(l_ref_met_tpl_dtl_rec, l_tar_met_tpl_dtl_rec);
339 
340    IF (l_tar_met_tpl_dtl_rec.object_version_number IS NULL OR
341        l_tar_met_tpl_dtl_rec.object_version_number = FND_API.G_MISS_NUM ) THEN
342       Ams_Utility_Pvt.Error_Message(p_message_name => 'API_VERSION_MISSING',
343          p_token_name   => 'COLUMN',
344          p_token_value  => 'Last_Update_Date');
345       RAISE FND_API.G_EXC_ERROR;
346    END IF;
347 
348    -- Check Whether record has been changed by someone else
349    IF (l_tar_met_tpl_dtl_rec.object_version_number <> l_ref_met_tpl_dtl_rec.object_version_number) THEN
350       Ams_Utility_Pvt.Error_Message(p_message_name => 'API_RECORD_CHANGED',
351          p_token_name   => 'INFO',
352          p_token_value  => 'Met_Tpl_Dtl');
353       RAISE FND_API.G_EXC_ERROR;
354    END IF;
355 
356 
357  --sunkumar 30/01/2003
358   --check if we are trying to update a seeded metric template
359   IF p_met_tpl_dtl_rec.metric_tpl_header_id  < 10000 THEN
360    IF (( (l_tar_met_tpl_dtl_rec.metric_template_detail_id <>l_ref_met_tpl_dtl_rec.metric_template_detail_id )
361 	  OR (l_tar_met_tpl_dtl_rec.metric_id   <>l_ref_met_tpl_dtl_rec.metric_id)
362 	  OR (l_tar_met_tpl_dtl_rec.metric_tpl_header_id <>l_ref_met_tpl_dtl_rec.metric_tpl_header_id))
363 	  AND (l_tar_met_tpl_dtl_rec.enabled_flag=l_ref_met_tpl_dtl_rec.enabled_flag)) THEN
364      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
365         THEN
366            Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_METR_TPL_SEEDED_MOD');
367         END IF;
368 
369 
370         RAISE FND_API.G_EXC_ERROR;
371      END IF;
372    END IF;
373 
374 
375 
376 
377    IF ( p_validation_level >= FND_API.G_VALID_LEVEL_FULL)
378    THEN
379       -- Debug message
380       IF (AMS_DEBUG_HIGH_ON) THEN
381 
382       Ams_Utility_Pvt.debug_message('Private API: Validate_Met_Tpl_Dtl');
383       END IF;
384 
385       -- Invoke validation procedures
386       Validate_met_tpl_dtl(
387         p_api_version_number => 1.0,
388         p_init_msg_list    => FND_API.G_FALSE,
389         p_validation_level => p_validation_level,
390         p_validation_mode  => JTF_PLSQL_API.g_update,
391         p_met_tpl_dtl_rec  => l_tar_met_tpl_dtl_rec,
392         x_return_status    => x_return_status,
393         x_msg_count        => x_msg_count,
394         x_msg_data         => x_msg_data);
395       -- Debug message
396       IF (AMS_DEBUG_HIGH_ON) THEN
397 
398       Ams_Utility_Pvt.debug_message('Private API: Validate_Met_Tpl_Dtl: return status='||x_return_status);
399       END IF;
400    END IF;
401 
402    IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
403       RAISE FND_API.G_EXC_ERROR;
404    END IF;
405 
406    l_object_version_number :=
407        l_ref_met_tpl_dtl_rec.object_version_number + 1;
408 
409    -- Debug Message
410    IF (AMS_DEBUG_HIGH_ON) THEN
411 
412    Ams_Utility_Pvt.debug_message('Private API: Calling update table handler');
413    END IF;
414 
415    -- Invoke table handler(AMS_MET_TPL_DETAILS_PKG.Update_Row)
416    Ams_Met_Tpl_Details_Pkg.Update_Row(
417       p_metric_template_detail_id  => p_met_tpl_dtl_rec.metric_template_detail_id,
418       p_last_update_date  => SYSDATE,
419       p_last_updated_by  => FND_GLOBAL.USER_ID,
420       p_last_update_login  => FND_GLOBAL.CONC_LOGIN_ID,
421       p_object_version_number  => l_object_version_number,
422       p_metric_tpl_header_id  => p_met_tpl_dtl_rec.metric_tpl_header_id,
423       p_metric_id  => p_met_tpl_dtl_rec.metric_id,
424       p_enabled_flag  => p_met_tpl_dtl_rec.enabled_flag);
425 
426    --
427    -- End of API body.
428    --
429 
430    -- Standard check for p_commit
431    IF FND_API.to_Boolean( p_commit )
432    THEN
433       COMMIT WORK;
434    END IF;
435 
436 
437    -- Debug Message
438    IF (AMS_DEBUG_HIGH_ON) THEN
439 
440    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': end');
441    END IF;
442 
443    -- Standard call to get message count and if count is 1, get message info.
444    FND_MSG_PUB.Count_And_Get
445      (p_count          =>   x_msg_count,
446       p_data           =>   x_msg_data
447    );
448 EXCEPTION
449 
450    WHEN Ams_Utility_Pvt.resource_locked THEN
451      x_return_status := FND_API.g_ret_sts_error;
452      Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
453 
454    WHEN FND_API.G_EXC_ERROR THEN
455      ROLLBACK TO UPDATE_Met_Tpl_Dtl_PVT;
456      x_return_status := FND_API.G_RET_STS_ERROR;
457      -- Standard call to get message count and if count=1, get the message
458      FND_MSG_PUB.Count_And_Get (
459             p_encoded => FND_API.G_FALSE,
460             p_count   => x_msg_count,
461             p_data    => x_msg_data
462      );
463 
464    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
465      ROLLBACK TO UPDATE_Met_Tpl_Dtl_PVT;
466      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
467      -- Standard call to get message count and if count=1, get the message
468      FND_MSG_PUB.Count_And_Get (
469             p_encoded => FND_API.G_FALSE,
470             p_count => x_msg_count,
471             p_data  => x_msg_data
472      );
473 
474    WHEN OTHERS THEN
475      ROLLBACK TO UPDATE_Met_Tpl_Dtl_PVT;
476      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
477      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
478      THEN
479         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
480      END IF;
481      -- Standard call to get message count and if count=1, get the message
482      FND_MSG_PUB.Count_And_Get (
483             p_encoded => FND_API.G_FALSE,
484             p_count => x_msg_count,
485             p_data  => x_msg_data
486      );
487 END Update_Met_Tpl_Dtl;
488 
489 
490 PROCEDURE Delete_Met_Tpl_Dtl(
491     p_api_version_number         IN   NUMBER,
492     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
493     p_commit                     IN   VARCHAR2     := FND_API.G_FALSE,
494     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
495     x_return_status              OUT NOCOPY  VARCHAR2,
496     x_msg_count                  OUT NOCOPY  NUMBER,
497     x_msg_data                   OUT NOCOPY  VARCHAR2,
498     p_metric_template_detail_id  IN   NUMBER,
499     p_object_version_number      IN   NUMBER
500     )
501 
502 IS
503    L_API_NAME                  CONSTANT VARCHAR2(30) := 'Delete_Met_Tpl_Dtl';
504    L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
505    l_object_version_number     NUMBER;
506 
507 BEGIN
508    -- Standard Start of API savepoint
509    SAVEPOINT DELETE_Met_Tpl_Dtl_PVT;
510 
511    -- Standard call to check for call compatibility.
512    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
513                                         p_api_version_number,
514                                         l_api_name,
515                                         G_PKG_NAME)
516    THEN
517        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
518    END IF;
519 
520    -- Initialize message list if p_init_msg_list is set to TRUE.
521    IF FND_API.to_Boolean( p_init_msg_list )
522    THEN
523       FND_MSG_PUB.initialize;
524    END IF;
525 
526    -- Debug Message
527    IF (AMS_DEBUG_HIGH_ON) THEN
528 
529    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': start');
530    END IF;
531 
532   --sunkumar 30/01/2003
533   --check if the template is a seeded one
534   IF  p_metric_template_detail_id   < 10000 THEN
535    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
536       THEN
537          Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_METR_TPL_SEEDED');
538       END IF;
539 
540       RAISE FND_API.G_EXC_ERROR;
541     END IF;
542 
543    -- Initialize API return status to SUCCESS
544    x_return_status := FND_API.G_RET_STS_SUCCESS;
545 
546    --
547    -- Api body
548    --
549    -- Debug Message
550    IF (AMS_DEBUG_HIGH_ON) THEN
551 
552    Ams_Utility_Pvt.debug_message( 'Private API: Calling delete table handler');
553    END IF;
554 
555    -- Invoke table handler(AMS_MET_TPL_DETAILS_PKG.Delete_Row)
556    Ams_Met_Tpl_Details_Pkg.Delete_Row(
557        p_METRIC_TEMPLATE_DETAIL_ID  => p_METRIC_TEMPLATE_DETAIL_ID);
558    --
559    -- End of API body
560    --
561 
562    -- Standard check for p_commit
563    IF FND_API.to_Boolean( p_commit )
564    THEN
565       COMMIT WORK;
566    END IF;
567 
568 
569    -- Debug Message
570    IF (AMS_DEBUG_HIGH_ON) THEN
571 
572    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': end');
573    END IF;
574 
575    -- Standard call to get message count and if count is 1, get message info.
576    FND_MSG_PUB.Count_And_Get
577      (p_count          =>   x_msg_count,
578       p_data           =>   x_msg_data
579    );
580 EXCEPTION
581 
582    WHEN Ams_Utility_Pvt.resource_locked THEN
583      x_return_status := FND_API.g_ret_sts_error;
584      Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
585 
586    WHEN FND_API.G_EXC_ERROR THEN
587      ROLLBACK TO DELETE_Met_Tpl_Dtl_PVT;
588      x_return_status := FND_API.G_RET_STS_ERROR;
589      -- Standard call to get message count and if count=1, get the message
590      FND_MSG_PUB.Count_And_Get (
591             p_encoded => FND_API.G_FALSE,
592             p_count   => x_msg_count,
593             p_data    => x_msg_data
594      );
595 
596    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
597      ROLLBACK TO DELETE_Met_Tpl_Dtl_PVT;
598      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
599      -- Standard call to get message count and if count=1, get the message
600      FND_MSG_PUB.Count_And_Get (
601             p_encoded => FND_API.G_FALSE,
602             p_count => x_msg_count,
603             p_data  => x_msg_data
604      );
605 
606    WHEN OTHERS THEN
607      ROLLBACK TO DELETE_Met_Tpl_Dtl_PVT;
608      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
609      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
610      THEN
611         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
612      END IF;
613      -- Standard call to get message count and if count=1, get the message
614      FND_MSG_PUB.Count_And_Get (
615             p_encoded => FND_API.G_FALSE,
616             p_count => x_msg_count,
617             p_data  => x_msg_data
618      );
619 END Delete_Met_Tpl_Dtl;
620 
621 
622 
623 -- Hint: Primary key needs to be returned.
624 PROCEDURE Lock_Met_Tpl_Dtl(
625     p_api_version_number         IN   NUMBER,
626     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
627 
628     x_return_status              OUT NOCOPY  VARCHAR2,
629     x_msg_count                  OUT NOCOPY  NUMBER,
630     x_msg_data                   OUT NOCOPY  VARCHAR2,
631 
632     p_metric_template_detail_id  IN  NUMBER,
633     p_object_version             IN  NUMBER
634     )
635 
636 IS
637    L_API_NAME                  CONSTANT VARCHAR2(30) := 'Lock_Met_Tpl_Dtl';
638    L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
639    L_FULL_NAME                 CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
640    l_METRIC_TEMPLATE_DETAIL_ID NUMBER;
641 
642    CURSOR c_Met_Tpl_Dtl IS
643       SELECT METRIC_TEMPLATE_DETAIL_ID
644       FROM AMS_MET_TPL_DETAILS
645       WHERE METRIC_TEMPLATE_DETAIL_ID = p_METRIC_TEMPLATE_DETAIL_ID
646       AND object_version_number = p_object_version
647       FOR UPDATE NOWAIT;
648 
649 BEGIN
650 
651    -- Debug Message
652    IF (AMS_DEBUG_HIGH_ON) THEN
653 
654    Ams_Utility_Pvt.debug_message('Private API: ' || l_api_name || ': start');
655    END IF;
656 
657    -- Initialize message list if p_init_msg_list is set to TRUE.
658    IF FND_API.to_Boolean( p_init_msg_list )
659    THEN
660       FND_MSG_PUB.initialize;
661    END IF;
662 
663    -- Standard call to check for call compatibility.
664    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
665                                         p_api_version_number,
666                                         l_api_name,
667                                         G_PKG_NAME)
668    THEN
669        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
670    END IF;
671 
672 
673    -- Initialize API return status to SUCCESS
674    x_return_status := FND_API.G_RET_STS_SUCCESS;
675 
676 
677 ------------------------ lock -------------------------
678 
679   IF (AMS_DEBUG_HIGH_ON) THEN
680 
681 
682 
683   Ams_Utility_Pvt.debug_message(l_full_name||': start');
684 
685   END IF;
686   OPEN c_Met_Tpl_Dtl;
687 
688   FETCH c_Met_Tpl_Dtl INTO l_METRIC_TEMPLATE_DETAIL_ID;
689 
690   IF (c_Met_Tpl_Dtl%NOTFOUND) THEN
691     CLOSE c_Met_Tpl_Dtl;
692     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
693        FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
694        FND_MSG_PUB.ADD;
695     END IF;
696     RAISE FND_API.g_exc_error;
697   END IF;
698 
699   CLOSE c_Met_Tpl_Dtl;
700 
701  -------------------- finish --------------------------
702   FND_MSG_PUB.count_and_get(
703     p_encoded => FND_API.g_false,
704     p_count   => x_msg_count,
705     p_data    => x_msg_data);
706   IF (AMS_DEBUG_HIGH_ON) THEN
707 
708   Ams_Utility_Pvt.debug_message(l_full_name ||': end');
709   END IF;
710 EXCEPTION
711 
712    WHEN Ams_Utility_Pvt.resource_locked THEN
713      x_return_status := FND_API.g_ret_sts_error;
714  Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
715 
716    WHEN FND_API.G_EXC_ERROR THEN
717      ROLLBACK TO LOCK_Met_Tpl_Dtl_PVT;
718      x_return_status := FND_API.G_RET_STS_ERROR;
719      -- Standard call to get message count and if count=1, get the message
720      FND_MSG_PUB.Count_And_Get (
721             p_encoded => FND_API.G_FALSE,
722             p_count   => x_msg_count,
723             p_data    => x_msg_data
724      );
725 
726    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
727      ROLLBACK TO LOCK_Met_Tpl_Dtl_PVT;
728      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
729      -- Standard call to get message count and if count=1, get the message
730      FND_MSG_PUB.Count_And_Get (
731             p_encoded => FND_API.G_FALSE,
732             p_count => x_msg_count,
733             p_data  => x_msg_data
734      );
735 
736    WHEN OTHERS THEN
737      ROLLBACK TO LOCK_Met_Tpl_Dtl_PVT;
738      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
739      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
740      THEN
741         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
742      END IF;
743      -- Standard call to get message count and if count=1, get the message
744      FND_MSG_PUB.Count_And_Get (
745             p_encoded => FND_API.G_FALSE,
746             p_count => x_msg_count,
747             p_data  => x_msg_data
748      );
749 END Lock_Met_Tpl_Dtl;
750 
751 
752 PROCEDURE check_met_tpl_dtl_uk_items(
753     p_met_tpl_dtl_rec            IN  met_tpl_dtl_rec_type,
754     p_validation_mode            IN  VARCHAR2 := JTF_PLSQL_API.g_create,
755     x_return_status              OUT NOCOPY VARCHAR2)
756 IS
757 l_valid_flag  VARCHAR2(1);
758 l_dummy NUMBER;
759 
760    CURSOR c_check_duplicate(p_METRIC_ID NUMBER, p_METRIC_TPL_HEADER_ID NUMBER) IS
761       SELECT 1 FROM AMS_MET_TPL_DETAILS
762      WHERE METRIC_TPL_HEADER_ID = p_METRIC_TPL_HEADER_ID
763      AND METRIC_ID = p_METRIC_ID;
764 
765 BEGIN
766    x_return_status := FND_API.g_ret_sts_success;
767    IF p_validation_mode = JTF_PLSQL_API.g_create THEN
768       l_valid_flag := Ams_Utility_Pvt.check_uniqueness(
769       'AMS_MET_TPL_DETAILS',
770       'METRIC_TEMPLATE_DETAIL_ID = ' || p_met_tpl_dtl_rec.METRIC_TEMPLATE_DETAIL_ID
771       );
772    END IF;
773 
774    IF l_valid_flag = FND_API.g_false THEN
775       Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_MTD_ID_DUP');
776       x_return_status := FND_API.g_ret_sts_error;
777       RETURN;
778    END IF;
779 
780    IF p_validation_mode = JTF_PLSQL_API.g_create THEN
781       OPEN c_check_duplicate(p_met_tpl_dtl_rec.metric_id, p_met_tpl_dtl_rec.metric_tpl_header_id);
782       FETCH c_check_duplicate INTO l_dummy;
783       IF c_check_duplicate%FOUND THEN
784          Ams_Utility_Pvt.error_message(p_message_name => 'AMS_MTD_DUP_METRIC_ID');
785         x_return_status := FND_API.g_ret_sts_error;
786       END IF;
787       CLOSE c_check_duplicate;
788    END IF;
789 
790 END check_met_tpl_dtl_uk_items;
791 
792 PROCEDURE check_met_tpl_dtl_req_items(
793     p_met_tpl_dtl_rec               IN  met_tpl_dtl_rec_type,
794     p_validation_mode IN VARCHAR2 := JTF_PLSQL_API.g_create,
795     x_return_status              OUT NOCOPY VARCHAR2
796 )
797 IS
798 BEGIN
799    x_return_status := FND_API.g_ret_sts_success;
800 
801    IF p_validation_mode = JTF_PLSQL_API.g_create THEN
802 
803       IF p_met_tpl_dtl_rec.metric_template_detail_id = FND_API.g_miss_num OR p_met_tpl_dtl_rec.metric_template_detail_id IS NULL THEN
804          FND_MESSAGE.set_name('AMS', 'AMS_API_MISSING_FIELD');
805          FND_MESSAGE.set_token('MISS_FIELD','METRIC_TEMPLATE_DETAIL_ID');
806          x_return_status := FND_API.g_ret_sts_error;
807          RETURN;
808       END IF;
809 
810       IF p_met_tpl_dtl_rec.metric_tpl_header_id = FND_API.g_miss_num OR p_met_tpl_dtl_rec.metric_tpl_header_id IS NULL THEN
811          FND_MESSAGE.set_name('AMS', 'AMS_API_MISSING_FIELD');
812          FND_MESSAGE.set_token('MISS_FIELD','METRIC_TPL_HEADER_ID');
813          x_return_status := FND_API.g_ret_sts_error;
814          RETURN;
815       END IF;
816 
817       IF p_met_tpl_dtl_rec.metric_id = FND_API.g_miss_num OR p_met_tpl_dtl_rec.metric_id IS NULL THEN
818          FND_MESSAGE.set_name('AMS', 'AMS_API_MISSING_FIELD');
819          FND_MESSAGE.set_token('MISS_FIELD','METRIC_ID');
820          x_return_status := FND_API.g_ret_sts_error;
821          RETURN;
822       END IF;
823 
824       IF p_met_tpl_dtl_rec.enabled_flag = FND_API.g_miss_char OR p_met_tpl_dtl_rec.enabled_flag IS NULL THEN
825          FND_MESSAGE.set_name('AMS', 'AMS_API_MISSING_FIELD');
826          FND_MESSAGE.set_token('MISS_FIELD','ENABLED_FLAG');
827          x_return_status := FND_API.g_ret_sts_error;
828          RETURN;
829       END IF;
830 
831    ELSE  -- Update
832 
833       IF p_met_tpl_dtl_rec.metric_template_detail_id IS NULL THEN
834  Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_MTD_NO_MET_TPL_DTL_ID');
835          x_return_status := FND_API.g_ret_sts_error;
836          RETURN;
837       END IF;
838 
839       IF p_met_tpl_dtl_rec.metric_tpl_header_id IS NULL THEN
840  Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_MTD_NO_METRIC_TPL_HEADER_ID');
841          x_return_status := FND_API.g_ret_sts_error;
842          RETURN;
843       END IF;
844 
845 
846       IF p_met_tpl_dtl_rec.metric_id IS NULL THEN
847  Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_MTD_NO_METRIC_ID');
848          x_return_status := FND_API.g_ret_sts_error;
849          RETURN;
850       END IF;
851 
852 
853       IF p_met_tpl_dtl_rec.enabled_flag IS NULL THEN
854  Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_MTD_NO_ENABLED_FLAG');
855          x_return_status := FND_API.g_ret_sts_error;
856          RETURN;
857       END IF;
858    END IF;
859 
860 END check_met_tpl_dtl_req_items;
861 
862 PROCEDURE check_met_tpl_dtl_FK_items(
863     p_met_tpl_dtl_rec IN met_tpl_dtl_rec_type,
864     x_return_status OUT NOCOPY VARCHAR2
865 )
866 IS
867    CURSOR c_check_header_id(p_METRIC_TPL_HEADER_ID NUMBER) IS
868       SELECT 1 FROM AMS_MET_TPL_HEADERS_VL
869      WHERE METRIC_TPL_HEADER_ID = p_METRIC_TPL_HEADER_ID;
870 
871    -- choang - 24-oct-2003
872    -- added FORMULA for enh 3130095
873    CURSOR c_check_metric(p_metric_id NUMBER) IS
874       SELECT 1 FROM ams_metrics_all_b
875      WHERE metric_id = p_metric_id
876      AND metric_calculation_type IN ('FUNCTION', 'MANUAL', 'FORMULA');
877 
878    l_dummy NUMBER;
879 BEGIN
880    x_return_status := FND_API.g_ret_sts_success;
881 
882    -- Enter custom code here
883 
884    -- Validate metric_tpl_header_id exists.
885    OPEN c_check_header_id(p_met_tpl_dtl_rec.metric_tpl_header_id);
886    FETCH c_check_header_id INTO l_dummy;
887    IF c_check_header_id%NOTFOUND THEN
888      Ams_Utility_Pvt.error_message(p_message_name => 'AMS_MTD_BAD_HEADER_ID');
889       x_return_status := FND_API.g_ret_sts_error;
890    END IF;
891    CLOSE c_check_header_id;
892 
893    -- Validate the metric_id exists and is FUNCTION or MANUAL
894    OPEN c_check_metric(p_met_tpl_dtl_rec.metric_id);
895    FETCH c_check_metric INTO l_dummy;
896    IF c_check_metric%NOTFOUND THEN
897      Ams_Utility_Pvt.error_message(p_message_name => 'AMS_MTD_BAD_METRIC_ID');
898       x_return_status := FND_API.g_ret_sts_error;
899    END IF;
900    CLOSE c_check_metric;
901 
902 END check_met_tpl_dtl_FK_items;
903 
904 PROCEDURE check_met_tpl_dtl_Lookup_items(
905     p_met_tpl_dtl_rec IN met_tpl_dtl_rec_type,
906     x_return_status OUT NOCOPY VARCHAR2
907 )
908 IS
909 BEGIN
910    x_return_status := FND_API.g_ret_sts_success;
911 
912    -- Enter custom code here
913    IF Ams_Utility_Pvt.is_y_or_n(p_met_tpl_dtl_rec.enabled_flag) = FND_API.G_FALSE THEN
914       Ams_Utility_Pvt.error_message(p_message_name => 'AMS_MTD_BAD_ENABLED_FLAG');
915       x_return_status := FND_API.g_ret_sts_error;
916    END IF;
917 
918 END check_met_tpl_dtl_Lookup_items;
919 
920 PROCEDURE Check_met_tpl_dtl_Items (
921     P_met_tpl_dtl_rec  IN    met_tpl_dtl_rec_type,
922     p_validation_mode  IN    VARCHAR2,
923     x_return_status    OUT NOCOPY   VARCHAR2
924     )
925 IS
926 BEGIN
927 
928    -- Check Items Uniqueness API calls
929 
930    check_met_tpl_dtl_uk_items(
931       p_met_tpl_dtl_rec => p_met_tpl_dtl_rec,
932       p_validation_mode => p_validation_mode,
933       x_return_status => x_return_status);
934    IF x_return_status <> FND_API.g_ret_sts_success THEN
935       RETURN;
936    END IF;
937 
938    -- Check Items Required/NOT NULL API calls
939 
940    check_met_tpl_dtl_req_items(
941       p_met_tpl_dtl_rec => p_met_tpl_dtl_rec,
942       p_validation_mode => p_validation_mode,
943       x_return_status => x_return_status);
944    IF x_return_status <> FND_API.g_ret_sts_success THEN
945       RETURN;
946    END IF;
947    -- Check Items Foreign Keys API calls
948 
949    check_met_tpl_dtl_FK_items(
950       p_met_tpl_dtl_rec => p_met_tpl_dtl_rec,
951       x_return_status => x_return_status);
952    IF x_return_status <> FND_API.g_ret_sts_success THEN
953       RETURN;
954    END IF;
955    -- Check Items Lookups
956 
957    check_met_tpl_dtl_Lookup_items(
958       p_met_tpl_dtl_rec => p_met_tpl_dtl_rec,
959       x_return_status => x_return_status);
960    IF x_return_status <> FND_API.g_ret_sts_success THEN
961       RETURN;
962    END IF;
963 
964 END Check_met_tpl_dtl_Items;
965 
966 
967 
968 PROCEDURE Complete_met_tpl_dtl_Rec (
969    p_ref_met_tpl_dtl_rec IN met_tpl_dtl_rec_type,
970    x_tar_met_tpl_dtl_rec IN OUT NOCOPY met_tpl_dtl_rec_type)
971 IS
972 --    l_return_status  VARCHAR2(1);
973 
974 --    CURSOR c_complete IS
975 --       SELECT *
976 --       FROM ams_met_tpl_details
977 --       WHERE metric_template_detail_id = p_met_tpl_dtl_rec.metric_template_detail_id;
978 --    l_met_tpl_dtl_rec c_complete%ROWTYPE;
979 BEGIN
980 --   x_complete_rec := p_met_tpl_dtl_rec;
981 
982 --    OPEN c_complete;
983 --    FETCH c_complete INTO l_met_tpl_dtl_rec;
984 --    CLOSE c_complete;
985 
986    -- metric_template_detail_id
987 --    IF p_met_tpl_dtl_rec.metric_template_detail_id = FND_API.g_miss_num THEN
988 --       x_complete_rec.metric_template_detail_id := l_met_tpl_dtl_rec.metric_template_detail_id;
989 --    END IF;
990 
991    -- last_update_date
992 --    IF p_met_tpl_dtl_rec.last_update_date = FND_API.g_miss_date THEN
993 --       x_complete_rec.last_update_date := l_met_tpl_dtl_rec.last_update_date;
994 --    END IF;
995 
996    -- last_updated_by
997 --    IF p_met_tpl_dtl_rec.last_updated_by = FND_API.g_miss_num THEN
998 --       x_complete_rec.last_updated_by := l_met_tpl_dtl_rec.last_updated_by;
999 --    END IF;
1000 
1001    -- creation_date
1002 --    IF p_met_tpl_dtl_rec.creation_date = FND_API.g_miss_date THEN
1003 --       x_complete_rec.creation_date := l_met_tpl_dtl_rec.creation_date;
1004 --    END IF;
1005 
1006    -- created_by
1007 --    IF p_met_tpl_dtl_rec.created_by = FND_API.g_miss_num THEN
1008 --       x_complete_rec.created_by := l_met_tpl_dtl_rec.created_by;
1009 --    END IF;
1010 
1011    -- last_update_login
1012 --    IF p_met_tpl_dtl_rec.last_update_login = FND_API.g_miss_num THEN
1013 --       x_complete_rec.last_update_login := l_met_tpl_dtl_rec.last_update_login;
1014 --    END IF;
1015 
1016    -- object_version_number
1017 --    IF p_met_tpl_dtl_rec.object_version_number = FND_API.g_miss_num THEN
1018 --       x_complete_rec.object_version_number := l_met_tpl_dtl_rec.object_version_number;
1019 --    END IF;
1020 
1021    -- metric_tpl_header_id
1022    IF x_tar_met_tpl_dtl_rec.metric_tpl_header_id = FND_API.g_miss_num THEN
1023       x_tar_met_tpl_dtl_rec.metric_tpl_header_id := p_ref_met_tpl_dtl_rec.metric_tpl_header_id;
1024    END IF;
1025 
1026    -- metric_id
1027    IF x_tar_met_tpl_dtl_rec.metric_id = FND_API.g_miss_num THEN
1028       x_tar_met_tpl_dtl_rec.metric_id := p_ref_met_tpl_dtl_rec.metric_id;
1029    END IF;
1030 
1031    -- enabled_flag
1032    IF x_tar_met_tpl_dtl_rec.enabled_flag = FND_API.g_miss_char THEN
1033       x_tar_met_tpl_dtl_rec.enabled_flag := p_ref_met_tpl_dtl_rec.enabled_flag;
1034    END IF;
1035 
1036    -- Note: Developers need to modify the procedure
1037    -- to handle any business specific requirements.
1038 END Complete_met_tpl_dtl_Rec;
1039 
1040 
1041 PROCEDURE Validate_met_tpl_dtl(
1042     p_api_version_number         IN   NUMBER,
1043     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
1044     p_validation_level           IN   NUMBER := FND_API.G_VALID_LEVEL_FULL,
1045     p_met_tpl_dtl_rec            IN   met_tpl_dtl_rec_type,
1046     p_validation_mode            IN    VARCHAR2,
1047     x_return_status              OUT NOCOPY  VARCHAR2,
1048     x_msg_count                  OUT NOCOPY  NUMBER,
1049     x_msg_data                   OUT NOCOPY  VARCHAR2
1050     )
1051 IS
1052    L_API_NAME                  CONSTANT VARCHAR2(30) := 'Validate_Met_Tpl_Dtl';
1053    L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
1054    l_object_version_number     NUMBER;
1055    l_met_tpl_dtl_rec  Ams_Met_Tpl_Dtl_Pvt.met_tpl_dtl_rec_type;
1056 
1057 BEGIN
1058    -- Standard Start of API savepoint
1059    SAVEPOINT VALIDATE_Met_Tpl_Dtl_;
1060 
1061    -- Standard call to check for call compatibility.
1062    IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1063                                         p_api_version_number,
1064                                         l_api_name,
1065                                         G_PKG_NAME)
1066    THEN
1067       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1068    END IF;
1069 
1070    -- Initialize message list if p_init_msg_list is set to TRUE.
1071    IF FND_API.to_Boolean( p_init_msg_list )
1072    THEN
1073       FND_MSG_PUB.initialize;
1074    END IF;
1075    IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1076       Check_met_tpl_dtl_Items(
1077          p_met_tpl_dtl_rec        => p_met_tpl_dtl_rec,
1078          p_validation_mode   => p_validation_mode,
1079          x_return_status     => x_return_status
1080       );
1081 
1082       IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1083           RAISE FND_API.G_EXC_ERROR;
1084       ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1085           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1086       END IF;
1087    END IF;
1088 
1089 --    Complete_met_tpl_dtl_Rec(
1090 --       p_met_tpl_dtl_rec        => p_met_tpl_dtl_rec,
1091 --       x_complete_rec        => l_met_tpl_dtl_rec
1092 --    );
1093 
1094    IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1095       Validate_met_tpl_dtl_Rec(
1096         p_api_version_number     => 1.0,
1097         p_init_msg_list          => FND_API.G_FALSE,
1098         x_return_status          => x_return_status,
1099         x_msg_count              => x_msg_count,
1100         x_msg_data               => x_msg_data,
1101         p_met_tpl_dtl_rec        => l_met_tpl_dtl_rec);
1102 
1103       IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1104          RAISE FND_API.G_EXC_ERROR;
1105       ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1106          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1107       END IF;
1108    END IF;
1109 
1110 
1111    -- Debug Message
1112    IF (AMS_DEBUG_HIGH_ON) THEN
1113 
1114    Ams_Utility_Pvt.debug_message('PRIVATE API: ' || l_api_name || ': START');
1115    END IF;
1116 
1117 
1118    -- Initialize API return status to SUCCESS
1119    x_return_status := FND_API.G_RET_STS_SUCCESS;
1120 
1121 
1122    -- Debug Message
1123    IF (AMS_DEBUG_HIGH_ON) THEN
1124 
1125    Ams_Utility_Pvt.debug_message('PRIVATE API: ' || l_api_name || ': END');
1126    END IF;
1127 
1128    -- Standard call to get message count and if count is 1, get message info.
1129    FND_MSG_PUB.Count_And_Get
1130      (p_count          =>   x_msg_count,
1131       p_data           =>   x_msg_data
1132    );
1133 EXCEPTION
1134 
1135    WHEN Ams_Utility_Pvt.resource_locked THEN
1136      x_return_status := FND_API.g_ret_sts_error;
1137  Ams_Utility_Pvt.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
1138 
1139    WHEN FND_API.G_EXC_ERROR THEN
1140      ROLLBACK TO VALIDATE_Met_Tpl_Dtl_;
1141      x_return_status := FND_API.G_RET_STS_ERROR;
1142      -- Standard call to get message count and if count=1, get the message
1143      FND_MSG_PUB.Count_And_Get (
1144             p_encoded => FND_API.G_FALSE,
1145             p_count   => x_msg_count,
1146             p_data    => x_msg_data
1147      );
1148 
1149    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1150      ROLLBACK TO VALIDATE_Met_Tpl_Dtl_;
1151      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1152      -- Standard call to get message count and if count=1, get the message
1153      FND_MSG_PUB.Count_And_Get (
1154             p_encoded => FND_API.G_FALSE,
1155             p_count => x_msg_count,
1156             p_data  => x_msg_data
1157      );
1158 
1159    WHEN OTHERS THEN
1160      ROLLBACK TO VALIDATE_Met_Tpl_Dtl_;
1161      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1162      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1163      THEN
1164         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1165      END IF;
1166      -- Standard call to get message count and if count=1, get the message
1167      FND_MSG_PUB.Count_And_Get (
1168             p_encoded => FND_API.G_FALSE,
1169             p_count => x_msg_count,
1170             p_data  => x_msg_data
1171      );
1172 END Validate_Met_Tpl_Dtl;
1173 
1174 
1175 PROCEDURE Validate_met_tpl_dtl_rec(
1176     p_api_version_number         IN   NUMBER,
1177     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
1178     x_return_status              OUT NOCOPY  VARCHAR2,
1179     x_msg_count                  OUT NOCOPY  NUMBER,
1180     x_msg_data                   OUT NOCOPY  VARCHAR2,
1181     p_met_tpl_dtl_rec            IN    met_tpl_dtl_rec_type
1182     )
1183 IS
1184 BEGIN
1185       -- Initialize message list if p_init_msg_list is set to TRUE.
1186       IF FND_API.to_Boolean( p_init_msg_list )
1187       THEN
1188          FND_MSG_PUB.initialize;
1189       END IF;
1190 
1191       -- Initialize API return status to SUCCESS
1192       x_return_status := FND_API.G_RET_STS_SUCCESS;
1193 
1194       -- Hint: Validate data
1195       -- If data not valid
1196       -- THEN
1197       -- x_return_status := FND_API.G_RET_STS_ERROR;
1198 
1199       -- Debug Message
1200       IF (AMS_DEBUG_HIGH_ON) THEN
1201 
1202       Ams_Utility_Pvt.debug_message('PRIVATE API: Validate_met_tpl_dtl_rec');
1203       END IF;
1204       -- Standard call to get message count and if count is 1, get message info.
1205       FND_MSG_PUB.Count_And_Get
1206         (p_count          =>   x_msg_count,
1207          p_data           =>   x_msg_data
1208       );
1209 END Validate_met_tpl_dtl_Rec;
1210 
1211 END Ams_Met_Tpl_Dtl_Pvt;