DBA Data[Home] [Help]

PACKAGE BODY: APPS.AMS_PROD_TEMPLATE_PVT

Source


1 PACKAGE BODY AMS_Prod_Template_PVT as
2 /* $Header: amsvptmb.pls 115.8 2002/12/04 20:00:47 musman ship $ */
3 -- ===============================================================
4 -- Start of Comments
5 -- Package name
6 --          AMS_Prod_Template_PVT
7 -- Purpose
8 --
9 -- History
10 --
11 -- NOTE
12 --
13 -- End of Comments
14 -- ===============================================================
15 
16 
17 G_PKG_NAME CONSTANT VARCHAR2(30):= 'AMS_Prod_Template_PVT';
18 G_FILE_NAME CONSTANT VARCHAR2(12) := 'amsvptmb.pls';
19 
20 
21 
22 -- Hint: Primary key needs to be returned.
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 Create_Prod_Template(
28     p_api_version_number         IN   NUMBER,
29     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
30     p_commit                     IN   VARCHAR2     := FND_API.G_FALSE,
31     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
32 
33     x_return_status              OUT NOCOPY  VARCHAR2,
34     x_msg_count                  OUT NOCOPY  NUMBER,
35     x_msg_data                   OUT NOCOPY  VARCHAR2,
36 
37     p_prod_template_rec               IN   prod_template_rec_type  := g_miss_prod_template_rec,
38     x_template_id                   OUT NOCOPY  NUMBER
39      )
40 
41  IS
42 L_API_NAME                  CONSTANT VARCHAR2(30) := 'Create_Prod_Template';
43 L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
44    l_return_status_full        VARCHAR2(1);
45    l_object_version_number     NUMBER := 1;
46    l_org_id                    NUMBER := FND_API.G_MISS_NUM;
47    l_TEMPLATE_ID                  NUMBER;
48    l_dummy       NUMBER;
49 
50    CURSOR c_id IS
51       SELECT AMS_PROD_TEMPLATES_B_s.NEXTVAL
52       FROM dual;
53 
54    CURSOR c_id_exists (l_id IN NUMBER) IS
55       SELECT 1
56       FROM AMS_PROD_TEMPLATES_B
57       WHERE TEMPLATE_ID = l_id;
58 
59    CURSOR c_get_prod_attr
60    IS
61    SELECT stp.parent_setup_attribute,
62           stp.setup_attribute
63    FROM  ams_setup_types stp
64    WHERE stp.object_type = 'PTMP'
65    AND stp.setup_attribute not in ('AMS_PROD_SUPP_SRV','AMS_PROD_WARRN','AMS_PROD_COV_TEMP'
66                            ,'AMS_PROD_DUR_VAL','AMS_PROD_DUR_PER','AMS_CONTRACT_ITEM_TYPE')
67                            --,'AMS_SUBSCRIPTION_DEPENDENCY')
68    ORDER BY display_sequence_no;
69 
70    l_get_prod_attr c_get_prod_attr%ROWTYPE;
71 
72    CURSOR c_get_service_attr
73    IS
74    SELECT stp.parent_setup_attribute,
75           stp.setup_attribute
76    FROM  ams_setup_types stp
77    WHERE stp.object_type = 'PTMP'
78    AND parent_setup_attribute not in ('AMS_INVENTORY','AMS_BILL_OF_MATERIAL')
79    AND setup_attribute not in ('AMS_PROD_RET','AMS_PROD_SHP','AMS_PROD_BACK_ORD','AMS_PROD_SRP','AMS_BILLING_TYPE','AMS_SUBSCRIPTION_DEPENDENCY','AMS_CONTRACT_ITEM_TYPE')
80    ORDER BY display_sequence_no;
81 
82    l_get_service_attr c_get_service_attr%ROWTYPE;
83 
84 BEGIN
85       -- Standard Start of API savepoint
86       SAVEPOINT CREATE_Prod_Template_PVT;
87 
88       -- Standard call to check for call compatibility.
89       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
90                                            p_api_version_number,
91                                            l_api_name,
92                                            G_PKG_NAME)
93       THEN
94           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
95       END IF;
96 
97       -- Initialize message list if p_init_msg_list is set to TRUE.
98       IF FND_API.to_Boolean( p_init_msg_list )
99       THEN
100          FND_MSG_PUB.initialize;
101       END IF;
102 
103       -- Debug Message
104       IF (AMS_DEBUG_HIGH_ON) THEN
105 
106       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
107       END IF;
108 
109 
110       -- Initialize API return status to SUCCESS
111       x_return_status := FND_API.G_RET_STS_SUCCESS;
112 
113    -- Local variable initialization
114 
115    IF p_prod_template_rec.TEMPLATE_ID IS NULL
116    OR p_prod_template_rec.TEMPLATE_ID = FND_API.g_miss_num
117    THEN
118       LOOP
119          l_dummy := NULL;
120          OPEN c_id;
121          FETCH c_id INTO l_TEMPLATE_ID;
122          CLOSE c_id;
123 
124          OPEN c_id_exists(l_TEMPLATE_ID);
125          FETCH c_id_exists INTO l_dummy;
126          CLOSE c_id_exists;
127          EXIT WHEN l_dummy IS NULL;
128       END LOOP;
129    END IF;
130 
131       -- =========================================================================
132       -- Validate Environment
133       -- =========================================================================
134 
135       IF FND_GLOBAL.User_Id IS NULL
136       THEN
137  AMS_Utility_PVT.Error_Message(p_message_name => 'USER_PROFILE_MISSING');
138           RAISE FND_API.G_EXC_ERROR;
139       END IF;
140 
141       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
142       THEN
143           -- Debug message
144           IF (AMS_DEBUG_HIGH_ON) THEN
145 
146           AMS_UTILITY_PVT.debug_message('Private API: Validate_Prod_Template');
147           END IF;
148 
149           -- Invoke validation procedures
150           Validate_prod_template(
151             p_api_version_number     => 1.0,
152             p_init_msg_list    => FND_API.G_FALSE,
153             p_validation_level => p_validation_level,
154             p_validation_mode => JTF_PLSQL_API.g_create,
155             p_prod_template_rec  =>  p_prod_template_rec,
156             x_return_status    => x_return_status,
157             x_msg_count        => x_msg_count,
158             x_msg_data         => x_msg_data);
159       END IF;
160 
161       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
162           RAISE FND_API.G_EXC_ERROR;
163       END IF;
164 
165 
166       INSERT INTO AMS_PROD_TEMPLATES_B(
167            template_id,
168            last_update_date,
169            last_updated_by,
170            creation_date,
171            created_by,
172            object_version_number,
173            last_update_login,
174            product_service_flag
175      ) VALUES (
176            DECODE( l_template_id, FND_API.g_miss_num, NULL, l_template_id)
177            ,SYSDATE
178            ,fnd_global.user_id
179            ,SYSDATE
180            ,fnd_global.user_id
181            ,l_object_version_number
182            ,FND_GLOBAL.CONC_LOGIN_ID
183            ,DECODE( p_prod_template_rec.product_service_flag, FND_API.g_miss_char, NULL, p_prod_template_rec.product_service_flag)
184            );
185 
186 
187       INSERT  INTO AMS_PROD_TEMPLATES_TL(
188            template_id
189            ,language
190            ,source_lang
191            ,last_update_date
192            ,last_updated_by
193            ,last_update_login
194            ,creation_date
195            ,created_by
196            ,template_name
197            ,description
198        )   SELECT
199            DECODE( l_template_id, FND_API.g_miss_num, NULL, l_template_id),
200            l.language_code,
201            USERENV('LANG'),
202            sysdate,
203            FND_GLOBAL.user_id,
204            FND_GLOBAL.conc_login_id,
205            sysdate,
206            FND_GLOBAL.user_id,
207            DECODE( p_prod_template_rec.template_name, FND_API.g_miss_char, NULL, p_prod_template_rec.template_name),
208            DECODE( p_prod_template_rec.description, FND_API.g_miss_char, NULL, p_prod_template_rec.description)
209    FROM    fnd_languages l
210    WHERE   l.installed_flag IN ('I','B')
211    AND     NOT EXISTS(
212                       SELECT NULL
213                       FROM   AMS_PROD_TEMPLATES_TL t
214                       WHERE  t.template_id = DECODE( l_template_id, FND_API.g_miss_num, NULL, l_template_id)
215                       AND    t.language = l.language_code ) ;
216 
217           x_template_id := l_template_id;
218 
219 
220    IF  p_prod_template_rec.product_service_flag= 'P'
221    THEN
222 
223       OPEN  c_get_prod_attr;
224          LOOP
225             FETCH c_get_prod_attr INTO l_get_prod_attr;
226             EXIT WHEN c_get_prod_attr%NOTFOUND;
227 
228             INSERT INTO ams_prod_template_attr
229             (
230               template_attribute_id
231               ,template_id
232               ,last_update_date
233               ,last_updated_by
234               ,creation_date
235               ,created_by
236               ,object_version_number
237               ,last_update_login
238               ,parent_attribute_code
239               ,parent_select_all
240               ,attribute_code
241               ,default_flag
242               ,editable_flag
243               ,hide_flag
244            ) VALUES
245             (  ams_prod_template_attr_s.nextval,
246                 x_template_id,
247                 SYSDATE,
248                 fnd_global.user_id,
249                 SYSDATE,
250                 fnd_global.user_id,
251                 1,
252                 FND_GLOBAL.CONC_LOGIN_ID,
253                 l_get_prod_attr.parent_setup_attribute,
254                 'Y',
255                 l_get_prod_attr.setup_attribute,
256                 'Y',
257                 'Y',
258                 'N') ;
259          END LOOP;
260       CLOSE c_get_prod_attr;
261 
262    ELSIF  p_prod_template_rec.product_service_flag= 'S'
263    THEN
264       OPEN  c_get_service_attr;
265          LOOP
266             FETCH c_get_service_attr INTO l_get_service_attr;
267             EXIT WHEN c_get_service_attr%NOTFOUND;
268             INSERT INTO ams_prod_template_attr
269             (
270                template_attribute_id
271                ,template_id
272                ,last_update_date
273                ,last_updated_by
274                ,creation_date
275                ,created_by
276                ,object_version_number
277                ,last_update_login
278                ,parent_attribute_code
279                ,parent_select_all
280                ,attribute_code
281                ,default_flag
282                ,editable_flag
283                ,hide_flag
284              ) VALUES
285              (ams_prod_template_attr_s.nextval,
286                  x_template_id,
287                  SYSDATE,
288                  fnd_global.user_id,
289                  SYSDATE,
290                  fnd_global.user_id,
291                  1,
292                  FND_GLOBAL.CONC_LOGIN_ID,
293                  l_get_service_attr.parent_setup_attribute,
294                  'Y',
295                  l_get_service_attr.setup_attribute,
296                  'Y',
297                  'Y',
298                  'N');
299         END LOOP;
300       CLOSE c_get_service_attr;
301    END IF;
302 
303 
304           /*
305           SELECT ams_prod_template_attr_s.nextval,
306               x_template_id,
307               SYSDATE,
308               fnd_global.user_id,
309               SYSDATE,
310               fnd_global.user_id,
311               1,
312               FND_GLOBAL.CONC_LOGIN_ID,
313               stp.parent_setup_attribute,
314               'N',
315               stp.setup_attribute,
316               'N',
317               'N',
318               'N'
319         FROM  ams_setup_types stp
320         WHERE stp.object_type = 'PTMP'
321         AND parent_setup_attribute not in ('AMS_INVENTORY','AMS_BILL_OF_MATERIAL')
322         AND setup_attribute not in ('AMS_PROD_RET','AMS_PROD_SHP','AMS_PROD_BACK_ORD','AMS_PROD_SRP','AMS_BILLING_TYPE') ;
323         */
324 
325       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
326           RAISE FND_API.G_EXC_ERROR;
327       END IF;
328 --
329 -- End of API body
330 --
331 
332       -- Standard check for p_commit
333       IF FND_API.to_Boolean( p_commit )
334       THEN
335          COMMIT WORK;
336       END IF;
337 
338 
339       -- Debug Message
340       IF (AMS_DEBUG_HIGH_ON) THEN
341 
342       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
343       END IF;
344 
345       -- Standard call to get message count and if count is 1, get message info.
346       FND_MSG_PUB.Count_And_Get
347         (p_count          =>   x_msg_count,
351 
348          p_data           =>   x_msg_data
349       );
350 EXCEPTION
352    WHEN AMS_Utility_PVT.resource_locked THEN
353      x_return_status := FND_API.g_ret_sts_error;
354  AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
355 
356    WHEN FND_API.G_EXC_ERROR THEN
357      ROLLBACK TO CREATE_Prod_Template_PVT;
358      x_return_status := FND_API.G_RET_STS_ERROR;
359      -- Standard call to get message count and if count=1, get the message
360      FND_MSG_PUB.Count_And_Get (
361             p_encoded => FND_API.G_FALSE,
362             p_count   => x_msg_count,
363             p_data    => x_msg_data
364      );
365 
366    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
367      ROLLBACK TO CREATE_Prod_Template_PVT;
368      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
369      -- Standard call to get message count and if count=1, get the message
370      FND_MSG_PUB.Count_And_Get (
371             p_encoded => FND_API.G_FALSE,
372             p_count => x_msg_count,
373             p_data  => x_msg_data
374      );
375 
376    WHEN OTHERS THEN
377      ROLLBACK TO CREATE_Prod_Template_PVT;
378      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
379      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
380      THEN
381         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
382      END IF;
383      -- Standard call to get message count and if count=1, get the message
384      FND_MSG_PUB.Count_And_Get (
385             p_encoded => FND_API.G_FALSE,
386             p_count => x_msg_count,
387             p_data  => x_msg_data
388      );
389 End Create_Prod_Template;
390 
391 
392 PROCEDURE Update_Prod_Template(
393     p_api_version_number         IN   NUMBER,
394     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
395     p_commit                     IN   VARCHAR2     := FND_API.G_FALSE,
396     p_validation_level           IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
397 
398     x_return_status              OUT NOCOPY  VARCHAR2,
399     x_msg_count                  OUT NOCOPY  NUMBER,
400     x_msg_data                   OUT NOCOPY  VARCHAR2,
401 
402     p_prod_template_rec               IN    prod_template_rec_type
403     )
404 
405  IS
406 
407   CURSOR c_get_prod_template(p_template_id NUMBER) IS
408     SELECT *
409     FROM  AMS_PROD_TEMPLATES_B
410     WHERE template_id =p_template_id;
411     -- Hint: Developer need to provide Where clause
412 
413 L_API_NAME                  CONSTANT VARCHAR2(30) := 'Update_Prod_Template';
414 L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
415 -- Local Variables
416 l_object_version_number     NUMBER;
417 l_TEMPLATE_ID    NUMBER;
418 l_ref_prod_template_rec  c_get_Prod_Template%ROWTYPE ;
419 l_tar_prod_template_rec  AMS_Prod_Template_PVT.prod_template_rec_type := P_prod_template_rec;
420 l_rowid  ROWID;
421 
422  BEGIN
423       -- Standard Start of API savepoint
424       SAVEPOINT UPDATE_Prod_Template_PVT;
425 
426       -- Standard call to check for call compatibility.
427       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
428                                            p_api_version_number,
429                                            l_api_name,
430                                            G_PKG_NAME)
431       THEN
432           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
433       END IF;
434 
435       -- Initialize message list if p_init_msg_list is set to TRUE.
436       IF FND_API.to_Boolean( p_init_msg_list )
437       THEN
438          FND_MSG_PUB.initialize;
439       END IF;
440 
441       -- Debug Message
442       IF (AMS_DEBUG_HIGH_ON) THEN
443 
444       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
445       END IF;
446 
447 
448       -- Initialize API return status to SUCCESS
449       x_return_status := FND_API.G_RET_STS_SUCCESS;
450 
451       -- Debug Message
452       IF (AMS_DEBUG_HIGH_ON) THEN
453 
454       AMS_UTILITY_PVT.debug_message('Private API: - Open Cursor to Select');
455       END IF;
456 
457 /*
458       OPEN c_get_Prod_Template( l_tar_prod_template_rec.template_id);
459 
460       FETCH c_get_Prod_Template INTO l_ref_prod_template_rec  ;
461 
462        If ( c_get_Prod_Template%NOTFOUND) THEN
463   AMS_Utility_PVT.Error_Message(p_message_name => 'API_MISSING_UPDATE_TARGET',
464    p_token_name   => 'INFO',
465  p_token_value  => 'Prod_Template') ;
466            RAISE FND_API.G_EXC_ERROR;
467        END IF;
468        -- Debug Message
469        IF (AMS_DEBUG_HIGH_ON) THEN
470 
471        AMS_UTILITY_PVT.debug_message('Private API: - Close Cursor');
472        END IF;
473        CLOSE     c_get_Prod_Template;
474 */
475 
476 
477       If (l_tar_prod_template_rec.object_version_number is NULL or
478           l_tar_prod_template_rec.object_version_number = FND_API.G_MISS_NUM ) Then
479   AMS_Utility_PVT.Error_Message(p_message_name => 'API_VERSION_MISSING',
480    p_token_name   => 'COLUMN',
481  p_token_value  => 'Last_Update_Date') ;
482           raise FND_API.G_EXC_ERROR;
483       End if;
487    p_token_name   => 'INFO',
484       -- Check Whether record has been changed by someone else
485       If (l_tar_prod_template_rec.object_version_number <> l_ref_prod_template_rec.object_version_number) Then
486   AMS_Utility_PVT.Error_Message(p_message_name => 'API_RECORD_CHANGED',
488  p_token_value  => 'Prod_Template') ;
489           raise FND_API.G_EXC_ERROR;
490       End if;
491       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
492       THEN
493           -- Debug message
494           IF (AMS_DEBUG_HIGH_ON) THEN
495 
496           AMS_UTILITY_PVT.debug_message('Private API: Validate_Prod_Template');
497           END IF;
498 
499           -- Invoke validation procedures
500           Validate_prod_template(
501             p_api_version_number     => 1.0,
502             p_init_msg_list    => FND_API.G_FALSE,
503             p_validation_level => p_validation_level,
504             p_validation_mode => JTF_PLSQL_API.g_update,
505             p_prod_template_rec  =>  p_prod_template_rec,
506             x_return_status    => x_return_status,
507             x_msg_count        => x_msg_count,
508             x_msg_data         => x_msg_data);
509       END IF;
510 
511       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
512           RAISE FND_API.G_EXC_ERROR;
513       END IF;
514 
515       Update AMS_PROD_TEMPLATES_B
516       SET  template_id = DECODE( p_prod_template_rec.template_id, FND_API.g_miss_num, template_id, p_prod_template_rec.template_id),
517            last_update_date = sysdate,
518            last_updated_by = fnd_global.user_id,
519            object_version_number = p_prod_template_rec.object_version_number +1,
520            last_update_login = FND_GLOBAL.CONC_LOGIN_ID,
521            product_service_flag = DECODE(p_prod_template_rec.product_service_flag, FND_API.g_miss_char, product_service_flag, p_prod_template_rec.product_service_flag)
522       WHERE TEMPLATE_ID =  p_prod_template_rec.template_id
523       AND   object_version_number = p_prod_template_rec.object_version_number;
524 
525       If (SQL%NOTFOUND) then
526          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
527       End If;
528 
529 
530       UPDATE  AMS_PROD_TEMPLATES_TL
531       SET template_name = DECODE( p_prod_template_rec.template_name, FND_API.g_miss_char, template_name, p_prod_template_rec.template_name)
532       ,description   = DECODE(p_prod_template_rec.description,FND_API.g_miss_char,description,p_prod_template_rec.description)
533       ,last_update_date = sysdate
534       ,last_updated_by = fnd_global.user_id
535       ,last_update_login = FND_GLOBAL.CONC_LOGIN_ID
536       ,source_lang = USERENV('LANG')
537       WHERE  TEMPLATE_ID =  p_prod_template_rec.template_id
538       AND    USERENV('LANG') IN (language, source_lang);
539 
540       If (SQL%NOTFOUND) then
541         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
542       End If;
543 
544 
545       -- Standard check for p_commit
546       IF FND_API.to_Boolean( p_commit )
547       THEN
548          COMMIT WORK;
549       END IF;
550 
551 
552       -- Debug Message
553       IF (AMS_DEBUG_HIGH_ON) THEN
554 
555       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
556       END IF;
557 
558       -- Standard call to get message count and if count is 1, get message info.
559       FND_MSG_PUB.Count_And_Get
560         (p_count          =>   x_msg_count,
561          p_data           =>   x_msg_data
562       );
563 EXCEPTION
564 
565    WHEN AMS_Utility_PVT.resource_locked THEN
566      x_return_status := FND_API.g_ret_sts_error;
567  AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
568 
569    WHEN FND_API.G_EXC_ERROR THEN
570      ROLLBACK TO UPDATE_Prod_Template_PVT;
571      x_return_status := FND_API.G_RET_STS_ERROR;
572      -- Standard call to get message count and if count=1, get the message
573      FND_MSG_PUB.Count_And_Get (
574             p_encoded => FND_API.G_FALSE,
575             p_count   => x_msg_count,
576             p_data    => x_msg_data
577      );
578 
579    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
580      ROLLBACK TO UPDATE_Prod_Template_PVT;
581      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
582      -- Standard call to get message count and if count=1, get the message
583      FND_MSG_PUB.Count_And_Get (
584             p_encoded => FND_API.G_FALSE,
585             p_count => x_msg_count,
586             p_data  => x_msg_data
587      );
588 
589    WHEN OTHERS THEN
590      ROLLBACK TO UPDATE_Prod_Template_PVT;
591      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
592      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
593      THEN
594         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
595      END IF;
596      -- Standard call to get message count and if count=1, get the message
597      FND_MSG_PUB.Count_And_Get (
598             p_encoded => FND_API.G_FALSE,
599             p_count => x_msg_count,
600             p_data  => x_msg_data
601      );
602 End Update_Prod_Template;
603 
604 
605 PROCEDURE Delete_Prod_Template(
606     p_api_version_number         IN   NUMBER,
607     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
608     p_commit                     IN   VARCHAR2     := FND_API.G_FALSE,
612     x_msg_data                   OUT NOCOPY  VARCHAR2,
609     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
610     x_return_status              OUT NOCOPY  VARCHAR2,
611     x_msg_count                  OUT NOCOPY  NUMBER,
613     p_template_id                   IN  NUMBER,
614     p_object_version_number      IN   NUMBER
615     )
616 
617  IS
618 L_API_NAME                  CONSTANT VARCHAR2(30) := 'Delete_Prod_Template';
619 L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
620 l_object_version_number     NUMBER;
621 
622  BEGIN
623       -- Standard Start of API savepoint
624       SAVEPOINT DELETE_Prod_Template_PVT;
625 
626       -- Standard call to check for call compatibility.
627       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
628                                            p_api_version_number,
629                                            l_api_name,
630                                            G_PKG_NAME)
631       THEN
632           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
633       END IF;
634 
635       -- Initialize message list if p_init_msg_list is set to TRUE.
636       IF FND_API.to_Boolean( p_init_msg_list )
637       THEN
638          FND_MSG_PUB.initialize;
639       END IF;
640 
641       -- Debug Message
642       IF (AMS_DEBUG_HIGH_ON) THEN
643 
644       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
645       END IF;
646 
647 
648       -- Initialize API return status to SUCCESS
649       x_return_status := FND_API.G_RET_STS_SUCCESS;
650 
651       --
652       -- Api body
653       --
654       -- Debug Message
655       IF (AMS_DEBUG_HIGH_ON) THEN
656          AMS_UTILITY_PVT.debug_message( 'Private API: Calling delete table handler');
657       END IF;
658       /*
659       IF p_template_id = 1000
660       OR p_template_id = 1001
661       THEN
662       */
663       IF p_template_id < 10000
664       THEN
665          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
666          THEN
667             FND_MESSAGE.set_name('AMS', 'AMS_API_CANNOT_DELETE');
668             FND_MSG_PUB.add;
669          END IF;
670          RAISE FND_API.g_exc_error;
671       END IF;
672 
673       DELETE FROM AMS_PROD_TEMPLATES_B
674       WHERE TEMPLATE_ID = p_TEMPLATE_ID
675       AND object_version_number = p_object_version_number;
676 
677       IF (SQL%NOTFOUND) THEN
678          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
679          THEN
680             FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
681             FND_MSG_PUB.add;
682          END IF;
683          RAISE FND_API.g_exc_error;
684       END IF;
685 
686       DELETE FROM AMS_PROD_TEMPLATES_TL
687       WHERE TEMPLATE_ID = p_TEMPLATE_ID;
688 
689       IF (SQL%NOTFOUND) THEN
690          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
691          THEN
692             FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
693             FND_MSG_PUB.add;
694          END IF;
695          RAISE FND_API.g_exc_error;
696       END IF;
697 
698       DELETE FROM ams_prod_template_attr
699       WHERE template_id = p_template_id;
700 
701       DELETE FROM  ams_templ_responsibility
702       WHERE template_id = p_template_id;
703 
704       --
705       -- End of API body
706       --
707 
708       -- Standard check for p_commit
709       IF FND_API.to_Boolean( p_commit )
710       THEN
711          COMMIT WORK;
712       END IF;
713 
714 
715       -- Debug Message
716       IF (AMS_DEBUG_HIGH_ON) THEN
717 
718       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
719       END IF;
720 
721       -- Standard call to get message count and if count is 1, get message info.
722       FND_MSG_PUB.Count_And_Get
723         (p_count          =>   x_msg_count,
724          p_data           =>   x_msg_data
725       );
726 EXCEPTION
727 
728    WHEN AMS_Utility_PVT.resource_locked THEN
729      x_return_status := FND_API.g_ret_sts_error;
730  AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
731 
732    WHEN FND_API.G_EXC_ERROR THEN
733      ROLLBACK TO DELETE_Prod_Template_PVT;
734      x_return_status := FND_API.G_RET_STS_ERROR;
735      -- Standard call to get message count and if count=1, get the message
736      FND_MSG_PUB.Count_And_Get (
737             p_encoded => FND_API.G_FALSE,
738             p_count   => x_msg_count,
739             p_data    => x_msg_data
740      );
741 
742    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
743      ROLLBACK TO DELETE_Prod_Template_PVT;
744      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
745      -- Standard call to get message count and if count=1, get the message
746      FND_MSG_PUB.Count_And_Get (
747             p_encoded => FND_API.G_FALSE,
748             p_count => x_msg_count,
749             p_data  => x_msg_data
750      );
751 
752    WHEN OTHERS THEN
753      ROLLBACK TO DELETE_Prod_Template_PVT;
754      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
758      END IF;
755      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
756      THEN
757         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
759      -- Standard call to get message count and if count=1, get the message
760      FND_MSG_PUB.Count_And_Get (
761             p_encoded => FND_API.G_FALSE,
762             p_count => x_msg_count,
763             p_data  => x_msg_data
764      );
765 End Delete_Prod_Template;
766 
767 
768 
769 -- Hint: Primary key needs to be returned.
770 PROCEDURE Lock_Prod_Template(
771     p_api_version_number         IN   NUMBER,
772     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
773 
774     x_return_status              OUT NOCOPY  VARCHAR2,
775     x_msg_count                  OUT NOCOPY  NUMBER,
776     x_msg_data                   OUT NOCOPY  VARCHAR2,
777 
778     p_template_id                   IN  NUMBER,
779     p_object_version             IN  NUMBER
780     )
781 
782  IS
783 L_API_NAME                  CONSTANT VARCHAR2(30) := 'Lock_Prod_Template';
784 L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
785 L_FULL_NAME                 CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
786 l_TEMPLATE_ID                  NUMBER;
787 
788 CURSOR c_Prod_Template IS
789    SELECT TEMPLATE_ID
790    FROM AMS_PROD_TEMPLATES_B
791    WHERE TEMPLATE_ID = p_TEMPLATE_ID
792    AND object_version_number = p_object_version
793    FOR UPDATE NOWAIT;
794 
795 BEGIN
796 
797       -- Debug Message
798       IF (AMS_DEBUG_HIGH_ON) THEN
799 
800       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
801       END IF;
802 
803       -- Initialize message list if p_init_msg_list is set to TRUE.
804       IF FND_API.to_Boolean( p_init_msg_list )
805       THEN
806          FND_MSG_PUB.initialize;
807       END IF;
808 
809       -- Standard call to check for call compatibility.
810       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
811                                            p_api_version_number,
812                                            l_api_name,
813                                            G_PKG_NAME)
814       THEN
815           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
816       END IF;
817 
818 
819       -- Initialize API return status to SUCCESS
820       x_return_status := FND_API.G_RET_STS_SUCCESS;
821 
822 
823 ------------------------ lock -------------------------
824 
825   IF (AMS_DEBUG_HIGH_ON) THEN
826 
827 
828 
829   AMS_Utility_PVT.debug_message(l_full_name||': start');
830 
831   END IF;
832   OPEN c_Prod_Template;
833 
834   FETCH c_Prod_Template INTO l_TEMPLATE_ID;
835 
836   IF (c_Prod_Template%NOTFOUND) THEN
837     CLOSE c_Prod_Template;
838     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error) THEN
839        FND_MESSAGE.set_name('AMS', 'AMS_API_RECORD_NOT_FOUND');
840        FND_MSG_PUB.add;
841     END IF;
842     RAISE FND_API.g_exc_error;
843   END IF;
844 
845   CLOSE c_Prod_Template;
846 
847  -------------------- finish --------------------------
848   FND_MSG_PUB.count_and_get(
849     p_encoded => FND_API.g_false,
850     p_count   => x_msg_count,
851     p_data    => x_msg_data);
852   IF (AMS_DEBUG_HIGH_ON) THEN
853 
854   AMS_Utility_PVT.debug_message(l_full_name ||': end');
855   END IF;
856 EXCEPTION
857 
858    WHEN AMS_Utility_PVT.resource_locked THEN
859      x_return_status := FND_API.g_ret_sts_error;
860  AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
861 
862    WHEN FND_API.G_EXC_ERROR THEN
863      ROLLBACK TO LOCK_Prod_Template_PVT;
864      x_return_status := FND_API.G_RET_STS_ERROR;
865      -- Standard call to get message count and if count=1, get the message
866      FND_MSG_PUB.Count_And_Get (
867             p_encoded => FND_API.G_FALSE,
868             p_count   => x_msg_count,
869             p_data    => x_msg_data
870      );
871 
872    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
873      ROLLBACK TO LOCK_Prod_Template_PVT;
874      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
875      -- Standard call to get message count and if count=1, get the message
876      FND_MSG_PUB.Count_And_Get (
877             p_encoded => FND_API.G_FALSE,
878             p_count => x_msg_count,
879             p_data  => x_msg_data
880      );
881 
882    WHEN OTHERS THEN
883      ROLLBACK TO LOCK_Prod_Template_PVT;
884      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
885      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
886      THEN
887         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
888      END IF;
889      -- Standard call to get message count and if count=1, get the message
890      FND_MSG_PUB.Count_And_Get (
891             p_encoded => FND_API.G_FALSE,
892             p_count => x_msg_count,
893             p_data  => x_msg_data
894      );
895 End Lock_Prod_Template;
896 
897 
901     x_return_status              OUT NOCOPY VARCHAR2)
898 PROCEDURE check_prod_template_uk_items(
899     p_prod_template_rec               IN   prod_template_rec_type,
900     p_validation_mode            IN  VARCHAR2 := JTF_PLSQL_API.g_create,
902 IS
903 
904 l_valid_flag  VARCHAR2(1);
905 
906 CURSOR c_check_unique(p_name  IN VARCHAR2)
907    IS
908    SELECT 'Y'
909    FROM ams_prod_templates_tl
910    WHERE template_name = p_name;
911 
912 
913  CURSOR c_check_unik_upd(p_name    IN VARCHAR2
914                         ,p_template_id IN NUMBER)
915    IS
916    SELECT 'Y'
917    FROM ams_prod_templates_tl
918    WHERE template_name = p_name
919    AND template_id <> p_template_id;
920 
921 
922 
923 BEGIN
924       x_return_status := FND_API.g_ret_sts_success;
925       IF p_validation_mode = JTF_PLSQL_API.g_create THEN
926          l_valid_flag := AMS_Utility_PVT.check_uniqueness(
927          'AMS_PROD_TEMPLATES_B',
928          'TEMPLATE_ID = ''' || p_prod_template_rec.TEMPLATE_ID ||''''
929          );
930       ELSE
931          l_valid_flag := AMS_Utility_PVT.check_uniqueness(
932          'AMS_PROD_TEMPLATES_B',
933          'TEMPLATE_ID = ''' || p_prod_template_rec.TEMPLATE_ID ||
934          ''' AND TEMPLATE_ID <> ' || p_prod_template_rec.TEMPLATE_ID
935          );
936       END IF;
937 
938       IF l_valid_flag = FND_API.g_false THEN
939          AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_TEMPLATE_ID_DUPLICATE');
940          x_return_status := FND_API.g_ret_sts_error;
941          RETURN;
942       END IF;
943 
944       IF  p_prod_template_rec.template_name IS NOT NULL
945       AND p_prod_template_rec.template_name <> FND_API.g_miss_char
946       THEN
947 
948          IF p_validation_mode =JTF_PLSQL_API.g_create
949          THEN
950             OPEN c_check_unique(p_prod_template_rec.template_name);
951             FETCH c_check_unique INTO l_valid_flag;
952             CLOSE c_check_unique;
953 
954          ELSIF p_validation_mode =JTF_PLSQL_API.g_update
955          THEN
956             OPEN c_check_unik_upd(p_prod_template_rec.template_name,p_prod_template_rec.template_id);
957             FETCH c_check_unik_upd INTO l_valid_flag;
958             CLOSE c_check_unik_upd;
959          END IF;
960 
961          IF (AMS_DEBUG_HIGH_ON) THEN
962 
963 
964 
965          AMS_UTILITY_PVT.debug_message('l_valid_flag:'||l_valid_flag||' vd mode:'|| p_validation_mode||' g_create:'||JTF_PLSQL_API.g_create);
966 
967          END IF;
968 
969          IF l_valid_flag = 'Y'
970          THEN
971             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_error)
972             THEN
973                FND_MESSAGE.set_name('AMS','AMS_dup_name');
974                FND_MSG_PUB.add;
975             END IF;
976             x_return_status := FND_API.g_ret_sts_error;
977             RETURN;
978          END IF;
979 
980    END IF;
981 
982 
983 END check_prod_template_uk_items;
984 
985 PROCEDURE check_prod_template_req_items(
986     p_prod_template_rec               IN  prod_template_rec_type,
987     p_validation_mode IN VARCHAR2 := JTF_PLSQL_API.g_create,
988     x_return_status              OUT NOCOPY VARCHAR2
989 )
990 IS
991 BEGIN
992    x_return_status := FND_API.g_ret_sts_success;
993 
994 
995 
996 
997       IF p_prod_template_rec.template_name = FND_API.g_miss_char
1001          x_return_status := FND_API.g_ret_sts_error;
998       OR p_prod_template_rec.template_name IS NULL THEN
999          FND_MESSAGE.set_name('AMS', 'AMS_API_MISSING_FIELD');
1000          FND_MESSAGE.set_token('MISS_FIELD','TEMPLATE_NAME');
1002          RETURN;
1003       END IF;
1004 
1005    IF p_validation_mode = JTF_PLSQL_API.g_update THEN
1006 
1007       IF p_prod_template_rec.template_id IS NULL THEN
1008          AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_prod_template_NO_template_id');
1009          x_return_status := FND_API.g_ret_sts_error;
1010          RETURN;
1011       END IF;
1012 
1013    END IF;
1014 
1015 END check_prod_template_req_items;
1016 
1017 PROCEDURE check_prod_template_FK_items(
1018     p_prod_template_rec IN prod_template_rec_type,
1019     x_return_status OUT NOCOPY VARCHAR2
1020 )
1021 IS
1022 BEGIN
1023    x_return_status := FND_API.g_ret_sts_success;
1024 
1025    -- Enter custom code here
1026 
1027 END check_prod_template_FK_items;
1028 
1029 PROCEDURE check_template_lkup_items(
1030     p_prod_template_rec IN prod_template_rec_type,
1031     x_return_status OUT NOCOPY VARCHAR2
1032 )
1033 IS
1034 BEGIN
1035    x_return_status := FND_API.g_ret_sts_success;
1036 
1037    -- Enter custom code here
1038 
1039 END check_template_lkup_items;
1040 
1041 PROCEDURE Check_prod_template_Items (
1042     P_prod_template_rec     IN    prod_template_rec_type,
1043     p_validation_mode  IN    VARCHAR2,
1044     x_return_status    OUT NOCOPY   VARCHAR2
1045     )
1046 IS
1047 BEGIN
1048 
1049    -- Check Items Uniqueness API calls
1050 
1051    check_prod_template_uk_items(
1052       p_prod_template_rec => p_prod_template_rec,
1053       p_validation_mode => p_validation_mode,
1054       x_return_status => x_return_status);
1055    IF x_return_status <> FND_API.g_ret_sts_success THEN
1056       RETURN;
1057    END IF;
1058 
1059    -- Check Items Required/NOT NULL API calls
1060 
1061    check_prod_template_req_items(
1062       p_prod_template_rec => p_prod_template_rec,
1063       p_validation_mode => p_validation_mode,
1064       x_return_status => x_return_status);
1065    IF x_return_status <> FND_API.g_ret_sts_success THEN
1066       RETURN;
1067    END IF;
1068    -- Check Items Foreign Keys API calls
1069 
1070    check_prod_template_FK_items(
1071       p_prod_template_rec => p_prod_template_rec,
1072       x_return_status => x_return_status);
1073    IF x_return_status <> FND_API.g_ret_sts_success THEN
1074       RETURN;
1075    END IF;
1076    -- Check Items Lookups
1077 
1078    check_template_lkup_items(
1079       p_prod_template_rec => p_prod_template_rec,
1080       x_return_status => x_return_status);
1081    IF x_return_status <> FND_API.g_ret_sts_success THEN
1082       RETURN;
1083    END IF;
1084 
1085 END Check_prod_template_Items;
1086 
1087 
1088 
1089 PROCEDURE Complete_prod_template_Rec (
1090    p_prod_template_rec IN prod_template_rec_type,
1091    x_complete_rec OUT NOCOPY prod_template_rec_type)
1092 IS
1093    l_return_status  VARCHAR2(1);
1094 
1095    CURSOR c_complete IS
1096       SELECT *
1097       FROM ams_prod_templates_b
1098       WHERE template_id = p_prod_template_rec.template_id;
1099    l_prod_template_rec c_complete%ROWTYPE;
1100 BEGIN
1101    x_complete_rec := p_prod_template_rec;
1102 
1103 
1104    OPEN c_complete;
1105    FETCH c_complete INTO l_prod_template_rec;
1106    CLOSE c_complete;
1107 
1108    -- template_id
1109    IF p_prod_template_rec.template_id = FND_API.g_miss_num THEN
1110       x_complete_rec.template_id := l_prod_template_rec.template_id;
1111    END IF;
1112 
1113    -- last_update_date
1114    IF p_prod_template_rec.last_update_date = FND_API.g_miss_date THEN
1115       x_complete_rec.last_update_date := l_prod_template_rec.last_update_date;
1116    END IF;
1117 
1118    -- last_updated_by
1119    IF p_prod_template_rec.last_updated_by = FND_API.g_miss_num THEN
1120       x_complete_rec.last_updated_by := l_prod_template_rec.last_updated_by;
1121    END IF;
1122 
1123    -- creation_date
1124    IF p_prod_template_rec.creation_date = FND_API.g_miss_date THEN
1125       x_complete_rec.creation_date := l_prod_template_rec.creation_date;
1126    END IF;
1127 
1128    -- created_by
1129    IF p_prod_template_rec.created_by = FND_API.g_miss_num THEN
1130       x_complete_rec.created_by := l_prod_template_rec.created_by;
1131    END IF;
1132 
1133    -- object_version_number
1134    IF p_prod_template_rec.object_version_number = FND_API.g_miss_num THEN
1135       x_complete_rec.object_version_number := l_prod_template_rec.object_version_number;
1136    END IF;
1137 
1138    -- last_update_login
1139    IF p_prod_template_rec.last_update_login = FND_API.g_miss_num THEN
1140       x_complete_rec.last_update_login := l_prod_template_rec.last_update_login;
1141    END IF;
1142 
1143    -- security_group_id
1144    IF p_prod_template_rec.security_group_id = FND_API.g_miss_num THEN
1145       x_complete_rec.security_group_id := l_prod_template_rec.security_group_id;
1146    END IF;
1147 
1148    -- product_service_flag
1149    IF p_prod_template_rec.product_service_flag = FND_API.g_miss_char THEN
1150       x_complete_rec.product_service_flag := l_prod_template_rec.product_service_flag;
1151    END IF;
1152    -- Note: Developers need to modify the procedure
1153    -- to handle any business specific requirements.
1154 END Complete_prod_template_Rec;
1155 PROCEDURE Validate_prod_template(
1156     p_api_version_number         IN   NUMBER,
1157     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
1161     x_return_status              OUT NOCOPY  VARCHAR2,
1158     p_validation_level           IN   NUMBER := FND_API.G_VALID_LEVEL_FULL,
1159     p_prod_template_rec               IN   prod_template_rec_type,
1160     p_validation_mode            IN    VARCHAR2,
1162     x_msg_count                  OUT NOCOPY  NUMBER,
1163     x_msg_data                   OUT NOCOPY  VARCHAR2
1164     )
1165  IS
1166 L_API_NAME                  CONSTANT VARCHAR2(30) := 'Validate_Prod_Template';
1167 L_API_VERSION_NUMBER        CONSTANT NUMBER   := 1.0;
1168 l_object_version_number     NUMBER;
1169 l_prod_template_rec  AMS_Prod_Template_PVT.prod_template_rec_type;
1170 
1171  BEGIN
1172       -- Standard Start of API savepoint
1173       SAVEPOINT VALIDATE_Prod_Template_;
1174 
1175       -- Standard call to check for call compatibility.
1176       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
1177                                            p_api_version_number,
1178                                            l_api_name,
1179                                            G_PKG_NAME)
1180       THEN
1181           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1182       END IF;
1183 
1184       -- Initialize message list if p_init_msg_list is set to TRUE.
1185       IF FND_API.to_Boolean( p_init_msg_list )
1186       THEN
1187          FND_MSG_PUB.initialize;
1188       END IF;
1189       IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1190               Check_prod_template_Items(
1191                  p_prod_template_rec        => p_prod_template_rec,
1192                  p_validation_mode   => p_validation_mode,
1193                  x_return_status     => x_return_status
1194               );
1195 
1196               IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1197                   RAISE FND_API.G_EXC_ERROR;
1198               ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1199                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1200               END IF;
1201       END IF;
1202 
1203       Complete_prod_template_Rec(
1204          p_prod_template_rec        => p_prod_template_rec,
1205          x_complete_rec        => l_prod_template_rec
1206       );
1207 
1208       IF p_validation_level >= JTF_PLSQL_API.g_valid_level_item THEN
1209          Validate_prod_template_Rec(
1210            p_api_version_number     => 1.0,
1211            p_init_msg_list          => FND_API.G_FALSE,
1212            x_return_status          => x_return_status,
1213            x_msg_count              => x_msg_count,
1214            x_msg_data               => x_msg_data,
1215            p_prod_template_rec           =>    l_prod_template_rec);
1216 
1217               IF x_return_status = FND_API.G_RET_STS_ERROR THEN
1218                  RAISE FND_API.G_EXC_ERROR;
1219               ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1220                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1221               END IF;
1222       END IF;
1223 
1224 
1225       -- Debug Message
1226       IF (AMS_DEBUG_HIGH_ON) THEN
1227 
1228       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'start');
1229       END IF;
1230 
1231 
1232       -- Initialize API return status to SUCCESS
1233       x_return_status := FND_API.G_RET_STS_SUCCESS;
1234 
1235 
1236       -- Debug Message
1237       IF (AMS_DEBUG_HIGH_ON) THEN
1238 
1239       AMS_UTILITY_PVT.debug_message('Private API: ' || l_api_name || 'end');
1240       END IF;
1241 
1242       -- Standard call to get message count and if count is 1, get message info.
1243       FND_MSG_PUB.Count_And_Get
1244         (p_count          =>   x_msg_count,
1245          p_data           =>   x_msg_data
1246       );
1247 EXCEPTION
1248 
1249    WHEN AMS_Utility_PVT.resource_locked THEN
1250      x_return_status := FND_API.g_ret_sts_error;
1251  AMS_Utility_PVT.Error_Message(p_message_name => 'AMS_API_RESOURCE_LOCKED');
1252 
1253    WHEN FND_API.G_EXC_ERROR THEN
1254      ROLLBACK TO VALIDATE_Prod_Template_;
1255      x_return_status := FND_API.G_RET_STS_ERROR;
1256      -- Standard call to get message count and if count=1, get the message
1257      FND_MSG_PUB.Count_And_Get (
1258             p_encoded => FND_API.G_FALSE,
1259             p_count   => x_msg_count,
1260             p_data    => x_msg_data
1261      );
1262 
1263    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1264      ROLLBACK TO VALIDATE_Prod_Template_;
1265      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1266      -- Standard call to get message count and if count=1, get the message
1267      FND_MSG_PUB.Count_And_Get (
1268             p_encoded => FND_API.G_FALSE,
1269             p_count => x_msg_count,
1270             p_data  => x_msg_data
1271      );
1272 
1273    WHEN OTHERS THEN
1274      ROLLBACK TO VALIDATE_Prod_Template_;
1275      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1276      IF FND_MSG_PUB.Check_Msg_Level ( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1277      THEN
1278         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1279      END IF;
1280      -- Standard call to get message count and if count=1, get the message
1281      FND_MSG_PUB.Count_And_Get (
1282             p_encoded => FND_API.G_FALSE,
1283             p_count => x_msg_count,
1284             p_data  => x_msg_data
1285      );
1286 End Validate_Prod_Template;
1287 
1288 
1289 PROCEDURE Validate_prod_template_rec(
1290     p_api_version_number         IN   NUMBER,
1291     p_init_msg_list              IN   VARCHAR2     := FND_API.G_FALSE,
1292     x_return_status              OUT NOCOPY  VARCHAR2,
1293     x_msg_count                  OUT NOCOPY  NUMBER,
1294     x_msg_data                   OUT NOCOPY  VARCHAR2,
1295     p_prod_template_rec               IN    prod_template_rec_type
1296     )
1297 IS
1298 BEGIN
1299       -- Initialize message list if p_init_msg_list is set to TRUE.
1300       IF FND_API.to_Boolean( p_init_msg_list )
1301       THEN
1302          FND_MSG_PUB.initialize;
1303       END IF;
1304 
1305       -- Initialize API return status to SUCCESS
1306       x_return_status := FND_API.G_RET_STS_SUCCESS;
1307 
1308       -- Hint: Validate data
1309       -- If data not valid
1310       -- THEN
1311       -- x_return_status := FND_API.G_RET_STS_ERROR;
1312 
1313       -- Debug Message
1314       IF (AMS_DEBUG_HIGH_ON) THEN
1315 
1316       AMS_UTILITY_PVT.debug_message('Private API: Validate_dm_model_rec');
1317       END IF;
1318       -- Standard call to get message count and if count is 1, get message info.
1319       FND_MSG_PUB.Count_And_Get
1320         (p_count          =>   x_msg_count,
1321          p_data           =>   x_msg_data
1322       );
1323 END Validate_prod_template_Rec;
1324 
1325 END AMS_Prod_Template_PVT;