DBA Data[Home] [Help]

PACKAGE BODY: APPS.GMD_OPERATIONS_PVT

Source


1 PACKAGE BODY GMD_OPERATIONS_PVT AS
2 /*  $Header: GMDVOPSB.pls 120.0 2005/05/25 19:47:44 appldev noship $
3  ********************************************************************
4  *                                                                  *
5  * Package  GMD_OPERATIONS_PVT                                      *
6  *                                                                  *
7  * Contents: INSERT_OPERATION	                                    *
8  *	   UPDATE_OPERATION  	                                    *
9  *                                                                  *
10  * Use      This is the private layer of the GMD Operations API     *
11  *                                                                  *
12  *                                                                  *
13  * History                                                          *
14  *         Written by Sandra Dulyk, OPM Development                 *
15  * 25-NOV-2002  Thomas Daniel   Bug# 2679110                        *
16  *              Added more validations and fixed the update proc    *
17  * 20-FEB-2004  NSRIVAST  Bug# 3222090,Removed call to              *
18  *                        FND_PROFILE.VALUE('AFLOG_ENABLED')        *
19  ********************************************************************
20 */
21 
22 --Bug 3222090, NSRIVAST 20-FEB-2004, BEGIN
23 --Forward declaration.
24    FUNCTION set_debug_flag RETURN VARCHAR2;
25    l_debug VARCHAR2(1) := set_debug_flag;
26 
27    FUNCTION set_debug_flag RETURN VARCHAR2 IS
28    l_debug VARCHAR2(1):= 'N';
29    BEGIN
30     IF( FND_LOG.LEVEL_PROCEDURE >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
31       l_debug := 'Y';
32     END IF;
33     RETURN l_debug;
34    END set_debug_flag;
35 --Bug 3222090, NSRIVAST 20-FEB-2004, END
36 
37    /*======================================================
38    Procedure
39       insert_operation
40    Description
41      This particular procedure is used to insert an operation
42    Parameters
43     ================================================ */
44   PROCEDURE insert_operation
45   ( p_api_version 	IN 	    NUMBER
46   , p_init_msg_list 	IN 	    BOOLEAN
47   , p_commit		IN 	    BOOLEAN
48   , p_operations 	IN 	    gmd_operations%ROWTYPE
49   , x_message_count 	OUT NOCOPY  NUMBER
50   , x_message_list 	OUT NOCOPY  VARCHAR2
51   , x_return_status	OUT NOCOPY  VARCHAR2)   IS
52 
53     l_rowid VARCHAR2(30);
54     setup_failure EXCEPTION;
55   BEGIN
56     IF (l_debug = 'Y') THEN
57       gmd_debug.put_line(' In insert_operation private');
58     END IF;
59 
60     /* Initially let us assign the return status to success */
61      x_return_status := FND_API.g_ret_sts_success;
62 
63     /* Set row who columns */
64      IF NOT gmd_api_grp.setup_done THEN
65         gmd_api_grp.setup_done := gmd_api_grp.setup;
66      END IF;
67      IF NOT gmd_api_grp.setup_done THEN
68         RAISE setup_failure;
69      END IF;
70 
71      GMD_OPERATIONS_PKG.INSERT_ROW(
72 	    X_ROWID => l_rowid	,
73 	    X_OPRN_ID => p_operations.oprn_id,
74 	    X_ATTRIBUTE30 => p_operations.ATTRIBUTE30,
75 	    X_ATTRIBUTE_CATEGORY => p_operations.ATTRIBUTE_CATEGORY,
76 	    X_ATTRIBUTE25 => p_operations.ATTRIBUTE25,
77 	    X_ATTRIBUTE26 => p_operations.ATTRIBUTE26,
78 	    X_ATTRIBUTE27 => p_operations.ATTRIBUTE27,
79 	    X_ATTRIBUTE28 => p_operations.ATTRIBUTE28,
80 	    X_ATTRIBUTE29 => p_operations.ATTRIBUTE29,
81 	    X_ATTRIBUTE22 => p_operations.ATTRIBUTE22,
82 	    X_ATTRIBUTE23 => p_operations.ATTRIBUTE23,
83 	    X_ATTRIBUTE24 => p_operations.ATTRIBUTE24,
84 	    X_OPRN_NO => p_operations.OPRN_NO,
85 	    X_OPRN_VERS => p_operations.OPRN_VERS,
86 	    X_PROCESS_QTY_UOM => p_operations.PROCESS_QTY_UOM,
87 	    X_MINIMUM_TRANSFER_QTY => p_operations.MINIMUM_TRANSFER_QTY,
88 	    X_OPRN_CLASS => p_operations.OPRN_CLASS,
89 	    X_INACTIVE_IND => 0,
90 	    X_EFFECTIVE_START_DATE => p_operations.EFFECTIVE_START_DATE,
91 	    X_EFFECTIVE_END_DATE => p_operations.EFFECTIVE_END_DATE,
92 	    X_DELETE_MARK => 0,
93 	    X_TEXT_CODE => p_operations.TEXT_CODE,
94 	    X_ATTRIBUTE1 => p_operations.ATTRIBUTE1,
95 	    X_ATTRIBUTE2 => p_operations.ATTRIBUTE2,
96 	    X_ATTRIBUTE3 => p_operations.ATTRIBUTE3,
97 	    X_ATTRIBUTE4 => p_operations.ATTRIBUTE4,
98 	    X_ATTRIBUTE5 => p_operations.ATTRIBUTE5,
99 	    X_ATTRIBUTE6 => p_operations.ATTRIBUTE6,
100 	    X_ATTRIBUTE7 => p_operations.ATTRIBUTE7,
101 	    X_ATTRIBUTE8 => p_operations.ATTRIBUTE8,
102 	    X_ATTRIBUTE9 => p_operations.ATTRIBUTE9,
103 	    X_ATTRIBUTE10 => p_operations.ATTRIBUTE10,
104 	    X_ATTRIBUTE11 => p_operations.ATTRIBUTE11,
105 	    X_ATTRIBUTE12 => p_operations.ATTRIBUTE12,
106 	    X_ATTRIBUTE13 => p_operations.ATTRIBUTE13,
107 	    X_ATTRIBUTE14 => p_operations.ATTRIBUTE14,
108 	    X_ATTRIBUTE15 => p_operations.ATTRIBUTE15,
109 	    X_ATTRIBUTE16 => p_operations.ATTRIBUTE16,
110 	    X_ATTRIBUTE17 => p_operations.ATTRIBUTE17,
111 	    X_ATTRIBUTE18 => p_operations.ATTRIBUTE18,
112 	    X_ATTRIBUTE19 => p_operations.ATTRIBUTE19,
113 	    X_ATTRIBUTE20 => p_operations.ATTRIBUTE20,
114 	    X_ATTRIBUTE21 => p_operations.ATTRIBUTE21,
115 	    X_OPERATION_STATUS => 100,
116 	    X_OWNER_ORGANIZATION_ID => p_operations.OWNER_ORGANIZATION_ID,
117 	    X_OPRN_DESC => p_operations.OPRN_DESC,
118 	    X_CREATION_DATE => sysdate,
119     	    X_CREATED_BY => gmd_api_grp.user_id,
120     	    X_LAST_UPDATE_DATE => sysdate,
121     	    X_LAST_UPDATED_BY => gmd_api_grp.user_id,
122     	    X_LAST_UPDATE_LOGIN => gmd_api_grp.login_id);
123 
124      IF (l_debug = 'Y') THEN
125        gmd_debug.put_line('END of Insert_operation private');
126      END IF;
127 
128    EXCEPTION
129      WHEN setup_failure THEN
130          x_return_status := FND_API.G_RET_STS_ERROR;
131      WHEN OTHERS THEN
132         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
133         FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
134         FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
135         FND_MSG_PUB.ADD;
136         FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
137                                    P_data  => x_message_list);
138    END Insert_Operation;
139 
140 
141    /*===========================================================================================
142    Procedure
143       update_operation
144    Description
145      This particular procedure is used to update an operation
146    Parameters
147 
148    ================================================ */
149   PROCEDURE update_operation
150   ( p_api_version 		IN 	NUMBER
151   , p_init_msg_list 		IN 	BOOLEAN
152   , p_commit		IN 	BOOLEAN
153   , p_oprn_id		IN	gmd_operations.oprn_id%TYPE
154   , p_update_table		IN	gmd_operations_pub.update_tbl_type
155   , x_message_count 		OUT NOCOPY  	NUMBER
156   , x_message_list 		OUT NOCOPY  	VARCHAR2
157   , x_return_status		OUT NOCOPY  	VARCHAR2)   IS
158 
159     CURSOR get_oprn_detail (v_oprn_id  NUMBER) IS
160       SELECT *
161       FROM gmd_operations
162       WHERE oprn_Id = p_oprn_id
163       AND delete_mark = 0;
164 
165     v_update_rec  		gmd_operations%ROWTYPE;
166     l_errmsg     		VARCHAR2(240);
167 
168     setup_failure  		EXCEPTION;
169     inv_operation		EXCEPTION;
170 
171     l_rt_start_date  Date;
172     l_rt_end_date    Date;
173 
174    CURSOR get_rt_start_end_dates(v_oprn_id NUMBER) IS
175      SELECT min(effective_start_date) effective_start_date,
176             max(NVL(effective_end_date, trunc(SYSDATE + 999999) )) effective_end_date
177      FROM   fm_rout_dtl d, gmd_routings_b r
178      WHERE  d.oprn_id = v_oprn_id
179      AND    r.routing_id = d.routing_id
180      AND    r.delete_mark = 0;
181 
182   BEGIN
183     IF (l_debug = 'Y') THEN
184       gmd_debug.put_line(' In update_operation private');
185     END IF;
186 
187     /* Initially let us assign the return status to success */
188     x_return_status := FND_API.g_ret_sts_success;
189 
190     /* Set row who columns */
191     IF NOT gmd_api_grp.setup_done THEN
192       gmd_api_grp.setup_done := gmd_api_grp.setup;
193     END IF;
194     IF NOT gmd_api_grp.setup_done THEN
195       RAISE setup_failure;
196     END IF;
197 
198     OPEN get_oprn_detail(p_oprn_id);
199     FETCH get_oprn_detail INTO v_update_rec;
200     IF get_oprn_detail%NOTFOUND THEN
201       gmd_api_grp.log_message ('FM_INVOPRN');
202       RAISE inv_operation;
203     END IF;
204     CLOSE get_oprn_detail;
205 
206     FOR i IN 1 .. p_update_table.count LOOP
207       IF UPPER(p_update_table(i).p_col_to_update) = 'PROCESS_QTY_UOM' THEN
208         v_update_rec.PROCESS_QTY_UOM := p_update_table(i).p_value;
209       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'MINIMUM_TRANSFER_QTY' THEN
210         v_update_rec.minimum_transfer_qty := p_update_table(i).p_value;
211       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'OPRN_CLASS' THEN
212         v_update_rec.oprn_class := p_update_table(i).p_value;
213       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'OPRN_DESC' THEN
214         v_update_rec.oprn_desc := p_update_table(i).p_value;
215       ELSIF UPPER(p_update_table(i).p_col_to_update) like '%START_DATE%' THEN
216         IF (l_debug = 'Y') THEN
217           gmd_debug.put_line('The eff_start_date for operation prior to update = '||
218                     p_update_table(i).p_value);
219         END IF;
220         v_update_rec.effective_start_date
221              := FND_DATE.canonical_to_date(p_update_table(i).p_value);
222       ELSIF UPPER(p_update_table(i).p_col_to_update) like '%END_DATE%' THEN
223         IF (l_debug = 'Y') THEN
224           gmd_debug.put_line('The eff_end_date for operation prior to update = '||
225                     p_update_table(i).p_value) ;
226         END IF;
227         v_update_rec.effective_end_date
228              := FND_DATE.canonical_to_date(p_update_table(i).p_value);
229       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'OWNER_ORGANIZATION_ID' THEN
230         v_update_rec.owner_organization_id := p_update_table(i).p_value;
231       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'DELETE_MARK' THEN
232         v_update_rec.delete_mark := p_update_table(i).p_value;
233       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE1' THEN
234         v_update_rec.attribute1 := p_update_table(i).p_value;
235       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE2' THEN
236          	     v_update_rec.attribute2 := p_update_table(i).p_value;
237       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE3' THEN
238       	     v_update_rec.attribute3 := p_update_table(i).p_value;
239       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE4' THEN
240        	     v_update_rec.attribute4 := p_update_table(i).p_value;
241       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE5' THEN
242        	     v_update_rec.attribute5 := p_update_table(i).p_value;
243       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE6' THEN
244        	     v_update_rec.attribute6 := p_update_table(i).p_value;
245       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE7' THEN
246        	     v_update_rec.attribute7 := p_update_table(i).p_value;
247       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE8' THEN
248        	     v_update_rec.attribute8 := p_update_table(i).p_value;
249       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE9' THEN
250        	     v_update_rec.attribute9 := p_update_table(i).p_value;
251       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE10' THEN
252        	     v_update_rec.attribute10 := p_update_table(i).p_value;
253       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE11' THEN
254        	     v_update_rec.attribute11 := p_update_table(i).p_value;
255       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE12' THEN
256        	     v_update_rec.attribute12 := p_update_table(i).p_value;
257       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE13' THEN
258        	     v_update_rec.attribute13 := p_update_table(i).p_value;
259       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE14' THEN
260        	     v_update_rec.attribute14 := p_update_table(i).p_value;
261       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE15' THEN
262        	     v_update_rec.attribute15 := p_update_table(i).p_value;
263       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE16' THEN
264        	     v_update_rec.attribute16 := p_update_table(i).p_value;
265       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE17' THEN
266        	     v_update_rec.attribute17 := p_update_table(i).p_value;
267       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE18' THEN
268        	     v_update_rec.attribute18 := p_update_table(i).p_value;
269       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE19' THEN
270        	     v_update_rec.attribute19 := p_update_table(i).p_value;
271       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE20' THEN
272        	     v_update_rec.attribute20 := p_update_table(i).p_value;
273       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE21' THEN
274        	     v_update_rec.attribute21 := p_update_table(i).p_value;
275       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE22' THEN
276        	     v_update_rec.attribute22 := p_update_table(i).p_value;
277       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE23' THEN
278        	     v_update_rec.attribute23 := p_update_table(i).p_value;
279       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE24' THEN
280        	     v_update_rec.attribute24 := p_update_table(i).p_value;
281       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE25' THEN
282        	     v_update_rec.attribute25 := p_update_table(i).p_value;
283       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE26' THEN
284        	     v_update_rec.attribute26 := p_update_table(i).p_value;
285       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE27' THEN
286        	     v_update_rec.attribute27 := p_update_table(i).p_value;
287       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE28' THEN
288        	     v_update_rec.attribute28 := p_update_table(i).p_value;
289       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE29' THEN
290        	     v_update_rec.attribute29 := p_update_table(i).p_value;
291       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE30' THEN
292        	     v_update_rec.attribute30 := p_update_table(i).p_value;
293       ELSIF UPPER(p_update_table(i).p_col_to_update) = 'ATTRIBUTE_CATEGORY' THEN
294        	     v_update_rec.attribute_category := p_update_table(i).p_value;
295       END IF;
296 
297       -- Compare Oprn start dtae with Routing Start Dtae
298       If (l_debug = 'Y') THEN
299         gmd_debug.put_line('The oprn id = '||v_update_rec.oprn_id);
300       END IF;
301 
302       IF UPPER(p_update_table(i).p_col_to_update) like '%START_DATE%' THEN
303         OPEN get_rt_start_end_dates(v_update_rec.oprn_id);
304         FETCH get_rt_start_end_dates INTO l_rt_start_date, l_rt_end_date;
305 
306         IF (l_rt_end_date = trunc(SYSDATE + 999999) ) THEN
307           l_rt_end_date := Null;
308         END IF;
309 
310         IF l_rt_start_date IS NOT NULL THEN
311           IF (l_debug = 'Y') THEN
312             gmd_debug.put_line('In OPeration Pvt - Comparing OPrn start date '||
313                              ' with routing start date '||
314                              'Operation start and Rout Start date = '||
315                              v_update_rec.effective_start_date||' - '||l_rt_start_date);
316 
317           END IF;
318 
319           IF (l_rt_start_date < v_update_rec.effective_start_date) THEN
320             FND_MESSAGE.SET_NAME('GMD', 'GMD_ROUTING_FROM_DATE');
321             FND_MESSAGE.set_token('OPRN_NO',v_update_rec.oprn_no);
322             FND_MESSAGE.set_token('VERSION_NO',v_update_rec.oprn_vers);
323             FND_MESSAGE.set_token('OPRN_DATE',p_update_table(i).p_value);
324             FND_MSG_PUB.ADD;
325             RAISE inv_operation;
326           END IF;
327         END IF;
328         CLOSE  get_rt_start_end_dates;
329       END IF; -- comparing start dates
330 
331       -- Compare Oprn end dtae with Routing end Dtae
332       IF UPPER(p_update_table(i).p_col_to_update) like '%END_DATE%' THEN
333         OPEN get_rt_start_end_dates(v_update_rec.oprn_id);
334         FETCH get_rt_start_end_dates INTO l_rt_start_date, l_rt_end_date;
335 
336         IF (l_rt_end_date = trunc(SYSDATE + 999999) ) THEN
337           l_rt_end_date := Null;
338         END IF;
339 
340         IF l_rt_start_date IS NOT NULL THEN
341           IF (l_debug = 'Y') THEN
342             gmd_debug.put_line('In OPeration Pvt - Comparing Oprn end date '||
343                              ' with routing end date '||
344                              'Oprn end date and Rout end date =  '||
345                              v_update_rec.effective_end_date||' - '||l_rt_end_date);
346 
347           END IF;
348 
349           IF ((l_rt_end_date IS NULL) AND
350               (v_update_rec.effective_end_date IS NOT NULL)) THEN
351               FND_MESSAGE.SET_NAME('GMD', 'GMD_OPER_EFF_END_DATE');
352               FND_MSG_PUB.ADD;
353               RAISE inv_operation;
354           END IF;
355 
356           IF (l_rt_end_date > v_update_rec.effective_end_date) THEN
357               FND_MESSAGE.SET_NAME('GMD', 'GMD_OPER_EFF_END_DATE');
358               FND_MSG_PUB.ADD;
359               RAISE inv_operation;
360           END IF;
361         END IF;
362 
363         CLOSE get_rt_start_end_dates;
364       END IF; -- comparing end dates
365     END LOOP;
366 
367     -- Comparind Start and End dates of an operation.
368     IF v_update_rec.effective_end_date IS NOT NULL THEN
369       /* Effective end date must be greater than start date, otherwise give error */
370       IF v_update_rec.effective_start_date > v_update_rec.effective_end_date THEN
371         IF (l_debug = 'Y') THEN
372           gmd_debug.put_line('effective start date must be less then end date');
373         END IF;
374         FND_MESSAGE.SET_NAME('GMD', 'QC_MIN_MAX_DATE');
375         FND_MSG_PUB.ADD;
376         RAISE inv_operation;
377       END IF;
378     END IF;
379 
380 
381     IF x_return_status = 'S' THEN
382       GMD_OPERATIONS_PKG.UPDATE_ROW(
383 	    X_OPRN_ID =>  v_update_rec.oprn_id,
384 	    X_ATTRIBUTE30 => v_update_rec.ATTRIBUTE30,
385 	    X_ATTRIBUTE_CATEGORY =>  v_update_rec.ATTRIBUTE_CATEGORY,
386 	    X_ATTRIBUTE25 =>  v_update_rec.ATTRIBUTE25,
387 	    X_ATTRIBUTE26 =>  v_update_rec.ATTRIBUTE26,
388 	    X_ATTRIBUTE27 => v_update_rec.ATTRIBUTE27,
389 	    X_ATTRIBUTE28 => v_update_rec.ATTRIBUTE28,
390 	    X_ATTRIBUTE29 => v_update_rec.ATTRIBUTE29,
391 	    X_ATTRIBUTE22 => v_update_rec.ATTRIBUTE22,
392 	    X_ATTRIBUTE23 => v_update_rec.ATTRIBUTE23,
393 	    X_ATTRIBUTE24 => v_update_rec.ATTRIBUTE24,
394 	    X_OPRN_NO => v_update_rec.OPRN_NO,
395 	    X_OPRN_VERS =>  v_update_rec.OPRN_VERS,
396 	    X_PROCESS_QTY_UOM => v_update_rec.PROCESS_QTY_UOM,
397 	    X_MINIMUM_TRANSFER_QTY => v_update_rec.MINIMUM_TRANSFER_QTY,
398 	    X_OPRN_CLASS => v_update_rec.OPRN_CLASS,
399 	    X_INACTIVE_IND => v_update_rec.inactive_ind,
400 	    X_EFFECTIVE_START_DATE => v_update_rec.EFFECTIVE_START_DATE,
401 	    X_EFFECTIVE_END_DATE => v_update_rec.EFFECTIVE_END_DATE,
402 	    X_DELETE_MARK => v_update_rec.delete_mark,
403 	    X_TEXT_CODE => v_update_rec.TEXT_CODE,
404 	    X_ATTRIBUTE1 => v_update_rec.ATTRIBUTE1,
405 	    X_ATTRIBUTE2 => v_update_rec.ATTRIBUTE2,
406 	    X_ATTRIBUTE3 => v_update_rec.ATTRIBUTE3,
407 	    X_ATTRIBUTE4 => v_update_rec.ATTRIBUTE4,
408 	    X_ATTRIBUTE5 => v_update_rec.ATTRIBUTE5,
409 	    X_ATTRIBUTE6 => v_update_rec.ATTRIBUTE6,
410 	    X_ATTRIBUTE7 => v_update_rec.ATTRIBUTE7,
411 	    X_ATTRIBUTE8 => v_update_rec.ATTRIBUTE8,
412 	    X_ATTRIBUTE9 => v_update_rec.ATTRIBUTE9,
413 	    X_ATTRIBUTE10 => v_update_rec.ATTRIBUTE10,
414 	    X_ATTRIBUTE11 => v_update_rec.ATTRIBUTE11,
415 	    X_ATTRIBUTE12 => v_update_rec.ATTRIBUTE12,
416 	    X_ATTRIBUTE13 => v_update_rec.ATTRIBUTE13,
417 	    X_ATTRIBUTE14 => v_update_rec.ATTRIBUTE14,
418 	    X_ATTRIBUTE15 => v_update_rec.ATTRIBUTE15,
419 	    X_ATTRIBUTE16 => v_update_rec.ATTRIBUTE16,
420 	    X_ATTRIBUTE17 => v_update_rec.ATTRIBUTE17,
421 	    X_ATTRIBUTE18 => v_update_rec.ATTRIBUTE18,
422 	    X_ATTRIBUTE19 => v_update_rec.ATTRIBUTE19,
423 	    X_ATTRIBUTE20 => v_update_rec.ATTRIBUTE20,
424 	    X_ATTRIBUTE21 => v_update_rec.ATTRIBUTE21,
425 	    X_OPERATION_STATUS => v_update_rec.operation_status,
426 	    X_OWNER_ORGANIZATION_ID => v_update_rec.OWNER_ORGANIZATION_ID,
427 	    X_OPRN_DESC => v_update_rec.OPRN_DESC,
428     	    X_LAST_UPDATE_DATE => sysdate,
429     	    X_LAST_UPDATED_BY => gmd_api_grp.user_id,
430     	    X_LAST_UPDATE_LOGIN => gmd_api_grp.login_id);
431 
432     END IF;
433   EXCEPTION
434     WHEN setup_failure OR inv_operation THEN
435       x_return_status := FND_API.G_RET_STS_ERROR;
436       FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
437 	                         P_data  => x_message_list);
438     WHEN OTHERS THEN
439       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
440       FND_MESSAGE.SET_NAME('GMD', 'GMD_UNEXPECTED_ERROR');
441       FND_MESSAGE.SET_TOKEN('ERROR', sqlerrm);
442       FND_MSG_PUB.ADD;
443       FND_MSG_PUB.COUNT_AND_GET (P_count => x_message_count,
444  	                         P_data  => x_message_list);
445 
446   END update_operation;
447 
448 END GMD_OPERATIONS_PVT;