DBA Data[Home] [Help]

PACKAGE BODY: APPS.PV_ATTRIBUTE_USAGE_PVT

Source


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