DBA Data[Home] [Help]

PACKAGE BODY: APPS.QP_QP_FORM_LIMITS

Source


1 PACKAGE BODY QP_QP_Form_Limits AS
2 /* $Header: QPXFLMTB.pls 120.1 2005/06/13 03:40:43 appldev  $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'QP_QP_Form_Limits';
7 
8 --  Global variables holding cached record.
9 
10 g_LIMITS_rec                  QP_Limits_PUB.Limits_Rec_Type;
11 g_db_LIMITS_rec               QP_Limits_PUB.Limits_Rec_Type;
12 
13 --  Forward declaration of procedures maintaining entity record cache.
14 
15 PROCEDURE Write_LIMITS
16 (   p_LIMITS_rec                    IN  QP_Limits_PUB.Limits_Rec_Type
17 ,   p_db_record                     IN  BOOLEAN := FALSE
18 );
19 
20 FUNCTION Get_LIMITS
21 (   p_db_record                     IN  BOOLEAN := FALSE
22 ,   p_limit_id                      IN  NUMBER
23 )
24 RETURN QP_Limits_PUB.Limits_Rec_Type;
25 
26 PROCEDURE Clear_LIMITS;
27 
28 --  Global variable holding performed operations.
29 
30 g_opr__tbl                    QP_Limits_PUB.Limits_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_amount                        OUT NOCOPY /* file.sql.39 change */ NUMBER
40 ,   x_attribute1                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
41 ,   x_attribute10                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
42 ,   x_attribute11                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
43 ,   x_attribute12                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
44 ,   x_attribute13                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
45 ,   x_attribute14                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
46 ,   x_attribute15                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
47 ,   x_attribute2                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
48 ,   x_attribute3                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
49 ,   x_attribute4                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
50 ,   x_attribute5                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
51 ,   x_attribute6                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
52 ,   x_attribute7                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
53 ,   x_attribute8                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
54 ,   x_attribute9                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
55 ,   x_basis                         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
56 ,   x_context                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
57 ,   x_limit_exceed_action_code      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
58 ,   x_limit_hold_flag               OUT NOCOPY /* file.sql.39 change */ VARCHAR2
59 ,   x_limit_id                      OUT NOCOPY /* file.sql.39 change */ NUMBER
60 ,   x_limit_level_code              OUT NOCOPY /* file.sql.39 change */ VARCHAR2
61 ,   x_limit_number                  OUT NOCOPY /* file.sql.39 change */ NUMBER
62 ,   x_list_header_id                OUT NOCOPY /* file.sql.39 change */ NUMBER
63 ,   x_list_line_id                  OUT NOCOPY /* file.sql.39 change */ NUMBER
64 ,   x_organization_flag             OUT NOCOPY /* file.sql.39 change */ VARCHAR2
65 ,   x_limit_exceed_action           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
66 ,   x_limit                         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
67 ,   x_limit_level                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
68 ,   x_list_header                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
69 ,   x_list_line                     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
70 ,   x_multival_attr1_type           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
71 ,   x_multival_attr1_context        OUT NOCOPY /* file.sql.39 change */ VARCHAR2
72 ,   x_multival_attribute1           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
73 ,   x_multival_attr1_datatype       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
74 ,   x_multival_attr2_type           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
75 ,   x_multival_attr2_context        OUT NOCOPY /* file.sql.39 change */ VARCHAR2
76 ,   x_multival_attribute2           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
77 ,   x_multival_attr2_datatype       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
78 ,   x_organization                  OUT NOCOPY /* file.sql.39 change */ VARCHAR2
79 )
80 IS
81 l_LIMITS_rec                  QP_Limits_PUB.Limits_Rec_Type;
82 l_LIMITS_val_rec              QP_Limits_PUB.Limits_Val_Rec_Type;
83 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
84 l_return_status               VARCHAR2(1);
85 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
86 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
87 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
88 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
89 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
90 BEGIN
91 
92     --  Set control flags.
93 
94     l_control_rec.controlled_operation := TRUE;
95     l_control_rec.default_attributes   := TRUE;
96 
97     l_control_rec.change_attributes    := FALSE;
98     l_control_rec.validate_entity      := FALSE;
99     l_control_rec.write_to_DB          := FALSE;
100     l_control_rec.process              := FALSE;
101 
102     --  Instruct API to retain its caches
103 
104     l_control_rec.clear_api_cache      := FALSE;
105     l_control_rec.clear_api_requests   := FALSE;
106 
107     --  Load IN parameters if any exist
108 
109 
110     --  Defaulting of flex values is currently done by the form.
111     --  Set flex attributes to NULL in order to avoid defaulting them.
112 
113     l_LIMITS_rec.attribute1                       := NULL;
114     l_LIMITS_rec.attribute10                      := NULL;
115     l_LIMITS_rec.attribute11                      := NULL;
116     l_LIMITS_rec.attribute12                      := NULL;
117     l_LIMITS_rec.attribute13                      := NULL;
118     l_LIMITS_rec.attribute14                      := NULL;
119     l_LIMITS_rec.attribute15                      := NULL;
120     l_LIMITS_rec.attribute2                       := NULL;
121     l_LIMITS_rec.attribute3                       := NULL;
122     l_LIMITS_rec.attribute4                       := NULL;
123     l_LIMITS_rec.attribute5                       := NULL;
124     l_LIMITS_rec.attribute6                       := NULL;
125     l_LIMITS_rec.attribute7                       := NULL;
126     l_LIMITS_rec.attribute8                       := NULL;
127     l_LIMITS_rec.attribute9                       := NULL;
128     l_LIMITS_rec.context                          := NULL;
129 
130     --  Set Operation to Create
131 
132     l_LIMITS_rec.operation := QP_GLOBALS.G_OPR_CREATE;
133 
134     --  Call QP_Limits_PVT.Process_Limits
135 
136     QP_Limits_PVT.Process_Limits
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_LIMITS_rec                  => l_LIMITS_rec
144     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
145     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
146     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
147     );
148 
149     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
150         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
151     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
152         RAISE FND_API.G_EXC_ERROR;
153     END IF;
154 
155 
156     --  Load OUT parameters.
157 
158     x_amount                       := l_x_LIMITS_rec.amount;
159     x_attribute1                   := l_x_LIMITS_rec.attribute1;
160     x_attribute10                  := l_x_LIMITS_rec.attribute10;
161     x_attribute11                  := l_x_LIMITS_rec.attribute11;
162     x_attribute12                  := l_x_LIMITS_rec.attribute12;
163     x_attribute13                  := l_x_LIMITS_rec.attribute13;
164     x_attribute14                  := l_x_LIMITS_rec.attribute14;
165     x_attribute15                  := l_x_LIMITS_rec.attribute15;
166     x_attribute2                   := l_x_LIMITS_rec.attribute2;
167     x_attribute3                   := l_x_LIMITS_rec.attribute3;
168     x_attribute4                   := l_x_LIMITS_rec.attribute4;
169     x_attribute5                   := l_x_LIMITS_rec.attribute5;
170     x_attribute6                   := l_x_LIMITS_rec.attribute6;
171     x_attribute7                   := l_x_LIMITS_rec.attribute7;
172     x_attribute8                   := l_x_LIMITS_rec.attribute8;
173     x_attribute9                   := l_x_LIMITS_rec.attribute9;
174     x_basis                        := l_x_LIMITS_rec.basis;
175     x_context                      := l_x_LIMITS_rec.context;
176     x_limit_exceed_action_code     := l_x_LIMITS_rec.limit_exceed_action_code;
177     x_limit_hold_flag              := l_x_LIMITS_rec.limit_hold_flag;
178     x_limit_id                     := l_x_LIMITS_rec.limit_id;
179     x_limit_level_code             := l_x_LIMITS_rec.limit_level_code;
180     x_limit_number                 := l_x_LIMITS_rec.limit_number;
181     x_list_header_id               := l_x_LIMITS_rec.list_header_id;
182     x_list_line_id                 := l_x_LIMITS_rec.list_line_id;
183     x_multival_attr1_type          := l_x_LIMITS_rec.multival_attr1_type;
184     x_multival_attr1_context       := l_x_LIMITS_rec.multival_attr1_context;
185     x_multival_attribute1          := l_x_LIMITS_rec.multival_attribute1;
186     x_multival_attr1_datatype      := l_x_LIMITS_rec.multival_attr1_datatype;
187     x_multival_attr2_type          := l_x_LIMITS_rec.multival_attr2_type;
188     x_multival_attr2_context       := l_x_LIMITS_rec.multival_attr2_context;
189     x_multival_attribute2          := l_x_LIMITS_rec.multival_attribute2;
190     x_multival_attr2_datatype      := l_x_LIMITS_rec.multival_attr2_datatype;
191     x_organization_flag            := l_x_LIMITS_rec.organization_flag;
192 
193     --  Load display out parameters if any
194 
195     l_LIMITS_val_rec := QP_Limits_Util.Get_Values
196     (   p_LIMITS_rec                  => l_x_LIMITS_rec
197     );
198     x_limit_exceed_action          := l_LIMITS_val_rec.limit_exceed_action;
199     x_limit                        := l_LIMITS_val_rec.limit;
200     x_limit_level                  := l_LIMITS_val_rec.limit_level;
201     x_list_header                  := l_LIMITS_val_rec.list_header;
202     x_list_line                    := l_LIMITS_val_rec.list_line;
203     x_organization                 := l_LIMITS_val_rec.organization;
204 
205     --  Write to cache.
206     --  Set db_flag to False before writing to cache
207 
208     l_x_LIMITS_rec.db_flag := FND_API.G_FALSE;
209 
210     Write_LIMITS
211     (   p_LIMITS_rec                  => l_x_LIMITS_rec
212     );
213 
214     --  Set return status.
215 
216     x_return_status := FND_API.G_RET_STS_SUCCESS;
217 
218     --  Get message count and data
219 
220     OE_MSG_PUB.Count_And_Get
221     (   p_count                       => x_msg_count
222     ,   p_data                        => x_msg_data
223     );
224 
225 
226 EXCEPTION
227 
228     WHEN FND_API.G_EXC_ERROR THEN
229 
230         x_return_status := FND_API.G_RET_STS_ERROR;
231 
232         --  Get message count and data
233 
234         OE_MSG_PUB.Count_And_Get
235         (   p_count                       => x_msg_count
236         ,   p_data                        => x_msg_data
237         );
238 
239     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
240 
241         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
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     WHEN OTHERS THEN
251 
252         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
253 
254         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
255         THEN
256             OE_MSG_PUB.Add_Exc_Msg
257             (   G_PKG_NAME
258             ,   'Default_Attributes'
259             );
260         END IF;
261 
262         --  Get message count and data
263 
264         OE_MSG_PUB.Count_And_Get
265         (   p_count                       => x_msg_count
266         ,   p_data                        => x_msg_data
267         );
268 
269 END Default_Attributes;
270 
271 --  Procedure   :   Change_Attribute
272 --
273 
274 PROCEDURE Change_Attribute
275 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
276 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
277 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
278 ,   p_limit_id                      IN  NUMBER
279 ,   p_attr_id                       IN  NUMBER
280 ,   p_attr_value                    IN  VARCHAR2
281 ,   p_attribute1                    IN  VARCHAR2
282 ,   p_attribute10                   IN  VARCHAR2
283 ,   p_attribute11                   IN  VARCHAR2
284 ,   p_attribute12                   IN  VARCHAR2
285 ,   p_attribute13                   IN  VARCHAR2
286 ,   p_attribute14                   IN  VARCHAR2
287 ,   p_attribute15                   IN  VARCHAR2
288 ,   p_attribute2                    IN  VARCHAR2
289 ,   p_attribute3                    IN  VARCHAR2
290 ,   p_attribute4                    IN  VARCHAR2
291 ,   p_attribute5                    IN  VARCHAR2
292 ,   p_attribute6                    IN  VARCHAR2
293 ,   p_attribute7                    IN  VARCHAR2
294 ,   p_attribute8                    IN  VARCHAR2
295 ,   p_attribute9                    IN  VARCHAR2
296 ,   p_context                       IN  VARCHAR2
297 ,   x_amount                        OUT NOCOPY /* file.sql.39 change */ NUMBER
298 ,   x_attribute1                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
299 ,   x_attribute10                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
300 ,   x_attribute11                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
301 ,   x_attribute12                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
302 ,   x_attribute13                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
303 ,   x_attribute14                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
304 ,   x_attribute15                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
305 ,   x_attribute2                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
306 ,   x_attribute3                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
307 ,   x_attribute4                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
308 ,   x_attribute5                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
309 ,   x_attribute6                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
310 ,   x_attribute7                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
311 ,   x_attribute8                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
312 ,   x_attribute9                    OUT NOCOPY /* file.sql.39 change */ VARCHAR2
313 ,   x_basis                         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
314 ,   x_context                       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
315 ,   x_limit_exceed_action_code      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
316 ,   x_limit_hold_flag               OUT NOCOPY /* file.sql.39 change */ VARCHAR2
317 ,   x_limit_id                      OUT NOCOPY /* file.sql.39 change */ NUMBER
318 ,   x_limit_level_code              OUT NOCOPY /* file.sql.39 change */ VARCHAR2
319 ,   x_limit_number                  OUT NOCOPY /* file.sql.39 change */ NUMBER
320 ,   x_list_header_id                OUT NOCOPY /* file.sql.39 change */ NUMBER
321 ,   x_list_line_id                  OUT NOCOPY /* file.sql.39 change */ NUMBER
322 ,   x_multival_attr1_type           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
323 ,   x_multival_attr1_context        OUT NOCOPY /* file.sql.39 change */ VARCHAR2
324 ,   x_multival_attribute1           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
325 ,   x_multival_attr1_datatype       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
326 ,   x_multival_attr2_type           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
327 ,   x_multival_attr2_context        OUT NOCOPY /* file.sql.39 change */ VARCHAR2
328 ,   x_multival_attribute2           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
329 ,   x_multival_attr2_datatype       OUT NOCOPY /* file.sql.39 change */ VARCHAR2
330 ,   x_organization_flag             OUT NOCOPY /* file.sql.39 change */ VARCHAR2
331 ,   x_limit_exceed_action           OUT NOCOPY /* file.sql.39 change */ VARCHAR2
332 ,   x_limit                         OUT NOCOPY /* file.sql.39 change */ VARCHAR2
333 ,   x_limit_level                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
334 ,   x_list_header                   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
335 ,   x_list_line                     OUT NOCOPY /* file.sql.39 change */ VARCHAR2
336 ,   x_organization                  OUT NOCOPY /* file.sql.39 change */ VARCHAR2
337 )
338 IS
339 l_LIMITS_rec                  QP_Limits_PUB.Limits_Rec_Type;
340 l_old_LIMITS_rec              QP_Limits_PUB.Limits_Rec_Type;
341 l_LIMITS_val_rec              QP_Limits_PUB.Limits_Val_Rec_Type;
342 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
343 l_return_status               VARCHAR2(1);
344 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
345 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
346 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
347 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
348 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
349 BEGIN
350 
351     --  Set control flags.
352 
353     l_control_rec.controlled_operation := TRUE;
354     l_control_rec.change_attributes    := TRUE;
355 
356     l_control_rec.default_attributes   := FALSE;
357     l_control_rec.validate_entity      := FALSE;
358     l_control_rec.write_to_DB          := FALSE;
359     l_control_rec.process              := FALSE;
360 
361     --  Instruct API to retain its caches
362 
363     l_control_rec.clear_api_cache      := FALSE;
364     l_control_rec.clear_api_requests   := FALSE;
365 
366     --  Read LIMITS from cache
367 
368     l_LIMITS_rec := Get_LIMITS
369     (   p_db_record                   => FALSE
370     ,   p_limit_id                    => p_limit_id
371     );
372 
373     l_old_LIMITS_rec               := l_LIMITS_rec;
374 
375     IF p_attr_id = QP_Limits_Util.G_AMOUNT THEN
376         l_LIMITS_rec.amount := TO_NUMBER(p_attr_value);
377     ELSIF p_attr_id = QP_Limits_Util.G_BASIS THEN
378         l_LIMITS_rec.basis := p_attr_value;
379     ELSIF p_attr_id = QP_Limits_Util.G_LIMIT_EXCEED_ACTION THEN
380         l_LIMITS_rec.limit_exceed_action_code := p_attr_value;
381     ELSIF p_attr_id = QP_Limits_Util.G_LIMIT_HOLD THEN
382         l_LIMITS_rec.limit_hold_flag := p_attr_value;
383     ELSIF p_attr_id = QP_Limits_Util.G_LIMIT THEN
384         l_LIMITS_rec.limit_id := TO_NUMBER(p_attr_value);
385     ELSIF p_attr_id = QP_Limits_Util.G_LIMIT_LEVEL THEN
386         l_LIMITS_rec.limit_level_code := p_attr_value;
387     ELSIF p_attr_id = QP_Limits_Util.G_LIMIT_NUMBER THEN
388         l_LIMITS_rec.limit_number := TO_NUMBER(p_attr_value);
389     ELSIF p_attr_id = QP_Limits_Util.G_LIST_HEADER THEN
390         l_LIMITS_rec.list_header_id := TO_NUMBER(p_attr_value);
391     ELSIF p_attr_id = QP_Limits_Util.G_LIST_LINE THEN
392         l_LIMITS_rec.list_line_id := TO_NUMBER(p_attr_value);
393     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTR1_TYPE THEN
394         l_LIMITS_rec.multival_attr1_type := p_attr_value;
395     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTR1_CONTEXT THEN
396         l_LIMITS_rec.multival_attr1_context := p_attr_value;
397     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTRIBUTE1 THEN
398         l_LIMITS_rec.multival_attribute1 := p_attr_value;
399     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTR1_DATATYPE THEN
400         l_LIMITS_rec.multival_attr1_datatype := p_attr_value;
401     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTR2_TYPE THEN
402         l_LIMITS_rec.multival_attr2_type := p_attr_value;
403     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTR2_CONTEXT THEN
404         l_LIMITS_rec.multival_attr2_context := p_attr_value;
405     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTRIBUTE2 THEN
406         l_LIMITS_rec.multival_attribute2 := p_attr_value;
407     ELSIF p_attr_id = QP_Limits_Util.G_MULTIVAL_ATTR2_DATATYPE THEN
408         l_LIMITS_rec.multival_attr2_datatype := p_attr_value;
409     ELSIF p_attr_id = QP_Limits_Util.G_ORGANIZATION THEN
410         l_LIMITS_rec.organization_flag := p_attr_value;
411     ELSIF p_attr_id = QP_Limits_Util.G_ATTRIBUTE1
412     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE10
413     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE11
414     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE12
415     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE13
416     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE14
417     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE15
418     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE2
419     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE3
420     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE4
421     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE5
422     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE6
423     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE7
424     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE8
425     OR     p_attr_id = QP_Limits_Util.G_ATTRIBUTE9
426     OR     p_attr_id = QP_Limits_Util.G_CONTEXT
427     THEN
428 
429         l_LIMITS_rec.attribute1        := p_attribute1;
430         l_LIMITS_rec.attribute10       := p_attribute10;
431         l_LIMITS_rec.attribute11       := p_attribute11;
432         l_LIMITS_rec.attribute12       := p_attribute12;
433         l_LIMITS_rec.attribute13       := p_attribute13;
434         l_LIMITS_rec.attribute14       := p_attribute14;
435         l_LIMITS_rec.attribute15       := p_attribute15;
436         l_LIMITS_rec.attribute2        := p_attribute2;
437         l_LIMITS_rec.attribute3        := p_attribute3;
438         l_LIMITS_rec.attribute4        := p_attribute4;
439         l_LIMITS_rec.attribute5        := p_attribute5;
440         l_LIMITS_rec.attribute6        := p_attribute6;
441         l_LIMITS_rec.attribute7        := p_attribute7;
442         l_LIMITS_rec.attribute8        := p_attribute8;
443         l_LIMITS_rec.attribute9        := p_attribute9;
444         l_LIMITS_rec.context           := p_context;
445 
446     ELSE
447 
448         --  Unexpected error, unrecognized attribute
449 
450         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
451         THEN
452             OE_MSG_PUB.Add_Exc_Msg
453             (   G_PKG_NAME
454             ,   'Change_Attribute'
455             ,   'Unrecognized attribute'
456             );
457         END IF;
458 
459         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
460 
461     END IF;
462 
463     --  Set Operation.
464 
465     IF FND_API.To_Boolean(l_LIMITS_rec.db_flag) THEN
466         l_LIMITS_rec.operation := QP_GLOBALS.G_OPR_UPDATE;
467     ELSE
468         l_LIMITS_rec.operation := QP_GLOBALS.G_OPR_CREATE;
469     END IF;
470 
471     --  Call QP_Limits_PVT.Process_Limits
472 
473     QP_Limits_PVT.Process_Limits
474     (   p_api_version_number          => 1.0
475     ,   p_init_msg_list               => FND_API.G_TRUE
476     ,   p_validation_level            => FND_API.G_VALID_LEVEL_NONE
477     ,   x_return_status               => l_return_status
478     ,   x_msg_count                   => x_msg_count
479     ,   x_msg_data                    => x_msg_data
480     ,   p_control_rec                 => l_control_rec
481     ,   p_LIMITS_rec                  => l_LIMITS_rec
482     ,   p_old_LIMITS_rec              => l_old_LIMITS_rec
483     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
484     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
485     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
486     );
487 
488     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
489         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
490     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
491         RAISE FND_API.G_EXC_ERROR;
492     END IF;
493 
494 
495     --  Init OUT parameters to missing.
496 
497     x_amount                       := FND_API.G_MISS_NUM;
498     x_attribute1                   := FND_API.G_MISS_CHAR;
499     x_attribute10                  := FND_API.G_MISS_CHAR;
500     x_attribute11                  := FND_API.G_MISS_CHAR;
501     x_attribute12                  := FND_API.G_MISS_CHAR;
502     x_attribute13                  := FND_API.G_MISS_CHAR;
503     x_attribute14                  := FND_API.G_MISS_CHAR;
504     x_attribute15                  := FND_API.G_MISS_CHAR;
505     x_attribute2                   := FND_API.G_MISS_CHAR;
506     x_attribute3                   := FND_API.G_MISS_CHAR;
507     x_attribute4                   := FND_API.G_MISS_CHAR;
508     x_attribute5                   := FND_API.G_MISS_CHAR;
509     x_attribute6                   := FND_API.G_MISS_CHAR;
510     x_attribute7                   := FND_API.G_MISS_CHAR;
511     x_attribute8                   := FND_API.G_MISS_CHAR;
512     x_attribute9                   := FND_API.G_MISS_CHAR;
513     x_basis                        := FND_API.G_MISS_CHAR;
514     x_context                      := FND_API.G_MISS_CHAR;
515     x_limit_exceed_action_code     := FND_API.G_MISS_CHAR;
516     x_limit_hold_flag              := FND_API.G_MISS_CHAR;
517     x_limit_id                     := FND_API.G_MISS_NUM;
518     x_limit_level_code             := FND_API.G_MISS_CHAR;
519     x_limit_number                 := FND_API.G_MISS_NUM;
520     x_list_header_id               := FND_API.G_MISS_NUM;
521     x_list_line_id                 := FND_API.G_MISS_NUM;
522     x_multival_attr1_type          := FND_API.G_MISS_CHAR;
523     x_multival_attr1_context       := FND_API.G_MISS_CHAR;
524     x_multival_attribute1          := FND_API.G_MISS_CHAR;
525     x_multival_attr1_datatype      := FND_API.G_MISS_CHAR;
526     x_multival_attr2_type          := FND_API.G_MISS_CHAR;
527     x_multival_attr2_context       := FND_API.G_MISS_CHAR;
528     x_multival_attribute2          := FND_API.G_MISS_CHAR;
529     x_multival_attr2_datatype      := FND_API.G_MISS_CHAR;
530     x_organization_flag            := FND_API.G_MISS_CHAR;
531     x_limit_exceed_action          := FND_API.G_MISS_CHAR;
532     x_limit                        := FND_API.G_MISS_CHAR;
533     x_limit_level                  := FND_API.G_MISS_CHAR;
534     x_list_header                  := FND_API.G_MISS_CHAR;
535     x_list_line                    := FND_API.G_MISS_CHAR;
536     x_organization                 := FND_API.G_MISS_CHAR;
537 
538     --  Load display out parameters if any
539 
540     l_LIMITS_val_rec := QP_Limits_Util.Get_Values
541     (   p_LIMITS_rec                  => l_x_LIMITS_rec
542     ,   p_old_LIMITS_rec              => l_LIMITS_rec
543     );
544 
545     --  Return changed attributes.
546 
547     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.amount,
548                             l_LIMITS_rec.amount)
549     THEN
550         x_amount := l_x_LIMITS_rec.amount;
551     END IF;
552 
553     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute1,
554                             l_LIMITS_rec.attribute1)
555     THEN
556         x_attribute1 := l_x_LIMITS_rec.attribute1;
557     END IF;
558 
559     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute10,
560                             l_LIMITS_rec.attribute10)
561     THEN
562         x_attribute10 := l_x_LIMITS_rec.attribute10;
563     END IF;
564 
565     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute11,
566                             l_LIMITS_rec.attribute11)
567     THEN
568         x_attribute11 := l_x_LIMITS_rec.attribute11;
569     END IF;
570 
571     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute12,
572                             l_LIMITS_rec.attribute12)
573     THEN
574         x_attribute12 := l_x_LIMITS_rec.attribute12;
575     END IF;
576 
577     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute13,
578                             l_LIMITS_rec.attribute13)
579     THEN
580         x_attribute13 := l_x_LIMITS_rec.attribute13;
581     END IF;
582 
583     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute14,
584                             l_LIMITS_rec.attribute14)
585     THEN
586         x_attribute14 := l_x_LIMITS_rec.attribute14;
587     END IF;
588 
589     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute15,
590                             l_LIMITS_rec.attribute15)
591     THEN
592         x_attribute15 := l_x_LIMITS_rec.attribute15;
593     END IF;
594 
595     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute2,
596                             l_LIMITS_rec.attribute2)
597     THEN
598         x_attribute2 := l_x_LIMITS_rec.attribute2;
599     END IF;
600 
601     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute3,
602                             l_LIMITS_rec.attribute3)
603     THEN
604         x_attribute3 := l_x_LIMITS_rec.attribute3;
605     END IF;
606 
607     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute4,
608                             l_LIMITS_rec.attribute4)
609     THEN
610         x_attribute4 := l_x_LIMITS_rec.attribute4;
611     END IF;
612 
613     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute5,
614                             l_LIMITS_rec.attribute5)
615     THEN
616         x_attribute5 := l_x_LIMITS_rec.attribute5;
617     END IF;
618 
619     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute6,
620                             l_LIMITS_rec.attribute6)
621     THEN
622         x_attribute6 := l_x_LIMITS_rec.attribute6;
623     END IF;
624 
625     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute7,
626                             l_LIMITS_rec.attribute7)
627     THEN
628         x_attribute7 := l_x_LIMITS_rec.attribute7;
629     END IF;
630 
631     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute8,
632                             l_LIMITS_rec.attribute8)
633     THEN
634         x_attribute8 := l_x_LIMITS_rec.attribute8;
635     END IF;
636 
637     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.attribute9,
638                             l_LIMITS_rec.attribute9)
639     THEN
640         x_attribute9 := l_x_LIMITS_rec.attribute9;
641     END IF;
642 
643     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.basis,
644                             l_LIMITS_rec.basis)
645     THEN
646         x_basis := l_x_LIMITS_rec.basis;
647     END IF;
648 
649     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.context,
650                             l_LIMITS_rec.context)
651     THEN
652         x_context := l_x_LIMITS_rec.context;
653     END IF;
654 
655     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.limit_exceed_action_code,
656                             l_LIMITS_rec.limit_exceed_action_code)
657     THEN
658         x_limit_exceed_action_code := l_x_LIMITS_rec.limit_exceed_action_code;
659         x_limit_exceed_action := l_LIMITS_val_rec.limit_exceed_action;
660     END IF;
661 
662     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.limit_hold_flag,
663                             l_LIMITS_rec.limit_hold_flag)
664     THEN
665         x_limit_hold_flag := l_x_LIMITS_rec.limit_hold_flag;
666     END IF;
667 
668     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.limit_id,
669                             l_LIMITS_rec.limit_id)
670     THEN
671         x_limit_id := l_x_LIMITS_rec.limit_id;
672         x_limit := l_LIMITS_val_rec.limit;
673     END IF;
674 
675     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.limit_level_code,
676                             l_LIMITS_rec.limit_level_code)
677     THEN
678         x_limit_level_code := l_x_LIMITS_rec.limit_level_code;
679         x_limit_level := l_LIMITS_val_rec.limit_level;
680     END IF;
681 
682     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.limit_number,
683                             l_LIMITS_rec.limit_number)
684     THEN
685         x_limit_number := l_x_LIMITS_rec.limit_number;
686     END IF;
687 
688     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.list_header_id,
689                             l_LIMITS_rec.list_header_id)
690     THEN
691         x_list_header_id := l_x_LIMITS_rec.list_header_id;
692         x_list_header := l_LIMITS_val_rec.list_header;
693     END IF;
694 
695    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attr1_type,
696                            l_LIMITS_rec.multival_attr1_type)
697    THEN
698        x_multival_attr1_type := l_x_LIMITS_rec.multival_attr1_type;
699    END IF;
700 
701    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attr1_context,
702                            l_LIMITS_rec.multival_attr1_context)
703    THEN
704        x_multival_attr1_context := l_x_LIMITS_rec.multival_attr1_context;
705    END IF;
706 
707    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attribute1,
708                            l_LIMITS_rec.multival_attribute1)
709    THEN
710        x_multival_attribute1 := l_x_LIMITS_rec.multival_attribute1;
711    END IF;
712 
713    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attr1_datatype,
714                            l_LIMITS_rec.multival_attr1_datatype)
715    THEN
716        x_multival_attr1_datatype := l_x_LIMITS_rec.multival_attr1_datatype;
717    END IF;
718 
719    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attr2_type,
720                            l_LIMITS_rec.multival_attr2_type)
721    THEN
722        x_multival_attr2_type := l_x_LIMITS_rec.multival_attr2_type;
723    END IF;
724 
725    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attr2_context,
726                            l_LIMITS_rec.multival_attr2_context)
727    THEN
728        x_multival_attr2_context := l_x_LIMITS_rec.multival_attr2_context;
729    END IF;
730 
731    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attribute2,
732                            l_LIMITS_rec.multival_attribute2)
733    THEN
734        x_multival_attribute2 := l_x_LIMITS_rec.multival_attribute2;
735    END IF;
736 
737    IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.multival_attr2_datatype,
738                            l_LIMITS_rec.multival_attr2_datatype)
739    THEN
740        x_multival_attr2_datatype := l_x_LIMITS_rec.multival_attr2_datatype;
741    END IF;
742 
743 
744     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.list_line_id,
745                             l_LIMITS_rec.list_line_id)
746     THEN
747         x_list_line_id := l_x_LIMITS_rec.list_line_id;
748         x_list_line := l_LIMITS_val_rec.list_line;
749     END IF;
750 
751     IF NOT QP_GLOBALS.Equal(l_x_LIMITS_rec.organization_flag,
752                             l_LIMITS_rec.organization_flag)
753     THEN
754         x_organization_flag := l_x_LIMITS_rec.organization_flag;
755         x_organization := l_LIMITS_val_rec.organization;
756     END IF;
757 
758 
759     --  Write to cache.
760 
761     Write_LIMITS
762     (   p_LIMITS_rec                  => l_x_LIMITS_rec
763     );
764 
765     --  Set return status.
766 
767     x_return_status := FND_API.G_RET_STS_SUCCESS;
768 
769     --  Get message count and data
770 
771     OE_MSG_PUB.Count_And_Get
772     (   p_count                       => x_msg_count
773     ,   p_data                        => x_msg_data
774     );
775 
776 
777 EXCEPTION
778 
779     WHEN FND_API.G_EXC_ERROR THEN
780 
781         x_return_status := FND_API.G_RET_STS_ERROR;
782 
783         --  Get message count and data
784 
785         OE_MSG_PUB.Count_And_Get
786         (   p_count                       => x_msg_count
787         ,   p_data                        => x_msg_data
788         );
789 
790     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
791 
792         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
793 
794         --  Get message count and data
795 
796         OE_MSG_PUB.Count_And_Get
797         (   p_count                       => x_msg_count
798         ,   p_data                        => x_msg_data
799         );
800 
801     WHEN OTHERS THEN
802 
803         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
804 
805         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
806         THEN
807             OE_MSG_PUB.Add_Exc_Msg
808             (   G_PKG_NAME
809             ,   'Change_Attribute'
810             );
811         END IF;
812 
813         --  Get message count and data
814 
815         OE_MSG_PUB.Count_And_Get
816         (   p_count                       => x_msg_count
817         ,   p_data                        => x_msg_data
818         );
819 
820 END Change_Attribute;
821 
822 --  Procedure       Validate_And_Write
823 --
824 
825 PROCEDURE Validate_And_Write
826 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
827 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
828 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
829 ,   p_limit_id                      IN  NUMBER
830 ,   x_creation_date                 OUT NOCOPY /* file.sql.39 change */ DATE
831 ,   x_created_by                    OUT NOCOPY /* file.sql.39 change */ NUMBER
832 ,   x_last_update_date              OUT NOCOPY /* file.sql.39 change */ DATE
833 ,   x_last_updated_by               OUT NOCOPY /* file.sql.39 change */ NUMBER
834 ,   x_last_update_login             OUT NOCOPY /* file.sql.39 change */ NUMBER
835 )
836 IS
837 l_LIMITS_rec                  QP_Limits_PUB.Limits_Rec_Type;
838 l_old_LIMITS_rec              QP_Limits_PUB.Limits_Rec_Type;
839 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
840 l_return_status               VARCHAR2(1);
841 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
842 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
843 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
844 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
845 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
846 BEGIN
847 
848     --  Set control flags.
849 
850     l_control_rec.controlled_operation := TRUE;
851     l_control_rec.validate_entity      := TRUE; -- This value should be set to TRUE later
852     l_control_rec.write_to_DB          := TRUE;
853 
854     l_control_rec.default_attributes   := FALSE;
855     l_control_rec.change_attributes    := FALSE;
856     l_control_rec.process              := FALSE;
857 
858     --  Instruct API to retain its caches
859 
860     l_control_rec.clear_api_cache      := FALSE;
861     l_control_rec.clear_api_requests   := FALSE;
862 
863     --  Read LIMITS from cache
864 
865     l_old_LIMITS_rec := Get_LIMITS
866     (   p_db_record                   => TRUE
867     ,   p_limit_id                    => p_limit_id
868     );
869 
870     l_LIMITS_rec := Get_LIMITS
871     (   p_db_record                   => FALSE
872     ,   p_limit_id                    => p_limit_id
873     );
874 
875     --  Set Operation.
876 
877     IF FND_API.To_Boolean(l_LIMITS_rec.db_flag) THEN
878         l_LIMITS_rec.operation := QP_GLOBALS.G_OPR_UPDATE;
879     ELSE
880         l_LIMITS_rec.operation := QP_GLOBALS.G_OPR_CREATE;
881     END IF;
882 
883     --  Call QP_Limits_PVT.Process_Limits
884 
885     QP_Limits_PVT.Process_Limits
886     (   p_api_version_number          => 1.0
887     ,   p_init_msg_list               => FND_API.G_TRUE
888     ,   x_return_status               => l_return_status
889     ,   x_msg_count                   => x_msg_count
890     ,   x_msg_data                    => x_msg_data
891     ,   p_control_rec                 => l_control_rec
892     ,   p_LIMITS_rec                  => l_LIMITS_rec
893     ,   p_old_LIMITS_rec              => l_old_LIMITS_rec
894     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
895     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
896     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
897     );
898 
899     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
900         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
901     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
902         RAISE FND_API.G_EXC_ERROR;
903     END IF;
904 
905 
906     --  Load OUT parameters.
907 
908 
909     x_creation_date                := l_x_LIMITS_rec.creation_date;
910     x_created_by                   := l_x_LIMITS_rec.created_by;
911     x_last_update_date             := l_x_LIMITS_rec.last_update_date;
912     x_last_updated_by              := l_x_LIMITS_rec.last_updated_by;
913     x_last_update_login            := l_x_LIMITS_rec.last_update_login;
914 
915     --  Clear LIMITS record cache
916 
917     Clear_LIMITS;
918 
919     --  Keep track of performed operations.
920 
921     l_old_LIMITS_rec.operation := l_LIMITS_rec.operation;
922 
923 
924     --  Set return status.
925 
926     x_return_status := FND_API.G_RET_STS_SUCCESS;
927 
928     --  Get message count and data
929 
930     OE_MSG_PUB.Count_And_Get
931     (   p_count                       => x_msg_count
932     ,   p_data                        => x_msg_data
933     );
934 
935 
936 EXCEPTION
937 
938     WHEN FND_API.G_EXC_ERROR THEN
939 
940         x_return_status := FND_API.G_RET_STS_ERROR;
941 
942         --  Get message count and data
943 
944         OE_MSG_PUB.Count_And_Get
945         (   p_count                       => x_msg_count
946         ,   p_data                        => x_msg_data
947         );
948 
949     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
950 
951         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
952 
953         --  Get message count and data
954 
955         OE_MSG_PUB.Count_And_Get
956         (   p_count                       => x_msg_count
957         ,   p_data                        => x_msg_data
958         );
959 
960     WHEN OTHERS THEN
961 
962         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
963 
964         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
965         THEN
966             OE_MSG_PUB.Add_Exc_Msg
967             (   G_PKG_NAME
968             ,   'Validate_And_Write'
969             );
970         END IF;
971 
972         --  Get message count and data
973 
974         OE_MSG_PUB.Count_And_Get
975         (   p_count                       => x_msg_count
976         ,   p_data                        => x_msg_data
977         );
978 
979 END Validate_And_Write;
980 
981 --  Procedure       Delete_Row
982 --
983 
984 PROCEDURE Delete_Row
985 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
986 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
987 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
988 ,   p_limit_id                      IN  NUMBER
989 )
990 IS
991 l_LIMITS_rec                  QP_Limits_PUB.Limits_Rec_Type;
992 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
993 l_return_status               VARCHAR2(1);
994 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
995 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
996 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
997 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
998 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
999 BEGIN
1000 
1001     --  Set control flags.
1002 
1003     l_control_rec.controlled_operation := TRUE;
1004     l_control_rec.validate_entity      := TRUE;
1005     l_control_rec.write_to_DB          := TRUE;
1006 
1007     l_control_rec.default_attributes   := FALSE;
1008     l_control_rec.change_attributes    := FALSE;
1009     l_control_rec.process              := FALSE;
1010 
1011     --  Instruct API to retain its caches
1012 
1013     l_control_rec.clear_api_cache      := FALSE;
1014     l_control_rec.clear_api_requests   := FALSE;
1015 
1016     --  Read DB record from cache
1017 
1018     l_LIMITS_rec := Get_LIMITS
1019     (   p_db_record                   => TRUE
1020     ,   p_limit_id                    => p_limit_id
1021     );
1022 
1023     --  Set Operation.
1024 
1025     l_LIMITS_rec.operation := QP_GLOBALS.G_OPR_DELETE;
1026 
1027     --  Call QP_Limits_PVT.Process_Limits
1028 
1029     QP_Limits_PVT.Process_Limits
1030     (   p_api_version_number          => 1.0
1031     ,   p_init_msg_list               => FND_API.G_TRUE
1032     ,   x_return_status               => l_return_status
1033     ,   x_msg_count                   => x_msg_count
1034     ,   x_msg_data                    => x_msg_data
1035     ,   p_control_rec                 => l_control_rec
1036     ,   p_LIMITS_rec                  => l_LIMITS_rec
1037     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
1038     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
1039     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
1040     );
1041 
1042     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1043         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1044     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1045         RAISE FND_API.G_EXC_ERROR;
1046     END IF;
1047 
1048 
1049     --  Clear LIMITS record cache
1050 
1051     Clear_LIMITS;
1052 
1053     --  Set return status.
1054 
1055     x_return_status := FND_API.G_RET_STS_SUCCESS;
1056 
1057     --  Get message count and data
1058 
1059     OE_MSG_PUB.Count_And_Get
1060     (   p_count                       => x_msg_count
1061     ,   p_data                        => x_msg_data
1062     );
1063 
1064 
1065 EXCEPTION
1066 
1067     WHEN FND_API.G_EXC_ERROR THEN
1068 
1069         x_return_status := FND_API.G_RET_STS_ERROR;
1070 
1071         --  Get message count and data
1072 
1073         OE_MSG_PUB.Count_And_Get
1074         (   p_count                       => x_msg_count
1075         ,   p_data                        => x_msg_data
1076         );
1077 
1078     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1079 
1080         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1081 
1082         --  Get message count and data
1083 
1084         OE_MSG_PUB.Count_And_Get
1085         (   p_count                       => x_msg_count
1086         ,   p_data                        => x_msg_data
1087         );
1088 
1089     WHEN OTHERS THEN
1090 
1091         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1092 
1093         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1094         THEN
1095             OE_MSG_PUB.Add_Exc_Msg
1096             (   G_PKG_NAME
1097             ,   'Delete_Row'
1098             );
1099         END IF;
1100 
1101         --  Get message count and data
1102 
1103         OE_MSG_PUB.Count_And_Get
1104         (   p_count                       => x_msg_count
1105         ,   p_data                        => x_msg_data
1106         );
1107 
1108 END Delete_Row;
1109 
1110 --  Procedure       Process_Entity
1111 --
1112 
1113 PROCEDURE Process_Entity
1114 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1115 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1116 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1117 )
1118 IS
1119 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1120 l_return_status               VARCHAR2(1);
1121 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
1122 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
1123 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
1124 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
1125 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
1126 BEGIN
1127 
1128     --  Set control flags.
1129 
1130     l_control_rec.controlled_operation := TRUE;
1131     l_control_rec.process              := TRUE;
1132     l_control_rec.process_entity       := QP_GLOBALS.G_ENTITY_LIMITS;
1133 
1134     l_control_rec.default_attributes   := FALSE;
1135     l_control_rec.change_attributes    := FALSE;
1136     l_control_rec.validate_entity      := FALSE;
1137     l_control_rec.write_to_DB          := FALSE;
1138 
1139     --  Instruct API to clear its request table
1140 
1141     l_control_rec.clear_api_cache      := FALSE;
1142     l_control_rec.clear_api_requests   := FALSE;
1143 
1144     --  Call QP_Limits_PVT.Process_Limits
1145 
1146     QP_Limits_PVT.Process_Limits
1147     (   p_api_version_number          => 1.0
1148     ,   p_init_msg_list               => FND_API.G_TRUE
1149     ,   x_return_status               => l_return_status
1150     ,   x_msg_count                   => x_msg_count
1151     ,   x_msg_data                    => x_msg_data
1152     ,   p_control_rec                 => l_control_rec
1153     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
1154     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
1155     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
1156     );
1157 
1158     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1159         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1160     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1161         RAISE FND_API.G_EXC_ERROR;
1162     END IF;
1163 
1164 
1165     --  Set return status.
1166 
1167     x_return_status := FND_API.G_RET_STS_SUCCESS;
1168 
1169     --  Get message count and data
1170 
1171     OE_MSG_PUB.Count_And_Get
1172     (   p_count                       => x_msg_count
1173     ,   p_data                        => x_msg_data
1174     );
1175 
1176 
1177 EXCEPTION
1178 
1179     WHEN FND_API.G_EXC_ERROR THEN
1180 
1181         x_return_status := FND_API.G_RET_STS_ERROR;
1182 
1183         --  Get message count and data
1184 
1185         OE_MSG_PUB.Count_And_Get
1186         (   p_count                       => x_msg_count
1187         ,   p_data                        => x_msg_data
1188         );
1189 
1190     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1191 
1192         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1193 
1194         --  Get message count and data
1195 
1196         OE_MSG_PUB.Count_And_Get
1197         (   p_count                       => x_msg_count
1198         ,   p_data                        => x_msg_data
1199         );
1200 
1201     WHEN OTHERS THEN
1202 
1203         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1204 
1205         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1206         THEN
1207             OE_MSG_PUB.Add_Exc_Msg
1208             (   G_PKG_NAME
1209             ,   'Process_Entity'
1210             );
1211         END IF;
1212 
1213         --  Get message count and data
1214 
1215         OE_MSG_PUB.Count_And_Get
1216         (   p_count                       => x_msg_count
1217         ,   p_data                        => x_msg_data
1218         );
1219 
1220 END Process_Entity;
1221 
1222 --  Procedure       Process_Object
1223 --
1224 
1225 PROCEDURE Process_Object
1226 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1227 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1228 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1229 )
1230 IS
1231 l_control_rec                 QP_GLOBALS.Control_Rec_Type;
1232 l_return_status               VARCHAR2(1);
1233 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
1234 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
1235 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
1236 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
1237 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
1238 BEGIN
1239 
1240     --  Set control flags.
1241 
1242     l_control_rec.controlled_operation := TRUE;
1243     l_control_rec.process              := TRUE;
1244     l_control_rec.process_entity       := QP_GLOBALS.G_ENTITY_ALL;
1245 
1246     l_control_rec.default_attributes   := FALSE;
1247     l_control_rec.change_attributes    := FALSE;
1248     l_control_rec.validate_entity      := FALSE;
1249     l_control_rec.write_to_DB          := FALSE;
1250 
1251     --  Instruct API to clear its request table
1252 
1253     l_control_rec.clear_api_cache      := FALSE;
1254     l_control_rec.clear_api_requests   := TRUE;
1255 
1256     --  Call QP_Limits_PVT.Process_Limits
1257 
1258     QP_Limits_PVT.Process_Limits
1259     (   p_api_version_number          => 1.0
1260     ,   p_init_msg_list               => FND_API.G_TRUE
1261     ,   x_return_status               => l_return_status
1262     ,   x_msg_count                   => x_msg_count
1263     ,   x_msg_data                    => x_msg_data
1264     ,   p_control_rec                 => l_control_rec
1265     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
1266     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
1267     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
1268     );
1269 
1270     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1271         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1272     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1273         RAISE FND_API.G_EXC_ERROR;
1274     END IF;
1275 
1276 
1277     --  Set return status.
1278 
1279     x_return_status := FND_API.G_RET_STS_SUCCESS;
1280 
1281     --  Get message count and data
1282 
1283     OE_MSG_PUB.Count_And_Get
1284     (   p_count                       => x_msg_count
1285     ,   p_data                        => x_msg_data
1286     );
1287 
1288 
1289 EXCEPTION
1290 
1291     WHEN FND_API.G_EXC_ERROR THEN
1292 
1293         x_return_status := FND_API.G_RET_STS_ERROR;
1294 
1295         --  Get message count and data
1296 
1297         OE_MSG_PUB.Count_And_Get
1298         (   p_count                       => x_msg_count
1299         ,   p_data                        => x_msg_data
1300         );
1301 
1302     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1303 
1304         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1305 
1306         --  Get message count and data
1307 
1308         OE_MSG_PUB.Count_And_Get
1309         (   p_count                       => x_msg_count
1310         ,   p_data                        => x_msg_data
1311         );
1312 
1313     WHEN OTHERS THEN
1314 
1315         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1316 
1317         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1318         THEN
1319             OE_MSG_PUB.Add_Exc_Msg
1320             (   G_PKG_NAME
1321             ,   'Process_Object'
1322             );
1323         END IF;
1324 
1325         --  Get message count and data
1326 
1327         OE_MSG_PUB.Count_And_Get
1328         (   p_count                       => x_msg_count
1329         ,   p_data                        => x_msg_data
1330         );
1331 
1332 END Process_Object;
1333 
1334 --  Procedure       lock_Row
1335 --
1336 
1337 PROCEDURE Lock_Row
1338 (   x_return_status                 OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1339 ,   x_msg_count                     OUT NOCOPY /* file.sql.39 change */ NUMBER
1340 ,   x_msg_data                      OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1341 ,   p_amount                        IN  NUMBER
1342 ,   p_attribute1                    IN  VARCHAR2
1343 ,   p_attribute10                   IN  VARCHAR2
1344 ,   p_attribute11                   IN  VARCHAR2
1345 ,   p_attribute12                   IN  VARCHAR2
1346 ,   p_attribute13                   IN  VARCHAR2
1347 ,   p_attribute14                   IN  VARCHAR2
1348 ,   p_attribute15                   IN  VARCHAR2
1349 ,   p_attribute2                    IN  VARCHAR2
1350 ,   p_attribute3                    IN  VARCHAR2
1351 ,   p_attribute4                    IN  VARCHAR2
1352 ,   p_attribute5                    IN  VARCHAR2
1353 ,   p_attribute6                    IN  VARCHAR2
1354 ,   p_attribute7                    IN  VARCHAR2
1355 ,   p_attribute8                    IN  VARCHAR2
1356 ,   p_attribute9                    IN  VARCHAR2
1357 ,   p_basis                         IN  VARCHAR2
1358 ,   p_context                       IN  VARCHAR2
1359 ,   p_created_by                    IN  NUMBER
1360 ,   p_creation_date                 IN  DATE
1361 ,   p_last_updated_by               IN  NUMBER
1362 ,   p_last_update_date              IN  DATE
1363 ,   p_last_update_login             IN  NUMBER
1364 ,   p_limit_exceed_action_code      IN  VARCHAR2
1365 ,   p_limit_hold_flag               IN  VARCHAR2
1366 ,   p_limit_id                      IN  NUMBER
1367 ,   p_limit_level_code              IN  VARCHAR2
1368 ,   p_limit_number                  IN  NUMBER
1369 ,   p_list_header_id                IN  NUMBER
1370 ,   p_list_line_id                  IN  NUMBER
1371 ,   p_multival_attr1_type           IN  VARCHAR2
1372 ,   p_multival_attr1_context        IN  VARCHAR2
1373 ,   p_multival_attribute1           IN  VARCHAR2
1374 ,   p_multival_attr1_datatype       IN  VARCHAR2
1375 ,   p_multival_attr2_type           IN  VARCHAR2
1376 ,   p_multival_attr2_context        IN  VARCHAR2
1377 ,   p_multival_attribute2           IN  VARCHAR2
1378 ,   p_multival_attr2_datatype       IN  VARCHAR2
1379 ,   p_organization_flag             IN  VARCHAR2
1380 ,   p_program_application_id        IN  NUMBER
1381 ,   p_program_id                    IN  NUMBER
1382 ,   p_program_update_date           IN  DATE
1383 ,   p_request_id                    IN  NUMBER
1384 )
1385 IS
1386 l_return_status               VARCHAR2(1);
1387 l_LIMITS_rec                  QP_Limits_PUB.Limits_Rec_Type;
1388 l_x_LIMITS_rec                QP_Limits_PUB.Limits_Rec_Type;
1389 l_x_LIMIT_ATTRS_rec           QP_Limits_PUB.Limit_Attrs_Rec_Type;
1390 l_x_LIMIT_ATTRS_tbl           QP_Limits_PUB.Limit_Attrs_Tbl_Type;
1391 l_x_LIMIT_BALANCES_rec        QP_Limits_PUB.Limit_Balances_Rec_Type;
1392 l_x_LIMIT_BALANCES_tbl        QP_Limits_PUB.Limit_Balances_Tbl_Type;
1393 BEGIN
1394 
1395     --  Load LIMITS record
1396 
1397     l_LIMITS_rec.amount            := p_amount;
1398     l_LIMITS_rec.attribute1        := p_attribute1;
1399     l_LIMITS_rec.attribute10       := p_attribute10;
1400     l_LIMITS_rec.attribute11       := p_attribute11;
1401     l_LIMITS_rec.attribute12       := p_attribute12;
1402     l_LIMITS_rec.attribute13       := p_attribute13;
1403     l_LIMITS_rec.attribute14       := p_attribute14;
1404     l_LIMITS_rec.attribute15       := p_attribute15;
1405     l_LIMITS_rec.attribute2        := p_attribute2;
1406     l_LIMITS_rec.attribute3        := p_attribute3;
1407     l_LIMITS_rec.attribute4        := p_attribute4;
1408     l_LIMITS_rec.attribute5        := p_attribute5;
1409     l_LIMITS_rec.attribute6        := p_attribute6;
1410     l_LIMITS_rec.attribute7        := p_attribute7;
1411     l_LIMITS_rec.attribute8        := p_attribute8;
1412     l_LIMITS_rec.attribute9        := p_attribute9;
1413     l_LIMITS_rec.basis             := p_basis;
1414     l_LIMITS_rec.context           := p_context;
1415     l_LIMITS_rec.created_by        := p_created_by;
1416     l_LIMITS_rec.creation_date     := p_creation_date;
1417     l_LIMITS_rec.last_updated_by   := p_last_updated_by;
1418     l_LIMITS_rec.last_update_date  := p_last_update_date;
1419     l_LIMITS_rec.last_update_login := p_last_update_login;
1420     l_LIMITS_rec.limit_exceed_action_code := p_limit_exceed_action_code;
1421     l_LIMITS_rec.limit_hold_flag   := p_limit_hold_flag;
1422     l_LIMITS_rec.limit_id          := p_limit_id;
1423     l_LIMITS_rec.limit_level_code  := p_limit_level_code;
1424     l_LIMITS_rec.limit_number      := p_limit_number;
1425     l_LIMITS_rec.list_header_id    := p_list_header_id;
1426     l_LIMITS_rec.list_line_id      := p_list_line_id;
1427     l_LIMITS_rec.multival_attr1_type     := p_multival_attr1_type;
1428     l_LIMITS_rec.multival_attr1_context  := p_multival_attr1_context;
1429     l_LIMITS_rec.multival_attribute1     := p_multival_attribute1;
1430     l_LIMITS_rec.multival_attr1_datatype := p_multival_attr1_datatype;
1431     l_LIMITS_rec.multival_attr2_type     := p_multival_attr2_type;
1432     l_LIMITS_rec.multival_attr2_context  := p_multival_attr2_context;
1433     l_LIMITS_rec.multival_attribute2     := p_multival_attribute2;
1434     l_LIMITS_rec.multival_attr2_datatype := p_multival_attr2_datatype;
1435     l_LIMITS_rec.organization_flag       := p_organization_flag;
1436     l_LIMITS_rec.program_application_id  := p_program_application_id;
1437     l_LIMITS_rec.program_id              := p_program_id;
1438     l_LIMITS_rec.program_update_date     := p_program_update_date;
1439     l_LIMITS_rec.request_id              := p_request_id;
1440 
1441     --  Call QP_Limits_PVT.Lock_Limits
1442 
1443     QP_Limits_PVT.Lock_Limits
1444     (   p_api_version_number          => 1.0
1445     ,   p_init_msg_list               => FND_API.G_TRUE
1446     ,   x_return_status               => l_return_status
1447     ,   x_msg_count                   => x_msg_count
1448     ,   x_msg_data                    => x_msg_data
1449     ,   p_LIMITS_rec                  => l_LIMITS_rec
1450     ,   x_LIMITS_rec                  => l_x_LIMITS_rec
1451     ,   x_LIMIT_ATTRS_tbl             => l_x_LIMIT_ATTRS_tbl
1452     ,   x_LIMIT_BALANCES_tbl          => l_x_LIMIT_BALANCES_tbl
1453     );
1454 
1455     IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1456 
1457         --  Set DB flag and write record to cache.
1458 
1459         l_x_LIMITS_rec.db_flag := FND_API.G_TRUE;
1460 
1461         Write_LIMITS
1462         (   p_LIMITS_rec                  => l_x_LIMITS_rec
1463         ,   p_db_record                   => TRUE
1464         );
1465 
1466     END IF;
1467 
1468     --  Set return status.
1469 
1470     x_return_status := l_return_status;
1471 
1472     --  Get message count and data
1473 
1474     OE_MSG_PUB.Count_And_Get
1475     (   p_count                       => x_msg_count
1476     ,   p_data                        => x_msg_data
1477     );
1478 
1479 
1480 EXCEPTION
1481 
1482     WHEN OTHERS THEN
1483 
1484         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1485         THEN
1486             OE_MSG_PUB.Add_Exc_Msg
1487             (   G_PKG_NAME
1488             ,   'Lock_Row'
1489             );
1490         END IF;
1491 
1492         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1493 
1494         --  Get message count and data
1495 
1496         OE_MSG_PUB.Count_And_Get
1497         (   p_count                       => x_msg_count
1498         ,   p_data                        => x_msg_data
1499         );
1500 
1501 
1502 
1503 END Lock_Row;
1504 
1505 --  Procedures maintaining LIMITS record cache.
1506 
1507 PROCEDURE Write_LIMITS
1508 (   p_LIMITS_rec                    IN  QP_Limits_PUB.Limits_Rec_Type
1509 ,   p_db_record                     IN  BOOLEAN := FALSE
1510 )
1511 IS
1512 BEGIN
1513 
1514     g_LIMITS_rec := p_LIMITS_rec;
1515 
1516     IF p_db_record THEN
1517 
1518         g_db_LIMITS_rec := p_LIMITS_rec;
1519 
1520     END IF;
1521 
1522 END Write_Limits;
1523 
1524 FUNCTION Get_LIMITS
1525 (   p_db_record                     IN  BOOLEAN := FALSE
1526 ,   p_limit_id                      IN  NUMBER
1527 )
1528 RETURN QP_Limits_PUB.Limits_Rec_Type
1529 IS
1530 BEGIN
1531 
1532     IF  p_limit_id <> g_LIMITS_rec.limit_id
1533     THEN
1534 
1535         --  Query row from DB
1536 
1537         g_LIMITS_rec := QP_Limits_Util.Query_Row
1538         (   p_limit_id                    => p_limit_id
1539         );
1540 
1541         g_LIMITS_rec.db_flag           := FND_API.G_TRUE;
1542 
1543         --  Load DB record
1544 
1545         g_db_LIMITS_rec                := g_LIMITS_rec;
1546 
1547     END IF;
1548 
1549     IF p_db_record THEN
1550 
1551         RETURN g_db_LIMITS_rec;
1552 
1553     ELSE
1554 
1555         RETURN g_LIMITS_rec;
1556 
1557     END IF;
1558 
1559 END Get_Limits;
1560 
1561 PROCEDURE Clear_Limits
1562 IS
1563 BEGIN
1564 
1565     g_LIMITS_rec                   := QP_Limits_PUB.G_MISS_LIMITS_REC;
1566     g_db_LIMITS_rec                := QP_Limits_PUB.G_MISS_LIMITS_REC;
1567 
1568 END Clear_Limits;
1569 
1570 END QP_QP_Form_Limits;