DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_ATTRIBUTES_PVT

Source


1 PACKAGE BODY QP_Attributes_PVT AS
2 /* $Header: QPXVATRB.pls 120.2 2005/07/06 04:51:47 appldev ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_Attributes_PVT';
7 
8 --  Con
9 
10 PROCEDURE Con
11 (   p_validation_level              IN  NUMBER
12 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
13 ,   p_CON_rec                       IN  QP_Attributes_PUB.Con_Rec_Type
14 ,   p_old_CON_rec                   IN  QP_Attributes_PUB.Con_Rec_Type
15 ,   x_CON_rec                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Con_Rec_Type
16 ,   x_old_CON_rec                   OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Con_Rec_Type
17 )
18 IS
19 l_return_status               VARCHAR2(1);
20 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
21 l_CON_rec                     QP_Attributes_PUB.Con_Rec_Type := p_CON_rec;
22 l_p_CON_rec                     QP_Attributes_PUB.Con_Rec_Type;
23 l_old_CON_rec                 QP_Attributes_PUB.Con_Rec_Type := p_old_CON_rec;
24 BEGIN
25 
26     --  Load API control record
27 
28     l_control_rec := QP_GLOBALS.Init_Control_Rec
29     (   p_operation     => l_CON_rec.operation
30     ,   p_control_rec   => p_control_rec
31     );
32 
33     --  Set record return status.
34 
35     l_CON_rec.return_status        := FND_API.G_RET_STS_SUCCESS;
36 
37     --  Prepare record.
38 
39     IF l_CON_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
40 
41         l_CON_rec.db_flag := FND_API.G_FALSE;
42 
43         --  Set missing old record elements to NULL.
44 
45         l_old_CON_rec :=
46         QP_Con_Util.Convert_Miss_To_Null (l_old_CON_rec);
47 
48     ELSIF l_CON_rec.operation = QP_GLOBALS.G_OPR_UPDATE
49     OR    l_CON_rec.operation = QP_GLOBALS.G_OPR_DELETE
50     THEN
51 
52         l_CON_rec.db_flag := FND_API.G_TRUE;
53 
54         --  Query Old if missing
55 
56         IF  l_old_CON_rec.prc_context_id = FND_API.G_MISS_NUM
57         THEN
58 
59             l_old_CON_rec := QP_Con_Util.Query_Row
60             (   p_prc_context_id              => l_CON_rec.prc_context_id
61             );
62 
63         ELSE
64 
65             --  Set missing old record elements to NULL.
66 
67             l_old_CON_rec :=
68             QP_Con_Util.Convert_Miss_To_Null (l_old_CON_rec);
69 
70         END IF;
71 
72         --  Complete new record from old
73 
74         l_CON_rec := QP_Con_Util.Complete_Record
75         (   p_CON_rec                     => l_CON_rec
76         ,   p_old_CON_rec                 => l_old_CON_rec
77         );
78 
79     END IF;
80 
81     --  Attribute level validation.
82 
83 
84     IF  l_control_rec.default_attributes
85     OR  l_control_rec.change_attributes
86     THEN
87 
88         IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
89 
90             QP_Validate_Con.Attributes
91             (   x_return_status               => l_return_status
92             ,   p_CON_rec                     => l_CON_rec
93             ,   p_old_CON_rec                 => l_old_CON_rec
94             );
95 
96             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
97                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
98             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
99                 RAISE FND_API.G_EXC_ERROR;
100             END IF;
101 
102         END IF;
103 
104     END IF;
105 
106         --  Clear dependent attributes.
107 
108 
109     IF  l_control_rec.change_attributes THEN
110         l_p_CON_rec := l_CON_rec;
111         QP_Con_Util.Clear_Dependent_Attr
112         (   p_CON_rec                     => l_p_CON_rec
113         ,   p_old_CON_rec                 => l_old_CON_rec
114         ,   x_CON_rec                     => l_CON_rec
115         );
116 
117     END IF;
118 
119     --  Default missing attributes
120 
121     IF  l_control_rec.default_attributes
122     OR  l_control_rec.change_attributes
123     THEN
124         l_p_CON_rec := l_CON_rec;
125         QP_Default_Con.Attributes
126         (   p_CON_rec                     => l_p_CON_rec
127         ,   x_CON_rec                     => l_CON_rec
128         );
129 
130     END IF;
131 
132     --  Apply attribute changes
133 
134     IF  l_control_rec.default_attributes
135     OR  l_control_rec.change_attributes
136     THEN
137         l_p_CON_rec := l_CON_rec;
138         QP_Con_Util.Apply_Attribute_Changes
139         (   p_CON_rec                     => l_p_CON_rec
140         ,   p_old_CON_rec                 => l_old_CON_rec
141         ,   x_CON_rec                     => l_CON_rec
142         );
143 
144     END IF;
145 
146     --  Entity level validation.
147 
148     IF l_control_rec.validate_entity THEN
149 
150         IF l_CON_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
151 
152             QP_Validate_Con.Entity_Delete
153             (   x_return_status               => l_return_status
154             ,   p_CON_rec                     => l_CON_rec
155             );
156 
157         ELSE
158 
159             QP_Validate_Con.Entity
160             (   x_return_status               => l_return_status
161             ,   p_CON_rec                     => l_CON_rec
162             ,   p_old_CON_rec                 => l_old_CON_rec
163             );
164 
165         END IF;
166 
167         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
168             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
169         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
170             RAISE FND_API.G_EXC_ERROR;
171         END IF;
172 
173     END IF;
174 
175     --  Step 4. Write to DB
176 
177     IF l_control_rec.write_to_db THEN
178 
179         IF l_CON_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
180 
181             QP_Con_Util.Delete_Row
182             (   p_prc_context_id              => l_CON_rec.prc_context_id
183             );
184 
185         ELSE
186 
187             --  Get Who Information
188 
189             l_CON_rec.last_update_date     := SYSDATE;
190             l_CON_rec.last_updated_by      := FND_GLOBAL.USER_ID;
191             l_CON_rec.last_update_login    := FND_GLOBAL.LOGIN_ID;
192 
193             IF l_CON_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
194 
195                 QP_Con_Util.Update_Row (l_CON_rec);
196 
197             ELSIF l_CON_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
198 
199                 l_CON_rec.creation_date        := SYSDATE;
200                 l_CON_rec.created_by           := FND_GLOBAL.USER_ID;
201 
202                 QP_Con_Util.Insert_Row (l_CON_rec);
203 
204             END IF;
205 
206         END IF;
207 
208     END IF;
209 
210     --  Load OUT parameters
211 
212     x_CON_rec                      := l_CON_rec;
213     x_old_CON_rec                  := l_old_CON_rec;
214 
215 EXCEPTION
216 
217     WHEN FND_API.G_EXC_ERROR THEN
218 
219         l_CON_rec.return_status        := FND_API.G_RET_STS_ERROR;
220         x_CON_rec                      := l_CON_rec;
221         x_old_CON_rec                  := l_old_CON_rec;
222         RAISE;
223 
224     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
225 
226         l_CON_rec.return_status        := FND_API.G_RET_STS_UNEXP_ERROR;
227         x_CON_rec                      := l_CON_rec;
228         x_old_CON_rec                  := l_old_CON_rec;
229 
230         RAISE;
231 
232     WHEN OTHERS THEN
233 
234         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
235         THEN
236             OE_MSG_PUB.Add_Exc_Msg
237             (   G_PKG_NAME
238             ,   'Con'
239             );
240         END IF;
241 
242         l_CON_rec.return_status        := FND_API.G_RET_STS_UNEXP_ERROR;
243         x_CON_rec                      := l_CON_rec;
244         x_old_CON_rec                  := l_old_CON_rec;
245 
246         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
247 
248 END Con;
249 
250 --  Segs
251 
252 PROCEDURE Segs
253 (   p_validation_level              IN  NUMBER
254 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type
255 ,   p_SEG_tbl                       IN  QP_Attributes_PUB.Seg_Tbl_Type
256 ,   p_old_SEG_tbl                   IN  QP_Attributes_PUB.Seg_Tbl_Type
257 ,   x_SEG_tbl                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Seg_Tbl_Type
258 ,   x_old_SEG_tbl                   OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Seg_Tbl_Type
259 )
260 IS
261 l_return_status               VARCHAR2(1);
262 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
263 l_SEG_rec                     QP_Attributes_PUB.Seg_Rec_Type;
264 l_p_SEG_rec                     QP_Attributes_PUB.Seg_Rec_Type;
265 l_SEG_tbl                     QP_Attributes_PUB.Seg_Tbl_Type;
266 l_old_SEG_rec                 QP_Attributes_PUB.Seg_Rec_Type;
267 l_old_SEG_tbl                 QP_Attributes_PUB.Seg_Tbl_Type;
268 BEGIN
269 
270     --  Init local table variables.
271 
272     l_SEG_tbl                      := p_SEG_tbl;
273     l_old_SEG_tbl                  := p_old_SEG_tbl;
274 
275     FOR I IN 1..l_SEG_tbl.COUNT LOOP
276     BEGIN
277 
278         --  Load local records.
279 
280         l_SEG_rec := l_SEG_tbl(I);
281 
282         IF l_old_SEG_tbl.EXISTS(I) THEN
283             l_old_SEG_rec := l_old_SEG_tbl(I);
284         ELSE
285             l_old_SEG_rec := QP_Attributes_PUB.G_MISS_SEG_REC;
286         END IF;
287 
288         --  Load API control record
289 
290         l_control_rec := QP_GLOBALS.Init_Control_Rec
291         (   p_operation     => l_SEG_rec.operation
292         ,   p_control_rec   => p_control_rec
293         );
294 
295         --  Set record return status.
296 
297         l_SEG_rec.return_status        := FND_API.G_RET_STS_SUCCESS;
298 
299         --  Prepare record.
300 
301         IF l_SEG_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
302 
303             l_SEG_rec.db_flag := FND_API.G_FALSE;
304 
305             --  Set missing old record elements to NULL.
306 
307             l_old_SEG_rec :=
308             QP_Seg_Util.Convert_Miss_To_Null (l_old_SEG_rec);
309 
310         ELSIF l_SEG_rec.operation = QP_GLOBALS.G_OPR_UPDATE
311         OR    l_SEG_rec.operation = QP_GLOBALS.G_OPR_DELETE
312         THEN
313 
314             l_SEG_rec.db_flag := FND_API.G_TRUE;
315 
316             --  Query Old if missing
317 
318             IF  l_old_SEG_rec.segment_id = FND_API.G_MISS_NUM
319             THEN
320 
321                 l_old_SEG_rec := QP_Seg_Util.Query_Row
322                 (   p_segment_id                  => l_SEG_rec.segment_id
323                 );
324 
325             ELSE
326 
327                 --  Set missing old record elements to NULL.
328 
329                 l_old_SEG_rec :=
330                 QP_Seg_Util.Convert_Miss_To_Null (l_old_SEG_rec);
331 
332             END IF;
333 
334             --  Complete new record from old
335 
336             l_SEG_rec := QP_Seg_Util.Complete_Record
337             (   p_SEG_rec                     => l_SEG_rec
338             ,   p_old_SEG_rec                 => l_old_SEG_rec
339             );
340 
341         END IF;
342 
343         --  Attribute level validation.
344 
345         IF  l_control_rec.default_attributes
346         OR  l_control_rec.change_attributes
347         THEN
348 
349             IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
350 
351                 QP_Validate_Seg.Attributes
352                 (   x_return_status               => l_return_status
353                 ,   p_SEG_rec                     => l_SEG_rec
354                 ,   p_old_SEG_rec                 => l_old_SEG_rec
355                 );
356 
357                 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
358                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
359                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
360                     RAISE FND_API.G_EXC_ERROR;
361                 END IF;
362 
363             END IF;
364 
365         END IF;
366 
367             --  Clear dependent attributes.
368 
369         IF  l_control_rec.change_attributes THEN
370             l_p_SEG_rec := l_SEG_rec;
371             QP_Seg_Util.Clear_Dependent_Attr
372             (   p_SEG_rec                     => l_p_SEG_rec
373             ,   p_old_SEG_rec                 => l_old_SEG_rec
374             ,   x_SEG_rec                     => l_SEG_rec
375             );
376 
377         END IF;
378 
379         --  Default missing attributes
380 
381         IF  l_control_rec.default_attributes
382         OR  l_control_rec.change_attributes
383         THEN
384             l_p_SEG_rec := l_SEG_rec;
385             QP_Default_Seg.Attributes
386             (   p_SEG_rec                     => l_p_SEG_rec
387             ,   x_SEG_rec                     => l_SEG_rec
388             );
389 
390         END IF;
391 
392         --  Apply attribute changes
393 
394         IF  l_control_rec.default_attributes
395         OR  l_control_rec.change_attributes
396         THEN
397             l_p_SEG_rec := l_SEG_rec;
398             QP_Seg_Util.Apply_Attribute_Changes
399             (   p_SEG_rec                     => l_p_SEG_rec
400             ,   p_old_SEG_rec                 => l_old_SEG_rec
401             ,   x_SEG_rec                     => l_SEG_rec
402             );
403 
404         END IF;
405 
406         --  Entity level validation.
407 
408         IF l_control_rec.validate_entity THEN
409 
410             IF l_SEG_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
411 
412                 QP_Validate_Seg.Entity_Delete
413                 (   x_return_status               => l_return_status
414                 ,   p_SEG_rec                     => l_SEG_rec
415                 );
416 
417             ELSE
418 
419                 QP_Validate_Seg.Entity
420                 (   x_return_status               => l_return_status
421                 ,   p_SEG_rec                     => l_SEG_rec
425             END IF;
422                 ,   p_old_SEG_rec                 => l_old_SEG_rec
423                 );
424 
426 
427             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
428                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
429             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
430                 RAISE FND_API.G_EXC_ERROR;
431             END IF;
432 
433         END IF;
434 
435         --  Step 4. Write to DB
436 
437         IF l_control_rec.write_to_db THEN
438 
439             IF l_SEG_rec.operation = QP_GLOBALS.G_OPR_DELETE THEN
440 
441                 QP_Seg_Util.Delete_Row
442                 (   p_segment_id                  => l_SEG_rec.segment_id
443                 );
444 
445             ELSE
446 
447                 --  Get Who Information
448 
449                 l_SEG_rec.last_update_date     := SYSDATE;
450                 l_SEG_rec.last_updated_by      := FND_GLOBAL.USER_ID;
451                 l_SEG_rec.last_update_login    := FND_GLOBAL.LOGIN_ID;
452 
453                 IF l_SEG_rec.operation = QP_GLOBALS.G_OPR_UPDATE THEN
454 
455                     QP_Seg_Util.Update_Row (l_SEG_rec);
456 
457                 ELSIF l_SEG_rec.operation = QP_GLOBALS.G_OPR_CREATE THEN
458 
459                     l_SEG_rec.creation_date        := SYSDATE;
460                     l_SEG_rec.created_by           := FND_GLOBAL.USER_ID;
461 
462                     QP_Seg_Util.Insert_Row (l_SEG_rec);
463 
464                 END IF;
465 
466             END IF;
467 
468         END IF;
469 
470         --  Load tables.
471 
472         l_SEG_tbl(I)                   := l_SEG_rec;
473         l_old_SEG_tbl(I)               := l_old_SEG_rec;
474 
475     --  For loop exception handler.
476 
477 
478     EXCEPTION
479 
480         WHEN FND_API.G_EXC_ERROR THEN
481 
482             l_SEG_rec.return_status        := FND_API.G_RET_STS_ERROR;
483             l_SEG_tbl(I)                   := l_SEG_rec;
484             l_old_SEG_tbl(I)               := l_old_SEG_rec;
485 
486         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
487 
488             l_SEG_rec.return_status        := FND_API.G_RET_STS_UNEXP_ERROR;
489             l_SEG_tbl(I)                   := l_SEG_rec;
490             l_old_SEG_tbl(I)               := l_old_SEG_rec;
491             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
492 
493         WHEN OTHERS THEN
494 
495             l_SEG_rec.return_status        := FND_API.G_RET_STS_UNEXP_ERROR;
496             l_SEG_tbl(I)                   := l_SEG_rec;
497             l_old_SEG_tbl(I)               := l_old_SEG_rec;
498 
499             IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
500             THEN
501                 OE_MSG_PUB.Add_Exc_Msg
502                 (   G_PKG_NAME
503                 ,   'Segs'
504                 );
505             END IF;
506 
507             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
508 
509     END;
510     END LOOP;
511 
512     --  Load OUT parameters
513 
514     x_SEG_tbl                      := l_SEG_tbl;
515     x_old_SEG_tbl                  := l_old_SEG_tbl;
516 
517 EXCEPTION
518 
519     WHEN FND_API.G_EXC_ERROR THEN
520 
521         RAISE;
522 
523     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
524 
525 
526         RAISE;
527 
528     WHEN OTHERS THEN
529 
530         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
531         THEN
532             OE_MSG_PUB.Add_Exc_Msg
533             (   G_PKG_NAME
534             ,   'Segs'
535             );
536         END IF;
537 
538 
539         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
540 
541 END Segs;
542 
543 --  Start of Comments
544 --  API name    Process_Attributes
545 --  Type        Private
546 --  Function
547 --
548 --  Pre-reqs
549 --
550 --  Parameters
551 --
552 --  Version     Current version = 1.0
553 --              Initial version = 1.0
554 --
555 --  Notes
556 --
557 --  End of Comments
558 
559 PROCEDURE Process_Attributes
560 (   p_api_version_number            IN  NUMBER
561 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
562 ,   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE
563 ,   p_validation_level              IN  NUMBER := FND_API.G_VALID_LEVEL_FULL
564 ,   p_control_rec                   IN  QP_GLOBALS.Control_Rec_Type :=
565                                         QP_GLOBALS.G_MISS_CONTROL_REC
566 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
567 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
568 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
569 ,   p_CON_rec                       IN  QP_Attributes_PUB.Con_Rec_Type :=
570                                         QP_Attributes_PUB.G_MISS_CON_REC
571 ,   p_old_CON_rec                   IN  QP_Attributes_PUB.Con_Rec_Type :=
572                                         QP_Attributes_PUB.G_MISS_CON_REC
573 ,   p_SEG_tbl                       IN  QP_Attributes_PUB.Seg_Tbl_Type :=
574                                         QP_Attributes_PUB.G_MISS_SEG_TBL
575 ,   p_old_SEG_tbl                   IN  QP_Attributes_PUB.Seg_Tbl_Type :=
576                                         QP_Attributes_PUB.G_MISS_SEG_TBL
577 ,   x_CON_rec                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Con_Rec_Type
578 ,   x_SEG_tbl                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Seg_Tbl_Type
579 )
580 IS
584 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
581 l_api_version_number          CONSTANT NUMBER := 1.0;
582 l_api_name                    CONSTANT VARCHAR2(30):= 'Process_Attributes';
583 l_return_status               VARCHAR2(1);
585 l_p_CON_rec                     QP_Attributes_PUB.Con_Rec_Type := p_CON_rec;
586 l_CON_rec                     QP_Attributes_PUB.Con_Rec_Type := p_CON_rec;
587 l_p_old_CON_rec                 QP_Attributes_PUB.Con_Rec_Type := p_old_CON_rec;
588 l_old_CON_rec                 QP_Attributes_PUB.Con_Rec_Type := p_old_CON_rec;
589 l_p_SEG_rec                     QP_Attributes_PUB.Seg_Rec_Type;
590 l_SEG_rec                     QP_Attributes_PUB.Seg_Rec_Type;
591 l_p_SEG_tbl                     QP_Attributes_PUB.Seg_Tbl_Type;
592 l_SEG_tbl                     QP_Attributes_PUB.Seg_Tbl_Type;
593 l_old_SEG_rec                 QP_Attributes_PUB.Seg_Rec_Type;
594 l_p_old_SEG_tbl                 QP_Attributes_PUB.Seg_Tbl_Type;
595 l_old_SEG_tbl                 QP_Attributes_PUB.Seg_Tbl_Type;
596 BEGIN
597 
598     --  Standard call to check for call compatibility
599 
600     IF NOT FND_API.Compatible_API_Call
601            (   l_api_version_number
602            ,   p_api_version_number
603            ,   l_api_name
604            ,   G_PKG_NAME
605            )
606     THEN
607         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
608     END IF;
609 
610     --  Initialize message list.
611 
612     IF FND_API.to_Boolean(p_init_msg_list) THEN
613         OE_MSG_PUB.initialize;
614     END IF;
615 
616     --  Init local table variables.
617 
618     l_SEG_tbl                      := p_SEG_tbl;
619     l_old_SEG_tbl                  := p_old_SEG_tbl;
620 
621     --  Con
622 
623     Con
624     (   p_validation_level            => p_validation_level
625     ,   p_control_rec                 => p_control_rec
626     ,   p_CON_rec                     => l_p_CON_rec
627     ,   p_old_CON_rec                 => l_p_old_CON_rec
628     ,   x_CON_rec                     => l_CON_rec
629     ,   x_old_CON_rec                 => l_old_CON_rec
630     );
631 
632     --  Perform CON group requests.
633 
634     IF p_control_rec.process AND
635         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
636         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_CON)
637     THEN
638 
639         NULL;
640 
641     END IF;
642 
643     --  Load parent key if missing and operation is create.
644 
645     FOR I IN 1..l_SEG_tbl.COUNT LOOP
646 
647         l_SEG_rec := l_SEG_tbl(I);
648 
649         IF l_SEG_rec.operation = QP_GLOBALS.G_OPR_CREATE
650         AND (l_SEG_rec.prc_context_id IS NULL OR
651             l_SEG_rec.prc_context_id = FND_API.G_MISS_NUM)
652         THEN
653 
654             --  Copy parent_id.
655 
656             l_SEG_tbl(I).prc_context_id := l_CON_rec.prc_context_id;
657         END IF;
658     END LOOP;
659 
660   l_p_SEG_tbl := l_SEG_tbl;
661   l_p_old_SEG_tbl := l_old_SEG_tbl;
662 
663     --  Segs
664 
665     Segs
666     (   p_validation_level            => p_validation_level
667     ,   p_control_rec                 => p_control_rec
668     ,   p_SEG_tbl                     => l_p_SEG_tbl
669     ,   p_old_SEG_tbl                 => l_p_old_SEG_tbl
670     ,   x_SEG_tbl                     => l_SEG_tbl
671     ,   x_old_SEG_tbl                 => l_old_SEG_tbl
672     );
673 
674     --  Perform SEG group requests.
675 
676     IF p_control_rec.process AND
677         (p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL OR
678         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_SEG)
679     THEN
680 
681         NULL;
682 
683     END IF;
684 
685     --  Step 6. Perform Object group logic
686 
687     IF p_control_rec.process AND
688         p_control_rec.process_entity = QP_GLOBALS.G_ENTITY_ALL
689     THEN
690 
691         NULL;
692 
693     END IF;
694 
695     --  Done processing, load OUT parameters.
696 
697     x_CON_rec                      := l_CON_rec;
698     x_SEG_tbl                      := l_SEG_tbl;
699 
700     --  Clear API cache.
701 
702     IF p_control_rec.clear_api_cache THEN
703 
704         NULL;
705 
706     END IF;
707 
708     --  Clear API request tbl.
709 
710     IF p_control_rec.clear_api_requests THEN
711 
712         NULL;
713 
714     END IF;
715 
716     --  Derive return status.
717 
718     x_return_status := FND_API.G_RET_STS_SUCCESS;
719 
720     IF l_CON_rec.return_status = FND_API.G_RET_STS_ERROR THEN
721         x_return_status := FND_API.G_RET_STS_ERROR;
722     END IF;
723 
724     FOR I IN 1..l_SEG_tbl.COUNT LOOP
725 
726         IF l_SEG_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
727             x_return_status := FND_API.G_RET_STS_ERROR;
728         END IF;
729 
730     END LOOP;
731 
732     --  Get message count and data
733 
734     OE_MSG_PUB.Count_And_Get
735     (   p_count                       => x_msg_count
736     ,   p_data                        => x_msg_data
737     );
738 
739 
740 EXCEPTION
741 
742     WHEN FND_API.G_EXC_ERROR THEN
743 
744         x_return_status := FND_API.G_RET_STS_ERROR;
745 
746         --  Get message count and data
747 
748         OE_MSG_PUB.Count_And_Get
749         (   p_count                       => x_msg_count
750         ,   p_data                        => x_msg_data
751         );
752 
756 
753     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
754 
755         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
757         --  Get message count and data
758 
759         OE_MSG_PUB.Count_And_Get
760         (   p_count                       => x_msg_count
761         ,   p_data                        => x_msg_data
762         );
763 
764     WHEN OTHERS THEN
765 
766         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
767 
768         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
769         THEN
770             OE_MSG_PUB.Add_Exc_Msg
771             (   G_PKG_NAME
772             ,   'Process_Attributes'
773             );
774         END IF;
775 
776         --  Get message count and data
777 
778         OE_MSG_PUB.Count_And_Get
779         (   p_count                       => x_msg_count
780         ,   p_data                        => x_msg_data
781         );
782 
783 END Process_Attributes;
784 
785 --  Start of Comments
786 --  API name    Lock_Attributes
787 --  Type        Private
788 --  Function
789 --
790 --  Pre-reqs
791 --
792 --  Parameters
793 --
794 --  Version     Current version = 1.0
795 --              Initial version = 1.0
796 --
797 --  Notes
798 --
799 --  End of Comments
800 
801 PROCEDURE Lock_Attributes
802 (   p_api_version_number            IN  NUMBER
803 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
804 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
805 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
806 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
807 ,   p_CON_rec                       IN  QP_Attributes_PUB.Con_Rec_Type :=
808                                         QP_Attributes_PUB.G_MISS_CON_REC
809 ,   p_SEG_tbl                       IN  QP_Attributes_PUB.Seg_Tbl_Type :=
810                                         QP_Attributes_PUB.G_MISS_SEG_TBL
811 ,   x_CON_rec                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Con_Rec_Type
812 ,   x_SEG_tbl                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Seg_Tbl_Type
813 )
814 IS
815 l_api_version_number          CONSTANT NUMBER := 1.0;
816 l_api_name                    CONSTANT VARCHAR2(30):= 'Lock_Attributes';
817 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
818 l_SEG_rec                     QP_Attributes_PUB.Seg_Rec_Type;
819 BEGIN
820 
821     --  Standard call to check for call compatibility
822 
823     IF NOT FND_API.Compatible_API_Call
824            (   l_api_version_number
825            ,   p_api_version_number
826            ,   l_api_name
827            ,   G_PKG_NAME
828            )
829     THEN
830         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
831     END IF;
832 
833     --  Initialize message list.
834 
835     IF FND_API.to_Boolean(p_init_msg_list) THEN
836         OE_MSG_PUB.initialize;
837     END IF;
838 
839     --  Set Savepoint
840 
841     SAVEPOINT Lock_Attributes_PVT;
842 
843     --  Lock CON
844 
845     IF p_CON_rec.operation = QP_GLOBALS.G_OPR_LOCK THEN
846 
847         QP_Con_Util.Lock_Row
848         (   p_CON_rec                     => p_CON_rec
849         ,   x_CON_rec                     => x_CON_rec
850         ,   x_return_status               => l_return_status
851         );
852 
853         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
854             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
855         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
856             RAISE FND_API.G_EXC_ERROR;
857         END IF;
858 
859 
860     END IF;
861 
862     --  Lock SEG
863 
864     FOR I IN 1..p_SEG_tbl.COUNT LOOP
865 
866         IF p_SEG_tbl(I).operation = QP_GLOBALS.G_OPR_LOCK THEN
867 
868             QP_Seg_Util.Lock_Row
869             (   p_SEG_rec                     => p_SEG_tbl(I)
870             ,   x_SEG_rec                     => l_SEG_rec
871             ,   x_return_status               => l_return_status
872             );
873 
874             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
875                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
876             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
877                 RAISE FND_API.G_EXC_ERROR;
878             END IF;
879 
880             x_SEG_tbl(I)                   := l_SEG_rec;
881 
882         END IF;
883 
884     END LOOP;
885 
886     --  Set return status
887 
888     x_return_status := FND_API.G_RET_STS_SUCCESS;
889 
890     --  Get message count and data
891 
892     OE_MSG_PUB.Count_And_Get
893     (   p_count                       => x_msg_count
894     ,   p_data                        => x_msg_data
895     );
896 
897 
898 EXCEPTION
899 
900     WHEN FND_API.G_EXC_ERROR THEN
901 
902         x_return_status := FND_API.G_RET_STS_ERROR;
903 
904         --  Get message count and data
905 
906         OE_MSG_PUB.Count_And_Get
907         (   p_count                       => x_msg_count
908         ,   p_data                        => x_msg_data
909         );
910 
911         --  Rollback
912 
913         ROLLBACK TO Lock_Attributes_PVT;
914 
915     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
916 
917         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
918 
919         --  Get message count and data
920 
921         OE_MSG_PUB.Count_And_Get
925 
922         (   p_count                       => x_msg_count
923         ,   p_data                        => x_msg_data
924         );
926         --  Rollback
927 
928         ROLLBACK TO Lock_Attributes_PVT;
929 
930     WHEN OTHERS THEN
931 
932         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
933 
934         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
935         THEN
936             OE_MSG_PUB.Add_Exc_Msg
937             (   G_PKG_NAME
938             ,   'Lock_Attributes'
939             );
940         END IF;
941 
942         --  Get message count and data
943 
944         OE_MSG_PUB.Count_And_Get
945         (   p_count                       => x_msg_count
946         ,   p_data                        => x_msg_data
947         );
948 
949         --  Rollback
950 
951         ROLLBACK TO Lock_Attributes_PVT;
952 
953 END Lock_Attributes;
954 
955 --  Start of Comments
956 --  API name    Get_Attributes
957 --  Type        Private
958 --  Function
959 --
960 --  Pre-reqs
961 --
962 --  Parameters
963 --
964 --  Version     Current version = 1.0
965 --              Initial version = 1.0
966 --
967 --  Notes
968 --
969 --  End of Comments
970 
971 PROCEDURE Get_Attributes
972 (   p_api_version_number            IN  NUMBER
973 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
974 ,   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
975 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
976 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
977 ,   p_prc_context_id                IN  NUMBER
978 ,   x_CON_rec                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Con_Rec_Type
979 ,   x_SEG_tbl                       OUT NOCOPY /* file.sql.39 change */ QP_Attributes_PUB.Seg_Tbl_Type
980 )
981 IS
982 l_api_version_number          CONSTANT NUMBER := 1.0;
983 l_api_name                    CONSTANT VARCHAR2(30):= 'Get_Attributes';
984 l_CON_rec                     QP_Attributes_PUB.Con_Rec_Type;
985 l_SEG_tbl                     QP_Attributes_PUB.Seg_Tbl_Type;
986 BEGIN
987 
988     --  Standard call to check for call compatibility
989 
990     IF NOT FND_API.Compatible_API_Call
991            (   l_api_version_number
992            ,   p_api_version_number
993            ,   l_api_name
994            ,   G_PKG_NAME
995            )
996     THEN
997         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
998     END IF;
999 
1000     --  Initialize message list.
1001 
1002     IF FND_API.to_Boolean(p_init_msg_list) THEN
1003         OE_MSG_PUB.initialize;
1004     END IF;
1005 
1006     --  Get CON ( parent = CON )
1007 
1008     l_CON_rec :=  QP_Con_Util.Query_Row
1009     (   p_prc_context_id      => p_prc_context_id
1010     );
1011 
1012         --  Get SEG ( parent = CON )
1013 
1014         l_SEG_tbl :=  QP_Seg_Util.Query_Rows
1015         (   p_prc_context_id        => l_CON_rec.prc_context_id
1016         );
1017 
1018 
1019     --  Load out parameters
1020 
1021     x_CON_rec                      := l_CON_rec;
1022     x_SEG_tbl                      := l_SEG_tbl;
1023 
1024     --  Set return status
1025 
1026     x_return_status := FND_API.G_RET_STS_SUCCESS;
1027 
1028     --  Get message count and data
1029 
1030     OE_MSG_PUB.Count_And_Get
1031     (   p_count                       => x_msg_count
1032     ,   p_data                        => x_msg_data
1033     );
1034 
1035 
1036 EXCEPTION
1037 
1038     WHEN FND_API.G_EXC_ERROR THEN
1039 
1040         x_return_status := FND_API.G_RET_STS_ERROR;
1041 
1042         --  Get message count and data
1043 
1044         OE_MSG_PUB.Count_And_Get
1045         (   p_count                       => x_msg_count
1046         ,   p_data                        => x_msg_data
1047         );
1048 
1049     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1050 
1051         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1052 
1053         --  Get message count and data
1054 
1055         OE_MSG_PUB.Count_And_Get
1056         (   p_count                       => x_msg_count
1057         ,   p_data                        => x_msg_data
1058         );
1059 
1060     WHEN OTHERS THEN
1061 
1062         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1063 
1064         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1065         THEN
1066             OE_MSG_PUB.Add_Exc_Msg
1067             (   G_PKG_NAME
1068             ,   'Get_Attributes'
1069             );
1070         END IF;
1071 
1072         --  Get message count and data
1073 
1074         OE_MSG_PUB.Count_And_Get
1075         (   p_count                       => x_msg_count
1076         ,   p_data                        => x_msg_data
1077         );
1078 
1079 END Get_Attributes;
1080 
1081 END QP_Attributes_PVT;