DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSD_SC_DOMAINS_PVT

Source


1 PACKAGE BODY CSD_SC_DOMAINS_PVT as
2 /* $Header: csdvscdb.pls 115.6 2004/02/16 03:20:57 gilam noship $ */
3 
4 G_PKG_NAME    CONSTANT VARCHAR2(30) := 'CSD_SC_DOMAINS_PVT';
5 G_FILE_NAME   CONSTANT VARCHAR2(12) := 'csdvscdb.pls';
6 
7 /*--------------------------------------------------*/
8 /* procedure name: Create_SC_Domain                 */
9 /* description   : procedure used to create         */
10 /*                 sc domain	                    */
11 /*                                                  */
12 /*--------------------------------------------------*/
13 PROCEDURE Create_SC_Domain
14 (
15   p_api_version        		IN  NUMBER,
16   p_commit	   		IN  VARCHAR2,
17   p_init_msg_list      		IN  VARCHAR2,
18   p_validation_level   		IN  NUMBER,
19   x_return_status      		OUT NOCOPY VARCHAR2,
20   x_msg_count          		OUT NOCOPY NUMBER,
21   x_msg_data           		OUT NOCOPY VARCHAR2,
22   p_sc_domain_rec	 	IN  SC_DOMAIN_REC_TYPE,
23   x_sc_domain_id 		OUT NOCOPY NUMBER
24 ) IS
25 
26 -- CONSTANTS --
27  lc_debug_level           CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
28  lc_stat_level            CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
29  lc_proc_level            CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
30  lc_event_level           CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
31  lc_excep_level           CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
32  lc_error_level           CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
33  lc_unexp_level           CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
34  lc_mod_name              CONSTANT VARCHAR2(100)  := 'csd.plsql.csd_sc_domains_pvt.create_sc_domain';
35  lc_api_name              CONSTANT VARCHAR2(30)   := 'Create_SC_Domain';
36  lc_api_version           CONSTANT NUMBER         := 1.0;
37 
38 -- VARIABLES --
39  l_msg_count              NUMBER;
40  l_msg_data               VARCHAR2(32767);
41  l_msg_index              NUMBER;
42  l_obj_ver_num		  NUMBER		  := 1;
43  l_dummy	          VARCHAR2(1)		  := null;
44  l_valid_cat_flag	  VARCHAR2(1)		  := null;
45  l_inventory_item_id	  NUMBER		  := null;
46  l_category_id		  NUMBER		  := null;
47  l_category_set_id	  NUMBER		  := null;
48 
49 -- EXCEPTIONS --
50  CSD_SCD_ITEM_MISSING	  	EXCEPTION;
51  CSD_SCD_CATEGORY_SET_MISSING	EXCEPTION;
52  CSD_SCD_CATEGORY_MISSING	EXCEPTION;
53  CSD_SCD_DOMAIN_EXISTS	  	EXCEPTION;
54  CSD_SCD_INVALID_ITEM	  	EXCEPTION;
55  CSD_SCD_INVALID_CAT_SET  	EXCEPTION;
56  CSD_SCD_INVALID_CATSET_FLAG 	EXCEPTION;
57  CSD_SCD_INVALID_CATEGORY	EXCEPTION;
58 
59 BEGIN
60        -- Standard Start of API savepoint
61        SAVEPOINT  Create_SC_Domain;
62 
63        -- Standard call to check for call compatibility.
64        IF NOT FND_API.Compatible_API_Call (lc_api_version,
65                                            p_api_version,
66                                            lc_api_name   ,
67                                            G_PKG_NAME    )
68        THEN
69              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
70        END IF;
71 
72        -- Initialize message list if p_init_msg_list is set to TRUE.
73        IF FND_API.to_Boolean( p_init_msg_list ) THEN
74            FND_MSG_PUB.initialize;
75        END IF;
76 
77        IF (lc_proc_level >= lc_debug_level) THEN
78           FND_LOG.STRING(lc_proc_level, lc_mod_name || '.BEGIN',
79               'Entered Create_SC_Domain');
80        END IF;
81 
82        -- log parameters
83        IF (lc_stat_level >= lc_debug_level) THEN
84 	   csd_gen_utility_pvt.dump_sc_domain_rec
85            ( p_sc_domain_rec => p_sc_domain_rec);
86        END IF;
87 
88        -- Initialize API return status to success
89        x_return_status := FND_API.G_RET_STS_SUCCESS;
90 
91        -- Api body starts
92 
93        -- Check the required parameters
94        if (lc_proc_level >= lc_debug_level) then
95           FND_LOG.STRING(lc_proc_level, lc_mod_name,
96                        'Checking required parameters');
97        end if;
98 
99        -- Check the required parameter
100        CSD_PROCESS_UTIL.Check_Reqd_Param
101        ( p_param_value	  => p_sc_domain_rec.service_code_id,
102          p_param_name	  => 'SERVICE_CODE_ID',
103          p_api_name	  => lc_api_name);
104 
105        -- Check the required parameter
106        CSD_PROCESS_UTIL.Check_Reqd_Param
107        ( p_param_value	  => p_sc_domain_rec.domain_type_code,
108          p_param_name	  => 'DOMAIN_TYPE_CODE',
109          p_api_name	  => lc_api_name);
110 
111        -- Check if required parameter is passed in as G_MISS
112        if (lc_proc_level >= lc_debug_level) then
113           FND_LOG.STRING(lc_proc_level, lc_mod_name,
114                        'Checking if required parameters are passed in as G_MISS');
115        end if;
116 
117        -- Check if required parameter is passed in as G_MISS
118        IF (p_sc_domain_rec.domain_type_code = 'ITEM'
119        and (p_sc_domain_rec.inventory_item_id = FND_API.G_MISS_NUM
120        or   p_sc_domain_rec.inventory_item_id is null)) THEN
121 	RAISE CSD_SCD_ITEM_MISSING;
122        END IF;
123 
124        -- Check if required parameter is passed in as G_MISS
125        IF (p_sc_domain_rec.domain_type_code = 'CAT') THEN
126           IF (p_sc_domain_rec.category_set_id = FND_API.G_MISS_NUM
127            or p_sc_domain_rec.category_set_id is null) THEN
128 	    RAISE CSD_SCD_CATEGORY_SET_MISSING;
129           END IF;
130           IF (p_sc_domain_rec.category_id = FND_API.G_MISS_NUM
131            or p_sc_domain_rec.category_id is null) THEN
132 	    RAISE CSD_SCD_CATEGORY_MISSING;
133           END IF;
134        END IF;
135 
136        -- Validate the domain for service code
137        if (lc_proc_level >= lc_debug_level) then
138           FND_LOG.STRING(lc_proc_level, lc_mod_name,
139                        'Validate if the service code domain already exists');
140        end if;
141 
142        -- Validate the domain for service code
143        Begin
144          l_dummy := null;
145 
146          /* gilam: bug 3445684 - changed query to include service code id in the each or condition
147          select 'X'
148          into l_dummy
149          from csd_sc_domains
150 	 where service_code_id = p_sc_domain_rec.service_code_id
151 	 and (domain_type_code = p_sc_domain_rec.domain_type_code
152 	 and inventory_item_id = p_sc_domain_rec.inventory_item_id)
153          or (domain_type_code = p_sc_domain_rec.domain_type_code
154          and category_set_id = p_sc_domain_rec.category_set_id
155          and category_id = p_sc_domain_rec.category_id);
156          */
157          select 'X'
158          into l_dummy
159          from csd_sc_domains
160 	 where (service_code_id = p_sc_domain_rec.service_code_id
161 	 and domain_type_code = p_sc_domain_rec.domain_type_code
162 	 and inventory_item_id = p_sc_domain_rec.inventory_item_id)
163          or (service_code_id = p_sc_domain_rec.service_code_id
164          and domain_type_code = p_sc_domain_rec.domain_type_code
165          and category_set_id = p_sc_domain_rec.category_set_id
166          and category_id = p_sc_domain_rec.category_id);
167          -- gilam: end bug fix 3445684
168 
169        Exception
170 
171     	WHEN no_data_found THEN
172 	  null;
173 
174         WHEN others THEN
175           l_dummy := 'X';
176 
177        End;
178 
179        -- If domain already exists, throw an error
180        IF (l_dummy = 'X') then
181           RAISE CSD_SCD_DOMAIN_EXISTS;
182        ELSE
183           if (lc_stat_level >= lc_debug_level) then
184             FND_LOG.STRING(lc_stat_level, lc_mod_name,
185 	               'Service code domain does not exist');
186           end if;
187        END IF;
188 
189 
190        -- Validate the inventory item id if domain is ITEM
191        if (lc_proc_level >= lc_debug_level) then
192           FND_LOG.STRING(lc_proc_level, lc_mod_name,
193                        'Validate the inventory item id if domain is ITEM');
194        end if;
195 
196        -- Validate the inventory item id if domain is ITEM
197        IF (p_sc_domain_rec.domain_type_code = 'ITEM') then
198          Begin
199            l_dummy := null;
200 
201            select 'X'
202            into l_dummy
203            from mtl_system_items_kfv
204            where organization_id = cs_std.get_item_valdn_orgzn_id
205            and inventory_item_id = p_sc_domain_rec.inventory_item_id;
206 
207          Exception
208 
209            WHEN others THEN
210              null;
211 
212          End;
213 
214          -- If item does not exist, throw an error
215          IF (l_dummy <> 'X') then
216            RAISE CSD_SCD_INVALID_ITEM;
217          ELSE
218            if (lc_stat_level >= lc_debug_level) then
219              FND_LOG.STRING(lc_stat_level, lc_mod_name,
220  	               'Item for service code domain is valid');
221            end if;
222          END IF;
223        END IF;  -- if domain type is ITEM
224 
225        -- Validate the category set id and category id if domain is CATEGORY
226 
227        -- If domain is CATEGORY
228        IF (p_sc_domain_rec.domain_type_code = 'CAT' ) THEN
229 
230          -- Validate the category set id if domain is CAT
231          if (lc_proc_level >= lc_debug_level) then
232            FND_LOG.STRING(lc_proc_level, lc_mod_name,
233                        'Validate the category set id if domain is CATEGORY');
234          end if;
235 
236          -- Validate the category set id if domain is CAT
237          Begin
238            l_dummy := null;
239 
240            select 'X'
241            into l_dummy
242            from mtl_category_sets_vl
243            where category_set_id = p_sc_domain_rec.category_set_id;
244 
245          Exception
246 
247            WHEN others THEN
248              null;
249 
250          End;
251 
252          -- If category set does not exist, throw an error
253          IF (l_dummy <> 'X') then
254            RAISE CSD_SCD_INVALID_CAT_SET;
255          ELSE
256            if (lc_stat_level >= lc_debug_level) then
257              FND_LOG.STRING(lc_stat_level, lc_mod_name,
258  	               'Category set for service code domain is valid');
259            end if;
260          END IF;
261 
262          -- Get the validate flag for the category set
263          if (lc_proc_level >= lc_debug_level) then
264            FND_LOG.STRING(lc_proc_level, lc_mod_name,
265                        'Get the validate flag for the category set');
266          end if;
267 
268          Begin
269            select validate_flag
270            into l_valid_cat_flag
271            from mtl_category_sets_vl
272            where category_set_id = p_sc_domain_rec.category_set_id;
273 
274          Exception
275 
276            WHEN others THEN
277              null;
278 
279          End;
280 
281          -- If category set does not exist, throw an error
282          IF (l_valid_cat_flag is null) then
283            RAISE CSD_SCD_INVALID_CATSET_FLAG;
284          ELSE
285            if (lc_stat_level >= lc_debug_level) then
286              FND_LOG.STRING(lc_stat_level, lc_mod_name,
287  	               'Retrieved validate flag for category set');
288            end if;
289          END IF;
290 
291          -- If validate flag is Yes, validate category id from the list of
292          -- valid categories for the category set
293          -- If validate flag is No, validate category id within the same
294          -- structure as the category set
295 
296          Begin
297            l_dummy := null;
298 
299            if (lc_proc_level >= lc_debug_level) then
300              FND_LOG.STRING(lc_proc_level, lc_mod_name,
301                        'Validate category for the category set');
302            end if;
303 
304            IF (l_valid_cat_flag = 'Y') then
305 
306              if (lc_proc_level >= lc_debug_level) then
307                FND_LOG.STRING(lc_proc_level, lc_mod_name,
308                        'Category set validate flag is Yes');
309              end if;
310 
311              select 'X'
312              into l_dummy
313 	     from mtl_category_set_valid_cats_v
314              where category_set_id = p_sc_domain_rec.category_set_id
315              and category_id = p_sc_domain_rec.category_id;
316 
317            ELSIF (l_valid_cat_flag = 'N') then
318              if (lc_proc_level >= lc_debug_level) then
319                FND_LOG.STRING(lc_proc_level, lc_mod_name,
320                        'Category set validate flag is No');
321              end if;
322 
323              select 'X'
324              into l_dummy
325 	     from mtl_category_sets_vl mcs, mtl_categories_v mc
326              where mcs.category_set_id = p_sc_domain_rec.category_set_id
327              and mcs.structure_id = mc.structure_id
328              and mc.category_id = p_sc_domain_rec.category_id;
329            END IF;
330 
331          Exception
332 
333            WHEN others THEN
334              null;
335 
336          End;
337 
338          -- If category set does not exist, throw an error
339          IF (l_dummy <>'X') then
340            RAISE CSD_SCD_INVALID_CATEGORY;
341          ELSE
342            if (lc_stat_level >= lc_debug_level) then
343              FND_LOG.STRING(lc_stat_level, lc_mod_name,
344  	               'Category is valid');
345            end if;
346          END IF;
347 
348        END IF; -- domain is CATEGORY
349 
350        -- Set G_MISS parameters according to domain type
351        IF (p_sc_domain_rec.domain_type_code = 'CAT') then
352 
353          if (lc_proc_level >= lc_debug_level) then
354            FND_LOG.STRING(lc_proc_level, lc_mod_name,
355                        'Domain type is CATEGORY, setting item id to G_MISS_NUM');
356          end if;
357 
358          l_inventory_item_id := FND_API.G_MISS_NUM;
359          l_category_id := p_sc_domain_rec.category_id;
360          l_category_set_id := p_sc_domain_rec.category_set_id;
361 
362        ELSIF (p_sc_domain_rec.domain_type_code = 'ITEM') then
363 
364          if (lc_proc_level >= lc_debug_level) then
365            FND_LOG.STRING(lc_proc_level, lc_mod_name,
366                        'Domain type is ITEM, setting category set and category ids to G_MISS_NUM');
367          end if;
368 
369          l_category_id := FND_API.G_MISS_NUM;
370          l_category_set_id := FND_API.G_MISS_NUM;
371          l_inventory_item_id := p_sc_domain_rec.inventory_item_id;
372        END IF;
373 
374        -- Insert row
375        if (lc_proc_level >= lc_debug_level) then
376           FND_LOG.STRING(lc_proc_level, lc_mod_name,
377                        'Calling Insert_Row table handler');
378        end if;
379 
380        BEGIN
381 
382          -- Insert the new domain
383          CSD_SC_DOMAINS_PKG.Insert_Row
384          (px_sc_domain_id 	      => x_sc_domain_id,
385           p_object_version_number     => l_obj_ver_num,
386           p_service_code_id        => p_sc_domain_rec.service_code_id,
387           p_inventory_item_id         => l_inventory_item_id,
388           p_category_id  	      => l_category_id,
389           p_category_set_id  	      => l_category_set_id,
390           p_created_by                => FND_GLOBAL.USER_ID,
391           p_creation_date             => SYSDATE,
392           p_last_updated_by           => FND_GLOBAL.USER_ID,
393           p_last_update_date          => SYSDATE,
394           p_last_update_login         => FND_GLOBAL.LOGIN_ID,
395           p_domain_type_code          => p_sc_domain_rec.domain_type_code,
396           p_attribute_category        => p_sc_domain_rec.attribute_category,
397           p_attribute1                => p_sc_domain_rec.attribute1,
398           p_attribute2                => p_sc_domain_rec.attribute2,
399           p_attribute3                => p_sc_domain_rec.attribute3,
400           p_attribute4                => p_sc_domain_rec.attribute4,
401           p_attribute5                => p_sc_domain_rec.attribute5,
402           p_attribute6                => p_sc_domain_rec.attribute6,
403           p_attribute7                => p_sc_domain_rec.attribute7,
404           p_attribute8                => p_sc_domain_rec.attribute8,
405           p_attribute9                => p_sc_domain_rec.attribute9,
406           p_attribute10               => p_sc_domain_rec.attribute10,
407           p_attribute11               => p_sc_domain_rec.attribute11,
408           p_attribute12               => p_sc_domain_rec.attribute12,
409           p_attribute13               => p_sc_domain_rec.attribute13,
410           p_attribute14               => p_sc_domain_rec.attribute14,
411           p_attribute15               => p_sc_domain_rec.attribute15
412  	  );
413 
414        EXCEPTION
415           WHEN OTHERS THEN
416             IF ( lc_excep_level >= lc_debug_level) THEN
417                FND_LOG.STRING(lc_excep_level,lc_mod_name,'Others exception in CSD_SC_DOMAINS_PKG.Insert_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
418             END IF;
419             x_return_status := FND_API.G_RET_STS_ERROR;
420        END;
421 
422        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
423           RAISE FND_API.G_EXC_ERROR;
424        END IF;
425 
426        if (lc_proc_level >= lc_debug_level) then
427           FND_LOG.STRING(lc_proc_level, lc_mod_name,
428                        'Returned from Insert_Row table handler');
429        end if;
430 
431        -- Api body ends here
432 
433       -- Standard check of p_commit.
434       IF FND_API.To_Boolean( p_commit ) THEN
435            COMMIT WORK;
436       END IF;
437 
438       -- Standard call to get message count and IF count is  get message info.
439       FND_MSG_PUB.Count_And_Get
440            (p_count  =>  x_msg_count,
441             p_data   =>  x_msg_data );
442 
443       IF (lc_proc_level >= lc_debug_level) THEN
444         FND_LOG.STRING(lc_proc_level, lc_mod_name || '.END',
445                        'Leaving Create_SC_Domain');
446       END IF;
447 
448  EXCEPTION
449      WHEN CSD_SCD_ITEM_MISSING THEN
450           ROLLBACK TO Create_SC_Domain;
451 
452             -- Service code domain item is missing
453             x_return_status := FND_API.G_RET_STS_ERROR ;
454 
455             -- save message in fnd stack
456             if (lc_stat_level >= lc_debug_level) then
457                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
458                                'Adding message CSD_SCD_ITEM_MISSING to FND_MSG stack');
459             end if;
460     	    FND_MESSAGE.SET_NAME('CSD','CSD_API_MISSING_PARAM');
461 	    FND_MESSAGE.SET_TOKEN('API_NAME',lc_api_name);
462 	    FND_MESSAGE.SET_TOKEN('MISSING_PARAM','INVENTORY_ITEM_ID');
463 	    FND_MSG_PUB.Add;
464 
465             FND_MSG_PUB.Count_And_Get
466                 (p_count  =>  x_msg_count,
467                  p_data   =>  x_msg_data );
468 
469             -- save message in debug log
470             IF (lc_excep_level >= lc_debug_level) THEN
471                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
472                                'Service code domain item is missing');
473             END IF;
474 
475      WHEN CSD_SCD_CATEGORY_SET_MISSING THEN
476           ROLLBACK TO Create_SC_Domain;
477 
478             -- Service code domain category set is missing
479             x_return_status := FND_API.G_RET_STS_ERROR ;
480 
481             -- save message in fnd stack
482             if (lc_stat_level >= lc_debug_level) then
483                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
484                                'Adding message CSD_SCD_CATEGORY_SET_MISSING to FND_MSG stack');
485             end if;
486     	    FND_MESSAGE.SET_NAME('CSD','CSD_API_MISSING_PARAM');
487 	    FND_MESSAGE.SET_TOKEN('API_NAME',lc_api_name);
488 	    FND_MESSAGE.SET_TOKEN('MISSING_PARAM','CATEGORY_SET_ID');
489 	    FND_MSG_PUB.Add;
490 
491             FND_MSG_PUB.Count_And_Get
492                 (p_count  =>  x_msg_count,
493                  p_data   =>  x_msg_data );
494 
495             -- save message in debug log
496             IF (lc_excep_level >= lc_debug_level) THEN
497                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
498                                'Service code domain category set is missing');
499             END IF;
500 
501      WHEN CSD_SCD_CATEGORY_MISSING THEN
502           ROLLBACK TO Create_SC_Domain;
503 
504             -- Service code domain category is missing
505             x_return_status := FND_API.G_RET_STS_ERROR ;
506 
507             -- save message in fnd stack
508             if (lc_stat_level >= lc_debug_level) then
509                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
510                                'Adding message CSD_SCD_CATEGORY_MISSING to FND_MSG stack');
511             end if;
512     	    FND_MESSAGE.SET_NAME('CSD','CSD_API_MISSING_PARAM');
513 	    FND_MESSAGE.SET_TOKEN('API_NAME',lc_api_name);
514 	    FND_MESSAGE.SET_TOKEN('MISSING_PARAM','CATEGORY_ID');
515 	    FND_MSG_PUB.Add;
516 
517             FND_MSG_PUB.Count_And_Get
518                 (p_count  =>  x_msg_count,
519                  p_data   =>  x_msg_data );
520 
521             -- save message in debug log
522             IF (lc_excep_level >= lc_debug_level) THEN
523                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
524                                'Service code domain category is missing');
525             END IF;
526 
527      WHEN CSD_SCD_DOMAIN_EXISTS THEN
528           ROLLBACK TO Create_SC_Domain;
529 
530             -- Service code domain already exists
531             x_return_status := FND_API.G_RET_STS_ERROR ;
532 
533             -- save message in fnd stack
534             if (lc_stat_level >= lc_debug_level) then
535                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
536                                'Adding message CSD_SCD_DOMAIN_EXISTS to FND_MSG stack');
537             end if;
538     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_DOMAIN_EXISTS');
539 	    FND_MESSAGE.SET_TOKEN('SERVICE_CODE_ID',p_sc_domain_rec.service_code_id);
540 	    FND_MSG_PUB.Add;
541 
542             FND_MSG_PUB.Count_And_Get
543                 (p_count  =>  x_msg_count,
544                  p_data   =>  x_msg_data );
545 
546             -- save message in debug log
547             IF (lc_excep_level >= lc_debug_level) THEN
548                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
549                                'Service code domain already exists');
550             END IF;
551 
552      WHEN CSD_SCD_INVALID_ITEM THEN
553           ROLLBACK TO Create_SC_Domain;
554 
555             -- Service code domain item is invalid
556             x_return_status := FND_API.G_RET_STS_ERROR ;
557 
558             -- save message in fnd stack
559             if (lc_stat_level >= lc_debug_level) then
560                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
561                                'Adding message CSD_SCD_INVALID_ITEM to FND_MSG stack');
562             end if;
563     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_ITEM');
564 	    FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID',p_sc_domain_rec.inventory_item_id);
565 	    FND_MSG_PUB.Add;
566 
567             FND_MSG_PUB.Count_And_Get
568                 (p_count  =>  x_msg_count,
569                  p_data   =>  x_msg_data );
570 
571             -- save message in debug log
572             IF (lc_excep_level >= lc_debug_level) THEN
573                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
574                                'Service code domain item is invalid');
575             END IF;
576 
577      WHEN CSD_SCD_INVALID_CAT_SET THEN
578           ROLLBACK TO Create_SC_Domain;
579 
580             -- Service code domain category set is invalid
581             x_return_status := FND_API.G_RET_STS_ERROR ;
582 
583             -- save message in fnd stack
584             if (lc_stat_level >= lc_debug_level) then
585                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
586                                'Adding message CSD_SCD_INVALID_CAT_SET to FND_MSG stack');
587             end if;
588     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_CAT_SET');
589 	    FND_MESSAGE.SET_TOKEN('CATEGORY_SET_ID',p_sc_domain_rec.category_set_id);
590 	    FND_MSG_PUB.Add;
591 
592             FND_MSG_PUB.Count_And_Get
593                 (p_count  =>  x_msg_count,
594                  p_data   =>  x_msg_data );
595 
596             -- save message in debug log
597             IF (lc_excep_level >= lc_debug_level) THEN
598                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
599                                'Service code domain category set is invalid');
600             END IF;
601 
602      WHEN CSD_SCD_INVALID_CATSET_FLAG THEN
603           ROLLBACK TO Create_SC_Domain;
604 
605             -- Service code domain category set validate flag is invalid
606             x_return_status := FND_API.G_RET_STS_ERROR ;
607 
608             -- save message in fnd stack
609             if (lc_stat_level >= lc_debug_level) then
610                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
611                                'Adding message CSD_SCD_INVALID_CATSET_FLAG to FND_MSG stack');
612             end if;
613     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_CATSET_FLAG');
614 	    FND_MESSAGE.SET_TOKEN('CATEGORY_SET_ID',p_sc_domain_rec.category_set_id);
615 	    FND_MSG_PUB.Add;
616 
617             FND_MSG_PUB.Count_And_Get
618                 (p_count  =>  x_msg_count,
619                  p_data   =>  x_msg_data );
620 
621             -- save message in debug log
622             IF (lc_excep_level >= lc_debug_level) THEN
623                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
624                                'Service code domain category set validate flag is invalid');
625             END IF;
626 
627      WHEN CSD_SCD_INVALID_CATEGORY THEN
628           ROLLBACK TO Create_SC_Domain;
629 
630             -- Service code domain category is invalid
631             x_return_status := FND_API.G_RET_STS_ERROR ;
632 
633             -- save message in fnd stack
634             if (lc_stat_level >= lc_debug_level) then
635                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
636                                'Adding message CSD_SCD_INVALID_CATEGORY to FND_MSG stack');
637             end if;
638     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_CATEGORY');
639 	    FND_MESSAGE.SET_TOKEN('CATEGORY_ID',p_sc_domain_rec.category_id);
640 	    FND_MSG_PUB.Add;
641 
642             FND_MSG_PUB.Count_And_Get
643                 (p_count  =>  x_msg_count,
644                  p_data   =>  x_msg_data );
645 
646             -- save message in debug log
647             IF (lc_excep_level >= lc_debug_level) THEN
648                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
649                                'Service code domain category is invalid');
650             END IF;
651 
652     WHEN FND_API.G_EXC_ERROR THEN
653           ROLLBACK TO Create_SC_Domain;
654 
655           x_return_status := FND_API.G_RET_STS_ERROR;
656 
657           FND_MSG_PUB.Count_And_Get
658               (p_count  =>  x_msg_count,
659                p_data   =>  x_msg_data );
660 
661          -- save message in debug log
662           IF (lc_excep_level >= lc_debug_level) THEN
663               FND_LOG.STRING(lc_excep_level, lc_mod_name,
664                              'EXC_ERROR['||x_msg_data||']');
665           END IF;
666 
667     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
668           ROLLBACK TO Create_SC_Domain;
669 
670           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
671 
672          IF  FND_MSG_PUB.Check_Msg_Level
673               (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
674           THEN
675               if (lc_stat_level >= lc_debug_level) then
676                   FND_LOG.STRING(lc_stat_level, lc_mod_name,
677                                  'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
678               end if;
679               FND_MSG_PUB.Add_Exc_Msg
680               (G_PKG_NAME ,
681                lc_api_name  );
682           END IF;
683 
684           FND_MSG_PUB.Count_And_Get
685                 ( p_count  =>  x_msg_count,
686                   p_data   =>  x_msg_data );
687 
688           -- save message in debug log
689           IF (lc_excep_level >= lc_debug_level) THEN
690               FND_LOG.STRING(lc_excep_level, lc_mod_name,
691                              'EXC_UNEXPECTED_ERROR['||x_msg_data||']');
692           END IF;
693 
694     WHEN OTHERS THEN
695           ROLLBACK TO Create_SC_Domain;
696 
697           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
698 
699            -- save message in fnd stack
700            IF  FND_MSG_PUB.Check_Msg_Level
701                (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
702            THEN
703                if (lc_stat_level >= lc_debug_level) then
704                    FND_LOG.STRING(lc_stat_level, lc_mod_name,
705                                   'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
706                end if;
707                FND_MSG_PUB.Add_Exc_Msg
708                (G_PKG_NAME ,
709                 lc_api_name  );
710            END IF;
711 
712            FND_MSG_PUB.Count_And_Get
713                (p_count  =>  x_msg_count,
714                 p_data   =>  x_msg_data );
715 
716            -- save message in debug log
717            IF (lc_excep_level >= lc_debug_level) THEN
718                -- create a seeded message
719                FND_LOG.STRING(lc_excep_level, lc_mod_name,
720                               'SQL Message['||sqlerrm||']' );
721           END IF;
722 
723 END Create_SC_Domain;
724 
725 
726 /*--------------------------------------------------*/
727 /* procedure name: Update_SC_Domain                 */
728 /* description   : procedure used to update         */
729 /*                 sc domain	                    */
730 /*                                                  */
731 /*--------------------------------------------------*/
732 PROCEDURE Update_SC_Domain
733 (
734   p_api_version        		IN  NUMBER,
735   p_commit	   		IN  VARCHAR2,
736   p_init_msg_list      		IN  VARCHAR2,
737   p_validation_level   		IN  NUMBER,
738   x_return_status      		OUT NOCOPY VARCHAR2,
739   x_msg_count          		OUT NOCOPY NUMBER,
740   x_msg_data           		OUT NOCOPY VARCHAR2,
741   p_sc_domain_rec	 	IN  SC_DOMAIN_REC_TYPE,
742   x_obj_ver_number 		OUT NOCOPY NUMBER
743 ) IS
744 
745 -- CONSTANTS --
746  lc_debug_level           CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
747  lc_stat_level            CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
748  lc_proc_level            CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
749  lc_event_level           CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
750  lc_excep_level           CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
751  lc_error_level           CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
752  lc_unexp_level           CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
753  lc_mod_name              CONSTANT VARCHAR2(100)  := 'csd.plsql.csd_sc_domains_pvt.update_sc_domain';
754  lc_api_name              CONSTANT VARCHAR2(30)   := 'Update_SC_Domain';
755  lc_api_version           CONSTANT NUMBER         := 1.0;
756 
757 -- VARIABLES --
758  l_msg_count              NUMBER;
759  l_msg_data               VARCHAR2(32767);
760  l_msg_index              NUMBER;
761  l_obj_ver_num		  NUMBER;
762  l_dummy	          VARCHAR2(1)		  := null;
763  l_valid_cat_flag	  VARCHAR2(1)		  := null;
764  l_inventory_item_id	  NUMBER		  := null;
765  l_category_id		  NUMBER		  := null;
766  l_category_set_id	  NUMBER		  := null;
767 
768 -- EXCEPTIONS --
769  CSD_SCD_SC_ID_MISSING		EXCEPTION;
770  CSD_SCD_DOMAIN_TYPE_MISSING	EXCEPTION;
771  CSD_SCD_ITEM_MISSING	  	EXCEPTION;
772  CSD_SCD_CATEGORY_SET_MISSING	EXCEPTION;
773  CSD_SCD_CATEGORY_MISSING	EXCEPTION;
774  CSD_SCD_INVALID_ID		EXCEPTION;
775  CSD_SCD_GET_OVN_ERROR		EXCEPTION;
776  CSD_SCD_OVN_MISMATCH		EXCEPTION;
777  CSD_SCD_DOMAIN_EXISTS	  	EXCEPTION;
778  CSD_SCD_GET_ITEM_ERROR	  	EXCEPTION;
779  CSD_SCD_INVALID_ITEM	  	EXCEPTION;
780  CSD_SCD_GET_CAT_SET_ERROR  	EXCEPTION;
781  CSD_SCD_INVALID_CAT_SET  	EXCEPTION;
782  CSD_SCD_GET_CATSET_FLAG_ERROR 	EXCEPTION;
783  CSD_SCD_GET_CATEGORY_ERROR  	EXCEPTION;
784  CSD_SCD_INVALID_CATEGORY	EXCEPTION;
785 
786 BEGIN
787        -- Standard Start of API savepoint
788        SAVEPOINT  Update_SC_Domain;
789 
790        -- Standard call to check for call compatibility.
791        IF NOT FND_API.Compatible_API_Call (lc_api_version,
792                                            p_api_version,
793                                            lc_api_name   ,
794                                            G_PKG_NAME    )
795        THEN
796              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
797        END IF;
798 
799        -- Initialize message list if p_init_msg_list is set to TRUE.
800        IF FND_API.to_Boolean( p_init_msg_list ) THEN
801            FND_MSG_PUB.initialize;
802        END IF;
803 
804        IF (lc_proc_level >= lc_debug_level) THEN
805            FND_LOG.STRING(lc_proc_level, lc_mod_name || '.BEGIN',
806                'Entered Update_SC_Domain');
807        END IF;
808 
809        -- log parameters
810        IF (lc_stat_level >= lc_debug_level) THEN
811 	   csd_gen_utility_pvt.dump_sc_domain_rec
812            ( p_sc_domain_rec => p_sc_domain_rec);
813        END IF;
814 
815        -- Initialize API return status to success
816        x_return_status := FND_API.G_RET_STS_SUCCESS;
817 
818        -- Api body starts
819 
820        -- Check the required parameters
821        if (lc_proc_level >= lc_debug_level) then
822           FND_LOG.STRING(lc_proc_level, lc_mod_name,
823                        'Checking required parameter');
824        end if;
825 
826        -- Check the required parameter
827        CSD_PROCESS_UTIL.Check_Reqd_Param
828        ( p_param_value	  => p_sc_domain_rec.sc_domain_id,
829          p_param_name	  => 'SC_DOMAIN_ID',
830          p_api_name	  => lc_api_name);
831 
832        -- Check if required parameter is passed in as G_MISS
833        if (lc_proc_level >= lc_debug_level) then
834           FND_LOG.STRING(lc_proc_level, lc_mod_name,
835                        'Checking if required parameters are passed in as G_MISS');
836        end if;
837 
838        -- Check if required parameter is passed in as G_MISS
839        IF (p_sc_domain_rec.service_code_id = FND_API.G_MISS_NUM) THEN
840 	RAISE CSD_SCD_SC_ID_MISSING;
841        END IF;
842 
843        -- Check if required parameter is passed in as G_MISS
844        IF (p_sc_domain_rec.domain_type_code = FND_API.G_MISS_CHAR) THEN
845 	RAISE CSD_SCD_DOMAIN_TYPE_MISSING;
846        END IF;
847 
848        -- Check if required parameter is passed in as G_MISS
849        IF (p_sc_domain_rec.domain_type_code = 'ITEM'
850        and p_sc_domain_rec.inventory_item_id = FND_API.G_MISS_NUM) THEN
851 	RAISE CSD_SCD_ITEM_MISSING;
852        END IF;
853 
854        -- Check if required parameter is passed in as G_MISS
855        IF (p_sc_domain_rec.domain_type_code = 'CAT') THEN
856           IF (p_sc_domain_rec.category_set_id = FND_API.G_MISS_NUM) THEN
857 	    RAISE CSD_SCD_CATEGORY_SET_MISSING;
858           END IF;
859 
860           IF (p_sc_domain_rec.category_id = FND_API.G_MISS_NUM) THEN
861 	    RAISE CSD_SCD_CATEGORY_MISSING;
862           END IF;
863        END IF;
864 
865        -- Validate the domain for service code
866        if (lc_proc_level >= lc_debug_level) then
867           FND_LOG.STRING(lc_proc_level, lc_mod_name,
868                        'Validate the service code domain id');
869        end if;
870 
871        -- Validate the service code domain id
872        Begin
873           select 'X'
874           into l_dummy
875           from csd_sc_domains
876  	  where sc_domain_id = p_sc_domain_rec.sc_domain_id;
877 
878         Exception
879          WHEN others THEN
880            null;
881 
882        End;
883 
884        -- If domain id is invalid, throw an error
885        IF (l_dummy <> 'X') then
886           RAISE CSD_SCD_INVALID_ID;
887        ELSE
888           if (lc_stat_level >= lc_debug_level) then
889             FND_LOG.STRING(lc_stat_level, lc_mod_name,
890 	               'Service code domain id is valid');
891           end if;
892        END IF;
893 
894        -- Get the object version number for service code domain
895        if (lc_proc_level >= lc_debug_level) then
896            FND_LOG.STRING(lc_proc_level, lc_mod_name,
897                         'Get object version number for service code domain');
898        end if;
899 
900        -- Get object version number for service code domain
901        Begin
902           select object_version_number
903           into l_obj_ver_num
904           from csd_sc_domains
905  	  where sc_domain_id = p_sc_domain_rec.sc_domain_id;
906 
907        Exception
908 
909          WHEN others THEN
910     	   l_obj_ver_num := null;
911 
912        End;
913 
914        -- If no object version number, throw an error
915        IF (l_obj_ver_num is null) then
916           RAISE CSD_SCD_GET_OVN_ERROR;
917        ELSE
918           if (lc_stat_level >= lc_debug_level) then
919             FND_LOG.STRING(lc_stat_level, lc_mod_name,
920 	               'Retrieved object version number');
921           end if;
922        END IF;
923 
924        -- Validate the object version number for service code domain
925        if (lc_proc_level >= lc_debug_level) then
926            FND_LOG.STRING(lc_proc_level, lc_mod_name,
927                         'Validate object version number for service code domain');
928        end if;
929 
930        -- Validate if object version number for service code domain is same as the one passed in
931        IF NVL(p_sc_domain_rec.object_version_number,FND_API.G_MISS_NUM) <> l_obj_ver_num  THEN
932           RAISE CSD_SCD_OVN_MISMATCH;
933        ELSE
934           if (lc_stat_level >= lc_debug_level) then
935             FND_LOG.STRING(lc_stat_level, lc_mod_name,
936 	               'Object version number is valid');
937           end if;
938        END IF;
939 
940        -- Validate the code for service code
941        if (lc_proc_level >= lc_debug_level) then
942            FND_LOG.STRING(lc_proc_level, lc_mod_name,
943                         'Validate if the service code domain already exists ');
944        end if;
945 
946        -- Validate the domain for service code
947        Begin
948          l_dummy := null;
949 
950          /* gilam: bug 3445684 - changed query to include service code id in the each or condition
951          select 'X'
952          into l_dummy
953          from csd_sc_domains
954 	 where sc_domain_id <> p_sc_domain_rec.sc_domain_id
955  	 and service_code_id = p_sc_domain_rec.service_code_id
956 	 and domain_type_code = p_sc_domain_rec.domain_type_code
957 	 and inventory_item_id = p_sc_domain_rec.inventory_item_id
958          and category_set_id = p_sc_domain_rec.category_set_id
959          and category_id = p_sc_domain_rec.category_id;
960          */
961          select 'X'
962          into l_dummy
963          from csd_sc_domains
964 	 where sc_domain_id <> p_sc_domain_rec.sc_domain_id
965  	 and (service_code_id = p_sc_domain_rec.service_code_id
966 	 and domain_type_code = p_sc_domain_rec.domain_type_code
967 	 and inventory_item_id = p_sc_domain_rec.inventory_item_id)
968 	 or  (service_code_id = p_sc_domain_rec.service_code_id
969 	 and domain_type_code = p_sc_domain_rec.domain_type_code
970 	 and category_set_id = p_sc_domain_rec.category_set_id
971          and category_id = p_sc_domain_rec.category_id);
972         -- gilam: end bug fix 3445684
973 
974        Exception
975 
976     	WHEN no_data_found THEN
977 	  null;
978 
979         WHEN others THEN
980            l_dummy := 'X';
981 
982         End;
983 
984         -- If domain already exists, throw an error
985         IF (l_dummy = 'X') then
986            RAISE CSD_SCD_DOMAIN_EXISTS;
987         ELSE
988            if (lc_stat_level >= lc_debug_level) then
989              FND_LOG.STRING(lc_stat_level, lc_mod_name,
990  	               'Service code domain does not exist');
991            end if;
992        END IF;
993 
994        -- If domain is ITEM
995        IF (p_sc_domain_rec.domain_type_code = 'ITEM') then
996 
997           -- Validate the inventory item id if domain is ITEM
998          if (lc_proc_level >= lc_debug_level) then
999           FND_LOG.STRING(lc_proc_level, lc_mod_name,
1000                        'Domain type is ITEM, perform validations');
1001          end if;
1002 
1003          IF (p_sc_domain_rec.inventory_item_id is null) THEN
1004 
1005          -- inventory item id is null, get the existing one
1006          if (lc_proc_level >= lc_debug_level) then
1007           FND_LOG.STRING(lc_proc_level, lc_mod_name,
1008                        'Retrieve existing inventory item id since nothing is passed in');
1009          end if;
1010 
1011          Begin
1012            select inventory_item_id
1013            into l_inventory_item_id
1014            from csd_sc_domains_v
1015            where sc_domain_id = p_sc_domain_rec.sc_domain_id
1016            and domain_type_code = p_sc_domain_rec.domain_type_code;
1017 
1018           Exception
1019 
1020            WHEN others THEN
1021              l_inventory_item_id := null;
1022           End;
1023 
1024           -- If item is not retrieved, throw an error
1025           IF (l_inventory_item_id is null) then
1026             RAISE CSD_SCD_GET_ITEM_ERROR;
1027           ELSE
1028             if (lc_stat_level >= lc_debug_level) then
1029               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1030  	               'Item for service code domain is retrieved');
1031             end if;
1032           END IF;
1033 
1034         ELSE  -- if inventory item id is passed in
1035 
1036          -- Validate the inventory item id
1037          if (lc_proc_level >= lc_debug_level) then
1038             FND_LOG.STRING(lc_proc_level, lc_mod_name,
1039                        'Validate the inventory item id passed in');
1040          end if;
1041 
1042          Begin
1043            select inventory_item_id
1044            into l_inventory_item_id
1045            from mtl_system_items_kfv
1046            where organization_id = cs_std.get_item_valdn_orgzn_id
1047            and inventory_item_id = p_sc_domain_rec.inventory_item_id;
1048 
1049          Exception
1050 
1051            WHEN others THEN
1052              l_inventory_item_id := null;
1053          End;
1054 
1055          -- If item is invalid, throw an error
1056          IF (l_inventory_item_id is null) then
1057             RAISE CSD_SCD_INVALID_ITEM;
1058          ELSE
1059             if (lc_stat_level >= lc_debug_level) then
1060               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1061  	               'Item for service code domain is valid');
1062             end if;
1063          END IF;
1064        END IF;  -- inventory item id is null
1065 
1066      END IF;-- domain is ITEM
1067 
1068      -- Validate the category set id and category id if domain is CATEGORY
1069 
1070      -- If domain is CATEGORY
1071      IF (p_sc_domain_rec.domain_type_code = 'CAT' ) THEN
1072 
1073          -- Validate the category set id if domain is CAT
1074          if (lc_proc_level >= lc_debug_level) then
1075            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1076                        'Domain type is CATEGORY, perform validations');
1077          end if;
1078 
1079          -- Validate the category set id if it is passed in
1080          IF (p_sc_domain_rec.category_set_id is null) THEN
1081 
1082           -- If category set is null, get the existing category set id
1083           if (lc_proc_level >= lc_debug_level) then
1084            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1085                        'Get the existing category set id since nothing is passed in');
1086           end if;
1087 
1088           Begin
1089            select category_set_id
1090            into l_category_set_id
1091            from csd_sc_domains_v
1092            where sc_domain_id = p_sc_domain_rec.sc_domain_id
1093            and domain_type_code = p_sc_domain_rec.domain_type_code;
1094 
1095           Exception
1096 
1097        	   WHEN others THEN
1098        	     l_category_set_id := null;
1099 
1100           End;
1101 
1102           -- If category set does not exist, throw an error
1103           IF (l_category_set_id is null) then
1104             RAISE CSD_SCD_GET_CAT_SET_ERROR;
1105           ELSE
1106             if (lc_stat_level >= lc_debug_level) then
1107              FND_LOG.STRING(lc_stat_level, lc_mod_name,
1108  	               'Error retrieving existing category set for service code domain');
1109             end if;
1110           END IF;
1111 
1112          ELSE
1113 
1114           -- Validate the category set id passed in
1115           if (lc_proc_level >= lc_debug_level) then
1116            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1117                        'Validate the category set id passed in');
1118           end if;
1119 
1120           Begin
1121            select category_set_id
1122            into l_category_set_id
1123            from mtl_category_sets_vl
1124            where category_set_id = p_sc_domain_rec.category_set_id;
1125 
1126           Exception
1127 
1128        	   WHEN others THEN
1129        	     l_category_set_id := null;
1130 
1131           End;
1132 
1133           -- If category set does not exist, throw an error
1134           IF (l_category_set_id is null) then
1135             RAISE CSD_SCD_INVALID_CAT_SET;
1136           ELSE
1137             if (lc_stat_level >= lc_debug_level) then
1138              FND_LOG.STRING(lc_stat_level, lc_mod_name,
1139  	               'Category set for service code domain is valid');
1140             end if;
1141           END IF;
1142 
1143 
1144          END IF;
1145 
1146          -- Get the validate flag for the category set
1147          if (lc_proc_level >= lc_debug_level) then
1148            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1149                        'Get the validate flag for the category set');
1150          end if;
1151 
1152          -- Get the validate flag for the category set
1153          Begin
1154            select validate_flag
1155            into l_valid_cat_flag
1156            from mtl_category_sets_vl
1157            where category_set_id = l_category_set_id;
1158 
1159          Exception
1160 
1161             WHEN others THEN
1162               null;
1163 
1164           End;
1165 
1166           -- If category set does not exist, throw an error
1167           IF (l_valid_cat_flag is null) then
1168             RAISE CSD_SCD_GET_CATSET_FLAG_ERROR;
1169           ELSE
1170             if (lc_stat_level >= lc_debug_level) then
1171               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1172   	               'Retrieved validate flag for category set');
1173             end if;
1174          END IF;
1175 
1176          -- If category id is null, get the existing one
1177          IF (p_sc_domain_rec.category_id is null) THEN
1178 
1179            if (lc_stat_level >= lc_debug_level) then
1180               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1181   	               'Retrieved existing category id since nothing is passed in');
1182             end if;
1183 
1184             Begin
1185              select category_id
1186              into l_category_id
1187              from csd_sc_domains_v
1188              where sc_domain_id = p_sc_domain_rec.sc_domain_id
1189              and domain_type_code = p_sc_domain_rec.domain_type_code;
1190 
1191             Exception
1192 
1193        	     WHEN others THEN
1194      	       l_category_id := null;
1195 
1196             End;
1197 
1198             -- If category is not retrieved, throw an error
1199             IF (l_category_id is null) then
1200               RAISE CSD_SCD_GET_CATEGORY_ERROR;
1201             ELSE
1202               if (lc_stat_level >= lc_debug_level) then
1203                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
1204  	               'Retrieved category for service code domain');
1205               end if;
1206             END IF;
1207 
1208          ELSE -- category id is passed in
1209 
1210           l_category_id := p_sc_domain_rec.category_id;
1211 
1212          END IF;
1213 
1214          -- If validate flag is Yes, validate category id from the list of
1215          -- valid categories for the category set
1216          -- If validate flag is No, validate category id within the same
1217          -- structure as the category set
1218 
1219          Begin
1220            l_dummy := null;
1221 
1222            if (lc_proc_level >= lc_debug_level) then
1223               FND_LOG.STRING(lc_proc_level, lc_mod_name,
1224                         'Validate category for the category set');
1225            end if;
1226 
1227            IF (l_valid_cat_flag = 'Y') then
1228 
1229              if (lc_proc_level >= lc_debug_level) then
1230                FND_LOG.STRING(lc_proc_level, lc_mod_name,
1231                        'Category set validate flag is Yes');
1232              end if;
1233 
1234              select 'X'
1235              into l_dummy
1236 	     from mtl_category_set_valid_cats_v
1237              where category_set_id = l_category_set_id
1238              and category_id = l_category_id;
1239 
1240            ELSIF (l_valid_cat_flag = 'N') then
1241              if (lc_proc_level >= lc_debug_level) then
1242                FND_LOG.STRING(lc_proc_level, lc_mod_name,
1243                        'Category set validate flag is No');
1244              end if;
1245 
1246              select 'X'
1247              into l_dummy
1248 	     from mtl_category_sets_vl mcs, mtl_categories_v mc
1249              where mcs.category_set_id = l_category_set_id
1250              and mcs.structure_id = mc.structure_id
1251              and mc.category_id = l_category_id;
1252            END IF;
1253 
1254          Exception
1255 
1256             WHEN others THEN
1257               null;
1258 
1259           End;
1260 
1261           -- If category set does not exist, throw an error
1262           IF (l_dummy <>'X') then
1263             RAISE CSD_SCD_INVALID_CATEGORY;
1264           ELSE
1265             if (lc_stat_level >= lc_debug_level) then
1266               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1267   	               'Category is valid');
1268             end if;
1269           END IF;
1270 
1271        END IF; -- If domain is CATEGORY
1272 
1273        -- Set G_MISS parameters according to domain type
1274        IF (p_sc_domain_rec.domain_type_code = 'CAT') then
1275 
1276          if (lc_proc_level >= lc_debug_level) then
1277            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1278                        'Domain type is CATEGORY, setting item id to G_MISS_NUM');
1279          end if;
1280 
1281          l_inventory_item_id := FND_API.G_MISS_NUM;
1282 
1283        ELSIF (p_sc_domain_rec.domain_type_code = 'ITEM') then
1284 
1285         if (lc_proc_level >= lc_debug_level) then
1286            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1287                        'Domain type is ITEM, setting category set and category ids to G_MISS_NUM');
1288          end if;
1289 
1290          l_category_id := FND_API.G_MISS_NUM;
1291          l_category_set_id := FND_API.G_MISS_NUM;
1292        END IF;
1293 
1294         -- Update row
1295         if (lc_proc_level >= lc_debug_level) then
1296            FND_LOG.STRING(lc_proc_level, lc_mod_name,
1297                         'Calling Update_Row table handler');
1298        end if;
1299 
1300        BEGIN
1301 
1302          -- Update the service code domain
1303          CSD_SC_DOMAINS_PKG.Update_Row
1304          (p_sc_domain_id 	      => p_sc_domain_rec.sc_domain_id,
1305           p_object_version_number     => l_obj_ver_num + 1,
1306           p_service_code_id        => p_sc_domain_rec.service_code_id,
1307           p_inventory_item_id         => l_inventory_item_id,
1308           p_category_id  	      => l_category_id,
1309           p_category_set_id  	      => l_category_set_id,
1310           p_created_by                => FND_GLOBAL.USER_ID,
1311           p_creation_date             => SYSDATE,
1312           p_last_updated_by           => FND_GLOBAL.USER_ID,
1313           p_last_update_date          => SYSDATE,
1314           p_last_update_login         => FND_GLOBAL.LOGIN_ID,
1315           p_domain_type_code          => p_sc_domain_rec.domain_type_code,
1316           p_attribute_category        => p_sc_domain_rec.attribute_category,
1317           p_attribute1                => p_sc_domain_rec.attribute1,
1318           p_attribute2                => p_sc_domain_rec.attribute2,
1319           p_attribute3                => p_sc_domain_rec.attribute3,
1320           p_attribute4                => p_sc_domain_rec.attribute4,
1321           p_attribute5                => p_sc_domain_rec.attribute5,
1322           p_attribute6                => p_sc_domain_rec.attribute6,
1323           p_attribute7                => p_sc_domain_rec.attribute7,
1324           p_attribute8                => p_sc_domain_rec.attribute8,
1325           p_attribute9                => p_sc_domain_rec.attribute9,
1326           p_attribute10               => p_sc_domain_rec.attribute10,
1327           p_attribute11               => p_sc_domain_rec.attribute11,
1328           p_attribute12               => p_sc_domain_rec.attribute12,
1329           p_attribute13               => p_sc_domain_rec.attribute13,
1330           p_attribute14               => p_sc_domain_rec.attribute14,
1331           p_attribute15               => p_sc_domain_rec.attribute15
1332          );
1333 
1334         x_obj_ver_number := l_obj_ver_num + 1;
1335 
1336        EXCEPTION
1337           WHEN OTHERS THEN
1338             IF ( lc_excep_level >= lc_debug_level) THEN
1339                FND_LOG.STRING(lc_excep_level,lc_mod_name,'Others exception in CSD_SC_DOMAINS_PKG.Update_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1340             END IF;
1341             x_return_status := FND_API.G_RET_STS_ERROR;
1342        END;
1343 
1344        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1345           RAISE FND_API.G_EXC_ERROR;
1346        END IF;
1347 
1348        if (lc_proc_level >= lc_debug_level) then
1349           FND_LOG.STRING(lc_proc_level, lc_mod_name,
1350                        'Returned from Update_Row table handler');
1351        end if;
1352 
1353       -- Api body ends here
1354 
1355       -- Standard check of p_commit.
1356       IF FND_API.To_Boolean( p_commit ) THEN
1357            COMMIT WORK;
1358       END IF;
1359 
1360       -- Standard call to get message count and IF count is  get message info.
1361       FND_MSG_PUB.Count_And_Get
1362            (p_count  =>  x_msg_count,
1363             p_data   =>  x_msg_data );
1364 
1365       IF (lc_proc_level >= lc_debug_level) THEN
1366         FND_LOG.STRING(lc_proc_level, lc_mod_name || '.END',
1367                        'Leaving Update_SC_Domain');
1368       END IF;
1369 
1370  EXCEPTION
1371      WHEN CSD_SCD_SC_ID_MISSING THEN
1372           ROLLBACK TO Update_SC_Domain;
1373             -- Service code id is missing
1374             x_return_status := FND_API.G_RET_STS_ERROR ;
1375 
1376             -- save message in fnd stack
1377             if (lc_stat_level >= lc_debug_level) then
1378                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
1379                                'Adding message CSD_SCD_SC_ID_MISSING to FND_MSG stack');
1380             end if;
1381     	    FND_MESSAGE.SET_NAME('CSD','CSD_API_MISSING_PARAM');
1382 	    FND_MESSAGE.SET_TOKEN('API_NAME',lc_api_name);
1383 	    FND_MESSAGE.SET_TOKEN('MISSING_PARAM','SERVICE_CODE_ID');
1384 	    FND_MSG_PUB.Add;
1385 
1386             FND_MSG_PUB.Count_And_Get
1387                 (p_count  =>  x_msg_count,
1388                  p_data   =>  x_msg_data );
1389 
1390             -- save message in debug log
1391             IF (lc_excep_level >= lc_debug_level) THEN
1392                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
1393                                'Service code id is missing');
1394             END IF;
1395 
1396      WHEN CSD_SCD_DOMAIN_TYPE_MISSING THEN
1397           ROLLBACK TO Update_SC_Domain;
1398 
1399           -- Service code domain type is missing
1400           x_return_status := FND_API.G_RET_STS_ERROR ;
1401 
1402           -- save message in fnd stack
1403           if (lc_stat_level >= lc_debug_level) then
1404               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1405                                'Adding message CSD_SCD_DOMAIN_TYPE_MISSING to FND_MSG stack');
1406           end if;
1407     	  FND_MESSAGE.SET_NAME('CSD','CSD_API_MISSING_PARAM');
1408 	  FND_MESSAGE.SET_TOKEN('API_NAME',lc_api_name);
1409 	  FND_MESSAGE.SET_TOKEN('MISSING_PARAM','DOMAIN_TYPE_CODE');
1410 	  FND_MSG_PUB.Add;
1411 
1412           FND_MSG_PUB.Count_And_Get
1413               (p_count  =>  x_msg_count,
1414                p_data   =>  x_msg_data );
1415 
1416           -- save message in debug log
1417           IF (lc_excep_level >= lc_debug_level) THEN
1418               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1419                                'Service code domain type is missing');
1420           END IF;
1421 
1422      WHEN CSD_SCD_INVALID_ID THEN
1423           ROLLBACK TO Update_SC_Domain;
1424 
1425           -- Service code domain id is invalid
1426           x_return_status := FND_API.G_RET_STS_ERROR ;
1427 
1428           -- save message in fnd stack
1429           if (lc_stat_level >= lc_debug_level) then
1430               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1431                                'Adding message CSD_SCD_INVALID_ID to FND_MSG stack');
1432           end if;
1433      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_ID');
1434      	  FND_MESSAGE.SET_TOKEN('SC_DOMAIN_ID',p_sc_domain_rec.sc_domain_id);
1435      	  FND_MSG_PUB.Add;
1436 
1437           FND_MSG_PUB.Count_And_Get
1438               (p_count  =>  x_msg_count,
1439                p_data   =>  x_msg_data );
1440 
1441           -- save message in debug log
1442           IF (lc_excep_level >= lc_debug_level) THEN
1443               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1444                                'Service code domain id is invalid');
1445           END IF;
1446 
1447      WHEN CSD_SCD_GET_OVN_ERROR THEN
1448           ROLLBACK TO Update_SC_Domain;
1449 
1450           -- Service code domain get object version number error
1451           x_return_status := FND_API.G_RET_STS_ERROR ;
1452 
1453           -- save message in fnd stack
1454           if (lc_stat_level >= lc_debug_level) then
1455               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1456                                'Adding message CSD_SCD_GET_OVN_ERROR to FND_MSG stack');
1457           end if;
1458      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_GET_OVN_ERROR');
1459      	  FND_MESSAGE.SET_TOKEN('SC_DOMAIN_ID',p_sc_domain_rec.sc_domain_id);
1460      	  FND_MSG_PUB.Add;
1461 
1462           FND_MSG_PUB.Count_And_Get
1463               (p_count  =>  x_msg_count,
1464                p_data   =>  x_msg_data );
1465 
1466           -- save message in debug log
1467           IF (lc_excep_level >= lc_debug_level) THEN
1468               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1469                                'Service code domain get object version number error');
1470           END IF;
1471 
1472      WHEN CSD_SCD_OVN_MISMATCH THEN
1473           ROLLBACK TO Update_SC_Domain;
1474 
1475           -- Service code domain object version number mismatch
1476           x_return_status := FND_API.G_RET_STS_ERROR ;
1477 
1478           -- save message in fnd stack
1479           if (lc_stat_level >= lc_debug_level) then
1480               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1481                                'Adding message CSD_SCD_OVN_MISMATCH to FND_MSG stack');
1482           end if;
1483      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_OVN_MISMATCH');
1484      	  FND_MESSAGE.SET_TOKEN('SC_DOMAIN_ID',p_sc_domain_rec.sc_domain_id);
1485      	  FND_MSG_PUB.Add;
1486 
1487           FND_MSG_PUB.Count_And_Get
1488               (p_count  =>  x_msg_count,
1489                p_data   =>  x_msg_data );
1490 
1491           -- save message in debug log
1492           IF (lc_excep_level >= lc_debug_level) THEN
1493               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1494                                'Service code domain object version number mismatch');
1495           END IF;
1496 
1497      WHEN CSD_SCD_DOMAIN_EXISTS THEN
1498           ROLLBACK TO Update_SC_Domain;
1499 
1500           -- Service code domain already exists
1501           x_return_status := FND_API.G_RET_STS_ERROR ;
1502 
1503           -- save message in fnd stack
1504           if (lc_stat_level >= lc_debug_level) then
1505               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1506                                'Adding message CSD_SCD_DOMAIN_EXISTS to FND_MSG stack');
1507           end if;
1508      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_DOMAIN_EXISTS');
1509      	  FND_MESSAGE.SET_TOKEN('SERVICE_CODE_ID',p_sc_domain_rec.service_code_id);
1510      	  FND_MSG_PUB.Add;
1511 
1512           FND_MSG_PUB.Count_And_Get
1513               (p_count  =>  x_msg_count,
1514                p_data   =>  x_msg_data );
1515 
1516           -- save message in debug log
1517           IF (lc_excep_level >= lc_debug_level) THEN
1518               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1519                                'Service code domain already exists');
1520           END IF;
1521 
1522      WHEN CSD_SCD_GET_ITEM_ERROR THEN
1523           ROLLBACK TO Update_SC_Domain;
1524 
1525           -- Service code domain get item error
1526           x_return_status := FND_API.G_RET_STS_ERROR ;
1527 
1528           -- save message in fnd stack
1529           if (lc_stat_level >= lc_debug_level) then
1530               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1531                                'Adding message CSD_SCD_GET_ITEM_ERROR to FND_MSG stack');
1532           end if;
1533      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_GET_ITEM_ERROR');
1534      	  FND_MESSAGE.SET_TOKEN('SC_DOMAIN_ID',p_sc_domain_rec.sc_domain_id);
1535      	  FND_MSG_PUB.Add;
1536 
1537           FND_MSG_PUB.Count_And_Get
1538               (p_count  =>  x_msg_count,
1539                p_data   =>  x_msg_data );
1540 
1541           -- save message in debug log
1542           IF (lc_excep_level >= lc_debug_level) THEN
1543               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1544                                'Service code domain get item error');
1545           END IF;
1546 
1547      WHEN CSD_SCD_INVALID_ITEM THEN
1548           ROLLBACK TO Update_SC_Domain;
1549 
1550           -- Service code domain item is invalid
1551           x_return_status := FND_API.G_RET_STS_ERROR ;
1552 
1553           -- save message in fnd stack
1554           if (lc_stat_level >= lc_debug_level) then
1555               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1556                                'Adding message CSD_SCD_INVALID_ITEM to FND_MSG stack');
1557           end if;
1558      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_ITEM');
1559      	  FND_MESSAGE.SET_TOKEN('INVENTORY_ITEM_ID',p_sc_domain_rec.inventory_item_id);
1560      	  FND_MSG_PUB.Add;
1561 
1562           FND_MSG_PUB.Count_And_Get
1563               (p_count  =>  x_msg_count,
1564                p_data   =>  x_msg_data );
1565 
1566           -- save message in debug log
1567           IF (lc_excep_level >= lc_debug_level) THEN
1568               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1569                                'Service code domain item is invalid');
1570           END IF;
1571 
1572      WHEN CSD_SCD_GET_CAT_SET_ERROR THEN
1573           ROLLBACK TO Update_SC_Domain;
1574 
1575           -- Service code domain get category set error
1576           x_return_status := FND_API.G_RET_STS_ERROR ;
1577 
1578           -- save message in fnd stack
1579           if (lc_stat_level >= lc_debug_level) then
1580               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1581                                'Adding message CSD_SCD_GET_CAT_SET_ERROR to FND_MSG stack');
1582           end if;
1583      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_GET_CAT_SET_ERROR');
1584      	  FND_MESSAGE.SET_TOKEN('SC_DOMAIN_ID',p_sc_domain_rec.sc_domain_id);
1585      	  FND_MSG_PUB.Add;
1586 
1587           FND_MSG_PUB.Count_And_Get
1588               (p_count  =>  x_msg_count,
1589                p_data   =>  x_msg_data );
1590 
1591           -- save message in debug log
1592           IF (lc_excep_level >= lc_debug_level) THEN
1593               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1594                                'Service code domain get category set error');
1595           END IF;
1596 
1597      WHEN CSD_SCD_INVALID_CAT_SET THEN
1598           ROLLBACK TO Update_SC_Domain;
1599 
1600             -- Service code domain category set is invalid
1601             x_return_status := FND_API.G_RET_STS_ERROR ;
1602 
1603             -- save message in fnd stack
1604             if (lc_stat_level >= lc_debug_level) then
1605                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
1606                                'Adding message CSD_SCD_INVALID_CAT_SET to FND_MSG stack');
1607             end if;
1608     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_CAT_SET');
1609 	    FND_MESSAGE.SET_TOKEN('CATEGORY_SET_ID',p_sc_domain_rec.category_set_id);
1610 	    FND_MSG_PUB.Add;
1611 
1612             FND_MSG_PUB.Count_And_Get
1613                 (p_count  =>  x_msg_count,
1614                  p_data   =>  x_msg_data );
1615 
1616             -- save message in debug log
1617             IF (lc_excep_level >= lc_debug_level) THEN
1618                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
1619                                'Service code domain category set is invalid');
1620             END IF;
1621 
1622      WHEN CSD_SCD_GET_CATSET_FLAG_ERROR THEN
1623           ROLLBACK TO Update_SC_Domain;
1624 
1625             -- Service code domain category set validate flag is invalid
1626             x_return_status := FND_API.G_RET_STS_ERROR ;
1627 
1628             -- save message in fnd stack
1629             if (lc_stat_level >= lc_debug_level) then
1630                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
1631                                'Adding message CSD_SCD_GET_CATSET_FLAG_ERROR to FND_MSG stack');
1632             end if;
1633     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_GET_CATSET_FLAG_ERROR');
1634 	    FND_MESSAGE.SET_TOKEN('CATEGORY_SET_ID',p_sc_domain_rec.category_set_id);
1635 	    FND_MSG_PUB.Add;
1636 
1637             FND_MSG_PUB.Count_And_Get
1638                 (p_count  =>  x_msg_count,
1639                  p_data   =>  x_msg_data );
1640 
1641             -- save message in debug log
1642             IF (lc_excep_level >= lc_debug_level) THEN
1643                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
1644                                'Service code domain category set validate flag is invalid');
1645             END IF;
1646 
1647      WHEN CSD_SCD_GET_CATEGORY_ERROR THEN
1648           ROLLBACK TO Update_SC_Domain;
1649 
1650           -- Service code domain get category error
1651           x_return_status := FND_API.G_RET_STS_ERROR ;
1652 
1653           -- save message in fnd stack
1654           if (lc_stat_level >= lc_debug_level) then
1655               FND_LOG.STRING(lc_stat_level, lc_mod_name,
1656                                'Adding message CSD_SCD_GET_CATEGORY_ERROR to FND_MSG stack');
1657           end if;
1658      	  FND_MESSAGE.SET_NAME('CSD','CSD_SCD_GET_CATEGORY_ERROR');
1659      	  FND_MESSAGE.SET_TOKEN('SC_DOMAIN_ID',p_sc_domain_rec.sc_domain_id);
1660      	  FND_MSG_PUB.Add;
1661 
1662           FND_MSG_PUB.Count_And_Get
1663               (p_count  =>  x_msg_count,
1664                p_data   =>  x_msg_data );
1665 
1666           -- save message in debug log
1667           IF (lc_excep_level >= lc_debug_level) THEN
1668               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1669                                'Service code domain get category error');
1670           END IF;
1671 
1672      WHEN CSD_SCD_INVALID_CATEGORY THEN
1673           ROLLBACK TO Update_SC_Domain;
1674 
1675             -- Service code domain category is invalid
1676             x_return_status := FND_API.G_RET_STS_ERROR ;
1677 
1678             -- save message in fnd stack
1679             if (lc_stat_level >= lc_debug_level) then
1680                 FND_LOG.STRING(lc_stat_level, lc_mod_name,
1681                                'Adding message CSD_SCD_INVALID_CATEGORY to FND_MSG stack');
1682             end if;
1683     	    FND_MESSAGE.SET_NAME('CSD','CSD_SCD_INVALID_CATEGORY');
1684 	    FND_MESSAGE.SET_TOKEN('CATEGORY_ID',p_sc_domain_rec.category_id);
1685 	    FND_MSG_PUB.Add;
1686 
1687             FND_MSG_PUB.Count_And_Get
1688                 (p_count  =>  x_msg_count,
1689                  p_data   =>  x_msg_data );
1690 
1691             -- save message in debug log
1692             IF (lc_excep_level >= lc_debug_level) THEN
1693                 FND_LOG.STRING(lc_excep_level, lc_mod_name,
1694                                'Service code domain category is invalid');
1695             END IF;
1696 
1697     WHEN FND_API.G_EXC_ERROR THEN
1698           ROLLBACK TO Update_SC_Domain;
1699 
1700           x_return_status := FND_API.G_RET_STS_ERROR;
1701 
1702           FND_MSG_PUB.Count_And_Get
1703               (p_count  =>  x_msg_count,
1704                p_data   =>  x_msg_data );
1705 
1706          -- save message in debug log
1707           IF (lc_excep_level >= lc_debug_level) THEN
1708               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1709                              'EXC_ERROR['||x_msg_data||']');
1710           END IF;
1711 
1712     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1713           ROLLBACK TO Update_SC_Domain;
1714 
1715           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1716 
1717          IF  FND_MSG_PUB.Check_Msg_Level
1718               (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1719           THEN
1720               if (lc_stat_level >= lc_debug_level) then
1721                   FND_LOG.STRING(lc_stat_level, lc_mod_name,
1722                                  'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
1723               end if;
1724               FND_MSG_PUB.Add_Exc_Msg
1725               (G_PKG_NAME ,
1726                lc_api_name  );
1727           END IF;
1728 
1729           FND_MSG_PUB.Count_And_Get
1730                 ( p_count  =>  x_msg_count,
1731                   p_data   =>  x_msg_data );
1732 
1733           -- save message in debug log
1734           IF (lc_excep_level >= lc_debug_level) THEN
1735               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1736                              'EXC_UNEXPECTED_ERROR['||x_msg_data||']');
1737           END IF;
1738 
1739     WHEN OTHERS THEN
1740           ROLLBACK TO Update_SC_Domain;
1741 
1742           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1743 
1744            -- save message in fnd stack
1745            IF  FND_MSG_PUB.Check_Msg_Level
1746                (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1747            THEN
1748                if (lc_stat_level >= lc_debug_level) then
1749                    FND_LOG.STRING(lc_stat_level, lc_mod_name,
1750                                   'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
1751                end if;
1752                FND_MSG_PUB.Add_Exc_Msg
1753                (G_PKG_NAME ,
1754                 lc_api_name  );
1755            END IF;
1756 
1757            FND_MSG_PUB.Count_And_Get
1758                (p_count  =>  x_msg_count,
1759                 p_data   =>  x_msg_data );
1760 
1761            -- save message in debug log
1762            IF (lc_excep_level >= lc_debug_level) THEN
1763                -- create a seeded message
1764                FND_LOG.STRING(lc_excep_level, lc_mod_name,
1765                               'SQL Message['||sqlerrm||']' );
1766           END IF;
1767 
1768 END Update_SC_Domain;
1769 
1770 /*--------------------------------------------------*/
1771 /* procedure name: Delete_SC_Domain                 */
1772 /* description   : procedure used to delete         */
1773 /*                 sc domain	                    */
1774 /*                                                  */
1775 /*--------------------------------------------------*/
1776 PROCEDURE Delete_SC_Domain
1777 (
1778   p_api_version        		IN  NUMBER,
1779   p_commit	   		IN  VARCHAR2,
1780   p_init_msg_list      		IN  VARCHAR2,
1781   p_validation_level   		IN  NUMBER,
1782   x_return_status      		OUT NOCOPY VARCHAR2,
1783   x_msg_count          		OUT NOCOPY NUMBER,
1784   x_msg_data           		OUT NOCOPY VARCHAR2,
1785   p_sc_domain_id	 	IN  NUMBER
1786 ) IS
1787 
1788 -- CONSTANTS --
1789  lc_debug_level           CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1790  lc_stat_level            CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
1791  lc_proc_level            CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
1792  lc_event_level           CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
1793  lc_excep_level           CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
1794  lc_error_level           CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
1795  lc_unexp_level           CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
1796  lc_mod_name              CONSTANT VARCHAR2(100)  := 'csd.plsql.csd_sc_domains_pvt.delete_sc_domain';
1797  lc_api_name              CONSTANT VARCHAR2(30)   := 'Delete_SC_Domain';
1798  lc_api_version           CONSTANT NUMBER         := 1.0;
1799 
1800 -- VARIABLES --
1801  l_msg_count              NUMBER;
1802  l_msg_data               VARCHAR2(100);
1803  l_msg_index              NUMBER;
1804 
1805 BEGIN
1806        -- Standard Start of API savepoint
1807        SAVEPOINT  Delete_SC_Domain;
1808 
1809        -- Standard call to check for call compatibility.
1810        IF NOT FND_API.Compatible_API_Call (lc_api_version,
1811                                            p_api_version,
1812                                            lc_api_name   ,
1813                                            G_PKG_NAME    )
1814        THEN
1815              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1816        END IF;
1817 
1818        -- Initialize message list if p_init_msg_list is set to TRUE.
1819        IF FND_API.to_Boolean( p_init_msg_list ) THEN
1820            FND_MSG_PUB.initialize;
1821        END IF;
1822 
1823        IF (lc_proc_level >= lc_debug_level) THEN
1824            FND_LOG.STRING(lc_proc_level, lc_mod_name || '.BEGIN',
1825                 'Entered Delete_SC_Domain');
1826        END IF;
1827 
1828        -- Initialize API return status to success
1829        x_return_status := FND_API.G_RET_STS_SUCCESS;
1830 
1831        -- Api body starts
1832 
1833        -- Check the required parameters
1834        if (lc_proc_level >= lc_debug_level) then
1835           FND_LOG.STRING(lc_proc_level, lc_mod_name,
1836                        'Checking required parameter');
1837        end if;
1838 
1839        -- Check the required parameter
1840        CSD_PROCESS_UTIL.Check_Reqd_Param
1841        ( p_param_value	  => p_sc_domain_id,
1842          p_param_name	  => 'SC_DOMAIN_ID',
1843          p_api_name	  => lc_api_name);
1844 
1845        -- Delete row
1846        if (lc_proc_level >= lc_debug_level) then
1847             FND_LOG.STRING(lc_proc_level, lc_mod_name,
1848                          'Calling Delete_Row table handler');
1849        end if;
1850 
1851        BEGIN
1852 
1853          -- Delete the service code domain
1854          CSD_SC_DOMAINS_PKG.Delete_Row
1855          (p_sc_domain_id 	      => p_sc_domain_id	);
1856 
1857        EXCEPTION
1858          WHEN OTHERS THEN
1859             IF ( lc_excep_level >= lc_debug_level) THEN
1860                FND_LOG.STRING(lc_excep_level,lc_mod_name,'Others exception in CSD_SC_DOMAINS_PKG.Delete_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1861             END IF;
1862             x_return_status := FND_API.G_RET_STS_ERROR;
1863        END;
1864 
1865        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1866           RAISE FND_API.G_EXC_ERROR;
1867        END IF;
1868 
1869        if (lc_proc_level >= lc_debug_level) then
1870           FND_LOG.STRING(lc_proc_level, lc_mod_name,
1871                        'Returned from Delete_Row table handler');
1872        end if;
1873 
1874        -- Api body ends here
1875 
1876       -- Standard check of p_commit.
1877       IF FND_API.To_Boolean( p_commit ) THEN
1878            COMMIT WORK;
1879       END IF;
1880 
1881       -- Standard call to get message count and IF count is  get message info.
1882       FND_MSG_PUB.Count_And_Get
1883            (p_count  =>  x_msg_count,
1884             p_data   =>  x_msg_data );
1885 
1886       IF (lc_proc_level >= lc_debug_level) THEN
1887         FND_LOG.STRING(lc_proc_level, lc_mod_name || '.END',
1888                        'Leaving Delete_SC_Domain');
1889       END IF;
1890 
1891 EXCEPTION
1892 
1893     WHEN FND_API.G_EXC_ERROR THEN
1894           ROLLBACK TO Delete_SC_Domain;
1895 
1896           x_return_status := FND_API.G_RET_STS_ERROR;
1897 
1898           FND_MSG_PUB.Count_And_Get
1899               (p_count  =>  x_msg_count,
1900                p_data   =>  x_msg_data );
1901 
1902          -- save message in debug log
1903           IF (lc_excep_level >= lc_debug_level) THEN
1904               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1905                              'EXC_ERROR['||x_msg_data||']');
1906           END IF;
1907 
1908     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1909           ROLLBACK TO Delete_SC_Domain;
1910 
1911           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1912 
1913          IF  FND_MSG_PUB.Check_Msg_Level
1914               (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1915           THEN
1916               if (lc_stat_level >= lc_debug_level) then
1917                   FND_LOG.STRING(lc_stat_level, lc_mod_name,
1918                                  'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
1919               end if;
1920               FND_MSG_PUB.Add_Exc_Msg
1921               (G_PKG_NAME ,
1922                lc_api_name  );
1923           END IF;
1924 
1925           FND_MSG_PUB.Count_And_Get
1926                 ( p_count  =>  x_msg_count,
1927                   p_data   =>  x_msg_data );
1928 
1929           -- save message in debug log
1930           IF (lc_excep_level >= lc_debug_level) THEN
1931               FND_LOG.STRING(lc_excep_level, lc_mod_name,
1932                              'EXC_UNEXPECTED_ERROR['||x_msg_data||']');
1933           END IF;
1934 
1935     WHEN OTHERS THEN
1936           ROLLBACK TO Delete_SC_Domain;
1937 
1938           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1939 
1940            -- save message in fnd stack
1941            IF  FND_MSG_PUB.Check_Msg_Level
1942                (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1943            THEN
1944                if (lc_stat_level >= lc_debug_level) then
1945                    FND_LOG.STRING(lc_stat_level, lc_mod_name,
1946                                   'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
1947                end if;
1948                FND_MSG_PUB.Add_Exc_Msg
1949                (G_PKG_NAME ,
1950                 lc_api_name  );
1951            END IF;
1952 
1953            FND_MSG_PUB.Count_And_Get
1954                (p_count  =>  x_msg_count,
1955                 p_data   =>  x_msg_data );
1956 
1957            -- save message in debug log
1958            IF (lc_excep_level >= lc_debug_level) THEN
1959                -- create a seeded message
1960                FND_LOG.STRING(lc_excep_level, lc_mod_name,
1961                               'SQL Message['||sqlerrm||']' );
1962           END IF;
1963 
1964 END Delete_SC_Domain;
1965 
1966 /*--------------------------------------------------*/
1967 /* procedure name: Lock_SC_Domain                   */
1968 /* description   : procedure used to lock           */
1969 /*                 sc domain	                    */
1970 /*                                                  */
1971 /*--------------------------------------------------*/
1972 PROCEDURE Lock_SC_Domain
1973 (
1974   p_api_version        		IN  NUMBER,
1975   p_commit	   		IN  VARCHAR2,
1976   p_init_msg_list      		IN  VARCHAR2,
1977   p_validation_level   		IN  NUMBER,
1978   x_return_status      		OUT NOCOPY VARCHAR2,
1979   x_msg_count          		OUT NOCOPY NUMBER,
1980   x_msg_data           		OUT NOCOPY VARCHAR2,
1981   p_sc_domain_rec		IN  SC_DOMAIN_REC_TYPE
1982 ) IS
1983 
1984 -- CONSTANTS --
1985  lc_debug_level           CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1986  lc_stat_level            CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
1987  lc_proc_level            CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
1988  lc_event_level           CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
1989  lc_excep_level           CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
1990  lc_error_level           CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
1991  lc_unexp_level           CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
1992  lc_mod_name              CONSTANT VARCHAR2(100)  := 'csd.plsql.csd_sc_domains_pvt.lock_sc_domain';
1993  lc_api_name              CONSTANT VARCHAR2(30)   := 'Lock_SC_Domain';
1994  lc_api_version           CONSTANT NUMBER         := 1.0;
1995 
1996 -- VARIABLES --
1997  l_msg_count              NUMBER;
1998  l_msg_data               VARCHAR2(100);
1999  l_msg_index              NUMBER;
2000 
2001 BEGIN
2002        -- Standard Start of API savepoint
2003        SAVEPOINT  Lock_SC_Domain;
2004 
2005        -- Standard call to check for call compatibility.
2006        IF NOT FND_API.Compatible_API_Call (lc_api_version,
2007                                            p_api_version,
2008                                            lc_api_name   ,
2009                                            G_PKG_NAME    )
2010        THEN
2011              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2012        END IF;
2013 
2014        -- Initialize message list if p_init_msg_list is set to TRUE.
2015        IF FND_API.to_Boolean( p_init_msg_list ) THEN
2016            FND_MSG_PUB.initialize;
2017        END IF;
2018 
2019        IF (lc_proc_level >= lc_debug_level) THEN
2020            FND_LOG.STRING(lc_proc_level, lc_mod_name || '.BEGIN',
2021                 'Entered Lock_SC_Domain');
2022        END IF;
2023 
2024        -- Initialize API return status to success
2025        x_return_status := FND_API.G_RET_STS_SUCCESS;
2026 
2027        -- Api body starts
2028 
2029        -- Check the required parameters
2030         if (lc_proc_level >= lc_debug_level) then
2031            FND_LOG.STRING(lc_proc_level, lc_mod_name,
2032                         'Checking required parameters');
2033         end if;
2034 
2035         -- Check the required parameter
2036         CSD_PROCESS_UTIL.Check_Reqd_Param
2037         ( p_param_value	  => p_sc_domain_rec.sc_domain_id,
2038           p_param_name	  => 'SC_DOMAIN_ID',
2039          p_api_name	  => lc_api_name);
2040 
2041         -- Check the required parameter
2042         CSD_PROCESS_UTIL.Check_Reqd_Param
2043         ( p_param_value	  => p_sc_domain_rec.object_version_number,
2044           p_param_name	  => 'OBJECT_VERSION_NUMBER',
2045           p_api_name	  => lc_api_name);
2046 
2047        -- Lock row
2048        if (lc_proc_level >= lc_debug_level) then
2049            FND_LOG.STRING(lc_proc_level, lc_mod_name,
2050                         'Calling Lock_Row table handler');
2051        end if;
2052 
2053        BEGIN
2054 
2055          -- Lock the sc domain
2056          CSD_SC_DOMAINS_PKG.Lock_Row
2057          (p_sc_domain_id 	      => p_sc_domain_rec.sc_domain_id,
2058           p_object_version_number     => p_sc_domain_rec.object_version_number
2059 
2060           --commented out the rest of the record
2061           /*,
2062           p_service_code_id           => p_sc_domain_rec.service_code_id,
2063           p_inventory_item_id         => p_sc_domain_rec.inventory_item_id,
2064           p_category_id  	      => p_sc_domain_rec.category_id,
2065           p_category_set_id  	      => p_sc_domain_rec.category_set_id,
2066           p_created_by                => FND_GLOBAL.USER_ID,
2067           p_creation_date             => SYSDATE,
2068           p_last_updated_by           => FND_GLOBAL.USER_ID,
2069           p_last_update_date          => SYSDATE,
2070           p_last_update_login         => FND_GLOBAL.LOGIN_ID,
2071           p_domain_type_code          => p_sc_domain_rec.domain_type_code,
2072           p_attribute_category        => p_sc_domain_rec.attribute_category,
2073           p_attribute1                => p_sc_domain_rec.attribute1,
2074           p_attribute2                => p_sc_domain_rec.attribute2,
2075           p_attribute3                => p_sc_domain_rec.attribute3,
2076           p_attribute4                => p_sc_domain_rec.attribute4,
2077           p_attribute5                => p_sc_domain_rec.attribute5,
2078           p_attribute6                => p_sc_domain_rec.attribute6,
2079           p_attribute7                => p_sc_domain_rec.attribute7,
2080           p_attribute8                => p_sc_domain_rec.attribute8,
2081           p_attribute9                => p_sc_domain_rec.attribute9,
2082           p_attribute10               => p_sc_domain_rec.attribute10,
2083           p_attribute11               => p_sc_domain_rec.attribute11,
2084           p_attribute12               => p_sc_domain_rec.attribute12,
2085           p_attribute13               => p_sc_domain_rec.attribute13,
2086           p_attribute14               => p_sc_domain_rec.attribute14,
2087           p_attribute15               => p_sc_domain_rec.attribute15
2088           */
2089           --
2090  	);
2091 
2092        EXCEPTION
2093           WHEN OTHERS THEN
2094              IF ( lc_excep_level >= lc_debug_level) THEN
2095                 FND_LOG.STRING(lc_excep_level,lc_mod_name,'Others exception in CSD_SC_DOMAINS_PKG.Lock_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
2096              END IF;
2097              x_return_status := FND_API.G_RET_STS_ERROR;
2098        END;
2099 
2100        IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2101           RAISE FND_API.G_EXC_ERROR;
2102        END IF;
2103 
2104        if (lc_proc_level >= lc_debug_level) then
2105           FND_LOG.STRING(lc_proc_level, lc_mod_name,
2106                        'Returned from Lock_Row table handler');
2107        end if;
2108 
2109       -- Api body ends here
2110 
2111       -- Standard check of p_commit.
2112       IF FND_API.To_Boolean( p_commit ) THEN
2113            COMMIT WORK;
2114       END IF;
2115 
2116       -- Standard call to get message count and IF count is  get message info.
2117       FND_MSG_PUB.Count_And_Get
2118            (p_count  =>  x_msg_count,
2119             p_data   =>  x_msg_data );
2120 
2121       IF (lc_proc_level >= lc_debug_level) THEN
2122         FND_LOG.STRING(lc_proc_level, lc_mod_name || '.END',
2123                        'Leaving Lock_SC_Domain');
2124       END IF;
2125 
2126 EXCEPTION
2127 
2128    WHEN FND_API.G_EXC_ERROR THEN
2129           ROLLBACK TO Lock_SC_Domain;
2130 
2131           x_return_status := FND_API.G_RET_STS_ERROR;
2132 
2133           FND_MSG_PUB.Count_And_Get
2134               (p_count  =>  x_msg_count,
2135                p_data   =>  x_msg_data );
2136 
2137          -- save message in debug log
2138           IF (lc_excep_level >= lc_debug_level) THEN
2139               FND_LOG.STRING(lc_excep_level, lc_mod_name,
2140                              'EXC_ERROR['||x_msg_data||']');
2141           END IF;
2142 
2143     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2144           ROLLBACK TO Lock_SC_Domain;
2145 
2146           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2147 
2148          IF  FND_MSG_PUB.Check_Msg_Level
2149               (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2150           THEN
2151               if (lc_stat_level >= lc_debug_level) then
2152                   FND_LOG.STRING(lc_stat_level, lc_mod_name,
2153                                  'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
2154               end if;
2155               FND_MSG_PUB.Add_Exc_Msg
2156               (G_PKG_NAME ,
2157                lc_api_name  );
2158           END IF;
2159 
2160           FND_MSG_PUB.Count_And_Get
2161                 ( p_count  =>  x_msg_count,
2162                   p_data   =>  x_msg_data );
2163 
2164           -- save message in debug log
2165           IF (lc_excep_level >= lc_debug_level) THEN
2166               FND_LOG.STRING(lc_excep_level, lc_mod_name,
2167                              'EXC_UNEXPECTED_ERROR['||x_msg_data||']');
2168           END IF;
2169 
2170     WHEN OTHERS THEN
2171           ROLLBACK TO Lock_SC_Domain;
2172 
2173           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2174 
2175            -- save message in fnd stack
2176            IF  FND_MSG_PUB.Check_Msg_Level
2177                (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2178            THEN
2179                if (lc_stat_level >= lc_debug_level) then
2180                    FND_LOG.STRING(lc_stat_level, lc_mod_name,
2181                                   'Adding message using FND_MSG_PUB.Add_Exc_Msg to FND_MSG stack');
2182                end if;
2183                FND_MSG_PUB.Add_Exc_Msg
2184                (G_PKG_NAME ,
2185                 lc_api_name  );
2186            END IF;
2187 
2188            FND_MSG_PUB.Count_And_Get
2189                (p_count  =>  x_msg_count,
2190                 p_data   =>  x_msg_data );
2191 
2192            -- save message in debug log
2193            IF (lc_excep_level >= lc_debug_level) THEN
2194                -- create a seeded message
2195                FND_LOG.STRING(lc_excep_level, lc_mod_name,
2196                               'SQL Message['||sqlerrm||']' );
2197           END IF;
2198 
2199 END Lock_SC_Domain;
2200 
2201 End CSD_SC_DOMAINS_PVT;
2202