DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGS_EN_ATTRIB_VALUES_PKG

Source


1 PACKAGE BODY igs_en_attrib_values_pkg AS
2 /* $Header: IGSEI64B.pls 115.1 2002/11/28 23:48:09 nsidana noship $ */
3 
4   l_rowid VARCHAR2(25);
5   old_references IGS_EN_ATTRIB_VALUES%ROWTYPE;
6   new_references IGS_EN_ATTRIB_VALUES%ROWTYPE;
7 
8   PROCEDURE set_column_values (
9     p_action                            IN     VARCHAR2,
10     x_rowid                             IN     VARCHAR2    DEFAULT NULL,
11     x_obj_type_id                       IN     NUMBER      DEFAULT NULL,
12     x_obj_id                            IN     NUMBER      DEFAULT NULL,
13     x_attrib_id                         IN     NUMBER      DEFAULT NULL,
14     x_version                           IN     NUMBER      DEFAULT NULL,
15     x_value                             IN     VARCHAR2    DEFAULT NULL,
16     x_creation_date                     IN     DATE        DEFAULT NULL,
17     x_created_by                        IN     NUMBER      DEFAULT NULL,
18     x_last_update_date                  IN     DATE        DEFAULT NULL,
19     x_last_updated_by                   IN     NUMBER      DEFAULT NULL,
20     x_last_update_login                 IN     NUMBER      DEFAULT NULL
21   ) AS
22   /*
23   ||  Created By : [email protected]
24   ||  Created On : 01-FEB-2002
25   ||  Purpose : Initialises the Old and New references for the columns of the table.
26   ||  Known limitations, enhancements or remarks :
27   ||  Change History :
28   ||  Who             When            What
29   ||  (reverse chronological order - newest change first)
30   */
31 
32     CURSOR cur_old_ref_values IS
33       SELECT   *
34       FROM     IGS_EN_ATTRIB_VALUES
35       WHERE    rowid = x_rowid;
36 
37   BEGIN
38 
39     l_rowid := x_rowid;
40 
41     -- Code for setting the Old and New Reference Values.
42     -- Populate Old Values.
43     OPEN cur_old_ref_values;
44     FETCH cur_old_ref_values INTO old_references;
45     IF ((cur_old_ref_values%NOTFOUND) AND (p_action NOT IN ('INSERT', 'VALIDATE_INSERT'))) THEN
46       CLOSE cur_old_ref_values;
47       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
48       igs_ge_msg_stack.add;
49       app_exception.raise_exception;
50       RETURN;
51     END IF;
52     CLOSE cur_old_ref_values;
53 
54     -- Populate New Values.
55     new_references.obj_type_id                       := x_obj_type_id;
56     new_references.obj_id                            := x_obj_id;
57     new_references.attrib_id                         := x_attrib_id;
58     new_references.version                           := x_version;
59     new_references.value                             := x_value;
60 
61     IF (p_action = 'UPDATE') THEN
62       new_references.creation_date                   := old_references.creation_date;
63       new_references.created_by                      := old_references.created_by;
64     ELSE
65       new_references.creation_date                   := x_creation_date;
66       new_references.created_by                      := x_created_by;
67     END IF;
68 
69     new_references.last_update_date                  := x_last_update_date;
70     new_references.last_updated_by                   := x_last_updated_by;
71     new_references.last_update_login                 := x_last_update_login;
72 
73   END set_column_values;
74 
75 
76   PROCEDURE check_parent_existance AS
77   /*
78   ||  Created By : [email protected]
79   ||  Created On : 01-FEB-2002
80   ||  Purpose : Checks for the existance of Parent records.
81   ||  Known limitations, enhancements or remarks :
82   ||  Change History :
83   ||  Who             When            What
84   ||  (reverse chronological order - newest change first)
85   */
86   BEGIN
87 
88     IF (((old_references.obj_id = new_references.obj_id)) OR
89         ((new_references.obj_id IS NULL))) THEN
90       NULL;
91     ELSIF NOT igs_en_doc_instances_pkg.get_pk_for_validation (
92                 new_references.obj_id
93               ) THEN
94       fnd_message.set_name ('FND', 'FORM_RECORD_DELETED');
95       igs_ge_msg_stack.add;
96       app_exception.raise_exception;
97     END IF;
98 
99   END check_parent_existance;
100 
101 
102   FUNCTION get_pk_for_validation (
103     x_obj_type_id                       IN     NUMBER,
104     x_obj_id                            IN     NUMBER,
105     x_attrib_id                         IN     NUMBER,
106     x_version                           IN     NUMBER
107   ) RETURN BOOLEAN AS
108   /*
109   ||  Created By : [email protected]
110   ||  Created On : 01-FEB-2002
111   ||  Purpose : Validates the Primary Key of the table.
112   ||  Known limitations, enhancements or remarks :
113   ||  Change History :
114   ||  Who             When            What
115   ||  (reverse chronological order - newest change first)
116   */
117     CURSOR cur_rowid IS
118       SELECT   rowid
119       FROM     IGS_EN_ATTRIB_VALUES
120       WHERE    obj_type_id = x_obj_type_id
121       AND      obj_id = x_obj_id
122       AND      attrib_id = x_attrib_id
123       AND      version = x_version
124       FOR UPDATE NOWAIT;
125 
126     lv_rowid cur_rowid%RowType;
127 
128   BEGIN
129 
130     OPEN cur_rowid;
131     FETCH cur_rowid INTO lv_rowid;
132     IF (cur_rowid%FOUND) THEN
133       CLOSE cur_rowid;
134       RETURN(TRUE);
135     ELSE
136       CLOSE cur_rowid;
137       RETURN(FALSE);
138     END IF;
139 
140   END get_pk_for_validation;
141 
142 
143   PROCEDURE before_dml (
144     p_action                            IN     VARCHAR2,
145     x_rowid                             IN     VARCHAR2    DEFAULT NULL,
146     x_obj_type_id                       IN     NUMBER      DEFAULT NULL,
147     x_obj_id                            IN     NUMBER      DEFAULT NULL,
148     x_attrib_id                         IN     NUMBER      DEFAULT NULL,
149     x_version                           IN     NUMBER      DEFAULT NULL,
150     x_value                             IN     VARCHAR2    DEFAULT NULL,
151     x_creation_date                     IN     DATE        DEFAULT NULL,
152     x_created_by                        IN     NUMBER      DEFAULT NULL,
153     x_last_update_date                  IN     DATE        DEFAULT NULL,
154     x_last_updated_by                   IN     NUMBER      DEFAULT NULL,
155     x_last_update_login                 IN     NUMBER      DEFAULT NULL
156   ) AS
157   /*
158   ||  Created By : [email protected]
159   ||  Created On : 01-FEB-2002
160   ||  Purpose : Initialises the columns, Checks Constraints, Calls the
161   ||            Trigger Handlers for the table, before any DML operation.
162   ||  Known limitations, enhancements or remarks :
163   ||  Change History :
164   ||  Who             When            What
165   ||  (reverse chronological order - newest change first)
166   */
167   BEGIN
168 
169     set_column_values (
170       p_action,
171       x_rowid,
172       x_obj_type_id,
173       x_obj_id,
174       x_attrib_id,
175       x_version,
176       x_value,
177       x_creation_date,
178       x_created_by,
179       x_last_update_date,
180       x_last_updated_by,
181       x_last_update_login
182     );
183 
184     IF (p_action = 'INSERT') THEN
185       -- Call all the procedures related to Before Insert.
186       IF ( get_pk_for_validation(
187              new_references.obj_type_id,
188              new_references.obj_id,
189              new_references.attrib_id,
190              new_references.version
191            )
192          ) THEN
193         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
194         igs_ge_msg_stack.add;
195         app_exception.raise_exception;
196       END IF;
197       check_parent_existance;
198     ELSIF (p_action = 'UPDATE') THEN
199       -- Call all the procedures related to Before Update.
200       check_parent_existance;
201     ELSIF (p_action = 'VALIDATE_INSERT') THEN
202       -- Call all the procedures related to Before Insert.
203       IF ( get_pk_for_validation (
204              new_references.obj_type_id,
205              new_references.obj_id,
206              new_references.attrib_id,
207              new_references.version
208            )
209          ) THEN
210         fnd_message.set_name('IGS','IGS_GE_RECORD_ALREADY_EXISTS');
211         igs_ge_msg_stack.add;
212         app_exception.raise_exception;
213       END IF;
214     END IF;
215 
216   END before_dml;
217 
218 
219   PROCEDURE insert_row (
220     x_rowid                             IN OUT NOCOPY VARCHAR2,
221     x_obj_type_id                       IN     NUMBER,
222     x_obj_id                            IN     NUMBER,
223     x_attrib_id                         IN     NUMBER,
224     x_version                           IN     NUMBER,
225     x_value                             IN     VARCHAR2,
226     x_mode                              IN     VARCHAR2 DEFAULT 'R'
227   ) AS
228   /*
229   ||  Created By : [email protected]
230   ||  Created On : 01-FEB-2002
231   ||  Purpose : Handles the INSERT DML logic for the table.
232   ||  Known limitations, enhancements or remarks :
233   ||  Change History :
234   ||  Who             When            What
235   ||  (reverse chronological order - newest change first)
236   */
237     CURSOR c IS
238       SELECT   rowid
239       FROM     IGS_EN_ATTRIB_VALUES
240       WHERE    obj_type_id                       = x_obj_type_id
241       AND      obj_id                            = x_obj_id
242       AND      attrib_id                         = x_attrib_id
243       AND      version                           = x_version;
244 
245     x_last_update_date           DATE;
246     x_last_updated_by            NUMBER;
247     x_last_update_login          NUMBER;
248 
249   BEGIN
250 
251     x_last_update_date := SYSDATE;
252     IF (x_mode = 'I') THEN
253       x_last_updated_by := 1;
254       x_last_update_login := 0;
255     ELSIF (x_mode = 'R') THEN
256       x_last_updated_by := fnd_global.user_id;
257       IF (x_last_updated_by IS NULL) THEN
258         x_last_updated_by := -1;
259       END IF;
260       x_last_update_login := fnd_global.login_id;
261       IF (x_last_update_login IS NULL) THEN
262         x_last_update_login := -1;
263       END IF;
264     ELSE
265       fnd_message.set_name ('FND', 'SYSTEM-INVALID ARGS');
266       igs_ge_msg_stack.add;
267       app_exception.raise_exception;
268     END IF;
269 
270     before_dml(
271       p_action                            => 'INSERT',
272       x_rowid                             => x_rowid,
273       x_obj_type_id                       => x_obj_type_id,
274       x_obj_id                            => x_obj_id,
275       x_attrib_id                         => x_attrib_id,
276       x_version                           => x_version,
277       x_value                             => x_value,
278       x_creation_date                     => x_last_update_date,
279       x_created_by                        => x_last_updated_by,
280       x_last_update_date                  => x_last_update_date,
281       x_last_updated_by                   => x_last_updated_by,
282       x_last_update_login                 => x_last_update_login
283     );
284 
285     INSERT INTO IGS_EN_ATTRIB_VALUES (
286       obj_type_id,
287       obj_id,
288       attrib_id,
289       version,
290       value,
291       creation_date,
292       created_by,
293       last_update_date,
294       last_updated_by,
295       last_update_login
296     ) VALUES (
297       new_references.obj_type_id,
298       new_references.obj_id,
299       new_references.attrib_id,
300       new_references.version,
301       new_references.value,
302       x_last_update_date,
303       x_last_updated_by,
304       x_last_update_date,
305       x_last_updated_by,
306       x_last_update_login
307     );
308 
309     OPEN c;
310     FETCH c INTO x_rowid;
311     IF (c%NOTFOUND) THEN
312       CLOSE c;
313       RAISE NO_DATA_FOUND;
314     END IF;
315     CLOSE c;
316 
317   END insert_row;
318 
319 
320   PROCEDURE lock_row (
321     x_rowid                             IN     VARCHAR2,
322     x_obj_type_id                       IN     NUMBER,
323     x_obj_id                            IN     NUMBER,
324     x_attrib_id                         IN     NUMBER,
325     x_version                           IN     NUMBER,
326     x_value                             IN     VARCHAR2
327   ) AS
328   /*
329   ||  Created By : [email protected]
330   ||  Created On : 01-FEB-2002
331   ||  Purpose : Handles the LOCK mechanism for the table.
332   ||  Known limitations, enhancements or remarks :
333   ||  Change History :
334   ||  Who             When            What
335   ||  (reverse chronological order - newest change first)
336   */
337     CURSOR c1 IS
338       SELECT
339         value
340       FROM  IGS_EN_ATTRIB_VALUES
341       WHERE rowid = x_rowid
342       FOR UPDATE NOWAIT;
343 
344     tlinfo c1%ROWTYPE;
345 
346   BEGIN
347 
348     OPEN c1;
349     FETCH c1 INTO tlinfo;
350     IF (c1%notfound) THEN
351       fnd_message.set_name('FND', 'FORM_RECORD_DELETED');
352       igs_ge_msg_stack.add;
353       CLOSE c1;
354       app_exception.raise_exception;
355       RETURN;
356     END IF;
357     CLOSE c1;
358 
359     IF (
360         ((tlinfo.value = x_value) OR ((tlinfo.value IS NULL) AND (X_value IS NULL)))
361        ) THEN
362       NULL;
366       app_exception.raise_exception;
363     ELSE
364       fnd_message.set_name('FND', 'FORM_RECORD_CHANGED');
365       igs_ge_msg_stack.add;
367     END IF;
368 
369     RETURN;
370 
371   END lock_row;
372 
373 
374   PROCEDURE update_row (
375     x_rowid                             IN     VARCHAR2,
376     x_obj_type_id                       IN     NUMBER,
377     x_obj_id                            IN     NUMBER,
378     x_attrib_id                         IN     NUMBER,
379     x_version                           IN     NUMBER,
380     x_value                             IN     VARCHAR2,
381     x_mode                              IN     VARCHAR2 DEFAULT 'R'
382   ) AS
383   /*
384   ||  Created By : [email protected]
385   ||  Created On : 01-FEB-2002
386   ||  Purpose : Handles the UPDATE DML logic for the table.
387   ||  Known limitations, enhancements or remarks :
388   ||  Change History :
389   ||  Who             When            What
390   ||  (reverse chronological order - newest change first)
391   */
392     x_last_update_date           DATE ;
393     x_last_updated_by            NUMBER;
394     x_last_update_login          NUMBER;
395 
396   BEGIN
397 
398     x_last_update_date := SYSDATE;
399     IF (X_MODE = 'I') THEN
400       x_last_updated_by := 1;
401       x_last_update_login := 0;
402     ELSIF (x_mode = 'R') THEN
403       x_last_updated_by := fnd_global.user_id;
404       IF x_last_updated_by IS NULL THEN
405         x_last_updated_by := -1;
406       END IF;
407       x_last_update_login := fnd_global.login_id;
408       IF (x_last_update_login IS NULL) THEN
409         x_last_update_login := -1;
410       END IF;
411     ELSE
412       fnd_message.set_name( 'FND', 'SYSTEM-INVALID ARGS');
413       igs_ge_msg_stack.add;
414       app_exception.raise_exception;
415     END IF;
416 
417     before_dml(
418       p_action                            => 'UPDATE',
419       x_rowid                             => x_rowid,
420       x_obj_type_id                       => x_obj_type_id,
421       x_obj_id                            => x_obj_id,
422       x_attrib_id                         => x_attrib_id,
423       x_version                           => x_version,
424       x_value                             => x_value,
425       x_creation_date                     => x_last_update_date,
426       x_created_by                        => x_last_updated_by,
427       x_last_update_date                  => x_last_update_date,
428       x_last_updated_by                   => x_last_updated_by,
429       x_last_update_login                 => x_last_update_login
430     );
431 
432     UPDATE IGS_EN_ATTRIB_VALUES
433       SET
434         value                             = new_references.value,
435         last_update_date                  = x_last_update_date,
436         last_updated_by                   = x_last_updated_by,
437         last_update_login                 = x_last_update_login
438       WHERE rowid = x_rowid;
439 
440     IF (SQL%NOTFOUND) THEN
441       RAISE NO_DATA_FOUND;
442     END IF;
443 
444   END update_row;
445 
446 
447   PROCEDURE add_row (
448     x_rowid                             IN OUT NOCOPY VARCHAR2,
449     x_obj_type_id                       IN     NUMBER,
450     x_obj_id                            IN     NUMBER,
451     x_attrib_id                         IN     NUMBER,
452     x_version                           IN     NUMBER,
453     x_value                             IN     VARCHAR2,
454     x_mode                              IN     VARCHAR2 DEFAULT 'R'
455   ) AS
456   /*
457   ||  Created By : [email protected]
458   ||  Created On : 01-FEB-2002
459   ||  Purpose : Adds a row if there is no existing row, otherwise updates existing row in the table.
460   ||  Known limitations, enhancements or remarks :
461   ||  Change History :
462   ||  Who             When            What
463   ||  (reverse chronological order - newest change first)
464   */
465     CURSOR c1 IS
466       SELECT   rowid
467       FROM     IGS_EN_ATTRIB_VALUES
468       WHERE    obj_type_id                       = x_obj_type_id
469       AND      obj_id                            = x_obj_id
470       AND      attrib_id                         = x_attrib_id
471       AND      version                           = x_version;
472 
473   BEGIN
474 
475     OPEN c1;
476     FETCH c1 INTO x_rowid;
477     IF (c1%NOTFOUND) THEN
478       CLOSE c1;
479 
480       insert_row (
481         x_rowid,
482         x_obj_type_id,
483         x_obj_id,
484         x_attrib_id,
485         x_version,
486         x_value,
487         x_mode
488       );
489       RETURN;
490     END IF;
491     CLOSE c1;
492 
493     update_row (
494       x_rowid,
495       x_obj_type_id,
496       x_obj_id,
497       x_attrib_id,
498       x_version,
499       x_value,
500       x_mode
501     );
502 
503   END add_row;
504 
505 
506   PROCEDURE delete_row (
507     x_rowid IN VARCHAR2
508   ) AS
509   /*
510   ||  Created By : [email protected]
511   ||  Created On : 01-FEB-2002
512   ||  Purpose : Handles the DELETE DML logic for the table.
513   ||  Known limitations, enhancements or remarks :
514   ||  Change History :
515   ||  Who             When            What
516   ||  (reverse chronological order - newest change first)
517   */
518   BEGIN
519 
520     before_dml (
521       p_action => 'DELETE',
522       x_rowid => x_rowid
523     );
524 
525     DELETE FROM IGS_EN_ATTRIB_VALUES
526     WHERE rowid = x_rowid;
527 
528     IF (SQL%NOTFOUND) THEN
529       RAISE NO_DATA_FOUND;
530     END IF;
531 
532   END delete_row;
533 
534 
535 END IGS_EN_ATTRIB_VALUES_pkg;