DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_QP_FORM_PSG

Source


1 PACKAGE BODY QP_QP_Form_Psg AS
2 /* $Header: QPXFPSGB.pls 120.2 2005/07/18 18:33:10 appldev ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_QP_Form_Psg';
7 
8 --  Global variables holding cached record.
9 
10 g_PSG_rec                     QP_Attr_Map_PUB.Psg_Rec_Type;
11 g_db_PSG_rec                  QP_Attr_Map_PUB.Psg_Rec_Type;
12 
13 --  Forward declaration of procedures maintaining entity record cache.
14 
15 PROCEDURE Write_PSG
16 (   p_PSG_rec                       IN  QP_Attr_Map_PUB.Psg_Rec_Type
17 ,   p_db_record                     IN  BOOLEAN := FALSE
18 );
19 
20 FUNCTION Get_PSG
21 (   p_db_record                     IN  BOOLEAN := FALSE
22 ,   p_segment_pte_id                IN  NUMBER
23 )
24 RETURN QP_Attr_Map_PUB.Psg_Rec_Type;
25 
26 PROCEDURE Clear_PSG;
27 
28 --  Global variable holding performed operations.
29 
30 g_opr__tbl                    QP_Attr_Map_PUB.Psg_Tbl_Type;
31 
32 --  Procedure : Default_Attributes
33 --
34 
35 PROCEDURE Default_Attributes
36 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
37 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
38 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
39 ,   x_attribute1                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
40 ,   x_attribute10                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
41 ,   x_attribute11                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
42 ,   x_attribute12                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
43 ,   x_attribute13                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
44 ,   x_attribute14                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
45 ,   x_attribute15                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
46 ,   x_attribute2                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
47 ,   x_attribute3                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
48 ,   x_attribute4                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
49 ,   x_attribute5                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
50 ,   x_attribute6                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
51 ,   x_attribute7                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
52 ,   x_attribute8                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
53 ,   x_attribute9                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
54 ,   x_context                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
55 ,   x_limits_enabled                OUT NOCOPY /* file.sql.39 change */ VARCHAR2
56 ,   x_lov_enabled                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
57 ,   x_pte_code                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
58 ,   x_seeded_sourcing_method        OUT NOCOPY /* file.sql.39 change */ VARCHAR2
59 ,   x_segment_id                    OUT NOCOPY /* file.sql.39 change */ NUMBER
60 ,   x_segment_level                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
61 ,   x_segment_pte_id                OUT NOCOPY /* file.sql.39 change */ NUMBER
62 ,   x_sourcing_enabled              OUT NOCOPY /* file.sql.39 change */ VARCHAR2
63 ,   x_sourcing_status               OUT NOCOPY /* file.sql.39 change */ VARCHAR2
64 ,   x_user_sourcing_method          OUT NOCOPY /* file.sql.39 change */ VARCHAR2
65 ,   x_pte                           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
66 ,   x_segment                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
67 ,   x_segment_pte                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
68 )
69 IS
70 l_PSG_rec                     QP_Attr_Map_PUB.Psg_Rec_Type;
71 l_PSG_val_rec                 QP_Attr_Map_PUB.Psg_Val_Rec_Type;
72 l_PSG_tbl                     QP_Attr_Map_PUB.Psg_Tbl_Type;
73 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
74 l_return_status               VARCHAR2(1);
75 l_x_PTE_rec                   QP_Attr_Map_PUB.Pte_Rec_Type;
76 l_x_RQT_rec                   QP_Attr_Map_PUB.Rqt_Rec_Type;
77 l_x_RQT_tbl                   QP_Attr_Map_PUB.Rqt_Tbl_Type;
78 l_x_SSC_rec                   QP_Attr_Map_PUB.Ssc_Rec_Type;
79 l_x_SSC_tbl                   QP_Attr_Map_PUB.Ssc_Tbl_Type;
80 l_x_PSG_rec                   QP_Attr_Map_PUB.Psg_Rec_Type;
81 l_x_PSG_tbl                   QP_Attr_Map_PUB.Psg_Tbl_Type;
82 l_x_SOU_rec                   QP_Attr_Map_PUB.Sou_Rec_Type;
83 l_x_SOU_tbl                   QP_Attr_Map_PUB.Sou_Tbl_Type;
84 l_x_FNA_rec                   QP_Attr_Map_PUB.Fna_Rec_Type;
85 l_x_FNA_tbl                   QP_Attr_Map_PUB.Fna_Tbl_Type;
86 BEGIN
87 
88     --  Set control flags.
89 
90     l_control_rec.controlled_operation := TRUE;
91     l_control_rec.default_attributes   := TRUE;
92 
93     l_control_rec.change_attributes    := FALSE;
94     l_control_rec.validate_entity      := FALSE;
95     l_control_rec.write_to_DB          := FALSE;
96     l_control_rec.process              := FALSE;
97 
98     --  Instruct API to retain its caches
99 
100     l_control_rec.clear_api_cache      := FALSE;
101     l_control_rec.clear_api_requests   := FALSE;
102 
103     --  Load IN parameters if any exist
104 
105 
106     --  Defaulting of flex values is currently done by the form.
107     --  Set flex attributes to NULL in order to avoid defaulting them.
108 
109     l_PSG_rec.attribute1                          := NULL;
110     l_PSG_rec.attribute10                         := NULL;
111     l_PSG_rec.attribute11                         := NULL;
112     l_PSG_rec.attribute12                         := NULL;
113     l_PSG_rec.attribute13                         := NULL;
114     l_PSG_rec.attribute14                         := NULL;
115     l_PSG_rec.attribute15                         := NULL;
116     l_PSG_rec.attribute2                          := NULL;
117     l_PSG_rec.attribute3                          := NULL;
118     l_PSG_rec.attribute4                          := NULL;
119     l_PSG_rec.attribute5                          := NULL;
120     l_PSG_rec.attribute6                          := NULL;
121     l_PSG_rec.attribute7                          := NULL;
122     l_PSG_rec.attribute8                          := NULL;
123     l_PSG_rec.attribute9                          := NULL;
124     l_PSG_rec.context                             := NULL;
125 
126     --  Set Operation to Create
127 
128     l_PSG_rec.operation := QP_GLOBALS.G_OPR_CREATE;
129 
130     --  Populate PSG table
131 
132     l_PSG_tbl(1) := l_PSG_rec;
133 
134     --  Call QP_Attr_Map_PVT.Process_Attr_Mapping
135 
136     QP_Attr_Map_PVT.Process_Attr_Mapping
137     (   p_api_version_number          => 1.0
138     ,   p_init_msg_list               => FND_API.G_TRUE
139     ,   x_return_status               => l_return_status
140     ,   x_msg_count                   => x_msg_count
141     ,   x_msg_data                    => x_msg_data
142     ,   p_control_rec                 => l_control_rec
143     ,   p_PSG_tbl                     => l_PSG_tbl
144     ,   x_PTE_rec                     => l_x_PTE_rec
145     ,   x_RQT_tbl                     => l_x_RQT_tbl
146     ,   x_SSC_tbl                     => l_x_SSC_tbl
147     ,   x_PSG_tbl                     => l_x_PSG_tbl
148     ,   x_SOU_tbl                     => l_x_SOU_tbl
149     ,   x_FNA_tbl                     => l_x_FNA_tbl
150     );
151 
152     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
153         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
154     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
155         RAISE FND_API.G_EXC_ERROR;
156     END IF;
157 
158 
159     --  Unload out tbl
160 
161     l_x_PSG_rec := l_x_PSG_tbl(1);
162 
163     --  Load OUT parameters.
164 
165     x_attribute1                   := l_x_PSG_rec.attribute1;
166     x_attribute10                  := l_x_PSG_rec.attribute10;
167     x_attribute11                  := l_x_PSG_rec.attribute11;
168     x_attribute12                  := l_x_PSG_rec.attribute12;
169     x_attribute13                  := l_x_PSG_rec.attribute13;
170     x_attribute14                  := l_x_PSG_rec.attribute14;
171     x_attribute15                  := l_x_PSG_rec.attribute15;
172     x_attribute2                   := l_x_PSG_rec.attribute2;
173     x_attribute3                   := l_x_PSG_rec.attribute3;
174     x_attribute4                   := l_x_PSG_rec.attribute4;
175     x_attribute5                   := l_x_PSG_rec.attribute5;
176     x_attribute6                   := l_x_PSG_rec.attribute6;
177     x_attribute7                   := l_x_PSG_rec.attribute7;
178     x_attribute8                   := l_x_PSG_rec.attribute8;
179     x_attribute9                   := l_x_PSG_rec.attribute9;
180     x_context                      := l_x_PSG_rec.context;
181     x_limits_enabled               := l_x_PSG_rec.limits_enabled;
182     x_lov_enabled                  := l_x_PSG_rec.lov_enabled;
183     x_pte_code                     := l_x_PSG_rec.pte_code;
184     x_seeded_sourcing_method       := l_x_PSG_rec.seeded_sourcing_method;
185     x_segment_id                   := l_x_PSG_rec.segment_id;
186     x_segment_level                := l_x_PSG_rec.segment_level;
187     x_segment_pte_id               := l_x_PSG_rec.segment_pte_id;
188     x_sourcing_enabled             := l_x_PSG_rec.sourcing_enabled;
189     x_sourcing_status              := l_x_PSG_rec.sourcing_status;
190     x_user_sourcing_method         := l_x_PSG_rec.user_sourcing_method;
191 
192     --  Load display out parameters if any
193 
194     l_PSG_val_rec := QP_Psg_Util.Get_Values
195     (   p_PSG_rec                     => l_x_PSG_rec
196     );
197     x_pte                          := l_PSG_val_rec.pte;
198     x_segment                      := l_PSG_val_rec.segment;
199     x_segment_pte                  := l_PSG_val_rec.segment_pte;
200 
201     --  Write to cache.
202     --  Set db_flag to False before writing to cache
203 
204     l_x_PSG_rec.db_flag := FND_API.G_FALSE;
205 
206     Write_PSG
207     (   p_PSG_rec                     => l_x_PSG_rec
208     );
209 
210     --  Set return status.
211 
212     x_return_status := FND_API.G_RET_STS_SUCCESS;
213 
214     --  Get message count and data
215 
216     OE_MSG_PUB.Count_And_Get
217     (   p_count                       => x_msg_count
218     ,   p_data                        => x_msg_data
219     );
220 
221 
222 EXCEPTION
223 
224     WHEN FND_API.G_EXC_ERROR THEN
225 
226         x_return_status := FND_API.G_RET_STS_ERROR;
227 
228         --  Get message count and data
229 
230         OE_MSG_PUB.Count_And_Get
231         (   p_count                       => x_msg_count
232         ,   p_data                        => x_msg_data
233         );
234 
235     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
236 
237         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
238 
239         --  Get message count and data
240 
241         OE_MSG_PUB.Count_And_Get
242         (   p_count                       => x_msg_count
243         ,   p_data                        => x_msg_data
244         );
245 
246     WHEN OTHERS THEN
247 
248         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
249 
250         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
251         THEN
252             OE_MSG_PUB.Add_Exc_Msg
253             (   G_PKG_NAME
254             ,   'Default_Attributes'
255             );
256         END IF;
257 
258         --  Get message count and data
259 
260         OE_MSG_PUB.Count_And_Get
261         (   p_count                       => x_msg_count
262         ,   p_data                        => x_msg_data
263         );
264 
265 END Default_Attributes;
266 
267 --  Procedure   :   Change_Attribute
268 --
269 
270 PROCEDURE Change_Attribute
271 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
272 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
273 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
274 ,   p_segment_pte_id                IN  NUMBER
275 ,   p_attr_id                       IN  NUMBER
276 ,   p_attr_value                    IN  VARCHAR2
277 ,   p_attribute1                    IN  VARCHAR2
278 ,   p_attribute10                   IN  VARCHAR2
279 ,   p_attribute11                   IN  VARCHAR2
280 ,   p_attribute12                   IN  VARCHAR2
281 ,   p_attribute13                   IN  VARCHAR2
282 ,   p_attribute14                   IN  VARCHAR2
283 ,   p_attribute15                   IN  VARCHAR2
284 ,   p_attribute2                    IN  VARCHAR2
285 ,   p_attribute3                    IN  VARCHAR2
286 ,   p_attribute4                    IN  VARCHAR2
287 ,   p_attribute5                    IN  VARCHAR2
288 ,   p_attribute6                    IN  VARCHAR2
289 ,   p_attribute7                    IN  VARCHAR2
290 ,   p_attribute8                    IN  VARCHAR2
291 ,   p_attribute9                    IN  VARCHAR2
292 ,   p_context                       IN  VARCHAR2
293 ,   x_attribute1                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
294 ,   x_attribute10                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
295 ,   x_attribute11                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
296 ,   x_attribute12                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
297 ,   x_attribute13                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
298 ,   x_attribute14                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
299 ,   x_attribute15                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
300 ,   x_attribute2                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
301 ,   x_attribute3                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
302 ,   x_attribute4                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
303 ,   x_attribute5                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
304 ,   x_attribute6                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
305 ,   x_attribute7                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
306 ,   x_attribute8                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
307 ,   x_attribute9                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
308 ,   x_context                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
309 ,   x_limits_enabled                OUT NOCOPY /* file.sql.39 change */ VARCHAR2
310 ,   x_lov_enabled                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
311 ,   x_pte_code                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
312 ,   x_seeded_sourcing_method        OUT NOCOPY /* file.sql.39 change */ VARCHAR2
313 ,   x_segment_id                    OUT NOCOPY /* file.sql.39 change */ NUMBER
314 ,   x_segment_level                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
315 ,   x_segment_pte_id                OUT NOCOPY /* file.sql.39 change */ NUMBER
316 ,   x_sourcing_enabled              OUT NOCOPY /* file.sql.39 change */ VARCHAR2
317 ,   x_sourcing_status               OUT NOCOPY /* file.sql.39 change */ VARCHAR2
318 ,   x_user_sourcing_method          OUT NOCOPY /* file.sql.39 change */ VARCHAR2
319 ,   x_pte                           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
320 ,   x_segment                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
321 ,   x_segment_pte                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
322 )
323 IS
324 l_PSG_rec                     QP_Attr_Map_PUB.Psg_Rec_Type;
325 l_old_PSG_rec                 QP_Attr_Map_PUB.Psg_Rec_Type;
326 l_PSG_val_rec                 QP_Attr_Map_PUB.Psg_Val_Rec_Type;
327 l_PSG_tbl                     QP_Attr_Map_PUB.Psg_Tbl_Type;
328 l_old_PSG_tbl                 QP_Attr_Map_PUB.Psg_Tbl_Type;
329 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
330 l_return_status               VARCHAR2(1);
331 l_x_PTE_rec                   QP_Attr_Map_PUB.Pte_Rec_Type;
332 l_x_RQT_rec                   QP_Attr_Map_PUB.Rqt_Rec_Type;
333 l_x_RQT_tbl                   QP_Attr_Map_PUB.Rqt_Tbl_Type;
334 l_x_SSC_rec                   QP_Attr_Map_PUB.Ssc_Rec_Type;
335 l_x_SSC_tbl                   QP_Attr_Map_PUB.Ssc_Tbl_Type;
336 l_x_PSG_rec                   QP_Attr_Map_PUB.Psg_Rec_Type;
337 l_x_PSG_tbl                   QP_Attr_Map_PUB.Psg_Tbl_Type;
338 l_x_SOU_rec                   QP_Attr_Map_PUB.Sou_Rec_Type;
339 l_x_SOU_tbl                   QP_Attr_Map_PUB.Sou_Tbl_Type;
340 l_x_FNA_rec                   QP_Attr_Map_PUB.Fna_Rec_Type;
341 l_x_FNA_tbl                   QP_Attr_Map_PUB.Fna_Tbl_Type;
342 BEGIN
343 
344     --  Set control flags.
345 
346     l_control_rec.controlled_operation := TRUE;
347     l_control_rec.change_attributes    := TRUE;
348 
349     l_control_rec.default_attributes   := FALSE;
350     l_control_rec.validate_entity      := FALSE;
351     l_control_rec.write_to_DB          := FALSE;
352     l_control_rec.process              := FALSE;
353 
354     --  Instruct API to retain its caches
355 
356     l_control_rec.clear_api_cache      := FALSE;
357     l_control_rec.clear_api_requests   := FALSE;
358 
359     --  Read PSG from cache
360 
361     l_PSG_rec := Get_PSG
362     (   p_db_record                   => FALSE
363     ,   p_segment_pte_id              => p_segment_pte_id
364     );
365 
366     l_old_PSG_rec                  := l_PSG_rec;
367 
368     IF p_attr_id = QP_Psg_Util.G_LIMITS_ENABLED THEN
369         l_PSG_rec.limits_enabled := p_attr_value;
370     ELSIF p_attr_id = QP_Psg_Util.G_LOV_ENABLED THEN
371         l_PSG_rec.lov_enabled := p_attr_value;
372     ELSIF p_attr_id = QP_Psg_Util.G_PTE THEN
373         l_PSG_rec.pte_code := p_attr_value;
374     ELSIF p_attr_id = QP_Psg_Util.G_SEEDED_SOURCING_METHOD THEN
375         l_PSG_rec.seeded_sourcing_method := p_attr_value;
376     ELSIF p_attr_id = QP_Psg_Util.G_SEGMENT THEN
377         l_PSG_rec.segment_id := TO_NUMBER(p_attr_value);
378     ELSIF p_attr_id = QP_Psg_Util.G_SEGMENT_LEVEL THEN
379         l_PSG_rec.segment_level := p_attr_value;
380     ELSIF p_attr_id = QP_Psg_Util.G_SEGMENT_PTE THEN
381         l_PSG_rec.segment_pte_id := TO_NUMBER(p_attr_value);
382     ELSIF p_attr_id = QP_Psg_Util.G_SOURCING_ENABLED THEN
383         l_PSG_rec.sourcing_enabled := p_attr_value;
384     ELSIF p_attr_id = QP_Psg_Util.G_SOURCING_STATUS THEN
385         l_PSG_rec.sourcing_status := p_attr_value;
386     ELSIF p_attr_id = QP_Psg_Util.G_USER_SOURCING_METHOD THEN
387         l_PSG_rec.user_sourcing_method := p_attr_value;
388     ELSIF p_attr_id = QP_Psg_Util.G_ATTRIBUTE1
389     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE10
390     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE11
391     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE12
392     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE13
393     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE14
394     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE15
395     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE2
396     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE3
397     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE4
398     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE5
399     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE6
400     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE7
401     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE8
402     OR     p_attr_id = QP_Psg_Util.G_ATTRIBUTE9
403     OR     p_attr_id = QP_Psg_Util.G_CONTEXT
404     THEN
405 
406         l_PSG_rec.attribute1           := p_attribute1;
407         l_PSG_rec.attribute10          := p_attribute10;
408         l_PSG_rec.attribute11          := p_attribute11;
409         l_PSG_rec.attribute12          := p_attribute12;
410         l_PSG_rec.attribute13          := p_attribute13;
411         l_PSG_rec.attribute14          := p_attribute14;
412         l_PSG_rec.attribute15          := p_attribute15;
413         l_PSG_rec.attribute2           := p_attribute2;
414         l_PSG_rec.attribute3           := p_attribute3;
415         l_PSG_rec.attribute4           := p_attribute4;
416         l_PSG_rec.attribute5           := p_attribute5;
417         l_PSG_rec.attribute6           := p_attribute6;
418         l_PSG_rec.attribute7           := p_attribute7;
419         l_PSG_rec.attribute8           := p_attribute8;
420         l_PSG_rec.attribute9           := p_attribute9;
421         l_PSG_rec.context              := p_context;
422 
423     ELSE
424 
425         --  Unexpected error, unrecognized attribute
426 
427         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
428         THEN
429             OE_MSG_PUB.Add_Exc_Msg
430             (   G_PKG_NAME
431             ,   'Change_Attribute'
432             ,   'Unrecognized attribute'
433             );
434         END IF;
435 
436         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
437 
438     END IF;
439 
440     --  Set Operation.
441 
442     IF FND_API.To_Boolean(l_PSG_rec.db_flag) THEN
443         l_PSG_rec.operation := QP_GLOBALS.G_OPR_UPDATE;
444     ELSE
445         l_PSG_rec.operation := QP_GLOBALS.G_OPR_CREATE;
446     END IF;
447 
448     --  Populate PSG table
449 
450     l_PSG_tbl(1) := l_PSG_rec;
451     l_old_PSG_tbl(1) := l_old_PSG_rec;
452 
453     --  Call QP_Attr_Map_PVT.Process_Attr_Mapping
454 
455     QP_Attr_Map_PVT.Process_Attr_Mapping
456     (   p_api_version_number          => 1.0
457     ,   p_init_msg_list               => FND_API.G_TRUE
458     ,   p_validation_level            => FND_API.G_VALID_LEVEL_NONE
459     ,   x_return_status               => l_return_status
460     ,   x_msg_count                   => x_msg_count
461     ,   x_msg_data                    => x_msg_data
462     ,   p_control_rec                 => l_control_rec
463     ,   p_PSG_tbl                     => l_PSG_tbl
464     ,   p_old_PSG_tbl                 => l_old_PSG_tbl
465     ,   x_PTE_rec                     => l_x_PTE_rec
466     ,   x_RQT_tbl                     => l_x_RQT_tbl
467     ,   x_SSC_tbl                     => l_x_SSC_tbl
468     ,   x_PSG_tbl                     => l_x_PSG_tbl
469     ,   x_SOU_tbl                     => l_x_SOU_tbl
470     ,   x_FNA_tbl                     => l_x_FNA_tbl
471     );
472 
473     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
474         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
475     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
476         RAISE FND_API.G_EXC_ERROR;
477     END IF;
478 
479 
480     --  Unload out tbl
481 
482     l_x_PSG_rec := l_x_PSG_tbl(1);
483 
484     --  Init OUT parameters to missing.
485 
486     x_attribute1                   := FND_API.G_MISS_CHAR;
487     x_attribute10                  := FND_API.G_MISS_CHAR;
488     x_attribute11                  := FND_API.G_MISS_CHAR;
489     x_attribute12                  := FND_API.G_MISS_CHAR;
490     x_attribute13                  := FND_API.G_MISS_CHAR;
491     x_attribute14                  := FND_API.G_MISS_CHAR;
492     x_attribute15                  := FND_API.G_MISS_CHAR;
493     x_attribute2                   := FND_API.G_MISS_CHAR;
494     x_attribute3                   := FND_API.G_MISS_CHAR;
495     x_attribute4                   := FND_API.G_MISS_CHAR;
496     x_attribute5                   := FND_API.G_MISS_CHAR;
497     x_attribute6                   := FND_API.G_MISS_CHAR;
498     x_attribute7                   := FND_API.G_MISS_CHAR;
499     x_attribute8                   := FND_API.G_MISS_CHAR;
500     x_attribute9                   := FND_API.G_MISS_CHAR;
501     x_context                      := FND_API.G_MISS_CHAR;
502     x_limits_enabled               := FND_API.G_MISS_CHAR;
503     x_lov_enabled                  := FND_API.G_MISS_CHAR;
504     x_pte_code                     := FND_API.G_MISS_CHAR;
505     x_seeded_sourcing_method       := FND_API.G_MISS_CHAR;
506     x_segment_id                   := FND_API.G_MISS_NUM;
507     x_segment_level                := FND_API.G_MISS_CHAR;
508     x_segment_pte_id               := FND_API.G_MISS_NUM;
509     x_sourcing_enabled             := FND_API.G_MISS_CHAR;
510     x_sourcing_status              := FND_API.G_MISS_CHAR;
511     x_user_sourcing_method         := FND_API.G_MISS_CHAR;
512     x_pte                          := FND_API.G_MISS_CHAR;
513     x_segment                      := FND_API.G_MISS_CHAR;
514     x_segment_pte                  := FND_API.G_MISS_CHAR;
515 
516     --  Load display out parameters if any
517 
518     l_PSG_val_rec := QP_Psg_Util.Get_Values
519     (   p_PSG_rec                     => l_x_PSG_rec
520     ,   p_old_PSG_rec                 => l_PSG_rec
521     );
522 
523     --  Return changed attributes.
524 
525     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute1,
526                             l_PSG_rec.attribute1)
527     THEN
528         x_attribute1 := l_x_PSG_rec.attribute1;
529     END IF;
530 
531     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute10,
532                             l_PSG_rec.attribute10)
533     THEN
534         x_attribute10 := l_x_PSG_rec.attribute10;
535     END IF;
536 
537     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute11,
538                             l_PSG_rec.attribute11)
539     THEN
540         x_attribute11 := l_x_PSG_rec.attribute11;
541     END IF;
542 
543     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute12,
544                             l_PSG_rec.attribute12)
545     THEN
546         x_attribute12 := l_x_PSG_rec.attribute12;
547     END IF;
548 
549     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute13,
550                             l_PSG_rec.attribute13)
551     THEN
552         x_attribute13 := l_x_PSG_rec.attribute13;
553     END IF;
554 
555     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute14,
556                             l_PSG_rec.attribute14)
557     THEN
558         x_attribute14 := l_x_PSG_rec.attribute14;
559     END IF;
560 
561     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute15,
562                             l_PSG_rec.attribute15)
563     THEN
564         x_attribute15 := l_x_PSG_rec.attribute15;
565     END IF;
566 
567     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute2,
568                             l_PSG_rec.attribute2)
569     THEN
570         x_attribute2 := l_x_PSG_rec.attribute2;
571     END IF;
572 
573     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute3,
574                             l_PSG_rec.attribute3)
575     THEN
576         x_attribute3 := l_x_PSG_rec.attribute3;
577     END IF;
578 
579     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute4,
580                             l_PSG_rec.attribute4)
581     THEN
582         x_attribute4 := l_x_PSG_rec.attribute4;
583     END IF;
584 
585     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute5,
586                             l_PSG_rec.attribute5)
587     THEN
588         x_attribute5 := l_x_PSG_rec.attribute5;
589     END IF;
590 
591     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute6,
592                             l_PSG_rec.attribute6)
593     THEN
594         x_attribute6 := l_x_PSG_rec.attribute6;
595     END IF;
596 
597     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute7,
598                             l_PSG_rec.attribute7)
599     THEN
600         x_attribute7 := l_x_PSG_rec.attribute7;
601     END IF;
602 
603     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute8,
604                             l_PSG_rec.attribute8)
605     THEN
606         x_attribute8 := l_x_PSG_rec.attribute8;
607     END IF;
608 
609     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.attribute9,
610                             l_PSG_rec.attribute9)
611     THEN
612         x_attribute9 := l_x_PSG_rec.attribute9;
613     END IF;
614 
615     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.context,
616                             l_PSG_rec.context)
617     THEN
618         x_context := l_x_PSG_rec.context;
619     END IF;
620 
621     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.limits_enabled,
622                             l_PSG_rec.limits_enabled)
623     THEN
624         x_limits_enabled := l_x_PSG_rec.limits_enabled;
625     END IF;
626 
627     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.lov_enabled,
628                             l_PSG_rec.lov_enabled)
629     THEN
630         x_lov_enabled := l_x_PSG_rec.lov_enabled;
631     END IF;
632 
633     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.pte_code,
634                             l_PSG_rec.pte_code)
635     THEN
636         x_pte_code := l_x_PSG_rec.pte_code;
637         x_pte := l_PSG_val_rec.pte;
638     END IF;
639 
640     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.seeded_sourcing_method,
641                             l_PSG_rec.seeded_sourcing_method)
642     THEN
643         x_seeded_sourcing_method := l_x_PSG_rec.seeded_sourcing_method;
644     END IF;
645 
646     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.segment_id,
647                             l_PSG_rec.segment_id)
648     THEN
649         x_segment_id := l_x_PSG_rec.segment_id;
650         x_segment := l_PSG_val_rec.segment;
651     END IF;
652 
653     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.segment_level,
654                             l_PSG_rec.segment_level)
655     THEN
656         x_segment_level := l_x_PSG_rec.segment_level;
657     END IF;
658 
659     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.segment_pte_id,
660                             l_PSG_rec.segment_pte_id)
661     THEN
662         x_segment_pte_id := l_x_PSG_rec.segment_pte_id;
663         x_segment_pte := l_PSG_val_rec.segment_pte;
664     END IF;
665 
666     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.sourcing_enabled,
667                             l_PSG_rec.sourcing_enabled)
668     THEN
669         x_sourcing_enabled := l_x_PSG_rec.sourcing_enabled;
670     END IF;
671 
672     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.sourcing_status,
673                             l_PSG_rec.sourcing_status)
674     THEN
675         x_sourcing_status := l_x_PSG_rec.sourcing_status;
676     END IF;
677 
678     IF NOT QP_GLOBALS.Equal(l_x_PSG_rec.user_sourcing_method,
679                             l_PSG_rec.user_sourcing_method)
680     THEN
681         x_user_sourcing_method := l_x_PSG_rec.user_sourcing_method;
682     END IF;
683 
684 
685     --  Write to cache.
686 
687     Write_PSG
688     (   p_PSG_rec                     => l_x_PSG_rec
689     );
690 
691     --  Set return status.
692 
693     x_return_status := FND_API.G_RET_STS_SUCCESS;
694 
695     --  Get message count and data
696 
697     OE_MSG_PUB.Count_And_Get
698     (   p_count                       => x_msg_count
699     ,   p_data                        => x_msg_data
700     );
701 
702 
703 EXCEPTION
704 
705     WHEN FND_API.G_EXC_ERROR THEN
706 
707         x_return_status := FND_API.G_RET_STS_ERROR;
708 
709         --  Get message count and data
710 
711         OE_MSG_PUB.Count_And_Get
712         (   p_count                       => x_msg_count
713         ,   p_data                        => x_msg_data
714         );
715 
716     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
717 
718         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
719 
720         --  Get message count and data
721 
722         OE_MSG_PUB.Count_And_Get
723         (   p_count                       => x_msg_count
724         ,   p_data                        => x_msg_data
725         );
726 
727     WHEN OTHERS THEN
728 
729         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
730 
731         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
732         THEN
733             OE_MSG_PUB.Add_Exc_Msg
734             (   G_PKG_NAME
735             ,   'Change_Attribute'
736             );
737         END IF;
738 
739         --  Get message count and data
740 
741         OE_MSG_PUB.Count_And_Get
742         (   p_count                       => x_msg_count
743         ,   p_data                        => x_msg_data
744         );
745 
746 END Change_Attribute;
747 
748 --  Procedure       Validate_And_Write
749 --
750 
751 PROCEDURE Validate_And_Write
752 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
753 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
754 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
755 ,   p_segment_pte_id                IN  NUMBER
756 ,   x_creation_date                 OUT NOCOPY /* file.sql.39 change */ DATE
757 ,   x_created_by                    OUT NOCOPY /* file.sql.39 change */ NUMBER
758 ,   x_last_update_date              OUT NOCOPY /* file.sql.39 change */ DATE
759 ,   x_last_updated_by               OUT NOCOPY /* file.sql.39 change */ NUMBER
760 ,   x_last_update_login             OUT NOCOPY /* file.sql.39 change */ NUMBER
761 )
762 IS
763 l_PSG_rec                     QP_Attr_Map_PUB.Psg_Rec_Type;
764 l_old_PSG_rec                 QP_Attr_Map_PUB.Psg_Rec_Type;
765 l_PSG_tbl                     QP_Attr_Map_PUB.Psg_Tbl_Type;
766 l_old_PSG_tbl                 QP_Attr_Map_PUB.Psg_Tbl_Type;
767 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
768 l_return_status               VARCHAR2(1);
769 l_x_PTE_rec                   QP_Attr_Map_PUB.Pte_Rec_Type;
770 l_x_RQT_rec                   QP_Attr_Map_PUB.Rqt_Rec_Type;
771 l_x_RQT_tbl                   QP_Attr_Map_PUB.Rqt_Tbl_Type;
772 l_x_SSC_rec                   QP_Attr_Map_PUB.Ssc_Rec_Type;
773 l_x_SSC_tbl                   QP_Attr_Map_PUB.Ssc_Tbl_Type;
774 l_x_PSG_rec                   QP_Attr_Map_PUB.Psg_Rec_Type;
775 l_x_PSG_tbl                   QP_Attr_Map_PUB.Psg_Tbl_Type;
776 l_x_SOU_rec                   QP_Attr_Map_PUB.Sou_Rec_Type;
777 l_x_SOU_tbl                   QP_Attr_Map_PUB.Sou_Tbl_Type;
778 l_x_FNA_rec                   QP_Attr_Map_PUB.Fna_Rec_Type;
779 l_x_FNA_tbl                   QP_Attr_Map_PUB.Fna_Tbl_Type;
780 BEGIN
781 
782     --  Set control flags.
783 
784     l_control_rec.controlled_operation := TRUE;
785     l_control_rec.validate_entity      := TRUE;
786     l_control_rec.write_to_DB          := TRUE;
787 
788     l_control_rec.default_attributes   := FALSE;
789     l_control_rec.change_attributes    := FALSE;
790     l_control_rec.process              := FALSE;
791 
792     --  Instruct API to retain its caches
793 
794     l_control_rec.clear_api_cache      := FALSE;
795     l_control_rec.clear_api_requests   := FALSE;
796 
797     --  Read PSG from cache
798 
799     l_old_PSG_rec := Get_PSG
800     (   p_db_record                   => TRUE
801     ,   p_segment_pte_id              => p_segment_pte_id
802     );
803 
804     l_PSG_rec := Get_PSG
805     (   p_db_record                   => FALSE
806     ,   p_segment_pte_id              => p_segment_pte_id
807     );
808 
809     --  Set Operation.
810 
811     IF FND_API.To_Boolean(l_PSG_rec.db_flag) THEN
812         l_PSG_rec.operation := QP_GLOBALS.G_OPR_UPDATE;
813     ELSE
814         l_PSG_rec.operation := QP_GLOBALS.G_OPR_CREATE;
815     END IF;
816 
817     --  Populate PSG table
818 
819     l_PSG_tbl(1) := l_PSG_rec;
820     l_old_PSG_tbl(1) := l_old_PSG_rec;
821 
822     --  Call QP_Attr_Map_PVT.Process_Attr_Mapping
823 
824     QP_Attr_Map_PVT.Process_Attr_Mapping
825     (   p_api_version_number          => 1.0
826     ,   p_init_msg_list               => FND_API.G_TRUE
827     ,   x_return_status               => l_return_status
828     ,   x_msg_count                   => x_msg_count
829     ,   x_msg_data                    => x_msg_data
830     ,   p_control_rec                 => l_control_rec
831     ,   p_PSG_tbl                     => l_PSG_tbl
832     ,   p_old_PSG_tbl                 => l_old_PSG_tbl
833     ,   x_PTE_rec                     => l_x_PTE_rec
834     ,   x_RQT_tbl                     => l_x_RQT_tbl
835     ,   x_SSC_tbl                     => l_x_SSC_tbl
836     ,   x_PSG_tbl                     => l_x_PSG_tbl
837     ,   x_SOU_tbl                     => l_x_SOU_tbl
838     ,   x_FNA_tbl                     => l_x_FNA_tbl
839     );
840 
841     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
842         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
843     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
844         RAISE FND_API.G_EXC_ERROR;
845     END IF;
846 
847 
848     --  Load OUT parameters.
849 
850     l_x_PSG_rec := l_x_PSG_tbl(1);
851 
852     x_creation_date                := l_x_PSG_rec.creation_date;
853     x_created_by                   := l_x_PSG_rec.created_by;
854     x_last_update_date             := l_x_PSG_rec.last_update_date;
855     x_last_updated_by              := l_x_PSG_rec.last_updated_by;
856     x_last_update_login            := l_x_PSG_rec.last_update_login;
857 
858     --  Clear PSG record cache
859 
860     Clear_PSG;
861 
862     --  Keep track of performed operations.
863 
864     l_old_PSG_rec.operation := l_PSG_rec.operation;
865 
866 
867     --  Set return status.
868 
869     x_return_status := FND_API.G_RET_STS_SUCCESS;
870 
871     --  Get message count and data
872 
873     OE_MSG_PUB.Count_And_Get
874     (   p_count                       => x_msg_count
875     ,   p_data                        => x_msg_data
876     );
877 
878 
879 EXCEPTION
880 
881     WHEN FND_API.G_EXC_ERROR THEN
882 
883         x_return_status := FND_API.G_RET_STS_ERROR;
884 
885         --  Get message count and data
886 
887         OE_MSG_PUB.Count_And_Get
888         (   p_count                       => x_msg_count
889         ,   p_data                        => x_msg_data
890         );
891 
892     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
893 
894         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
895 
896         --  Get message count and data
897 
898         OE_MSG_PUB.Count_And_Get
899         (   p_count                       => x_msg_count
900         ,   p_data                        => x_msg_data
901         );
902 
903     WHEN OTHERS THEN
904 
905         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
906 
907         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
908         THEN
909             OE_MSG_PUB.Add_Exc_Msg
910             (   G_PKG_NAME
911             ,   'Validate_And_Write'
912             );
913         END IF;
914 
915         --  Get message count and data
916 
917         OE_MSG_PUB.Count_And_Get
918         (   p_count                       => x_msg_count
919         ,   p_data                        => x_msg_data
920         );
921 
922 END Validate_And_Write;
923 
924 --  Procedure       Delete_Row
925 --
926 
927 PROCEDURE Delete_Row
928 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
929 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
930 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
931 ,   p_segment_pte_id                IN  NUMBER
932 )
933 IS
934 l_PSG_rec                     QP_Attr_Map_PUB.Psg_Rec_Type;
935 l_PSG_tbl                     QP_Attr_Map_PUB.Psg_Tbl_Type;
936 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
937 l_return_status               VARCHAR2(1);
938 l_x_PTE_rec                   QP_Attr_Map_PUB.Pte_Rec_Type;
939 l_x_RQT_rec                   QP_Attr_Map_PUB.Rqt_Rec_Type;
940 l_x_RQT_tbl                   QP_Attr_Map_PUB.Rqt_Tbl_Type;
941 l_x_SSC_rec                   QP_Attr_Map_PUB.Ssc_Rec_Type;
942 l_x_SSC_tbl                   QP_Attr_Map_PUB.Ssc_Tbl_Type;
943 l_x_PSG_rec                   QP_Attr_Map_PUB.Psg_Rec_Type;
944 l_x_PSG_tbl                   QP_Attr_Map_PUB.Psg_Tbl_Type;
945 l_x_SOU_rec                   QP_Attr_Map_PUB.Sou_Rec_Type;
946 l_x_SOU_tbl                   QP_Attr_Map_PUB.Sou_Tbl_Type;
947 l_x_FNA_rec                   QP_Attr_Map_PUB.Fna_Rec_Type;
948 l_x_FNA_tbl                   QP_Attr_Map_PUB.Fna_Tbl_Type;
949 BEGIN
950 
951     --  Set control flags.
952 
953     l_control_rec.controlled_operation := TRUE;
954     l_control_rec.validate_entity      := TRUE;
955     l_control_rec.write_to_DB          := TRUE;
956 
957     l_control_rec.default_attributes   := FALSE;
958     l_control_rec.change_attributes    := FALSE;
959     l_control_rec.process              := FALSE;
960 
961     --  Instruct API to retain its caches
962 
963     l_control_rec.clear_api_cache      := FALSE;
964     l_control_rec.clear_api_requests   := FALSE;
965 
966     --  Read DB record from cache
967 
968     l_PSG_rec := Get_PSG
969     (   p_db_record                   => TRUE
970     ,   p_segment_pte_id              => p_segment_pte_id
971     );
972 
973     --  Set Operation.
974 
975     l_PSG_rec.operation := QP_GLOBALS.G_OPR_DELETE;
976 
977     --  Populate PSG table
978 
979     l_PSG_tbl(1) := l_PSG_rec;
980 
981     --  Call QP_Attr_Map_PVT.Process_Attr_Mapping
982 
983     QP_Attr_Map_PVT.Process_Attr_Mapping
984     (   p_api_version_number          => 1.0
985     ,   p_init_msg_list               => FND_API.G_TRUE
986     ,   x_return_status               => l_return_status
987     ,   x_msg_count                   => x_msg_count
988     ,   x_msg_data                    => x_msg_data
989     ,   p_control_rec                 => l_control_rec
990     ,   p_PSG_tbl                     => l_PSG_tbl
991     ,   x_PTE_rec                     => l_x_PTE_rec
992     ,   x_RQT_tbl                     => l_x_RQT_tbl
993     ,   x_SSC_tbl                     => l_x_SSC_tbl
994     ,   x_PSG_tbl                     => l_x_PSG_tbl
995     ,   x_SOU_tbl                     => l_x_SOU_tbl
996     ,   x_FNA_tbl                     => l_x_FNA_tbl
997     );
998 
999     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1000         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1001     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1002         RAISE FND_API.G_EXC_ERROR;
1003     END IF;
1004 
1005 
1006     --  Clear PSG record cache
1007 
1008     Clear_PSG;
1009 
1010     --  Set return status.
1011 
1012     x_return_status := FND_API.G_RET_STS_SUCCESS;
1013 
1014     --  Get message count and data
1015 
1016     OE_MSG_PUB.Count_And_Get
1017     (   p_count                       => x_msg_count
1018     ,   p_data                        => x_msg_data
1019     );
1020 
1021 
1022 EXCEPTION
1023 
1024     WHEN FND_API.G_EXC_ERROR THEN
1025 
1026         x_return_status := FND_API.G_RET_STS_ERROR;
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     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1036 
1037         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1038 
1039         --  Get message count and data
1040 
1041         OE_MSG_PUB.Count_And_Get
1042         (   p_count                       => x_msg_count
1043         ,   p_data                        => x_msg_data
1044         );
1045 
1046     WHEN OTHERS THEN
1047 
1048         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1049 
1050         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1051         THEN
1052             OE_MSG_PUB.Add_Exc_Msg
1053             (   G_PKG_NAME
1054             ,   'Delete_Row'
1055             );
1056         END IF;
1057 
1058         --  Get message count and data
1059 
1060         OE_MSG_PUB.Count_And_Get
1061         (   p_count                       => x_msg_count
1062         ,   p_data                        => x_msg_data
1063         );
1064 
1065 END Delete_Row;
1066 
1067 --  Procedure       Process_Entity
1068 --
1069 
1070 PROCEDURE Process_Entity
1071 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1072 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1073 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1074 )
1075 IS
1076 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1077 l_return_status               VARCHAR2(1);
1078 l_x_PTE_rec                   QP_Attr_Map_PUB.Pte_Rec_Type;
1079 l_x_RQT_rec                   QP_Attr_Map_PUB.Rqt_Rec_Type;
1080 l_x_RQT_tbl                   QP_Attr_Map_PUB.Rqt_Tbl_Type;
1081 l_x_SSC_rec                   QP_Attr_Map_PUB.Ssc_Rec_Type;
1082 l_x_SSC_tbl                   QP_Attr_Map_PUB.Ssc_Tbl_Type;
1083 l_x_PSG_rec                   QP_Attr_Map_PUB.Psg_Rec_Type;
1084 l_x_PSG_tbl                   QP_Attr_Map_PUB.Psg_Tbl_Type;
1085 l_x_SOU_rec                   QP_Attr_Map_PUB.Sou_Rec_Type;
1086 l_x_SOU_tbl                   QP_Attr_Map_PUB.Sou_Tbl_Type;
1087 l_x_FNA_rec                   QP_Attr_Map_PUB.Fna_Rec_Type;
1088 l_x_FNA_tbl                   QP_Attr_Map_PUB.Fna_Tbl_Type;
1089 BEGIN
1090 
1091     --  Set control flags.
1092 
1093     l_control_rec.controlled_operation := TRUE;
1094     l_control_rec.process              := TRUE;
1095     l_control_rec.process_entity       := QP_GLOBALS.G_ENTITY_PSG;
1096 
1097     l_control_rec.default_attributes   := FALSE;
1098     l_control_rec.change_attributes    := FALSE;
1099     l_control_rec.validate_entity      := FALSE;
1100     l_control_rec.write_to_DB          := FALSE;
1101 
1102     --  Instruct API to clear its request table
1103 
1104     l_control_rec.clear_api_cache      := FALSE;
1105     l_control_rec.clear_api_requests   := FALSE;
1106 
1107     --  Call QP_Attr_Map_PVT.Process_Attr_Mapping
1108 
1109     QP_Attr_Map_PVT.Process_Attr_Mapping
1110     (   p_api_version_number          => 1.0
1111     ,   p_init_msg_list               => FND_API.G_TRUE
1112     ,   x_return_status               => l_return_status
1113     ,   x_msg_count                   => x_msg_count
1114     ,   x_msg_data                    => x_msg_data
1115     ,   p_control_rec                 => l_control_rec
1116     ,   x_PTE_rec                     => l_x_PTE_rec
1117     ,   x_RQT_tbl                     => l_x_RQT_tbl
1118     ,   x_SSC_tbl                     => l_x_SSC_tbl
1119     ,   x_PSG_tbl                     => l_x_PSG_tbl
1120     ,   x_SOU_tbl                     => l_x_SOU_tbl
1121     ,   x_FNA_tbl                     => l_x_FNA_tbl
1122     );
1123 
1124     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1125         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1126     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1127         RAISE FND_API.G_EXC_ERROR;
1128     END IF;
1129 
1130 
1131     --  Set return status.
1132 
1133     x_return_status := FND_API.G_RET_STS_SUCCESS;
1134 
1135     --  Get message count and data
1136 
1137     OE_MSG_PUB.Count_And_Get
1138     (   p_count                       => x_msg_count
1139     ,   p_data                        => x_msg_data
1140     );
1141 
1142 
1143 EXCEPTION
1144 
1145     WHEN FND_API.G_EXC_ERROR THEN
1146 
1147         x_return_status := FND_API.G_RET_STS_ERROR;
1148 
1149         --  Get message count and data
1150 
1151         OE_MSG_PUB.Count_And_Get
1152         (   p_count                       => x_msg_count
1153         ,   p_data                        => x_msg_data
1154         );
1155 
1156     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1157 
1158         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1159 
1160         --  Get message count and data
1161 
1162         OE_MSG_PUB.Count_And_Get
1163         (   p_count                       => x_msg_count
1164         ,   p_data                        => x_msg_data
1165         );
1166 
1167     WHEN OTHERS THEN
1168 
1169         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1170 
1171         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1172         THEN
1173             OE_MSG_PUB.Add_Exc_Msg
1174             (   G_PKG_NAME
1175             ,   'Process_Entity'
1176             );
1177         END IF;
1178 
1179         --  Get message count and data
1180 
1181         OE_MSG_PUB.Count_And_Get
1182         (   p_count                       => x_msg_count
1183         ,   p_data                        => x_msg_data
1184         );
1185 
1186 END Process_Entity;
1187 
1188 --  Procedure       lock_Row
1189 --
1190 
1191 PROCEDURE Lock_Row
1192 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1193 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1194 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1195 ,   p_attribute1                    IN  VARCHAR2
1196 ,   p_attribute10                   IN  VARCHAR2
1197 ,   p_attribute11                   IN  VARCHAR2
1198 ,   p_attribute12                   IN  VARCHAR2
1199 ,   p_attribute13                   IN  VARCHAR2
1200 ,   p_attribute14                   IN  VARCHAR2
1201 ,   p_attribute15                   IN  VARCHAR2
1202 ,   p_attribute2                    IN  VARCHAR2
1203 ,   p_attribute3                    IN  VARCHAR2
1204 ,   p_attribute4                    IN  VARCHAR2
1205 ,   p_attribute5                    IN  VARCHAR2
1206 ,   p_attribute6                    IN  VARCHAR2
1207 ,   p_attribute7                    IN  VARCHAR2
1208 ,   p_attribute8                    IN  VARCHAR2
1209 ,   p_attribute9                    IN  VARCHAR2
1210 ,   p_context                       IN  VARCHAR2
1211 ,   p_created_by                    IN  NUMBER
1212 ,   p_creation_date                 IN  DATE
1213 ,   p_last_updated_by               IN  NUMBER
1214 ,   p_last_update_date              IN  DATE
1215 ,   p_last_update_login             IN  NUMBER
1216 ,   p_limits_enabled                IN  VARCHAR2
1217 ,   p_lov_enabled                   IN  VARCHAR2
1218 ,   p_program_application_id        IN  NUMBER
1219 ,   p_program_id                    IN  NUMBER
1220 ,   p_program_update_date           IN  DATE
1221 ,   p_pte_code                      IN  VARCHAR2
1222 ,   p_seeded_sourcing_method        IN  VARCHAR2
1223 ,   p_segment_id                    IN  NUMBER
1224 ,   p_segment_level                 IN  VARCHAR2
1225 ,   p_segment_pte_id                IN  NUMBER
1226 ,   p_sourcing_enabled              IN  VARCHAR2
1227 ,   p_sourcing_status               IN  VARCHAR2
1228 ,   p_user_sourcing_method          IN  VARCHAR2
1229 )
1230 IS
1231 l_return_status               VARCHAR2(1);
1232 l_PSG_rec                     QP_Attr_Map_PUB.Psg_Rec_Type;
1233 l_PSG_tbl                     QP_Attr_Map_PUB.Psg_Tbl_Type;
1234 l_x_PTE_rec                   QP_Attr_Map_PUB.Pte_Rec_Type;
1235 l_x_RQT_rec                   QP_Attr_Map_PUB.Rqt_Rec_Type;
1236 l_x_RQT_tbl                   QP_Attr_Map_PUB.Rqt_Tbl_Type;
1237 l_x_SSC_rec                   QP_Attr_Map_PUB.Ssc_Rec_Type;
1238 l_x_SSC_tbl                   QP_Attr_Map_PUB.Ssc_Tbl_Type;
1239 l_x_PSG_rec                   QP_Attr_Map_PUB.Psg_Rec_Type;
1240 l_x_PSG_tbl                   QP_Attr_Map_PUB.Psg_Tbl_Type;
1241 l_x_SOU_rec                   QP_Attr_Map_PUB.Sou_Rec_Type;
1242 l_x_SOU_tbl                   QP_Attr_Map_PUB.Sou_Tbl_Type;
1243 l_x_FNA_rec                   QP_Attr_Map_PUB.Fna_Rec_Type;
1244 l_x_FNA_tbl                   QP_Attr_Map_PUB.Fna_Tbl_Type;
1245 BEGIN
1246 
1247     --  Load PSG record
1248 
1249     l_PSG_rec.attribute1           := p_attribute1;
1250     l_PSG_rec.attribute10          := p_attribute10;
1251     l_PSG_rec.attribute11          := p_attribute11;
1252     l_PSG_rec.attribute12          := p_attribute12;
1253     l_PSG_rec.attribute13          := p_attribute13;
1254     l_PSG_rec.attribute14          := p_attribute14;
1255     l_PSG_rec.attribute15          := p_attribute15;
1256     l_PSG_rec.attribute2           := p_attribute2;
1257     l_PSG_rec.attribute3           := p_attribute3;
1258     l_PSG_rec.attribute4           := p_attribute4;
1259     l_PSG_rec.attribute5           := p_attribute5;
1260     l_PSG_rec.attribute6           := p_attribute6;
1261     l_PSG_rec.attribute7           := p_attribute7;
1262     l_PSG_rec.attribute8           := p_attribute8;
1263     l_PSG_rec.attribute9           := p_attribute9;
1264     l_PSG_rec.context              := p_context;
1265     l_PSG_rec.created_by           := p_created_by;
1266     l_PSG_rec.creation_date        := p_creation_date;
1267     l_PSG_rec.last_updated_by      := p_last_updated_by;
1268     l_PSG_rec.last_update_date     := p_last_update_date;
1269     l_PSG_rec.last_update_login    := p_last_update_login;
1270     l_PSG_rec.limits_enabled       := p_limits_enabled;
1271     l_PSG_rec.lov_enabled          := p_lov_enabled;
1272     l_PSG_rec.program_application_id := p_program_application_id;
1273     l_PSG_rec.program_id           := p_program_id;
1274     l_PSG_rec.program_update_date  := p_program_update_date;
1275     l_PSG_rec.pte_code             := p_pte_code;
1276     l_PSG_rec.seeded_sourcing_method := p_seeded_sourcing_method;
1277     l_PSG_rec.segment_id           := p_segment_id;
1278     l_PSG_rec.segment_level        := p_segment_level;
1279     l_PSG_rec.segment_pte_id       := p_segment_pte_id;
1280     l_PSG_rec.sourcing_enabled     := p_sourcing_enabled;
1281     l_PSG_rec.sourcing_status      := p_sourcing_status;
1282     l_PSG_rec.user_sourcing_method := p_user_sourcing_method;
1283 
1284     --  Populate PSG table
1285 
1286     l_PSG_tbl(1) := l_PSG_rec;
1287 
1288     --  Call QP_Attr_Map_PVT.Lock_Attr_Mapping
1289 
1290     QP_Attr_Map_PVT.Lock_Attr_Mapping
1291     (   p_api_version_number          => 1.0
1292     ,   p_init_msg_list               => FND_API.G_TRUE
1293     ,   x_return_status               => l_return_status
1294     ,   x_msg_count                   => x_msg_count
1295     ,   x_msg_data                    => x_msg_data
1296     ,   p_PSG_tbl                     => l_PSG_tbl
1297     ,   x_PTE_rec                     => l_x_PTE_rec
1298     ,   x_RQT_tbl                     => l_x_RQT_tbl
1299     ,   x_SSC_tbl                     => l_x_SSC_tbl
1300     ,   x_PSG_tbl                     => l_x_PSG_tbl
1301     ,   x_SOU_tbl                     => l_x_SOU_tbl
1302     ,   x_FNA_tbl                     => l_x_FNA_tbl
1303     );
1304 
1305     IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1306 
1307         --  Set DB flag and write record to cache.
1308 
1309         l_x_PSG_rec.db_flag := FND_API.G_TRUE;
1310 
1311         Write_PSG
1312         (   p_PSG_rec                     => l_x_PSG_rec
1313         ,   p_db_record                   => TRUE
1314         );
1315 
1316     END IF;
1317 
1318     --  Set return status.
1319 
1320     x_return_status := l_return_status;
1321 
1322     --  Get message count and data
1323 
1324     OE_MSG_PUB.Count_And_Get
1325     (   p_count                       => x_msg_count
1326     ,   p_data                        => x_msg_data
1327     );
1328 
1329 
1330 EXCEPTION
1331 
1332     WHEN OTHERS THEN
1333 
1334         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1335         THEN
1336             OE_MSG_PUB.Add_Exc_Msg
1337             (   G_PKG_NAME
1338             ,   'Lock_Row'
1339             );
1340         END IF;
1341 
1342         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1343 
1344         --  Get message count and data
1345 
1346         OE_MSG_PUB.Count_And_Get
1347         (   p_count                       => x_msg_count
1348         ,   p_data                        => x_msg_data
1349         );
1350 
1351 
1352 
1353 END Lock_Row;
1354 
1355 --  Procedures maintaining PSG record cache.
1356 
1357 PROCEDURE Write_PSG
1358 (   p_PSG_rec                       IN  QP_Attr_Map_PUB.Psg_Rec_Type
1359 ,   p_db_record                     IN  BOOLEAN := FALSE
1360 )
1361 IS
1362 BEGIN
1363 
1364     g_PSG_rec := p_PSG_rec;
1365 
1366     IF p_db_record THEN
1367 
1368         g_db_PSG_rec := p_PSG_rec;
1369 
1370     END IF;
1371 
1372 END Write_Psg;
1373 
1374 FUNCTION Get_PSG
1375 (   p_db_record                     IN  BOOLEAN := FALSE
1376 ,   p_segment_pte_id                IN  NUMBER
1377 )
1378 RETURN QP_Attr_Map_PUB.Psg_Rec_Type
1379 IS
1380 BEGIN
1381 
1382     IF  p_segment_pte_id <> g_PSG_rec.segment_pte_id
1383     THEN
1384 
1385         --  Query row from DB
1386 
1387         g_PSG_rec := QP_Psg_Util.Query_Row
1388         (   p_segment_pte_id              => p_segment_pte_id
1389         );
1390 
1391         g_PSG_rec.db_flag              := FND_API.G_TRUE;
1392 
1393         --  Load DB record
1394 
1395         g_db_PSG_rec                   := g_PSG_rec;
1396 
1397     END IF;
1398 
1399     IF p_db_record THEN
1400 
1401         RETURN g_db_PSG_rec;
1402 
1403     ELSE
1404 
1405         RETURN g_PSG_rec;
1406 
1407     END IF;
1408 
1409 END Get_Psg;
1410 
1411 PROCEDURE Clear_Psg
1412 IS
1413 BEGIN
1414 
1415     g_PSG_rec                      := QP_Attr_Map_PUB.G_MISS_PSG_REC;
1416     g_db_PSG_rec                   := QP_Attr_Map_PUB.G_MISS_PSG_REC;
1417 
1418 END Clear_Psg;
1419 
1420 END QP_QP_Form_Psg;