DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_QP_FORM_LIMIT_ATTRS

Source


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