DBA Data[Home] [Help]

PACKAGE BODY: APPS.PV_ATTR_PRINCIPAL_PVT

Source


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