1 PACKAGE BODY EGO_EXT_FWK_PUB AS
2 /* $Header: EGOPEFMB.pls 120.95.12020000.6 2012/11/29 10:35:09 lifcheng ship $ */
3
4
5 ------------------------------------
6 -- Global Variables and Constants --
7 ------------------------------------
8 G_PKG_NAME CONSTANT VARCHAR2(30) := 'EGO_EXT_FWK_PUB';
9 G_APP_NAME CONSTANT VARCHAR2(3) := 'EGO';
10 G_PKG_NAME_TOKEN CONSTANT VARCHAR2(8) := 'PKG_NAME';
11 G_API_NAME_TOKEN CONSTANT VARCHAR2(8) := 'API_NAME';
12 G_SQL_ERR_MSG_TOKEN CONSTANT VARCHAR2(11) := 'SQL_ERR_MSG';
13 G_PLSQL_ERR CONSTANT VARCHAR2(17) := 'EGO_PLSQL_ERR';
14
15 G_CURRENT_USER_ID NUMBER := FND_GLOBAL.User_Id;
16 G_CURRENT_LOGIN_ID NUMBER := FND_GLOBAL.Login_Id;
17
18 -- For use with error-reporting --
19 G_ADD_ERRORS_TO_FND_STACK CONSTANT VARCHAR2(1) := 'Y';
20 G_DUMMY_ENTITY_INDEX NUMBER;
21 G_DUMMY_ENTITY_ID VARCHAR2(50);
22 G_DUMMY_MESSAGE_TYPE VARCHAR2(1);
23
24
25 --------------------------
26 -- Package-Private APIs --
27 --------------------------
28
29 procedure code_debug (msg VARCHAR2) IS
30 BEGIN
31 -- IF msg like '%Delete_Association%' THEN
32 -- sri_debug(G_PKG_NAME||' '||msg);
33 -- END IF;
34 NULL;
35 END;
36
37 /*-----------------------------------------------------------------------------
38
39 DESCRIPTION
40 Converts a SELECT expression to its correct data type.
41
42 BUG FIX
43 6319734
44
45 PARAMETERS
46 See below.
47
48 AUTHOR
49 ssarnoba
50
51 NOTES
52
53 -----------------------------------------------------------------------------*/
54 PROCEDURE Convert_Child_VS_Select_Expr (
55 p_parent_vs_row IN ego_value_sets_v%ROWTYPE
56 , p_convert_date IN VARCHAR2 := FND_API.G_FALSE
57 , x_column_name IN OUT NOCOPY VARCHAR2
58 )
59 IS
60 BEGIN
61
62 -- If the value set is not of data type character, conversion is needed.
63 IF ( p_parent_vs_row.FORMAT_CODE = G_NUMBER_DATA_TYPE ) THEN
64 x_column_name := 'TO_NUMBER(' || x_column_name || ')';
65
66 ELSIF
67 (( p_parent_vs_row.FORMAT_CODE = G_DATE_DATA_TYPE OR
68 p_parent_vs_row.FORMAT_CODE = G_DATE_TIME_DATA_TYPE ) AND
69 p_convert_date = FND_API.G_TRUE )
70 THEN
71 -- Generally this is done later on so we don't do the conversion
72 -- unless forced by p_convert_date.
73 x_column_name := 'TO_DATE(' || x_column_name || ',''' ||
74 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT ||
75 ''')';
76
77 ELSE
78 x_column_name := x_column_name ;
79 END IF;
80
81 END Convert_Child_VS_Select_Expr;
82
83
84 /*-----------------------------------------------------------------------------
85
86 DESCRIPTION
87 Builds the SELECT clause expressions for a child value set definition that
88 gets inserted into FND_FLEX_VALIDATION_TABLES.
89
90 BUG FIX
91 6319734
92
93 PARAMETERS
94 See below.
95
96 AUTHOR
97 ssarnoba
98
99 NOTES
100 The ID_COLUMN_NAME and VALUE_COLUMN_NAME values ultimately appears in a
101 SELECT clause to represent the value set. These child value set values
102 require conversion to their true data type for the values to be read
103 correctly in the Java layer.
104
105 -----------------------------------------------------------------------------*/
106 PROCEDURE Build_Child_VS_Select_Exprs (
107 p_parent_vs_row IN ego_value_sets_v%ROWTYPE
108 , x_id_column_type OUT NOCOPY fnd_flex_validation_tables.id_column_type%TYPE
109 , x_value_column_type OUT NOCOPY fnd_flex_validation_tables.value_column_type%TYPE
110 , x_id_column_name OUT NOCOPY fnd_flex_validation_tables.id_column_name%TYPE
111 , x_value_column_name OUT NOCOPY fnd_flex_validation_tables.value_column_name%TYPE
112 )
113 IS
114 BEGIN
115
116 ----------------------------------------------------------------------------
117 -- 1. FND_FLEX_VALIDATION_TABLES --
118 -- - ID_COLUMN_NAME --
119 -- - ID_COLUMN_TYPE --
120 ----------------------------------------------------------------------------
121
122 -- ID_COLUMN_TYPE must ALWAYS be the true data type of the value set
123 x_id_column_type := p_parent_vs_row.FORMAT_CODE;
124
125
126 -- Set the value for ID_COLUMN_NAME
127 x_id_column_name := 'vsv.INTERNAL_NAME';
128
129 -- Convert ID_COLUMN_NAME if necessary
130 Convert_Child_VS_Select_Expr (
131 p_parent_vs_row => p_parent_vs_row
132 , p_convert_date => FND_API.G_FALSE
133 , x_column_name => x_id_column_name
134 );
135
136 ----------------------------------------------------------------------------
137 -- 2. FND_FLEX_VALIDATION_TABLES --
138 -- - VALUE_COLUMN_NAME --
139 -- - VALUE_COLUMN_TYPE --
140 ----------------------------------------------------------------------------
141
142 -- Initialize VALUE_COLUMN_NAME
143 x_value_column_name := 'vsv.DISPLAY_NAME';
144
145 -- Value set's validation type is Translatable Independent
146 IF ( p_parent_vs_row.VALIDATION_CODE_ADMIN = G_TRANS_IND_VALIDATION_CODE )
147 THEN
148
149 -- The value of VALUE_COLUMN_NAME will always be of type character since
150 -- it's used purely for display.
151 x_value_column_type := G_CHAR_DATA_TYPE;
152
153 -- Value set's validation type is Independent
154 ELSIF
155 ( p_parent_vs_row.VALIDATION_CODE_ADMIN = G_INDEPENDENT_VALIDATION_CODE )
156 THEN
157
158 -- The value of VALUE_COLUMN_NAME will have the true data type of the value
159 -- set, so a conversion will be necessary as per ID_COLUMN_...
160 x_value_column_type := x_id_column_type;
161
162 -- Convert the value for VALUE_COLUMN_NAME if necessary
163 Convert_Child_VS_Select_Expr (
164 p_parent_vs_row => p_parent_vs_row
165 , p_convert_date => FND_API.G_TRUE
166 , x_column_name => x_value_column_name
167 );
168
169 END IF;
170
171 END Build_Child_VS_Select_Exprs;
172
173
174 /*-----------------------------------------------------------------------------
175
176 DESCRIPTION
177
178 Inserts a space before an ORDER BY clause, so that order by elimination
179 takes place for inner query blocks.
180
181 BUG FIX
182 6148833
183
184 PARAMETERS
185 See below.
186
187 -----------------------------------------------------------------------------*/
188 PROCEDURE Insert_Order_By_Space (
189 p_where_order_by IN OUT NOCOPY VARCHAR2
190 )
191 IS
192 BEGIN
193
194 -- Insert a space before an ORDER BY clause, so that ORDER BY elimination
195 -- takes place for inner query blocks
196 p_where_order_by := regexp_replace(
197 p_where_order_by, -- input string
198 '\)(O)', -- pattern to match
199 ') \1', -- replacement string
200 1, -- begin the search at the first character
201 0, -- replaces all occurrences of the match
202 'i'); -- case insensitive matching
203
204 END Insert_Order_By_Space;
205
206 ----------------------------------------------------------------------
207 --R12C
208 -- call this API to delete all visibility for a given Action
209 PROCEDURE Delete_Action_Data_Level (
210 p_api_version IN NUMBER
211 ,p_action_id IN NUMBER
212 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
213 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
214 ,x_return_status OUT NOCOPY VARCHAR2
215 ,x_errorcode OUT NOCOPY NUMBER
216 ,x_msg_count OUT NOCOPY NUMBER
217 ,x_msg_data OUT NOCOPY VARCHAR2
218 ) IS
219
220 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action_Data_Level';
221
222 --we don't use l_api_version yet, but eventually we might:
223 --if we change required parameters, version goes FROM n.x to (n+1).x
224 --if we change optional parameters, version goes FROM x.n to x.(n+1)
225 l_api_version CONSTANT NUMBER := 1.0;
226
227 BEGIN
228 code_debug ( l_api_name || ' Start ');
229 -- Standard start of API savepoint
230 IF FND_API.To_Boolean(p_commit) THEN
231 SAVEPOINT Delete_Action_Data_Level;
232 END IF;
233
234 -- Check for call compatibility
235 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
236 l_api_name, G_PKG_NAME)
237 THEN
238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
239 END IF;
240 -- Initialize message list even though we don't currently use it
241 IF FND_API.To_Boolean(p_init_msg_list) THEN
242 FND_MSG_PUB.Initialize;
243 END IF;
244
245 DELETE FROM EGO_ACTIONS_DL
246 WHERE ACTION_ID = p_action_id;
247
248 -- Standard check of p_commit
249 IF FND_API.To_Boolean(p_commit) THEN
250 COMMIT WORK;
251 END IF;
252 x_return_status := FND_API.G_RET_STS_SUCCESS;
253 code_debug ( l_api_name || ' Exiting with status: '||x_return_status);
254
255 EXCEPTION
256 WHEN OTHERS THEN
257 IF FND_API.To_Boolean(p_commit) THEN
258 ROLLBACK TO Delete_Action_Data_Level;
259 END IF;
260 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
261
262 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
263 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
264 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
265 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
266 FND_MSG_PUB.Add;
267 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
268 ,p_count => x_msg_count
269 ,p_data => x_msg_data);
270
271
272 END Delete_Action_Data_Level;
273
274 ----------------------------------------------------------------------
275
276
277
278 FUNCTION Execute_DDL_And_Return_Err (
279 p_ddl_to_execute IN VARCHAR2
280 )
281 RETURN VARCHAR2
282 IS
283
284 PRAGMA AUTONOMOUS_TRANSACTION;
285 l_sqlerrm VARCHAR2(1000);
286
287 BEGIN
288
289 EXECUTE IMMEDIATE p_ddl_to_execute;
290 RETURN NULL;
291
292 EXCEPTION
293 WHEN OTHERS THEN
294 l_sqlerrm := SQLERRM;
295 RETURN l_sqlerrm;
296
297 END Execute_DDL_And_Return_Err;
298
299 --new function created to use ad_ddl
300 ----bugfix 11907422 for 12.2 AD_DDL changes
301 FUNCTION Execute_AD_DDL_And_Return_Err (
302 p_ddl_sql IN VARCHAR2,
303 p_object_owner IN VARCHAR2,
304 p_object_name IN VARCHAR2,
305 p_ad_ddl_cmd IN VARCHAR2
306 )
307 RETURN VARCHAR2
308 IS
309
310 PRAGMA AUTONOMOUS_TRANSACTION;
311 l_sqlerrm VARCHAR2(1000);
312
313 fnd_apps_schema VARCHAR2(30) := NULL;
314 h_status VARCHAR2(2000);
315 h_industry VARCHAR2(2000);
316 h_x BOOLEAN;
317
318
319 BEGIN
320
321
322 h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
323
324 AD_DDL.DO_DDL(fnd_apps_schema, p_object_owner, p_ad_ddl_cmd,p_ddl_sql,p_object_name);
325 RETURN NULL;
326
327 EXCEPTION
328 WHEN OTHERS THEN
329 l_sqlerrm := SQLERRM||AD_DDL.ERROR_BUF;
330 RETURN l_sqlerrm;
331
332 END Execute_AD_DDL_And_Return_Err;
333
334 ---------------------------------------------------------------------
335 -- Requirement: bug: 3542670
336 --
337 -- Function: To return the where clause from long column as VARCHAR2
338 -- In case of any exceptions, NULL is returned
339 --
340 -- Parameters:
341 -- IN
342 -- p_value_set_id : value set id
343 -- OUT
344 -- NONE
345 --
346 ---------------------------------------------------------------------
347 FUNCTION get_vs_table_where_clause (p_value_set_id IN NUMBER)
348 RETURN VARCHAR2 IS
349 l_addl_where_clause LONG;
350 BEGIN
351 SELECT additional_where_clause
352 INTO l_addl_where_clause
353 FROM fnd_flex_validation_tables
354 WHERE flex_value_set_id = p_value_set_id;
355 RETURN l_addl_where_clause;
356 EXCEPTION
357 WHEN OTHERS THEN
358 RETURN NULL;
359 END get_vs_table_where_clause;
360
361 ---------------------------------------------------------------------
362 -- Requirement: bug: 3542670
363 --
364 -- Function: To get the validation type of a value set.
365 -- If the user passes value_set_id and value_set_name,
366 -- value_set_id takes precedence.
367 --
368 -- Parameters:
369 -- IN
370 -- p_value_set_id : value set id
371 -- p_value_set_name : value set name
372 -- OUT
373 -- NONE
374 --
375 ---------------------------------------------------------------------
376 FUNCTION get_vs_validation_type (p_value_set_id IN NUMBER
377 ,p_value_set_name IN VARCHAR2
378 ) RETURN VARCHAR2 IS
379 l_return_value fnd_flex_value_sets.validation_type%TYPE;
380 BEGIN
381 l_return_value := NULL;
382 IF p_value_set_id IS NOT NULL THEN
383 SELECT validation_type
384 INTO l_return_value
385 FROM fnd_flex_value_sets
386 WHERE flex_value_set_id = p_value_set_id;
387 ELSIF p_value_set_name IS NOT NULL THEN
388 SELECT validation_type
389 INTO l_return_value
390 FROM fnd_flex_value_sets
391 WHERE flex_value_set_name = p_value_set_name;
392 END IF;
393 RETURN l_return_value;
394 EXCEPTION
395 WHEN OTHERS THEN
396 RETURN l_return_value;
397 END get_vs_validation_type;
398
399
400 ------------------------------------------------------------------------------------------
401 -- Function: To return whether a record exists for the given unique key combination
402 -- in FND and EGO Tables
403 -- If the table is not defined, NULL is returned
404 --
405 -- Parameters:
406 -- IN
407 -- p_context: ATTRIBUTE or ATTRIBUTE GROUP
408 -- p_application_id application_id
409 -- p_attr_group_type Attribute Group Type
410 -- p_attr_group_name Attribute Group Name
411 -- p_internal_name Intenral Name of Either Attribute or Attribute group.
412 -- OUT
413 -- x_fnd_exists : Y if record exists else N
414 -- x_ego_exists : Y if record exists else N
415 ------------------------------------------------------------------------------------------
416 PROCEDURE Get_fnd_ego_record_exists (
417 p_context IN VARCHAR2
418 ,p_application_id IN NUMBER
419 ,p_attr_group_type IN VARCHAR2
420 ,p_attr_group_name IN VARCHAR2
421 ,p_internal_name IN VARCHAR2
422 ,x_fnd_exists OUT NOCOPY VARCHAR2
423 ,x_ego_exists OUT NOCOPY VARCHAR2
424 )IS
425
426 BEGIN
427
428 IF (p_context = 'ATTRIBUTE GROUP') THEN
429 BEGIN
430 SELECT 'Y' INTO x_fnd_exists
431 FROM FND_DESCR_FLEX_CONTEXTS
432 WHERE APPLICATION_ID = p_application_id
433 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
434 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name;
435 EXCEPTION
436 WHEN OTHERS THEN
437 x_fnd_exists :='N';
438 END;
439 BEGIN
440 SELECT 'Y' INTO x_ego_exists
441 FROM EGO_FND_DSC_FLX_CTX_EXT
442 WHERE APPLICATION_ID = p_application_id
443 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
444 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name;
445 EXCEPTION
446 WHEN OTHERS THEN
447 x_ego_exists :='N';
448 END;
449 ELSIF (p_context = 'ATTRIBUTE') THEN
450 BEGIN
451 SELECT 'Y' INTO x_fnd_exists
452 FROM FND_DESCR_FLEX_COLUMN_USAGES
453 WHERE APPLICATION_ID = p_application_id
454 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
455 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
456 AND END_USER_COLUMN_NAME = p_internal_name;
457 EXCEPTION
458 WHEN OTHERS THEN
459 x_fnd_exists :='N';
460 END;
461 BEGIN
462 SELECT 'Y' INTO x_ego_exists
463 FROM EGO_FND_DF_COL_USGS_EXT ext
464 ,FND_DESCR_FLEX_COLUMN_USAGES fl_col
465 WHERE ext.APPLICATION_ID (+) = fl_col.APPLICATION_ID
466 AND ext.DESCRIPTIVE_FLEXFIELD_NAME (+) = fl_col.DESCRIPTIVE_FLEXFIELD_NAME
467 AND ext.DESCRIPTIVE_FLEX_CONTEXT_CODE (+) = fl_col.DESCRIPTIVE_FLEX_CONTEXT_CODE
468 AND ext.APPLICATION_COLUMN_NAME (+) = fl_col.APPLICATION_COLUMN_NAME
469 AND ext.APPLICATION_ID = p_application_id
470 AND ext.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
471 AND ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
472 AND fl_col.END_USER_COLUMN_NAME = p_internal_name;
473 EXCEPTION
474 WHEN OTHERS THEN
475 x_ego_exists:='N';
476 END;
477 END IF;
478
479
480 EXCEPTION
481 WHEN OTHERS THEN
482 x_fnd_exists := NULL;
483 x_ego_exists := NULL;
484 END Get_fnd_ego_record_exists;
485
486 --Bug 5443697
487 ------------------------------------------------------------------------------------------
488 -- Procedure: To set the variable x_start_num to 'Y' or 'N' based in whether the
489 -- String that is passed contains Number as the starting character.
490 --
491 -- Parameters:
492 -- IN
493 -- p_internal_name: the internal name of the Attribute group/Attribute
494 -- OUT
495 -- x_start_num : Y if the starting character is number else N
496 ------------------------------------------------------------------------------------------
497
498 PROCEDURE has_Num_Start_char (
499 p_internal_name IN VARCHAR2,
500 x_start_num OUT NOCOPY VARCHAR2
501 )IS
502 l_start_char VARCHAR2(10);
503 l_internal_name VARCHAR2 (1000);
504
505 BEGIN
506 l_internal_name:=p_internal_name;
507 IF (l_internal_name IS null) THEN
508 x_start_num :='N';
509 END IF;
510 l_internal_name:=trim(l_internal_name);
511 l_start_char:=substr(l_internal_name,1,1);
512
513 IF l_start_char IN ('0','1','2','3','4','5','6','7','8','9') THEN
514 x_start_num := 'Y';
515 ELSE
516 x_start_num :='N';
517 END IF;
518 EXCEPTION
519 WHEN OTHERS THEN
520 x_start_num:='N';
521 NULL;
522 END has_Num_Start_char;
523
524 --Bug 5443697
525 ------------------------------------------------------------------------------------------
526 -- Procedure: To set the variable x_start_num to 'Y' or 'N' based in whether the
527 -- String that is passed contains under score as the starting character.
528 --
529 -- Parameters:
530 -- IN
531 -- p_internal_name: the internal name of the Attribute group/Attribute
532 -- p_char_set: the character set to be checked
533 -- OUT
534 -- x_start_und_sc : Y if the starting character is equal to the p_char_set else N
535 ------------------------------------------------------------------------------------------
536
537 PROCEDURE has_Given_Char_As_Start_char (
538 p_internal_name IN VARCHAR2,
539 p_char_set IN VARCHAR2,
540 x_start_und_sc OUT NOCOPY VARCHAR2
541 )IS
542 l_start_char VARCHAR2(10);
543 l_internal_name VARCHAR2 (1000);
544
545 BEGIN
546 l_internal_name:=p_internal_name;
547 IF (l_internal_name IS null) THEN
548 x_start_und_sc :='N';
549 END IF;
550 l_internal_name:=trim(l_internal_name);
551 l_start_char:=substr(l_internal_name,1,1);
552
553 IF (l_start_char = p_char_set) THEN
554 x_start_und_sc := 'Y';
555 ELSE
556 x_start_und_sc :='N';
557 END IF;
558 EXCEPTION
559 WHEN OTHERS THEN
560 x_start_und_sc:='N';
561 NULL;
562 END has_Given_Char_As_Start_char;
563
564
565
566 ---------------------------------------------------------------------
567 -- Requirement: bug: 3542670
568 --
569 -- Function: To process value set values.
570 -- Given all the parameters, the data is inserted into
571 -- FND_FLEX_VALUES and FND_FLEX_VALUES_TL
572 --
573 -- Parameters:
574 -- IN
575 -- p_transaction_type : CREATE, UPDATE
576 -- p_value_set_name : value set name
577 -- p_internal_name : flex value
578 -- p_display_name : flex value meaning
579 -- p_description : flex value description
580 -- p_sequence : sequence of display -- APC column
581 -- p_start_date : start date
582 -- p_end_date : end date
583 -- p_enabled : enabled flag
584 -- OUT
585 -- x_return_status OUT NOCOPY VARCHAR2
586 --
587 ---------------------------------------------------------------------
588 PROCEDURE Process_Value_Set_Val (
589 p_transaction_type IN VARCHAR2
590 ,p_value_set_name IN VARCHAR2
591 ,p_internal_name IN VARCHAR2
592 ,p_display_name IN VARCHAR2
593 ,p_description IN VARCHAR2
594 ,p_sequence IN NUMBER
595 ,p_start_date IN DATE
596 ,p_end_date IN DATE
597 ,p_enabled IN VARCHAR2
598 ,p_owner IN NUMBER DEFAULT NULL
599 ,x_return_status OUT NOCOPY VARCHAR2
600 ) IS
601
602 l_api_name VARCHAR2(30);
603 l_flex_value_id FND_FLEX_VALUES.flex_value_id%TYPE;
604 l_value_set_id FND_FLEX_VALUES.flex_value_set_id%TYPE;
605 l_Sysdate DATE;
606 l_rowid VARCHAR2(100);
607
608 l_validation_type fnd_flex_value_sets.validation_type%TYPE;
609 l_storage_value VARCHAR2(32767);
610 l_msg_count NUMBER;
611 l_msg_data VARCHAR2(32767);
612 l_owner NUMBER;
613 --bug 13629961
614 l_rec_fnd_flex_values FND_FLEX_VALUES%ROWTYPE;
615
616 BEGIN
617
618 l_api_name := 'PVT_Process_Value_Set_Val';
619 code_debug (l_api_name||' invoked with parameters -- p_transaction_type: '||p_transaction_type);
620 code_debug (' p_value_set_name: '||p_value_set_name||' p_internal_name: '||p_internal_name||' p_display_name: '||p_display_name);
621 code_debug (' p_sequence: '||p_sequence||' p_start_date: '||p_start_date||' p_end_date: '||p_end_date);
622 code_debug (' p_enabled: '||p_enabled||' p_description: '||p_description);
623
624 l_validation_type := get_vs_validation_type (p_value_set_id => NULL
625 ,p_value_set_name => p_value_set_name
626 );
627
628 IF (p_owner IS NULL OR p_owner = -1) THEN
629 l_owner := g_current_user_id;
630 ELSE
631 l_owner := p_owner;
632 END IF;
633
634 IF NVL(l_validation_type, 'A') NOT IN (G_TABLE_VALIDATION_CODE,
635 G_INDEPENDENT_VALIDATION_CODE,
636 G_NONE_VALIDATION_CODE,
637 G_TRANS_IND_VALIDATION_CODE) THEN
638 -- not currently supported in EGO
639 x_return_status := FND_API.G_RET_STS_ERROR;
640 END IF;
641
642 -- IF l_validation_type = G_TRANS_IND_VALIDATION_CODE THEN
643 l_Sysdate := SYSDATE;
644 SELECT flex_value_set_id
645 INTO l_value_set_id
646 FROM fnd_flex_value_sets
647 WHERE flex_value_set_name = p_value_set_name;
648
649 IF p_transaction_type = 'CREATE' THEN
650 -- create an translatable independent value set
651 SELECT fnd_flex_values_s.NEXTVAL
652 INTO l_flex_value_id
653 FROM dual;
654 FND_FLEX_VALUES_PKG.INSERT_ROW
655 (x_rowid => l_rowid
656 ,x_flex_value_id => l_flex_value_id
657 ,x_attribute_sort_order => NULL
658 ,x_flex_value_set_id => l_value_set_id
659 ,x_flex_value => p_internal_name
660 ,x_enabled_flag => NVL(p_enabled,'Y')
661 ,x_summary_flag => 'N'
662 ,x_start_date_active => p_start_date
663 ,x_end_date_active => p_end_date
664 ,x_parent_flex_value_low => NULL
665 ,x_parent_flex_value_high => NULL
666 ,x_structured_hierarchy_level => NULL
667 ,x_hierarchy_level => NULL
668 ,x_compiled_value_attributes => NULL
669 ,x_value_category => NULL
670 ,x_attribute1 => NULL
671 ,x_attribute2 => NULL
672 ,x_attribute3 => NULL
673 ,x_attribute4 => NULL
674 ,x_attribute5 => NULL
675 ,x_attribute6 => NULL
676 ,x_attribute7 => NULL
677 ,x_attribute8 => NULL
678 ,x_attribute9 => NULL
679 ,x_attribute10 => NULL
680 ,x_attribute11 => NULL
681 ,x_attribute12 => NULL
682 ,x_attribute13 => NULL
683 ,x_attribute14 => NULL
684 ,x_attribute15 => NULL
685 ,x_attribute16 => NULL
686 ,x_attribute17 => NULL
687 ,x_attribute18 => NULL
688 ,x_attribute19 => NULL
689 ,x_attribute20 => NULL
690 ,x_attribute21 => NULL
691 ,x_attribute22 => NULL
692 ,x_attribute23 => NULL
693 ,x_attribute24 => NULL
694 ,x_attribute25 => NULL
695 ,x_attribute26 => NULL
696 ,x_attribute27 => NULL
697 ,x_attribute28 => NULL
698 ,x_attribute29 => NULL
699 ,x_attribute30 => NULL
700 ,x_attribute31 => NULL
701 ,x_attribute32 => NULL
702 ,x_attribute33 => NULL
703 ,x_attribute34 => NULL
704 ,x_attribute35 => NULL
705 ,x_attribute36 => NULL
706 ,x_attribute37 => NULL
707 ,x_attribute38 => NULL
708 ,x_attribute39 => NULL
709 ,x_attribute40 => NULL
710 ,x_attribute41 => NULL
711 ,x_attribute42 => NULL
712 ,x_attribute43 => NULL
713 ,x_attribute44 => NULL
714 ,x_attribute45 => NULL
715 ,x_attribute46 => NULL
716 ,x_attribute47 => NULL
717 ,x_attribute48 => NULL
718 ,x_attribute49 => NULL
719 ,x_attribute50 => NULL
720 ,x_flex_value_meaning => p_display_name
721 ,x_description => p_description
722 ,x_creation_date => l_sysdate
723 ,x_created_by => l_owner
724 ,x_last_update_date => l_sysdate
725 ,x_last_updated_by => l_owner
726 ,x_last_update_login => G_CURRENT_LOGIN_ID);
727
728 ELSIF p_transaction_type = 'UPDATE' THEN
729 --bug 13629961
730 --When some Attribute has value, it is overridden with NULL value,hence getting the value from table and resetting
731 SELECT *
732 INTO l_rec_fnd_flex_values
733 FROM fnd_flex_values
734 WHERE flex_value_set_id = l_value_set_id
735 AND flex_value = p_internal_name;
736
737 FND_FLEX_VALUES_PKG.UPDATE_ROW
738 (x_flex_value_id =>l_rec_fnd_flex_values.FLEX_VALUE_ID
739 ,x_attribute_sort_order => NULL
740 ,x_flex_value_set_id => l_value_set_id
741 ,x_flex_value => p_internal_name
742 ,x_enabled_flag => p_enabled
743 ,x_summary_flag => 'N'
744 ,x_start_date_active => p_start_date
745 ,x_end_date_active => p_end_date
746 ,x_parent_flex_value_low =>l_rec_fnd_flex_values.PARENT_FLEX_VALUE_LOW
747 ,x_parent_flex_value_high =>l_rec_fnd_flex_values.PARENT_FLEX_VALUE_HIGH
748 ,x_structured_hierarchy_level =>l_rec_fnd_flex_values.STRUCTURED_HIERARCHY_LEVEL
749 ,x_hierarchy_level => l_rec_fnd_flex_values.HIERARCHY_LEVEL
750 ,x_compiled_value_attributes =>l_rec_fnd_flex_values.COMPILED_VALUE_ATTRIBUTES
751 ,x_value_category => l_rec_fnd_flex_values.VALUE_CATEGORY
752 ,x_attribute1 => l_rec_fnd_flex_values.ATTRIBUTE1
753 ,x_attribute2 => l_rec_fnd_flex_values.ATTRIBUTE2
754 ,x_attribute3 => l_rec_fnd_flex_values.ATTRIBUTE3
755 ,x_attribute4 => l_rec_fnd_flex_values.ATTRIBUTE4
756 ,x_attribute5 => l_rec_fnd_flex_values.ATTRIBUTE5
757 ,x_attribute6 => l_rec_fnd_flex_values.ATTRIBUTE6
758 ,x_attribute7 => l_rec_fnd_flex_values.ATTRIBUTE7
759 ,x_attribute8 => l_rec_fnd_flex_values.ATTRIBUTE8
760 ,x_attribute9 => l_rec_fnd_flex_values.ATTRIBUTE9
761 ,x_attribute10 => l_rec_fnd_flex_values.ATTRIBUTE10
762 ,x_attribute11 => l_rec_fnd_flex_values.ATTRIBUTE11
763 ,x_attribute12 => l_rec_fnd_flex_values.ATTRIBUTE12
764 ,x_attribute13 => l_rec_fnd_flex_values.ATTRIBUTE13
765 ,x_attribute14 => l_rec_fnd_flex_values.ATTRIBUTE14
766 ,x_attribute15 => l_rec_fnd_flex_values.ATTRIBUTE15
767 ,x_attribute16 => l_rec_fnd_flex_values.ATTRIBUTE16
768 ,x_attribute17 => l_rec_fnd_flex_values.ATTRIBUTE17
769 ,x_attribute18 => l_rec_fnd_flex_values.ATTRIBUTE18
770 ,x_attribute19 => l_rec_fnd_flex_values.ATTRIBUTE19
771 ,x_attribute20 => l_rec_fnd_flex_values.ATTRIBUTE20
772 ,x_attribute21 => l_rec_fnd_flex_values.ATTRIBUTE21
773 ,x_attribute22 => l_rec_fnd_flex_values.ATTRIBUTE22
774 ,x_attribute23 => l_rec_fnd_flex_values.ATTRIBUTE23
775 ,x_attribute24 => l_rec_fnd_flex_values.ATTRIBUTE24
776 ,x_attribute25 => l_rec_fnd_flex_values.ATTRIBUTE25
777 ,x_attribute26 => l_rec_fnd_flex_values.ATTRIBUTE26
778 ,x_attribute27 => l_rec_fnd_flex_values.ATTRIBUTE27
779 ,x_attribute28 => l_rec_fnd_flex_values.ATTRIBUTE28
780 ,x_attribute29 => l_rec_fnd_flex_values.ATTRIBUTE29
781 ,x_attribute30 => l_rec_fnd_flex_values.ATTRIBUTE30
782 ,x_attribute31 => l_rec_fnd_flex_values.ATTRIBUTE31
783 ,x_attribute32 => l_rec_fnd_flex_values.ATTRIBUTE32
784 ,x_attribute33 => l_rec_fnd_flex_values.ATTRIBUTE33
785 ,x_attribute34 => l_rec_fnd_flex_values.ATTRIBUTE34
786 ,x_attribute35 => l_rec_fnd_flex_values.ATTRIBUTE35
787 ,x_attribute36 => l_rec_fnd_flex_values.ATTRIBUTE36
788 ,x_attribute37 => l_rec_fnd_flex_values.ATTRIBUTE37
789 ,x_attribute38 => l_rec_fnd_flex_values.ATTRIBUTE38
790 ,x_attribute39 => l_rec_fnd_flex_values.ATTRIBUTE39
791 ,x_attribute40 => l_rec_fnd_flex_values.ATTRIBUTE40
792 ,x_attribute41 => l_rec_fnd_flex_values.ATTRIBUTE41
793 ,x_attribute42 => l_rec_fnd_flex_values.ATTRIBUTE42
794 ,x_attribute43 => l_rec_fnd_flex_values.ATTRIBUTE43
795 ,x_attribute44 => l_rec_fnd_flex_values.ATTRIBUTE44
796 ,x_attribute45 => l_rec_fnd_flex_values.ATTRIBUTE45
797 ,x_attribute46 => l_rec_fnd_flex_values.ATTRIBUTE46
798 ,x_attribute47 => l_rec_fnd_flex_values.ATTRIBUTE47
799 ,x_attribute48 => l_rec_fnd_flex_values.ATTRIBUTE48
800 ,x_attribute49 => l_rec_fnd_flex_values.ATTRIBUTE49
801 ,x_attribute50 => l_rec_fnd_flex_values.ATTRIBUTE50
802 ,x_flex_value_meaning => p_display_name
803 ,x_description => p_description
804 ,x_last_update_date => l_sysdate
805 ,x_last_updated_by => l_owner
806 ,x_last_update_login => G_CURRENT_LOGIN_ID);
807 END IF;
808
809 /***
810 this is not working right now
811 logged bug 3957430 against FND
812
813 ELSE -- value set of type Independent.
814 IF p_transaction_type = 'CREATE' THEN
815 code_debug (l_api_name||' calling FND_FLEX_VAL_API.create_independent_vset_value ');
816 FND_FLEX_VAL_API.create_independent_vset_value
817 (p_flex_value_set_name => p_value_set_name
818 ,p_flex_value => p_internal_name
819 ,p_description => p_description
820 ,p_enabled_flag => p_enabled
821 ,p_start_date_active => p_start_date
822 ,p_end_date_active => p_end_date
823 -- allow default values
824 -- ,p_summary_flag IN VARCHAR2 DEFAULT 'N',
825 -- ,p_structured_hierarchy_level IN NUMBER DEFAULT NULL,
826 -- ,p_hierarchy_level IN VARCHAR2 DEFAULT NULL,
827 ,x_storage_value => l_storage_value);
828 code_debug (l_api_name||' returning FND_FLEX_VAL_API.create_independent_vset_value with value '||l_storage_value );
829 ELSIF p_transaction_type = 'UPDATE' THEN
830 code_debug (l_api_name||' calling FND_FLEX_VAL_API.update_independent_vset_value ');
831 FND_FLEX_VAL_API.update_independent_vset_value
832 (p_flex_value_set_name => p_value_set_name
833 ,p_flex_value => p_internal_name
834 ,p_description => p_description
835 ,p_enabled_flag => p_enabled
836 ,p_start_date_active => p_start_date
837 ,p_end_date_active => p_end_date
838 -- allow default values
839 -- ,p_summary_flag IN VARCHAR2 DEFAULT 'N',
840 -- ,p_structured_hierarchy_level IN NUMBER DEFAULT NULL,
841 -- ,p_hierarchy_level IN VARCHAR2 DEFAULT NULL,
842 ,x_storage_value => l_storage_value);
843 code_debug (l_api_name||' returning FND_FLEX_VAL_API.update_independent_vset_value with value '||l_storage_value );
844 END IF;
845 END IF;
846 ***/
847
848 code_debug (l_api_name||' calling proces_vs_value_sequence ');
849 process_vs_value_sequence
850 (p_api_version => 1.0
851 ,p_transaction_type => p_transaction_type
852 ,p_value_set_id => NULL
853 ,p_value_set_name => p_value_set_name
854 ,p_value_set_value_id => l_flex_value_id
855 ,p_value_set_value => p_internal_name
856 ,p_sequence => p_sequence
857 ,p_owner => l_owner
858 ,p_init_msg_list => fnd_api.g_FALSE
859 ,p_commit => fnd_api.g_FALSE
860 ,x_return_status => x_return_status
861 ,x_msg_count => l_msg_count
862 ,x_msg_data => l_msg_data
863 );
864 code_debug (l_api_name||' returning proces_vs_value_sequence with status '||x_return_status);
865
866 EXCEPTION
867 WHEN OTHERS THEN
868 code_debug (l_api_name||' EXCEPTION -- OTHERS ');
869 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
870 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
871 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
872 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
873 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
874 FND_MSG_PUB.Add;
875 END Process_Value_Set_Val;
876
877
878
879 ----------------------------------------------------------------------
880 PROCEDURE Get_Attr_Group_Comb_PKs(
881 p_attr_group_id IN NUMBER
882 , p_application_id OUT NOCOPY NUMBER
883 , p_attr_grp_type OUT NOCOPY VARCHAR2
884 , p_attr_grp_name OUT NOCOPY VARCHAR2
885 )IS
886 CURSOR get_attr_details IS
887 SELECT application_id , descriptive_flexfield_name ,descriptive_flex_context_code
888 FROM ego_fnd_dsc_flx_ctx_ext
889 WHERE attr_group_id = p_attr_group_id;
890 BEGIN
891 OPEN get_attr_details;
892 FETCH get_attr_details
893 INTO p_application_id , p_attr_grp_type , p_attr_grp_name;
894 IF get_attr_details%NOTFOUND THEN
895 p_application_id := NULL;
896 p_attr_grp_type := NULL;
897 p_attr_grp_name := NULL;
898 END IF;
899 CLOSE get_attr_details;
900 EXCEPTION
901 WHEN OTHERS THEN
902 IF get_attr_details%ISOPEN THEN
903 CLOSE get_attr_details;
904 END IF;
905 p_application_id := NULL;
906 p_attr_grp_type := NULL;
907 p_attr_grp_name := NULL;
908 RAISE;
909 END Get_Attr_Group_Comb_PKs;
910
911 --------------------------------------------------------------------
912
913 PROCEDURE Delete_Attribute_Internal (
914 p_application_id IN NUMBER
915 ,p_attr_group_type IN VARCHAR2
916 ,p_attr_group_name IN VARCHAR2
917 ,p_attr_name IN VARCHAR2
918 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
919 ,x_return_status OUT NOCOPY VARCHAR2
920 ,x_errorcode OUT NOCOPY NUMBER
921 ,x_msg_count OUT NOCOPY NUMBER
922 ,x_msg_data OUT NOCOPY VARCHAR2
923 ) IS
924
925 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute_Internal';
926 l_app_col_name VARCHAR2(30);
927
928 BEGIN
929
930 -- Standard start of API savepoint
931 IF FND_API.TO_BOOLEAN(p_commit) THEN
932 SAVEPOINT Delete_Attribute_PRV;
933 END IF;
934
935 SELECT APPLICATION_COLUMN_NAME
936 INTO l_app_col_name
937 FROM FND_DESCR_FLEX_COLUMN_USAGES
938 WHERE APPLICATION_ID = p_application_id
939 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
940 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
941 AND END_USER_COLUMN_NAME = p_attr_name;
942
943 DELETE FROM FND_DESCR_FLEX_COLUMN_USAGES
944 WHERE APPLICATION_ID = p_application_id
945 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
946 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
947 AND END_USER_COLUMN_NAME = p_attr_name;
948
949 DELETE FROM FND_DESCR_FLEX_COL_USAGE_TL
950 WHERE APPLICATION_ID = p_application_id
951 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
952 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
953 AND APPLICATION_COLUMN_NAME = l_app_col_name;
954
955 DELETE FROM EGO_FND_DF_COL_USGS_EXT
956 WHERE APPLICATION_ID = p_application_id
957 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
958 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
959 AND APPLICATION_COLUMN_NAME = l_app_col_name;
960
961 -- Standard check of p_commit
962 IF FND_API.To_Boolean(p_commit) THEN
963 COMMIT WORK;
964 END IF;
965
966 x_return_status := FND_API.G_RET_STS_SUCCESS;
967
968 EXCEPTION
969 WHEN OTHERS THEN
970 IF FND_API.TO_BOOLEAN(p_commit) THEN
971 ROLLBACK TO Delete_Attribute_PRV;
972 END IF;
973 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
974
975 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
976 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
977 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
978 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
979 FND_MSG_PUB.Add;
980 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
981 ,p_count => x_msg_count
982 ,p_data => x_msg_data);
983
984 END Delete_Attribute_Internal;
985
986 ----------------------------------------------------------------------
987
988 PROCEDURE Delete_Attr_Group_Internal (
989 p_application_id IN NUMBER
990 ,p_attr_group_type IN VARCHAR2
991 ,p_attr_group_name IN VARCHAR2
992 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
993 ,x_return_status OUT NOCOPY VARCHAR2
994 ,x_errorcode OUT NOCOPY NUMBER
995 ,x_msg_count OUT NOCOPY NUMBER
996 ,x_msg_data OUT NOCOPY VARCHAR2
997 ) IS
998
999 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attr_Group_Internal';
1000
1001 CURSOR attrs IS
1002 SELECT END_USER_COLUMN_NAME
1003 FROM FND_DESCR_FLEX_COLUMN_USAGES
1004 WHERE APPLICATION_ID = p_application_id
1005 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
1006 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
1007
1008 BEGIN
1009
1010 -- Standard start of API savepoint
1011 IF FND_API.TO_BOOLEAN(p_commit) THEN
1012 SAVEPOINT Delete_Attribute_Group_PVT;
1013 END IF;
1014
1015 FOR attrs_rec IN attrs LOOP
1016
1017 Delete_Attribute_Internal(p_application_id, p_attr_group_type, p_attr_group_name,
1018 attrs_rec.end_user_column_name, p_commit,
1019 x_return_status, x_errorcode, x_msg_count, x_msg_data);
1020
1021 END LOOP;
1022
1023 DELETE FROM FND_DESCR_FLEX_CONTEXTS
1024 WHERE APPLICATION_ID = p_application_id
1025 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
1026 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
1027
1028 DELETE FROM FND_DESCR_FLEX_CONTEXTS_TL
1029 WHERE APPLICATION_ID = p_application_id
1030 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
1031 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
1032
1033 DELETE FROM EGO_FND_DSC_FLX_CTX_EXT
1034 WHERE APPLICATION_ID = p_application_id
1035 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
1036 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
1037
1038 DELETE FROM EGO_ATTR_GROUP_DL
1039 WHERE ATTR_GROUP_ID = (SELECT ATTR_GROUP_ID
1040 FROM EGO_ATTR_GROUPS_V
1041 WHERE APPLICATION_ID = p_application_id
1042 AND ATTR_GROUP_TYPE = p_attr_group_type
1043 AND ATTR_GROUP_NAME = p_attr_group_name);
1044
1045 -- Standard check of p_commit
1046 IF FND_API.To_Boolean(p_commit) THEN
1047 COMMIT WORK;
1048 END IF;
1049
1050 x_return_status := FND_API.G_RET_STS_SUCCESS;
1051
1052 EXCEPTION
1053 WHEN OTHERS THEN
1054 IF FND_API.TO_BOOLEAN(p_commit) THEN
1055 ROLLBACK TO Delete_Attribute_Group_PVT;
1056 END IF;
1057 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1058 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
1059 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
1060 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
1061 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
1062 FND_MSG_PUB.Add;
1063 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
1064 ,p_count => x_msg_count
1065 ,p_data => x_msg_data);
1066
1067 END Delete_Attr_Group_Internal;
1068
1069 ----------------------------------------------------------------------
1070
1071 FUNCTION Get_Association_Id_From_PKs (
1072 p_object_id IN NUMBER
1073 ,p_classification_code IN VARCHAR2
1074 ,p_attr_group_id IN NUMBER
1075 ) RETURN NUMBER
1076 IS
1077
1078 l_association_id NUMBER;
1079
1080 BEGIN
1081
1082 IF p_object_id IS NOT NULL THEN
1083 SELECT ASSOCIATION_ID
1084 INTO l_association_id
1085 FROM EGO_OBJ_AG_ASSOCS_B
1086 WHERE OBJECT_ID = p_object_id
1087 AND CLASSIFICATION_CODE = p_classification_code
1088 AND ATTR_GROUP_ID = p_attr_group_id;
1089 END IF;
1090
1091 RETURN l_association_id;
1092
1093 EXCEPTION
1094 WHEN NO_DATA_FOUND THEN
1095 RETURN NULL;
1096
1097 END Get_Association_Id_From_PKs;
1098
1099 ----------------------------------------------------------------------
1100
1101 FUNCTION Get_Page_Id_From_PKs (
1102 p_object_id IN NUMBER
1103 ,p_classification_code IN VARCHAR2
1104 ,p_page_internal_name IN VARCHAR2
1105 ) RETURN NUMBER
1106 IS
1107
1108 l_page_id NUMBER;
1109
1110 BEGIN
1111
1112 IF p_object_id IS NOT NULL THEN
1113 SELECT PAGE_ID
1114 INTO l_page_id
1115 FROM EGO_PAGES_B
1116 WHERE OBJECT_ID = p_object_id
1117 AND CLASSIFICATION_CODE = p_classification_code
1118 AND INTERNAL_NAME = p_page_internal_name;
1119 END IF;
1120
1121 RETURN l_page_id;
1122
1123 EXCEPTION
1124 WHEN NO_DATA_FOUND THEN
1125 RETURN NULL;
1126
1127 END Get_Page_Id_From_PKs;
1128
1129 ----------------------------------------------------------------------
1130
1131 FUNCTION Get_PKs_From_Attr_Group_Id (
1132 p_attr_group_id IN NUMBER
1133 )
1134 RETURN EGO_VARCHAR_TBL_TYPE
1135 IS
1136
1137 l_application_id NUMBER;
1138 l_attr_group_type VARCHAR2(40);
1139 l_attr_group_name VARCHAR2(30);
1140
1141 BEGIN
1142
1143 SELECT APPLICATION_ID, DESCRIPTIVE_FLEXFIELD_NAME, DESCRIPTIVE_FLEX_CONTEXT_CODE
1144 INTO l_application_id, l_attr_group_type, l_attr_group_name
1145 FROM EGO_FND_DSC_FLX_CTX_EXT
1146 WHERE ATTR_GROUP_ID = p_attr_group_id;
1147
1148 RETURN EGO_VARCHAR_TBL_TYPE(TO_CHAR(l_application_id), l_attr_group_type, l_attr_group_name);
1149
1150 EXCEPTION
1151 WHEN NO_DATA_FOUND THEN
1152 RETURN NULL;
1153
1154 END Get_PKs_From_Attr_Group_Id;
1155
1156 ----------------------------------------------------------------------
1157
1158 FUNCTION Check_Associations_Exist (
1159 p_application_id IN NUMBER
1160 ,p_attr_group_type IN VARCHAR2
1161 ,p_attr_group_name IN VARCHAR2
1162 )
1163 RETURN BOOLEAN
1164 IS
1165
1166 l_attr_group_id NUMBER;
1167 l_change_assocs_exist BOOLEAN := FALSE;
1168 l_assocs_num NUMBER := 0;
1169
1170 BEGIN
1171
1172 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
1173 ,p_attr_group_type
1174 ,p_attr_group_name);
1175
1176 SELECT COUNT(*)
1177 INTO l_assocs_num
1178 FROM EGO_OBJ_AG_ASSOCS_B
1179 WHERE ATTR_GROUP_ID = l_attr_group_id
1180 AND ENABLED_FLAG = 'Y';
1181
1182 IF (l_assocs_num > 0) OR (l_change_assocs_exist = TRUE) THEN
1183 RETURN TRUE;
1184 END IF;
1185
1186 RETURN FALSE;
1187
1188 END Check_Associations_Exist;
1189
1190 ---------------------------------------------------------------------
1191 -- Checks if the UOM column exists in the p_table_name --
1192 -- for Attribute value column p_column --
1193 -- bug 3875730 --
1194 ---------------------------------------------------------------------
1195
1196 FUNCTION check_Uom_Column_Exists (
1197 p_column IN VARCHAR2
1198 ,p_table_name IN VARCHAR2
1199 )
1200 RETURN VARCHAR2
1201 IS
1202 l_uom_column_name VARCHAR2(30);
1203 BEGIN
1204
1205 IF ( INSTR (p_column, 'N_EXT_ATTR' ) = 0) THEN
1206
1207 SELECT COLUMN_NAME
1208 INTO l_uom_column_name
1209 FROM FND_COLUMNS
1210 WHERE TABLE_ID =
1211 (SELECT TABLE_ID FROM FND_TABLES
1212 WHERE TABLE_NAME = p_table_name)
1213 AND COLUMN_NAME = 'UOM_'||p_column ;
1214
1215 RETURN l_uom_column_name;
1216
1217 END IF;
1218
1219 RETURN '1' ;
1220
1221 EXCEPTION
1222 WHEN NO_DATA_FOUND THEN
1223 RETURN NULL ;
1224
1225 END check_Uom_Column_Exists;
1226
1227 ---------------------------------------------------------------------
1228 -- Checks if the UOM column is used by any other attribute of this --
1229 -- Attribute Group --
1230 -- bug 3875730 --
1231 ---------------------------------------------------------------------
1232
1233 FUNCTION check_Uom_Col_In_Use (
1234 p_application_id IN NUMBER
1235 ,p_attr_group_type IN VARCHAR2
1236 ,p_attr_group_name IN VARCHAR2
1237 ,p_internal_name IN VARCHAR2
1238 ,p_uom_column_name IN VARCHAR2
1239 )
1240 RETURN VARCHAR2
1241 IS
1242 l_uom_column_name VARCHAR2(300);
1243 BEGIN
1244 SELECT 1
1245 INTO l_uom_column_name
1246 FROM FND_DESCR_FLEX_COLUMN_USAGES
1247 WHERE APPLICATION_ID = p_application_id
1248 AND DESCRIPTIVE_FLEXFIELD_NAME= p_attr_group_type
1249 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
1250 AND END_USER_COLUMN_NAME <> p_internal_name
1251 AND APPLICATION_COLUMN_NAME = p_uom_column_name ;
1252
1253 RETURN l_uom_column_name;
1254
1255 EXCEPTION
1256 WHEN NO_DATA_FOUND THEN
1257 RETURN NULL ;
1258
1259 END check_Uom_Col_In_Use;
1260
1261 ----------------------------------------------------------------------
1262 /*
1263
1264 FUNCTION Get_Ext_Table_Owner (
1265 p_table_name IN VARCHAR2
1266 )
1267 RETURN VARCHAR2
1268 IS
1269
1270 l_table_owner VARCHAR2(30);
1271
1272 BEGIN
1273
1274 SELECT OWNER
1275 INTO l_table_owner
1276 FROM ALL_TABLES
1277 WHERE TABLE_NAME = p_table_name;
1278
1279 RETURN l_table_owner;
1280
1281 EXCEPTION
1282 WHEN NO_DATA_FOUND THEN
1283 RETURN NULL;
1284
1285 END Get_Ext_Table_Owner;
1286 */
1287
1288 ----------------------------------------------------------------------
1289
1290 FUNCTION Get_Application_name (
1291 p_appl_id IN NUMBER
1292 )
1293 RETURN VARCHAR2
1294 IS
1295
1296 l_appl_name VARCHAR2(30);
1297
1298 BEGIN
1299
1300 SELECT APPLICATION_SHORT_NAME
1301 INTO l_appl_name
1302 FROM FND_APPLICATION
1303 WHERE APPLICATION_ID = p_appl_id;
1304
1305 RETURN l_appl_name;
1306
1307 EXCEPTION
1308 WHEN NO_DATA_FOUND THEN
1309 RETURN NULL;
1310
1311 END Get_Application_name;
1312
1313 ----------------------------------------------------------------------
1314
1315 FUNCTION Get_Application_Owner (
1316 p_appl_id IN NUMBER
1317 )
1318 RETURN VARCHAR2
1319 IS
1320
1321 l_schema VARCHAR2(30);
1322 l_status VARCHAR2(1);
1323 l_industry VARCHAR2(1);
1324
1325 BEGIN
1326
1327 IF NOT FND_INSTALLATION.GET_APP_INFO(Get_Application_name(p_appl_id), l_status, l_industry, l_schema)
1328 THEN
1329 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1330 END IF;
1331
1332 IF (l_schema IS NULL)
1333 THEN
1334 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1335 END IF;
1336
1337 RETURN l_schema;
1338
1339 EXCEPTION
1340 WHEN NO_DATA_FOUND THEN
1341 RETURN NULL;
1342
1343 END Get_Application_Owner;
1344
1345 ---------------------------------------------------------------------
1346
1347
1348 FUNCTION Get_Oracle_UserName
1349 RETURN VARCHAR2
1350 IS
1351
1352 l_oracleUser VARCHAR2(30);
1353
1354 BEGIN
1355
1356 SELECT
1357 ORACLE_USERNAME INTO l_oracleUser
1358 FROM
1359 FND_ORACLE_USERID
1360 WHERE
1361 READ_ONLY_FLAG = 'U';
1362
1363 RETURN l_oracleUser;
1364
1365 EXCEPTION
1366 WHEN NO_DATA_FOUND THEN
1367 RETURN NULL;
1368
1369 END Get_Oracle_UserName;
1370
1371 ---------------------------------------------------------------------
1372
1373
1374
1375 FUNCTION Create_Index_For_DBCol (
1376 p_application_id IN NUMBER
1377 ,p_attr_group_type IN VARCHAR2
1378 ,p_attr_group_name IN VARCHAR2
1379 ,p_table_name IN VARCHAR2
1380 ,p_chg_table_name IN VARCHAR2 --R12 for pending table name.
1381 ,p_is_column_indexed IN VARCHAR2 --R12 flag for column of production table
1382 ,p_is_chg_column_indexed IN VARCHAR2 --R12 flag for column of pending table
1383 ,p_column IN VARCHAR2
1384 ,p_is_table_translatable IN BOOLEAN
1385 )
1386 RETURN VARCHAR2
1387 IS
1388
1389 l_table_owner VARCHAR2(30);
1390 l_class_code_column VARCHAR2(30);
1391 l_index_name VARCHAR2(30);
1392 l_chg_index_name VARCHAR2(30);
1393 l_dynamic_sql VARCHAR2(350);
1394 l_chg_dynamic_sql VARCHAR2(350);
1395
1396 h_sql VARCHAR2(32700);
1397 h_x BOOLEAN;
1398 h_status VARCHAR2(2000);
1399 h_industry VARCHAR2(2000);
1400 fnd_apps_schema VARCHAR2(30) := NULL;
1401
1402
1403 BEGIN
1404 -------------------------
1405 -- Get the Table owner --
1406 -------------------------
1407 l_table_owner := Get_Application_Owner(p_appl_id=>p_application_id);
1408 ---------------------------------------------
1409 -- Get the Classification Code column name --
1410 ---------------------------------------------
1411 SELECT CLASSIFICATION_COL_NAME
1412 INTO l_class_code_column
1413 FROM EGO_FND_OBJECTS_EXT
1414 WHERE OBJECT_NAME = (SELECT OBJ_NAME FROM FND_OBJECTS
1415 WHERE OBJECT_ID = (SELECT OBJECT_ID
1416 FROM EGO_OBJECT_EXT_TABLES_B
1417 WHERE EXT_TABLE_NAME = p_table_name));
1418
1419 SELECT EGO_DB_COL_INDEX_S.NEXTVAL INTO l_index_name FROM DUAL;
1420 l_chg_index_name:=l_index_name; --for the index name of pending table.
1421 l_index_name := 'ag_'||p_column||'_n'||l_index_name;
1422 l_chg_index_name := 'ag_pdg_'||p_column||'_n'||l_chg_index_name;--index name for the pending table.
1423
1424 --Creating index on the production table if the column is not already indexed.
1425 IF(p_is_column_indexed IS NULL OR p_is_column_indexed <> 'Y') THEN
1426 l_dynamic_sql := ' CREATE INDEX '||l_table_owner||'.'||l_index_name||
1427 ' ON '||l_table_owner||'.'||p_table_name||' (';
1428
1429 IF l_class_code_column IS NOT NULL THEN
1430 l_dynamic_sql := l_dynamic_sql ||l_class_code_column||', ';
1431 END IF;
1432
1433 IF (p_is_table_translatable) THEN
1434 l_dynamic_sql := l_dynamic_sql||'LANGUAGE , ';
1435 END IF;
1436
1437 l_dynamic_sql := l_dynamic_sql||p_column||') LOCAL COMPUTE STATISTICS';
1438
1439 --bugfix 11907422 for 12.2 AD_DDL changes
1440 --EXECUTE IMMEDIATE l_dynamic_sql;
1441 h_sql := l_dynamic_sql;
1442 h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
1443 AD_DDL.DO_DDL(fnd_apps_schema, l_table_owner, AD_DDL.CREATE_INDEX, h_sql, l_index_name);
1444
1445
1446 END IF;-- IF(p_is_column_indexed IS NULL OR p_is_column_indexed <> 'Y')
1447
1448 --Creating index on the pending table if the column is not already indexed.
1449 IF(p_is_chg_column_indexed IS NULL OR p_is_chg_column_indexed <> 'Y') THEN
1450 l_chg_dynamic_sql := ' CREATE INDEX '||l_table_owner||'.'||l_chg_index_name||
1451 ' ON '||l_table_owner||'.'||p_chg_table_name ||' (';
1452
1453 IF l_class_code_column IS NOT NULL THEN
1454 l_chg_dynamic_sql := l_chg_dynamic_sql ||l_class_code_column||', ';
1455 END IF;
1456 IF (p_is_table_translatable) THEN
1457 l_chg_dynamic_sql := l_chg_dynamic_sql||'LANGUAGE , ';
1458 END IF;
1459
1460 l_chg_dynamic_sql := l_chg_dynamic_sql||p_column||') LOCAL COMPUTE STATISTICS';
1461
1462 --bugfix 11907422 for 12.2 AD_DDL changes
1463 --EXECUTE IMMEDIATE l_chg_dynamic_sql;
1464 h_sql := l_chg_dynamic_sql;
1465 h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
1466 AD_DDL.DO_DDL(fnd_apps_schema, l_table_owner, AD_DDL.CREATE_INDEX, h_sql, l_chg_index_name);
1467
1468 END IF;--IF(p_is_chg_column_indexed IS NULL OR p_is_chg_column_indexed <> 'Y')
1469 RETURN 'Y';
1470
1471 EXCEPTION
1472 WHEN OTHERS THEN
1473 RETURN 'N';
1474 END Create_Index_For_DBCol;
1475
1476 ----------------------------------------------------------------------
1477
1478 FUNCTION Build_Tokenized_URL_Query (
1479 p_attr_group_metadata_obj IN EGO_ATTR_GROUP_METADATA_OBJ
1480 ,p_attr_metadata_obj IN EGO_ATTR_METADATA_OBJ
1481 )
1482 RETURN VARCHAR2
1483 IS
1484
1485 l_head_of_query VARCHAR2(32767);
1486 l_tail_of_query VARCHAR2(32767);
1487 l_has_tokens_left BOOLEAN;
1488 l_token_start_index NUMBER;
1489 l_token_end_index NUMBER;
1490 l_token VARCHAR2(50);
1491 l_replacement_attr_metadata EGO_ATTR_METADATA_OBJ;
1492
1493 BEGIN
1494
1495 l_tail_of_query := p_attr_metadata_obj.INFO_1;
1496
1497 ------------------------------------------
1498 -- If there aren't two different '$' in --
1499 -- the string, then there are no tokens --
1500 ------------------------------------------
1501 l_has_tokens_left := (INSTR(l_tail_of_query, '$') <> 0 AND
1502 INSTR(l_tail_of_query, '$') <> INSTR(l_tail_of_query, '$', -1));
1503
1504 WHILE (l_has_tokens_left)
1505 LOOP
1506
1507 ---------------------------------------
1508 -- Parse out the token for this loop --
1509 ---------------------------------------
1510 l_token_start_index := INSTR(l_tail_of_query, '$');
1511 l_token_end_index := INSTR(l_tail_of_query, '$', l_token_start_index + 1);
1512
1513 l_token := SUBSTR(l_tail_of_query, l_token_start_index + 1, (l_token_end_index - (l_token_start_index + 1)));
1514
1515 ------------------------------------------------------
1516 -- Validate the token by trying to get its metadata --
1517 ------------------------------------------------------
1518 IF (l_token = p_attr_metadata_obj.ATTR_NAME) THEN
1519 l_replacement_attr_metadata := p_attr_metadata_obj;
1520 ELSE
1521 l_replacement_attr_metadata := EGO_USER_ATTRS_COMMON_PVT.Find_Metadata_For_Attr(
1522 p_attr_group_metadata_obj.attr_metadata_table
1523 ,l_token
1524 );
1525 END IF;
1526
1527 IF (l_replacement_attr_metadata IS NULL) THEN
1528
1529 --------------------------------------
1530 -- Report that the URL is not valid --
1531 --------------------------------------
1532 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DYNAMIC_URL_DATA_ERROR');
1533 FND_MESSAGE.Set_Token('ATTR_GROUP_DISP_NAME', p_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME);
1534 FND_MSG_PUB.Add;
1535
1536 RAISE FND_API.G_EXC_ERROR;
1537 END IF;
1538
1539 -----------------------
1540 -- Replace the token --
1541 -----------------------
1542 l_head_of_query := l_head_of_query ||
1543 SUBSTR(l_tail_of_query, 1, (l_token_start_index - 1)) ||
1544 '''||' ||
1545 EGO_USER_ATTRS_COMMON_PVT.Create_DB_Col_Alias_If_Needed(l_replacement_attr_metadata) ||
1546 '||''';
1547
1548 l_tail_of_query := SUBSTR(l_tail_of_query, l_token_end_index + 1);
1549
1550 --------------------------------------
1551 -- Reset variable for the next loop --
1552 --------------------------------------
1553 l_has_tokens_left := (INSTR(l_tail_of_query, '$') <> 0 AND
1554 INSTR(l_tail_of_query, '$') <> INSTR(l_tail_of_query, '$', -1));
1555
1556 END LOOP;
1557
1558 l_head_of_query := l_head_of_query || l_tail_of_query;
1559
1560 RETURN '''' || l_head_of_query || '''';
1561
1562 END Build_Tokenized_URL_Query;
1563
1564 ----------------------------------------------------------------------
1565
1566 ------------------------
1567 -- Miscellaneous APIs --
1568 ------------------------
1569
1570 ----------------------------------------------------------------------
1571 -- signature to use if caller has ATTR_GROUP_ID
1572 FUNCTION Get_Privilege_For_Attr_Group (
1573 p_attr_group_id IN NUMBER
1574 ,p_which_priv_to_return IN VARCHAR2
1575 )
1576 RETURN VARCHAR2
1577 IS
1578
1579 l_privilege_name FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE; --4105308
1580
1581 BEGIN
1582
1583 IF (UPPER(p_which_priv_to_return) = 'VIEW') THEN
1584
1585 SELECT F.FUNCTION_NAME
1586 INTO l_privilege_name
1587 FROM FND_FORM_FUNCTIONS F
1588 ,EGO_FND_DSC_FLX_CTX_EXT E
1589 WHERE E.ATTR_GROUP_ID = p_attr_group_id
1590 AND E.VIEW_PRIVILEGE_ID = F.FUNCTION_ID;
1591
1592 ELSIF (UPPER(p_which_priv_to_return) = 'EDIT') THEN
1593
1594 SELECT F.FUNCTION_NAME
1595 INTO l_privilege_name
1596 FROM FND_FORM_FUNCTIONS F
1597 ,EGO_FND_DSC_FLX_CTX_EXT E
1598 WHERE E.ATTR_GROUP_ID = p_attr_group_id
1599 AND E.EDIT_PRIVILEGE_ID = F.FUNCTION_ID;
1600
1601 END IF;
1602
1603 RETURN l_privilege_name;
1604
1605 EXCEPTION
1606 WHEN NO_DATA_FOUND THEN
1607 RETURN NULL;
1608
1609 END Get_Privilege_For_Attr_Group;
1610
1611 ----------------------------------------------------------------------
1612
1613 FUNCTION Get_Privilege_For_Attr_Group (
1614 p_application_id IN NUMBER
1615 ,p_attr_group_type IN VARCHAR2
1616 ,p_attr_group_name IN VARCHAR2
1617 ,p_which_priv_to_return IN VARCHAR2
1618 )
1619 RETURN VARCHAR2
1620 IS
1621
1622 l_attr_group_id NUMBER;
1623
1624 BEGIN
1625
1626 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
1627 ,p_attr_group_type
1628 ,p_attr_group_name);
1629
1630 IF l_attr_group_id IS NULL THEN
1631 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1632 END IF;
1633
1634 RETURN EGO_EXT_FWK_PUB.Get_Privilege_For_Attr_Group(
1635 p_attr_group_id => l_attr_group_id
1636 ,p_which_priv_to_return => p_which_priv_to_return
1637 );
1638
1639 EXCEPTION
1640 WHEN OTHERS THEN
1641 RETURN NULL;
1642
1643 END Get_Privilege_For_Attr_Group;
1644
1645 ----------------------------------------------------------------------
1646
1647 FUNCTION Is_Column_Indexed (
1648 p_column_name IN VARCHAR2
1649 ,p_table_name IN VARCHAR2
1650 ,p_application_id IN NUMBER DEFAULT NULL
1651 ,p_attr_group_type IN VARCHAR2 DEFAULT NULL
1652 )
1653 RETURN VARCHAR2
1654 IS
1655
1656 l_index_flag VARCHAR2(1) := 'N';
1657 l_table_name VARCHAR2(30);
1658 l_table_owner VARCHAR2(30);
1659
1660 l_real_column_name VARCHAR2(30); -- bug#15835530
1661
1662 BEGIN
1663
1664 IF (p_table_name IS NOT NULL) THEN
1665
1666 l_table_name := p_table_name;
1667
1668 ELSE
1669
1670 l_table_name := Get_Table_Name(p_application_id
1671 ,p_attr_group_type);
1672
1673 END IF;
1674
1675 ----------------------------------------------------
1676 -- We assume that the table is an Extension Table --
1677 ----------------------------------------------------
1678 l_table_owner := Get_Application_Owner(p_application_id);
1679
1680 -- bug#15835530 fix for 12.2 OLP compatible
1681 select col.column_name
1682 into l_real_column_name
1683 from dba_tables tab,
1684 dba_tab_columns col,
1685 dba_editioning_views ev,
1686 dba_editioning_view_cols evc
1687 where tab.owner = l_table_owner
1688 and tab.table_name = l_table_name
1689 and col.owner = tab.owner
1690 and col.table_name = tab.table_name
1691 and ev.owner(+) = tab.owner
1692 and ev.table_name(+) = tab.table_name
1693 and evc.owner(+) = ev.owner
1694 and evc.view_name(+) = ev.view_name
1695 and (ev.view_name is null or
1696 evc.table_column_name = col.column_name)
1697 and decode(ev.view_name,
1698 NULL,
1699 col.column_name,
1700 evc.view_column_name) = p_column_name;
1701
1702 SELECT 'Y'
1703 INTO l_index_flag
1704 FROM ALL_IND_COLUMNS
1705 WHERE TABLE_OWNER = l_table_owner
1706 AND TABLE_NAME = l_table_name
1707 AND COLUMN_NAME = l_real_column_name
1708 AND ROWNUM < 2;
1709
1710 RETURN l_index_flag;
1711
1712 EXCEPTION
1713 WHEN NO_DATA_FOUND THEN
1714 RETURN 'N';
1715
1716 END Is_Column_Indexed;
1717
1718 ----------------------------------------------------------------------
1719
1720 FUNCTION Get_Attr_Group_Id_From_PKs (
1721 p_application_id IN NUMBER
1722 ,p_attr_group_type IN VARCHAR2
1723 ,p_attr_group_name IN VARCHAR2
1724 )
1725 RETURN NUMBER
1726 IS
1727
1728 l_attr_group_id NUMBER;
1729
1730 BEGIN
1731
1732 SELECT ATTR_GROUP_ID INTO l_attr_group_id
1733 FROM EGO_FND_DSC_FLX_CTX_EXT
1734 WHERE APPLICATION_ID = p_application_id
1735 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
1736 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
1737
1738 RETURN l_attr_group_id;
1739
1740 EXCEPTION
1741 WHEN NO_DATA_FOUND THEN
1742 RETURN NULL;
1743
1744 END Get_Attr_Group_Id_From_PKs;
1745
1746 ----------------------------------------------------------------------
1747
1748 FUNCTION Get_Attr_Group_DispName (
1749 p_attr_group_id IN NUMBER
1750 )
1751 RETURN VARCHAR2
1752 IS
1753
1754 l_attr_group_name VARCHAR2(80);
1755
1756 BEGIN
1757
1758 SELECT FL_CTX_TL.DESCRIPTIVE_FLEX_CONTEXT_NAME INTO l_attr_group_name
1759 FROM FND_DESCR_FLEX_CONTEXTS_TL FL_CTX_TL,
1760 EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1761 WHERE
1762 FL_CTX_EXT.APPLICATION_ID = FL_CTX_TL.APPLICATION_ID
1763 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_CTX_TL.DESCRIPTIVE_FLEXFIELD_NAME
1764 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_CTX_TL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1765 AND FL_CTX_EXT.ATTR_GROUP_ID = p_attr_group_id
1766 AND FL_CTX_TL.LANGUAGE = userenv('LANG');
1767
1768 RETURN l_attr_group_name;
1769
1770 EXCEPTION
1771 WHEN NO_DATA_FOUND THEN
1772 RETURN NULL;
1773
1774 END Get_Attr_Group_DispName;
1775
1776 ----------------------------------------------------------------------
1777
1778
1779 FUNCTION Get_Data_Level_DispName (
1780 p_data_level IN VARCHAR2
1781 )
1782 RETURN VARCHAR2
1783 IS
1784
1785 l_p_data_level_disp_name VARCHAR2(80);
1786
1787 BEGIN
1788
1789 SELECT meaning into l_p_data_level_disp_name
1790 FROM fnd_lookup_values
1791 WHERE lookup_type = 'EGO_EF_DATA_LEVEL'
1792 AND language = userenv('LANG')
1793 AND lookup_code = p_data_level;
1794
1795 RETURN l_p_data_level_disp_name;
1796
1797 EXCEPTION
1798 WHEN NO_DATA_FOUND THEN
1799 RETURN NULL;
1800
1801 END Get_Data_Level_DispName;
1802
1803 ----------------------------------------------------------------------
1804
1805 FUNCTION Get_Associated_Datalevel (
1806 p_object_id IN NUMBER
1807 , p_attr_group_id IN NUMBER
1808
1809 )
1810 RETURN VARCHAR2
1811 IS
1812 l_data_level VARCHAR2(30);
1813
1814 BEGIN
1815
1816 SELECT DISTINCT DATA_LEVEL
1817 INTO l_data_level
1818 FROM EGO_OBJ_AG_ASSOCS_B
1819 WHERE ATTR_GROUP_ID = p_attr_group_id
1820 AND OBJECT_ID = p_object_id
1821 AND ROWNUM < 2;
1822
1823 RETURN l_data_level;
1824
1825 EXCEPTION
1826 WHEN NO_DATA_FOUND THEN
1827 RETURN NULL;
1828
1829 END Get_Associated_Datalevel;
1830
1831 ----------------------------------------------------------------------
1832 /*
1833 NOTE: WE DON'T USE THESE ANYMORE, BUT WE'LL KEEP THEM JUST IN CASE
1834
1835 PROCEDURE Get_Available_AttrDBCol (
1836 p_api_version IN NUMBER
1837 ,p_attr_group_id IN NUMBER
1838 ,p_data_type IN VARCHAR2
1839 ,x_database_column OUT NOCOPY VARCHAR2
1840 ) IS
1841
1842 l_database_columns EGO_VARCHAR_TBL_TYPE;
1843
1844 BEGIN
1845
1846 EGO_EXT_FWK_PUB.Get_Available_AttrDBCols (
1847 p_api_version => p_api_version
1848 ,p_attr_group_id => p_attr_group_id
1849 ,p_data_type => p_data_type
1850 ,x_database_columns => l_database_columns
1851 );
1852
1853 -- for this method, we just return the first in the list of available columns
1854
1855 x_database_column := l_database_columns(l_database_columns.FIRST);
1856
1857 END Get_Available_AttrDBCol;
1858
1859 ----------------------------------------------------------------------
1860
1861 PROCEDURE Get_Available_AttrDBCol (
1862 p_api_version IN NUMBER
1863 ,p_application_id IN NUMBER
1864 ,p_attr_group_type IN VARCHAR2
1865 ,p_attr_group_name IN VARCHAR2
1866 ,p_data_type IN VARCHAR2
1867 ,x_database_column OUT NOCOPY VARCHAR2
1868 ) IS
1869
1870 l_database_columns EGO_VARCHAR_TBL_TYPE;
1871
1872 BEGIN
1873
1874 EGO_EXT_FWK_PUB.Get_Available_AttrDBCols (
1875 p_api_version => p_api_version
1876 ,p_application_id => p_application_id
1877 ,p_attr_group_type => p_attr_group_type
1878 ,p_attr_group_name => p_attr_group_name
1879 ,p_data_type => p_data_type
1880 ,x_database_columns => l_database_columns
1881 );
1882
1883 -- for this method, we just return the first in the list of available columns
1884
1885 x_database_column := l_database_columns(l_database_columns.FIRST);
1886
1887 END Get_Available_AttrDBCol;
1888
1889 ----------------------------------------------------------------------
1890
1891 PROCEDURE Get_Available_AttrDBCols (
1892 p_api_version IN NUMBER
1893 ,p_application_id IN NUMBER
1894 ,p_attr_group_type IN VARCHAR2
1895 ,p_attr_group_name IN VARCHAR2
1896 ,p_data_type IN VARCHAR2
1897 ,x_database_columns OUT NOCOPY EGO_VARCHAR_TBL_TYPE
1898 ) IS
1899
1900 l_ext_table_name VARCHAR2(30);
1901 l_ext_table_id NUMBER;
1902 l_column_type VARCHAR2(1);
1903 l_column_prefix VARCHAR2(15);
1904 l_db_cols_table_index NUMBER;
1905 l_column_deleted BOOLEAN;
1906
1907 CURSOR allDBColNames_c (
1908 cp_application_id IN NUMBER
1909 ,cp_table_id IN NUMBER
1910 ,cp_column_type IN VARCHAR2
1911 ,cp_column_prefix IN VARCHAR2
1912 ) IS
1913 SELECT COLUMN_NAME
1914 FROM FND_COLUMNS
1915 WHERE APPLICATION_ID = cp_application_id
1916 AND TABLE_ID = cp_table_id
1917 AND COLUMN_TYPE = cp_column_type
1918 AND COLUMN_NAME LIKE cp_column_prefix
1919 ORDER BY COLUMN_SEQUENCE;
1920
1921 TO DO: we must replace this column name check with FLEXFIELD_USAGE_CODE = 'D',
1922 as soon as Kirill tells us how to seed that in CASE
1923
1924
1925 CURSOR usedDBCol_c (
1926 cp_application_id IN NUMBER
1927 ,cp_attr_group_type IN VARCHAR2
1928 ,cp_attr_group_name IN VARCHAR2
1929 ,cp_data_type IN VARCHAR2
1930 ,cp_table_id IN NUMBER
1931 ,cp_column_type IN VARCHAR2
1932 ) IS
1933 SELECT FC.COLUMN_NAME
1934 FROM FND_COLUMNS FC
1935 ,EGO_FND_DF_COL_USGS_EXT EXT
1936 WHERE EXT.APPLICATION_ID = cp_application_id
1937 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = cp_attr_group_type
1938 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = cp_attr_group_name
1939 AND EXT.DATA_TYPE = cp_data_type
1940 AND FC.APPLICATION_ID = cp_application_id
1941 AND FC.TABLE_ID = cp_table_id
1942 AND FC.COLUMN_TYPE = cp_column_type
1943 AND EXT.APPLICATION_COLUMN_NAME = FC.COLUMN_NAME
1944 ORDER BY FC.COLUMN_SEQUENCE;
1945
1946 BEGIN
1947
1948 SELECT FT.TABLE_ID
1949 INTO l_ext_table_id
1950 FROM FND_TABLES FT
1951 ,EGO_ATTR_GROUP_TYPES_V EAGTV
1952 WHERE FT.TABLE_NAME = EAGTV.EXT_TABLE_NAME
1953 AND EAGTV.APPLICATION_ID = p_application_id
1954 AND EAGTV.ATTR_GROUP_TYPE = p_attr_group_type;
1955
1956 IF (p_data_type = G_NUMBER_DATA_TYPE) THEN
1957 l_column_type := 'N';
1958 l_column_prefix := 'N_EXT_ATTR%';
1959 ELSIF (p_data_type = G_DATE_DATA_TYPE OR
1960 p_data_type = G_DATE_TIME_DATA_TYPE) THEN
1961 l_column_type := 'D';
1962 l_column_prefix := 'D_EXT_ATTR%';
1963 ELSE
1964 l_column_type := 'V';
1965 l_column_prefix := 'C_EXT_ATTR%';
1966 END IF;
1967
1968 OPEN allDBColNames_c(p_application_id, l_ext_table_id, l_column_type, l_column_prefix);
1969 FETCH allDBColNames_c BULK COLLECT INTO x_database_columns;
1970 CLOSE allDBColNames_c;
1971
1972 IF (x_database_columns.COUNT > 0) THEN
1973
1974 ---------------------------------------------------------------
1975 -- Delete from our table all columns that are already in use --
1976 ---------------------------------------------------------------
1977 FOR colNumRec IN usedDBCol_c (p_application_id
1978 ,p_attr_group_type
1979 ,p_attr_group_name
1980 ,p_data_type
1981 ,l_ext_table_id
1982 ,l_column_type)
1983 LOOP
1984
1985 ----------------------------------------------------------------
1986 -- Find and delete this particular used column from our table --
1987 ----------------------------------------------------------------
1988 l_column_deleted := FALSE;
1989 l_db_cols_table_index := x_database_columns.FIRST;
1990 WHILE (l_db_cols_table_index <= x_database_columns.LAST)
1991 LOOP
1992 EXIT WHEN (l_column_deleted);
1993
1994 IF (x_database_columns(l_db_cols_table_index) = colNumRec.COLUMN_NAME) THEN
1995
1996 x_database_columns.DELETE(l_db_cols_table_index);
1997 l_column_deleted := TRUE;
1998
1999 END IF;
2000
2001 l_db_cols_table_index := x_database_columns.NEXT(l_db_cols_table_index);
2002 END LOOP;
2003 END LOOP;
2004 END IF;
2005
2006 END Get_Available_AttrDBCols;
2007
2008 ----------------------------------------------------------------------
2009
2010 PROCEDURE Get_Available_AttrDBCols (
2011 p_api_version IN NUMBER
2012 ,p_attr_group_id IN NUMBER
2013 ,p_data_type IN VARCHAR2
2014 ,x_database_columns OUT NOCOPY EGO_VARCHAR_TBL_TYPE
2015 ) IS
2016
2017 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
2018
2019 BEGIN
2020
2021 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_attr_group_id);
2022
2023 EGO_EXT_FWK_PUB.Get_Available_AttrDBCols (
2024 p_api_version => p_api_version
2025 ,p_application_id => l_attr_group_pks(1)
2026 ,p_attr_group_type => l_attr_group_pks(2)
2027 ,p_attr_group_name => l_attr_group_pks(3)
2028 ,p_data_type => p_data_type
2029 ,x_database_columns => x_database_columns
2030 );
2031
2032 END Get_Available_AttrDBCols;
2033 */
2034
2035 ----------------------------------------------------------------------
2036
2037 FUNCTION Get_Table_Name (
2038 p_application_id IN NUMBER
2039 ,p_attr_group_type IN VARCHAR2
2040 )
2041 RETURN VARCHAR2
2042 IS
2043
2044 l_table_name VARCHAR2(30);
2045
2046 BEGIN
2047 SELECT APPLICATION_TABLE_NAME
2048 INTO l_table_name
2049 FROM FND_DESCRIPTIVE_FLEXS
2050 WHERE APPLICATION_ID = p_application_id
2051 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
2052
2053 RETURN l_table_name;
2054
2055 EXCEPTION
2056 WHEN NO_DATA_FOUND THEN
2057 RETURN NULL;
2058
2059 END Get_Table_Name;
2060
2061 ----------------------------------------------------------------------
2062
2063 FUNCTION Get_TL_Table_Name (
2064 p_application_id IN NUMBER
2065 ,p_attr_group_type IN VARCHAR2
2066 )
2067 RETURN VARCHAR2
2068 IS
2069 l_table_name VARCHAR2(30);
2070
2071 BEGIN
2072 SELECT EXT_TL_TABLE_NAME
2073 INTO l_table_name
2074 FROM EGO_ATTR_GROUP_TYPES_V
2075 WHERE APPLICATION_ID = p_application_id
2076 AND ATTR_GROUP_TYPE = p_attr_group_type;
2077
2078 RETURN l_table_name;
2079
2080 EXCEPTION
2081 WHEN NO_DATA_FOUND THEN
2082 RETURN NULL;
2083
2084 END Get_TL_Table_Name;
2085
2086 ----------------------------------------------------------------------
2087
2088 FUNCTION Get_Object_Id_From_Name (p_object_name IN VARCHAR2) RETURN NUMBER
2089 IS
2090
2091 l_object_id NUMBER;
2092
2093 BEGIN
2094
2095 SELECT OBJECT_ID INTO l_object_id
2096 FROM FND_OBJECTS
2097 WHERE OBJ_NAME = p_object_name;
2098
2099 RETURN l_object_id;
2100
2101 EXCEPTION
2102 WHEN NO_DATA_FOUND THEN
2103 RETURN NULL;
2104
2105 END Get_Object_Id_From_Name;
2106
2107 ----------------------------------------------------------------------
2108
2109 FUNCTION Get_Object_Id_For_AG_Type (
2110 p_application_id IN NUMBER
2111 ,p_attr_group_type IN VARCHAR2
2112 ) RETURN NUMBER
2113 IS
2114
2115 l_object_id NUMBER;
2116
2117 BEGIN
2118
2119 SELECT OBJ.OBJECT_ID
2120 INTO l_object_id
2121 FROM EGO_OBJECT_EXT_TABLES_B OBJ
2122 ,FND_DESCRIPTIVE_FLEXS FLX
2123 WHERE OBJ.EXT_TABLE_NAME = FLX.APPLICATION_TABLE_NAME
2124 AND OBJ.APPLICATION_ID = FLX.APPLICATION_ID
2125 AND FLX.APPLICATION_ID = p_application_id
2126 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
2127
2128 RETURN l_object_id;
2129
2130 EXCEPTION
2131 WHEN NO_DATA_FOUND THEN
2132 RETURN NULL;
2133
2134 END Get_Object_Id_For_AG_Type;
2135
2136 ----------------------------------------------------------------------
2137
2138 FUNCTION Get_Class_Meaning (
2139 p_object_name IN VARCHAR2
2140 ,p_class_code IN VARCHAR2
2141 )
2142 RETURN VARCHAR2
2143 IS
2144
2145 l_ocv_name VARCHAR2(30);
2146 l_dynamic_sql VARCHAR2(300);
2147 l_class_meaning VARCHAR2(1000);
2148
2149 BEGIN
2150
2151 SELECT EXT_ATTR_OCV_NAME INTO l_ocv_name
2152 FROM EGO_FND_OBJECTS_EXT
2153 WHERE OBJECT_NAME = p_object_name;
2154
2155 IF (l_ocv_name IS NULL) THEN
2156 l_class_meaning := p_class_code;
2157 ELSE
2158 l_dynamic_sql := 'SELECT MEANING FROM ' || l_ocv_name ||
2159 ' WHERE CODE = :1 AND LANGUAGE = USERENV(''LANG'') ' ||
2160 ' AND ROWNUM = 1 ';
2161
2162 EXECUTE IMMEDIATE l_dynamic_sql INTO l_class_meaning USING p_class_code;
2163 END IF;
2164
2165 RETURN l_class_meaning;
2166
2167 EXCEPTION
2168 WHEN NO_DATA_FOUND THEN
2169 RETURN p_class_code;
2170
2171 END Get_Class_Meaning;
2172
2173 ----------------------------------------------------------------------
2174
2175 FUNCTION Get_Class_Meaning (
2176 p_object_id IN NUMBER
2177 ,p_class_code IN VARCHAR2
2178 )
2179 RETURN VARCHAR2
2180 IS
2181
2182 l_object_name FND_OBJECTS.OBJ_NAME%TYPE; --4105308
2183
2184 BEGIN
2185
2186 SELECT OBJ_NAME INTO l_object_name
2187 FROM FND_OBJECTS
2188 WHERE OBJECT_ID = p_object_id;
2189
2190 RETURN Get_Class_Meaning(l_object_name, p_class_code);
2191
2192 EXCEPTION
2193 WHEN OTHERS THEN
2194 RETURN p_class_code;
2195
2196 END Get_Class_Meaning;
2197
2198 ----------------------------------------------------------------------
2199
2200 PROCEDURE Get_Pk_Columns (
2201 p_api_version IN NUMBER
2202 ,p_obj_name IN VARCHAR2
2203 ,x_pkcolumn1_name OUT NOCOPY VARCHAR2
2204 ,x_pkcolumn1_type OUT NOCOPY VARCHAR2
2205 ,x_pkcolumn2_name OUT NOCOPY VARCHAR2
2206 ,x_pkcolumn2_type OUT NOCOPY VARCHAR2
2207 ,x_pkcolumn3_name OUT NOCOPY VARCHAR2
2208 ,x_pkcolumn3_type OUT NOCOPY VARCHAR2
2209 ,x_pkcolumn4_name OUT NOCOPY VARCHAR2
2210 ,x_pkcolumn4_type OUT NOCOPY VARCHAR2
2211 ,x_pkcolumn5_name OUT NOCOPY VARCHAR2
2212 ,x_pkcolumn5_type OUT NOCOPY VARCHAR2
2213 ) IS
2214
2215 CURSOR pk_columns_c (cp_obj_name VARCHAR2)
2216 IS
2217 SELECT PK1_COLUMN_NAME, PK1_COLUMN_TYPE,
2218 PK2_COLUMN_NAME, PK2_COLUMN_TYPE,
2219 PK3_COLUMN_NAME, PK3_COLUMN_TYPE,
2220 PK4_COLUMN_NAME, PK4_COLUMN_TYPE,
2221 PK5_COLUMN_NAME, PK5_COLUMN_TYPE
2222 FROM FND_OBJECTS
2223 WHERE OBJ_NAME = cp_obj_name;
2224
2225 l_pk_columns_rec pk_columns_c%ROWTYPE;
2226
2227 BEGIN
2228 OPEN pk_columns_c(cp_obj_name => p_obj_name);
2229 FETCH pk_columns_c INTO l_pk_columns_rec;
2230 x_pkcolumn1_name := l_pk_columns_rec.PK1_COLUMN_NAME;
2231 x_pkcolumn1_type := l_pk_columns_rec.PK1_COLUMN_TYPE;
2232 x_pkcolumn2_name := l_pk_columns_rec.PK2_COLUMN_NAME;
2233 x_pkcolumn2_type := l_pk_columns_rec.PK2_COLUMN_TYPE;
2234 x_pkcolumn3_name := l_pk_columns_rec.PK3_COLUMN_NAME;
2235 x_pkcolumn3_type := l_pk_columns_rec.PK3_COLUMN_TYPE;
2236 x_pkcolumn4_name := l_pk_columns_rec.PK4_COLUMN_NAME;
2237 x_pkcolumn4_type := l_pk_columns_rec.PK4_COLUMN_TYPE;
2238 x_pkcolumn5_name := l_pk_columns_rec.PK5_COLUMN_NAME;
2239 x_pkcolumn5_type := l_pk_columns_rec.PK5_COLUMN_TYPE;
2240
2241 CLOSE pk_columns_c;
2242
2243 END Get_Pk_Columns;
2244
2245 ----------------------------------------------------------------------
2246
2247 --------------------------
2248 -- Attribute Group APIs --
2249 --------------------------
2250
2251 ----------------------------------------------------------------------
2252
2253 PROCEDURE Create_Attribute_Group (
2254 p_api_version IN NUMBER
2255 ,p_application_id IN NUMBER
2256 ,p_attr_group_type IN VARCHAR2
2257 ,p_internal_name IN VARCHAR2
2258 ,p_display_name IN VARCHAR2
2259 ,p_attr_group_desc IN VARCHAR2
2260 ,p_security_type IN VARCHAR2
2261 ,p_multi_row_attrib_group IN VARCHAR2
2262 ,p_variant_attrib_group IN VARCHAR2
2263 ,p_num_of_cols IN NUMBER DEFAULT NULL
2264 ,p_num_of_rows IN NUMBER DEFAULT NULL
2265 ,p_owning_company_id IN NUMBER
2266 ,p_region_code IN VARCHAR2 DEFAULT NULL
2267 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2268 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2269 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2270 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2271 ,p_owner IN NUMBER DEFAULT NULL
2272 ,p_lud IN DATE DEFAULT SYSDATE
2273 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2274 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2275 ,x_attr_group_id OUT NOCOPY NUMBER
2276 ,x_return_status OUT NOCOPY VARCHAR2
2277 ,x_errorcode OUT NOCOPY NUMBER
2278 ,x_msg_count OUT NOCOPY NUMBER
2279 ,x_msg_data OUT NOCOPY VARCHAR2
2280 ) IS
2281
2282 l_api_name CONSTANT VARCHAR2(30) := 'Create_Attribute_Group';
2283
2284 --we don't use l_api_version yet, but eventually we might:
2285 --if we change required parameters, version goes from n.x to (n+1).x
2286 --if we change optional parameters, version goes from x.n to x.(n+1)
2287 l_api_version CONSTANT NUMBER := 1.0;
2288
2289 l_appl_short_name FND_APPLICATION.APPLICATION_SHORT_NAME%TYPE;
2290 l_ext_table_name VARCHAR2(30);
2291 l_table_owner VARCHAR2(30);
2292 l_dynamic_sql VARCHAR2(200);
2293 l_partition_count NUMBER;
2294
2295 l_attr_chg_b_table VARCHAR2(30);
2296 l_attr_chg_tl_table VARCHAR2(30);
2297
2298 --Bug 4703510
2299 l_fnd_exists VARCHAR2(1);
2300 l_ego_exists VARCHAR2(1);
2301 --Bug 5443697
2302 l_start_num VARCHAR2(1);
2303 l_start_und_sc VARCHAR2(1);
2304 e_ag_starts_with_num EXCEPTION;
2305 e_ag_starts_with_und_sc EXCEPTION;
2306 --Bug 6120553
2307 l_sql_errm VARCHAR2(1000);
2308 --Bug 6048237
2309 l_num_of_cols NUMBER := p_num_of_cols;
2310 l_num_of_rows NUMBER := p_num_of_rows;
2311
2312
2313 BEGIN
2314
2315 -- Standard start of API savepoint
2316 IF FND_API.To_Boolean(p_commit) THEN
2317 SAVEPOINT Create_Attribute_Group_PUB;
2318 END IF;
2319
2320 -- Check for call compatibility
2321 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
2322 l_api_name, G_PKG_NAME)
2323 THEN
2324
2325 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2326 END IF;
2327 -- Initialize message list even though we don't currently use it
2328 IF FND_API.To_Boolean(p_init_msg_list) THEN
2329 FND_MSG_PUB.Initialize;
2330 END IF;
2331 -----------------------------------
2332 --check if the Attribute Group name begins with a number.
2333 --Bug 5443697
2334 has_Num_Start_char (p_internal_name =>p_internal_name,
2335 x_start_num => l_start_num);
2336 IF (l_start_num = 'Y') THEN
2337 RAISE e_ag_starts_with_num;
2338 END IF;
2339
2340 --check if the Attribute Group name begins with an under score.
2341 --Bug 5443697
2342 has_Given_Char_As_Start_char (p_internal_name =>p_internal_name,
2343 p_char_set =>'_',
2344 x_start_und_sc => l_start_und_sc);
2345 IF (l_start_und_sc = 'Y') THEN
2346 RAISE e_ag_starts_with_und_sc;
2347 END IF;
2348
2349 --Initialize num cols and rows.
2350 --Bug 6048237
2351 IF p_multi_row_attrib_group = 'Y' THEN
2352 IF l_num_of_cols is null THEN
2353 l_num_of_cols := 5;
2354 END IF;
2355 IF l_num_of_rows is null THEN
2356 l_num_of_rows := 5;
2357 END IF;
2358 ELSIF p_multi_row_attrib_group = 'N' THEN
2359 IF l_num_of_cols is null THEN
2360 l_num_of_cols := 2;
2361 END IF;
2362 END IF;
2363
2364 --Bug 4703510 START
2365 Get_fnd_ego_record_exists (
2366 p_context=>'ATTRIBUTE GROUP'
2367 ,p_application_id => p_application_id
2368 ,p_attr_group_type => p_attr_group_type
2369 ,p_attr_group_name => NULL
2370 ,p_internal_name => p_internal_name
2371 ,x_fnd_exists => l_fnd_exists
2372 ,x_ego_exists => l_ego_exists
2373 );
2374 IF (l_fnd_exists = 'Y') THEN --Bug 4703510
2375
2376 UPDATE FND_DESCR_FLEX_CONTEXTS
2377 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
2378 LAST_UPDATE_DATE = p_lud,
2379 LAST_UPDATE_LOGIN = g_current_login_id
2380 WHERE DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
2381 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
2382 AND APPLICATION_ID = p_application_id;
2383
2384 UPDATE FND_DESCR_FLEX_CONTEXTS_TL
2385 SET DESCRIPTION = p_attr_group_desc,
2386 DESCRIPTIVE_FLEX_CONTEXT_NAME = p_display_name,
2387 LAST_UPDATE_DATE = p_lud,
2388 LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
2389 LAST_UPDATE_LOGIN = g_current_login_id,
2390 SOURCE_LANG = USERENV('LANG')
2391 WHERE APPLICATION_ID = p_application_id
2392 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
2393 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
2394 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
2395 ELSE --l_fnd_exists = 'Y'
2396 SELECT APPLICATION_SHORT_NAME
2397 INTO l_appl_short_name
2398 FROM FND_APPLICATION
2399 WHERE APPLICATION_ID = p_application_id;
2400 fnd_flex_dsc_api.set_session_mode('customer_data');
2401 fnd_flex_dsc_api.create_context(appl_short_name => l_appl_short_name,
2402 flexfield_name => p_attr_group_type,
2403 context_code => p_internal_name,
2404 context_name => p_display_name,
2405 description => p_attr_group_desc,
2406 enabled => 'N',
2407 global_flag => 'N');
2408 END IF;--l_fnd_exists = 'Y' Bug 4703510:END
2409
2410 IF (l_ego_exists <> 'Y' ) THEN
2411
2412 SELECT EGO_ATTR_GROUPS_S.NEXTVAL INTO x_attr_group_id FROM DUAL;
2413 INSERT INTO EGO_FND_DSC_FLX_CTX_EXT
2414 (
2415 ATTR_GROUP_ID
2416 ,APPLICATION_ID
2417 ,DESCRIPTIVE_FLEXFIELD_NAME
2418 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
2419 ,MULTI_ROW
2420 ,VARIANT --VARIANT(R12C)
2421 ,NUM_OF_COLS
2422 ,NUM_OF_ROWS
2423 ,SECURITY_TYPE
2424 ,OWNING_PARTY_ID
2425 ,REGION_CODE
2426 ,VIEW_PRIVILEGE_ID
2427 ,EDIT_PRIVILEGE_ID
2428 ,BUSINESS_EVENT_FLAG
2429 ,PRE_BUSINESS_EVENT_FLAG
2430 ,CREATED_BY
2431 ,CREATION_DATE
2432 ,LAST_UPDATED_BY
2433 ,LAST_UPDATE_DATE
2434 ,LAST_UPDATE_LOGIN
2435 )
2436 VALUES
2437 (
2438 x_attr_group_id --ATTR_GROUP_ID
2439 ,p_application_id --APPLICATION_ID
2440 ,p_attr_group_type --DESCRIPTIVE_FLEXFIELD_NAME
2441 ,p_internal_name --DESCRIPTIVE_FLEX_CONTEXT_CODE
2442 ,nvl(p_multi_row_attrib_group, 'N') --MULTI_ROW
2443 ,p_variant_attrib_group --VARIANT
2444 ,l_num_of_cols
2445 ,l_num_of_rows
2446 ,nvl(p_security_type, 'P') --SECURITY_TYPE
2447 ,-100 --p_owning_company_id --OWNING_PARTY_ID
2448 ,p_region_code --p_region_code
2449 ,p_view_privilege_id -- View privilege
2450 ,p_edit_privilege_id -- Edit privilege
2451 ,p_business_event_flag --BUSINESS_EVENT_FLAG
2452 ,p_pre_business_event_flag --PRE_BUSINESS_EVENT_FLAG
2453 ,NVL(p_owner, g_current_user_id) --CREATED_BY
2454 ,p_lud --CREATION_DATE
2455 ,NVL(p_owner, g_current_user_id) --LAST_UPDATED_BY
2456 ,p_lud --LAST_UPDATE_DATE
2457 ,g_current_login_id --LAST_UPDATE_LOGIN
2458 );
2459
2460
2461 -------------------------------------------------------------------
2462 -- Now we add a partition to the Extension Table that will store --
2463 -- data for this Attribute Group so that if this Attribute Group --
2464 -- gets associated and data for it get stored in that table, --
2465 -- query performance will be optimized. --
2466 -------------------------------------------------------------------
2467
2468 --------------------------------
2469 -- partition extention table --
2470 --------------------------------
2471 l_ext_table_name := Get_Table_Name(p_application_id
2472 ,p_attr_group_type);
2473
2474 l_table_owner := Get_Application_Owner(p_application_id);
2475
2476 SELECT COUNT(*) into l_partition_count
2477 FROM ALL_TAB_PARTITIONS
2478 WHERE
2479 table_name = l_ext_table_name
2480 and table_owner = l_table_owner;
2481
2482 if (l_partition_count > 0) THEN
2483 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_ext_table_name ||
2484 ' ADD PARTITION ag_' || x_attr_group_id ||
2485 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2486
2487 l_sql_errm := Execute_DDL_And_Return_Err(l_dynamic_sql);
2488 IF(l_sql_errm IS NOT NULL) THEN
2489 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2490 END IF;
2491 --EXECUTE IMMEDIATE l_dynamic_sql;
2492
2493 END IF;
2494
2495 -----------------------------------
2496 -- partition extention TL table --
2497 -----------------------------------
2498 l_ext_table_name := Get_TL_Table_Name(p_application_id
2499 ,p_attr_group_type);
2500
2501 l_table_owner := Get_Application_Owner(p_application_id);
2502
2503 IF (l_ext_table_name IS NOT NULL) THEN
2504
2505 SELECT COUNT(*) into l_partition_count
2506 FROM ALL_TAB_PARTITIONS
2507 WHERE
2508 table_name = l_ext_table_name
2509 and table_owner = l_table_owner;
2510
2511 if (l_partition_count > 0) THEN
2512
2513 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_ext_table_name ||
2514 ' ADD PARTITION ag_' || x_attr_group_id ||
2515 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2516
2517 l_sql_errm := Execute_DDL_And_Return_Err(l_dynamic_sql);
2518 IF(l_sql_errm IS NOT NULL) THEN
2519
2520 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2521 END IF;
2522 --EXECUTE IMMEDIATE l_dynamic_sql;
2523
2524 END IF;
2525
2526 END IF;
2527
2528 /* -- bug: 3801472
2529 -- partition the Attribute Changes Tables
2530
2531
2532 EGO_EXT_FWK_PUB.Get_Attr_Changes_Table
2533 (p_attr_group_type => p_attr_group_type
2534 ,x_base_table => l_attr_chg_b_table
2535 ,x_tl_table => l_attr_chg_tl_table
2536 );*/
2537 --Creating the partitions on the Pending tables
2538 l_attr_chg_b_table := Get_Attr_Changes_B_Table(p_application_id =>p_application_id
2539 ,p_attr_group_type => p_attr_group_type);
2540 l_table_owner := Get_Application_Owner(p_appl_id => p_application_id);
2541
2542 IF l_attr_chg_b_table IS NOT NULL THEN
2543 SELECT COUNT(*)
2544 INTO l_partition_count
2545 FROM ALL_TAB_PARTITIONS
2546 WHERE table_name = l_attr_chg_b_table
2547 AND table_owner = l_table_owner;
2548
2549 IF (l_partition_count > 0) THEN
2550 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_attr_chg_b_table ||
2551 ' ADD PARTITION ag_' || x_attr_group_id ||
2552 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2553
2554 EXECUTE IMMEDIATE l_dynamic_sql;
2555 END IF; --IF (l_partition_count > 0)
2556 END IF;--IF l_attr_chg_b_table IS NOT NULL
2557
2558 l_attr_chg_tl_table := Get_Attr_Changes_TL_Table(p_application_id => p_application_id
2559 ,p_attr_group_type => p_attr_group_type);
2560
2561 l_table_owner := Get_Application_Owner(p_appl_id => p_application_id);
2562
2563 IF l_attr_chg_tl_table IS NOT NULL THEN
2564 SELECT COUNT(*)
2565 INTO l_partition_count
2566 FROM ALL_TAB_PARTITIONS
2567 WHERE table_name = l_attr_chg_tl_table
2568 AND table_owner = l_table_owner;
2569
2570 IF (l_partition_count > 0) THEN
2571 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_attr_chg_tl_table ||
2572 ' ADD PARTITION ag_' || x_attr_group_id ||
2573 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2574
2575 EXECUTE IMMEDIATE l_dynamic_sql;
2576 END IF;
2577 END IF;
2578 -- Standard check of p_commit
2579 IF FND_API.To_Boolean(p_commit) THEN
2580 COMMIT WORK;
2581 END IF;
2582 x_return_status := FND_API.G_RET_STS_SUCCESS;
2583 ELSE --l_ego_exists <> Y --Bug 4703510
2584 IF FND_API.To_Boolean(p_commit) THEN
2585 ROLLBACK TO Create_Attribute_Group_PUB;
2586 END IF;
2587 x_return_status := FND_API.G_RET_STS_ERROR;
2588 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_GRP_EXIST');
2589 FND_MSG_PUB.Add;
2590 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2591 ,p_count => x_msg_count
2592 ,p_data => x_msg_data);
2593 END IF; --l_ego_exists <> Y --Bug 4703510
2594
2595 EXCEPTION
2596 --Bug 5443697
2597 WHEN e_ag_starts_with_num THEN
2598 IF FND_API.TO_BOOLEAN(p_commit) THEN
2599 ROLLBACK TO Create_Attribute_Group_PUB;
2600 END IF;
2601 x_return_status := FND_API.G_RET_STS_ERROR;
2602 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_NAME_ST_NUM');
2603 FND_MSG_PUB.Add;
2604 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2605 ,p_count => x_msg_count
2606 ,p_data => x_msg_data);
2607
2608 --Bug 5443697
2609 WHEN e_ag_starts_with_und_sc THEN
2610 IF FND_API.TO_BOOLEAN(p_commit) THEN
2611 ROLLBACK TO Create_Attribute_Group_PUB;
2612 END IF;
2613 x_return_status := FND_API.G_RET_STS_ERROR;
2614 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_NAME_ST_UND_SC');
2615 FND_MSG_PUB.Add;
2616 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2617 ,p_count => x_msg_count
2618 ,p_data => x_msg_data);
2619
2620 WHEN OTHERS THEN
2621 IF FND_API.To_Boolean(p_commit) THEN
2622 ROLLBACK TO Create_Attribute_Group_PUB;
2623 END IF;
2624
2625 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2626
2627 IF (INSTR(SQLERRM, 'ORA-00001') <> 0) THEN
2628 SELECT MESSAGE_TEXT INTO x_msg_data
2629 FROM FND_NEW_MESSAGES
2630 WHERE MESSAGE_NAME = 'EGO_INTERNAL_NAME_EXISTS'
2631 AND LANGUAGE_CODE = USERENV('LANG');
2632 ELSE
2633 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
2634 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
2635 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
2636 -- SQLERRM from the autonomous transaction will not be reflected here
2637 -- x_msg_data will maintain the SQLERRM generated in the autonomous transaction.
2638 -- Bug 6120553
2639 FND_MESSAGE.Set_Token('SQL_ERR_MSG', NVL(l_sql_errm, SQLERRM)||' '||FND_FLEX_DSC_API.Message());
2640 FND_MSG_PUB.Add;
2641 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2642 ,p_count => x_msg_count
2643 ,p_data => x_msg_data);
2644 END IF;
2645
2646 END Create_Attribute_Group;
2647
2648 ----------------------------------------------------------------------
2649
2650 -- Wrapper for JSPs that aren't set up to take ATTR_GROUP_ID --
2651 PROCEDURE Create_Attribute_Group (
2652 p_api_version IN NUMBER
2653 ,p_application_id IN NUMBER
2654 ,p_attr_group_type IN VARCHAR2
2655 ,p_internal_name IN VARCHAR2
2656 ,p_display_name IN VARCHAR2
2657 ,p_attr_group_desc IN VARCHAR2
2658 ,p_security_type IN VARCHAR2
2659 ,p_multi_row_attrib_group IN VARCHAR2
2660 ,p_variant_attrib_group IN VARCHAR2
2661 ,p_num_of_cols IN NUMBER DEFAULT NULL
2662 ,p_num_of_rows IN NUMBER DEFAULT NULL
2663 ,p_owning_company_id IN NUMBER
2664 ,p_region_code IN VARCHAR2 DEFAULT NULL
2665 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2666 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2667 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2668 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2669 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2670 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2671 ,x_return_status OUT NOCOPY VARCHAR2
2672 ,x_errorcode OUT NOCOPY NUMBER
2673 ,x_msg_count OUT NOCOPY NUMBER
2674 ,x_msg_data OUT NOCOPY VARCHAR2
2675 ) IS
2676
2677 l_attr_group_id NUMBER;
2678
2679 BEGIN
2680
2681 EGO_EXT_FWK_PUB.Create_Attribute_Group
2682 (
2683 p_api_version => p_api_version
2684 ,p_application_id => p_application_id
2685 ,p_attr_group_type => p_attr_group_type
2686 ,p_internal_name => p_internal_name
2687 ,p_display_name => p_display_name
2688 ,p_attr_group_desc => p_attr_group_desc
2689 ,p_security_type => p_security_type
2690 ,p_multi_row_attrib_group => p_multi_row_attrib_group
2691 ,p_variant_attrib_group => p_variant_attrib_group
2692 ,p_num_of_cols => p_num_of_cols
2693 ,p_num_of_rows => p_num_of_rows
2694 ,p_owning_company_id => p_owning_company_id
2695 ,p_region_code => p_region_code
2696 ,p_view_privilege_id => p_view_privilege_id
2697 ,p_edit_privilege_id => p_edit_privilege_id
2698 ,p_business_event_flag => p_business_event_flag
2699 ,p_pre_business_event_flag => p_pre_business_event_flag
2700 ,p_init_msg_list => p_init_msg_list
2701 ,p_commit => p_commit
2702 ,x_attr_group_id => l_attr_group_id
2703 ,x_return_status => x_return_status
2704 ,x_errorcode => x_errorcode
2705 ,x_msg_count => x_msg_count
2706 ,x_msg_data => x_msg_data
2707 );
2708
2709 END Create_Attribute_Group;
2710
2711 ----------------------------------------------------------------------
2712
2713 PROCEDURE Copy_Attribute_Group (
2714 p_api_version IN NUMBER
2715 ,p_source_ag_app_id IN NUMBER
2716 ,p_source_ag_type IN VARCHAR2
2717 ,p_source_ag_name IN VARCHAR2
2718 ,p_dest_ag_app_id IN NUMBER
2719 ,p_dest_ag_type IN VARCHAR2
2720 ,p_dest_ag_name IN VARCHAR2
2721 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2722 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2723 ,x_attr_group_id OUT NOCOPY NUMBER
2724 ,x_return_status OUT NOCOPY VARCHAR2
2725 ,x_errorcode OUT NOCOPY NUMBER
2726 ,x_msg_count OUT NOCOPY NUMBER
2727 ,x_msg_data OUT NOCOPY VARCHAR2
2728 ) IS
2729
2730 l_api_name CONSTANT VARCHAR2(30) := 'Copy_Attribute_Group';
2731
2732 l_lang_installed_flag FND_LANGUAGES.INSTALLED_FLAG%TYPE;
2733
2734 --we don't use l_api_version yet, but eventually we might:
2735 --if we change required parameters, version goes from n.x to (n+1).x
2736 --if we change optional parameters, version goes from x.n to x.(n+1)
2737 l_api_version CONSTANT NUMBER := 1.0;
2738
2739 l_return_status VARCHAR(1);
2740 l_errorcode NUMBER;
2741 l_msg_count NUMBER;
2742 l_msg_data VARCHAR2(1000);
2743
2744 CURSOR ego_attribute_csr
2745 (
2746 v_source_ag_app_id IN EGO_ATTRS_V.APPLICATION_ID%TYPE
2747 ,v_source_ag_type IN EGO_ATTRS_V.ATTR_GROUP_TYPE%TYPE
2748 ,v_source_ag_name IN EGO_ATTRS_V.ATTR_GROUP_NAME%TYPE
2749 ) IS
2750 SELECT APPLICATION_ID,
2751 ATTR_GROUP_TYPE,
2752 ATTR_GROUP_NAME,
2753 ATTR_NAME,
2754 ATTR_DISPLAY_NAME,
2755 DESCRIPTION,
2756 DATA_TYPE_CODE,
2757 SEQUENCE,
2758 UNIQUE_KEY_FLAG,
2759 DEFAULT_VALUE,
2760 INFO_1,
2761 VALUE_SET_ID,
2762 ENABLED_FLAG,
2763 REQUIRED_FLAG,
2764 SEARCH_FLAG,
2765 DISPLAY_CODE,
2766 DATABASE_COLUMN,
2767 UOM_CLASS,
2768 DECODE(DISPLAY_CODE,'D',1,0) DISP_CODE --bugFix:5589398
2769 FROM EGO_ATTRS_V
2770 WHERE APPLICATION_ID = v_source_ag_app_id
2771 AND ATTR_GROUP_TYPE = v_source_ag_type
2772 AND ATTR_GROUP_NAME = v_source_ag_name
2773 ORDER BY DISP_CODE, SEQUENCE;
2774
2775 l_sequence ego_attrs_v.sequence%TYPE;
2776 ego_attribute_rec ego_attribute_csr%ROWTYPE;
2777 l_sequence_numbers VARCHAR2(10000);
2778
2779 BEGIN
2780
2781 -- Standard start of API savepoint
2782 IF FND_API.TO_BOOLEAN(p_commit) THEN
2783 SAVEPOINT Copy_Attribute_Group_PUB;
2784 END IF;
2785
2786 -- Check for call compatibility
2787 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
2788 l_api_name, G_PKG_NAME)
2789 THEN
2790 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2791 END IF;
2792 -- Initialize message list even though we don't currently use it
2793 IF FND_API.To_Boolean(p_init_msg_list) THEN
2794 FND_MSG_PUB.Initialize;
2795 END IF;
2796
2797 l_sequence_numbers := ' ';
2798
2799 OPEN ego_attribute_csr (v_source_ag_app_id => p_source_ag_app_id,
2800 v_source_ag_type => p_source_ag_type,
2801 v_source_ag_name => p_source_ag_name);
2802 LOOP
2803 FETCH ego_attribute_csr INTO ego_attribute_rec;
2804 EXIT WHEN ego_attribute_csr%NOTFOUND;
2805 /*
2806 IF l_sequence IS NULL THEN
2807 l_sequence := ego_attribute_rec.SEQUENCE;
2808 ELSIF l_sequence >= ego_attribute_rec.SEQUENCE THEN
2809 l_sequence := l_sequence + 1;
2810 ELSIF l_sequence < ego_attribute_rec.SEQUENCE THEN
2811 l_sequence := ego_attribute_rec.SEQUENCE;
2812 END IF;
2813 */
2814 --Commented out the above logic and added the following while loop to
2815 --take care of the case for bug 4874670 where two attributes have the same seq no
2816 --The above logic was failing for the changes made for bugfix 5589398.
2817 l_sequence := ego_attribute_rec.SEQUENCE;
2818 WHILE(INSTR(l_sequence_numbers,(' '||l_sequence||' ')) <> 0 AND INSTR(l_sequence_numbers,(' '||l_sequence||' ')) IS NOT NULL)
2819 LOOP
2820 l_sequence := l_sequence+10;
2821 END LOOP;
2822 l_sequence_numbers := l_sequence_numbers||' '||l_sequence||' ';
2823
2824
2825 EGO_EXT_FWK_PUB.Create_Attribute(
2826 p_api_version => l_api_version
2827 ,p_application_id => p_dest_ag_app_id
2828 ,p_attr_group_type => p_dest_ag_type
2829 ,p_attr_group_name => p_dest_ag_name
2830 ,p_internal_name => ego_attribute_rec.ATTR_NAME
2831 ,p_display_name => ego_attribute_rec.ATTR_DISPLAY_NAME
2832 ,p_description => ego_attribute_rec.DESCRIPTION
2833 ,p_sequence => l_sequence
2834 ,p_data_type => ego_attribute_rec.DATA_TYPE_CODE
2835 ,p_required => ego_attribute_rec.REQUIRED_FLAG
2836 ,p_searchable => ego_attribute_rec.SEARCH_FLAG
2837 ,p_column => ego_attribute_rec.DATABASE_COLUMN
2838 ,p_is_column_indexed => NULL --this will force Create_Attribute to query
2839 ,p_value_set_id => ego_attribute_rec.VALUE_SET_ID
2840 ,p_info_1 => ego_attribute_rec.INFO_1
2841 ,p_default_value => ego_attribute_rec.DEFAULT_VALUE
2842 ,p_unique_key_flag => ego_attribute_rec.UNIQUE_KEY_FLAG
2843 ,p_enabled => ego_attribute_rec.ENABLED_FLAG
2844 ,p_display => ego_attribute_rec.DISPLAY_CODE
2845 ,p_uom_class => ego_attribute_rec.UOM_CLASS
2846 ,p_init_msg_list => FND_API.G_FALSE
2847 ,p_commit => FND_API.G_FALSE
2848 ,x_return_status => l_return_status
2849 ,x_errorcode => l_errorcode
2850 ,x_msg_count => l_msg_count
2851 ,x_msg_data => l_msg_data
2852 );
2853 END LOOP;
2854 CLOSE ego_attribute_csr;
2855
2856 -- Standard check of p_commit
2857 IF FND_API.To_Boolean(p_commit) THEN
2858 COMMIT WORK;
2859 END IF;
2860
2861 x_return_status := FND_API.G_RET_STS_SUCCESS;
2862
2863 EXCEPTION
2864 WHEN OTHERS THEN
2865 IF FND_API.TO_BOOLEAN(p_commit) THEN
2866 ROLLBACK TO Copy_Attribute_Group_PUB;
2867 END IF;
2868 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2869 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
2870 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
2871 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
2872 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
2873 FND_MSG_PUB.Add;
2874 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2875 ,p_count => x_msg_count
2876 ,p_data => x_msg_data);
2877
2878 END Copy_Attribute_Group;
2879
2880 ----------------------------------------------------------------------
2881
2882 -- Wrapper for JSPs that aren't set up to take ATTR_GROUP_ID --
2883 PROCEDURE Copy_Attribute_Group (
2884 p_api_version IN NUMBER
2885 ,p_source_ag_app_id IN NUMBER
2886 ,p_source_ag_type IN VARCHAR2
2887 ,p_source_ag_name IN VARCHAR2
2888 ,p_dest_ag_app_id IN NUMBER
2889 ,p_dest_ag_type IN VARCHAR2
2890 ,p_dest_ag_name IN VARCHAR2
2891 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2892 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2893 ,x_return_status OUT NOCOPY VARCHAR2
2894 ,x_errorcode OUT NOCOPY NUMBER
2895 ,x_msg_count OUT NOCOPY NUMBER
2896 ,x_msg_data OUT NOCOPY VARCHAR2
2897 ) IS
2898
2899 l_attr_group_id NUMBER;
2900
2901 BEGIN
2902
2903 EGO_EXT_FWK_PUB.Copy_Attribute_Group
2904 (
2905 p_api_version => p_api_version
2906 ,p_source_ag_app_id => p_source_ag_app_id
2907 ,p_source_ag_type => p_source_ag_type
2908 ,p_source_ag_name => p_source_ag_name
2909 ,p_dest_ag_app_id => p_dest_ag_app_id
2910 ,p_dest_ag_type => p_dest_ag_type
2911 ,p_dest_ag_name => p_dest_ag_name
2912 ,p_init_msg_list => p_init_msg_list
2913 ,p_commit => p_commit
2914 ,x_attr_group_id => l_attr_group_id
2915 ,x_return_status => x_return_status
2916 ,x_errorcode => x_errorcode
2917 ,x_msg_count => x_msg_count
2918 ,x_msg_data => x_msg_data
2919 );
2920
2921 END Copy_Attribute_Group;
2922
2923 ----------------------------------------------------------------------
2924
2925 -- Wrapper for OA to pass source ATTR_GROUP_ID instead of Application Id, AG Type and AG Name--
2926 PROCEDURE Copy_Attribute_Group (
2927 p_api_version IN NUMBER
2928 ,p_source_attr_group_id IN NUMBER
2929 ,p_dest_ag_app_id IN NUMBER
2930 ,p_dest_ag_type IN VARCHAR2
2931 ,p_dest_ag_name IN VARCHAR2
2932 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2933 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2934 ,x_attr_group_id OUT NOCOPY NUMBER
2935 ,x_return_status OUT NOCOPY VARCHAR2
2936 ,x_errorcode OUT NOCOPY NUMBER
2937 ,x_msg_count OUT NOCOPY NUMBER
2938 ,x_msg_data OUT NOCOPY VARCHAR2
2939 ) IS
2940
2941 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
2942
2943 BEGIN
2944
2945 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_source_attr_group_id);
2946 IF l_attr_group_pks IS NULL THEN
2947 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2948 END IF;
2949
2950 EGO_EXT_FWK_PUB.Copy_Attribute_Group
2951 (
2952 p_api_version => p_api_version
2953 ,p_source_ag_app_id => l_attr_group_pks(1)
2954 ,p_source_ag_type => l_attr_group_pks(2)
2955 ,p_source_ag_name => l_attr_group_pks(3)
2956 ,p_dest_ag_app_id => p_dest_ag_app_id
2957 ,p_dest_ag_type => p_dest_ag_type
2958 ,p_dest_ag_name => p_dest_ag_name
2959 ,p_init_msg_list => p_init_msg_list
2960 ,p_commit => p_commit
2961 ,x_attr_group_id => x_attr_group_id
2962 ,x_return_status => x_return_status
2963 ,x_errorcode => x_errorcode
2964 ,x_msg_count => x_msg_count
2965 ,x_msg_data => x_msg_data
2966 );
2967
2968 END Copy_Attribute_Group;
2969
2970 ---------------------------------------------------------------------------
2971
2972
2973 PROCEDURE Update_Attribute_Group (
2974 p_api_version IN NUMBER
2975 ,p_attr_group_id IN NUMBER
2976 ,p_display_name IN VARCHAR2
2977 ,p_attr_group_desc IN VARCHAR2
2978 ,p_security_type IN VARCHAR2
2979 ,p_multi_row_attrib_group IN VARCHAR2
2980 ,p_variant_attrib_group IN VARCHAR2
2981 ,p_num_of_cols IN NUMBER DEFAULT NULL
2982 ,p_num_of_rows IN NUMBER DEFAULT NULL
2983 ,p_owning_company_id IN NUMBER
2984 ,p_region_code IN VARCHAR2 DEFAULT NULL
2985 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2986 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2987 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2988 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2989 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2990 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2991 ,x_return_status OUT NOCOPY VARCHAR2
2992 ,x_errorcode OUT NOCOPY NUMBER
2993 ,x_msg_count OUT NOCOPY NUMBER
2994 ,x_msg_data OUT NOCOPY VARCHAR2
2995 ) IS
2996
2997 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute_Group';
2998 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
2999
3000 BEGIN
3001
3002 -- Standard start of API savepoint
3003 IF FND_API.TO_BOOLEAN(p_commit) THEN
3004 SAVEPOINT Update_Attribute_Group_PUB;
3005 END IF;
3006
3007 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_attr_group_id);
3008 IF l_attr_group_pks IS NULL THEN
3009 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3010 END IF;
3011
3012 EGO_EXT_FWK_PUB.Update_Attribute_Group(
3013 p_api_version => p_api_version
3014 ,p_application_id => l_attr_group_pks(1)
3015 ,p_attr_group_type => l_attr_group_pks(2)
3016 ,p_internal_name => l_attr_group_pks(3)
3017 ,p_display_name => p_display_name
3018 ,p_attr_group_desc => p_attr_group_desc
3019 ,p_security_type => p_security_type
3020 ,p_multi_row_attrib_group => p_multi_row_attrib_group
3021 ,p_variant_attrib_group => p_variant_attrib_group
3022 ,p_num_of_cols => p_num_of_cols
3023 ,p_num_of_rows => p_num_of_rows
3024 ,p_owning_company_id => p_owning_company_id
3025 ,p_region_code => p_region_code
3026 ,p_view_privilege_id => p_view_privilege_id
3027 ,p_edit_privilege_id => p_edit_privilege_id
3028 ,p_business_event_flag => p_business_event_flag
3029 ,p_pre_business_event_flag => p_pre_business_event_flag
3030 ,p_init_msg_list => p_init_msg_list
3031 ,p_commit => p_commit
3032 ,x_return_status => x_return_status
3033 ,x_errorcode => x_errorcode
3034 ,x_msg_count => x_msg_count
3035 ,x_msg_data => x_msg_data
3036 );
3037
3038 -- Standard check of p_commit
3039 IF FND_API.To_Boolean(p_commit) THEN
3040 COMMIT WORK;
3041 END IF;
3042
3043 EXCEPTION
3044 WHEN OTHERS THEN
3045 IF FND_API.TO_BOOLEAN(p_commit) THEN
3046 ROLLBACK TO Update_Attribute_Group_PUB;
3047 END IF;
3048 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3049
3050 IF (l_attr_group_pks IS NULL) THEN
3051 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPKsFoundForAttrGroupID';
3052 ELSE
3053 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3054 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3055 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3056 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3057 FND_MSG_PUB.Add;
3058 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3059 ,p_count => x_msg_count
3060 ,p_data => x_msg_data);
3061 END IF;
3062
3063 END Update_Attribute_Group;
3064
3065 ----------------------------------------------------------------------
3066
3067 PROCEDURE Update_Attribute_Group (
3068 p_api_version IN NUMBER
3069 ,p_application_id IN NUMBER
3070 ,p_attr_group_type IN VARCHAR2
3071 ,p_internal_name IN VARCHAR2
3072 ,p_display_name IN VARCHAR2
3073 ,p_attr_group_desc IN VARCHAR2
3074 ,p_security_type IN VARCHAR2
3075 ,p_multi_row_attrib_group IN VARCHAR2
3076 ,p_variant_attrib_group IN VARCHAR2
3077 ,p_num_of_cols IN NUMBER DEFAULT NULL
3078 ,p_num_of_rows IN NUMBER DEFAULT NULL
3079 ,p_owning_company_id IN NUMBER
3080 ,p_region_code IN VARCHAR2 DEFAULT NULL
3081 ,p_view_privilege_id IN NUMBER DEFAULT NULL
3082 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
3083 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
3084 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
3085 ,p_owner IN NUMBER DEFAULT NULL
3086 ,p_lud IN DATE DEFAULT SYSDATE
3087 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3088 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3089 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
3090 ,x_return_status OUT NOCOPY VARCHAR2
3091 ,x_errorcode OUT NOCOPY NUMBER
3092 ,x_msg_count OUT NOCOPY NUMBER
3093 ,x_msg_data OUT NOCOPY VARCHAR2
3094 ) IS
3095
3096 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute_Group';
3097
3098 --we don't use l_api_version yet, but eventually we might:
3099 --if we change required parameters, version goes from n.x to (n+1).x
3100 --if we change optional parameters, version goes from x.n to x.(n+1)
3101 l_api_version CONSTANT NUMBER := 1.0;
3102 --Bug 6048237
3103 l_num_of_cols NUMBER := p_num_of_cols;
3104 l_num_of_rows NUMBER := p_num_of_rows;
3105
3106
3107 BEGIN
3108
3109 -- Standard start of API savepoint
3110 IF FND_API.TO_BOOLEAN(p_commit) THEN
3111 SAVEPOINT Update_Attribute_Group_PUB;
3112 END IF;
3113
3114 -- Check for call compatibility
3115 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
3116 l_api_name, G_PKG_NAME)
3117 THEN
3118 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3119 END IF;
3120 -- Initialize message list even though we don't currently use it
3121 IF FND_API.To_Boolean(p_init_msg_list) THEN
3122 FND_MSG_PUB.Initialize;
3123 END IF;
3124 --Initialize num cols and rows.
3125 --Bug 6048237
3126 IF p_multi_row_attrib_group = 'Y' THEN
3127 IF l_num_of_cols is null THEN
3128 l_num_of_cols := 5;
3129 END IF;
3130 IF l_num_of_rows is null THEN
3131 l_num_of_rows := 5;
3132 END IF;
3133 ELSIF p_multi_row_attrib_group = 'N' THEN
3134 IF l_num_of_cols is null THEN
3135 l_num_of_cols := 2;
3136 END IF;
3137 END IF;
3138
3139 IF (FND_API.To_Boolean(p_is_nls_mode)) THEN
3140
3141 -- We do this IF check this way so that if p_is_nls_mode is NULL,
3142 -- we still update the non-trans tables (i.e., we treat NULL as 'F')
3143 NULL;
3144
3145 ELSE
3146
3147 -- We only update this information if we are NOT in NLS mode
3148 -- (i.e., we don't update it if we are in NLS mode)
3149 UPDATE FND_DESCR_FLEX_CONTEXTS
3150 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
3151 LAST_UPDATE_DATE = p_lud,
3152 LAST_UPDATE_LOGIN = g_current_login_id
3153 WHERE DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3154 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
3155 AND APPLICATION_ID = p_application_id;
3156
3157 UPDATE EGO_FND_DSC_FLX_CTX_EXT
3158 SET MULTI_ROW = nvl(p_multi_row_attrib_group, MULTI_ROW),
3159 VARIANT = nvl(p_variant_attrib_group, VARIANT),
3160 NUM_OF_COLS = l_num_of_cols,
3161 NUM_OF_ROWS = l_num_of_rows,
3162 SECURITY_TYPE = nvl(p_security_type, SECURITY_TYPE),
3163 REGION_CODE = p_region_code,
3164 VIEW_PRIVILEGE_ID = p_view_privilege_id,
3165 EDIT_PRIVILEGE_ID = p_edit_privilege_id,
3166 BUSINESS_EVENT_FLAG = p_business_event_flag,
3167 PRE_BUSINESS_EVENT_FLAG = p_pre_business_event_flag,
3168 LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
3169 LAST_UPDATE_DATE = p_lud,
3170 LAST_UPDATE_LOGIN = g_current_login_id
3171 WHERE DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3172 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
3173 AND APPLICATION_ID = p_application_id;
3174
3175 END IF;
3176
3177 -- We update the TL information whether or not we're in NLS mode
3178 UPDATE FND_DESCR_FLEX_CONTEXTS_TL
3179 SET DESCRIPTION = p_attr_group_desc,
3180 DESCRIPTIVE_FLEX_CONTEXT_NAME = p_display_name,
3181 LAST_UPDATE_DATE = p_lud,
3182 LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
3183 LAST_UPDATE_LOGIN = g_current_login_id,
3184 SOURCE_LANG = USERENV('LANG')
3185 WHERE APPLICATION_ID = p_application_id
3186 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3187 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
3188 -- AND LANGUAGE = USERENV('LANG');
3189 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
3190
3191 -- Standard check of p_commit
3192 IF FND_API.To_Boolean(p_commit) THEN
3193 COMMIT WORK;
3194 END IF;
3195
3196 x_return_status := FND_API.G_RET_STS_SUCCESS;
3197
3198 EXCEPTION
3199 WHEN OTHERS THEN
3200 IF FND_API.TO_BOOLEAN(p_commit) THEN
3201 ROLLBACK TO Update_Attribute_Group_PUB;
3202 END IF;
3203 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3204 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3205 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3206 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3207 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3208 FND_MSG_PUB.Add;
3209 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3210 ,p_count => x_msg_count
3211 ,p_data => x_msg_data);
3212
3213 END Update_Attribute_Group;
3214
3215 ----------------------------------------------------------------------
3216
3217 PROCEDURE Delete_Attribute_Group (
3218 p_api_version IN NUMBER
3219 ,p_attr_group_id IN NUMBER
3220 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3221 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3222 ,x_return_status OUT NOCOPY VARCHAR2
3223 ,x_errorcode OUT NOCOPY NUMBER
3224 ,x_msg_count OUT NOCOPY NUMBER
3225 ,x_msg_data OUT NOCOPY VARCHAR2
3226 ) IS
3227
3228 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute_Group';
3229 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
3230
3231 BEGIN
3232
3233 -- Standard start of API savepoint
3234 IF FND_API.TO_BOOLEAN(p_commit) THEN
3235 SAVEPOINT Delete_Attribute_Group_PUB;
3236 END IF;
3237
3238 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_attr_group_id);
3239 IF l_attr_group_pks IS NULL THEN
3240 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3241 END IF;
3242
3243 EGO_EXT_FWK_PUB.Delete_Attribute_Group(
3244 p_api_version => p_api_version
3245 ,p_application_id => l_attr_group_pks(1)
3246 ,p_attr_group_type => l_attr_group_pks(2)
3247 ,p_attr_group_name => l_attr_group_pks(3)
3248 ,p_init_msg_list => p_init_msg_list
3249 ,p_commit => p_commit
3250 ,x_return_status => x_return_status
3251 ,x_errorcode => x_errorcode
3252 ,x_msg_count => x_msg_count
3253 ,x_msg_data => x_msg_data
3254 );
3255
3256 -- Standard check of p_commit
3257 IF FND_API.To_Boolean(p_commit) THEN
3258 COMMIT WORK;
3259 END IF;
3260
3261 x_return_status := FND_API.G_RET_STS_SUCCESS;
3262
3263 EXCEPTION
3264 WHEN OTHERS THEN
3265 IF FND_API.TO_BOOLEAN(p_commit) THEN
3266 ROLLBACK TO Delete_Attribute_Group_PUB;
3267 END IF;
3268 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3269
3270 IF (l_attr_group_pks IS NULL) THEN
3271 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPKsFoundForAttrGroupID';
3272 ELSE
3273 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3274 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3275 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3276 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3277 FND_MSG_PUB.Add;
3278 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3279 ,p_count => x_msg_count
3280 ,p_data => x_msg_data);
3281 END IF;
3282
3283 END Delete_Attribute_Group;
3284
3285 ----------------------------------------------------------------------
3286
3287 PROCEDURE Delete_Attribute_Group (
3288 p_api_version IN NUMBER
3289 ,p_application_id IN NUMBER
3290 ,p_attr_group_type IN VARCHAR2
3291 ,p_attr_group_name IN VARCHAR2
3292 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3293 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3294 ,x_return_status OUT NOCOPY VARCHAR2
3295 ,x_errorcode OUT NOCOPY NUMBER
3296 ,x_msg_count OUT NOCOPY NUMBER
3297 ,x_msg_data OUT NOCOPY VARCHAR2
3298 ) IS
3299
3300 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute_Group';
3301 --we don't use l_api_version yet, but eventually we might:
3302 --if we change required parameters, version goes from n.x to (n+1).x
3303 --if we change optional parameters, version goes from x.n to x.(n+1)
3304 l_api_version CONSTANT NUMBER := 1.0;
3305
3306 l_assocs_exist BOOLEAN;
3307 l_attr_group_disp_name VARCHAR2(80);
3308
3309 BEGIN
3310
3311 -- Standard start of API savepoint
3312 IF FND_API.TO_BOOLEAN(p_commit) THEN
3313 SAVEPOINT Delete_Attribute_Group_PUB;
3314 END IF;
3315
3316 -- Check for call compatibility
3317 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
3318 l_api_name, G_PKG_NAME)
3319 THEN
3320 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3321 END IF;
3322 -- Initialize message list even though we don't currently use it
3323 IF FND_API.To_Boolean(p_init_msg_list) THEN
3324 FND_MSG_PUB.Initialize;
3325 END IF;
3326
3327 l_assocs_exist := Check_Associations_Exist(p_application_id,
3328 p_attr_group_type,
3329 p_attr_group_name);
3330
3331 IF (l_assocs_exist) THEN
3332
3333 x_return_status := FND_API.G_RET_STS_ERROR;
3334
3335 SELECT DESCRIPTIVE_FLEX_CONTEXT_NAME
3336 INTO l_attr_group_disp_name
3337 FROM FND_DESCR_FLEX_CONTEXTS_TL
3338 WHERE APPLICATION_ID = p_application_id
3339 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3340 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
3341 AND LANGUAGE = USERENV('LANG');
3342
3343
3344 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ASSOCS_EXIST1');
3345 FND_MESSAGE.Set_Token('ATTR_GRP_NAME', l_attr_group_disp_name);
3346 FND_MSG_PUB.Add;
3347 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3348 ,p_count => x_msg_count
3349 ,p_data => x_msg_data);
3350
3351 ELSE
3352
3353 Delete_Attr_Group_Internal(p_application_id
3354 ,p_attr_group_type
3355 ,p_attr_group_name
3356 ,p_commit
3357 ,x_return_status
3358 ,x_errorcode
3359 ,x_msg_count
3360 ,x_msg_data);
3361
3362 END IF;
3363
3364 -- Standard check of p_commit
3365 IF FND_API.To_Boolean(p_commit) THEN
3366 COMMIT WORK;
3367 END IF;
3368
3369 x_return_status := FND_API.G_RET_STS_SUCCESS;
3370
3371 EXCEPTION
3372 WHEN OTHERS THEN
3373 IF FND_API.TO_BOOLEAN(p_commit) THEN
3374 ROLLBACK TO Delete_Attribute_Group_PUB;
3375 END IF;
3376 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3377
3378 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3379 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3380 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3381 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3382 FND_MSG_PUB.Add;
3383 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3384 ,p_count => x_msg_count
3385 ,p_data => x_msg_data);
3386
3387 END Delete_Attribute_Group;
3388
3389 ---------------------------------------------------------------------------
3390
3391 PROCEDURE Compile_Attr_Group_View (
3392 p_api_version IN NUMBER
3393 ,p_attr_group_id IN NUMBER
3394 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3395 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3396 ,x_return_status OUT NOCOPY VARCHAR2
3397 ,x_errorcode OUT NOCOPY NUMBER
3398 ,x_msg_count OUT NOCOPY NUMBER
3399 ,x_msg_data OUT NOCOPY VARCHAR2
3400 ) IS
3401
3402 l_api_name CONSTANT VARCHAR2(30) := 'Compile_Attr_Group_View';
3403 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
3404 l_ext_table_metadata_obj EGO_EXT_TABLE_METADATA_OBJ;
3405 l_pk_col_names VARCHAR2(1000);
3406 l_dl_col_names VARCHAR2(1000);
3407 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
3408 l_curr_attr_index NUMBER;
3409 l_curr_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
3410 l_to_char_db_col_expression VARCHAR2(90);
3411 p_pk_column_name_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
3412 l_aliased_attr_names VARCHAR2(32000);
3413 l_user_attrs_view_ddl VARCHAR2(32757);
3414 l_ddl_error_message VARCHAR2(1000);
3415 l_token_table ERROR_HANDLER.Token_Tbl_Type;
3416 l_ext_table_name FND_DESCRIPTIVE_FLEXS.APPLICATION_TABLE_NAME%TYPE;
3417
3418 fnd_apps_schema VARCHAR2(30) := NULL;
3419 h_status VARCHAR2(2000);
3420 h_industry VARCHAR2(2000);
3421 h_x BOOLEAN;
3422
3423
3424 BEGIN
3425
3426 -- Standard start of API savepoint
3427 IF FND_API.TO_BOOLEAN(p_commit) THEN
3428 SAVEPOINT Compile_Attr_Group_View_PUB;
3429 END IF;
3430
3431 ----------------------------------------------------------------
3432 -- Start by getting a metadata object for the Attribute Group --
3433 ----------------------------------------------------------------
3434 l_attr_group_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
3435 p_attr_group_id => p_attr_group_id
3436 ,p_pick_from_cache => FALSE
3437 );
3438
3439 IF (l_attr_group_metadata_obj IS NOT NULL AND
3440 l_attr_group_metadata_obj.attr_metadata_table.COUNT > 0) THEN
3441
3442 ---------------------------------------------------------
3443 -- Next, get a metadata object for the Extension Table --
3444 ---------------------------------------------------------
3445 l_ext_table_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Ext_Table_Metadata(
3446 EGO_EXT_FWK_PUB.Get_Object_Id_For_AG_Type(
3447 l_attr_group_metadata_obj.APPLICATION_ID
3448 ,l_attr_group_metadata_obj.ATTR_GROUP_TYPE
3449 )
3450 );
3451
3452 IF (l_ext_table_metadata_obj IS NOT NULL) THEN
3453
3454 -----------------------------------------------------------------
3455 -- Build list strings for the Primary Key and Data Level names --
3456 -----------------------------------------------------------------
3457 l_pk_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
3458 l_ext_table_metadata_obj.pk_column_metadata
3459 ,NULL
3460 ,'NAMES'
3461 );
3462 -- bug 6345399 fetching all the dl column names
3463 -- l_dl_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
3464 -- l_ext_table_metadata_obj.data_level_metadata
3465 -- ,NULL
3466 -- ,'NAMES'
3467 -- );
3468 l_dl_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_All_Data_Level_PK_Names(
3469 p_application_id => l_attr_group_metadata_obj.APPLICATION_ID
3470 ,p_attr_group_type => l_attr_group_metadata_obj.ATTR_GROUP_TYPE
3471 );
3472 SELECT application_table_name
3473 INTO l_ext_table_name
3474 FROM fnd_descriptive_flexs
3475 WHERE application_id = l_attr_group_metadata_obj.application_id
3476 AND descriptive_flexfield_name = l_attr_group_metadata_obj.attr_group_type;
3477
3478 IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.HAS_COLUMN_IN_TABLE (p_table_name => l_ext_table_name
3479 ,p_column_name => 'DATA_LEVEL_ID'
3480 )
3481 ) THEN
3482 IF (LENGTH(l_dl_col_names) > 0) THEN
3483 l_dl_col_names := ' DATA_LEVEL_ID, '||l_dl_col_names;
3484 ELSE
3485 l_dl_col_names := ' DATA_LEVEL_ID ';
3486 END IF;
3487
3488 END IF;
3489 -- bug 6345399 end
3490
3491 ----------------------------------------------------
3492 -- Add trailing commas if the lists are non-empty --
3493 ----------------------------------------------------
3494 IF (LENGTH(l_pk_col_names) > 0) THEN
3495 l_pk_col_names := l_pk_col_names || ',';
3496 END IF;
3497 IF (LENGTH(l_dl_col_names) > 0) THEN
3498 l_dl_col_names := l_dl_col_names || ',';
3499 END IF;
3500
3501 ----------------------------------------------------
3502 -- Loop through all Attributes in the Attr Group, --
3503 -- building a list of aliased Attr names --
3504 ----------------------------------------------------
3505 l_attr_metadata_table := l_attr_group_metadata_obj.attr_metadata_table;
3506 l_curr_attr_index := l_attr_metadata_table.FIRST;
3507 WHILE (l_curr_attr_index <= l_attr_metadata_table.LAST)
3508 LOOP
3509
3510 l_curr_attr_metadata_obj := l_attr_metadata_table(l_curr_attr_index);
3511
3512 ----------------------------------------------------
3513 -- Add a column named with the Attribute internal --
3514 -- name and showing the Attribute internal value --
3515 ----------------------------------------------------
3516 l_aliased_attr_names := l_aliased_attr_names ||
3517 l_curr_attr_metadata_obj.DATABASE_COLUMN || ' ' ||
3518 l_curr_attr_metadata_obj.ATTR_NAME ||',';
3519
3520 -----------------------------------------------------
3521 -- If the Attribute has a Value Set with different --
3522 -- internal and display values, create a second --
3523 -- column (named with the Attribute internal name --
3524 -- plus '_DISP') to show the display value --
3525 -----------------------------------------------------
3526 IF (l_curr_attr_metadata_obj.VALIDATION_CODE = G_INDEPENDENT_VALIDATION_CODE OR
3527 l_curr_attr_metadata_obj.VALIDATION_CODE = G_TABLE_VALIDATION_CODE) THEN
3528
3529 ---------------------------------------
3530 -- In most cases, we do not need to --
3531 -- worry about tokenizing VS queries --
3532 ---------------------------------------
3533 IF (l_curr_attr_metadata_obj.VS_BIND_VALUES_CODE IS NULL OR
3534 l_curr_attr_metadata_obj.VS_BIND_VALUES_CODE = 'N') THEN
3535
3536 l_to_char_db_col_expression := l_curr_attr_metadata_obj.DATABASE_COLUMN;
3537
3538 ----------------------------------------------------------
3539 -- If we have an Independent Int->Disp Val query, then --
3540 -- we will need to cast the DB column value to a string --
3541 -- (if we have a Table Int->Disp Val query, we need the --
3542 -- value in its native data type for the query to work) --
3543 ----------------------------------------------------------
3544 IF (l_curr_attr_metadata_obj.VALIDATION_CODE = G_INDEPENDENT_VALIDATION_CODE) THEN
3545
3546 l_to_char_db_col_expression := EGO_USER_ATTRS_COMMON_PVT.Create_DB_Col_Alias_If_Needed(l_curr_attr_metadata_obj);
3547
3548 END IF;
3549
3550 l_aliased_attr_names := l_aliased_attr_names || '(' ||
3551 l_curr_attr_metadata_obj.INT_TO_DISP_VAL_QUERY ||
3552 l_to_char_db_col_expression || ') ';
3553
3554 ELSE
3555
3556 ---------------------------------------------------------
3557 -- If, however, the Value Set is a Table VS with bind --
3558 -- values then we need to call Tokenized_Val_Set_Query --
3559 ---------------------------------------------------------
3560
3561 -------------------------------------------------------------------
3562 -- If we need and don't yet have it, build an array of PK column --
3563 -- names/values (in this case, though, the values are themselves --
3564 -- the PK column names, because we want Tokenized_Val_Set_Query --
3565 -- to replace any PK tokens with the column name itself so our --
3566 -- view will be sufficiently generalized) --
3567 -------------------------------------------------------------------
3568 IF (p_pk_column_name_value_pairs IS NULL) THEN
3569
3570 IF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 5 AND
3571 l_ext_table_metadata_obj.pk_column_metadata(5) IS NOT NULL AND
3572 l_ext_table_metadata_obj.pk_column_metadata(5).COL_NAME IS NOT NULL) THEN
3573 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3574 EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME)
3575 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME)
3576 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME)
3577 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(4).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(4).COL_NAME)
3578 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(5).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(5).COL_NAME)
3579 );
3580 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 4 AND
3581 l_ext_table_metadata_obj.pk_column_metadata(4) IS NOT NULL AND
3582 l_ext_table_metadata_obj.pk_column_metadata(4).COL_NAME IS NOT NULL) THEN
3583 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3584 EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME)
3585 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME)
3586 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME)
3587 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(4).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(4).COL_NAME)
3588 );
3589 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 3 AND
3590 l_ext_table_metadata_obj.pk_column_metadata(3) IS NOT NULL AND
3591 l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME IS NOT NULL) THEN
3592 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3593 EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME)
3594 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME)
3595 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME)
3596 );
3597 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 2 AND
3598 l_ext_table_metadata_obj.pk_column_metadata(2) IS NOT NULL AND
3599 l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME IS NOT NULL) THEN
3600 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3601 EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME)
3602 ,EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME)
3603 );
3604 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 1 AND
3605 l_ext_table_metadata_obj.pk_column_metadata(1) IS NOT NULL AND
3606 l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME IS NOT NULL) THEN
3607 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3608 EGO_COL_NAME_VALUE_PAIR_OBJ(l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME, l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME)
3609 );
3610 END IF;
3611 END IF;
3612
3613 l_aliased_attr_names := l_aliased_attr_names || '(' ||
3614 EGO_USER_ATTRS_DATA_PVT.Tokenized_Val_Set_Query(
3615 p_attr_metadata_obj => l_curr_attr_metadata_obj
3616 ,p_attr_group_metadata_obj => l_attr_group_metadata_obj
3617 ,p_ext_table_metadata_obj => l_ext_table_metadata_obj
3618 ,p_pk_column_name_value_pairs => p_pk_column_name_value_pairs
3619 ,p_data_level_name_value_pairs => NULL
3620 ,p_entity_id => NULL
3621 ,p_entity_index => NULL
3622 ,p_entity_code => NULL
3623 ,p_add_errors_to_fnd_stack => FND_API.G_TRUE
3624 ,p_attr_name_value_pairs => NULL
3625 ,p_is_disp_to_int_query => FALSE
3626 ,p_final_bind_value => NULL
3627 ,p_return_bound_sql => TRUE
3628 ) || l_curr_attr_metadata_obj.DATABASE_COLUMN || ') ';
3629
3630 END IF;
3631
3632 -----------------------------------------------------------------
3633 -- Whichever display value query we just added (Int->Disp Val --
3634 -- query) or Tokenized Val Set Query), we now need to alias it --
3635 -- with the Attr internal name (changed by adding '_DISP') --
3636 -----------------------------------------------------------------
3637 l_aliased_attr_names := l_aliased_attr_names ||
3638 SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 24) ||
3639 '_DISP,';
3640
3641 END IF;
3642
3643 ---------------------------------------------------------------------
3644 -- If the Attribute's INFO_1 (its Dynamic URL) value is not null, --
3645 -- then we add a column containing the tokenized URL; the column's --
3646 -- name will be the Attr internal name (changed by adding '_URL') --
3647 ---------------------------------------------------------------------
3648 IF (l_curr_attr_metadata_obj.INFO_1 IS NOT NULL) THEN
3649
3650 l_aliased_attr_names := l_aliased_attr_names || '(' ||
3651 Build_Tokenized_URL_Query(l_attr_group_metadata_obj
3652 ,l_curr_attr_metadata_obj) ||
3653 ')' ||
3654 SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 24) ||
3655 '_URL,';
3656
3657 END IF;
3658
3659 ------------------------------------------------------------------------
3660 -- In case the Attribute has some UOM class attached we need to have --
3661 -- the UOM columns too. --
3662 -- <Attr_name>_UOM : contains the base UOM code --
3663 -- <Attr_name>_UUOM : contains the user entered uom ---------
3664 -- <Attr_name>_UVAL : contains the value in converted as per the UOM entered --
3665 -------------------------------------------------------------------------------
3666 IF (l_curr_attr_metadata_obj.UNIT_OF_MEASURE_CLASS IS NOT NULL) THEN
3667
3668 l_aliased_attr_names := l_aliased_attr_names || ' ''' || l_curr_attr_metadata_obj.UNIT_OF_MEASURE_BASE ||''' '
3669 || SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 26)||'_UOM ,';
3670
3671 l_aliased_attr_names := l_aliased_attr_names || ' UOM_' || SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))
3672 ||' '|| SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 25)||'_UUOM ,';
3673
3674
3675 l_aliased_attr_names := l_aliased_attr_names || 'NVL2('||l_curr_attr_metadata_obj.DATABASE_COLUMN||
3676 ' ,NVL2( UOM_'||SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))||' '||
3677 ' ,INV_CONVERT.INV_UM_CONVERT ( null '|| --ItemId
3678 ' ,null '|| --precision
3679 ' , '||l_curr_attr_metadata_obj.DATABASE_COLUMN|| --quantity
3680 ' , '''||l_curr_attr_metadata_obj.UNIT_OF_MEASURE_BASE||''' '|| --base uom
3681 ' , '||'UOM_'||SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))||' '|| --to_UOM
3682 ' , null '|| --from name
3683 ' , null )'|| --to name
3684 ' ,NULL) '||
3685 ' ,NULL) '||
3686 ' '||SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 25)||'_UVAL ,';
3687
3688 /* -- It was decided to use the api INV_CONVERT.INV_UM_CONVERT for uom conversions instead of doing it in the query.
3689 l_aliased_attr_names := l_aliased_attr_names || l_curr_attr_metadata_obj.DATABASE_COLUMN
3690 ||'/NVL((SELECT CONVERSION_RATE FROM MTL_UOM_CONVERSIONS '
3691 ||' WHERE UOM_CLASS = '''||l_curr_attr_metadata_obj.UNIT_OF_MEASURE_CLASS||''' '
3692 ||' AND UOM_CODE = UOM_' || SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))
3693 ||' AND ROWNUM = 1),1) '
3694 ||SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 24)||'_UVAL , ';
3695 */
3696 END IF;
3697
3698
3699 l_curr_attr_index := l_attr_metadata_table.NEXT(l_curr_attr_index);
3700 END LOOP;
3701
3702 ------------------------------------------------------------------
3703 -- Trim the trailing ',' from l_aliased_attr_names if necessary --
3704 ------------------------------------------------------------------
3705 IF (LENGTH(l_aliased_attr_names) > 0) THEN
3706 l_aliased_attr_names := SUBSTR(l_aliased_attr_names, 1, LENGTH(l_aliased_attr_names) - LENGTH(','));
3707 END IF;
3708
3709 -------------------------------------------------------------------------
3710 -- Now we construct and execute our AGV DDL if the AGV Name is defined --
3711 -------------------------------------------------------------------------
3712 IF (l_attr_group_metadata_obj.AGV_NAME IS NULL) THEN
3713
3714 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3715 l_token_table(1).TOKEN_VALUE := l_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME;
3716 ERROR_HANDLER.Add_Error_Message(
3717 p_message_name => 'EGO_EF_NO_AGV_NAME_ERROR'
3718 ,p_application_id => 'EGO'
3719 ,p_token_tbl => l_token_table
3720 ,p_message_type => FND_API.G_RET_STS_ERROR
3721 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3722 );
3723 RAISE FND_API.G_EXC_ERROR;
3724
3725 ELSE
3726
3727 l_user_attrs_view_ddl :=
3728 ' CREATE OR REPLACE VIEW '||l_attr_group_metadata_obj.AGV_NAME||
3729 ' AS SELECT EXTENSION_ID, '||l_pk_col_names||l_dl_col_names||l_aliased_attr_names||
3730 ' FROM '||l_attr_group_metadata_obj.EXT_TABLE_VL_NAME ||
3731 ' WHERE attr_group_id = ' || p_attr_group_id ;
3732
3733 --bugfix 11907422 for 12.2 AD_DDL changes
3734 --l_ddl_error_message := Execute_DDL_And_Return_Err(l_user_attrs_view_ddl);
3735
3736 h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
3737 --since this is view object_owner is same as APPS
3738 --bug 12392423, hard code APPS as second parameter
3739 --l_ddl_error_message:= Execute_AD_DDL_And_Return_Err(l_user_attrs_view_ddl,'APPS',l_attr_group_metadata_obj.AGV_NAME,ad_ddl.create_view);
3740 begin
3741 AD_DDL.DO_DDL(fnd_apps_schema, 'APPS',ad_ddl.create_view,l_user_attrs_view_ddl, l_attr_group_metadata_obj.AGV_NAME);
3742 EXCEPTION
3743 WHEN OTHERS
3744 THEN
3745 l_ddl_error_message := SQLERRM || ad_ddl.error_buf;
3746 END;
3747
3748 ---------------------------------------------------------------
3749 -- If something went wrong with the DDL, we report the error --
3750 ---------------------------------------------------------------
3751 IF (l_ddl_error_message IS NOT NULL) THEN
3752 IF (l_attr_group_metadata_obj IS NOT NULL) THEN
3753 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3754 l_token_table(1).TOKEN_VALUE := l_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME;
3755 Check_Attr_Group_View(p_attr_group_id);
3756 ELSE
3757 ------------------------------------------------------
3758 -- If we don't have the metadata object, we have to --
3759 -- identify the Attribute Group by its passed-in ID --
3760 ------------------------------------------------------
3761 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3762 l_token_table(1).TOKEN_VALUE := p_attr_group_id;
3763 END IF;
3764
3765 -----------------------------------------------------------------
3766 -- First we tell them that something went wrong with their DDL --
3767 -----------------------------------------------------------------
3768 ERROR_HANDLER.Add_Error_Message(
3769 p_message_name => 'EGO_EF_AGV_DDL_ERR'
3770 ,p_application_id => 'EGO'
3771 ,p_token_tbl => l_token_table
3772 ,p_message_type => FND_API.G_RET_STS_ERROR
3773 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3774 );
3775
3776 ---------------------------------------------------
3777 -- Then we show them the DDL itself, looping to --
3778 -- pass it to ERROR_HANDLER in 200-byte segments --
3779 ---------------------------------------------------
3780 WHILE (LENGTH(l_user_attrs_view_ddl) > 0)
3781 LOOP
3782 ERROR_HANDLER.Add_Error_Message(
3783 p_application_id => 'EGO'
3784 ,p_message_text => SUBSTR(l_user_attrs_view_ddl, 1, 200)
3785 ,p_message_type => FND_API.G_RET_STS_ERROR
3786 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3787 );
3788
3789 l_user_attrs_view_ddl := SUBSTR(l_user_attrs_view_ddl, 201);
3790 END LOOP;
3791
3792 ------------------------------------------------------------
3793 -- Then we give them the error message we got from the DB --
3794 ------------------------------------------------------------
3795 l_token_table(1).TOKEN_NAME := 'SQLERRM';
3796 l_token_table(1).TOKEN_VALUE := l_ddl_error_message;
3797 ERROR_HANDLER.Add_Error_Message(
3798 p_message_name => 'EGO_EF_AGV_DDL_SQLERRM'
3799 ,p_application_id => 'EGO'
3800 ,p_token_tbl => l_token_table
3801 ,p_message_type => FND_API.G_RET_STS_ERROR
3802 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3803 );
3804 RAISE FND_API.G_EXC_ERROR;
3805 END IF;
3806 END IF;
3807 END IF;
3808 END IF;
3809 --Bug : 10097736 Added to check for view before commiting
3810 Check_Attr_Group_View(p_attr_group_id);
3811
3812 -- Standard check of p_commit
3813 IF FND_API.To_Boolean(p_commit) THEN
3814 COMMIT WORK;
3815 END IF;
3816
3817 x_return_status := FND_API.G_RET_STS_SUCCESS;
3818
3819 EXCEPTION
3820 WHEN FND_API.G_EXC_ERROR THEN
3821 IF FND_API.To_Boolean(p_commit) THEN
3822 ROLLBACK TO Compile_Attr_Group_View_PUB;
3823 END IF;
3824 x_return_status := FND_API.G_RET_STS_ERROR;
3825
3826 WHEN OTHERS THEN
3827 IF FND_API.To_Boolean(p_commit) THEN
3828 ROLLBACK TO Compile_Attr_Group_View_PUB;
3829 END IF;
3830 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3831
3832 -- If the DDL is not null, that's probably the cause of our error --
3833 IF (l_user_attrs_view_ddl IS NOT NULL) THEN
3834
3835 IF (l_attr_group_metadata_obj IS NOT NULL) THEN
3836 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3837 l_token_table(1).TOKEN_VALUE := l_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME;
3838 ELSE
3839 ------------------------------------------------------
3840 -- If we don't have the metadata object, we have to --
3841 -- identify the Attribute Group by its passed-in ID --
3842 ------------------------------------------------------
3843 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3844 l_token_table(1).TOKEN_VALUE := p_attr_group_id;
3845 END IF;
3846
3847 -----------------------------------------------------------------
3848 -- First we tell them that something went wrong with their DDL --
3849 -----------------------------------------------------------------
3850 ERROR_HANDLER.Add_Error_Message(
3851 p_message_name => 'EGO_EF_AGV_DDL_ERR'
3852 ,p_application_id => 'EGO'
3853 ,p_token_tbl => l_token_table
3854 ,p_message_type => FND_API.G_RET_STS_ERROR
3855 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3856 );
3857
3858 ---------------------------------------------------
3859 -- Then we show them the DDL itself, looping to --
3860 -- pass it to ERROR_HANDLER in 100-byte segments --
3861 ---------------------------------------------------
3862 WHILE (LENGTH(l_user_attrs_view_ddl) > 0)
3863 LOOP
3864 ERROR_HANDLER.Add_Error_Message(
3865 p_application_id => 'EGO'
3866 ,p_message_text => SUBSTR(l_user_attrs_view_ddl, 1, 100)
3867 ,p_message_type => FND_API.G_RET_STS_ERROR
3868 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3869 );
3870
3871 l_user_attrs_view_ddl := SUBSTR(l_user_attrs_view_ddl, 101);
3872 END LOOP;
3873
3874 ELSE
3875
3876 l_token_table(1).TOKEN_NAME := 'PKG_NAME';
3877 l_token_table(1).TOKEN_VALUE := G_PKG_NAME;
3878 l_token_table(2).TOKEN_NAME := 'API_NAME';
3879 l_token_table(2).TOKEN_VALUE := l_api_name;
3880 l_token_table(3).TOKEN_NAME := 'SQL_ERR_MSG';
3881 l_token_table(3).TOKEN_VALUE := SQLERRM;
3882
3883 ERROR_HANDLER.Add_Error_Message(
3884 p_message_name => 'EGO_PLSQL_ERR'
3885 ,p_application_id => 'EGO'
3886 ,p_token_tbl => l_token_table
3887 ,p_message_type => FND_API.G_RET_STS_ERROR
3888 ,p_addto_fnd_stack => 'Y'
3889 );
3890
3891 END IF;
3892
3893 END Compile_Attr_Group_View;
3894
3895 ---------------------------------------------------------------------------
3896
3897 PROCEDURE Compile_Attr_Group_Views (
3898 ERRBUF OUT NOCOPY VARCHAR2
3899 ,RETCODE OUT NOCOPY VARCHAR2
3900 ,p_attr_group_id_list IN VARCHAR2
3901 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3902 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3903 ) IS
3904
3905 l_ag_id_start_index NUMBER := 1;
3906 l_ag_id_end_index NUMBER;
3907 l_curr_ag_id VARCHAR2(30);
3908 l_return_status VARCHAR2(1);
3909 l_errorcode NUMBER;
3910 l_msg_count NUMBER;
3911 l_msg_data VARCHAR2(1000);
3912
3913 BEGIN
3914
3915 -- Initialize message list if caller asked us to do so
3916 IF FND_API.To_Boolean(p_init_msg_list) THEN
3917 FND_MSG_PUB.Initialize;
3918 ERROR_HANDLER.Initialize;
3919 END IF;
3920
3921 IF (p_attr_group_id_list IS NOT NULL) THEN
3922
3923 WHILE (l_ag_id_start_index > 0)
3924 LOOP
3925
3926 l_ag_id_end_index := INSTR(p_attr_group_id_list, ',', l_ag_id_start_index);
3927 IF (l_ag_id_end_index = 0) THEN
3928 l_curr_ag_id := TRIM(SUBSTR(p_attr_group_id_list, l_ag_id_start_index));
3929 ELSE
3930 l_curr_ag_id := TRIM(SUBSTR(p_attr_group_id_list, l_ag_id_start_index, l_ag_id_end_index - l_ag_id_start_index));
3931 END IF;
3932
3933 --------------------------------------------------------
3934 -- Call the API for each Attribute Group in the list; --
3935 -- if any call fails, continue with the rest of them --
3936 --------------------------------------------------------
3937 Compile_Attr_Group_View(
3938 p_api_version => 1.0
3939 ,p_attr_group_id => l_curr_ag_id
3940 ,p_init_msg_list => FND_API.G_FALSE
3941 ,p_commit => p_commit
3942 ,x_return_status => l_return_status
3943 ,x_errorcode => l_errorcode
3944 ,x_msg_count => l_msg_count
3945 ,x_msg_data => l_msg_data
3946 );
3947
3948 ----------------------------------------------
3949 -- Update the start index for the next loop --
3950 ----------------------------------------------
3951 l_ag_id_start_index := l_ag_id_end_index;
3952 IF (l_ag_id_start_index > 0) THEN
3953 l_ag_id_start_index := l_ag_id_start_index + 1;
3954 END IF;
3955 END LOOP;
3956 END IF;
3957
3958 --------------------------------------------------------
3959 -- Find out if any error messages were logged for any --
3960 -- of the Attribute Groups for which we compiled AGVs --
3961 --------------------------------------------------------
3962 l_msg_count := ERROR_HANDLER.Get_Message_Count();
3963 IF (l_msg_count = 0) THEN
3964 RETCODE := FND_API.G_RET_STS_SUCCESS;
3965 ELSE
3966 RETCODE := FND_API.G_RET_STS_ERROR;
3967 IF (l_msg_count = 1) THEN
3968 DECLARE
3969 l_dummy_entity_index NUMBER;
3970 l_dummy_entity_id VARCHAR2(60);
3971 l_dummy_message_type VARCHAR2(1);
3972 BEGIN
3973 ERROR_HANDLER.Get_Message(x_message_text => ERRBUF
3974 ,x_entity_index => l_dummy_entity_index
3975 ,x_entity_id => l_dummy_entity_id
3976 ,x_message_type => l_dummy_message_type);
3977 END;
3978 ELSE
3979 ERRBUF := 'EGO_CHECK_FND_STACK_FOR_ERRS';
3980 END IF;
3981
3982 ERROR_HANDLER.Log_Error(
3983 p_write_err_to_inttable => 'Y'
3984 ,p_write_err_to_conclog => 'Y'
3985 );
3986 END IF;
3987
3988 END Compile_Attr_Group_Views;
3989
3990 ----------------------------------------------------------------------
3991
3992
3993 FUNCTION Does_Attr_Have_Data (
3994 p_application_id IN NUMBER DEFAULT NULL
3995 ,p_attr_group_type IN VARCHAR2 DEFAULT NULL
3996 ,p_attr_group_name IN VARCHAR2 DEFAULT NULL
3997 ,p_attr_name IN VARCHAR2 DEFAULT NULL
3998 ,p_attr_id IN NUMBER DEFAULT NULL
3999 )
4000 RETURN VARCHAR2
4001 IS
4002
4003 l_api_name CONSTANT VARCHAR2(30) := 'Does_Attr_Have_Data';
4004
4005 l_dynamic_sql VARCHAR2(17000);
4006 l_attr_group_id NUMBER;
4007 l_ext_table_vl_name VARCHAR2(30);
4008 l_curr_db_column VARCHAR2(30);
4009 l_row_count NUMBER;
4010 l_attr_data_exist VARCHAR2(1) := FND_API.G_FALSE;
4011 --l_application_id VARCHAR2(3); bug 9491192 change type to NUMBER
4012 l_application_id NUMBER;
4013 l_attr_group_type VARCHAR2(80);
4014 l_attr_group_name VARCHAR2(80);
4015 l_attr_name VARCHAR2(80);
4016
4017 BEGIN
4018
4019 if (p_attr_id IS NOT NULL) then
4020 SELECT USGS.APPLICATION_ID,
4021 USGS.DESCRIPTIVE_FLEXFIELD_NAME,
4022 USGS.DESCRIPTIVE_FLEX_CONTEXT_CODE,
4023 USGS.END_USER_COLUMN_NAME,
4024 USGS.APPLICATION_COLUMN_NAME
4025 INTO
4026 l_application_id
4027 ,l_attr_group_type
4028 ,l_attr_group_name
4029 ,l_attr_name
4030 ,l_curr_db_column
4031 FROM
4032 FND_DESCR_FLEX_COLUMN_USAGES USGS,
4033 EGO_FND_DF_COL_USGS_EXT EXT
4034 WHERE
4035 USGS.APPLICATION_ID = EXT.APPLICATION_ID
4036 AND USGS.DESCRIPTIVE_FLEXFIELD_NAME = EXT.DESCRIPTIVE_FLEXFIELD_NAME
4037 AND USGS.DESCRIPTIVE_FLEX_CONTEXT_CODE = EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE
4038 AND USGS.APPLICATION_COLUMN_NAME = EXT.APPLICATION_COLUMN_NAME
4039 AND EXT.ATTR_ID = p_attr_id;
4040
4041 else
4042
4043 l_application_id := p_application_id;
4044 l_attr_group_type := p_attr_group_type;
4045 l_attr_group_name := p_attr_group_name;
4046 l_attr_name := p_attr_name;
4047
4048 SELECT APPLICATION_COLUMN_NAME
4049 INTO l_curr_db_column
4050 FROM FND_DESCR_FLEX_COLUMN_USAGES EXT
4051 WHERE
4052 EXT.APPLICATION_ID = l_application_id
4053 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = l_attr_group_type
4054 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = l_attr_group_name
4055 AND EXT.END_USER_COLUMN_NAME = l_attr_name;
4056
4057
4058 end if;
4059
4060
4061 -----------------------------------------------------------------------
4062 -- First, get the Object and Attr Group IDs and Extension Table name --
4063 -----------------------------------------------------------------------
4064 SELECT EXT.ATTR_GROUP_ID
4065 ,NVL(FLX_EXT.APPLICATION_VL_NAME, FLX.APPLICATION_TABLE_NAME)
4066 INTO l_attr_group_id
4067 ,l_ext_table_vl_name
4068 FROM EGO_OBJECT_EXT_TABLES_B OBJ
4069 ,EGO_FND_DSC_FLX_CTX_EXT EXT
4070 ,FND_DESCRIPTIVE_FLEXS FLX
4071 ,EGO_FND_DESC_FLEXS_EXT FLX_EXT
4072 WHERE OBJ.EXT_TABLE_NAME = FLX.APPLICATION_TABLE_NAME
4073 AND FLX.APPLICATION_ID = l_application_id
4074 AND FLX.APPLICATION_ID = FLX_EXT.APPLICATION_ID(+)
4075 AND FLX.APPLICATION_ID = EXT.APPLICATION_ID
4076 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = l_attr_group_type
4077 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = FLX_EXT.DESCRIPTIVE_FLEXFIELD_NAME(+)
4078 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = EXT.DESCRIPTIVE_FLEXFIELD_NAME
4079 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = l_attr_group_name;
4080
4081 ---------------------------------------------------------------------------
4082 -- Now get the count of rows from the table where the attr_value is null --
4083 ---------------------------------------------------------------------------
4084
4085 --
4086 -- Bug 14186167. Performance issue while updating an
4087 -- attribute in setup workbench. Modified the query to
4088 -- use EXISTS clause.
4089 -- sreharih. Mon Jun 18 11:26:32 PDT 2012
4090 --
4091
4092 l_dynamic_sql := ' SELECT 1 ' ||
4093 ' FROM DUAL ' ||
4094 ' WHERE EXISTS (SELECT 1 FROM ' || l_ext_table_vl_name ||
4095 ' WHERE ATTR_GROUP_ID = :1' ||
4096 ' AND ROWNUM = 1 ' ||
4097 ' AND ' || l_curr_db_column || ' IS NOT NULL) ';
4098
4099
4100 EXECUTE IMMEDIATE l_dynamic_sql INTO l_row_count USING l_attr_group_id;
4101
4102 IF (l_row_count > 0) THEN
4103 l_attr_data_exist := FND_API.G_TRUE;
4104 END IF;
4105
4106 RETURN l_attr_data_exist;
4107
4108 END;
4109
4110 ----------------------------------------------------------------------
4111
4112 PROCEDURE Validate_Unique_Key_Attrs (
4113 p_application_id IN NUMBER
4114 ,p_attr_group_type IN VARCHAR2
4115 ,p_attr_group_name IN VARCHAR2
4116 ,p_id_list IN VARCHAR2
4117 ,x_is_valid_key OUT NOCOPY VARCHAR2
4118 ) IS
4119
4120 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Unique_Key_Attrs';
4121
4122 l_dynamic_sql VARCHAR2(17000);
4123 l_attr_group_id NUMBER;
4124 l_ext_table_vl_name VARCHAR2(30);
4125 l_object_id NUMBER;
4126 l_ext_table_metadata_obj EGO_EXT_TABLE_METADATA_OBJ;
4127 l_curr_db_column VARCHAR2(15);
4128 l_column_list VARCHAR2(15000);
4129 l_dl_col_names VARCHAR2(180);
4130 l_uk_count NUMBER;
4131
4132 TYPE DYNAMIC_CUR IS REF CURSOR;
4133 l_dynamic_cursor DYNAMIC_CUR;
4134 l_tl_table_exists VARCHAR2(1);
4135
4136 BEGIN
4137
4138 -----------------------------------------------------------------------
4139 -- First, get the Object and Attr Group IDs and Extension Table name --
4140 -----------------------------------------------------------------------
4141 SELECT OBJ.OBJECT_ID
4142 ,EXT.ATTR_GROUP_ID
4143 ,NVL(FLX_EXT.APPLICATION_VL_NAME, FLX.APPLICATION_TABLE_NAME)
4144 ,DECODE(FLX_EXT.APPLICATION_TL_TABLE_NAME, NULL, 'N', 'Y')
4145 INTO l_object_id
4146 ,l_attr_group_id
4147 ,l_ext_table_vl_name
4148 ,l_tl_table_exists
4149 FROM EGO_OBJECT_EXT_TABLES_B OBJ
4150 ,EGO_FND_DSC_FLX_CTX_EXT EXT
4151 ,FND_DESCRIPTIVE_FLEXS FLX
4152 ,EGO_FND_DESC_FLEXS_EXT FLX_EXT
4153 WHERE OBJ.EXT_TABLE_NAME = FLX.APPLICATION_TABLE_NAME
4154 AND FLX.APPLICATION_ID = p_application_id
4155 AND FLX.APPLICATION_ID = FLX_EXT.APPLICATION_ID(+)
4156 AND FLX.APPLICATION_ID = EXT.APPLICATION_ID
4157 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
4158 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = FLX_EXT.DESCRIPTIVE_FLEXFIELD_NAME(+)
4159 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = EXT.DESCRIPTIVE_FLEXFIELD_NAME
4160 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
4161
4162 -----------------------------------------------------
4163 -- Second, get the Extension Table metadata object --
4164 -----------------------------------------------------
4165 l_ext_table_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Ext_Table_Metadata(l_object_id);
4166
4167 --------------------------------------------------------------
4168 -- Next, start a list of columns on which to use 'Group By' --
4169 --------------------------------------------------------------
4170 l_column_list := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
4171 l_ext_table_metadata_obj.pk_column_metadata
4172 ,NULL
4173 ,'NAMES'
4174 ) || ',';
4175 IF (l_tl_table_exists = 'Y') THEN
4176 l_column_list := l_column_list || 'LANGUAGE,';
4177 END IF;
4178 l_dl_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
4179 l_ext_table_metadata_obj.data_level_metadata
4180 ,NULL
4181 ,'NAMES'
4182 );
4183 IF (LENGTH(l_dl_col_names) > 0) THEN
4184 l_column_list := l_column_list || l_dl_col_names || ',';
4185 END IF;
4186
4187 -----------------------------------------------------------
4188 -- Next, use the Attribute IDs to get a list of database --
4189 -- column names to add to the current 'Group By' list --
4190 -----------------------------------------------------------
4191 l_dynamic_sql := ' SELECT APPLICATION_COLUMN_NAME' ||
4192 ' FROM EGO_FND_DF_COL_USGS_EXT' ||
4193 ' WHERE ATTR_ID IN ('||p_id_list||') ';
4194
4195 OPEN l_dynamic_cursor FOR l_dynamic_sql;
4196 LOOP
4197 FETCH l_dynamic_cursor INTO l_curr_db_column;
4198 EXIT WHEN l_dynamic_cursor%NOTFOUND;
4199
4200 l_column_list := l_column_list || l_curr_db_column || ',';
4201
4202 END LOOP;
4203 CLOSE l_dynamic_cursor;
4204
4205 ----------------------------------------------
4206 -- Trim the trailing ',' from l_column_list --
4207 ----------------------------------------------
4208 l_column_list := SUBSTR(l_column_list, 1, LENGTH(l_column_list) - LENGTH(','));
4209
4210 ------------------------------------------------------------------------
4211 -- Now find out whether the proposed Unique Key is currently violated --
4212 ------------------------------------------------------------------------
4213 l_dynamic_sql := ' SELECT COUNT(1)' ||
4214 ' FROM ' || l_ext_table_vl_name ||
4215 ' WHERE ATTR_GROUP_ID = :1' ||
4216 ' GROUP BY ' || l_column_list;
4217
4218 OPEN l_dynamic_cursor FOR l_dynamic_sql USING l_attr_group_id;
4219 LOOP
4220 FETCH l_dynamic_cursor INTO l_uk_count;
4221 EXIT WHEN (l_dynamic_cursor%NOTFOUND OR
4222 x_is_valid_key = FND_API.G_FALSE);
4223
4224 IF (l_uk_count > 1) THEN
4225 x_is_valid_key := FND_API.G_FALSE;
4226 END IF;
4227
4228 END LOOP;
4229 CLOSE l_dynamic_cursor;
4230
4231 ------------------------------------------------------------------------------
4232 -- If we got this far without adding a value to x_is_valid_key, then there --
4233 -- are no rows in the extension tables that violate the proposed Unique Key --
4234 ------------------------------------------------------------------------------
4235 IF (x_is_valid_key IS NULL) THEN
4236 x_is_valid_key := FND_API.G_TRUE;
4237 END IF;
4238
4239 EXCEPTION
4240 WHEN OTHERS THEN
4241
4242 /***
4243 Dylan wonders: did I write this? If so, why? If not, who did...and why?
4244 Maybe it was for PA integration...?
4245 ***/
4246 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4247 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
4248 END IF;
4249
4250 END Validate_Unique_Key_Attrs;
4251
4252 ----------------------------------------------------------------------
4253 --------------------------
4254 -- Data Level APIs --
4255 --------------------------
4256
4257 PROCEDURE Sync_Data_Level (
4258 p_api_version IN NUMBER
4259 ,p_init_msg_list IN VARCHAR2
4260 ,p_commit IN VARCHAR2
4261 ,p_transaction_type IN VARCHAR2
4262 ,p_application_id IN NUMBER
4263 ,p_attr_group_type IN VARCHAR2
4264 ,p_data_level_name IN VARCHAR2
4265 ,p_user_data_level_name IN VARCHAR2
4266 ,p_pk1_column_name IN VARCHAR2
4267 ,p_pk1_column_type IN VARCHAR2
4268 ,p_pk2_column_name IN VARCHAR2
4269 ,p_pk2_column_type IN VARCHAR2
4270 ,p_pk3_column_name IN VARCHAR2
4271 ,p_pk3_column_type IN VARCHAR2
4272 ,p_pk4_column_name IN VARCHAR2
4273 ,p_pk4_column_type IN VARCHAR2
4274 ,p_pk5_column_name IN VARCHAR2
4275 ,p_pk5_column_type IN VARCHAR2
4276 ,p_enable_defaulting IN VARCHAR2
4277 ,p_enable_view_priv IN VARCHAR2
4278 ,p_enable_edit_priv IN VARCHAR2
4279 ,p_enable_pre_event IN VARCHAR2
4280 ,p_enable_post_event IN VARCHAR2
4281 ,p_last_updated_by IN VARCHAR2
4282 ,p_last_update_date IN DATE
4283 ,p_is_nls_mode IN VARCHAR2
4284 ,x_data_level_id IN OUT NOCOPY NUMBER
4285 ,x_return_status OUT NOCOPY VARCHAR2
4286 ,x_msg_count OUT NOCOPY NUMBER
4287 ,x_msg_data OUT NOCOPY VARCHAR2
4288 ) IS
4289
4290 l_api_version NUMBER;
4291 l_api_name VARCHAR2(30);
4292 l_msg_data VARCHAR2(4000);
4293 l_data_level_id NUMBER;
4294 l_enable_pre_event VARCHAR2(1);
4295 l_enable_post_event VARCHAR2(1);
4296
4297 BEGIN
4298
4299 l_api_version := 1.0;
4300 l_api_name := 'SYNC_DATA_LEVEL';
4301 l_msg_data := NULL;
4302 code_debug(l_api_name ||' Start ');
4303
4304 -- Initialize message list even though we don't currently use it
4305 IF FND_API.To_Boolean(p_init_msg_list) THEN
4306 FND_MSG_PUB.Initialize;
4307 END IF;
4308
4309 -- Check for call compatibility
4310 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
4311 l_api_name, G_PKG_NAME)
4312 THEN
4313 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4314 END IF;
4315
4316 -- Standard start of API savepoint
4317 IF FND_API.TO_BOOLEAN(p_commit) THEN
4318 SAVEPOINT SYNC_DATA_LEVEL;
4319 END IF;
4320
4321 IF (p_transaction_type IS NULL) THEN
4322 fnd_message.set_name(G_APP_NAME, 'EGO_TRANSACTION_TYPE');
4323 l_msg_data := fnd_msg_pub.get();
4324 ELSIF p_application_id IS NULL THEN
4325 fnd_message.set_name(G_APP_NAME, 'EGO_EF_APPLICATION_ID');
4326 l_msg_data := fnd_msg_pub.get();
4327 ELSIF p_attr_group_type IS NULL THEN
4328 fnd_message.set_name(G_APP_NAME, 'EGO_EF_ATTR_GROUP_TYPE');
4329 l_msg_data := fnd_msg_pub.get();
4330 ELSIF p_data_level_name IS NULL THEN
4331 fnd_message.set_name(G_APP_NAME, 'EGO_EF_DATA_LEVEL');
4332 l_msg_data := fnd_msg_pub.get();
4333 END IF;
4334
4335 IF l_msg_data IS NOT NULL THEN
4336 fnd_message.set_name(G_APP_NAME,'EGO_PKG_MAND_VALUES_MISS1');
4337 fnd_message.set_token('PACKAGE', G_PKG_NAME ||'.'|| l_api_name);
4338 fnd_message.set_token('VALUE', l_msg_data);
4339 FND_MSG_PUB.Add;
4340 RAISE FND_API.G_EXC_ERROR;
4341 END IF;
4342 code_debug(l_api_name ||' Mandatory param validation complete '||p_transaction_type);
4343
4344 BEGIN
4345 SELECT NVL2(pre_business_event_name,NVL(p_enable_pre_event,'N'),'N'),
4346 NVL2(business_event_name,NVL(p_enable_post_event,'N'),'N')
4347 INTO l_enable_pre_event, l_enable_post_event
4348 FROM EGO_FND_DESC_FLEXS_EXT
4349 WHERE application_id = p_application_id
4350 AND descriptive_flexfield_name = p_attr_group_type;
4351 EXCEPTION
4352 WHEN NO_DATA_FOUND THEN
4353 l_enable_pre_event := 'N';
4354 l_enable_post_event := 'N';
4355 WHEN OTHERS THEN
4356 RAISE;
4357 END;
4358
4359 IF p_transaction_type = 'CREATE' THEN
4360 SELECT max(data_level_id)
4361 INTO l_data_level_id
4362 FROM ego_data_level_b
4363 WHERE application_id = p_application_id;
4364
4365 IF l_data_level_id IS NULL THEN
4366 l_data_level_id := p_application_id * 100 + 1;
4367 ELSE
4368 l_data_level_id := l_data_level_id + 1;
4369 END IF;
4370
4371 IF l_data_level_id = ((p_application_id+1) * 100) THEN
4372 fnd_message.set_name(G_APP_NAME, 'EGO_EF_DATA_LEVEL_LIMIT');
4373 FND_MSG_PUB.Add;
4374 RAISE FND_API.G_EXC_ERROR;
4375 END IF;
4376
4377 code_debug(l_api_name ||' Data level id being used in insert: '||l_data_level_id);
4378
4379 INSERT INTO EGO_DATA_LEVEL_B
4380 (data_level_id
4381 ,application_id
4382 ,attr_group_type
4383 ,data_level_name
4384 ,pk1_column_name
4385 ,pk1_column_type
4386 ,pk2_column_name
4387 ,pk2_column_type
4388 ,pk3_column_name
4389 ,pk3_column_type
4390 ,pk4_column_name
4391 ,pk4_column_type
4392 ,pk5_column_name
4393 ,pk5_column_type
4394 ,enable_defaulting
4395 ,enable_view_priv
4396 ,enable_edit_priv
4397 ,enable_pre_event
4398 ,enable_post_event
4399 ,created_by
4400 ,creation_date
4401 ,last_updated_by
4402 ,last_update_date
4403 ,last_update_login
4404 )
4405 values
4406 (l_data_level_id
4407 ,p_application_id
4408 ,p_attr_group_type
4409 ,p_data_level_name
4410 ,p_pk1_column_name
4411 ,p_pk1_column_type
4412 ,p_pk2_column_name
4413 ,p_pk2_column_type
4414 ,p_pk3_column_name
4415 ,p_pk3_column_type
4416 ,p_pk4_column_name
4417 ,p_pk4_column_type
4418 ,p_pk5_column_name
4419 ,p_pk5_column_type
4420 ,p_enable_defaulting
4421 ,p_enable_view_priv
4422 ,p_enable_edit_priv
4423 ,l_enable_pre_event
4424 ,l_enable_post_event
4425 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4426 ,NVL(p_last_update_date, SYSDATE)
4427 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4428 ,NVL(p_last_update_date, SYSDATE)
4429 ,G_CURRENT_LOGIN_ID
4430 );
4431
4432 INSERT INTO EGO_DATA_LEVEL_TL
4433 (data_level_id
4434 ,user_data_level_name
4435 ,language
4436 ,source_lang
4437 ,created_by
4438 ,creation_date
4439 ,last_updated_by
4440 ,last_update_date
4441 ,last_update_login
4442 )
4443 SELECT
4444 l_data_level_id
4445 ,NVL(p_user_data_level_name, p_data_level_name)
4446 ,l.language_code
4447 ,USERENV('LANG')
4448 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4449 ,NVL(p_last_update_date, SYSDATE)
4450 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4451 ,NVL(p_last_update_date, SYSDATE)
4452 ,G_CURRENT_LOGIN_ID
4453 FROM FND_LANGUAGES L
4454 WHERE L.INSTALLED_FLAG in ('I', 'B');
4455
4456 ELSIF p_transaction_type = 'UPDATE' THEN
4457 SELECT data_level_id
4458 INTO l_data_level_id
4459 FROM ego_data_level_b
4460 WHERE application_id = p_application_id
4461 AND attr_group_type = p_attr_group_type
4462 AND data_level_name = p_data_level_name;
4463 code_debug(l_api_name ||' Data level id being used in update: '||l_data_level_id);
4464
4465 IF x_data_level_id IS NOT NULL AND x_data_level_id <> l_data_level_id THEN
4466 fnd_message.set_name(G_APP_NAME, 'EGO_EF_INVALID_DATA_LEVEL');
4467 FND_MSG_PUB.Add;
4468 RAISE FND_API.G_EXC_ERROR;
4469 END IF;
4470 UPDATE EGO_DATA_LEVEL_TL
4471 SET user_data_level_name = NVL(p_user_data_level_name, p_data_level_name)
4472 ,source_lang = userenv('LANG') -- Bug 6964013
4473 ,last_updated_by = NVL(p_last_updated_by, G_CURRENT_USER_ID)
4474 ,last_update_date = NVL(p_last_update_date, SYSDATE)
4475 ,last_update_login = G_CURRENT_LOGIN_ID
4476 WHERE data_level_id = l_data_level_id
4477 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
4478
4479 IF NOT FND_API.to_boolean(p_is_nls_mode) THEN
4480 UPDATE EGO_DATA_LEVEL_B
4481 SET pk1_column_name = p_pk1_column_name
4482 ,pk1_column_type = p_pk1_column_type
4483 ,pk2_column_name = p_pk2_column_name
4484 ,pk2_column_type = p_pk2_column_type
4485 ,pk3_column_name = p_pk3_column_name
4486 ,pk3_column_type = p_pk3_column_type
4487 ,pk4_column_name = p_pk4_column_name
4488 ,pk4_column_type = p_pk4_column_type
4489 ,pk5_column_name = p_pk5_column_name
4490 ,pk5_column_type = p_pk5_column_type
4491 ,enable_defaulting = p_enable_defaulting
4492 ,enable_view_priv = p_enable_view_priv
4493 ,enable_edit_priv = p_enable_edit_priv
4494 ,enable_pre_event = l_enable_pre_event
4495 ,enable_post_event = l_enable_post_event
4496 ,last_updated_by = NVL(p_last_updated_by, G_CURRENT_USER_ID)
4497 ,last_update_date = NVL(p_last_update_date, SYSDATE)
4498 ,last_update_login = G_CURRENT_LOGIN_ID
4499 WHERE data_level_id = l_data_level_id;
4500 END IF;
4501 END IF;
4502
4503 IF FND_API.TO_BOOLEAN(p_commit) THEN
4504 COMMIT WORK;
4505 END IF;
4506 x_data_level_id := l_data_level_id;
4507 x_return_status := FND_API.G_RET_STS_SUCCESS;
4508 code_debug(l_api_name ||' Done ');
4509
4510 EXCEPTION
4511 WHEN FND_API.G_EXC_ERROR THEN
4512 code_debug(l_api_name ||' Exception - FND_API.G_EXC_ERROR '||x_msg_data);
4513 IF FND_API.TO_BOOLEAN(p_commit) THEN
4514 ROLLBACK to SYNC_DATA_LEVEL;
4515 END IF;
4516 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
4517 ,p_count => x_msg_count
4518 ,p_data => x_msg_data);
4519 x_return_status := FND_API.G_RET_STS_ERROR;
4520
4521 WHEN OTHERS THEN
4522 code_debug(l_api_name ||' Exception - Others '||SQLERRM);
4523 IF FND_API.TO_BOOLEAN(p_commit) THEN
4524 ROLLBACK to SYNC_DATA_LEVEL;
4525 END IF;
4526 x_return_status := FND_API.G_RET_STS_ERROR;
4527
4528 END Sync_Data_Level;
4529 ----------------------------------------------------------------------
4530
4531 ----------------------------------------------------------------------
4532 ---------------------------------
4533 -- Data Level Association APIs --
4534 ---------------------------------
4535
4536 PROCEDURE Sync_dl_assoc (
4537 p_api_version IN NUMBER
4538 ,p_init_msg_list IN VARCHAR2
4539 ,p_commit IN VARCHAR2
4540 ,p_transaction_type IN VARCHAR2
4541 ,p_attr_group_id IN NUMBER
4542 ,p_application_id IN NUMBER
4543 ,p_attr_group_type IN VARCHAR2
4544 ,p_attr_group_name IN VARCHAR2
4545 ,p_data_level_id IN NUMBER
4546 ,p_data_level_name IN VARCHAR2
4547 ,p_defaulting IN VARCHAR2
4548 ,p_defaulting_name IN VARCHAR2
4549 ,p_view_priv_id IN NUMBER
4550 ,p_view_priv_name IN VARCHAR2
4551 ,p_user_view_priv_name IN VARCHAR2
4552 ,p_edit_priv_id IN NUMBER
4553 ,p_edit_priv_name IN VARCHAR2
4554 ,p_user_edit_priv_name IN VARCHAR2
4555 ,p_raise_pre_event IN VARCHAR2
4556 ,p_raise_post_event IN VARCHAR2
4557 ,p_last_updated_by IN VARCHAR2
4558 ,p_last_update_date IN DATE
4559 ,x_return_status OUT NOCOPY VARCHAR2
4560 ,x_msg_count OUT NOCOPY NUMBER
4561 ,x_msg_data OUT NOCOPY VARCHAR2
4562 ) IS
4563
4564 l_api_version NUMBER;
4565 l_api_name VARCHAR2(30);
4566 l_msg_data VARCHAR2(4000);
4567 l_attr_group_id NUMBER;
4568 l_defaulting VARCHAR2(1);
4569 l_view_priv_id NUMBER;
4570 l_edit_priv_id NUMBER;
4571 l_raise_pre_event VARCHAR2(1);
4572 l_raise_post_event VARCHAR2(1);
4573 l_data_level_rec ego_data_level_b%ROWTYPE;
4574 l_msg_name VARCHAR2(30);
4575 BEGIN
4576
4577 l_api_version := 1.0;
4578 l_api_name := 'SYNC_DL_ASSOC';
4579 l_msg_data := NULL;
4580 l_msg_name := 'EGO_IPI_INVALID_VALUE';
4581 code_debug(l_api_name ||' Start ');
4582
4583
4584
4585 -- Initialize message list even though we don't currently use it
4586 IF FND_API.To_Boolean(p_init_msg_list) THEN
4587 FND_MSG_PUB.Initialize;
4588 END IF;
4589
4590
4591 -- Check for call compatibility
4592 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
4593 l_api_name, G_PKG_NAME)
4594 THEN
4595 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4596 END IF;
4597
4598
4599
4600 -- Standard start of API savepoint
4601 IF FND_API.TO_BOOLEAN(p_commit) THEN
4602 SAVEPOINT SYNC_DL_ASSOC;
4603 END IF;
4604
4605 IF (p_transaction_type IS NULL) THEN
4606 fnd_message.set_name(G_APP_NAME, 'EGO_TRANSACTION_TYPE');
4607 l_msg_data := fnd_msg_pub.get();
4608 ELSIF p_attr_group_id IS NULL AND
4609 p_application_id IS NULL AND
4610 p_attr_group_type IS NULL AND
4611 p_attr_group_name IS NULL THEN
4612 fnd_message.set_name(G_APP_NAME, 'EGO_EF_ATTR_GRP');
4613 l_msg_data := fnd_msg_pub.get();
4614 ELSIF p_data_level_id IS NULL AND
4615 p_data_level_name IS NULL THEN
4616 fnd_message.set_name(G_APP_NAME, 'EGO_EF_DATA_LEVEL');
4617 l_msg_data := fnd_msg_pub.get();
4618 END IF;
4619
4620 IF l_msg_data IS NOT NULL THEN
4621 fnd_message.set_name(G_APP_NAME,'EGO_PKG_MAND_VALUES_MISS1');
4622 fnd_message.set_token('PACKAGE', G_PKG_NAME ||'.'|| l_api_name);
4623 fnd_message.set_token('VALUE', l_msg_data);
4624 FND_MSG_PUB.Add;
4625 RAISE FND_API.G_EXC_ERROR;
4626 END IF;
4627 code_debug(l_api_name ||' Mandatory param validation complete '||p_transaction_type);
4628
4629
4630 -- attr group check
4631 BEGIN
4632 IF p_attr_group_id IS NULL THEN
4633 SELECT attr_group_id
4634 INTO l_attr_group_id
4635 FROM ego_fnd_dsc_flx_ctx_ext
4636 WHERE application_id = p_application_id
4637 AND descriptive_flexfield_name = p_attr_group_type
4638 AND descriptive_flex_context_code = p_attr_group_name;
4639 ELSE
4640 SELECT attr_group_id
4641 INTO l_attr_group_id
4642 FROM ego_fnd_dsc_flx_ctx_ext
4643 WHERE attr_group_id = p_attr_group_id;
4644 END IF;
4645 code_debug(l_api_name ||' Attr Group Id '||l_attr_group_id);
4646
4647 EXCEPTION
4648 WHEN NO_DATA_FOUND THEN
4649 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4650 IF p_attr_group_id IS NULL THEN
4651 FND_MESSAGE.Set_Token('NAME','Attribute Group ' );
4652 FND_MESSAGE.Set_Token('VALUE',p_attr_group_type||' - '||p_attr_group_name );
4653 ELSE
4654 FND_MESSAGE.Set_Token('NAME','Attribute Id' );
4655 FND_MESSAGE.Set_Token('VALUE',l_attr_group_id);
4656 END IF;
4657 FND_MSG_PUB.Add;
4658 RAISE FND_API.G_EXC_ERROR;
4659 END;
4660
4661 -- data level check
4662 code_debug(l_api_name ||' data level '||p_data_level_name||' p_attr_group_type '||p_attr_group_type ||'p_application_id '||p_application_id);
4663
4664 BEGIN
4665 IF p_data_level_id IS NULL THEN
4666 SELECT *
4667 INTO l_data_level_rec
4668 FROM ego_data_level_b
4669 WHERE data_level_name = p_data_level_name
4670 AND attr_group_type = p_attr_group_type
4671 AND application_id = p_application_id;
4672 ELSE
4673 SELECT *
4674 INTO l_data_level_rec
4675 FROM ego_data_level_b
4676 WHERE 1=1 --data_level_name = p_data_level_id;
4677 AND data_level_id = p_data_level_id; --Changed for bug 9574826
4678 END IF;
4679 code_debug(l_api_name ||' Data Level Id '||l_data_level_rec.data_level_id);
4680
4681 EXCEPTION
4682 WHEN NO_DATA_FOUND THEN
4683 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4684 IF p_data_level_id IS NULL THEN
4685 FND_MESSAGE.Set_Token('NAME','Data Level' );
4686 FND_MESSAGE.Set_Token('VALUE', p_data_level_name);
4687 ELSE
4688 FND_MESSAGE.Set_Token('NAME','Data Level Id' );
4689 FND_MESSAGE.Set_Token('VALUE',p_data_level_id);
4690 END IF;
4691 FND_MSG_PUB.Add;
4692 RAISE FND_API.G_EXC_ERROR;
4693 END;
4694 code_debug(l_api_name ||' Data Level id '||l_data_level_rec.data_level_id);
4695
4696
4697 -- defaulting check check
4698 BEGIN
4699 IF l_data_level_rec.enable_defaulting = 'Y' THEN
4700 IF p_defaulting IS NOT NULL THEN
4701 SELECT lookup_code
4702 INTO l_defaulting
4703 FROM fnd_lookup_values
4704 WHERE lookup_type = 'EGO_EF_AG_DL_BEHAVIOR'
4705 AND lookup_code = p_defaulting
4706 AND language = USERENV('LANG');
4707 ELSIF p_defaulting_name IS NOT NULL THEN
4708 SELECT lookup_code
4709 INTO l_defaulting
4710 FROM fnd_lookup_values
4711 WHERE lookup_type = 'EGO_EF_AG_DL_BEHAVIOR'
4712 AND meaning = p_defaulting_name
4713 AND language = USERENV('LANG');
4714 ELSE
4715 l_defaulting := '';
4716 END IF;
4717 ELSE
4718 IF p_defaulting IS NOT NULL OR p_defaulting_name IS NOT NULL THEN
4719 FND_MESSAGE.SET_NAME(G_APP_NAME,'EGO_EF_DEFAULT_NOT_ALLOWED');
4720 FND_MSG_PUB.Add;
4721 RAISE FND_API.G_EXC_ERROR;
4722 END IF;
4723 END IF;
4724 EXCEPTION
4725 WHEN NO_DATA_FOUND THEN
4726 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4727 IF p_defaulting IS NULL THEN
4728 FND_MESSAGE.Set_Token('NAME','Defaulting ' );
4729 FND_MESSAGE.Set_Token('VALUE',p_defaulting_name );
4730 ELSE
4731 FND_MESSAGE.Set_Token('NAME','Defaulting ' );
4732 FND_MESSAGE.Set_Token('VALUE',p_defaulting);
4733 END IF;
4734 FND_MSG_PUB.Add;
4735 RAISE FND_API.G_EXC_ERROR;
4736 END;
4737 code_debug(l_api_name ||' Defaulting '||l_defaulting);
4738
4739 -- view priv check
4740 BEGIN
4741 IF l_data_level_rec.enable_view_priv = 'Y' THEN
4742 IF p_view_priv_id IS NOT NULL THEN
4743 SELECT function_id
4744 INTO l_view_priv_id
4745 FROM fnd_form_functions
4746 WHERE function_id = p_view_priv_id;
4747 ELSIF p_view_priv_name IS NOT NULL THEN
4748 SELECT function_id
4749 INTO l_view_priv_id
4750 FROM fnd_form_functions
4751 WHERE function_name = p_view_priv_name;
4752 ELSIF p_user_view_priv_name IS NOT NULL THEN
4753 SELECT function_id
4754 INTO l_view_priv_id
4755 FROM fnd_form_functions_vl
4756 WHERE user_function_name = p_user_view_priv_name;
4757 ELSE
4758 l_view_priv_id := NULL;
4759 END IF;
4760 ELSE
4761 IF p_view_priv_id IS NOT NULL OR p_view_priv_name IS NOT NULL THEN
4762 -- flash message you cannot view privileges
4763 fnd_message.set_name(G_APP_NAME,'EGO_VIEW_PRIV_NOT_ALLOWED');
4764 FND_MSG_PUB.Add;
4765 RAISE FND_API.G_EXC_ERROR;
4766 END IF;
4767 END IF;
4768 EXCEPTION
4769 WHEN NO_DATA_FOUND THEN
4770 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4771 IF p_view_priv_id IS NOT NULL THEN
4772 FND_MESSAGE.Set_Token('NAME','View Privilege' );
4773 FND_MESSAGE.Set_Token('VALUE',p_view_priv_id );
4774 ELSIF p_view_priv_name IS NOT NULL THEN
4775 FND_MESSAGE.Set_Token('NAME','View Privilege' );
4776 FND_MESSAGE.Set_Token('VALUE',p_view_priv_name);
4777 ELSE
4778 FND_MESSAGE.set_token('NAME','View Privilege');
4779 FND_MESSAGE.set_token('VALUE',p_user_view_priv_name);
4780 END IF;
4781 FND_MSG_PUB.Add;
4782 RAISE FND_API.G_EXC_ERROR;
4783 END;
4784 code_debug(l_api_name ||' View Priv id '||l_view_priv_id);
4785
4786 -- edit priv check
4787 BEGIN
4788 IF l_data_level_rec.enable_edit_priv = 'Y' THEN
4789 IF p_edit_priv_id IS NOT NULL THEN
4790 SELECT function_id
4791 INTO l_edit_priv_id
4792 FROM fnd_form_functions
4793 WHERE function_id = p_edit_priv_id;
4794 ELSIF p_edit_priv_name IS NOT NULL THEN
4795 SELECT function_id
4796 INTO l_edit_priv_id
4797 FROM fnd_form_functions
4798 WHERE function_name = p_edit_priv_name;
4799 ELSIF p_user_edit_priv_name IS NOT NULL THEN
4800 SELECT function_id
4801 INTO l_edit_priv_id
4802 FROM fnd_form_functions_vl
4803 WHERE user_function_name = p_user_edit_priv_name;
4804 ELSE
4805 l_edit_priv_id := NULL;
4806 END IF;
4807 ELSE
4808 IF p_edit_priv_id IS NOT NULL OR p_edit_priv_name IS NOT NULL THEN
4809 -- flash message you cannot view privileges
4810 fnd_message.set_name(G_APP_NAME,'EGO_EDIT_PRIV_NOT_ALLOWED');
4811 FND_MSG_PUB.Add;
4812 RAISE FND_API.G_EXC_ERROR;
4813 END IF;
4814 END IF;
4815 EXCEPTION
4816 WHEN NO_DATA_FOUND THEN
4817 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4818 IF p_edit_priv_id IS NOT NULL THEN
4819 FND_MESSAGE.Set_Token('NAME','Edit Privilege' );
4820 FND_MESSAGE.Set_Token('VALUE',p_edit_priv_id );
4821 ELSIF p_edit_priv_name IS NOT NULL THEN
4822 FND_MESSAGE.Set_Token('NAME','Edit Privilege' );
4823 FND_MESSAGE.Set_Token('VALUE',p_edit_priv_name);
4824 ELSE
4825 FND_MESSAGE.set_token('NAME','Edit Privilege');
4826 FND_MESSAGE.set_token('VALUE',p_user_edit_priv_name);
4827 END IF;
4828 FND_MSG_PUB.Add;
4829 RAISE FND_API.G_EXC_ERROR;
4830 END;
4831 code_debug(l_api_name ||' Edit Priv id '||l_edit_priv_id);
4832
4833 IF NVL(p_raise_pre_event,'N') IN ('Y', 'N') THEN
4834 IF l_data_level_rec.enable_pre_event = 'N' AND NVL(p_raise_pre_event,'N') = 'Y' THEN
4835 fnd_message.set_name(G_APP_NAME,'EGO_PRE_EVENT_NOT_ALLOWED');
4836 FND_MSG_PUB.Add;
4837 RAISE FND_API.G_EXC_ERROR;
4838 ELSE
4839 l_raise_pre_event := NVL(p_raise_pre_event,'N');
4840 END IF;
4841 ELSE
4842 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4843 FND_MESSAGE.Set_Token('NAME','Pre Event' );
4844 FND_MESSAGE.Set_Token('VALUE',l_raise_pre_event );
4845 FND_MSG_PUB.Add;
4846 RAISE FND_API.G_EXC_ERROR;
4847 END IF;
4848 code_debug(l_api_name ||' Pre Event '||l_raise_pre_event);
4849
4850 IF NVL(p_raise_post_event,'N') IN ('Y', 'N') THEN
4851 IF l_data_level_rec.enable_post_event = 'N' AND NVL(p_raise_post_event,'N') = 'Y' THEN
4852 fnd_message.set_name(G_APP_NAME,'EGO_POST_EVENT_NOT_ALLOWED');
4853 FND_MSG_PUB.Add;
4854 RAISE FND_API.G_EXC_ERROR;
4855 ELSE
4856 l_raise_post_event := NVL(p_raise_post_event,'N');
4857 END IF;
4858 ELSE
4859 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4860 FND_MESSAGE.Set_Token('NAME','Post Event' );
4861 FND_MESSAGE.Set_Token('VALUE',l_raise_post_event );
4862 FND_MSG_PUB.Add;
4863 RAISE FND_API.G_EXC_ERROR;
4864 END IF;
4865 code_debug(l_api_name ||' Post Event '||l_raise_post_event);
4866
4867 IF p_transaction_type = 'CREATE' THEN
4868 INSERT INTO EGO_ATTR_GROUP_DL
4869 (attr_group_id
4870 ,data_level_id
4871 ,defaulting
4872 ,view_privilege_id
4873 ,edit_privilege_id
4874 ,raise_pre_event
4875 ,raise_post_event
4876 ,created_by
4877 ,creation_date
4878 ,last_updated_by
4879 ,last_update_date
4880 ,last_update_login
4881 )
4882 VALUES
4883 (l_attr_group_id
4884 ,l_data_level_rec.data_level_id
4885 ,l_defaulting
4886 ,l_view_priv_id
4887 ,l_edit_priv_id
4888 ,l_raise_pre_event
4889 ,l_raise_post_event
4890 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4891 ,NVL(p_last_update_date, SYSDATE)
4892 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4893 ,NVL(p_last_update_date, SYSDATE)
4894 ,G_CURRENT_LOGIN_ID
4895 );
4896 ELSE
4897 UPDATE EGO_ATTR_GROUP_DL
4898 SET defaulting = l_defaulting
4899 ,view_privilege_id = l_view_priv_id
4900 ,edit_privilege_id = l_edit_priv_id
4901 ,raise_pre_event = l_raise_pre_event
4902 ,raise_post_event = l_raise_post_event
4903 ,last_updated_by = NVL(p_last_updated_by, G_CURRENT_USER_ID)
4904 ,last_update_date = NVL(p_last_update_date, SYSDATE)
4905 ,last_update_login = G_CURRENT_LOGIN_ID
4906 where attr_group_id = l_attr_group_id and data_level_id =l_data_level_rec.data_level_id;
4907 END IF;
4908
4909 IF FND_API.TO_BOOLEAN(p_commit) THEN
4910 COMMIT WORK;
4911 END IF;
4912
4913 x_return_status := FND_API.G_RET_STS_SUCCESS;
4914 code_debug(l_api_name ||' Done ');
4915
4916 EXCEPTION
4917 WHEN FND_API.G_EXC_ERROR THEN
4918 code_debug(l_api_name ||' Exception - FND_API.G_EXC_ERROR '||x_msg_data);
4919 IF FND_API.TO_BOOLEAN(p_commit) THEN
4920 ROLLBACK to SYNC_DL_ASSOC;
4921 END IF;
4922 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
4923 ,p_count => x_msg_count
4924 ,p_data => x_msg_data);
4925 x_return_status := FND_API.G_RET_STS_ERROR;
4926
4927 WHEN OTHERS THEN
4928 code_debug(l_api_name ||' Exception - Others '||SQLERRM);
4929 IF FND_API.TO_BOOLEAN(p_commit) THEN
4930 ROLLBACK to SYNC_DL_ASSOC;
4931 END IF;
4932 x_return_status := FND_API.G_RET_STS_ERROR;
4933
4934 END Sync_dl_assoc;
4935
4936 ----------------------------------------------------------------------
4937
4938 --------------------
4939 -- Attribute APIs --
4940 --------------------
4941
4942 ----------------------------------------------------------------------
4943
4944 PROCEDURE Create_Attribute (
4945 p_api_version IN NUMBER
4946 ,p_application_id IN NUMBER
4947 ,p_attr_group_type IN VARCHAR2
4948 ,p_attr_group_name IN VARCHAR2
4949 ,p_internal_name IN VARCHAR2
4950 ,p_display_name IN VARCHAR2
4951 ,p_description IN VARCHAR2
4952 ,p_sequence IN NUMBER
4953 ,p_data_type IN VARCHAR2
4954 ,p_required IN VARCHAR2
4955 ,p_searchable IN VARCHAR2
4956 ,p_column IN VARCHAR2
4957 ,p_is_column_indexed IN VARCHAR2
4958 ,p_value_set_id IN NUMBER
4959 ,p_info_1 IN VARCHAR2 DEFAULT NULL
4960 ,p_default_value IN VARCHAR2
4961 ,p_unique_key_flag IN VARCHAR2
4962 ,p_enabled IN VARCHAR2
4963 ,p_display IN VARCHAR2
4964 ,p_uom_class IN VARCHAR2
4965 ,p_control_level IN NUMBER DEFAULT 1 --JDEJESU: NULL for 11.5.10E
4966 ,p_attribute_code IN VARCHAR2 DEFAULT NULL
4967 ,p_view_in_hierarchy_code IN VARCHAR2 DEFAULT 'A'
4968 ,p_edit_in_hierarchy_code IN VARCHAR2 DEFAULT 'A'
4969 ,p_customization_level IN VARCHAR2 DEFAULT 'A'
4970 ,p_owner IN NUMBER DEFAULT NULL
4971 ,p_lud IN DATE DEFAULT SYSDATE
4972 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
4973 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
4974 ,x_return_status OUT NOCOPY VARCHAR2
4975 ,x_errorcode OUT NOCOPY NUMBER
4976 ,x_msg_count OUT NOCOPY NUMBER
4977 ,x_msg_data OUT NOCOPY VARCHAR2
4978 ) IS
4979 BEGIN
4980 Create_Attribute (
4981 p_api_version
4982 ,p_application_id
4983 ,p_attr_group_type
4984 ,p_attr_group_name
4985 ,p_internal_name
4986 ,p_display_name
4987 ,p_description
4988 ,p_sequence
4989 ,p_data_type
4990 ,p_required
4991 ,p_searchable
4992 ,null
4993 ,p_column
4994 ,p_is_column_indexed
4995 ,p_value_set_id
4996 ,p_info_1
4997 ,p_default_value
4998 ,p_unique_key_flag
4999 ,p_enabled
5000 ,p_display
5001 ,p_uom_class
5002 ,p_control_level
5003 ,p_attribute_code
5004 ,p_view_in_hierarchy_code
5005 ,p_edit_in_hierarchy_code
5006 ,p_customization_level
5007 ,p_owner
5008 ,p_lud
5009 ,p_init_msg_list
5010 ,p_commit
5011 ,x_return_status
5012 ,x_errorcode
5013 ,x_msg_count
5014 ,x_msg_data
5015 );
5016 END;
5017 PROCEDURE Create_Attribute (
5018 p_api_version IN NUMBER
5019 ,p_application_id IN NUMBER
5020 ,p_attr_group_type IN VARCHAR2
5021 ,p_attr_group_name IN VARCHAR2
5022 ,p_internal_name IN VARCHAR2
5023 ,p_display_name IN VARCHAR2
5024 ,p_description IN VARCHAR2
5025 ,p_sequence IN NUMBER
5026 ,p_data_type IN VARCHAR2
5027 ,p_required IN VARCHAR2
5028 ,p_searchable IN VARCHAR2
5029 ,p_read_only_flag IN VARCHAR2
5030 ,p_column IN VARCHAR2
5031 ,p_is_column_indexed IN VARCHAR2
5032 ,p_value_set_id IN NUMBER
5033 ,p_info_1 IN VARCHAR2 DEFAULT NULL
5034 ,p_default_value IN VARCHAR2
5035 ,p_unique_key_flag IN VARCHAR2
5036 ,p_enabled IN VARCHAR2
5037 ,p_display IN VARCHAR2
5038 ,p_uom_class IN VARCHAR2
5039 ,p_control_level IN NUMBER DEFAULT 1 --JDEJESU: NULL for 11.5.10E
5040 ,p_attribute_code IN VARCHAR2 DEFAULT NULL
5041 ,p_view_in_hierarchy_code IN VARCHAR2 DEFAULT 'A'
5042 ,p_edit_in_hierarchy_code IN VARCHAR2 DEFAULT 'A'
5043 ,p_customization_level IN VARCHAR2 DEFAULT 'A'
5044 ,p_owner IN NUMBER DEFAULT NULL
5045 ,p_lud IN DATE DEFAULT SYSDATE
5046 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
5047 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
5048 ,x_return_status OUT NOCOPY VARCHAR2
5049 ,x_errorcode OUT NOCOPY NUMBER
5050 ,x_msg_count OUT NOCOPY NUMBER
5051 ,x_msg_data OUT NOCOPY VARCHAR2
5052 ) IS
5053
5054 l_api_name CONSTANT VARCHAR2(30) := 'Create_Attribute';
5055
5056 --we don't use l_api_version yet, but eventually we might:
5057 --if we change required parameters, version goes from n.x to (n+1).x
5058 --if we change optional parameters, version goes from x.n to x.(n+1)
5059 l_api_version CONSTANT NUMBER := 1.0;
5060
5061 l_sequence NUMBER;
5062 l_data_type_is_trans_text BOOLEAN;
5063 l_col_data_type VARCHAR2(1);
5064 l_col_width NUMBER;
5065 l_required VARCHAR2(1);
5066 l_searchable VARCHAR2(1);
5067 l_unique_key_flag VARCHAR2(1);
5068 l_enabled VARCHAR2(1);
5069 l_read_only_flag VARCHAR2(1);
5070 l_display VARCHAR2(1);
5071 l_is_column_correct BOOLEAN := TRUE;
5072 l_is_column_indexed VARCHAR2(1);
5073 l_is_chg_column_indexed VARCHAR2(1);
5074 l_table_name VARCHAR2(30);
5075 l_chg_table_name VARCHAR2(30);
5076 l_valid_uom_column VARCHAR2(300);
5077
5078 --Bug 5443697
5079 e_attr_starts_with_num EXCEPTION;
5080 e_attr_starts_with_und_sc EXCEPTION;
5081 l_start_num VARCHAR2(10);
5082 l_start_und_sc VARCHAR2(10);
5083
5084 e_attr_dup_seq_error EXCEPTION;
5085 e_first_attr_cbox EXCEPTION;
5086 e_col_data_type_error EXCEPTION;
5087 e_vs_data_type_error EXCEPTION;
5088 e_no_vs_for_id_error EXCEPTION;
5089 e_bad_info_1_error EXCEPTION;
5090 e_uom_not_allowed EXCEPTION;
5091 e_default_value_len_err EXCEPTION;
5092 e_col_internal_name_error EXCEPTION; --vkeerthi - Fix for bug 5884003.
5093 --Bug 4703510
5094 l_fnd_exists VARCHAR2(1) ;
5095 l_ego_exists VARCHAR2(1);
5096 l_value_set_id FND_DESCR_FLEX_COLUMN_USAGES.flex_value_set_id%TYPE;
5097 l_multi_row_flag VARCHAR2(2);
5098 l_min_seq NUMBER;
5099
5100 BEGIN
5101
5102 -- Standard start of API savepoint
5103 IF FND_API.TO_BOOLEAN(p_commit) THEN
5104 SAVEPOINT Create_Attribute_PUB;
5105 END IF;
5106
5107 -- Check for call compatibility
5108 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
5109 l_api_name, G_PKG_NAME)
5110 THEN
5111 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5112 END IF;
5113 -- Initialize message list even though we don't currently use it
5114 IF FND_API.To_Boolean(p_init_msg_list) THEN
5115 FND_MSG_PUB.Initialize;
5116 END IF;
5117 --Bug 4703510
5118 --check if the Attribute name starts with a number
5119 --Bug 5443697
5120 has_Num_Start_char (p_internal_name =>p_internal_name,
5121 x_start_num => l_start_num);
5122 IF (l_start_num = 'Y') THEN
5123 RAISE e_attr_starts_with_num;
5124 END IF ;
5125 --check if the Attribute name starts with an under score
5126 --Bug 5443697
5127 has_Given_Char_As_Start_char (p_internal_name =>p_internal_name,
5128 p_char_set =>'_',
5129 x_start_und_sc => l_start_und_sc);
5130 IF (l_start_und_sc = 'Y') THEN
5131 RAISE e_attr_starts_with_und_sc;
5132 END IF ;
5133
5134 Get_fnd_ego_record_exists (
5135 p_context=>'ATTRIBUTE'
5136 ,p_application_id => p_application_id
5137 ,p_attr_group_type => p_attr_group_type
5138 ,p_attr_group_name => p_attr_group_name
5139 ,p_internal_name => p_internal_name
5140 ,x_fnd_exists => l_fnd_exists
5141 ,x_ego_exists => l_ego_exists
5142 );
5143 -----------------------------------
5144 -----------------------------------------------------------------------------
5145 -- First we default the following parameters in case user didn't pass them --
5146 -----------------------------------------------------------------------------
5147 IF (p_sequence IS NOT NULL) THEN
5148 --commenting this out as the flags l_fnd_exists and l_ego_exists take care of this now.
5149 -- Make sure passed-in sequence does not already exist
5150 SELECT COUNT(*)
5151 INTO l_sequence
5152 FROM FND_DESCR_FLEX_COLUMN_USAGES
5153 WHERE APPLICATION_ID = p_application_id
5154 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5155 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
5156 AND COLUMN_SEQ_NUM = p_sequence;
5157
5158 IF (l_fnd_exists <> 'Y' AND l_sequence > 0) THEN
5159 RAISE e_attr_dup_seq_error;
5160 ELSE
5161 l_sequence := p_sequence;
5162 END IF;
5163
5164
5165 ELSE
5166 -- If user didn't pass in a sequence, add 10 to highest one (or start with 10) --
5167 SELECT MAX(COLUMN_SEQ_NUM)
5168 INTO l_sequence
5169 FROM FND_DESCR_FLEX_COLUMN_USAGES
5170 WHERE APPLICATION_ID = p_application_id
5171 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5172 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
5173
5174 l_sequence := NVL(l_sequence, 0) + 10;
5175 END IF;
5176 -- Vkeerthi - Fix for bug 5884003.
5177 -- Checking if Attribute's internal name is a keyword.
5178 IF (p_internal_name IS NOT NULL) THEN
5179 BEGIN
5180 EXECUTE IMMEDIATE 'SELECT NULL AS ' || p_internal_name || ' FROM DUAL';
5181 EXCEPTION
5182 WHEN OTHERS THEN
5183 RAISE e_col_internal_name_error;
5184 END;
5185 END IF;
5186 -- End of fix for bug 5884003
5187
5188
5189 IF (p_display = EGO_EXT_FWK_PUB.G_CHECKBOX_DISP_TYPE
5190 OR p_display =EGO_EXT_FWK_PUB.G_RADIO_DISP_TYPE ) THEN --bugFix:5292226
5191
5192 SELECT MULTI_ROW
5193 INTO l_multi_row_flag
5194 FROM EGO_FND_DSC_FLX_CTX_EXT
5195 WHERE APPLICATION_ID = p_application_id
5196 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5197 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
5198
5199 IF (l_multi_row_flag = 'Y') THEN
5200
5201 SELECT MIN(COLUMN_SEQ_NUM)
5202 INTO l_min_seq
5203 FROM FND_DESCR_FLEX_COLUMN_USAGES
5204 WHERE APPLICATION_ID = p_application_id
5205 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5206 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
5207
5208 IF (l_sequence <= l_min_seq OR l_min_seq IS NULL) THEN
5209 RAISE e_first_attr_cbox;
5210 END IF;
5211
5212 END IF;
5213
5214 END IF;
5215
5216
5217 l_required := NVL(p_required, 'N');
5218 l_searchable := NVL(p_searchable, 'N');
5219 l_unique_key_flag := NVL(p_unique_key_flag, 'N');
5220 l_enabled := NVL(p_enabled, 'Y');
5221 l_display := NVL(p_display, 'T');
5222 l_read_only_flag := NVL(p_read_only_flag, 'N'); --add by geguo
5223 ------------------------------------------------------------------------
5224 -- Find the correct table name for use in validating column data type --
5225 ------------------------------------------------------------------------
5226
5227 l_data_type_is_trans_text := (p_data_type = G_TRANS_TEXT_DATA_TYPE);
5228 IF (l_data_type_is_trans_text) THEN
5229 l_table_name := Get_TL_Table_Name(p_application_id
5230 ,p_attr_group_type);
5231 l_chg_table_name:=Get_Attr_Changes_TL_Table(p_application_id => p_application_id
5232 ,p_attr_group_type => p_attr_group_type);--for getting the pending table
5233 ELSE
5234 l_table_name := Get_Table_Name(p_application_id
5235 ,p_attr_group_type);
5236 l_chg_table_name:=Get_Attr_Changes_B_Table(p_application_id => p_application_id
5237 ,p_attr_group_type => p_attr_group_type);--for getting the pending table
5238
5239 END IF;--IF (l_data_type_is_trans_text)
5240
5241 BEGIN
5242
5243 SELECT COLUMN_TYPE , WIDTH
5244 INTO l_col_data_type, l_col_width
5245 FROM FND_COLUMNS
5246 WHERE COLUMN_NAME = p_column
5247 AND TABLE_ID = (SELECT TABLE_ID
5248 FROM FND_TABLES
5249 WHERE TABLE_NAME = l_table_name);
5250
5251 IF (((p_data_type = G_CHAR_DATA_TYPE OR
5252 p_data_type = G_TRANS_TEXT_DATA_TYPE) AND
5253 l_col_data_type <> 'V') OR
5254 (p_data_type = G_NUMBER_DATA_TYPE AND l_col_data_type <> 'N') OR
5255 ((p_data_type = G_DATE_DATA_TYPE OR
5256 p_data_type = G_DATE_TIME_DATA_TYPE) AND
5257 l_col_data_type <> 'D')) THEN
5258
5259 /***
5260 TO DO: right now we can't verify that TransText Attributes use TL-type columns,
5261 because we can't rely on the column being named 'TL_EXT_ATTR%' and we aren't
5262 using FND_COLUMNS's TRANSLATE_FLAG column yet; but we should be, and we should
5263 add to the IF check above that if the data type is TransText and the column's
5264 TRANSLATE_FLAG isn't 'Y' then we should error out.
5265 ***/
5266
5267 RAISE e_col_data_type_error;
5268
5269 END IF;
5270
5271 IF ( (p_data_type = G_CHAR_DATA_TYPE OR
5272 p_data_type = G_TRANS_TEXT_DATA_TYPE) AND
5273 LENGTH(p_default_value) > l_col_width )THEN
5274
5275 RAISE e_default_value_len_err;
5276
5277 END IF;
5278
5279 EXCEPTION
5280 WHEN NO_DATA_FOUND THEN
5281 -- whoever owns the table didn't seed the column correctly
5282 RAISE e_col_data_type_error;
5283 END;
5284 -- correct datatype and column name are passed
5285
5286 -----------------------------------------------------------------------------------
5287 -- If the UOM Class is not null we need to make sure that we have --
5288 -- a corresponding database column in user workbench --
5289 -- to store the UOM Code --
5290 -- bug 3875730 --
5291 -----------------------------------------------------------------------------------
5292 IF(p_uom_class IS NOT NULL) THEN
5293
5294 l_valid_uom_column := check_Uom_Column_Exists(p_column , l_table_name );
5295
5296 IF l_valid_uom_column IS NULL THEN
5297 RAISE e_uom_not_allowed;
5298 ELSIF l_valid_uom_column <> '1' THEN
5299 l_valid_uom_column := check_Uom_Col_In_Use ( p_application_id
5300 ,p_attr_group_type
5301 ,p_attr_group_name
5302 ,p_internal_name
5303 ,l_valid_uom_column
5304 );
5305 IF l_valid_uom_column IS NOT NULL THEN
5306 RAISE e_uom_not_allowed;
5307 END IF ;
5308 END IF ;
5309 END IF ;
5310
5311 -------------------------------------------------------------------------------------
5312 -- Make sure that if a Value Set was passed in, it's compatible with the data type --
5313 -------------------------------------------------------------------------------------
5314 IF (p_value_set_id > 0) THEN
5315
5316 DECLARE
5317 l_value_set_format_code VARCHAR2(1);
5318 BEGIN
5319
5320 SELECT FORMAT_TYPE
5321 INTO l_value_set_format_code
5322 FROM FND_FLEX_VALUE_SETS
5323 WHERE FLEX_VALUE_SET_ID = p_value_set_id;
5324
5325 IF (l_value_set_format_code IS NULL OR
5326 (l_value_set_format_code <> p_data_type)) THEN
5327 RAISE e_vs_data_type_error;
5328 END IF;
5329
5330 EXCEPTION
5331 WHEN NO_DATA_FOUND THEN
5332 RAISE e_no_vs_for_id_error;
5333 END;
5334 END IF;
5335
5336 ---------------------------------------------
5337 -- If p_info_1 is not null, we validate it --
5338 ---------------------------------------------
5339 IF (p_info_1 IS NOT NULL) THEN
5340 DECLARE
5341 l_tokenized_url_dummy VARCHAR(10000);
5342 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
5343 l_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
5344 BEGIN
5345 l_attr_group_metadata_obj :=
5346 EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
5347 p_application_id => p_application_id
5348 ,p_attr_group_type => p_attr_group_type
5349 ,p_attr_group_name => p_attr_group_name
5350 );
5351
5352 l_attr_metadata_obj := EGO_ATTR_METADATA_OBJ(
5353 null -- ATTR_ID
5354 ,null -- ATTR_GROUP_ID
5355 ,p_attr_group_name
5356 ,p_internal_name
5357 ,p_display_name
5358 ,p_data_type
5359 ,null -- DATA_TYPE_MEANING
5360 ,p_sequence
5361 ,p_unique_key_flag
5362 ,p_default_value
5363 ,p_info_1
5364 ,null -- MAXIMUM_SIZE
5365 ,p_required
5366 ,p_column
5367 ,p_value_set_id
5368 ,null -- VALIDATION_TYPE
5369 ,null -- MINIMUM_VALUE
5370 ,null -- MAXIMUM_VALUE
5371 ,p_uom_class
5372 ,null -- UOM_CODE
5373 ,null -- DISP_TO_INT_VAL_QUERY
5374 ,null -- INT_TO_DISP_VAL_QUERY
5375 ,'N'
5376 ,p_view_in_hierarchy_code
5377 ,p_edit_in_hierarchy_code
5378 );
5379
5380 l_tokenized_url_dummy := Build_Tokenized_URL_Query(
5381 l_attr_group_metadata_obj
5382 ,l_attr_metadata_obj
5383 );
5384
5385 EXCEPTION
5386 WHEN FND_API.G_EXC_ERROR THEN
5387 RAISE e_bad_info_1_error;
5388 END;
5389 END IF;
5390 ----------------------------------------------------
5391 -- If the Attribute is searchable and there's not --
5392 -- already an index on this column, we create one --
5393 ----------------------------------------------------
5394
5395 IF (l_searchable = 'Y') THEN
5396
5397 IF (p_is_column_indexed IS NOT NULL) THEN
5398
5399 ---------------------------------------------------------------------------
5400 -- We are passed in a meaning for 'Yes' or 'No'; we need to get its code --
5401 ---------------------------------------------------------------------------
5402 SELECT LOOKUP_CODE
5403 INTO l_is_column_indexed
5404 FROM FND_LOOKUP_VALUES
5405 WHERE LOOKUP_TYPE = 'YES_NO'
5406 AND LANGUAGE = USERENV('LANG')
5407 AND VIEW_APPLICATION_ID = 0
5408 AND MEANING = p_is_column_indexed;
5409 --look up code for pending table.
5410 SELECT LOOKUP_CODE
5411 INTO l_is_chg_column_indexed
5412 FROM FND_LOOKUP_VALUES
5413 WHERE LOOKUP_TYPE = 'YES_NO'
5414 AND LANGUAGE = USERENV('LANG')
5415 AND VIEW_APPLICATION_ID = 0
5416 AND MEANING = p_is_column_indexed;
5417 ELSE
5418
5419 l_is_column_indexed := Is_Column_Indexed(p_column_name => p_column
5420 ,p_table_name => l_table_name
5421 ,p_application_id => p_application_id
5422 ,p_attr_group_type => p_attr_group_type);
5423
5424 --for checking whether the column in Pending table is indexed.
5425 l_is_chg_column_indexed := Is_Column_Indexed(p_column_name => p_column
5426 ,p_table_name => l_chg_table_name
5427 ,p_application_id => p_application_id
5428 ,p_attr_group_type => p_attr_group_type);
5429
5430 END IF;
5431
5432 IF ((l_is_column_indexed IS NULL OR
5433 l_is_column_indexed <> 'Y') OR
5434 (l_is_chg_column_indexed IS NULL OR
5435 l_is_chg_column_indexed <> 'Y')) THEN
5436
5437 l_is_column_indexed :=Create_Index_For_DBCol(p_application_id => p_application_id
5438 ,p_attr_group_type => p_attr_group_type
5439 ,p_attr_group_name => p_attr_group_name
5440 ,p_table_name => l_table_name
5441 ,p_chg_table_name => l_chg_table_name
5442 ,p_is_column_indexed => l_is_column_indexed
5443 ,p_is_chg_column_indexed => l_is_chg_column_indexed
5444 ,p_column => p_column
5445 ,p_is_table_translatable =>l_data_type_is_trans_text);
5446
5447 /*** Right now there is no reporting if this fails (i.e., if 'N' is returned) ***/
5448 END IF;--IF ((l_is_column_indexed IS NULL OR l_is_column_indexed <> 'Y') OR (l_is_chg_column_indexed IS NULL OR l_is_chg_column_indexed <> 'Y'))
5449 END IF;
5450 IF (l_fnd_exists = 'Y') THEN --Bug 4703510
5451 BEGIN
5452 SELECT flex_value_set_id
5453 INTO l_value_set_id
5454 FROM FND_DESCR_FLEX_COLUMN_USAGES
5455 WHERE APPLICATION_ID = p_application_id
5456 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5457 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
5458 AND END_USER_COLUMN_NAME = p_internal_name;
5459 EXCEPTION
5460 WHEN OTHERS THEN
5461 l_value_set_id := NULL;
5462 END;
5463
5464 UPDATE FND_DESCR_FLEX_COLUMN_USAGES
5465 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5466 LAST_UPDATE_DATE = p_lud,
5467 LAST_UPDATE_LOGIN = g_current_login_id,
5468 COLUMN_SEQ_NUM = NVL(l_sequence, COLUMN_SEQ_NUM),
5469 ENABLED_FLAG = NVL(p_enabled, ENABLED_FLAG),
5470 REQUIRED_FLAG = NVL(p_required, REQUIRED_FLAG),
5471 DISPLAY_FLAG = NVL(p_display, DISPLAY_FLAG),
5472 FLEX_VALUE_SET_ID = l_value_set_id,
5473 DEFAULT_VALUE = p_default_value
5474 WHERE APPLICATION_ID = p_application_id
5475 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5476 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5477 AND APPLICATION_COLUMN_NAME = p_column;
5478
5479 UPDATE FND_DESCR_FLEX_COL_USAGE_TL
5480 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5481 LAST_UPDATE_DATE = p_lud,
5482 LAST_UPDATE_LOGIN = g_current_login_id,
5483 FORM_LEFT_PROMPT = p_display_name,
5484 FORM_ABOVE_PROMPT = p_display_name,
5485 DESCRIPTION = p_description,
5486 SOURCE_LANG = USERENV('LANG')
5487 WHERE APPLICATION_ID = p_application_id
5488 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5489 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5490 AND APPLICATION_COLUMN_NAME = p_column
5491 --AND LANGUAGE = USERENV('LANG');
5492 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
5493 ELSE --l_fnd_exists = 'Y'
5494 INSERT INTO FND_DESCR_FLEX_COLUMN_USAGES
5495 (
5496 APPLICATION_ID
5497 ,DESCRIPTIVE_FLEXFIELD_NAME
5498 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
5499 ,APPLICATION_COLUMN_NAME
5500 ,END_USER_COLUMN_NAME
5501 ,CREATED_BY
5502 ,CREATION_DATE
5503 ,LAST_UPDATED_BY
5504 ,LAST_UPDATE_DATE
5505 ,LAST_UPDATE_LOGIN
5506 ,COLUMN_SEQ_NUM
5507 ,ENABLED_FLAG
5508 ,REQUIRED_FLAG
5509 ,SECURITY_ENABLED_FLAG
5510 ,DISPLAY_FLAG
5511 ,DISPLAY_SIZE
5512 ,MAXIMUM_DESCRIPTION_LEN
5513 ,CONCATENATION_DESCRIPTION_LEN
5514 ,FLEX_VALUE_SET_ID
5515 ,RANGE_CODE
5516 ,DEFAULT_TYPE
5517 ,DEFAULT_VALUE
5518 ,SRW_PARAM
5519 ,RUNTIME_PROPERTY_FUNCTION
5520 )
5521 VALUES
5522 (
5523 p_application_id --APPLICATION_ID
5524 ,p_attr_group_type --DESCRIPTIVE_FLEXFIELD_NAME
5525 ,p_attr_group_name --DESCRIPTIVE_FLEX_CONTEXT_CODE
5526 ,p_column --APPLICATION_COLUMN_NAME
5527 ,p_internal_name --END_USER_COLUMN_NAME
5528 ,NVL(p_owner, g_current_user_id) --CREATED_BY
5529 ,p_lud --CREATION_DATE
5530 ,NVL(p_owner, g_current_user_id) --LAST_UPDATED_BY
5531 ,p_lud --LAST_UPDATE_DATE
5532 ,g_current_login_id --LAST_UPDATE_LOGIN
5533 ,l_sequence --COLUMN_SEQ_NUM
5534 ,l_enabled --ENABLED_FLAG
5535 ,l_required --REQUIRED_FLAG
5536 ,'N' --SECURITY_ENABLED_FLAG
5537 ,l_display --DISPLAY_FLAG
5538 ,50 --DISPLAY_SIZE
5539 ,50 --MAXIMUM_DESCRIPTION_LEN
5540 ,25 --CONCATENATION_DESCRIPTION_LEN
5541 ,p_value_set_id --FLEX_VALUE_SET_ID
5542 ,'' --RANGE_CODE
5543 ,'' --DEFAULT_TYPE
5544 ,p_default_value --DEFAULT_VALUE
5545 ,'' --SRW_PARAM
5546 ,'' --RUNTIME_PROPERTY_FUNCTION
5547 );
5548 INSERT INTO FND_DESCR_FLEX_COL_USAGE_TL
5549 (
5550 APPLICATION_ID
5551 ,DESCRIPTIVE_FLEXFIELD_NAME
5552 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
5553 ,APPLICATION_COLUMN_NAME
5554 ,LANGUAGE
5555 ,CREATED_BY
5556 ,CREATION_DATE
5557 ,LAST_UPDATED_BY
5558 ,LAST_UPDATE_DATE
5559 ,LAST_UPDATE_LOGIN
5560 ,FORM_LEFT_PROMPT
5561 ,FORM_ABOVE_PROMPT
5562 ,DESCRIPTION
5563 ,SOURCE_LANG
5564 )
5565 SELECT
5566 p_application_id --APPLICATION_ID
5567 ,p_attr_group_type --DESCRIPTIVE_FLEXFIELD_NAME
5568 ,p_attr_group_name --DESCRIPTIVE_FLEX_CONTEXT_CODE
5569 ,p_column --APPLICATION_COLUMN_NAME
5570 ,L.LANGUAGE_CODE --LANGUAGE
5571 ,NVL(p_owner, g_current_user_id) --CREATED_BY
5572 ,p_lud --CREATION_DATE
5573 ,NVL(p_owner, g_current_user_id) --LAST_UPDATED_BY
5574 ,p_lud --LAST_UPDATE_DATE
5575 ,g_current_login_id --LAST_UPDATE_LOGIN
5576 ,p_display_name --FORM_LEFT_PROMPT
5577 ,p_display_name --FORM_ABOVE_PROMPT
5578 ,p_description --DESCRIPTION
5579 ,USERENV('LANG') --SOURCE_LANG
5580 FROM FND_LANGUAGES L
5581 WHERE L.INSTALLED_FLAG in ('I', 'B');
5582 END IF ;-- l_fnd_exists = 'Y' --Bug 4703510 END
5583
5584
5585 IF (l_ego_exists <> 'Y') THEN --Bug 4703510
5586 INSERT INTO EGO_FND_DF_COL_USGS_EXT
5587 (
5588 ATTR_ID
5589 ,APPLICATION_ID
5590 ,DESCRIPTIVE_FLEXFIELD_NAME
5591 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
5592 ,APPLICATION_COLUMN_NAME
5593 ,DATA_TYPE
5594 ,SEARCH_FLAG
5595 ,UNIQUE_KEY_FLAG
5596 ,INFO_1
5597 ,UOM_CLASS
5598 ,CONTROL_LEVEL
5599 ,ATTRIBUTE_CODE
5600 ,VIEW_IN_HIERARCHY_CODE
5601 ,EDIT_IN_HIERARCHY_CODE
5602 ,CUSTOMIZATION_LEVEL
5603 ,READ_ONLY_FLAG
5604 ,CREATED_BY
5605 ,CREATION_DATE
5606 ,LAST_UPDATED_BY
5607 ,LAST_UPDATE_DATE
5608 ,LAST_UPDATE_LOGIN
5609 )
5610 SELECT
5611 EGO_ATTRS_S.NEXTVAL -- ATTR_ID
5612 ,p_application_id -- APPLICATION_ID
5613 ,p_attr_group_type -- DESCRIPTIVE_FLEXFIELD_NAME
5614 ,p_attr_group_name -- DESCRIPTIVE_FLEX_CONTEXT_CODE
5615 ,p_column -- APPLICATION_COLUMN_NAME
5616 ,p_data_type -- DATA_TYPE
5617 ,l_searchable -- SEARCHABLE FLAG
5618 ,l_unique_key_flag -- UNIQUE_KEY_FLAG
5619 ,p_info_1 -- DYNAMIC URL (IF APPLICABLE; USUALLY NULL)
5620 ,p_uom_class -- UOM_CLASS
5621 ,p_control_level -- CONTROL_LEVEL
5622 ,p_attribute_code -- ATTRIBUTE_CODE
5623 ,p_view_in_hierarchy_code -- VIEW_IN_HIERARCHY_CODE
5624 ,p_edit_in_hierarchy_code -- EDIT_IN_HIERARCHY_CODE
5625 ,p_customization_level -- CUSTIMIZATION_LEVEL
5626 ,l_read_only_flag --read_only_flag add by geguo
5627 ,NVL(p_owner, g_current_user_id) -- CREATED_BY
5628 ,p_lud -- CREATION_DATE
5629 ,NVL(p_owner, g_current_user_id) -- LAST_UPDATED_BY
5630 ,p_lud -- LAST_UPDATE_DATE
5631 ,g_current_login_id -- LAST_UPDATE_LOGIN
5632 FROM DUAL;
5633
5634 -- Standard check of p_commit
5635 IF FND_API.To_Boolean(p_commit) THEN
5636 COMMIT WORK;
5637 END IF;
5638 x_return_status := FND_API.G_RET_STS_SUCCESS;
5639 ELSE --l_ego_exists <> 'Y'
5640 IF FND_API.TO_BOOLEAN(p_commit) THEN
5641 ROLLBACK TO Create_Attribute_PUB;
5642 END IF;
5643
5644 x_return_status := FND_API.G_RET_STS_ERROR;
5645 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_INTERNAL_NAME_UNIQUE');
5646 FND_MSG_PUB.Add;
5647 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5648 ,p_count => x_msg_count
5649 ,p_data => x_msg_data);
5650
5651 END IF;--l_ego_exists <> 'Y'--Bug 4703510
5652 EXCEPTION
5653 --Bug 5443697
5654 WHEN e_attr_starts_with_num THEN
5655 IF FND_API.TO_BOOLEAN(p_commit) THEN
5656 ROLLBACK TO Create_Attribute_PUB;
5657 END IF;
5658
5659 x_return_status := FND_API.G_RET_STS_ERROR;
5660 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_NAME_ST_NUM');
5661 FND_MSG_PUB.Add;
5662 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5663 ,p_count => x_msg_count
5664 ,p_data => x_msg_data);
5665
5666 WHEN e_attr_starts_with_und_sc THEN
5667 IF FND_API.TO_BOOLEAN(p_commit) THEN
5668 ROLLBACK TO Create_Attribute_PUB;
5669 END IF;
5670
5671 x_return_status := FND_API.G_RET_STS_ERROR;
5672 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_NAME_ST_UND_SC');
5673 FND_MSG_PUB.Add;
5674 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5675 ,p_count => x_msg_count
5676 ,p_data => x_msg_data);
5677
5678 WHEN e_col_internal_name_error THEN
5679 IF FND_API.TO_BOOLEAN(p_commit) THEN
5680 ROLLBACK TO Create_Attribute_PUB;
5681 END IF;
5682
5683 x_return_status := FND_API.G_RET_STS_ERROR;
5684 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_INTRNL_NAME_ERR');
5685 FND_MSG_PUB.Add;
5686 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5687 ,p_count => x_msg_count
5688 ,p_data => x_msg_data);
5689
5690 WHEN e_default_value_len_err THEN
5691 IF FND_API.TO_BOOLEAN(p_commit) THEN
5692 ROLLBACK TO Create_Attribute_PUB;
5693 END IF;
5694
5695 x_return_status := FND_API.G_RET_STS_ERROR;
5696 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DEFAULT_VAL_LEN_ERR');
5697 FND_MESSAGE.Set_Token('ATTR_MAX_LENGTH', l_col_width);
5698 FND_MSG_PUB.Add;
5699 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5700 ,p_count => x_msg_count
5701 ,p_data => x_msg_data);
5702
5703 WHEN e_attr_dup_seq_error THEN
5704 IF FND_API.TO_BOOLEAN(p_commit) THEN
5705 ROLLBACK TO Create_Attribute_PUB;
5706 END IF;
5707
5708 x_return_status := FND_API.G_RET_STS_ERROR;
5709 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_DUP_SEQ_ERR');
5710 FND_MSG_PUB.Add;
5711 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5712 ,p_count => x_msg_count
5713 ,p_data => x_msg_data);
5714
5715
5716 WHEN e_first_attr_cbox THEN
5717 IF FND_API.TO_BOOLEAN(p_commit) THEN
5718 ROLLBACK TO Create_Attribute_PUB;
5719 END IF;
5720
5721 x_return_status := FND_API.G_RET_STS_ERROR;
5722 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_MR_FIRST_ATTR_CBOX_ERR');
5723 FND_MSG_PUB.Add;
5724 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5725 ,p_count => x_msg_count
5726 ,p_data => x_msg_data);
5727
5728
5729
5730 WHEN e_col_data_type_error THEN
5731 IF FND_API.TO_BOOLEAN(p_commit) THEN
5732 ROLLBACK TO Create_Attribute_PUB;
5733 END IF;
5734
5735 x_return_status := FND_API.G_RET_STS_ERROR;
5736 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_COL_DT_ERR');
5737 FND_MSG_PUB.Add;
5738 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5739 ,p_count => x_msg_count
5740 ,p_data => x_msg_data);
5741
5742 WHEN e_uom_not_allowed THEN
5743 IF FND_API.TO_BOOLEAN(p_commit) THEN
5744 ROLLBACK TO Create_Attribute_PUB;
5745 END IF;
5746
5747 x_return_status := FND_API.G_RET_STS_ERROR;
5748 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_UOM_COL_ERR');
5749 FND_MSG_PUB.Add;
5750 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5751 ,p_count => x_msg_count
5752 ,p_data => x_msg_data);
5753
5754 WHEN e_vs_data_type_error THEN
5755 IF FND_API.TO_BOOLEAN(p_commit) THEN
5756 ROLLBACK TO Create_Attribute_PUB;
5757 END IF;
5758 x_return_status := FND_API.G_RET_STS_ERROR;
5759 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_VS_DT_ERR');
5760 FND_MSG_PUB.Add;
5761 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5762 ,p_count => x_msg_count
5763 ,p_data => x_msg_data);
5764
5765 WHEN e_no_vs_for_id_error THEN
5766 IF FND_API.TO_BOOLEAN(p_commit) THEN
5767 ROLLBACK TO Create_Attribute_PUB;
5768 END IF;
5769
5770 x_return_status := FND_API.G_RET_STS_ERROR;
5771 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_NO_VS_ERR');
5772 FND_MSG_PUB.Add;
5773 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5774 ,p_count => x_msg_count
5775 ,p_data => x_msg_data);
5776
5777 WHEN e_bad_info_1_error THEN
5778 IF FND_API.TO_BOOLEAN(p_commit) THEN
5779 ROLLBACK TO Create_Attribute_PUB;
5780 END IF;
5781
5782 DECLARE
5783 l_attr_group_disp_name FND_DESCR_FLEX_CONTEXTS_TL.DESCRIPTIVE_FLEX_CONTEXT_NAME%TYPE;
5784 BEGIN
5785 SELECT DESCRIPTIVE_FLEX_CONTEXT_NAME
5786 INTO l_attr_group_disp_name
5787 FROM FND_DESCR_FLEX_CONTEXTS_TL
5788 WHERE APPLICATION_ID = p_application_id
5789 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5790 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5791 AND LANGUAGE = USERENV('LANG');
5792
5793 x_return_status := FND_API.G_RET_STS_ERROR;
5794 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DYNAMIC_URL_DATA_ERROR');
5795 FND_MESSAGE.Set_Token('ATTR_GROUP_DISP_NAME', l_attr_group_disp_name);
5796 FND_MSG_PUB.Add;
5797 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5798 ,p_count => x_msg_count
5799 ,p_data => x_msg_data);
5800 EXCEPTION
5801 WHEN NO_DATA_FOUND THEN
5802 x_return_status := FND_API.G_RET_STS_ERROR;
5803 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DYNAMIC_URL_DATA_ERROR');
5804 FND_MESSAGE.Set_Token('ATTR_GROUP_DISP_NAME', null);
5805 FND_MSG_PUB.Add;
5806 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5807 ,p_count => x_msg_count
5808 ,p_data => x_msg_data);
5809 END;
5810
5811 WHEN OTHERS THEN
5812 IF FND_API.TO_BOOLEAN(p_commit) THEN
5813 ROLLBACK TO Create_Attribute_PUB;
5814 END IF;
5815 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5816 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
5817 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
5818 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
5819 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
5820 FND_MSG_PUB.Add;
5821 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5822 ,p_count => x_msg_count
5823 ,p_data => x_msg_data);
5824
5825 END Create_Attribute;
5826
5827 ----------------------------------------------------------------------
5828
5829 PROCEDURE Update_Attribute (
5830 p_api_version IN NUMBER
5831 ,p_application_id IN NUMBER
5832 ,p_attr_group_type IN VARCHAR2
5833 ,p_attr_group_name IN VARCHAR2
5834 ,p_internal_name IN VARCHAR2
5835 ,p_display_name IN VARCHAR2
5836 ,p_description IN VARCHAR2
5837 ,p_sequence IN NUMBER
5838 ,p_required IN VARCHAR2
5839 ,p_searchable IN VARCHAR2
5840 ,p_column IN VARCHAR2
5841 ,p_value_set_id IN NUMBER DEFAULT G_MISS_NUM
5842 ,p_info_1 IN VARCHAR2 DEFAULT NULL
5843 ,p_default_value IN VARCHAR2
5844 ,p_unique_key_flag IN VARCHAR2 DEFAULT NULL
5845 ,p_enabled IN VARCHAR2
5846 ,p_display IN VARCHAR2
5847 ,p_control_level IN NUMBER DEFAULT -1
5848 ,p_attribute_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5849 ,p_view_in_hierarchy_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5850 ,p_edit_in_hierarchy_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5851 ,p_customization_level IN VARCHAR2 DEFAULT G_MISS_CHAR
5852 ,p_owner IN NUMBER DEFAULT NULL
5853 ,p_lud IN DATE DEFAULT SYSDATE
5854 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
5855 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
5856 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
5857 ,p_uom_class IN VARCHAR2 DEFAULT G_MISS_CHAR
5858 ,x_return_status OUT NOCOPY VARCHAR2
5859 ,x_errorcode OUT NOCOPY NUMBER
5860 ,x_msg_count OUT NOCOPY NUMBER
5861 ,x_msg_data OUT NOCOPY VARCHAR2
5862 ) IS
5863 BEGIN
5864 Update_Attribute (
5865 p_api_version
5866 ,p_application_id
5867 ,p_attr_group_type
5868 ,p_attr_group_name
5869 ,p_internal_name
5870 ,p_display_name
5871 ,p_description
5872 ,p_sequence
5873 ,p_required
5874 ,p_searchable
5875 ,NULL
5876 ,p_column
5877 ,p_value_set_id
5878 ,p_info_1
5879 ,p_default_value
5880 ,p_unique_key_flag
5881 ,p_enabled
5882 ,p_display
5883 ,p_control_level
5884 ,p_attribute_code
5885 ,p_view_in_hierarchy_code
5886 ,p_edit_in_hierarchy_code
5887 ,p_customization_level
5888 ,p_owner
5889 ,p_lud
5890 ,p_init_msg_list
5891 ,p_commit
5892 ,p_is_nls_mode
5893 ,p_uom_class
5894 ,x_return_status
5895 ,x_errorcode
5896 ,x_msg_count
5897 ,x_msg_data
5898 );
5899 END;
5900 PROCEDURE Update_Attribute (
5901 p_api_version IN NUMBER
5902 ,p_application_id IN NUMBER
5903 ,p_attr_group_type IN VARCHAR2
5904 ,p_attr_group_name IN VARCHAR2
5905 ,p_internal_name IN VARCHAR2
5906 ,p_display_name IN VARCHAR2
5907 ,p_description IN VARCHAR2
5908 ,p_sequence IN NUMBER
5909 ,p_required IN VARCHAR2
5910 ,p_searchable IN VARCHAR2
5911 ,p_read_only_flag IN VARCHAR2 --DEFAULT 'N' add by geguo
5912 ,p_column IN VARCHAR2
5913 ,p_value_set_id IN NUMBER DEFAULT G_MISS_NUM
5914 ,p_info_1 IN VARCHAR2 DEFAULT NULL
5915 ,p_default_value IN VARCHAR2
5916 ,p_unique_key_flag IN VARCHAR2 DEFAULT NULL
5917 ,p_enabled IN VARCHAR2
5918 ,p_display IN VARCHAR2
5919 ,p_control_level IN NUMBER DEFAULT -1
5920 ,p_attribute_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5921 ,p_view_in_hierarchy_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5922 ,p_edit_in_hierarchy_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5923 ,p_customization_level IN VARCHAR2 DEFAULT G_MISS_CHAR
5924 ,p_owner IN NUMBER DEFAULT NULL
5925 ,p_lud IN DATE DEFAULT SYSDATE
5926 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
5927 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
5928 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
5929 ,p_uom_class IN VARCHAR2 DEFAULT G_MISS_CHAR
5930 ,x_return_status OUT NOCOPY VARCHAR2
5931 ,x_errorcode OUT NOCOPY NUMBER
5932 ,x_msg_count OUT NOCOPY NUMBER
5933 ,x_msg_data OUT NOCOPY VARCHAR2
5934 ) IS
5935
5936 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute';
5937
5938 --we don't use l_api_version yet, but eventually we might:
5939 --if we change required parameters, version goes from n.x to (n+1).x
5940 --if we change optional parameters, version goes from x.n to x.(n+1)
5941 l_api_version CONSTANT NUMBER := 1.0;
5942
5943 l_sequence NUMBER;
5944 l_min_seq NUMBER;
5945 l_was_searchable EGO_FND_DF_COL_USGS_EXT.search_flag%TYPE;
5946 l_view_in_hierarchy_code EGO_FND_DF_COL_USGS_EXT.view_in_hierarchy_code%TYPE;
5947 l_edit_in_hierarchy_code EGO_FND_DF_COL_USGS_EXT.edit_in_hierarchy_code%TYPE;
5948 l_customization_level EGO_FND_DF_COL_USGS_EXT.customization_level%TYPE;
5949 l_attribute_code EGO_FND_DF_COL_USGS_EXT.attribute_code%TYPE;
5950 l_uom_class EGO_FND_DF_COL_USGS_EXT.uom_class%TYPE;
5951 l_value_set_id FND_DESCR_FLEX_COLUMN_USAGES.flex_value_set_id%TYPE;
5952 l_is_column_indexed VARCHAR2(1);
5953 l_is_chg_column_indexed VARCHAR2(1);
5954 l_table_name VARCHAR2(100);
5955 l_chg_table_name VARCHAR2(30);
5956 l_data_type_is_trans_text BOOLEAN;
5957 l_valid_uom_column VARCHAR2(300);
5958 l_col_width NUMBER;
5959 l_data_type_code VARCHAR2(2);
5960 l_multi_row_flag VARCHAR2(2);
5961 l_read_only_flag VARCHAR2(1);
5962
5963 e_attr_dup_seq_error EXCEPTION;
5964 e_first_attr_cbox EXCEPTION;
5965 e_uom_not_allowed EXCEPTION;
5966 e_default_value_len_err EXCEPTION;
5967
5968
5969 BEGIN
5970 -- Standard start of API savepoint
5971 IF FND_API.To_Boolean(p_commit) THEN
5972 SAVEPOINT Update_Attribute_PUB;
5973 END IF;
5974
5975 -- Check for call compatibility
5976 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
5977 l_api_name, G_PKG_NAME)
5978 THEN
5979 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5980 END IF;
5981 -- Initialize message list even though we don't currently use it
5982 IF FND_API.To_Boolean(p_init_msg_list) THEN
5983 FND_MSG_PUB.Initialize;
5984 END IF;
5985
5986 -----------------------------------
5987 -- get the attribute details -- ego specific
5988 -----------------------------------
5989 BEGIN
5990 SELECT SEARCH_FLAG, view_in_hierarchy_code, edit_in_hierarchy_code,
5991 customization_level, attribute_code, uom_class, read_only_flag
5992 INTO l_was_searchable, l_view_in_hierarchy_code, l_edit_in_hierarchy_code,
5993 l_customization_level, l_attribute_code, l_uom_class, l_read_only_flag
5994 FROM EGO_FND_DF_COL_USGS_EXT
5995 WHERE APPLICATION_ID = p_application_id
5996 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5997 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5998 AND APPLICATION_COLUMN_NAME = p_column;
5999 EXCEPTION
6000 WHEN OTHERS THEN
6001 l_was_searchable := NULL;
6002 l_view_in_hierarchy_code := NULL;
6003 l_edit_in_hierarchy_code := NULL;
6004 l_customization_level := NULL;
6005 l_attribute_code := NULL;
6006 l_uom_class := NULL;
6007 l_read_only_flag := NULL; --add by geguo
6008 END;
6009
6010 IF (p_view_in_hierarchy_code IS NULL OR
6011 p_view_in_hierarchy_code <> G_MISS_CHAR) THEN
6012 l_view_in_hierarchy_code := p_view_in_hierarchy_code;
6013 END IF;
6014 IF (p_edit_in_hierarchy_code IS NULL OR
6015 p_edit_in_hierarchy_code <> G_MISS_CHAR) THEN
6016 l_edit_in_hierarchy_code := p_edit_in_hierarchy_code;
6017 END IF;
6018 IF (p_customization_level IS NULL OR
6019 p_customization_level <> G_MISS_CHAR) THEN
6020 l_customization_level := p_customization_level;
6021 END IF;
6022 IF (p_attribute_code IS NULL OR
6023 p_attribute_code <> G_MISS_CHAR) THEN
6024 l_attribute_code := p_attribute_code;
6025 END IF;
6026 IF (p_uom_class IS NULL OR
6027 p_uom_class <> G_MISS_CHAR) THEN
6028 l_uom_class := p_uom_class;
6029 END IF;
6030 --add by geguo
6031 IF (p_read_only_flag IS NULL OR
6032 p_read_only_flag <> G_MISS_CHAR) THEN
6033 l_read_only_flag := p_read_only_flag;
6034 END IF;
6035 -----------------------------------
6036 -- get the attribute details -- fnd specific
6037 -----------------------------------
6038 BEGIN
6039 SELECT flex_value_set_id
6040 INTO l_value_set_id
6041 FROM FND_DESCR_FLEX_COLUMN_USAGES
6042 WHERE APPLICATION_ID = p_application_id
6043 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6044 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
6045 AND END_USER_COLUMN_NAME = p_internal_name;
6046 EXCEPTION
6047 WHEN OTHERS THEN
6048 l_value_set_id := NULL;
6049 END;
6050
6051 IF (p_value_set_id IS NULL OR
6052 p_value_set_id <> G_MISS_NUM) THEN
6053 l_value_set_id := p_value_set_id;
6054 END IF;
6055
6056 IF (FND_API.To_Boolean(p_is_nls_mode)) THEN
6057
6058 -- We do this IF check this way so that if p_is_nls_mode is NULL,
6059 -- we still update the non-trans tables (i.e., we treat NULL as 'F')
6060 NULL;
6061
6062 ELSE
6063
6064 -- We only update this information if we are NOT in NLS mode
6065 -- (i.e., we don't update it if we are in NLS mode)
6066
6067 -- Make sure updated sequence does not already exist
6068 SELECT COLUMN_SEQ_NUM
6069 INTO l_sequence
6070 FROM FND_DESCR_FLEX_COLUMN_USAGES
6071 WHERE APPLICATION_ID = p_application_id
6072 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6073 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
6074 AND END_USER_COLUMN_NAME = p_internal_name;
6075
6076 IF (l_sequence <> NVL(p_sequence, l_sequence)) THEN
6077 -- If the sequence is being updated to a NEW non-null value,
6078 -- check for uniqueness
6079
6080 SELECT COUNT(*)
6081 INTO l_sequence
6082 FROM FND_DESCR_FLEX_COLUMN_USAGES
6083 WHERE APPLICATION_ID = p_application_id
6084 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6085 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
6086 AND COLUMN_SEQ_NUM = p_sequence;
6087
6088 IF (l_sequence > 0) THEN
6089 RAISE e_attr_dup_seq_error;
6090 ELSE
6091 l_sequence := p_sequence;
6092 END IF;
6093
6094 END IF;
6095
6096 IF (p_display = EGO_EXT_FWK_PUB.G_CHECKBOX_DISP_TYPE
6097 OR p_display =EGO_EXT_FWK_PUB.G_RADIO_DISP_TYPE ) THEN --bugFix:5292226
6098
6099 SELECT MULTI_ROW
6100 INTO l_multi_row_flag
6101 FROM EGO_FND_DSC_FLX_CTX_EXT
6102 WHERE APPLICATION_ID = p_application_id
6103 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6104 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
6105
6106 IF (l_multi_row_flag = 'Y') THEN
6107
6108 SELECT MIN(COLUMN_SEQ_NUM)
6109 INTO l_min_seq
6110 FROM FND_DESCR_FLEX_COLUMN_USAGES
6111 WHERE APPLICATION_ID = p_application_id
6112 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6113 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
6114
6115 IF (p_sequence <= l_min_seq) THEN
6116 RAISE e_first_attr_cbox;
6117 END IF;
6118
6119 END IF;
6120
6121 END IF;
6122
6123 -----------------------------------------------------------
6124 -- Moved out of the searchable block --
6125 -- as we need table name for UOM column check also --
6126 -----------------------------------------------------------
6127 --added for BUGFIX:4547918
6128 SELECT DATA_TYPE
6129 INTO l_data_type_code
6130 FROM EGO_FND_DF_COL_USGS_EXT
6131 WHERE APPLICATION_ID = p_application_id
6132 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6133 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6134 AND APPLICATION_COLUMN_NAME = p_column;
6135
6136 IF (l_data_type_code = 'A' ) THEN
6137 l_data_type_is_trans_text := TRUE;
6138 ELSE
6139 l_data_type_is_trans_text := FALSE;
6140 END IF;
6141
6142 -- l_data_type_is_trans_text := (SUBSTR(p_column,1,11) = 'TL_EXT_ATTR');
6143 -- end BUGFIX:4547918
6144
6145 IF (l_data_type_is_trans_text) THEN
6146 l_table_name := Get_TL_Table_Name(p_application_id
6147 ,p_attr_group_type);
6148 l_chg_table_name:=Get_Attr_Changes_TL_Table(p_application_id => p_application_id
6149 ,p_attr_group_type => p_attr_group_type);--for the pending table
6150
6151 ELSE
6152 l_table_name := Get_Table_Name(p_application_id
6153 ,p_attr_group_type);
6154 l_chg_table_name:=Get_Attr_Changes_B_Table(p_application_id => p_application_id
6155 ,p_attr_group_type => p_attr_group_type);--for the pending table
6156
6157 END IF;
6158
6159 -----------------------------------------------------------
6160 -- If the Attribute is being made searchable and there's --
6161 -- not already an index on this column, we create one --
6162 -----------------------------------------------------------
6163
6164 IF (p_searchable = 'Y') THEN
6165
6166 -- l_data_type_is_trans_text := (SUBSTR(p_column,1,11) = 'TL_EXT_ATTR');
6167 /***
6168 TO DO: right now we aren't using FND_COLUMNS's TRANSLATE_FLAG column, but we
6169 should be, and we should use that flag to determine if the Attr is TransText
6170 ...or else we should see which table this column's in, but that's an
6171 expensive query, I'd guess
6172 ***/
6173
6174 IF (l_was_searchable IS NULL OR
6175 l_was_searchable <> p_searchable) THEN
6176
6177 l_is_column_indexed := Is_Column_Indexed(
6178 p_column_name => p_column
6179 ,p_table_name => l_table_name
6180 ,p_application_id => p_application_id
6181 ,p_attr_group_type => p_attr_group_type
6182 );
6183
6184 --for checking whether the column in Pending table is indexed.
6185 l_is_chg_column_indexed := Is_Column_Indexed(p_column_name => p_column
6186 ,p_table_name => l_chg_table_name
6187 ,p_application_id => p_application_id
6188 ,p_attr_group_type => p_attr_group_type);
6189
6190 END IF;
6191 IF ((l_is_column_indexed <> 'Y') OR (l_is_chg_column_indexed <> 'Y')) THEN
6192
6193 l_is_column_indexed :=Create_Index_For_DBCol(p_application_id => p_application_id
6194 ,p_attr_group_type => p_attr_group_type
6195 ,p_attr_group_name => p_attr_group_name
6196 ,p_table_name => l_table_name
6197 ,p_chg_table_name => l_chg_table_name
6198 ,p_is_column_indexed => l_is_column_indexed
6199 ,p_is_chg_column_indexed => l_is_chg_column_indexed
6200 ,p_column => p_column
6201 ,p_is_table_translatable =>l_data_type_is_trans_text);
6202 END IF;--IF((l_is_column_indexed <> 'Y') OR (l_is_chg_column_indexed <> 'Y'))
6203 END IF;
6204
6205 -----------------------------------------------------------------------------------
6206 -- If the UOM Class is not null we need to make sure that we have --
6207 -- a corresponding database column in user workbench --
6208 -- to store the UOM Code --
6209 -- bug 3875730 --
6210 -----------------------------------------------------------------------------------
6211
6212 IF(p_uom_class IS NOT NULL) THEN
6213 l_valid_uom_column := check_Uom_Column_Exists(p_column , l_table_name );
6214
6215 IF l_valid_uom_column IS NULL THEN
6216 RAISE e_uom_not_allowed;
6217 ELSIF l_valid_uom_column <> '1' THEN
6218
6219 l_valid_uom_column := check_Uom_Col_In_Use ( p_application_id
6220 ,p_attr_group_type
6221 ,p_attr_group_name
6222 ,p_internal_name
6223 ,l_valid_uom_column
6224 );
6225
6226 IF l_valid_uom_column IS NOT NULL THEN
6227 RAISE e_uom_not_allowed;
6228 END IF ;
6229
6230 END IF ;
6231
6232 END IF ;
6233
6234 SELECT WIDTH
6235 INTO l_col_width
6236 FROM FND_COLUMNS
6237 WHERE COLUMN_NAME = p_column
6238 AND TABLE_ID = (SELECT TABLE_ID
6239 FROM FND_TABLES
6240 WHERE TABLE_NAME = l_table_name);
6241
6242 IF ( ((SUBSTR(p_column,1,11) = 'TL_EXT_ATTR') OR
6243 (SUBSTR(p_column,1,10) = 'C_EXT_ATTR')) AND
6244 LENGTH(p_default_value) > l_col_width )THEN
6245 RAISE e_default_value_len_err;
6246
6247 END IF;
6248
6249
6250 UPDATE FND_DESCR_FLEX_COLUMN_USAGES
6251 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
6252 LAST_UPDATE_DATE = p_lud,
6253 LAST_UPDATE_LOGIN = g_current_login_id,
6254 COLUMN_SEQ_NUM = NVL(l_sequence, COLUMN_SEQ_NUM),
6255 ENABLED_FLAG = NVL(p_enabled, ENABLED_FLAG),
6256 REQUIRED_FLAG = NVL(p_required, REQUIRED_FLAG),
6257 DISPLAY_FLAG = NVL(p_display, DISPLAY_FLAG),
6258 FLEX_VALUE_SET_ID = l_value_set_id,
6259 DEFAULT_VALUE = p_default_value
6260 WHERE APPLICATION_ID = p_application_id
6261 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6262 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6263 AND APPLICATION_COLUMN_NAME = p_column;
6264
6265 UPDATE EGO_FND_DF_COL_USGS_EXT
6266 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
6267 LAST_UPDATE_DATE = p_lud,
6268 LAST_UPDATE_LOGIN = g_current_login_id,
6269 INFO_1 = p_info_1,
6270 SEARCH_FLAG = NVL(p_searchable, SEARCH_FLAG),
6271 CONTROL_LEVEL = decode(p_control_level, -1, CONTROL_LEVEL, p_control_level),
6272 ATTRIBUTE_CODE = l_attribute_code,
6273 VIEW_IN_HIERARCHY_CODE = l_view_in_hierarchy_code, -- update or keep the same by default?
6274 EDIT_IN_HIERARCHY_CODE = l_edit_in_hierarchy_code, -- update or keep the same by default?
6275 UOM_CLASS = l_uom_class -- Bug: 3525490
6276 ,CUSTOMIZATION_LEVEL = l_customization_level
6277 ,UNIQUE_KEY_FLAG = NVL(p_unique_key_flag, UNIQUE_KEY_FLAG)--to update the unique key in case of multi row attrgrp.
6278 ,READ_ONLY_FLAG = NVL(l_read_only_flag, 'N')
6279 WHERE APPLICATION_ID = p_application_id
6280 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6281 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6282 AND APPLICATION_COLUMN_NAME = p_column;
6283
6284 END IF;
6285
6286 -- We update the TL information whether or not we're in NLS mode
6287 UPDATE FND_DESCR_FLEX_COL_USAGE_TL
6288 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
6289 LAST_UPDATE_DATE = p_lud,
6290 LAST_UPDATE_LOGIN = g_current_login_id,
6291 FORM_LEFT_PROMPT = p_display_name,
6292 FORM_ABOVE_PROMPT = p_display_name,
6293 DESCRIPTION = p_description,
6294 SOURCE_LANG = USERENV('LANG')
6295 WHERE APPLICATION_ID = p_application_id
6296 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6297 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6298 AND APPLICATION_COLUMN_NAME = p_column
6299 --AND LANGUAGE = USERENV('LANG');
6300 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
6301
6302 -- Standard check of p_commit
6303 IF FND_API.To_Boolean(p_commit) THEN
6304 COMMIT WORK;
6305 END IF;
6306
6307 x_return_status := FND_API.G_RET_STS_SUCCESS;
6308
6309 EXCEPTION
6310
6311 WHEN e_default_value_len_err THEN
6312 IF FND_API.To_Boolean(p_commit) THEN
6313 ROLLBACK TO Update_Attribute_PUB;
6314 END IF;
6315 x_return_status := FND_API.G_RET_STS_ERROR;
6316 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DEFAULT_VAL_LEN_ERR');
6317 FND_MESSAGE.Set_Token('ATTR_MAX_LENGTH', l_col_width);
6318 FND_MSG_PUB.Add;
6319 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6320 ,p_count => x_msg_count
6321 ,p_data => x_msg_data);
6322
6323 WHEN e_attr_dup_seq_error THEN
6324 IF FND_API.To_Boolean(p_commit) THEN
6325 ROLLBACK TO Update_Attribute_PUB;
6326 END IF;
6327 x_return_status := FND_API.G_RET_STS_ERROR;
6328 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_UP_ATTR_DUP_SEQ_ERR');
6329 FND_MSG_PUB.Add;
6330 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6331 ,p_count => x_msg_count
6332 ,p_data => x_msg_data);
6333 WHEN e_uom_not_allowed THEN
6334 IF FND_API.TO_BOOLEAN(p_commit) THEN
6335 ROLLBACK TO Update_Attribute_PUB;
6336 END IF;
6337 x_return_status := FND_API.G_RET_STS_ERROR;
6338 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_UOM_COL_ERR');
6339 FND_MSG_PUB.Add;
6340 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6341 ,p_count => x_msg_count
6342 ,p_data => x_msg_data);
6343
6344
6345 WHEN e_first_attr_cbox THEN--bugFix:5292226
6346 IF FND_API.To_Boolean(p_commit) THEN
6347 ROLLBACK TO Update_Attribute_PUB;
6348 END IF;
6349 x_return_status := FND_API.G_RET_STS_ERROR;
6350 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_MR_FIRST_ATTR_CBOX_ERR');
6351 FND_MSG_PUB.Add;
6352 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6353 ,p_count => x_msg_count
6354 ,p_data => x_msg_data);
6355
6356 WHEN OTHERS THEN
6357 IF FND_API.To_Boolean(p_commit) THEN
6358 ROLLBACK TO Update_Attribute_PUB;
6359 END IF;
6360 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6361
6362 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
6363 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
6364 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
6365 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
6366 FND_MSG_PUB.Add;
6367 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6368 ,p_count => x_msg_count
6369 ,p_data => x_msg_data);
6370
6371 END Update_Attribute;
6372
6373 ----------------------------------------------------------------------
6374
6375 PROCEDURE Delete_Attribute (
6376 p_api_version IN NUMBER
6377 ,p_application_id IN NUMBER
6378 ,p_attr_group_type IN VARCHAR2
6379 ,p_attr_group_name IN VARCHAR2
6380 ,p_attr_name IN VARCHAR2
6381 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6382 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6383 ,x_return_status OUT NOCOPY VARCHAR2
6384 ,x_errorcode OUT NOCOPY NUMBER
6385 ,x_msg_count OUT NOCOPY NUMBER
6386 ,x_msg_data OUT NOCOPY VARCHAR2
6387 ) IS
6388
6389 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute';
6390
6391 --we don't use l_api_version yet, but eventually we might:
6392 --if we change required parameters, version goes from n.x to (n+1).x
6393 --if we change optional parameters, version goes from x.n to x.(n+1)
6394 l_api_version CONSTANT NUMBER := 1.0;
6395
6396 l_assocs_exist BOOLEAN;
6397 l_token_table ERROR_HANDLER.Token_Tbl_Type;
6398
6399 BEGIN
6400
6401 -- Check for call compatibility
6402 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
6403 l_api_name, G_PKG_NAME)
6404 THEN
6405 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6406 END IF;
6407 -- Initialize message list even though we don't currently use it
6408 IF FND_API.To_Boolean(p_init_msg_list) THEN
6409 FND_MSG_PUB.Initialize;
6410 END IF;
6411
6412 l_assocs_exist := Check_Associations_Exist(p_application_id,
6413 p_attr_group_type,
6414 p_attr_group_name);
6415
6416 IF (l_assocs_exist) THEN
6417
6418 x_return_status := FND_API.G_RET_STS_ERROR;
6419
6420 -- We need to select the translatable tokens for our error message --
6421 l_token_table(1).TOKEN_NAME := 'ATTR_DISP_NAME';
6422 SELECT TL.FORM_LEFT_PROMPT
6423 INTO l_token_table(1).TOKEN_VALUE
6424 FROM FND_DESCR_FLEX_COL_USAGE_TL TL
6425 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
6426 WHERE FL_COL.APPLICATION_ID = p_application_id
6427 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6428 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6429 AND FL_COL.END_USER_COLUMN_NAME = p_attr_name
6430 AND FL_COL.APPLICATION_ID = TL.APPLICATION_ID
6431 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = TL.DESCRIPTIVE_FLEXFIELD_NAME
6432 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = TL.DESCRIPTIVE_FLEX_CONTEXT_CODE
6433 AND FL_COL.APPLICATION_COLUMN_NAME = TL.APPLICATION_COLUMN_NAME
6434 AND TL.LANGUAGE = USERENV('LANG');
6435
6436 l_token_table(2).TOKEN_NAME := 'ATTR_GRP_NAME';
6437 SELECT DESCRIPTIVE_FLEX_CONTEXT_NAME
6438 INTO l_token_table(2).TOKEN_VALUE
6439 FROM FND_DESCR_FLEX_CONTEXTS_TL
6440 WHERE APPLICATION_ID = p_application_id
6441 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6442 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6443 AND LANGUAGE = USERENV('LANG');
6444
6445 ERROR_HANDLER.Add_Error_Message(
6446 p_message_name => 'EGO_EF_ASSOCS_EXIST2'
6447 ,p_application_id => 'EGO'
6448 ,p_token_tbl => l_token_table
6449 ,p_message_type => FND_API.G_RET_STS_ERROR
6450 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
6451 );
6452
6453 x_msg_count := 1;
6454 ERROR_HANDLER.Get_Message(x_message_text => x_msg_data
6455 ,x_entity_index => G_DUMMY_ENTITY_INDEX
6456 ,x_entity_id => G_DUMMY_ENTITY_ID
6457 ,x_message_type => G_DUMMY_MESSAGE_TYPE);
6458
6459 ELSE
6460
6461 Delete_Attribute_Internal(p_application_id, p_attr_group_type, p_attr_group_name,
6462 p_attr_name, p_commit, x_return_status,
6463 x_errorcode, x_msg_count, x_msg_data);
6464
6465 END IF;
6466 END Delete_Attribute;
6467
6468 ----------------------------------------------------------------------
6469
6470 --------------------
6471 -- Value Set APIs --
6472 --------------------
6473
6474 ----------------------------------------------------------------------
6475 /* Changes for PIM for TElco Feature */
6476
6477 /*procedure to get the effective version number of value set based on passed dates*/
6478 PROCEDURE get_version_number(
6479 p_api_version IN NUMBER
6480 ,p_value_set_id IN NUMBER
6481 ,p_start_effective_date IN TIMESTAMP
6482 ,p_creation_date IN TIMESTAMP
6483 ,p_version_number OUT NOCOPY NUMBER
6484 ,x_return_status OUT NOCOPY VARCHAR2
6485 ) IS
6486
6487 l_version_seq_id NUMBER;
6488
6489 BEGIN
6490 BEGIN
6491 SELECT version_seq_id INTO l_version_seq_id
6492 FROM ego_flex_valueset_version_b
6493 WHERE start_active_date < p_start_effective_date
6494 AND ( end_active_date > p_start_effective_date
6495 OR end_active_date IS NULL ) AND last_update_date < p_creation_date
6496 AND flex_value_set_id = p_value_set_id AND version_seq_id <> 0 ;
6497 EXCEPTION WHEN No_Data_Found THEN
6498 BEGIN
6499 SELECT version_seq_id INTO l_version_seq_id
6500 FROM ego_flex_valueset_version_b
6501 WHERE start_active_date < p_start_effective_date
6502 AND last_update_date =(SELECT Min(last_update_date) from ego_flex_valueset_version_b
6503 WHERE flex_value_set_id = p_value_set_id AND version_seq_id <> 0
6504 AND last_update_date > p_creation_date )
6505 AND flex_value_set_id = p_value_set_id AND version_seq_id <> 0 ;
6506 EXCEPTION
6507 WHEN OTHERS THEN
6508 l_version_seq_id :=NULL ;
6509 END;
6510 END;
6511 p_version_number := l_version_seq_id ;
6512 x_return_status:='S' ;
6513 END get_version_number;
6514
6515
6516
6517 /* Procedure is to release a draft of value set. */
6518
6519 PROCEDURE RELEASE_VALUE_SET_VERSION(
6520 p_api_version IN NUMBER
6521 ,p_value_set_id IN NUMBER
6522 ,p_description IN VARCHAR2
6523 ,p_start_date IN TIMESTAMP
6524 ,p_version_seq_id IN NUMBER
6525 ,x_return_status OUT NOCOPY VARCHAR2
6526 ,x_msg_count OUT NOCOPY VARCHAR2
6527 ,x_msg_data OUT NOCOPY varchar2
6528 )
6529 IS
6530
6531 l_future_effective BOOLEAN ;
6532 l_relver_end_active_date DATE ;
6533 l_version_seq_id NUMBER;
6534 l_max_version_seq_id NUMBER ;
6535 L_DUP_REC NUMBER;
6536 L_SAME_REL_DATE NUMBER;
6537 l_min_start_active_date DATE ;
6538
6539 CURSOR compareReleaseDates
6540 IS
6541 SELECT start_active_date ,end_active_date,version_seq_id
6542 FROM ego_flex_valueset_version_b
6543 WHERE flex_value_set_id = p_value_set_id AND version_seq_id <> 0 ;
6544 rect_t compareReleaseDates%rowtype;
6545 CURSOR copyDuplicateRow
6546 IS
6547 SELECT flex_value_id,SEQUENCE
6548 FROM EGO_FLEX_VALUE_VERSION_B
6549 WHERE flex_value_set_id = p_value_set_id AND version_seq_id = 0;
6550 rec_duplicateRow copyDuplicateRow % ROWTYPE;
6551
6552 BEGIN
6553 l_max_version_seq_id := p_version_seq_id -1 ;
6554 /*Validating whether the draft has changed from the previous released version.
6555 If not we are not going to release version and returning from the procedure with error message*/
6556 IF(l_max_version_seq_id > 0) THEN
6557
6558 SELECT COUNT(*) INTO L_DUP_REC FROM
6559 (
6560 (SELECT FLEX_VALUE_ID,SEQUENCE FROM EGO_FLEX_VALUE_VERSION_B
6561 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND VERSION_SEQ_ID=0
6562 MINUS
6563 SELECT FLEX_VALUE_ID,SEQUENCE FROM EGO_FLEX_VALUE_VERSION_B
6564 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND VERSION_SEQ_ID=L_MAX_VERSION_SEQ_ID)
6565
6566 UNION
6567
6568 (SELECT FLEX_VALUE_ID,SEQUENCE FROM EGO_FLEX_VALUE_VERSION_B
6569 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND VERSION_SEQ_ID=L_MAX_VERSION_SEQ_ID
6570 MINUS
6571 SELECT FLEX_VALUE_ID,SEQUENCE FROM EGO_FLEX_VALUE_VERSION_B
6572 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND VERSION_SEQ_ID=0)
6573 ) ;
6574
6575 IF(L_DUP_REC = 0) THEN
6576 x_msg_count :=1;
6577 x_msg_data := 'ValidationError';
6578 x_return_status := 'F';
6579 RETURN ;
6580 END IF ;
6581 END IF ;
6582 /* Validation ends. */
6583 /* Validating whether value set is already released on the date */
6584
6585 SELECT COUNT(*) INTO L_SAME_REL_DATE FROM EGO_FLEX_VALUESET_VERSION_B
6586 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND
6587 ( START_ACTIVE_DATE= P_START_DATE OR END_ACTIVE_DATE = P_START_DATE)
6588 AND VERSION_SEQ_ID <>0;
6589
6590 IF(L_SAME_REL_DATE>0) THEN
6591 x_msg_count :=1;
6592 x_msg_data := 'SameRelDateError';
6593 x_return_status := 'F';
6594 RETURN ;
6595 END IF ;
6596
6597
6598 OPEN compareReleaseDates;
6599 LOOP
6600 FETCH compareReleaseDates INTO rect_t;
6601 EXIT when compareReleaseDates%NOTFOUND;
6602 /* Setting Value for l_future_effective.It means if l_future_effective is true than the
6603 releasing version Start active date falls in between the already released version start active date and
6604 end active date. */
6605 IF p_start_date >= rect_t.start_active_date
6606 AND ( p_start_date <= rect_t.end_active_date OR rect_t.end_active_date IS NULL)
6607 THEN
6608 l_future_effective := TRUE;
6609 l_version_seq_id := rect_t.version_seq_id ;
6610 l_relver_end_active_date := rect_t.end_active_date ;
6611 EXIT;
6612 END IF ;
6613 END LOOP;
6614 CLOSE compareReleaseDates;
6615
6616 IF(l_future_effective) THEN
6617 UPDATE EGO_FLEX_VALUESET_VERSION_B
6618 SET END_ACTIVE_DATE =p_start_date -1/(24*60*60) ,
6619 LAST_UPDATED_BY= FND_GLOBAL.PARTY_ID,
6620 LAST_UPDATE_DATE = SYSDATE,
6621 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
6622 WHERE FLEX_VALUE_SET_ID = p_value_set_id AND VERSION_SEQ_ID = l_version_seq_id;
6623
6624 /* Creating record for the newly releasing version.Here end date is the start date of
6625 the released version(releasing version start date lies in between
6626 the start date and end date of released version) */
6627 INSERT INTO EGO_FLEX_VALUESET_VERSION_B
6628 (FLEX_VALUE_SET_ID, VERSION_SEQ_ID,
6629 DESCRIPTION, START_ACTIVE_DATE,END_ACTIVE_DATE, CREATED_BY,CREATION_DATE,
6630 LAST_UPDATED_BY,last_update_date,last_update_login)
6631 VALUES (p_value_set_id, p_version_seq_id,
6632 p_description, p_start_date,l_relver_end_active_date,fnd_global.party_id,
6633 SYSDATE,fnd_global.party_id,SYSDATE,
6634 fnd_global.login_id) ;
6635 /* Creating record for the draft row .*/
6636 INSERT INTO EGO_FLEX_VALUESET_VERSION_B (FLEX_VALUE_SET_ID, VERSION_SEQ_ID,
6637 CREATED_BY,CREATION_DATE,
6638 LAST_UPDATED_BY,last_update_date,last_update_login) VALUES (p_value_set_id, 0,
6639 fnd_global.party_id,SYSDATE,fnd_global.party_id,SYSDATE,
6640 fnd_global.login_id) ;
6641 ELSE
6642 SELECT Min(start_active_date ) INTO l_min_start_active_date
6643 FROM EGO_FLEX_VALUESET_VERSION_B WHERE FLEX_VALUE_SET_ID = p_value_set_id ;
6644
6645 /* Updating end date of already released version with the start date(less one second)
6646 of newly releasing version*/
6647
6648 IF (p_version_seq_id > 1 AND (l_min_start_active_date < p_start_date)) THEN
6649 UPDATE EGO_FLEX_VALUESET_VERSION_B SET END_ACTIVE_DATE =(p_start_date- 1/(24*60*60)),
6650 version_seq_id = l_max_version_seq_id ,
6651 LAST_UPDATED_BY= FND_GLOBAL.PARTY_ID,
6652 LAST_UPDATE_DATE = SYSDATE,
6653 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
6654 WHERE FLEX_VALUE_SET_ID = p_value_set_id AND (start_active_date =( SELECT Max(start_active_date )
6655 FROM EGO_FLEX_VALUESET_VERSION_B WHERE FLEX_VALUE_SET_ID = p_value_set_id) ) ;
6656 END IF ;
6657
6658 /* Creating record for the draft row .*/
6659 INSERT INTO EGO_FLEX_VALUESET_VERSION_B (FLEX_VALUE_SET_ID, VERSION_SEQ_ID,
6660 CREATED_BY,CREATION_DATE,
6661 LAST_UPDATED_BY,last_update_date,last_update_login) VALUES (p_value_set_id, 0,
6662 fnd_global.party_id,SYSDATE,fnd_global.party_id,SYSDATE,
6663 fnd_global.login_id) ;
6664
6665 /* Creating record for the newly releasing version*/
6666 INSERT INTO EGO_FLEX_VALUESET_VERSION_B (FLEX_VALUE_SET_ID, VERSION_SEQ_ID,
6667 DESCRIPTION, START_ACTIVE_DATE,CREATED_BY,CREATION_DATE,
6668 LAST_UPDATED_BY,last_update_date,last_update_login) VALUES (p_value_set_id,p_version_seq_id,
6669 p_description, p_start_date,fnd_global.party_id,SYSDATE,fnd_global.party_id,SYSDATE,
6670 fnd_global.login_id) ;
6671 /* below condition is only true if the start date of version getting release is less than the min(start date)
6672 of released version*/
6673 IF(p_start_date< l_min_start_active_date) THEN
6674 UPDATE EGO_FLEX_VALUESET_VERSION_B SET END_ACTIVE_DATE =(l_min_start_active_date -
6675 1/(24*60*60) ),LAST_UPDATED_BY= FND_GLOBAL.PARTY_ID,
6676 LAST_UPDATE_DATE = SYSDATE,
6677 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
6678 WHERE FLEX_VALUE_SET_ID = p_value_set_id AND start_active_date = p_start_date;
6679 END IF ;
6680 END IF ;
6681
6682 COMMIT;
6683 OPEN copyDuplicateRow ;
6684 LOOP
6685 FETCH copyDuplicateRow INTO rec_duplicateRow ;
6686 EXIT WHEN copyDuplicateRow%NOTFOUND ;
6687
6688 UPDATE EGO_FLEX_VALUE_VERSION_B SET VERSION_SEQ_ID =P_VERSION_SEQ_ID ,
6689 LAST_UPDATED_BY= FND_GLOBAL.PARTY_ID,
6690 LAST_UPDATE_DATE = SYSDATE,
6691 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
6692 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND VERSION_SEQ_ID = 0 AND FLEX_VALUE_ID
6693 = REC_DUPLICATEROW.FLEX_VALUE_ID;
6694
6695 INSERT INTO EGO_FLEX_VALUE_VERSION_B (FLEX_VALUE_SET_ID,FLEX_VALUE_ID,VERSION_SEQ_ID
6696 ,SEQUENCE,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
6697 VALUES(P_VALUE_SET_ID,REC_DUPLICATEROW.FLEX_VALUE_ID,0,REC_DUPLICATEROW.SEQUENCE,
6698 FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.LOGIN_ID);
6699
6700 INSERT INTO EGO_FLEX_VALUE_VERSION_TL (FLEX_VALUE_ID,VERSION_SEQ_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,
6701 CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,DESCRIPTION,FLEX_VALUE_MEANING,LANGUAGE,SOURCE_LANG)
6702 SELECT FLEX_VALUE_ID,P_VERSION_SEQ_ID,SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.PARTY_ID,
6703 FND_GLOBAL.LOGIN_ID,DESCRIPTION,FLEX_VALUE_MEANING,LANGUAGE,SOURCE_LANG FROM
6704 EGO_FLEX_VALUE_VERSION_TL WHERE FLEX_VALUE_ID = REC_DUPLICATEROW.FLEX_VALUE_ID AND VERSION_SEQ_ID=0 ;
6705
6706 END LOOP ;
6707 CLOSE copyDuplicateRow;
6708 x_return_status:='S';
6709 COMMIT;
6710 EXCEPTION
6711 WHEN OTHERS THEN
6712 x_return_status := NULL;
6713 END RELEASE_VALUE_SET_VERSION;
6714
6715
6716
6717
6718
6719 /* Procedure is used to revert the Draft of value set version to an Earlier Released version. */
6720
6721 PROCEDURE REVERT_TO_AN_EARLIER_VERSION(
6722 p_api_version IN NUMBER
6723 ,p_value_set_id IN NUMBER
6724 ,p_version_number IN NUMBER
6725 ,x_return_status OUT NOCOPY VARCHAR2
6726 ,x_msg_count OUT NOCOPY number
6727 ,x_msg_data OUT NOCOPY VARCHAR2
6728 )
6729
6730 IS
6731
6732
6733 CURSOR revert_draft
6734 IS
6735 SELECT flex_value_id,SEQUENCE
6736 FROM ego_flex_value_version_b
6737 WHERE version_seq_id = p_version_number AND flex_value_set_id = p_value_set_id;
6738 rect_t revert_draft%rowtype;
6739
6740 BEGIN
6741
6742
6743
6744 DELETE FROM EGO_FLEX_VALUE_VERSION_TL WHERE VERSION_SEQ_ID =0 AND FLEX_VALUE_ID IN
6745 (SELECT FLEX_VALUE_ID FROM EGO_FLEX_VALUE_VERSION_B WHERE FLEX_VALUE_SET_ID =P_VALUE_SET_ID
6746 AND VERSION_SEQ_ID = 0) ;
6747
6748 DELETE FROM EGO_FLEX_VALUE_VERSION_B
6749 WHERE FLEX_VALUE_SET_ID =P_VALUE_SET_ID AND VERSION_SEQ_ID = 0;
6750
6751
6752
6753 OPEN revert_draft;
6754 LOOP
6755 FETCH revert_draft INTO rect_t;
6756 EXIT WHEN revert_draft%notfound ;
6757 INSERT INTO EGO_FLEX_VALUE_VERSION_B(FLEX_VALUE_SET_ID,FLEX_VALUE_ID
6758 ,VERSION_SEQ_ID,SEQUENCE,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,
6759 LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
6760 VALUES (P_VALUE_SET_ID,RECT_T.FLEX_VALUE_ID,0,RECT_T.SEQUENCE,FND_GLOBAL.PARTY_ID,
6761 SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.LOGIN_ID );
6762
6763
6764 END LOOP;
6765 CLOSE revert_draft;
6766
6767
6768 INSERT INTO EGO_FLEX_VALUE_VERSION_TL (FLEX_VALUE_ID,VERSION_SEQ_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,
6769 CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,DESCRIPTION,FLEX_VALUE_MEANING,LANGUAGE,SOURCE_LANG)
6770 SELECT FLEX_VALUE_ID,0,SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.PARTY_ID,
6771 FND_GLOBAL.LOGIN_ID,DESCRIPTION,FLEX_VALUE_MEANING,LANGUAGE,SOURCE_LANG FROM EGO_FLEX_VALUE_VERSION_TL
6772 WHERE VERSION_SEQ_ID = P_VERSION_NUMBER AND FLEX_VALUE_ID IN
6773 (SELECT FLEX_VALUE_ID FROM EGO_FLEX_VALUE_VERSION_B
6774 WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND VERSION_SEQ_ID = P_VERSION_NUMBER);
6775 x_return_status :='S';
6776 COMMIT;
6777
6778 EXCEPTION
6779 WHEN OTHERS THEN
6780 x_return_status := NULL;
6781 END REVERT_TO_AN_EARLIER_VERSION;
6782
6783
6784 --Procedure to convert non versioned value set to an versioned value set.
6785
6786 PROCEDURE CONVERT_TO_VERSIONED_VALUE_SET(
6787 p_api_version IN NUMBER
6788 ,p_value_set_id IN NUMBER
6789 ,p_description IN VARCHAR2
6790 ,x_return_status OUT NOCOPY VARCHAR2
6791 ,x_msg_count OUT NOCOPY number
6792 ,x_msg_data OUT NOCOPY VARCHAR2
6793 )
6794
6795 IS
6796 l_created_by VARCHAR2(20) ;
6797 BEGIN
6798 --Inserting party id instead of user id .
6799 SELECT PERSON_PARTY_ID INTO L_CREATED_BY FROM FND_USER WHERE USER_ID
6800 =( SELECT CREATED_BY FROM FND_FLEX_VALUE_SETS WHERE FLEX_VALUE_SET_ID = P_VALUE_SET_ID) ;
6801
6802 --Inserting the new record in EGO_FLEX_VALUESET_VERSION_B for making versioned value set.
6803 INSERT INTO EGO_FLEX_VALUESET_VERSION_B(FLEX_VALUE_SET_ID,VERSION_SEQ_ID,DESCRIPTION
6804 ,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
6805 VALUES (P_VALUE_SET_ID, 0, P_DESCRIPTION,L_CREATED_BY,SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,
6806 FND_GLOBAL.LOGIN_ID);
6807 --Inserting the new record in EGO_OBJECT_LOCK for Locking versioned value set agains username.
6808 INSERT INTO EGO_OBJECT_LOCK (LOCK_ID,OBJECT_NAME,PK1_VALUE,LOCKING_PARTY_ID,LOCK_FLAG,
6809 CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
6810 VALUES
6811 (EGO_OBJECT_LOCK_S.NEXTVAL,'EGO_VALUE_SET',P_VALUE_SET_ID,FND_GLOBAL.PARTY_ID,'L',
6812 FND_GLOBAL.LOGIN_ID,SYSDATE,FND_GLOBAL.LOGIN_ID,SYSDATE,FND_GLOBAL.LOGIN_ID) ;
6813 --Clearing out the start date and end of values in fnd_flex_values because we are considering all the
6814 -- enabled values for this value set.
6815 UPDATE FND_FLEX_VALUES SET START_DATE_ACTIVE = NULL ,END_DATE_ACTIVE= NULL
6816 WHERE FLEX_VALUE_SET_ID= P_VALUE_SET_ID AND ENABLED_FLAG='Y';
6817 --Creating the record for values in EGO_FLEX_VALUE_VERSION_B table
6818 INSERT INTO EGO_FLEX_VALUE_VERSION_B (FLEX_VALUE_SET_ID, FLEX_VALUE_ID,SEQUENCE,
6819 VERSION_SEQ_ID,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
6820 SELECT P_VALUE_SET_ID, A.FLEX_VALUE_ID, B.DISP_SEQUENCE,0,A.CREATED_BY,SYSDATE,
6821 FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.LOGIN_ID
6822 FROM FND_FLEX_VALUES A, EGO_VS_VALUES_DISP_ORDER B
6823 WHERE
6824 A.FLEX_VALUE_SET_ID = P_VALUE_SET_ID
6825 AND A.ENABLED_FLAG='Y'
6826 AND B.VALUE_SET_VALUE_ID = A.FLEX_VALUE_ID ;
6827
6828 --Creating the record for values in EGO_FLEX_VALUE_VERSION_tl table
6829 INSERT INTO EGO_FLEX_VALUE_VERSION_TL (FLEX_VALUE_ID,DESCRIPTION,VERSION_SEQ_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,
6830 CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,FLEX_VALUE_MEANING,LANGUAGE,SOURCE_LANG
6831 ) SELECT A.FLEX_VALUE_ID,B.DESCRIPTION ,0,SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.PARTY_ID,FND_GLOBAL.LOGIN_ID,
6832 B.FLEX_VALUE_MEANING,B.LANGUAGE,USERENV('LANG') FROM EGO_FLEX_VALUE_VERSION_B A,
6833 FND_FLEX_VALUES_TL B
6834 WHERE A.FLEX_VALUE_SET_ID = P_VALUE_SET_ID AND
6835 A.VERSION_SEQ_ID = 0 AND A.FLEX_VALUE_ID = B.FLEX_VALUE_ID;
6836 x_return_status := 'S';
6837 COMMIT;
6838 EXCEPTION WHEN OTHERS
6839 THEN
6840 x_return_status := NULL;
6841
6842 END CONVERT_TO_VERSIONED_VALUE_SET;
6843
6844
6845
6846
6847
6848
6849 /* Wrapper Procedure for Create_Value_Set method.
6850 Procedure can be used for create Versioned and non versioned Value set.
6851 This method will include PIM 4 Telco functionality. */
6852 PROCEDURE Create_Value_Set (
6853 p_api_version IN NUMBER
6854 -- ,p_application_id IN NUMBER
6855 ,p_value_set_name IN VARCHAR2
6856 ,p_description IN VARCHAR2
6857 ,p_format_code IN VARCHAR2
6858 ,p_maximum_size IN NUMBER DEFAULT 0
6859 ,p_maximum_value IN VARCHAR2
6860 ,p_minimum_value IN VARCHAR2
6861 ,p_long_list_flag IN VARCHAR2
6862 ,p_validation_code IN VARCHAR2
6863 ,p_owner IN NUMBER
6864 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6865 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6866 ,x_value_set_id OUT NOCOPY NUMBER
6867 ,x_return_status OUT NOCOPY VARCHAR2
6868 -- ,x_errorcode OUT NOCOPY NUMBER
6869 ,x_msg_count OUT NOCOPY NUMBER
6870 ,x_msg_data OUT NOCOPY VARCHAR2
6871 ,p_versioning_enabled IN VARCHAR2
6872 ) IS
6873
6874
6875 BEGIN
6876
6877 EGO_EXT_FWK_PUB.Create_Value_Set(
6878 p_api_version => p_api_version
6879 ,p_value_set_name => p_value_set_name
6880 ,p_description => p_description
6881 ,p_format_code => p_format_code
6882 ,p_maximum_size => p_maximum_size
6883 ,p_maximum_value => p_maximum_value
6884 ,p_minimum_value => p_minimum_value
6885 ,p_long_list_flag => p_long_list_flag
6886 ,p_validation_code => p_validation_code
6887 ,p_owner => p_owner
6888 ,p_init_msg_list => p_init_msg_list
6889 ,p_commit => p_commit
6890 ,x_return_status => x_return_status
6891 ,x_value_set_id => x_value_set_id
6892 ,x_msg_count => x_msg_count
6893 ,x_msg_data => x_msg_data
6894
6895 ) ;
6896
6897
6898
6899 ------------------------------------------------------------------------------------------------------
6900 -- P4T Specific logic
6901 -- If Value Set was created successfully , create the version records in EGO tables
6902
6903 IF ( x_return_status = 'S' AND p_versioning_enabled ='true' ) THEN
6904 Insert into EGO_FLEX_VALUESET_VERSION_B
6905 (flex_value_set_id,version_seq_id,description
6906 ,created_by,creation_date,last_updated_by,last_update_date,last_update_login)
6907 VALUES (x_value_set_id, 0, p_description,FND_GLOBAL.party_id,SYSDATE,FND_GLOBAL.party_id,SYSDATE,
6908 FND_GLOBAL.login_id);
6909
6910
6911 INSERT INTO ego_object_lock (LOCK_ID,OBJECT_NAME,PK1_VALUE,locking_party_id,lock_flag,
6912 created_by,creation_date,last_updated_by,last_update_date,last_update_login) VALUES
6913 (EGO_OBJECT_LOCK_S.nextval,'EGO_VALUE_SET',x_value_set_id,FND_GLOBAL.party_id,'L',FND_GLOBAL.login_id,SYSDATE,
6914 FND_GLOBAL.login_id,SYSDATE,FND_GLOBAL.login_id) ;
6915 END IF;
6916 ------------------------------------------------------------------------------------------------------
6917 END Create_Value_Set;
6918
6919 PROCEDURE Create_Value_Set (
6920 p_api_version IN NUMBER
6921 -- ,p_application_id IN NUMBER
6922 ,p_value_set_name IN VARCHAR2
6923 ,p_description IN VARCHAR2
6924 ,p_format_code IN VARCHAR2
6925 ,p_maximum_size IN NUMBER DEFAULT 0
6926 ,p_maximum_value IN VARCHAR2
6927 ,p_minimum_value IN VARCHAR2
6928 ,p_long_list_flag IN VARCHAR2
6929 ,p_validation_code IN VARCHAR2
6930 ,p_owner IN NUMBER
6931 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6932 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6933 ,x_value_set_id OUT NOCOPY NUMBER
6934 ,x_return_status OUT NOCOPY VARCHAR2
6935 -- ,x_errorcode OUT NOCOPY NUMBER
6936 ,x_msg_count OUT NOCOPY NUMBER
6937 ,x_msg_data OUT NOCOPY VARCHAR2
6938 ) IS
6939
6940 l_api_name VARCHAR2(30);
6941
6942 --we don't use l_api_version yet, but eventually we might:
6943 --if we change required parameters, version goes from n.x to (n+1).x
6944 --if we change optional parameters, version goes from x.n to x.(n+1)
6945 l_api_version NUMBER := 1.0;
6946
6947 -- l_add_where_clause VARCHAR2(1000);
6948 l_owner NUMBER;
6949 l_maximum_size NUMBER;
6950 l_format_code FND_FLEX_VALUE_SETS.FORMAT_TYPE%TYPE;
6951 l_validation_code FND_LOOKUP_VALUES.LOOKUP_CODE%TYPE;
6952 l_maximum_value FND_FLEX_VALUE_SETS.MAXIMUM_VALUE%TYPE;
6953 l_minimum_value FND_FLEX_VALUE_SETS.MINIMUM_VALUE%TYPE;
6954 -- l_Sysdate DATE := Sysdate;
6955
6956 l_owner_name VARCHAR2(40):='ANONYMOUS';
6957 BEGIN
6958
6959 l_api_name := 'Create_Value_Set';
6960 l_api_version := 1.0;
6961 code_debug(' Started '||l_api_name ||' with params ');
6962 code_debug('p_value_set_name - '|| p_value_set_name||' p_description - '||p_description);
6963 code_debug('p_maximum_size - '|| p_maximum_size||' p_maximum_value - '||p_maximum_value||' p_minimum_value - '||p_minimum_value);
6964 code_debug('p_format_code - '|| p_format_code||' p_validation_code - '||p_validation_code||' p_long_list_flag - '||p_long_list_flag);
6965 -- Standard start of API savepoint
6966 IF FND_API.To_Boolean(p_commit) THEN
6967 SAVEPOINT Create_Value_Set_PUB;
6968 END IF;
6969
6970 -- Initialize message list even though we don't currently use it
6971 IF FND_API.To_Boolean(p_init_msg_list) THEN
6972 FND_MSG_PUB.Initialize;
6973 END IF;
6974
6975 -- Check for call compatibility
6976 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
6977 l_api_name, G_PKG_NAME)
6978 THEN
6979 RAISE FND_API.G_EXC_ERROR;
6980 END IF;
6981
6982 IF (p_owner IS NULL OR p_owner = -1) THEN
6983 l_owner := g_current_user_id;
6984 ELSE
6985 l_owner := p_owner;
6986 END IF;
6987
6988 IF (p_maximum_size IS NULL) THEN
6989 l_maximum_size := 0;
6990 ELSE
6991 l_maximum_size := p_maximum_size;
6992 END IF;
6993
6994 IF (p_validation_code IS NULL) THEN
6995 l_validation_code := G_NONE_VALIDATION_CODE;
6996 ELSE
6997 l_validation_code := p_validation_code;
6998 END IF;
6999
7000 IF (p_format_code = G_TRANS_TEXT_DATA_TYPE) THEN
7001 -- this should never occur after
7002 l_format_code := G_CHAR_DATA_TYPE;
7003 l_validation_code := G_TRANS_IND_VALIDATION_CODE;
7004 ELSE
7005 l_format_code:= NVL(p_format_code,G_CHAR_DATA_TYPE);
7006 END IF;
7007
7008 -- bug 4137720 trim extra spaces
7009 IF l_format_code <> G_CHAR_DATA_TYPE THEN
7010 IF (p_maximum_value IS NOT NULL) THEN
7011 l_maximum_value := TRIM(p_maximum_value);
7012 ELSE
7013 l_maximum_value := NULL;
7014 END IF;
7015 IF (p_minimum_value IS NOT NULL) THEN
7016 l_minimum_value := TRIM(p_minimum_value);
7017 ELSE
7018 l_minimum_value := NULL;
7019 END IF;
7020 ELSE
7021 l_maximum_value := p_maximum_value;
7022 l_minimum_value := p_minimum_value;
7023 END IF;
7024
7025 -- l_add_where_clause := 'where lookup_type =''EGO_EF_'||
7026 -- p_value_set_name||'_TYPE'' AND language = userenv(''LANG'')';
7027
7028 FND_FLEX_VAL_API.Set_Session_Mode('customer_data');
7029 --Bug No:5292701 :START
7030 /* IF (l_validation_code = G_NONE_VALIDATION_CODE) THEN
7031 code_debug(l_api_name ||' FND_FLEX_VAL_API.Create_Valueset_None ');
7032 FND_FLEX_VAL_API.Create_Valueset_None(
7033 VALUE_SET_NAME => p_value_set_name
7034 ,DESCRIPTION => p_description
7035 ,SECURITY_AVAILABLE => 'N'
7036 ,ENABLE_LONGLIST => p_long_list_flag
7037 ,FORMAT_TYPE => l_format_code
7038 ,MAXIMUM_SIZE => l_maximum_size
7039 ,PRECISION => null
7040 ,NUMBERS_ONLY => 'N'
7041 ,UPPERCASE_ONLY => 'N'
7042 ,RIGHT_JUSTIFY_ZERO_FILL => 'N'
7043 ,MIN_VALUE => l_minimum_value
7044 ,MAX_VALUE => l_maximum_value
7045 );
7046
7047 ELSIF (l_validation_code IN (G_INDEPENDENT_VALIDATION_CODE,G_TRANS_IND_VALIDATION_CODE) ) THEN
7048 code_debug(l_api_name ||' FND_FLEX_VAL_API.create_valueset_independent ');
7049 FND_FLEX_VAL_API.create_valueset_independent(
7050 value_set_name => p_value_set_name
7051 ,description => p_description
7052 ,security_available => 'N'
7053 ,enable_longlist => p_long_list_flag
7054 ,format_type => l_format_code
7055 ,maximum_size => l_maximum_size
7056 ,precision => null
7057 ,numbers_only => 'N'
7058 ,uppercase_only => 'N'
7059 ,right_justify_zero_fill => 'N'
7060 ,min_value => l_minimum_value
7061 ,max_value => l_maximum_value
7062 );
7063 IF l_validation_code = G_TRANS_IND_VALIDATION_CODE THEN
7064 UPDATE fnd_flex_value_sets
7065 SET validation_type = l_validation_code
7066 WHERE flex_value_set_name = p_value_set_name;
7067 END IF;
7068 ELSIF (l_validation_code = G_TABLE_VALIDATION_CODE) THEN
7069 code_debug(l_api_name ||' FND_FLEX_VAL_API.Create_Valueset_Table ');
7070 --
7071 -- as the table information is mandatory using the API
7072 -- we are creating a value set with validation type as NONE
7073 -- and then changing the validation_code flag
7074 --
7075 FND_FLEX_VAL_API.Create_Valueset_None(
7076 VALUE_SET_NAME => p_value_set_name
7077 ,DESCRIPTION => p_description
7078 ,SECURITY_AVAILABLE => 'N'
7079 ,ENABLE_LONGLIST => p_long_list_flag
7080 ,FORMAT_TYPE => l_format_code
7081 ,MAXIMUM_SIZE => l_maximum_size
7082 ,PRECISION => null
7083 ,NUMBERS_ONLY => 'N'
7084 ,UPPERCASE_ONLY => 'N'
7085 ,RIGHT_JUSTIFY_ZERO_FILL => 'N'
7086 ,MIN_VALUE => l_minimum_value
7087 ,MAX_VALUE => l_maximum_value
7088 );
7089 UPDATE fnd_flex_value_sets
7090 SET validation_type = l_validation_code
7091 WHERE flex_value_set_name = p_value_set_name;
7092 END IF;*/
7093 --Bug No:5292701
7094 BEGIN
7095 SELECT USER_NAME INTO l_owner_name
7096 FROM FND_USER
7097 WHERE USER_ID = l_owner;
7098 EXCEPTION
7099 WHEN NO_DATA_FOUND THEN
7100 NULL;
7101 END;
7102
7103 fnd_flex_loader_apis.up_value_set
7104 (
7105 p_upload_phase => 'BEGIN'
7106 ,p_upload_mode =>'non-MLS'
7107 ,p_flex_value_set_name =>p_value_set_name
7108 ,p_owner =>l_owner_name
7109 ,p_validation_type =>p_validation_code
7110 ,p_protected_flag =>'N'
7111 ,p_security_enabled_flag =>'N'
7112 ,p_longlist_flag =>p_long_list_flag
7113 ,p_format_type =>l_format_code
7114 ,p_maximum_size =>l_maximum_size
7115 ,p_number_precision =>''
7116 ,p_alphanumeric_allowed_flag =>'Y'
7117 ,p_uppercase_only_flag =>'N'
7118 ,p_numeric_mode_enabled_flag =>'N'
7119 ,p_minimum_value =>l_minimum_value
7120 ,p_maximum_value =>l_maximum_value
7121 ,p_parent_flex_value_set_name =>''
7122 ,p_dependant_default_value =>''
7123 ,p_dependant_default_meaning =>''
7124 ,p_description =>p_description
7125 );
7126 fnd_flex_loader_apis.up_value_set
7127 (
7128 p_upload_phase => 'END'
7129 ,p_upload_mode =>'non-MLS'
7130 ,p_flex_value_set_name =>p_value_set_name
7131 ,p_owner =>l_owner_name
7132 ,p_validation_type =>p_validation_code
7133 ,p_protected_flag =>'N'
7134 ,p_security_enabled_flag =>'N'
7135 ,p_longlist_flag =>p_long_list_flag
7136 ,p_format_type =>l_format_code
7137 ,p_maximum_size =>l_maximum_size
7138 ,p_number_precision =>''
7139 ,p_alphanumeric_allowed_flag =>'Y'
7140 ,p_uppercase_only_flag =>'N'
7141 ,p_numeric_mode_enabled_flag =>'N'
7142 ,p_minimum_value =>l_minimum_value
7143 ,p_maximum_value =>l_maximum_value
7144 ,p_parent_flex_value_set_name =>''
7145 ,p_dependant_default_value =>''
7146 ,p_dependant_default_meaning =>''
7147 ,p_description =>p_description
7148 );
7149
7150 --Bug No:5292701 :END
7151
7152 SELECT flex_value_set_id
7153 INTO x_value_set_id
7154 FROM fnd_flex_value_sets
7155 WHERE flex_value_set_name = p_value_set_name;
7156
7157 -- Standard check of p_commit
7158 IF FND_API.To_Boolean(p_commit) THEN
7159 COMMIT WORK;
7160 END IF;
7161
7162 x_return_status := FND_API.G_RET_STS_SUCCESS;
7163
7164 EXCEPTION
7165 WHEN FND_API.G_EXC_ERROR THEN
7166 code_debug(l_api_name ||' EXCEPTION - FND_API.G_EXC_ERROR ');
7167 IF FND_API.To_Boolean( p_commit ) THEN
7168 ROLLBACK TO Create_Value_Set_PUB;
7169 END IF;
7170 x_return_status := FND_API.G_RET_STS_ERROR;
7171 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7172 ,p_count => x_msg_count
7173 ,p_data => x_msg_data);
7174 WHEN OTHERS THEN
7175 code_debug(l_api_name ||' EXCEPTION - OTHERS '||SQLERRM);
7176 IF FND_API.To_Boolean( p_commit ) THEN
7177 ROLLBACK TO Create_Value_Set_PUB;
7178 END IF;
7179 x_msg_data := fnd_message.get();
7180 IF x_msg_data IS NULL THEN
7181 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7182 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7183 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7184 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
7185 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM||' '||FND_FLEX_DSC_API.Message());
7186 FND_MSG_PUB.Add;
7187 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7188 ,p_count => x_msg_count
7189 ,p_data => x_msg_data);
7190 ELSE
7191 x_return_status := FND_API.G_RET_STS_ERROR;
7192 x_msg_count := 1;
7193 END IF;
7194 END Create_Value_Set;
7195
7196
7197 /*-----------------------------------------------------------------------------
7198
7199 DESCRIPTION
7200 Creates a child value set
7201
7202 PARAMETERS
7203 See below.
7204
7205 NOTES
7206 (-) When calling this procedure from the java layer, leave the
7207 child_vs_value_ids as NULL. Persistence of these values is
7208 is handled separately.
7209
7210 -----------------------------------------------------------------------------*/
7211 PROCEDURE Create_Child_Value_Set (
7212 p_api_version IN NUMBER := 1.0
7213 ,p_value_set_name IN VARCHAR2 -- Child Value Set Name
7214 ,p_description IN VARCHAR2
7215 ,p_parent_vs_id IN NUMBER
7216 ,p_owner IN NUMBER
7217 ,child_vs_value_ids IN EGO_VALUE_SET_VALUE_IDS := NULL
7218 -- collection of value set value IDs
7219 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7220 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7221 ,x_child_vs_id OUT NOCOPY NUMBER -- child value set ID
7222 ,x_return_status OUT NOCOPY VARCHAR2
7223 ,x_msg_count OUT NOCOPY NUMBER
7224 ,x_msg_data OUT NOCOPY VARCHAR2
7225 ) IS
7226 l_api_name VARCHAR2(30);
7227 l_parent_vs_row ego_value_sets_v%ROWTYPE;
7228 l_maximum_size ego_value_sets_v.maximum_size%TYPE;
7229 l_format_code ego_value_sets_v.format_code%TYPE;
7230 l_minimum_value ego_value_sets_v.minimum_value%TYPE;
7231 l_maximum_value ego_value_sets_v.maximum_value%TYPE;
7232 l_long_list_flag ego_value_sets_v.longlist_flag%TYPE;
7233 l_owner NUMBER;
7234 l_return_status_inf VARCHAR2(1);
7235 l_inf_where_clause VARCHAR2(1000);
7236 l_id_column_name fnd_flex_validation_tables.id_column_name%TYPE;
7237 l_id_column_type fnd_flex_validation_tables.id_column_type%TYPE;
7238 l_value_column_name fnd_flex_validation_tables.value_column_name%TYPE;
7239 l_value_column_type fnd_flex_validation_tables.value_column_type%TYPE;
7240
7241 BEGIN
7242
7243 -- For Debugging
7244 l_api_name := 'Create_Child_Value_Set';
7245 code_debug(' Started ' || l_api_name ||
7246 ' with params:' ||
7247 ' p_value_set_name - ' || p_value_set_name ||
7248 ' p_description - ' || p_description ||
7249 ' p_parent_vs_id - ' || p_parent_vs_id );
7250
7251 -- Standard start of API savepoint
7252 IF FND_API.To_Boolean(p_commit) THEN
7253 SAVEPOINT Create_Child_Value_Set_PUB;
7254 END IF;
7255
7256 code_debug('Current user ID is ' || g_current_user_id);
7257
7258 --
7259 -- Get the Parent Value Set
7260 --
7261 SELECT *
7262 INTO l_parent_vs_row
7263 FROM ego_value_sets_v
7264 WHERE value_set_id = p_parent_vs_id;
7265
7266 -- Inherit all necessary properties from the parent value set initially.
7267 -- Later we'll override them with what has been passed to this procedure, if
7268 -- legal.
7269 l_maximum_size := l_parent_vs_row.maximum_size;
7270 l_format_code := l_parent_vs_row.format_code;
7271 l_minimum_value := l_parent_vs_row.minimum_value;
7272 l_maximum_value := l_parent_vs_row.maximum_value;
7273 l_long_list_flag := l_parent_vs_row.longlist_flag;
7274
7275 -- Get the owner from the session info
7276 IF (p_owner IS NULL OR p_owner = -1) THEN
7277 l_owner := g_current_user_id;
7278 ELSE
7279 l_owner := p_owner;
7280 END IF;
7281
7282 ----------------------------------------------------------------------------
7283 -- Create the value set header and get the value set id --
7284 ----------------------------------------------------------------------------
7285
7286 Create_Value_Set (
7287 p_api_version => p_api_version
7288 ,p_value_set_name => p_value_set_name
7289 ,p_description => p_description
7290 ,p_format_code => l_format_code
7291 ,p_maximum_size => l_maximum_size
7292 ,p_maximum_value => l_maximum_value
7293 ,p_minimum_value => l_minimum_value
7294 ,p_long_list_flag => l_long_list_flag
7295 ,p_validation_code => G_TABLE_VALIDATION_CODE
7296 ,p_owner => l_owner
7297 ,p_init_msg_list => p_init_msg_list
7298 ,p_commit => p_commit
7299 ,x_value_set_id => x_child_vs_id
7300 -- Child Value Set ID that gets generated
7301 ,x_return_status => x_return_status
7302 ,x_msg_count => x_msg_count
7303 ,x_msg_data => x_msg_data
7304 );
7305
7306 -- check the return status
7307 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7308 code_debug('Create_Child_Value_Set(): Child value set header creation failed.');
7309 END IF;
7310
7311 code_debug('Create_Child_Value_Set(): New Child Value Set ID is ' || x_child_vs_id);
7312 code_debug('Create_Child_Value_Set(): Parent Value Set ID is ' || p_parent_vs_id);
7313 code_debug('Create_Child_Value_Set(): OWNER is ' || p_owner);
7314
7315 ----------------------------------------------------------------------------
7316 -- Capture the parent-child relationship by inserting a row into --
7317 -- EGO_VALUE_SET_EXT. --
7318 ----------------------------------------------------------------------------
7319
7320 INSERT INTO ego_value_set_ext (value_set_id, parent_value_set_id,
7321 created_by, creation_date, last_updated_by, last_update_date,
7322 last_update_login)
7323 VALUES (x_child_vs_id, p_parent_vs_id, l_owner, SYSDATE, l_owner, SYSDATE,
7324 g_current_login_id );
7325
7326 ----------------------------------------------------------------------------
7327 -- Insert into EGO_VS_VALUES_DISP_ORDER --
7328 ----------------------------------------------------------------------------
7329
7330 -- NOTE: This is not used when creating a child VS from the UI. Only when
7331 -- using the PL/SQL API directly.
7332
7333 IF child_vs_value_ids IS NOT NULL THEN
7334 FOR i IN child_vs_value_ids.FIRST .. child_vs_value_ids.LAST
7335 LOOP
7336 code_debug('Current value is ' || child_vs_value_ids(i));
7337 code_debug('i: ' || i);
7338
7339 -- Remember, we specify which of the EXISTING value set values (from the parent value
7340 -- set) are to become members of the child value set. No new values are
7341 -- created.
7342
7343 INSERT INTO ego_vs_values_disp_order (value_set_value_id, value_set_id,
7344 disp_sequence, created_by, creation_date, last_updated_by,
7345 last_update_date, last_update_login)
7346 VALUES (child_vs_value_ids(i), x_child_vs_id, i, l_owner, SYSDATE, l_owner,
7347 SYSDATE, g_current_login_id);
7348
7349 END LOOP;
7350 END IF;
7351
7352 ----------------------------------------------------------------------------
7353 -- Insert into FND_FLEX_VALIDATION_TABLES --
7354 ----------------------------------------------------------------------------
7355
7356 l_return_status_inf := FND_API.G_FALSE;
7357
7358 -- The condition to obtain the correct subset of VS values from
7359 -- EGO_VS_VALUES_DISP_ORDER
7360 l_inf_where_clause :=
7361 'vsv.FLEX_VALUE_ID = do.value_set_value_id AND ' ||
7362 'do.value_set_id = ' || x_child_vs_id || ' AND ' ||
7363 'vsv.value_set_id = ' || p_parent_vs_id || ' AND ' ||
7364 --
7365 -------------------------- BEGIN Bug Fix 6016429 -------------------------
7366 --
7367 -- We need conditions that ensure only enabled values
7368 -- show up in the USER level UI pages. The 3 criteria for displaying it
7369 -- to the user are:
7370 --
7371 -- (1) The value should be enabled
7372 --
7373 'vsv.ENABLED_CODE = ''Y'' AND ' ||
7374 -- (2) The start date must be in the past
7375 --
7376 '(' ||
7377 ' (vsv.start_date IS NOT NULL AND vsv.start_date <= SYSDATE) ' ||
7378 ' OR ' ||
7379 ' (vsv.start_date IS NULL) ' ||
7380 ') ' ||
7381 'AND ' ||
7382 -- (3) The end date must be in the present or future
7383 --
7384 '( ' ||
7385 ' (vsv.end_date IS NOT NULL AND vsv.end_date >= SYSDATE) ' ||
7386 ' OR ' ||
7387 ' (vsv.end_date IS NULL) ' ||
7388
7389 ------------------------ BEGIN Bug Fix 6148833 -------------------------
7390 -- --
7391 -- There must be a space before the ORDER BY, otherwise the order by --
7392 -- removal pattern matching that takes place later will fail. --
7393 -- --
7394 ') ' ||
7395 ------------------------ END Bug Fix 6148833 ---------------------------
7396
7397 -------------------------- END Bug Fix 6016429 ---------------------------
7398
7399 'ORDER BY do.disp_sequence';
7400
7401 -- SSARNOBA: As an experiment to fix 6194774, try editing the data type of the
7402 -- value set directly in the table FND_FLEX_VALIDATION_TABLES and then retry
7403 -- the search
7404
7405 -- Bug fix 6319734 - convert the SELECT clause expressions if necessary.
7406 Build_Child_VS_Select_Exprs (
7407 p_parent_vs_row => l_parent_vs_row
7408 , x_id_column_type => l_id_column_type
7409 , x_value_column_type => l_value_column_type
7410 , x_id_column_name => l_id_column_name
7411 , x_value_column_name => l_value_column_name
7412 );
7413
7414 Insert_Value_Set_Table_Inf (
7415 p_api_version => p_api_version
7416 , p_value_set_id => x_child_vs_id
7417 , p_table_application_id => 431
7418 , p_table_name => 'EGO_VALUE_SET_VALUES_V vsv , EGO_VS_VALUES_DISP_ORDER do'
7419 , p_value_column_name => l_value_column_name
7420 , p_value_column_type => l_value_column_type
7421 , p_value_column_size => 150
7422 , p_meaning_column_name => 'vsv.DESCRIPTION' --Bug 13242028
7423 , p_meaning_column_type => G_CHAR_DATA_TYPE --Bug 13242028
7424 , p_meaning_column_size => 150 --Bug 13242028
7425 , p_id_column_name => l_id_column_name
7426 , p_id_column_type => l_id_column_type
7427 , p_id_column_size => 150
7428 , p_where_order_by => l_inf_where_clause
7429 , p_additional_columns => ''
7430 , p_owner => l_owner
7431 , p_init_msg_list => p_init_msg_list
7432 , p_commit => p_commit
7433 , x_return_status => l_return_status_inf
7434 , x_msg_count => x_msg_count
7435 , x_msg_data => x_msg_data
7436 );
7437
7438 -- check the return status
7439 IF ( l_return_status_inf <> FND_API.G_RET_STS_SUCCESS AND
7440 x_return_status = FND_API.G_RET_STS_SUCCESS ) THEN
7441
7442 -- Nothing had gone wrong until now, so set the global
7443 -- return status to the most recent one.
7444 x_return_status := l_return_status_inf;
7445 code_debug('Create_Child_Value_Set(): Insert into FND_FLEX_VALIDATION_TABLES failed.');
7446 RAISE FND_API.G_EXC_ERROR;
7447
7448 END IF;
7449
7450 IF FND_API.To_Boolean(p_commit) THEN
7451 COMMIT WORK;
7452 END IF;
7453
7454 x_return_status := FND_API.G_RET_STS_SUCCESS;
7455
7456 EXCEPTION
7457 WHEN FND_API.G_EXC_ERROR THEN
7458 IF FND_API.TO_BOOLEAN(p_commit) THEN
7459 ROLLBACK TO Create_Child_Value_Set_PUB;
7460 END IF;
7461 x_return_status := FND_API.G_RET_STS_ERROR;
7462
7463 WHEN OTHERS THEN
7464 IF FND_API.To_Boolean( p_commit ) THEN
7465 ROLLBACK TO Create_Child_Value_Set_PUB;
7466 END IF;
7467 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7468
7469 code_debug('SQL_ERR_MSG ' || SQLERRM);
7470
7471 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7472 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7473 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7474 FND_MSG_PUB.Add;
7475 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7476 ,p_count => x_msg_count
7477 ,p_data => x_msg_data);
7478
7479
7480 code_debug('END Create_Child_Value_Set');
7481
7482
7483 END Create_Child_Value_Set;
7484
7485
7486 /*-----------------------------------------------------------------------------
7487
7488 DESCRIPTION
7489 Deletes a child value set
7490
7491 PARAMETERS
7492 See below.
7493
7494 -----------------------------------------------------------------------------*/
7495 PROCEDURE Delete_Child_Value_Set (
7496 p_api_version IN NUMBER
7497 ,p_application_id IN NUMBER
7498 ,p_child_vs_id IN NUMBER
7499 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7500 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7501 ,x_return_status OUT NOCOPY VARCHAR2
7502 ,x_errorcode OUT NOCOPY NUMBER
7503 ,x_msg_count OUT NOCOPY NUMBER
7504 ,x_msg_data OUT NOCOPY VARCHAR2
7505 )
7506 IS
7507 BEGIN
7508
7509 ----------------------------------------------------------------------------
7510 -- Delete from fnd_flex_value_sets --
7511 ----------------------------------------------------------------------------
7512 delete from FND_FLEX_VALUE_SETS where flex_value_set_id = p_child_vs_id;
7513
7514
7515 ----------------------------------------------------------------------------
7516 -- Delete from EGO_VALUE_SET_EXT --
7517 ----------------------------------------------------------------------------
7518 delete from ego_value_set_ext where VALUE_SET_ID = p_child_vs_id;
7519
7520 ----------------------------------------------------------------------------
7521 -- Delete from EGO_VS_VALUES_DISP_ORDER --
7522 ----------------------------------------------------------------------------
7523 delete from ego_vs_values_disp_order where VALUE_SET_ID = p_child_vs_id;
7524
7525 x_return_status := FND_API.G_RET_STS_SUCCESS;
7526
7527 EXCEPTION
7528 WHEN OTHERS THEN
7529 x_return_status := FND_API.G_RET_STS_ERROR;
7530
7531 END Delete_Child_Value_Set;
7532
7533
7534 PROCEDURE Update_Value_Set (
7535 p_api_version IN NUMBER
7536 ,p_value_set_id IN NUMBER
7537 ,p_description IN VARCHAR2
7538 ,p_format_code IN VARCHAR2
7539 ,p_maximum_size IN NUMBER
7540 ,p_maximum_value IN VARCHAR2
7541 ,p_minimum_value IN VARCHAR2
7542 ,p_long_list_flag IN FND_FLEX_VALUE_SETS.LONGLIST_FLAG%TYPE
7543 -- VARCHAR2
7544 ,p_validation_code IN VARCHAR2
7545 ,p_owner IN NUMBER DEFAULT NULL
7546 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7547 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7548 ,x_return_status OUT NOCOPY VARCHAR2
7549 -- ,x_errorcode OUT NOCOPY NUMBER
7550 ,x_msg_count OUT NOCOPY NUMBER
7551 ,x_msg_data OUT NOCOPY VARCHAR2
7552 ,x_versioned_vs OUT NOCOPY VARCHAR2
7553
7554 ) IS
7555
7556 l_api_name VARCHAR2(30);
7557 --we don't use l_api_version yet, but eventually we might:
7558 --if we change required parameters, version goes from n.x to (n+1).x
7559 --if we change optional parameters, version goes from x.n to x.(n+1)
7560 l_api_version NUMBER;
7561
7562 l_maximum_size NUMBER;
7563 l_Sysdate DATE;
7564 l_OPDXcheck_dummy VARCHAR(2);
7565 l_owner NUMBER;
7566
7567 l_format_code FND_FLEX_VALUE_SETS.FORMAT_TYPE%TYPE;
7568 l_maximum_value FND_FLEX_VALUE_SETS.MAXIMUM_VALUE%TYPE;
7569 l_minimum_value FND_FLEX_VALUE_SETS.MINIMUM_VALUE%TYPE;
7570
7571 l_value_set_rec EGO_VALUE_SETS_V%ROWTYPE;
7572 --changes FOR P4T
7573 isVersionedVS NUMBER ;
7574
7575 BEGIN
7576
7577 l_api_name := 'Update_Value_Set';
7578 l_api_version := 1.0;
7579 l_Sysdate := SYSDATE;
7580
7581 -- Standard start of API savepoint
7582 IF FND_API.To_Boolean(p_commit) THEN
7583 SAVEPOINT Update_Value_Set_PUB;
7584 END IF;
7585
7586 -- Initialize message list even though we don't currently use it
7587 IF FND_API.To_Boolean(p_init_msg_list) THEN
7588 FND_MSG_PUB.Initialize;
7589 END IF;
7590
7591 -- Check for call compatibility
7592 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
7593 l_api_name, G_PKG_NAME)
7594 THEN
7595 RAISE FND_API.G_EXC_ERROR;
7596 END IF;
7597
7598 IF (p_owner IS NULL OR p_owner = -1) THEN
7599 l_owner := g_current_user_id;
7600 ELSE
7601 l_owner := p_owner;
7602 END IF;
7603
7604 IF p_maximum_size IS NULL THEN
7605 l_maximum_size := 0;
7606 ELSE
7607 l_maximum_size := p_maximum_size;
7608 END IF;
7609
7610 IF (p_format_code = G_TRANS_TEXT_DATA_TYPE) THEN
7611 -- this should never occur after
7612 l_format_code := G_CHAR_DATA_TYPE;
7613 ELSE
7614 l_format_code := NVL(p_format_code,G_CHAR_DATA_TYPE);
7615 END IF;
7616
7617 -- bug 4137720 trim extra spaces
7618 IF l_format_code <> G_CHAR_DATA_TYPE THEN
7619 IF (p_maximum_value IS NOT NULL) THEN
7620 l_maximum_value := TRIM(p_maximum_value);
7621 ELSE
7622 l_maximum_value := NULL;
7623 END IF;
7624 IF (p_minimum_value IS NOT NULL) THEN
7625 l_minimum_value := TRIM(p_minimum_value);
7626 ELSE
7627 l_minimum_value := NULL;
7628 END IF;
7629 ELSE
7630 l_maximum_value := p_maximum_value;
7631 l_minimum_value := p_minimum_value;
7632 END IF;
7633
7634 -- API not available in FND for updation
7635 -- logged bug 3957430 against FND
7636 UPDATE FND_FLEX_VALUE_SETS
7637 SET DESCRIPTION = p_description,
7638 LONGLIST_FLAG = p_long_list_flag,
7639 MINIMUM_VALUE = l_minimum_value,
7640 MAXIMUM_VALUE = l_maximum_value,
7641 MAXIMUM_SIZE = l_maximum_size,
7642 LAST_UPDATED_BY = l_owner,
7643 LAST_UPDATE_DATE = l_Sysdate,
7644 LAST_UPDATE_LOGIN = g_current_login_id
7645 WHERE FLEX_VALUE_SET_ID = p_value_set_id;
7646
7647 --------------------------------------------------------------------------
7648 -- Update all the child value sets --
7649 --------------------------------------------------------------------------
7650
7651 -- Even though there is strong consistency between child and parent long
7652 -- list display types, it is still necessary to maintain a separate value
7653 -- for the child? It is not sufficient for the child value set's long list
7654 -- display type to be obtained from the parent value set since we do not
7655 -- always distinguish between parent and child value sets (e.g. the user
7656 -- UI rather than the setup workbench UI).
7657
7658 --
7659 -- REASON FOR SUB-OPTIMAL SYNTAX
7660 --
7661 -- Unfortunately, we cannot use a single update statement on all rows
7662 -- where the ego_value_sets_v.value_set_id is in the list of child value
7663 -- ids. While we can obtain a collection of child value IDs:
7664 --
7665 -- EXECUTE IMMEDIATE
7666 -- 'SELECT value_set_id FROM ego_value_sets_v ' ||
7667 -- 'WHERE parent_value_set_id = p_value_set_id'
7668 -- BULK COLLECT INTO child_value_set_ids;
7669 --
7670 -- we cannot use it in a SQL Update statement like this:
7671 --
7672 -- UPDATE fnd_flex_value_sets
7673 -- SET longlist_flag = p_long_list_flag
7674 -- WHERE flex_value_set_id IN TABLE (child_value_set_ids);
7675 --
7676 -- because the collection's data type
7677 -- is user-defined. We will get a PLS-00642 error since the collection
7678 -- type is locally defined (in the function or the package, as opposed
7679 -- to globally). The SQL compiler cannot determine type safety. Only
7680 -- the PL/SQL compiler can, hence the need for a less efficient
7681 -- cursor approach.
7682
7683 <<child_value_set_ids_loop>>
7684 FOR l_value_set_rec IN
7685 (SELECT *
7686 FROM ego_value_sets_v
7687 WHERE parent_value_set_id = p_value_set_id)
7688 LOOP
7689
7690 -- Update the long list display type
7691 UPDATE fnd_flex_value_sets
7692 SET longlist_flag = p_long_list_flag
7693 WHERE flex_value_set_id = l_value_set_rec.value_set_id;
7694
7695 -- dbms_output.put_line(' ' || l_value_set_rec.value_set_id);
7696 END LOOP child_value_set_ids_loop;
7697
7698
7699 -- Standard check of p_commit
7700 IF FND_API.To_Boolean(p_commit) THEN
7701 COMMIT WORK;
7702 END IF;
7703
7704 x_return_status := FND_API.G_RET_STS_SUCCESS;
7705 --changes for P4t begin
7706 SELECT Count(*) INTO isVersionedVS FROM ego_flex_valueset_version_b
7707 WHERE flex_value_set_id = p_value_set_id ;
7708 IF(isVersionedVS > 0) THEN
7709 x_versioned_vs := 'true';
7710 END IF ;
7711 --changes for P4t complete
7712 EXCEPTION
7713 WHEN FND_API.G_EXC_ERROR THEN
7714 IF FND_API.To_Boolean( p_commit ) THEN
7715 ROLLBACK TO Update_Value_Set_PUB;
7716 END IF;
7717 x_return_status := FND_API.G_RET_STS_ERROR;
7718 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7719 ,p_count => x_msg_count
7720 ,p_data => x_msg_data);
7721
7722 WHEN OTHERS THEN
7723 IF FND_API.To_Boolean( p_commit ) THEN
7724 ROLLBACK TO Update_Value_Set_PUB;
7725 END IF;
7726 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7727
7728 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7729 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7730 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
7731 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7732 FND_MSG_PUB.Add;
7733 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7734 ,p_count => x_msg_count
7735 ,p_data => x_msg_data);
7736
7737 END Update_Value_Set;
7738
7739
7740 /*-----------------------------------------------------------------------------
7741
7742 DESCRIPTION
7743 Updates a child value set
7744
7745 PARAMETERS
7746 See below.
7747
7748 NOTES
7749 (-) Old child value set IDs get erased.
7750 (-) The value set name cannot be altered after creation.
7751 (-) The 'created' fields will not retain the old data. The fact that the
7752 value set values are recreated every time becomes apparent when \
7753 viewing these fields.
7754
7755 -----------------------------------------------------------------------------*/
7756
7757 PROCEDURE Update_Child_Value_Set (
7758 p_api_version IN NUMBER
7759 ,p_value_set_id IN NUMBER
7760 ,p_description IN VARCHAR2
7761 ,p_format_code IN VARCHAR2
7762 ,p_owner IN NUMBER DEFAULT NULL
7763 ,child_vs_value_ids IN EGO_VALUE_SET_VALUE_IDS
7764 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7765 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7766 ,x_return_status OUT NOCOPY VARCHAR2
7767 ,x_msg_count OUT NOCOPY NUMBER
7768 ,x_msg_data OUT NOCOPY VARCHAR2
7769 ) IS
7770 l_vs_value_count NUMBER;
7771 l_api_name VARCHAR2(30);
7772 l_parent_vs_row ego_value_sets_v%ROWTYPE;
7773 l_validation_code FND_LOOKUP_VALUES.LOOKUP_CODE%TYPE;
7774 l_vs_value_disp_orders EGO_VS_VALUES_DISP_ORDER_TBL
7775 := ego_vs_values_disp_order_tbl();
7776 x_versioned_vs NUMBER :=NULL ;
7777 BEGIN
7778
7779 -- For Debugging
7780 l_api_name := 'Update_Child_Value_Set';
7781 code_debug(' Started ' || l_api_name ||
7782 ' with params:' ||
7783 ' p_value_set_id - ' || p_value_set_id ||
7784 ' p_description - ' || p_description );
7785
7786 -- Standard start of API savepoint
7787 IF FND_API.To_Boolean(p_commit) THEN
7788 SAVEPOINT Update_Child_Value_Set_PUB;
7789 END IF;
7790
7791
7792 ----------------------------------------------------------------------------
7793 -- Get unchanged (thus unspecified) but mandatory properties from parent --
7794 ----------------------------------------------------------------------------
7795
7796 SELECT pvs.*
7797 INTO l_parent_vs_row
7798 FROM ego_value_sets_v vs, ego_value_sets_v pvs
7799 WHERE vs.parent_value_set_id = pvs.value_set_id
7800 AND vs.value_set_id = p_value_set_id;
7801
7802 l_validation_code := l_parent_vs_row.validation_code_admin;
7803
7804 -- Make sure the validation type is independent or translatable independent.
7805 IF (l_validation_code <> G_INDEPENDENT_VALIDATION_CODE AND
7806 l_validation_code <> G_TRANS_IND_VALIDATION_CODE) THEN
7807 RAISE FND_API.G_EXC_ERROR;
7808 END IF;
7809
7810
7811 ----------------------------------------------------------------------------
7812 -- Update the value set header --
7813 ----------------------------------------------------------------------------
7814
7815 Update_Value_Set (
7816 p_api_version => p_api_version
7817 ,p_value_set_id => p_value_set_id
7818 ,p_description => p_description
7819 ,p_format_code => l_parent_vs_row.format_code
7820 ,p_maximum_size => l_parent_vs_row.maximum_size
7821 ,p_maximum_value => l_parent_vs_row.maximum_value
7822 ,p_minimum_value => l_parent_vs_row.minimum_value
7823 ,p_long_list_flag => l_parent_vs_row.longlist_flag
7824 ,p_validation_code => l_parent_vs_row.validation_code_admin
7825 ,p_owner => p_owner
7826 ,p_init_msg_list => p_init_msg_list
7827 ,p_commit => p_commit
7828 ,x_return_status => x_return_status
7829 ,x_msg_count => x_msg_count
7830 ,x_msg_data => x_msg_data
7831 --changes for p4t begin
7832 , x_versioned_vs => x_versioned_vs
7833 --changes for p4t ends
7834 );
7835
7836
7837 -- Nothing to update in EGO_VALUE_SET_EXT (because the parent-child
7838 -- relationship cannot be modified)
7839
7840 ----------------------------------------------------------------------------
7841 -- Update EGO_VS_VALUES_DISP_ORDER --
7842 ----------------------------------------------------------------------------
7843
7844 -- Create a collection for the new child VS values' rows
7845
7846 FOR i IN child_vs_value_ids.FIRST .. child_vs_value_ids.LAST
7847 LOOP
7848 code_debug('Current value is ' || child_vs_value_ids(i));
7849 code_debug('i: ' || i);
7850
7851 l_vs_value_count := 0;
7852 SELECT COUNT(*) INTO l_vs_value_count
7853 FROM ego_vs_values_disp_order
7854 WHERE value_set_value_id = child_vs_value_ids(i)
7855 AND value_set_id = p_value_set_id;
7856
7857 -- Add an extra space onto the array
7858 l_vs_value_disp_orders.extend();
7859
7860 IF (l_vs_value_count > 0) THEN -- value already existed in child VS
7861 -- Add a row to the collection of new value sets, with the new 'update' attributes
7862 -- copy the old creation info
7863 -- SSARNOBA: I'm not even sure if this is needed
7864
7865 -- Bug 12382454 : Start
7866 -- select * instead of selecting individual columns
7867 /*
7868 SELECT
7869 value_set_value_id -- VALUE_SET_VALUE_ID
7870 , value_set_id -- VALUE_SET_ID
7871 , i -- DISP_SEQUENCE
7872 , created_by -- CREATED_BY
7873 , creation_date -- CREATION_DATE
7874 , p_owner -- LAST_UPDATED_BY
7875 , SYSDATE -- LAST_UPDATE_DATE
7876 , g_current_login_id -- LAST_UPDATE_LOGIN
7877 */
7878 SELECT *
7879 /* Bug 12382454 : End */
7880 INTO l_vs_value_disp_orders(i)
7881 FROM ego_vs_values_disp_order
7882 WHERE value_set_value_id = child_vs_value_ids(i) and
7883 value_set_id = p_value_set_id;
7884
7885 -- Bug 12382454 : Start
7886 -- Override the below values with new values.
7887 l_vs_value_disp_orders(i).DISP_SEQUENCE := i;
7888 l_vs_value_disp_orders(i).LAST_UPDATED_BY := p_owner;
7889 l_vs_value_disp_orders(i).LAST_UPDATE_DATE := SYSDATE;
7890 l_vs_value_disp_orders(i).LAST_UPDATE_LOGIN := g_current_login_id;
7891 -- Bug 12382454 : End
7892 ELSE
7893 -- Add a row to the collection of new value sets
7894 -- with new creation info.
7895
7896 -- Bug 12382454 : Start
7897 -- Instead of using the select query, will assign the values to individual fields of the record.
7898 l_vs_value_disp_orders(i).VALUE_SET_VALUE_ID := child_vs_value_ids(i);
7899 l_vs_value_disp_orders(i).VALUE_SET_ID := p_value_set_id;
7900 l_vs_value_disp_orders(i).DISP_SEQUENCE := i;
7901 l_vs_value_disp_orders(i).CREATED_BY := p_owner;
7902 l_vs_value_disp_orders(i).CREATION_DATE := SYSDATE;
7903 l_vs_value_disp_orders(i).LAST_UPDATED_BY := p_owner;
7904 l_vs_value_disp_orders(i).LAST_UPDATE_DATE := SYSDATE;
7905 l_vs_value_disp_orders(i).LAST_UPDATE_LOGIN := g_current_login_id;
7906
7907 /*
7908 SELECT
7909 child_vs_value_ids(i) -- VALUE_SET_VALUE_ID
7910 , p_value_set_id -- VALUE_SET_ID
7911 , i -- DISP_SEQUENCE
7912 , p_owner -- CREATED_BY
7913 , SYSDATE -- CREATION_DATE
7914 , p_owner -- LAST_UPDATED_BY
7915 , SYSDATE -- LAST_UPDATE_DATE
7916 , g_current_login_id -- LAST_UPDATE_LOGIN
7917 INTO l_vs_value_disp_orders(i)
7918 FROM dual;
7919 */
7920 -- Bug 12382454 : End
7921 END IF;
7922 END LOOP;
7923
7924 -- Delete all the existing values from the child VS
7925 DELETE FROM ego_vs_values_disp_order
7926 WHERE value_set_id = p_value_set_id;
7927
7928 -- Insert the new values for the child VS from the collection
7929 FORALL j IN l_vs_value_disp_orders.FIRST ..
7930 l_vs_value_disp_orders.LAST
7931 INSERT INTO ego_vs_values_disp_order
7932 VALUES l_vs_value_disp_orders(j);
7933 -- END FORALL
7934
7935
7936 x_return_status := FND_API.G_RET_STS_SUCCESS;
7937
7938 EXCEPTION
7939 WHEN OTHERS THEN
7940 IF FND_API.To_Boolean( p_commit ) THEN
7941 ROLLBACK TO Update_Child_Value_Set_PUB;
7942 END IF;
7943 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7944
7945 code_debug('SQL_ERR_MSG ' || SQLERRM);
7946
7947 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7948 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7949 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7950 FND_MSG_PUB.Add;
7951 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7952 ,p_count => x_msg_count
7953 ,p_data => x_msg_data);
7954
7955 END;
7956
7957 ----------------------------------------------------------------------
7958
7959 PROCEDURE Insert_Value_Set_Table_Inf (
7960 p_api_version IN NUMBER
7961 ,p_value_set_id IN NUMBER
7962 ,p_table_application_id IN NUMBER
7963 ,p_table_name IN VARCHAR2
7964 ,p_value_column_name IN VARCHAR2
7965 ,p_value_column_type IN VARCHAR2
7966 ,p_value_column_size IN NUMBER
7967 ,p_meaning_column_name IN VARCHAR2
7968 ,p_meaning_column_type IN VARCHAR2
7969 ,p_meaning_column_size IN NUMBER
7970 ,p_id_column_name IN VARCHAR2
7971 ,p_id_column_type IN VARCHAR2
7972 ,p_id_column_size IN NUMBER
7973 ,p_where_order_by IN VARCHAR2
7974 ,p_additional_columns IN VARCHAR2
7975 ,p_owner IN NUMBER DEFAULT NULL
7976 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7977 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7978 ,x_return_status OUT NOCOPY VARCHAR2
7979 ,x_msg_count OUT NOCOPY NUMBER
7980 ,x_msg_data OUT NOCOPY VARCHAR2
7981 ) IS
7982
7983 l_api_name VARCHAR2(30);
7984 --we don't use l_api_version yet, but eventually we might:
7985 --if we change required parameters, version goes from n.x to (n+1).x
7986 --if we change optional parameters, version goes from x.n to x.(n+1)
7987 l_api_version NUMBER;
7988 l_Sysdate DATE;
7989 l_owner NUMBER;
7990 l_where_order_by VARCHAR(2000);
7991
7992 BEGIN
7993
7994 l_api_name := 'Insert_Value_Set_Table_Inf';
7995 l_api_version := 1.0;
7996 l_Sysdate := SYSDATE;
7997 code_debug(l_api_name ||' start ');
7998
7999 -- Standard start of API savepoint
8000 IF FND_API.To_Boolean(p_commit) THEN
8001 SAVEPOINT Insert_Value_Set_Table_Inf_PUB;
8002 END IF;
8003
8004 -- Initialize message list even though we don't currently use it
8005 IF FND_API.To_Boolean(p_init_msg_list) THEN
8006 FND_MSG_PUB.Initialize;
8007 END IF;
8008
8009 -- Check for call compatibility
8010 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
8011 l_api_name, G_PKG_NAME)
8012 THEN
8013 RAISE FND_API.G_EXC_ERROR;
8014 END IF;
8015
8016 IF (p_owner IS NULL OR p_owner = -1) THEN
8017 l_owner := g_current_user_id;
8018 ELSE
8019 l_owner := p_owner;
8020 END IF;
8021
8022 ---------------------- BEGIN Bug fix 6148833 -----------------------------
8023
8024 -- Since we can't modify IN function arguments, we have to make a copy
8025 -- of the clause.
8026 l_where_order_by := p_where_order_by;
8027
8028 -- Insert a space before an ORDER BY clause, so that
8029 -- order by elimination takes place for inner query blocks.
8030 Insert_Order_By_Space (
8031 p_where_order_by => l_where_order_by
8032 );
8033
8034 ---------------------- END Bug fix 6148833 -------------------------------
8035
8036 code_debug(l_api_name ||' inserting data into fnd_flex_validation_tables ');
8037 INSERT INTO fnd_flex_validation_tables
8038 (
8039 FLEX_VALUE_SET_ID
8040 ,APPLICATION_TABLE_NAME
8041 ,VALUE_COLUMN_NAME
8042 ,VALUE_COLUMN_TYPE
8043 ,VALUE_COLUMN_SIZE
8044 ,COMPILED_ATTRIBUTE_COLUMN_NAME
8045 ,ENABLED_COLUMN_NAME
8046 ,HIERARCHY_LEVEL_COLUMN_NAME
8047 ,START_DATE_COLUMN_NAME
8048 ,END_DATE_COLUMN_NAME
8049 ,SUMMARY_ALLOWED_FLAG
8050 ,SUMMARY_COLUMN_NAME
8051 ,ID_COLUMN_NAME
8052 ,ID_COLUMN_TYPE
8053 ,ID_COLUMN_SIZE
8054 ,MEANING_COLUMN_NAME
8055 ,MEANING_COLUMN_TYPE
8056 ,MEANING_COLUMN_SIZE
8057 ,TABLE_APPLICATION_ID
8058 ,ADDITIONAL_WHERE_CLAUSE
8059 ,ADDITIONAL_QUICKPICK_COLUMNS
8060 ,CREATED_BY
8061 ,CREATION_DATE
8062 ,LAST_UPDATED_BY
8063 ,LAST_UPDATE_DATE
8064 ,LAST_UPDATE_LOGIN
8065 )
8066 VALUES
8067 (
8068 p_value_set_id --FLEX_VALUE_SET_ID
8069 ,p_table_name --APPLICATION_TABLE_NAME
8070 ,p_value_column_name --VALUE_COLUMN_NAME
8071 ,p_value_column_type --VALUE_COLUMN_TYPE
8072 ,p_value_column_size --VALUE_COLUMN_SIZE
8073 -- ,p_value_column_name --COMPILED_ATTRIBUTE_COLUMN_NAME
8074 ,'NULL' --COMPILED_ATTRIBUTE_COLUMN_NAME
8075 -- ,'Y' --ENABLED_COLUMN_NAME
8076 ,'''Y''' --ENABLED_COLUMN_NAME
8077 ,'NULL' --HIERARCHY_LEVEL_COLUMN_NAME
8078 -- ,'START_DATE_COLUMN_NAME' --START_DATE_COLUMN_NAME
8079 -- ,'END_DATE_COLUMN_NAME' --END_DATE_COLUMN_NAME
8080 ,'TO_DATE(NULL)' --START_DATE_COLUMN_NAME
8081 ,'TO_DATE(NULL)' --END_DATE_COLUMN_NAME
8082 ,'N' --SUMMARY_ALLOWED_FLAG
8083 ,'''N''' --SUMMARY_COLUMN_NAME
8084 ,p_id_column_name --ID_COLUMN_NAME
8085 ,p_id_column_type --ID_COLUMN_SIZE
8086 ,p_id_column_size --ID_COLUMN_TYPE
8087 ,p_meaning_column_name --MEANING_COLUMN_NAME
8088 ,p_meaning_column_type --MEANING_COLUMN_TYPE
8089 ,p_meaning_column_size --MEANING_COLUMN_SIZE
8090 ,p_table_application_id --TABLE_APPLICATION_ID
8091 ,l_where_order_by --ADDITIONAL_WHERE_CLAUSE
8092 ,'' --ADDITIONAL_QUICKPICK_COLUMNS
8093 ,l_owner --CREATED_BY
8094 ,l_Sysdate --CREATION_DATE
8095 ,l_owner --LAST_UPDATED_BY
8096 ,l_Sysdate --LAST_UPDATE_DATE
8097 ,g_current_login_id --LAST_UPDATE_LOGIN
8098 );
8099
8100 code_debug(l_api_name ||' inserting data into fnd_flex_validation_tables COMPLETED ');
8101 -- Standard check of p_commit
8102 IF FND_API.To_Boolean(p_commit) THEN
8103 COMMIT WORK;
8104 END IF;
8105
8106 x_return_status := FND_API.G_RET_STS_SUCCESS;
8107
8108 EXCEPTION
8109 WHEN FND_API.G_EXC_ERROR THEN
8110 code_debug(l_api_name ||' EXCEPTION desired ');
8111 IF FND_API.To_Boolean(p_commit) THEN
8112 ROLLBACK TO Insert_Value_Set_Table_Inf_PUB;
8113 END IF;
8114 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
8115 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8116 ,p_count => x_msg_count
8117 ,p_data => x_msg_data);
8118 WHEN OTHERS THEN
8119 code_debug(l_api_name ||' EXCEPTION OTHERS '|| SQLERRM);
8120 IF FND_API.To_Boolean(p_commit) THEN
8121 ROLLBACK TO Insert_Value_Set_Table_Inf_PUB;
8122 END IF;
8123 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8124
8125 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8126 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8127 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8128 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8129 FND_MSG_PUB.Add;
8130 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8131 ,p_count => x_msg_count
8132 ,p_data => x_msg_data);
8133
8134 END Insert_Value_Set_table_Inf;
8135
8136 ----------------------------------------------------------------------
8137
8138 PROCEDURE Update_Value_Set_Table_Inf (
8139 p_api_version IN NUMBER
8140 ,p_value_set_id IN NUMBER
8141 ,p_table_application_id IN NUMBER
8142 ,p_table_name IN VARCHAR2
8143 ,p_value_column_name IN VARCHAR2
8144 ,p_value_column_type IN VARCHAR2
8145 ,p_value_column_size IN NUMBER
8146 ,p_meaning_column_name IN VARCHAR2
8147 ,p_meaning_column_type IN VARCHAR2
8148 ,p_meaning_column_size IN NUMBER
8149 ,p_id_column_name IN VARCHAR2
8150 ,p_id_column_type IN VARCHAR2
8151 ,p_id_column_size IN NUMBER
8152 ,p_where_order_by IN VARCHAR2
8153 ,p_additional_columns IN VARCHAR2
8154 ,p_owner IN NUMBER DEFAULT NULL
8155 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8156 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8157 ,x_return_status OUT NOCOPY VARCHAR2
8158 ,x_msg_count OUT NOCOPY NUMBER
8159 ,x_msg_data OUT NOCOPY VARCHAR2
8160 ) IS
8161
8162 l_api_name VARCHAR2(30);
8163 --we don't use l_api_version yet, but eventually we might:
8164 --if we change required parameters, version goes from n.x to (n+1).x
8165 --if we change optional parameters, version goes from x.n to x.(n+1)
8166 l_api_version NUMBER;
8167 l_Sysdate DATE;
8168 l_owner NUMBER;
8169 l_where_order_by VARCHAR(2000);
8170
8171 BEGIN
8172
8173 l_api_name := 'Update_Value_Set_Table_Inf';
8174 l_api_version := 1.0;
8175 l_Sysdate := SYSDATE;
8176
8177 code_debug(l_api_name ||' start ');
8178 -- Standard start of API savepoint
8179 IF FND_API.To_Boolean(p_commit) THEN
8180 SAVEPOINT Update_Value_Set_Table_Inf_PUB;
8181 END IF;
8182
8183 -- Initialize message list even though we don't currently use it
8184 IF FND_API.To_Boolean(p_init_msg_list) THEN
8185 FND_MSG_PUB.Initialize;
8186 END IF;
8187
8188 -- Check for call compatibility
8189 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
8190 l_api_name, G_PKG_NAME)
8191 THEN
8192 RAISE FND_API.G_EXC_ERROR;
8193 END IF;
8194
8195 IF (p_owner IS NULL OR p_owner = -1) THEN
8196 l_owner := g_current_user_id;
8197 ELSE
8198 l_owner := p_owner;
8199 END IF;
8200
8201 ---------------------- BEGIN Bug fix 6148833 -----------------------------
8202
8203 -- Since we can't modify IN function arguments, we have to make a copy
8204 -- of the clause.
8205 l_where_order_by := p_where_order_by;
8206
8207 -- Insert a space before an ORDER BY clause, so that
8208 -- order by elimination takes place for inner query blocks.
8209 Insert_Order_By_Space (
8210 p_where_order_by => l_where_order_by
8211 );
8212
8213 ---------------------- END Bug fix 6148833 -------------------------------
8214
8215 code_debug(l_api_name ||' calling update fnd_flex_validation_tables ');
8216 -- no API available from fnd logged bug 3957430
8217 UPDATE FND_FLEX_VALIDATION_TABLES
8218 SET APPLICATION_TABLE_NAME = p_table_name,
8219 VALUE_COLUMN_NAME = p_value_column_name,
8220 VALUE_COLUMN_TYPE = p_value_column_type,
8221 VALUE_COLUMN_SIZE = p_value_column_size,
8222 -- COMPILED_ATTRIBUTE_COLUMN_NAME = p_value_column_name,
8223 -- ENABLED_COLUMN_NAME = 'Y',
8224 -- HIERARCHY_LEVEL_COLUMN_NAME = 'Y',
8225 -- START_DATE_COLUMN_NAME = 'START_DATE_COLUMN_NAME',
8226 -- END_DATE_COLUMN_NAME = 'END_DATE_COLUMN_NAME',
8227 -- SUMMARY_ALLOWED_FLAG = 'N',
8228 -- SUMMARY_COLUMN_NAME = 'N',
8229 ID_COLUMN_NAME = p_id_column_name,
8230 ID_COLUMN_SIZE = p_id_column_size,
8231 ID_COLUMN_TYPE = p_id_column_type,
8232 MEANING_COLUMN_NAME = p_meaning_column_name,
8233 MEANING_COLUMN_SIZE = p_meaning_column_size,
8234 MEANING_COLUMN_TYPE = p_meaning_column_type,
8235 TABLE_APPLICATION_ID = p_table_application_id,
8236 ADDITIONAL_WHERE_CLAUSE = l_where_order_by,
8237 -- ADDITIONAL_QUICKPICK_COLUMNS = '',
8238 LAST_UPDATED_BY = l_owner,
8239 LAST_UPDATE_DATE = l_Sysdate,
8240 LAST_UPDATE_LOGIN = g_current_login_id
8241 WHERE FLEX_VALUE_SET_ID = p_value_set_id;
8242
8243 code_debug(l_api_name ||' calling update fnd_flex_validation_tables COMPLETED ');
8244 -- Standard check of p_commit
8245 IF FND_API.To_Boolean(p_commit) THEN
8246 COMMIT WORK;
8247 END IF;
8248
8249 x_return_status := FND_API.G_RET_STS_SUCCESS;
8250
8251 EXCEPTION
8252 WHEN FND_API.G_EXC_ERROR THEN
8253 code_debug(l_api_name ||' EXCEPTION desired ');
8254 IF FND_API.To_Boolean(p_commit) THEN
8255 ROLLBACK TO Update_Value_Set_Table_Inf_PUB;
8256 END IF;
8257 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
8258 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8259 ,p_count => x_msg_count
8260 ,p_data => x_msg_data);
8261 WHEN OTHERS THEN
8262 code_debug(l_api_name ||' EXCEPTION OTHERS '|| SQLERRM);
8263 IF FND_API.To_Boolean(p_commit) THEN
8264 ROLLBACK TO Update_Value_Set_Table_Inf_PUB;
8265 END IF;
8266 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8267
8268 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8269 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8270 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8271 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8272 FND_MSG_PUB.Add;
8273 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8274 ,p_count => x_msg_count
8275 ,p_data => x_msg_data);
8276
8277 END Update_Value_Set_table_Inf;
8278
8279 ----------------------------------------------------------------------
8280
8281 --------------------------
8282 -- Value Set Value APIs --
8283 --------------------------
8284
8285 ----------------------------------------------------------------------
8286 PROCEDURE Create_Value_Set_Val (
8287 p_api_version IN NUMBER
8288 ,p_value_set_name IN VARCHAR2
8289 ,p_internal_name IN VARCHAR2
8290 ,p_display_name IN VARCHAR2
8291 ,p_description IN VARCHAR2
8292 ,p_sequence IN NUMBER
8293 ,p_start_date IN DATE
8294 ,p_end_date IN DATE
8295 ,p_enabled IN VARCHAR2
8296 ,p_owner IN NUMBER DEFAULT NULL
8297 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8298 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8299 ,x_return_status OUT NOCOPY VARCHAR2
8300 ,x_msg_count OUT NOCOPY NUMBER
8301 ,x_msg_data OUT NOCOPY VARCHAR2
8302 ,x_is_versioned OUT NOCOPY VARCHAR2
8303 ,x_valueSetId OUT NOCOPY VARCHAR2
8304
8305 ) IS
8306
8307
8308
8309
8310 l_api_name VARCHAR2(30);
8311 --we don't use l_api_version yet, but eventually we might:
8312 --if we change required parameters, version goes from n.x to (n+1).x
8313 --if we change optional parameters, version goes from x.n to x.(n+1)
8314 l_api_version NUMBER;
8315 l_storage_value VARCHAR2(32767);
8316
8317 l_flex_value_id FND_FLEX_VALUES.flex_value_id%TYPE;
8318 -- l_Sysdate DATE;
8319 l_rowid VARCHAR2(100);
8320 l_owner NUMBER;
8321 x_flex_Value_Set_Id FND_FLEX_VALUE_SETS.flex_value_set_id%TYPE ;
8322 VersionedValueSet NUMBER ;
8323 L_VALUE_EXIST NUMBER;
8324
8325
8326 BEGIN
8327 SELECT FLEX_VALUE_SET_ID INTO
8328 X_FLEX_VALUE_SET_ID FROM FND_FLEX_VALUE_SETS WHERE FLEX_VALUE_SET_NAME = P_VALUE_SET_NAME ;
8329
8330 SELECT COUNT(*) INTO L_VALUE_EXIST FROM FND_FLEX_VALUES WHERE FLEX_VALUE_SET_ID = X_FLEX_VALUE_SET_ID
8331 AND FLEX_VALUE = P_INTERNAL_NAME ;
8332
8333 IF(L_VALUE_EXIST < 1 ) THEN
8334
8335 EGO_EXT_FWK_PUB.Create_Value_Set_Val(
8336 p_api_version => p_api_version
8337 ,p_value_set_name => p_value_set_name
8338 ,p_internal_name => p_internal_name
8339 ,p_display_name => p_display_name
8340 ,p_description => p_description
8341 ,p_sequence =>p_sequence
8342 ,p_start_date =>p_start_date
8343 ,p_end_date => p_end_date
8344 ,p_enabled => p_enabled
8345 ,p_owner =>p_owner
8346 ,p_init_msg_list =>p_init_msg_list
8347 ,p_commit => p_commit
8348 ,x_return_status =>x_return_status
8349 ,x_msg_count => x_msg_count
8350 ,x_msg_data => x_msg_data
8351 );
8352
8353
8354 COMMIT;
8355 END IF ;
8356
8357 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8358 RAISE FND_API.G_EXC_ERROR;
8359
8360
8361 END IF;
8362
8363 SELECT count (*) INTO VersionedValueSet FROM EGO_FLEX_VALUESET_VERSION_B WHERE
8364 FLEX_VALUE_SET_ID = x_flex_Value_Set_Id ;
8365
8366 x_valueSetId := x_flex_Value_Set_Id;
8367
8368 IF VersionedValueSet >= 1 THEN
8369
8370
8371
8372 SELECT FLEX_VALUE_ID INTO l_flex_value_id FROM FND_FLEX_VALUES
8373 WHERE FLEX_VALUE_SET_ID = x_flex_Value_Set_Id AND FLEX_VALUE like p_internal_name ;
8374
8375
8376 INSERT INTO EGO_FLEX_VALUE_VERSION_B (FLEX_VALUE_SET_ID, FLEX_VALUE_ID, VERSION_SEQ_ID,
8377 sequence,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_LOGIN)
8378 VALUES (x_flex_Value_Set_Id, l_flex_value_id,0,p_sequence,fnd_global.party_id,SYSDATE,
8379 fnd_global.party_id,SYSDATE,fnd_global.login_id);
8380
8381
8382 INSERT INTO EGO_FLEX_VALUE_VERSION_TL (FLEX_VALUE_ID,VERSION_SEQ_ID,LAST_UPDATE_DATE,LAST_UPDATED_BY,
8383 CREATION_DATE,CREATED_BY,LAST_UPDATE_LOGIN,DESCRIPTION,FLEX_VALUE_MEANING,LANGUAGE,
8384 SOURCE_LANG
8385 ) SELECT
8386 L_FLEX_VALUE_ID,0,SYSDATE,FND_GLOBAL.PARTY_ID,SYSDATE,FND_GLOBAL.PARTY_ID,FND_GLOBAL.LOGIN_ID,
8387 P_DESCRIPTION,P_DISPLAY_NAME,L.LANGUAGE_CODE,USERENV('LANG')
8388 FROM FND_LANGUAGES L
8389 WHERE L.INSTALLED_FLAG IN ('I', 'B' ) ;
8390
8391 x_is_versioned :='true';
8392 x_return_status := FND_API.G_RET_STS_SUCCESS;
8393
8394 COMMIT;
8395 END IF ;
8396 END Create_Value_Set_Val;
8397
8398 PROCEDURE Create_Value_Set_Val (
8399 p_api_version IN NUMBER
8400 ,p_value_set_name IN VARCHAR2
8401 ,p_internal_name IN VARCHAR2
8402 ,p_display_name IN VARCHAR2
8403 ,p_description IN VARCHAR2
8404 ,p_sequence IN NUMBER
8405 ,p_start_date IN DATE
8406 ,p_end_date IN DATE
8407 ,p_enabled IN VARCHAR2
8408 ,p_owner IN NUMBER DEFAULT NULL
8409 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8410 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8411 ,x_return_status OUT NOCOPY VARCHAR2
8412 ,x_msg_count OUT NOCOPY NUMBER
8413 ,x_msg_data OUT NOCOPY VARCHAR2
8414
8415 ) IS
8416
8417
8418 l_api_name VARCHAR2(30);
8419 --we don't use l_api_version yet, but eventually we might:
8420 --if we change required parameters, version goes from n.x to (n+1).x
8421 --if we change optional parameters, version goes from x.n to x.(n+1)
8422 l_api_version NUMBER;
8423 l_storage_value VARCHAR2(32767);
8424
8425 l_flex_value_id FND_FLEX_VALUES.flex_value_id%TYPE;
8426 -- l_Sysdate DATE;
8427 l_rowid VARCHAR2(100);
8428 l_owner NUMBER;
8429 flex_Value_Set_Id FND_FLEX_VALUE_SETS.flex_value_set_id%TYPE ;
8430 VersionedValueSet NUMBER ;
8431
8432
8433 BEGIN
8434
8435
8436 l_api_name := 'Create_Value_Set_Val';
8437 l_api_version := 1.0;
8438
8439 -- Standard start of API savepoint
8440 IF FND_API.To_Boolean(p_commit) THEN
8441 SAVEPOINT Create_Value_Set_Val_PUB;
8442 END IF;
8443
8444 -- Initialize message list even though we don't currently use it
8445 IF FND_API.To_Boolean(p_init_msg_list) THEN
8446 FND_MSG_PUB.Initialize;
8447 END IF;
8448
8449 -- Check for call compatibility
8450 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
8451 l_api_name, G_PKG_NAME)
8452 THEN
8453 RAISE FND_API.G_EXC_ERROR;
8454 END IF;
8455
8456 IF (p_owner IS NULL OR p_owner = -1) THEN
8457 l_owner := g_current_user_id;
8458 ELSE
8459 l_owner := p_owner;
8460 END IF;
8461
8462 /***
8463 INSERT INTO fnd_lookup_values
8464 (
8465 LOOKUP_TYPE
8466 ,LANGUAGE
8467 ,LOOKUP_CODE
8468 ,MEANING
8469 ,DESCRIPTION
8470 ,ENABLED_FLAG
8471 ,START_DATE_ACTIVE
8472 ,END_DATE_ACTIVE
8473 ,SOURCE_LANG
8474 ,SECURITY_GROUP_ID
8475 ,VIEW_APPLICATION_ID
8476 ,TERRITORY_CODE
8477 ,ATTRIBUTE_CATEGORY
8478 ,ATTRIBUTE1
8479 ,ATTRIBUTE2
8480 ,ATTRIBUTE3
8481 ,ATTRIBUTE4
8482 ,ATTRIBUTE5
8483 ,ATTRIBUTE6
8484 ,ATTRIBUTE7
8485 ,ATTRIBUTE8
8486 ,ATTRIBUTE9
8487 ,ATTRIBUTE10
8488 ,ATTRIBUTE11
8489 ,ATTRIBUTE12
8490 ,ATTRIBUTE13
8491 ,ATTRIBUTE14
8492 ,ATTRIBUTE15
8493 ,TAG
8494 ,CREATED_BY
8495 ,CREATION_DATE
8496 ,LAST_UPDATED_BY
8497 ,LAST_UPDATE_DATE
8498 ,LAST_UPDATE_LOGIN
8499 )
8500 SELECT
8501 'EGO_EF_'||p_value_set_name||'_TYPE' --LOOKUP_TYPE
8502 ,L.LANGUAGE_CODE --LANGUAGE
8503 ,p_internal_name --LOOKUP_CODE
8504 ,p_display_name --MEANING
8505 ,p_description --DESCRIPTION
8506 ,p_enabled --ENABLED_FLAG
8507 ,p_start_date --START_DATE_ACTIVE
8508 ,p_end_date --END_DATE_ACTIVE
8509 ,USERENV('LANG') --SOURCE_LANG
8510 ,0 --SECURITY_GROUP_ID
8511 ,p_application_id --VIEW_APPLICATION_ID
8512 ,'' --TERRITORY_CODE
8513 ,'' --ATTRIBUTE_CATEGORY
8514 ,'' --ATTRIBUTE1
8515 ,'' --ATTRIBUTE2
8516 ,'' --ATTRIBUTE3
8517 ,'' --ATTRIBUTE4
8518 ,'' --ATTRIBUTE5
8519 ,'' --ATTRIBUTE6
8520 ,'' --ATTRIBUTE7
8521 ,'' --ATTRIBUTE8
8522 ,'' --ATTRIBUTE9
8523 ,'' --ATTRIBUTE10
8524 ,'' --ATTRIBUTE11
8525 ,'' --ATTRIBUTE12
8526 ,'' --ATTRIBUTE13
8527 ,'' --ATTRIBUTE14
8528 ,'' --ATTRIBUTE15
8529 ,to_char(p_sequence) --TAG
8530 ,g_current_user_id --CREATED_BY
8531 ,l_Sysdate --CREATION_DATE
8532 ,g_current_user_id --LAST_UPDATED_BY
8533 ,l_Sysdate --LAST_UPDATE_DATE
8534 ,g_current_login_id --LAST_UPDATE_LOGIN
8535 FROM FND_LANGUAGES L
8536 WHERE L.INSTALLED_FLAG in ('I', 'B');
8537 ***/
8538
8539
8540 Process_Value_Set_Val (
8541 p_transaction_type => 'CREATE'
8542 ,p_value_set_name => p_value_set_name
8543 ,p_internal_name => p_internal_name
8544 ,p_display_name => p_display_name
8545 ,p_description => p_description
8546 ,p_sequence => p_sequence
8547 ,p_start_date => p_start_date
8548 ,p_end_date => p_end_date
8549 ,p_enabled => p_enabled
8550 ,p_owner => l_owner
8551 ,x_return_status => x_return_status
8552 );
8553
8554
8555 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8556 RAISE FND_API.G_EXC_ERROR;
8557
8558 END IF;
8559
8560
8561 IF FND_API.To_Boolean(p_commit) THEN
8562 COMMIT WORK;
8563 END IF;
8564
8565 x_return_status := FND_API.G_RET_STS_SUCCESS;
8566
8567 EXCEPTION
8568 WHEN FND_API.G_EXC_ERROR THEN
8569 code_debug( l_api_name || ' EXCEPTION - FND_API.G_EXC_ERROR ');
8570 IF FND_API.To_Boolean(p_commit) THEN
8571 ROLLBACK TO Create_Value_Set_Val_PUB;
8572 END IF;
8573 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
8574 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8575 ,p_count => x_msg_count
8576 ,p_data => x_msg_data);
8577 WHEN OTHERS THEN
8578 code_debug( l_api_name || ' EXCEPTION - OTHERS ');
8579 code_debug (l_api_name|| sqlerrm );
8580 IF FND_API.To_Boolean(p_commit) THEN
8581 ROLLBACK TO Create_Value_Set_Val_PUB;
8582 END IF;
8583 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8584
8585 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8586 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8587 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8588 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8589 FND_MSG_PUB.Add;
8590 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8591 ,p_count => x_msg_count
8592 ,p_data => x_msg_data);
8593
8594 END Create_Value_Set_Val;
8595
8596 ----------------------------------------------------------------------
8597
8598 PROCEDURE Update_Value_Set_Val (
8599 p_api_version IN NUMBER
8600 ,p_value_set_name IN VARCHAR2
8601 ,p_internal_name IN VARCHAR2
8602 ,p_display_name IN VARCHAR2
8603 ,p_description IN VARCHAR2
8604 ,p_sequence IN NUMBER
8605 ,p_start_date IN DATE
8606 ,p_end_date IN DATE
8607 ,p_enabled IN VARCHAR2
8608 ,p_owner IN NUMBER DEFAULT NULL
8609 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8610 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8611 ,x_return_status OUT NOCOPY VARCHAR2
8612 ,x_msg_count OUT NOCOPY NUMBER
8613 ,x_msg_data OUT NOCOPY VARCHAR2
8614 ,x_is_versioned OUT NOCOPY VARCHAR2
8615 ,x_valueSetId OUT NOCOPY VARCHAR2
8616
8617
8618 ) IS
8619
8620 l_api_name VARCHAR2(30);
8621 --we don't use l_api_version yet, but eventually we might:
8622 --if we change required parameters, version goes from n.x to (n+1).x
8623 --if we change optional parameters, version goes from x.n to x.(n+1)
8624 l_api_version NUMBER;
8625 l_owner NUMBER;
8626 l_value_set_id FND_FLEX_VALUE_SETS.flex_value_set_id%TYPE ;
8627 l_values_count NUMBER;
8628 l_flex_value_id fnd_flex_values.flex_value_id%type;
8629 BEGIN
8630
8631 l_api_name := 'Update_Value_Set_Val';
8632 l_api_version := 1.0;
8633
8634 -- Standard start of API savepoint
8635 IF FND_API.To_Boolean(p_commit) THEN
8636 SAVEPOINT Update_Value_Set_Val_PUB;
8637 END IF;
8638
8639 -- Initialize message list even though we don't currently use it
8640 IF FND_API.To_Boolean(p_init_msg_list) THEN
8641 FND_MSG_PUB.Initialize;
8642 END IF;
8643
8644 -- Check for call compatibility
8645 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
8646 l_api_name, G_PKG_NAME)
8647 THEN
8648 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8649 END IF;
8650
8651 IF (p_owner IS NULL OR p_owner = -1) THEN
8652 l_owner := g_current_user_id;
8653 ELSE
8654 l_owner := p_owner;
8655 END IF;
8656 /***
8657 l_lookup_type := 'EGO_EF_'||p_value_set_name||'_TYPE';
8658
8659 UPDATE FND_LOOKUP_VALUES
8660 SET MEANING = p_display_name,
8661 DESCRIPTION = p_description,
8662 ENABLED_FLAG = p_enabled,
8663 START_DATE_ACTIVE = p_start_date,
8664 END_DATE_ACTIVE = p_end_date,
8665 TAG = TO_CHAR(p_sequence),
8666 LAST_UPDATED_BY = g_current_user_id,
8667 LAST_UPDATE_DATE = l_Sysdate,
8668 LAST_UPDATE_LOGIN = g_current_login_id,
8669 SOURCE_LANG = USERENV('LANG')
8670 WHERE LOOKUP_TYPE = l_lookup_type
8671 AND LOOKUP_CODE = p_internal_name
8672 AND VIEW_APPLICATION_ID = p_application_id
8673 --AND LANGUAGE = USERENV('LANG');
8674 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
8675 ***/
8676 SELECT flex_value_set_id INTO l_value_set_id FROM fnd_flex_value_sets
8677 WHERE flex_value_set_name = p_value_set_name;
8678
8679 SELECT flex_value_id INTO l_flex_value_id FROM fnd_flex_values
8680 WHERE flex_value_set_id = l_value_set_id AND flex_value = p_internal_name;
8681
8682
8683 Process_Value_Set_Val (
8684 p_transaction_type => 'UPDATE'
8685 ,p_value_set_name => p_value_set_name
8686 ,p_internal_name => p_internal_name
8687 ,p_display_name => p_display_name
8688 ,p_description => p_description
8689 ,p_sequence => p_sequence
8690 ,p_start_date => p_start_date
8691 ,p_end_date => p_end_date
8692 ,p_enabled => p_enabled
8693 ,p_owner => l_owner
8694 ,x_return_status => x_return_status
8695 );
8696 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8697 RAISE FND_API.G_EXC_ERROR;
8698
8699
8700 /*P4T changes begin. */
8701
8702 ELSE
8703
8704 SELECT COUNT(*) INTO L_VALUES_COUNT FROM EGO_FLEX_VALUESET_VERSION_B WHERE FLEX_VALUE_SET_ID = L_VALUE_SET_ID;
8705 IF(l_values_count > 0 ) THEN
8706 UPDATE ego_flex_value_version_b SET SEQUENCE = p_sequence
8707 WHERE version_seq_id = 0 AND flex_value_set_id = l_value_set_id AND flex_value_id = l_flex_value_id ;
8708
8709 UPDATE EGO_FLEX_VALUE_VERSION_TL SET DESCRIPTION = P_DESCRIPTION,
8710 FLEX_VALUE_MEANING = P_DISPLAY_NAME , SOURCE_LANG = USERENV('LANG'),LAST_UPDATE_DATE =SYSDATE,
8711 LAST_UPDATED_BY = FND_GLOBAL.PARTY_ID,LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
8712 WHERE FLEX_VALUE_ID = L_FLEX_VALUE_ID AND VERSION_SEQ_ID = 0 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
8713
8714 x_is_versioned :='true';
8715 x_valueSetId := l_value_set_id;
8716 -- Bug 9803134
8717
8718 END IF ;
8719 -- Bug 9803134
8720 x_valueSetId := l_value_set_id;
8721
8722 END IF ;
8723 -- Standard check of p_commit
8724 IF FND_API.To_Boolean(p_commit) THEN
8725 COMMIT WORK;
8726 END IF;
8727
8728 x_return_status := FND_API.G_RET_STS_SUCCESS;
8729
8730 EXCEPTION
8731 WHEN FND_API.G_EXC_ERROR THEN
8732 code_debug( l_api_name || ' EXCEPTION - FND_API.G_EXC_ERROR ');
8733 IF FND_API.To_Boolean(p_commit) THEN
8734 ROLLBACK TO Update_Value_Set_Val_PUB;
8735 END IF;
8736 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
8737 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8738 ,p_count => x_msg_count
8739 ,p_data => x_msg_data);
8740 WHEN OTHERS THEN
8741 code_debug( l_api_name || ' EXCEPTION - OTHERS ');
8742 code_debug (l_api_name|| sqlerrm );
8743 IF FND_API.To_Boolean(p_commit) THEN
8744 ROLLBACK TO Update_Value_Set_Val_PUB;
8745 END IF;
8746 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8747
8748 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8749 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8750 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8751 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8752 FND_MSG_PUB.Add;
8753 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8754 ,p_count => x_msg_count
8755 ,p_data => x_msg_data);
8756
8757 END Update_Value_Set_Val;
8758
8759
8760 PROCEDURE Translate_Value_Set_Val
8761 (p_api_version IN NUMBER
8762 ,p_value_set_name IN VARCHAR2
8763 ,p_internal_name IN VARCHAR2
8764 ,p_display_name IN VARCHAR2
8765 ,p_description IN VARCHAR2
8766 ,p_last_update_date IN VARCHAR2
8767 ,p_last_updated_by IN NUMBER
8768 ,p_init_msg_list IN VARCHAR2
8769 ,p_commit IN VARCHAR2
8770 ,x_return_status OUT NOCOPY VARCHAR2
8771 ,x_msg_count OUT NOCOPY NUMBER
8772 ,x_msg_data OUT NOCOPY VARCHAR2
8773 ) IS
8774 l_flex_value_id fnd_flex_values.flex_value_id%TYPE;
8775 l_value_set_id fnd_flex_values.flex_value_set_id%TYPE;
8776 l_validation_type fnd_flex_value_sets.validation_type%TYPE;
8777
8778 l_vsv_row fnd_flex_values%ROWTYPE;
8779 l_vsvtl_row fnd_flex_values_tl%ROWTYPE;
8780
8781 CURSOR c_get_vs_details (cp_value_set_id IN NUMBER) IS
8782 SELECT vsvtl.last_updated_by, vsvtl.last_update_date
8783 FROM FND_FLEX_VALUES vsv, FND_FLEX_VALUES_TL vsvtl
8784 WHERE vsv.flex_value_set_id = cp_value_set_id
8785 AND vsv.flex_value = p_internal_name
8786 AND vsv.flex_value_id = vsvtl.flex_value_id
8787 AND USERENV('LANG') IN (language, source_lang);
8788
8789
8790 l_last_update_login fnd_flex_values.last_update_login%TYPE;
8791 l_last_update_date fnd_flex_values.last_update_date%TYPE;
8792 l_last_updated_by fnd_flex_values.last_updated_by%TYPE;
8793
8794 BEGIN
8795 SELECT vs.flex_value_set_id, vs.validation_type
8796 INTO l_value_set_id, l_validation_type
8797 FROM FND_FLEX_VALUE_SETS vs
8798 WHERE vs.flex_value_set_name = p_value_set_name;
8799
8800 IF l_validation_type = G_TRANS_IND_VALIDATION_CODE THEN
8801
8802 OPEN c_get_vs_details (cp_value_set_id => l_value_set_id);
8803 FETCH c_get_vs_details INTO l_last_updated_by, l_last_update_date;
8804 CLOSE c_get_vs_details;
8805
8806 l_last_update_login := FND_GLOBAL.Login_Id;
8807
8808 IF (fnd_load_util.upload_test(p_last_updated_by
8809 ,p_last_update_date
8810 ,l_last_updated_by
8811 ,l_last_update_date
8812 ,NULL)) THEN
8813 SELECT vsv.*
8814 INTO l_vsv_row
8815 FROM FND_FLEX_VALUES vsv
8816 WHERE vsv.flex_value_set_id = l_value_set_id
8817 AND vsv.flex_value = p_internal_name;
8818
8819 FND_FLEX_VALUES_PKG.UPDATE_ROW
8820 (x_flex_value_id => l_vsv_row.flex_value_id
8821 ,x_attribute_sort_order => l_vsv_row.attribute_sort_order
8822 ,x_flex_value_set_id => l_value_set_id
8823 ,x_flex_value => p_internal_name
8824 ,x_enabled_flag => l_vsv_row.enabled_flag
8825 ,x_summary_flag => l_vsv_row.summary_flag
8826 ,x_start_date_active => l_vsv_row.start_date_active
8827 ,x_end_date_active => l_vsv_row.end_date_active
8828 ,x_parent_flex_value_low => l_vsv_row.parent_flex_value_low
8829 ,x_parent_flex_value_high => l_vsv_row.parent_flex_value_high
8830 ,x_structured_hierarchy_level => l_vsv_row.structured_hierarchy_level
8831 ,x_hierarchy_level => l_vsv_row.hierarchy_level
8832 ,x_compiled_value_attributes => l_vsv_row.compiled_value_attributes
8833 ,x_value_category => l_vsv_row.value_category
8834 ,x_attribute1 => l_vsv_row.attribute1
8835 ,x_attribute2 => l_vsv_row.attribute2
8836 ,x_attribute3 => l_vsv_row.attribute3
8837 ,x_attribute4 => l_vsv_row.attribute4
8838 ,x_attribute5 => l_vsv_row.attribute5
8839 ,x_attribute6 => l_vsv_row.attribute6
8840 ,x_attribute7 => l_vsv_row.attribute7
8841 ,x_attribute8 => l_vsv_row.attribute8
8842 ,x_attribute9 => l_vsv_row.attribute9
8843 ,x_attribute10 => l_vsv_row.attribute10
8844 ,x_attribute11 => l_vsv_row.attribute11
8845 ,x_attribute12 => l_vsv_row.attribute12
8846 ,x_attribute13 => l_vsv_row.attribute13
8847 ,x_attribute14 => l_vsv_row.attribute14
8848 ,x_attribute15 => l_vsv_row.attribute15
8849 ,x_attribute16 => l_vsv_row.attribute16
8850 ,x_attribute17 => l_vsv_row.attribute17
8851 ,x_attribute18 => l_vsv_row.attribute18
8852 ,x_attribute19 => l_vsv_row.attribute19
8853 ,x_attribute20 => l_vsv_row.attribute20
8854 ,x_attribute21 => l_vsv_row.attribute21
8855 ,x_attribute22 => l_vsv_row.attribute22
8856 ,x_attribute23 => l_vsv_row.attribute23
8857 ,x_attribute24 => l_vsv_row.attribute24
8858 ,x_attribute25 => l_vsv_row.attribute25
8859 ,x_attribute26 => l_vsv_row.attribute26
8860 ,x_attribute27 => l_vsv_row.attribute27
8861 ,x_attribute28 => l_vsv_row.attribute28
8862 ,x_attribute29 => l_vsv_row.attribute29
8863 ,x_attribute30 => l_vsv_row.attribute30
8864 ,x_attribute31 => l_vsv_row.attribute31
8865 ,x_attribute32 => l_vsv_row.attribute32
8866 ,x_attribute33 => l_vsv_row.attribute33
8867 ,x_attribute34 => l_vsv_row.attribute34
8868 ,x_attribute35 => l_vsv_row.attribute35
8869 ,x_attribute36 => l_vsv_row.attribute36
8870 ,x_attribute37 => l_vsv_row.attribute37
8871 ,x_attribute38 => l_vsv_row.attribute38
8872 ,x_attribute39 => l_vsv_row.attribute39
8873 ,x_attribute40 => l_vsv_row.attribute40
8874 ,x_attribute41 => l_vsv_row.attribute41
8875 ,x_attribute42 => l_vsv_row.attribute42
8876 ,x_attribute43 => l_vsv_row.attribute43
8877 ,x_attribute44 => l_vsv_row.attribute44
8878 ,x_attribute45 => l_vsv_row.attribute45
8879 ,x_attribute46 => l_vsv_row.attribute46
8880 ,x_attribute47 => l_vsv_row.attribute47
8881 ,x_attribute48 => l_vsv_row.attribute48
8882 ,x_attribute49 => l_vsv_row.attribute49
8883 ,x_attribute50 => l_vsv_row.attribute50
8884 ,x_flex_value_meaning => p_display_name
8885 ,x_description => p_description
8886 ,x_last_update_date => SYSDATE
8887 ,x_last_updated_by => p_last_updated_by
8888 ,x_last_update_login => l_last_update_login);
8889 END IF;
8890 END IF;
8891 x_return_status := 'S';
8892 EXCEPTION
8893 WHEN OTHERS THEN
8894 x_return_status := 'E';
8895 x_msg_data := SQLERRM;
8896 END Translate_Value_Set_Val;
8897
8898 ----------------------------------------------------------------------
8899
8900 FUNCTION has_flex_binding (cp_value_set_id IN NUMBER)
8901 RETURN VARCHAR2 IS
8902 -- T if Value Set Table has flex binding in where clause
8903 -- F if flex binding is not present.
8904 l_return_status VARCHAR2(1);
8905 l_dummy_number NUMBER;
8906 BEGIN
8907 l_return_status := FND_API.G_FALSE;
8908 l_dummy_number := INSTR(get_vs_table_where_clause(cp_value_set_id),':$FLEX$.');
8909 IF NVL(l_dummy_number,0) <> 0 THEN
8910 l_return_status := FND_API.G_TRUE;
8911 END IF;
8912 RETURN l_return_status;
8913 EXCEPTION
8914 WHEN OTHERS THEN
8915 RETURN l_return_status;
8916 END has_flex_binding;
8917
8918 ---------------------------------------------------------------------
8919 -- Requirement: bug: 3542670
8920 --
8921 -- Function: To check whether the value set is editable
8922 -- Returns T if valueset is editable
8923 -- Returns F if valueset is not editable
8924 -- Parameters:
8925 -- IN
8926 -- p_value_set_id : value set id
8927 -- OUT
8928 -- NONE
8929 --
8930 ---------------------------------------------------------------------
8931 FUNCTION is_vs_editable (cp_value_set_id IN NUMBER)
8932 RETURN VARCHAR2 IS
8933 -- T is VS is editable
8934 -- F if VS is not editable.
8935 l_return_status VARCHAR2(1);
8936 l_vs_row fnd_flex_value_sets%ROWTYPE;
8937 BEGIN
8938 l_return_status := FND_API.G_TRUE;
8939 SELECT *
8940 INTO l_vs_row
8941 FROM fnd_flex_value_sets
8942 WHERE flex_value_set_id = cp_value_set_id;
8943
8944 IF l_vs_row.created_by IN (1,2)
8945 OR
8946 l_vs_row.security_enabled_flag <> 'N'
8947 OR
8948 (l_vs_row.format_type = 'C'
8949 AND
8950 ( l_vs_row.alphanumeric_allowed_flag = 'N'
8951 OR
8952 l_vs_row.uppercase_only_flag = 'Y'
8953 OR
8954 l_vs_row.numeric_mode_enabled_flag = 'Y'
8955 )
8956 )
8957 THEN
8958 l_return_status := FND_API.G_FALSE;
8959 END IF;
8960 RETURN l_return_status;
8961 EXCEPTION
8962 WHEN OTHERS THEN
8963 RETURN FND_API.G_FALSE;
8964 END is_vs_editable;
8965
8966 ---------------------------------------------------------------------
8967 -- Requirement: bug: 3542670
8968 --
8969 -- Function: To check whether the value set value is editable
8970 -- Returns T if valueset value is editable
8971 -- Returns F if valueset value is not editable
8972 -- Parameters:
8973 -- IN
8974 -- p_value_set_id : value set id
8975 -- OUT
8976 -- NONE
8977 --
8978 ---------------------------------------------------------------------
8979 FUNCTION is_vs_value_editable (cp_vs_value_id IN NUMBER)
8980 RETURN VARCHAR2 IS
8981 -- T is VS Value is editable
8982 -- F if VS Value is not editable.
8983 l_return_status VARCHAR2(1);
8984
8985 l_vsv_created_by fnd_flex_values.created_by%TYPE;
8986 l_vs_created_by fnd_flex_values.created_by%TYPE;
8987 l_vs_format_type fnd_flex_value_sets.format_type%TYPE;
8988 l_vs_validation_type fnd_flex_value_sets.validation_type%TYPE;
8989 l_vs_alpha_numeric_allowed fnd_flex_value_sets.alphanumeric_allowed_flag%TYPE;
8990 l_vs_uppercase_only fnd_flex_value_sets.uppercase_only_flag%TYPE;
8991 l_vs_numeric_mode_enabled fnd_flex_value_sets.numeric_mode_enabled_flag%TYPE;
8992 l_vs_security_enabled fnd_flex_value_sets.security_enabled_flag%TYPE;
8993
8994 BEGIN
8995
8996 l_return_status := FND_API.G_TRUE;
8997 SELECT a.created_by, b.format_type, b.validation_type,
8998 b.alphanumeric_allowed_flag, b.uppercase_only_flag,
8999 b.numeric_mode_enabled_flag, b.security_enabled_flag, b.created_by
9000 INTO l_vsv_created_by, l_vs_format_type, l_vs_validation_type,
9001 l_vs_alpha_numeric_allowed, l_vs_uppercase_only,
9002 l_vs_numeric_mode_enabled, l_vs_security_enabled, l_vs_created_by
9003 FROM fnd_flex_values a, fnd_flex_value_sets b
9004 WHERE a.flex_value_id = cp_vs_value_id
9005 AND a.flex_value_set_id = b.flex_value_set_id;
9006
9007 IF l_vsv_created_by IN (1,2)
9008 OR
9009 l_vs_created_by IN (1,2)
9010 OR
9011 l_vs_security_enabled <> 'N'
9012 OR
9013 (l_vs_format_type = 'C'
9014 AND
9015 ( l_vs_alpha_numeric_allowed = 'N'
9016 OR
9017 l_vs_uppercase_only = 'Y'
9018 OR
9019 l_vs_numeric_mode_enabled = 'Y'
9020 )
9021 )
9022 THEN
9023 l_return_status := FND_API.G_FALSE;
9024 END IF;
9025 RETURN l_return_status;
9026 EXCEPTION
9027 WHEN OTHERS THEN
9028 RETURN FND_API.G_FALSE;
9029 END is_vs_value_editable;
9030
9031 ---------------------------------------------------------------------
9032 -- Requirement: bug: 3542670
9033 --
9034 -- Function: To process the value set display sequence
9035 -- If the display_sequence is same as value_set_value_id,
9036 -- then record is not stored in EGO_VS_VALUES_DISP_ORDER
9037 -- else a record is stored in EGO_VS_VALUES_DISP_ORDER
9038 -- Parameters:
9039 -- IN
9040 -- p_transaction_type : CREATE,UPDATE
9041 -- p_value_set_id : value_set_id takes precedence over value_set_name
9042 -- if both the parameters are passed
9043 -- p_value_set_name : value set name
9044 -- p_value_set_value_id : value set value id takes precedence over
9045 -- value set value if both the parameters are passed
9046 -- p_value_set_value : value set value
9047 -- p_sequence : sequence to be stored
9048 -- p_init_msg_list :
9049 -- p_commit :
9050 -- OUT
9051 -- x_return_status OUT NOCOPY VARCHAR2
9052 -- x_msg_count OUT NOCOPY NUMBER
9053 -- x_msg_data OUT NOCOPY VARCHAR2
9054 --
9055 ---------------------------------------------------------------------
9056 PROCEDURE process_vs_value_sequence
9057 (p_api_version IN NUMBER
9058 ,p_transaction_type IN VARCHAR2
9059 ,p_value_set_id IN NUMBER DEFAULT NULL
9060 ,p_value_set_name IN VARCHAR2 DEFAULT NULL
9061 ,p_value_set_value_id IN NUMBER DEFAULT NULL
9062 ,p_value_set_value IN VARCHAR2 DEFAULT NULL
9063 ,p_sequence IN NUMBER
9064 ,p_owner IN NUMBER DEFAULT NULL
9065 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9066 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9067 ,x_return_status OUT NOCOPY VARCHAR2
9068 ,x_msg_count OUT NOCOPY NUMBER
9069 ,x_msg_data OUT NOCOPY VARCHAR2
9070 ) IS
9071
9072 l_api_name VARCHAR2(30);
9073 l_api_version NUMBER;
9074 l_value_set_value_id fnd_flex_values.flex_value_id%TYPE;
9075 l_value_set_id fnd_flex_value_sets.flex_value_set_id%TYPE;
9076 l_sequence EGO_VS_VALUES_DISP_ORDER.disp_sequence%TYPE;
9077 l_invalid_params BOOLEAN;
9078 l_create_sequence BOOLEAN;
9079 l_update_sequence BOOLEAN;
9080 l_Sysdate DATE;
9081 l_owner NUMBER;
9082
9083 CURSOR c_get_disp_sequence (cp_flex_value_id IN NUMBER,cp_flex_id IN NUMBER) is
9084 SELECT disp_sequence
9085 FROM ego_vs_values_disp_order
9086 WHERE value_set_value_id = cp_flex_value_id
9087 AND value_set_id = cp_flex_id;
9088
9089 BEGIN
9090 l_api_name := 'process_vs_value_sequence';
9091 l_api_version := 1.0;
9092
9093 IF FND_API.To_Boolean( p_commit ) THEN
9094 SAVEPOINT PROCESS_VS_VALUE_SEQUENCE_SP;
9095 END IF;
9096
9097 --
9098 -- Initialize message list
9099 --
9100 IF FND_API.To_Boolean(p_init_msg_list) THEN
9101 FND_MSG_PUB.Initialize;
9102 END IF;
9103
9104 code_debug(l_api_name||' msg pub initialized ' );
9105 --
9106 --Standard checks
9107 --
9108 IF NOT FND_API.Compatible_API_Call (l_api_version
9109 ,p_api_version
9110 ,l_api_name
9111 ,g_pkg_name) THEN
9112 code_debug (l_api_name ||' invalid api version ');
9113 RAISE FND_API.G_EXC_ERROR;
9114 END IF;
9115
9116 IF (p_owner IS NULL OR p_owner = -1) THEN
9117 l_owner := g_current_user_id;
9118 ELSE
9119 l_owner := p_owner;
9120 END IF;
9121
9122 l_invalid_params := FALSE;
9123 IF ( p_sequence IS NULL
9124 OR
9125 ( p_value_set_value_id IS NULL
9126 AND
9127 (p_value_set_value IS NULL OR (p_value_set_name IS NULL AND p_value_set_id IS NULL))
9128 )
9129 ) THEN
9130 l_invalid_params := TRUE;
9131 ELSE
9132 IF p_value_set_value_id IS NOT NULL THEN
9133 BEGIN
9134 SELECT flex_value_id, flex_value_set_id
9135 INTO l_value_set_value_id, l_value_set_id
9136 FROM fnd_flex_values
9137 WHERE flex_value_id = p_value_set_value_id;
9138 EXCEPTION
9139 WHEN OTHERS THEN
9140 l_invalid_params := TRUE;
9141 END;
9142 ELSE
9143 BEGIN
9144 SELECT a.flex_value_id, a.flex_value_set_id
9145 INTO l_value_set_value_id, l_value_set_id
9146 FROM fnd_flex_values a, fnd_flex_value_sets b
9147 WHERE a.flex_value_set_id = b.flex_value_set_id
9148 AND a.flex_value = p_value_set_value
9149 AND (b.flex_value_set_id = p_value_set_id OR b.flex_value_set_name = p_value_set_name);
9150 EXCEPTION
9151 WHEN OTHERS THEN
9152 l_invalid_params := TRUE;
9153 END;
9154 END IF;
9155 END IF;
9156
9157 IF l_invalid_params THEN
9158 fnd_message.Set_Name(G_APP_NAME, 'EGO_API_INVALID_PARAMS');
9159 fnd_message.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
9160 fnd_message.Set_Token(G_API_NAME_TOKEN, l_api_name);
9161 FND_MSG_PUB.Add;
9162 RAISE FND_API.G_EXC_ERROR;
9163 END IF;
9164
9165
9166 l_create_sequence := FALSE;
9167 l_update_sequence := FALSE;
9168
9169 --
9170 -- Fix for bug#12660306
9171 --
9172 OPEN c_get_disp_sequence (cp_flex_value_id => l_value_set_value_id,
9173 cp_flex_id => l_value_set_id);
9174
9175 FETCH c_get_disp_sequence INTO l_sequence;
9176 IF c_get_disp_sequence%NOTFOUND THEN
9177 IF p_sequence <> l_value_set_value_id THEN
9178 l_create_sequence := TRUE;
9179 END IF;
9180 ELSE
9181 IF l_sequence <> p_sequence THEN
9182 l_update_sequence := TRUE;
9183 END IF;
9184 END IF;
9185
9186 l_Sysdate := SYSDATE;
9187 IF l_create_sequence THEN
9188 INSERT INTO EGO_VS_VALUES_DISP_ORDER
9189 (value_set_value_id
9190 ,value_set_id
9191 ,disp_sequence
9192 ,created_by
9193 ,creation_date
9194 ,last_updated_by
9195 ,last_update_date
9196 ,last_update_login)
9197 VALUES
9198 (l_value_set_value_id
9199 ,l_value_set_id
9200 ,p_sequence
9201 ,l_owner
9202 ,l_Sysdate
9203 ,l_owner
9204 ,l_Sysdate
9205 ,G_CURRENT_LOGIN_ID);
9206 END IF;
9207
9208 IF l_update_sequence THEN
9209 --
9210 -- Fix for bug#12660306
9211 --
9212 UPDATE EGO_VS_VALUES_DISP_ORDER
9213 SET disp_sequence = p_sequence
9214 ,last_updated_by = l_owner
9215 ,last_update_date = l_sysdate
9216 ,last_update_login = G_CURRENT_LOGIN_ID
9217 WHERE value_set_value_id = l_value_set_value_id
9218 AND value_set_id = l_value_set_id;
9219 END IF;
9220
9221 IF FND_API.To_Boolean( p_commit ) THEN
9222 COMMIT WORK;
9223 END IF;
9224 x_return_status := FND_API.G_RET_STS_SUCCESS;
9225
9226 EXCEPTION
9227 WHEN FND_API.G_EXC_ERROR THEN
9228 IF FND_API.To_Boolean( p_commit ) THEN
9229 ROLLBACK TO PROCESS_VS_VALUE_SEQUENCE_SP;
9230 END IF;
9231 x_return_status := FND_API.G_RET_STS_ERROR;
9232 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9233 ,p_count => x_msg_count
9234 ,p_data => x_msg_data);
9235 WHEN OTHERS THEN
9236 IF FND_API.To_Boolean( p_commit ) THEN
9237 ROLLBACK TO PROCESS_VS_VALUE_SEQUENCE_SP;
9238 END IF;
9239
9240 END process_vs_value_sequence;
9241
9242 ----------------------------------------------------------------------
9243
9244 -----------------------------
9245 -- Object Association APIs --
9246 -----------------------------
9247
9248 ----------------------------------------------------------------------
9249
9250 PROCEDURE Create_Association (
9251 p_api_version IN NUMBER
9252 ,p_association_id IN NUMBER DEFAULT NULL
9253 ,p_object_id IN NUMBER
9254 ,p_classification_code IN VARCHAR2
9255 ,p_data_level IN VARCHAR2
9256 ,p_attr_group_id IN NUMBER
9257 ,p_enabled_flag IN VARCHAR2
9258 ,p_view_privilege_id IN NUMBER --ignored for now
9259 ,p_edit_privilege_id IN NUMBER --ignored for now
9260 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9261 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9262 ,x_association_id OUT NOCOPY NUMBER
9263 ,x_return_status OUT NOCOPY VARCHAR2
9264 ,x_errorcode OUT NOCOPY NUMBER
9265 ,x_msg_count OUT NOCOPY NUMBER
9266 ,x_msg_data OUT NOCOPY VARCHAR2
9267 ) IS
9268
9269 l_api_name CONSTANT VARCHAR2(30) := 'Create_Association';
9270
9271 --we don't use l_api_version yet, but eventually we might:
9272 --if we change required parameters, version goes from n.x to (n+1).x
9273 --if we change optional parameters, version goes from x.n to x.(n+1)
9274 l_api_version CONSTANT NUMBER := 1.0;
9275
9276 l_attr_group_id NUMBER;
9277 l_Sysdate DATE := Sysdate;
9278 l_existing_datalevel VARCHAR2(30);
9279 l_attr_disp_name VARCHAR2(80);
9280 l_data_level_name VARCHAR2(80);
9281
9282 e_data_level_mismatch_error EXCEPTION;
9283 e_variant_assocs_excep EXCEPTION;
9284 l_variant_exist_count NUMBER;
9285 l_dyn_sql VARCHAR2(1000);
9286 l_style_exists VARCHAR2(1);
9287 l_attr_count NUMBER;
9288
9289 l_dummy_number NUMBER;
9290 l_variant_flag VARCHAR2(1);
9291
9292 CURSOR data_level_merge (cp_attr_group_id IN NUMBER
9293 ,cp_classification_code IN VARCHAR2) IS
9294 SELECT attr_grp_dl.data_level_id data_level_id, dl_meta.data_level_name data_level_name
9295 FROM ego_data_level_b dl_meta, ego_attr_group_dl attr_grp_dl
9296 WHERE attr_grp_dl.data_level_id = dl_meta.data_level_id
9297 AND attr_grp_dl.attr_group_id = cp_attr_group_id
9298 AND NOT EXISTS
9299 (SELECT 1
9300 FROM EGO_OBJ_AG_ASSOCS_B
9301 WHERE classification_code = p_classification_code
9302 AND attr_group_id = cp_attr_group_id
9303 AND data_level_id = dl_meta.data_level_id
9304 );
9305
9306 cursor_rec data_level_merge%ROWTYPE;
9307
9308
9309 BEGIN
9310
9311 -- Standard start of API savepoint
9312 IF FND_API.To_Boolean(p_commit) THEN
9313 SAVEPOINT Create_Association_PUB;
9314 END IF;
9315
9316 -- Check for call compatibility
9317 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9318 l_api_name, G_PKG_NAME)
9319 THEN
9320 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9321 END IF;
9322 -- Initialize message list even though we don't currently use it
9323 IF FND_API.To_Boolean(p_init_msg_list) THEN
9324 FND_MSG_PUB.Initialize;
9325 END IF;
9326
9327 --Checking if the variant attribute group trying to be associated has attributes in it, if not raise exception
9328 SELECT Nvl(VARIANT, 'N')
9329 INTO l_variant_flag
9330 FROM EGO_ATTR_GROUPS_V WHERE ATTR_GROUP_ID = p_attr_group_id;
9331
9332 SELECT Count(1)
9333 INTO l_attr_count
9334 FROM EGO_ATTR_GROUPS_V AGV, EGO_ATTRS_V AV
9335 WHERE AGV.APPLICATION_ID = AV.APPLICATION_ID
9336 AND AGV.ATTR_GROUP_TYPE = AV.ATTR_GROUP_TYPE
9337 AND AGV.ATTR_GROUP_NAME = AV.ATTR_GROUP_NAME
9338 AND AGV.ATTR_GROUP_ID = p_attr_group_id;
9339
9340 IF(l_attr_count = 0 AND l_variant_flag = 'Y') THEN
9341 Fnd_Message.Set_Name (application => 'EGO',
9342 name => 'EGO_EF_NO_ATTR_EXIST'
9343 );
9344 FND_MSG_PUB.Add;
9345 RAISE e_variant_assocs_excep;
9346 END IF;
9347
9348 -- SSARNOBA: Why do we have this SELECT INTO statement? We're not using
9349 -- l_variant_exist_count anywhere.
9350 SELECT COUNT(*)
9351 INTO l_variant_exist_count
9352 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
9353 WHERE OBJECT_ID = p_object_id
9354 AND CLASSIFICATION_CODE = p_classification_code
9355 AND VARIANT = 'Y'
9356 AND EXISTS (SELECT 'X'
9357 FROM EGO_ATTR_GROUPS_V AGV
9358 WHERE AGV.ATTR_GROUP_ID = p_attr_group_id
9359 AND AGV.VARIANT = 'Y');
9360
9361 -- special handling for variant attribute groups
9362 BEGIN
9363 SELECT OBJECT_ID
9364 INTO l_dummy_number
9365 FROM FND_OBJECTS
9366 WHERE OBJECT_ID = p_object_id
9367 AND OBJ_NAME = 'EGO_ITEM';
9368
9369 --
9370 -- Bug 12775527. Optimize the style item check flow.
9371 -- Execute style item check only if its a variant.
9372 -- Also removing the usage of unnecessary dynamic SQL.
9373 -- sreharih. Wed Jul 20 12:45:15 PDT 2011
9374 --
9375 IF(l_dummy_number IS NOT NULL AND l_variant_flag='Y') THEN
9376 l_style_exists := EGO_STYLE_SKU_ITEM_PVT.IsStyle_Item_Exist_For_ICC(p_classification_code);
9377 END IF;
9378
9379 EXCEPTION
9380 WHEN OTHERS THEN
9381 NULL;
9382 END;
9383
9384
9385 --EXECUTE IMMEDIATE l_dyn_sql;
9386 IF(l_style_exists = 'T' AND l_variant_flag = 'Y') THEN
9387 Fnd_Message.Set_Name (application => 'EGO',
9388 name => 'EGO_VARIANT_STYLE_EXIST'
9389 );
9390 FND_MSG_PUB.Add;
9391 RAISE e_variant_assocs_excep;
9392 END IF;
9393
9394 --l_existing_datalevel := Get_Associated_Datalevel(p_object_id, p_attr_group_id);
9395
9396 --IF ((l_existing_datalevel IS NOT NULL) AND (l_existing_datalevel <> p_data_level)) THEN
9397 -- RAISE e_data_level_mismatch_error;
9398 --END IF;
9399
9400
9401 --if association id is not provided, get association id from sequence
9402 --IF( p_association_id IS NULL ) THEN
9403 --SELECT EGO_ASSOCS_S.NEXTVAL INTO x_association_id FROM DUAL;
9404 --ELSE
9405 IF(p_association_id IS NOT NULL AND p_association_id > 0) THEN
9406 x_association_id := p_association_id;
9407 END IF;
9408
9409 IF(x_association_id IS NOT NULL) THEN
9410 -- used only for the creation of single association
9411 -- it is assumed that when the user is passing p_association_id , it is for a single association record
9412 INSERT INTO EGO_OBJ_AG_ASSOCS_B
9413 (
9414 ASSOCIATION_ID
9415 ,OBJECT_ID
9416 ,CLASSIFICATION_CODE
9417 ,DATA_LEVEL
9418 ,ATTR_GROUP_ID
9419 ,ENABLED_FLAG
9420 ,DATA_LEVEL_ID
9421 ,VIEW_PRIVILEGE_ID
9422 ,EDIT_PRIVILEGE_ID
9423 ,CREATION_DATE
9424 ,CREATED_BY
9425 ,LAST_UPDATE_DATE
9426 ,LAST_UPDATED_BY
9427 ,LAST_UPDATE_LOGIN
9428 )
9429 VALUES
9430 (
9431 x_association_id
9432 ,p_object_id
9433 ,p_classification_code
9434 ,p_data_level
9435 ,p_attr_group_id
9436 ,p_enabled_flag
9437 ,(SELECT data_level_id FROM ego_attr_groups_dl_v WHERE attr_group_id = p_attr_group_id AND data_level_internal_name = p_data_level)
9438 ,p_view_privilege_id
9439 ,p_edit_privilege_id
9440 ,l_Sysdate
9441 ,g_current_user_id
9442 ,l_Sysdate
9443 ,g_current_user_id
9444 ,g_current_login_id
9445 ) ;
9446 ELSE
9447
9448 -- merge is used here to create association for all the data levels of an AG
9449 -- when all the data levels are to be associated, p_association_id is passed NULL
9450 OPEN data_level_merge(p_attr_group_id, p_classification_code);
9451 LOOP
9452 FETCH data_level_merge INTO cursor_rec;
9453 EXIT WHEN data_level_merge%NOTFOUND;
9454
9455 INSERT INTO EGO_OBJ_AG_ASSOCS_B
9456 (
9457 ASSOCIATION_ID,
9458 OBJECT_ID,
9459 CLASSIFICATION_CODE,
9460 DATA_LEVEL,
9461 ATTR_GROUP_ID,
9462 ENABLED_FLAG,
9463 DATA_LEVEL_ID,
9464 CREATION_DATE,
9465 CREATED_BY,
9466 LAST_UPDATE_DATE,
9467 LAST_UPDATED_BY,
9468 LAST_UPDATE_LOGIN
9469 )
9470 VALUES
9471 (
9472 EGO_ASSOCS_S.NEXTVAL,
9473 p_object_id,
9474 p_classification_code,
9475 cursor_rec.data_level_name,
9476 p_attr_group_id,
9477 p_enabled_flag,
9478 cursor_rec.data_level_id,
9479 l_Sysdate,
9480 g_current_user_id,
9481 l_Sysdate,
9482 g_current_user_id,
9483 g_current_login_id
9484 );
9485
9486
9487
9488
9489 END LOOP;
9490 CLOSE data_level_merge;
9491
9492 END IF;
9493
9494 -- Standard check of p_commit
9495 IF FND_API.To_Boolean(p_commit) THEN
9496 COMMIT WORK;
9497 END IF;
9498
9499
9500 x_return_status := FND_API.G_RET_STS_SUCCESS;
9501
9502 EXCEPTION
9503
9504 WHEN e_data_level_mismatch_error THEN
9505 IF FND_API.To_Boolean(p_commit) THEN
9506 ROLLBACK TO Create_Association_PUB;
9507 END IF;
9508
9509 x_return_status := FND_API.G_RET_STS_ERROR;
9510
9511
9512 l_attr_disp_name := Get_Attr_Group_DispName(p_attr_group_id);
9513
9514 l_data_level_name := Get_Data_Level_DispName(l_existing_datalevel);
9515
9516
9517 Fnd_Message.Set_Name (application => 'EGO',
9518 name => 'EGO_EF_DL_MISMATCH_ERR'
9519 );
9520
9521 Fnd_Message.Set_Token ( token => 'ATTR_GROUP'
9522 , value => l_attr_disp_name
9523 , translate => false
9524 );
9525
9526
9527 Fnd_Message.Set_Token ( token => 'DATA_LEVEL'
9528 , value => l_data_level_name
9529 , translate => false
9530 );
9531
9532 x_msg_data := Fnd_Message.Get;
9533
9534 WHEN e_variant_assocs_excep THEN
9535 IF FND_API.To_Boolean(p_commit) THEN
9536 ROLLBACK TO Create_Association_PUB;
9537 END IF;
9538 x_return_status := FND_API.G_RET_STS_ERROR;
9539 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9540 ,p_count => x_msg_count
9541 ,p_data => x_msg_data);
9542
9543
9544
9545 WHEN OTHERS THEN
9546 CLOSE data_level_merge; --closing the error in case the cursor errors out
9547
9548 IF FND_API.To_Boolean(p_commit) THEN
9549 ROLLBACK TO Create_Association_PUB;
9550 END IF;
9551 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9552
9553 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9554 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9555 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9556 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9557 FND_MSG_PUB.Add;
9558 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9559 ,p_count => x_msg_count
9560 ,p_data => x_msg_data);
9561
9562 END Create_Association;
9563
9564 ----------------------------------------------------------------------
9565
9566 PROCEDURE Create_Association (
9567 p_api_version IN NUMBER
9568 ,p_association_id IN NUMBER DEFAULT NULL
9569 ,p_object_id IN NUMBER
9570 ,p_classification_code IN VARCHAR2
9571 ,p_data_level IN VARCHAR2
9572 ,p_application_id IN NUMBER
9573 ,p_attr_group_type IN VARCHAR2
9574 ,p_attr_group_name IN VARCHAR2
9575 ,p_enabled_flag IN VARCHAR2
9576 ,p_view_privilege_id IN NUMBER --ignored for now
9577 ,p_edit_privilege_id IN NUMBER --ignored for now
9578 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9579 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9580 ,x_association_id OUT NOCOPY NUMBER
9581 ,x_return_status OUT NOCOPY VARCHAR2
9582 ,x_errorcode OUT NOCOPY NUMBER
9583 ,x_msg_count OUT NOCOPY NUMBER
9584 ,x_msg_data OUT NOCOPY VARCHAR2
9585 ) IS
9586
9587 l_api_name CONSTANT VARCHAR2(30) := 'Create_Association';
9588
9589 l_attr_group_id NUMBER;
9590
9591 BEGIN
9592
9593 -- Standard start of API savepoint
9594 IF FND_API.To_Boolean(p_commit) THEN
9595 SAVEPOINT Create_Association_PUB;
9596 END IF;
9597
9598 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
9599 ,p_attr_group_type
9600 ,p_attr_group_name);
9601
9602 IF l_attr_group_id IS NULL THEN
9603 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9604 END IF;
9605
9606 EGO_EXT_FWK_PUB.Create_Association(
9607 p_api_version => p_api_version
9608 ,p_association_id => p_association_id
9609 ,p_object_id => p_object_id
9610 ,p_classification_code => p_classification_code
9611 ,p_data_level => p_data_level
9612 ,p_attr_group_id => l_attr_group_id
9613 ,p_enabled_flag => p_enabled_flag
9614 ,p_view_privilege_id => p_view_privilege_id
9615 ,p_edit_privilege_id => p_edit_privilege_id
9616 ,p_init_msg_list => p_init_msg_list
9617 ,p_commit => p_commit
9618 ,x_association_id => x_association_id
9619 ,x_return_status => x_return_status
9620 ,x_errorcode => x_errorcode
9621 ,x_msg_count => x_msg_count
9622 ,x_msg_data => x_msg_data
9623 );
9624
9625 -- Standard check of p_commit
9626 IF FND_API.To_Boolean(p_commit) THEN
9627 COMMIT WORK;
9628 END IF;
9629
9630 EXCEPTION
9631 WHEN OTHERS THEN
9632 IF FND_API.To_Boolean(p_commit) THEN
9633 ROLLBACK TO Create_Association_PUB;
9634 END IF;
9635 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9636
9637 IF l_attr_group_id IS NULL THEN
9638 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupIDFoundForPKs';
9639 ELSE
9640 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9641 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9642 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9643 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9644 FND_MSG_PUB.Add;
9645 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9646 ,p_count => x_msg_count
9647 ,p_data => x_msg_data);
9648 END IF;
9649
9650 END Create_Association;
9651
9652 ----------------------------------------------------------------------
9653
9654 PROCEDURE Create_Association (
9655 p_api_version IN NUMBER
9656 ,p_object_name IN VARCHAR2
9657 ,p_classification_code IN VARCHAR2
9658 ,p_data_level IN VARCHAR2
9659 ,p_application_id IN NUMBER
9660 ,p_attr_group_type IN VARCHAR2
9661 ,p_attr_group_name IN VARCHAR2
9662 ,p_enabled_flag IN VARCHAR2
9663 ,p_view_privilege_id IN NUMBER --ignored for now
9664 ,p_edit_privilege_id IN NUMBER --ignored for now
9665 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9666 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9667 ,x_association_id OUT NOCOPY NUMBER
9668 ,x_return_status OUT NOCOPY VARCHAR2
9669 ,x_errorcode OUT NOCOPY NUMBER
9670 ,x_msg_count OUT NOCOPY NUMBER
9671 ,x_msg_data OUT NOCOPY VARCHAR2
9672 ) IS
9673
9674 l_api_name CONSTANT VARCHAR2(30) := 'Create_Association';
9675
9676 l_object_id NUMBER;
9677
9678 BEGIN
9679
9680 -- Standard start of API savepoint
9681 IF FND_API.To_Boolean(p_commit) THEN
9682 SAVEPOINT Create_Association_PUB;
9683 END IF;
9684
9685 l_object_id := Get_Object_Id_From_Name(p_object_name);
9686 IF l_object_id IS NULL THEN
9687 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9688 END IF;
9689
9690 EGO_EXT_FWK_PUB.Create_Association(
9691 p_api_version => p_api_version
9692 ,p_object_id => l_object_id
9693 ,p_classification_code => p_classification_code
9694 ,p_data_level => p_data_level
9695 ,p_application_id => p_application_id
9696 ,p_attr_group_type => p_attr_group_type
9697 ,p_attr_group_name => p_attr_group_name
9698 ,p_enabled_flag => p_enabled_flag
9699 ,p_view_privilege_id => p_view_privilege_id
9700 ,p_edit_privilege_id => p_edit_privilege_id
9701 ,p_init_msg_list => p_init_msg_list
9702 ,p_commit => p_commit
9703 ,x_association_id => x_association_id
9704 ,x_return_status => x_return_status
9705 ,x_errorcode => x_errorcode
9706 ,x_msg_count => x_msg_count
9707 ,x_msg_data => x_msg_data
9708 );
9709
9710 -- Standard check of p_commit
9711 IF FND_API.To_Boolean(p_commit) THEN
9712 COMMIT WORK;
9713 END IF;
9714
9715 EXCEPTION
9716 WHEN OTHERS THEN
9717 IF FND_API.To_Boolean(p_commit) THEN
9718 ROLLBACK TO Create_Association_PUB;
9719 END IF;
9720 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9721
9722 IF l_object_id IS NULL THEN
9723 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoObjectIdForObjectName';
9724 ELSE
9725 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9726 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9727 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9728 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9729 FND_MSG_PUB.Add;
9730 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9731 ,p_count => x_msg_count
9732 ,p_data => x_msg_data);
9733 END IF;
9734
9735 END Create_Association;
9736
9737 ----------------------------------------------------------------------
9738
9739 -- definition for case when caller has ASSOCIATION_ID
9740 PROCEDURE Update_Association (
9741 p_api_version IN NUMBER
9742 ,p_association_id IN NUMBER
9743 ,p_enabled_flag IN VARCHAR2
9744 ,p_view_privilege_id IN NUMBER --ignored for now
9745 ,p_edit_privilege_id IN NUMBER --ignored for now
9746 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9747 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9748 ,x_return_status OUT NOCOPY VARCHAR2
9749 ,x_errorcode OUT NOCOPY NUMBER
9750 ,x_msg_count OUT NOCOPY NUMBER
9751 ,x_msg_data OUT NOCOPY VARCHAR2
9752 ) IS
9753
9754 l_api_name CONSTANT VARCHAR2(30) := 'Update_Association';
9755
9756 --we don't use l_api_version yet, but eventually we might:
9757 --if we change required parameters, version goes from n.x to (n+1).x
9758 --if we change optional parameters, version goes from x.n to x.(n+1)
9759 l_api_version CONSTANT NUMBER := 1.0;
9760
9761 l_Sysdate DATE := Sysdate;
9762
9763 BEGIN
9764
9765 -- Standard start of API savepoint
9766 IF FND_API.To_Boolean(p_commit) THEN
9767 SAVEPOINT Update_Association_PUB;
9768 END IF;
9769
9770 -- Check for call compatibility
9771 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9772 l_api_name, G_PKG_NAME)
9773 THEN
9774 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9775 END IF;
9776 -- Initialize message list even though we don't currently use it
9777 IF FND_API.To_Boolean(p_init_msg_list) THEN
9778 FND_MSG_PUB.Initialize;
9779 END IF;
9780
9781 --bug 5513610
9782 /*DELETE FROM EGO_PAGE_ENTRIES_B
9783 WHERE ASSOCIATION_ID = p_association_id;*/
9784
9785 UPDATE EGO_OBJ_AG_ASSOCS_B
9786 SET ENABLED_FLAG = p_enabled_flag,
9787 VIEW_PRIVILEGE_ID = p_view_privilege_id,
9788 EDIT_PRIVILEGE_ID = p_edit_privilege_id,
9789 LAST_UPDATE_DATE = l_Sysdate,
9790 LAST_UPDATED_BY = g_current_user_id,
9791 LAST_UPDATE_LOGIN = g_current_login_id
9792 WHERE ASSOCIATION_ID = p_association_id;
9793
9794 -- Standard check of p_commit
9795 IF FND_API.To_Boolean(p_commit) THEN
9796 COMMIT WORK;
9797 END IF;
9798
9799 x_return_status := FND_API.G_RET_STS_SUCCESS;
9800
9801 EXCEPTION
9802 WHEN OTHERS THEN
9803 IF FND_API.To_Boolean(p_commit) THEN
9804 ROLLBACK TO Update_Association_PUB;
9805 END IF;
9806 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9807
9808 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9809 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9810 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9811 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9812 FND_MSG_PUB.Add;
9813 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9814 ,p_count => x_msg_count
9815 ,p_data => x_msg_data);
9816
9817 END Update_Association;
9818
9819 ----------------------------------------------------------------------
9820
9821 -- definition for case when caller doesn't have ASSOCIATION_ID but has ATTR_GROUP_ID
9822 PROCEDURE Update_Association (
9823 p_api_version IN NUMBER
9824 ,p_object_id IN NUMBER
9825 ,p_classification_code IN VARCHAR2
9826 ,p_attr_group_id IN NUMBER
9827 ,p_enabled_flag IN VARCHAR2
9828 ,p_view_privilege_id IN NUMBER --ignored for now
9829 ,p_edit_privilege_id IN NUMBER --ignored for now
9830 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9831 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9832 ,x_return_status OUT NOCOPY VARCHAR2
9833 ,x_errorcode OUT NOCOPY NUMBER
9834 ,x_msg_count OUT NOCOPY NUMBER
9835 ,x_msg_data OUT NOCOPY VARCHAR2
9836 ) IS
9837
9838 l_api_name CONSTANT VARCHAR2(30) := 'Update_Association';
9839
9840 l_association_id NUMBER;
9841
9842 BEGIN
9843
9844 -- Standard start of API savepoint
9845 IF FND_API.To_Boolean(p_commit) THEN
9846 SAVEPOINT Update_Association_PUB;
9847 END IF;
9848
9849 l_association_id := Get_Association_Id_From_PKs(p_object_id
9850 ,p_classification_code
9851 ,p_attr_group_id);
9852 IF l_association_id IS NULL THEN
9853 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9854 END IF;
9855
9856 EGO_EXT_FWK_PUB.Update_Association(
9857 p_api_version => p_api_version
9858 ,p_association_id => l_association_id
9859 ,p_enabled_flag => p_enabled_flag
9860 ,p_view_privilege_id => p_view_privilege_id
9861 ,p_edit_privilege_id => p_edit_privilege_id
9862 ,p_init_msg_list => p_init_msg_list
9863 ,p_commit => p_commit
9864 ,x_return_status => x_return_status
9865 ,x_errorcode => x_errorcode
9866 ,x_msg_count => x_msg_count
9867 ,x_msg_data => x_msg_data
9868 );
9869
9870 -- Standard check of p_commit
9871 IF FND_API.To_Boolean(p_commit) THEN
9872 COMMIT WORK;
9873 END IF;
9874
9875 EXCEPTION
9876 WHEN OTHERS THEN
9877 IF FND_API.To_Boolean(p_commit) THEN
9878 ROLLBACK TO Update_Association_PUB;
9879 END IF;
9880 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9881
9882 IF l_association_id IS NULL THEN
9883 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAssocFound';
9884 ELSE
9885 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9886 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9887 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9888 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9889 FND_MSG_PUB.Add;
9890 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9891 ,p_count => x_msg_count
9892 ,p_data => x_msg_data);
9893 END IF;
9894
9895 END Update_Association;
9896
9897 ----------------------------------------------------------------------
9898
9899 -- definition for case when caller doesn't have ASSOCIATION_ID or ATTR_GROUP_ID
9900 PROCEDURE Update_Association (
9901 p_api_version IN NUMBER
9902 ,p_object_id IN NUMBER
9903 ,p_classification_code IN VARCHAR2
9904 ,p_application_id IN NUMBER
9905 ,p_attr_group_type IN VARCHAR2
9906 ,p_attr_group_name IN VARCHAR2
9907 ,p_enabled_flag IN VARCHAR2
9908 ,p_view_privilege_id IN NUMBER --ignored for now
9909 ,p_edit_privilege_id IN NUMBER --ignored for now
9910 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9911 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9912 ,x_return_status OUT NOCOPY VARCHAR2
9913 ,x_errorcode OUT NOCOPY NUMBER
9914 ,x_msg_count OUT NOCOPY NUMBER
9915 ,x_msg_data OUT NOCOPY VARCHAR2
9916 ) IS
9917
9918 l_api_name CONSTANT VARCHAR2(30) := 'Update_Association';
9919
9920 l_attr_group_id NUMBER;
9921 l_association_id NUMBER;
9922
9923 BEGIN
9924
9925 -- Standard start of API savepoint
9926 IF FND_API.To_Boolean(p_commit) THEN
9927 SAVEPOINT Update_Association_PUB;
9928 END IF;
9929
9930 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
9931 ,p_attr_group_type
9932 ,p_attr_group_name);
9933
9934 IF l_attr_group_id IS NULL THEN
9935 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9936 END IF;
9937
9938 l_association_id := Get_Association_Id_From_PKs(p_object_id
9939 ,p_classification_code
9940 ,l_attr_group_id);
9941 IF l_association_id IS NULL THEN
9942 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9943 END IF;
9944
9945 EGO_EXT_FWK_PUB.Update_Association(
9946 p_api_version => p_api_version
9947 ,p_association_id => l_association_id
9948 ,p_enabled_flag => p_enabled_flag
9949 ,p_view_privilege_id => p_view_privilege_id
9950 ,p_edit_privilege_id => p_edit_privilege_id
9951 ,p_init_msg_list => p_init_msg_list
9952 ,p_commit => p_commit
9953 ,x_return_status => x_return_status
9954 ,x_errorcode => x_errorcode
9955 ,x_msg_count => x_msg_count
9956 ,x_msg_data => x_msg_data
9957 );
9958
9959 -- Standard check of p_commit
9960 IF FND_API.To_Boolean(p_commit) THEN
9961 COMMIT WORK;
9962 END IF;
9963
9964 EXCEPTION
9965 WHEN OTHERS THEN
9966 IF FND_API.To_Boolean(p_commit) THEN
9967 ROLLBACK TO Update_Association_PUB;
9968 END IF;
9969 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9970
9971 IF l_attr_group_id IS NULL THEN
9972 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupIDFoundForPKs';
9973 ELSIF l_association_id IS NULL THEN
9974 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAssocFound';
9975 ELSE
9976 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9977 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9978 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9979 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9980 FND_MSG_PUB.Add;
9981 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9982 ,p_count => x_msg_count
9983 ,p_data => x_msg_data);
9984 END IF;
9985
9986 END Update_Association;
9987
9988 ----------------------------------------------------------------------
9989
9990 PROCEDURE Delete_Association (
9991 p_api_version IN NUMBER
9992 ,p_association_id IN NUMBER
9993 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9994 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9995 ,p_force IN VARCHAR2 := fnd_api.g_FALSE
9996 ,x_return_status OUT NOCOPY VARCHAR2
9997 ,x_errorcode OUT NOCOPY NUMBER
9998 ,x_msg_count OUT NOCOPY NUMBER
9999 ,x_msg_data OUT NOCOPY VARCHAR2
10000 ) IS
10001
10002 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Association';
10003
10004 --we don't use l_api_version yet, but eventually we might:
10005 --if we change required parameters, version goes FROM n.x to (n+1).x
10006 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10007 l_api_version CONSTANT NUMBER := 1.0;
10008
10009 ---------------------------------------------------------------------------
10010 -- Type for tracking deletion-constraint checks for Associations with --
10011 -- various objects; we start with entries for Item, Change, and Projects --
10012 ---------------------------------------------------------------------------
10013 TYPE LOCAL_DEL_ASSOC_CHECK_REC IS RECORD
10014 (
10015 OBJECT_NAME VARCHAR2(30)
10016 ,PACKAGE_AND_PROCEDURE VARCHAR2(60)
10017 );
10018
10019 TYPE LOCAL_DEL_ASSOC_CHECK_TABLE IS TABLE OF LOCAL_DEL_ASSOC_CHECK_REC
10020 INDEX BY BINARY_INTEGER;
10021
10022 l_dummy_rec LOCAL_DEL_ASSOC_CHECK_REC;
10023 l_del_assoc_table LOCAL_DEL_ASSOC_CHECK_TABLE;
10024 l_association_row EGO_OBJ_ATTR_GRP_ASSOCS_V%ROWTYPE;
10025 l_del_assoc_check_index NUMBER;
10026 l_is_ok_to_delete BOOLEAN := TRUE;
10027 l_api_to_call VARCHAR2(999);
10028
10029 CURSOR get_assoc_records (cp_association_id IN NUMBER) IS
10030 SELECT *
10031 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
10032 WHERE (object_id, classification_code, attr_group_id) IN
10033 (SELECT object_id, classification_code, attr_group_id
10034 FROM ego_obj_ag_assocs_b
10035 where association_id = cp_association_id);
10036
10037 BEGIN
10038 code_debug(l_api_name||' started for association '||p_association_id);
10039 -- Standard start of API savepoint
10040 IF FND_API.To_Boolean(p_commit) THEN
10041 SAVEPOINT Delete_Association_PUB;
10042 END IF;
10043
10044 -- Check for call compatibility
10045 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10046 l_api_name, G_PKG_NAME)
10047 THEN
10048 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10049 END IF;
10050 -- Initialize message list even though we don't currently use it
10051 IF FND_API.To_Boolean(p_init_msg_list) THEN
10052 FND_MSG_PUB.Initialize;
10053 END IF;
10054
10055 --if p_force is true, skip all deletion checks
10056 IF( p_force = fnd_api.g_TRUE ) THEN
10057 code_debug(l_api_name||' deleting association forcefully ');
10058 --delete association blindly
10059 FOR cr IN get_assoc_records(cp_association_id => p_association_id) LOOP
10060 code_debug(l_api_name||' deleting association forcefully for assoc : '||cr.association_id);
10061 DELETE FROM EGO_OBJ_AG_ASSOCS_B
10062 WHERE association_id = cr.association_id;
10063 END LOOP;
10064 l_is_ok_to_delete := TRUE;
10065 ELSE
10066
10067 -- First, initialize the delete-constraint table
10068 l_dummy_rec.OBJECT_NAME := 'EGO_ITEM';
10069 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'EGO_ITEM_CATALOG_PUB.Check_Delete_AttrGroup_Assoc';
10070 l_del_assoc_table(1) := l_dummy_rec;
10071
10072 l_dummy_rec.OBJECT_NAME := 'PA_PROJECTS';
10073 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'PA_USER_ATTR_PUB.Check_Delete_Assoc_Ok';
10074 l_del_assoc_table(2) := l_dummy_rec;
10075
10076 l_dummy_rec.OBJECT_NAME := 'ENG_CHANGE';
10077 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'EGO_CHANGE_USER_ATTRS_PUB.Check_Delete_Associations'; --Bug 3070807
10078 l_del_assoc_table(3) := l_dummy_rec;
10079
10080 l_dummy_rec.OBJECT_NAME := 'ENG_CHANGE_LINE';
10081 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'EGO_CHANGE_USER_ATTRS_PUB.Check_Delete_Associations'; --Bug 3070807
10082 l_del_assoc_table(4) := l_dummy_rec;
10083
10084 l_api_to_call := NULL;
10085 FOR cr IN get_assoc_records(cp_association_id => p_association_id) LOOP
10086
10087 code_debug(l_api_name||' obj : '||cr.object_name||' assoc id : '||cr.association_id
10088 ||' class code: '||cr.classification_code||' data level: '|| cr.data_level_int_name);
10089
10090 -- Next, find and call any delete-constraint procedures provided
10091 l_del_assoc_check_index := l_del_assoc_table.FIRST;
10092 WHILE (l_del_assoc_check_index <= l_del_assoc_table.LAST AND l_api_to_call IS NULL) LOOP
10093 IF (l_del_assoc_table(l_del_assoc_check_index).OBJECT_NAME = cr.OBJECT_NAME AND
10094 l_del_assoc_table(l_del_assoc_check_index).PACKAGE_AND_PROCEDURE IS NOT NULL) THEN
10095 l_api_to_call := l_del_assoc_table(l_del_assoc_check_index).PACKAGE_AND_PROCEDURE;
10096 END IF;
10097 l_del_assoc_check_index := l_del_assoc_table.NEXT(l_del_assoc_check_index);
10098 END LOOP;
10099
10100 IF l_api_to_call IS NOT NULL THEN
10101
10102 DECLARE
10103 l_dynamic_sql VARCHAR2(700);
10104 l_ok_to_delete VARCHAR2(1) := fnd_api.G_FALSE;
10105 BEGIN
10106 code_debug(l_api_name||' calling '||l_api_to_call);
10107 l_dynamic_sql := 'BEGIN ' ||
10108 l_api_to_call ||
10109 '( ' ||
10110 ' p_api_version => 1.0 '||
10111 ',p_association_id => :1 '||
10112 ',p_classification_code => :2 '||
10113 ',p_data_level => :3 '||
10114 ',p_attr_group_id => :4 '||
10115 ',p_application_id => :5 '||
10116 ',p_attr_group_type => :6 '||
10117 ',p_attr_group_name => :7 '||
10118 ',p_enabled_code => :8 '||
10119 ',x_ok_to_delete => :9 '||
10120 ',x_return_status => :10 '||
10121 ',x_errorcode => :11 '||
10122 ',x_msg_count => :12 '||
10123 ',x_msg_data => :13 '||
10124 '); END;';
10125 EXECUTE IMMEDIATE l_dynamic_sql USING IN cr.association_id,
10126 IN cr.classification_code,
10127 IN cr.data_level_int_name,
10128 IN cr.attr_group_id,
10129 IN cr.application_id,
10130 IN cr.attr_group_type,
10131 IN cr.attr_group_name,
10132 IN cr.enabled_code,
10133 OUT l_ok_to_delete,
10134 OUT x_return_status,
10135 OUT x_errorcode,
10136 OUT x_msg_count,
10137 OUT x_msg_data;
10138
10139 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
10140 l_is_ok_to_delete := FND_API.To_Boolean(l_ok_to_delete);
10141 ELSE
10142 l_is_ok_to_delete := FALSE;
10143 END IF;
10144 EXCEPTION
10145 WHEN OTHERS THEN
10146 code_debug(l_api_name||' EXCEPTION from check '||x_msg_data);
10147
10148 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10149 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
10150 END IF;
10151 l_is_ok_to_delete := FALSE;
10152 END;
10153 ELSE
10154 l_is_ok_to_delete := TRUE;
10155 END IF;
10156
10157 -- Finally, if we passed all checks, delete the records
10158 IF (l_is_ok_to_delete) THEN
10159 code_debug(l_api_name||' deleting association as conditions are met for assoc :'||cr.association_id);
10160 DELETE FROM EGO_PAGE_ENTRIES_B
10161 WHERE ASSOCIATION_ID = cr.association_id;
10162
10163 DELETE FROM EGO_OBJ_AG_ASSOCS_B
10164 WHERE ASSOCIATION_ID = cr.association_id;
10165 ELSE
10166 code_debug(l_api_name||' CANNOT delete as prod specific conditions are not met for :'||cr.association_id);
10167 EXIT;
10168 END IF;
10169
10170 END LOOP;
10171
10172 END IF; --check p_force
10173
10174
10175 IF (l_is_ok_to_delete) THEN
10176 -- Standard check of p_commit
10177 IF FND_API.To_Boolean(p_commit) THEN
10178 COMMIT WORK;
10179 END IF;
10180 x_return_status := FND_API.G_RET_STS_SUCCESS;
10181 ELSE
10182 IF FND_API.To_Boolean(p_commit) THEN
10183 ROLLBACK TO Delete_Association_PUB;
10184 END IF;
10185 x_return_status := FND_API.G_RET_STS_ERROR;
10186 END IF;
10187 code_debug(l_api_name||' setting return status as '||x_return_status);
10188
10189 EXCEPTION
10190 WHEN OTHERS THEN
10191 code_debug(l_api_name||' EXCEPTION : '||SQLERRM);
10192 IF FND_API.To_Boolean(p_commit) THEN
10193 ROLLBACK TO Delete_Association_PUB;
10194 END IF;
10195 IF get_assoc_records%ISOPEN THEN
10196 CLOSE get_assoc_records;
10197 END IF;
10198 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10199
10200 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10201 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10202 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10203 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10204 FND_MSG_PUB.Add;
10205 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10206 ,p_count => x_msg_count
10207 ,p_data => x_msg_data);
10208
10209 END Delete_Association;
10210
10211 ----------------------------------------------------------------------
10212
10213
10214 -------------------------------
10215 -- Attribute Group Page APIs --
10216 -------------------------------
10217
10218 ----------------------------------------------------------------------
10219
10220 PROCEDURE Create_Page (
10221 p_api_version IN NUMBER
10222 ,p_page_id IN NUMBER DEFAULT NULL
10223 ,p_object_id IN NUMBER
10224 ,p_classification_code IN VARCHAR2
10225 ,p_data_level IN VARCHAR2
10226 ,p_internal_name IN VARCHAR2
10227 ,p_display_name IN VARCHAR2
10228 ,p_description IN VARCHAR2
10229 ,p_sequence IN NUMBER
10230 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10231 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10232 ,x_page_id OUT NOCOPY NUMBER
10233 ,x_return_status OUT NOCOPY VARCHAR2
10234 ,x_errorcode OUT NOCOPY NUMBER
10235 ,x_msg_count OUT NOCOPY NUMBER
10236 ,x_msg_data OUT NOCOPY VARCHAR2
10237 ) IS
10238
10239 l_api_name CONSTANT VARCHAR2(30) := 'Create_Page';
10240
10241 --we don't use l_api_version yet, but eventually we might:
10242 --if we change required parameters, version goes FROM n.x to (n+1).x
10243 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10244 l_api_version CONSTANT NUMBER := 1.0;
10245
10246 l_Sysdate DATE := Sysdate;
10247
10248 BEGIN
10249
10250 -- Standard start of API savepoint
10251 IF FND_API.To_Boolean(p_commit) THEN
10252 SAVEPOINT Create_Page_PUB;
10253 END IF;
10254
10255 -- Check for call compatibility
10256 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10257 l_api_name, G_PKG_NAME)
10258 THEN
10259 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10260 END IF;
10261 -- Initialize message list even though we don't currently use it
10262 IF FND_API.To_Boolean(p_init_msg_list) THEN
10263 FND_MSG_PUB.Initialize;
10264 END IF;
10265
10266 --if page id is not provided, get page id from sequence
10267 IF( p_page_id IS NULL ) THEN
10268 SELECT EGO_PAGES_S.NEXTVAL INTO x_page_id FROM DUAL;
10269 ELSE
10270 x_page_id := p_page_id;
10271 END IF;
10272
10273 INSERT INTO EGO_PAGES_B
10274 (
10275 PAGE_ID
10276 ,OBJECT_ID
10277 ,CLASSIFICATION_CODE
10278 ,DATA_LEVEL
10279 ,INTERNAL_NAME
10280 ,SEQUENCE
10281 ,CREATION_DATE
10282 ,CREATED_BY
10283 ,LAST_UPDATE_DATE
10284 ,LAST_UPDATED_BY
10285 ,LAST_UPDATE_LOGIN
10286 )
10287 VALUES
10288 (
10289 x_page_id
10290 ,p_object_id
10291 ,p_classification_code
10292 ,p_data_level
10293 ,p_internal_name
10294 ,p_sequence
10295 ,l_Sysdate
10296 ,g_current_user_id
10297 ,l_Sysdate
10298 ,g_current_user_id
10299 ,g_current_login_id
10300 );
10301
10302 INSERT INTO EGO_PAGES_TL
10303 (
10304 PAGE_ID
10305 ,DISPLAY_NAME
10306 ,DESCRIPTION
10307 ,LANGUAGE
10308 ,SOURCE_LANG
10309 ,CREATION_DATE
10310 ,CREATED_BY
10311 ,LAST_UPDATE_DATE
10312 ,LAST_UPDATED_BY
10313 ,LAST_UPDATE_LOGIN
10314 )
10315 SELECT
10316 x_page_id
10317 ,p_display_name
10318 ,p_description
10319 ,L.LANGUAGE_CODE
10320 ,USERENV('LANG')
10321 ,l_Sysdate
10322 ,g_current_user_id
10323 ,l_Sysdate
10324 ,g_current_user_id
10325 ,g_current_login_id
10326 FROM FND_LANGUAGES L
10327 WHERE L.INSTALLED_FLAG in ('I', 'B');
10328
10329 -- Standard check of p_commit
10330 IF FND_API.To_Boolean(p_commit) THEN
10331 COMMIT WORK;
10332 END IF;
10333
10334 x_return_status := FND_API.G_RET_STS_SUCCESS;
10335
10336 EXCEPTION
10337 WHEN OTHERS THEN
10338 IF FND_API.To_Boolean(p_commit) THEN
10339 ROLLBACK TO Create_Page_PUB;
10340 END IF;
10341 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10342
10343 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10344 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10345 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10346 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10347 FND_MSG_PUB.Add;
10348 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10349 ,p_count => x_msg_count
10350 ,p_data => x_msg_data);
10351
10352 END Create_Page;
10353
10354 ----------------------------------------------------------------------
10355
10356 PROCEDURE Update_Page (
10357 p_api_version IN NUMBER
10358 ,p_page_id IN NUMBER
10359 ,p_internal_name IN VARCHAR2
10360 ,p_display_name IN VARCHAR2
10361 ,p_description IN VARCHAR2
10362 ,p_sequence IN NUMBER
10363 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10364 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10365 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
10366 ,x_return_status OUT NOCOPY VARCHAR2
10367 ,x_errorcode OUT NOCOPY NUMBER
10368 ,x_msg_count OUT NOCOPY NUMBER
10369 ,x_msg_data OUT NOCOPY VARCHAR2
10370 ) IS
10371
10372 l_api_name CONSTANT VARCHAR2(30) := 'Update_Page';
10373
10374 --we don't use l_api_version yet, but eventually we might:
10375 --if we change required parameters, version goes FROM n.x to (n+1).x
10376 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10377 l_api_version CONSTANT NUMBER := 1.0;
10378
10379 l_Sysdate DATE := Sysdate;
10380
10381 BEGIN
10382
10383 -- Standard start of API savepoint
10384 IF FND_API.To_Boolean(p_commit) THEN
10385 SAVEPOINT Update_Page_PUB;
10386 END IF;
10387
10388 -- Check for call compatibility
10389 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10390 l_api_name, G_PKG_NAME)
10391 THEN
10392 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10393 END IF;
10394 -- Initialize message list even though we don't currently use it
10395 IF FND_API.To_Boolean(p_init_msg_list) THEN
10396 FND_MSG_PUB.Initialize;
10397 END IF;
10398
10399 IF (FND_API.To_Boolean(p_is_nls_mode)) THEN
10400
10401 -- We do this IF check this way so that if p_is_nls_mode is NULL,
10402 -- we still update the non-trans table (i.e., we treat NULL as 'F')
10403 NULL;
10404
10405 ELSE
10406
10407 -- We only update this information if we are NOT in NLS mode
10408 -- (i.e., we don't update it if we are in NLS mode)
10409 UPDATE EGO_PAGES_B
10410 SET INTERNAL_NAME = p_internal_name,
10411 SEQUENCE = p_sequence,
10412 LAST_UPDATED_BY = g_current_user_id,
10413 LAST_UPDATE_DATE = l_Sysdate,
10414 LAST_UPDATE_LOGIN = g_current_login_id
10415 WHERE PAGE_ID = p_page_id;
10416
10417 END IF;
10418
10419 -- We update the TL information whether or not we're in NLS mode
10420 UPDATE EGO_PAGES_TL
10421 SET DISPLAY_NAME = p_display_name,
10422 DESCRIPTION = p_description,
10423 LAST_UPDATED_BY = g_current_user_id,
10424 LAST_UPDATE_DATE = l_Sysdate,
10425 LAST_UPDATE_LOGIN = g_current_login_id,
10426 SOURCE_LANG = USERENV('LANG')
10427 WHERE PAGE_ID = p_page_id
10428 -- AND LANGUAGE = USERENV('LANG');
10429 AND USERENV('LANG') in ( LANGUAGE , SOURCE_LANG);
10430
10431 -- Standard check of p_commit
10432 IF FND_API.To_Boolean(p_commit) THEN
10433 COMMIT WORK;
10434 END IF;
10435
10436 x_return_status := FND_API.G_RET_STS_SUCCESS;
10437
10438 EXCEPTION
10439 WHEN OTHERS THEN
10440 IF FND_API.To_Boolean(p_commit) THEN
10441 ROLLBACK TO Update_Page_PUB;
10442 END IF;
10443 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10444
10445 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10446 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10447 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10448 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10449 FND_MSG_PUB.Add;
10450 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10451 ,p_count => x_msg_count
10452 ,p_data => x_msg_data);
10453
10454
10455 END Update_Page;
10456
10457 ----------------------------------------------------------------------
10458
10459 PROCEDURE Update_Page (
10460 p_api_version IN NUMBER
10461 ,p_object_id IN NUMBER
10462 ,p_classification_code IN VARCHAR2
10463 ,p_data_level IN VARCHAR2
10464 ,p_old_internal_name IN VARCHAR2
10465 ,p_new_internal_name IN VARCHAR2
10466 ,p_display_name IN VARCHAR2
10467 ,p_description IN VARCHAR2
10468 ,p_sequence IN NUMBER
10469 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10470 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10471 ,x_return_status OUT NOCOPY VARCHAR2
10472 ,x_errorcode OUT NOCOPY NUMBER
10473 ,x_msg_count OUT NOCOPY NUMBER
10474 ,x_msg_data OUT NOCOPY VARCHAR2
10475 ) IS
10476
10477 l_api_name CONSTANT VARCHAR2(30) := 'Update_Page';
10478
10479 l_page_id NUMBER;
10480 l_new_internal_name VARCHAR2(150);
10481
10482 BEGIN
10483
10484 -- Standard start of API savepoint
10485 IF FND_API.To_Boolean(p_commit) THEN
10486 SAVEPOINT Update_Page_PUB;
10487 END IF;
10488
10489 l_page_id := Get_Page_Id_From_PKs(p_object_id
10490 ,p_classification_code
10491 ,p_old_internal_name);
10492 IF l_page_id IS NULL THEN
10493 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10494 END IF;
10495
10496 -- If caller hasn't passed in a new internal name, we keep the old one
10497 IF p_new_internal_name IS NULL OR p_new_internal_name = '' THEN
10498 l_new_internal_name := p_old_internal_name;
10499 ELSE
10500 l_new_internal_name := p_new_internal_name;
10501 END IF;
10502
10503 EGO_EXT_FWK_PUB.Update_Page(
10504 p_api_version => p_api_version
10505 ,p_page_id => l_page_id
10506 ,p_internal_name => l_new_internal_name
10507 ,p_display_name => p_display_name
10508 ,p_description => p_description
10509 ,p_sequence => p_sequence
10510 ,p_init_msg_list => p_init_msg_list
10511 ,p_commit => p_commit
10512 ,x_return_status => x_return_status
10513 ,x_errorcode => x_errorcode
10514 ,x_msg_count => x_msg_count
10515 ,x_msg_data => x_msg_data
10516 );
10517
10518 -- Standard check of p_commit
10519 IF FND_API.To_Boolean(p_commit) THEN
10520 COMMIT WORK;
10521 END IF;
10522
10523 EXCEPTION
10524 WHEN OTHERS THEN
10525 IF FND_API.To_Boolean(p_commit) THEN
10526 ROLLBACK TO Update_Page_PUB;
10527 END IF;
10528 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10529
10530 IF l_page_id IS NULL THEN
10531 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPageFound';
10532 ELSE
10533 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10534 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10535 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10536 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10537 FND_MSG_PUB.Add;
10538 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10539 ,p_count => x_msg_count
10540 ,p_data => x_msg_data);
10541
10542 END IF;
10543
10544 END Update_Page;
10545
10546 ----------------------------------------------------------------------
10547
10548 PROCEDURE Delete_Page (
10549 p_api_version IN NUMBER
10550 ,p_page_id IN NUMBER
10551 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10552 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10553 ,x_return_status OUT NOCOPY VARCHAR2
10554 ,x_errorcode OUT NOCOPY NUMBER
10555 ,x_msg_count OUT NOCOPY NUMBER
10556 ,x_msg_data OUT NOCOPY VARCHAR2
10557 ) IS
10558
10559 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Page';
10560
10561 --we don't use l_api_version yet, but eventually we might:
10562 --if we change required parameters, version goes FROM n.x to (n+1).x
10563 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10564 l_api_version CONSTANT NUMBER := 1.0;
10565
10566 BEGIN
10567
10568 -- Standard start of API savepoint
10569 IF FND_API.To_Boolean(p_commit) THEN
10570 SAVEPOINT Delete_Page_PUB;
10571 END IF;
10572
10573 -- Check for call compatibility
10574 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10575 l_api_name, G_PKG_NAME)
10576 THEN
10577 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10578 END IF;
10579 -- Initialize message list even though we don't currently use it
10580 IF FND_API.To_Boolean(p_init_msg_list) THEN
10581 FND_MSG_PUB.Initialize;
10582 END IF;
10583
10584 DELETE FROM EGO_PAGE_ENTRIES_B
10585 WHERE PAGE_ID = p_page_id;
10586
10587 DELETE FROM EGO_PAGES_B
10588 WHERE PAGE_ID = p_page_id;
10589
10590 DELETE FROM EGO_PAGES_TL
10591 WHERE PAGE_ID = p_page_id;
10592
10593 -- Standard check of p_commit
10594 IF FND_API.To_Boolean(p_commit) THEN
10595 COMMIT WORK;
10596 END IF;
10597
10598 x_return_status := FND_API.G_RET_STS_SUCCESS;
10599
10600 EXCEPTION
10601 WHEN OTHERS THEN
10602 IF FND_API.To_Boolean(p_commit) THEN
10603 ROLLBACK TO Delete_Page_PUB;
10604 END IF;
10605 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10606
10607 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10608 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10609 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10610 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10611 FND_MSG_PUB.Add;
10612 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10613 ,p_count => x_msg_count
10614 ,p_data => x_msg_data);
10615
10616
10617 END Delete_Page;
10618
10619 ----------------------------------------------------------------------
10620
10621 PROCEDURE Delete_Page (
10622 p_api_version IN NUMBER
10623 ,p_object_id IN NUMBER
10624 ,p_classification_code IN VARCHAR2
10625 ,p_internal_name IN VARCHAR2
10626 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10627 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10628 ,x_return_status OUT NOCOPY VARCHAR2
10629 ,x_errorcode OUT NOCOPY NUMBER
10630 ,x_msg_count OUT NOCOPY NUMBER
10631 ,x_msg_data OUT NOCOPY VARCHAR2
10632 ) IS
10633
10634 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Page';
10635
10636 l_page_id NUMBER;
10637
10638 BEGIN
10639
10640 -- Standard start of API savepoint
10641 IF FND_API.To_Boolean(p_commit) THEN
10642 SAVEPOINT Delete_Page_PUB;
10643 END IF;
10644
10645 l_page_id := Get_Page_Id_From_PKs(p_object_id
10646 ,p_classification_code
10647 ,p_internal_name);
10648 IF l_page_id IS NULL THEN
10649 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10650 END IF;
10651
10652 EGO_EXT_FWK_PUB.Delete_Page(
10653 p_api_version => p_api_version
10654 ,p_page_id => l_page_id
10655 ,p_init_msg_list => p_init_msg_list
10656 ,p_commit => p_commit
10657 ,x_return_status => x_return_status
10658 ,x_errorcode => x_errorcode
10659 ,x_msg_count => x_msg_count
10660 ,x_msg_data => x_msg_data
10661 );
10662
10663 -- Standard check of p_commit
10664 IF FND_API.To_Boolean(p_commit) THEN
10665 COMMIT WORK;
10666 END IF;
10667
10668 EXCEPTION
10669 WHEN OTHERS THEN
10670 IF FND_API.To_Boolean(p_commit) THEN
10671 ROLLBACK TO Delete_Page_PUB;
10672 END IF;
10673 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10674
10675 IF l_page_id IS NULL THEN
10676 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPageFound';
10677 ELSE
10678 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10679 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10680 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10681 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10682 FND_MSG_PUB.Add;
10683 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10684 ,p_count => x_msg_count
10685 ,p_data => x_msg_data);
10686
10687 END IF;
10688
10689 END Delete_Page;
10690
10691 ----------------------------------------------------------------------
10692
10693 -- A "group by" function for SQL queries
10694 FUNCTION Group_Page_Regions (
10695 p_association_id IN NUMBER
10696 ,p_object_id IN NUMBER
10697 ,p_object_name IN VARCHAR2
10698 ,p_classification_code IN VARCHAR2
10699 ,p_data_level IN VARCHAR2
10700 ,p_application_id IN NUMBER
10701 ,p_attr_group_type IN VARCHAR2
10702 ,p_attr_group_name IN VARCHAR2
10703 ,p_attr_group_disp_name IN VARCHAR2
10704 ,p_attr_group_description IN VARCHAR2
10705 ,p_enabled_code IN VARCHAR2
10706 )
10707 RETURN VARCHAR2
10708 IS
10709
10710 l_page_region_disp_name VARCHAR2(240);
10711 l_page_region_list VARCHAR2(4000) := '';/* Increased the length from 2400 to 4000*/
10712
10713 /*Changed the query for performance reason
10714 CURSOR page_region_csr (cp_association_id IN NUMBER) IS
10715 SELECT PAGE_DISPLAY_NAME
10716 FROM EGO_PAGE_ENTRIES_V
10717 WHERE ASSOCIATION_ID = cp_association_id;*/
10718
10719
10720 CURSOR page_region_csr (cp_association_id IN NUMBER) IS
10721 select display_name PAGE_DISPLAY_NAME from ego_pages_v
10722 where page_id in (select page_id from ego_page_entries_b
10723 where ASSOCIATION_ID = cp_association_id);
10724
10725
10726 BEGIN
10727
10728 FOR page_region_rec IN page_region_csr(p_association_id)
10729 LOOP
10730 l_page_region_list := l_page_region_list || page_region_rec.PAGE_DISPLAY_NAME || ', ';
10731 END LOOP;
10732
10733 --Joseph : We need to Keep LENGTHB instead of LENGTH for Multi-Byte Language Support.
10734 IF (LENGTHB(l_page_region_list) > 0) THEN
10735 -- strip off the trailing ', '
10736 l_page_region_list := SUBSTRB(l_page_region_list, 1, LENGTHB(l_page_region_list) - LENGTHB(', '));
10737 ELSE
10738 l_page_region_list := NULL;
10739 END IF;
10740 RETURN l_page_region_list;
10741
10742 END;
10743
10744 ----------------------------------------------------------------------
10745
10746 ---------------------
10747 -- Page Entry APIs --
10748 ---------------------
10749
10750 ----------------------------------------------------------------------
10751
10752 PROCEDURE Create_Page_Entry (
10753 p_api_version IN NUMBER
10754 ,p_page_id IN NUMBER
10755 ,p_association_id IN NUMBER
10756 ,p_sequence IN NUMBER
10757 ,p_classification_code IN VARCHAR2
10758 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10759 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10760 ,x_return_status OUT NOCOPY VARCHAR2
10761 ,x_errorcode OUT NOCOPY NUMBER
10762 ,x_msg_count OUT NOCOPY NUMBER
10763 ,x_msg_data OUT NOCOPY VARCHAR2
10764 ) IS
10765
10766 l_api_name CONSTANT VARCHAR2(30) := 'Create_Page_Entry';
10767
10768 --we don't use l_api_version yet, but eventually we might:
10769 --if we change required parameters, version goes FROM n.x to (n+1).x
10770 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10771 l_api_version CONSTANT NUMBER := 1.0;
10772
10773 l_Sysdate DATE := Sysdate;
10774
10775 BEGIN
10776
10777 -- Standard start of API savepoint
10778 IF FND_API.To_Boolean(p_commit) THEN
10779 SAVEPOINT Create_Page_Entry_PUB;
10780 END IF;
10781
10782 -- Check for call compatibility
10783 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10784 l_api_name, G_PKG_NAME)
10785 THEN
10786 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10787 END IF;
10788 -- Initialize message list even though we don't currently use it
10789 IF FND_API.To_Boolean(p_init_msg_list) THEN
10790 FND_MSG_PUB.Initialize;
10791 END IF;
10792
10793 INSERT INTO EGO_PAGE_ENTRIES_B
10794 (
10795 PAGE_ID
10796 ,ASSOCIATION_ID
10797 ,SEQUENCE
10798 ,CLASSIFICATION_CODE
10799 ,CREATION_DATE
10800 ,CREATED_BY
10801 ,LAST_UPDATE_DATE
10802 ,LAST_UPDATED_BY
10803 ,LAST_UPDATE_LOGIN
10804 )
10805 VALUES
10806 (
10807 p_page_id
10808 ,p_association_id
10809 ,p_sequence
10810 ,p_classification_code
10811 ,l_Sysdate
10812 ,g_current_user_id
10813 ,l_Sysdate
10814 ,g_current_user_id
10815 ,g_current_login_id
10816 );
10817
10818 -- Standard check of p_commit
10819 IF FND_API.To_Boolean(p_commit) THEN
10820 COMMIT WORK;
10821 END IF;
10822
10823 x_return_status := FND_API.G_RET_STS_SUCCESS;
10824
10825 EXCEPTION
10826 WHEN DUP_VAL_ON_INDEX THEN
10827 IF FND_API.To_Boolean(p_commit) THEN
10828 ROLLBACK TO Create_Page_Entry_PUB;
10829 END IF;
10830 x_return_status := FND_API.G_RET_STS_ERROR;
10831 DECLARE
10832 l_ag_disp_name VARCHAR2(80);
10833 l_page_disp_name VARCHAR2(240);
10834 l_class_meaning VARCHAR2(1000);
10835 BEGIN
10836 SELECT A.ATTR_GROUP_DISP_NAME
10837 ,PE.PAGE_DISPLAY_NAME
10838 ,EGO_EXT_FWK_PUB.Get_Class_Meaning(A.OBJECT_ID, PE.CLASSIFICATION_CODE)
10839 INTO l_ag_disp_name
10840 ,l_page_disp_name
10841 ,l_class_meaning
10842 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V A,
10843 EGO_PAGE_ENTRIES_V PE
10844 WHERE A.ASSOCIATION_ID = PE.ASSOCIATION_ID
10845 AND PE.PAGE_ID = p_page_id
10846 AND PE.ASSOCIATION_ID = p_association_id;
10847
10848 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_ALREADY_IN_PAGE');
10849 FND_MESSAGE.Set_Token('AG_NAME', l_ag_disp_name);
10850 FND_MESSAGE.Set_Token('PAGE_NAME', l_page_disp_name);
10851 FND_MESSAGE.Set_Token('CLASS_MEANING', l_class_meaning);
10852 FND_MSG_PUB.Add;
10853 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10854 ,p_count => x_msg_count
10855 ,p_data => x_msg_data);
10856 --ego_ef_test_pub.insert_into_ego_err_msgs(x_msg_data);
10857 ------------------------------------------------------------------
10858 -- If anything went wrong with our user-friend error reporting, --
10859 -- just resort to the unexpected error reporting behavior. --
10860 ------------------------------------------------------------------
10861 EXCEPTION
10862 WHEN OTHERS THEN
10863 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10864
10865 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10866 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10867 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10868 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10869 FND_MSG_PUB.Add;
10870 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10871 ,p_count => x_msg_count
10872 ,p_data => x_msg_data);
10873 END;
10874
10875 WHEN OTHERS THEN
10876 IF FND_API.To_Boolean(p_commit) THEN
10877 ROLLBACK TO Create_Page_Entry_PUB;
10878 END IF;
10879 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10880
10881 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10882 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10883 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10884 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10885 FND_MSG_PUB.Add;
10886 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10887 ,p_count => x_msg_count
10888 ,p_data => x_msg_data);
10889
10890
10891 END Create_Page_Entry;
10892
10893 ----------------------------------------------------------------------
10894
10895 PROCEDURE Update_Page_Entry (
10896 p_api_version IN NUMBER
10897 ,p_page_id IN NUMBER
10898 ,p_new_association_id IN NUMBER --2995435: Doesnt update association id
10899 ,p_old_association_id IN NUMBER --2995435: Doesnt update association id
10900 ,p_sequence IN NUMBER
10901 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10902 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10903 ,x_return_status OUT NOCOPY VARCHAR2
10904 ,x_errorcode OUT NOCOPY NUMBER
10905 ,x_msg_count OUT NOCOPY NUMBER
10906 ,x_msg_data OUT NOCOPY VARCHAR2
10907 ) IS
10908
10909 l_api_name CONSTANT VARCHAR2(30) := 'Update_Page_Entry';
10910
10911 --we don't use l_api_version yet, but eventually we might:
10912 --if we change required parameters, version goes FROM n.x to (n+1).x
10913 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10914 l_api_version CONSTANT NUMBER := 1.0;
10915
10916 l_Sysdate DATE := Sysdate;
10917
10918 BEGIN
10919
10920 -- Standard start of API savepoint
10921 IF FND_API.To_Boolean(p_commit) THEN
10922 SAVEPOINT Update_Page_Entry_PUB;
10923 END IF;
10924
10925 -- Check for call compatibility
10926 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10927 l_api_name, G_PKG_NAME)
10928 THEN
10929 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10930 END IF;
10931 -- Initialize message list even though we don't currently use it
10932 IF FND_API.To_Boolean(p_init_msg_list) THEN
10933 FND_MSG_PUB.Initialize;
10934 END IF;
10935
10936 UPDATE EGO_PAGE_ENTRIES_B
10937 SET SEQUENCE = p_sequence,
10938 ASSOCIATION_ID = p_new_association_id, --2995435: Doesnt update association id
10939 LAST_UPDATED_BY = g_current_user_id,
10940 LAST_UPDATE_DATE = l_Sysdate,
10941 LAST_UPDATE_LOGIN = g_current_login_id
10942 WHERE PAGE_ID = p_page_id
10943 AND ASSOCIATION_ID = p_old_association_id;
10944
10945 -- Standard check of p_commit
10946 IF FND_API.To_Boolean(p_commit) THEN
10947 COMMIT WORK;
10948 END IF;
10949
10950 x_return_status := FND_API.G_RET_STS_SUCCESS;
10951
10952 EXCEPTION
10953 WHEN DUP_VAL_ON_INDEX THEN
10954 IF FND_API.To_Boolean(p_commit) THEN
10955 ROLLBACK TO Update_Page_Entry_PUB;
10956 END IF;
10957 x_return_status := FND_API.G_RET_STS_ERROR;
10958 DECLARE
10959 l_ag_disp_name VARCHAR2(80);
10960 l_page_disp_name VARCHAR2(240);
10961 l_class_meaning VARCHAR2(1000);
10962 BEGIN
10963 SELECT A.ATTR_GROUP_DISP_NAME
10964 ,PE.PAGE_DISPLAY_NAME
10965 ,EGO_EXT_FWK_PUB.Get_Class_Meaning(A.OBJECT_ID, PE.CLASSIFICATION_CODE)
10966 INTO l_ag_disp_name
10967 ,l_page_disp_name
10968 ,l_class_meaning
10969 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V A,
10970 EGO_PAGE_ENTRIES_V PE
10971 WHERE A.ASSOCIATION_ID = PE.ASSOCIATION_ID
10972 AND PE.PAGE_ID = p_page_id
10973 AND PE.ASSOCIATION_ID = p_new_association_id;
10974
10975 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_ALREADY_IN_PAGE');
10976 FND_MESSAGE.Set_Token('AG_NAME', l_ag_disp_name);
10977 FND_MESSAGE.Set_Token('PAGE_NAME', l_page_disp_name);
10978 FND_MESSAGE.Set_Token('CLASS_MEANING', l_class_meaning);
10979 FND_MSG_PUB.Add;
10980 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10981 ,p_count => x_msg_count
10982 ,p_data => x_msg_data);
10983
10984 ------------------------------------------------------------------
10985 -- If anything went wrong with our user-friend error reporting, --
10986 -- just resort to the unexpected error reporting behavior. --
10987 ------------------------------------------------------------------
10988 EXCEPTION
10989 WHEN OTHERS THEN
10990 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10991
10992 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10993 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10994 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10995 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10996 FND_MSG_PUB.Add;
10997 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10998 ,p_count => x_msg_count
10999 ,p_data => x_msg_data);
11000 END;
11001
11002 WHEN OTHERS THEN
11003 IF FND_API.To_Boolean(p_commit) THEN
11004 ROLLBACK TO Update_Page_Entry_PUB;
11005 END IF;
11006 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11007
11008 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11009 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11010 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11011 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11012 FND_MSG_PUB.Add;
11013 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11014 ,p_count => x_msg_count
11015 ,p_data => x_msg_data);
11016
11017
11018 END Update_Page_Entry;
11019
11020 ----------------------------------------------------------------------
11021
11022 PROCEDURE Delete_Page_Entry (
11023 p_api_version IN NUMBER
11024 ,p_page_id IN NUMBER
11025 ,p_association_id IN NUMBER
11026 ,p_classification_code IN VARCHAR2
11027 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11028 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11029 ,x_return_status OUT NOCOPY VARCHAR2
11030 ,x_errorcode OUT NOCOPY NUMBER
11031 ,x_msg_count OUT NOCOPY NUMBER
11032 ,x_msg_data OUT NOCOPY VARCHAR2
11033 ) IS
11034
11035 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Page_Entry';
11036
11037 --we don't use l_api_version yet, but eventually we might:
11038 --if we change required parameters, version goes FROM n.x to (n+1).x
11039 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11040 l_api_version CONSTANT NUMBER := 1.0;
11041
11042 BEGIN
11043
11044 -- Standard start of API savepoint
11045 IF FND_API.To_Boolean(p_commit) THEN
11046 SAVEPOINT Delete_Page_Entry_PUB;
11047 END IF;
11048
11049 -- Check for call compatibility
11050 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11051 l_api_name, G_PKG_NAME)
11052 THEN
11053 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11054 END IF;
11055 -- Initialize message list even though we don't currently use it
11056 IF FND_API.To_Boolean(p_init_msg_list) THEN
11057 FND_MSG_PUB.Initialize;
11058 END IF;
11059
11060 --Bug 3871440
11061 DELETE FROM EGO_PAGE_ENTRIES_B
11062 WHERE PAGE_ID = p_page_id
11063 AND ASSOCIATION_ID = p_association_id
11064 AND CLASSIFICATION_CODE = p_classification_code;
11065
11066 -- Standard check of p_commit
11067 IF FND_API.To_Boolean(p_commit) THEN
11068 COMMIT WORK;
11069 END IF;
11070
11071 x_return_status := FND_API.G_RET_STS_SUCCESS;
11072
11073 EXCEPTION
11074 WHEN OTHERS THEN
11075 IF FND_API.To_Boolean(p_commit) THEN
11076 ROLLBACK TO Delete_Page_Entry_PUB;
11077 END IF;
11078 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11079
11080 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11081 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11082 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11083 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11084 FND_MSG_PUB.Add;
11085 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11086 ,p_count => x_msg_count
11087 ,p_data => x_msg_data);
11088
11089
11090 END Delete_Page_Entry;
11091
11092 ----------------------------------------------------------------------
11093
11094 -------------------
11095 -- Function APIs --
11096 -------------------
11097
11098 ----------------------------------------------------------------------
11099
11100 PROCEDURE Create_Function (
11101 p_api_version IN NUMBER
11102 ,p_internal_name IN VARCHAR2
11103 ,p_function_type IN VARCHAR2
11104 ,p_function_info_1 IN VARCHAR2
11105 ,p_function_info_2 IN VARCHAR2
11106 ,p_display_name IN VARCHAR2
11107 ,p_description IN VARCHAR2
11108 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11109 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11110 ,x_function_id OUT NOCOPY NUMBER
11111 ,x_return_status OUT NOCOPY VARCHAR2
11112 ,x_errorcode OUT NOCOPY NUMBER
11113 ,x_msg_count OUT NOCOPY NUMBER
11114 ,x_msg_data OUT NOCOPY VARCHAR2
11115 ) IS
11116
11117 l_api_name CONSTANT VARCHAR2(30) := 'Create_Function';
11118
11119 --we don't use l_api_version yet, but eventually we might:
11120 --if we change required parameters, version goes FROM n.x to (n+1).x
11121 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11122 l_api_version CONSTANT NUMBER := 1.0;
11123
11124 l_Sysdate DATE := Sysdate;
11125
11126 BEGIN
11127
11128 -- Standard start of API savepoint
11129 IF FND_API.To_Boolean(p_commit) THEN
11130 SAVEPOINT Create_Function_PUB;
11131 END IF;
11132
11133 -- Check for call compatibility
11134 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11135 l_api_name, G_PKG_NAME)
11136 THEN
11137 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11138 END IF;
11139 -- Initialize message list even though we don't currently use it
11140 IF FND_API.To_Boolean(p_init_msg_list) THEN
11141 FND_MSG_PUB.Initialize;
11142 END IF;
11143
11144 SELECT EGO_FUNCTIONS_S.NEXTVAL INTO x_function_id FROM DUAL;
11145
11146 INSERT INTO EGO_FUNCTIONS_B
11147 (
11148 FUNCTION_ID
11149 ,INTERNAL_NAME
11150 ,FUNCTION_TYPE
11151 ,FUNCTION_INFO_1
11152 ,FUNCTION_INFO_2
11153 ,LAST_UPDATE_DATE
11154 ,LAST_UPDATED_BY
11155 ,CREATION_DATE
11156 ,CREATED_BY
11157 ,LAST_UPDATE_LOGIN
11158 )
11159 VALUES
11160 (
11161 x_function_id
11162 ,p_internal_name
11163 ,p_function_type
11164 ,p_FUNCTION_INFO_1
11165 ,p_FUNCTION_INFO_2
11166 ,l_Sysdate
11167 ,g_current_user_id
11168 ,l_Sysdate
11169 ,g_current_user_id
11170 ,g_current_login_id
11171 );
11172
11173 INSERT INTO EGO_FUNCTIONS_TL
11174 (
11175 FUNCTION_ID
11176 ,DISPLAY_NAME
11177 ,DESCRIPTION
11178 ,LANGUAGE
11179 ,SOURCE_LANG
11180 ,LAST_UPDATE_DATE
11181 ,LAST_UPDATED_BY
11182 ,CREATION_DATE
11183 ,CREATED_BY
11184 ,LAST_UPDATE_LOGIN
11185 )
11186 SELECT
11187 x_function_id
11188 ,p_display_name
11189 ,p_description
11190 ,L.LANGUAGE_CODE
11191 ,USERENV('LANG')
11192 ,l_Sysdate
11193 ,g_current_user_id
11194 ,l_Sysdate
11195 ,g_current_user_id
11196 ,g_current_login_id
11197 FROM FND_LANGUAGES L
11198 WHERE L.INSTALLED_FLAG in ('I', 'B');
11199
11200 -- Standard check of p_commit
11201 IF FND_API.To_Boolean(p_commit) THEN
11202 COMMIT WORK;
11203 END IF;
11204
11205 x_return_status := FND_API.G_RET_STS_SUCCESS;
11206
11207 EXCEPTION
11208 WHEN OTHERS THEN
11209 IF FND_API.To_Boolean(p_commit) THEN
11210 ROLLBACK TO Create_Function_PUB;
11211 END IF;
11212 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11213
11214 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11215 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11216 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11217 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11218 FND_MSG_PUB.Add;
11219 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11220 ,p_count => x_msg_count
11221 ,p_data => x_msg_data);
11222
11223
11224 END Create_Function;
11225
11226 ----------------------------------------------------------------------
11227
11228 PROCEDURE Update_Function (
11229 p_api_version IN NUMBER
11230 ,p_function_id IN NUMBER
11231 ,p_internal_name IN VARCHAR2
11232 ,p_function_info_1 IN VARCHAR2
11233 ,p_function_info_2 IN VARCHAR2
11234 ,p_display_name IN VARCHAR2
11235 ,p_description IN VARCHAR2
11236 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11237 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11238 ,x_return_status OUT NOCOPY VARCHAR2
11239 ,x_errorcode OUT NOCOPY NUMBER
11240 ,x_msg_count OUT NOCOPY NUMBER
11241 ,x_msg_data OUT NOCOPY VARCHAR2
11242 ) IS
11243
11244 l_api_name CONSTANT VARCHAR2(30) := 'Update_Function';
11245
11246 --we don't use l_api_version yet, but eventually we might:
11247 --if we change required parameters, version goes FROM n.x to (n+1).x
11248 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11249 l_api_version CONSTANT NUMBER := 1.0;
11250
11251 l_Sysdate DATE := Sysdate;
11252
11253 BEGIN
11254
11255 -- Standard start of API savepoint
11256 IF FND_API.To_Boolean(p_commit) THEN
11257 SAVEPOINT Update_Function_PUB;
11258 END IF;
11259
11260 -- Check for call compatibility
11261 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11262 l_api_name, G_PKG_NAME)
11263 THEN
11264 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11265 END IF;
11266 -- Initialize message list even though we don't currently use it
11267 IF FND_API.To_Boolean(p_init_msg_list) THEN
11268 FND_MSG_PUB.Initialize;
11269 END IF;
11270
11271 UPDATE EGO_FUNCTIONS_B
11272 SET
11273 INTERNAL_NAME = p_internal_name
11274 , FUNCTION_INFO_1 = p_FUNCTION_INFO_1
11275 , FUNCTION_INFO_2 = p_FUNCTION_INFO_2
11276 , LAST_UPDATE_DATE = l_Sysdate
11277 , LAST_UPDATED_BY = g_current_user_id
11278 , LAST_UPDATE_LOGIN = g_current_login_id
11279
11280 WHERE
11281 FUNCTION_ID = p_function_id;
11282
11283 UPDATE EGO_FUNCTIONS_TL
11284 SET
11285 DISPLAY_NAME = p_display_name
11286 , DESCRIPTION = p_description
11287 , LAST_UPDATE_DATE = l_Sysdate
11288 , LAST_UPDATED_BY = g_current_user_id
11289 , LAST_UPDATE_LOGIN = g_current_login_id
11290 , SOURCE_LANG = USERENV('LANG')
11291 WHERE
11292 -- FUNCTION_ID = p_function_id AND LANGUAGE = USERENV('LANG');
11293 FUNCTION_ID = p_function_id AND USERENV('LANG') IN (LANGUAGE ,SOURCE_LANG );
11294
11295 -- Standard check of p_commit
11296 IF FND_API.To_Boolean(p_commit) THEN
11297 COMMIT WORK;
11298 END IF;
11299
11300 x_return_status := FND_API.G_RET_STS_SUCCESS;
11301
11302 EXCEPTION
11303 WHEN OTHERS THEN
11304 IF FND_API.To_Boolean(p_commit) THEN
11305 ROLLBACK TO Update_Function_PUB;
11306 END IF;
11307 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11308
11309 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11310 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11311 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11312 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11313 FND_MSG_PUB.Add;
11314 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11315 ,p_count => x_msg_count
11316 ,p_data => x_msg_data);
11317
11318
11319 END Update_Function;
11320
11321 ----------------------------------------------------------------------
11322
11323 PROCEDURE Delete_Function (
11324 p_api_version IN NUMBER
11325 ,p_function_id IN NUMBER
11326 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11327 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11328 ,x_return_status OUT NOCOPY VARCHAR2
11329 ,x_errorcode OUT NOCOPY NUMBER
11330 ,x_msg_count OUT NOCOPY NUMBER
11331 ,x_msg_data OUT NOCOPY VARCHAR2
11332 ) IS
11333
11334 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Function';
11335
11336 --we don't use l_api_version yet, but eventually we might:
11337 --if we change required parameters, version goes FROM n.x to (n+1).x
11338 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11339 l_api_version CONSTANT NUMBER := 1.0;
11340
11341 l_function_use_count NUMBER;
11342 l_delete_error_flag VARCHAR2(1) := 'N';
11343 l_Sysdate DATE := Sysdate;
11344
11345 BEGIN
11346
11347 -- Standard start of API savepoint
11348 IF FND_API.To_Boolean(p_commit) THEN
11349 SAVEPOINT Delete_Function_PUB;
11350 END IF;
11351
11352 -- Check for call compatibility
11353 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11354 l_api_name, G_PKG_NAME)
11355 THEN
11356 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11357 END IF;
11358 -- Initialize message list even though we don't currently use it
11359 IF FND_API.To_Boolean(p_init_msg_list) THEN
11360 FND_MSG_PUB.Initialize;
11361 END IF;
11362
11363 -- If a Function is in use by any Actions, it cannot be deleted.
11364 -- We check function_id, prompt_function_id and visibility_func_id
11365 -- to make sure the Function we're trying to delete isn't in use.
11366
11367 SELECT count(*)
11368 INTO l_function_use_count
11369 FROM EGO_ACTIONS_B
11370 WHERE FUNCTION_ID = p_function_id;
11371 IF (l_function_use_count > 0)
11372 THEN
11373 l_delete_error_flag := 'Y';
11374 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11375 END IF;
11376
11377 SELECT count(*)
11378 INTO l_function_use_count
11379 FROM EGO_ACTION_DISPLAYS_B
11380 WHERE PROMPT_FUNCTION_ID = p_function_id;
11381 IF (l_function_use_count > 0)
11382 THEN
11383 l_delete_error_flag := 'Y';
11384 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11385 END IF;
11386
11387 SELECT count(*)
11388 INTO l_function_use_count
11389 FROM EGO_ACTION_DISPLAYS_B
11390 WHERE VISIBILITY_FUNC_ID = p_function_id;
11391 IF (l_function_use_count > 0)
11392 THEN
11393 l_delete_error_flag := 'Y';
11394 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11395 END IF;
11396
11397 DELETE FROM EGO_FUNCTIONS_B
11398 WHERE
11399 FUNCTION_ID = p_function_id;
11400
11401 DELETE FROM EGO_FUNCTIONS_TL
11402 WHERE
11403 FUNCTION_ID = p_function_id;
11404
11405 -- Standard check of p_commit
11406 IF FND_API.To_Boolean(p_commit) THEN
11407 COMMIT WORK;
11408 END IF;
11409
11410 x_return_status := FND_API.G_RET_STS_SUCCESS;
11411
11412 EXCEPTION
11413 WHEN OTHERS THEN
11414 IF FND_API.To_Boolean(p_commit) THEN
11415 ROLLBACK TO Delete_Function_PUB;
11416 END IF;
11417 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11418
11419 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11420 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11421 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11422 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11423 FND_MSG_PUB.Add;
11424 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11425 ,p_count => x_msg_count
11426 ,p_data => x_msg_data);
11427
11428
11429 IF (l_delete_error_flag = 'Y') THEN
11430 -- Let the calling API know that this Function is being used
11431 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' FunctionInUse';
11432 END IF;
11433
11434 END Delete_Function;
11435
11436 ----------------------------------------------------------------------
11437
11438 ------------------------------------
11439 -- Action AND Action Display APIs --
11440 ------------------------------------
11441
11442 ----------------------------------------------------------------------
11443
11444 PROCEDURE Create_Action (
11445 p_api_version IN NUMBER
11446 ,p_object_id IN NUMBER
11447 ,p_classification_code IN VARCHAR2
11448 ,p_attr_group_id IN NUMBER DEFAULT NULL
11449 ,p_sequence IN NUMBER
11450 ,p_action_name IN VARCHAR2
11451 ,p_description IN VARCHAR2
11452 ,p_function_id IN NUMBER
11453 ,p_enable_key_attrs IN VARCHAR2 DEFAULT NULL
11454 ,p_security_privilege_id IN NUMBER
11455 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11456 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11457 ,x_action_id OUT NOCOPY NUMBER
11458 ,x_return_status OUT NOCOPY VARCHAR2
11459 ,x_errorcode OUT NOCOPY NUMBER
11460 ,x_msg_count OUT NOCOPY NUMBER
11461 ,x_msg_data OUT NOCOPY VARCHAR2
11462 ) IS
11463
11464 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action';
11465
11466 --we don't use l_api_version yet, but eventually we might:
11467 --if we change required parameters, version goes FROM n.x to (n+1).x
11468 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11469 l_api_version CONSTANT NUMBER := 1.0;
11470
11471 l_Sysdate DATE := Sysdate;
11472 l_validate NUMBER;
11473
11474 e_dup_action_seq_error EXCEPTION;
11475 e_dup_action_name_error EXCEPTION;
11476
11477 BEGIN
11478
11479 -- Standard start of API savepoint
11480 IF FND_API.To_Boolean(p_commit) THEN
11481 SAVEPOINT Create_Action_PUB;
11482 END IF;
11483
11484 -- Check for call compatibility
11485 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11486 l_api_name, G_PKG_NAME)
11487 THEN
11488 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11489 END IF;
11490 -- Initialize message list even though we don't currently use it
11491 IF FND_API.To_Boolean(p_init_msg_list) THEN
11492 FND_MSG_PUB.Initialize;
11493 END IF;
11494
11495 SELECT EGO_ACTIONS_S.NEXTVAL INTO x_action_id FROM DUAL;
11496
11497 -- Ensure created action's name or sequence number do not
11498 -- match those of an action already associated with the
11499 -- classification/attribute pair.
11500
11501 -- Validate sequence
11502 SELECT COUNT(*)
11503 INTO l_validate
11504 FROM EGO_ACTIONS_B
11505 WHERE SEQUENCE = p_sequence
11506 AND OBJECT_ID = p_object_id
11507 AND CLASSIFICATION_CODE = p_classification_code
11508 AND ATTR_GROUP_ID = p_attr_group_id;
11509
11510 IF (l_validate > 0) THEN
11511 RAISE e_dup_action_seq_error;
11512 END IF;
11513
11514 -- Validate name
11515 SELECT COUNT(*)
11516 INTO l_validate
11517 FROM EGO_ACTIONS_B
11518 WHERE ACTION_NAME = p_action_name
11519 AND OBJECT_ID = p_object_id
11520 AND CLASSIFICATION_CODE = p_classification_code
11521 AND ATTR_GROUP_ID = p_attr_group_id;
11522
11523 IF (l_validate > 0) THEN
11524 RAISE e_dup_action_name_error;
11525 END IF;
11526
11527
11528 INSERT INTO EGO_ACTIONS_B
11529 (
11530 ACTION_ID
11531 ,OBJECT_ID
11532 ,CLASSIFICATION_CODE
11533 ,ATTR_GROUP_ID
11534 ,SEQUENCE
11535 ,ACTION_NAME
11536 ,FUNCTION_ID
11537 ,ENABLE_KEY_ATTRIBUTES
11538 ,SECURITY_PRIVILEGE_ID
11539 ,LAST_UPDATE_DATE
11540 ,LAST_UPDATED_BY
11541 ,CREATION_DATE
11542 ,CREATED_BY
11543 ,LAST_UPDATE_LOGIN
11544 )
11545 VALUES
11546 (
11547 x_action_id
11548 ,p_object_id
11549 ,p_classification_code
11550 ,p_attr_group_id
11551 ,p_sequence
11552 ,p_action_name
11553 ,p_function_id
11554 ,p_enable_key_attrs
11555 ,p_security_privilege_id
11556 ,l_Sysdate
11557 ,g_current_user_id
11558 ,l_Sysdate
11559 ,g_current_user_id
11560 ,g_current_login_id
11561 );
11562
11563 INSERT INTO EGO_ACTIONS_TL
11564 (
11565 ACTION_ID
11566 ,DESCRIPTION
11567 ,LANGUAGE
11568 ,SOURCE_LANG
11569 ,LAST_UPDATE_DATE
11570 ,LAST_UPDATED_BY
11571 ,CREATION_DATE
11572 ,CREATED_BY
11573 ,LAST_UPDATE_LOGIN
11574 )
11575 SELECT
11576 x_action_id
11577 ,p_description
11578 ,L.LANGUAGE_CODE
11579 ,USERENV('LANG')
11580 ,l_Sysdate
11581 ,g_current_user_id
11582 ,l_Sysdate
11583 ,g_current_user_id
11584 ,g_current_login_id
11585
11586 FROM FND_LANGUAGES L
11587 WHERE L.INSTALLED_FLAG in ('I', 'B');
11588
11589 -- Standard check of p_commit
11590 IF FND_API.To_Boolean(p_commit) THEN
11591 COMMIT WORK;
11592 END IF;
11593
11594 x_return_status := FND_API.G_RET_STS_SUCCESS;
11595 x_errorcode := 0;
11596
11597 EXCEPTION
11598 WHEN e_dup_action_seq_error THEN
11599 IF FND_API.To_Boolean(p_commit) THEN
11600 ROLLBACK TO Create_Action_PUB;
11601 END IF;
11602 x_return_status := FND_API.G_RET_STS_ERROR;
11603 x_errorcode := 1;
11604 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ACTN_DUP_SEQ_ERR');
11605 FND_MSG_PUB.Add;
11606 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11607 ,p_count => x_msg_count
11608 ,p_data => x_msg_data);
11609
11610 WHEN e_dup_action_name_error THEN
11611 IF FND_API.To_Boolean(p_commit) THEN
11612 ROLLBACK TO Create_Action_PUB;
11613 END IF;
11614 x_return_status := FND_API.G_RET_STS_ERROR;
11615 x_errorcode := 1;
11616 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ACTN_DUP_NAME_ERR');
11617 FND_MSG_PUB.Add;
11618 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11619 ,p_count => x_msg_count
11620 ,p_data => x_msg_data);
11621
11622 WHEN OTHERS THEN
11623 IF FND_API.To_Boolean(p_commit) THEN
11624 ROLLBACK TO Create_Action_PUB;
11625 END IF;
11626 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11627 x_errorcode := 1;
11628 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11629 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11630 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11631 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11632 FND_MSG_PUB.Add;
11633 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11634 ,p_count => x_msg_count
11635 ,p_data => x_msg_data);
11636
11637
11638 END Create_Action;
11639
11640 ----------------------------------------------------------------------
11641
11642 PROCEDURE Create_Action (
11643 p_api_version IN NUMBER
11644 ,p_object_id IN NUMBER
11645 ,p_classification_code IN VARCHAR2
11646 ,p_attr_grp_application_id IN NUMBER
11647 ,p_attr_group_type IN VARCHAR2
11648 ,p_attr_group_name IN VARCHAR2
11649 ,p_sequence IN NUMBER
11650 ,p_action_name IN VARCHAR2
11651 ,p_description IN VARCHAR2
11652 ,p_function_id IN NUMBER
11653 ,p_enable_key_attrs IN VARCHAR2 DEFAULT NULL
11654 ,p_security_privilege_id IN NUMBER
11655 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11656 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11657 ,x_action_id OUT NOCOPY NUMBER
11658 ,x_return_status OUT NOCOPY VARCHAR2
11659 ,x_errorcode OUT NOCOPY NUMBER
11660 ,x_msg_count OUT NOCOPY NUMBER
11661 ,x_msg_data OUT NOCOPY VARCHAR2
11662 ) IS
11663
11664 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action';
11665
11666 l_attr_group_id NUMBER;
11667
11668 BEGIN
11669
11670 -- Standard start of API savepoint
11671 IF FND_API.To_Boolean(p_commit) THEN
11672 SAVEPOINT Create_Action_PUB;
11673 END IF;
11674
11675 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_attr_grp_application_id
11676 ,p_attr_group_type
11677 ,p_attr_group_name);
11678 IF l_attr_group_id IS NULL THEN
11679 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11680 END IF;
11681
11682 EGO_EXT_FWK_PUB.Create_Action(
11683 p_api_version => p_api_version
11684 ,p_object_id => p_object_id
11685 ,p_classification_code => p_classification_code
11686 ,p_attr_group_id => l_attr_group_id
11687 ,p_sequence => p_sequence
11688 ,p_action_name => p_action_name
11689 ,p_description => p_description
11690 ,p_function_id => p_function_id
11691 ,p_security_privilege_id => p_security_privilege_id
11692 ,p_init_msg_list => p_init_msg_list
11693 ,p_commit => p_commit
11694 ,x_action_id => x_action_id
11695 ,x_return_status => x_return_status
11696 ,x_errorcode => x_errorcode
11697 ,x_msg_count => x_msg_count
11698 ,x_msg_data => x_msg_data
11699 );
11700
11701 -- Standard check of p_commit
11702 IF FND_API.To_Boolean(p_commit) THEN
11703 COMMIT WORK;
11704 END IF;
11705
11706 EXCEPTION
11707 WHEN OTHERS THEN
11708 IF FND_API.To_Boolean(p_commit) THEN
11709 ROLLBACK TO Create_Action_PUB;
11710 END IF;
11711 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11712 x_errorcode := 1;
11713
11714 IF l_attr_group_id IS NULL THEN
11715 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupIDFoundForPKs';
11716 ELSE
11717 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11718 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11719 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11720 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11721 FND_MSG_PUB.Add;
11722 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11723 ,p_count => x_msg_count
11724 ,p_data => x_msg_data);
11725
11726 END IF;
11727
11728 END Create_Action;
11729
11730 ----------------------------------------------------------------------
11731
11732 PROCEDURE Update_Action (
11733 p_api_version IN NUMBER
11734 ,p_action_id IN NUMBER
11735 ,p_sequence IN NUMBER
11736 ,p_action_name IN VARCHAR2
11737 ,p_description IN VARCHAR2
11738 ,p_function_id IN NUMBER
11739 ,p_enable_key_attrs IN VARCHAR2 DEFAULT NULL
11740 ,p_security_privilege_id IN NUMBER
11741 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11742 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11743 ,x_return_status OUT NOCOPY VARCHAR2
11744 ,x_errorcode OUT NOCOPY NUMBER
11745 ,x_msg_count OUT NOCOPY NUMBER
11746 ,x_msg_data OUT NOCOPY VARCHAR2
11747 ) IS
11748
11749 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action';
11750
11751 --we don't use l_api_version yet, but eventually we might:
11752 --if we change required parameters, version goes FROM n.x to (n+1).x
11753 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11754 l_api_version CONSTANT NUMBER := 1.0;
11755
11756 l_Sysdate DATE := Sysdate;
11757 l_validate NUMBER;
11758 l_old_function_id NUMBER;
11759 l_mapping_count NUMBER;
11760 l_mapped_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'A';
11761 l_object_id NUMBER;
11762 l_classification_code VARCHAR2(150);
11763 l_attr_group_id NUMBER;
11764
11765 e_dup_action_seq_error EXCEPTION;
11766 e_dup_action_name_error EXCEPTION;
11767
11768 BEGIN
11769
11770 -- Standard start of API savepoint
11771 IF FND_API.To_Boolean(p_commit) THEN
11772 SAVEPOINT Update_Action_PUB;
11773 END IF;
11774
11775 -- Check for call compatibility
11776 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11777 l_api_name, G_PKG_NAME)
11778 THEN
11779 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11780 END IF;
11781 -- Initialize message list even though we don't currently use it
11782 IF FND_API.To_Boolean(p_init_msg_list) THEN
11783 FND_MSG_PUB.Initialize;
11784 END IF;
11785
11786 -- Disallow changes that duplicate a preexisting action's sequence
11787 -- number or name in the classification/attribute group association.
11788
11789 -- Retrieve type/classification/attribute group info.
11790 SELECT OBJECT_ID, CLASSIFICATION_CODE, ATTR_GROUP_ID
11791 INTO l_object_id, l_classification_code, l_attr_group_id
11792 FROM EGO_ACTIONS_B
11793 WHERE ACTION_ID = p_action_id;
11794
11795 -- Validate sequence
11796 SELECT COUNT(*)
11797 INTO l_validate
11798 FROM EGO_ACTIONS_B
11799 WHERE SEQUENCE = p_sequence
11800 AND ACTION_ID <> p_action_id
11801 AND OBJECT_ID = l_object_id
11802 AND CLASSIFICATION_CODE = l_classification_code
11803 AND ATTR_GROUP_ID = l_attr_group_id;
11804
11805 IF (l_validate > 0) THEN
11806 RAISE e_dup_action_seq_error;
11807 END IF;
11808
11809 -- Validate name
11810 SELECT COUNT(*)
11811 INTO l_validate
11812 FROM EGO_ACTIONS_B
11813 WHERE ACTION_NAME = p_action_name
11814 AND ACTION_ID <> p_action_id
11815 AND OBJECT_ID = l_object_id
11816 AND CLASSIFICATION_CODE = l_classification_code
11817 AND ATTR_GROUP_ID = l_attr_group_id;
11818
11819 IF (l_validate > 0) THEN
11820 RAISE e_dup_action_name_error;
11821 END IF;
11822
11823
11824 -- If the function_id is different and if there were
11825 -- Mappings for the old Function, we delete those Mappings.
11826
11827 SELECT FUNCTION_ID
11828 INTO l_old_function_id
11829 FROM EGO_ACTIONS_B
11830 WHERE ACTION_ID = p_action_id;
11831
11832 IF l_old_function_id <> p_function_id THEN
11833 SELECT COUNT(*)
11834 INTO l_mapping_count
11835 FROM EGO_MAPPINGS_B
11836 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11837 AND FUNCTION_ID = l_old_function_id
11838 AND MAPPED_OBJ_TYPE = l_mapped_obj_type;
11839
11840 IF (l_mapping_count > 0) THEN
11841 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_function_id,
11842 l_mapped_obj_type, p_action_id, null,
11843 null, x_return_status, x_errorcode,
11844 x_msg_count, x_msg_data);
11845 END IF;
11846 END IF;
11847
11848 UPDATE EGO_ACTIONS_B
11849 SET
11850 SEQUENCE = p_sequence
11851 , ACTION_NAME = p_action_name
11852 , FUNCTION_ID = p_function_id
11853 , SECURITY_PRIVILEGE_ID = p_security_privilege_id
11854 , LAST_UPDATE_DATE = l_Sysdate
11855 , LAST_UPDATED_BY = g_current_user_id
11856 , LAST_UPDATE_LOGIN = g_current_login_id
11857 , ENABLE_KEY_ATTRIBUTES = p_enable_key_attrs
11858 WHERE
11859 ACTION_ID = p_action_id;
11860
11861 UPDATE EGO_ACTIONS_TL
11862 SET
11863 DESCRIPTION = p_description
11864 , LAST_UPDATE_DATE = l_Sysdate
11865 , LAST_UPDATED_BY = g_current_user_id
11866 , LAST_UPDATE_LOGIN = g_current_login_id
11867 , SOURCE_LANG = USERENV('LANG')
11868 WHERE
11869 -- ACTION_ID = p_action_id AND LANGUAGE = USERENV('LANG');
11870 ACTION_ID = p_action_id AND USERENV('LANG') IN (LANGUAGE , SOURCE_LANG);
11871
11872 -- Standard check of p_commit
11873 IF FND_API.To_Boolean(p_commit) THEN
11874 COMMIT WORK;
11875 END IF;
11876
11877 x_return_status := FND_API.G_RET_STS_SUCCESS;
11878 x_errorcode := 0;
11879
11880 EXCEPTION
11881 WHEN e_dup_action_seq_error THEN
11882 IF FND_API.To_Boolean(p_commit) THEN
11883 ROLLBACK TO Update_Action_PUB;
11884 END IF;
11885 x_return_status := FND_API.G_RET_STS_ERROR;
11886 x_errorcode := 1;
11887 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_UP_ACTN_DUP_SEQ_ERR');
11888 FND_MSG_PUB.Add;
11889 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11890 ,p_count => x_msg_count
11891 ,p_data => x_msg_data);
11892
11893 WHEN e_dup_action_name_error THEN
11894 IF FND_API.To_Boolean(p_commit) THEN
11895 ROLLBACK TO Update_Action_PUB;
11896 END IF;
11897 x_return_status := FND_API.G_RET_STS_ERROR;
11898 x_errorcode := 1;
11899 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_UP_ACTN_DUP_NAME_ERR');
11900 FND_MSG_PUB.Add;
11901 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11902 ,p_count => x_msg_count
11903 ,p_data => x_msg_data);
11904
11905 WHEN OTHERS THEN
11906 IF FND_API.To_Boolean(p_commit) THEN
11907 ROLLBACK TO Update_Action_PUB;
11908 END IF;
11909 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11910
11911 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11912 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11913 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11914 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11915 FND_MSG_PUB.Add;
11916 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11917 ,p_count => x_msg_count
11918 ,p_data => x_msg_data);
11919
11920
11921 END Update_Action;
11922
11923 ----------------------------------------------------------------------
11924
11925 PROCEDURE Delete_Action (
11926 p_api_version IN NUMBER
11927 ,p_action_id IN NUMBER
11928 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11929 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11930 ,x_return_status OUT NOCOPY VARCHAR2
11931 ,x_errorcode OUT NOCOPY NUMBER
11932 ,x_msg_count OUT NOCOPY NUMBER
11933 ,x_msg_data OUT NOCOPY VARCHAR2
11934 ) IS
11935
11936 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action';
11937
11938 --we don't use l_api_version yet, but eventually we might:
11939 --if we change required parameters, version goes FROM n.x to (n+1).x
11940 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11941 l_api_version CONSTANT NUMBER := 1.0;
11942
11943 l_function_id NUMBER;
11944 l_mapping_count NUMBER;
11945 l_mapped_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'A';
11946 --R12C
11947 l_visibility_count NUMBER;
11948
11949
11950 BEGIN
11951
11952 -- Standard start of API savepoint
11953 IF FND_API.To_Boolean(p_commit) THEN
11954 SAVEPOINT Delete_Action_PUB;
11955 END IF;
11956
11957 -- Check for call compatibility
11958 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11959 l_api_name, G_PKG_NAME)
11960 THEN
11961 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11962 END IF;
11963 -- Initialize message list even though we don't currently use it
11964 IF FND_API.To_Boolean(p_init_msg_list) THEN
11965 FND_MSG_PUB.Initialize;
11966 END IF;
11967
11968 -- We get the Function ID before deleting the row so we can
11969 -- delete Mappings for the Function if necessary.
11970
11971 SELECT FUNCTION_ID
11972 INTO l_function_id
11973 FROM EGO_ACTIONS_B
11974 WHERE ACTION_ID = p_action_id;
11975
11976 DELETE FROM EGO_ACTIONS_B
11977 WHERE
11978 ACTION_ID = p_action_id;
11979
11980 DELETE FROM EGO_ACTIONS_TL
11981 WHERE
11982 ACTION_ID = p_action_id;
11983
11984 SELECT COUNT(*)
11985 INTO l_mapping_count
11986 FROM EGO_MAPPINGS_B
11987 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11988 AND FUNCTION_ID = l_function_id
11989 AND MAPPED_OBJ_TYPE = l_mapped_obj_type;
11990
11991 IF (l_mapping_count > 0) THEN
11992 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_function_id, l_mapped_obj_type,
11993 p_action_id, null, null, x_return_status,
11994 x_errorcode, x_msg_count, x_msg_data);
11995 END IF;
11996
11997 --R12C Deleting the datalevel visibility from the EGO_ACTIONS_DL table.
11998 SELECT COUNT(*)
11999 INTO l_visibility_count
12000 FROM EGO_ACTIONS_DL
12001 WHERE ACTION_ID = p_action_id;
12002 code_debug ('ENTERED THE FUCNTION Delete_Action l_visibility_count'||l_visibility_count);
12003
12004 IF (l_visibility_count > 0) THEN
12005 Delete_Action_Data_Level(p_api_version,p_action_id,null, null, x_return_status,x_errorcode, x_msg_count, x_msg_data);
12006 END IF;
12007
12008 -- Standard check of p_commit
12009 IF FND_API.To_Boolean(p_commit) THEN
12010 COMMIT WORK;
12011 END IF;
12012
12013 x_return_status := FND_API.G_RET_STS_SUCCESS;
12014
12015 EXCEPTION
12016 WHEN OTHERS THEN
12017 IF FND_API.To_Boolean(p_commit) THEN
12018 ROLLBACK TO Delete_Action_PUB;
12019 END IF;
12020 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12021
12022 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12023 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12024 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12025 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12026 FND_MSG_PUB.Add;
12027 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12028 ,p_count => x_msg_count
12029 ,p_data => x_msg_data);
12030
12031
12032 END Delete_Action;
12033
12034 ----------------------------------------------------------------------
12035 --R12C
12036 -- call this API to create an Visibilty information that is executed by a user action
12037 PROCEDURE Create_Action_Data_Level (
12038 p_api_version IN NUMBER
12039 ,p_action_id IN NUMBER
12040 ,p_data_level_id IN NUMBER
12041 ,p_visibility_flag IN VARCHAR2 DEFAULT 'Y'
12042 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12043 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12044 ,x_return_status OUT NOCOPY VARCHAR2
12045 ,x_errorcode OUT NOCOPY NUMBER
12046 ,x_msg_count OUT NOCOPY NUMBER
12047 ,x_msg_data OUT NOCOPY VARCHAR2
12048 ) IS
12049
12050 l_api_name CONSTANT VARCHAR2(30) := 'Create_Visibilty_DL';
12051
12052 --we don't use l_api_version yet, but eventually we might:
12053 --if we change required parameters, version goes FROM n.x to (n+1).x
12054 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12055 l_api_version CONSTANT NUMBER := 1.0;
12056
12057 l_Sysdate DATE := Sysdate;
12058
12059 BEGIN
12060
12061 -- Standard start of API savepoint
12062 IF FND_API.To_Boolean(p_commit) THEN
12063 SAVEPOINT Create_Visibilty_DL_PUB;
12064 END IF;
12065
12066 -- Check for call compatibility
12067 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12068 l_api_name, G_PKG_NAME)
12069 THEN
12070 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12071 END IF;
12072 -- Initialize message list even though we don't currently use it
12073 IF FND_API.To_Boolean(p_init_msg_list) THEN
12074 FND_MSG_PUB.Initialize;
12075 END IF;
12076
12077 INSERT INTO EGO_ACTIONS_DL
12078 (
12079 ACTION_ID
12080 ,DATA_LEVEL_ID
12081 ,VISIBILITY_FLAG
12082 ,LAST_UPDATE_DATE
12083 ,LAST_UPDATED_BY
12084 ,CREATION_DATE
12085 ,CREATED_BY
12086 ,LAST_UPDATE_LOGIN
12087 )
12088 VALUES
12089 (
12090 p_action_id
12091 ,p_data_level_id
12092 ,p_visibility_flag
12093 ,l_Sysdate
12094 ,g_current_user_id
12095 ,l_Sysdate
12096 ,g_current_user_id
12097 ,g_current_login_id
12098 );
12099
12100 -- Standard check of p_commit
12101 IF FND_API.To_Boolean(p_commit) THEN
12102 COMMIT WORK;
12103 END IF;
12104
12105 x_return_status := FND_API.G_RET_STS_SUCCESS;
12106
12107 EXCEPTION
12108 WHEN OTHERS THEN
12109 IF FND_API.To_Boolean(p_commit) THEN
12110 ROLLBACK TO Create_Visibilty_DL_PUB;
12111 END IF;
12112 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12113
12114 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12115 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12116 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12117 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12118 FND_MSG_PUB.Add;
12119 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12120 ,p_count => x_msg_count
12121 ,p_data => x_msg_data);
12122 END Create_Action_Data_Level;
12123
12124
12125
12126 -- call this API to create an action that is executed by a user action
12127 PROCEDURE Create_Action_Display (
12128 p_api_version IN NUMBER
12129 ,p_action_id IN NUMBER
12130 ,P_EXEC_CODE IN VARCHAR2 := 'U'
12131 ,p_display_style IN VARCHAR2
12132 ,p_prompt_application_id IN NUMBER
12133 ,p_prompt_message_name IN VARCHAR2
12134 ,p_visibility_flag IN VARCHAR2
12135 ,p_prompt_function_id IN NUMBER
12136 ,p_visibility_func_id IN NUMBER
12137 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12138 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12139 ,x_return_status OUT NOCOPY VARCHAR2
12140 ,x_errorcode OUT NOCOPY NUMBER
12141 ,x_msg_count OUT NOCOPY NUMBER
12142 ,x_msg_data OUT NOCOPY VARCHAR2
12143 ) IS
12144
12145 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Display';
12146
12147 --we don't use l_api_version yet, but eventually we might:
12148 --if we change required parameters, version goes FROM n.x to (n+1).x
12149 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12150 l_api_version CONSTANT NUMBER := 1.0;
12151
12152 l_Sysdate DATE := Sysdate;
12153
12154 BEGIN
12155
12156 -- Standard start of API savepoint
12157 IF FND_API.To_Boolean(p_commit) THEN
12158 SAVEPOINT Create_Action_Display_PUB;
12159 END IF;
12160
12161 -- Check for call compatibility
12162 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12163 l_api_name, G_PKG_NAME)
12164 THEN
12165 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12166 END IF;
12167 -- Initialize message list even though we don't currently use it
12168 IF FND_API.To_Boolean(p_init_msg_list) THEN
12169 FND_MSG_PUB.Initialize;
12170 END IF;
12171
12172 INSERT INTO EGO_ACTION_DISPLAYS_B
12173 (
12174 ACTION_ID
12175 ,EXECUTION_METHOD
12176 ,DISPLAY_STYLE
12177 ,PROMPT_APPLICATION_ID
12178 ,PROMPT_MESSAGE_NAME
12179 ,VISIBILITY_FLAG
12180 ,PROMPT_FUNCTION_ID
12181 ,VISIBILITY_FUNC_ID
12182 ,LAST_UPDATE_DATE
12183 ,LAST_UPDATED_BY
12184 ,CREATION_DATE
12185 ,CREATED_BY
12186 ,LAST_UPDATE_LOGIN
12187 )
12188 VALUES
12189 (
12190 p_action_id
12191 ,P_EXEC_CODE
12192 ,p_display_style
12193 ,p_prompt_application_id
12194 ,p_prompt_message_name
12195 ,p_visibility_flag
12196 ,p_prompt_function_id
12197 ,p_visibility_func_id
12198 ,l_Sysdate
12199 ,g_current_user_id
12200 ,l_Sysdate
12201 ,g_current_user_id
12202 ,g_current_login_id
12203 );
12204
12205 -- Standard check of p_commit
12206 IF FND_API.To_Boolean(p_commit) THEN
12207 COMMIT WORK;
12208 END IF;
12209
12210 x_return_status := FND_API.G_RET_STS_SUCCESS;
12211
12212 EXCEPTION
12213 WHEN OTHERS THEN
12214 IF FND_API.To_Boolean(p_commit) THEN
12215 ROLLBACK TO Create_Action_Display_PUB;
12216 END IF;
12217 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12218
12219 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12220 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12221 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12222 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12223 FND_MSG_PUB.Add;
12224 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12225 ,p_count => x_msg_count
12226 ,p_data => x_msg_data);
12227
12228
12229 END Create_Action_Display;
12230
12231 ----------------------------------------------------------------------
12232
12233 -- call this API to create an action that is executed by a trigger
12234 PROCEDURE Create_Action_Display (
12235 p_api_version IN NUMBER
12236 ,p_action_id IN NUMBER
12237 ,p_trigger_code IN VARCHAR2
12238 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12239 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12240 ,x_return_status OUT NOCOPY VARCHAR2
12241 ,x_errorcode OUT NOCOPY NUMBER
12242 ,x_msg_count OUT NOCOPY NUMBER
12243 ,x_msg_data OUT NOCOPY VARCHAR2
12244 ) IS
12245
12246 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Display';
12247
12248 --we don't use l_api_version yet, but eventually we might:
12249 --if we change required parameters, version goes FROM n.x to (n+1).x
12250 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12251 l_api_version CONSTANT NUMBER := 1.0;
12252
12253 l_Sysdate DATE := Sysdate;
12254
12255 BEGIN
12256
12257 -- Standard start of API savepoint
12258 IF FND_API.To_Boolean(p_commit) THEN
12259 SAVEPOINT Create_Action_Display_PUB;
12260 END IF;
12261
12262 -- Check for call compatibility
12263 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12264 l_api_name, G_PKG_NAME)
12265 THEN
12266 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12267 END IF;
12268 -- Initialize message list even though we don't currently use it
12269 IF FND_API.To_Boolean(p_init_msg_list) THEN
12270 FND_MSG_PUB.Initialize;
12271 END IF;
12272
12273 INSERT INTO EGO_ACTION_DISPLAYS_B
12274 (
12275 ACTION_ID
12276 ,EXECUTION_METHOD
12277 ,EXECUTION_TRIGGER
12278 ,LAST_UPDATE_DATE
12279 ,LAST_UPDATED_BY
12280 ,CREATION_DATE
12281 ,CREATED_BY
12282 ,LAST_UPDATE_LOGIN
12283 )
12284 VALUES
12285 (
12286 p_action_id
12287 ,'T'
12288 ,p_trigger_code
12289 ,l_Sysdate
12290 ,g_current_user_id
12291 ,l_Sysdate
12292 ,g_current_user_id
12293 ,g_current_login_id
12294 );
12295
12296 -- Standard check of p_commit
12297 IF FND_API.To_Boolean(p_commit) THEN
12298 COMMIT WORK;
12299 END IF;
12300
12301 x_return_status := FND_API.G_RET_STS_SUCCESS;
12302
12303 EXCEPTION
12304 WHEN OTHERS THEN
12305 IF FND_API.To_Boolean(p_commit) THEN
12306 ROLLBACK TO Create_Action_Display_PUB;
12307 END IF;
12308 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12309
12310 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12311 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12312 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12313 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12314 FND_MSG_PUB.Add;
12315 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12316 ,p_count => x_msg_count
12317 ,p_data => x_msg_data);
12318
12319
12320 END Create_Action_Display;
12321
12322 ----------------------------------------------------------------------
12323
12324 -- call this API to update an action that is executed by a user action
12325 PROCEDURE Update_Action_Display (
12326 p_api_version IN NUMBER
12327 ,p_action_id IN NUMBER
12328 ,P_EXEC_CODE IN VARCHAR2 := 'U'
12329 ,p_display_style IN VARCHAR2
12330 ,p_prompt_application_id IN NUMBER
12331 ,p_prompt_message_name IN VARCHAR2
12332 ,p_visibility_flag IN VARCHAR2
12333 ,p_prompt_function_id IN NUMBER
12334 ,p_visibility_func_id IN NUMBER
12335 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12336 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12337 ,x_return_status OUT NOCOPY VARCHAR2
12338 ,x_errorcode OUT NOCOPY NUMBER
12339 ,x_msg_count OUT NOCOPY NUMBER
12340 ,x_msg_data OUT NOCOPY VARCHAR2
12341 ) IS
12342
12343 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Display';
12344
12345 --we don't use l_api_version yet, but eventually we might:
12346 --if we change required parameters, version goes FROM n.x to (n+1).x
12347 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12348 l_api_version CONSTANT NUMBER := 1.0;
12349
12350 l_Sysdate DATE := Sysdate;
12351 l_disp_check_count NUMBER;
12352 l_old_prompt_func_id NUMBER;
12353 l_old_vis_func_id NUMBER;
12354 l_mapping_count NUMBER;
12355 l_prompt_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'P';
12356 l_vis_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'V';
12357
12358 BEGIN
12359
12360 -- Standard start of API savepoint
12361 IF FND_API.To_Boolean(p_commit) THEN
12362 SAVEPOINT Update_Action_Display_PUB;
12363 END IF;
12364
12365 -- Check for call compatibility
12366 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12367 l_api_name, G_PKG_NAME)
12368 THEN
12369 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12370 END IF;
12371 -- Initialize message list even though we don't currently use it
12372 IF FND_API.To_Boolean(p_init_msg_list) THEN
12373 FND_MSG_PUB.Initialize;
12374 END IF;
12375
12376 -- Just in case caller is updating an Action that doesn't yet have a Display...
12377
12378 SELECT COUNT(*)
12379 INTO l_disp_check_count
12380 FROM EGO_ACTION_DISPLAYS_B
12381 WHERE ACTION_ID = p_action_id;
12382
12383 IF (l_disp_check_count = 0)
12384 THEN
12385 EGO_EXT_FWK_PUB.Create_Action_Display (
12386 p_api_version => '1.0'
12387 ,p_action_id => p_action_id
12388 ,p_display_style => p_display_style
12389 ,p_prompt_application_id => p_prompt_application_id
12390 ,p_prompt_message_name => p_prompt_message_name
12391 ,p_visibility_flag => p_visibility_flag
12392 ,p_prompt_function_id => p_prompt_function_id
12393 ,p_visibility_func_id => p_visibility_func_id
12394 ,p_init_msg_list => p_init_msg_list
12395 ,p_commit => p_commit
12396 ,x_return_status => x_return_status
12397 ,x_errorcode => x_errorcode
12398 ,x_msg_count => x_msg_count
12399 ,x_msg_data => x_msg_data
12400 );
12401 ELSE
12402
12403 -- If the function_id's are different, we delete Mappings.
12404
12405 SELECT PROMPT_FUNCTION_ID
12406 INTO l_old_prompt_func_id
12407 FROM EGO_ACTION_DISPLAYS_B
12408 WHERE ACTION_ID = p_action_id;
12409
12410 IF ((l_old_prompt_func_id IS NOT NULL)
12411 AND (l_old_prompt_func_id <> p_prompt_function_id)) THEN
12412 SELECT COUNT(*)
12413 INTO l_mapping_count
12414 FROM EGO_MAPPINGS_B
12415 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
12416 AND FUNCTION_ID = l_old_prompt_func_id
12417 AND MAPPED_OBJ_TYPE = l_prompt_obj_type;
12418
12419 IF (l_mapping_count > 0)
12420 THEN
12421 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_prompt_func_id,
12422 l_prompt_obj_type, p_action_id, null,
12423 null, x_return_status, x_errorcode,
12424 x_msg_count, x_msg_data);
12425 END IF;
12426 END IF;
12427
12428 SELECT VISIBILITY_FUNC_ID
12429 INTO l_old_vis_func_id
12430 FROM EGO_ACTION_DISPLAYS_B
12431 WHERE ACTION_ID = p_action_id;
12432
12433 IF l_old_vis_func_id is not null AND l_old_vis_func_id <> p_visibility_func_id
12434 THEN
12435 SELECT COUNT(*)
12436 INTO l_mapping_count
12437 FROM EGO_MAPPINGS_B
12438 WHERE MAPPED_OBJ_PK1_VAL = to_char(p_action_id)
12439 AND FUNCTION_ID = l_old_vis_func_id
12440 AND MAPPED_OBJ_TYPE = l_vis_obj_type;
12441
12442 IF (l_mapping_count > 0)
12443 THEN
12444 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_vis_func_id,
12445 l_vis_obj_type, p_action_id, null,
12446 null, x_return_status, x_errorcode,
12447 x_msg_count, x_msg_data);
12448 END IF;
12449 END IF;
12450
12451 UPDATE EGO_ACTION_DISPLAYS_B
12452 SET
12453 EXECUTION_METHOD = P_EXEC_CODE
12454 ,DISPLAY_STYLE = p_display_style
12455 ,PROMPT_APPLICATION_ID = p_prompt_application_id
12456 ,PROMPT_MESSAGE_NAME = p_prompt_message_name
12457 ,VISIBILITY_FLAG = p_visibility_flag
12458 ,PROMPT_FUNCTION_ID = p_prompt_function_id
12459 ,VISIBILITY_FUNC_ID = p_visibility_func_id
12460 ,LAST_UPDATE_DATE = l_Sysdate
12461 ,LAST_UPDATED_BY = g_current_user_id
12462 ,LAST_UPDATE_LOGIN = g_current_login_id
12463 ,EXECUTION_TRIGGER = null
12464 WHERE
12465 ACTION_ID = p_action_id;
12466 END IF;
12467
12468 -- Standard check of p_commit
12469 IF FND_API.To_Boolean(p_commit) THEN
12470 COMMIT WORK;
12471 END IF;
12472
12473 x_return_status := FND_API.G_RET_STS_SUCCESS;
12474
12475 EXCEPTION
12476 WHEN OTHERS THEN
12477 IF FND_API.To_Boolean(p_commit) THEN
12478 ROLLBACK TO Update_Action_Display_PUB;
12479 END IF;
12480 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12481
12482 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12483 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12484 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12485 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12486 FND_MSG_PUB.Add;
12487 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12488 ,p_count => x_msg_count
12489 ,p_data => x_msg_data);
12490
12491
12492 END Update_Action_Display;
12493
12494 ----------------------------------------------------------------------
12495
12496 -- call this API to update an action that is executed by a trigger
12497 PROCEDURE Update_Action_Display (
12498 p_api_version IN NUMBER
12499 ,p_action_id IN NUMBER
12500 ,p_trigger_code IN VARCHAR2
12501 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12502 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12503 ,x_return_status OUT NOCOPY VARCHAR2
12504 ,x_errorcode OUT NOCOPY NUMBER
12505 ,x_msg_count OUT NOCOPY NUMBER
12506 ,x_msg_data OUT NOCOPY VARCHAR2
12507 ) IS
12508
12509 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Display';
12510
12511 --we don't use l_api_version yet, but eventually we might:
12512 --if we change required parameters, version goes FROM n.x to (n+1).x
12513 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12514 l_api_version CONSTANT NUMBER := 1.0;
12515
12516 l_Sysdate DATE := Sysdate;
12517 l_disp_check_count NUMBER;
12518 l_old_prompt_func_id NUMBER;
12519 l_old_vis_func_id NUMBER;
12520 l_mapping_count NUMBER;
12521 l_prompt_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'P';
12522 l_vis_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'V';
12523
12524 BEGIN
12525
12526 -- Standard start of API savepoint
12527 IF FND_API.To_Boolean(p_commit) THEN
12528 SAVEPOINT Update_Action_Display_PUB;
12529 END IF;
12530
12531 -- Check for call compatibility
12532 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12533 l_api_name, G_PKG_NAME)
12534 THEN
12535 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12536 END IF;
12537 -- Initialize message list even though we don't currently use it
12538 IF FND_API.To_Boolean(p_init_msg_list) THEN
12539 FND_MSG_PUB.Initialize;
12540 END IF;
12541
12542 SELECT COUNT(*)
12543 INTO l_disp_check_count
12544 FROM EGO_ACTION_DISPLAYS_B
12545 WHERE ACTION_ID = p_action_id;
12546
12547 IF (l_disp_check_count = 0) THEN
12548 EGO_EXT_FWK_PUB.Create_Action_Display
12549 (
12550 p_api_version => '1.0'
12551 ,p_action_id => p_action_id
12552 ,p_trigger_code => p_trigger_code
12553 ,p_init_msg_list => p_init_msg_list
12554 ,p_commit => p_commit
12555 ,x_return_status => x_return_status
12556 ,x_errorcode => x_errorcode
12557 ,x_msg_count => x_msg_count
12558 ,x_msg_data => x_msg_data
12559 );
12560
12561 ELSE
12562
12563 -- If the Action execution is changed from a user Action to trigger
12564 -- then we need to delete Mappings for prompt, visibility function IDs.
12565
12566 SELECT PROMPT_FUNCTION_ID
12567 INTO l_old_prompt_func_id
12568 FROM EGO_ACTION_DISPLAYS_B
12569 WHERE ACTION_ID = p_action_id;
12570
12571 IF l_old_prompt_func_id IS NOT NULL THEN
12572 SELECT COUNT(*)
12573 INTO l_mapping_count
12574 FROM EGO_MAPPINGS_B
12575 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
12576 AND FUNCTION_ID = l_old_prompt_func_id
12577 AND MAPPED_OBJ_TYPE = l_prompt_obj_type;
12578
12579 IF (l_mapping_count > 0) THEN
12580 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_prompt_func_id,
12581 l_prompt_obj_type, p_action_id, null,
12582 null, x_return_status, x_errorcode,
12583 x_msg_count, x_msg_data);
12584 END IF;
12585 END IF;
12586
12587 SELECT VISIBILITY_FUNC_ID
12588 INTO l_old_vis_func_id
12589 FROM EGO_ACTION_DISPLAYS_B
12590 WHERE ACTION_ID = p_action_id;
12591
12592 IF l_old_vis_func_id IS NOT NULL THEN
12593 SELECT COUNT(*)
12594 INTO l_mapping_count
12595 FROM EGO_MAPPINGS_B
12596 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
12597 AND FUNCTION_ID = l_old_vis_func_id
12598 AND MAPPED_OBJ_TYPE = l_vis_obj_type;
12599
12600 IF (l_mapping_count > 0) THEN
12601 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_vis_func_id,
12602 l_vis_obj_type, p_action_id, null,
12603 null, x_return_status, x_errorcode,
12604 x_msg_count, x_msg_data);
12605 END IF;
12606 END IF;
12607
12608 UPDATE EGO_ACTION_DISPLAYS_B
12609 SET
12610 EXECUTION_METHOD = 'T'
12611 ,EXECUTION_TRIGGER = p_trigger_code
12612 ,DISPLAY_STYLE = NULL
12613 ,PROMPT_APPLICATION_ID = NULL
12614 ,PROMPT_MESSAGE_NAME = NULL
12615 ,VISIBILITY_FLAG = NULL
12616 ,PROMPT_FUNCTION_ID = NULL
12617 ,VISIBILITY_FUNC_ID = NULL
12618 ,LAST_UPDATE_DATE = l_Sysdate
12619 ,LAST_UPDATED_BY = g_current_user_id
12620 ,LAST_UPDATE_LOGIN = g_current_login_id
12621 WHERE
12622 ACTION_ID = p_action_id;
12623
12624 END IF;
12625
12626 -----------------------------------
12627
12628 -- Standard check of p_commit
12629 IF FND_API.To_Boolean(p_commit) THEN
12630 COMMIT WORK;
12631 END IF;
12632
12633 x_return_status := FND_API.G_RET_STS_SUCCESS;
12634
12635 EXCEPTION
12636 WHEN OTHERS THEN
12637 IF FND_API.To_Boolean(p_commit) THEN
12638 ROLLBACK TO Update_Action_Display_PUB;
12639 END IF;
12640 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12641
12642 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12643 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12644 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12645 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12646 FND_MSG_PUB.Add;
12647 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12648 ,p_count => x_msg_count
12649 ,p_data => x_msg_data);
12650
12651
12652 END Update_Action_Display;
12653
12654 ----------------------------------------------------------------------
12655
12656 PROCEDURE Delete_Action_Display (
12657 p_api_version IN NUMBER
12658 ,p_action_id IN NUMBER
12659 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12660 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12661 ,x_return_status OUT NOCOPY VARCHAR2
12662 ,x_errorcode OUT NOCOPY NUMBER
12663 ,x_msg_count OUT NOCOPY NUMBER
12664 ,x_msg_data OUT NOCOPY VARCHAR2
12665 ) IS
12666
12667 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action';
12668
12669 --we don't use l_api_version yet, but eventually we might:
12670 --if we change required parameters, version goes FROM n.x to (n+1).x
12671 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12672 l_api_version CONSTANT NUMBER := 1.0;
12673
12674 l_mapping_count NUMBER;
12675 l_prompt_func_id NUMBER;
12676 l_vis_func_id NUMBER;
12677 l_prompt_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'P';
12678 l_vis_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'V';
12679
12680 BEGIN
12681
12682 -- Standard start of API savepoint
12683 IF FND_API.To_Boolean(p_commit) THEN
12684 SAVEPOINT Delete_Action_Display_PUB;
12685 END IF;
12686
12687 -- Check for call compatibility
12688 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12689 l_api_name, G_PKG_NAME)
12690 THEN
12691 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12692 END IF;
12693 -- Initialize message list even though we don't currently use it
12694 IF FND_API.To_Boolean(p_init_msg_list) THEN
12695 FND_MSG_PUB.Initialize;
12696 END IF;
12697
12698 -- We get the prompt and vis function IDs before we delete the row
12699 -- so we can also delete their function mappings, if necessary
12700
12701 SELECT PROMPT_FUNCTION_ID
12702 INTO l_prompt_func_id
12703 FROM EGO_ACTION_DISPLAYS_B
12704 WHERE ACTION_ID = p_action_id;
12705
12706 SELECT VISIBILITY_FUNC_ID
12707 INTO l_vis_func_id
12708 FROM EGO_ACTION_DISPLAYS_B
12709 WHERE ACTION_ID = p_action_id;
12710
12711 -- Then we delete the row
12712
12713 DELETE FROM EGO_ACTION_DISPLAYS_B
12714 WHERE ACTION_ID = p_action_id;
12715
12716 -- Then we delete the mappings for the prompt and visibility
12717 -- functions for this action, if there are any
12718
12719 SELECT COUNT(*)
12720 INTO l_mapping_count
12721 FROM EGO_MAPPINGS_B
12722 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
12723 AND FUNCTION_ID = l_prompt_func_id
12724 AND MAPPED_OBJ_TYPE = l_prompt_obj_type;
12725
12726 IF (l_mapping_count > 0) THEN
12727 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_prompt_func_id,
12728 l_prompt_obj_type, p_action_id, null,
12729 null, x_return_status, x_errorcode,
12730 x_msg_count, x_msg_data);
12731 END IF;
12732
12733 SELECT COUNT(*)
12734 INTO l_mapping_count
12735 FROM EGO_MAPPINGS_B
12736 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
12737 AND FUNCTION_ID = l_vis_func_id
12738 AND MAPPED_OBJ_TYPE = l_vis_obj_type;
12739
12740 IF (l_mapping_count > 0) THEN
12741 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_vis_func_id,
12742 l_vis_obj_type, p_action_id, null,
12743 null, x_return_status, x_errorcode,
12744 x_msg_count, x_msg_data);
12745 END IF;
12746
12747 -- Standard check of p_commit
12748 IF FND_API.To_Boolean(p_commit) THEN
12749 COMMIT WORK;
12750 END IF;
12751
12752 x_return_status := FND_API.G_RET_STS_SUCCESS;
12753
12754 EXCEPTION
12755 WHEN OTHERS THEN
12756 IF FND_API.To_Boolean(p_commit) THEN
12757 ROLLBACK TO Delete_Action_Display_PUB;
12758 END IF;
12759 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12760
12761 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12762 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12763 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12764 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12765 FND_MSG_PUB.Add;
12766 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12767 ,p_count => x_msg_count
12768 ,p_data => x_msg_data);
12769
12770
12771 END Delete_Action_Display;
12772
12773 ----------------------------------------------------------------------
12774
12775 -----------------------------
12776 -- Function Parameter APIs --
12777 -----------------------------
12778
12779 ----------------------------------------------------------------------
12780
12781 PROCEDURE Create_Function_Param (
12782 p_api_version IN NUMBER
12783 ,p_function_id IN NUMBER
12784 ,p_sequence IN NUMBER
12785 ,p_internal_name IN VARCHAR2
12786 ,p_data_type IN VARCHAR2
12787 ,p_param_type IN VARCHAR2
12788 ,p_display_name IN VARCHAR2
12789 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12790 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12791 ,x_function_param_id OUT NOCOPY NUMBER
12792 ,x_return_status OUT NOCOPY VARCHAR2
12793 ,x_errorcode OUT NOCOPY NUMBER
12794 ,x_msg_count OUT NOCOPY NUMBER
12795 ,x_msg_data OUT NOCOPY VARCHAR2
12796 ) IS
12797
12798 l_api_name CONSTANT VARCHAR2(30) := 'Create_Function_Param';
12799
12800 --we don't use l_api_version yet, but eventually we might:
12801 --if we change required parameters, version goes FROM n.x to (n+1).x
12802 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12803 l_api_version CONSTANT NUMBER := 1.0;
12804
12805 l_Sysdate DATE := Sysdate;
12806
12807 BEGIN
12808
12809 -- Standard start of API savepoint
12810 IF FND_API.To_Boolean(p_commit) THEN
12811 SAVEPOINT Create_Function_Param_PUB;
12812 END IF;
12813
12814 -- Check for call compatibility
12815 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12816 l_api_name, G_PKG_NAME)
12817 THEN
12818 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12819 END IF;
12820 -- Initialize message list even though we don't currently use it
12821 IF FND_API.To_Boolean(p_init_msg_list) THEN
12822 FND_MSG_PUB.Initialize;
12823 END IF;
12824
12825 SELECT EGO_FUNC_PARAMS_S.NEXTVAL INTO x_function_param_id FROM DUAL;
12826
12827 INSERT INTO EGO_FUNC_PARAMS_B
12828 (
12829 FUNC_PARAM_ID
12830 ,FUNCTION_ID
12831 ,SEQUENCE
12832 ,INTERNAL_NAME
12833 ,DATA_TYPE
12834 ,PARAM_TYPE
12835 ,LAST_UPDATE_DATE
12836 ,LAST_UPDATED_BY
12837 ,CREATION_DATE
12838 ,CREATED_BY
12839 ,LAST_UPDATE_LOGIN
12840 )
12841 VALUES
12842 (
12843 x_function_param_id
12844 ,p_function_id
12845 ,p_sequence
12846 ,p_internal_name
12847 ,p_data_type
12848 ,p_param_type
12849 ,l_Sysdate
12850 ,g_current_user_id
12851 ,l_Sysdate
12852 ,g_current_user_id
12853 ,g_current_login_id
12854 );
12855
12856 INSERT INTO EGO_FUNC_PARAMS_TL
12857 (
12858 FUNC_PARAM_ID
12859 ,DISPLAY_NAME
12860 ,LANGUAGE
12861 ,SOURCE_LANG
12862 ,LAST_UPDATE_DATE
12863 ,LAST_UPDATED_BY
12864 ,CREATION_DATE
12865 ,CREATED_BY
12866 ,LAST_UPDATE_LOGIN
12867 )
12868 SELECT
12869 x_function_param_id
12870 ,p_display_name
12871 ,L.LANGUAGE_CODE
12872 ,USERENV('LANG')
12873 ,l_Sysdate
12874 ,g_current_user_id
12875 ,l_Sysdate
12876 ,g_current_user_id
12877 ,g_current_login_id
12878 FROM FND_LANGUAGES L
12879 WHERE L.INSTALLED_FLAG in ('I', 'B');
12880
12881 -- Standard check of p_commit
12882 IF FND_API.To_Boolean(p_commit) THEN
12883 COMMIT WORK;
12884 END IF;
12885
12886 x_return_status := FND_API.G_RET_STS_SUCCESS;
12887
12888 EXCEPTION
12889 WHEN OTHERS THEN
12890 IF FND_API.To_Boolean(p_commit) THEN
12891 ROLLBACK TO Create_Function_Param_PUB;
12892 END IF;
12893 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12894
12895 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12896 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12897 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12898 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12899 FND_MSG_PUB.Add;
12900 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12901 ,p_count => x_msg_count
12902 ,p_data => x_msg_data);
12903
12904
12905 END Create_Function_Param;
12906
12907 ----------------------------------------------------------------------
12908
12909 PROCEDURE Update_Function_Param (
12910 p_api_version IN NUMBER
12911 ,p_function_param_id IN NUMBER
12912 ,p_sequence IN NUMBER
12913 ,p_internal_name IN VARCHAR2
12914 ,p_display_name IN VARCHAR2
12915 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12916 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12917 ,x_return_status OUT NOCOPY VARCHAR2
12918 ,x_errorcode OUT NOCOPY NUMBER
12919 ,x_msg_count OUT NOCOPY NUMBER
12920 ,x_msg_data OUT NOCOPY VARCHAR2
12921 ) IS
12922
12923 l_api_name CONSTANT VARCHAR2(30) := 'Update_Function_Param';
12924
12925 --we don't use l_api_version yet, but eventually we might:
12926 --if we change required parameters, version goes FROM n.x to (n+1).x
12927 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12928 l_api_version CONSTANT NUMBER := 1.0;
12929
12930 l_Sysdate DATE := Sysdate;
12931
12932 BEGIN
12933
12934 -- Standard start of API savepoint
12935 IF FND_API.To_Boolean(p_commit) THEN
12936 SAVEPOINT Update_Function_Param_PUB;
12937 END IF;
12938
12939 -- Check for call compatibility
12940 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12941 l_api_name, G_PKG_NAME)
12942 THEN
12943 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12944 END IF;
12945 -- Initialize message list even though we don't currently use it
12946 IF FND_API.To_Boolean(p_init_msg_list) THEN
12947 FND_MSG_PUB.Initialize;
12948 END IF;
12949
12950 UPDATE EGO_FUNC_PARAMS_B
12951 SET
12952 SEQUENCE = p_sequence
12953 ,INTERNAL_NAME = p_internal_name
12954 ,LAST_UPDATE_DATE = l_Sysdate
12955 ,LAST_UPDATED_BY = g_current_user_id
12956 ,LAST_UPDATE_LOGIN = g_current_login_id
12957 WHERE
12958 FUNC_PARAM_ID = p_function_param_id;
12959
12960 UPDATE EGO_FUNC_PARAMS_TL
12961 SET
12962 DISPLAY_NAME = p_display_name
12963 ,LAST_UPDATE_DATE = l_Sysdate
12964 ,LAST_UPDATED_BY = g_current_user_id
12965 ,LAST_UPDATE_LOGIN = g_current_login_id
12966 ,SOURCE_LANG = USERENV('LANG')
12967 WHERE
12968 FUNC_PARAM_ID = p_function_param_id AND
12969 --userenv('LANG') = LANGUAGE;
12970 USERENV('LANG') IN ( LANGUAGE ,SOURCE_LANG );
12971
12972 -- Standard check of p_commit
12973 IF FND_API.To_Boolean(p_commit) THEN
12974 COMMIT WORK;
12975 END IF;
12976
12977 x_return_status := FND_API.G_RET_STS_SUCCESS;
12978
12979 EXCEPTION
12980 WHEN OTHERS THEN
12981 IF FND_API.To_Boolean(p_commit) THEN
12982 ROLLBACK TO Update_Function_Param_PUB;
12983 END IF;
12984 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12985
12986 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12987 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12988 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12989 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12990 FND_MSG_PUB.Add;
12991 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12992 ,p_count => x_msg_count
12993 ,p_data => x_msg_data);
12994
12995
12996 END Update_Function_Param;
12997
12998 ----------------------------------------------------------------------
12999
13000 PROCEDURE Delete_Function_Param (
13001 p_api_version IN NUMBER
13002 ,p_function_param_id IN NUMBER
13003 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13004 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13005 ,x_return_status OUT NOCOPY VARCHAR2
13006 ,x_errorcode OUT NOCOPY NUMBER
13007 ,x_msg_count OUT NOCOPY NUMBER
13008 ,x_msg_data OUT NOCOPY VARCHAR2
13009 ) IS
13010
13011 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Function_Param';
13012
13013 --we don't use l_api_version yet, but eventually we might:
13014 --if we change required parameters, version goes FROM n.x to (n+1).x
13015 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13016 l_api_version CONSTANT NUMBER := 1.0;
13017
13018 l_Sysdate DATE := Sysdate;
13019
13020 BEGIN
13021
13022 -- Standard start of API savepoint
13023 IF FND_API.To_Boolean(p_commit) THEN
13024 SAVEPOINT Delete_Function_Param_PUB;
13025 END IF;
13026
13027 -- Check for call compatibility
13028 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13029 l_api_name, G_PKG_NAME)
13030 THEN
13031 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13032 END IF;
13033 -- Initialize message list even though we don't currently use it
13034 IF FND_API.To_Boolean(p_init_msg_list) THEN
13035 FND_MSG_PUB.Initialize;
13036 END IF;
13037
13038 DELETE FROM EGO_FUNC_PARAMS_B
13039 WHERE
13040 FUNC_PARAM_ID = p_function_param_id;
13041
13042 DELETE FROM EGO_FUNC_PARAMS_TL
13043 WHERE
13044 FUNC_PARAM_ID = p_function_param_id;
13045
13046 DELETE FROM EGO_MAPPINGS_B
13047 WHERE
13048 FUNC_PARAM_ID = p_function_param_id;
13049
13050 -- Standard check of p_commit
13051 IF FND_API.To_Boolean(p_commit) THEN
13052 COMMIT WORK;
13053 END IF;
13054
13055 x_return_status := FND_API.G_RET_STS_SUCCESS;
13056
13057 EXCEPTION
13058 WHEN OTHERS THEN
13059 IF FND_API.To_Boolean(p_commit) THEN
13060 ROLLBACK TO Delete_Function_Param_PUB;
13061 END IF;
13062 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13063
13064 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13065 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13066 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13067 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13068 FND_MSG_PUB.Add;
13069 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13070 ,p_count => x_msg_count
13071 ,p_data => x_msg_data);
13072
13073
13074 END Delete_Function_Param;
13075
13076 ----------------------------------------------------------------------
13077
13078 -------------------------
13079 -- Action Mapping APIs --
13080 -------------------------
13081
13082 ----------------------------------------------------------------------
13083
13084 PROCEDURE Create_Mapping (
13085 p_api_version IN NUMBER
13086 ,p_function_id IN NUMBER
13087 ,p_mapped_obj_type IN VARCHAR2
13088 ,p_mapped_obj_pk1_value IN VARCHAR2
13089 ,p_func_param_id IN NUMBER
13090 ,p_mapping_group_type IN VARCHAR2
13091 ,p_mapping_group_pk1 IN VARCHAR2
13092 ,p_mapping_group_pk2 IN VARCHAR2
13093 ,p_mapping_group_pk3 IN VARCHAR2
13094 ,p_mapping_value IN VARCHAR2
13095 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
13096 ,p_value_uom_source IN VARCHAR2 := NULL
13097 ,p_fixed_uom IN VARCHAR2 := NULL
13098 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13099 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13100 ,x_return_status OUT NOCOPY VARCHAR2
13101 ,x_errorcode OUT NOCOPY NUMBER
13102 ,x_msg_count OUT NOCOPY NUMBER
13103 ,x_msg_data OUT NOCOPY VARCHAR2
13104 ) IS
13105
13106 l_api_name CONSTANT VARCHAR2(30) := 'Create_Mapping';
13107
13108 --we don't use l_api_version yet, but eventually we might:
13109 --if we change required parameters, version goes FROM n.x to (n+1).x
13110 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13111 l_api_version CONSTANT NUMBER := 1.0;
13112
13113 l_Sysdate DATE := Sysdate;
13114
13115 BEGIN
13116
13117 -- Standard start of API savepoint
13118 IF FND_API.To_Boolean(p_commit) THEN
13119 SAVEPOINT Create_Mapping_PUB;
13120 END IF;
13121
13122 -- Check for call compatibility
13123 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13124 l_api_name, G_PKG_NAME)
13125 THEN
13126 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13127 END IF;
13128 -- Initialize message list even though we don't currently use it
13129 IF FND_API.To_Boolean(p_init_msg_list) THEN
13130 FND_MSG_PUB.Initialize;
13131 END IF;
13132
13133 INSERT INTO EGO_MAPPINGS_B
13134 (
13135 FUNCTION_ID
13136 ,MAPPED_OBJ_TYPE
13137 ,MAPPED_OBJ_PK1_VAL
13138 ,FUNC_PARAM_ID
13139 ,MAPPED_TO_GROUP_TYPE
13140 ,MAPPED_TO_GROUP_PK1
13141 ,MAPPED_TO_GROUP_PK2
13142 ,MAPPED_TO_GROUP_PK3
13143 ,MAPPED_ATTRIBUTE
13144 ,MAPPED_UOM_PARAMETER
13145 ,VALUE_UOM_SOURCE
13146 ,FIXED_UOM
13147 ,LAST_UPDATE_DATE
13148 ,LAST_UPDATED_BY
13149 ,CREATION_DATE
13150 ,CREATED_BY
13151 ,LAST_UPDATE_LOGIN
13152 )
13153 VALUES
13154 (
13155 p_function_id
13156 ,p_mapped_obj_type
13157 ,p_mapped_obj_pk1_value
13158 ,p_func_param_id
13159 ,p_mapping_group_type
13160 ,p_mapping_group_pk1
13161 ,p_mapping_group_pk2
13162 ,p_mapping_group_pk3
13163 ,p_mapping_value
13164 ,p_mapped_uom_parameter
13165 ,p_value_uom_source
13166 ,p_fixed_uom
13167 ,l_Sysdate
13168 ,g_current_user_id
13169 ,l_Sysdate
13170 ,g_current_user_id
13171 ,g_current_login_id
13172 );
13173
13174 -- Standard check of p_commit
13175 IF FND_API.To_Boolean(p_commit) THEN
13176 COMMIT WORK;
13177 END IF;
13178
13179 x_return_status := FND_API.G_RET_STS_SUCCESS;
13180
13181 EXCEPTION
13182 WHEN OTHERS THEN
13183 IF FND_API.To_Boolean(p_commit) THEN
13184 ROLLBACK TO Create_Mapping_PUB;
13185 END IF;
13186 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13187
13188 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13189 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13190 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13191 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13192 FND_MSG_PUB.Add;
13193 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13194 ,p_count => x_msg_count
13195 ,p_data => x_msg_data);
13196
13197
13198 END Create_Mapping;
13199
13200 ----------------------------------------------------------------------
13201
13202
13203 PROCEDURE Create_Mapping (
13204 p_api_version IN NUMBER
13205 ,p_function_id IN NUMBER
13206 ,p_mapped_obj_type IN VARCHAR2
13207 ,p_mapped_obj_pk1_value IN VARCHAR2
13208 ,p_func_param_id IN NUMBER
13209 ,p_attr_group_id IN NUMBER
13210 ,p_mapping_value IN VARCHAR2
13211 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
13212 ,p_value_uom_source IN VARCHAR2 := NULL
13213 ,p_fixed_uom IN VARCHAR2 := NULL
13214 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13215 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13216 ,x_return_status OUT NOCOPY VARCHAR2
13217 ,x_errorcode OUT NOCOPY NUMBER
13218 ,x_msg_count OUT NOCOPY NUMBER
13219 ,x_msg_data OUT NOCOPY VARCHAR2
13220 ) IS
13221
13222 l_api_name CONSTANT VARCHAR2(30) := 'Create_Mapping';
13223
13224 l_application_id NUMBER;
13225 l_attr_grp_type VARCHAR2(40);
13226 l_attr_grp_name VARCHAR2(30);
13227 l_mapping_group_type VARCHAR2(30);
13228
13229 BEGIN
13230
13231 -- Standard start of API savepoint
13232 IF FND_API.TO_BOOLEAN(p_commit) THEN
13233 SAVEPOINT Create_Mapping_PUB;
13234 END IF;
13235
13236 Get_Attr_Group_Comb_PKs(p_attr_group_id, l_application_id,l_attr_grp_type ,l_attr_grp_name );
13237 IF l_application_id IS NULL THEN
13238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13239 END IF;
13240 l_mapping_group_type := 'A';
13241 EGO_EXT_FWK_PUB.Create_Mapping(
13242 p_api_version => p_api_version
13243 ,p_function_id => p_function_id
13244 ,p_mapped_obj_type => p_mapped_obj_type
13245 ,p_mapped_obj_pk1_value => p_mapped_obj_pk1_value
13246 ,p_func_param_id => p_func_param_id
13247 ,p_mapping_group_type => l_mapping_group_type
13248 ,p_mapping_group_pk1 => l_application_id
13249 ,p_mapping_group_pk2 => l_attr_grp_type
13250 ,p_mapping_group_pk3 => l_attr_grp_name
13251 ,p_mapping_value => p_mapping_value
13252 ,p_mapped_uom_parameter => p_mapped_uom_parameter
13253 ,p_value_uom_source => p_value_uom_source
13254 ,p_fixed_uom => p_fixed_uom
13255 ,p_init_msg_list => p_init_msg_list
13256 ,p_commit => p_commit
13257 ,x_return_status => x_return_status
13258 ,x_errorcode => x_errorcode
13259 ,x_msg_count => x_msg_count
13260 ,x_msg_data => x_msg_data
13261 );
13262
13263 -- Standard check of p_commit
13264 IF FND_API.To_Boolean(p_commit) THEN
13265 COMMIT WORK;
13266 END IF;
13267
13268 EXCEPTION
13269 WHEN OTHERS THEN
13270 IF FND_API.TO_BOOLEAN(p_commit) THEN
13271 ROLLBACK TO Create_Mapping_PUB;
13272 END IF;
13273 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13274
13275 IF l_application_id IS NULL THEN
13276 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupApplicationIDFoundForPKs';
13277 ELSE
13278 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13279 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13280 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13281 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13282 FND_MSG_PUB.Add;
13283 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13284 ,p_count => x_msg_count
13285 ,p_data => x_msg_data);
13286
13287 END IF;
13288
13289 END Create_Mapping;
13290
13291 ----------------------------------------------------------------------
13292
13293 PROCEDURE Update_Mapping (
13294 p_api_version IN NUMBER
13295 ,p_function_id IN NUMBER
13296 ,p_mapped_obj_type IN VARCHAR2
13297 ,p_mapped_obj_pk1_value IN VARCHAR2
13298 ,p_func_param_id IN NUMBER
13299 ,p_mapping_group_type IN VARCHAR2
13300 ,p_mapping_group_pk1 IN VARCHAR2
13301 ,p_mapping_group_pk2 IN VARCHAR2
13302 ,p_mapping_group_pk3 IN VARCHAR2
13303 ,p_mapping_value IN VARCHAR2
13304 ,p_new_func_param_id IN NUMBER := NULL
13305 ,p_new_mapping_group_pk1 IN VARCHAR2 := NULL
13306 ,p_new_mapping_group_pk2 IN VARCHAR2 := NULL
13307 ,p_new_mapping_group_pk3 IN VARCHAR2 := NULL
13308 ,p_new_mapping_value IN VARCHAR2 := NULL
13309 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
13310 ,p_value_uom_source IN VARCHAR2 := NULL
13311 ,p_fixed_uom IN VARCHAR2 := NULL
13312 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13313 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13314 ,x_return_status OUT NOCOPY VARCHAR2
13315 ,x_errorcode OUT NOCOPY NUMBER
13316 ,x_msg_count OUT NOCOPY NUMBER
13317 ,x_msg_data OUT NOCOPY VARCHAR2
13318 ) IS
13319
13320 l_api_name CONSTANT VARCHAR2(30) := 'Update_Mapping';
13321
13322 --we don't use l_api_version yet, but eventually we might:
13323 --if we change required parameters, version goes FROM n.x to (n+1).x
13324 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13325 l_api_version CONSTANT NUMBER := 1.0;
13326
13327 l_Sysdate DATE := Sysdate;
13328
13329 BEGIN
13330
13331 -- Standard start of API savepoint
13332 IF FND_API.To_Boolean(p_commit) THEN
13333 SAVEPOINT Update_Mapping_PUB;
13334 END IF;
13335
13336 -- Check for call compatibility
13337 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13338 l_api_name, G_PKG_NAME)
13339 THEN
13340 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13341 END IF;
13342 -- Initialize message list even though we don't currently use it
13343 IF FND_API.To_Boolean(p_init_msg_list) THEN
13344 FND_MSG_PUB.Initialize;
13345 END IF;
13346
13347 IF (p_new_mapping_group_pk1 IS NOT NULL AND
13348 p_new_mapping_group_pk2 IS NOT NULL AND
13349 p_new_mapping_group_pk3 IS NOT NULL AND
13350 p_new_mapping_value IS NOT NULL) THEN
13351
13352 UPDATE EGO_MAPPINGS_B
13353 SET
13354 MAPPED_TO_GROUP_TYPE = p_mapping_group_type
13355 ,MAPPED_TO_GROUP_PK1 = p_new_mapping_group_pk1
13356 ,MAPPED_TO_GROUP_PK2 = p_new_mapping_group_pk2
13357 ,MAPPED_TO_GROUP_PK3 = p_new_mapping_group_pk3
13358 ,MAPPED_ATTRIBUTE = p_new_mapping_value
13359 ,MAPPED_UOM_PARAMETER = p_mapped_uom_parameter
13360 ,VALUE_UOM_SOURCE = p_value_uom_source
13361 ,FIXED_UOM = p_fixed_uom
13362 ,FUNC_PARAM_ID = NVL(p_new_func_param_id, p_func_param_id)
13363 ,LAST_UPDATE_DATE = l_Sysdate
13364 ,LAST_UPDATED_BY = g_current_user_id
13365 ,LAST_UPDATE_LOGIN = g_current_login_id
13366 WHERE
13367 FUNCTION_ID = p_function_id AND
13368 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
13369 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value AND
13370 FUNC_PARAM_ID = p_func_param_id AND
13371 MAPPED_TO_GROUP_PK1 = p_mapping_group_pk1 AND
13372 MAPPED_TO_GROUP_PK2 = p_mapping_group_pk2 AND
13373 MAPPED_TO_GROUP_PK3 = p_mapping_group_pk3 AND
13374 MAPPED_ATTRIBUTE = p_mapping_value;
13375
13376 ELSE
13377
13378 UPDATE EGO_MAPPINGS_B
13379 SET
13380 MAPPED_TO_GROUP_TYPE = p_mapping_group_type
13381 ,MAPPED_TO_GROUP_PK1 = p_mapping_group_pk1
13382 ,MAPPED_TO_GROUP_PK2 = p_mapping_group_pk2
13383 ,MAPPED_TO_GROUP_PK3 = p_mapping_group_pk3
13384 ,MAPPED_ATTRIBUTE = p_mapping_value
13385 ,MAPPED_UOM_PARAMETER = p_mapped_uom_parameter
13386 ,VALUE_UOM_SOURCE = p_value_uom_source
13387 ,FIXED_UOM = p_fixed_uom
13388 ,FUNC_PARAM_ID = NVL(p_new_func_param_id, p_func_param_id)
13389 ,LAST_UPDATE_DATE = l_Sysdate
13390 ,LAST_UPDATED_BY = g_current_user_id
13391 ,LAST_UPDATE_LOGIN = g_current_login_id
13392 WHERE
13393 FUNCTION_ID = p_function_id AND
13394 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
13395 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value AND
13396 FUNC_PARAM_ID = p_func_param_id;
13397
13398 END IF;
13399
13400 -- Standard check of p_commit
13401 IF FND_API.To_Boolean(p_commit) THEN
13402 COMMIT WORK;
13403 END IF;
13404
13405 x_return_status := FND_API.G_RET_STS_SUCCESS;
13406
13407 EXCEPTION
13408 WHEN OTHERS THEN
13409 IF FND_API.To_Boolean(p_commit) THEN
13410 ROLLBACK TO Update_Mapping_PUB;
13411 END IF;
13412 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13413
13414 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13415 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13416 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13417 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13418 FND_MSG_PUB.Add;
13419 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13420 ,p_count => x_msg_count
13421 ,p_data => x_msg_data);
13422
13423
13424 END Update_Mapping;
13425
13426 ----------------------------------------------------------------------
13427
13428
13429
13430 PROCEDURE Update_Mapping (
13431 p_api_version IN NUMBER
13432 ,p_function_id IN NUMBER
13433 ,p_mapped_obj_type IN VARCHAR2
13434 ,p_mapped_obj_pk1_value IN VARCHAR2
13435 ,p_func_param_id IN NUMBER
13436 ,p_attr_group_id IN NUMBER
13437 ,p_mapping_value IN VARCHAR2
13438 ,p_mapping_group_pk1 IN VARCHAR2 := NULL
13439 ,p_mapping_group_pk2 IN VARCHAR2 := NULL
13440 ,p_mapping_group_pk3 IN VARCHAR2 := NULL
13441 ,p_new_func_param_id IN NUMBER := NULL
13442 ,p_new_mapping_value IN VARCHAR2 := NULL
13443 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
13444 ,p_value_uom_source IN VARCHAR2 := NULL
13445 ,p_fixed_uom IN VARCHAR2 := NULL
13446 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13447 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13448 ,x_return_status OUT NOCOPY VARCHAR2
13449 ,x_errorcode OUT NOCOPY NUMBER
13450 ,x_msg_count OUT NOCOPY NUMBER
13451 ,x_msg_data OUT NOCOPY VARCHAR2
13452 ) IS
13453
13454 l_api_name CONSTANT VARCHAR2(30) := 'Update_Mapping';
13455
13456 l_application_id NUMBER;
13457 l_attr_grp_type VARCHAR2(40);
13458 l_attr_grp_name VARCHAR2(30);
13459 l_mapping_group_type VARCHAR2(30);
13460
13461 BEGIN
13462
13463 -- Standard start of API savepoint
13464 IF FND_API.TO_BOOLEAN(p_commit) THEN
13465 SAVEPOINT Update_Mapping_PUB;
13466 END IF;
13467
13468 Get_Attr_Group_Comb_PKs(p_attr_group_id, l_application_id,l_attr_grp_type ,l_attr_grp_name);
13469 IF l_application_id IS NULL THEN
13470 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13471 END IF;
13472 l_mapping_group_type := 'A';
13473
13474 EGO_EXT_FWK_PUB.Update_Mapping (
13475
13476 p_api_version => p_api_version
13477 ,p_function_id => p_function_id
13478 ,p_mapped_obj_type => p_mapped_obj_type
13479 ,p_mapped_obj_pk1_value => p_mapped_obj_pk1_value
13480 ,p_func_param_id => p_func_param_id
13481 ,p_mapping_group_type => l_mapping_group_type
13482 ,p_mapping_group_pk1 => p_mapping_group_pk1
13483 ,p_mapping_group_pk2 => p_mapping_group_pk2
13484 ,p_mapping_group_pk3 => p_mapping_group_pk3
13485 ,p_mapping_value => p_mapping_value
13486 ,p_new_mapping_group_pk1 => l_application_id
13487 ,p_new_mapping_group_pk2 => l_attr_grp_type
13488 ,p_new_mapping_group_pk3 => l_attr_grp_name
13489 ,p_new_mapping_value => p_new_mapping_value
13490 ,p_new_func_param_id => p_new_func_param_id
13491 ,p_mapped_uom_parameter => p_mapped_uom_parameter
13492 ,p_value_uom_source => p_value_uom_source
13493 ,p_fixed_uom => p_fixed_uom
13494 ,p_init_msg_list => p_init_msg_list
13495 ,p_commit => p_commit
13496 ,x_return_status => x_return_status
13497 ,x_errorcode => x_errorcode
13498 ,x_msg_count => x_msg_count
13499 ,x_msg_data => x_msg_data
13500 );
13501
13502 -- Standard check of p_commit
13503 IF FND_API.To_Boolean(p_commit) THEN
13504 COMMIT WORK;
13505 END IF;
13506 EXCEPTION
13507 WHEN OTHERS THEN
13508 IF FND_API.TO_BOOLEAN(p_commit) THEN
13509 ROLLBACK TO Update_Mapping_PUB;
13510 END IF;
13511 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13512
13513 IF l_application_id IS NULL THEN
13514 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupApplicationIDFoundForPKs';
13515 ELSE
13516 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13517 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13518 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13519 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13520 FND_MSG_PUB.Add;
13521 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13522 ,p_count => x_msg_count
13523 ,p_data => x_msg_data);
13524
13525 END IF;
13526
13527 END Update_Mapping;
13528
13529 ----------------------------------------------------------------------------
13530
13531 -- call this API to delete all mappings for a given Action and Function
13532 PROCEDURE Delete_Func_Mapping (
13533 p_api_version IN NUMBER
13534 ,p_function_id IN NUMBER
13535 ,p_mapped_obj_type IN VARCHAR2
13536 ,p_mapped_obj_pk1_value IN VARCHAR2
13537 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13538 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13539 ,x_return_status OUT NOCOPY VARCHAR2
13540 ,x_errorcode OUT NOCOPY NUMBER
13541 ,x_msg_count OUT NOCOPY NUMBER
13542 ,x_msg_data OUT NOCOPY VARCHAR2
13543 ) IS
13544
13545 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Func_Mapping';
13546
13547 --we don't use l_api_version yet, but eventually we might:
13548 --if we change required parameters, version goes FROM n.x to (n+1).x
13549 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13550 l_api_version CONSTANT NUMBER := 1.0;
13551
13552 BEGIN
13553
13554 -- Standard start of API savepoint
13555 IF FND_API.To_Boolean(p_commit) THEN
13556 SAVEPOINT Update_Mapping_PUB;
13557 END IF;
13558
13559 -- Check for call compatibility
13560 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13561 l_api_name, G_PKG_NAME)
13562 THEN
13563 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13564 END IF;
13565 -- Initialize message list even though we don't currently use it
13566 IF FND_API.To_Boolean(p_init_msg_list) THEN
13567 FND_MSG_PUB.Initialize;
13568 END IF;
13569
13570 DELETE FROM EGO_MAPPINGS_B
13571 WHERE
13572 FUNCTION_ID = p_function_id AND
13573 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
13574 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value;
13575
13576 -- Standard check of p_commit
13577 IF FND_API.To_Boolean(p_commit) THEN
13578 COMMIT WORK;
13579 END IF;
13580
13581 x_return_status := FND_API.G_RET_STS_SUCCESS;
13582
13583 EXCEPTION
13584 WHEN OTHERS THEN
13585 IF FND_API.To_Boolean(p_commit) THEN
13586 ROLLBACK TO Delete_Func_Mapping_PUB;
13587 END IF;
13588 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13589
13590 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13591 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13592 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13593 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13594 FND_MSG_PUB.Add;
13595 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13596 ,p_count => x_msg_count
13597 ,p_data => x_msg_data);
13598
13599
13600 END Delete_Func_Mapping;
13601
13602 ----------------------------------------------------------------------
13603
13604 -- call this API to delete an individual parameter mapping
13605 PROCEDURE Delete_Func_Param_Mapping (
13606 p_api_version IN NUMBER
13607 ,p_function_id IN NUMBER
13608 ,p_mapped_obj_type IN VARCHAR2
13609 ,p_mapped_obj_pk1_value IN VARCHAR2
13610 ,p_func_param_id IN NUMBER
13611 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13612 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13613 ,x_return_status OUT NOCOPY VARCHAR2
13614 ,x_errorcode OUT NOCOPY NUMBER
13615 ,x_msg_count OUT NOCOPY NUMBER
13616 ,x_msg_data OUT NOCOPY VARCHAR2
13617 ) IS
13618
13619 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Func_Param_Mapping';
13620
13621 --we don't use l_api_version yet, but eventually we might:
13622 --if we change required parameters, version goes FROM n.x to (n+1).x
13623 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13624 l_api_version CONSTANT NUMBER := 1.0;
13625
13626 BEGIN
13627
13628 -- Standard start of API savepoint
13629 IF FND_API.To_Boolean(p_commit) THEN
13630 SAVEPOINT Delete_Func_Param_Mapping_PUB;
13631 END IF;
13632
13633 -- Check for call compatibility
13634 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13635 l_api_name, G_PKG_NAME)
13636 THEN
13637 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13638 END IF;
13639 -- Initialize message list even though we don't currently use it
13640 IF FND_API.To_Boolean(p_init_msg_list) THEN
13641 FND_MSG_PUB.Initialize;
13642 END IF;
13643
13644 DELETE FROM EGO_MAPPINGS_B
13645 WHERE
13646 FUNCTION_ID = p_function_id AND
13647 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
13648 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value AND
13649 FUNC_PARAM_ID = p_func_param_id;
13650
13651 -- Standard check of p_commit
13652 IF FND_API.To_Boolean(p_commit) THEN
13653 COMMIT WORK;
13654 END IF;
13655
13656 x_return_status := FND_API.G_RET_STS_SUCCESS;
13657
13658 EXCEPTION
13659 WHEN OTHERS THEN
13660 IF FND_API.TO_BOOLEAN(p_commit) THEN
13661 ROLLBACK TO Delete_Func_Param_Mapping_PUB;
13662 END IF;
13663 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13664
13665 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13666 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13667 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13668 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13669 FND_MSG_PUB.Add;
13670 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13671 ,p_count => x_msg_count
13672 ,p_data => x_msg_data);
13673
13674
13675 END Delete_Func_Param_Mapping;
13676
13677 ----------------------------------------------------------------------
13678
13679 -----------------------
13680 -- Action Group APIs --
13681 -----------------------
13682
13683 ----------------------------------------------------------------------
13684
13685 PROCEDURE Create_Action_Group (
13686 p_api_version IN NUMBER
13687 ,p_object_id IN NUMBER
13688 ,p_classification_code IN VARCHAR2
13689 ,p_sequence IN NUMBER
13690 ,p_internal_name IN VARCHAR2
13691 ,p_display_name IN VARCHAR2
13692 ,p_description IN VARCHAR2
13693 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13694 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13695 ,x_action_group_id OUT NOCOPY NUMBER
13696 ,x_return_status OUT NOCOPY VARCHAR2
13697 ,x_errorcode OUT NOCOPY NUMBER
13698 ,x_msg_count OUT NOCOPY NUMBER
13699 ,x_msg_data OUT NOCOPY VARCHAR2
13700 ) IS
13701
13702 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Group';
13703
13704 --we don't use l_api_version yet, but eventually we might:
13705 --if we change required parameters, version goes FROM n.x to (n+1).x
13706 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13707 l_api_version CONSTANT NUMBER := 1.0;
13708
13709 l_Sysdate DATE := Sysdate;
13710
13711 BEGIN
13712
13713 -- Standard start of API savepoint
13714 IF FND_API.To_Boolean(p_commit) THEN
13715 SAVEPOINT Create_Action_Group_PUB;
13716 END IF;
13717
13718 -- Check for call compatibility
13719 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13720 l_api_name, G_PKG_NAME)
13721 THEN
13722 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13723 END IF;
13724 -- Initialize message list even though we don't currently use it
13725 IF FND_API.To_Boolean(p_init_msg_list) THEN
13726 FND_MSG_PUB.Initialize;
13727 END IF;
13728
13729 SELECT EGO_ACTION_GROUPS_S.NEXTVAL INTO x_action_group_id FROM DUAL;
13730
13731 INSERT INTO EGO_ACTION_GROUPS_B
13732 (
13733 ACTION_GROUP_ID
13734 ,OBJECT_ID
13735 ,CLASSIFICATION_CODE
13736 ,SEQUENCE
13737 ,INTERNAL_NAME
13738 ,LAST_UPDATE_DATE
13739 ,LAST_UPDATED_BY
13740 ,CREATION_DATE
13741 ,CREATED_BY
13742 ,LAST_UPDATE_LOGIN
13743 )
13744 VALUES
13745 (
13746 x_action_group_id
13747 ,p_object_id
13748 ,p_classification_code
13749 ,p_sequence
13750 ,p_internal_name
13751 ,l_Sysdate
13752 ,g_current_user_id
13753 ,l_Sysdate
13754 ,g_current_user_id
13755 ,g_current_login_id
13756 );
13757
13758 INSERT INTO EGO_ACTION_GROUPS_TL
13759 (
13760 ACTION_GROUP_ID
13761 ,DISPLAY_NAME
13762 ,DESCRIPTION
13763 ,LANGUAGE
13764 ,SOURCE_LANG
13765 ,LAST_UPDATE_DATE
13766 ,LAST_UPDATED_BY
13767 ,CREATION_DATE
13768 ,CREATED_BY
13769 ,LAST_UPDATE_LOGIN
13770 )
13771 SELECT
13772 x_action_group_id
13773 ,p_display_name
13774 ,p_description
13775 ,L.LANGUAGE_CODE
13776 ,USERENV('LANG')
13777 ,l_Sysdate
13778 ,g_current_user_id
13779 ,l_Sysdate
13780 ,g_current_user_id
13781 ,g_current_login_id
13782
13783 FROM FND_LANGUAGES L
13784 WHERE L.INSTALLED_FLAG in ('I', 'B');
13785
13786 -- Standard check of p_commit
13787 IF FND_API.To_Boolean(p_commit) THEN
13788 COMMIT WORK;
13789 END IF;
13790
13791 x_return_status := FND_API.G_RET_STS_SUCCESS;
13792
13793 EXCEPTION
13794 WHEN OTHERS THEN
13795 IF FND_API.To_Boolean(p_commit) THEN
13796 ROLLBACK TO Create_Action_Group_PUB;
13797 END IF;
13798 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13799
13800 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13801 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13802 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13803 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13804 FND_MSG_PUB.Add;
13805 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13806 ,p_count => x_msg_count
13807 ,p_data => x_msg_data);
13808
13809
13810 END Create_Action_Group;
13811
13812 ----------------------------------------------------------------------
13813
13814 PROCEDURE Update_Action_Group (
13815 p_api_version IN NUMBER
13816 ,p_action_group_id IN NUMBER
13817 ,p_sequence IN NUMBER
13818 ,p_internal_name IN VARCHAR2
13819 ,p_display_name IN VARCHAR2
13820 ,p_description IN VARCHAR2
13821 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13822 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13823 ,x_return_status OUT NOCOPY VARCHAR2
13824 ,x_errorcode OUT NOCOPY NUMBER
13825 ,x_msg_count OUT NOCOPY NUMBER
13826 ,x_msg_data OUT NOCOPY VARCHAR2
13827 ) IS
13828
13829 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Group';
13830
13831 --we don't use l_api_version yet, but eventually we might:
13832 --if we change required parameters, version goes FROM n.x to (n+1).x
13833 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13834 l_api_version CONSTANT NUMBER := 1.0;
13835
13836 l_Sysdate DATE := Sysdate;
13837
13838 BEGIN
13839
13840 -- Standard start of API savepoint
13841 IF FND_API.To_Boolean(p_commit) THEN
13842 SAVEPOINT Update_Action_Group_PUB;
13843 END IF;
13844
13845 -- Check for call compatibility
13846 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13847 l_api_name, G_PKG_NAME)
13848 THEN
13849 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13850 END IF;
13851 -- Initialize message list even though we don't currently use it
13852 IF FND_API.To_Boolean(p_init_msg_list) THEN
13853 FND_MSG_PUB.Initialize;
13854 END IF;
13855
13856 UPDATE EGO_ACTION_GROUPS_B
13857 SET
13858 SEQUENCE = p_sequence
13859 , INTERNAL_NAME = p_internal_name
13860 , LAST_UPDATE_DATE = l_Sysdate
13861 , LAST_UPDATED_BY = g_current_user_id
13862 , LAST_UPDATE_LOGIN = g_current_login_id
13863
13864 WHERE
13865 ACTION_GROUP_ID = p_action_group_id;
13866
13867 UPDATE EGO_ACTION_GROUPS_TL
13868 SET
13869 DESCRIPTION = p_description
13870 , DISPLAY_NAME = p_display_name
13871 , LAST_UPDATE_DATE = l_Sysdate
13872 , LAST_UPDATED_BY = g_current_user_id
13873 , LAST_UPDATE_LOGIN = g_current_login_id
13874 , SOURCE_LANG = USERENV('LANG')
13875
13876 WHERE
13877 -- ACTION_GROUP_ID = p_action_group_id AND LANGUAGE = USERENV('LANG');
13878 ACTION_GROUP_ID = p_action_group_id AND USERENV('LANG') IN (LANGUAGE , SOURCE_LANG);
13879
13880 -- Standard check of p_commit
13881 IF FND_API.To_Boolean(p_commit) THEN
13882 COMMIT WORK;
13883 END IF;
13884
13885 x_return_status := FND_API.G_RET_STS_SUCCESS;
13886
13887 EXCEPTION
13888 WHEN OTHERS THEN
13889 IF FND_API.TO_BOOLEAN(p_commit) THEN
13890 ROLLBACK TO Update_Action_Group_PUB;
13891 END IF;
13892 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13893
13894 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13895 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13896 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13897 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13898 FND_MSG_PUB.Add;
13899 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13900 ,p_count => x_msg_count
13901 ,p_data => x_msg_data);
13902
13903
13904 END Update_Action_Group;
13905
13906 ----------------------------------------------------------------------
13907
13908 PROCEDURE Delete_Action_Group (
13909 p_api_version IN NUMBER
13910 ,p_action_group_id IN NUMBER
13911 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13912 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13913 ,x_return_status OUT NOCOPY VARCHAR2
13914 ,x_errorcode OUT NOCOPY NUMBER
13915 ,x_msg_count OUT NOCOPY NUMBER
13916 ,x_msg_data OUT NOCOPY VARCHAR2
13917 ) IS
13918
13919 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action_Group';
13920
13921 --we don't use l_api_version yet, but eventually we might:
13922 --if we change required parameters, version goes FROM n.x to (n+1).x
13923 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13924 l_api_version CONSTANT NUMBER := 1.0;
13925
13926 BEGIN
13927
13928 -- Standard start of API savepoint
13929 IF FND_API.To_Boolean(p_commit) THEN
13930 SAVEPOINT Delete_Action_Group_PUB;
13931 END IF;
13932
13933 -- Check for call compatibility
13934 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13935 l_api_name, G_PKG_NAME)
13936 THEN
13937 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13938 END IF;
13939 -- Initialize message list even though we don't currently use it
13940 IF FND_API.To_Boolean(p_init_msg_list) THEN
13941 FND_MSG_PUB.Initialize;
13942 END IF;
13943
13944 -- If there are Actions in this Action Group, we delete their entries
13945 -- in the Action_Group_Entries table (but we don't delete the Actions).
13946 DELETE FROM EGO_ACTN_GRP_ENTRIES_B
13947 WHERE
13948 ACTION_GROUP_ID = p_action_group_id;
13949
13950 DELETE FROM EGO_ACTION_GROUPS_B
13951 WHERE
13952 ACTION_GROUP_ID = p_action_group_id;
13953
13954 DELETE FROM EGO_ACTION_GROUPS_TL
13955 WHERE
13956 ACTION_GROUP_ID = p_action_group_id;
13957
13958 -- Standard check of p_commit
13959 IF FND_API.To_Boolean(p_commit) THEN
13960 COMMIT WORK;
13961 END IF;
13962
13963 x_return_status := FND_API.G_RET_STS_SUCCESS;
13964
13965 EXCEPTION
13966 WHEN OTHERS THEN
13967 IF FND_API.To_Boolean(p_commit) THEN
13968 ROLLBACK TO Delete_Action_Group_PUB;
13969 END IF;
13970 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13971
13972 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13973 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13974 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13975 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13976 FND_MSG_PUB.Add;
13977 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13978 ,p_count => x_msg_count
13979 ,p_data => x_msg_data);
13980
13981
13982 END Delete_Action_Group;
13983
13984 ----------------------------------------------------------------------
13985
13986 -----------------------------
13987 -- Action Group Entry APIs --
13988 -----------------------------
13989
13990 ----------------------------------------------------------------------
13991
13992 PROCEDURE Create_Action_Group_Entry (
13993 p_api_version IN NUMBER
13994 ,p_action_group_id IN NUMBER
13995 ,p_action_id IN NUMBER
13996 ,p_sequence IN NUMBER
13997 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13998 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13999 ,x_return_status OUT NOCOPY VARCHAR2
14000 ,x_errorcode OUT NOCOPY NUMBER
14001 ,x_msg_count OUT NOCOPY NUMBER
14002 ,x_msg_data OUT NOCOPY VARCHAR2
14003 ) IS
14004
14005 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Group_Entry';
14006
14007 --we don't use l_api_version yet, but eventually we might:
14008 --if we change required parameters, version goes FROM n.x to (n+1).x
14009 --if we change optional parameters, version goes FROM x.n to x.(n+1)
14010 l_api_version CONSTANT NUMBER := 1.0;
14011
14012 l_Sysdate DATE := Sysdate;
14013 l_exist_action_count NUMBER := 0;
14014
14015 BEGIN
14016
14017 -- Standard start of API savepoint
14018 IF FND_API.To_Boolean(p_commit) THEN
14019 SAVEPOINT Create_Action_Group_Entry_PUB;
14020 END IF;
14021
14022 -- Check for call compatibility
14023 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
14024 l_api_name, G_PKG_NAME)
14025 THEN
14026 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14027 END IF;
14028 -- Initialize message list even though we don't currently use it
14029 IF FND_API.To_Boolean(p_init_msg_list) THEN
14030 FND_MSG_PUB.Initialize;
14031 END IF;
14032
14033 SELECT COUNT(ACTION_ID)
14034 INTO l_exist_action_count
14035 FROM EGO_ACTN_GRP_ENTRIES_B
14036 WHERE ACTION_GROUP_ID = p_action_group_id
14037 AND ACTION_ID = p_action_id;
14038
14039 IF (l_exist_action_count = 0) THEN
14040 INSERT INTO EGO_ACTN_GRP_ENTRIES_B
14041 (
14042 ACTION_GROUP_ID
14043 ,ACTION_ID
14044 ,SEQUENCE
14045 ,LAST_UPDATE_DATE
14046 ,LAST_UPDATED_BY
14047 ,CREATION_DATE
14048 ,CREATED_BY
14049 ,LAST_UPDATE_LOGIN
14050 )
14051 VALUES
14052 (
14053 p_action_group_id
14054 ,p_action_id
14055 ,p_sequence
14056 ,l_Sysdate
14057 ,g_current_user_id
14058 ,l_Sysdate
14059 ,g_current_user_id
14060 ,g_current_login_id
14061 );
14062 END IF;
14063
14064 -- Standard check of p_commit
14065 IF FND_API.To_Boolean(p_commit) THEN
14066 COMMIT WORK;
14067 END IF;
14068
14069 x_return_status := FND_API.G_RET_STS_SUCCESS;
14070
14071 EXCEPTION
14072 WHEN OTHERS THEN
14073 IF FND_API.To_Boolean(p_commit) THEN
14074 ROLLBACK TO Create_Action_Group_Entry_PUB;
14075 END IF;
14076 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14077
14078 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
14079 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
14080 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
14081 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
14082 FND_MSG_PUB.Add;
14083 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14084 ,p_count => x_msg_count
14085 ,p_data => x_msg_data);
14086
14087
14088 END Create_Action_Group_Entry;
14089
14090 ----------------------------------------------------------------------
14091
14092 PROCEDURE Update_Action_Group_Entry (
14093 p_api_version IN NUMBER
14094 ,p_action_group_id IN NUMBER
14095 ,p_action_id IN NUMBER
14096 ,p_sequence IN NUMBER
14097 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
14098 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
14099 ,x_return_status OUT NOCOPY VARCHAR2
14100 ,x_errorcode OUT NOCOPY NUMBER
14101 ,x_msg_count OUT NOCOPY NUMBER
14102 ,x_msg_data OUT NOCOPY VARCHAR2
14103 ) IS
14104
14105 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Group_Entry';
14106
14107 --we don't use l_api_version yet, but eventually we might:
14108 --if we change required parameters, version goes FROM n.x to (n+1).x
14109 --if we change optional parameters, version goes FROM x.n to x.(n+1)
14110 l_api_version CONSTANT NUMBER := 1.0;
14111
14112 l_Sysdate DATE := Sysdate;
14113 l_exist_action_count NUMBER := 0;
14114
14115 BEGIN
14116
14117 -- Standard start of API savepoint
14118 IF FND_API.To_Boolean(p_commit) THEN
14119 SAVEPOINT Update_Action_Group_Entry_PUB;
14120 END IF;
14121
14122 -- Check for call compatibility
14123 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
14124 l_api_name, G_PKG_NAME)
14125 THEN
14126 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14127 END IF;
14128 -- Initialize message list even though we don't currently use it
14129 IF FND_API.To_Boolean(p_init_msg_list) THEN
14130 FND_MSG_PUB.Initialize;
14131 END IF;
14132
14133 UPDATE EGO_ACTN_GRP_ENTRIES_B
14134 SET SEQUENCE = p_sequence
14135 WHERE ACTION_GROUP_ID = p_action_group_id
14136 AND ACTION_ID = p_action_id;
14137
14138 -- Standard check of p_commit
14139 IF FND_API.To_Boolean(p_commit) THEN
14140 COMMIT WORK;
14141 END IF;
14142
14143 x_return_status := FND_API.G_RET_STS_SUCCESS;
14144
14145 EXCEPTION
14146 WHEN OTHERS THEN
14147 IF FND_API.To_Boolean(p_commit) THEN
14148 ROLLBACK TO Update_Action_Group_Entry_PUB;
14149 END IF;
14150 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14151
14152 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
14153 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
14154 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
14155 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
14156 FND_MSG_PUB.Add;
14157 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14158 ,p_count => x_msg_count
14159 ,p_data => x_msg_data);
14160
14161
14162 END Update_Action_Group_Entry;
14163
14164 ----------------------------------------------------------------------
14165
14166 PROCEDURE Delete_Action_Group_Entry (
14167 p_api_version IN NUMBER
14168 ,p_action_group_id IN NUMBER
14169 ,p_action_id IN NUMBER
14170 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
14171 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
14172 ,x_return_status OUT NOCOPY VARCHAR2
14173 ,x_errorcode OUT NOCOPY NUMBER
14174 ,x_msg_count OUT NOCOPY NUMBER
14175 ,x_msg_data OUT NOCOPY VARCHAR2
14176 ) IS
14177
14178 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action_Group_Entry';
14179
14180 --we don't use l_api_version yet, but eventually we might:
14181 --if we change required parameters, version goes FROM n.x to (n+1).x
14182 --if we change optional parameters, version goes FROM x.n to x.(n+1)
14183 l_api_version CONSTANT NUMBER := 1.0;
14184
14185 BEGIN
14186
14187 -- Standard start of API savepoint
14188 IF FND_API.To_Boolean(p_commit) THEN
14189 SAVEPOINT Update_Action_Group_Entry_PUB;
14190 END IF;
14191
14192 -- Check for call compatibility
14193 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
14194 l_api_name, G_PKG_NAME)
14195 THEN
14196 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14197 END IF;
14198 -- Initialize message list even though we don't currently use it
14199 IF FND_API.To_Boolean(p_init_msg_list) THEN
14200 FND_MSG_PUB.Initialize;
14201 END IF;
14202
14203 DELETE FROM EGO_ACTN_GRP_ENTRIES_B
14204 WHERE
14205 ACTION_GROUP_ID = p_action_group_id AND
14206 ACTION_ID = p_action_id;
14207
14208 -- Standard check of p_commit
14209 IF FND_API.To_Boolean(p_commit) THEN
14210 COMMIT WORK;
14211 END IF;
14212
14213 x_return_status := FND_API.G_RET_STS_SUCCESS;
14214
14215 EXCEPTION
14216 WHEN OTHERS THEN
14217 IF FND_API.To_Boolean(p_commit) THEN
14218 ROLLBACK TO Delete_Action_Group_Entry_PUB;
14219 END IF;
14220 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14221
14222 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
14223 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
14224 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
14225 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
14226 FND_MSG_PUB.Add;
14227 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14228 ,p_count => x_msg_count
14229 ,p_data => x_msg_data);
14230
14231
14232 END Delete_Action_Group_Entry;
14233
14234 ----------------------------------------------------------------------
14235
14236 PROCEDURE Add_Language_for_Action IS
14237
14238 BEGIN
14239
14240 delete from EGO_ACTIONS_TL T
14241 where not exists
14242 (select NULL
14243 from EGO_ACTIONS_B B
14244 where B.ACTION_ID = T.ACTION_ID
14245 );
14246
14247 update EGO_ACTIONS_TL T set (
14248 DESCRIPTION
14249 ) = (select
14250 B.DESCRIPTION
14251 from EGO_ACTIONS_TL B
14252 where B.ACTION_ID = T.ACTION_ID
14253 and B.LANGUAGE = T.SOURCE_LANG)
14254 where (
14255 T.ACTION_ID,
14256 T.LANGUAGE
14257 ) in (select
14258 SUBT.ACTION_ID,
14259 SUBT.LANGUAGE
14260 from EGO_ACTIONS_TL SUBB, EGO_ACTIONS_TL SUBT
14261 where SUBB.ACTION_ID = SUBT.ACTION_ID
14262 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14263 and (SUBB.DESCRIPTION <> SUBT.DESCRIPTION
14264 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
14265 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
14266 ));
14267
14268 insert into EGO_ACTIONS_TL (
14269 ACTION_ID,
14270 DESCRIPTION,
14271 CREATED_BY,
14272 CREATION_DATE,
14273 LAST_UPDATED_BY,
14274 LAST_UPDATE_DATE,
14275 LAST_UPDATE_LOGIN,
14276 LANGUAGE,
14277 SOURCE_LANG)
14278 select
14279 B.ACTION_ID,
14280 B.DESCRIPTION,
14281 B.CREATED_BY,
14282 B.CREATION_DATE,
14283 B.LAST_UPDATED_BY,
14284 B.LAST_UPDATE_DATE,
14285 B.LAST_UPDATE_LOGIN,
14286 L.LANGUAGE_CODE,
14287 B.SOURCE_LANG
14288 from EGO_ACTIONS_TL B, FND_LANGUAGES L
14289 where L.INSTALLED_FLAG in ('I', 'B')
14290 and B.LANGUAGE = userenv('LANG')
14291 and not exists
14292 (select NULL
14293 from EGO_ACTIONS_TL T
14294 where T.ACTION_ID = B.ACTION_ID
14295 and T.LANGUAGE = L.LANGUAGE_CODE);
14296
14297 END Add_Language_for_Action;
14298
14299 ----------------------------------------------------------------------
14300
14301
14302 PROCEDURE Add_Language_for_Action_Group IS
14303 BEGIN
14304
14305 delete from EGO_ACTION_GROUPS_TL T
14306 where not exists
14307 (select NULL
14308 from EGO_ACTION_GROUPS_B B
14309 where B.ACTION_GROUP_ID = T.ACTION_GROUP_ID
14310 );
14311
14312 update EGO_ACTION_GROUPS_TL T set (
14313 DISPLAY_NAME,
14314 DESCRIPTION
14315 ) = (select
14316 B.DISPLAY_NAME,
14317 B.DESCRIPTION
14318 from EGO_ACTION_GROUPS_TL B
14319 where B.ACTION_GROUP_ID = T.ACTION_GROUP_ID
14320 and B.LANGUAGE = T.SOURCE_LANG)
14321 where (
14322 T.ACTION_GROUP_ID,
14323 T.LANGUAGE
14324 ) in (select
14325 SUBT.ACTION_GROUP_ID,
14326 SUBT.LANGUAGE
14327 from EGO_ACTION_GROUPS_TL SUBB, EGO_ACTION_GROUPS_TL SUBT
14328 where SUBB.ACTION_GROUP_ID = SUBT.ACTION_GROUP_ID
14329 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14330 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
14331 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
14332 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
14333 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
14334 ));
14335
14336 insert into EGO_ACTION_GROUPS_TL (
14337 ACTION_GROUP_ID,
14338 DISPLAY_NAME,
14339 DESCRIPTION,
14340 CREATED_BY,
14341 CREATION_DATE,
14342 LAST_UPDATED_BY,
14343 LAST_UPDATE_DATE,
14344 LAST_UPDATE_LOGIN,
14345 LANGUAGE,
14346 SOURCE_LANG
14347 ) select
14348 B.ACTION_GROUP_ID,
14349 B.DISPLAY_NAME,
14350 B.DESCRIPTION,
14351 B.CREATED_BY,
14352 B.CREATION_DATE,
14353 B.LAST_UPDATED_BY,
14354 B.LAST_UPDATE_DATE,
14355 B.LAST_UPDATE_LOGIN,
14356 L.LANGUAGE_CODE,
14357 B.SOURCE_LANG
14358 from EGO_ACTION_GROUPS_TL B, FND_LANGUAGES L
14359 where L.INSTALLED_FLAG in ('I', 'B')
14360 and B.LANGUAGE = userenv('LANG')
14361 and not exists
14362 (select NULL
14363 from EGO_ACTION_GROUPS_TL T
14364 where T.ACTION_GROUP_ID = B.ACTION_GROUP_ID
14365 and T.LANGUAGE = L.LANGUAGE_CODE);
14366
14367 END Add_Language_for_Action_Group;
14368
14369 ----------------------------------------------------------------------
14370
14371 PROCEDURE Add_Language_for_Function IS
14372 BEGIN
14373
14374 delete from EGO_FUNCTIONS_TL T
14375 where not exists
14376 (select NULL
14377 from EGO_FUNCTIONS_B B
14378 where B.FUNCTION_ID = T.FUNCTION_ID
14379 );
14380
14381 update EGO_FUNCTIONS_TL T set (
14382 DISPLAY_NAME,
14383 DESCRIPTION
14384 ) = (select
14385 B.DISPLAY_NAME,
14386 B.DESCRIPTION
14387 from EGO_FUNCTIONS_TL B
14388 where B.FUNCTION_ID = T.FUNCTION_ID
14389 and B.LANGUAGE = T.SOURCE_LANG)
14390 where (
14391 T.FUNCTION_ID,
14392 T.LANGUAGE
14393 ) in (select
14394 SUBT.FUNCTION_ID,
14395 SUBT.LANGUAGE
14396 from EGO_FUNCTIONS_TL SUBB, EGO_FUNCTIONS_TL SUBT
14397 where SUBB.FUNCTION_ID = SUBT.FUNCTION_ID
14398 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14399 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
14400 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
14401 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
14402 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
14403 ));
14404
14405 insert into EGO_FUNCTIONS_TL (
14406 CREATION_DATE,
14407 LAST_UPDATED_BY,
14408 LAST_UPDATE_DATE,
14409 LAST_UPDATE_LOGIN,
14410 CREATED_BY,
14411 FUNCTION_ID,
14412 DISPLAY_NAME,
14413 DESCRIPTION,
14414 LANGUAGE,
14415 SOURCE_LANG
14416 ) select
14417 B.CREATION_DATE,
14418 B.LAST_UPDATED_BY,
14419 B.LAST_UPDATE_DATE,
14420 B.LAST_UPDATE_LOGIN,
14421 B.CREATED_BY,
14422 B.FUNCTION_ID,
14423 B.DISPLAY_NAME,
14424 B.DESCRIPTION,
14425 L.LANGUAGE_CODE,
14426 B.SOURCE_LANG
14427 from EGO_FUNCTIONS_TL B, FND_LANGUAGES L
14428 where L.INSTALLED_FLAG in ('I', 'B')
14429 and B.LANGUAGE = userenv('LANG')
14430 and not exists
14431 (select NULL
14432 from EGO_FUNCTIONS_TL T
14433 where T.FUNCTION_ID = B.FUNCTION_ID
14434 and T.LANGUAGE = L.LANGUAGE_CODE);
14435
14436 END Add_Language_for_Function;
14437
14438 ----------------------------------------------------------------------
14439
14440 PROCEDURE Add_Language_for_Func_Param IS
14441 BEGIN
14442
14443 delete from EGO_FUNC_PARAMS_TL T
14444 where not exists
14445 (select NULL
14446 from EGO_FUNC_PARAMS_B B
14447 where B.FUNC_PARAM_ID = T.FUNC_PARAM_ID
14448 );
14449
14450 update EGO_FUNC_PARAMS_TL T set (
14451 DISPLAY_NAME,
14452 DESCRIPTION
14453 ) = (select
14454 B.DISPLAY_NAME,
14455 B.DESCRIPTION
14456 from EGO_FUNC_PARAMS_TL B
14457 where B.FUNC_PARAM_ID = T.FUNC_PARAM_ID
14458 and B.LANGUAGE = T.SOURCE_LANG)
14459 where (
14460 T.FUNC_PARAM_ID,
14461 T.LANGUAGE
14462 ) in (select
14463 SUBT.FUNC_PARAM_ID,
14464 SUBT.LANGUAGE
14465 from EGO_FUNC_PARAMS_TL SUBB, EGO_FUNC_PARAMS_TL SUBT
14466 where SUBB.FUNC_PARAM_ID = SUBT.FUNC_PARAM_ID
14467 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14468 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
14469 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
14470 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
14471 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
14472 ));
14473
14474 insert into EGO_FUNC_PARAMS_TL (
14475 FUNC_PARAM_ID,
14476 DISPLAY_NAME,
14477 DESCRIPTION,
14478 CREATED_BY,
14479 CREATION_DATE,
14480 LAST_UPDATED_BY,
14481 LAST_UPDATE_DATE,
14482 LAST_UPDATE_LOGIN,
14483 LANGUAGE,
14484 SOURCE_LANG
14485 ) select
14486 B.FUNC_PARAM_ID,
14487 B.DISPLAY_NAME,
14488 B.DESCRIPTION,
14489 B.CREATED_BY,
14490 B.CREATION_DATE,
14491 B.LAST_UPDATED_BY,
14492 B.LAST_UPDATE_DATE,
14493 B.LAST_UPDATE_LOGIN,
14494 L.LANGUAGE_CODE,
14495 B.SOURCE_LANG
14496 from EGO_FUNC_PARAMS_TL B, FND_LANGUAGES L
14497 where L.INSTALLED_FLAG in ('I', 'B')
14498 and B.LANGUAGE = userenv('LANG')
14499 and not exists
14500 (select NULL
14501 from EGO_FUNC_PARAMS_TL T
14502 where T.FUNC_PARAM_ID = B.FUNC_PARAM_ID
14503 and T.LANGUAGE = L.LANGUAGE_CODE);
14504
14505 END Add_Language_for_Func_Param;
14506
14507 ----------------------------------------------------------------------
14508
14509 PROCEDURE Add_Language_for_Pages IS
14510 BEGIN
14511
14512 delete from EGO_PAGES_TL T
14513 where not exists
14514 (select NULL
14515 from EGO_PAGES_B B
14516 where B.PAGE_ID = T.PAGE_ID
14517 );
14518
14519 update EGO_PAGES_TL T set (
14520 DISPLAY_NAME,
14521 DESCRIPTION
14522 ) = (select
14523 B.DISPLAY_NAME,
14524 B.DESCRIPTION
14525 from EGO_PAGES_TL B
14526 where B.PAGE_ID = T.PAGE_ID
14527 and B.LANGUAGE = T.SOURCE_LANG)
14528 where (
14529 T.PAGE_ID,
14530 T.LANGUAGE
14531 ) in (select
14532 SUBT.PAGE_ID,
14533 SUBT.LANGUAGE
14534 from EGO_PAGES_TL SUBB, EGO_PAGES_TL SUBT
14535 where SUBB.PAGE_ID = SUBT.PAGE_ID
14536 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14537 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
14538 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
14539 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
14540 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
14541 ));
14542
14543 insert into EGO_PAGES_TL (
14544 PAGE_ID,
14545 DISPLAY_NAME,
14546 DESCRIPTION,
14547 CREATED_BY,
14548 CREATION_DATE,
14549 LAST_UPDATED_BY,
14550 LAST_UPDATE_DATE,
14551 LAST_UPDATE_LOGIN,
14552 LANGUAGE,
14553 SOURCE_LANG
14554 ) select
14555 B.PAGE_ID,
14556 B.DISPLAY_NAME,
14557 B.DESCRIPTION,
14558 B.CREATED_BY,
14559 B.CREATION_DATE,
14560 B.LAST_UPDATED_BY,
14561 B.LAST_UPDATE_DATE,
14562 B.LAST_UPDATE_LOGIN,
14563 L.LANGUAGE_CODE,
14564 B.SOURCE_LANG
14565 from EGO_PAGES_TL B, FND_LANGUAGES L
14566 where L.INSTALLED_FLAG in ('I', 'B')
14567 and B.LANGUAGE = userenv('LANG')
14568 and not exists
14569 (select NULL
14570 from EGO_PAGES_TL T
14571 where T.PAGE_ID = B.PAGE_ID
14572 and T.LANGUAGE = L.LANGUAGE_CODE);
14573
14574 END Add_Language_for_Pages;
14575
14576 ----------------------------------------------------------------------
14577
14578 PROCEDURE Add_Language_for_Data_level IS
14579 BEGIN
14580
14581 DELETE FROM EGO_DATA_LEVEL_TL T
14582 WHERE NOT EXISTS
14583 (SELECT NULL
14584 FROM EGO_DATA_LEVEL_B B
14585 WHERE B.DATA_LEVEL_ID = T.DATA_LEVEL_ID
14586 );
14587
14588 UPDATE EGO_DATA_LEVEL_TL T
14589 SET (USER_DATA_LEVEL_NAME
14590 )
14591 =
14592 (SELECT B.USER_DATA_LEVEL_NAME
14593 FROM EGO_DATA_LEVEL_TL B
14594 WHERE B.DATA_LEVEL_ID = T.DATA_LEVEL_ID
14595 AND B.LANGUAGE = T.SOURCE_LANG)
14596 WHERE (
14597 T.DATA_LEVEL_ID,
14598 T.LANGUAGE
14599 )
14600 IN
14601 (SELECT
14602 SUBT.DATA_LEVEL_ID,
14603 SUBT.LANGUAGE
14604 from EGO_DATA_LEVEL_TL SUBB, EGO_DATA_LEVEL_TL SUBT
14605 where SUBB.DATA_LEVEL_ID = SUBT.DATA_LEVEL_ID
14606 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14607 and SUBB.USER_DATA_LEVEL_NAME <> SUBT.USER_DATA_LEVEL_NAME
14608 );
14609
14610 INSERT INTO EGO_DATA_LEVEL_TL (
14611 DATA_LEVEL_ID,
14612 USER_DATA_LEVEL_NAME,
14613 CREATED_BY,
14614 CREATION_DATE,
14615 LAST_UPDATED_BY,
14616 LAST_UPDATE_DATE,
14617 LAST_UPDATE_LOGIN,
14618 LANGUAGE,
14619 SOURCE_LANG
14620 ) select
14621 B.DATA_LEVEL_ID,
14622 B.USER_DATA_LEVEL_NAME,
14623 B.CREATED_BY,
14624 B.CREATION_DATE,
14625 B.LAST_UPDATED_BY,
14626 B.LAST_UPDATE_DATE,
14627 B.LAST_UPDATE_LOGIN,
14628 L.LANGUAGE_CODE,
14629 B.SOURCE_LANG
14630 from EGO_DATA_LEVEL_TL B, FND_LANGUAGES L
14631 where L.INSTALLED_FLAG in ('I', 'B')
14632 and B.LANGUAGE = userenv('LANG')
14633 and not exists
14634 (select NULL
14635 from EGO_DATA_LEVEL_TL T
14636 where T.DATA_LEVEL_ID = B.DATA_LEVEL_ID
14637 and T.LANGUAGE = L.LANGUAGE_CODE);
14638
14639 END Add_Language_for_Data_level;
14640
14641 ----------------------------------------------------------------------
14642
14643
14644 PROCEDURE Add_Language_for_Flex_value IS
14645 BEGIN
14646
14647 DELETE FROM EGO_FLEX_VALUE_VERSION_TL T
14648 WHERE NOT EXISTS
14649 (SELECT NULL
14650 FROM EGO_FLEX_VALUE_VERSION_B B
14651 WHERE B.flex_value_id = T.flex_value_id
14652 );
14653
14654 UPDATE EGO_FLEX_VALUE_VERSION_TL T
14655 SET (DESCRIPTION,
14656 FLEX_VALUE_MEANING
14657 )
14658 =
14659 (SELECT B.DESCRIPTION,
14660 B.FLEX_VALUE_MEANING
14661 FROM EGO_FLEX_VALUE_VERSION_TL B
14662 WHERE B.flex_value_id = T.flex_value_id
14663 AND B.LANGUAGE = T.SOURCE_LANG)
14664 WHERE (
14665 T.flex_value_id,
14666 T.LANGUAGE
14667 )
14668 IN
14669 (SELECT
14670 SUBT.flex_value_id,
14671 SUBT.LANGUAGE
14672 from EGO_FLEX_VALUE_VERSION_TL SUBB, EGO_FLEX_VALUE_VERSION_TL SUBT
14673 where SUBB.flex_value_id = SUBT.flex_value_id
14674 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
14675 and ( SUBB.FLEX_VALUE_MEANING <> SUBT.FLEX_VALUE_MEANING
14676 OR SUBB.DESCRIPTION <> SUBT.DESCRIPTION
14677 OR (SUBB.DESCRIPTION IS NULL AND SUBT.DESCRIPTION IS NOT NULL )
14678 OR (SUBB.DESCRIPTION IS NOT NULL AND SUBT.DESCRIPTION IS NULL)
14679 )
14680 );
14681
14682
14683
14684 INSERT INTO EGO_FLEX_VALUE_VERSION_TL (
14685 FLEX_VALUE_ID,
14686 VERSION_SEQ_ID,
14687 LAST_UPDATE_DATE,
14688 LAST_UPDATED_BY,
14689 CREATION_DATE,
14690 CREATED_BY,
14691 LAST_UPDATE_LOGIN,
14692 DESCRIPTION,
14693 FLEX_VALUE_MEANING,
14694 LANGUAGE,
14695 SOURCE_LANG
14696 ) SELECT
14697 B.FLEX_VALUE_ID,
14698 B.VERSION_SEQ_ID,
14699 B.LAST_UPDATE_DATE,
14700 B.LAST_UPDATED_BY,
14701 B.CREATION_DATE,
14702 B.CREATED_BY,
14703 B.LAST_UPDATE_LOGIN,
14704 B.DESCRIPTION,
14705 B.FLEX_VALUE_MEANING,
14706 L.LANGUAGE_CODE,
14707 B.SOURCE_LANG
14708 FROM EGO_FLEX_VALUE_VERSION_TL B, FND_LANGUAGES L
14709 where L.INSTALLED_FLAG in ('I', 'B')
14710 and B.LANGUAGE = userenv('LANG')
14711 and not exists
14712 (select NULL
14713 from EGO_FLEX_VALUE_VERSION_TL T
14714 where T.flex_value_id = B.flex_value_id
14715 and T.LANGUAGE = L.LANGUAGE_CODE);
14716
14717 END Add_Language_for_Flex_value;
14718
14719 ----------------------------------------------------------------------
14720
14721
14722
14723 PROCEDURE ADD_LANGUAGE (
14724 p_tl_table_name IN VARCHAR2
14725 ) IS
14726
14727 BEGIN
14728
14729 IF (p_tl_table_name = 'EGO_ACTIONS_TL') THEN
14730 Add_Language_for_Action;
14731 ELSIF (p_tl_table_name = 'EGO_ACTION_GROUPS_TL') THEN
14732 Add_Language_for_Action_Group;
14733 ELSIF (p_tl_table_name = 'EGO_FUNCTIONS_TL') THEN
14734 Add_Language_for_Function;
14735 ELSIF (p_tl_table_name = 'EGO_FUNC_PARAMS_TL') THEN
14736 Add_Language_for_Func_Param;
14737 ELSIF (p_tl_table_name = 'EGO_PAGES_TL') THEN
14738 Add_Language_for_Pages;
14739 ELSIF (p_tl_table_name = 'EGO_DATA_LEVEL_TL') THEN
14740 Add_Language_for_Data_level;
14741 ELSIF (p_tl_table_name = 'EGO_FLEX_VALUE_VERSION_TL') THEN
14742 Add_Language_for_Flex_Value;
14743 END IF;
14744
14745 END ADD_LANGUAGE;
14746
14747 ---------------------------------------------------------------------
14748 FUNCTION Return_Association_Existance
14749 (p_application_id IN NUMBER
14750 ,p_attr_group_type IN VARCHAR2
14751 ,p_attr_group_name IN VARCHAR2) RETURN VARCHAR2 IS
14752 --
14753 -- The function takes the application_id, attribute Group Type
14754 -- and Attribute Group Name and determines whether any associations
14755 -- are created for the attribute specified
14756 -- If there are any existing associations
14757 -- then 1 will be returned
14758 -- else 0 will be returned
14759 --
14760
14761 check_association_existance BOOLEAN := true;
14762 BEGIN
14763 check_association_existance := Check_Associations_Exist
14764 (p_application_id => p_application_id
14765 ,p_attr_group_type => p_attr_group_type
14766 ,p_attr_group_name => p_attr_group_name);
14767 IF check_association_existance THEN
14768 RETURN '1';
14769 ELSE
14770 RETURN '0';
14771 END IF;
14772
14773 EXCEPTION
14774 WHEN OTHERS THEN
14775 return '1';
14776 END Return_Association_Existance;
14777
14778 --------------------------------------------------------------------------
14779
14780 PROCEDURE Update_AGV_Name(
14781 p_api_version IN NUMBER
14782 ,p_application_id IN NUMBER
14783 ,p_attr_group_type IN VARCHAR2
14784 ,p_attr_group_name IN VARCHAR2
14785 ,p_agv_name IN VARCHAR2
14786 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
14787 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
14788 ,x_return_status OUT NOCOPY VARCHAR2
14789 ,x_errorcode OUT NOCOPY NUMBER
14790 ,x_msg_count OUT NOCOPY NUMBER
14791 ,x_msg_data OUT NOCOPY VARCHAR2)
14792 IS
14793
14794 -- Start OF comments
14795 -- API name : Update_AGV_Name
14796 -- TYPE : Public
14797 -- Pre-reqs : None
14798 -- FUNCTION : Update Table 'ego_fnd_dsc_flx_ctx_ext'
14799 -- for attribute View Name
14800 -- Version: Current Version 1.0
14801 -- Previous Version : None
14802 --
14803 -- END OF comments
14804 fnd_apps_schema VARCHAR2(30) := NULL;
14805 h_x BOOLEAN;
14806 h_status VARCHAR2(2000);
14807 h_industry VARCHAR2(2000);
14808
14809
14810 CURSOR c_check_agv_name (cp_agv_name IN VARCHAR2
14811 ,cp_application_id IN NUMBER
14812 ,cp_attr_group_type IN VARCHAR2
14813 ,cp_attr_group_name IN VARCHAR2
14814 ) IS
14815 SELECT agv_name
14816 FROM ego_fnd_dsc_flx_ctx_ext
14817 WHERE agv_name = cp_agv_name
14818 AND attr_group_id NOT IN
14819 (select attr_group_id
14820 from ego_fnd_dsc_flx_ctx_ext
14821 where agv_name = cp_agv_name
14822 AND application_id = cp_application_id
14823 AND descriptive_flexfield_name = cp_attr_group_type
14824 AND descriptive_flex_context_code = cp_attr_group_name
14825 );
14826
14827 CURSOR c_check_obj_name (cp_agv_name IN VARCHAR2, cp_appl_id IN NUMBER) IS
14828 SELECT object_name
14829 FROM all_objects
14830 where object_name = cp_agv_name
14831 and owner in (EGO_EXT_FWK_PUB.Get_Application_Owner(cp_appl_id), EGO_EXT_FWK_PUB.Get_Oracle_UserName);
14832
14833 l_api_version CONSTANT NUMBER := 1.0 ;
14834 l_api_name CONSTANT VARCHAR (30) := 'Update_AGV_Name' ;
14835
14836 l_dynamic_sql VARCHAR2(100);
14837 l_agv_name ego_fnd_dsc_flx_ctx_ext.agv_name%TYPE;
14838 l_temp_agv_name ego_fnd_dsc_flx_ctx_ext.agv_name%TYPE;
14839
14840 BEGIN
14841 -- Standard Start of API savepoint
14842 IF FND_API.To_Boolean( p_commit ) THEN
14843 SAVEPOINT Update_AGV_Name ;
14844 END IF;
14845 -- Check for call compatibility.
14846 IF NOT FND_API.Compatible_API_Call( l_api_version ,
14847 p_api_version ,
14848 l_api_name ,
14849 G_PKG_NAME
14850 ) THEN
14851 RAISE FND_API.G_EXC_ERROR;
14852 END IF;
14853
14854 -- Initialize API message list if necessary.
14855 -- Initialize message list if p_init_msg_list is set to TRUE.
14856 IF FND_API.to_Boolean( P_INIT_MSG_LIST ) THEN
14857 FND_MSG_PUB.initialize;
14858 END IF;
14859
14860 -- Check If the view name is already present
14861 l_agv_name := UPPER(p_agv_name);
14862 OPEN c_check_agv_name (cp_agv_name => l_agv_name
14863 ,cp_application_id => p_application_id
14864 ,cp_attr_group_type => p_attr_group_type
14865 ,cp_attr_group_name => p_attr_group_name
14866 );
14867 FETCH c_check_agv_name INTO l_temp_agv_name;
14868 IF c_check_agv_name%FOUND THEN
14869 FND_MESSAGE.set_name('EGO','EGO_EF_NAME_EXTS');
14870 FND_MSG_PUB.add;
14871 RAISE FND_API.g_exc_error;
14872 END IF;
14873 CLOSE c_check_agv_name;
14874
14875 -- the AGV Name is unique among the existing records
14876 -- check if the AGV Name is an already existing object
14877 OPEN c_check_obj_name (cp_agv_name => l_agv_name,
14878 cp_appl_id => p_application_id);
14879 FETCH c_check_obj_name INTO l_temp_agv_name;
14880 IF c_check_obj_name%FOUND THEN
14881 FND_MESSAGE.set_name('EGO','EGO_EF_NAME_EXTS');
14882 FND_MSG_PUB.add;
14883 RAISE FND_API.g_exc_error;
14884 END IF;
14885 CLOSE c_check_obj_name;
14886
14887 --Test with this dummy Query for the validity of the view name
14888 --It should not be a reserve word
14889 l_dynamic_sql := 'CREATE OR REPLACE VIEW '|| l_agv_name ||' AS SELECT * FROM DUAL';
14890
14891 --bugfix 11907422 for 12.2 AD_DDL changes
14892 --EXECUTE IMMEDIATE l_dynamic_sql;
14893
14894 h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
14895 --bug 12392423, hard code APPS
14896 AD_DDL.DO_DDL(fnd_apps_schema, 'APPS', AD_DDL.CREATE_VIEW,l_dynamic_sql, l_agv_name);
14897
14898 -- Syalaman - Fix for bug 5911824
14899 -- Droping the dummy view created in above statement so that
14900 -- if any error occurs while creating the actual view, this
14901 -- dummy view should not exist in the database.
14902 l_dynamic_sql := 'DROP VIEW '|| l_agv_name;
14903
14904 --bugfix 11907422 for 12.2 AD_DDL changes
14905 -- EXECUTE IMMEDIATE l_dynamic_sql;
14906 --bug 12392423, hard code APPS
14907 AD_DDL.DO_DDL(fnd_apps_schema, 'APPS', AD_DDL.DROP_VIEW,l_dynamic_sql,l_agv_name);
14908
14909 -- End of fix for bug 5911824
14910
14911 --
14912 -- As the method is called in validate, we should not update
14913 --
14914 -- -- Insert Attribute Group View name for the corresponding
14915 -- -- Attribute Group
14916 -- UPDATE ego_fnd_dsc_flx_ctx_ext
14917 -- SET agv_name = l_agv_name,
14918 -- last_updated_by = FND_GLOBAL.user_id,
14919 -- last_update_date = SYSDATE,
14920 -- last_update_login = FND_GLOBAL.login_id
14921 -- WHERE application_id = p_application_id
14922 -- AND descriptive_flexfield_name = p_attr_group_type
14923 -- AND descriptive_flex_context_code = p_attr_group_name ;
14924 --
14925 IF FND_API.To_Boolean(p_commit) THEN
14926 COMMIT WORK;
14927 END IF;
14928 x_return_status := FND_API.G_RET_STS_SUCCESS;
14929 EXCEPTION
14930 WHEN FND_API.G_EXC_ERROR THEN
14931 IF FND_API.To_Boolean( p_commit ) THEN
14932 ROLLBACK TO Update_AGV_Name;
14933 END IF;
14934 IF c_check_agv_name%ISOPEN THEN
14935 CLOSE c_check_agv_name;
14936 END IF;
14937 IF c_check_obj_name%ISOPEN THEN
14938 CLOSE c_check_obj_name;
14939 END IF;
14940 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14941 ,p_count => x_msg_count
14942 ,p_data => x_msg_data);
14943 x_return_status := FND_API.G_RET_STS_ERROR;
14944 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14945 IF FND_API.To_Boolean( p_commit ) THEN
14946 ROLLBACK TO Update_AGV_Name;
14947 END IF;
14948 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14949 ,p_count => x_msg_count
14950 ,p_data => x_msg_data);
14951 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14952 WHEN OTHERS THEN
14953 IF FND_API.To_Boolean( p_commit ) THEN
14954 ROLLBACK TO Update_AGV_Name;
14955 END IF;
14956 IF c_check_agv_name%ISOPEN THEN
14957 CLOSE c_check_agv_name;
14958 END IF;
14959 IF c_check_obj_name%ISOPEN THEN
14960 CLOSE c_check_obj_name;
14961 END IF;
14962 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14963 ,p_count => x_msg_count
14964 ,p_data => x_msg_data);
14965 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14966
14967 END Update_AGV_Name;
14968
14969 ------------------------------------------------------------------------------------------
14970 -- This method will update the control level of an attribute in EGO_FND_DF_COL_USGS_EXT
14971 -- requires: 1) p_control_level is a valid control level
14972 -- as represented in lookup 'EGO_PC_CONTROL_LEVEL' in fnd_lookups
14973 -- 2) p_application_column_name is not null and is a valid column name
14974 -- 3) p_application_id is not null and is valid
14975 -- 4) p_descriptive_flexfield_name corresponds to a valid attribute group type
14976 ------------------------------------------------------------------------------------------
14977 PROCEDURE Update_Attribute_Control_Level (
14978 p_api_version IN NUMBER
14979 ,p_application_id IN NUMBER
14980 ,p_descriptive_flexfield_name IN VARCHAR2
14981 ,p_application_column_name IN VARCHAR2
14982 ,p_control_level IN NUMBER
14983 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
14984 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
14985 ,x_return_status OUT NOCOPY VARCHAR2
14986 ,x_msg_count OUT NOCOPY NUMBER
14987 ,x_msg_data OUT NOCOPY VARCHAR2
14988 ) IS
14989
14990 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute_Control_Level';
14991 l_attr_id NUMBER;
14992 l_control_level VARCHAR2(30);
14993 e_control_level_invalid EXCEPTION;
14994 e_no_attr_for_id_error EXCEPTION;
14995
14996 BEGIN
14997
14998 -- Initialize API message list if necessary.
14999 -- Initialize message list if p_init_msg_list is set to TRUE.
15000 IF FND_API.to_Boolean( P_INIT_MSG_LIST ) THEN
15001 FND_MSG_PUB.initialize;
15002 END IF;
15003
15004 -------------------------------------------------------------------------------------
15005 -- Make sure that the control level corresponds with either Master Level or Org Level
15006 -------------------------------------------------------------------------------------
15007 IF( p_control_level IS NULL ) THEN
15008 RAISE e_control_level_invalid;
15009 ELSE
15010 BEGIN
15011 select lookup_code into l_control_level from fnd_lookups
15012 where lookup_type = 'EGO_PC_CONTROL_LEVEL'
15013 and lookup_code = p_control_level;
15014
15015 EXCEPTION
15016 WHEN NO_DATA_FOUND THEN
15017 RAISE e_control_level_invalid;
15018 END;
15019 END IF;
15020
15021 -------------------------------------------------------------------------------------
15022 -- Make sure that application_id, descriptive_flexfield_name and application_column_name were passed in
15023 -- and correspond to a valid attribute id
15024 -------------------------------------------------------------------------------------
15025
15026
15027 IF (p_application_column_name IS NULL OR p_descriptive_flexfield_name IS NULL OR p_application_column_name IS NULL) THEN
15028 RAISE e_no_attr_for_id_error;
15029 ELSE
15030 BEGIN
15031
15032 -- check if there exists any attributes to be updated
15033 select attr_id into l_attr_id
15034 from EGO_FND_DF_COL_USGS_EXT
15035 where application_id = p_application_id
15036 and descriptive_flexfield_name = p_descriptive_flexfield_name
15037 and application_column_name = p_application_column_name;
15038
15039 -- change the control level for this attribute
15040 update EGO_FND_DF_COL_USGS_EXT
15041 set control_level = p_control_level
15042 where application_id = p_application_id
15043 and descriptive_flexfield_name = p_descriptive_flexfield_name
15044 and application_column_name = p_application_column_name;
15045
15046 EXCEPTION
15047 WHEN NO_DATA_FOUND THEN
15048 RAISE e_no_attr_for_id_error;
15049 END;
15050 END IF;
15051
15052
15053
15054 -- Standard check of p_commit
15055 IF FND_API.To_Boolean(p_commit) THEN
15056 COMMIT WORK;
15057 END IF;
15058
15059 x_return_status := FND_API.G_RET_STS_SUCCESS;
15060
15061
15062 EXCEPTION
15063 WHEN e_control_level_invalid THEN
15064 x_return_status := FND_API.G_RET_STS_ERROR;
15065 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CL_INVALID');
15066 FND_MSG_PUB.Add;
15067 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
15068 ,p_count => x_msg_count
15069 ,p_data => x_msg_data);
15070
15071
15072 WHEN e_no_attr_for_id_error THEN
15073 x_return_status := FND_API.G_RET_STS_ERROR;
15074 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_NO_ATTR_FOUND');
15075 FND_MSG_PUB.Add;
15076 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
15077 ,p_count => x_msg_count
15078 ,p_data => x_msg_data);
15079
15080
15081
15082 WHEN OTHERS THEN
15083 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15084
15085 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
15086 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
15087 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
15088 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM||' '||FND_FLEX_DSC_API.Message());
15089 FND_MSG_PUB.Add;
15090 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
15091 ,p_count => x_msg_count
15092 ,p_data => x_msg_data);
15093
15094 END Update_Attribute_Control_Level;
15095 ------------------------------------------------------------------------------------------
15096 -- Requirement: bug: 3801472
15097 --
15098 -- Function: To return the attribute changes table for a given attribute group type.
15099 -- If the table is not defined, NULL is returned
15100 --
15101 -- Parameters:
15102 -- IN
15103 -- p_attr_group_type: attribute_group_type
15104 -- OUT
15105 -- x_base_table : base table for attribute_changes
15106 -- x_tl_table : translatable table for attribute_changes
15107 --
15108 ------------------------------------------------------------------------------------------
15109 --
15110 PROCEDURE Get_Attr_Changes_Table (
15111 p_attr_group_type IN VARCHAR2
15112 ,x_base_table OUT NOCOPY VARCHAR2
15113 ,x_tl_table OUT NOCOPY VARCHAR2
15114 ) IS
15115 BEGIN
15116 -- currently all programs call this
15117 -- this need to be changed once we have decided
15118 -- where to store this meta data.
15119 IF p_attr_group_type = 'EGO_ITEMMGMT_GROUP' THEN
15120 x_base_table := 'EGO_ITEMS_ATTRS_CHANGES_B';
15121 x_tl_table := 'EGO_ITEMS_ATTRS_CHANGES_TL';
15122 ELSE
15123 x_base_table := NULL;
15124 x_tl_table := NULL;
15125 END IF;
15126
15127 EXCEPTION
15128 WHEN OTHERS THEN
15129 x_base_table := NULL;
15130 x_tl_table := NULL;
15131 END Get_Attr_Changes_Table;
15132 ------------------------------------------------------------------------------------------
15133
15134 ------------------------------------------------------------------------------------------
15135 -- This function takes an object name and a classification code and returns the display --
15136 -- name belonging to the classification code. --
15137 ------------------------------------------------------------------------------------------
15138 FUNCTION Convert_Class_Code_To_Name (
15139 p_object_name IN VARCHAR2
15140 ,p_class_code IN VARCHAR2
15141 ) RETURN VARCHAR2 IS
15142
15143 l_ocv_name VARCHAR2(30);
15144 l_class_name VARCHAR2(40);
15145
15146 BEGIN
15147 SELECT EXT_ATTR_OCV_NAME
15148 INTO l_ocv_name
15149 FROM EGO_FND_OBJECTS_EXT
15150 WHERE OBJECT_NAME = p_object_name;
15151
15152 IF (p_class_code = '-1') THEN
15153 l_class_name := '-1';
15154 ELSE
15155 EXECUTE IMMEDIATE 'SELECT MEANING FROM '||l_ocv_name||' WHERE CODE = :code AND ROWNUM = 1'
15156 INTO l_class_name
15157 USING p_class_code;
15158
15159 END IF;
15160
15161 RETURN l_class_name;
15162 EXCEPTION
15163 WHEN OTHERS THEN
15164 RETURN NULL;
15165 END Convert_Class_Code_To_Name;
15166
15167 ------------------------------------------------------------------------------------------
15168 -- This function takes an object name and a classification name and returns the --
15169 -- classification code of the given classification name. --
15170 ------------------------------------------------------------------------------------------
15171 FUNCTION Convert_Name_To_Class_Code (
15172 p_object_name IN VARCHAR2
15173 ,p_class_name IN VARCHAR2
15174 ) RETURN VARCHAR2 IS
15175
15176 l_ocv_name VARCHAR2(30);
15177 l_class_code VARCHAR2(40);
15178
15179 BEGIN
15180 SELECT EXT_ATTR_OCV_NAME
15181 INTO l_ocv_name
15182 FROM EGO_FND_OBJECTS_EXT
15183 WHERE OBJECT_NAME = p_object_name;
15184
15185 IF (p_class_name = '-1') THEN
15186 l_class_code := '-1';
15187 ELSE
15188 EXECUTE IMMEDIATE 'SELECT CODE FROM '||l_ocv_name||' WHERE MEANING = :name AND ROWNUM = 1'
15189 INTO l_class_code
15190 USING p_class_name;
15191
15192 END IF;
15193
15194 RETURN l_class_code;
15195 EXCEPTION
15196 WHEN OTHERS THEN
15197 RETURN NULL;
15198 END Convert_Name_To_Class_Code;
15199
15200 -------------------------------------------------------------------------------------------
15201 -- This function calls the specified API, passing the specified attribute metadata, to --
15202 -- determine whether the attribute is supported by application to which the API belongs. --
15203 -------------------------------------------------------------------------------------------
15204 FUNCTION Check_Supported_Attr_Usages (
15205 p_support_api IN VARCHAR2
15206 ,p_application_id IN NUMBER
15207 ,p_attr_grp_type IN VARCHAR2
15208 ,p_attr_grp_name IN VARCHAR2
15209 ,p_attr_name IN VARCHAR2
15210 ,p_data_level IN VARCHAR2
15211 ,p_is_multi_row IN VARCHAR2
15212 ,p_data_type IN VARCHAR2
15213 ) RETURN VARCHAR2 IS
15214
15215 l_ret_char_val VARCHAR2(1);
15216 l_string VARCHAR2(10000);
15217
15218 BEGIN
15219
15220 EXECUTE IMMEDIATE
15221 'DECLARE ' ||
15222 ' l_metadata EGO_EXT_FWK_PUB.EGO_ATTR_USG_METADATA; ' ||
15223 ' l_api_ret_val VARCHAR2(1); ' ||
15224 'BEGIN ' ||
15225 ' l_api_ret_val := ''N''; ' ||
15226 ' l_metadata.application_id := :1; ' ||
15227 ' l_metadata.attr_grp_type := :2; ' ||
15228 ' l_metadata.attr_grp_name := :3; ' ||
15229 ' l_metadata.attr_name := :4; ' ||
15230 ' l_metadata.data_level := :5; ' ||
15231 ' l_metadata.is_multi_row := :6; ' ||
15232 ' l_metadata.data_type := :7; ' ||
15233 ' IF (' || p_support_api || '(l_metadata)) THEN ' ||
15234 ' l_api_ret_val := ''Y''; ' ||
15235 ' ELSE ' ||
15236 ' l_api_ret_val := ''N''; ' ||
15237 ' END IF; ' ||
15238 ' :8 := l_api_ret_val; ' ||
15239 'END;'
15240 USING IN p_application_id
15241 ,IN p_attr_grp_type
15242 ,IN p_attr_grp_name
15243 ,IN p_attr_name
15244 ,IN p_data_level
15245 ,IN p_is_multi_row
15246 ,IN p_data_type
15247 ,OUT l_ret_char_val;
15248
15249 RETURN l_ret_char_val;
15250
15251 EXCEPTION
15252
15253 WHEN OTHERS THEN
15254 RETURN 'N';
15255
15256 END Check_Supported_Attr_Usages;
15257
15258 ------------------------------------------------------------------------------------------
15259 -- Function: To return the pending transalatable table name for a given attribute group type
15260 -- an the application id
15261 -- If the table is not defined, NULL is returned
15262 --
15263 -- Parameters:
15264 -- IN
15265 -- p_attr_group_type: attribute_group_type
15266 -- p_attr_group_type application_id
15267 -- OUT
15268 -- l_table_name : translatable table for attribute_changes
15269 ------------------------------------------------------------------------------------------
15270 FUNCTION Get_Attr_Changes_TL_Table (
15271 p_application_id IN NUMBER
15272 ,p_attr_group_type IN VARCHAR2
15273 )
15274 RETURN VARCHAR2
15275 IS
15276
15277 l_table_name VARCHAR2(30);
15278 l_dynamic_sql VARCHAR2(350);
15279
15280 BEGIN
15281 l_dynamic_sql:='SELECT CHANGE_TL_TABLE_NAME'||
15282 ' FROM ENG_PENDING_CHANGE_CTX'||
15283 ' WHERE APPLICATION_ID = :1'||--p_application_id
15284 ' AND CHANGE_ATTRIBUTE_GROUP_TYPE =:2' ;--p_attr_group_type;
15285
15286 EXECUTE IMMEDIATE l_dynamic_sql INTO l_table_name USING p_application_id
15287 ,p_attr_group_type;
15288
15289 RETURN l_table_name;
15290
15291 EXCEPTION
15292 WHEN OTHERS THEN
15293 RETURN NULL;
15294
15295 END Get_Attr_Changes_TL_Table;
15296 -------------------------------------------------------------------------------
15297 ------------------------------------------------------------------------------------------
15298 -- Function: To return the pending base table name for a given attribute group type
15299 -- an the application id
15300 -- If the table is not defined, NULL is returned
15301 --
15302 -- Parameters:
15303 -- IN
15304 -- p_attr_group_type: attribute_group_type
15305 -- p_attr_group_type application_id
15306 -- OUT
15307 -- l_table_name : base table for attribute_changes
15308 ------------------------------------------------------------------------------------------
15309 FUNCTION Get_Attr_Changes_B_Table (
15310 p_application_id IN NUMBER
15311 ,p_attr_group_type IN VARCHAR2
15312 )
15313 RETURN VARCHAR2
15314 IS
15315
15316 l_table_name VARCHAR2(30);
15317 l_dynamic_sql VARCHAR2(350);
15318
15319 BEGIN
15320 l_dynamic_sql:='SELECT CHANGE_B_TABLE_NAME'||
15321 ' FROM ENG_PENDING_CHANGE_CTX'||
15322 ' WHERE APPLICATION_ID = :1'||--p_application_id
15323 ' AND CHANGE_ATTRIBUTE_GROUP_TYPE =:2' ;--p_attr_group_type;
15324
15325 EXECUTE IMMEDIATE l_dynamic_sql INTO l_table_name USING p_application_id
15326 ,p_attr_group_type;
15327 RETURN l_table_name;
15328
15329 EXCEPTION
15330 WHEN OTHERS THEN
15331 RETURN NULL;
15332 END Get_Attr_Changes_B_Table;
15333
15334 -----------------------------------------------------------------------------------------
15335
15336
15337
15338
15339
15340
15341 PROCEDURE Sync_Up_Attr_Metadata (
15342 p_source_ag_name IN VARCHAR2,
15343 p_source_ag_type IN VARCHAR2,
15344 p_source_appl_id IN VARCHAR2,
15345 p_target_ag_name IN VARCHAR2,
15346 p_target_ag_type IN VARCHAR2,
15347 p_target_appl_id IN VARCHAR2,
15348 x_return_status OUT NOCOPY VARCHAR2,
15349 x_errorcode OUT NOCOPY VARCHAR2,
15350 x_msg_count OUT NOCOPY NUMBER,
15351 x_msg_data OUT NOCOPY VARCHAR2
15352 )
15353 IS
15354
15355 l_attr_Group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
15356 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
15357 l_return_status VARCHAR2(1);
15358 l_errorcode VARCHAR2(100);
15359 l_msg_count NUMBER;
15360 l_msg_data VARCHAR2(10000);
15361 l_col_name VARCHAR2(30);
15362
15363 BEGIN
15364
15365 l_attr_group_metadata_obj :=
15366 EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
15367 p_application_id => p_source_appl_id
15368 ,p_attr_group_type => p_source_ag_type
15369 ,p_attr_group_name => p_source_ag_name
15370 ,p_pick_from_cache => FALSE
15371 );
15372
15373 IF (l_attr_group_metadata_obj IS NOT NULL ) THEN
15374 l_attr_metadata_table := l_attr_group_metadata_obj.attr_metadata_table;
15375 END IF;
15376
15377 IF (l_attr_metadata_table IS NOT NULL) THEN
15378
15379 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
15380 LOOP
15381
15382 BEGIN
15383 SELECT APPLICATION_COLUMN_NAME
15384 INTO l_col_name
15385 FROM FND_DESCR_FLEX_COLUMN_USAGES
15386 WHERE APPLICATION_ID = p_target_appl_id
15387 AND DESCRIPTIVE_FLEXFIELD_NAME = p_target_ag_type
15388 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_target_ag_name
15389 AND END_USER_COLUMN_NAME = l_attr_metadata_table(i).ATTR_NAME;
15390 EXCEPTION
15391 WHEN OTHERS THEN
15392 l_col_name := NULL;
15393 END;
15394
15395 IF (l_col_name IS NOT NULL) THEN
15396
15397 Update_Attribute (
15398 p_api_version => 1.0
15399 ,p_application_id => p_target_appl_id
15400 ,p_attr_group_type => p_target_ag_type
15401 ,p_attr_group_name => p_target_ag_name
15402 ,p_internal_name => l_attr_metadata_table(i).ATTR_NAME
15403 ,p_display_name => l_attr_metadata_table(i).ATTR_DISP_NAME
15404 ,p_description => NULL
15405 ,p_sequence => l_attr_metadata_table(i).SEQUENCE
15406 ,p_required => l_attr_metadata_table(i).REQUIRED_FLAG
15407 ,p_searchable => NULL
15408 ,p_column => l_col_name
15409 ,p_value_set_id => l_attr_metadata_table(i).VALUE_SET_ID
15410 ,p_info_1 => l_attr_metadata_table(i).INFO_1
15411 ,p_default_value => l_attr_metadata_table(i).DEFAULT_VALUE
15412 ,p_enabled => NULL
15413 ,p_display => NULL
15414 ,p_view_in_hierarchy_code => NULL
15415 ,p_edit_in_hierarchy_code => NULL
15416 ,p_uom_class => l_attr_metadata_table(i).UNIT_OF_MEASURE_CLASS
15417 ,x_return_status => l_return_status
15418 ,x_errorcode => l_errorcode
15419 ,x_msg_count => l_msg_count
15420 ,x_msg_data => l_msg_data
15421 );
15422
15423 x_msg_count := l_msg_count + NVL(x_msg_count,0);
15424 x_msg_data := x_msg_data || l_msg_data;
15425 x_errorcode := x_errorcode || l_errorcode;
15426
15427 IF (x_return_status IS NULL) THEN
15428 x_return_status := l_return_status;
15429 END IF;
15430
15431 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
15432 x_return_status := l_return_status;
15433 END IF;
15434
15435 END IF;
15436
15437 END LOOP;
15438
15439 END IF;
15440
15441 END Sync_Up_Attr_Metadata;
15442
15443 --Method for concatenating DataLevels, R12C changes--
15444 FUNCTION Concat_Data_Level_DisplayNames (p_attr_grp_id IN NUMBER)
15445 RETURN VARCHAR2 IS
15446
15447 CURSOR c_data_levels(p_attr_grp_id IN NUMBER) IS
15448 SELECT DL_TL.user_data_level_name data_level_name
15449 FROM EGO_ATTR_GROUP_DL AG_DL, EGO_DATA_LEVEL_B DL_B, EGO_DATA_LEVEL_TL DL_TL
15450 WHERE AG_DL.data_level_id = DL_B.data_level_id
15451 AND DL_B.data_level_id = DL_TL.data_level_id
15452 AND UserEnv('LANG')=LANGUAGE
15453 AND AG_DL.attr_group_id = p_attr_grp_id;
15454
15455 l_data_levels VARCHAR2(4000) := '';
15456
15457 BEGIN
15458
15459 FOR i IN c_data_levels(p_attr_grp_id) LOOP
15460 l_data_levels := l_data_levels || ',' || i.data_level_name;
15461 END LOOP;
15462 l_data_levels := SubStr(l_data_levels,2);
15463 RETURN l_data_levels;
15464
15465 END;
15466
15467 /*Procedure to delete the versioned value fron the draft of Versioned value set.*/
15468 PROCEDURE Delete_Value_Set_val(
15469 p_value_set_id IN NUMBER
15470 ,p_value_id IN NUMBER
15471 ,x_return_status OUT NOCOPY VARCHAR2
15472 ) IS
15473
15474 l_value_set_name FND_FLEX_VALUE_SETS.flex_value_set_name%TYPE;
15475 l_flex_value_id FND_FLEX_VALUES.flex_value_id%TYPE;
15476 l_internal_name FND_FLEX_VALUES.FLEX_VALUE%TYPE;
15477 l_display_name FND_FLEX_VALUES_TL.flex_value_meaning%TYPE;
15478 l_description FND_FLEX_VALUES_TL.description%TYPE;
15479 l_start_date DATE;
15480 l_end_date DATE;
15481 l_enabled FND_FLEX_VALUES.ENABLED_FLAG%TYPE;
15482
15483 BEGIN
15484 SELECT FLEX_VALUE_SET_NAME INTO L_VALUE_SET_NAME FROM FND_FLEX_VALUE_SETS
15485 WHERE FLEX_VALUE_SET_ID = p_value_set_id ;
15486 SELECT FLEX_VALUE,FLEX_VALUE_MEANING,DESCRIPTION, START_DATE_ACTIVE,
15487 ENABLED_FLAG INTO l_internal_name,l_display_name,l_description,l_start_date,l_enabled
15488 FROM FND_FLEX_VALUES,FND_FLEX_VALUES_TL WHERE
15489 LANGUAGE = userenv('LANG') AND FND_FLEX_VALUES.FLEX_VALUE_ID = p_value_id
15490 AND FND_FLEX_VALUES_TL.FLEX_VALUE_ID = p_value_id AND ROWNUM=1;
15491 FND_FLEX_VALUES_PKG.UPDATE_ROW
15492 (x_flex_value_id => p_value_id
15493 ,x_attribute_sort_order => NULL
15494 ,x_flex_value_set_id => p_value_set_id
15495 ,x_flex_value => l_internal_name
15496 ,x_enabled_flag => l_enabled
15497 ,x_summary_flag => 'N'
15498 ,x_start_date_active => l_start_date
15499 ,x_end_date_active => sysdate
15500 ,x_parent_flex_value_low => NULL
15501 ,x_parent_flex_value_high => NULL
15502 ,x_structured_hierarchy_level => NULL
15503 ,x_hierarchy_level => NULL
15504 ,x_compiled_value_attributes => NULL
15505 ,x_value_category => NULL
15506 ,x_attribute1 => NULL
15507 ,x_attribute2 => NULL
15508 ,x_attribute3 => NULL
15509 ,x_attribute4 => NULL
15510 ,x_attribute5 => NULL
15511 ,x_attribute6 => NULL
15512 ,x_attribute7 => NULL
15513 ,x_attribute8 => NULL
15514 ,x_attribute9 => NULL
15515 ,x_attribute10 => NULL
15516 ,x_attribute11 => NULL
15517 ,x_attribute12 => NULL
15518 ,x_attribute13 => NULL
15519 ,x_attribute14 => NULL
15520 ,x_attribute15 => NULL
15521 ,x_attribute16 => NULL
15522 ,x_attribute17 => NULL
15523 ,x_attribute18 => NULL
15524 ,x_attribute19 => NULL
15525 ,x_attribute20 => NULL
15526 ,x_attribute21 => NULL
15527 ,x_attribute22 => NULL
15528 ,x_attribute23 => NULL
15529 ,x_attribute24 => NULL
15530 ,x_attribute25 => NULL
15531 ,x_attribute26 => NULL
15532 ,x_attribute27 => NULL
15533 ,x_attribute28 => NULL
15534 ,x_attribute29 => NULL
15535 ,x_attribute30 => NULL
15536 ,x_attribute31 => NULL
15537 ,x_attribute32 => NULL
15538 ,x_attribute33 => NULL
15539 ,x_attribute34 => NULL
15540 ,x_attribute35 => NULL
15541 ,x_attribute36 => NULL
15542 ,x_attribute37 => NULL
15543 ,x_attribute38 => NULL
15544 ,x_attribute39 => NULL
15545 ,x_attribute40 => NULL
15546 ,x_attribute41 => NULL
15547 ,x_attribute42 => NULL
15548 ,x_attribute43 => NULL
15549 ,x_attribute44 => NULL
15550 ,x_attribute45 => NULL
15551 ,x_attribute46 => NULL
15552 ,x_attribute47 => NULL
15553 ,x_attribute48 => NULL
15554 ,x_attribute49 => NULL
15555 ,x_attribute50 => NULL
15556 ,x_flex_value_meaning => l_display_name
15557 ,x_description => l_description
15558 ,x_last_update_date => sysdate
15559 ,x_last_updated_by => fnd_global.party_id
15560 ,x_last_update_login => G_CURRENT_LOGIN_ID);
15561
15562 DELETE EGO_FLEX_VALUE_VERSION_B WHERE FLEX_VALUE_ID = p_value_id AND VERSION_SEQ_ID = 0 ;
15563 DELETE EGO_FLEX_VALUE_VERSION_TL WHERE FLEX_VALUE_ID = p_value_id AND VERSION_SEQ_ID = 0 ;
15564
15565 x_return_status :='S';
15566 commit;
15567 EXCEPTION
15568 WHEN OTHERS THEN
15569 x_return_status :='F' ;
15570
15571
15572 END ;
15573
15574 --------------------------------------------------------------------------------------------
15575 -- Execute_Function
15576 --------------------------------------------------------------------------------------------
15577 PROCEDURE Execute_Function(
15578 p_Action_Id IN Number
15579 ,p_pk_col_value_pairs IN EGO_COL_NAME_VALUE_PAIR_ARRAY
15580 ,p_dtlevel_col_value_pairs IN EGO_COL_NAME_VALUE_PAIR_ARRAY DEFAULT NULL
15581 ,x_attributes_row_table IN OUT NOCOPY EGO_USER_ATTR_ROW_TABLE
15582 ,x_attributes_data_table IN OUT NOCOPY EGO_USER_ATTR_DATA_TABLE
15583 ,x_external_attrs_value_pairs IN OUT NOCOPY EGO_COL_NAME_VALUE_PAIR_TABLE
15584 ,x_return_status OUT NOCOPY VARCHAR2
15585 ,x_errorcode OUT NOCOPY NUMBER
15586 ,x_msg_count OUT NOCOPY NUMBER
15587 ,x_msg_data OUT NOCOPY VARCHAR2
15588 ) IS
15589
15590 CURSOR EGO_FUNC_CSR
15591 (
15592 v_function_id IN EGO_FUNCTIONS_V.FUNCTION_ID%TYPE
15593 ) IS
15594 SELECT *
15595 FROM (SELECT FUNCTION_ID,
15596 INTERNAL_NAME,
15597 DISPLAY_NAME,
15598 DESCRIPTION,
15599 FUNC_TYPE_CODE FUNCTION_TYPE,
15600 FUNC_TYPE_MEANING,
15601 FUNCTION_INFO_1,
15602 FUNCTION_INFO_2
15603 FROM EGO_FUNCTIONS_V) QRSLT
15604 WHERE (FUNCTION_ID IN (v_function_id))
15605 ORDER BY DISPLAY_NAME;
15606
15607 CURSOR EGO_ACTION_MAPPING_CSR
15608 (
15609 v_action_id IN EGO_ACTIONS_V.ACTION_ID%TYPE
15610 ) IS
15611 SELECT *
15612 FROM (SELECT MA.FUNCTION_ID FUNCTION_ID,
15613 MA.MAPPED_OBJ_PK1_VAL MAPPED_OBJ_PK1_VAL,
15614 MA.FUNC_PARAM_ID FUNC_PARAM_ID,
15615 MA.MAPPED_OBJ_TYPE MAPPED_OBJ_TYPE,
15616 MA.MAPPED_TO_GROUP_TYPE MAPPED_TO_GROUP_TYPE,
15617 MA.MAPPED_TO_GROUP_PK1 MAPPED_TO_GROUP_PK1,
15618 MA.MAPPED_TO_GROUP_PK2 MAPPED_TO_GROUP_PK2,
15619 MA.MAPPED_TO_GROUP_PK3 MAPPED_TO_GROUP_PK3,
15620 MA.MAPPED_ATTRIBUTE MAPPED_ATTRIBUTE,
15621 MA.MAPPED_TO_GROUP_MEANING MAPPED_TO_GROUP_MEANING,
15622 MA.MAPPED_UOM_PARAMETER MAPPED_UOM_PARAMETER,
15623 MA.VALUE_UOM_SOURCE VALUE_UOM_SOURCE,
15624 MA.FIXED_UOM FIXED_UOM,
15625 (SELECT AGV.ATTR_GROUP_DISP_NAME
15626 FROM EGO_ATTR_GROUPS_V AGV
15627 WHERE AGV.APPLICATION_ID = MA.MAPPED_TO_GROUP_PK1
15628 AND AGV.ATTR_GROUP_TYPE = MA.MAPPED_TO_GROUP_PK2
15629 AND AGV.ATTR_GROUP_NAME = MA.MAPPED_TO_GROUP_PK3) ATTR_GROUP_DISP_NAME,
15630 (SELECT AV.SEQUENCE
15631 FROM EGO_ATTRS_V AV
15632 WHERE AV.APPLICATION_ID = MA.MAPPED_TO_GROUP_PK1
15633 AND AV.ATTR_GROUP_TYPE = MA.MAPPED_TO_GROUP_PK2
15634 AND AV.ATTR_GROUP_NAME = MA.MAPPED_TO_GROUP_PK3
15635 AND AV.ATTR_NAME = MA.MAPPED_ATTRIBUTE) SEQUENCE,
15636 DECODE((SELECT AV.DISPLAY_CODE
15637 FROM EGO_ATTRS_V AV
15638 WHERE AV.APPLICATION_ID = MA.MAPPED_TO_GROUP_PK1
15639 AND AV.ATTR_GROUP_TYPE = MA.MAPPED_TO_GROUP_PK2
15640 AND AV.ATTR_GROUP_NAME = MA.MAPPED_TO_GROUP_PK3
15641 AND AV.ATTR_NAME = MA.MAPPED_ATTRIBUTE),
15642 'H',
15643 TO_NUMBER(NULL),
15644 1) HIDDEN_FILTER
15645 FROM EGO_MAPPINGS_V MA) QRSLT
15646 WHERE (MAPPED_OBJ_PK1_VAL IN (v_action_id))
15647 ORDER BY FUNC_PARAM_ID ASC;
15648
15649 CURSOR EGO_FUNC_PARAMS_CSR
15650 (
15651 v_function_id IN EGO_FUNCTIONS_V.FUNCTION_ID%TYPE
15652 ) IS
15653 SELECT FP.FUNC_PARAM_ID,
15654 FP.FUNCTION_ID,
15655 FP.SEQUENCE,
15656 FP.INTERNAL_NAME,
15657 FP.DISPLAY_NAME,
15658 FP.DESCRIPTION,
15659 FP.DATA_TYPE_CODE,
15660 FP.DATA_TYPE_MEANING,
15661 FP.FUNC_TYPE_CODE,
15662 FP.FUNC_TYPE_MEANING,
15663 FP.PARAM_TYPE_CODE,
15664 FP.PARAM_TYPE_MEANING,
15665 MA.MAPPED_TO_GROUP_TYPE
15666 FROM EGO_FUNC_PARAMS_V FP, EGO_MAPPINGS_V MA
15667 WHERE (FP.FUNCTION_ID IN (v_function_id)
15668 AND FP.FUNCTION_ID = MA.FUNCTION_ID
15669 AND FP.FUNC_PARAM_ID = MA.FUNC_PARAM_ID
15670 AND MA.MAPPED_OBJ_PK1_VAL = p_Action_Id)
15671 ORDER BY FP.FUNC_PARAM_ID ASC;
15672
15673 CURSOR EGO_ACTION_CSR
15674 (
15675 v_action_id IN EGO_ACTIONS_V.ACTION_ID%TYPE
15676 ) IS
15677 SELECT *
15678 FROM (SELECT EAV.ACTION_ID,
15679 EAV.OBJECT_ID,
15680 EAV.CLASSIFICATION_CODE,
15681 EAV.OBJ_NAME,
15682 EAV.OBJ_DISP_NAME,
15683 EAV.ATTR_GRP_APPLICATION_ID,
15684 EAV.ATTR_GROUP_TYPE,
15685 EAV.ATTR_GROUP_NAME,
15686 EAV.ATTR_GROUP_DISP_NAME,
15687 EAV.SEQUENCE,
15688 EAV.ACTION_NAME,
15689 EAV.DESCRIPTION,
15690 EAV.FUNCTION_ID,
15691 EAV.FUNC_DISPLAY_NAME,
15692 EAV.SECURITY_PRIVILEGE_ID,
15693 EAV.SECURITY_PRIVILEGE_NAME,
15694 FFF.FUNCTION_NAME,
15695 EAV.ATTR_GROUP_ID,
15696 EAV.ENABLE_KEY_ATTRIBUTES
15697 FROM EGO_ACTIONS_V EAV, FND_FORM_FUNCTIONS FFF
15698 WHERE EAV.SECURITY_PRIVILEGE_ID = FFF.FUNCTION_ID(+)
15699 AND classification_code IN
15700 (SELECT classification_code
15701 FROM ego_obj_attr_grp_assocs_v
15702 WHERE attr_group_id = EAV.ATTR_GROUP_ID)) QRSLT
15703 WHERE ACTION_ID = v_action_id
15704 ORDER BY FUNCTION_ID ASC;
15705
15706 TYPE LOCAL_ACTION_MAPPING_TABLE IS TABLE OF EGO_ACTION_MAPPING_CSR%ROWTYPE;
15707 TYPE LOCAL_FUNCTION_PARAM_TABLE IS TABLE OF EGO_FUNC_PARAMS_CSR%ROWTYPE;
15708
15709 l_action_rec EGO_ACTION_CSR%ROWTYPE;
15710 l_function_rec EGO_FUNC_CSR%ROWTYPE;
15711 l_action_mapping_rec EGO_ACTION_MAPPING_CSR%ROWTYPE;
15712 l_function_param_rec EGO_FUNC_PARAMS_CSR%ROWTYPE;
15713 l_function_id EGO_ACTIONS_V.function_id%TYPE;
15714
15715 l_action_mapping_table LOCAL_ACTION_MAPPING_TABLE := new LOCAL_ACTION_MAPPING_TABLE();
15716 l_function_param_table LOCAL_FUNCTION_PARAM_TABLE := new LOCAL_FUNCTION_PARAM_TABLE();
15717
15718 l_attr_name VARCHAR2(30);
15719 l_func_param_name VARCHAR2(30);
15720
15721 l_sql VARCHAR2(20000);
15722
15723 v_cursor INTEGER;
15724 l_boolean BOOLEAN;
15725 l_dummy NUMBER;
15726
15727 l_null_n NUMBER := NULL;
15728 l_null_c VARCHAR2(1) := NULL;
15729 l_null_d DATE := NULL;
15730 l_dummy_str VARCHAR2(30) := '';
15731
15732 l_api_name VARCHAR2(30) := 'Execution_Function';
15733 l_action_name l_action_rec.ACTION_NAME%TYPE;
15734
15735 no_action_founded_exception EXCEPTION;
15736 no_function_founded_exception EXCEPTION;
15737 func_params_mapping_exception EXCEPTION;
15738 bad_uda_row_info EXCEPTION;
15739 bad_uda_data_row_identifier EXCEPTION;
15740 no_data_found_for_param_bind EXCEPTION;
15741 BEGIN
15742 x_return_status := FND_API.G_RET_STS_SUCCESS;
15743
15744 --Check if x_attributes_data_table and x_attributes_row_table have correct Row_Identifier.
15745 FOR i IN x_attributes_data_table.FIRST .. x_attributes_data_table.LAST LOOP
15746 IF x_attributes_data_table(i).ROW_IDENTIFIER <> x_attributes_row_table(x_attributes_row_table.FIRST).ROW_IDENTIFIER THEN
15747 RAISE bad_uda_data_row_identifier;
15748 END IF;
15749 END LOOP;
15750
15751 ----------------------------------------------------
15752 --Get the Action definition, Initialize l_action_rec
15753 ----------------------------------------------------
15754 OPEN EGO_ACTION_CSR(v_action_id => p_Action_Id);
15755 FETCH EGO_ACTION_CSR INTO l_action_rec;
15756 IF EGO_ACTION_CSR%NOTFOUND THEN
15757 RAISE no_action_founded_exception;
15758 ELSE
15759 l_function_id := l_action_rec.FUNCTION_ID;
15760 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - Function Id is '||l_function_id);
15761 END IF;
15762 CLOSE EGO_ACTION_CSR;
15763
15764 -------------------------------------------------------------
15765 --Get action mapping info, initialize l_action_mapping_table
15766 -------------------------------------------------------------
15767 FOR r_action_mapping_rec IN EGO_ACTION_MAPPING_CSR(v_action_id => p_Action_Id)
15768 LOOP
15769 EXIT WHEN EGO_ACTION_MAPPING_CSR%NOTFOUND;
15770 --Validation
15771 --For all mapped user-defined attrs, the belonging Application Id, AG type and AG name should be the same as in x_attributes_row_table
15772 IF r_action_mapping_rec.MAPPED_TO_GROUP_TYPE = 'A' THEN
15773 IF x_attributes_row_table(x_attributes_row_table.FIRST).ATTR_GROUP_APP_ID <> r_action_mapping_rec.MAPPED_TO_GROUP_PK1
15774 OR x_attributes_row_table(x_attributes_row_table.FIRST).ATTR_GROUP_TYPE <> r_action_mapping_rec.MAPPED_TO_GROUP_PK2
15775 OR x_attributes_row_table(x_attributes_row_table.FIRST).ATTR_GROUP_NAME <> r_action_mapping_rec.MAPPED_TO_GROUP_PK3 THEN
15776 RAISE bad_uda_row_info;
15777
15778 END IF;
15779 END IF;
15780 --Initialization
15781 l_action_mapping_table.extend();
15782 l_action_mapping_table(l_action_mapping_table.LAST) := r_action_mapping_rec;
15783 END LOOP;
15784 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - There are '|| l_action_mapping_table.COUNT || ' attr mappings');
15785
15786 --------------------------------------------------------
15787 --Get the Function definition, Initialize l_function_rec
15788 --------------------------------------------------------
15789 OPEN EGO_FUNC_CSR(v_function_id => l_function_id);
15790 FETCH EGO_FUNC_CSR INTO l_function_rec;
15791 IF EGO_FUNC_CSR%NOTFOUND THEN
15792 RAISE no_function_founded_exception;
15793 END IF;
15794 CLOSE EGO_FUNC_CSR;
15795
15796 -----------------------------------------------------------------
15797 --Get function parameters info, initialize l_function_param_table
15798 -----------------------------------------------------------------
15799 FOR r_function_rec IN EGO_FUNC_PARAMS_CSR(v_function_id => l_function_id)
15800 LOOP
15801 EXIT WHEN EGO_FUNC_PARAMS_CSR%NOTFOUND;
15802 l_function_param_table.extend();
15803 l_function_param_table(l_function_param_table.LAST) := r_function_rec;
15804 END LOOP;
15805 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - There are '|| l_function_param_table.COUNT || ' function parameters');
15806
15807 --Check if the Action <=> Function Mapping is correct or not
15808 IF l_action_mapping_table.COUNT <> l_function_param_table.COUNT THEN
15809 RAISE func_params_mapping_exception;
15810 END IF;
15811
15812 ----------------------------------------------------------------------
15813 -- Construct the SQL BODY for User Defined Function without Value Bind
15814 ----------------------------------------------------------------------
15815
15816 --'!@#' is place holder for RETURN PARAM
15817 l_sql := 'BEGIN ' ||'!@#'|| l_function_rec.FUNCTION_INFO_1 || '.' || l_function_rec.FUNCTION_INFO_2 || '(';
15818 FOR i IN l_function_param_table.FIRST .. l_function_param_table.LAST
15819 LOOP
15820 l_function_param_rec := l_function_param_table(i);
15821 l_func_param_name := l_function_param_rec.INTERNAL_NAME;
15822 IF l_function_param_rec.PARAM_TYPE_CODE <> 'R' THEN
15823 l_sql := l_sql || l_func_param_name || ' => :' || l_func_param_name;
15824 l_sql := l_sql || ', ';
15825 ELSE
15826
15827 l_sql := REPLACE(l_sql, '!@#', ':ret := ');
15828 END IF;
15829 END LOOP;
15830 l_sql := REPLACE(l_sql, '!@#', '');
15831
15832 IF substr(l_sql, -2, 2) = ', ' THEN
15833 l_sql := substr(l_sql,1,length(l_sql)-2);
15834 END IF;
15835 l_sql := l_sql || '); END;';
15836
15837
15838 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - Constructed SQL statement is: ' || l_sql);
15839
15840 -----------------------------------------
15841 -- Parse constructed SQL
15842 -----------------------------------------
15843 v_cursor := DBMS_SQL.OPEN_CURSOR;
15844 DBMS_SQL.PARSE(v_cursor, l_sql, DBMS_SQL.NATIVE);
15845
15846
15847 -----------------------------------------
15848 -- Bind Variable for the constructed SQL
15849 -----------------------------------------
15850
15851 FOR i IN l_function_param_table.FIRST .. l_function_param_table.LAST
15852 LOOP
15853 l_boolean := FALSE;
15854 l_function_param_rec := l_function_param_table(i);
15855 l_func_param_name := l_function_param_rec.INTERNAL_NAME;
15856 --l_function_param_table should have the same sorting seq with l_action_mapping_table by FUNC_PARAM_ID ASC
15857 IF l_function_param_table(i).FUNC_PARAM_ID <> l_action_mapping_table(i).FUNC_PARAM_ID THEN
15858 RAISE func_params_mapping_exception;
15859 END IF;
15860
15861 l_attr_name := l_action_mapping_table(i).MAPPED_ATTRIBUTE;
15862
15863 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - l_func_param_name:l_attr_name => '||l_func_param_name||':'||l_attr_name);
15864
15865 ------------------------------------------------------------------
15866 -- Check the value of l_function_param_rec.MAPPED_TO_GROUP_TYPE --
15867 -- 1. A : an Attribute Group value. --
15868 -- 2. P : an Object Primary Key value. --
15869 -- 3. D : another of the Object attribute values. --
15870 -- 4. E : external attribute value. --
15871 ------------------------------------------------------------------
15872
15873 IF l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'A' THEN
15874 FOR j IN x_attributes_data_table.FIRST .. x_attributes_data_table.LAST
15875 LOOP
15876 IF x_attributes_data_table(j).ATTR_NAME = l_attr_name THEN
15877 IF l_function_param_rec.PARAM_TYPE_CODE IN ('I', 'O', 'B') THEN
15878 --Check the data type for current attr/param
15879 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15880 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, x_attributes_data_table(j).ATTR_VALUE_STR,32767);
15881 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(varchar2): '||l_func_param_name||', VALUE: '||x_attributes_data_table(j).ATTR_VALUE_STR);
15882 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15883 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, x_attributes_data_table(j).ATTR_VALUE_NUM);
15884 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(number): '||l_func_param_name||', VALUE: '||x_attributes_data_table(j).ATTR_VALUE_NUM);
15885 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15886 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, x_attributes_data_table(j).ATTR_VALUE_DATE);
15887 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(date): '||l_func_param_name||', VALUE: '||x_attributes_data_table(j).ATTR_VALUE_DATE);
15888 END IF;
15889
15890 ELSIF l_function_param_rec.PARAM_TYPE_CODE = 'R' THEN
15891 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15892 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', x_attributes_data_table(j).ATTR_VALUE_STR, 32767);
15893 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(varchar2): '||l_func_param_name||', VALUE: '|| x_attributes_data_table(j).ATTR_VALUE_STR);
15894 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15895 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', x_attributes_data_table(j).ATTR_VALUE_NUM);
15896 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(number): '||l_func_param_name||', VALUE: '||x_attributes_data_table(j).ATTR_VALUE_NUM);
15897 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15898 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', x_attributes_data_table(j).ATTR_VALUE_DATE);
15899 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(date): '||l_func_param_name||', VALUE: '||x_attributes_data_table(j).ATTR_VALUE_DATE);
15900 END IF;
15901 END IF;
15902 --Found value for current paramenter, so exit loop
15903 l_boolean := TRUE;
15904 EXIT;
15905
15906 END IF;
15907 END LOOP;
15908
15909 ELSIF l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'E' THEN
15910 --Indicating "External Attributes"
15911 IF x_external_attrs_value_pairs.COUNT > 0 THEN
15912 FOR j IN x_external_attrs_value_pairs.FIRST .. x_external_attrs_value_pairs.LAST
15913 LOOP
15914 IF x_external_attrs_value_pairs(j).NAME = l_attr_name THEN
15915 IF l_function_param_rec.PARAM_TYPE_CODE IN ('I', 'O', 'B') THEN
15916 --Check the data type for current attr/param
15917 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15918 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, x_external_attrs_value_pairs(j).VALUE,32767);
15919 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(varchar2): '||l_func_param_name||', VALUE: '||x_external_attrs_value_pairs(j).VALUE);
15920 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15921 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, x_external_attrs_value_pairs(j).VALUE);
15922 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(number): '||l_func_param_name||', VALUE: '||x_external_attrs_value_pairs(j).VALUE);
15923 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15924 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, x_external_attrs_value_pairs(j).VALUE);
15925 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(date): '||l_func_param_name||', VALUE: '||x_external_attrs_value_pairs(j).VALUE);
15926 END IF;
15927
15928 ELSIF l_function_param_rec.PARAM_TYPE_CODE = 'R' THEN
15929 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15930 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', x_external_attrs_value_pairs(j).VALUE, 32767);
15931 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(varchar2): '||l_func_param_name||', VALUE: '|| x_external_attrs_value_pairs(j).VALUE);
15932 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15933 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', x_external_attrs_value_pairs(j).VALUE);
15934 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(number): '||l_func_param_name||', VALUE: '||x_external_attrs_value_pairs(j).VALUE);
15935 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15936 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', x_external_attrs_value_pairs(j).VALUE);
15937 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(date): '||l_func_param_name||', VALUE: '||x_external_attrs_value_pairs(j).VALUE);
15938 END IF;
15939 END IF;
15940 --Found value for current paramenter, so exit loop
15941 l_boolean := TRUE;
15942 EXIT;
15943
15944 END IF;
15945 END LOOP;
15946 END IF;
15947 ELSIF l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'P' THEN
15948 --Indicating "Primary Keys", such as Inventory_item_id, Organization_id etc.
15949 FOR j IN p_pk_col_value_pairs.FIRST .. p_pk_col_value_pairs.LAST
15950 LOOP
15951 IF p_pk_col_value_pairs(j).NAME = l_attr_name THEN
15952 IF l_function_param_rec.PARAM_TYPE_CODE IN ('I', 'O', 'B') THEN
15953 --Check the data type for current attr/param
15954 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15955 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, p_pk_col_value_pairs(j).VALUE,32767);
15956 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(varchar2): '||l_func_param_name||', VALUE: '||p_pk_col_value_pairs(j).VALUE);
15957 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15958 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, p_pk_col_value_pairs(j).VALUE);
15959 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(number): '||l_func_param_name||', VALUE: '||p_pk_col_value_pairs(j).VALUE);
15960 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15961 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, p_pk_col_value_pairs(j).VALUE);
15962 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(date): '||l_func_param_name||', VALUE: '||p_pk_col_value_pairs(j).VALUE);
15963 END IF;
15964
15965 ELSIF l_function_param_rec.PARAM_TYPE_CODE = 'R' THEN
15966 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15967 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', p_pk_col_value_pairs(j).VALUE, 32767);
15968 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(varchar2): '||l_func_param_name||', VALUE: '|| p_pk_col_value_pairs(j).VALUE);
15969 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15970 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', p_pk_col_value_pairs(j).VALUE);
15971 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(number): '||l_func_param_name||', VALUE: '||p_pk_col_value_pairs(j).VALUE);
15972 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15973 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', p_pk_col_value_pairs(j).VALUE);
15974 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--return--PARAM(date): '||l_func_param_name||', VALUE: '||p_pk_col_value_pairs(j).VALUE);
15975 END IF;
15976 END IF;
15977 --Found value for current paramenter, so exit loop
15978 l_boolean := TRUE;
15979 EXIT;
15980
15981 END IF;
15982 END LOOP;
15983 ELSIF l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'D' THEN
15984 --Indicating "Data Level Primary Keys", such as Revision_id etc.
15985 FOR j IN p_dtlevel_col_value_pairs.FIRST .. p_dtlevel_col_value_pairs.LAST
15986 LOOP
15987 IF p_dtlevel_col_value_pairs(j).NAME = l_attr_name THEN
15988 IF l_function_param_rec.PARAM_TYPE_CODE IN ('I', 'O', 'B') THEN
15989 --Check the data type for current attr/param
15990 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
15991 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, p_dtlevel_col_value_pairs(j).VALUE,32767);
15992 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(varchar2): '||l_func_param_name||', VALUE: '||p_dtlevel_col_value_pairs(j).VALUE);
15993 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
15994 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, p_dtlevel_col_value_pairs(j).VALUE);
15995 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(number): '||l_func_param_name||', VALUE: '||p_dtlevel_col_value_pairs(j).VALUE);
15996 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
15997 DBMS_SQL.BIND_VARIABLE(v_cursor, ''||l_func_param_name, p_dtlevel_col_value_pairs(j).VALUE);
15998 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND--PARAM(date): '||l_func_param_name||', VALUE: '||p_dtlevel_col_value_pairs(j).VALUE);
15999 END IF;
16000
16001 ELSIF l_function_param_rec.PARAM_TYPE_CODE = 'R' THEN
16002 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
16003 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', p_dtlevel_col_value_pairs(j).VALUE, 32767);
16004 code_debug ('BIND--return--PARAM(varchar2): '||l_func_param_name||', VALUE: '|| p_dtlevel_col_value_pairs(j).VALUE);
16005 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
16006 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', p_dtlevel_col_value_pairs(j).VALUE);
16007 code_debug ('BIND--return--PARAM(number): '||l_func_param_name||', VALUE: '||p_dtlevel_col_value_pairs(j).VALUE);
16008 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
16009 DBMS_SQL.BIND_VARIABLE(v_cursor, 'ret', p_dtlevel_col_value_pairs(j).VALUE);
16010 code_debug ('BIND--return--PARAM(date): '||l_func_param_name||', VALUE: '||p_dtlevel_col_value_pairs(j).VALUE);
16011 END IF;
16012 END IF;
16013 --Found value for current paramenter, so exit loop
16014 l_boolean := TRUE;
16015 EXIT;
16016
16017 END IF;
16018 END LOOP;
16019 END IF;
16020
16021 IF NOT l_boolean THEN
16022 --ONLY bind null value for type "A"&"INPUT" params.
16023 IF l_function_param_rec.PARAM_TYPE_CODE = 'I' AND l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'A' THEN
16024 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
16025 DBMS_SQL.BIND_VARIABLE(v_cursor, ':'||l_func_param_name, l_null_c);
16026 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
16027 DBMS_SQL.BIND_VARIABLE(v_cursor, ':'||l_func_param_name, l_null_n);
16028 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
16029 DBMS_SQL.BIND_VARIABLE(v_cursor, ':'||l_func_param_name, l_null_d);
16030 END IF;
16031 code_debug ('EGO_EXT_FWK_PUB.Execute_Function - BIND NULL VALUE FOR PARAM: ' || l_func_param_name);
16032 ELSE
16033 RAISE no_data_found_for_param_bind;
16034 END IF;
16035 END IF;
16036 END LOOP;
16037
16038 --code_debug ('EGO_EXT_FWK_PUB.Execute_Function - CHECK POINT 1');
16039
16040 -----------------------------------------
16041 -- Execute the Dynamic SQL using DBMS_SQL
16042 -----------------------------------------
16043 l_dummy := DBMS_SQL.EXECUTE(v_cursor);
16044 --code_debug ('EGO_EXT_FWK_PUB.Execute_Function - CHECK POINT 2, l_dummy:' || l_dummy);
16045
16046 -----------------------------------------
16047 -- Retrieve the value of OUTPUT parameter
16048 -----------------------------------------
16049 FOR i IN l_function_param_table.FIRST .. l_function_param_table.LAST
16050 LOOP
16051 --l_function_param_table should have the same sorting seq with l_action_mapping_table by FUNC_PARAM_ID ASC
16052 IF l_function_param_table(i).FUNC_PARAM_ID <> l_action_mapping_table(i).FUNC_PARAM_ID THEN
16053 --RAISE;
16054 NULL;
16055 END IF;
16056 l_function_param_rec := l_function_param_table(i);
16057 l_func_param_name := l_function_param_rec.INTERNAL_NAME;
16058 l_attr_name := l_action_mapping_table(i).MAPPED_ATTRIBUTE;
16059
16060 IF l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'A' THEN
16061 --Indicating Attribute Groups values.
16062 FOR j IN x_attributes_data_table.FIRST .. x_attributes_data_table.LAST
16063 LOOP
16064 IF x_attributes_data_table(j).ATTR_NAME = l_attr_name THEN
16065 --For OUTPUT, INPUT/OUTPUT, RETURN parameters
16066 IF l_function_param_table(i).PARAM_TYPE_CODE IN ('O', 'B') THEN
16067 --code_debug ('EGO_EXT_FWK_PUB.Execute_Function - CHECK POINT 3');
16068 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
16069 DBMS_SQL.VARIABLE_VALUE(v_cursor, ''||l_func_param_name, x_attributes_data_table(j).ATTR_VALUE_STR);
16070 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
16071 DBMS_SQL.VARIABLE_VALUE(v_cursor, ''||l_func_param_name, x_attributes_data_table(j).ATTR_VALUE_NUM);
16072 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
16073 DBMS_SQL.VARIABLE_VALUE(v_cursor, ''||l_func_param_name, x_attributes_data_table(j).ATTR_VALUE_DATE);
16074 END IF;
16075 ELSIF l_function_param_table(i).PARAM_TYPE_CODE = 'R' THEN
16076 IF l_function_param_rec.DATA_TYPE_CODE = 'V' THEN
16077 DBMS_SQL.VARIABLE_VALUE(v_cursor, 'ret', x_attributes_data_table(j).ATTR_VALUE_STR);
16078 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'N' THEN
16079 DBMS_SQL.VARIABLE_VALUE(v_cursor, 'ret', x_attributes_data_table(j).ATTR_VALUE_NUM);
16080 ELSIF l_function_param_rec.DATA_TYPE_CODE = 'D' THEN
16081 DBMS_SQL.VARIABLE_VALUE(v_cursor, 'ret', x_attributes_data_table(j).ATTR_VALUE_DATE);
16082 END IF;
16083 END IF;
16084 EXIT;
16085
16086 END IF;
16087 END LOOP;--x_attributes_data_table
16088 ELSIF l_function_param_rec.MAPPED_TO_GROUP_TYPE = 'E' THEN
16089 --Indicating "External Attributes"
16090 FOR j IN x_external_attrs_value_pairs.FIRST .. x_external_attrs_value_pairs.LAST
16091 LOOP
16092 IF x_external_attrs_value_pairs(j).NAME = l_attr_name THEN
16093 --For OUTPUT, INPUT/OUTPUT, RETURN parameters
16094 IF l_function_param_table(i).PARAM_TYPE_CODE IN ('O', 'B') THEN
16095 DBMS_SQL.VARIABLE_VALUE(v_cursor, ''||l_func_param_name, x_external_attrs_value_pairs(j).VALUE);
16096 ELSIF l_function_param_table(i).PARAM_TYPE_CODE = 'R' THEN
16097 DBMS_SQL.VARIABLE_VALUE(v_cursor, 'ret', x_external_attrs_value_pairs(j).VALUE);
16098 END IF;
16099 EXIT;
16100 END IF;
16101 END LOOP;--x_external_attrs_value_pairs
16102
16103 --ONLY MAPPED_TO_AG_TYPE A and E can be used as OUTPUT/RESULT Param.
16104 END IF;
16105
16106 END LOOP;--l_function_param_table
16107 DBMS_SQL.CLOSE_CURSOR(v_cursor);
16108
16109 EXCEPTION
16110
16111 WHEN no_action_founded_exception THEN
16112 x_return_status := FND_API.G_RET_STS_ERROR;
16113 FND_MESSAGE.Set_Name('EGO', 'EGO_ACTION_ERROR');
16114 FND_MESSAGE.Set_Token('ACTION_NAME', nvl(l_action_name, l_action_rec.ACTION_ID));
16115 FND_MESSAGE.Set_Token('ERR_MSG', 'No such action definition founded');
16116 FND_MSG_PUB.Add;
16117 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16118 ,p_count => x_msg_count
16119 ,p_data => x_msg_data);
16120
16121 WHEN no_function_founded_exception THEN
16122 x_return_status := FND_API.G_RET_STS_ERROR;
16123 FND_MESSAGE.Set_Name('EGO', 'EGO_ACTION_ERROR');
16124 FND_MESSAGE.Set_Token('ACTION_NAME', l_action_name);
16125 FND_MESSAGE.Set_Token('ERR_MSG', 'No such function definition founded');
16126 FND_MSG_PUB.Add;
16127 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16128 ,p_count => x_msg_count
16129 ,p_data => x_msg_data);
16130
16131 WHEN func_params_mapping_exception THEN
16132 x_return_status := FND_API.G_RET_STS_ERROR;
16133 FND_MESSAGE.Set_Name('EGO', 'EGO_ACTION_ERROR');
16134 FND_MESSAGE.Set_Token('ACTION_NAME', l_action_name);
16135 FND_MESSAGE.Set_Token('ERR_MSG', 'Function parameters is not compatible with action attr mapping');
16136 FND_MSG_PUB.Add;
16137 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16138 ,p_count => x_msg_count
16139 ,p_data => x_msg_data);
16140
16141 WHEN bad_uda_row_info THEN
16142 x_return_status := FND_API.G_RET_STS_ERROR;
16143 FND_MESSAGE.Set_Name('EGO', 'EGO_ACTION_ERROR');
16144 FND_MESSAGE.Set_Token('ACTION_NAME', l_action_name);
16145 FND_MESSAGE.Set_Token('ERR_MSG', 'Wrong x_attributes_row_table data, please check!');
16146 FND_MSG_PUB.Add;
16147 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16148 ,p_count => x_msg_count
16149 ,p_data => x_msg_data);
16150
16151 WHEN bad_uda_data_row_identifier THEN
16152 x_return_status := FND_API.G_RET_STS_ERROR;
16153 FND_MESSAGE.Set_Name('EGO', 'EGO_ACTION_ERROR');
16154 FND_MESSAGE.Set_Token('ACTION_NAME', l_action_name);
16155 FND_MESSAGE.Set_Token('ERR_MSG', 'Incompatible x_attributes_row_table and x_attributes_data_table Row_Identifier');
16156 FND_MSG_PUB.Add;
16157 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16158 ,p_count => x_msg_count
16159 ,p_data => x_msg_data);
16160
16161 WHEN no_data_found_for_param_bind THEN
16162 x_return_status := FND_API.G_RET_STS_ERROR;
16163 FND_MESSAGE.Set_Name('EGO', 'EGO_ACTION_ERROR');
16164 FND_MESSAGE.Set_Token('ACTION_NAME', l_action_name);
16165 FND_MESSAGE.Set_Token('ERR_MSG', 'Not all output/return type function params assigned');
16166 FND_MSG_PUB.Add;
16167 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16168 ,p_count => x_msg_count
16169 ,p_data => x_msg_data);
16170
16171 WHEN OTHERS THEN
16172 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16173
16174 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
16175 FND_MESSAGE.Set_Token('PKG_NAME', 'EGO_EXT_FWK_PUB');
16176 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
16177 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
16178 FND_MSG_PUB.Add;
16179 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
16180 ,p_count => x_msg_count
16181 ,p_data => x_msg_data);
16182
16183 END;
16184 -----------------------------------------------------------
16185 --BugFix 10103483 : API for deleting Attribute Group View--
16186 -----------------------------------------------------------
16187 PROCEDURE Delete_Attr_Group_Views(p_view_name IN VARCHAR2)
16188 IS
16189 obj_name VARCHAR2(30) ;
16190 l_drop_sql VARCHAR2(100);
16191 CURSOR C iS
16192 SELECT object_name
16193 FROM SYS.all_objects
16194 WHERE object_name = p_view_name
16195 AND Upper(object_type)='VIEW';
16196
16197 fnd_apps_schema VARCHAR2(30) := NULL;
16198 h_status VARCHAR2(2000);
16199 h_industry VARCHAR2(2000);
16200 h_x BOOLEAN;
16201
16202 BEGIN
16203 OPEN c;
16204 FETCH c INTO obj_name;
16205 IF c%FOUND THEN
16206 l_drop_sql := 'DROP VIEW '|| obj_name;
16207
16208 --bugfix 11907422 for 12.2 AD_DDL changes
16209 --EXECUTE IMMEDIATE l_drop_sql;
16210
16211 h_x := FND_INSTALLATION.Get_App_Info('FND', h_status, h_industry, fnd_apps_schema);
16212 --bug 12392423, hard code APPS as second parameter
16213 AD_DDL.DO_DDL(fnd_apps_schema,'APPS', AD_DDL.DROP_VIEW,l_drop_sql,obj_name);
16214 COMMIT;
16215 END IF;
16216 CLOSE c;
16217 END Delete_Attr_Group_Views;
16218
16219
16220 ------------------------------------------------------------------------------------------
16221 -- METHOD :METHOD TO CHECK FOR VIEW IS PRESENT OR NOT,
16222 -- IF NOT PRESENT UPDATE AGV_NAME IN EGO_FND_DSC_FLX_CTX_EXT WITH NULL
16223 -- PARAMETER : ATTRIBUTE GROUP ID
16224 ------------------------------------------------------------------------------------------
16225
16226 PROCEDURE Check_Attr_Group_View(p_attr_grp_id IN NUMBER)
16227 IS
16228 obj_name VARCHAR2(30) ;
16229 atg_view_name VARCHAR2(30) ;
16230 view_name VARCHAR2(30) ;
16231
16232 CURSOR csr1 IS
16233 SELECT AGV_NAME
16234 FROM EGO_FND_DSC_FLX_CTX_EXT
16235 WHERE attr_group_id = p_attr_grp_id ;
16236
16237 CURSOR csr2 IS
16238 SELECT object_name
16239 FROM SYS.all_objects
16240 WHERE object_name = view_name
16241 AND UPPER(object_type)='VIEW';
16242
16243 CURSOR csr3 iS
16244 SELECT AGV_NAME
16245 FROM EGO_FND_DSC_FLX_CTX_EXT
16246 WHERE UPPER(agv_name) LIKE view_name ;
16247
16248 BEGIN
16249 OPEN csr1;
16250 FETCH csr1 INTO view_name;
16251 OPEN csr2;
16252 FETCH csr2 INTO obj_name;
16253 OPEN csr3;
16254 FETCH csr3 INTO atg_view_name;
16255
16256 IF (view_name IS NOT NULL) THEN
16257
16258 IF csr2%NOTFOUND THEN
16259
16260
16261 IF csr3%FOUND THEN
16262
16263 UPDATE EGO_FND_DSC_FLX_CTX_EXT SET AGV_NAME = NULL WHERE Upper(AGV_NAME) = atg_view_name ;
16264 COMMIT ;
16265
16266 END IF;
16267 CLOSE csr3;
16268 END IF;
16269 CLOSE csr2;
16270 END IF;
16271 CLOSE csr1;
16272 END Check_Attr_Group_View;
16273
16274 END EGO_EXT_FWK_PUB;