1 PACKAGE BODY EGO_EXT_FWK_PUB AS
2 /* $Header: EGOPEFMB.pls 120.61 2008/04/21 08:45:53 sandpand ship $ */
3
4 ------------------------------------
5 -- Global Variables and Constants --
6 ------------------------------------
7 G_PKG_NAME CONSTANT VARCHAR2(30) := 'EGO_EXT_FWK_PUB';
8 G_APP_NAME CONSTANT VARCHAR2(3) := 'EGO';
9 G_PKG_NAME_TOKEN CONSTANT VARCHAR2(8) := 'PKG_NAME';
10 G_API_NAME_TOKEN CONSTANT VARCHAR2(8) := 'API_NAME';
11 G_SQL_ERR_MSG_TOKEN CONSTANT VARCHAR2(11) := 'SQL_ERR_MSG';
12 G_PLSQL_ERR CONSTANT VARCHAR2(17) := 'EGO_PLSQL_ERR';
13
14 G_CURRENT_USER_ID NUMBER := FND_GLOBAL.User_Id;
15 G_CURRENT_LOGIN_ID NUMBER := FND_GLOBAL.Login_Id;
16
17 -- For use with error-reporting --
18 G_ADD_ERRORS_TO_FND_STACK CONSTANT VARCHAR2(1) := 'Y';
19 G_DUMMY_ENTITY_INDEX NUMBER;
20 G_DUMMY_ENTITY_ID VARCHAR2(50);
21 G_DUMMY_MESSAGE_TYPE VARCHAR2(1);
22
23
24 --------------------------
25 -- Package-Private APIs --
26 --------------------------
27
28 procedure code_debug (msg VARCHAR2) IS
29 BEGIN
30 -- IF msg like '%Delete_Association%' THEN
31 -- sri_debug(G_PKG_NAME||' '||msg);
32 -- END IF;
33 NULL;
34 END;
35
36 /*-----------------------------------------------------------------------------
37
38 DESCRIPTION
39 Converts a SELECT expression to its correct data type.
40
41 BUG FIX
42 6319734
43
44 PARAMETERS
45 See below.
46
47 AUTHOR
48 ssarnoba
49
50 NOTES
51
52 -----------------------------------------------------------------------------*/
53 PROCEDURE Convert_Child_VS_Select_Expr (
54 p_parent_vs_row IN ego_value_sets_v%ROWTYPE
55 , p_convert_date IN VARCHAR2 := FND_API.G_FALSE
56 , x_column_name IN OUT NOCOPY VARCHAR2
57 )
58 IS
59 BEGIN
60
61 -- If the value set is not of data type character, conversion is needed.
62 IF ( p_parent_vs_row.FORMAT_CODE = G_NUMBER_DATA_TYPE ) THEN
63 x_column_name := 'TO_NUMBER(' || x_column_name || ')';
64
65 ELSIF
66 (( p_parent_vs_row.FORMAT_CODE = G_DATE_DATA_TYPE OR
67 p_parent_vs_row.FORMAT_CODE = G_DATE_TIME_DATA_TYPE ) AND
68 p_convert_date = FND_API.G_TRUE )
69 THEN
70 -- Generally this is done later on so we don't do the conversion
71 -- unless forced by p_convert_date.
72 x_column_name := 'TO_DATE(' || x_column_name || ',''' ||
73 EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT ||
74 ''')';
75
76 ELSE
77 x_column_name := x_column_name ;
78 END IF;
79
80 END Convert_Child_VS_Select_Expr;
81
82
83 /*-----------------------------------------------------------------------------
84
85 DESCRIPTION
86 Builds the SELECT clause expressions for a child value set definition that
87 gets inserted into FND_FLEX_VALIDATION_TABLES.
88
89 BUG FIX
90 6319734
91
92 PARAMETERS
93 See below.
94
95 AUTHOR
96 ssarnoba
97
98 NOTES
99 The ID_COLUMN_NAME and VALUE_COLUMN_NAME values ultimately appears in a
100 SELECT clause to represent the value set. These child value set values
101 require conversion to their true data type for the values to be read
102 correctly in the Java layer.
103
104 -----------------------------------------------------------------------------*/
105 PROCEDURE Build_Child_VS_Select_Exprs (
106 p_parent_vs_row IN ego_value_sets_v%ROWTYPE
107 , x_id_column_type OUT NOCOPY fnd_flex_validation_tables.id_column_type%TYPE
108 , x_value_column_type OUT NOCOPY fnd_flex_validation_tables.value_column_type%TYPE
109 , x_id_column_name OUT NOCOPY fnd_flex_validation_tables.id_column_name%TYPE
110 , x_value_column_name OUT NOCOPY fnd_flex_validation_tables.value_column_name%TYPE
111 )
112 IS
113 BEGIN
114
115 ----------------------------------------------------------------------------
116 -- 1. FND_FLEX_VALIDATION_TABLES --
117 -- - ID_COLUMN_NAME --
118 -- - ID_COLUMN_TYPE --
119 ----------------------------------------------------------------------------
120
121 -- ID_COLUMN_TYPE must ALWAYS be the true data type of the value set
122 x_id_column_type := p_parent_vs_row.FORMAT_CODE;
123
124
125 -- Set the value for ID_COLUMN_NAME
126 x_id_column_name := 'vsv.INTERNAL_NAME';
127
128 -- Convert ID_COLUMN_NAME if necessary
129 Convert_Child_VS_Select_Expr (
130 p_parent_vs_row => p_parent_vs_row
131 , p_convert_date => FND_API.G_FALSE
132 , x_column_name => x_id_column_name
133 );
134
135 ----------------------------------------------------------------------------
136 -- 2. FND_FLEX_VALIDATION_TABLES --
137 -- - VALUE_COLUMN_NAME --
138 -- - VALUE_COLUMN_TYPE --
139 ----------------------------------------------------------------------------
140
141 -- Initialize VALUE_COLUMN_NAME
142 x_value_column_name := 'vsv.DISPLAY_NAME';
143
144 -- Value set's validation type is Translatable Independent
145 IF ( p_parent_vs_row.VALIDATION_CODE_ADMIN = G_TRANS_IND_VALIDATION_CODE )
146 THEN
147
148 -- The value of VALUE_COLUMN_NAME will always be of type character since
149 -- it's used purely for display.
150 x_value_column_type := G_CHAR_DATA_TYPE;
151
152 -- Value set's validation type is Independent
153 ELSIF
154 ( p_parent_vs_row.VALIDATION_CODE_ADMIN = G_INDEPENDENT_VALIDATION_CODE )
155 THEN
156
157 -- The value of VALUE_COLUMN_NAME will have the true data type of the value
158 -- set, so a conversion will be necessary as per ID_COLUMN_...
159 x_value_column_type := x_id_column_type;
160
161 -- Convert the value for VALUE_COLUMN_NAME if necessary
162 Convert_Child_VS_Select_Expr (
163 p_parent_vs_row => p_parent_vs_row
164 , p_convert_date => FND_API.G_TRUE
165 , x_column_name => x_value_column_name
166 );
167
168 END IF;
169
170 END Build_Child_VS_Select_Exprs;
171
172
173 /*-----------------------------------------------------------------------------
174
175 DESCRIPTION
176
177 Inserts a space before an ORDER BY clause, so that order by elimination
178 takes place for inner query blocks.
179
180 BUG FIX
181 6148833
182
183 PARAMETERS
184 See below.
185
186 -----------------------------------------------------------------------------*/
187 PROCEDURE Insert_Order_By_Space (
188 p_where_order_by IN OUT NOCOPY VARCHAR2
189 )
190 IS
191 BEGIN
192
193 -- Insert a space before an ORDER BY clause, so that ORDER BY elimination
194 -- takes place for inner query blocks
195 p_where_order_by := regexp_replace(
196 p_where_order_by, -- input string
197 '\)(O)', -- pattern to match
198 ') \1', -- replacement string
199 1, -- begin the search at the first character
200 0, -- replaces all occurrences of the match
201 'i'); -- case insensitive matching
202
203 END Insert_Order_By_Space;
204
205 ----------------------------------------------------------------------
206 --R12C
207 -- call this API to delete all visibility for a given Action
208 PROCEDURE Delete_Action_Data_Level (
209 p_api_version IN NUMBER
210 ,p_action_id IN NUMBER
211 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
212 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
213 ,x_return_status OUT NOCOPY VARCHAR2
214 ,x_errorcode OUT NOCOPY NUMBER
215 ,x_msg_count OUT NOCOPY NUMBER
216 ,x_msg_data OUT NOCOPY VARCHAR2
217 ) IS
218
219 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action_Data_Level';
220
221 --we don't use l_api_version yet, but eventually we might:
222 --if we change required parameters, version goes FROM n.x to (n+1).x
223 --if we change optional parameters, version goes FROM x.n to x.(n+1)
224 l_api_version CONSTANT NUMBER := 1.0;
225
226 BEGIN
227 code_debug ( l_api_name || ' Start ');
228 -- Standard start of API savepoint
229 IF FND_API.To_Boolean(p_commit) THEN
230 SAVEPOINT Delete_Action_Data_Level;
231 END IF;
232
233 -- Check for call compatibility
234 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
235 l_api_name, G_PKG_NAME)
236 THEN
237 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
238 END IF;
239 -- Initialize message list even though we don't currently use it
240 IF FND_API.To_Boolean(p_init_msg_list) THEN
241 FND_MSG_PUB.Initialize;
242 END IF;
243
244 DELETE FROM EGO_ACTIONS_DL
245 WHERE ACTION_ID = p_action_id;
246
247 -- Standard check of p_commit
248 IF FND_API.To_Boolean(p_commit) THEN
249 COMMIT WORK;
250 END IF;
251 x_return_status := FND_API.G_RET_STS_SUCCESS;
252 code_debug ( l_api_name || ' Exiting with status: '||x_return_status);
253
254 EXCEPTION
255 WHEN OTHERS THEN
256 IF FND_API.To_Boolean(p_commit) THEN
257 ROLLBACK TO Delete_Action_Data_Level;
258 END IF;
259 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
260
261 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
262 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
263 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
264 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
265 FND_MSG_PUB.Add;
266 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
267 ,p_count => x_msg_count
268 ,p_data => x_msg_data);
269
270
271 END Delete_Action_Data_Level;
272
273 ----------------------------------------------------------------------
274
275
276
277 FUNCTION Execute_DDL_And_Return_Err (
278 p_ddl_to_execute IN VARCHAR2
279 )
280 RETURN VARCHAR2
281 IS
282
283 PRAGMA AUTONOMOUS_TRANSACTION;
284 l_sqlerrm VARCHAR2(1000);
285
286 BEGIN
287
288 EXECUTE IMMEDIATE p_ddl_to_execute;
289 RETURN NULL;
290
291 EXCEPTION
292 WHEN OTHERS THEN
293 l_sqlerrm := SQLERRM;
294 RETURN l_sqlerrm;
295
296 END Execute_DDL_And_Return_Err;
297
298 ---------------------------------------------------------------------
299 -- Requirement: bug: 3542670
300 --
301 -- Function: To return the where clause from long column as VARCHAR2
302 -- In case of any exceptions, NULL is returned
303 --
304 -- Parameters:
305 -- IN
306 -- p_value_set_id : value set id
307 -- OUT
308 -- NONE
309 --
310 ---------------------------------------------------------------------
311 FUNCTION get_vs_table_where_clause (p_value_set_id IN NUMBER)
312 RETURN VARCHAR2 IS
313 l_addl_where_clause LONG;
314 BEGIN
315 SELECT additional_where_clause
316 INTO l_addl_where_clause
317 FROM fnd_flex_validation_tables
318 WHERE flex_value_set_id = p_value_set_id;
319 RETURN l_addl_where_clause;
320 EXCEPTION
321 WHEN OTHERS THEN
322 RETURN NULL;
323 END get_vs_table_where_clause;
324
325 ---------------------------------------------------------------------
326 -- Requirement: bug: 3542670
327 --
328 -- Function: To get the validation type of a value set.
329 -- If the user passes value_set_id and value_set_name,
330 -- value_set_id takes precedence.
331 --
332 -- Parameters:
333 -- IN
334 -- p_value_set_id : value set id
335 -- p_value_set_name : value set name
336 -- OUT
337 -- NONE
338 --
339 ---------------------------------------------------------------------
340 FUNCTION get_vs_validation_type (p_value_set_id IN NUMBER
341 ,p_value_set_name IN VARCHAR2
342 ) RETURN VARCHAR2 IS
343 l_return_value fnd_flex_value_sets.validation_type%TYPE;
344 BEGIN
345 l_return_value := NULL;
346 IF p_value_set_id IS NOT NULL THEN
347 SELECT validation_type
348 INTO l_return_value
349 FROM fnd_flex_value_sets
350 WHERE flex_value_set_id = p_value_set_id;
351 ELSIF p_value_set_name IS NOT NULL THEN
352 SELECT validation_type
353 INTO l_return_value
354 FROM fnd_flex_value_sets
355 WHERE flex_value_set_name = p_value_set_name;
356 END IF;
357 RETURN l_return_value;
358 EXCEPTION
359 WHEN OTHERS THEN
360 RETURN l_return_value;
361 END get_vs_validation_type;
362
363
364 ------------------------------------------------------------------------------------------
365 -- Function: To return whether a record exists for the given unique key combination
366 -- in FND and EGO Tables
367 -- If the table is not defined, NULL is returned
368 --
369 -- Parameters:
370 -- IN
371 -- p_context: ATTRIBUTE or ATTRIBUTE GROUP
372 -- p_application_id application_id
373 -- p_attr_group_type Attribute Group Type
374 -- p_attr_group_name Attribute Group Name
375 -- p_internal_name Intenral Name of Either Attribute or Attribute group.
376 -- OUT
377 -- x_fnd_exists : Y if record exists else N
378 -- x_ego_exists : Y if record exists else N
379 ------------------------------------------------------------------------------------------
380 PROCEDURE Get_fnd_ego_record_exists (
381 p_context IN VARCHAR2
382 ,p_application_id IN NUMBER
383 ,p_attr_group_type IN VARCHAR2
384 ,p_attr_group_name IN VARCHAR2
385 ,p_internal_name IN VARCHAR2
386 ,x_fnd_exists OUT NOCOPY VARCHAR2
387 ,x_ego_exists OUT NOCOPY VARCHAR2
388 )IS
389
390 BEGIN
391
392 IF (p_context = 'ATTRIBUTE GROUP') THEN
393 BEGIN
394 SELECT 'Y' INTO x_fnd_exists
395 FROM FND_DESCR_FLEX_CONTEXTS
396 WHERE APPLICATION_ID = p_application_id
397 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
398 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name;
399 EXCEPTION
400 WHEN OTHERS THEN
401 x_fnd_exists :='N';
402 END;
403 BEGIN
404 SELECT 'Y' INTO x_ego_exists
405 FROM EGO_FND_DSC_FLX_CTX_EXT
406 WHERE APPLICATION_ID = p_application_id
407 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
408 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name;
409 EXCEPTION
410 WHEN OTHERS THEN
411 x_ego_exists :='N';
412 END;
413 ELSIF (p_context = 'ATTRIBUTE') THEN
417 WHERE APPLICATION_ID = p_application_id
414 BEGIN
415 SELECT 'Y' INTO x_fnd_exists
416 FROM FND_DESCR_FLEX_COLUMN_USAGES
418 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
419 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
420 AND END_USER_COLUMN_NAME = p_internal_name;
421 EXCEPTION
422 WHEN OTHERS THEN
423 x_fnd_exists :='N';
424 END;
425 BEGIN
426 SELECT 'Y' INTO x_ego_exists
427 FROM EGO_FND_DF_COL_USGS_EXT ext
428 ,FND_DESCR_FLEX_COLUMN_USAGES fl_col
429 WHERE ext.APPLICATION_ID (+) = fl_col.APPLICATION_ID
430 AND ext.DESCRIPTIVE_FLEXFIELD_NAME (+) = fl_col.DESCRIPTIVE_FLEXFIELD_NAME
431 AND ext.DESCRIPTIVE_FLEX_CONTEXT_CODE (+) = fl_col.DESCRIPTIVE_FLEX_CONTEXT_CODE
432 AND ext.APPLICATION_COLUMN_NAME (+) = fl_col.APPLICATION_COLUMN_NAME
433 AND ext.APPLICATION_ID = p_application_id
434 AND ext.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
435 AND ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
436 AND fl_col.END_USER_COLUMN_NAME = p_internal_name;
437 EXCEPTION
438 WHEN OTHERS THEN
439 x_ego_exists:='N';
440 END;
441 END IF;
442
443
444 EXCEPTION
445 WHEN OTHERS THEN
446 x_fnd_exists := NULL;
447 x_ego_exists := NULL;
448 END Get_fnd_ego_record_exists;
449
450 --Bug 5443697
451 ------------------------------------------------------------------------------------------
452 -- Procedure: To set the variable x_start_num to 'Y' or 'N' based in whether the
453 -- String that is passed contains Number as the starting character.
454 --
455 -- Parameters:
456 -- IN
457 -- p_internal_name: the internal name of the Attribute group/Attribute
458 -- OUT
459 -- x_start_num : Y if the starting character is number else N
460 ------------------------------------------------------------------------------------------
461
462 PROCEDURE has_Num_Start_char (
463 p_internal_name IN VARCHAR2,
464 x_start_num OUT NOCOPY VARCHAR2
465 )IS
466 l_start_char VARCHAR2(10);
467 l_internal_name VARCHAR2 (1000);
468
469 BEGIN
470 l_internal_name:=p_internal_name;
471 IF (l_internal_name IS null) THEN
472 x_start_num :='N';
473 END IF;
474 l_internal_name:=trim(l_internal_name);
475 l_start_char:=substr(l_internal_name,1,1);
476
477 IF l_start_char IN ('0','1','2','3','4','5','6','7','8','9') THEN
478 x_start_num := 'Y';
479 ELSE
480 x_start_num :='N';
481 END IF;
482 EXCEPTION
483 WHEN OTHERS THEN
484 x_start_num:='N';
485 NULL;
486 END has_Num_Start_char;
487
488 --Bug 5443697
489 ------------------------------------------------------------------------------------------
490 -- Procedure: To set the variable x_start_num to 'Y' or 'N' based in whether the
491 -- String that is passed contains under score as the starting character.
492 --
493 -- Parameters:
494 -- IN
495 -- p_internal_name: the internal name of the Attribute group/Attribute
496 -- p_char_set: the character set to be checked
497 -- OUT
498 -- x_start_und_sc : Y if the starting character is equal to the p_char_set else N
499 ------------------------------------------------------------------------------------------
500
501 PROCEDURE has_Given_Char_As_Start_char (
502 p_internal_name IN VARCHAR2,
503 p_char_set IN VARCHAR2,
504 x_start_und_sc OUT NOCOPY VARCHAR2
505 )IS
506 l_start_char VARCHAR2(10);
507 l_internal_name VARCHAR2 (1000);
508
509 BEGIN
510 l_internal_name:=p_internal_name;
511 IF (l_internal_name IS null) THEN
512 x_start_und_sc :='N';
513 END IF;
514 l_internal_name:=trim(l_internal_name);
515 l_start_char:=substr(l_internal_name,1,1);
516
517 IF (l_start_char = p_char_set) THEN
518 x_start_und_sc := 'Y';
519 ELSE
520 x_start_und_sc :='N';
521 END IF;
522 EXCEPTION
523 WHEN OTHERS THEN
524 x_start_und_sc:='N';
525 NULL;
526 END has_Given_Char_As_Start_char;
527
528
529
530 ---------------------------------------------------------------------
531 -- Requirement: bug: 3542670
532 --
533 -- Function: To process value set values.
534 -- Given all the parameters, the data is inserted into
535 -- FND_FLEX_VALUES and FND_FLEX_VALUES_TL
536 --
537 -- Parameters:
538 -- IN
539 -- p_transaction_type : CREATE, UPDATE
540 -- p_value_set_name : value set name
541 -- p_internal_name : flex value
542 -- p_display_name : flex value meaning
543 -- p_description : flex value description
544 -- p_sequence : sequence of display -- APC column
545 -- p_start_date : start date
546 -- p_end_date : end date
547 -- p_enabled : enabled flag
548 -- OUT
549 -- x_return_status OUT NOCOPY VARCHAR2
550 --
554 ,p_value_set_name IN VARCHAR2
551 ---------------------------------------------------------------------
552 PROCEDURE Process_Value_Set_Val (
553 p_transaction_type IN VARCHAR2
555 ,p_internal_name IN VARCHAR2
556 ,p_display_name IN VARCHAR2
557 ,p_description IN VARCHAR2
558 ,p_sequence IN NUMBER
559 ,p_start_date IN DATE
560 ,p_end_date IN DATE
561 ,p_enabled IN VARCHAR2
562 ,p_owner IN NUMBER DEFAULT NULL
563 ,x_return_status OUT NOCOPY VARCHAR2
564 ) IS
565
566 l_api_name VARCHAR2(30);
567 l_flex_value_id FND_FLEX_VALUES.flex_value_id%TYPE;
568 l_value_set_id FND_FLEX_VALUES.flex_value_set_id%TYPE;
569 l_Sysdate DATE;
570 l_rowid VARCHAR2(100);
571
572 l_validation_type fnd_flex_value_sets.validation_type%TYPE;
573 l_storage_value VARCHAR2(32767);
574 l_msg_count NUMBER;
575 l_msg_data VARCHAR2(32767);
576 l_owner NUMBER;
577
578 BEGIN
579
580 l_api_name := 'PVT_Process_Value_Set_Val';
581 code_debug (l_api_name||' invoked with parameters -- p_transaction_type: '||p_transaction_type);
582 code_debug (' p_value_set_name: '||p_value_set_name||' p_internal_name: '||p_internal_name||' p_display_name: '||p_display_name);
583 code_debug (' p_sequence: '||p_sequence||' p_start_date: '||p_start_date||' p_end_date: '||p_end_date);
584 code_debug (' p_enabled: '||p_enabled||' p_description: '||p_description);
585
586 l_validation_type := get_vs_validation_type (p_value_set_id => NULL
587 ,p_value_set_name => p_value_set_name
588 );
589
590 IF (p_owner IS NULL OR p_owner = -1) THEN
591 l_owner := g_current_user_id;
592 ELSE
593 l_owner := p_owner;
594 END IF;
595
596 IF NVL(l_validation_type, 'A') NOT IN (G_TABLE_VALIDATION_CODE,
597 G_INDEPENDENT_VALIDATION_CODE,
598 G_NONE_VALIDATION_CODE,
599 G_TRANS_IND_VALIDATION_CODE) THEN
600 -- not currently supported in EGO
601 x_return_status := FND_API.G_RET_STS_ERROR;
602 END IF;
603
604 -- IF l_validation_type = G_TRANS_IND_VALIDATION_CODE THEN
605 l_Sysdate := SYSDATE;
606 SELECT flex_value_set_id
607 INTO l_value_set_id
608 FROM fnd_flex_value_sets
609 WHERE flex_value_set_name = p_value_set_name;
610
611 IF p_transaction_type = 'CREATE' THEN
612 -- create an translatable independent value set
613 SELECT fnd_flex_values_s.NEXTVAL
614 INTO l_flex_value_id
615 FROM dual;
616 FND_FLEX_VALUES_PKG.INSERT_ROW
617 (x_rowid => l_rowid
618 ,x_flex_value_id => l_flex_value_id
619 ,x_attribute_sort_order => NULL
620 ,x_flex_value_set_id => l_value_set_id
621 ,x_flex_value => p_internal_name
622 ,x_enabled_flag => NVL(p_enabled,'Y')
623 ,x_summary_flag => 'N'
624 ,x_start_date_active => p_start_date
625 ,x_end_date_active => p_end_date
626 ,x_parent_flex_value_low => NULL
627 ,x_parent_flex_value_high => NULL
628 ,x_structured_hierarchy_level => NULL
629 ,x_hierarchy_level => NULL
630 ,x_compiled_value_attributes => NULL
631 ,x_value_category => NULL
632 ,x_attribute1 => NULL
633 ,x_attribute2 => NULL
634 ,x_attribute3 => NULL
635 ,x_attribute4 => NULL
636 ,x_attribute5 => NULL
637 ,x_attribute6 => NULL
638 ,x_attribute7 => NULL
639 ,x_attribute8 => NULL
640 ,x_attribute9 => NULL
641 ,x_attribute10 => NULL
642 ,x_attribute11 => NULL
643 ,x_attribute12 => NULL
644 ,x_attribute13 => NULL
645 ,x_attribute14 => NULL
646 ,x_attribute15 => NULL
647 ,x_attribute16 => NULL
648 ,x_attribute17 => NULL
649 ,x_attribute18 => NULL
650 ,x_attribute19 => NULL
651 ,x_attribute20 => NULL
652 ,x_attribute21 => NULL
653 ,x_attribute22 => NULL
654 ,x_attribute23 => NULL
655 ,x_attribute24 => NULL
656 ,x_attribute25 => NULL
657 ,x_attribute26 => NULL
658 ,x_attribute27 => NULL
659 ,x_attribute28 => NULL
660 ,x_attribute29 => NULL
661 ,x_attribute30 => NULL
662 ,x_attribute31 => NULL
663 ,x_attribute32 => NULL
667 ,x_attribute36 => NULL
664 ,x_attribute33 => NULL
665 ,x_attribute34 => NULL
666 ,x_attribute35 => NULL
668 ,x_attribute37 => NULL
669 ,x_attribute38 => NULL
670 ,x_attribute39 => NULL
671 ,x_attribute40 => NULL
672 ,x_attribute41 => NULL
673 ,x_attribute42 => NULL
674 ,x_attribute43 => NULL
675 ,x_attribute44 => NULL
676 ,x_attribute45 => NULL
677 ,x_attribute46 => NULL
678 ,x_attribute47 => NULL
679 ,x_attribute48 => NULL
680 ,x_attribute49 => NULL
681 ,x_attribute50 => NULL
682 ,x_flex_value_meaning => p_display_name
683 ,x_description => p_description
684 ,x_creation_date => l_sysdate
685 ,x_created_by => l_owner
686 ,x_last_update_date => l_sysdate
687 ,x_last_updated_by => l_owner
688 ,x_last_update_login => G_CURRENT_LOGIN_ID);
689
690 ELSIF p_transaction_type = 'UPDATE' THEN
691 SELECT flex_value_id
692 INTO l_flex_value_id
693 FROM fnd_flex_values
694 WHERE flex_value_set_id = l_value_set_id
695 AND flex_value = p_internal_name;
696
697 FND_FLEX_VALUES_PKG.UPDATE_ROW
698 (x_flex_value_id => l_flex_value_id
699 ,x_attribute_sort_order => NULL
700 ,x_flex_value_set_id => l_value_set_id
701 ,x_flex_value => p_internal_name
702 ,x_enabled_flag => p_enabled
703 ,x_summary_flag => 'N'
704 ,x_start_date_active => p_start_date
705 ,x_end_date_active => p_end_date
706 ,x_parent_flex_value_low => NULL
707 ,x_parent_flex_value_high => NULL
708 ,x_structured_hierarchy_level => NULL
709 ,x_hierarchy_level => NULL
710 ,x_compiled_value_attributes => NULL
711 ,x_value_category => NULL
712 ,x_attribute1 => NULL
713 ,x_attribute2 => NULL
714 ,x_attribute3 => NULL
715 ,x_attribute4 => NULL
716 ,x_attribute5 => NULL
717 ,x_attribute6 => NULL
718 ,x_attribute7 => NULL
719 ,x_attribute8 => NULL
720 ,x_attribute9 => NULL
721 ,x_attribute10 => NULL
722 ,x_attribute11 => NULL
723 ,x_attribute12 => NULL
724 ,x_attribute13 => NULL
725 ,x_attribute14 => NULL
726 ,x_attribute15 => NULL
727 ,x_attribute16 => NULL
728 ,x_attribute17 => NULL
729 ,x_attribute18 => NULL
730 ,x_attribute19 => NULL
731 ,x_attribute20 => NULL
732 ,x_attribute21 => NULL
733 ,x_attribute22 => NULL
734 ,x_attribute23 => NULL
735 ,x_attribute24 => NULL
736 ,x_attribute25 => NULL
737 ,x_attribute26 => NULL
738 ,x_attribute27 => NULL
739 ,x_attribute28 => NULL
740 ,x_attribute29 => NULL
741 ,x_attribute30 => NULL
742 ,x_attribute31 => NULL
743 ,x_attribute32 => NULL
744 ,x_attribute33 => NULL
745 ,x_attribute34 => NULL
746 ,x_attribute35 => NULL
747 ,x_attribute36 => NULL
748 ,x_attribute37 => NULL
749 ,x_attribute38 => NULL
750 ,x_attribute39 => NULL
751 ,x_attribute40 => NULL
752 ,x_attribute41 => NULL
753 ,x_attribute42 => NULL
754 ,x_attribute43 => NULL
755 ,x_attribute44 => NULL
756 ,x_attribute45 => NULL
757 ,x_attribute46 => NULL
758 ,x_attribute47 => NULL
759 ,x_attribute48 => NULL
760 ,x_attribute49 => NULL
761 ,x_attribute50 => NULL
762 ,x_flex_value_meaning => p_display_name
763 ,x_description => p_description
764 ,x_last_update_date => l_sysdate
765 ,x_last_updated_by => l_owner
766 ,x_last_update_login => G_CURRENT_LOGIN_ID);
767 END IF;
768
769 /***
770 this is not working right now
771 logged bug 3957430 against FND
772
773 ELSE -- value set of type Independent.
774 IF p_transaction_type = 'CREATE' THEN
778 ,p_flex_value => p_internal_name
775 code_debug (l_api_name||' calling FND_FLEX_VAL_API.create_independent_vset_value ');
776 FND_FLEX_VAL_API.create_independent_vset_value
777 (p_flex_value_set_name => p_value_set_name
779 ,p_description => p_description
780 ,p_enabled_flag => p_enabled
781 ,p_start_date_active => p_start_date
782 ,p_end_date_active => p_end_date
783 -- allow default values
784 -- ,p_summary_flag IN VARCHAR2 DEFAULT 'N',
785 -- ,p_structured_hierarchy_level IN NUMBER DEFAULT NULL,
786 -- ,p_hierarchy_level IN VARCHAR2 DEFAULT NULL,
787 ,x_storage_value => l_storage_value);
788 code_debug (l_api_name||' returning FND_FLEX_VAL_API.create_independent_vset_value with value '||l_storage_value );
789 ELSIF p_transaction_type = 'UPDATE' THEN
790 code_debug (l_api_name||' calling FND_FLEX_VAL_API.update_independent_vset_value ');
791 FND_FLEX_VAL_API.update_independent_vset_value
792 (p_flex_value_set_name => p_value_set_name
793 ,p_flex_value => p_internal_name
794 ,p_description => p_description
795 ,p_enabled_flag => p_enabled
796 ,p_start_date_active => p_start_date
797 ,p_end_date_active => p_end_date
798 -- allow default values
799 -- ,p_summary_flag IN VARCHAR2 DEFAULT 'N',
800 -- ,p_structured_hierarchy_level IN NUMBER DEFAULT NULL,
801 -- ,p_hierarchy_level IN VARCHAR2 DEFAULT NULL,
802 ,x_storage_value => l_storage_value);
803 code_debug (l_api_name||' returning FND_FLEX_VAL_API.update_independent_vset_value with value '||l_storage_value );
804 END IF;
805 END IF;
806 ***/
807
808 code_debug (l_api_name||' calling proces_vs_value_sequence ');
809 process_vs_value_sequence
810 (p_api_version => 1.0
811 ,p_transaction_type => p_transaction_type
812 ,p_value_set_id => NULL
813 ,p_value_set_name => p_value_set_name
814 ,p_value_set_value_id => l_flex_value_id
815 ,p_value_set_value => p_internal_name
816 ,p_sequence => p_sequence
817 ,p_owner => l_owner
818 ,p_init_msg_list => fnd_api.g_FALSE
819 ,p_commit => fnd_api.g_FALSE
820 ,x_return_status => x_return_status
821 ,x_msg_count => l_msg_count
822 ,x_msg_data => l_msg_data
823 );
824 code_debug (l_api_name||' returning proces_vs_value_sequence with status '||x_return_status);
825
826 EXCEPTION
827 WHEN OTHERS THEN
828 code_debug (l_api_name||' EXCEPTION -- OTHERS ');
829 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
830 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
831 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
832 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
833 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
834 FND_MSG_PUB.Add;
835 END Process_Value_Set_Val;
836
837
838
839 ----------------------------------------------------------------------
840 PROCEDURE Get_Attr_Group_Comb_PKs(
841 p_attr_group_id IN NUMBER
842 , p_application_id OUT NOCOPY NUMBER
843 , p_attr_grp_type OUT NOCOPY VARCHAR2
844 , p_attr_grp_name OUT NOCOPY VARCHAR2
845 )IS
846 CURSOR get_attr_details IS
847 SELECT application_id , descriptive_flexfield_name ,descriptive_flex_context_code
848 FROM ego_fnd_dsc_flx_ctx_ext
849 WHERE attr_group_id = p_attr_group_id;
850 BEGIN
851 OPEN get_attr_details;
852 FETCH get_attr_details
853 INTO p_application_id , p_attr_grp_type , p_attr_grp_name;
854 IF get_attr_details%NOTFOUND THEN
855 p_application_id := NULL;
856 p_attr_grp_type := NULL;
857 p_attr_grp_name := NULL;
858 END IF;
859 CLOSE get_attr_details;
860 EXCEPTION
861 WHEN OTHERS THEN
862 IF get_attr_details%ISOPEN THEN
863 CLOSE get_attr_details;
864 END IF;
865 p_application_id := NULL;
866 p_attr_grp_type := NULL;
867 p_attr_grp_name := NULL;
868 RAISE;
869 END Get_Attr_Group_Comb_PKs;
870
871 --------------------------------------------------------------------
872
873 PROCEDURE Delete_Attribute_Internal (
874 p_application_id IN NUMBER
875 ,p_attr_group_type IN VARCHAR2
876 ,p_attr_group_name IN VARCHAR2
877 ,p_attr_name IN VARCHAR2
878 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
879 ,x_return_status OUT NOCOPY VARCHAR2
880 ,x_errorcode OUT NOCOPY NUMBER
881 ,x_msg_count OUT NOCOPY NUMBER
882 ,x_msg_data OUT NOCOPY VARCHAR2
883 ) IS
884
885 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute_Internal';
886 l_app_col_name VARCHAR2(30);
887
888 BEGIN
889
893 END IF;
890 -- Standard start of API savepoint
891 IF FND_API.TO_BOOLEAN(p_commit) THEN
892 SAVEPOINT Delete_Attribute_PRV;
894
895 SELECT APPLICATION_COLUMN_NAME
896 INTO l_app_col_name
897 FROM FND_DESCR_FLEX_COLUMN_USAGES
898 WHERE APPLICATION_ID = p_application_id
899 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
900 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
901 AND END_USER_COLUMN_NAME = p_attr_name;
902
903 DELETE FROM FND_DESCR_FLEX_COLUMN_USAGES
904 WHERE APPLICATION_ID = p_application_id
905 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
906 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
907 AND END_USER_COLUMN_NAME = p_attr_name;
908
909 DELETE FROM FND_DESCR_FLEX_COL_USAGE_TL
910 WHERE APPLICATION_ID = p_application_id
911 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
912 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
913 AND APPLICATION_COLUMN_NAME = l_app_col_name;
914
915 DELETE FROM EGO_FND_DF_COL_USGS_EXT
916 WHERE APPLICATION_ID = p_application_id
917 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
918 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
919 AND APPLICATION_COLUMN_NAME = l_app_col_name;
920
921 -- Standard check of p_commit
922 IF FND_API.To_Boolean(p_commit) THEN
923 COMMIT WORK;
924 END IF;
925
926 x_return_status := FND_API.G_RET_STS_SUCCESS;
927
928 EXCEPTION
929 WHEN OTHERS THEN
930 IF FND_API.TO_BOOLEAN(p_commit) THEN
931 ROLLBACK TO Delete_Attribute_PRV;
932 END IF;
933 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
934
935 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
936 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
937 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
938 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
939 FND_MSG_PUB.Add;
940 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
941 ,p_count => x_msg_count
942 ,p_data => x_msg_data);
943
944 END Delete_Attribute_Internal;
945
946 ----------------------------------------------------------------------
947
948 PROCEDURE Delete_Attr_Group_Internal (
949 p_application_id IN NUMBER
950 ,p_attr_group_type IN VARCHAR2
951 ,p_attr_group_name IN VARCHAR2
952 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
953 ,x_return_status OUT NOCOPY VARCHAR2
954 ,x_errorcode OUT NOCOPY NUMBER
955 ,x_msg_count OUT NOCOPY NUMBER
956 ,x_msg_data OUT NOCOPY VARCHAR2
957 ) IS
958
959 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attr_Group_Internal';
960
961 CURSOR attrs IS
962 SELECT END_USER_COLUMN_NAME
963 FROM FND_DESCR_FLEX_COLUMN_USAGES
964 WHERE APPLICATION_ID = p_application_id
965 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
966 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
967
968 BEGIN
969
970 -- Standard start of API savepoint
971 IF FND_API.TO_BOOLEAN(p_commit) THEN
972 SAVEPOINT Delete_Attribute_Group_PVT;
973 END IF;
974
975 FOR attrs_rec IN attrs LOOP
976
977 Delete_Attribute_Internal(p_application_id, p_attr_group_type, p_attr_group_name,
978 attrs_rec.end_user_column_name, p_commit,
979 x_return_status, x_errorcode, x_msg_count, x_msg_data);
980
981 END LOOP;
982
983 DELETE FROM FND_DESCR_FLEX_CONTEXTS
984 WHERE APPLICATION_ID = p_application_id
985 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
986 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
987
988 DELETE FROM FND_DESCR_FLEX_CONTEXTS_TL
989 WHERE APPLICATION_ID = p_application_id
990 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
991 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
992
993 DELETE FROM EGO_FND_DSC_FLX_CTX_EXT
994 WHERE APPLICATION_ID = p_application_id
995 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
996 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
997
998 DELETE FROM EGO_ATTR_GROUP_DL
999 WHERE ATTR_GROUP_ID = (SELECT ATTR_GROUP_ID
1000 FROM EGO_ATTR_GROUPS_V
1001 WHERE APPLICATION_ID = p_application_id
1002 AND ATTR_GROUP_TYPE = p_attr_group_type
1003 AND ATTR_GROUP_NAME = p_attr_group_name);
1004
1005 -- Standard check of p_commit
1006 IF FND_API.To_Boolean(p_commit) THEN
1007 COMMIT WORK;
1008 END IF;
1009
1010 x_return_status := FND_API.G_RET_STS_SUCCESS;
1011
1012 EXCEPTION
1013 WHEN OTHERS THEN
1014 IF FND_API.TO_BOOLEAN(p_commit) THEN
1015 ROLLBACK TO Delete_Attribute_Group_PVT;
1016 END IF;
1017 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1021 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
1018 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
1019 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
1020 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
1022 FND_MSG_PUB.Add;
1023 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
1024 ,p_count => x_msg_count
1025 ,p_data => x_msg_data);
1026
1027 END Delete_Attr_Group_Internal;
1028
1029 ----------------------------------------------------------------------
1030
1031 FUNCTION Get_Association_Id_From_PKs (
1032 p_object_id IN NUMBER
1033 ,p_classification_code IN VARCHAR2
1034 ,p_attr_group_id IN NUMBER
1035 ) RETURN NUMBER
1036 IS
1037
1038 l_association_id NUMBER;
1039
1040 BEGIN
1041
1042 IF p_object_id IS NOT NULL THEN
1043 SELECT ASSOCIATION_ID
1044 INTO l_association_id
1045 FROM EGO_OBJ_AG_ASSOCS_B
1046 WHERE OBJECT_ID = p_object_id
1047 AND CLASSIFICATION_CODE = p_classification_code
1048 AND ATTR_GROUP_ID = p_attr_group_id;
1049 END IF;
1050
1051 RETURN l_association_id;
1052
1053 EXCEPTION
1054 WHEN NO_DATA_FOUND THEN
1055 RETURN NULL;
1056
1057 END Get_Association_Id_From_PKs;
1058
1059 ----------------------------------------------------------------------
1060
1061 FUNCTION Get_Page_Id_From_PKs (
1062 p_object_id IN NUMBER
1063 ,p_classification_code IN VARCHAR2
1064 ,p_page_internal_name IN VARCHAR2
1065 ) RETURN NUMBER
1066 IS
1067
1068 l_page_id NUMBER;
1069
1070 BEGIN
1071
1072 IF p_object_id IS NOT NULL THEN
1073 SELECT PAGE_ID
1074 INTO l_page_id
1075 FROM EGO_PAGES_B
1076 WHERE OBJECT_ID = p_object_id
1077 AND CLASSIFICATION_CODE = p_classification_code
1078 AND INTERNAL_NAME = p_page_internal_name;
1079 END IF;
1080
1081 RETURN l_page_id;
1082
1083 EXCEPTION
1084 WHEN NO_DATA_FOUND THEN
1085 RETURN NULL;
1086
1087 END Get_Page_Id_From_PKs;
1088
1089 ----------------------------------------------------------------------
1090
1091 FUNCTION Get_PKs_From_Attr_Group_Id (
1092 p_attr_group_id IN NUMBER
1093 )
1094 RETURN EGO_VARCHAR_TBL_TYPE
1095 IS
1096
1097 l_application_id NUMBER;
1098 l_attr_group_type VARCHAR2(40);
1099 l_attr_group_name VARCHAR2(30);
1100
1101 BEGIN
1102
1103 SELECT APPLICATION_ID, DESCRIPTIVE_FLEXFIELD_NAME, DESCRIPTIVE_FLEX_CONTEXT_CODE
1104 INTO l_application_id, l_attr_group_type, l_attr_group_name
1105 FROM EGO_FND_DSC_FLX_CTX_EXT
1106 WHERE ATTR_GROUP_ID = p_attr_group_id;
1107
1108 RETURN EGO_VARCHAR_TBL_TYPE(TO_CHAR(l_application_id), l_attr_group_type, l_attr_group_name);
1109
1110 EXCEPTION
1111 WHEN NO_DATA_FOUND THEN
1112 RETURN NULL;
1113
1114 END Get_PKs_From_Attr_Group_Id;
1115
1116 ----------------------------------------------------------------------
1117
1118 FUNCTION Check_Associations_Exist (
1119 p_application_id IN NUMBER
1120 ,p_attr_group_type IN VARCHAR2
1121 ,p_attr_group_name IN VARCHAR2
1122 )
1123 RETURN BOOLEAN
1124 IS
1125
1126 l_attr_group_id NUMBER;
1127 l_change_assocs_exist BOOLEAN := FALSE;
1128 l_assocs_num NUMBER := 0;
1129
1130 BEGIN
1131
1132 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
1133 ,p_attr_group_type
1134 ,p_attr_group_name);
1135
1136 SELECT COUNT(*)
1137 INTO l_assocs_num
1138 FROM EGO_OBJ_AG_ASSOCS_B
1139 WHERE ATTR_GROUP_ID = l_attr_group_id
1140 AND ENABLED_FLAG = 'Y';
1141
1142 IF (l_assocs_num > 0) OR (l_change_assocs_exist = TRUE) THEN
1143 RETURN TRUE;
1144 END IF;
1145
1146 RETURN FALSE;
1147
1148 END Check_Associations_Exist;
1149
1150 ---------------------------------------------------------------------
1151 -- Checks if the UOM column exists in the p_table_name --
1152 -- for Attribute value column p_column --
1153 -- bug 3875730 --
1154 ---------------------------------------------------------------------
1155
1156 FUNCTION check_Uom_Column_Exists (
1157 p_column IN VARCHAR2
1158 ,p_table_name IN VARCHAR2
1159 )
1160 RETURN VARCHAR2
1161 IS
1162 l_uom_column_name VARCHAR2(30);
1163 BEGIN
1164
1165 IF ( INSTR (p_column, 'N_EXT_ATTR' ) = 0) THEN
1166
1167 SELECT COLUMN_NAME
1168 INTO l_uom_column_name
1169 FROM FND_COLUMNS
1170 WHERE TABLE_ID =
1171 (SELECT TABLE_ID FROM FND_TABLES
1175 RETURN l_uom_column_name;
1172 WHERE TABLE_NAME = p_table_name)
1173 AND COLUMN_NAME = 'UOM_'||p_column ;
1174
1176
1177 END IF;
1178
1179 RETURN '1' ;
1180
1181 EXCEPTION
1182 WHEN NO_DATA_FOUND THEN
1183 RETURN NULL ;
1184
1185 END check_Uom_Column_Exists;
1186
1187 ---------------------------------------------------------------------
1188 -- Checks if the UOM column is used by any other attribute of this --
1189 -- Attribute Group --
1190 -- bug 3875730 --
1191 ---------------------------------------------------------------------
1192
1193 FUNCTION check_Uom_Col_In_Use (
1194 p_application_id IN NUMBER
1195 ,p_attr_group_type IN VARCHAR2
1196 ,p_attr_group_name IN VARCHAR2
1197 ,p_internal_name IN VARCHAR2
1198 ,p_uom_column_name IN VARCHAR2
1199 )
1200 RETURN VARCHAR2
1201 IS
1202 l_uom_column_name VARCHAR2(300);
1203 BEGIN
1204 SELECT 1
1205 INTO l_uom_column_name
1206 FROM FND_DESCR_FLEX_COLUMN_USAGES
1207 WHERE APPLICATION_ID = p_application_id
1208 AND DESCRIPTIVE_FLEXFIELD_NAME= p_attr_group_type
1209 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
1210 AND END_USER_COLUMN_NAME <> p_internal_name
1211 AND APPLICATION_COLUMN_NAME = p_uom_column_name ;
1212
1213 RETURN l_uom_column_name;
1214
1215 EXCEPTION
1216 WHEN NO_DATA_FOUND THEN
1217 RETURN NULL ;
1218
1219 END check_Uom_Col_In_Use;
1220
1221 ----------------------------------------------------------------------
1222 /*
1223
1224 FUNCTION Get_Ext_Table_Owner (
1225 p_table_name IN VARCHAR2
1226 )
1227 RETURN VARCHAR2
1228 IS
1229
1230 l_table_owner VARCHAR2(30);
1231
1232 BEGIN
1233
1234 SELECT OWNER
1235 INTO l_table_owner
1236 FROM ALL_TABLES
1237 WHERE TABLE_NAME = p_table_name;
1238
1239 RETURN l_table_owner;
1240
1241 EXCEPTION
1242 WHEN NO_DATA_FOUND THEN
1243 RETURN NULL;
1244
1245 END Get_Ext_Table_Owner;
1246 */
1247
1248 ----------------------------------------------------------------------
1249
1250 FUNCTION Get_Application_name (
1251 p_appl_id IN NUMBER
1252 )
1253 RETURN VARCHAR2
1254 IS
1255
1256 l_appl_name VARCHAR2(30);
1257
1258 BEGIN
1259
1260 SELECT APPLICATION_SHORT_NAME
1261 INTO l_appl_name
1262 FROM FND_APPLICATION
1263 WHERE APPLICATION_ID = p_appl_id;
1264
1265 RETURN l_appl_name;
1266
1267 EXCEPTION
1268 WHEN NO_DATA_FOUND THEN
1269 RETURN NULL;
1270
1271 END Get_Application_name;
1272
1273 ----------------------------------------------------------------------
1274
1275 FUNCTION Get_Application_Owner (
1276 p_appl_id IN NUMBER
1277 )
1278 RETURN VARCHAR2
1279 IS
1280
1281 l_schema VARCHAR2(30);
1282 l_status VARCHAR2(1);
1283 l_industry VARCHAR2(1);
1284
1285 BEGIN
1286
1287 IF NOT FND_INSTALLATION.GET_APP_INFO(Get_Application_name(p_appl_id), l_status, l_industry, l_schema)
1288 THEN
1289 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1290 END IF;
1291
1292 IF (l_schema IS NULL)
1293 THEN
1294 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1295 END IF;
1296
1297 RETURN l_schema;
1298
1299 EXCEPTION
1300 WHEN NO_DATA_FOUND THEN
1301 RETURN NULL;
1302
1303 END Get_Application_Owner;
1304
1305 ---------------------------------------------------------------------
1306
1307
1308 FUNCTION Get_Oracle_UserName
1309 RETURN VARCHAR2
1310 IS
1311
1312 l_oracleUser VARCHAR2(30);
1313
1314 BEGIN
1315
1316 SELECT
1317 ORACLE_USERNAME INTO l_oracleUser
1318 FROM
1319 FND_ORACLE_USERID
1320 WHERE
1321 READ_ONLY_FLAG = 'U';
1322
1323 RETURN l_oracleUser;
1324
1325 EXCEPTION
1326 WHEN NO_DATA_FOUND THEN
1327 RETURN NULL;
1328
1329 END Get_Oracle_UserName;
1330
1331 ---------------------------------------------------------------------
1332
1333
1334
1335 FUNCTION Create_Index_For_DBCol (
1336 p_application_id IN NUMBER
1337 ,p_attr_group_type IN VARCHAR2
1338 ,p_attr_group_name IN VARCHAR2
1339 ,p_table_name IN VARCHAR2
1340 ,p_chg_table_name IN VARCHAR2 --R12 for pending table name.
1341 ,p_is_column_indexed IN VARCHAR2 --R12 flag for column of production table
1342 ,p_is_chg_column_indexed IN VARCHAR2 --R12 flag for column of pending table
1343 ,p_column IN VARCHAR2
1347 IS
1344 ,p_is_table_translatable IN BOOLEAN
1345 )
1346 RETURN VARCHAR2
1348
1349 l_table_owner VARCHAR2(30);
1350 l_class_code_column VARCHAR2(30);
1351 l_index_name VARCHAR2(30);
1352 l_chg_index_name VARCHAR2(30);
1353 l_dynamic_sql VARCHAR2(350);
1354 l_chg_dynamic_sql VARCHAR2(350);
1355
1356 BEGIN
1357 -------------------------
1358 -- Get the Table owner --
1359 -------------------------
1360 l_table_owner := Get_Application_Owner(p_appl_id=>p_application_id);
1361 ---------------------------------------------
1362 -- Get the Classification Code column name --
1363 ---------------------------------------------
1364 SELECT CLASSIFICATION_COL_NAME
1365 INTO l_class_code_column
1366 FROM EGO_FND_OBJECTS_EXT
1367 WHERE OBJECT_NAME = (SELECT OBJ_NAME FROM FND_OBJECTS
1368 WHERE OBJECT_ID = (SELECT OBJECT_ID
1369 FROM EGO_OBJECT_EXT_TABLES_B
1370 WHERE EXT_TABLE_NAME = p_table_name));
1371
1372 SELECT EGO_DB_COL_INDEX_S.NEXTVAL INTO l_index_name FROM DUAL;
1373 l_chg_index_name:=l_index_name; --for the index name of pending table.
1374 l_index_name := 'ag_'||p_column||'_n'||l_index_name;
1375 l_chg_index_name := 'ag_pdg_'||p_column||'_n'||l_chg_index_name;--index name for the pending table.
1376
1377 --Creating index on the production table if the column is not already indexed.
1378 IF(p_is_column_indexed IS NULL OR p_is_column_indexed <> 'Y') THEN
1379 l_dynamic_sql := ' CREATE INDEX '||l_table_owner||'.'||l_index_name||
1380 ' ON '||l_table_owner||'.'||p_table_name||' (';
1381
1382 IF l_class_code_column IS NOT NULL THEN
1383 l_dynamic_sql := l_dynamic_sql ||l_class_code_column||', ';
1384 END IF;
1385
1386 IF (p_is_table_translatable) THEN
1387 l_dynamic_sql := l_dynamic_sql||'LANGUAGE , ';
1388 END IF;
1389
1390 l_dynamic_sql := l_dynamic_sql||p_column||') LOCAL COMPUTE STATISTICS';
1391
1392 EXECUTE IMMEDIATE l_dynamic_sql;
1393 END IF;-- IF(p_is_column_indexed IS NULL OR p_is_column_indexed <> 'Y')
1394
1395 --Creating index on the pending table if the column is not already indexed.
1396 IF(p_is_chg_column_indexed IS NULL OR p_is_chg_column_indexed <> 'Y') THEN
1397 l_chg_dynamic_sql := ' CREATE INDEX '||l_table_owner||'.'||l_chg_index_name||
1398 ' ON '||l_table_owner||'.'||p_chg_table_name ||' (';
1399
1400 IF l_class_code_column IS NOT NULL THEN
1401 l_chg_dynamic_sql := l_chg_dynamic_sql ||l_class_code_column||', ';
1402 END IF;
1403 IF (p_is_table_translatable) THEN
1404 l_chg_dynamic_sql := l_chg_dynamic_sql||'LANGUAGE , ';
1405 END IF;
1406
1407 l_chg_dynamic_sql := l_chg_dynamic_sql||p_column||') LOCAL COMPUTE STATISTICS';
1408
1409 EXECUTE IMMEDIATE l_chg_dynamic_sql;
1410 END IF;--IF(p_is_chg_column_indexed IS NULL OR p_is_chg_column_indexed <> 'Y')
1411 RETURN 'Y';
1412
1413 EXCEPTION
1414 WHEN OTHERS THEN
1415 RETURN 'N';
1416 END Create_Index_For_DBCol;
1417
1418 ----------------------------------------------------------------------
1419
1420 FUNCTION Build_Tokenized_URL_Query (
1421 p_attr_group_metadata_obj IN EGO_ATTR_GROUP_METADATA_OBJ
1422 ,p_attr_metadata_obj IN EGO_ATTR_METADATA_OBJ
1423 )
1424 RETURN VARCHAR2
1425 IS
1426
1427 l_head_of_query VARCHAR2(32767);
1428 l_tail_of_query VARCHAR2(32767);
1429 l_has_tokens_left BOOLEAN;
1430 l_token_start_index NUMBER;
1431 l_token_end_index NUMBER;
1432 l_token VARCHAR2(50);
1433 l_replacement_attr_metadata EGO_ATTR_METADATA_OBJ;
1434
1435 BEGIN
1436
1437 l_tail_of_query := p_attr_metadata_obj.INFO_1;
1438
1439 ------------------------------------------
1440 -- If there aren't two different '$' in --
1441 -- the string, then there are no tokens --
1442 ------------------------------------------
1443 l_has_tokens_left := (INSTR(l_tail_of_query, '$') <> 0 AND
1444 INSTR(l_tail_of_query, '$') <> INSTR(l_tail_of_query, '$', -1));
1445
1446 WHILE (l_has_tokens_left)
1447 LOOP
1448
1449 ---------------------------------------
1450 -- Parse out the token for this loop --
1451 ---------------------------------------
1452 l_token_start_index := INSTR(l_tail_of_query, '$');
1453 l_token_end_index := INSTR(l_tail_of_query, '$', l_token_start_index + 1);
1454
1455 l_token := SUBSTR(l_tail_of_query, l_token_start_index + 1, (l_token_end_index - (l_token_start_index + 1)));
1456
1457 ------------------------------------------------------
1458 -- Validate the token by trying to get its metadata --
1459 ------------------------------------------------------
1460 IF (l_token = p_attr_metadata_obj.ATTR_NAME) THEN
1461 l_replacement_attr_metadata := p_attr_metadata_obj;
1462 ELSE
1463 l_replacement_attr_metadata := EGO_USER_ATTRS_COMMON_PVT.Find_Metadata_For_Attr(
1464 p_attr_group_metadata_obj.attr_metadata_table
1468
1465 ,l_token
1466 );
1467 END IF;
1469 IF (l_replacement_attr_metadata IS NULL) THEN
1470
1471 --------------------------------------
1472 -- Report that the URL is not valid --
1473 --------------------------------------
1474 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DYNAMIC_URL_DATA_ERROR');
1475 FND_MESSAGE.Set_Token('ATTR_GROUP_DISP_NAME', p_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME);
1476 FND_MSG_PUB.Add;
1477
1478 RAISE FND_API.G_EXC_ERROR;
1479 END IF;
1480
1481 -----------------------
1482 -- Replace the token --
1483 -----------------------
1484 l_head_of_query := l_head_of_query ||
1485 SUBSTR(l_tail_of_query, 1, (l_token_start_index - 1)) ||
1486 '''||' ||
1487 EGO_USER_ATTRS_COMMON_PVT.Create_DB_Col_Alias_If_Needed(l_replacement_attr_metadata) ||
1488 '||''';
1489
1490 l_tail_of_query := SUBSTR(l_tail_of_query, l_token_end_index + 1);
1491
1492 --------------------------------------
1493 -- Reset variable for the next loop --
1494 --------------------------------------
1495 l_has_tokens_left := (INSTR(l_tail_of_query, '$') <> 0 AND
1496 INSTR(l_tail_of_query, '$') <> INSTR(l_tail_of_query, '$', -1));
1497
1498 END LOOP;
1499
1500 l_head_of_query := l_head_of_query || l_tail_of_query;
1501
1502 RETURN '''' || l_head_of_query || '''';
1503
1504 END Build_Tokenized_URL_Query;
1505
1506 ----------------------------------------------------------------------
1507
1508 ------------------------
1509 -- Miscellaneous APIs --
1510 ------------------------
1511
1512 ----------------------------------------------------------------------
1513 -- signature to use if caller has ATTR_GROUP_ID
1514 FUNCTION Get_Privilege_For_Attr_Group (
1515 p_attr_group_id IN NUMBER
1516 ,p_which_priv_to_return IN VARCHAR2
1517 )
1518 RETURN VARCHAR2
1519 IS
1520
1521 l_privilege_name FND_FORM_FUNCTIONS.FUNCTION_NAME%TYPE; --4105308
1522
1523 BEGIN
1524
1525 IF (UPPER(p_which_priv_to_return) = 'VIEW') THEN
1526
1527 SELECT F.FUNCTION_NAME
1528 INTO l_privilege_name
1529 FROM FND_FORM_FUNCTIONS F
1530 ,EGO_FND_DSC_FLX_CTX_EXT E
1531 WHERE E.ATTR_GROUP_ID = p_attr_group_id
1532 AND E.VIEW_PRIVILEGE_ID = F.FUNCTION_ID;
1533
1534 ELSIF (UPPER(p_which_priv_to_return) = 'EDIT') THEN
1535
1536 SELECT F.FUNCTION_NAME
1537 INTO l_privilege_name
1538 FROM FND_FORM_FUNCTIONS F
1539 ,EGO_FND_DSC_FLX_CTX_EXT E
1540 WHERE E.ATTR_GROUP_ID = p_attr_group_id
1541 AND E.EDIT_PRIVILEGE_ID = F.FUNCTION_ID;
1542
1543 END IF;
1544
1545 RETURN l_privilege_name;
1546
1547 EXCEPTION
1548 WHEN NO_DATA_FOUND THEN
1549 RETURN NULL;
1550
1551 END Get_Privilege_For_Attr_Group;
1552
1553 ----------------------------------------------------------------------
1554
1555 FUNCTION Get_Privilege_For_Attr_Group (
1556 p_application_id IN NUMBER
1557 ,p_attr_group_type IN VARCHAR2
1558 ,p_attr_group_name IN VARCHAR2
1559 ,p_which_priv_to_return IN VARCHAR2
1560 )
1561 RETURN VARCHAR2
1562 IS
1563
1564 l_attr_group_id NUMBER;
1565
1566 BEGIN
1567
1568 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
1569 ,p_attr_group_type
1570 ,p_attr_group_name);
1571
1572 IF l_attr_group_id IS NULL THEN
1573 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1574 END IF;
1575
1576 RETURN EGO_EXT_FWK_PUB.Get_Privilege_For_Attr_Group(
1577 p_attr_group_id => l_attr_group_id
1578 ,p_which_priv_to_return => p_which_priv_to_return
1579 );
1580
1581 EXCEPTION
1582 WHEN OTHERS THEN
1583 RETURN NULL;
1584
1585 END Get_Privilege_For_Attr_Group;
1586
1587 ----------------------------------------------------------------------
1588
1589 FUNCTION Is_Column_Indexed (
1590 p_column_name IN VARCHAR2
1591 ,p_table_name IN VARCHAR2
1592 ,p_application_id IN NUMBER DEFAULT NULL
1593 ,p_attr_group_type IN VARCHAR2 DEFAULT NULL
1594 )
1595 RETURN VARCHAR2
1596 IS
1597
1598 l_index_flag VARCHAR2(1) := 'N';
1599 l_table_name VARCHAR2(30);
1600 l_table_owner VARCHAR2(30);
1601
1602 BEGIN
1603
1604 IF (p_table_name IS NOT NULL) THEN
1605
1606 l_table_name := p_table_name;
1607
1608 ELSE
1609
1610 l_table_name := Get_Table_Name(p_application_id
1611 ,p_attr_group_type);
1612
1613 END IF;
1614
1618 l_table_owner := Get_Application_Owner(p_application_id);
1615 ----------------------------------------------------
1616 -- We assume that the table is an Extension Table --
1617 ----------------------------------------------------
1619
1620 SELECT 'Y'
1621 INTO l_index_flag
1622 FROM ALL_IND_COLUMNS
1623 WHERE TABLE_OWNER = l_table_owner
1624 AND TABLE_NAME = l_table_name
1625 AND COLUMN_NAME = p_column_name
1626 AND ROWNUM < 2;
1627
1628 RETURN l_index_flag;
1629
1630 EXCEPTION
1631 WHEN NO_DATA_FOUND THEN
1632 RETURN 'N';
1633
1634 END Is_Column_Indexed;
1635
1636 ----------------------------------------------------------------------
1637
1638 FUNCTION Get_Attr_Group_Id_From_PKs (
1639 p_application_id IN NUMBER
1640 ,p_attr_group_type IN VARCHAR2
1641 ,p_attr_group_name IN VARCHAR2
1642 )
1643 RETURN NUMBER
1644 IS
1645
1646 l_attr_group_id NUMBER;
1647
1648 BEGIN
1649
1650 SELECT ATTR_GROUP_ID INTO l_attr_group_id
1651 FROM EGO_FND_DSC_FLX_CTX_EXT
1652 WHERE APPLICATION_ID = p_application_id
1653 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
1654 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
1655
1656 RETURN l_attr_group_id;
1657
1658 EXCEPTION
1659 WHEN NO_DATA_FOUND THEN
1660 RETURN NULL;
1661
1662 END Get_Attr_Group_Id_From_PKs;
1663
1664 ----------------------------------------------------------------------
1665
1666 FUNCTION Get_Attr_Group_DispName (
1667 p_attr_group_id IN NUMBER
1668 )
1669 RETURN VARCHAR2
1670 IS
1671
1672 l_attr_group_name VARCHAR2(80);
1673
1674 BEGIN
1675
1676 SELECT FL_CTX_TL.DESCRIPTIVE_FLEX_CONTEXT_NAME INTO l_attr_group_name
1677 FROM FND_DESCR_FLEX_CONTEXTS_TL FL_CTX_TL,
1678 EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1679 WHERE
1680 FL_CTX_EXT.APPLICATION_ID = FL_CTX_TL.APPLICATION_ID
1681 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_CTX_TL.DESCRIPTIVE_FLEXFIELD_NAME
1682 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_CTX_TL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1683 AND FL_CTX_EXT.ATTR_GROUP_ID = p_attr_group_id
1684 AND FL_CTX_TL.LANGUAGE = userenv('LANG');
1685
1686 RETURN l_attr_group_name;
1687
1688 EXCEPTION
1689 WHEN NO_DATA_FOUND THEN
1690 RETURN NULL;
1691
1692 END Get_Attr_Group_DispName;
1693
1694 ----------------------------------------------------------------------
1695
1696
1697 FUNCTION Get_Data_Level_DispName (
1698 p_data_level IN VARCHAR2
1699 )
1700 RETURN VARCHAR2
1701 IS
1702
1703 l_p_data_level_disp_name VARCHAR2(80);
1704
1705 BEGIN
1706
1707 SELECT meaning into l_p_data_level_disp_name
1708 FROM fnd_lookup_values
1709 WHERE lookup_type = 'EGO_EF_DATA_LEVEL'
1710 AND language = userenv('LANG')
1711 AND lookup_code = p_data_level;
1712
1713 RETURN l_p_data_level_disp_name;
1714
1715 EXCEPTION
1716 WHEN NO_DATA_FOUND THEN
1717 RETURN NULL;
1718
1719 END Get_Data_Level_DispName;
1720
1721 ----------------------------------------------------------------------
1722
1723 FUNCTION Get_Associated_Datalevel (
1724 p_object_id IN NUMBER
1725 , p_attr_group_id IN NUMBER
1726
1727 )
1728 RETURN VARCHAR2
1729 IS
1730 l_data_level VARCHAR2(30);
1731
1732 BEGIN
1733
1734 SELECT DISTINCT DATA_LEVEL
1735 INTO l_data_level
1736 FROM EGO_OBJ_AG_ASSOCS_B
1737 WHERE ATTR_GROUP_ID = p_attr_group_id
1738 AND OBJECT_ID = p_object_id
1739 AND ROWNUM < 2;
1740
1741 RETURN l_data_level;
1742
1743 EXCEPTION
1744 WHEN NO_DATA_FOUND THEN
1745 RETURN NULL;
1746
1747 END Get_Associated_Datalevel;
1748
1749 ----------------------------------------------------------------------
1750 /*
1751 NOTE: WE DON'T USE THESE ANYMORE, BUT WE'LL KEEP THEM JUST IN CASE
1752
1753 PROCEDURE Get_Available_AttrDBCol (
1754 p_api_version IN NUMBER
1755 ,p_attr_group_id IN NUMBER
1756 ,p_data_type IN VARCHAR2
1757 ,x_database_column OUT NOCOPY VARCHAR2
1758 ) IS
1759
1760 l_database_columns EGO_VARCHAR_TBL_TYPE;
1761
1762 BEGIN
1763
1764 EGO_EXT_FWK_PUB.Get_Available_AttrDBCols (
1765 p_api_version => p_api_version
1766 ,p_attr_group_id => p_attr_group_id
1767 ,p_data_type => p_data_type
1768 ,x_database_columns => l_database_columns
1769 );
1770
1771 -- for this method, we just return the first in the list of available columns
1772
1773 x_database_column := l_database_columns(l_database_columns.FIRST);
1774
1775 END Get_Available_AttrDBCol;
1776
1777 ----------------------------------------------------------------------
1778
1779 PROCEDURE Get_Available_AttrDBCol (
1783 ,p_attr_group_name IN VARCHAR2
1780 p_api_version IN NUMBER
1781 ,p_application_id IN NUMBER
1782 ,p_attr_group_type IN VARCHAR2
1784 ,p_data_type IN VARCHAR2
1785 ,x_database_column OUT NOCOPY VARCHAR2
1786 ) IS
1787
1788 l_database_columns EGO_VARCHAR_TBL_TYPE;
1789
1790 BEGIN
1791
1792 EGO_EXT_FWK_PUB.Get_Available_AttrDBCols (
1793 p_api_version => p_api_version
1794 ,p_application_id => p_application_id
1795 ,p_attr_group_type => p_attr_group_type
1796 ,p_attr_group_name => p_attr_group_name
1797 ,p_data_type => p_data_type
1798 ,x_database_columns => l_database_columns
1799 );
1800
1801 -- for this method, we just return the first in the list of available columns
1802
1803 x_database_column := l_database_columns(l_database_columns.FIRST);
1804
1805 END Get_Available_AttrDBCol;
1806
1807 ----------------------------------------------------------------------
1808
1809 PROCEDURE Get_Available_AttrDBCols (
1810 p_api_version IN NUMBER
1811 ,p_application_id IN NUMBER
1812 ,p_attr_group_type IN VARCHAR2
1813 ,p_attr_group_name IN VARCHAR2
1814 ,p_data_type IN VARCHAR2
1815 ,x_database_columns OUT NOCOPY EGO_VARCHAR_TBL_TYPE
1816 ) IS
1817
1818 l_ext_table_name VARCHAR2(30);
1819 l_ext_table_id NUMBER;
1820 l_column_type VARCHAR2(1);
1821 l_column_prefix VARCHAR2(15);
1822 l_db_cols_table_index NUMBER;
1823 l_column_deleted BOOLEAN;
1824
1825 CURSOR allDBColNames_c (
1826 cp_application_id IN NUMBER
1827 ,cp_table_id IN NUMBER
1828 ,cp_column_type IN VARCHAR2
1829 ,cp_column_prefix IN VARCHAR2
1830 ) IS
1831 SELECT COLUMN_NAME
1832 FROM FND_COLUMNS
1833 WHERE APPLICATION_ID = cp_application_id
1834 AND TABLE_ID = cp_table_id
1835 AND COLUMN_TYPE = cp_column_type
1836 AND COLUMN_NAME LIKE cp_column_prefix
1837 ORDER BY COLUMN_SEQUENCE;
1838
1839 TO DO: we must replace this column name check with FLEXFIELD_USAGE_CODE = 'D',
1840 as soon as Kirill tells us how to seed that in CASE
1841
1842
1843 CURSOR usedDBCol_c (
1844 cp_application_id IN NUMBER
1845 ,cp_attr_group_type IN VARCHAR2
1846 ,cp_attr_group_name IN VARCHAR2
1847 ,cp_data_type IN VARCHAR2
1848 ,cp_table_id IN NUMBER
1849 ,cp_column_type IN VARCHAR2
1850 ) IS
1851 SELECT FC.COLUMN_NAME
1852 FROM FND_COLUMNS FC
1853 ,EGO_FND_DF_COL_USGS_EXT EXT
1854 WHERE EXT.APPLICATION_ID = cp_application_id
1855 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = cp_attr_group_type
1856 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = cp_attr_group_name
1857 AND EXT.DATA_TYPE = cp_data_type
1858 AND FC.APPLICATION_ID = cp_application_id
1859 AND FC.TABLE_ID = cp_table_id
1860 AND FC.COLUMN_TYPE = cp_column_type
1861 AND EXT.APPLICATION_COLUMN_NAME = FC.COLUMN_NAME
1862 ORDER BY FC.COLUMN_SEQUENCE;
1863
1864 BEGIN
1865
1866 SELECT FT.TABLE_ID
1867 INTO l_ext_table_id
1868 FROM FND_TABLES FT
1869 ,EGO_ATTR_GROUP_TYPES_V EAGTV
1870 WHERE FT.TABLE_NAME = EAGTV.EXT_TABLE_NAME
1871 AND EAGTV.APPLICATION_ID = p_application_id
1872 AND EAGTV.ATTR_GROUP_TYPE = p_attr_group_type;
1873
1874 IF (p_data_type = G_NUMBER_DATA_TYPE) THEN
1875 l_column_type := 'N';
1876 l_column_prefix := 'N_EXT_ATTR%';
1877 ELSIF (p_data_type = G_DATE_DATA_TYPE OR
1878 p_data_type = G_DATE_TIME_DATA_TYPE) THEN
1879 l_column_type := 'D';
1880 l_column_prefix := 'D_EXT_ATTR%';
1881 ELSE
1882 l_column_type := 'V';
1883 l_column_prefix := 'C_EXT_ATTR%';
1884 END IF;
1885
1886 OPEN allDBColNames_c(p_application_id, l_ext_table_id, l_column_type, l_column_prefix);
1887 FETCH allDBColNames_c BULK COLLECT INTO x_database_columns;
1888 CLOSE allDBColNames_c;
1889
1890 IF (x_database_columns.COUNT > 0) THEN
1891
1892 ---------------------------------------------------------------
1893 -- Delete from our table all columns that are already in use --
1894 ---------------------------------------------------------------
1895 FOR colNumRec IN usedDBCol_c (p_application_id
1896 ,p_attr_group_type
1897 ,p_attr_group_name
1898 ,p_data_type
1899 ,l_ext_table_id
1900 ,l_column_type)
1901 LOOP
1902
1903 ----------------------------------------------------------------
1904 -- Find and delete this particular used column from our table --
1908 WHILE (l_db_cols_table_index <= x_database_columns.LAST)
1905 ----------------------------------------------------------------
1906 l_column_deleted := FALSE;
1907 l_db_cols_table_index := x_database_columns.FIRST;
1909 LOOP
1910 EXIT WHEN (l_column_deleted);
1911
1912 IF (x_database_columns(l_db_cols_table_index) = colNumRec.COLUMN_NAME) THEN
1913
1914 x_database_columns.DELETE(l_db_cols_table_index);
1915 l_column_deleted := TRUE;
1916
1917 END IF;
1918
1919 l_db_cols_table_index := x_database_columns.NEXT(l_db_cols_table_index);
1920 END LOOP;
1921 END LOOP;
1922 END IF;
1923
1924 END Get_Available_AttrDBCols;
1925
1926 ----------------------------------------------------------------------
1927
1928 PROCEDURE Get_Available_AttrDBCols (
1929 p_api_version IN NUMBER
1930 ,p_attr_group_id IN NUMBER
1931 ,p_data_type IN VARCHAR2
1932 ,x_database_columns OUT NOCOPY EGO_VARCHAR_TBL_TYPE
1933 ) IS
1934
1935 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
1936
1937 BEGIN
1938
1939 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_attr_group_id);
1940
1941 EGO_EXT_FWK_PUB.Get_Available_AttrDBCols (
1942 p_api_version => p_api_version
1943 ,p_application_id => l_attr_group_pks(1)
1944 ,p_attr_group_type => l_attr_group_pks(2)
1945 ,p_attr_group_name => l_attr_group_pks(3)
1946 ,p_data_type => p_data_type
1947 ,x_database_columns => x_database_columns
1948 );
1949
1950 END Get_Available_AttrDBCols;
1951 */
1952
1953 ----------------------------------------------------------------------
1954
1955 FUNCTION Get_Table_Name (
1956 p_application_id IN NUMBER
1957 ,p_attr_group_type IN VARCHAR2
1958 )
1959 RETURN VARCHAR2
1960 IS
1961
1962 l_table_name VARCHAR2(30);
1963
1964 BEGIN
1965 SELECT APPLICATION_TABLE_NAME
1966 INTO l_table_name
1967 FROM FND_DESCRIPTIVE_FLEXS
1968 WHERE APPLICATION_ID = p_application_id
1969 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
1970
1971 RETURN l_table_name;
1972
1973 EXCEPTION
1974 WHEN NO_DATA_FOUND THEN
1975 RETURN NULL;
1976
1977 END Get_Table_Name;
1978
1979 ----------------------------------------------------------------------
1980
1981 FUNCTION Get_TL_Table_Name (
1982 p_application_id IN NUMBER
1983 ,p_attr_group_type IN VARCHAR2
1984 )
1985 RETURN VARCHAR2
1986 IS
1987 l_table_name VARCHAR2(30);
1988
1989 BEGIN
1990 SELECT EXT_TL_TABLE_NAME
1991 INTO l_table_name
1992 FROM EGO_ATTR_GROUP_TYPES_V
1993 WHERE APPLICATION_ID = p_application_id
1994 AND ATTR_GROUP_TYPE = p_attr_group_type;
1995
1996 RETURN l_table_name;
1997
1998 EXCEPTION
1999 WHEN NO_DATA_FOUND THEN
2000 RETURN NULL;
2001
2002 END Get_TL_Table_Name;
2003
2004 ----------------------------------------------------------------------
2005
2006 FUNCTION Get_Object_Id_From_Name (p_object_name IN VARCHAR2) RETURN NUMBER
2007 IS
2008
2009 l_object_id NUMBER;
2010
2011 BEGIN
2012
2013 SELECT OBJECT_ID INTO l_object_id
2014 FROM FND_OBJECTS
2015 WHERE OBJ_NAME = p_object_name;
2016
2017 RETURN l_object_id;
2018
2019 EXCEPTION
2020 WHEN NO_DATA_FOUND THEN
2021 RETURN NULL;
2022
2023 END Get_Object_Id_From_Name;
2024
2025 ----------------------------------------------------------------------
2026
2027 FUNCTION Get_Object_Id_For_AG_Type (
2028 p_application_id IN NUMBER
2029 ,p_attr_group_type IN VARCHAR2
2030 ) RETURN NUMBER
2031 IS
2032
2033 l_object_id NUMBER;
2034
2035 BEGIN
2036
2037 SELECT OBJ.OBJECT_ID
2038 INTO l_object_id
2039 FROM EGO_OBJECT_EXT_TABLES_B OBJ
2040 ,FND_DESCRIPTIVE_FLEXS FLX
2041 WHERE OBJ.EXT_TABLE_NAME = FLX.APPLICATION_TABLE_NAME
2042 AND OBJ.APPLICATION_ID = FLX.APPLICATION_ID
2043 AND FLX.APPLICATION_ID = p_application_id
2044 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type;
2045
2046 RETURN l_object_id;
2047
2048 EXCEPTION
2049 WHEN NO_DATA_FOUND THEN
2050 RETURN NULL;
2051
2052 END Get_Object_Id_For_AG_Type;
2053
2054 ----------------------------------------------------------------------
2055
2056 FUNCTION Get_Class_Meaning (
2057 p_object_name IN VARCHAR2
2058 ,p_class_code IN VARCHAR2
2059 )
2060 RETURN VARCHAR2
2061 IS
2062
2063 l_ocv_name VARCHAR2(30);
2064 l_dynamic_sql VARCHAR2(300);
2065 l_class_meaning VARCHAR2(1000);
2066
2067 BEGIN
2068
2072
2069 SELECT EXT_ATTR_OCV_NAME INTO l_ocv_name
2070 FROM EGO_FND_OBJECTS_EXT
2071 WHERE OBJECT_NAME = p_object_name;
2073 IF (l_ocv_name IS NULL) THEN
2074 l_class_meaning := p_class_code;
2075 ELSE
2076 l_dynamic_sql := 'SELECT MEANING FROM ' || l_ocv_name ||
2077 ' WHERE CODE = :1 AND LANGUAGE = USERENV(''LANG'') ' ||
2078 ' AND ROWNUM = 1 ';
2079
2080 EXECUTE IMMEDIATE l_dynamic_sql INTO l_class_meaning USING p_class_code;
2081 END IF;
2082
2083 RETURN l_class_meaning;
2084
2085 EXCEPTION
2086 WHEN NO_DATA_FOUND THEN
2087 RETURN p_class_code;
2088
2089 END Get_Class_Meaning;
2090
2091 ----------------------------------------------------------------------
2092
2093 FUNCTION Get_Class_Meaning (
2094 p_object_id IN NUMBER
2095 ,p_class_code IN VARCHAR2
2096 )
2097 RETURN VARCHAR2
2098 IS
2099
2100 l_object_name FND_OBJECTS.OBJ_NAME%TYPE; --4105308
2101
2102 BEGIN
2103
2104 SELECT OBJ_NAME INTO l_object_name
2105 FROM FND_OBJECTS
2106 WHERE OBJECT_ID = p_object_id;
2107
2108 RETURN Get_Class_Meaning(l_object_name, p_class_code);
2109
2110 EXCEPTION
2111 WHEN OTHERS THEN
2112 RETURN p_class_code;
2113
2114 END Get_Class_Meaning;
2115
2116 ----------------------------------------------------------------------
2117
2118 PROCEDURE Get_Pk_Columns (
2119 p_api_version IN NUMBER
2120 ,p_obj_name IN VARCHAR2
2121 ,x_pkcolumn1_name OUT NOCOPY VARCHAR2
2122 ,x_pkcolumn1_type OUT NOCOPY VARCHAR2
2123 ,x_pkcolumn2_name OUT NOCOPY VARCHAR2
2124 ,x_pkcolumn2_type OUT NOCOPY VARCHAR2
2125 ,x_pkcolumn3_name OUT NOCOPY VARCHAR2
2126 ,x_pkcolumn3_type OUT NOCOPY VARCHAR2
2127 ,x_pkcolumn4_name OUT NOCOPY VARCHAR2
2128 ,x_pkcolumn4_type OUT NOCOPY VARCHAR2
2129 ,x_pkcolumn5_name OUT NOCOPY VARCHAR2
2130 ,x_pkcolumn5_type OUT NOCOPY VARCHAR2
2131 ) IS
2132
2133 CURSOR pk_columns_c (cp_obj_name VARCHAR2)
2134 IS
2135 SELECT PK1_COLUMN_NAME, PK1_COLUMN_TYPE,
2136 PK2_COLUMN_NAME, PK2_COLUMN_TYPE,
2137 PK3_COLUMN_NAME, PK3_COLUMN_TYPE,
2138 PK4_COLUMN_NAME, PK4_COLUMN_TYPE,
2139 PK5_COLUMN_NAME, PK5_COLUMN_TYPE
2140 FROM FND_OBJECTS
2141 WHERE OBJ_NAME = cp_obj_name;
2142
2143 l_pk_columns_rec pk_columns_c%ROWTYPE;
2144
2145 BEGIN
2146 OPEN pk_columns_c(cp_obj_name => p_obj_name);
2147 FETCH pk_columns_c INTO l_pk_columns_rec;
2148 x_pkcolumn1_name := l_pk_columns_rec.PK1_COLUMN_NAME;
2149 x_pkcolumn1_type := l_pk_columns_rec.PK1_COLUMN_TYPE;
2150 x_pkcolumn2_name := l_pk_columns_rec.PK2_COLUMN_NAME;
2151 x_pkcolumn2_type := l_pk_columns_rec.PK2_COLUMN_TYPE;
2152 x_pkcolumn3_name := l_pk_columns_rec.PK3_COLUMN_NAME;
2153 x_pkcolumn3_type := l_pk_columns_rec.PK3_COLUMN_TYPE;
2154 x_pkcolumn4_name := l_pk_columns_rec.PK4_COLUMN_NAME;
2155 x_pkcolumn4_type := l_pk_columns_rec.PK4_COLUMN_TYPE;
2156 x_pkcolumn5_name := l_pk_columns_rec.PK5_COLUMN_NAME;
2157 x_pkcolumn5_type := l_pk_columns_rec.PK5_COLUMN_TYPE;
2158
2159 CLOSE pk_columns_c;
2160
2161 END Get_Pk_Columns;
2162
2163 ----------------------------------------------------------------------
2164
2165 --------------------------
2166 -- Attribute Group APIs --
2167 --------------------------
2168
2169 ----------------------------------------------------------------------
2170
2171 PROCEDURE Create_Attribute_Group (
2172 p_api_version IN NUMBER
2173 ,p_application_id IN NUMBER
2174 ,p_attr_group_type IN VARCHAR2
2175 ,p_internal_name IN VARCHAR2
2176 ,p_display_name IN VARCHAR2
2177 ,p_attr_group_desc IN VARCHAR2
2178 ,p_security_type IN VARCHAR2
2179 ,p_multi_row_attrib_group IN VARCHAR2
2180 ,p_variant_attrib_group IN VARCHAR2
2181 ,p_num_of_cols IN NUMBER DEFAULT NULL
2182 ,p_num_of_rows IN NUMBER DEFAULT NULL
2183 ,p_owning_company_id IN NUMBER
2184 ,p_region_code IN VARCHAR2 DEFAULT NULL
2185 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2186 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2187 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2188 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2189 ,p_owner IN NUMBER DEFAULT NULL
2190 ,p_lud IN DATE DEFAULT SYSDATE
2191 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2192 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2193 ,x_attr_group_id OUT NOCOPY NUMBER
2197 ,x_msg_data OUT NOCOPY VARCHAR2
2194 ,x_return_status OUT NOCOPY VARCHAR2
2195 ,x_errorcode OUT NOCOPY NUMBER
2196 ,x_msg_count OUT NOCOPY NUMBER
2198 ) IS
2199
2200 l_api_name CONSTANT VARCHAR2(30) := 'Create_Attribute_Group';
2201
2202 --we don't use l_api_version yet, but eventually we might:
2203 --if we change required parameters, version goes from n.x to (n+1).x
2204 --if we change optional parameters, version goes from x.n to x.(n+1)
2205 l_api_version CONSTANT NUMBER := 1.0;
2206
2207 l_appl_short_name FND_APPLICATION.APPLICATION_SHORT_NAME%TYPE;
2208 l_ext_table_name VARCHAR2(30);
2209 l_table_owner VARCHAR2(30);
2210 l_dynamic_sql VARCHAR2(200);
2211 l_partition_count NUMBER;
2212
2213 l_attr_chg_b_table VARCHAR2(30);
2214 l_attr_chg_tl_table VARCHAR2(30);
2215
2216 --Bug 4703510
2217 l_fnd_exists VARCHAR2(1);
2218 l_ego_exists VARCHAR2(1);
2219 --Bug 5443697
2220 l_start_num VARCHAR2(1);
2221 l_start_und_sc VARCHAR2(1);
2222 e_ag_starts_with_num EXCEPTION;
2223 e_ag_starts_with_und_sc EXCEPTION;
2224 --Bug 6120553
2225 l_sql_errm VARCHAR2(1000);
2226 --Bug 6048237
2227 l_num_of_cols NUMBER := p_num_of_cols;
2228 l_num_of_rows NUMBER := p_num_of_rows;
2229
2230
2231 BEGIN
2232
2233 -- Standard start of API savepoint
2234 IF FND_API.To_Boolean(p_commit) THEN
2235 SAVEPOINT Create_Attribute_Group_PUB;
2236 END IF;
2237
2238 -- Check for call compatibility
2239 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
2240 l_api_name, G_PKG_NAME)
2241 THEN
2242 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2243 END IF;
2244 -- Initialize message list even though we don't currently use it
2245 IF FND_API.To_Boolean(p_init_msg_list) THEN
2246 FND_MSG_PUB.Initialize;
2247 END IF;
2248 -----------------------------------
2249 --check if the Attribute Group name begins with a number.
2250 --Bug 5443697
2251 has_Num_Start_char (p_internal_name =>p_internal_name,
2252 x_start_num => l_start_num);
2253 IF (l_start_num = 'Y') THEN
2254 RAISE e_ag_starts_with_num;
2255 END IF;
2256
2257 --check if the Attribute Group name begins with an under score.
2258 --Bug 5443697
2259 has_Given_Char_As_Start_char (p_internal_name =>p_internal_name,
2260 p_char_set =>'_',
2261 x_start_und_sc => l_start_und_sc);
2262 IF (l_start_und_sc = 'Y') THEN
2263 RAISE e_ag_starts_with_und_sc;
2264 END IF;
2265
2266 --Initialize num cols and rows.
2267 --Bug 6048237
2268 IF p_multi_row_attrib_group = 'Y' THEN
2269 IF l_num_of_cols is null THEN
2270 l_num_of_cols := 5;
2271 END IF;
2272 IF l_num_of_rows is null THEN
2273 l_num_of_rows := 5;
2274 END IF;
2275 ELSIF p_multi_row_attrib_group = 'N' THEN
2276 IF l_num_of_cols is null THEN
2277 l_num_of_cols := 2;
2278 END IF;
2279 END IF;
2280
2281 --Bug 4703510 START
2282 Get_fnd_ego_record_exists (
2283 p_context=>'ATTRIBUTE GROUP'
2284 ,p_application_id => p_application_id
2285 ,p_attr_group_type => p_attr_group_type
2286 ,p_attr_group_name => NULL
2287 ,p_internal_name => p_internal_name
2288 ,x_fnd_exists => l_fnd_exists
2289 ,x_ego_exists => l_ego_exists
2290 );
2291 IF (l_fnd_exists = 'Y') THEN --Bug 4703510
2292 UPDATE FND_DESCR_FLEX_CONTEXTS
2293 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
2294 LAST_UPDATE_DATE = p_lud,
2295 LAST_UPDATE_LOGIN = g_current_login_id
2296 WHERE DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
2297 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
2298 AND APPLICATION_ID = p_application_id;
2299
2300 UPDATE FND_DESCR_FLEX_CONTEXTS_TL
2301 SET DESCRIPTION = p_attr_group_desc,
2302 DESCRIPTIVE_FLEX_CONTEXT_NAME = p_display_name,
2303 LAST_UPDATE_DATE = p_lud,
2304 LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
2305 LAST_UPDATE_LOGIN = g_current_login_id,
2306 SOURCE_LANG = USERENV('LANG')
2307 WHERE APPLICATION_ID = p_application_id
2308 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
2309 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
2310 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
2311 ELSE --l_fnd_exists = 'Y'
2312 SELECT APPLICATION_SHORT_NAME
2313 INTO l_appl_short_name
2314 FROM FND_APPLICATION
2315 WHERE APPLICATION_ID = p_application_id;
2316 fnd_flex_dsc_api.set_session_mode('customer_data');
2317 fnd_flex_dsc_api.create_context(appl_short_name => l_appl_short_name,
2318 flexfield_name => p_attr_group_type,
2319 context_code => p_internal_name,
2323 global_flag => 'N');
2320 context_name => p_display_name,
2321 description => p_attr_group_desc,
2322 enabled => 'N',
2324 END IF;--l_fnd_exists = 'Y' Bug 4703510:END
2325
2326 IF (l_ego_exists <> 'Y' ) THEN
2327 SELECT EGO_ATTR_GROUPS_S.NEXTVAL INTO x_attr_group_id FROM DUAL;
2328 INSERT INTO EGO_FND_DSC_FLX_CTX_EXT
2329 (
2330 ATTR_GROUP_ID
2331 ,APPLICATION_ID
2332 ,DESCRIPTIVE_FLEXFIELD_NAME
2333 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
2334 ,MULTI_ROW
2335 ,VARIANT --VARIANT(R12C)
2336 ,NUM_OF_COLS
2337 ,NUM_OF_ROWS
2338 ,SECURITY_TYPE
2339 ,OWNING_PARTY_ID
2340 ,REGION_CODE
2341 ,VIEW_PRIVILEGE_ID
2342 ,EDIT_PRIVILEGE_ID
2343 ,BUSINESS_EVENT_FLAG
2344 ,PRE_BUSINESS_EVENT_FLAG
2345 ,CREATED_BY
2346 ,CREATION_DATE
2347 ,LAST_UPDATED_BY
2348 ,LAST_UPDATE_DATE
2349 ,LAST_UPDATE_LOGIN
2350 )
2351 VALUES
2352 (
2353 x_attr_group_id --ATTR_GROUP_ID
2354 ,p_application_id --APPLICATION_ID
2355 ,p_attr_group_type --DESCRIPTIVE_FLEXFIELD_NAME
2356 ,p_internal_name --DESCRIPTIVE_FLEX_CONTEXT_CODE
2357 ,nvl(p_multi_row_attrib_group, 'N') --MULTI_ROW
2358 ,p_variant_attrib_group --VARIANT
2359 ,l_num_of_cols
2360 ,l_num_of_rows
2361 ,nvl(p_security_type, 'P') --SECURITY_TYPE
2362 ,-100 --p_owning_company_id --OWNING_PARTY_ID
2363 ,p_region_code --p_region_code
2364 ,p_view_privilege_id -- View privilege
2365 ,p_edit_privilege_id -- Edit privilege
2366 ,p_business_event_flag --BUSINESS_EVENT_FLAG
2367 ,p_pre_business_event_flag --PRE_BUSINESS_EVENT_FLAG
2368 ,NVL(p_owner, g_current_user_id) --CREATED_BY
2369 ,p_lud --CREATION_DATE
2370 ,NVL(p_owner, g_current_user_id) --LAST_UPDATED_BY
2371 ,p_lud --LAST_UPDATE_DATE
2372 ,g_current_login_id --LAST_UPDATE_LOGIN
2373 );
2374
2375
2376 -------------------------------------------------------------------
2377 -- Now we add a partition to the Extension Table that will store --
2378 -- data for this Attribute Group so that if this Attribute Group --
2379 -- gets associated and data for it get stored in that table, --
2380 -- query performance will be optimized. --
2381 -------------------------------------------------------------------
2382
2383 --------------------------------
2384 -- partition extention table --
2385 --------------------------------
2386 l_ext_table_name := Get_Table_Name(p_application_id
2387 ,p_attr_group_type);
2388
2389 l_table_owner := Get_Application_Owner(p_application_id);
2390
2391 SELECT COUNT(*) into l_partition_count
2392 FROM ALL_TAB_PARTITIONS
2393 WHERE
2394 table_name = l_ext_table_name
2395 and table_owner = l_table_owner;
2396
2397 if (l_partition_count > 0) THEN
2398 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_ext_table_name ||
2399 ' ADD PARTITION ag_' || x_attr_group_id ||
2400 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2401
2402 l_sql_errm := Execute_DDL_And_Return_Err(l_dynamic_sql);
2403 IF(l_sql_errm IS NOT NULL) THEN
2404 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2405 END IF;
2406 --EXECUTE IMMEDIATE l_dynamic_sql;
2407
2408 END IF;
2409
2410 -----------------------------------
2411 -- partition extention TL table --
2412 -----------------------------------
2413 l_ext_table_name := Get_TL_Table_Name(p_application_id
2414 ,p_attr_group_type);
2415
2416 l_table_owner := Get_Application_Owner(p_application_id);
2417
2418 IF (l_ext_table_name IS NOT NULL) THEN
2419
2420 SELECT COUNT(*) into l_partition_count
2421 FROM ALL_TAB_PARTITIONS
2422 WHERE
2423 table_name = l_ext_table_name
2424 and table_owner = l_table_owner;
2425
2426 if (l_partition_count > 0) THEN
2427
2428 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_ext_table_name ||
2429 ' ADD PARTITION ag_' || x_attr_group_id ||
2430 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2431
2432 l_sql_errm := Execute_DDL_And_Return_Err(l_dynamic_sql);
2433 IF(l_sql_errm IS NOT NULL) THEN
2434 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2435 END IF;
2436 --EXECUTE IMMEDIATE l_dynamic_sql;
2437
2438 END IF;
2439
2440 END IF;
2441
2442 /* -- bug: 3801472
2443 -- partition the Attribute Changes Tables
2444
2445
2446 EGO_EXT_FWK_PUB.Get_Attr_Changes_Table
2447 (p_attr_group_type => p_attr_group_type
2451 --Creating the partitions on the Pending tables
2448 ,x_base_table => l_attr_chg_b_table
2449 ,x_tl_table => l_attr_chg_tl_table
2450 );*/
2452 l_attr_chg_b_table := Get_Attr_Changes_B_Table(p_application_id =>p_application_id
2453 ,p_attr_group_type => p_attr_group_type);
2454 l_table_owner := Get_Application_Owner(p_appl_id => p_application_id);
2455
2456 IF l_attr_chg_b_table IS NOT NULL THEN
2457 SELECT COUNT(*)
2458 INTO l_partition_count
2459 FROM ALL_TAB_PARTITIONS
2460 WHERE table_name = l_attr_chg_b_table
2461 AND table_owner = l_table_owner;
2462
2463 IF (l_partition_count > 0) THEN
2464 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_attr_chg_b_table ||
2465 ' ADD PARTITION ag_' || x_attr_group_id ||
2466 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2467
2468 EXECUTE IMMEDIATE l_dynamic_sql;
2469 END IF; --IF (l_partition_count > 0)
2470 END IF;--IF l_attr_chg_b_table IS NOT NULL
2471
2472 l_attr_chg_tl_table := Get_Attr_Changes_TL_Table(p_application_id => p_application_id
2473 ,p_attr_group_type => p_attr_group_type);
2474
2475 l_table_owner := Get_Application_Owner(p_appl_id => p_application_id);
2476
2477 IF l_attr_chg_tl_table IS NOT NULL THEN
2478 SELECT COUNT(*)
2479 INTO l_partition_count
2480 FROM ALL_TAB_PARTITIONS
2481 WHERE table_name = l_attr_chg_tl_table
2482 AND table_owner = l_table_owner;
2483
2484 IF (l_partition_count > 0) THEN
2485 l_dynamic_sql := ' ALTER TABLE '|| l_table_owner || '.' || l_attr_chg_tl_table ||
2486 ' ADD PARTITION ag_' || x_attr_group_id ||
2487 ' VALUES LESS THAN (' || (x_attr_group_id + 1) || ')';
2488
2489 EXECUTE IMMEDIATE l_dynamic_sql;
2490 END IF;
2491 END IF;
2492 -- Standard check of p_commit
2493 IF FND_API.To_Boolean(p_commit) THEN
2494 COMMIT WORK;
2495 END IF;
2496 x_return_status := FND_API.G_RET_STS_SUCCESS;
2497 ELSE --l_ego_exists <> Y --Bug 4703510
2498 IF FND_API.To_Boolean(p_commit) THEN
2499 ROLLBACK TO Create_Attribute_Group_PUB;
2500 END IF;
2501 x_return_status := FND_API.G_RET_STS_ERROR;
2502 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_GRP_EXIST');
2503 FND_MSG_PUB.Add;
2504 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2505 ,p_count => x_msg_count
2506 ,p_data => x_msg_data);
2507 END IF; --l_ego_exists <> Y --Bug 4703510
2508
2509 EXCEPTION
2510 --Bug 5443697
2511 WHEN e_ag_starts_with_num THEN
2512 IF FND_API.TO_BOOLEAN(p_commit) THEN
2513 ROLLBACK TO Create_Attribute_Group_PUB;
2514 END IF;
2515 x_return_status := FND_API.G_RET_STS_ERROR;
2516 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_NAME_ST_NUM');
2517 FND_MSG_PUB.Add;
2518 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2519 ,p_count => x_msg_count
2520 ,p_data => x_msg_data);
2521
2522 --Bug 5443697
2523 WHEN e_ag_starts_with_und_sc THEN
2524 IF FND_API.TO_BOOLEAN(p_commit) THEN
2525 ROLLBACK TO Create_Attribute_Group_PUB;
2526 END IF;
2527 x_return_status := FND_API.G_RET_STS_ERROR;
2528 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_NAME_ST_UND_SC');
2529 FND_MSG_PUB.Add;
2530 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2531 ,p_count => x_msg_count
2532 ,p_data => x_msg_data);
2533
2534 WHEN OTHERS THEN
2535 IF FND_API.To_Boolean(p_commit) THEN
2536 ROLLBACK TO Create_Attribute_Group_PUB;
2537 END IF;
2538
2539 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2540
2541 IF (INSTR(SQLERRM, 'ORA-00001') <> 0) THEN
2542 SELECT MESSAGE_TEXT INTO x_msg_data
2543 FROM FND_NEW_MESSAGES
2544 WHERE MESSAGE_NAME = 'EGO_INTERNAL_NAME_EXISTS'
2545 AND LANGUAGE_CODE = USERENV('LANG');
2546 ELSE
2547 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
2548 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
2549 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
2550 -- SQLERRM from the autonomous transaction will not be reflected here
2551 -- x_msg_data will maintain the SQLERRM generated in the autonomous transaction.
2552 -- Bug 6120553
2553 FND_MESSAGE.Set_Token('SQL_ERR_MSG', NVL(l_sql_errm, SQLERRM)||' '||FND_FLEX_DSC_API.Message());
2554 FND_MSG_PUB.Add;
2555 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2556 ,p_count => x_msg_count
2557 ,p_data => x_msg_data);
2558 END IF;
2559
2560 END Create_Attribute_Group;
2561
2562 ----------------------------------------------------------------------
2563
2564 -- Wrapper for JSPs that aren't set up to take ATTR_GROUP_ID --
2565 PROCEDURE Create_Attribute_Group (
2566 p_api_version IN NUMBER
2567 ,p_application_id IN NUMBER
2568 ,p_attr_group_type IN VARCHAR2
2572 ,p_security_type IN VARCHAR2
2569 ,p_internal_name IN VARCHAR2
2570 ,p_display_name IN VARCHAR2
2571 ,p_attr_group_desc IN VARCHAR2
2573 ,p_multi_row_attrib_group IN VARCHAR2
2574 ,p_variant_attrib_group IN VARCHAR2
2575 ,p_num_of_cols IN NUMBER DEFAULT NULL
2576 ,p_num_of_rows IN NUMBER DEFAULT NULL
2577 ,p_owning_company_id IN NUMBER
2578 ,p_region_code IN VARCHAR2 DEFAULT NULL
2579 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2580 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2581 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2582 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2583 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2584 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2585 ,x_return_status OUT NOCOPY VARCHAR2
2586 ,x_errorcode OUT NOCOPY NUMBER
2587 ,x_msg_count OUT NOCOPY NUMBER
2588 ,x_msg_data OUT NOCOPY VARCHAR2
2589 ) IS
2590
2591 l_attr_group_id NUMBER;
2592
2593 BEGIN
2594
2595 EGO_EXT_FWK_PUB.Create_Attribute_Group
2596 (
2597 p_api_version => p_api_version
2598 ,p_application_id => p_application_id
2599 ,p_attr_group_type => p_attr_group_type
2600 ,p_internal_name => p_internal_name
2601 ,p_display_name => p_display_name
2602 ,p_attr_group_desc => p_attr_group_desc
2603 ,p_security_type => p_security_type
2604 ,p_multi_row_attrib_group => p_multi_row_attrib_group
2605 ,p_variant_attrib_group => p_variant_attrib_group
2606 ,p_num_of_cols => p_num_of_cols
2607 ,p_num_of_rows => p_num_of_rows
2608 ,p_owning_company_id => p_owning_company_id
2609 ,p_region_code => p_region_code
2610 ,p_view_privilege_id => p_view_privilege_id
2611 ,p_edit_privilege_id => p_edit_privilege_id
2612 ,p_business_event_flag => p_business_event_flag
2613 ,p_pre_business_event_flag => p_pre_business_event_flag
2614 ,p_init_msg_list => p_init_msg_list
2615 ,p_commit => p_commit
2616 ,x_attr_group_id => l_attr_group_id
2617 ,x_return_status => x_return_status
2618 ,x_errorcode => x_errorcode
2619 ,x_msg_count => x_msg_count
2620 ,x_msg_data => x_msg_data
2621 );
2622
2623 END Create_Attribute_Group;
2624
2625 ----------------------------------------------------------------------
2626
2627 PROCEDURE Copy_Attribute_Group (
2628 p_api_version IN NUMBER
2629 ,p_source_ag_app_id IN NUMBER
2630 ,p_source_ag_type IN VARCHAR2
2631 ,p_source_ag_name IN VARCHAR2
2632 ,p_dest_ag_app_id IN NUMBER
2633 ,p_dest_ag_type IN VARCHAR2
2634 ,p_dest_ag_name IN VARCHAR2
2635 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2636 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2637 ,x_attr_group_id OUT NOCOPY NUMBER
2638 ,x_return_status OUT NOCOPY VARCHAR2
2639 ,x_errorcode OUT NOCOPY NUMBER
2640 ,x_msg_count OUT NOCOPY NUMBER
2641 ,x_msg_data OUT NOCOPY VARCHAR2
2642 ) IS
2643
2644 l_api_name CONSTANT VARCHAR2(30) := 'Copy_Attribute_Group';
2645
2646 l_lang_installed_flag FND_LANGUAGES.INSTALLED_FLAG%TYPE;
2647
2648 --we don't use l_api_version yet, but eventually we might:
2649 --if we change required parameters, version goes from n.x to (n+1).x
2650 --if we change optional parameters, version goes from x.n to x.(n+1)
2651 l_api_version CONSTANT NUMBER := 1.0;
2652
2653 l_return_status VARCHAR(1);
2654 l_errorcode NUMBER;
2655 l_msg_count NUMBER;
2656 l_msg_data VARCHAR2(1000);
2657
2658 CURSOR ego_attribute_csr
2659 (
2660 v_source_ag_app_id IN EGO_ATTRS_V.APPLICATION_ID%TYPE
2661 ,v_source_ag_type IN EGO_ATTRS_V.ATTR_GROUP_TYPE%TYPE
2662 ,v_source_ag_name IN EGO_ATTRS_V.ATTR_GROUP_NAME%TYPE
2663 ) IS
2664 SELECT APPLICATION_ID,
2665 ATTR_GROUP_TYPE,
2666 ATTR_GROUP_NAME,
2667 ATTR_NAME,
2668 ATTR_DISPLAY_NAME,
2669 DESCRIPTION,
2670 DATA_TYPE_CODE,
2671 SEQUENCE,
2672 UNIQUE_KEY_FLAG,
2673 DEFAULT_VALUE,
2674 INFO_1,
2675 VALUE_SET_ID,
2676 ENABLED_FLAG,
2677 REQUIRED_FLAG,
2678 SEARCH_FLAG,
2679 DISPLAY_CODE,
2680 DATABASE_COLUMN,
2681 UOM_CLASS,
2682 DECODE(DISPLAY_CODE,'D',1,0) DISP_CODE --bugFix:5589398
2686 AND ATTR_GROUP_NAME = v_source_ag_name
2683 FROM EGO_ATTRS_V
2684 WHERE APPLICATION_ID = v_source_ag_app_id
2685 AND ATTR_GROUP_TYPE = v_source_ag_type
2687 ORDER BY DISP_CODE, SEQUENCE;
2688
2689 l_sequence ego_attrs_v.sequence%TYPE;
2690 ego_attribute_rec ego_attribute_csr%ROWTYPE;
2691 l_sequence_numbers VARCHAR2(10000);
2692
2693 BEGIN
2694
2695 -- Standard start of API savepoint
2696 IF FND_API.TO_BOOLEAN(p_commit) THEN
2697 SAVEPOINT Copy_Attribute_Group_PUB;
2698 END IF;
2699
2700 -- Check for call compatibility
2701 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
2702 l_api_name, G_PKG_NAME)
2703 THEN
2704 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2705 END IF;
2706 -- Initialize message list even though we don't currently use it
2707 IF FND_API.To_Boolean(p_init_msg_list) THEN
2708 FND_MSG_PUB.Initialize;
2709 END IF;
2710
2711 l_sequence_numbers := ' ';
2712
2713 OPEN ego_attribute_csr (v_source_ag_app_id => p_source_ag_app_id,
2714 v_source_ag_type => p_source_ag_type,
2715 v_source_ag_name => p_source_ag_name);
2716 LOOP
2717 FETCH ego_attribute_csr INTO ego_attribute_rec;
2718 EXIT WHEN ego_attribute_csr%NOTFOUND;
2719 /*
2720 IF l_sequence IS NULL THEN
2721 l_sequence := ego_attribute_rec.SEQUENCE;
2722 ELSIF l_sequence >= ego_attribute_rec.SEQUENCE THEN
2723 l_sequence := l_sequence + 1;
2724 ELSIF l_sequence < ego_attribute_rec.SEQUENCE THEN
2725 l_sequence := ego_attribute_rec.SEQUENCE;
2726 END IF;
2727 */
2728 --Commented out the above logic and added the following while loop to
2729 --take care of the case for bug 4874670 where two attributes have the same seq no
2730 --The above logic was failing for the changes made for bugfix 5589398.
2731 l_sequence := ego_attribute_rec.SEQUENCE;
2732 WHILE(INSTR(l_sequence_numbers,(' '||l_sequence||' ')) <> 0 AND INSTR(l_sequence_numbers,(' '||l_sequence||' ')) IS NOT NULL)
2733 LOOP
2734 l_sequence := l_sequence+10;
2735 END LOOP;
2736 l_sequence_numbers := l_sequence_numbers||' '||l_sequence||' ';
2737
2738
2739 EGO_EXT_FWK_PUB.Create_Attribute(
2740 p_api_version => l_api_version
2741 ,p_application_id => p_dest_ag_app_id
2742 ,p_attr_group_type => p_dest_ag_type
2743 ,p_attr_group_name => p_dest_ag_name
2744 ,p_internal_name => ego_attribute_rec.ATTR_NAME
2745 ,p_display_name => ego_attribute_rec.ATTR_DISPLAY_NAME
2746 ,p_description => ego_attribute_rec.DESCRIPTION
2747 ,p_sequence => l_sequence
2748 ,p_data_type => ego_attribute_rec.DATA_TYPE_CODE
2749 ,p_required => ego_attribute_rec.REQUIRED_FLAG
2750 ,p_searchable => ego_attribute_rec.SEARCH_FLAG
2751 ,p_column => ego_attribute_rec.DATABASE_COLUMN
2752 ,p_is_column_indexed => NULL --this will force Create_Attribute to query
2753 ,p_value_set_id => ego_attribute_rec.VALUE_SET_ID
2754 ,p_info_1 => ego_attribute_rec.INFO_1
2755 ,p_default_value => ego_attribute_rec.DEFAULT_VALUE
2756 ,p_unique_key_flag => ego_attribute_rec.UNIQUE_KEY_FLAG
2757 ,p_enabled => ego_attribute_rec.ENABLED_FLAG
2758 ,p_display => ego_attribute_rec.DISPLAY_CODE
2759 ,p_uom_class => ego_attribute_rec.UOM_CLASS
2760 ,p_init_msg_list => FND_API.G_FALSE
2761 ,p_commit => FND_API.G_FALSE
2762 ,x_return_status => l_return_status
2763 ,x_errorcode => l_errorcode
2764 ,x_msg_count => l_msg_count
2765 ,x_msg_data => l_msg_data
2766 );
2767 END LOOP;
2768 CLOSE ego_attribute_csr;
2769
2770 -- Standard check of p_commit
2771 IF FND_API.To_Boolean(p_commit) THEN
2772 COMMIT WORK;
2773 END IF;
2774
2775 x_return_status := FND_API.G_RET_STS_SUCCESS;
2776
2777 EXCEPTION
2778 WHEN OTHERS THEN
2779 IF FND_API.TO_BOOLEAN(p_commit) THEN
2780 ROLLBACK TO Copy_Attribute_Group_PUB;
2781 END IF;
2782 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2783 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
2784 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
2785 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
2786 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
2787 FND_MSG_PUB.Add;
2788 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2789 ,p_count => x_msg_count
2790 ,p_data => x_msg_data);
2791
2792 END Copy_Attribute_Group;
2793
2794 ----------------------------------------------------------------------
2795
2796 -- Wrapper for JSPs that aren't set up to take ATTR_GROUP_ID --
2797 PROCEDURE Copy_Attribute_Group (
2798 p_api_version IN NUMBER
2799 ,p_source_ag_app_id IN NUMBER
2800 ,p_source_ag_type IN VARCHAR2
2801 ,p_source_ag_name IN VARCHAR2
2802 ,p_dest_ag_app_id IN NUMBER
2806 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2803 ,p_dest_ag_type IN VARCHAR2
2804 ,p_dest_ag_name IN VARCHAR2
2805 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2807 ,x_return_status OUT NOCOPY VARCHAR2
2808 ,x_errorcode OUT NOCOPY NUMBER
2809 ,x_msg_count OUT NOCOPY NUMBER
2810 ,x_msg_data OUT NOCOPY VARCHAR2
2811 ) IS
2812
2813 l_attr_group_id NUMBER;
2814
2815 BEGIN
2816
2817 EGO_EXT_FWK_PUB.Copy_Attribute_Group
2818 (
2819 p_api_version => p_api_version
2820 ,p_source_ag_app_id => p_source_ag_app_id
2821 ,p_source_ag_type => p_source_ag_type
2822 ,p_source_ag_name => p_source_ag_name
2823 ,p_dest_ag_app_id => p_dest_ag_app_id
2824 ,p_dest_ag_type => p_dest_ag_type
2825 ,p_dest_ag_name => p_dest_ag_name
2826 ,p_init_msg_list => p_init_msg_list
2827 ,p_commit => p_commit
2828 ,x_attr_group_id => l_attr_group_id
2829 ,x_return_status => x_return_status
2830 ,x_errorcode => x_errorcode
2831 ,x_msg_count => x_msg_count
2832 ,x_msg_data => x_msg_data
2833 );
2834
2835 END Copy_Attribute_Group;
2836
2837 ----------------------------------------------------------------------
2838
2839 -- Wrapper for OA to pass source ATTR_GROUP_ID instead of Application Id, AG Type and AG Name--
2840 PROCEDURE Copy_Attribute_Group (
2841 p_api_version IN NUMBER
2842 ,p_source_attr_group_id IN NUMBER
2843 ,p_dest_ag_app_id IN NUMBER
2844 ,p_dest_ag_type IN VARCHAR2
2845 ,p_dest_ag_name IN VARCHAR2
2846 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2847 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2848 ,x_attr_group_id OUT NOCOPY NUMBER
2849 ,x_return_status OUT NOCOPY VARCHAR2
2850 ,x_errorcode OUT NOCOPY NUMBER
2851 ,x_msg_count OUT NOCOPY NUMBER
2852 ,x_msg_data OUT NOCOPY VARCHAR2
2853 ) IS
2854
2855 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
2856
2857 BEGIN
2858
2859 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_source_attr_group_id);
2860 IF l_attr_group_pks IS NULL THEN
2861 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2862 END IF;
2863
2864 EGO_EXT_FWK_PUB.Copy_Attribute_Group
2865 (
2866 p_api_version => p_api_version
2867 ,p_source_ag_app_id => l_attr_group_pks(1)
2868 ,p_source_ag_type => l_attr_group_pks(2)
2869 ,p_source_ag_name => l_attr_group_pks(3)
2870 ,p_dest_ag_app_id => p_dest_ag_app_id
2871 ,p_dest_ag_type => p_dest_ag_type
2872 ,p_dest_ag_name => p_dest_ag_name
2873 ,p_init_msg_list => p_init_msg_list
2874 ,p_commit => p_commit
2875 ,x_attr_group_id => x_attr_group_id
2876 ,x_return_status => x_return_status
2877 ,x_errorcode => x_errorcode
2878 ,x_msg_count => x_msg_count
2879 ,x_msg_data => x_msg_data
2880 );
2881
2882 END Copy_Attribute_Group;
2883
2884 ---------------------------------------------------------------------------
2885
2886
2887 PROCEDURE Update_Attribute_Group (
2888 p_api_version IN NUMBER
2889 ,p_attr_group_id IN NUMBER
2890 ,p_display_name IN VARCHAR2
2891 ,p_attr_group_desc IN VARCHAR2
2892 ,p_security_type IN VARCHAR2
2893 ,p_multi_row_attrib_group IN VARCHAR2
2894 ,p_variant_attrib_group IN VARCHAR2
2895 ,p_num_of_cols IN NUMBER DEFAULT NULL
2896 ,p_num_of_rows IN NUMBER DEFAULT NULL
2897 ,p_owning_company_id IN NUMBER
2898 ,p_region_code IN VARCHAR2 DEFAULT NULL
2899 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2900 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2901 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2902 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2903 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
2904 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
2905 ,x_return_status OUT NOCOPY VARCHAR2
2906 ,x_errorcode OUT NOCOPY NUMBER
2907 ,x_msg_count OUT NOCOPY NUMBER
2908 ,x_msg_data OUT NOCOPY VARCHAR2
2909 ) IS
2910
2911 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute_Group';
2912 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
2913
2914 BEGIN
2915
2916 -- Standard start of API savepoint
2917 IF FND_API.TO_BOOLEAN(p_commit) THEN
2918 SAVEPOINT Update_Attribute_Group_PUB;
2919 END IF;
2920
2921 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_attr_group_id);
2925
2922 IF l_attr_group_pks IS NULL THEN
2923 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2924 END IF;
2926 EGO_EXT_FWK_PUB.Update_Attribute_Group(
2927 p_api_version => p_api_version
2928 ,p_application_id => l_attr_group_pks(1)
2929 ,p_attr_group_type => l_attr_group_pks(2)
2930 ,p_internal_name => l_attr_group_pks(3)
2931 ,p_display_name => p_display_name
2932 ,p_attr_group_desc => p_attr_group_desc
2933 ,p_security_type => p_security_type
2934 ,p_multi_row_attrib_group => p_multi_row_attrib_group
2935 ,p_variant_attrib_group => p_variant_attrib_group
2936 ,p_num_of_cols => p_num_of_cols
2937 ,p_num_of_rows => p_num_of_rows
2938 ,p_owning_company_id => p_owning_company_id
2939 ,p_region_code => p_region_code
2940 ,p_view_privilege_id => p_view_privilege_id
2941 ,p_edit_privilege_id => p_edit_privilege_id
2942 ,p_business_event_flag => p_business_event_flag
2943 ,p_pre_business_event_flag => p_pre_business_event_flag
2944 ,p_init_msg_list => p_init_msg_list
2945 ,p_commit => p_commit
2946 ,x_return_status => x_return_status
2947 ,x_errorcode => x_errorcode
2948 ,x_msg_count => x_msg_count
2949 ,x_msg_data => x_msg_data
2950 );
2951
2952 -- Standard check of p_commit
2953 IF FND_API.To_Boolean(p_commit) THEN
2954 COMMIT WORK;
2955 END IF;
2956
2957 EXCEPTION
2958 WHEN OTHERS THEN
2959 IF FND_API.TO_BOOLEAN(p_commit) THEN
2960 ROLLBACK TO Update_Attribute_Group_PUB;
2961 END IF;
2962 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2963
2964 IF (l_attr_group_pks IS NULL) THEN
2965 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPKsFoundForAttrGroupID';
2966 ELSE
2967 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
2968 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
2969 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
2970 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
2971 FND_MSG_PUB.Add;
2972 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
2973 ,p_count => x_msg_count
2974 ,p_data => x_msg_data);
2975 END IF;
2976
2977 END Update_Attribute_Group;
2978
2979 ----------------------------------------------------------------------
2980
2981 PROCEDURE Update_Attribute_Group (
2982 p_api_version IN NUMBER
2983 ,p_application_id IN NUMBER
2984 ,p_attr_group_type IN VARCHAR2
2985 ,p_internal_name IN VARCHAR2
2986 ,p_display_name IN VARCHAR2
2987 ,p_attr_group_desc IN VARCHAR2
2988 ,p_security_type IN VARCHAR2
2989 ,p_multi_row_attrib_group IN VARCHAR2
2990 ,p_variant_attrib_group IN VARCHAR2
2991 ,p_num_of_cols IN NUMBER DEFAULT NULL
2992 ,p_num_of_rows IN NUMBER DEFAULT NULL
2993 ,p_owning_company_id IN NUMBER
2994 ,p_region_code IN VARCHAR2 DEFAULT NULL
2995 ,p_view_privilege_id IN NUMBER DEFAULT NULL
2996 ,p_edit_privilege_id IN NUMBER DEFAULT NULL
2997 ,p_business_event_flag IN VARCHAR2 DEFAULT NULL
2998 ,p_pre_business_event_flag IN VARCHAR2 DEFAULT NULL
2999 ,p_owner IN NUMBER DEFAULT NULL
3000 ,p_lud IN DATE DEFAULT SYSDATE
3001 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3002 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3003 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
3004 ,x_return_status OUT NOCOPY VARCHAR2
3005 ,x_errorcode OUT NOCOPY NUMBER
3006 ,x_msg_count OUT NOCOPY NUMBER
3007 ,x_msg_data OUT NOCOPY VARCHAR2
3008 ) IS
3009
3010 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute_Group';
3011
3012 --we don't use l_api_version yet, but eventually we might:
3013 --if we change required parameters, version goes from n.x to (n+1).x
3014 --if we change optional parameters, version goes from x.n to x.(n+1)
3015 l_api_version CONSTANT NUMBER := 1.0;
3016 --Bug 6048237
3017 l_num_of_cols NUMBER := p_num_of_cols;
3018 l_num_of_rows NUMBER := p_num_of_rows;
3019
3020
3021 BEGIN
3022
3023 -- Standard start of API savepoint
3024 IF FND_API.TO_BOOLEAN(p_commit) THEN
3025 SAVEPOINT Update_Attribute_Group_PUB;
3026 END IF;
3027
3028 -- Check for call compatibility
3029 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
3030 l_api_name, G_PKG_NAME)
3031 THEN
3032 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3033 END IF;
3034 -- Initialize message list even though we don't currently use it
3038 --Initialize num cols and rows.
3035 IF FND_API.To_Boolean(p_init_msg_list) THEN
3036 FND_MSG_PUB.Initialize;
3037 END IF;
3039 --Bug 6048237
3040 IF p_multi_row_attrib_group = 'Y' THEN
3041 IF l_num_of_cols is null THEN
3042 l_num_of_cols := 5;
3043 END IF;
3044 IF l_num_of_rows is null THEN
3045 l_num_of_rows := 5;
3046 END IF;
3047 ELSIF p_multi_row_attrib_group = 'N' THEN
3048 IF l_num_of_cols is null THEN
3049 l_num_of_cols := 2;
3050 END IF;
3051 END IF;
3052
3053 IF (FND_API.To_Boolean(p_is_nls_mode)) THEN
3054
3055 -- We do this IF check this way so that if p_is_nls_mode is NULL,
3056 -- we still update the non-trans tables (i.e., we treat NULL as 'F')
3057 NULL;
3058
3059 ELSE
3060
3061 -- We only update this information if we are NOT in NLS mode
3062 -- (i.e., we don't update it if we are in NLS mode)
3063 UPDATE FND_DESCR_FLEX_CONTEXTS
3064 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
3065 LAST_UPDATE_DATE = p_lud,
3066 LAST_UPDATE_LOGIN = g_current_login_id
3067 WHERE DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3068 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
3069 AND APPLICATION_ID = p_application_id;
3070
3071 UPDATE EGO_FND_DSC_FLX_CTX_EXT
3072 SET MULTI_ROW = nvl(p_multi_row_attrib_group, MULTI_ROW),
3073 VARIANT = nvl(p_variant_attrib_group, VARIANT),
3074 NUM_OF_COLS = l_num_of_cols,
3075 NUM_OF_ROWS = l_num_of_rows,
3076 SECURITY_TYPE = nvl(p_security_type, SECURITY_TYPE),
3077 REGION_CODE = p_region_code,
3078 VIEW_PRIVILEGE_ID = p_view_privilege_id,
3079 EDIT_PRIVILEGE_ID = p_edit_privilege_id,
3080 BUSINESS_EVENT_FLAG = p_business_event_flag,
3081 PRE_BUSINESS_EVENT_FLAG = p_pre_business_event_flag,
3082 LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
3083 LAST_UPDATE_DATE = p_lud,
3084 LAST_UPDATE_LOGIN = g_current_login_id
3085 WHERE DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3086 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
3087 AND APPLICATION_ID = p_application_id;
3088
3089 END IF;
3090
3091 -- We update the TL information whether or not we're in NLS mode
3092 UPDATE FND_DESCR_FLEX_CONTEXTS_TL
3093 SET DESCRIPTION = p_attr_group_desc,
3094 DESCRIPTIVE_FLEX_CONTEXT_NAME = p_display_name,
3095 LAST_UPDATE_DATE = p_lud,
3096 LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
3097 LAST_UPDATE_LOGIN = g_current_login_id,
3098 SOURCE_LANG = USERENV('LANG')
3099 WHERE APPLICATION_ID = p_application_id
3100 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3101 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_internal_name
3102 -- AND LANGUAGE = USERENV('LANG');
3103 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
3104
3105 -- Standard check of p_commit
3106 IF FND_API.To_Boolean(p_commit) THEN
3107 COMMIT WORK;
3108 END IF;
3109
3110 x_return_status := FND_API.G_RET_STS_SUCCESS;
3111
3112 EXCEPTION
3113 WHEN OTHERS THEN
3114 IF FND_API.TO_BOOLEAN(p_commit) THEN
3115 ROLLBACK TO Update_Attribute_Group_PUB;
3116 END IF;
3117 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3118 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3119 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3120 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3121 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3122 FND_MSG_PUB.Add;
3123 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3124 ,p_count => x_msg_count
3125 ,p_data => x_msg_data);
3126
3127 END Update_Attribute_Group;
3128
3129 ----------------------------------------------------------------------
3130
3131 PROCEDURE Delete_Attribute_Group (
3132 p_api_version IN NUMBER
3133 ,p_attr_group_id IN NUMBER
3134 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3135 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3136 ,x_return_status OUT NOCOPY VARCHAR2
3137 ,x_errorcode OUT NOCOPY NUMBER
3138 ,x_msg_count OUT NOCOPY NUMBER
3139 ,x_msg_data OUT NOCOPY VARCHAR2
3140 ) IS
3141
3142 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute_Group';
3143 l_attr_group_pks EGO_VARCHAR_TBL_TYPE;
3144
3145 BEGIN
3146
3147 -- Standard start of API savepoint
3148 IF FND_API.TO_BOOLEAN(p_commit) THEN
3149 SAVEPOINT Delete_Attribute_Group_PUB;
3150 END IF;
3151
3152 l_attr_group_pks := Get_PKs_From_Attr_Group_Id(p_attr_group_id);
3153 IF l_attr_group_pks IS NULL THEN
3154 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3155 END IF;
3156
3157 EGO_EXT_FWK_PUB.Delete_Attribute_Group(
3158 p_api_version => p_api_version
3159 ,p_application_id => l_attr_group_pks(1)
3160 ,p_attr_group_type => l_attr_group_pks(2)
3164 ,x_return_status => x_return_status
3161 ,p_attr_group_name => l_attr_group_pks(3)
3162 ,p_init_msg_list => p_init_msg_list
3163 ,p_commit => p_commit
3165 ,x_errorcode => x_errorcode
3166 ,x_msg_count => x_msg_count
3167 ,x_msg_data => x_msg_data
3168 );
3169
3170 -- Standard check of p_commit
3171 IF FND_API.To_Boolean(p_commit) THEN
3172 COMMIT WORK;
3173 END IF;
3174
3175 x_return_status := FND_API.G_RET_STS_SUCCESS;
3176
3177 EXCEPTION
3178 WHEN OTHERS THEN
3179 IF FND_API.TO_BOOLEAN(p_commit) THEN
3180 ROLLBACK TO Delete_Attribute_Group_PUB;
3181 END IF;
3182 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3183
3184 IF (l_attr_group_pks IS NULL) THEN
3185 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPKsFoundForAttrGroupID';
3186 ELSE
3187 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3188 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3189 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3190 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3191 FND_MSG_PUB.Add;
3192 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3193 ,p_count => x_msg_count
3194 ,p_data => x_msg_data);
3195 END IF;
3196
3197 END Delete_Attribute_Group;
3198
3199 ----------------------------------------------------------------------
3200
3201 PROCEDURE Delete_Attribute_Group (
3202 p_api_version IN NUMBER
3203 ,p_application_id IN NUMBER
3204 ,p_attr_group_type IN VARCHAR2
3205 ,p_attr_group_name IN VARCHAR2
3206 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3207 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3208 ,x_return_status OUT NOCOPY VARCHAR2
3209 ,x_errorcode OUT NOCOPY NUMBER
3210 ,x_msg_count OUT NOCOPY NUMBER
3211 ,x_msg_data OUT NOCOPY VARCHAR2
3212 ) IS
3213
3214 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute_Group';
3215 --we don't use l_api_version yet, but eventually we might:
3216 --if we change required parameters, version goes from n.x to (n+1).x
3217 --if we change optional parameters, version goes from x.n to x.(n+1)
3218 l_api_version CONSTANT NUMBER := 1.0;
3219
3220 l_assocs_exist BOOLEAN;
3221 l_attr_group_disp_name VARCHAR2(80);
3222
3223 BEGIN
3224
3225 -- Standard start of API savepoint
3226 IF FND_API.TO_BOOLEAN(p_commit) THEN
3227 SAVEPOINT Delete_Attribute_Group_PUB;
3228 END IF;
3229
3230 -- Check for call compatibility
3231 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
3232 l_api_name, G_PKG_NAME)
3233 THEN
3234 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3235 END IF;
3236 -- Initialize message list even though we don't currently use it
3237 IF FND_API.To_Boolean(p_init_msg_list) THEN
3238 FND_MSG_PUB.Initialize;
3239 END IF;
3240
3241 l_assocs_exist := Check_Associations_Exist(p_application_id,
3242 p_attr_group_type,
3243 p_attr_group_name);
3244
3245 IF (l_assocs_exist) THEN
3246
3247 x_return_status := FND_API.G_RET_STS_ERROR;
3248
3249 SELECT DESCRIPTIVE_FLEX_CONTEXT_NAME
3250 INTO l_attr_group_disp_name
3251 FROM FND_DESCR_FLEX_CONTEXTS_TL
3252 WHERE APPLICATION_ID = p_application_id
3253 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
3254 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
3255 AND LANGUAGE = USERENV('LANG');
3256
3257
3258 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ASSOCS_EXIST1');
3259 FND_MESSAGE.Set_Token('ATTR_GRP_NAME', l_attr_group_disp_name);
3260 FND_MSG_PUB.Add;
3261 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3262 ,p_count => x_msg_count
3263 ,p_data => x_msg_data);
3264
3265 ELSE
3266
3267 Delete_Attr_Group_Internal(p_application_id
3268 ,p_attr_group_type
3269 ,p_attr_group_name
3270 ,p_commit
3271 ,x_return_status
3272 ,x_errorcode
3273 ,x_msg_count
3274 ,x_msg_data);
3275
3276 END IF;
3277
3278 -- Standard check of p_commit
3279 IF FND_API.To_Boolean(p_commit) THEN
3280 COMMIT WORK;
3281 END IF;
3282
3283 x_return_status := FND_API.G_RET_STS_SUCCESS;
3284
3285 EXCEPTION
3286 WHEN OTHERS THEN
3287 IF FND_API.TO_BOOLEAN(p_commit) THEN
3288 ROLLBACK TO Delete_Attribute_Group_PUB;
3289 END IF;
3290 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3291
3292 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
3293 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
3297 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
3294 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
3295 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
3296 FND_MSG_PUB.Add;
3298 ,p_count => x_msg_count
3299 ,p_data => x_msg_data);
3300
3301 END Delete_Attribute_Group;
3302
3303 ---------------------------------------------------------------------------
3304
3305 PROCEDURE Compile_Attr_Group_View (
3306 p_api_version IN NUMBER
3307 ,p_attr_group_id IN NUMBER
3308 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3309 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3310 ,x_return_status OUT NOCOPY VARCHAR2
3311 ,x_errorcode OUT NOCOPY NUMBER
3312 ,x_msg_count OUT NOCOPY NUMBER
3313 ,x_msg_data OUT NOCOPY VARCHAR2
3314 ) IS
3315
3316 l_api_name CONSTANT VARCHAR2(30) := 'Compile_Attr_Group_View';
3317 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
3318 l_ext_table_metadata_obj EGO_EXT_TABLE_METADATA_OBJ;
3319 l_pk_col_names VARCHAR2(1000);
3320 l_dl_col_names VARCHAR2(1000);
3321 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
3322 l_curr_attr_index NUMBER;
3323 l_curr_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
3324 l_to_char_db_col_expression VARCHAR2(90);
3325 p_pk_column_name_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
3326 l_aliased_attr_names VARCHAR2(32000);
3327 l_user_attrs_view_ddl VARCHAR2(32757);
3328 l_ddl_error_message VARCHAR2(1000);
3329 l_token_table ERROR_HANDLER.Token_Tbl_Type;
3330 l_ext_table_name FND_DESCRIPTIVE_FLEXS.APPLICATION_TABLE_NAME%TYPE;
3331
3332 BEGIN
3333
3334 -- Standard start of API savepoint
3335 IF FND_API.TO_BOOLEAN(p_commit) THEN
3336 SAVEPOINT Compile_Attr_Group_View_PUB;
3337 END IF;
3338
3339 ----------------------------------------------------------------
3340 -- Start by getting a metadata object for the Attribute Group --
3341 ----------------------------------------------------------------
3342 l_attr_group_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
3343 p_attr_group_id => p_attr_group_id
3344 ,p_pick_from_cache => FALSE
3345 );
3346
3347 IF (l_attr_group_metadata_obj IS NOT NULL AND
3348 l_attr_group_metadata_obj.attr_metadata_table.COUNT > 0) THEN
3349
3350 ---------------------------------------------------------
3351 -- Next, get a metadata object for the Extension Table --
3352 ---------------------------------------------------------
3353 l_ext_table_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Ext_Table_Metadata(
3354 EGO_EXT_FWK_PUB.Get_Object_Id_For_AG_Type(
3355 l_attr_group_metadata_obj.APPLICATION_ID
3356 ,l_attr_group_metadata_obj.ATTR_GROUP_TYPE
3357 )
3358 );
3359
3360 IF (l_ext_table_metadata_obj IS NOT NULL) THEN
3361
3362 -----------------------------------------------------------------
3363 -- Build list strings for the Primary Key and Data Level names --
3364 -----------------------------------------------------------------
3365 l_pk_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
3366 l_ext_table_metadata_obj.pk_column_metadata
3367 ,NULL
3368 ,'NAMES'
3369 );
3370 -- bug 6345399 fetching all the dl column names
3371 -- l_dl_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
3372 -- l_ext_table_metadata_obj.data_level_metadata
3373 -- ,NULL
3374 -- ,'NAMES'
3375 -- );
3376 l_dl_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_All_Data_Level_PK_Names(
3377 p_application_id => l_attr_group_metadata_obj.APPLICATION_ID
3378 ,p_attr_group_type => l_attr_group_metadata_obj.ATTR_GROUP_TYPE
3379 );
3380 SELECT application_table_name
3381 INTO l_ext_table_name
3382 FROM fnd_descriptive_flexs
3383 WHERE application_id = l_attr_group_metadata_obj.application_id
3384 AND descriptive_flexfield_name = l_attr_group_metadata_obj.attr_group_type;
3385
3386 IF FND_API.TO_BOOLEAN(EGO_USER_ATTRS_COMMON_PVT.HAS_COLUMN_IN_TABLE (p_table_name => l_ext_table_name
3387 ,p_column_name => 'DATA_LEVEL_ID'
3388 )
3389 ) THEN
3390 l_dl_col_names := ' DATA_LEVEL_ID, '||l_dl_col_names;
3391 END IF;
3392 -- bug 6345399 end
3393
3394 ----------------------------------------------------
3395 -- Add trailing commas if the lists are non-empty --
3396 ----------------------------------------------------
3397 IF (LENGTH(l_pk_col_names) > 0) THEN
3401 l_dl_col_names := l_dl_col_names || ',';
3398 l_pk_col_names := l_pk_col_names || ',';
3399 END IF;
3400 IF (LENGTH(l_dl_col_names) > 0) THEN
3402 END IF;
3403
3404 ----------------------------------------------------
3405 -- Loop through all Attributes in the Attr Group, --
3406 -- building a list of aliased Attr names --
3407 ----------------------------------------------------
3408 l_attr_metadata_table := l_attr_group_metadata_obj.attr_metadata_table;
3409 l_curr_attr_index := l_attr_metadata_table.FIRST;
3410 WHILE (l_curr_attr_index <= l_attr_metadata_table.LAST)
3411 LOOP
3412
3413 l_curr_attr_metadata_obj := l_attr_metadata_table(l_curr_attr_index);
3414
3415 ----------------------------------------------------
3416 -- Add a column named with the Attribute internal --
3417 -- name and showing the Attribute internal value --
3418 ----------------------------------------------------
3419 l_aliased_attr_names := l_aliased_attr_names ||
3420 l_curr_attr_metadata_obj.DATABASE_COLUMN || ' ' ||
3421 l_curr_attr_metadata_obj.ATTR_NAME ||',';
3422
3423 -----------------------------------------------------
3424 -- If the Attribute has a Value Set with different --
3425 -- internal and display values, create a second --
3426 -- column (named with the Attribute internal name --
3427 -- plus '_DISP') to show the display value --
3428 -----------------------------------------------------
3429 IF (l_curr_attr_metadata_obj.VALIDATION_CODE = G_INDEPENDENT_VALIDATION_CODE OR
3430 l_curr_attr_metadata_obj.VALIDATION_CODE = G_TABLE_VALIDATION_CODE) THEN
3431
3432 ---------------------------------------
3433 -- In most cases, we do not need to --
3434 -- worry about tokenizing VS queries --
3435 ---------------------------------------
3436 IF (l_curr_attr_metadata_obj.VS_BIND_VALUES_CODE IS NULL OR
3437 l_curr_attr_metadata_obj.VS_BIND_VALUES_CODE = 'N') THEN
3438
3439 l_to_char_db_col_expression := l_curr_attr_metadata_obj.DATABASE_COLUMN;
3440
3441 ----------------------------------------------------------
3442 -- If we have an Independent Int->Disp Val query, then --
3443 -- we will need to cast the DB column value to a string --
3444 -- (if we have a Table Int->Disp Val query, we need the --
3445 -- value in its native data type for the query to work) --
3446 ----------------------------------------------------------
3447 IF (l_curr_attr_metadata_obj.VALIDATION_CODE = G_INDEPENDENT_VALIDATION_CODE) THEN
3448
3449 l_to_char_db_col_expression := EGO_USER_ATTRS_COMMON_PVT.Create_DB_Col_Alias_If_Needed(l_curr_attr_metadata_obj);
3450
3451 END IF;
3452
3453 l_aliased_attr_names := l_aliased_attr_names || '(' ||
3454 l_curr_attr_metadata_obj.INT_TO_DISP_VAL_QUERY ||
3455 l_to_char_db_col_expression || ') ';
3456
3457 ELSE
3458
3459 ---------------------------------------------------------
3460 -- If, however, the Value Set is a Table VS with bind --
3461 -- values then we need to call Tokenized_Val_Set_Query --
3462 ---------------------------------------------------------
3463
3464 -------------------------------------------------------------------
3465 -- If we need and don't yet have it, build an array of PK column --
3466 -- names/values (in this case, though, the values are themselves --
3467 -- the PK column names, because we want Tokenized_Val_Set_Query --
3468 -- to replace any PK tokens with the column name itself so our --
3469 -- view will be sufficiently generalized) --
3470 -------------------------------------------------------------------
3471 IF (p_pk_column_name_value_pairs IS NULL) THEN
3472
3473 IF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 5 AND
3474 l_ext_table_metadata_obj.pk_column_metadata(5) IS NOT NULL AND
3475 l_ext_table_metadata_obj.pk_column_metadata(5).COL_NAME IS NOT NULL) THEN
3476 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3477 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)
3478 ,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)
3479 ,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)
3480 ,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)
3481 ,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)
3482 );
3486 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3483 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 4 AND
3484 l_ext_table_metadata_obj.pk_column_metadata(4) IS NOT NULL AND
3485 l_ext_table_metadata_obj.pk_column_metadata(4).COL_NAME IS NOT NULL) THEN
3487 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)
3488 ,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)
3489 ,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)
3490 ,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)
3491 );
3492 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 3 AND
3493 l_ext_table_metadata_obj.pk_column_metadata(3) IS NOT NULL AND
3494 l_ext_table_metadata_obj.pk_column_metadata(3).COL_NAME IS NOT NULL) THEN
3495 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3496 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)
3497 ,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)
3498 ,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)
3499 );
3500 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 2 AND
3501 l_ext_table_metadata_obj.pk_column_metadata(2) IS NOT NULL AND
3502 l_ext_table_metadata_obj.pk_column_metadata(2).COL_NAME IS NOT NULL) THEN
3503 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3504 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)
3505 ,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)
3506 );
3507 ELSIF (l_ext_table_metadata_obj.pk_column_metadata.COUNT = 1 AND
3508 l_ext_table_metadata_obj.pk_column_metadata(1) IS NOT NULL AND
3509 l_ext_table_metadata_obj.pk_column_metadata(1).COL_NAME IS NOT NULL) THEN
3510 p_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(
3511 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)
3512 );
3513 END IF;
3514 END IF;
3515
3516 l_aliased_attr_names := l_aliased_attr_names || '(' ||
3517 EGO_USER_ATTRS_DATA_PVT.Tokenized_Val_Set_Query(
3518 p_attr_metadata_obj => l_curr_attr_metadata_obj
3519 ,p_attr_group_metadata_obj => l_attr_group_metadata_obj
3520 ,p_ext_table_metadata_obj => l_ext_table_metadata_obj
3521 ,p_pk_column_name_value_pairs => p_pk_column_name_value_pairs
3522 ,p_data_level_name_value_pairs => NULL
3523 ,p_entity_id => NULL
3524 ,p_entity_index => NULL
3525 ,p_entity_code => NULL
3526 ,p_add_errors_to_fnd_stack => FND_API.G_TRUE
3527 ,p_attr_name_value_pairs => NULL
3528 ,p_is_disp_to_int_query => FALSE
3529 ,p_final_bind_value => NULL
3530 ,p_return_bound_sql => TRUE
3531 ) || l_curr_attr_metadata_obj.DATABASE_COLUMN || ') ';
3532
3533 END IF;
3534
3535 -----------------------------------------------------------------
3536 -- Whichever display value query we just added (Int->Disp Val --
3537 -- query) or Tokenized Val Set Query), we now need to alias it --
3538 -- with the Attr internal name (changed by adding '_DISP') --
3539 -----------------------------------------------------------------
3540 l_aliased_attr_names := l_aliased_attr_names ||
3541 SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 24) ||
3542 '_DISP,';
3543
3544 END IF;
3548 -- then we add a column containing the tokenized URL; the column's --
3545
3546 ---------------------------------------------------------------------
3547 -- If the Attribute's INFO_1 (its Dynamic URL) value is not null, --
3549 -- name will be the Attr internal name (changed by adding '_URL') --
3550 ---------------------------------------------------------------------
3551 IF (l_curr_attr_metadata_obj.INFO_1 IS NOT NULL) THEN
3552
3553 l_aliased_attr_names := l_aliased_attr_names || '(' ||
3554 Build_Tokenized_URL_Query(l_attr_group_metadata_obj
3555 ,l_curr_attr_metadata_obj) ||
3556 ')' ||
3557 SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 24) ||
3558 '_URL,';
3559
3560 END IF;
3561
3562 ------------------------------------------------------------------------
3563 -- In case the Attribute has some UOM class attached we need to have --
3564 -- the UOM columns too. --
3565 -- <Attr_name>_UOM : contains the base UOM code --
3566 -- <Attr_name>_UUOM : contains the user entered uom ---------
3567 -- <Attr_name>_UVAL : contains the value in converted as per the UOM entered --
3568 -------------------------------------------------------------------------------
3569 IF (l_curr_attr_metadata_obj.UNIT_OF_MEASURE_CLASS IS NOT NULL) THEN
3570
3571 l_aliased_attr_names := l_aliased_attr_names || ' ''' || l_curr_attr_metadata_obj.UNIT_OF_MEASURE_BASE ||''' '
3572 || SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 26)||'_UOM ,';
3573
3574 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'))
3575 ||' '|| SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 25)||'_UUOM ,';
3576
3577
3578 l_aliased_attr_names := l_aliased_attr_names || 'NVL2('||l_curr_attr_metadata_obj.DATABASE_COLUMN||
3579 ' ,NVL2( UOM_'||SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))||' '||
3580 ' ,INV_CONVERT.INV_UM_CONVERT ( null '|| --ItemId
3581 ' ,null '|| --precision
3582 ' , '||l_curr_attr_metadata_obj.DATABASE_COLUMN|| --quantity
3583 ' , '''||l_curr_attr_metadata_obj.UNIT_OF_MEASURE_BASE||''' '|| --base uom
3584 ' , '||'UOM_'||SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))||' '|| --to_UOM
3585 ' , null '|| --from name
3586 ' , null )'|| --to name
3587 ' ,NULL) '||
3588 ' ,NULL) '||
3589 ' '||SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 25)||'_UVAL ,';
3590
3591 /* -- It was decided to use the api INV_CONVERT.INV_UM_CONVERT for uom conversions instead of doing it in the query.
3592 l_aliased_attr_names := l_aliased_attr_names || l_curr_attr_metadata_obj.DATABASE_COLUMN
3593 ||'/NVL((SELECT CONVERSION_RATE FROM MTL_UOM_CONVERSIONS '
3594 ||' WHERE UOM_CLASS = '''||l_curr_attr_metadata_obj.UNIT_OF_MEASURE_CLASS||''' '
3595 ||' AND UOM_CODE = UOM_' || SUBSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,INSTR(l_curr_attr_metadata_obj.DATABASE_COLUMN,'EXT_ATTR'))
3596 ||' AND ROWNUM = 1),1) '
3597 ||SUBSTRB(l_curr_attr_metadata_obj.ATTR_NAME, 1, 24)||'_UVAL , ';
3598 */
3599 END IF;
3600
3601
3602 l_curr_attr_index := l_attr_metadata_table.NEXT(l_curr_attr_index);
3603 END LOOP;
3604
3605 ------------------------------------------------------------------
3606 -- Trim the trailing ',' from l_aliased_attr_names if necessary --
3607 ------------------------------------------------------------------
3608 IF (LENGTH(l_aliased_attr_names) > 0) THEN
3609 l_aliased_attr_names := SUBSTR(l_aliased_attr_names, 1, LENGTH(l_aliased_attr_names) - LENGTH(','));
3610 END IF;
3611
3612 -------------------------------------------------------------------------
3613 -- Now we construct and execute our AGV DDL if the AGV Name is defined --
3617 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3614 -------------------------------------------------------------------------
3615 IF (l_attr_group_metadata_obj.AGV_NAME IS NULL) THEN
3616
3618 l_token_table(1).TOKEN_VALUE := l_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME;
3619 ERROR_HANDLER.Add_Error_Message(
3620 p_message_name => 'EGO_EF_NO_AGV_NAME_ERROR'
3621 ,p_application_id => 'EGO'
3622 ,p_token_tbl => l_token_table
3623 ,p_message_type => FND_API.G_RET_STS_ERROR
3624 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3625 );
3626 RAISE FND_API.G_EXC_ERROR;
3627
3628 ELSE
3629
3630 l_user_attrs_view_ddl :=
3631 ' CREATE OR REPLACE VIEW '||l_attr_group_metadata_obj.AGV_NAME||
3632 ' AS SELECT EXTENSION_ID, '||l_pk_col_names||l_dl_col_names||l_aliased_attr_names||
3633 ' FROM '||l_attr_group_metadata_obj.EXT_TABLE_VL_NAME ||
3634 ' WHERE attr_group_id = ' || p_attr_group_id ;
3635
3636 l_ddl_error_message := Execute_DDL_And_Return_Err(l_user_attrs_view_ddl);
3637
3638 ---------------------------------------------------------------
3639 -- If something went wrong with the DDL, we report the error --
3640 ---------------------------------------------------------------
3641 IF (l_ddl_error_message IS NOT NULL) THEN
3642 IF (l_attr_group_metadata_obj IS NOT NULL) THEN
3643 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3644 l_token_table(1).TOKEN_VALUE := l_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME;
3645 ELSE
3646 ------------------------------------------------------
3647 -- If we don't have the metadata object, we have to --
3648 -- identify the Attribute Group by its passed-in ID --
3649 ------------------------------------------------------
3650 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3651 l_token_table(1).TOKEN_VALUE := p_attr_group_id;
3652 END IF;
3653
3654 -----------------------------------------------------------------
3655 -- First we tell them that something went wrong with their DDL --
3656 -----------------------------------------------------------------
3657 ERROR_HANDLER.Add_Error_Message(
3658 p_message_name => 'EGO_EF_AGV_DDL_ERR'
3659 ,p_application_id => 'EGO'
3660 ,p_token_tbl => l_token_table
3661 ,p_message_type => FND_API.G_RET_STS_ERROR
3662 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3663 );
3664
3665 ---------------------------------------------------
3666 -- Then we show them the DDL itself, looping to --
3667 -- pass it to ERROR_HANDLER in 200-byte segments --
3668 ---------------------------------------------------
3669 WHILE (LENGTH(l_user_attrs_view_ddl) > 0)
3670 LOOP
3671 ERROR_HANDLER.Add_Error_Message(
3672 p_application_id => 'EGO'
3673 ,p_message_text => SUBSTR(l_user_attrs_view_ddl, 1, 200)
3674 ,p_message_type => FND_API.G_RET_STS_ERROR
3675 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3676 );
3677
3678 l_user_attrs_view_ddl := SUBSTR(l_user_attrs_view_ddl, 201);
3679 END LOOP;
3680
3681 ------------------------------------------------------------
3682 -- Then we give them the error message we got from the DB --
3683 ------------------------------------------------------------
3684 l_token_table(1).TOKEN_NAME := 'SQLERRM';
3685 l_token_table(1).TOKEN_VALUE := l_ddl_error_message;
3686 ERROR_HANDLER.Add_Error_Message(
3687 p_message_name => 'EGO_EF_AGV_DDL_SQLERRM'
3688 ,p_application_id => 'EGO'
3689 ,p_token_tbl => l_token_table
3690 ,p_message_type => FND_API.G_RET_STS_ERROR
3691 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3692 );
3693 RAISE FND_API.G_EXC_ERROR;
3694 END IF;
3695 END IF;
3696 END IF;
3697 END IF;
3698
3699 -- Standard check of p_commit
3700 IF FND_API.To_Boolean(p_commit) THEN
3701 COMMIT WORK;
3702 END IF;
3703
3704 x_return_status := FND_API.G_RET_STS_SUCCESS;
3705
3706 EXCEPTION
3707 WHEN FND_API.G_EXC_ERROR THEN
3708 IF FND_API.To_Boolean(p_commit) THEN
3709 ROLLBACK TO Compile_Attr_Group_View_PUB;
3710 END IF;
3711 x_return_status := FND_API.G_RET_STS_ERROR;
3712
3713 WHEN OTHERS THEN
3714 IF FND_API.To_Boolean(p_commit) THEN
3715 ROLLBACK TO Compile_Attr_Group_View_PUB;
3716 END IF;
3717 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3718
3719 -- If the DDL is not null, that's probably the cause of our error --
3720 IF (l_user_attrs_view_ddl IS NOT NULL) THEN
3721
3725 ELSE
3722 IF (l_attr_group_metadata_obj IS NOT NULL) THEN
3723 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3724 l_token_table(1).TOKEN_VALUE := l_attr_group_metadata_obj.ATTR_GROUP_DISP_NAME;
3726 ------------------------------------------------------
3727 -- If we don't have the metadata object, we have to --
3728 -- identify the Attribute Group by its passed-in ID --
3729 ------------------------------------------------------
3730 l_token_table(1).TOKEN_NAME := 'ATTR_GROUP_DISP_NAME';
3731 l_token_table(1).TOKEN_VALUE := p_attr_group_id;
3732 END IF;
3733
3734 -----------------------------------------------------------------
3735 -- First we tell them that something went wrong with their DDL --
3736 -----------------------------------------------------------------
3737 ERROR_HANDLER.Add_Error_Message(
3738 p_message_name => 'EGO_EF_AGV_DDL_ERR'
3739 ,p_application_id => 'EGO'
3740 ,p_token_tbl => l_token_table
3741 ,p_message_type => FND_API.G_RET_STS_ERROR
3742 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3743 );
3744
3745 ---------------------------------------------------
3746 -- Then we show them the DDL itself, looping to --
3747 -- pass it to ERROR_HANDLER in 100-byte segments --
3748 ---------------------------------------------------
3749 WHILE (LENGTH(l_user_attrs_view_ddl) > 0)
3750 LOOP
3751 ERROR_HANDLER.Add_Error_Message(
3752 p_application_id => 'EGO'
3753 ,p_message_text => SUBSTR(l_user_attrs_view_ddl, 1, 100)
3754 ,p_message_type => FND_API.G_RET_STS_ERROR
3755 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
3756 );
3757
3758 l_user_attrs_view_ddl := SUBSTR(l_user_attrs_view_ddl, 101);
3759 END LOOP;
3760
3761 ELSE
3762
3763 l_token_table(1).TOKEN_NAME := 'PKG_NAME';
3764 l_token_table(1).TOKEN_VALUE := G_PKG_NAME;
3765 l_token_table(2).TOKEN_NAME := 'API_NAME';
3766 l_token_table(2).TOKEN_VALUE := l_api_name;
3767 l_token_table(3).TOKEN_NAME := 'SQL_ERR_MSG';
3768 l_token_table(3).TOKEN_VALUE := SQLERRM;
3769
3770 ERROR_HANDLER.Add_Error_Message(
3771 p_message_name => 'EGO_PLSQL_ERR'
3772 ,p_application_id => 'EGO'
3773 ,p_token_tbl => l_token_table
3774 ,p_message_type => FND_API.G_RET_STS_ERROR
3775 ,p_addto_fnd_stack => 'Y'
3776 );
3777
3778 END IF;
3779
3780 END Compile_Attr_Group_View;
3781
3782 ---------------------------------------------------------------------------
3783
3784 PROCEDURE Compile_Attr_Group_Views (
3785 ERRBUF OUT NOCOPY VARCHAR2
3786 ,RETCODE OUT NOCOPY VARCHAR2
3787 ,p_attr_group_id_list IN VARCHAR2
3788 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
3789 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
3790 ) IS
3791
3792 l_ag_id_start_index NUMBER := 1;
3793 l_ag_id_end_index NUMBER;
3794 l_curr_ag_id VARCHAR2(30);
3795 l_return_status VARCHAR2(1);
3796 l_errorcode NUMBER;
3797 l_msg_count NUMBER;
3798 l_msg_data VARCHAR2(1000);
3799
3800 BEGIN
3801
3802 -- Initialize message list if caller asked us to do so
3803 IF FND_API.To_Boolean(p_init_msg_list) THEN
3804 FND_MSG_PUB.Initialize;
3805 ERROR_HANDLER.Initialize;
3806 END IF;
3807
3808 IF (p_attr_group_id_list IS NOT NULL) THEN
3809
3810 WHILE (l_ag_id_start_index > 0)
3811 LOOP
3812
3813 l_ag_id_end_index := INSTR(p_attr_group_id_list, ',', l_ag_id_start_index);
3814 IF (l_ag_id_end_index = 0) THEN
3815 l_curr_ag_id := TRIM(SUBSTR(p_attr_group_id_list, l_ag_id_start_index));
3816 ELSE
3817 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));
3818 END IF;
3819
3820 --------------------------------------------------------
3821 -- Call the API for each Attribute Group in the list; --
3822 -- if any call fails, continue with the rest of them --
3823 --------------------------------------------------------
3824 Compile_Attr_Group_View(
3825 p_api_version => 1.0
3826 ,p_attr_group_id => l_curr_ag_id
3827 ,p_init_msg_list => FND_API.G_FALSE
3828 ,p_commit => p_commit
3829 ,x_return_status => l_return_status
3830 ,x_errorcode => l_errorcode
3831 ,x_msg_count => l_msg_count
3832 ,x_msg_data => l_msg_data
3833 );
3834
3835 ----------------------------------------------
3836 -- Update the start index for the next loop --
3837 ----------------------------------------------
3838 l_ag_id_start_index := l_ag_id_end_index;
3842 END LOOP;
3839 IF (l_ag_id_start_index > 0) THEN
3840 l_ag_id_start_index := l_ag_id_start_index + 1;
3841 END IF;
3843 END IF;
3844
3845 --------------------------------------------------------
3846 -- Find out if any error messages were logged for any --
3847 -- of the Attribute Groups for which we compiled AGVs --
3848 --------------------------------------------------------
3849 l_msg_count := ERROR_HANDLER.Get_Message_Count();
3850 IF (l_msg_count = 0) THEN
3851 RETCODE := FND_API.G_RET_STS_SUCCESS;
3852 ELSE
3853 RETCODE := FND_API.G_RET_STS_ERROR;
3854 IF (l_msg_count = 1) THEN
3855 DECLARE
3856 l_dummy_entity_index NUMBER;
3857 l_dummy_entity_id VARCHAR2(60);
3858 l_dummy_message_type VARCHAR2(1);
3859 BEGIN
3860 ERROR_HANDLER.Get_Message(x_message_text => ERRBUF
3861 ,x_entity_index => l_dummy_entity_index
3862 ,x_entity_id => l_dummy_entity_id
3863 ,x_message_type => l_dummy_message_type);
3864 END;
3865 ELSE
3866 ERRBUF := 'EGO_CHECK_FND_STACK_FOR_ERRS';
3867 END IF;
3868
3869 ERROR_HANDLER.Log_Error(
3870 p_write_err_to_inttable => 'Y'
3871 ,p_write_err_to_conclog => 'Y'
3872 );
3873 END IF;
3874
3875 END Compile_Attr_Group_Views;
3876
3877 ----------------------------------------------------------------------
3878
3879
3880 FUNCTION Does_Attr_Have_Data (
3881 p_application_id IN NUMBER DEFAULT NULL
3882 ,p_attr_group_type IN VARCHAR2 DEFAULT NULL
3883 ,p_attr_group_name IN VARCHAR2 DEFAULT NULL
3884 ,p_attr_name IN VARCHAR2 DEFAULT NULL
3885 ,p_attr_id IN NUMBER DEFAULT NULL
3886 )
3887 RETURN VARCHAR2
3888 IS
3889
3890 l_api_name CONSTANT VARCHAR2(30) := 'Does_Attr_Have_Data';
3891
3892 l_dynamic_sql VARCHAR2(17000);
3893 l_attr_group_id NUMBER;
3894 l_ext_table_vl_name VARCHAR2(30);
3895 l_curr_db_column VARCHAR2(30);
3896 l_row_count NUMBER;
3897 l_attr_data_exist VARCHAR2(1) := FND_API.G_FALSE;
3898 l_application_id VARCHAR2(3);
3899 l_attr_group_type VARCHAR2(80);
3900 l_attr_group_name VARCHAR2(80);
3901 l_attr_name VARCHAR2(80);
3902
3903 BEGIN
3904
3905 if (p_attr_id IS NOT NULL) then
3906 SELECT USGS.APPLICATION_ID,
3907 USGS.DESCRIPTIVE_FLEXFIELD_NAME,
3908 USGS.DESCRIPTIVE_FLEX_CONTEXT_CODE,
3909 USGS.END_USER_COLUMN_NAME,
3910 USGS.APPLICATION_COLUMN_NAME
3911 INTO
3912 l_application_id
3913 ,l_attr_group_type
3914 ,l_attr_group_name
3915 ,l_attr_name
3916 ,l_curr_db_column
3917 FROM
3918 FND_DESCR_FLEX_COLUMN_USAGES USGS,
3919 EGO_FND_DF_COL_USGS_EXT EXT
3920 WHERE
3921 USGS.APPLICATION_ID = EXT.APPLICATION_ID
3922 AND USGS.DESCRIPTIVE_FLEXFIELD_NAME = EXT.DESCRIPTIVE_FLEXFIELD_NAME
3923 AND USGS.DESCRIPTIVE_FLEX_CONTEXT_CODE = EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE
3924 AND USGS.APPLICATION_COLUMN_NAME = EXT.APPLICATION_COLUMN_NAME
3925 AND EXT.ATTR_ID = p_attr_id;
3926
3927 else
3928
3929 l_application_id := p_application_id;
3930 l_attr_group_type := p_attr_group_type;
3931 l_attr_group_name := p_attr_group_name;
3932 l_attr_name := p_attr_name;
3933
3934 SELECT APPLICATION_COLUMN_NAME
3935 INTO l_curr_db_column
3936 FROM FND_DESCR_FLEX_COLUMN_USAGES EXT
3937 WHERE
3938 EXT.APPLICATION_ID = l_application_id
3939 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = l_attr_group_type
3940 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = l_attr_group_name
3941 AND EXT.END_USER_COLUMN_NAME = l_attr_name;
3942
3943
3944 end if;
3945
3946
3947 -----------------------------------------------------------------------
3948 -- First, get the Object and Attr Group IDs and Extension Table name --
3949 -----------------------------------------------------------------------
3950 SELECT EXT.ATTR_GROUP_ID
3951 ,NVL(FLX_EXT.APPLICATION_VL_NAME, FLX.APPLICATION_TABLE_NAME)
3952 INTO l_attr_group_id
3953 ,l_ext_table_vl_name
3954 FROM EGO_OBJECT_EXT_TABLES_B OBJ
3955 ,EGO_FND_DSC_FLX_CTX_EXT EXT
3956 ,FND_DESCRIPTIVE_FLEXS FLX
3957 ,EGO_FND_DESC_FLEXS_EXT FLX_EXT
3958 WHERE OBJ.EXT_TABLE_NAME = FLX.APPLICATION_TABLE_NAME
3959 AND FLX.APPLICATION_ID = l_application_id
3960 AND FLX.APPLICATION_ID = FLX_EXT.APPLICATION_ID(+)
3961 AND FLX.APPLICATION_ID = EXT.APPLICATION_ID
3962 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = l_attr_group_type
3963 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = FLX_EXT.DESCRIPTIVE_FLEXFIELD_NAME(+)
3964 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = EXT.DESCRIPTIVE_FLEXFIELD_NAME
3965 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = l_attr_group_name;
3966
3967 ---------------------------------------------------------------------------
3971 ' FROM ' || l_ext_table_vl_name ||
3968 -- Now get the count of rows from the table where the attr_value is null --
3969 ---------------------------------------------------------------------------
3970 l_dynamic_sql := ' SELECT COUNT(1)' ||
3972 ' WHERE ATTR_GROUP_ID = :1' ||
3973 ' AND ' || l_curr_db_column || ' is not null ';
3974
3975 EXECUTE IMMEDIATE l_dynamic_sql INTO l_row_count USING l_attr_group_id;
3976
3977 IF (l_row_count > 0) THEN
3978 l_attr_data_exist := FND_API.G_TRUE;
3979 END IF;
3980
3981 RETURN l_attr_data_exist;
3982
3983 END;
3984
3985 ----------------------------------------------------------------------
3986
3987 PROCEDURE Validate_Unique_Key_Attrs (
3988 p_application_id IN NUMBER
3989 ,p_attr_group_type IN VARCHAR2
3990 ,p_attr_group_name IN VARCHAR2
3991 ,p_id_list IN VARCHAR2
3992 ,x_is_valid_key OUT NOCOPY VARCHAR2
3993 ) IS
3994
3995 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Unique_Key_Attrs';
3996
3997 l_dynamic_sql VARCHAR2(17000);
3998 l_attr_group_id NUMBER;
3999 l_ext_table_vl_name VARCHAR2(30);
4000 l_object_id NUMBER;
4001 l_ext_table_metadata_obj EGO_EXT_TABLE_METADATA_OBJ;
4002 l_curr_db_column VARCHAR2(15);
4003 l_column_list VARCHAR2(15000);
4004 l_dl_col_names VARCHAR2(180);
4005 l_uk_count NUMBER;
4006
4007 TYPE DYNAMIC_CUR IS REF CURSOR;
4008 l_dynamic_cursor DYNAMIC_CUR;
4009 l_tl_table_exists VARCHAR2(1);
4010
4011 BEGIN
4012
4013 -----------------------------------------------------------------------
4014 -- First, get the Object and Attr Group IDs and Extension Table name --
4015 -----------------------------------------------------------------------
4016 SELECT OBJ.OBJECT_ID
4017 ,EXT.ATTR_GROUP_ID
4018 ,NVL(FLX_EXT.APPLICATION_VL_NAME, FLX.APPLICATION_TABLE_NAME)
4019 ,DECODE(FLX_EXT.APPLICATION_TL_TABLE_NAME, NULL, 'N', 'Y')
4020 INTO l_object_id
4021 ,l_attr_group_id
4022 ,l_ext_table_vl_name
4023 ,l_tl_table_exists
4024 FROM EGO_OBJECT_EXT_TABLES_B OBJ
4025 ,EGO_FND_DSC_FLX_CTX_EXT EXT
4026 ,FND_DESCRIPTIVE_FLEXS FLX
4027 ,EGO_FND_DESC_FLEXS_EXT FLX_EXT
4028 WHERE OBJ.EXT_TABLE_NAME = FLX.APPLICATION_TABLE_NAME
4029 AND FLX.APPLICATION_ID = p_application_id
4030 AND FLX.APPLICATION_ID = FLX_EXT.APPLICATION_ID(+)
4031 AND FLX.APPLICATION_ID = EXT.APPLICATION_ID
4032 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
4033 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = FLX_EXT.DESCRIPTIVE_FLEXFIELD_NAME(+)
4034 AND FLX.DESCRIPTIVE_FLEXFIELD_NAME = EXT.DESCRIPTIVE_FLEXFIELD_NAME
4035 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name;
4036
4037 -----------------------------------------------------
4038 -- Second, get the Extension Table metadata object --
4039 -----------------------------------------------------
4040 l_ext_table_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Ext_Table_Metadata(l_object_id);
4041
4042 --------------------------------------------------------------
4043 -- Next, start a list of columns on which to use 'Group By' --
4044 --------------------------------------------------------------
4045 l_column_list := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
4046 l_ext_table_metadata_obj.pk_column_metadata
4047 ,NULL
4048 ,'NAMES'
4049 ) || ',';
4050 IF (l_tl_table_exists = 'Y') THEN
4051 l_column_list := l_column_list || 'LANGUAGE,';
4052 END IF;
4053 l_dl_col_names := EGO_USER_ATTRS_COMMON_PVT.Get_List_For_Table_Cols(
4054 l_ext_table_metadata_obj.data_level_metadata
4055 ,NULL
4056 ,'NAMES'
4057 );
4058 IF (LENGTH(l_dl_col_names) > 0) THEN
4059 l_column_list := l_column_list || l_dl_col_names || ',';
4060 END IF;
4061
4062 -----------------------------------------------------------
4063 -- Next, use the Attribute IDs to get a list of database --
4067 ' FROM EGO_FND_DF_COL_USGS_EXT' ||
4064 -- column names to add to the current 'Group By' list --
4065 -----------------------------------------------------------
4066 l_dynamic_sql := ' SELECT APPLICATION_COLUMN_NAME' ||
4068 ' WHERE ATTR_ID IN ('||p_id_list||') ';
4069
4070 OPEN l_dynamic_cursor FOR l_dynamic_sql;
4071 LOOP
4072 FETCH l_dynamic_cursor INTO l_curr_db_column;
4073 EXIT WHEN l_dynamic_cursor%NOTFOUND;
4074
4075 l_column_list := l_column_list || l_curr_db_column || ',';
4076
4077 END LOOP;
4078 CLOSE l_dynamic_cursor;
4079
4080 ----------------------------------------------
4081 -- Trim the trailing ',' from l_column_list --
4082 ----------------------------------------------
4083 l_column_list := SUBSTR(l_column_list, 1, LENGTH(l_column_list) - LENGTH(','));
4084
4085 ------------------------------------------------------------------------
4086 -- Now find out whether the proposed Unique Key is currently violated --
4087 ------------------------------------------------------------------------
4088 l_dynamic_sql := ' SELECT COUNT(1)' ||
4089 ' FROM ' || l_ext_table_vl_name ||
4090 ' WHERE ATTR_GROUP_ID = :1' ||
4091 ' GROUP BY ' || l_column_list;
4092
4093 OPEN l_dynamic_cursor FOR l_dynamic_sql USING l_attr_group_id;
4094 LOOP
4095 FETCH l_dynamic_cursor INTO l_uk_count;
4096 EXIT WHEN (l_dynamic_cursor%NOTFOUND OR
4097 x_is_valid_key = FND_API.G_FALSE);
4098
4099 IF (l_uk_count > 1) THEN
4100 x_is_valid_key := FND_API.G_FALSE;
4101 END IF;
4102
4103 END LOOP;
4104 CLOSE l_dynamic_cursor;
4105
4106 ------------------------------------------------------------------------------
4107 -- If we got this far without adding a value to x_is_valid_key, then there --
4108 -- are no rows in the extension tables that violate the proposed Unique Key --
4109 ------------------------------------------------------------------------------
4110 IF (x_is_valid_key IS NULL) THEN
4111 x_is_valid_key := FND_API.G_TRUE;
4112 END IF;
4113
4114 EXCEPTION
4115 WHEN OTHERS THEN
4116
4117 /***
4118 Dylan wonders: did I write this? If so, why? If not, who did...and why?
4119 Maybe it was for PA integration...?
4120 ***/
4121 IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
4122 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
4123 END IF;
4124
4125 END Validate_Unique_Key_Attrs;
4126
4127 ----------------------------------------------------------------------
4128 --------------------------
4129 -- Data Level APIs --
4130 --------------------------
4131
4132 PROCEDURE Sync_Data_Level (
4133 p_api_version IN NUMBER
4134 ,p_init_msg_list IN VARCHAR2
4135 ,p_commit IN VARCHAR2
4136 ,p_transaction_type IN VARCHAR2
4137 ,p_application_id IN NUMBER
4138 ,p_attr_group_type IN VARCHAR2
4139 ,p_data_level_name IN VARCHAR2
4140 ,p_user_data_level_name IN VARCHAR2
4141 ,p_pk1_column_name IN VARCHAR2
4142 ,p_pk1_column_type IN VARCHAR2
4143 ,p_pk2_column_name IN VARCHAR2
4144 ,p_pk2_column_type IN VARCHAR2
4145 ,p_pk3_column_name IN VARCHAR2
4146 ,p_pk3_column_type IN VARCHAR2
4147 ,p_pk4_column_name IN VARCHAR2
4148 ,p_pk4_column_type IN VARCHAR2
4149 ,p_pk5_column_name IN VARCHAR2
4150 ,p_pk5_column_type IN VARCHAR2
4154 ,p_enable_pre_event IN VARCHAR2
4151 ,p_enable_defaulting IN VARCHAR2
4152 ,p_enable_view_priv IN VARCHAR2
4153 ,p_enable_edit_priv IN VARCHAR2
4155 ,p_enable_post_event IN VARCHAR2
4156 ,p_last_updated_by IN VARCHAR2
4157 ,p_last_update_date IN DATE
4158 ,p_is_nls_mode IN VARCHAR2
4159 ,x_data_level_id IN OUT NOCOPY NUMBER
4160 ,x_return_status OUT NOCOPY VARCHAR2
4161 ,x_msg_count OUT NOCOPY NUMBER
4162 ,x_msg_data OUT NOCOPY VARCHAR2
4163 ) IS
4164
4165 l_api_version NUMBER;
4166 l_api_name VARCHAR2(30);
4167 l_msg_data VARCHAR2(4000);
4168 l_data_level_id NUMBER;
4169 l_enable_pre_event VARCHAR2(1);
4170 l_enable_post_event VARCHAR2(1);
4171
4172 BEGIN
4173
4174 l_api_version := 1.0;
4175 l_api_name := 'SYNC_DATA_LEVEL';
4176 l_msg_data := NULL;
4177 code_debug(l_api_name ||' Start ');
4178
4179 -- Initialize message list even though we don't currently use it
4180 IF FND_API.To_Boolean(p_init_msg_list) THEN
4181 FND_MSG_PUB.Initialize;
4182 END IF;
4183
4184 -- Check for call compatibility
4185 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
4186 l_api_name, G_PKG_NAME)
4187 THEN
4188 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4189 END IF;
4190
4191 -- Standard start of API savepoint
4192 IF FND_API.TO_BOOLEAN(p_commit) THEN
4193 SAVEPOINT SYNC_DATA_LEVEL;
4194 END IF;
4195
4196 IF (p_transaction_type IS NULL) THEN
4197 fnd_message.set_name(G_APP_NAME, 'EGO_TRANSACTION_TYPE');
4198 l_msg_data := fnd_msg_pub.get();
4199 ELSIF p_application_id IS NULL THEN
4200 fnd_message.set_name(G_APP_NAME, 'EGO_EF_APPLICATION_ID');
4201 l_msg_data := fnd_msg_pub.get();
4202 ELSIF p_attr_group_type IS NULL THEN
4203 fnd_message.set_name(G_APP_NAME, 'EGO_EF_ATTR_GROUP_TYPE');
4204 l_msg_data := fnd_msg_pub.get();
4205 ELSIF p_data_level_name IS NULL THEN
4206 fnd_message.set_name(G_APP_NAME, 'EGO_EF_DATA_LEVEL');
4207 l_msg_data := fnd_msg_pub.get();
4208 END IF;
4209
4210 IF l_msg_data IS NOT NULL THEN
4211 fnd_message.set_name(G_APP_NAME,'EGO_PKG_MAND_VALUES_MISS1');
4212 fnd_message.set_token('PACKAGE', G_PKG_NAME ||'.'|| l_api_name);
4213 fnd_message.set_token('VALUE', l_msg_data);
4214 FND_MSG_PUB.Add;
4215 RAISE FND_API.G_EXC_ERROR;
4216 END IF;
4217 code_debug(l_api_name ||' Mandatory param validation complete '||p_transaction_type);
4218
4219 BEGIN
4220 SELECT NVL2(pre_business_event_name,NVL(p_enable_pre_event,'N'),'N'),
4221 NVL2(business_event_name,NVL(p_enable_post_event,'N'),'N')
4222 INTO l_enable_pre_event, l_enable_post_event
4223 FROM EGO_FND_DESC_FLEXS_EXT
4224 WHERE application_id = p_application_id
4225 AND descriptive_flexfield_name = p_attr_group_type;
4226 EXCEPTION
4227 WHEN NO_DATA_FOUND THEN
4228 l_enable_pre_event := 'N';
4229 l_enable_post_event := 'N';
4230 WHEN OTHERS THEN
4231 RAISE;
4232 END;
4233
4234 IF p_transaction_type = 'CREATE' THEN
4235 SELECT max(data_level_id)
4236 INTO l_data_level_id
4237 FROM ego_data_level_b
4238 WHERE application_id = p_application_id;
4239
4240 IF l_data_level_id IS NULL THEN
4241 l_data_level_id := p_application_id * 100 + 1;
4242 ELSE
4243 l_data_level_id := l_data_level_id + 1;
4244 END IF;
4245
4246 IF l_data_level_id = ((p_application_id+1) * 100) THEN
4247 fnd_message.set_name(G_APP_NAME, 'EGO_EF_DATA_LEVEL_LIMIT');
4248 FND_MSG_PUB.Add;
4249 RAISE FND_API.G_EXC_ERROR;
4250 END IF;
4251
4252 code_debug(l_api_name ||' Data level id being used in insert: '||l_data_level_id);
4253
4254 INSERT INTO EGO_DATA_LEVEL_B
4255 (data_level_id
4256 ,application_id
4257 ,attr_group_type
4258 ,data_level_name
4259 ,pk1_column_name
4260 ,pk1_column_type
4261 ,pk2_column_name
4262 ,pk2_column_type
4263 ,pk3_column_name
4264 ,pk3_column_type
4265 ,pk4_column_name
4266 ,pk4_column_type
4267 ,pk5_column_name
4268 ,pk5_column_type
4269 ,enable_defaulting
4270 ,enable_view_priv
4271 ,enable_edit_priv
4272 ,enable_pre_event
4273 ,enable_post_event
4274 ,created_by
4275 ,creation_date
4276 ,last_updated_by
4277 ,last_update_date
4278 ,last_update_login
4279 )
4280 values
4281 (l_data_level_id
4282 ,p_application_id
4283 ,p_attr_group_type
4284 ,p_data_level_name
4285 ,p_pk1_column_name
4286 ,p_pk1_column_type
4287 ,p_pk2_column_name
4288 ,p_pk2_column_type
4289 ,p_pk3_column_name
4290 ,p_pk3_column_type
4291 ,p_pk4_column_name
4292 ,p_pk4_column_type
4293 ,p_pk5_column_name
4294 ,p_pk5_column_type
4295 ,p_enable_defaulting
4296 ,p_enable_view_priv
4297 ,p_enable_edit_priv
4298 ,l_enable_pre_event
4302 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4299 ,l_enable_post_event
4300 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4301 ,NVL(p_last_update_date, SYSDATE)
4303 ,NVL(p_last_update_date, SYSDATE)
4304 ,G_CURRENT_LOGIN_ID
4305 );
4306
4307 INSERT INTO EGO_DATA_LEVEL_TL
4308 (data_level_id
4309 ,user_data_level_name
4310 ,language
4311 ,source_lang
4312 ,created_by
4313 ,creation_date
4314 ,last_updated_by
4315 ,last_update_date
4316 ,last_update_login
4317 )
4318 SELECT
4319 l_data_level_id
4320 ,NVL(p_user_data_level_name, p_data_level_name)
4321 ,l.language_code
4322 ,USERENV('LANG')
4323 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4324 ,NVL(p_last_update_date, SYSDATE)
4325 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4326 ,NVL(p_last_update_date, SYSDATE)
4327 ,G_CURRENT_LOGIN_ID
4328 FROM FND_LANGUAGES L
4329 WHERE L.INSTALLED_FLAG in ('I', 'B');
4330
4331 ELSIF p_transaction_type = 'UPDATE' THEN
4332 SELECT data_level_id
4333 INTO l_data_level_id
4334 FROM ego_data_level_b
4335 WHERE application_id = p_application_id
4336 AND attr_group_type = p_attr_group_type
4337 AND data_level_name = p_data_level_name;
4338 code_debug(l_api_name ||' Data level id being used in update: '||l_data_level_id);
4339
4340 IF x_data_level_id IS NOT NULL AND x_data_level_id <> l_data_level_id THEN
4341 fnd_message.set_name(G_APP_NAME, 'EGO_EF_INVALID_DATA_LEVEL');
4342 FND_MSG_PUB.Add;
4343 RAISE FND_API.G_EXC_ERROR;
4344 END IF;
4345 UPDATE EGO_DATA_LEVEL_TL
4346 SET user_data_level_name = NVL(p_user_data_level_name, p_data_level_name)
4347 ,source_lang = userenv('LANG') -- Bug 6964013
4348 ,last_updated_by = NVL(p_last_updated_by, G_CURRENT_USER_ID)
4349 ,last_update_date = NVL(p_last_update_date, SYSDATE)
4350 ,last_update_login = G_CURRENT_LOGIN_ID
4351 WHERE data_level_id = l_data_level_id
4352 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
4353
4354 IF NOT FND_API.to_boolean(p_is_nls_mode) THEN
4355 UPDATE EGO_DATA_LEVEL_B
4356 SET pk1_column_name = p_pk1_column_name
4357 ,pk1_column_type = p_pk2_column_type
4358 ,pk2_column_name = p_pk2_column_name
4359 ,pk2_column_type = p_pk2_column_type
4360 ,pk3_column_name = p_pk3_column_name
4361 ,pk3_column_type = p_pk3_column_type
4362 ,pk4_column_name = p_pk4_column_name
4363 ,pk4_column_type = p_pk4_column_type
4364 ,pk5_column_name = p_pk5_column_name
4365 ,pk5_column_type = p_pk5_column_type
4366 ,enable_defaulting = p_enable_defaulting
4367 ,enable_view_priv = p_enable_view_priv
4368 ,enable_edit_priv = p_enable_edit_priv
4369 ,enable_pre_event = l_enable_pre_event
4370 ,enable_post_event = l_enable_post_event
4371 ,last_updated_by = NVL(p_last_updated_by, G_CURRENT_USER_ID)
4372 ,last_update_date = NVL(p_last_update_date, SYSDATE)
4373 ,last_update_login = G_CURRENT_LOGIN_ID
4374 WHERE data_level_id = l_data_level_id;
4375 END IF;
4376 END IF;
4377
4378 IF FND_API.TO_BOOLEAN(p_commit) THEN
4379 COMMIT WORK;
4380 END IF;
4381 x_data_level_id := l_data_level_id;
4382 x_return_status := FND_API.G_RET_STS_SUCCESS;
4383 code_debug(l_api_name ||' Done ');
4384
4385 EXCEPTION
4386 WHEN FND_API.G_EXC_ERROR THEN
4387 code_debug(l_api_name ||' Exception - FND_API.G_EXC_ERROR '||x_msg_data);
4388 IF FND_API.TO_BOOLEAN(p_commit) THEN
4389 ROLLBACK to SYNC_DATA_LEVEL;
4390 END IF;
4391 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
4392 ,p_count => x_msg_count
4393 ,p_data => x_msg_data);
4394 x_return_status := FND_API.G_RET_STS_ERROR;
4395
4396 WHEN OTHERS THEN
4397 code_debug(l_api_name ||' Exception - Others '||SQLERRM);
4398 IF FND_API.TO_BOOLEAN(p_commit) THEN
4399 ROLLBACK to SYNC_DATA_LEVEL;
4400 END IF;
4401 x_return_status := FND_API.G_RET_STS_ERROR;
4402
4403 END Sync_Data_Level;
4404 ----------------------------------------------------------------------
4405
4406 ----------------------------------------------------------------------
4407 ---------------------------------
4408 -- Data Level Association APIs --
4409 ---------------------------------
4410
4411 PROCEDURE Sync_dl_assoc (
4412 p_api_version IN NUMBER
4413 ,p_init_msg_list IN VARCHAR2
4414 ,p_commit IN VARCHAR2
4415 ,p_transaction_type IN VARCHAR2
4416 ,p_attr_group_id IN NUMBER
4417 ,p_application_id IN NUMBER
4418 ,p_attr_group_type IN VARCHAR2
4419 ,p_attr_group_name IN VARCHAR2
4420 ,p_data_level_id IN NUMBER
4421 ,p_data_level_name IN VARCHAR2
4422 ,p_defaulting IN VARCHAR2
4423 ,p_defaulting_name IN VARCHAR2
4424 ,p_view_priv_id IN NUMBER
4425 ,p_view_priv_name IN VARCHAR2
4429 ,p_user_edit_priv_name IN VARCHAR2
4426 ,p_user_view_priv_name IN VARCHAR2
4427 ,p_edit_priv_id IN NUMBER
4428 ,p_edit_priv_name IN VARCHAR2
4430 ,p_raise_pre_event IN VARCHAR2
4431 ,p_raise_post_event IN VARCHAR2
4432 ,p_last_updated_by IN VARCHAR2
4433 ,p_last_update_date IN DATE
4434 ,x_return_status OUT NOCOPY VARCHAR2
4435 ,x_msg_count OUT NOCOPY NUMBER
4436 ,x_msg_data OUT NOCOPY VARCHAR2
4437 ) IS
4438
4439 l_api_version NUMBER;
4440 l_api_name VARCHAR2(30);
4441 l_msg_data VARCHAR2(4000);
4442 l_attr_group_id NUMBER;
4443 l_defaulting VARCHAR2(1);
4444 l_view_priv_id NUMBER;
4445 l_edit_priv_id NUMBER;
4446 l_raise_pre_event VARCHAR2(1);
4447 l_raise_post_event VARCHAR2(1);
4448 l_data_level_rec ego_data_level_b%ROWTYPE;
4449 l_msg_name VARCHAR2(30);
4450 BEGIN
4451
4452 l_api_version := 1.0;
4453 l_api_name := 'SYNC_DL_ASSOC';
4454 l_msg_data := NULL;
4455 l_msg_name := 'EGO_IPI_INVALID_VALUE';
4456 code_debug(l_api_name ||' Start ');
4457
4458 -- Initialize message list even though we don't currently use it
4459 IF FND_API.To_Boolean(p_init_msg_list) THEN
4460 FND_MSG_PUB.Initialize;
4461 END IF;
4462
4463 -- Check for call compatibility
4464 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
4465 l_api_name, G_PKG_NAME)
4466 THEN
4467 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4468 END IF;
4469
4470 -- Standard start of API savepoint
4471 IF FND_API.TO_BOOLEAN(p_commit) THEN
4472 SAVEPOINT SYNC_DL_ASSOC;
4473 END IF;
4474
4475 IF (p_transaction_type IS NULL) THEN
4476 fnd_message.set_name(G_APP_NAME, 'EGO_TRANSACTION_TYPE');
4477 l_msg_data := fnd_msg_pub.get();
4478 ELSIF p_attr_group_id IS NULL AND
4479 p_application_id IS NULL AND
4480 p_attr_group_type IS NULL AND
4481 p_attr_group_name IS NULL THEN
4482 fnd_message.set_name(G_APP_NAME, 'EGO_EF_ATTR_GRP');
4483 l_msg_data := fnd_msg_pub.get();
4484 ELSIF p_data_level_id IS NULL AND
4485 p_data_level_name IS NULL THEN
4486 fnd_message.set_name(G_APP_NAME, 'EGO_EF_DATA_LEVEL');
4487 l_msg_data := fnd_msg_pub.get();
4488 END IF;
4489
4490 IF l_msg_data IS NOT NULL THEN
4491 fnd_message.set_name(G_APP_NAME,'EGO_PKG_MAND_VALUES_MISS1');
4492 fnd_message.set_token('PACKAGE', G_PKG_NAME ||'.'|| l_api_name);
4493 fnd_message.set_token('VALUE', l_msg_data);
4494 FND_MSG_PUB.Add;
4495 RAISE FND_API.G_EXC_ERROR;
4496 END IF;
4497 code_debug(l_api_name ||' Mandatory param validation complete '||p_transaction_type);
4498
4499 -- attr group check
4500 BEGIN
4501 IF p_attr_group_id IS NULL THEN
4502 SELECT attr_group_id
4503 INTO l_attr_group_id
4504 FROM ego_fnd_dsc_flx_ctx_ext
4505 WHERE application_id = p_application_id
4506 AND descriptive_flexfield_name = p_attr_group_type
4507 AND descriptive_flex_context_code = p_attr_group_name;
4508 ELSE
4509 SELECT attr_group_id
4510 INTO l_attr_group_id
4511 FROM ego_fnd_dsc_flx_ctx_ext
4512 WHERE attr_group_id = p_attr_group_id;
4513 END IF;
4514 code_debug(l_api_name ||' Attr Group Id '||l_attr_group_id);
4515 EXCEPTION
4516 WHEN NO_DATA_FOUND THEN
4517 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4518 IF p_attr_group_id IS NULL THEN
4519 FND_MESSAGE.Set_Token('NAME','Attribute Group ' );
4520 FND_MESSAGE.Set_Token('VALUE',p_attr_group_type||' - '||p_attr_group_name );
4521 ELSE
4522 FND_MESSAGE.Set_Token('NAME','Attribute Id' );
4523 FND_MESSAGE.Set_Token('VALUE',l_attr_group_id);
4524 END IF;
4525 FND_MSG_PUB.Add;
4526 RAISE FND_API.G_EXC_ERROR;
4527 END;
4528
4529 -- data level check
4530 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);
4531 BEGIN
4532 IF p_data_level_id IS NULL THEN
4533 SELECT *
4534 INTO l_data_level_rec
4535 FROM ego_data_level_b
4536 WHERE data_level_name = p_data_level_name
4537 AND attr_group_type = p_attr_group_type
4538 AND application_id = p_application_id;
4539 ELSE
4540 SELECT *
4541 INTO l_data_level_rec
4542 FROM ego_data_level_b
4543 WHERE data_level_name = p_data_level_id;
4544 END IF;
4545 code_debug(l_api_name ||' Data Level Id '||l_data_level_rec.data_level_id);
4546 EXCEPTION
4547 WHEN NO_DATA_FOUND THEN
4548 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4549 IF p_data_level_id IS NULL THEN
4550 FND_MESSAGE.Set_Token('NAME','Data Level' );
4551 FND_MESSAGE.Set_Token('VALUE', p_data_level_name);
4552 ELSE
4553 FND_MESSAGE.Set_Token('NAME','Data Level Id' );
4554 FND_MESSAGE.Set_Token('VALUE',p_data_level_id);
4555 END IF;
4556 FND_MSG_PUB.Add;
4557 RAISE FND_API.G_EXC_ERROR;
4558 END;
4559 code_debug(l_api_name ||' Data Level id '||l_data_level_rec.data_level_id);
4563 IF l_data_level_rec.enable_defaulting = 'Y' THEN
4560
4561 -- defaulting check check
4562 BEGIN
4564 IF p_defaulting IS NOT NULL THEN
4565 SELECT lookup_code
4566 INTO l_defaulting
4567 FROM fnd_lookup_values
4568 WHERE lookup_type = 'EGO_EF_AG_DL_BEHAVIOR'
4569 AND lookup_code = p_defaulting
4570 AND language = USERENV('LANG');
4571 ELSIF p_defaulting_name IS NOT NULL THEN
4572 SELECT lookup_code
4573 INTO l_defaulting
4574 FROM fnd_lookup_values
4575 WHERE lookup_type = 'EGO_EF_AG_DL_BEHAVIOR'
4576 AND meaning = p_defaulting_name
4577 AND language = USERENV('LANG');
4578 ELSE
4579 l_defaulting := '';
4580 END IF;
4581 ELSE
4582 IF p_defaulting IS NOT NULL OR p_defaulting_name IS NOT NULL THEN
4583 FND_MESSAGE.SET_NAME(G_APP_NAME,'EGO_EF_DEFAULT_NOT_ALLOWED');
4584 FND_MSG_PUB.Add;
4585 RAISE FND_API.G_EXC_ERROR;
4586 END IF;
4587 END IF;
4588 EXCEPTION
4589 WHEN NO_DATA_FOUND THEN
4590 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4591 IF p_defaulting IS NULL THEN
4592 FND_MESSAGE.Set_Token('NAME','Defaulting ' );
4593 FND_MESSAGE.Set_Token('VALUE',p_defaulting_name );
4594 ELSE
4595 FND_MESSAGE.Set_Token('NAME','Defaulting ' );
4596 FND_MESSAGE.Set_Token('VALUE',p_defaulting);
4597 END IF;
4598 FND_MSG_PUB.Add;
4599 RAISE FND_API.G_EXC_ERROR;
4600 END;
4601 code_debug(l_api_name ||' Defaulting '||l_defaulting);
4602
4603 -- view priv check
4604 BEGIN
4605 IF l_data_level_rec.enable_view_priv = 'Y' THEN
4606 IF p_view_priv_id IS NOT NULL THEN
4607 SELECT function_id
4608 INTO l_view_priv_id
4609 FROM fnd_form_functions
4610 WHERE function_id = p_view_priv_id;
4611 ELSIF p_view_priv_name IS NOT NULL THEN
4612 SELECT function_id
4613 INTO l_view_priv_id
4614 FROM fnd_form_functions
4615 WHERE function_name = p_view_priv_name;
4616 ELSIF p_user_view_priv_name IS NOT NULL THEN
4617 SELECT function_id
4618 INTO l_view_priv_id
4619 FROM fnd_form_functions_vl
4620 WHERE user_function_name = p_user_view_priv_name;
4621 ELSE
4622 l_view_priv_id := NULL;
4623 END IF;
4624 ELSE
4625 IF p_view_priv_id IS NOT NULL OR p_view_priv_name IS NOT NULL THEN
4626 -- flash message you cannot view privileges
4627 fnd_message.set_name(G_APP_NAME,'EGO_VIEW_PRIV_NOT_ALLOWED');
4628 FND_MSG_PUB.Add;
4629 RAISE FND_API.G_EXC_ERROR;
4630 END IF;
4631 END IF;
4632 EXCEPTION
4633 WHEN NO_DATA_FOUND THEN
4634 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4635 IF p_view_priv_id IS NOT NULL THEN
4636 FND_MESSAGE.Set_Token('NAME','View Privilege' );
4637 FND_MESSAGE.Set_Token('VALUE',p_view_priv_id );
4638 ELSIF p_view_priv_name IS NOT NULL THEN
4639 FND_MESSAGE.Set_Token('NAME','View Privilege' );
4640 FND_MESSAGE.Set_Token('VALUE',p_view_priv_name);
4641 ELSE
4642 FND_MESSAGE.set_token('NAME','View Privilege');
4643 FND_MESSAGE.set_token('VALUE',p_user_view_priv_name);
4644 END IF;
4645 FND_MSG_PUB.Add;
4646 RAISE FND_API.G_EXC_ERROR;
4647 END;
4648 code_debug(l_api_name ||' View Priv id '||l_view_priv_id);
4649
4650 -- edit priv check
4651 BEGIN
4652 IF l_data_level_rec.enable_edit_priv = 'Y' THEN
4653 IF p_edit_priv_id IS NOT NULL THEN
4654 SELECT function_id
4655 INTO l_edit_priv_id
4656 FROM fnd_form_functions
4657 WHERE function_id = p_edit_priv_id;
4658 ELSIF p_edit_priv_name IS NOT NULL THEN
4659 SELECT function_id
4660 INTO l_edit_priv_id
4661 FROM fnd_form_functions
4662 WHERE function_name = p_edit_priv_name;
4663 ELSIF p_user_edit_priv_name IS NOT NULL THEN
4664 SELECT function_id
4665 INTO l_edit_priv_id
4666 FROM fnd_form_functions_vl
4667 WHERE user_function_name = p_user_edit_priv_name;
4668 ELSE
4669 l_edit_priv_id := NULL;
4670 END IF;
4671 ELSE
4672 IF p_edit_priv_id IS NOT NULL OR p_edit_priv_name IS NOT NULL THEN
4673 -- flash message you cannot view privileges
4674 fnd_message.set_name(G_APP_NAME,'EGO_EDIT_PRIV_NOT_ALLOWED');
4675 FND_MSG_PUB.Add;
4676 RAISE FND_API.G_EXC_ERROR;
4677 END IF;
4678 END IF;
4679 EXCEPTION
4680 WHEN NO_DATA_FOUND THEN
4681 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4682 IF p_edit_priv_id IS NOT NULL THEN
4683 FND_MESSAGE.Set_Token('NAME','Edit Privilege' );
4684 FND_MESSAGE.Set_Token('VALUE',p_edit_priv_id );
4685 ELSIF p_edit_priv_name IS NOT NULL THEN
4686 FND_MESSAGE.Set_Token('NAME','Edit Privilege' );
4687 FND_MESSAGE.Set_Token('VALUE',p_edit_priv_name);
4688 ELSE
4689 FND_MESSAGE.set_token('NAME','Edit Privilege');
4690 FND_MESSAGE.set_token('VALUE',p_user_edit_priv_name);
4691 END IF;
4692 FND_MSG_PUB.Add;
4693 RAISE FND_API.G_EXC_ERROR;
4694 END;
4695 code_debug(l_api_name ||' Edit Priv id '||l_edit_priv_id);
4696
4700 FND_MSG_PUB.Add;
4697 IF NVL(p_raise_pre_event,'N') IN ('Y', 'N') THEN
4698 IF l_data_level_rec.enable_pre_event = 'N' AND NVL(p_raise_pre_event,'N') = 'Y' THEN
4699 fnd_message.set_name(G_APP_NAME,'EGO_PRE_EVENT_NOT_ALLOWED');
4701 RAISE FND_API.G_EXC_ERROR;
4702 ELSE
4703 l_raise_pre_event := NVL(p_raise_pre_event,'N');
4704 END IF;
4705 ELSE
4706 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4707 FND_MESSAGE.Set_Token('NAME','Pre Event' );
4708 FND_MESSAGE.Set_Token('VALUE',l_raise_pre_event );
4709 FND_MSG_PUB.Add;
4710 RAISE FND_API.G_EXC_ERROR;
4711 END IF;
4712 code_debug(l_api_name ||' Pre Event '||l_raise_pre_event);
4713
4714 IF NVL(p_raise_post_event,'N') IN ('Y', 'N') THEN
4715 IF l_data_level_rec.enable_post_event = 'N' AND NVL(p_raise_post_event,'N') = 'Y' THEN
4716 fnd_message.set_name(G_APP_NAME,'EGO_POST_EVENT_NOT_ALLOWED');
4717 FND_MSG_PUB.Add;
4718 RAISE FND_API.G_EXC_ERROR;
4719 ELSE
4720 l_raise_post_event := NVL(p_raise_post_event,'N');
4721 END IF;
4722 ELSE
4723 FND_MESSAGE.Set_Name(G_APP_NAME, l_msg_name);
4724 FND_MESSAGE.Set_Token('NAME','Post Event' );
4725 FND_MESSAGE.Set_Token('VALUE',l_raise_post_event );
4726 FND_MSG_PUB.Add;
4727 RAISE FND_API.G_EXC_ERROR;
4728 END IF;
4729 code_debug(l_api_name ||' Post Event '||l_raise_post_event);
4730
4731 IF p_transaction_type = 'CREATE' THEN
4732 INSERT INTO EGO_ATTR_GROUP_DL
4733 (attr_group_id
4734 ,data_level_id
4735 ,defaulting
4736 ,view_privilege_id
4737 ,edit_privilege_id
4738 ,raise_pre_event
4739 ,raise_post_event
4740 ,created_by
4741 ,creation_date
4742 ,last_updated_by
4743 ,last_update_date
4744 ,last_update_login
4745 )
4746 VALUES
4747 (l_attr_group_id
4748 ,l_data_level_rec.data_level_id
4749 ,l_defaulting
4750 ,l_view_priv_id
4751 ,l_edit_priv_id
4752 ,l_raise_pre_event
4753 ,l_raise_post_event
4754 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4755 ,NVL(p_last_update_date, SYSDATE)
4756 ,NVL(p_last_updated_by, G_CURRENT_USER_ID)
4757 ,NVL(p_last_update_date, SYSDATE)
4758 ,G_CURRENT_LOGIN_ID
4759 );
4760 ELSE
4761 UPDATE EGO_ATTR_GROUP_DL
4762 SET defaulting = l_defaulting
4763 ,view_privilege_id = l_view_priv_id
4764 ,edit_privilege_id = l_edit_priv_id
4765 ,raise_pre_event = l_raise_pre_event
4766 ,raise_post_event = l_raise_post_event
4767 ,last_updated_by = NVL(p_last_updated_by, G_CURRENT_USER_ID)
4768 ,last_update_date = NVL(p_last_update_date, SYSDATE)
4769 ,last_update_login = G_CURRENT_LOGIN_ID
4770 where attr_group_id = l_attr_group_id and data_level_id =l_data_level_rec.data_level_id;
4771 END IF;
4772
4773 IF FND_API.TO_BOOLEAN(p_commit) THEN
4774 COMMIT WORK;
4775 END IF;
4776
4777 x_return_status := FND_API.G_RET_STS_SUCCESS;
4778 code_debug(l_api_name ||' Done ');
4779
4780 EXCEPTION
4781 WHEN FND_API.G_EXC_ERROR THEN
4782 code_debug(l_api_name ||' Exception - FND_API.G_EXC_ERROR '||x_msg_data);
4783 IF FND_API.TO_BOOLEAN(p_commit) THEN
4784 ROLLBACK to SYNC_DL_ASSOC;
4785 END IF;
4786 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
4787 ,p_count => x_msg_count
4788 ,p_data => x_msg_data);
4789 x_return_status := FND_API.G_RET_STS_ERROR;
4790
4791 WHEN OTHERS THEN
4792 code_debug(l_api_name ||' Exception - Others '||SQLERRM);
4793 IF FND_API.TO_BOOLEAN(p_commit) THEN
4794 ROLLBACK to SYNC_DL_ASSOC;
4795 END IF;
4796 x_return_status := FND_API.G_RET_STS_ERROR;
4797
4798 END Sync_dl_assoc;
4799
4800 ----------------------------------------------------------------------
4801
4802 --------------------
4803 -- Attribute APIs --
4804 --------------------
4805
4806 ----------------------------------------------------------------------
4807
4808 PROCEDURE Create_Attribute (
4809 p_api_version IN NUMBER
4810 ,p_application_id IN NUMBER
4811 ,p_attr_group_type IN VARCHAR2
4812 ,p_attr_group_name IN VARCHAR2
4813 ,p_internal_name IN VARCHAR2
4814 ,p_display_name IN VARCHAR2
4815 ,p_description IN VARCHAR2
4816 ,p_sequence IN NUMBER
4817 ,p_data_type IN VARCHAR2
4818 ,p_required IN VARCHAR2
4819 ,p_searchable IN VARCHAR2
4820 ,p_column IN VARCHAR2
4821 ,p_is_column_indexed IN VARCHAR2
4822 ,p_value_set_id IN NUMBER
4823 ,p_info_1 IN VARCHAR2 DEFAULT NULL
4824 ,p_default_value IN VARCHAR2
4825 ,p_unique_key_flag IN VARCHAR2
4826 ,p_enabled IN VARCHAR2
4827 ,p_display IN VARCHAR2
4828 ,p_uom_class IN VARCHAR2
4829 ,p_control_level IN NUMBER DEFAULT 1 --JDEJESU: NULL for 11.5.10E
4833 ,p_customization_level IN VARCHAR2 DEFAULT 'A'
4830 ,p_attribute_code IN VARCHAR2 DEFAULT NULL
4831 ,p_view_in_hierarchy_code IN VARCHAR2 DEFAULT 'A'
4832 ,p_edit_in_hierarchy_code IN VARCHAR2 DEFAULT 'A'
4834 ,p_owner IN NUMBER DEFAULT NULL
4835 ,p_lud IN DATE DEFAULT SYSDATE
4836 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
4837 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
4838 ,x_return_status OUT NOCOPY VARCHAR2
4839 ,x_errorcode OUT NOCOPY NUMBER
4840 ,x_msg_count OUT NOCOPY NUMBER
4841 ,x_msg_data OUT NOCOPY VARCHAR2
4842 ) IS
4843
4844 l_api_name CONSTANT VARCHAR2(30) := 'Create_Attribute';
4845
4846 --we don't use l_api_version yet, but eventually we might:
4847 --if we change required parameters, version goes from n.x to (n+1).x
4848 --if we change optional parameters, version goes from x.n to x.(n+1)
4849 l_api_version CONSTANT NUMBER := 1.0;
4850
4851 l_sequence NUMBER;
4852 l_data_type_is_trans_text BOOLEAN;
4853 l_col_data_type VARCHAR2(1);
4854 l_col_width NUMBER;
4855 l_required VARCHAR2(1);
4856 l_searchable VARCHAR2(1);
4857 l_unique_key_flag VARCHAR2(1);
4858 l_enabled VARCHAR2(1);
4859 l_display VARCHAR2(1);
4860 l_is_column_correct BOOLEAN := TRUE;
4861 l_is_column_indexed VARCHAR2(1);
4862 l_is_chg_column_indexed VARCHAR2(1);
4863 l_table_name VARCHAR2(30);
4864 l_chg_table_name VARCHAR2(30);
4865 l_valid_uom_column VARCHAR2(300);
4866
4867 --Bug 5443697
4868 e_attr_starts_with_num EXCEPTION;
4869 e_attr_starts_with_und_sc EXCEPTION;
4870 l_start_num VARCHAR2(10);
4871 l_start_und_sc VARCHAR2(10);
4872
4873 e_attr_dup_seq_error EXCEPTION;
4874 e_first_attr_cbox EXCEPTION;
4875 e_col_data_type_error EXCEPTION;
4876 e_vs_data_type_error EXCEPTION;
4877 e_no_vs_for_id_error EXCEPTION;
4878 e_bad_info_1_error EXCEPTION;
4879 e_uom_not_allowed EXCEPTION;
4880 e_default_value_len_err EXCEPTION;
4881 e_col_internal_name_error EXCEPTION; --vkeerthi - Fix for bug 5884003.
4882 --Bug 4703510
4883 l_fnd_exists VARCHAR2(1) ;
4884 l_ego_exists VARCHAR2(1);
4885 l_value_set_id FND_DESCR_FLEX_COLUMN_USAGES.flex_value_set_id%TYPE;
4886 l_multi_row_flag VARCHAR2(2);
4887 l_min_seq NUMBER;
4888
4889
4890 BEGIN
4891
4892 -- Standard start of API savepoint
4893 IF FND_API.TO_BOOLEAN(p_commit) THEN
4894 SAVEPOINT Create_Attribute_PUB;
4895 END IF;
4896
4897 -- Check for call compatibility
4898 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
4899 l_api_name, G_PKG_NAME)
4900 THEN
4901 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4902 END IF;
4903 -- Initialize message list even though we don't currently use it
4904 IF FND_API.To_Boolean(p_init_msg_list) THEN
4905 FND_MSG_PUB.Initialize;
4906 END IF;
4907 --Bug 4703510
4908 --check if the Attribute name starts with a number
4909 --Bug 5443697
4910 has_Num_Start_char (p_internal_name =>p_internal_name,
4911 x_start_num => l_start_num);
4912 IF (l_start_num = 'Y') THEN
4913 RAISE e_attr_starts_with_num;
4914 END IF ;
4915 --check if the Attribute name starts with an under score
4916 --Bug 5443697
4917 has_Given_Char_As_Start_char (p_internal_name =>p_internal_name,
4918 p_char_set =>'_',
4919 x_start_und_sc => l_start_und_sc);
4920 IF (l_start_und_sc = 'Y') THEN
4921 RAISE e_attr_starts_with_und_sc;
4922 END IF ;
4923
4924 Get_fnd_ego_record_exists (
4925 p_context=>'ATTRIBUTE'
4926 ,p_application_id => p_application_id
4927 ,p_attr_group_type => p_attr_group_type
4928 ,p_attr_group_name => p_attr_group_name
4929 ,p_internal_name => p_internal_name
4930 ,x_fnd_exists => l_fnd_exists
4931 ,x_ego_exists => l_ego_exists
4932 );
4933
4934 -----------------------------------
4935 -----------------------------------------------------------------------------
4936 -- First we default the following parameters in case user didn't pass them --
4937 -----------------------------------------------------------------------------
4938 IF (p_sequence IS NOT NULL) THEN
4939 --commenting this out as the flags l_fnd_exists and l_ego_exists take care of this now.
4940 -- Make sure passed-in sequence does not already exist
4941 SELECT COUNT(*)
4942 INTO l_sequence
4943 FROM FND_DESCR_FLEX_COLUMN_USAGES
4944 WHERE APPLICATION_ID = p_application_id
4945 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
4946 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
4950 RAISE e_attr_dup_seq_error;
4947 AND COLUMN_SEQ_NUM = p_sequence;
4948
4949 IF (l_fnd_exists <> 'Y' AND l_sequence > 0) THEN
4951 ELSE
4952 l_sequence := p_sequence;
4953 END IF;
4954
4955
4956 ELSE
4957 -- If user didn't pass in a sequence, add 10 to highest one (or start with 10) --
4958 SELECT MAX(COLUMN_SEQ_NUM)
4959 INTO l_sequence
4960 FROM FND_DESCR_FLEX_COLUMN_USAGES
4961 WHERE APPLICATION_ID = p_application_id
4962 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
4963 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
4964
4965 l_sequence := NVL(l_sequence, 0) + 10;
4966 END IF;
4967
4968 -- Vkeerthi - Fix for bug 5884003.
4969 -- Checking if Attribute's internal name is a keyword.
4970 IF (p_internal_name IS NOT NULL) THEN
4971 BEGIN
4972 EXECUTE IMMEDIATE 'SELECT NULL AS ' || p_internal_name || ' FROM DUAL';
4973 EXCEPTION
4974 WHEN OTHERS THEN
4975 RAISE e_col_internal_name_error;
4976 END;
4977 END IF;
4978 -- End of fix for bug 5884003
4979
4980
4981 IF (p_display = EGO_EXT_FWK_PUB.G_CHECKBOX_DISP_TYPE
4982 OR p_display =EGO_EXT_FWK_PUB.G_RADIO_DISP_TYPE ) THEN --bugFix:5292226
4983
4984 SELECT MULTI_ROW
4985 INTO l_multi_row_flag
4986 FROM EGO_FND_DSC_FLX_CTX_EXT
4987 WHERE APPLICATION_ID = p_application_id
4988 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
4989 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
4990
4991 IF (l_multi_row_flag = 'Y') THEN
4992
4993 SELECT MIN(COLUMN_SEQ_NUM)
4994 INTO l_min_seq
4995 FROM FND_DESCR_FLEX_COLUMN_USAGES
4996 WHERE APPLICATION_ID = p_application_id
4997 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
4998 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
4999
5000 IF (l_sequence <= l_min_seq OR l_min_seq IS NULL) THEN
5001 RAISE e_first_attr_cbox;
5002 END IF;
5003
5004 END IF;
5005
5006 END IF;
5007
5008
5009
5010 l_required := NVL(p_required, 'N');
5011 l_searchable := NVL(p_searchable, 'N');
5012 l_unique_key_flag := NVL(p_unique_key_flag, 'N');
5013 l_enabled := NVL(p_enabled, 'Y');
5014 l_display := NVL(p_display, 'T');
5015
5016 ------------------------------------------------------------------------
5017 -- Find the correct table name for use in validating column data type --
5018 ------------------------------------------------------------------------
5019 l_data_type_is_trans_text := (p_data_type = G_TRANS_TEXT_DATA_TYPE);
5020 IF (l_data_type_is_trans_text) THEN
5021 l_table_name := Get_TL_Table_Name(p_application_id
5022 ,p_attr_group_type);
5023 l_chg_table_name:=Get_Attr_Changes_TL_Table(p_application_id => p_application_id
5024 ,p_attr_group_type => p_attr_group_type);--for getting the pending table
5025 ELSE
5026 l_table_name := Get_Table_Name(p_application_id
5027 ,p_attr_group_type);
5028 l_chg_table_name:=Get_Attr_Changes_B_Table(p_application_id => p_application_id
5029 ,p_attr_group_type => p_attr_group_type);--for getting the pending table
5030
5031 END IF;--IF (l_data_type_is_trans_text)
5032
5033
5034 BEGIN
5035
5036 SELECT COLUMN_TYPE , WIDTH
5037 INTO l_col_data_type, l_col_width
5038 FROM FND_COLUMNS
5039 WHERE COLUMN_NAME = p_column
5040 AND TABLE_ID = (SELECT TABLE_ID
5041 FROM FND_TABLES
5042 WHERE TABLE_NAME = l_table_name);
5043
5044 IF (((p_data_type = G_CHAR_DATA_TYPE OR
5045 p_data_type = G_TRANS_TEXT_DATA_TYPE) AND
5046 l_col_data_type <> 'V') OR
5047 (p_data_type = G_NUMBER_DATA_TYPE AND l_col_data_type <> 'N') OR
5048 ((p_data_type = G_DATE_DATA_TYPE OR
5049 p_data_type = G_DATE_TIME_DATA_TYPE) AND
5050 l_col_data_type <> 'D')) THEN
5051
5052 /***
5053 TO DO: right now we can't verify that TransText Attributes use TL-type columns,
5054 because we can't rely on the column being named 'TL_EXT_ATTR%' and we aren't
5055 using FND_COLUMNS's TRANSLATE_FLAG column yet; but we should be, and we should
5056 add to the IF check above that if the data type is TransText and the column's
5057 TRANSLATE_FLAG isn't 'Y' then we should error out.
5058 ***/
5059
5060 RAISE e_col_data_type_error;
5061
5062 END IF;
5063
5064 IF ( (p_data_type = G_CHAR_DATA_TYPE OR
5065 p_data_type = G_TRANS_TEXT_DATA_TYPE) AND
5066 LENGTH(p_default_value) > l_col_width )THEN
5067
5068 RAISE e_default_value_len_err;
5069
5070 END IF;
5071
5072 EXCEPTION
5073 WHEN NO_DATA_FOUND THEN
5074 -- whoever owns the table didn't seed the column correctly
5075 RAISE e_col_data_type_error;
5076 END;
5077
5078 -- correct datatype and column name are passed
5079
5080 -----------------------------------------------------------------------------------
5084 -- bug 3875730 --
5081 -- If the UOM Class is not null we need to make sure that we have --
5082 -- a corresponding database column in user workbench --
5083 -- to store the UOM Code --
5085 -----------------------------------------------------------------------------------
5086 IF(p_uom_class IS NOT NULL) THEN
5087
5088 l_valid_uom_column := check_Uom_Column_Exists(p_column , l_table_name );
5089
5090 IF l_valid_uom_column IS NULL THEN
5091 RAISE e_uom_not_allowed;
5092 ELSIF l_valid_uom_column <> '1' THEN
5093 l_valid_uom_column := check_Uom_Col_In_Use ( p_application_id
5094 ,p_attr_group_type
5095 ,p_attr_group_name
5096 ,p_internal_name
5097 ,l_valid_uom_column
5098 );
5099 IF l_valid_uom_column IS NOT NULL THEN
5100 RAISE e_uom_not_allowed;
5101 END IF ;
5102 END IF ;
5103 END IF ;
5104 -------------------------------------------------------------------------------------
5105 -- Make sure that if a Value Set was passed in, it's compatible with the data type --
5106 -------------------------------------------------------------------------------------
5107 IF (p_value_set_id > 0) THEN
5108 DECLARE
5109 l_value_set_format_code VARCHAR2(1);
5110 BEGIN
5111
5112 SELECT FORMAT_TYPE
5113 INTO l_value_set_format_code
5114 FROM FND_FLEX_VALUE_SETS
5115 WHERE FLEX_VALUE_SET_ID = p_value_set_id;
5116
5117 IF (l_value_set_format_code IS NULL OR
5118 (l_value_set_format_code <> p_data_type)) THEN
5119 RAISE e_vs_data_type_error;
5120 END IF;
5121
5122 EXCEPTION
5123 WHEN NO_DATA_FOUND THEN
5124 RAISE e_no_vs_for_id_error;
5125 END;
5126 END IF;
5127
5128 ---------------------------------------------
5129 -- If p_info_1 is not null, we validate it --
5130 ---------------------------------------------
5131 IF (p_info_1 IS NOT NULL) THEN
5132 DECLARE
5133 l_tokenized_url_dummy VARCHAR(10000);
5134 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
5135 l_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
5136 BEGIN
5137 l_attr_group_metadata_obj :=
5138 EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
5139 p_application_id => p_application_id
5140 ,p_attr_group_type => p_attr_group_type
5141 ,p_attr_group_name => p_attr_group_name
5142 );
5143
5144 l_attr_metadata_obj := EGO_ATTR_METADATA_OBJ(
5145 null -- ATTR_ID
5146 ,null -- ATTR_GROUP_ID
5147 ,p_attr_group_name
5148 ,p_internal_name
5149 ,p_display_name
5150 ,p_data_type
5151 ,null -- DATA_TYPE_MEANING
5152 ,p_sequence
5153 ,p_unique_key_flag
5154 ,p_default_value
5155 ,p_info_1
5156 ,null -- MAXIMUM_SIZE
5157 ,p_required
5158 ,p_column
5159 ,p_value_set_id
5160 ,null -- VALIDATION_TYPE
5161 ,null -- MINIMUM_VALUE
5162 ,null -- MAXIMUM_VALUE
5163 ,p_uom_class
5164 ,null -- UOM_CODE
5165 ,null -- DISP_TO_INT_VAL_QUERY
5166 ,null -- INT_TO_DISP_VAL_QUERY
5167 ,'N'
5168 ,p_view_in_hierarchy_code
5169 ,p_edit_in_hierarchy_code
5170 );
5171
5172 l_tokenized_url_dummy := Build_Tokenized_URL_Query(
5173 l_attr_group_metadata_obj
5174 ,l_attr_metadata_obj
5175 );
5176
5177 EXCEPTION
5178 WHEN FND_API.G_EXC_ERROR THEN
5179 RAISE e_bad_info_1_error;
5180 END;
5181 END IF;
5182 ----------------------------------------------------
5183 -- If the Attribute is searchable and there's not --
5184 -- already an index on this column, we create one --
5185 ----------------------------------------------------
5186
5187 IF (l_searchable = 'Y') THEN
5188
5189 IF (p_is_column_indexed IS NOT NULL) THEN
5190
5191 ---------------------------------------------------------------------------
5192 -- We are passed in a meaning for 'Yes' or 'No'; we need to get its code --
5193 ---------------------------------------------------------------------------
5194 SELECT LOOKUP_CODE
5195 INTO l_is_column_indexed
5199 AND VIEW_APPLICATION_ID = 0
5196 FROM FND_LOOKUP_VALUES
5197 WHERE LOOKUP_TYPE = 'YES_NO'
5198 AND LANGUAGE = USERENV('LANG')
5200 AND MEANING = p_is_column_indexed;
5201
5202 --look up code for pending table.
5203 SELECT LOOKUP_CODE
5204 INTO l_is_chg_column_indexed
5205 FROM FND_LOOKUP_VALUES
5206 WHERE LOOKUP_TYPE = 'YES_NO'
5207 AND LANGUAGE = USERENV('LANG')
5208 AND VIEW_APPLICATION_ID = 0
5209 AND MEANING = p_is_column_indexed;
5210
5211 ELSE
5212
5213 l_is_column_indexed := Is_Column_Indexed(p_column_name => p_column
5214 ,p_table_name => l_table_name
5215 ,p_application_id => p_application_id
5216 ,p_attr_group_type => p_attr_group_type);
5217
5218 --for checking whether the column in Pending table is indexed.
5219 l_is_chg_column_indexed := Is_Column_Indexed(p_column_name => p_column
5220 ,p_table_name => l_chg_table_name
5221 ,p_application_id => p_application_id
5222 ,p_attr_group_type => p_attr_group_type);
5223
5224 END IF;
5225
5226 IF ((l_is_column_indexed IS NULL OR
5227 l_is_column_indexed <> 'Y') OR
5228 (l_is_chg_column_indexed IS NULL OR
5229 l_is_chg_column_indexed <> 'Y')) THEN
5230 l_is_column_indexed :=Create_Index_For_DBCol(p_application_id => p_application_id
5231 ,p_attr_group_type => p_attr_group_type
5232 ,p_attr_group_name => p_attr_group_name
5233 ,p_table_name => l_table_name
5234 ,p_chg_table_name => l_chg_table_name
5235 ,p_is_column_indexed => l_is_column_indexed
5236 ,p_is_chg_column_indexed => l_is_chg_column_indexed
5237 ,p_column => p_column
5238 ,p_is_table_translatable =>l_data_type_is_trans_text);
5239
5240 /*** Right now there is no reporting if this fails (i.e., if 'N' is returned) ***/
5241 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'))
5242 END IF;
5243
5244 IF (l_fnd_exists = 'Y') THEN --Bug 4703510
5245 BEGIN
5246 SELECT flex_value_set_id
5247 INTO l_value_set_id
5248 FROM FND_DESCR_FLEX_COLUMN_USAGES
5249 WHERE APPLICATION_ID = p_application_id
5250 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5251 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
5252 AND END_USER_COLUMN_NAME = p_internal_name;
5253 EXCEPTION
5254 WHEN OTHERS THEN
5255 l_value_set_id := NULL;
5256 END;
5257
5258 UPDATE FND_DESCR_FLEX_COLUMN_USAGES
5259 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5260 LAST_UPDATE_DATE = p_lud,
5261 LAST_UPDATE_LOGIN = g_current_login_id,
5262 COLUMN_SEQ_NUM = NVL(l_sequence, COLUMN_SEQ_NUM),
5263 ENABLED_FLAG = NVL(p_enabled, ENABLED_FLAG),
5264 REQUIRED_FLAG = NVL(p_required, REQUIRED_FLAG),
5265 DISPLAY_FLAG = NVL(p_display, DISPLAY_FLAG),
5266 FLEX_VALUE_SET_ID = l_value_set_id,
5267 DEFAULT_VALUE = p_default_value
5268 WHERE APPLICATION_ID = p_application_id
5269 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5270 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5271 AND APPLICATION_COLUMN_NAME = p_column;
5272
5273 UPDATE FND_DESCR_FLEX_COL_USAGE_TL
5274 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5275 LAST_UPDATE_DATE = p_lud,
5276 LAST_UPDATE_LOGIN = g_current_login_id,
5277 FORM_LEFT_PROMPT = p_display_name,
5278 FORM_ABOVE_PROMPT = p_display_name,
5279 DESCRIPTION = p_description,
5280 SOURCE_LANG = USERENV('LANG')
5281 WHERE APPLICATION_ID = p_application_id
5282 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5283 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5284 AND APPLICATION_COLUMN_NAME = p_column
5285 --AND LANGUAGE = USERENV('LANG');
5286 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
5287 ELSE --l_fnd_exists = 'Y'
5288
5289 INSERT INTO FND_DESCR_FLEX_COLUMN_USAGES
5290 (
5291 APPLICATION_ID
5292 ,DESCRIPTIVE_FLEXFIELD_NAME
5293 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
5294 ,APPLICATION_COLUMN_NAME
5295 ,END_USER_COLUMN_NAME
5296 ,CREATED_BY
5297 ,CREATION_DATE
5298 ,LAST_UPDATED_BY
5299 ,LAST_UPDATE_DATE
5300 ,LAST_UPDATE_LOGIN
5301 ,COLUMN_SEQ_NUM
5302 ,ENABLED_FLAG
5303 ,REQUIRED_FLAG
5304 ,SECURITY_ENABLED_FLAG
5305 ,DISPLAY_FLAG
5306 ,DISPLAY_SIZE
5307 ,MAXIMUM_DESCRIPTION_LEN
5308 ,CONCATENATION_DESCRIPTION_LEN
5309 ,FLEX_VALUE_SET_ID
5310 ,RANGE_CODE
5314 ,RUNTIME_PROPERTY_FUNCTION
5311 ,DEFAULT_TYPE
5312 ,DEFAULT_VALUE
5313 ,SRW_PARAM
5315 )
5316 VALUES
5317 (
5318 p_application_id --APPLICATION_ID
5319 ,p_attr_group_type --DESCRIPTIVE_FLEXFIELD_NAME
5320 ,p_attr_group_name --DESCRIPTIVE_FLEX_CONTEXT_CODE
5321 ,p_column --APPLICATION_COLUMN_NAME
5322 ,p_internal_name --END_USER_COLUMN_NAME
5323 ,NVL(p_owner, g_current_user_id) --CREATED_BY
5324 ,p_lud --CREATION_DATE
5325 ,NVL(p_owner, g_current_user_id) --LAST_UPDATED_BY
5326 ,p_lud --LAST_UPDATE_DATE
5327 ,g_current_login_id --LAST_UPDATE_LOGIN
5328 ,l_sequence --COLUMN_SEQ_NUM
5329 ,l_enabled --ENABLED_FLAG
5330 ,l_required --REQUIRED_FLAG
5331 ,'N' --SECURITY_ENABLED_FLAG
5332 ,l_display --DISPLAY_FLAG
5333 ,50 --DISPLAY_SIZE
5334 ,50 --MAXIMUM_DESCRIPTION_LEN
5335 ,25 --CONCATENATION_DESCRIPTION_LEN
5336 ,p_value_set_id --FLEX_VALUE_SET_ID
5337 ,'' --RANGE_CODE
5338 ,'' --DEFAULT_TYPE
5339 ,p_default_value --DEFAULT_VALUE
5340 ,'' --SRW_PARAM
5341 ,'' --RUNTIME_PROPERTY_FUNCTION
5342 );
5343 INSERT INTO FND_DESCR_FLEX_COL_USAGE_TL
5344 (
5345 APPLICATION_ID
5346 ,DESCRIPTIVE_FLEXFIELD_NAME
5347 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
5348 ,APPLICATION_COLUMN_NAME
5349 ,LANGUAGE
5350 ,CREATED_BY
5351 ,CREATION_DATE
5352 ,LAST_UPDATED_BY
5353 ,LAST_UPDATE_DATE
5354 ,LAST_UPDATE_LOGIN
5355 ,FORM_LEFT_PROMPT
5356 ,FORM_ABOVE_PROMPT
5357 ,DESCRIPTION
5358 ,SOURCE_LANG
5359 )
5360 SELECT
5361 p_application_id --APPLICATION_ID
5362 ,p_attr_group_type --DESCRIPTIVE_FLEXFIELD_NAME
5363 ,p_attr_group_name --DESCRIPTIVE_FLEX_CONTEXT_CODE
5364 ,p_column --APPLICATION_COLUMN_NAME
5365 ,L.LANGUAGE_CODE --LANGUAGE
5366 ,NVL(p_owner, g_current_user_id) --CREATED_BY
5367 ,p_lud --CREATION_DATE
5368 ,NVL(p_owner, g_current_user_id) --LAST_UPDATED_BY
5369 ,p_lud --LAST_UPDATE_DATE
5370 ,g_current_login_id --LAST_UPDATE_LOGIN
5371 ,p_display_name --FORM_LEFT_PROMPT
5372 ,p_display_name --FORM_ABOVE_PROMPT
5373 ,p_description --DESCRIPTION
5374 ,USERENV('LANG') --SOURCE_LANG
5375 FROM FND_LANGUAGES L
5376 WHERE L.INSTALLED_FLAG in ('I', 'B');
5377 END IF ;-- l_fnd_exists = 'Y' --Bug 4703510 END
5378
5379 IF (l_ego_exists <> 'Y') THEN --Bug 4703510
5380 INSERT INTO EGO_FND_DF_COL_USGS_EXT
5381 (
5382 ATTR_ID
5383 ,APPLICATION_ID
5384 ,DESCRIPTIVE_FLEXFIELD_NAME
5385 ,DESCRIPTIVE_FLEX_CONTEXT_CODE
5386 ,APPLICATION_COLUMN_NAME
5387 ,DATA_TYPE
5388 ,SEARCH_FLAG
5389 ,UNIQUE_KEY_FLAG
5390 ,INFO_1
5391 ,UOM_CLASS
5392 ,CONTROL_LEVEL
5393 ,ATTRIBUTE_CODE
5394 ,VIEW_IN_HIERARCHY_CODE
5395 ,EDIT_IN_HIERARCHY_CODE
5396 ,CUSTOMIZATION_LEVEL
5397 ,CREATED_BY
5398 ,CREATION_DATE
5399 ,LAST_UPDATED_BY
5400 ,LAST_UPDATE_DATE
5401 ,LAST_UPDATE_LOGIN
5402 )
5403 SELECT
5404 EGO_ATTRS_S.NEXTVAL -- ATTR_ID
5405 ,p_application_id -- APPLICATION_ID
5406 ,p_attr_group_type -- DESCRIPTIVE_FLEXFIELD_NAME
5407 ,p_attr_group_name -- DESCRIPTIVE_FLEX_CONTEXT_CODE
5408 ,p_column -- APPLICATION_COLUMN_NAME
5409 ,p_data_type -- DATA_TYPE
5410 ,l_searchable -- SEARCHABLE FLAG
5411 ,l_unique_key_flag -- UNIQUE_KEY_FLAG
5412 ,p_info_1 -- DYNAMIC URL (IF APPLICABLE; USUALLY NULL)
5413 ,p_uom_class -- UOM_CLASS
5414 ,p_control_level -- CONTROL_LEVEL
5415 ,p_attribute_code -- ATTRIBUTE_CODE
5416 ,p_view_in_hierarchy_code -- VIEW_IN_HIERARCHY_CODE
5417 ,p_edit_in_hierarchy_code -- EDIT_IN_HIERARCHY_CODE
5418 ,p_customization_level -- CUSTIMIZATION_LEVEL
5419 ,NVL(p_owner, g_current_user_id) -- CREATED_BY
5420 ,p_lud -- CREATION_DATE
5421 ,NVL(p_owner, g_current_user_id) -- LAST_UPDATED_BY
5422 ,p_lud -- LAST_UPDATE_DATE
5423 ,g_current_login_id -- LAST_UPDATE_LOGIN
5424 FROM DUAL;
5425
5426 -- Standard check of p_commit
5430 x_return_status := FND_API.G_RET_STS_SUCCESS;
5427 IF FND_API.To_Boolean(p_commit) THEN
5428 COMMIT WORK;
5429 END IF;
5431 ELSE --l_ego_exists <> 'Y'
5432 IF FND_API.TO_BOOLEAN(p_commit) THEN
5433 ROLLBACK TO Create_Attribute_PUB;
5434 END IF;
5435
5436 x_return_status := FND_API.G_RET_STS_ERROR;
5437 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_INTERNAL_NAME_UNIQUE');
5438 FND_MSG_PUB.Add;
5439 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5440 ,p_count => x_msg_count
5441 ,p_data => x_msg_data);
5442
5443 END IF;--l_ego_exists <> 'Y'--Bug 4703510
5444
5445 EXCEPTION
5446 --Bug 5443697
5447 WHEN e_attr_starts_with_num THEN
5448 IF FND_API.TO_BOOLEAN(p_commit) THEN
5449 ROLLBACK TO Create_Attribute_PUB;
5450 END IF;
5451 x_return_status := FND_API.G_RET_STS_ERROR;
5452 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_NAME_ST_NUM');
5453 FND_MSG_PUB.Add;
5454 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5455 ,p_count => x_msg_count
5456 ,p_data => x_msg_data);
5457
5458 WHEN e_attr_starts_with_und_sc THEN
5459 IF FND_API.TO_BOOLEAN(p_commit) THEN
5460 ROLLBACK TO Create_Attribute_PUB;
5461 END IF;
5462 x_return_status := FND_API.G_RET_STS_ERROR;
5463 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_NAME_ST_UND_SC');
5464 FND_MSG_PUB.Add;
5465 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5466 ,p_count => x_msg_count
5467 ,p_data => x_msg_data);
5468
5469 WHEN e_col_internal_name_error THEN
5470 IF FND_API.TO_BOOLEAN(p_commit) THEN
5471 ROLLBACK TO Create_Attribute_PUB;
5472 END IF;
5473 x_return_status := FND_API.G_RET_STS_ERROR;
5474 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_INTRNL_NAME_ERR');
5475 FND_MSG_PUB.Add;
5476 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5477 ,p_count => x_msg_count
5478 ,p_data => x_msg_data);
5479
5480 WHEN e_default_value_len_err THEN
5481 IF FND_API.TO_BOOLEAN(p_commit) THEN
5482 ROLLBACK TO Create_Attribute_PUB;
5483 END IF;
5484 x_return_status := FND_API.G_RET_STS_ERROR;
5485 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DEFAULT_VAL_LEN_ERR');
5486 FND_MESSAGE.Set_Token('ATTR_MAX_LENGTH', l_col_width);
5487 FND_MSG_PUB.Add;
5488 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5489 ,p_count => x_msg_count
5490 ,p_data => x_msg_data);
5491
5492 WHEN e_attr_dup_seq_error THEN
5493 IF FND_API.TO_BOOLEAN(p_commit) THEN
5494 ROLLBACK TO Create_Attribute_PUB;
5495 END IF;
5496 x_return_status := FND_API.G_RET_STS_ERROR;
5497 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_DUP_SEQ_ERR');
5498 FND_MSG_PUB.Add;
5499 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5500 ,p_count => x_msg_count
5501 ,p_data => x_msg_data);
5502
5503
5504 WHEN e_first_attr_cbox THEN
5505 IF FND_API.TO_BOOLEAN(p_commit) THEN
5506 ROLLBACK TO Create_Attribute_PUB;
5507 END IF;
5508 x_return_status := FND_API.G_RET_STS_ERROR;
5509 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_MR_FIRST_ATTR_CBOX_ERR');
5510 FND_MSG_PUB.Add;
5511 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5512 ,p_count => x_msg_count
5513 ,p_data => x_msg_data);
5514
5515
5516
5517 WHEN e_col_data_type_error THEN
5518 IF FND_API.TO_BOOLEAN(p_commit) THEN
5519 ROLLBACK TO Create_Attribute_PUB;
5520 END IF;
5521 x_return_status := FND_API.G_RET_STS_ERROR;
5522 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_COL_DT_ERR');
5523 FND_MSG_PUB.Add;
5524 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5525 ,p_count => x_msg_count
5526 ,p_data => x_msg_data);
5527
5528 WHEN e_uom_not_allowed THEN
5529 IF FND_API.TO_BOOLEAN(p_commit) THEN
5530 ROLLBACK TO Create_Attribute_PUB;
5531 END IF;
5532 x_return_status := FND_API.G_RET_STS_ERROR;
5533 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_UOM_COL_ERR');
5534 FND_MSG_PUB.Add;
5535 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5536 ,p_count => x_msg_count
5537 ,p_data => x_msg_data);
5538
5539 WHEN e_vs_data_type_error THEN
5540 IF FND_API.TO_BOOLEAN(p_commit) THEN
5541 ROLLBACK TO Create_Attribute_PUB;
5542 END IF;
5543 x_return_status := FND_API.G_RET_STS_ERROR;
5544 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_VS_DT_ERR');
5545 FND_MSG_PUB.Add;
5546 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5547 ,p_count => x_msg_count
5548 ,p_data => x_msg_data);
5549
5550 WHEN e_no_vs_for_id_error THEN
5551 IF FND_API.TO_BOOLEAN(p_commit) THEN
5552 ROLLBACK TO Create_Attribute_PUB;
5553 END IF;
5554 x_return_status := FND_API.G_RET_STS_ERROR;
5558 ,p_count => x_msg_count
5555 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ATTR_NO_VS_ERR');
5556 FND_MSG_PUB.Add;
5557 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5559 ,p_data => x_msg_data);
5560
5561 WHEN e_bad_info_1_error THEN
5562 IF FND_API.TO_BOOLEAN(p_commit) THEN
5563 ROLLBACK TO Create_Attribute_PUB;
5564 END IF;
5565
5566 DECLARE
5567 l_attr_group_disp_name FND_DESCR_FLEX_CONTEXTS_TL.DESCRIPTIVE_FLEX_CONTEXT_NAME%TYPE;
5568 BEGIN
5569 SELECT DESCRIPTIVE_FLEX_CONTEXT_NAME
5570 INTO l_attr_group_disp_name
5571 FROM FND_DESCR_FLEX_CONTEXTS_TL
5572 WHERE APPLICATION_ID = p_application_id
5573 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5574 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5575 AND LANGUAGE = USERENV('LANG');
5576
5577 x_return_status := FND_API.G_RET_STS_ERROR;
5578 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DYNAMIC_URL_DATA_ERROR');
5579 FND_MESSAGE.Set_Token('ATTR_GROUP_DISP_NAME', l_attr_group_disp_name);
5580 FND_MSG_PUB.Add;
5581 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5582 ,p_count => x_msg_count
5583 ,p_data => x_msg_data);
5584 EXCEPTION
5585 WHEN NO_DATA_FOUND THEN
5586 x_return_status := FND_API.G_RET_STS_ERROR;
5587 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DYNAMIC_URL_DATA_ERROR');
5588 FND_MESSAGE.Set_Token('ATTR_GROUP_DISP_NAME', null);
5589 FND_MSG_PUB.Add;
5590 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5591 ,p_count => x_msg_count
5592 ,p_data => x_msg_data);
5593 END;
5594
5595 WHEN OTHERS THEN
5596 IF FND_API.TO_BOOLEAN(p_commit) THEN
5597 ROLLBACK TO Create_Attribute_PUB;
5598 END IF;
5599 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5600
5601 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
5602 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
5603 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
5604 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
5605 FND_MSG_PUB.Add;
5606 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
5607 ,p_count => x_msg_count
5608 ,p_data => x_msg_data);
5609
5610 END Create_Attribute;
5611
5612 ----------------------------------------------------------------------
5613
5614 PROCEDURE Update_Attribute (
5615 p_api_version IN NUMBER
5616 ,p_application_id IN NUMBER
5617 ,p_attr_group_type IN VARCHAR2
5618 ,p_attr_group_name IN VARCHAR2
5619 ,p_internal_name IN VARCHAR2
5620 ,p_display_name IN VARCHAR2
5621 ,p_description IN VARCHAR2
5622 ,p_sequence IN NUMBER
5623 ,p_required IN VARCHAR2
5624 ,p_searchable IN VARCHAR2
5625 ,p_column IN VARCHAR2
5626 ,p_value_set_id IN NUMBER DEFAULT G_MISS_NUM
5627 ,p_info_1 IN VARCHAR2 DEFAULT NULL
5628 ,p_default_value IN VARCHAR2
5629 ,p_unique_key_flag IN VARCHAR2 DEFAULT NULL
5630 ,p_enabled IN VARCHAR2
5631 ,p_display IN VARCHAR2
5632 ,p_control_level IN NUMBER DEFAULT -1
5633 ,p_attribute_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5634 ,p_view_in_hierarchy_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5635 ,p_edit_in_hierarchy_code IN VARCHAR2 DEFAULT G_MISS_CHAR
5636 ,p_customization_level IN VARCHAR2 DEFAULT G_MISS_CHAR
5637 ,p_owner IN NUMBER DEFAULT NULL
5638 ,p_lud IN DATE DEFAULT SYSDATE
5639 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
5640 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
5641 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
5642 ,p_uom_class IN VARCHAR2 DEFAULT G_MISS_CHAR
5643 ,x_return_status OUT NOCOPY VARCHAR2
5644 ,x_errorcode OUT NOCOPY NUMBER
5645 ,x_msg_count OUT NOCOPY NUMBER
5646 ,x_msg_data OUT NOCOPY VARCHAR2
5647 ) IS
5648
5649 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute';
5650
5651 --we don't use l_api_version yet, but eventually we might:
5652 --if we change required parameters, version goes from n.x to (n+1).x
5653 --if we change optional parameters, version goes from x.n to x.(n+1)
5654 l_api_version CONSTANT NUMBER := 1.0;
5655
5656 l_sequence NUMBER;
5657 l_min_seq NUMBER;
5658 l_was_searchable EGO_FND_DF_COL_USGS_EXT.search_flag%TYPE;
5659 l_view_in_hierarchy_code EGO_FND_DF_COL_USGS_EXT.view_in_hierarchy_code%TYPE;
5663 l_uom_class EGO_FND_DF_COL_USGS_EXT.uom_class%TYPE;
5660 l_edit_in_hierarchy_code EGO_FND_DF_COL_USGS_EXT.edit_in_hierarchy_code%TYPE;
5661 l_customization_level EGO_FND_DF_COL_USGS_EXT.customization_level%TYPE;
5662 l_attribute_code EGO_FND_DF_COL_USGS_EXT.attribute_code%TYPE;
5664 l_value_set_id FND_DESCR_FLEX_COLUMN_USAGES.flex_value_set_id%TYPE;
5665 l_is_column_indexed VARCHAR2(1);
5666 l_is_chg_column_indexed VARCHAR2(1);
5667 l_table_name VARCHAR2(100);
5668 l_chg_table_name VARCHAR2(30);
5669 l_data_type_is_trans_text BOOLEAN;
5670 l_valid_uom_column VARCHAR2(300);
5671 l_col_width NUMBER;
5672 l_data_type_code VARCHAR2(2);
5673 l_multi_row_flag VARCHAR2(2);
5674
5675 e_attr_dup_seq_error EXCEPTION;
5676 e_first_attr_cbox EXCEPTION;
5677 e_uom_not_allowed EXCEPTION;
5678 e_default_value_len_err EXCEPTION;
5679
5680
5681 BEGIN
5682 -- Standard start of API savepoint
5683 IF FND_API.To_Boolean(p_commit) THEN
5684 SAVEPOINT Update_Attribute_PUB;
5685 END IF;
5686
5687 -- Check for call compatibility
5688 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
5689 l_api_name, G_PKG_NAME)
5690 THEN
5691 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5692 END IF;
5693 -- Initialize message list even though we don't currently use it
5694 IF FND_API.To_Boolean(p_init_msg_list) THEN
5695 FND_MSG_PUB.Initialize;
5696 END IF;
5697
5698 -----------------------------------
5699 -- get the attribute details -- ego specific
5700 -----------------------------------
5701 BEGIN
5702 SELECT SEARCH_FLAG, view_in_hierarchy_code, edit_in_hierarchy_code,
5703 customization_level, attribute_code, uom_class
5704 INTO l_was_searchable, l_view_in_hierarchy_code, l_edit_in_hierarchy_code,
5705 l_customization_level, l_attribute_code, l_uom_class
5706 FROM EGO_FND_DF_COL_USGS_EXT
5707 WHERE APPLICATION_ID = p_application_id
5708 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5709 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5710 AND APPLICATION_COLUMN_NAME = p_column;
5711 EXCEPTION
5712 WHEN OTHERS THEN
5713 l_was_searchable := NULL;
5714 l_view_in_hierarchy_code := NULL;
5715 l_edit_in_hierarchy_code := NULL;
5716 l_customization_level := NULL;
5717 l_attribute_code := NULL;
5718 l_uom_class := NULL;
5719 END;
5720 IF (p_view_in_hierarchy_code IS NULL OR
5721 p_view_in_hierarchy_code <> G_MISS_CHAR) THEN
5722 l_view_in_hierarchy_code := p_view_in_hierarchy_code;
5723 END IF;
5724 IF (p_edit_in_hierarchy_code IS NULL OR
5725 p_edit_in_hierarchy_code <> G_MISS_CHAR) THEN
5726 l_edit_in_hierarchy_code := p_edit_in_hierarchy_code;
5727 END IF;
5728 IF (p_customization_level IS NULL OR
5729 p_customization_level <> G_MISS_CHAR) THEN
5730 l_customization_level := p_customization_level;
5731 END IF;
5732 IF (p_attribute_code IS NULL OR
5733 p_attribute_code <> G_MISS_CHAR) THEN
5734 l_attribute_code := p_attribute_code;
5735 END IF;
5736 IF (p_uom_class IS NULL OR
5737 p_uom_class <> G_MISS_CHAR) THEN
5738 l_uom_class := p_uom_class;
5739 END IF;
5740 -----------------------------------
5741 -- get the attribute details -- fnd specific
5742 -----------------------------------
5743 BEGIN
5744 SELECT flex_value_set_id
5745 INTO l_value_set_id
5746 FROM FND_DESCR_FLEX_COLUMN_USAGES
5747 WHERE APPLICATION_ID = p_application_id
5748 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5749 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
5750 AND END_USER_COLUMN_NAME = p_internal_name;
5751 EXCEPTION
5752 WHEN OTHERS THEN
5753 l_value_set_id := NULL;
5754 END;
5755 IF (p_value_set_id IS NULL OR
5756 p_value_set_id <> G_MISS_NUM) THEN
5757 l_value_set_id := p_value_set_id;
5758 END IF;
5759
5760 IF (FND_API.To_Boolean(p_is_nls_mode)) THEN
5761
5762 -- We do this IF check this way so that if p_is_nls_mode is NULL,
5763 -- we still update the non-trans tables (i.e., we treat NULL as 'F')
5764 NULL;
5765
5766 ELSE
5767
5768 -- We only update this information if we are NOT in NLS mode
5769 -- (i.e., we don't update it if we are in NLS mode)
5770
5771 -- Make sure updated sequence does not already exist
5772 SELECT COLUMN_SEQ_NUM
5773 INTO l_sequence
5774 FROM FND_DESCR_FLEX_COLUMN_USAGES
5775 WHERE APPLICATION_ID = p_application_id
5776 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5777 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
5778 AND END_USER_COLUMN_NAME = p_internal_name;
5779
5780 IF (l_sequence <> NVL(p_sequence, l_sequence)) THEN
5781 -- If the sequence is being updated to a NEW non-null value,
5782 -- check for uniqueness
5783
5784 SELECT COUNT(*)
5785 INTO l_sequence
5786 FROM FND_DESCR_FLEX_COLUMN_USAGES
5787 WHERE APPLICATION_ID = p_application_id
5791
5788 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5789 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name
5790 AND COLUMN_SEQ_NUM = p_sequence;
5792 IF (l_sequence > 0) THEN
5793 RAISE e_attr_dup_seq_error;
5794 ELSE
5795 l_sequence := p_sequence;
5796 END IF;
5797
5798 END IF;
5799
5800 IF (p_display = EGO_EXT_FWK_PUB.G_CHECKBOX_DISP_TYPE
5801 OR p_display =EGO_EXT_FWK_PUB.G_RADIO_DISP_TYPE ) THEN --bugFix:5292226
5802
5803 SELECT MULTI_ROW
5804 INTO l_multi_row_flag
5805 FROM EGO_FND_DSC_FLX_CTX_EXT
5806 WHERE APPLICATION_ID = p_application_id
5807 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5808 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
5809
5810 IF (l_multi_row_flag = 'Y') THEN
5811
5812 SELECT MIN(COLUMN_SEQ_NUM)
5813 INTO l_min_seq
5814 FROM FND_DESCR_FLEX_COLUMN_USAGES
5815 WHERE APPLICATION_ID = p_application_id
5816 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5817 AND DESCRIPTIVE_FLEX_CONTEXT_Code = p_attr_group_name;
5818
5819 IF (p_sequence <= l_min_seq) THEN
5820 RAISE e_first_attr_cbox;
5821 END IF;
5822
5823 END IF;
5824
5825 END IF;
5826
5827 -----------------------------------------------------------
5828 -- Moved out of the searchable block --
5829 -- as we need table name for UOM column check also --
5830 -----------------------------------------------------------
5831 --added for BUGFIX:4547918
5832 SELECT DATA_TYPE
5833 INTO l_data_type_code
5834 FROM EGO_FND_DF_COL_USGS_EXT
5835 WHERE APPLICATION_ID = p_application_id
5836 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5837 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5838 AND APPLICATION_COLUMN_NAME = p_column;
5839
5840 IF (l_data_type_code = 'A' ) THEN
5841 l_data_type_is_trans_text := TRUE;
5842 ELSE
5843 l_data_type_is_trans_text := FALSE;
5844 END IF;
5845
5846 -- l_data_type_is_trans_text := (SUBSTR(p_column,1,11) = 'TL_EXT_ATTR');
5847 -- end BUGFIX:4547918
5848
5849 IF (l_data_type_is_trans_text) THEN
5850 l_table_name := Get_TL_Table_Name(p_application_id
5851 ,p_attr_group_type);
5852 l_chg_table_name:=Get_Attr_Changes_TL_Table(p_application_id => p_application_id
5853 ,p_attr_group_type => p_attr_group_type);--for the pending table
5854
5855 ELSE
5856 l_table_name := Get_Table_Name(p_application_id
5857 ,p_attr_group_type);
5858 l_chg_table_name:=Get_Attr_Changes_B_Table(p_application_id => p_application_id
5859 ,p_attr_group_type => p_attr_group_type);--for the pending table
5860
5861 END IF;
5862
5863 -----------------------------------------------------------
5864 -- If the Attribute is being made searchable and there's --
5865 -- not already an index on this column, we create one --
5866 -----------------------------------------------------------
5867
5868 IF (p_searchable = 'Y') THEN
5869
5870 -- l_data_type_is_trans_text := (SUBSTR(p_column,1,11) = 'TL_EXT_ATTR');
5871 /***
5872 TO DO: right now we aren't using FND_COLUMNS's TRANSLATE_FLAG column, but we
5873 should be, and we should use that flag to determine if the Attr is TransText
5874 ...or else we should see which table this column's in, but that's an
5875 expensive query, I'd guess
5876 ***/
5877
5878 IF (l_was_searchable IS NULL OR
5879 l_was_searchable <> p_searchable) THEN
5880
5881 l_is_column_indexed := Is_Column_Indexed(
5882 p_column_name => p_column
5883 ,p_table_name => l_table_name
5884 ,p_application_id => p_application_id
5885 ,p_attr_group_type => p_attr_group_type
5886 );
5887
5888 --for checking whether the column in Pending table is indexed.
5889 l_is_chg_column_indexed := Is_Column_Indexed(p_column_name => p_column
5890 ,p_table_name => l_chg_table_name
5891 ,p_application_id => p_application_id
5892 ,p_attr_group_type => p_attr_group_type);
5893
5894 END IF;
5895 IF ((l_is_column_indexed <> 'Y') OR (l_is_chg_column_indexed <> 'Y')) THEN
5896
5897 l_is_column_indexed :=Create_Index_For_DBCol(p_application_id => p_application_id
5898 ,p_attr_group_type => p_attr_group_type
5899 ,p_attr_group_name => p_attr_group_name
5900 ,p_table_name => l_table_name
5901 ,p_chg_table_name => l_chg_table_name
5902 ,p_is_column_indexed => l_is_column_indexed
5903 ,p_is_chg_column_indexed => l_is_chg_column_indexed
5907 END IF;
5904 ,p_column => p_column
5905 ,p_is_table_translatable =>l_data_type_is_trans_text);
5906 END IF;--IF((l_is_column_indexed <> 'Y') OR (l_is_chg_column_indexed <> 'Y'))
5908
5909 -----------------------------------------------------------------------------------
5910 -- If the UOM Class is not null we need to make sure that we have --
5911 -- a corresponding database column in user workbench --
5912 -- to store the UOM Code --
5913 -- bug 3875730 --
5914 -----------------------------------------------------------------------------------
5915
5916 IF(p_uom_class IS NOT NULL) THEN
5917 l_valid_uom_column := check_Uom_Column_Exists(p_column , l_table_name );
5918
5919 IF l_valid_uom_column IS NULL THEN
5920 RAISE e_uom_not_allowed;
5921 ELSIF l_valid_uom_column <> '1' THEN
5922
5923 l_valid_uom_column := check_Uom_Col_In_Use ( p_application_id
5924 ,p_attr_group_type
5925 ,p_attr_group_name
5926 ,p_internal_name
5927 ,l_valid_uom_column
5928 );
5929
5930 IF l_valid_uom_column IS NOT NULL THEN
5931 RAISE e_uom_not_allowed;
5932 END IF ;
5933
5934 END IF ;
5935
5936 END IF ;
5937
5938 SELECT WIDTH
5939 INTO l_col_width
5940 FROM FND_COLUMNS
5941 WHERE COLUMN_NAME = p_column
5942 AND TABLE_ID = (SELECT TABLE_ID
5943 FROM FND_TABLES
5944 WHERE TABLE_NAME = l_table_name);
5945
5946 IF ( ((SUBSTR(p_column,1,11) = 'TL_EXT_ATTR') OR
5947 (SUBSTR(p_column,1,10) = 'C_EXT_ATTR')) AND
5948 LENGTH(p_default_value) > l_col_width )THEN
5949 RAISE e_default_value_len_err;
5950
5951 END IF;
5952
5953
5954 UPDATE FND_DESCR_FLEX_COLUMN_USAGES
5955 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5956 LAST_UPDATE_DATE = p_lud,
5957 LAST_UPDATE_LOGIN = g_current_login_id,
5958 COLUMN_SEQ_NUM = NVL(l_sequence, COLUMN_SEQ_NUM),
5959 ENABLED_FLAG = NVL(p_enabled, ENABLED_FLAG),
5960 REQUIRED_FLAG = NVL(p_required, REQUIRED_FLAG),
5961 DISPLAY_FLAG = NVL(p_display, DISPLAY_FLAG),
5962 FLEX_VALUE_SET_ID = l_value_set_id,
5963 DEFAULT_VALUE = p_default_value
5964 WHERE APPLICATION_ID = p_application_id
5965 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5966 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5967 AND APPLICATION_COLUMN_NAME = p_column;
5968
5969 UPDATE EGO_FND_DF_COL_USGS_EXT
5970 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5971 LAST_UPDATE_DATE = p_lud,
5972 LAST_UPDATE_LOGIN = g_current_login_id,
5973 INFO_1 = p_info_1,
5974 SEARCH_FLAG = NVL(p_searchable, SEARCH_FLAG),
5975 CONTROL_LEVEL = decode(p_control_level, -1, CONTROL_LEVEL, p_control_level),
5976 ATTRIBUTE_CODE = l_attribute_code,
5977 VIEW_IN_HIERARCHY_CODE = l_view_in_hierarchy_code, -- update or keep the same by default?
5978 EDIT_IN_HIERARCHY_CODE = l_edit_in_hierarchy_code, -- update or keep the same by default?
5979 UOM_CLASS = l_uom_class -- Bug: 3525490
5980 ,CUSTOMIZATION_LEVEL = l_customization_level
5981 ,UNIQUE_KEY_FLAG = NVL(p_unique_key_flag, UNIQUE_KEY_FLAG)--to update the unique key in case of multi row attrgrp.
5982 WHERE APPLICATION_ID = p_application_id
5983 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
5984 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
5985 AND APPLICATION_COLUMN_NAME = p_column;
5986
5987 END IF;
5988
5989 -- We update the TL information whether or not we're in NLS mode
5990 UPDATE FND_DESCR_FLEX_COL_USAGE_TL
5991 SET LAST_UPDATED_BY = NVL(p_owner, g_current_user_id),
5992 LAST_UPDATE_DATE = p_lud,
5993 LAST_UPDATE_LOGIN = g_current_login_id,
5994 FORM_LEFT_PROMPT = p_display_name,
5995 FORM_ABOVE_PROMPT = p_display_name,
5996 DESCRIPTION = p_description,
5997 SOURCE_LANG = USERENV('LANG')
5998 WHERE APPLICATION_ID = p_application_id
5999 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6000 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6001 AND APPLICATION_COLUMN_NAME = p_column
6002 --AND LANGUAGE = USERENV('LANG');
6003 AND USERENV('LANG') in (LANGUAGE , SOURCE_LANG);
6004
6005 -- Standard check of p_commit
6006 IF FND_API.To_Boolean(p_commit) THEN
6007 COMMIT WORK;
6008 END IF;
6009
6010 x_return_status := FND_API.G_RET_STS_SUCCESS;
6011
6012 EXCEPTION
6013
6014 WHEN e_default_value_len_err THEN
6015 IF FND_API.To_Boolean(p_commit) THEN
6016 ROLLBACK TO Update_Attribute_PUB;
6017 END IF;
6018 x_return_status := FND_API.G_RET_STS_ERROR;
6022 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6019 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_DEFAULT_VAL_LEN_ERR');
6020 FND_MESSAGE.Set_Token('ATTR_MAX_LENGTH', l_col_width);
6021 FND_MSG_PUB.Add;
6023 ,p_count => x_msg_count
6024 ,p_data => x_msg_data);
6025
6026 WHEN e_attr_dup_seq_error THEN
6027 IF FND_API.To_Boolean(p_commit) THEN
6028 ROLLBACK TO Update_Attribute_PUB;
6029 END IF;
6030 x_return_status := FND_API.G_RET_STS_ERROR;
6031 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_UP_ATTR_DUP_SEQ_ERR');
6032 FND_MSG_PUB.Add;
6033 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6034 ,p_count => x_msg_count
6035 ,p_data => x_msg_data);
6036 WHEN e_uom_not_allowed THEN
6037 IF FND_API.TO_BOOLEAN(p_commit) THEN
6038 ROLLBACK TO Update_Attribute_PUB;
6039 END IF;
6040 x_return_status := FND_API.G_RET_STS_ERROR;
6041 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_ATTR_UOM_COL_ERR');
6042 FND_MSG_PUB.Add;
6043 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6044 ,p_count => x_msg_count
6045 ,p_data => x_msg_data);
6046
6047
6048 WHEN e_first_attr_cbox THEN--bugFix:5292226
6049 IF FND_API.To_Boolean(p_commit) THEN
6050 ROLLBACK TO Update_Attribute_PUB;
6051 END IF;
6052 x_return_status := FND_API.G_RET_STS_ERROR;
6053 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_MR_FIRST_ATTR_CBOX_ERR');
6054 FND_MSG_PUB.Add;
6055 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6056 ,p_count => x_msg_count
6057 ,p_data => x_msg_data);
6058
6059 WHEN OTHERS THEN
6060 IF FND_API.To_Boolean(p_commit) THEN
6061 ROLLBACK TO Update_Attribute_PUB;
6062 END IF;
6063 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6064
6065 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
6066 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
6067 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
6068 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
6069 FND_MSG_PUB.Add;
6070 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6071 ,p_count => x_msg_count
6072 ,p_data => x_msg_data);
6073
6074 END Update_Attribute;
6075
6076 ----------------------------------------------------------------------
6077
6078 PROCEDURE Delete_Attribute (
6079 p_api_version IN NUMBER
6080 ,p_application_id IN NUMBER
6081 ,p_attr_group_type IN VARCHAR2
6082 ,p_attr_group_name IN VARCHAR2
6083 ,p_attr_name IN VARCHAR2
6084 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6085 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6086 ,x_return_status OUT NOCOPY VARCHAR2
6087 ,x_errorcode OUT NOCOPY NUMBER
6088 ,x_msg_count OUT NOCOPY NUMBER
6089 ,x_msg_data OUT NOCOPY VARCHAR2
6090 ) IS
6091
6092 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Attribute';
6093
6094 --we don't use l_api_version yet, but eventually we might:
6095 --if we change required parameters, version goes from n.x to (n+1).x
6096 --if we change optional parameters, version goes from x.n to x.(n+1)
6097 l_api_version CONSTANT NUMBER := 1.0;
6098
6099 l_assocs_exist BOOLEAN;
6100 l_token_table ERROR_HANDLER.Token_Tbl_Type;
6101
6102 BEGIN
6103
6104 -- Check for call compatibility
6105 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
6106 l_api_name, G_PKG_NAME)
6107 THEN
6108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6109 END IF;
6110 -- Initialize message list even though we don't currently use it
6111 IF FND_API.To_Boolean(p_init_msg_list) THEN
6112 FND_MSG_PUB.Initialize;
6113 END IF;
6114
6115 l_assocs_exist := Check_Associations_Exist(p_application_id,
6116 p_attr_group_type,
6117 p_attr_group_name);
6118
6119 IF (l_assocs_exist) THEN
6120
6121 x_return_status := FND_API.G_RET_STS_ERROR;
6122
6123 -- We need to select the translatable tokens for our error message --
6124 l_token_table(1).TOKEN_NAME := 'ATTR_DISP_NAME';
6125 SELECT TL.FORM_LEFT_PROMPT
6126 INTO l_token_table(1).TOKEN_VALUE
6127 FROM FND_DESCR_FLEX_COL_USAGE_TL TL
6128 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
6129 WHERE FL_COL.APPLICATION_ID = p_application_id
6130 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6131 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6132 AND FL_COL.END_USER_COLUMN_NAME = p_attr_name
6133 AND FL_COL.APPLICATION_ID = TL.APPLICATION_ID
6134 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = TL.DESCRIPTIVE_FLEXFIELD_NAME
6135 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = TL.DESCRIPTIVE_FLEX_CONTEXT_CODE
6139 l_token_table(2).TOKEN_NAME := 'ATTR_GRP_NAME';
6136 AND FL_COL.APPLICATION_COLUMN_NAME = TL.APPLICATION_COLUMN_NAME
6137 AND TL.LANGUAGE = USERENV('LANG');
6138
6140 SELECT DESCRIPTIVE_FLEX_CONTEXT_NAME
6141 INTO l_token_table(2).TOKEN_VALUE
6142 FROM FND_DESCR_FLEX_CONTEXTS_TL
6143 WHERE APPLICATION_ID = p_application_id
6144 AND DESCRIPTIVE_FLEXFIELD_NAME = p_attr_group_type
6145 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_attr_group_name
6146 AND LANGUAGE = USERENV('LANG');
6147
6148 ERROR_HANDLER.Add_Error_Message(
6149 p_message_name => 'EGO_EF_ASSOCS_EXIST2'
6150 ,p_application_id => 'EGO'
6151 ,p_token_tbl => l_token_table
6152 ,p_message_type => FND_API.G_RET_STS_ERROR
6153 ,p_addto_fnd_stack => G_ADD_ERRORS_TO_FND_STACK
6154 );
6155
6156 x_msg_count := 1;
6157 ERROR_HANDLER.Get_Message(x_message_text => x_msg_data
6158 ,x_entity_index => G_DUMMY_ENTITY_INDEX
6159 ,x_entity_id => G_DUMMY_ENTITY_ID
6160 ,x_message_type => G_DUMMY_MESSAGE_TYPE);
6161
6162 ELSE
6163
6164 Delete_Attribute_Internal(p_application_id, p_attr_group_type, p_attr_group_name,
6165 p_attr_name, p_commit, x_return_status,
6166 x_errorcode, x_msg_count, x_msg_data);
6167
6168 END IF;
6169 END Delete_Attribute;
6170
6171 ----------------------------------------------------------------------
6172
6173 --------------------
6174 -- Value Set APIs --
6175 --------------------
6176
6177 ----------------------------------------------------------------------
6178
6179 PROCEDURE Create_Value_Set (
6180 p_api_version IN NUMBER
6181 -- ,p_application_id IN NUMBER
6182 ,p_value_set_name IN VARCHAR2
6183 ,p_description IN VARCHAR2
6184 ,p_format_code IN VARCHAR2
6185 ,p_maximum_size IN NUMBER DEFAULT 0
6186 ,p_maximum_value IN VARCHAR2
6187 ,p_minimum_value IN VARCHAR2
6188 ,p_long_list_flag IN VARCHAR2
6189 ,p_validation_code IN VARCHAR2
6190 ,p_owner IN NUMBER
6191 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6192 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6193 ,x_value_set_id OUT NOCOPY NUMBER
6194 ,x_return_status OUT NOCOPY VARCHAR2
6195 -- ,x_errorcode OUT NOCOPY NUMBER
6196 ,x_msg_count OUT NOCOPY NUMBER
6197 ,x_msg_data OUT NOCOPY VARCHAR2
6198 ) IS
6199
6200 l_api_name VARCHAR2(30);
6201
6202 --we don't use l_api_version yet, but eventually we might:
6203 --if we change required parameters, version goes from n.x to (n+1).x
6204 --if we change optional parameters, version goes from x.n to x.(n+1)
6205 l_api_version NUMBER := 1.0;
6206
6207 -- l_add_where_clause VARCHAR2(1000);
6208 l_owner NUMBER;
6209 l_maximum_size NUMBER;
6210 l_format_code FND_FLEX_VALUE_SETS.FORMAT_TYPE%TYPE;
6211 l_validation_code FND_LOOKUP_VALUES.LOOKUP_CODE%TYPE;
6212 l_maximum_value FND_FLEX_VALUE_SETS.MAXIMUM_VALUE%TYPE;
6213 l_minimum_value FND_FLEX_VALUE_SETS.MINIMUM_VALUE%TYPE;
6214 -- l_Sysdate DATE := Sysdate;
6215
6216 l_owner_name VARCHAR2(40):='ANONYMOUS';
6217 BEGIN
6218
6219 l_api_name := 'Create_Value_Set';
6220 l_api_version := 1.0;
6221 code_debug(' Started '||l_api_name ||' with params ');
6222 code_debug('p_value_set_name - '|| p_value_set_name||' p_description - '||p_description);
6223 code_debug('p_maximum_size - '|| p_maximum_size||' p_maximum_value - '||p_maximum_value||' p_minimum_value - '||p_minimum_value);
6224 code_debug('p_format_code - '|| p_format_code||' p_validation_code - '||p_validation_code||' p_long_list_flag - '||p_long_list_flag);
6225 -- Standard start of API savepoint
6226 IF FND_API.To_Boolean(p_commit) THEN
6227 SAVEPOINT Create_Value_Set_PUB;
6228 END IF;
6229
6230 -- Initialize message list even though we don't currently use it
6231 IF FND_API.To_Boolean(p_init_msg_list) THEN
6232 FND_MSG_PUB.Initialize;
6233 END IF;
6234
6235 -- Check for call compatibility
6236 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
6237 l_api_name, G_PKG_NAME)
6238 THEN
6239 RAISE FND_API.G_EXC_ERROR;
6240 END IF;
6241
6242 IF (p_owner IS NULL OR p_owner = -1) THEN
6243 l_owner := g_current_user_id;
6244 ELSE
6245 l_owner := p_owner;
6246 END IF;
6247
6248 IF (p_maximum_size IS NULL) THEN
6249 l_maximum_size := 0;
6250 ELSE
6251 l_maximum_size := p_maximum_size;
6252 END IF;
6253
6254 IF (p_validation_code IS NULL) THEN
6258 END IF;
6255 l_validation_code := G_NONE_VALIDATION_CODE;
6256 ELSE
6257 l_validation_code := p_validation_code;
6259
6260 IF (p_format_code = G_TRANS_TEXT_DATA_TYPE) THEN
6261 -- this should never occur after
6262 l_format_code := G_CHAR_DATA_TYPE;
6263 l_validation_code := G_TRANS_IND_VALIDATION_CODE;
6264 ELSE
6265 l_format_code:= NVL(p_format_code,G_CHAR_DATA_TYPE);
6266 END IF;
6267
6268 -- bug 4137720 trim extra spaces
6269 IF l_format_code <> G_CHAR_DATA_TYPE THEN
6270 IF (p_maximum_value IS NOT NULL) THEN
6271 l_maximum_value := TRIM(p_maximum_value);
6272 ELSE
6273 l_maximum_value := NULL;
6274 END IF;
6275 IF (p_minimum_value IS NOT NULL) THEN
6276 l_minimum_value := TRIM(p_minimum_value);
6277 ELSE
6278 l_minimum_value := NULL;
6279 END IF;
6280 ELSE
6281 l_maximum_value := p_maximum_value;
6282 l_minimum_value := p_minimum_value;
6283 END IF;
6284
6285 -- l_add_where_clause := 'where lookup_type =''EGO_EF_'||
6286 -- p_value_set_name||'_TYPE'' AND language = userenv(''LANG'')';
6287
6288 FND_FLEX_VAL_API.Set_Session_Mode('customer_data');
6289 --Bug No:5292701 :START
6290 /* IF (l_validation_code = G_NONE_VALIDATION_CODE) THEN
6291 code_debug(l_api_name ||' FND_FLEX_VAL_API.Create_Valueset_None ');
6292 FND_FLEX_VAL_API.Create_Valueset_None(
6293 VALUE_SET_NAME => p_value_set_name
6294 ,DESCRIPTION => p_description
6295 ,SECURITY_AVAILABLE => 'N'
6296 ,ENABLE_LONGLIST => p_long_list_flag
6297 ,FORMAT_TYPE => l_format_code
6298 ,MAXIMUM_SIZE => l_maximum_size
6299 ,PRECISION => null
6300 ,NUMBERS_ONLY => 'N'
6301 ,UPPERCASE_ONLY => 'N'
6302 ,RIGHT_JUSTIFY_ZERO_FILL => 'N'
6303 ,MIN_VALUE => l_minimum_value
6304 ,MAX_VALUE => l_maximum_value
6305 );
6306
6307 ELSIF (l_validation_code IN (G_INDEPENDENT_VALIDATION_CODE,G_TRANS_IND_VALIDATION_CODE) ) THEN
6308 code_debug(l_api_name ||' FND_FLEX_VAL_API.create_valueset_independent ');
6309 FND_FLEX_VAL_API.create_valueset_independent(
6310 value_set_name => p_value_set_name
6311 ,description => p_description
6312 ,security_available => 'N'
6313 ,enable_longlist => p_long_list_flag
6314 ,format_type => l_format_code
6315 ,maximum_size => l_maximum_size
6316 ,precision => null
6317 ,numbers_only => 'N'
6318 ,uppercase_only => 'N'
6319 ,right_justify_zero_fill => 'N'
6320 ,min_value => l_minimum_value
6321 ,max_value => l_maximum_value
6322 );
6323 IF l_validation_code = G_TRANS_IND_VALIDATION_CODE THEN
6324 UPDATE fnd_flex_value_sets
6325 SET validation_type = l_validation_code
6326 WHERE flex_value_set_name = p_value_set_name;
6327 END IF;
6328 ELSIF (l_validation_code = G_TABLE_VALIDATION_CODE) THEN
6329 code_debug(l_api_name ||' FND_FLEX_VAL_API.Create_Valueset_Table ');
6330 --
6331 -- as the table information is mandatory using the API
6332 -- we are creating a value set with validation type as NONE
6333 -- and then changing the validation_code flag
6334 --
6335 FND_FLEX_VAL_API.Create_Valueset_None(
6336 VALUE_SET_NAME => p_value_set_name
6337 ,DESCRIPTION => p_description
6338 ,SECURITY_AVAILABLE => 'N'
6339 ,ENABLE_LONGLIST => p_long_list_flag
6340 ,FORMAT_TYPE => l_format_code
6341 ,MAXIMUM_SIZE => l_maximum_size
6342 ,PRECISION => null
6343 ,NUMBERS_ONLY => 'N'
6344 ,UPPERCASE_ONLY => 'N'
6345 ,RIGHT_JUSTIFY_ZERO_FILL => 'N'
6346 ,MIN_VALUE => l_minimum_value
6347 ,MAX_VALUE => l_maximum_value
6348 );
6349 UPDATE fnd_flex_value_sets
6350 SET validation_type = l_validation_code
6351 WHERE flex_value_set_name = p_value_set_name;
6352 END IF;*/
6353 --Bug No:5292701
6354 BEGIN
6355 SELECT USER_NAME INTO l_owner_name
6356 FROM FND_USER
6357 WHERE USER_ID = l_owner;
6358 EXCEPTION
6359 WHEN NO_DATA_FOUND THEN
6360 NULL;
6361 END;
6362
6363 fnd_flex_loader_apis.up_value_set
6364 (
6365 p_upload_phase => 'BEGIN'
6366 ,p_upload_mode =>'non-MLS'
6367 ,p_flex_value_set_name =>p_value_set_name
6368 ,p_owner =>l_owner_name
6369 ,p_validation_type =>p_validation_code
6370 ,p_protected_flag =>'N'
6371 ,p_security_enabled_flag =>'N'
6372 ,p_longlist_flag =>p_long_list_flag
6373 ,p_format_type =>l_format_code
6377 ,p_uppercase_only_flag =>'N'
6374 ,p_maximum_size =>l_maximum_size
6375 ,p_number_precision =>''
6376 ,p_alphanumeric_allowed_flag =>'Y'
6378 ,p_numeric_mode_enabled_flag =>'N'
6379 ,p_minimum_value =>l_minimum_value
6380 ,p_maximum_value =>l_maximum_value
6381 ,p_parent_flex_value_set_name =>''
6382 ,p_dependant_default_value =>''
6383 ,p_dependant_default_meaning =>''
6384 ,p_description =>p_description
6385 );
6386 fnd_flex_loader_apis.up_value_set
6387 (
6388 p_upload_phase => 'END'
6389 ,p_upload_mode =>'non-MLS'
6390 ,p_flex_value_set_name =>p_value_set_name
6391 ,p_owner =>l_owner_name
6392 ,p_validation_type =>p_validation_code
6393 ,p_protected_flag =>'N'
6394 ,p_security_enabled_flag =>'N'
6395 ,p_longlist_flag =>p_long_list_flag
6396 ,p_format_type =>l_format_code
6397 ,p_maximum_size =>l_maximum_size
6398 ,p_number_precision =>''
6399 ,p_alphanumeric_allowed_flag =>'Y'
6400 ,p_uppercase_only_flag =>'N'
6401 ,p_numeric_mode_enabled_flag =>'N'
6402 ,p_minimum_value =>l_minimum_value
6403 ,p_maximum_value =>l_maximum_value
6404 ,p_parent_flex_value_set_name =>''
6405 ,p_dependant_default_value =>''
6406 ,p_dependant_default_meaning =>''
6407 ,p_description =>p_description
6408 );
6409
6410 --Bug No:5292701 :END
6411
6412 SELECT flex_value_set_id
6413 INTO x_value_set_id
6414 FROM fnd_flex_value_sets
6415 WHERE flex_value_set_name = p_value_set_name;
6416
6417 -- Standard check of p_commit
6418 IF FND_API.To_Boolean(p_commit) THEN
6419 COMMIT WORK;
6420 END IF;
6421
6422 x_return_status := FND_API.G_RET_STS_SUCCESS;
6423
6424 EXCEPTION
6425 WHEN FND_API.G_EXC_ERROR THEN
6426 code_debug(l_api_name ||' EXCEPTION - FND_API.G_EXC_ERROR ');
6427 IF FND_API.To_Boolean( p_commit ) THEN
6428 ROLLBACK TO Create_Value_Set_PUB;
6429 END IF;
6430 x_return_status := FND_API.G_RET_STS_ERROR;
6431 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6432 ,p_count => x_msg_count
6433 ,p_data => x_msg_data);
6434 WHEN OTHERS THEN
6435 code_debug(l_api_name ||' EXCEPTION - OTHERS '||SQLERRM);
6436 IF FND_API.To_Boolean( p_commit ) THEN
6437 ROLLBACK TO Create_Value_Set_PUB;
6438 END IF;
6439 x_msg_data := fnd_message.get();
6440 IF x_msg_data IS NULL THEN
6441 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6442 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
6443 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
6444 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
6445 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM||' '||FND_FLEX_DSC_API.Message());
6446 FND_MSG_PUB.Add;
6447 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6448 ,p_count => x_msg_count
6449 ,p_data => x_msg_data);
6450 ELSE
6451 x_return_status := FND_API.G_RET_STS_ERROR;
6452 x_msg_count := 1;
6453 END IF;
6454 END Create_Value_Set;
6455
6456
6457 /*-----------------------------------------------------------------------------
6458
6459 DESCRIPTION
6460 Creates a child value set
6461
6462 PARAMETERS
6463 See below.
6464
6465 NOTES
6466 (-) When calling this procedure from the java layer, leave the
6467 child_vs_value_ids as NULL. Persistence of these values is
6468 is handled separately.
6469
6470 -----------------------------------------------------------------------------*/
6471 PROCEDURE Create_Child_Value_Set (
6472 p_api_version IN NUMBER := 1.0
6473 ,p_value_set_name IN VARCHAR2 -- Child Value Set Name
6474 ,p_description IN VARCHAR2
6475 ,p_parent_vs_id IN NUMBER
6476 ,p_owner IN NUMBER
6477 ,child_vs_value_ids IN EGO_VALUE_SET_VALUE_IDS := NULL
6478 -- collection of value set value IDs
6479 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6480 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6481 ,x_child_vs_id OUT NOCOPY NUMBER -- child value set ID
6482 ,x_return_status OUT NOCOPY VARCHAR2
6483 ,x_msg_count OUT NOCOPY NUMBER
6484 ,x_msg_data OUT NOCOPY VARCHAR2
6485 ) IS
6486 l_api_name VARCHAR2(30);
6487 l_parent_vs_row ego_value_sets_v%ROWTYPE;
6488 l_maximum_size ego_value_sets_v.maximum_size%TYPE;
6489 l_format_code ego_value_sets_v.format_code%TYPE;
6490 l_minimum_value ego_value_sets_v.minimum_value%TYPE;
6491 l_maximum_value ego_value_sets_v.maximum_value%TYPE;
6492 l_long_list_flag ego_value_sets_v.longlist_flag%TYPE;
6496 l_id_column_name fnd_flex_validation_tables.id_column_name%TYPE;
6493 l_owner NUMBER;
6494 l_return_status_inf VARCHAR2(1);
6495 l_inf_where_clause VARCHAR2(1000);
6497 l_id_column_type fnd_flex_validation_tables.id_column_type%TYPE;
6498 l_value_column_name fnd_flex_validation_tables.value_column_name%TYPE;
6499 l_value_column_type fnd_flex_validation_tables.value_column_type%TYPE;
6500
6501 BEGIN
6502
6503 -- For Debugging
6504 l_api_name := 'Create_Child_Value_Set';
6505 code_debug(' Started ' || l_api_name ||
6506 ' with params:' ||
6507 ' p_value_set_name - ' || p_value_set_name ||
6508 ' p_description - ' || p_description ||
6509 ' p_parent_vs_id - ' || p_parent_vs_id );
6510
6511 -- Standard start of API savepoint
6512 IF FND_API.To_Boolean(p_commit) THEN
6513 SAVEPOINT Create_Child_Value_Set_PUB;
6514 END IF;
6515
6516 code_debug('Current user ID is ' || g_current_user_id);
6517
6518 --
6519 -- Get the Parent Value Set
6520 --
6521 SELECT *
6522 INTO l_parent_vs_row
6523 FROM ego_value_sets_v
6524 WHERE value_set_id = p_parent_vs_id;
6525
6526 -- Inherit all necessary properties from the parent value set initially.
6527 -- Later we'll override them with what has been passed to this procedure, if
6528 -- legal.
6529 l_maximum_size := l_parent_vs_row.maximum_size;
6530 l_format_code := l_parent_vs_row.format_code;
6531 l_minimum_value := l_parent_vs_row.minimum_value;
6532 l_maximum_value := l_parent_vs_row.maximum_value;
6533 l_long_list_flag := l_parent_vs_row.longlist_flag;
6534
6535 -- Get the owner from the session info
6536 IF (p_owner IS NULL OR p_owner = -1) THEN
6537 l_owner := g_current_user_id;
6538 ELSE
6539 l_owner := p_owner;
6540 END IF;
6541
6542 ----------------------------------------------------------------------------
6543 -- Create the value set header and get the value set id --
6544 ----------------------------------------------------------------------------
6545
6546 Create_Value_Set (
6547 p_api_version => p_api_version
6548 ,p_value_set_name => p_value_set_name
6549 ,p_description => p_description
6550 ,p_format_code => l_format_code
6551 ,p_maximum_size => l_maximum_size
6552 ,p_maximum_value => l_maximum_value
6553 ,p_minimum_value => l_minimum_value
6554 ,p_long_list_flag => l_long_list_flag
6555 ,p_validation_code => G_TABLE_VALIDATION_CODE
6556 ,p_owner => l_owner
6557 ,p_init_msg_list => p_init_msg_list
6558 ,p_commit => p_commit
6559 ,x_value_set_id => x_child_vs_id
6560 -- Child Value Set ID that gets generated
6561 ,x_return_status => x_return_status
6562 ,x_msg_count => x_msg_count
6563 ,x_msg_data => x_msg_data
6564 );
6565
6566 -- check the return status
6567 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6568 code_debug('Create_Child_Value_Set(): Child value set header creation failed.');
6569 END IF;
6570
6571 code_debug('Create_Child_Value_Set(): New Child Value Set ID is ' || x_child_vs_id);
6572 code_debug('Create_Child_Value_Set(): Parent Value Set ID is ' || p_parent_vs_id);
6573 code_debug('Create_Child_Value_Set(): OWNER is ' || p_owner);
6574
6575 ----------------------------------------------------------------------------
6576 -- Capture the parent-child relationship by inserting a row into --
6577 -- EGO_VALUE_SET_EXT. --
6578 ----------------------------------------------------------------------------
6579
6580 INSERT INTO ego_value_set_ext (value_set_id, parent_value_set_id,
6581 created_by, creation_date, last_updated_by, last_update_date,
6582 last_update_login)
6583 VALUES (x_child_vs_id, p_parent_vs_id, l_owner, SYSDATE, l_owner, SYSDATE,
6584 g_current_login_id );
6585
6586 ----------------------------------------------------------------------------
6587 -- Insert into EGO_VS_VALUES_DISP_ORDER --
6588 ----------------------------------------------------------------------------
6589
6590 -- NOTE: This is not used when creating a child VS from the UI. Only when
6591 -- using the PL/SQL API directly.
6592
6593 IF child_vs_value_ids IS NOT NULL THEN
6594 FOR i IN child_vs_value_ids.FIRST .. child_vs_value_ids.LAST
6595 LOOP
6596 code_debug('Current value is ' || child_vs_value_ids(i));
6597 code_debug('i: ' || i);
6598
6599 -- Remember, we specify which of the EXISTING value set values (from the parent value
6600 -- set) are to become members of the child value set. No new values are
6601 -- created.
6602
6603 INSERT INTO ego_vs_values_disp_order (value_set_value_id, value_set_id,
6604 disp_sequence, created_by, creation_date, last_updated_by,
6605 last_update_date, last_update_login)
6606 VALUES (child_vs_value_ids(i), x_child_vs_id, i, l_owner, SYSDATE, l_owner,
6610 END IF;
6607 SYSDATE, g_current_login_id);
6608
6609 END LOOP;
6611
6612 ----------------------------------------------------------------------------
6613 -- Insert into FND_FLEX_VALIDATION_TABLES --
6614 ----------------------------------------------------------------------------
6615
6616 l_return_status_inf := FND_API.G_FALSE;
6617
6618 -- The condition to obtain the correct subset of VS values from
6619 -- EGO_VS_VALUES_DISP_ORDER
6620 l_inf_where_clause :=
6621 'vsv.FLEX_VALUE_ID = do.value_set_value_id AND ' ||
6622 'do.value_set_id = ' || x_child_vs_id || ' AND ' ||
6623 'vsv.value_set_id = ' || p_parent_vs_id || ' AND ' ||
6624 --
6625 -------------------------- BEGIN Bug Fix 6016429 -------------------------
6626 --
6627 -- We need conditions that ensure only enabled values
6628 -- show up in the USER level UI pages. The 3 criteria for displaying it
6629 -- to the user are:
6630 --
6631 -- (1) The value should be enabled
6632 --
6633 'vsv.ENABLED_CODE = ''Y'' AND ' ||
6634 -- (2) The start date must be in the past
6635 --
6636 '(' ||
6637 ' (vsv.start_date IS NOT NULL AND vsv.start_date <= SYSDATE) ' ||
6638 ' OR ' ||
6639 ' (vsv.start_date IS NULL) ' ||
6640 ') ' ||
6641 'AND ' ||
6642 -- (3) The end date must be in the present or future
6643 --
6644 '( ' ||
6645 ' (vsv.end_date IS NOT NULL AND vsv.end_date >= SYSDATE) ' ||
6646 ' OR ' ||
6647 ' (vsv.end_date IS NULL) ' ||
6648
6649 ------------------------ BEGIN Bug Fix 6148833 -------------------------
6650 -- --
6651 -- There must be a space before the ORDER BY, otherwise the order by --
6652 -- removal pattern matching that takes place later will fail. --
6653 -- --
6654 ') ' ||
6655 ------------------------ END Bug Fix 6148833 ---------------------------
6656
6657 -------------------------- END Bug Fix 6016429 ---------------------------
6658
6659 'ORDER BY do.disp_sequence';
6660
6661 -- SSARNOBA: As an experiment to fix 6194774, try editing the data type of the
6662 -- value set directly in the table FND_FLEX_VALIDATION_TABLES and then retry
6663 -- the search
6664
6665 -- Bug fix 6319734 - convert the SELECT clause expressions if necessary.
6666 Build_Child_VS_Select_Exprs (
6667 p_parent_vs_row => l_parent_vs_row
6668 , x_id_column_type => l_id_column_type
6669 , x_value_column_type => l_value_column_type
6670 , x_id_column_name => l_id_column_name
6671 , x_value_column_name => l_value_column_name
6672 );
6673
6674 Insert_Value_Set_Table_Inf (
6675 p_api_version => p_api_version
6676 , p_value_set_id => x_child_vs_id
6677 , p_table_application_id => 431
6678 , p_table_name => 'EGO_VALUE_SET_VALUES_V vsv , EGO_VS_VALUES_DISP_ORDER do'
6679 , p_value_column_name => l_value_column_name
6680 , p_value_column_type => l_value_column_type
6681 , p_value_column_size => 150
6682 , p_meaning_column_name => NULL
6683 , p_meaning_column_type => NULL
6684 , p_meaning_column_size => NULL
6685 , p_id_column_name => l_id_column_name
6686 , p_id_column_type => l_id_column_type
6687 , p_id_column_size => 150
6688 , p_where_order_by => l_inf_where_clause
6689 , p_additional_columns => ''
6690 , p_owner => l_owner
6691 , p_init_msg_list => p_init_msg_list
6692 , p_commit => p_commit
6693 , x_return_status => l_return_status_inf
6694 , x_msg_count => x_msg_count
6695 , x_msg_data => x_msg_data
6696 );
6697
6698 -- check the return status
6699 IF ( l_return_status_inf <> FND_API.G_RET_STS_SUCCESS AND
6700 x_return_status = FND_API.G_RET_STS_SUCCESS ) THEN
6701
6702 -- Nothing had gone wrong until now, so set the global
6703 -- return status to the most recent one.
6704 x_return_status := l_return_status_inf;
6705 code_debug('Create_Child_Value_Set(): Insert into FND_FLEX_VALIDATION_TABLES failed.');
6706 RAISE FND_API.G_EXC_ERROR;
6707
6708 END IF;
6709
6710 IF FND_API.To_Boolean(p_commit) THEN
6711 COMMIT WORK;
6712 END IF;
6713
6714 x_return_status := FND_API.G_RET_STS_SUCCESS;
6715
6716 EXCEPTION
6717 WHEN FND_API.G_EXC_ERROR THEN
6718 IF FND_API.TO_BOOLEAN(p_commit) THEN
6719 ROLLBACK TO Create_Child_Value_Set_PUB;
6720 END IF;
6721 x_return_status := FND_API.G_RET_STS_ERROR;
6725 ROLLBACK TO Create_Child_Value_Set_PUB;
6722
6723 WHEN OTHERS THEN
6724 IF FND_API.To_Boolean( p_commit ) THEN
6726 END IF;
6727 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6728
6729 code_debug('SQL_ERR_MSG ' || SQLERRM);
6730
6731 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
6732 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
6733 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
6734 FND_MSG_PUB.Add;
6735 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6736 ,p_count => x_msg_count
6737 ,p_data => x_msg_data);
6738
6739
6740 code_debug('END Create_Child_Value_Set');
6741
6742
6743 END Create_Child_Value_Set;
6744
6745
6746 /*-----------------------------------------------------------------------------
6747
6748 DESCRIPTION
6749 Deletes a child value set
6750
6751 PARAMETERS
6752 See below.
6753
6754 -----------------------------------------------------------------------------*/
6755 PROCEDURE Delete_Child_Value_Set (
6756 p_api_version IN NUMBER
6757 ,p_application_id IN NUMBER
6758 ,p_child_vs_id IN NUMBER
6759 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6760 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6761 ,x_return_status OUT NOCOPY VARCHAR2
6762 ,x_errorcode OUT NOCOPY NUMBER
6763 ,x_msg_count OUT NOCOPY NUMBER
6764 ,x_msg_data OUT NOCOPY VARCHAR2
6765 )
6766 IS
6767 BEGIN
6768
6769 ----------------------------------------------------------------------------
6770 -- Delete from fnd_flex_value_sets --
6771 ----------------------------------------------------------------------------
6772 delete from FND_FLEX_VALUE_SETS where flex_value_set_id = p_child_vs_id;
6773
6774
6775 ----------------------------------------------------------------------------
6776 -- Delete from EGO_VALUE_SET_EXT --
6777 ----------------------------------------------------------------------------
6778 delete from ego_value_set_ext where VALUE_SET_ID = p_child_vs_id;
6779
6780 ----------------------------------------------------------------------------
6781 -- Delete from EGO_VS_VALUES_DISP_ORDER --
6782 ----------------------------------------------------------------------------
6783 delete from ego_vs_values_disp_order where VALUE_SET_ID = p_child_vs_id;
6784
6785 END Delete_Child_Value_Set;
6786
6787
6788 PROCEDURE Update_Value_Set (
6789 p_api_version IN NUMBER
6790 ,p_value_set_id IN NUMBER
6791 ,p_description IN VARCHAR2
6792 ,p_format_code IN VARCHAR2
6793 ,p_maximum_size IN NUMBER
6794 ,p_maximum_value IN VARCHAR2
6795 ,p_minimum_value IN VARCHAR2
6796 ,p_long_list_flag IN FND_FLEX_VALUE_SETS.LONGLIST_FLAG%TYPE
6797 -- VARCHAR2
6798 ,p_validation_code IN VARCHAR2
6799 ,p_owner IN NUMBER DEFAULT NULL
6800 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
6801 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
6802 ,x_return_status OUT NOCOPY VARCHAR2
6803 -- ,x_errorcode OUT NOCOPY NUMBER
6804 ,x_msg_count OUT NOCOPY NUMBER
6805 ,x_msg_data OUT NOCOPY VARCHAR2
6806 ) IS
6807
6808 l_api_name VARCHAR2(30);
6809 --we don't use l_api_version yet, but eventually we might:
6810 --if we change required parameters, version goes from n.x to (n+1).x
6811 --if we change optional parameters, version goes from x.n to x.(n+1)
6812 l_api_version NUMBER;
6813
6814 l_maximum_size NUMBER;
6815 l_Sysdate DATE;
6816 l_OPDXcheck_dummy VARCHAR(2);
6817 l_owner NUMBER;
6818
6819 l_format_code FND_FLEX_VALUE_SETS.FORMAT_TYPE%TYPE;
6820 l_maximum_value FND_FLEX_VALUE_SETS.MAXIMUM_VALUE%TYPE;
6821 l_minimum_value FND_FLEX_VALUE_SETS.MINIMUM_VALUE%TYPE;
6822
6823 l_value_set_rec EGO_VALUE_SETS_V%ROWTYPE;
6824 BEGIN
6825
6826 l_api_name := 'Update_Value_Set';
6827 l_api_version := 1.0;
6828 l_Sysdate := SYSDATE;
6829
6830 -- Standard start of API savepoint
6831 IF FND_API.To_Boolean(p_commit) THEN
6832 SAVEPOINT Update_Value_Set_PUB;
6833 END IF;
6834
6835 -- Initialize message list even though we don't currently use it
6836 IF FND_API.To_Boolean(p_init_msg_list) THEN
6837 FND_MSG_PUB.Initialize;
6838 END IF;
6839
6840 -- Check for call compatibility
6841 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
6842 l_api_name, G_PKG_NAME)
6843 THEN
6844 RAISE FND_API.G_EXC_ERROR;
6845 END IF;
6846
6850 l_owner := p_owner;
6847 IF (p_owner IS NULL OR p_owner = -1) THEN
6848 l_owner := g_current_user_id;
6849 ELSE
6851 END IF;
6852
6853 IF p_maximum_size IS NULL THEN
6854 l_maximum_size := 0;
6855 ELSE
6856 l_maximum_size := p_maximum_size;
6857 END IF;
6858
6859 IF (p_format_code = G_TRANS_TEXT_DATA_TYPE) THEN
6860 -- this should never occur after
6861 l_format_code := G_CHAR_DATA_TYPE;
6862 ELSE
6863 l_format_code := NVL(p_format_code,G_CHAR_DATA_TYPE);
6864 END IF;
6865
6866 -- bug 4137720 trim extra spaces
6867 IF l_format_code <> G_CHAR_DATA_TYPE THEN
6868 IF (p_maximum_value IS NOT NULL) THEN
6869 l_maximum_value := TRIM(p_maximum_value);
6870 ELSE
6871 l_maximum_value := NULL;
6872 END IF;
6873 IF (p_minimum_value IS NOT NULL) THEN
6874 l_minimum_value := TRIM(p_minimum_value);
6875 ELSE
6876 l_minimum_value := NULL;
6877 END IF;
6878 ELSE
6879 l_maximum_value := p_maximum_value;
6880 l_minimum_value := p_minimum_value;
6881 END IF;
6882
6883 -- API not available in FND for updation
6884 -- logged bug 3957430 against FND
6885 UPDATE FND_FLEX_VALUE_SETS
6886 SET DESCRIPTION = p_description,
6887 LONGLIST_FLAG = p_long_list_flag,
6888 MINIMUM_VALUE = l_minimum_value,
6889 MAXIMUM_VALUE = l_maximum_value,
6890 MAXIMUM_SIZE = l_maximum_size,
6891 LAST_UPDATED_BY = l_owner,
6892 LAST_UPDATE_DATE = l_Sysdate,
6893 LAST_UPDATE_LOGIN = g_current_login_id
6894 WHERE FLEX_VALUE_SET_ID = p_value_set_id;
6895
6896 --------------------------------------------------------------------------
6897 -- Update all the child value sets --
6898 --------------------------------------------------------------------------
6899
6900 -- Even though there is strong consistency between child and parent long
6901 -- list display types, it is still necessary to maintain a separate value
6902 -- for the child? It is not sufficient for the child value set's long list
6903 -- display type to be obtained from the parent value set since we do not
6904 -- always distinguish between parent and child value sets (e.g. the user
6905 -- UI rather than the setup workbench UI).
6906
6907 --
6908 -- REASON FOR SUB-OPTIMAL SYNTAX
6909 --
6910 -- Unfortunately, we cannot use a single update statement on all rows
6911 -- where the ego_value_sets_v.value_set_id is in the list of child value
6912 -- ids. While we can obtain a collection of child value IDs:
6913 --
6914 -- EXECUTE IMMEDIATE
6915 -- 'SELECT value_set_id FROM ego_value_sets_v ' ||
6916 -- 'WHERE parent_value_set_id = p_value_set_id'
6917 -- BULK COLLECT INTO child_value_set_ids;
6918 --
6919 -- we cannot use it in a SQL Update statement like this:
6920 --
6921 -- UPDATE fnd_flex_value_sets
6922 -- SET longlist_flag = p_long_list_flag
6923 -- WHERE flex_value_set_id IN TABLE (child_value_set_ids);
6924 --
6925 -- because the collection's data type
6926 -- is user-defined. We will get a PLS-00642 error since the collection
6927 -- type is locally defined (in the function or the package, as opposed
6928 -- to globally). The SQL compiler cannot determine type safety. Only
6929 -- the PL/SQL compiler can, hence the need for a less efficient
6930 -- cursor approach.
6931
6932 <<child_value_set_ids_loop>>
6933 FOR l_value_set_rec IN
6934 (SELECT *
6935 FROM ego_value_sets_v
6936 WHERE parent_value_set_id = p_value_set_id)
6937 LOOP
6938
6939 -- Update the long list display type
6940 UPDATE fnd_flex_value_sets
6941 SET longlist_flag = p_long_list_flag
6942 WHERE flex_value_set_id = l_value_set_rec.value_set_id;
6943
6944 -- dbms_output.put_line(' ' || l_value_set_rec.value_set_id);
6945 END LOOP child_value_set_ids_loop;
6946
6947
6948 -- Standard check of p_commit
6949 IF FND_API.To_Boolean(p_commit) THEN
6950 COMMIT WORK;
6951 END IF;
6952
6953 x_return_status := FND_API.G_RET_STS_SUCCESS;
6954
6955 EXCEPTION
6956 WHEN FND_API.G_EXC_ERROR THEN
6957 IF FND_API.To_Boolean( p_commit ) THEN
6958 ROLLBACK TO Update_Value_Set_PUB;
6959 END IF;
6960 x_return_status := FND_API.G_RET_STS_ERROR;
6961 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6962 ,p_count => x_msg_count
6963 ,p_data => x_msg_data);
6964
6965 WHEN OTHERS THEN
6966 IF FND_API.To_Boolean( p_commit ) THEN
6967 ROLLBACK TO Update_Value_Set_PUB;
6968 END IF;
6969 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6970
6971 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
6972 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
6973 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
6974 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
6975 FND_MSG_PUB.Add;
6976 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
6977 ,p_count => x_msg_count
6981
6978 ,p_data => x_msg_data);
6979
6980 END Update_Value_Set;
6982
6983 /*-----------------------------------------------------------------------------
6984
6985 DESCRIPTION
6986 Updates a child value set
6987
6988 PARAMETERS
6989 See below.
6990
6991 NOTES
6992 (-) Old child value set IDs get erased.
6993 (-) The value set name cannot be altered after creation.
6994 (-) The 'created' fields will not retain the old data. The fact that the
6995 value set values are recreated every time becomes apparent when \
6996 viewing these fields.
6997
6998 -----------------------------------------------------------------------------*/
6999
7000 PROCEDURE Update_Child_Value_Set (
7001 p_api_version IN NUMBER
7002 ,p_value_set_id IN NUMBER
7003 ,p_description IN VARCHAR2
7004 ,p_format_code IN VARCHAR2
7005 ,p_owner IN NUMBER DEFAULT NULL
7006 ,child_vs_value_ids IN EGO_VALUE_SET_VALUE_IDS
7007 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7008 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7009 ,x_return_status OUT NOCOPY VARCHAR2
7010 ,x_msg_count OUT NOCOPY NUMBER
7011 ,x_msg_data OUT NOCOPY VARCHAR2
7012 ) IS
7013 l_vs_value_count NUMBER;
7014 l_api_name VARCHAR2(30);
7015 l_parent_vs_row ego_value_sets_v%ROWTYPE;
7016 l_validation_code FND_LOOKUP_VALUES.LOOKUP_CODE%TYPE;
7017 l_vs_value_disp_orders EGO_VS_VALUES_DISP_ORDER_TBL
7018 := ego_vs_values_disp_order_tbl();
7019 BEGIN
7020
7021 -- For Debugging
7022 l_api_name := 'Update_Child_Value_Set';
7023 code_debug(' Started ' || l_api_name ||
7024 ' with params:' ||
7025 ' p_value_set_id - ' || p_value_set_id ||
7026 ' p_description - ' || p_description );
7027
7028 -- Standard start of API savepoint
7029 IF FND_API.To_Boolean(p_commit) THEN
7030 SAVEPOINT Update_Child_Value_Set_PUB;
7031 END IF;
7032
7033
7034 ----------------------------------------------------------------------------
7035 -- Get unchanged (thus unspecified) but mandatory properties from parent --
7036 ----------------------------------------------------------------------------
7037
7038 SELECT pvs.*
7039 INTO l_parent_vs_row
7040 FROM ego_value_sets_v vs, ego_value_sets_v pvs
7041 WHERE vs.parent_value_set_id = pvs.value_set_id
7042 AND vs.value_set_id = p_value_set_id;
7043
7044 l_validation_code := l_parent_vs_row.validation_code_admin;
7045
7046 -- Make sure the validation type is independent or translatable independent.
7047 IF (l_validation_code <> G_INDEPENDENT_VALIDATION_CODE AND
7048 l_validation_code <> G_TRANS_IND_VALIDATION_CODE) THEN
7049 RAISE FND_API.G_EXC_ERROR;
7050 END IF;
7051
7052
7053 ----------------------------------------------------------------------------
7054 -- Update the value set header --
7055 ----------------------------------------------------------------------------
7056
7057 Update_Value_Set (
7058 p_api_version => p_api_version
7059 ,p_value_set_id => p_value_set_id
7060 ,p_description => p_description
7061 ,p_format_code => l_parent_vs_row.format_code
7062 ,p_maximum_size => l_parent_vs_row.maximum_size
7063 ,p_maximum_value => l_parent_vs_row.maximum_value
7064 ,p_minimum_value => l_parent_vs_row.minimum_value
7065 ,p_long_list_flag => l_parent_vs_row.longlist_flag
7066 ,p_validation_code => l_parent_vs_row.validation_code_admin
7067 ,p_owner => p_owner
7068 ,p_init_msg_list => p_init_msg_list
7069 ,p_commit => p_commit
7070 ,x_return_status => x_return_status
7071 ,x_msg_count => x_msg_count
7072 ,x_msg_data => x_msg_data
7073 );
7074
7075
7076 -- Nothing to update in EGO_VALUE_SET_EXT (because the parent-child
7077 -- relationship cannot be modified)
7078
7079 ----------------------------------------------------------------------------
7080 -- Update EGO_VS_VALUES_DISP_ORDER --
7081 ----------------------------------------------------------------------------
7082
7083 -- Create a collection for the new child VS values' rows
7084
7085 FOR i IN child_vs_value_ids.FIRST .. child_vs_value_ids.LAST
7086 LOOP
7087 code_debug('Current value is ' || child_vs_value_ids(i));
7088 code_debug('i: ' || i);
7089
7090 l_vs_value_count := 0;
7091 SELECT COUNT(*) INTO l_vs_value_count
7092 FROM ego_vs_values_disp_order
7093 WHERE value_set_value_id = child_vs_value_ids(i)
7094 AND value_set_id = p_value_set_id;
7095
7096 -- Add an extra space onto the array
7097 l_vs_value_disp_orders.extend();
7101 -- copy the old creation info
7098
7099 IF (l_vs_value_count > 0) THEN -- value already existed in child VS
7100 -- Add a row to the collection of new value sets, with the new 'update' attributes
7102 -- SSARNOBA: I'm not even sure if this is needed
7103 SELECT
7104 value_set_value_id -- VALUE_SET_VALUE_ID
7105 , value_set_id -- VALUE_SET_ID
7106 , i -- DISP_SEQUENCE
7107 , created_by -- CREATED_BY
7108 , creation_date -- CREATION_DATE
7109 , p_owner -- LAST_UPDATED_BY
7110 , SYSDATE -- LAST_UPDATE_DATE
7111 , g_current_login_id -- LAST_UPDATE_LOGIN
7112 INTO l_vs_value_disp_orders(i)
7113 FROM ego_vs_values_disp_order
7114 WHERE value_set_value_id = child_vs_value_ids(i) and
7115 value_set_id = p_value_set_id;
7116 ELSE
7117 -- Add a row to the collection of new value sets
7118 -- with new creation info.
7119 SELECT
7120 child_vs_value_ids(i) -- VALUE_SET_VALUE_ID
7121 , p_value_set_id -- VALUE_SET_ID
7122 , i -- DISP_SEQUENCE
7123 , p_owner -- CREATED_BY
7124 , SYSDATE -- CREATION_DATE
7125 , p_owner -- LAST_UPDATED_BY
7126 , SYSDATE -- LAST_UPDATE_DATE
7127 , g_current_login_id -- LAST_UPDATE_LOGIN
7128 INTO l_vs_value_disp_orders(i)
7129 FROM dual;
7130 END IF;
7131 END LOOP;
7132
7133 -- Delete all the existing values from the child VS
7134 DELETE FROM ego_vs_values_disp_order
7135 WHERE value_set_id = p_value_set_id;
7136
7137 -- Insert the new values for the child VS from the collection
7138 FORALL j IN l_vs_value_disp_orders.FIRST ..
7139 l_vs_value_disp_orders.LAST
7140 INSERT INTO ego_vs_values_disp_order
7141 VALUES l_vs_value_disp_orders(j);
7142 -- END FORALL
7143
7144
7145 x_return_status := FND_API.G_RET_STS_SUCCESS;
7146
7147 EXCEPTION
7148 WHEN OTHERS THEN
7149 IF FND_API.To_Boolean( p_commit ) THEN
7150 ROLLBACK TO Update_Child_Value_Set_PUB;
7151 END IF;
7152 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7153
7154 code_debug('SQL_ERR_MSG ' || SQLERRM);
7155
7156 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7157 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7158 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7159 FND_MSG_PUB.Add;
7160 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7161 ,p_count => x_msg_count
7162 ,p_data => x_msg_data);
7163
7164 END;
7165
7166 ----------------------------------------------------------------------
7167
7168 PROCEDURE Insert_Value_Set_Table_Inf (
7169 p_api_version IN NUMBER
7170 ,p_value_set_id IN NUMBER
7171 ,p_table_application_id IN NUMBER
7172 ,p_table_name IN VARCHAR2
7173 ,p_value_column_name IN VARCHAR2
7174 ,p_value_column_type IN VARCHAR2
7175 ,p_value_column_size IN NUMBER
7176 ,p_meaning_column_name IN VARCHAR2
7177 ,p_meaning_column_type IN VARCHAR2
7178 ,p_meaning_column_size IN NUMBER
7179 ,p_id_column_name IN VARCHAR2
7180 ,p_id_column_type IN VARCHAR2
7181 ,p_id_column_size IN NUMBER
7182 ,p_where_order_by IN VARCHAR2
7183 ,p_additional_columns IN VARCHAR2
7184 ,p_owner IN NUMBER DEFAULT NULL
7185 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7186 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7187 ,x_return_status OUT NOCOPY VARCHAR2
7188 ,x_msg_count OUT NOCOPY NUMBER
7189 ,x_msg_data OUT NOCOPY VARCHAR2
7190 ) IS
7191
7192 l_api_name VARCHAR2(30);
7193 --we don't use l_api_version yet, but eventually we might:
7194 --if we change required parameters, version goes from n.x to (n+1).x
7195 --if we change optional parameters, version goes from x.n to x.(n+1)
7196 l_api_version NUMBER;
7197 l_Sysdate DATE;
7198 l_owner NUMBER;
7199 l_where_order_by VARCHAR(2000);
7200
7201 BEGIN
7202
7203 l_api_name := 'Insert_Value_Set_Table_Inf';
7204 l_api_version := 1.0;
7205 l_Sysdate := SYSDATE;
7206 code_debug(l_api_name ||' start ');
7207
7208 -- Standard start of API savepoint
7209 IF FND_API.To_Boolean(p_commit) THEN
7210 SAVEPOINT Insert_Value_Set_Table_Inf_PUB;
7211 END IF;
7212
7213 -- Initialize message list even though we don't currently use it
7217
7214 IF FND_API.To_Boolean(p_init_msg_list) THEN
7215 FND_MSG_PUB.Initialize;
7216 END IF;
7218 -- Check for call compatibility
7219 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
7220 l_api_name, G_PKG_NAME)
7221 THEN
7222 RAISE FND_API.G_EXC_ERROR;
7223 END IF;
7224
7225 IF (p_owner IS NULL OR p_owner = -1) THEN
7226 l_owner := g_current_user_id;
7227 ELSE
7228 l_owner := p_owner;
7229 END IF;
7230
7231 ---------------------- BEGIN Bug fix 6148833 -----------------------------
7232
7233 -- Since we can't modify IN function arguments, we have to make a copy
7234 -- of the clause.
7235 l_where_order_by := p_where_order_by;
7236
7237 -- Insert a space before an ORDER BY clause, so that
7238 -- order by elimination takes place for inner query blocks.
7239 Insert_Order_By_Space (
7240 p_where_order_by => l_where_order_by
7241 );
7242
7243 ---------------------- END Bug fix 6148833 -------------------------------
7244
7245 code_debug(l_api_name ||' inserting data into fnd_flex_validation_tables ');
7246 INSERT INTO fnd_flex_validation_tables
7247 (
7248 FLEX_VALUE_SET_ID
7249 ,APPLICATION_TABLE_NAME
7250 ,VALUE_COLUMN_NAME
7251 ,VALUE_COLUMN_TYPE
7252 ,VALUE_COLUMN_SIZE
7253 ,COMPILED_ATTRIBUTE_COLUMN_NAME
7254 ,ENABLED_COLUMN_NAME
7255 ,HIERARCHY_LEVEL_COLUMN_NAME
7256 ,START_DATE_COLUMN_NAME
7257 ,END_DATE_COLUMN_NAME
7258 ,SUMMARY_ALLOWED_FLAG
7259 ,SUMMARY_COLUMN_NAME
7260 ,ID_COLUMN_NAME
7261 ,ID_COLUMN_TYPE
7262 ,ID_COLUMN_SIZE
7263 ,MEANING_COLUMN_NAME
7264 ,MEANING_COLUMN_TYPE
7265 ,MEANING_COLUMN_SIZE
7266 ,TABLE_APPLICATION_ID
7267 ,ADDITIONAL_WHERE_CLAUSE
7268 ,ADDITIONAL_QUICKPICK_COLUMNS
7269 ,CREATED_BY
7270 ,CREATION_DATE
7271 ,LAST_UPDATED_BY
7272 ,LAST_UPDATE_DATE
7273 ,LAST_UPDATE_LOGIN
7274 )
7275 VALUES
7276 (
7277 p_value_set_id --FLEX_VALUE_SET_ID
7278 ,p_table_name --APPLICATION_TABLE_NAME
7279 ,p_value_column_name --VALUE_COLUMN_NAME
7280 ,p_value_column_type --VALUE_COLUMN_TYPE
7281 ,p_value_column_size --VALUE_COLUMN_SIZE
7282 -- ,p_value_column_name --COMPILED_ATTRIBUTE_COLUMN_NAME
7283 ,'NULL' --COMPILED_ATTRIBUTE_COLUMN_NAME
7284 -- ,'Y' --ENABLED_COLUMN_NAME
7285 ,'''Y''' --ENABLED_COLUMN_NAME
7286 ,'NULL' --HIERARCHY_LEVEL_COLUMN_NAME
7287 -- ,'START_DATE_COLUMN_NAME' --START_DATE_COLUMN_NAME
7288 -- ,'END_DATE_COLUMN_NAME' --END_DATE_COLUMN_NAME
7289 ,'TO_DATE(NULL)' --START_DATE_COLUMN_NAME
7290 ,'TO_DATE(NULL)' --END_DATE_COLUMN_NAME
7291 ,'N' --SUMMARY_ALLOWED_FLAG
7292 ,'''N''' --SUMMARY_COLUMN_NAME
7293 ,p_id_column_name --ID_COLUMN_NAME
7294 ,p_id_column_type --ID_COLUMN_SIZE
7295 ,p_id_column_size --ID_COLUMN_TYPE
7296 ,p_meaning_column_name --MEANING_COLUMN_NAME
7297 ,p_meaning_column_type --MEANING_COLUMN_TYPE
7298 ,p_meaning_column_size --MEANING_COLUMN_SIZE
7299 ,p_table_application_id --TABLE_APPLICATION_ID
7300 ,l_where_order_by --ADDITIONAL_WHERE_CLAUSE
7301 ,'' --ADDITIONAL_QUICKPICK_COLUMNS
7302 ,l_owner --CREATED_BY
7303 ,l_Sysdate --CREATION_DATE
7304 ,l_owner --LAST_UPDATED_BY
7305 ,l_Sysdate --LAST_UPDATE_DATE
7306 ,g_current_login_id --LAST_UPDATE_LOGIN
7307 );
7308
7309 code_debug(l_api_name ||' inserting data into fnd_flex_validation_tables COMPLETED ');
7310 -- Standard check of p_commit
7311 IF FND_API.To_Boolean(p_commit) THEN
7312 COMMIT WORK;
7313 END IF;
7314
7315 x_return_status := FND_API.G_RET_STS_SUCCESS;
7316
7317 EXCEPTION
7318 WHEN FND_API.G_EXC_ERROR THEN
7319 code_debug(l_api_name ||' EXCEPTION desired ');
7320 IF FND_API.To_Boolean(p_commit) THEN
7321 ROLLBACK TO Insert_Value_Set_Table_Inf_PUB;
7322 END IF;
7323 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
7324 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7325 ,p_count => x_msg_count
7326 ,p_data => x_msg_data);
7327 WHEN OTHERS THEN
7328 code_debug(l_api_name ||' EXCEPTION OTHERS '|| SQLERRM);
7329 IF FND_API.To_Boolean(p_commit) THEN
7330 ROLLBACK TO Insert_Value_Set_Table_Inf_PUB;
7331 END IF;
7332 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7333
7334 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7335 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7336 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
7337 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7338 FND_MSG_PUB.Add;
7339 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7340 ,p_count => x_msg_count
7341 ,p_data => x_msg_data);
7342
7346
7343 END Insert_Value_Set_table_Inf;
7344
7345 ----------------------------------------------------------------------
7347 PROCEDURE Update_Value_Set_Table_Inf (
7348 p_api_version IN NUMBER
7349 ,p_value_set_id IN NUMBER
7350 ,p_table_application_id IN NUMBER
7351 ,p_table_name IN VARCHAR2
7352 ,p_value_column_name IN VARCHAR2
7353 ,p_value_column_type IN VARCHAR2
7354 ,p_value_column_size IN NUMBER
7355 ,p_meaning_column_name IN VARCHAR2
7356 ,p_meaning_column_type IN VARCHAR2
7357 ,p_meaning_column_size IN NUMBER
7358 ,p_id_column_name IN VARCHAR2
7359 ,p_id_column_type IN VARCHAR2
7360 ,p_id_column_size IN NUMBER
7361 ,p_where_order_by IN VARCHAR2
7362 ,p_additional_columns IN VARCHAR2
7363 ,p_owner IN NUMBER DEFAULT NULL
7364 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7365 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7366 ,x_return_status OUT NOCOPY VARCHAR2
7367 ,x_msg_count OUT NOCOPY NUMBER
7368 ,x_msg_data OUT NOCOPY VARCHAR2
7369 ) IS
7370
7371 l_api_name VARCHAR2(30);
7372 --we don't use l_api_version yet, but eventually we might:
7373 --if we change required parameters, version goes from n.x to (n+1).x
7374 --if we change optional parameters, version goes from x.n to x.(n+1)
7375 l_api_version NUMBER;
7376 l_Sysdate DATE;
7377 l_owner NUMBER;
7378 l_where_order_by VARCHAR(2000);
7379
7380 BEGIN
7381
7382 l_api_name := 'Update_Value_Set_Table_Inf';
7383 l_api_version := 1.0;
7384 l_Sysdate := SYSDATE;
7385
7386 code_debug(l_api_name ||' start ');
7387 -- Standard start of API savepoint
7388 IF FND_API.To_Boolean(p_commit) THEN
7389 SAVEPOINT Update_Value_Set_Table_Inf_PUB;
7390 END IF;
7391
7392 -- Initialize message list even though we don't currently use it
7393 IF FND_API.To_Boolean(p_init_msg_list) THEN
7394 FND_MSG_PUB.Initialize;
7395 END IF;
7396
7397 -- Check for call compatibility
7398 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
7399 l_api_name, G_PKG_NAME)
7400 THEN
7401 RAISE FND_API.G_EXC_ERROR;
7402 END IF;
7403
7404 IF (p_owner IS NULL OR p_owner = -1) THEN
7405 l_owner := g_current_user_id;
7406 ELSE
7407 l_owner := p_owner;
7408 END IF;
7409
7410 ---------------------- BEGIN Bug fix 6148833 -----------------------------
7411
7412 -- Since we can't modify IN function arguments, we have to make a copy
7413 -- of the clause.
7414 l_where_order_by := p_where_order_by;
7415
7416 -- Insert a space before an ORDER BY clause, so that
7417 -- order by elimination takes place for inner query blocks.
7418 Insert_Order_By_Space (
7419 p_where_order_by => l_where_order_by
7420 );
7421
7422 ---------------------- END Bug fix 6148833 -------------------------------
7423
7424 code_debug(l_api_name ||' calling update fnd_flex_validation_tables ');
7425 -- no API available from fnd logged bug 3957430
7426 UPDATE FND_FLEX_VALIDATION_TABLES
7427 SET APPLICATION_TABLE_NAME = p_table_name,
7428 VALUE_COLUMN_NAME = p_value_column_name,
7429 VALUE_COLUMN_TYPE = p_value_column_type,
7430 VALUE_COLUMN_SIZE = p_value_column_size,
7431 -- COMPILED_ATTRIBUTE_COLUMN_NAME = p_value_column_name,
7432 -- ENABLED_COLUMN_NAME = 'Y',
7433 -- HIERARCHY_LEVEL_COLUMN_NAME = 'Y',
7434 -- START_DATE_COLUMN_NAME = 'START_DATE_COLUMN_NAME',
7435 -- END_DATE_COLUMN_NAME = 'END_DATE_COLUMN_NAME',
7436 -- SUMMARY_ALLOWED_FLAG = 'N',
7437 -- SUMMARY_COLUMN_NAME = 'N',
7438 ID_COLUMN_NAME = p_id_column_name,
7439 ID_COLUMN_SIZE = p_id_column_size,
7440 ID_COLUMN_TYPE = p_id_column_type,
7441 MEANING_COLUMN_NAME = p_meaning_column_name,
7442 MEANING_COLUMN_SIZE = p_meaning_column_size,
7443 MEANING_COLUMN_TYPE = p_meaning_column_type,
7444 TABLE_APPLICATION_ID = p_table_application_id,
7445 ADDITIONAL_WHERE_CLAUSE = l_where_order_by,
7446 -- ADDITIONAL_QUICKPICK_COLUMNS = '',
7447 LAST_UPDATED_BY = l_owner,
7448 LAST_UPDATE_DATE = l_Sysdate,
7449 LAST_UPDATE_LOGIN = g_current_login_id
7450 WHERE FLEX_VALUE_SET_ID = p_value_set_id;
7451
7452 code_debug(l_api_name ||' calling update fnd_flex_validation_tables COMPLETED ');
7453 -- Standard check of p_commit
7454 IF FND_API.To_Boolean(p_commit) THEN
7455 COMMIT WORK;
7456 END IF;
7457
7458 x_return_status := FND_API.G_RET_STS_SUCCESS;
7459
7460 EXCEPTION
7461 WHEN FND_API.G_EXC_ERROR THEN
7462 code_debug(l_api_name ||' EXCEPTION desired ');
7463 IF FND_API.To_Boolean(p_commit) THEN
7464 ROLLBACK TO Update_Value_Set_Table_Inf_PUB;
7465 END IF;
7466 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
7470 WHEN OTHERS THEN
7467 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7468 ,p_count => x_msg_count
7469 ,p_data => x_msg_data);
7471 code_debug(l_api_name ||' EXCEPTION OTHERS '|| SQLERRM);
7472 IF FND_API.To_Boolean(p_commit) THEN
7473 ROLLBACK TO Update_Value_Set_Table_Inf_PUB;
7474 END IF;
7475 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7476
7477 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7478 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7479 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
7480 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7481 FND_MSG_PUB.Add;
7482 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7483 ,p_count => x_msg_count
7484 ,p_data => x_msg_data);
7485
7486 END Update_Value_Set_table_Inf;
7487
7488 ----------------------------------------------------------------------
7489
7490 --------------------------
7491 -- Value Set Value APIs --
7492 --------------------------
7493
7494 ----------------------------------------------------------------------
7495
7496 PROCEDURE Create_Value_Set_Val (
7497 p_api_version IN NUMBER
7498 ,p_value_set_name IN VARCHAR2
7499 ,p_internal_name IN VARCHAR2
7500 ,p_display_name IN VARCHAR2
7501 ,p_description IN VARCHAR2
7502 ,p_sequence IN NUMBER
7503 ,p_start_date IN DATE
7504 ,p_end_date IN DATE
7505 ,p_enabled IN VARCHAR2
7506 ,p_owner IN NUMBER DEFAULT NULL
7507 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7508 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7509 ,x_return_status OUT NOCOPY VARCHAR2
7510 ,x_msg_count OUT NOCOPY NUMBER
7511 ,x_msg_data OUT NOCOPY VARCHAR2
7512 ) IS
7513
7514 l_api_name VARCHAR2(30);
7515 --we don't use l_api_version yet, but eventually we might:
7516 --if we change required parameters, version goes from n.x to (n+1).x
7517 --if we change optional parameters, version goes from x.n to x.(n+1)
7518 l_api_version NUMBER;
7519 l_storage_value VARCHAR2(32767);
7520
7521 l_flex_value_id FND_FLEX_VALUES.flex_value_id%TYPE;
7522 -- l_Sysdate DATE;
7523 l_rowid VARCHAR2(100);
7524 l_owner NUMBER;
7525
7526 BEGIN
7527
7528 l_api_name := 'Create_Value_Set_Val';
7529 l_api_version := 1.0;
7530
7531 -- Standard start of API savepoint
7532 IF FND_API.To_Boolean(p_commit) THEN
7533 SAVEPOINT Create_Value_Set_Val_PUB;
7534 END IF;
7535
7536 -- Initialize message list even though we don't currently use it
7537 IF FND_API.To_Boolean(p_init_msg_list) THEN
7538 FND_MSG_PUB.Initialize;
7539 END IF;
7540
7541 -- Check for call compatibility
7542 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
7543 l_api_name, G_PKG_NAME)
7544 THEN
7545 RAISE FND_API.G_EXC_ERROR;
7546 END IF;
7547
7548 IF (p_owner IS NULL OR p_owner = -1) THEN
7549 l_owner := g_current_user_id;
7550 ELSE
7551 l_owner := p_owner;
7552 END IF;
7553
7554 /***
7555 INSERT INTO fnd_lookup_values
7556 (
7557 LOOKUP_TYPE
7558 ,LANGUAGE
7559 ,LOOKUP_CODE
7560 ,MEANING
7561 ,DESCRIPTION
7562 ,ENABLED_FLAG
7563 ,START_DATE_ACTIVE
7564 ,END_DATE_ACTIVE
7565 ,SOURCE_LANG
7566 ,SECURITY_GROUP_ID
7567 ,VIEW_APPLICATION_ID
7568 ,TERRITORY_CODE
7569 ,ATTRIBUTE_CATEGORY
7570 ,ATTRIBUTE1
7571 ,ATTRIBUTE2
7572 ,ATTRIBUTE3
7573 ,ATTRIBUTE4
7574 ,ATTRIBUTE5
7575 ,ATTRIBUTE6
7576 ,ATTRIBUTE7
7577 ,ATTRIBUTE8
7578 ,ATTRIBUTE9
7579 ,ATTRIBUTE10
7580 ,ATTRIBUTE11
7581 ,ATTRIBUTE12
7582 ,ATTRIBUTE13
7583 ,ATTRIBUTE14
7584 ,ATTRIBUTE15
7585 ,TAG
7586 ,CREATED_BY
7587 ,CREATION_DATE
7588 ,LAST_UPDATED_BY
7589 ,LAST_UPDATE_DATE
7590 ,LAST_UPDATE_LOGIN
7591 )
7592 SELECT
7593 'EGO_EF_'||p_value_set_name||'_TYPE' --LOOKUP_TYPE
7594 ,L.LANGUAGE_CODE --LANGUAGE
7595 ,p_internal_name --LOOKUP_CODE
7596 ,p_display_name --MEANING
7597 ,p_description --DESCRIPTION
7598 ,p_enabled --ENABLED_FLAG
7599 ,p_start_date --START_DATE_ACTIVE
7600 ,p_end_date --END_DATE_ACTIVE
7601 ,USERENV('LANG') --SOURCE_LANG
7602 ,0 --SECURITY_GROUP_ID
7603 ,p_application_id --VIEW_APPLICATION_ID
7604 ,'' --TERRITORY_CODE
7608 ,'' --ATTRIBUTE3
7605 ,'' --ATTRIBUTE_CATEGORY
7606 ,'' --ATTRIBUTE1
7607 ,'' --ATTRIBUTE2
7609 ,'' --ATTRIBUTE4
7610 ,'' --ATTRIBUTE5
7611 ,'' --ATTRIBUTE6
7612 ,'' --ATTRIBUTE7
7613 ,'' --ATTRIBUTE8
7614 ,'' --ATTRIBUTE9
7615 ,'' --ATTRIBUTE10
7616 ,'' --ATTRIBUTE11
7617 ,'' --ATTRIBUTE12
7618 ,'' --ATTRIBUTE13
7619 ,'' --ATTRIBUTE14
7620 ,'' --ATTRIBUTE15
7621 ,to_char(p_sequence) --TAG
7622 ,g_current_user_id --CREATED_BY
7623 ,l_Sysdate --CREATION_DATE
7624 ,g_current_user_id --LAST_UPDATED_BY
7625 ,l_Sysdate --LAST_UPDATE_DATE
7626 ,g_current_login_id --LAST_UPDATE_LOGIN
7627 FROM FND_LANGUAGES L
7628 WHERE L.INSTALLED_FLAG in ('I', 'B');
7629 ***/
7630
7631 Process_Value_Set_Val (
7632 p_transaction_type => 'CREATE'
7633 ,p_value_set_name => p_value_set_name
7634 ,p_internal_name => p_internal_name
7635 ,p_display_name => p_display_name
7636 ,p_description => p_description
7637 ,p_sequence => p_sequence
7638 ,p_start_date => p_start_date
7639 ,p_end_date => p_end_date
7640 ,p_enabled => p_enabled
7641 ,p_owner => l_owner
7642 ,x_return_status => x_return_status
7643 );
7644 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7645 RAISE FND_API.G_EXC_ERROR;
7646 END IF;
7647
7648 -- Standard check of p_commit
7649 IF FND_API.To_Boolean(p_commit) THEN
7650 COMMIT WORK;
7651 END IF;
7652
7653 x_return_status := FND_API.G_RET_STS_SUCCESS;
7654
7655 EXCEPTION
7656 WHEN FND_API.G_EXC_ERROR THEN
7657 code_debug( l_api_name || ' EXCEPTION - FND_API.G_EXC_ERROR ');
7658 IF FND_API.To_Boolean(p_commit) THEN
7659 ROLLBACK TO Create_Value_Set_Val_PUB;
7660 END IF;
7661 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
7662 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7663 ,p_count => x_msg_count
7664 ,p_data => x_msg_data);
7665 WHEN OTHERS THEN
7666 code_debug( l_api_name || ' EXCEPTION - OTHERS ');
7667 code_debug (l_api_name|| sqlerrm );
7668 IF FND_API.To_Boolean(p_commit) THEN
7669 ROLLBACK TO Create_Value_Set_Val_PUB;
7670 END IF;
7671 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7672
7673 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7674 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7675 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
7676 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7677 FND_MSG_PUB.Add;
7678 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7679 ,p_count => x_msg_count
7680 ,p_data => x_msg_data);
7681
7682 END Create_Value_Set_Val;
7683
7684 ----------------------------------------------------------------------
7685
7686 PROCEDURE Update_Value_Set_Val (
7687 p_api_version IN NUMBER
7688 ,p_value_set_name IN VARCHAR2
7689 ,p_internal_name IN VARCHAR2
7690 ,p_display_name IN VARCHAR2
7691 ,p_description IN VARCHAR2
7692 ,p_sequence IN NUMBER
7693 ,p_start_date IN DATE
7694 ,p_end_date IN DATE
7695 ,p_enabled IN VARCHAR2
7696 ,p_owner IN NUMBER DEFAULT NULL
7697 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
7698 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
7699 ,x_return_status OUT NOCOPY VARCHAR2
7700 ,x_msg_count OUT NOCOPY NUMBER
7701 ,x_msg_data OUT NOCOPY VARCHAR2
7702 ) IS
7703
7704 l_api_name VARCHAR2(30);
7705 --we don't use l_api_version yet, but eventually we might:
7706 --if we change required parameters, version goes from n.x to (n+1).x
7707 --if we change optional parameters, version goes from x.n to x.(n+1)
7708 l_api_version NUMBER;
7709 l_owner NUMBER;
7710
7711 BEGIN
7712
7713 l_api_name := 'Update_Value_Set_Val';
7714 l_api_version := 1.0;
7715
7716 -- Standard start of API savepoint
7717 IF FND_API.To_Boolean(p_commit) THEN
7718 SAVEPOINT Update_Value_Set_Val_PUB;
7719 END IF;
7720
7721 -- Initialize message list even though we don't currently use it
7722 IF FND_API.To_Boolean(p_init_msg_list) THEN
7723 FND_MSG_PUB.Initialize;
7724 END IF;
7725
7726 -- Check for call compatibility
7727 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
7728 l_api_name, G_PKG_NAME)
7732
7729 THEN
7730 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7731 END IF;
7733 IF (p_owner IS NULL OR p_owner = -1) THEN
7734 l_owner := g_current_user_id;
7735 ELSE
7736 l_owner := p_owner;
7737 END IF;
7738 /***
7739 l_lookup_type := 'EGO_EF_'||p_value_set_name||'_TYPE';
7740
7741 UPDATE FND_LOOKUP_VALUES
7742 SET MEANING = p_display_name,
7743 DESCRIPTION = p_description,
7744 ENABLED_FLAG = p_enabled,
7745 START_DATE_ACTIVE = p_start_date,
7746 END_DATE_ACTIVE = p_end_date,
7747 TAG = TO_CHAR(p_sequence),
7748 LAST_UPDATED_BY = g_current_user_id,
7749 LAST_UPDATE_DATE = l_Sysdate,
7750 LAST_UPDATE_LOGIN = g_current_login_id,
7751 SOURCE_LANG = USERENV('LANG')
7752 WHERE LOOKUP_TYPE = l_lookup_type
7753 AND LOOKUP_CODE = p_internal_name
7754 AND VIEW_APPLICATION_ID = p_application_id
7755 --AND LANGUAGE = USERENV('LANG');
7756 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
7757 ***/
7758 Process_Value_Set_Val (
7759 p_transaction_type => 'UPDATE'
7760 ,p_value_set_name => p_value_set_name
7761 ,p_internal_name => p_internal_name
7762 ,p_display_name => p_display_name
7763 ,p_description => p_description
7764 ,p_sequence => p_sequence
7765 ,p_start_date => p_start_date
7766 ,p_end_date => p_end_date
7767 ,p_enabled => p_enabled
7768 ,p_owner => l_owner
7769 ,x_return_status => x_return_status
7770 );
7771 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7772 RAISE FND_API.G_EXC_ERROR;
7773 END IF;
7774
7775 -- Standard check of p_commit
7776 IF FND_API.To_Boolean(p_commit) THEN
7777 COMMIT WORK;
7778 END IF;
7779
7780 x_return_status := FND_API.G_RET_STS_SUCCESS;
7781
7782 EXCEPTION
7783 WHEN FND_API.G_EXC_ERROR THEN
7784 code_debug( l_api_name || ' EXCEPTION - FND_API.G_EXC_ERROR ');
7785 IF FND_API.To_Boolean(p_commit) THEN
7786 ROLLBACK TO Update_Value_Set_Val_PUB;
7787 END IF;
7788 x_RETURN_STATUS := FND_API.G_RET_STS_ERROR;
7789 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7790 ,p_count => x_msg_count
7791 ,p_data => x_msg_data);
7792 WHEN OTHERS THEN
7793 code_debug( l_api_name || ' EXCEPTION - OTHERS ');
7794 code_debug (l_api_name|| sqlerrm );
7795 IF FND_API.To_Boolean(p_commit) THEN
7796 ROLLBACK TO Update_Value_Set_Val_PUB;
7797 END IF;
7798 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7799
7800 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7801 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
7802 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
7803 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7804 FND_MSG_PUB.Add;
7805 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7806 ,p_count => x_msg_count
7807 ,p_data => x_msg_data);
7808
7809 END Update_Value_Set_Val;
7810
7811
7812 PROCEDURE Translate_Value_Set_Val
7813 (p_api_version IN NUMBER
7814 ,p_value_set_name IN VARCHAR2
7815 ,p_internal_name IN VARCHAR2
7816 ,p_display_name IN VARCHAR2
7817 ,p_description IN VARCHAR2
7818 ,p_last_update_date IN VARCHAR2
7819 ,p_last_updated_by IN NUMBER
7820 ,p_init_msg_list IN VARCHAR2
7821 ,p_commit IN VARCHAR2
7822 ,x_return_status OUT NOCOPY VARCHAR2
7823 ,x_msg_count OUT NOCOPY NUMBER
7824 ,x_msg_data OUT NOCOPY VARCHAR2
7825 ) IS
7826 l_flex_value_id fnd_flex_values.flex_value_id%TYPE;
7827 l_value_set_id fnd_flex_values.flex_value_set_id%TYPE;
7828 l_validation_type fnd_flex_value_sets.validation_type%TYPE;
7829
7830 l_vsv_row fnd_flex_values%ROWTYPE;
7831 l_vsvtl_row fnd_flex_values_tl%ROWTYPE;
7832
7833 CURSOR c_get_vs_details (cp_value_set_id IN NUMBER) IS
7834 SELECT vsvtl.last_updated_by, vsvtl.last_update_date
7835 FROM FND_FLEX_VALUES vsv, FND_FLEX_VALUES_TL vsvtl
7836 WHERE vsv.flex_value_set_id = cp_value_set_id
7837 AND vsv.flex_value = p_internal_name
7838 AND vsv.flex_value_id = vsvtl.flex_value_id
7839 AND USERENV('LANG') IN (language, source_lang);
7840
7841
7842 l_last_update_login fnd_flex_values.last_update_login%TYPE;
7843 l_last_update_date fnd_flex_values.last_update_date%TYPE;
7844 l_last_updated_by fnd_flex_values.last_updated_by%TYPE;
7845
7846 BEGIN
7847 SELECT vs.flex_value_set_id, vs.validation_type
7848 INTO l_value_set_id, l_validation_type
7849 FROM FND_FLEX_VALUE_SETS vs
7850 WHERE vs.flex_value_set_name = p_value_set_name;
7851
7852 IF l_validation_type = G_TRANS_IND_VALIDATION_CODE THEN
7853
7854 OPEN c_get_vs_details (cp_value_set_id => l_value_set_id);
7855 FETCH c_get_vs_details INTO l_last_updated_by, l_last_update_date;
7856 CLOSE c_get_vs_details;
7857
7858 l_last_update_login := FND_GLOBAL.Login_Id;
7859
7863 ,l_last_update_date
7860 IF (fnd_load_util.upload_test(p_last_updated_by
7861 ,p_last_update_date
7862 ,l_last_updated_by
7864 ,NULL)) THEN
7865 SELECT vsv.*
7866 INTO l_vsv_row
7867 FROM FND_FLEX_VALUES vsv
7868 WHERE vsv.flex_value_set_id = l_value_set_id
7869 AND vsv.flex_value = p_internal_name;
7870
7871 FND_FLEX_VALUES_PKG.UPDATE_ROW
7872 (x_flex_value_id => l_vsv_row.flex_value_id
7873 ,x_attribute_sort_order => l_vsv_row.attribute_sort_order
7874 ,x_flex_value_set_id => l_value_set_id
7875 ,x_flex_value => p_internal_name
7876 ,x_enabled_flag => l_vsv_row.enabled_flag
7877 ,x_summary_flag => l_vsv_row.summary_flag
7878 ,x_start_date_active => l_vsv_row.start_date_active
7879 ,x_end_date_active => l_vsv_row.end_date_active
7880 ,x_parent_flex_value_low => l_vsv_row.parent_flex_value_low
7881 ,x_parent_flex_value_high => l_vsv_row.parent_flex_value_high
7882 ,x_structured_hierarchy_level => l_vsv_row.structured_hierarchy_level
7883 ,x_hierarchy_level => l_vsv_row.hierarchy_level
7884 ,x_compiled_value_attributes => l_vsv_row.compiled_value_attributes
7885 ,x_value_category => l_vsv_row.value_category
7886 ,x_attribute1 => l_vsv_row.attribute1
7887 ,x_attribute2 => l_vsv_row.attribute2
7888 ,x_attribute3 => l_vsv_row.attribute3
7889 ,x_attribute4 => l_vsv_row.attribute4
7890 ,x_attribute5 => l_vsv_row.attribute5
7891 ,x_attribute6 => l_vsv_row.attribute6
7892 ,x_attribute7 => l_vsv_row.attribute7
7893 ,x_attribute8 => l_vsv_row.attribute8
7894 ,x_attribute9 => l_vsv_row.attribute9
7895 ,x_attribute10 => l_vsv_row.attribute10
7896 ,x_attribute11 => l_vsv_row.attribute11
7897 ,x_attribute12 => l_vsv_row.attribute12
7898 ,x_attribute13 => l_vsv_row.attribute13
7899 ,x_attribute14 => l_vsv_row.attribute14
7900 ,x_attribute15 => l_vsv_row.attribute15
7901 ,x_attribute16 => l_vsv_row.attribute16
7902 ,x_attribute17 => l_vsv_row.attribute17
7903 ,x_attribute18 => l_vsv_row.attribute18
7904 ,x_attribute19 => l_vsv_row.attribute19
7905 ,x_attribute20 => l_vsv_row.attribute20
7906 ,x_attribute21 => l_vsv_row.attribute21
7907 ,x_attribute22 => l_vsv_row.attribute22
7908 ,x_attribute23 => l_vsv_row.attribute23
7909 ,x_attribute24 => l_vsv_row.attribute24
7910 ,x_attribute25 => l_vsv_row.attribute25
7911 ,x_attribute26 => l_vsv_row.attribute26
7912 ,x_attribute27 => l_vsv_row.attribute27
7913 ,x_attribute28 => l_vsv_row.attribute28
7914 ,x_attribute29 => l_vsv_row.attribute29
7915 ,x_attribute30 => l_vsv_row.attribute30
7916 ,x_attribute31 => l_vsv_row.attribute31
7917 ,x_attribute32 => l_vsv_row.attribute32
7918 ,x_attribute33 => l_vsv_row.attribute33
7919 ,x_attribute34 => l_vsv_row.attribute34
7920 ,x_attribute35 => l_vsv_row.attribute35
7921 ,x_attribute36 => l_vsv_row.attribute36
7922 ,x_attribute37 => l_vsv_row.attribute37
7923 ,x_attribute38 => l_vsv_row.attribute38
7924 ,x_attribute39 => l_vsv_row.attribute39
7925 ,x_attribute40 => l_vsv_row.attribute40
7926 ,x_attribute41 => l_vsv_row.attribute41
7927 ,x_attribute42 => l_vsv_row.attribute42
7928 ,x_attribute43 => l_vsv_row.attribute43
7929 ,x_attribute44 => l_vsv_row.attribute44
7930 ,x_attribute45 => l_vsv_row.attribute45
7931 ,x_attribute46 => l_vsv_row.attribute46
7932 ,x_attribute47 => l_vsv_row.attribute47
7933 ,x_attribute48 => l_vsv_row.attribute48
7934 ,x_attribute49 => l_vsv_row.attribute49
7935 ,x_attribute50 => l_vsv_row.attribute50
7936 ,x_flex_value_meaning => p_display_name
7937 ,x_description => p_description
7938 ,x_last_update_date => SYSDATE
7939 ,x_last_updated_by => p_last_updated_by
7940 ,x_last_update_login => l_last_update_login);
7941 END IF;
7942 END IF;
7943 x_return_status := 'S';
7944 EXCEPTION
7945 WHEN OTHERS THEN
7946 x_return_status := 'E';
7947 x_msg_data := SQLERRM;
7948 END Translate_Value_Set_Val;
7949
7950 ----------------------------------------------------------------------
7951
7952 FUNCTION has_flex_binding (cp_value_set_id IN NUMBER)
7953 RETURN VARCHAR2 IS
7954 -- T if Value Set Table has flex binding in where clause
7955 -- F if flex binding is not present.
7956 l_return_status VARCHAR2(1);
7957 l_dummy_number NUMBER;
7958 BEGIN
7959 l_return_status := FND_API.G_FALSE;
7963 END IF;
7960 l_dummy_number := INSTR(get_vs_table_where_clause(cp_value_set_id),':$FLEX$.');
7961 IF NVL(l_dummy_number,0) <> 0 THEN
7962 l_return_status := FND_API.G_TRUE;
7964 RETURN l_return_status;
7965 EXCEPTION
7966 WHEN OTHERS THEN
7967 RETURN l_return_status;
7968 END has_flex_binding;
7969
7970 ---------------------------------------------------------------------
7971 -- Requirement: bug: 3542670
7972 --
7973 -- Function: To check whether the value set is editable
7974 -- Returns T if valueset is editable
7975 -- Returns F if valueset is not editable
7976 -- Parameters:
7977 -- IN
7978 -- p_value_set_id : value set id
7979 -- OUT
7980 -- NONE
7981 --
7982 ---------------------------------------------------------------------
7983 FUNCTION is_vs_editable (cp_value_set_id IN NUMBER)
7984 RETURN VARCHAR2 IS
7985 -- T is VS is editable
7986 -- F if VS is not editable.
7987 l_return_status VARCHAR2(1);
7988 l_vs_row fnd_flex_value_sets%ROWTYPE;
7989 BEGIN
7990 l_return_status := FND_API.G_TRUE;
7991 SELECT *
7992 INTO l_vs_row
7993 FROM fnd_flex_value_sets
7994 WHERE flex_value_set_id = cp_value_set_id;
7995
7996 IF l_vs_row.created_by IN (1,2)
7997 OR
7998 l_vs_row.security_enabled_flag <> 'N'
7999 OR
8000 (l_vs_row.format_type = 'C'
8001 AND
8002 ( l_vs_row.alphanumeric_allowed_flag = 'N'
8003 OR
8004 l_vs_row.uppercase_only_flag = 'Y'
8005 OR
8006 l_vs_row.numeric_mode_enabled_flag = 'Y'
8007 )
8008 )
8009 THEN
8010 l_return_status := FND_API.G_FALSE;
8011 END IF;
8012 RETURN l_return_status;
8013 EXCEPTION
8014 WHEN OTHERS THEN
8015 RETURN FND_API.G_FALSE;
8016 END is_vs_editable;
8017
8018 ---------------------------------------------------------------------
8019 -- Requirement: bug: 3542670
8020 --
8021 -- Function: To check whether the value set value is editable
8022 -- Returns T if valueset value is editable
8023 -- Returns F if valueset value is not editable
8024 -- Parameters:
8025 -- IN
8026 -- p_value_set_id : value set id
8027 -- OUT
8028 -- NONE
8029 --
8030 ---------------------------------------------------------------------
8031 FUNCTION is_vs_value_editable (cp_vs_value_id IN NUMBER)
8032 RETURN VARCHAR2 IS
8033 -- T is VS Value is editable
8034 -- F if VS Value is not editable.
8035 l_return_status VARCHAR2(1);
8036
8037 l_vsv_created_by fnd_flex_values.created_by%TYPE;
8038 l_vs_created_by fnd_flex_values.created_by%TYPE;
8039 l_vs_format_type fnd_flex_value_sets.format_type%TYPE;
8040 l_vs_validation_type fnd_flex_value_sets.validation_type%TYPE;
8041 l_vs_alpha_numeric_allowed fnd_flex_value_sets.alphanumeric_allowed_flag%TYPE;
8042 l_vs_uppercase_only fnd_flex_value_sets.uppercase_only_flag%TYPE;
8043 l_vs_numeric_mode_enabled fnd_flex_value_sets.numeric_mode_enabled_flag%TYPE;
8044 l_vs_security_enabled fnd_flex_value_sets.security_enabled_flag%TYPE;
8045
8046 BEGIN
8047
8048 l_return_status := FND_API.G_TRUE;
8049 SELECT a.created_by, b.format_type, b.validation_type,
8050 b.alphanumeric_allowed_flag, b.uppercase_only_flag,
8051 b.numeric_mode_enabled_flag, b.security_enabled_flag, b.created_by
8052 INTO l_vsv_created_by, l_vs_format_type, l_vs_validation_type,
8053 l_vs_alpha_numeric_allowed, l_vs_uppercase_only,
8054 l_vs_numeric_mode_enabled, l_vs_security_enabled, l_vs_created_by
8055 FROM fnd_flex_values a, fnd_flex_value_sets b
8056 WHERE a.flex_value_id = cp_vs_value_id
8057 AND a.flex_value_set_id = b.flex_value_set_id;
8058
8059 IF l_vsv_created_by IN (1,2)
8060 OR
8061 l_vs_created_by IN (1,2)
8062 OR
8063 l_vs_security_enabled <> 'N'
8064 OR
8065 (l_vs_format_type = 'C'
8066 AND
8067 ( l_vs_alpha_numeric_allowed = 'N'
8068 OR
8069 l_vs_uppercase_only = 'Y'
8070 OR
8071 l_vs_numeric_mode_enabled = 'Y'
8072 )
8073 )
8074 THEN
8075 l_return_status := FND_API.G_FALSE;
8076 END IF;
8077 RETURN l_return_status;
8078 EXCEPTION
8079 WHEN OTHERS THEN
8080 RETURN FND_API.G_FALSE;
8081 END is_vs_value_editable;
8082
8083 ---------------------------------------------------------------------
8084 -- Requirement: bug: 3542670
8085 --
8086 -- Function: To process the value set display sequence
8087 -- If the display_sequence is same as value_set_value_id,
8088 -- then record is not stored in EGO_VS_VALUES_DISP_ORDER
8089 -- else a record is stored in EGO_VS_VALUES_DISP_ORDER
8090 -- Parameters:
8091 -- IN
8092 -- p_transaction_type : CREATE,UPDATE
8093 -- p_value_set_id : value_set_id takes precedence over value_set_name
8094 -- if both the parameters are passed
8095 -- p_value_set_name : value set name
8096 -- p_value_set_value_id : value set value id takes precedence over
8097 -- value set value if both the parameters are passed
8098 -- p_value_set_value : value set value
8102 -- OUT
8099 -- p_sequence : sequence to be stored
8100 -- p_init_msg_list :
8101 -- p_commit :
8103 -- x_return_status OUT NOCOPY VARCHAR2
8104 -- x_msg_count OUT NOCOPY NUMBER
8105 -- x_msg_data OUT NOCOPY VARCHAR2
8106 --
8107 ---------------------------------------------------------------------
8108 PROCEDURE process_vs_value_sequence
8109 (p_api_version IN NUMBER
8110 ,p_transaction_type IN VARCHAR2
8111 ,p_value_set_id IN NUMBER DEFAULT NULL
8112 ,p_value_set_name IN VARCHAR2 DEFAULT NULL
8113 ,p_value_set_value_id IN NUMBER DEFAULT NULL
8114 ,p_value_set_value IN VARCHAR2 DEFAULT NULL
8115 ,p_sequence IN NUMBER
8116 ,p_owner IN NUMBER DEFAULT NULL
8117 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8118 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8119 ,x_return_status OUT NOCOPY VARCHAR2
8120 ,x_msg_count OUT NOCOPY NUMBER
8121 ,x_msg_data OUT NOCOPY VARCHAR2
8122 ) IS
8123
8124 l_api_name VARCHAR2(30);
8125 l_api_version NUMBER;
8126 l_value_set_value_id fnd_flex_values.flex_value_id%TYPE;
8127 l_value_set_id fnd_flex_value_sets.flex_value_set_id%TYPE;
8128 l_sequence EGO_VS_VALUES_DISP_ORDER.disp_sequence%TYPE;
8129 l_invalid_params BOOLEAN;
8130 l_create_sequence BOOLEAN;
8131 l_update_sequence BOOLEAN;
8132 l_Sysdate DATE;
8133 l_owner NUMBER;
8134
8135 CURSOR c_get_disp_sequence (cp_flex_value_id IN NUMBER) is
8136 SELECT disp_sequence
8137 FROM ego_vs_values_disp_order
8138 WHERE value_set_value_id = cp_flex_value_id;
8139
8140 BEGIN
8141 l_api_name := 'process_vs_value_sequence';
8142 l_api_version := 1.0;
8143
8144 IF FND_API.To_Boolean( p_commit ) THEN
8145 SAVEPOINT PROCESS_VS_VALUE_SEQUENCE_SP;
8146 END IF;
8147
8148 --
8149 -- Initialize message list
8150 --
8151 IF FND_API.To_Boolean(p_init_msg_list) THEN
8152 FND_MSG_PUB.Initialize;
8153 END IF;
8154
8155 code_debug(l_api_name||' msg pub initialized ' );
8156 --
8157 --Standard checks
8158 --
8159 IF NOT FND_API.Compatible_API_Call (l_api_version
8160 ,p_api_version
8161 ,l_api_name
8162 ,g_pkg_name) THEN
8163 code_debug (l_api_name ||' invalid api version ');
8164 RAISE FND_API.G_EXC_ERROR;
8165 END IF;
8166
8167 IF (p_owner IS NULL OR p_owner = -1) THEN
8168 l_owner := g_current_user_id;
8169 ELSE
8170 l_owner := p_owner;
8171 END IF;
8172
8173 l_invalid_params := FALSE;
8174 IF ( p_sequence IS NULL
8175 OR
8176 ( p_value_set_value_id IS NULL
8177 AND
8178 (p_value_set_value IS NULL OR (p_value_set_name IS NULL AND p_value_set_id IS NULL))
8179 )
8180 ) THEN
8181 l_invalid_params := TRUE;
8182 ELSE
8183 IF p_value_set_value_id IS NOT NULL THEN
8184 BEGIN
8185 SELECT flex_value_id, flex_value_set_id
8186 INTO l_value_set_value_id, l_value_set_id
8187 FROM fnd_flex_values
8188 WHERE flex_value_id = p_value_set_value_id;
8189 EXCEPTION
8190 WHEN OTHERS THEN
8191 l_invalid_params := TRUE;
8192 END;
8193 ELSE
8194 BEGIN
8195 SELECT a.flex_value_id, a.flex_value_set_id
8196 INTO l_value_set_value_id, l_value_set_id
8197 FROM fnd_flex_values a, fnd_flex_value_sets b
8198 WHERE a.flex_value_set_id = b.flex_value_set_id
8199 AND a.flex_value = p_value_set_value
8200 AND (b.flex_value_set_id = p_value_set_id OR b.flex_value_set_name = p_value_set_name);
8201 EXCEPTION
8202 WHEN OTHERS THEN
8203 l_invalid_params := TRUE;
8204 END;
8205 END IF;
8206 END IF;
8207
8208 IF l_invalid_params THEN
8209 fnd_message.Set_Name(G_APP_NAME, 'EGO_API_INVALID_PARAMS');
8210 fnd_message.Set_Token(G_PKG_NAME_TOKEN, G_PKG_NAME);
8211 fnd_message.Set_Token(G_API_NAME_TOKEN, l_api_name);
8212 FND_MSG_PUB.Add;
8213 RAISE FND_API.G_EXC_ERROR;
8214 END IF;
8215
8216
8217 l_create_sequence := FALSE;
8218 l_update_sequence := FALSE;
8219 OPEN c_get_disp_sequence (cp_flex_value_id => l_value_set_value_id);
8220 FETCH c_get_disp_sequence INTO l_sequence;
8221 IF c_get_disp_sequence%NOTFOUND THEN
8222 IF p_sequence <> l_value_set_value_id THEN
8223 l_create_sequence := TRUE;
8224 END IF;
8225 ELSE
8226 IF l_sequence <> p_sequence THEN
8227 l_update_sequence := TRUE;
8228 END IF;
8229 END IF;
8230
8231 l_Sysdate := SYSDATE;
8232 IF l_create_sequence THEN
8233 INSERT INTO EGO_VS_VALUES_DISP_ORDER
8234 (value_set_value_id
8235 ,value_set_id
8236 ,disp_sequence
8237 ,created_by
8238 ,creation_date
8239 ,last_updated_by
8240 ,last_update_date
8241 ,last_update_login)
8245 ,p_sequence
8242 VALUES
8243 (l_value_set_value_id
8244 ,l_value_set_id
8246 ,l_owner
8247 ,l_Sysdate
8248 ,l_owner
8249 ,l_Sysdate
8250 ,G_CURRENT_LOGIN_ID);
8251 END IF;
8252
8253 IF l_update_sequence THEN
8254 UPDATE EGO_VS_VALUES_DISP_ORDER
8255 SET disp_sequence = p_sequence
8256 ,last_updated_by = l_owner
8257 ,last_update_date = l_sysdate
8258 ,last_update_login = G_CURRENT_LOGIN_ID
8259 WHERE value_set_value_id = l_value_set_value_id;
8260 END IF;
8261
8262 IF FND_API.To_Boolean( p_commit ) THEN
8263 COMMIT WORK;
8264 END IF;
8265 x_return_status := FND_API.G_RET_STS_SUCCESS;
8266
8267 EXCEPTION
8268 WHEN FND_API.G_EXC_ERROR THEN
8269 IF FND_API.To_Boolean( p_commit ) THEN
8270 ROLLBACK TO PROCESS_VS_VALUE_SEQUENCE_SP;
8271 END IF;
8272 x_return_status := FND_API.G_RET_STS_ERROR;
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 WHEN OTHERS THEN
8277 IF FND_API.To_Boolean( p_commit ) THEN
8278 ROLLBACK TO PROCESS_VS_VALUE_SEQUENCE_SP;
8279 END IF;
8280
8281 END process_vs_value_sequence;
8282
8283 ----------------------------------------------------------------------
8284
8285 -----------------------------
8286 -- Object Association APIs --
8287 -----------------------------
8288
8289 ----------------------------------------------------------------------
8290
8291 PROCEDURE Create_Association (
8292 p_api_version IN NUMBER
8293 ,p_association_id IN NUMBER DEFAULT NULL
8294 ,p_object_id IN NUMBER
8295 ,p_classification_code IN VARCHAR2
8296 ,p_data_level IN VARCHAR2
8297 ,p_attr_group_id IN NUMBER
8298 ,p_enabled_flag IN VARCHAR2
8299 ,p_view_privilege_id IN NUMBER --ignored for now
8300 ,p_edit_privilege_id IN NUMBER --ignored for now
8301 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8302 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8303 ,x_association_id OUT NOCOPY NUMBER
8304 ,x_return_status OUT NOCOPY VARCHAR2
8305 ,x_errorcode OUT NOCOPY NUMBER
8306 ,x_msg_count OUT NOCOPY NUMBER
8307 ,x_msg_data OUT NOCOPY VARCHAR2
8308 ) IS
8309
8310 l_api_name CONSTANT VARCHAR2(30) := 'Create_Association';
8311
8312 --we don't use l_api_version yet, but eventually we might:
8313 --if we change required parameters, version goes from n.x to (n+1).x
8314 --if we change optional parameters, version goes from x.n to x.(n+1)
8315 l_api_version CONSTANT NUMBER := 1.0;
8316
8317 l_attr_group_id NUMBER;
8318 l_Sysdate DATE := Sysdate;
8319 l_existing_datalevel VARCHAR2(30);
8320 l_attr_disp_name VARCHAR2(80);
8321 l_data_level_name VARCHAR2(80);
8322
8323 e_data_level_mismatch_error EXCEPTION;
8324 e_variant_assocs_excep EXCEPTION;
8325 l_variant_exist_count NUMBER;
8326 l_dyn_sql VARCHAR2(1000);
8327 l_style_exists VARCHAR2(1);
8328 l_attr_count NUMBER;
8329
8330 l_dummy_number NUMBER;
8331 l_variant_flag VARCHAR2(1);
8332
8333 CURSOR data_level_merge (cp_attr_group_id IN NUMBER
8334 ,cp_classification_code IN VARCHAR2) IS
8335 SELECT attr_grp_dl.data_level_id data_level_id, dl_meta.data_level_name data_level_name
8336 FROM ego_data_level_b dl_meta, ego_attr_group_dl attr_grp_dl
8337 WHERE attr_grp_dl.data_level_id = dl_meta.data_level_id
8338 AND attr_grp_dl.attr_group_id = cp_attr_group_id
8339 AND NOT EXISTS
8340 (SELECT 1
8341 FROM EGO_OBJ_AG_ASSOCS_B
8342 WHERE classification_code = p_classification_code
8343 AND attr_group_id = cp_attr_group_id
8344 AND data_level_id = dl_meta.data_level_id
8345 );
8346
8347 cursor_rec data_level_merge%ROWTYPE;
8348
8349
8350 BEGIN
8351
8352 -- Standard start of API savepoint
8353 IF FND_API.To_Boolean(p_commit) THEN
8354 SAVEPOINT Create_Association_PUB;
8355 END IF;
8356
8357 -- Check for call compatibility
8358 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
8359 l_api_name, G_PKG_NAME)
8360 THEN
8361 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8362 END IF;
8363 -- Initialize message list even though we don't currently use it
8364 IF FND_API.To_Boolean(p_init_msg_list) THEN
8365 FND_MSG_PUB.Initialize;
8366 END IF;
8367
8368 --Checking if the variant attribute group trying to be associated has attributes in it, if not raise exception
8369 SELECT Nvl(VARIANT, 'N')
8370 INTO l_variant_flag
8371 FROM EGO_ATTR_GROUPS_V WHERE ATTR_GROUP_ID = p_attr_group_id;
8372
8373 SELECT Count(1)
8374 INTO l_attr_count
8378 AND AGV.ATTR_GROUP_NAME = AV.ATTR_GROUP_NAME
8375 FROM EGO_ATTR_GROUPS_V AGV, EGO_ATTRS_V AV
8376 WHERE AGV.APPLICATION_ID = AV.APPLICATION_ID
8377 AND AGV.ATTR_GROUP_TYPE = AV.ATTR_GROUP_TYPE
8379 AND AGV.ATTR_GROUP_ID = p_attr_group_id;
8380
8381 IF(l_attr_count = 0 AND l_variant_flag = 'Y') THEN
8382 Fnd_Message.Set_Name (application => 'EGO',
8383 name => 'EGO_EF_NO_ATTR_EXIST'
8384 );
8385 FND_MSG_PUB.Add;
8386 RAISE e_variant_assocs_excep;
8387 END IF;
8388
8389 -- SSARNOBA: Why do we have this SELECT INTO statement? We're not using
8390 -- l_variant_exist_count anywhere.
8391 SELECT COUNT(*)
8392 INTO l_variant_exist_count
8393 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
8394 WHERE OBJECT_ID = p_object_id
8395 AND CLASSIFICATION_CODE = p_classification_code
8396 AND VARIANT = 'Y'
8397 AND EXISTS (SELECT 'X'
8398 FROM EGO_ATTR_GROUPS_V AGV
8399 WHERE AGV.ATTR_GROUP_ID = p_attr_group_id
8400 AND AGV.VARIANT = 'Y');
8401
8402 -- special handling for variant attribute groups
8403 BEGIN
8404 SELECT OBJECT_ID
8405 INTO l_dummy_number
8406 FROM FND_OBJECTS
8407 WHERE OBJECT_ID = p_object_id
8408 AND OBJ_NAME = 'EGO_ITEM';
8409
8410 IF(l_dummy_number IS NOT NULL) THEN
8411 EXECUTE IMMEDIATE 'SELECT EGO_STYLE_SKU_ITEM_PVT.IsStyle_Item_Exist_For_ICC(:1) FROM DUAL'
8412 INTO l_style_exists USING IN To_Number(p_classification_code);
8413 END IF;
8414
8415 EXCEPTION
8416 WHEN OTHERS THEN
8417 NULL;
8418 END;
8419
8420
8421 --EXECUTE IMMEDIATE l_dyn_sql;
8422 IF(l_style_exists = 'T' AND l_variant_flag = 'Y') THEN
8423 Fnd_Message.Set_Name (application => 'EGO',
8424 name => 'EGO_VARIANT_STYLE_EXIST'
8425 );
8426 FND_MSG_PUB.Add;
8427 RAISE e_variant_assocs_excep;
8428 END IF;
8429
8430 --l_existing_datalevel := Get_Associated_Datalevel(p_object_id, p_attr_group_id);
8431
8432 --IF ((l_existing_datalevel IS NOT NULL) AND (l_existing_datalevel <> p_data_level)) THEN
8433 -- RAISE e_data_level_mismatch_error;
8434 --END IF;
8435
8436
8437 --if association id is not provided, get association id from sequence
8438 --IF( p_association_id IS NULL ) THEN
8439 --SELECT EGO_ASSOCS_S.NEXTVAL INTO x_association_id FROM DUAL;
8440 --ELSE
8441 IF(p_association_id IS NOT NULL AND p_association_id > 0) THEN
8442 x_association_id := p_association_id;
8443 END IF;
8444
8445 IF(x_association_id IS NOT NULL) THEN
8446 -- used only for the creation of single association
8447 -- it is assumed that when the user is passing p_association_id , it is for a single association record
8448 INSERT INTO EGO_OBJ_AG_ASSOCS_B
8449 (
8450 ASSOCIATION_ID
8451 ,OBJECT_ID
8452 ,CLASSIFICATION_CODE
8453 ,DATA_LEVEL
8454 ,ATTR_GROUP_ID
8455 ,ENABLED_FLAG
8456 ,DATA_LEVEL_ID
8457 ,VIEW_PRIVILEGE_ID
8458 ,EDIT_PRIVILEGE_ID
8459 ,CREATION_DATE
8460 ,CREATED_BY
8461 ,LAST_UPDATE_DATE
8462 ,LAST_UPDATED_BY
8463 ,LAST_UPDATE_LOGIN
8464 )
8465 VALUES
8466 (
8467 x_association_id
8468 ,p_object_id
8469 ,p_classification_code
8470 ,p_data_level
8471 ,p_attr_group_id
8472 ,p_enabled_flag
8473 ,(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)
8474 ,p_view_privilege_id
8475 ,p_edit_privilege_id
8476 ,l_Sysdate
8477 ,g_current_user_id
8478 ,l_Sysdate
8479 ,g_current_user_id
8480 ,g_current_login_id
8481 );
8482 ELSE
8483 -- merge is used here to create association for all the data levels of an AG
8484 -- when all the data levels are to be associated, p_association_id is passed NULL
8485 OPEN data_level_merge(p_attr_group_id, p_classification_code);
8486 LOOP
8487 FETCH data_level_merge INTO cursor_rec;
8488 EXIT WHEN data_level_merge%NOTFOUND;
8489
8490 INSERT INTO EGO_OBJ_AG_ASSOCS_B
8491 (
8492 ASSOCIATION_ID,
8493 OBJECT_ID,
8494 CLASSIFICATION_CODE,
8495 DATA_LEVEL,
8496 ATTR_GROUP_ID,
8497 ENABLED_FLAG,
8498 DATA_LEVEL_ID,
8499 CREATION_DATE,
8500 CREATED_BY,
8501 LAST_UPDATE_DATE,
8502 LAST_UPDATED_BY,
8503 LAST_UPDATE_LOGIN
8504 )
8505 VALUES
8506 (
8507 EGO_ASSOCS_S.NEXTVAL,
8508 p_object_id,
8509 p_classification_code,
8510 cursor_rec.data_level_name,
8511 p_attr_group_id,
8512 p_enabled_flag,
8513 cursor_rec.data_level_id,
8514 l_Sysdate,
8515 g_current_user_id,
8516 l_Sysdate,
8520
8517 g_current_user_id,
8518 g_current_login_id
8519 );
8521 END LOOP;
8522 CLOSE data_level_merge;
8523
8524 END IF;
8525
8526 -- Standard check of p_commit
8527 IF FND_API.To_Boolean(p_commit) THEN
8528 COMMIT WORK;
8529 END IF;
8530
8531 x_return_status := FND_API.G_RET_STS_SUCCESS;
8532
8533 EXCEPTION
8534
8535 WHEN e_data_level_mismatch_error THEN
8536 IF FND_API.To_Boolean(p_commit) THEN
8537 ROLLBACK TO Create_Association_PUB;
8538 END IF;
8539 x_return_status := FND_API.G_RET_STS_ERROR;
8540
8541
8542 l_attr_disp_name := Get_Attr_Group_DispName(p_attr_group_id);
8543
8544 l_data_level_name := Get_Data_Level_DispName(l_existing_datalevel);
8545
8546
8547 Fnd_Message.Set_Name (application => 'EGO',
8548 name => 'EGO_EF_DL_MISMATCH_ERR'
8549 );
8550
8551 Fnd_Message.Set_Token ( token => 'ATTR_GROUP'
8552 , value => l_attr_disp_name
8553 , translate => false
8554 );
8555
8556
8557 Fnd_Message.Set_Token ( token => 'DATA_LEVEL'
8558 , value => l_data_level_name
8559 , translate => false
8560 );
8561
8562 x_msg_data := Fnd_Message.Get;
8563
8564 WHEN e_variant_assocs_excep THEN
8565 IF FND_API.To_Boolean(p_commit) THEN
8566 ROLLBACK TO Create_Association_PUB;
8567 END IF;
8568 x_return_status := FND_API.G_RET_STS_ERROR;
8569 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8570 ,p_count => x_msg_count
8571 ,p_data => x_msg_data);
8572
8573
8574
8575 WHEN OTHERS THEN
8576 CLOSE data_level_merge; --closing the error in case the cursor errors out
8577
8578 IF FND_API.To_Boolean(p_commit) THEN
8579 ROLLBACK TO Create_Association_PUB;
8580 END IF;
8581 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8582
8583 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8584 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8585 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8586 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8587 FND_MSG_PUB.Add;
8588 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8589 ,p_count => x_msg_count
8590 ,p_data => x_msg_data);
8591
8592 END Create_Association;
8593
8594 ----------------------------------------------------------------------
8595
8596 PROCEDURE Create_Association (
8597 p_api_version IN NUMBER
8598 ,p_association_id IN NUMBER DEFAULT NULL
8599 ,p_object_id IN NUMBER
8600 ,p_classification_code IN VARCHAR2
8601 ,p_data_level IN VARCHAR2
8602 ,p_application_id IN NUMBER
8603 ,p_attr_group_type IN VARCHAR2
8604 ,p_attr_group_name IN VARCHAR2
8605 ,p_enabled_flag IN VARCHAR2
8606 ,p_view_privilege_id IN NUMBER --ignored for now
8607 ,p_edit_privilege_id IN NUMBER --ignored for now
8608 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8609 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8610 ,x_association_id OUT NOCOPY NUMBER
8611 ,x_return_status OUT NOCOPY VARCHAR2
8612 ,x_errorcode OUT NOCOPY NUMBER
8613 ,x_msg_count OUT NOCOPY NUMBER
8614 ,x_msg_data OUT NOCOPY VARCHAR2
8615 ) IS
8616
8617 l_api_name CONSTANT VARCHAR2(30) := 'Create_Association';
8618
8619 l_attr_group_id NUMBER;
8620
8621 BEGIN
8622
8623 -- Standard start of API savepoint
8624 IF FND_API.To_Boolean(p_commit) THEN
8625 SAVEPOINT Create_Association_PUB;
8626 END IF;
8627
8628 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
8629 ,p_attr_group_type
8630 ,p_attr_group_name);
8631
8632 IF l_attr_group_id IS NULL THEN
8633 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8634 END IF;
8635
8636 EGO_EXT_FWK_PUB.Create_Association(
8637 p_api_version => p_api_version
8638 ,p_association_id => p_association_id
8639 ,p_object_id => p_object_id
8640 ,p_classification_code => p_classification_code
8641 ,p_data_level => p_data_level
8642 ,p_attr_group_id => l_attr_group_id
8643 ,p_enabled_flag => p_enabled_flag
8644 ,p_view_privilege_id => p_view_privilege_id
8645 ,p_edit_privilege_id => p_edit_privilege_id
8646 ,p_init_msg_list => p_init_msg_list
8647 ,p_commit => p_commit
8648 ,x_association_id => x_association_id
8652 ,x_msg_data => x_msg_data
8649 ,x_return_status => x_return_status
8650 ,x_errorcode => x_errorcode
8651 ,x_msg_count => x_msg_count
8653 );
8654
8655 -- Standard check of p_commit
8656 IF FND_API.To_Boolean(p_commit) THEN
8657 COMMIT WORK;
8658 END IF;
8659
8660 EXCEPTION
8661 WHEN OTHERS THEN
8662 IF FND_API.To_Boolean(p_commit) THEN
8663 ROLLBACK TO Create_Association_PUB;
8664 END IF;
8665 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8666
8667 IF l_attr_group_id IS NULL THEN
8668 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupIDFoundForPKs';
8669 ELSE
8670 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8671 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8672 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8673 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8674 FND_MSG_PUB.Add;
8675 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8676 ,p_count => x_msg_count
8677 ,p_data => x_msg_data);
8678 END IF;
8679
8680 END Create_Association;
8681
8682 ----------------------------------------------------------------------
8683
8684 PROCEDURE Create_Association (
8685 p_api_version IN NUMBER
8686 ,p_object_name IN VARCHAR2
8687 ,p_classification_code IN VARCHAR2
8688 ,p_data_level IN VARCHAR2
8689 ,p_application_id IN NUMBER
8690 ,p_attr_group_type IN VARCHAR2
8691 ,p_attr_group_name IN VARCHAR2
8692 ,p_enabled_flag IN VARCHAR2
8693 ,p_view_privilege_id IN NUMBER --ignored for now
8694 ,p_edit_privilege_id IN NUMBER --ignored for now
8695 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8696 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8697 ,x_association_id OUT NOCOPY NUMBER
8698 ,x_return_status OUT NOCOPY VARCHAR2
8699 ,x_errorcode OUT NOCOPY NUMBER
8700 ,x_msg_count OUT NOCOPY NUMBER
8701 ,x_msg_data OUT NOCOPY VARCHAR2
8702 ) IS
8703
8704 l_api_name CONSTANT VARCHAR2(30) := 'Create_Association';
8705
8706 l_object_id NUMBER;
8707
8708 BEGIN
8709
8710 -- Standard start of API savepoint
8711 IF FND_API.To_Boolean(p_commit) THEN
8712 SAVEPOINT Create_Association_PUB;
8713 END IF;
8714
8715 l_object_id := Get_Object_Id_From_Name(p_object_name);
8716 IF l_object_id IS NULL THEN
8717 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8718 END IF;
8719
8720 EGO_EXT_FWK_PUB.Create_Association(
8721 p_api_version => p_api_version
8722 ,p_object_id => l_object_id
8723 ,p_classification_code => p_classification_code
8724 ,p_data_level => p_data_level
8725 ,p_application_id => p_application_id
8726 ,p_attr_group_type => p_attr_group_type
8727 ,p_attr_group_name => p_attr_group_name
8728 ,p_enabled_flag => p_enabled_flag
8729 ,p_view_privilege_id => p_view_privilege_id
8730 ,p_edit_privilege_id => p_edit_privilege_id
8731 ,p_init_msg_list => p_init_msg_list
8732 ,p_commit => p_commit
8733 ,x_association_id => x_association_id
8734 ,x_return_status => x_return_status
8735 ,x_errorcode => x_errorcode
8736 ,x_msg_count => x_msg_count
8737 ,x_msg_data => x_msg_data
8738 );
8739
8740 -- Standard check of p_commit
8741 IF FND_API.To_Boolean(p_commit) THEN
8742 COMMIT WORK;
8743 END IF;
8744
8745 EXCEPTION
8746 WHEN OTHERS THEN
8747 IF FND_API.To_Boolean(p_commit) THEN
8748 ROLLBACK TO Create_Association_PUB;
8749 END IF;
8750 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8751
8752 IF l_object_id IS NULL THEN
8753 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoObjectIdForObjectName';
8754 ELSE
8755 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8756 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8757 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8758 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8759 FND_MSG_PUB.Add;
8760 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8761 ,p_count => x_msg_count
8762 ,p_data => x_msg_data);
8763 END IF;
8764
8765 END Create_Association;
8766
8767 ----------------------------------------------------------------------
8768
8769 -- definition for case when caller has ASSOCIATION_ID
8770 PROCEDURE Update_Association (
8771 p_api_version IN NUMBER
8772 ,p_association_id IN NUMBER
8773 ,p_enabled_flag IN VARCHAR2
8777 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8774 ,p_view_privilege_id IN NUMBER --ignored for now
8775 ,p_edit_privilege_id IN NUMBER --ignored for now
8776 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8778 ,x_return_status OUT NOCOPY VARCHAR2
8779 ,x_errorcode OUT NOCOPY NUMBER
8780 ,x_msg_count OUT NOCOPY NUMBER
8781 ,x_msg_data OUT NOCOPY VARCHAR2
8782 ) IS
8783
8784 l_api_name CONSTANT VARCHAR2(30) := 'Update_Association';
8785
8786 --we don't use l_api_version yet, but eventually we might:
8787 --if we change required parameters, version goes from n.x to (n+1).x
8788 --if we change optional parameters, version goes from x.n to x.(n+1)
8789 l_api_version CONSTANT NUMBER := 1.0;
8790
8791 l_Sysdate DATE := Sysdate;
8792
8793 BEGIN
8794
8795 -- Standard start of API savepoint
8796 IF FND_API.To_Boolean(p_commit) THEN
8797 SAVEPOINT Update_Association_PUB;
8798 END IF;
8799
8800 -- Check for call compatibility
8801 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
8802 l_api_name, G_PKG_NAME)
8803 THEN
8804 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8805 END IF;
8806 -- Initialize message list even though we don't currently use it
8807 IF FND_API.To_Boolean(p_init_msg_list) THEN
8808 FND_MSG_PUB.Initialize;
8809 END IF;
8810
8811 --bug 5513610
8812 /*DELETE FROM EGO_PAGE_ENTRIES_B
8813 WHERE ASSOCIATION_ID = p_association_id;*/
8814
8815 UPDATE EGO_OBJ_AG_ASSOCS_B
8816 SET ENABLED_FLAG = p_enabled_flag,
8817 VIEW_PRIVILEGE_ID = p_view_privilege_id,
8818 EDIT_PRIVILEGE_ID = p_edit_privilege_id,
8819 LAST_UPDATE_DATE = l_Sysdate,
8820 LAST_UPDATED_BY = g_current_user_id,
8821 LAST_UPDATE_LOGIN = g_current_login_id
8822 WHERE ASSOCIATION_ID = p_association_id;
8823
8824 -- Standard check of p_commit
8825 IF FND_API.To_Boolean(p_commit) THEN
8826 COMMIT WORK;
8827 END IF;
8828
8829 x_return_status := FND_API.G_RET_STS_SUCCESS;
8830
8831 EXCEPTION
8832 WHEN OTHERS THEN
8833 IF FND_API.To_Boolean(p_commit) THEN
8834 ROLLBACK TO Update_Association_PUB;
8835 END IF;
8836 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8837
8838 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8839 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8840 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8841 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8842 FND_MSG_PUB.Add;
8843 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8844 ,p_count => x_msg_count
8845 ,p_data => x_msg_data);
8846
8847 END Update_Association;
8848
8849 ----------------------------------------------------------------------
8850
8851 -- definition for case when caller doesn't have ASSOCIATION_ID but has ATTR_GROUP_ID
8852 PROCEDURE Update_Association (
8853 p_api_version IN NUMBER
8854 ,p_object_id IN NUMBER
8855 ,p_classification_code IN VARCHAR2
8856 ,p_attr_group_id IN NUMBER
8857 ,p_enabled_flag IN VARCHAR2
8858 ,p_view_privilege_id IN NUMBER --ignored for now
8859 ,p_edit_privilege_id IN NUMBER --ignored for now
8860 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8861 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8862 ,x_return_status OUT NOCOPY VARCHAR2
8863 ,x_errorcode OUT NOCOPY NUMBER
8864 ,x_msg_count OUT NOCOPY NUMBER
8865 ,x_msg_data OUT NOCOPY VARCHAR2
8866 ) IS
8867
8868 l_api_name CONSTANT VARCHAR2(30) := 'Update_Association';
8869
8870 l_association_id NUMBER;
8871
8872 BEGIN
8873
8874 -- Standard start of API savepoint
8875 IF FND_API.To_Boolean(p_commit) THEN
8876 SAVEPOINT Update_Association_PUB;
8877 END IF;
8878
8879 l_association_id := Get_Association_Id_From_PKs(p_object_id
8880 ,p_classification_code
8881 ,p_attr_group_id);
8882 IF l_association_id IS NULL THEN
8883 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8884 END IF;
8885
8886 EGO_EXT_FWK_PUB.Update_Association(
8887 p_api_version => p_api_version
8888 ,p_association_id => l_association_id
8889 ,p_enabled_flag => p_enabled_flag
8890 ,p_view_privilege_id => p_view_privilege_id
8891 ,p_edit_privilege_id => p_edit_privilege_id
8892 ,p_init_msg_list => p_init_msg_list
8893 ,p_commit => p_commit
8894 ,x_return_status => x_return_status
8895 ,x_errorcode => x_errorcode
8896 ,x_msg_count => x_msg_count
8900 -- Standard check of p_commit
8897 ,x_msg_data => x_msg_data
8898 );
8899
8901 IF FND_API.To_Boolean(p_commit) THEN
8902 COMMIT WORK;
8903 END IF;
8904
8905 EXCEPTION
8906 WHEN OTHERS THEN
8907 IF FND_API.To_Boolean(p_commit) THEN
8908 ROLLBACK TO Update_Association_PUB;
8909 END IF;
8910 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8911
8912 IF l_association_id IS NULL THEN
8913 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAssocFound';
8914 ELSE
8915 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
8916 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
8917 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
8918 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
8919 FND_MSG_PUB.Add;
8920 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
8921 ,p_count => x_msg_count
8922 ,p_data => x_msg_data);
8923 END IF;
8924
8925 END Update_Association;
8926
8927 ----------------------------------------------------------------------
8928
8929 -- definition for case when caller doesn't have ASSOCIATION_ID or ATTR_GROUP_ID
8930 PROCEDURE Update_Association (
8931 p_api_version IN NUMBER
8932 ,p_object_id IN NUMBER
8933 ,p_classification_code IN VARCHAR2
8934 ,p_application_id IN NUMBER
8935 ,p_attr_group_type IN VARCHAR2
8936 ,p_attr_group_name IN VARCHAR2
8937 ,p_enabled_flag IN VARCHAR2
8938 ,p_view_privilege_id IN NUMBER --ignored for now
8939 ,p_edit_privilege_id IN NUMBER --ignored for now
8940 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
8941 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
8942 ,x_return_status OUT NOCOPY VARCHAR2
8943 ,x_errorcode OUT NOCOPY NUMBER
8944 ,x_msg_count OUT NOCOPY NUMBER
8945 ,x_msg_data OUT NOCOPY VARCHAR2
8946 ) IS
8947
8948 l_api_name CONSTANT VARCHAR2(30) := 'Update_Association';
8949
8950 l_attr_group_id NUMBER;
8951 l_association_id NUMBER;
8952
8953 BEGIN
8954
8955 -- Standard start of API savepoint
8956 IF FND_API.To_Boolean(p_commit) THEN
8957 SAVEPOINT Update_Association_PUB;
8958 END IF;
8959
8960 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_application_id
8961 ,p_attr_group_type
8962 ,p_attr_group_name);
8963
8964 IF l_attr_group_id IS NULL THEN
8965 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8966 END IF;
8967
8968 l_association_id := Get_Association_Id_From_PKs(p_object_id
8969 ,p_classification_code
8970 ,l_attr_group_id);
8971 IF l_association_id IS NULL THEN
8972 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8973 END IF;
8974
8975 EGO_EXT_FWK_PUB.Update_Association(
8976 p_api_version => p_api_version
8977 ,p_association_id => l_association_id
8978 ,p_enabled_flag => p_enabled_flag
8979 ,p_view_privilege_id => p_view_privilege_id
8980 ,p_edit_privilege_id => p_edit_privilege_id
8981 ,p_init_msg_list => p_init_msg_list
8982 ,p_commit => p_commit
8983 ,x_return_status => x_return_status
8984 ,x_errorcode => x_errorcode
8985 ,x_msg_count => x_msg_count
8986 ,x_msg_data => x_msg_data
8987 );
8988
8989 -- Standard check of p_commit
8990 IF FND_API.To_Boolean(p_commit) THEN
8991 COMMIT WORK;
8992 END IF;
8993
8994 EXCEPTION
8995 WHEN OTHERS THEN
8996 IF FND_API.To_Boolean(p_commit) THEN
8997 ROLLBACK TO Update_Association_PUB;
8998 END IF;
8999 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9000
9001 IF l_attr_group_id IS NULL THEN
9002 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupIDFoundForPKs';
9003 ELSIF l_association_id IS NULL THEN
9004 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAssocFound';
9005 ELSE
9006 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9007 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9008 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9009 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9010 FND_MSG_PUB.Add;
9011 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9012 ,p_count => x_msg_count
9013 ,p_data => x_msg_data);
9014 END IF;
9015
9016 END Update_Association;
9017
9018 ----------------------------------------------------------------------
9019
9020 PROCEDURE Delete_Association (
9021 p_api_version IN NUMBER
9025 ,p_force IN VARCHAR2 := fnd_api.g_FALSE
9022 ,p_association_id IN NUMBER
9023 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9024 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9026 ,x_return_status OUT NOCOPY VARCHAR2
9027 ,x_errorcode OUT NOCOPY NUMBER
9028 ,x_msg_count OUT NOCOPY NUMBER
9029 ,x_msg_data OUT NOCOPY VARCHAR2
9030 ) IS
9031
9032 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Association';
9033
9034 --we don't use l_api_version yet, but eventually we might:
9035 --if we change required parameters, version goes FROM n.x to (n+1).x
9036 --if we change optional parameters, version goes FROM x.n to x.(n+1)
9037 l_api_version CONSTANT NUMBER := 1.0;
9038
9039 ---------------------------------------------------------------------------
9040 -- Type for tracking deletion-constraint checks for Associations with --
9041 -- various objects; we start with entries for Item, Change, and Projects --
9042 ---------------------------------------------------------------------------
9043 TYPE LOCAL_DEL_ASSOC_CHECK_REC IS RECORD
9044 (
9045 OBJECT_NAME VARCHAR2(30)
9046 ,PACKAGE_AND_PROCEDURE VARCHAR2(60)
9047 );
9048
9049 TYPE LOCAL_DEL_ASSOC_CHECK_TABLE IS TABLE OF LOCAL_DEL_ASSOC_CHECK_REC
9050 INDEX BY BINARY_INTEGER;
9051
9052 l_dummy_rec LOCAL_DEL_ASSOC_CHECK_REC;
9053 l_del_assoc_table LOCAL_DEL_ASSOC_CHECK_TABLE;
9054 l_association_row EGO_OBJ_ATTR_GRP_ASSOCS_V%ROWTYPE;
9055 l_del_assoc_check_index NUMBER;
9056 l_is_ok_to_delete BOOLEAN := TRUE;
9057 l_api_to_call VARCHAR2(999);
9058
9059 CURSOR get_assoc_records (cp_association_id IN NUMBER) IS
9060 SELECT *
9061 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
9062 WHERE (object_id, classification_code, attr_group_id) IN
9063 (SELECT object_id, classification_code, attr_group_id
9064 FROM ego_obj_ag_assocs_b
9065 where association_id = cp_association_id);
9066
9067 BEGIN
9068 code_debug(l_api_name||' started for association '||p_association_id);
9069 -- Standard start of API savepoint
9070 IF FND_API.To_Boolean(p_commit) THEN
9071 SAVEPOINT Delete_Association_PUB;
9072 END IF;
9073
9074 -- Check for call compatibility
9075 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9076 l_api_name, G_PKG_NAME)
9077 THEN
9078 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9079 END IF;
9080 -- Initialize message list even though we don't currently use it
9081 IF FND_API.To_Boolean(p_init_msg_list) THEN
9082 FND_MSG_PUB.Initialize;
9083 END IF;
9084
9085 --if p_force is true, skip all deletion checks
9086 IF( p_force = fnd_api.g_TRUE ) THEN
9087 code_debug(l_api_name||' deleting association forcefully ');
9088 --delete association blindly
9089 FOR cr IN get_assoc_records(cp_association_id => p_association_id) LOOP
9090 code_debug(l_api_name||' deleting association forcefully for assoc : '||cr.association_id);
9091 DELETE FROM EGO_OBJ_AG_ASSOCS_B
9092 WHERE association_id = cr.association_id;
9093 END LOOP;
9094 l_is_ok_to_delete := TRUE;
9095 ELSE
9096
9097 -- First, initialize the delete-constraint table
9098 l_dummy_rec.OBJECT_NAME := 'EGO_ITEM';
9099 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'EGO_ITEM_CATALOG_PUB.Check_Delete_AttrGroup_Assoc';
9100 l_del_assoc_table(1) := l_dummy_rec;
9101
9102 l_dummy_rec.OBJECT_NAME := 'PA_PROJECTS';
9103 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'PA_USER_ATTR_PUB.Check_Delete_Assoc_Ok';
9104 l_del_assoc_table(2) := l_dummy_rec;
9105
9106 l_dummy_rec.OBJECT_NAME := 'ENG_CHANGE';
9107 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'EGO_CHANGE_USER_ATTRS_PUB.Check_Delete_Associations'; --Bug 3070807
9108 l_del_assoc_table(3) := l_dummy_rec;
9109
9110 l_dummy_rec.OBJECT_NAME := 'ENG_CHANGE_LINE';
9111 l_dummy_rec.PACKAGE_AND_PROCEDURE := 'EGO_CHANGE_USER_ATTRS_PUB.Check_Delete_Associations'; --Bug 3070807
9112 l_del_assoc_table(4) := l_dummy_rec;
9113
9114 l_api_to_call := NULL;
9115 FOR cr IN get_assoc_records(cp_association_id => p_association_id) LOOP
9116
9117 code_debug(l_api_name||' obj : '||cr.object_name||' assoc id : '||cr.association_id
9118 ||' class code: '||cr.classification_code||' data level: '|| cr.data_level_int_name);
9119
9120 -- Next, find and call any delete-constraint procedures provided
9121 l_del_assoc_check_index := l_del_assoc_table.FIRST;
9122 WHILE (l_del_assoc_check_index <= l_del_assoc_table.LAST AND l_api_to_call IS NULL) LOOP
9123 IF (l_del_assoc_table(l_del_assoc_check_index).OBJECT_NAME = cr.OBJECT_NAME AND
9124 l_del_assoc_table(l_del_assoc_check_index).PACKAGE_AND_PROCEDURE IS NOT NULL) THEN
9125 l_api_to_call := l_del_assoc_table(l_del_assoc_check_index).PACKAGE_AND_PROCEDURE;
9126 END IF;
9127 l_del_assoc_check_index := l_del_assoc_table.NEXT(l_del_assoc_check_index);
9128 END LOOP;
9129
9130 IF l_api_to_call IS NOT NULL THEN
9131
9132 DECLARE
9133 l_dynamic_sql VARCHAR2(700);
9137 l_dynamic_sql := 'BEGIN ' ||
9134 l_ok_to_delete VARCHAR2(1) := fnd_api.G_FALSE;
9135 BEGIN
9136 code_debug(l_api_name||' calling '||l_api_to_call);
9138 l_api_to_call ||
9139 '( ' ||
9140 ' p_api_version => 1.0 '||
9141 ',p_association_id => :1 '||
9142 ',p_classification_code => :2 '||
9143 ',p_data_level => :3 '||
9144 ',p_attr_group_id => :4 '||
9145 ',p_application_id => :5 '||
9146 ',p_attr_group_type => :6 '||
9147 ',p_attr_group_name => :7 '||
9148 ',p_enabled_code => :8 '||
9149 ',x_ok_to_delete => :9 '||
9150 ',x_return_status => :10 '||
9151 ',x_errorcode => :11 '||
9152 ',x_msg_count => :12 '||
9153 ',x_msg_data => :13 '||
9154 '); END;';
9155 EXECUTE IMMEDIATE l_dynamic_sql USING IN cr.association_id,
9156 IN cr.classification_code,
9157 IN cr.data_level_int_name,
9158 IN cr.attr_group_id,
9159 IN cr.application_id,
9160 IN cr.attr_group_type,
9161 IN cr.attr_group_name,
9162 IN cr.enabled_code,
9163 OUT l_ok_to_delete,
9164 OUT x_return_status,
9165 OUT x_errorcode,
9166 OUT x_msg_count,
9167 OUT x_msg_data;
9168 code_debug(l_api_name||' RETURNING '||l_del_assoc_table(l_del_assoc_check_index).PACKAGE_AND_PROCEDURE||' with status '||x_return_status);
9169 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9170 l_is_ok_to_delete := FND_API.To_Boolean(l_ok_to_delete);
9171 ELSE
9172 l_is_ok_to_delete := FALSE;
9173 END IF;
9174 EXCEPTION
9175 WHEN OTHERS THEN
9176 code_debug(l_api_name||' EXCEPTION from check '||x_msg_data);
9177
9178 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
9179 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
9180 END IF;
9181 l_is_ok_to_delete := FALSE;
9182 END;
9183 ELSE
9184 l_is_ok_to_delete := TRUE;
9185 END IF;
9186
9187 -- Finally, if we passed all checks, delete the records
9188 IF (l_is_ok_to_delete) THEN
9189 code_debug(l_api_name||' deleting association as conditions are met for assoc :'||cr.association_id);
9190 DELETE FROM EGO_PAGE_ENTRIES_B
9191 WHERE ASSOCIATION_ID = cr.association_id;
9192
9193 DELETE FROM EGO_OBJ_AG_ASSOCS_B
9194 WHERE ASSOCIATION_ID = cr.association_id;
9195 ELSE
9196 code_debug(l_api_name||' CANNOT delete as prod specific conditions are not met for :'||cr.association_id);
9197 EXIT;
9198 END IF;
9199
9200 END LOOP;
9201
9202 END IF; --check p_force
9203
9204
9205 IF (l_is_ok_to_delete) THEN
9206 -- Standard check of p_commit
9207 IF FND_API.To_Boolean(p_commit) THEN
9208 COMMIT WORK;
9209 END IF;
9210 x_return_status := FND_API.G_RET_STS_SUCCESS;
9211 ELSE
9212 IF FND_API.To_Boolean(p_commit) THEN
9213 ROLLBACK TO Delete_Association_PUB;
9214 END IF;
9215 x_return_status := FND_API.G_RET_STS_ERROR;
9216 END IF;
9217 code_debug(l_api_name||' setting return status as '||x_return_status);
9218
9219 EXCEPTION
9220 WHEN OTHERS THEN
9221 code_debug(l_api_name||' EXCEPTION : '||SQLERRM);
9222 IF FND_API.To_Boolean(p_commit) THEN
9223 ROLLBACK TO Delete_Association_PUB;
9224 END IF;
9225 IF get_assoc_records%ISOPEN THEN
9226 CLOSE get_assoc_records;
9227 END IF;
9228 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9229
9230 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9231 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9232 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9233 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9234 FND_MSG_PUB.Add;
9235 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9236 ,p_count => x_msg_count
9237 ,p_data => x_msg_data);
9238
9239 END Delete_Association;
9240
9241 ----------------------------------------------------------------------
9242
9243
9244 -------------------------------
9245 -- Attribute Group Page APIs --
9246 -------------------------------
9247
9248 ----------------------------------------------------------------------
9249
9250 PROCEDURE Create_Page (
9254 ,p_classification_code IN VARCHAR2
9251 p_api_version IN NUMBER
9252 ,p_page_id IN NUMBER DEFAULT NULL
9253 ,p_object_id IN NUMBER
9255 ,p_data_level IN VARCHAR2
9256 ,p_internal_name IN VARCHAR2
9257 ,p_display_name IN VARCHAR2
9258 ,p_description IN VARCHAR2
9259 ,p_sequence IN NUMBER
9260 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9261 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9262 ,x_page_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_Page';
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_Sysdate DATE := Sysdate;
9277
9278 BEGIN
9279
9280 -- Standard start of API savepoint
9281 IF FND_API.To_Boolean(p_commit) THEN
9282 SAVEPOINT Create_Page_PUB;
9283 END IF;
9284
9285 -- Check for call compatibility
9286 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9287 l_api_name, G_PKG_NAME)
9288 THEN
9289 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9290 END IF;
9291 -- Initialize message list even though we don't currently use it
9292 IF FND_API.To_Boolean(p_init_msg_list) THEN
9293 FND_MSG_PUB.Initialize;
9294 END IF;
9295
9296 --if page id is not provided, get page id from sequence
9297 IF( p_page_id IS NULL ) THEN
9298 SELECT EGO_PAGES_S.NEXTVAL INTO x_page_id FROM DUAL;
9299 ELSE
9300 x_page_id := p_page_id;
9301 END IF;
9302
9303 INSERT INTO EGO_PAGES_B
9304 (
9305 PAGE_ID
9306 ,OBJECT_ID
9307 ,CLASSIFICATION_CODE
9308 ,DATA_LEVEL
9309 ,INTERNAL_NAME
9310 ,SEQUENCE
9311 ,CREATION_DATE
9312 ,CREATED_BY
9313 ,LAST_UPDATE_DATE
9314 ,LAST_UPDATED_BY
9315 ,LAST_UPDATE_LOGIN
9316 )
9317 VALUES
9318 (
9319 x_page_id
9320 ,p_object_id
9321 ,p_classification_code
9322 ,p_data_level
9323 ,p_internal_name
9324 ,p_sequence
9325 ,l_Sysdate
9326 ,g_current_user_id
9327 ,l_Sysdate
9328 ,g_current_user_id
9329 ,g_current_login_id
9330 );
9331
9332 INSERT INTO EGO_PAGES_TL
9333 (
9334 PAGE_ID
9335 ,DISPLAY_NAME
9336 ,DESCRIPTION
9337 ,LANGUAGE
9338 ,SOURCE_LANG
9339 ,CREATION_DATE
9340 ,CREATED_BY
9341 ,LAST_UPDATE_DATE
9342 ,LAST_UPDATED_BY
9343 ,LAST_UPDATE_LOGIN
9344 )
9345 SELECT
9346 x_page_id
9347 ,p_display_name
9348 ,p_description
9349 ,L.LANGUAGE_CODE
9350 ,USERENV('LANG')
9351 ,l_Sysdate
9352 ,g_current_user_id
9353 ,l_Sysdate
9354 ,g_current_user_id
9355 ,g_current_login_id
9356 FROM FND_LANGUAGES L
9357 WHERE L.INSTALLED_FLAG in ('I', 'B');
9358
9359 -- Standard check of p_commit
9360 IF FND_API.To_Boolean(p_commit) THEN
9361 COMMIT WORK;
9362 END IF;
9363
9364 x_return_status := FND_API.G_RET_STS_SUCCESS;
9365
9366 EXCEPTION
9367 WHEN OTHERS THEN
9368 IF FND_API.To_Boolean(p_commit) THEN
9369 ROLLBACK TO Create_Page_PUB;
9370 END IF;
9371 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9372
9373 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9374 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9375 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9376 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9377 FND_MSG_PUB.Add;
9378 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9379 ,p_count => x_msg_count
9380 ,p_data => x_msg_data);
9381
9382 END Create_Page;
9383
9384 ----------------------------------------------------------------------
9385
9386 PROCEDURE Update_Page (
9387 p_api_version IN NUMBER
9388 ,p_page_id IN NUMBER
9389 ,p_internal_name IN VARCHAR2
9390 ,p_display_name IN VARCHAR2
9391 ,p_description IN VARCHAR2
9392 ,p_sequence IN NUMBER
9393 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9394 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9398 ,x_msg_count OUT NOCOPY NUMBER
9395 ,p_is_nls_mode IN VARCHAR2 DEFAULT FND_API.G_FALSE
9396 ,x_return_status OUT NOCOPY VARCHAR2
9397 ,x_errorcode OUT NOCOPY NUMBER
9399 ,x_msg_data OUT NOCOPY VARCHAR2
9400 ) IS
9401
9402 l_api_name CONSTANT VARCHAR2(30) := 'Update_Page';
9403
9404 --we don't use l_api_version yet, but eventually we might:
9405 --if we change required parameters, version goes FROM n.x to (n+1).x
9406 --if we change optional parameters, version goes FROM x.n to x.(n+1)
9407 l_api_version CONSTANT NUMBER := 1.0;
9408
9409 l_Sysdate DATE := Sysdate;
9410
9411 BEGIN
9412
9413 -- Standard start of API savepoint
9414 IF FND_API.To_Boolean(p_commit) THEN
9415 SAVEPOINT Update_Page_PUB;
9416 END IF;
9417
9418 -- Check for call compatibility
9419 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9420 l_api_name, G_PKG_NAME)
9421 THEN
9422 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9423 END IF;
9424 -- Initialize message list even though we don't currently use it
9425 IF FND_API.To_Boolean(p_init_msg_list) THEN
9426 FND_MSG_PUB.Initialize;
9427 END IF;
9428
9429 IF (FND_API.To_Boolean(p_is_nls_mode)) THEN
9430
9431 -- We do this IF check this way so that if p_is_nls_mode is NULL,
9432 -- we still update the non-trans table (i.e., we treat NULL as 'F')
9433 NULL;
9434
9435 ELSE
9436
9437 -- We only update this information if we are NOT in NLS mode
9438 -- (i.e., we don't update it if we are in NLS mode)
9439 UPDATE EGO_PAGES_B
9440 SET INTERNAL_NAME = p_internal_name,
9441 SEQUENCE = p_sequence,
9442 LAST_UPDATED_BY = g_current_user_id,
9443 LAST_UPDATE_DATE = l_Sysdate,
9444 LAST_UPDATE_LOGIN = g_current_login_id
9445 WHERE PAGE_ID = p_page_id;
9446
9447 END IF;
9448
9449 -- We update the TL information whether or not we're in NLS mode
9450 UPDATE EGO_PAGES_TL
9451 SET DISPLAY_NAME = p_display_name,
9452 DESCRIPTION = p_description,
9453 LAST_UPDATED_BY = g_current_user_id,
9454 LAST_UPDATE_DATE = l_Sysdate,
9455 LAST_UPDATE_LOGIN = g_current_login_id,
9456 SOURCE_LANG = USERENV('LANG')
9457 WHERE PAGE_ID = p_page_id
9458 -- AND LANGUAGE = USERENV('LANG');
9459 AND USERENV('LANG') in ( LANGUAGE , SOURCE_LANG);
9460
9461 -- Standard check of p_commit
9462 IF FND_API.To_Boolean(p_commit) THEN
9463 COMMIT WORK;
9464 END IF;
9465
9466 x_return_status := FND_API.G_RET_STS_SUCCESS;
9467
9468 EXCEPTION
9469 WHEN OTHERS THEN
9470 IF FND_API.To_Boolean(p_commit) THEN
9471 ROLLBACK TO Update_Page_PUB;
9472 END IF;
9473 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9474
9475 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9476 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9477 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9478 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9479 FND_MSG_PUB.Add;
9480 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9481 ,p_count => x_msg_count
9482 ,p_data => x_msg_data);
9483
9484
9485 END Update_Page;
9486
9487 ----------------------------------------------------------------------
9488
9489 PROCEDURE Update_Page (
9490 p_api_version IN NUMBER
9491 ,p_object_id IN NUMBER
9492 ,p_classification_code IN VARCHAR2
9493 ,p_data_level IN VARCHAR2
9494 ,p_old_internal_name IN VARCHAR2
9495 ,p_new_internal_name IN VARCHAR2
9496 ,p_display_name IN VARCHAR2
9497 ,p_description IN VARCHAR2
9498 ,p_sequence IN NUMBER
9499 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9500 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9501 ,x_return_status OUT NOCOPY VARCHAR2
9502 ,x_errorcode OUT NOCOPY NUMBER
9503 ,x_msg_count OUT NOCOPY NUMBER
9504 ,x_msg_data OUT NOCOPY VARCHAR2
9505 ) IS
9506
9507 l_api_name CONSTANT VARCHAR2(30) := 'Update_Page';
9508
9509 l_page_id NUMBER;
9510 l_new_internal_name VARCHAR2(150);
9511
9512 BEGIN
9513
9514 -- Standard start of API savepoint
9515 IF FND_API.To_Boolean(p_commit) THEN
9516 SAVEPOINT Update_Page_PUB;
9517 END IF;
9518
9519 l_page_id := Get_Page_Id_From_PKs(p_object_id
9520 ,p_classification_code
9521 ,p_old_internal_name);
9522 IF l_page_id IS NULL THEN
9523 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9524 END IF;
9525
9526 -- If caller hasn't passed in a new internal name, we keep the old one
9530 l_new_internal_name := p_new_internal_name;
9527 IF p_new_internal_name IS NULL OR p_new_internal_name = '' THEN
9528 l_new_internal_name := p_old_internal_name;
9529 ELSE
9531 END IF;
9532
9533 EGO_EXT_FWK_PUB.Update_Page(
9534 p_api_version => p_api_version
9535 ,p_page_id => l_page_id
9536 ,p_internal_name => l_new_internal_name
9537 ,p_display_name => p_display_name
9538 ,p_description => p_description
9539 ,p_sequence => p_sequence
9540 ,p_init_msg_list => p_init_msg_list
9541 ,p_commit => p_commit
9542 ,x_return_status => x_return_status
9543 ,x_errorcode => x_errorcode
9544 ,x_msg_count => x_msg_count
9545 ,x_msg_data => x_msg_data
9546 );
9547
9548 -- Standard check of p_commit
9549 IF FND_API.To_Boolean(p_commit) THEN
9550 COMMIT WORK;
9551 END IF;
9552
9553 EXCEPTION
9554 WHEN OTHERS THEN
9555 IF FND_API.To_Boolean(p_commit) THEN
9556 ROLLBACK TO Update_Page_PUB;
9557 END IF;
9558 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9559
9560 IF l_page_id IS NULL THEN
9561 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPageFound';
9562 ELSE
9563 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9564 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9565 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9566 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9567 FND_MSG_PUB.Add;
9568 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9569 ,p_count => x_msg_count
9570 ,p_data => x_msg_data);
9571
9572 END IF;
9573
9574 END Update_Page;
9575
9576 ----------------------------------------------------------------------
9577
9578 PROCEDURE Delete_Page (
9579 p_api_version IN NUMBER
9580 ,p_page_id IN NUMBER
9581 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9582 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9583 ,x_return_status OUT NOCOPY VARCHAR2
9584 ,x_errorcode OUT NOCOPY NUMBER
9585 ,x_msg_count OUT NOCOPY NUMBER
9586 ,x_msg_data OUT NOCOPY VARCHAR2
9587 ) IS
9588
9589 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Page';
9590
9591 --we don't use l_api_version yet, but eventually we might:
9592 --if we change required parameters, version goes FROM n.x to (n+1).x
9593 --if we change optional parameters, version goes FROM x.n to x.(n+1)
9594 l_api_version CONSTANT NUMBER := 1.0;
9595
9596 BEGIN
9597
9598 -- Standard start of API savepoint
9599 IF FND_API.To_Boolean(p_commit) THEN
9600 SAVEPOINT Delete_Page_PUB;
9601 END IF;
9602
9603 -- Check for call compatibility
9604 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9605 l_api_name, G_PKG_NAME)
9606 THEN
9607 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9608 END IF;
9609 -- Initialize message list even though we don't currently use it
9610 IF FND_API.To_Boolean(p_init_msg_list) THEN
9611 FND_MSG_PUB.Initialize;
9612 END IF;
9613
9614 DELETE FROM EGO_PAGE_ENTRIES_B
9615 WHERE PAGE_ID = p_page_id;
9616
9617 DELETE FROM EGO_PAGES_B
9618 WHERE PAGE_ID = p_page_id;
9619
9620 DELETE FROM EGO_PAGES_TL
9621 WHERE PAGE_ID = p_page_id;
9622
9623 -- Standard check of p_commit
9624 IF FND_API.To_Boolean(p_commit) THEN
9625 COMMIT WORK;
9626 END IF;
9627
9628 x_return_status := FND_API.G_RET_STS_SUCCESS;
9629
9630 EXCEPTION
9631 WHEN OTHERS THEN
9632 IF FND_API.To_Boolean(p_commit) THEN
9633 ROLLBACK TO Delete_Page_PUB;
9634 END IF;
9635 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9636
9637 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9638 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9639 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9640 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9641 FND_MSG_PUB.Add;
9642 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9643 ,p_count => x_msg_count
9644 ,p_data => x_msg_data);
9645
9646
9647 END Delete_Page;
9648
9649 ----------------------------------------------------------------------
9650
9651 PROCEDURE Delete_Page (
9652 p_api_version IN NUMBER
9653 ,p_object_id IN NUMBER
9654 ,p_classification_code IN VARCHAR2
9655 ,p_internal_name IN VARCHAR2
9656 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9657 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9658 ,x_return_status OUT NOCOPY VARCHAR2
9662 ) IS
9659 ,x_errorcode OUT NOCOPY NUMBER
9660 ,x_msg_count OUT NOCOPY NUMBER
9661 ,x_msg_data OUT NOCOPY VARCHAR2
9663
9664 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Page';
9665
9666 l_page_id NUMBER;
9667
9668 BEGIN
9669
9670 -- Standard start of API savepoint
9671 IF FND_API.To_Boolean(p_commit) THEN
9672 SAVEPOINT Delete_Page_PUB;
9673 END IF;
9674
9675 l_page_id := Get_Page_Id_From_PKs(p_object_id
9676 ,p_classification_code
9677 ,p_internal_name);
9678 IF l_page_id IS NULL THEN
9679 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9680 END IF;
9681
9682 EGO_EXT_FWK_PUB.Delete_Page(
9683 p_api_version => p_api_version
9684 ,p_page_id => l_page_id
9685 ,p_init_msg_list => p_init_msg_list
9686 ,p_commit => p_commit
9687 ,x_return_status => x_return_status
9688 ,x_errorcode => x_errorcode
9689 ,x_msg_count => x_msg_count
9690 ,x_msg_data => x_msg_data
9691 );
9692
9693 -- Standard check of p_commit
9694 IF FND_API.To_Boolean(p_commit) THEN
9695 COMMIT WORK;
9696 END IF;
9697
9698 EXCEPTION
9699 WHEN OTHERS THEN
9700 IF FND_API.To_Boolean(p_commit) THEN
9701 ROLLBACK TO Delete_Page_PUB;
9702 END IF;
9703 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9704
9705 IF l_page_id IS NULL THEN
9706 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoPageFound';
9707 ELSE
9708 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9709 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9710 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9711 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9712 FND_MSG_PUB.Add;
9713 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9714 ,p_count => x_msg_count
9715 ,p_data => x_msg_data);
9716
9717 END IF;
9718
9719 END Delete_Page;
9720
9721 ----------------------------------------------------------------------
9722
9723 -- A "group by" function for SQL queries
9724 FUNCTION Group_Page_Regions (
9725 p_association_id IN NUMBER
9726 ,p_object_id IN NUMBER
9727 ,p_object_name IN VARCHAR2
9728 ,p_classification_code IN VARCHAR2
9729 ,p_data_level IN VARCHAR2
9730 ,p_application_id IN NUMBER
9731 ,p_attr_group_type IN VARCHAR2
9732 ,p_attr_group_name IN VARCHAR2
9733 ,p_attr_group_disp_name IN VARCHAR2
9734 ,p_attr_group_description IN VARCHAR2
9735 ,p_enabled_code IN VARCHAR2
9736 )
9737 RETURN VARCHAR2
9738 IS
9739
9740 l_page_region_disp_name VARCHAR2(240);
9741 l_page_region_list VARCHAR2(4000) := '';/* Increased the length from 2400 to 4000*/
9742
9743 /*Changed the query for performance reason
9744 CURSOR page_region_csr (cp_association_id IN NUMBER) IS
9745 SELECT PAGE_DISPLAY_NAME
9746 FROM EGO_PAGE_ENTRIES_V
9747 WHERE ASSOCIATION_ID = cp_association_id;*/
9748
9749
9750 CURSOR page_region_csr (cp_association_id IN NUMBER) IS
9751 select display_name PAGE_DISPLAY_NAME from ego_pages_v
9752 where page_id in (select page_id from ego_page_entries_b
9753 where ASSOCIATION_ID = cp_association_id);
9754
9755
9756 BEGIN
9757
9758 FOR page_region_rec IN page_region_csr(p_association_id)
9759 LOOP
9760 l_page_region_list := l_page_region_list || page_region_rec.PAGE_DISPLAY_NAME || ', ';
9761 END LOOP;
9762
9763 --Joseph : We need to Keep LENGTHB instead of LENGTH for Multi-Byte Language Support.
9764 IF (LENGTHB(l_page_region_list) > 0) THEN
9765 -- strip off the trailing ', '
9766 l_page_region_list := SUBSTRB(l_page_region_list, 1, LENGTHB(l_page_region_list) - LENGTHB(', '));
9767 ELSE
9768 l_page_region_list := NULL;
9769 END IF;
9770 RETURN l_page_region_list;
9771
9772 END;
9773
9774 ----------------------------------------------------------------------
9775
9776 ---------------------
9777 -- Page Entry APIs --
9778 ---------------------
9779
9780 ----------------------------------------------------------------------
9781
9782 PROCEDURE Create_Page_Entry (
9783 p_api_version IN NUMBER
9784 ,p_page_id IN NUMBER
9785 ,p_association_id IN NUMBER
9786 ,p_sequence IN NUMBER
9787 ,p_classification_code IN VARCHAR2
9788 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9789 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9790 ,x_return_status OUT NOCOPY VARCHAR2
9794 ) IS
9791 ,x_errorcode OUT NOCOPY NUMBER
9792 ,x_msg_count OUT NOCOPY NUMBER
9793 ,x_msg_data OUT NOCOPY VARCHAR2
9795
9796 l_api_name CONSTANT VARCHAR2(30) := 'Create_Page_Entry';
9797
9798 --we don't use l_api_version yet, but eventually we might:
9799 --if we change required parameters, version goes FROM n.x to (n+1).x
9800 --if we change optional parameters, version goes FROM x.n to x.(n+1)
9801 l_api_version CONSTANT NUMBER := 1.0;
9802
9803 l_Sysdate DATE := Sysdate;
9804
9805 BEGIN
9806
9807 -- Standard start of API savepoint
9808 IF FND_API.To_Boolean(p_commit) THEN
9809 SAVEPOINT Create_Page_Entry_PUB;
9810 END IF;
9811
9812 -- Check for call compatibility
9813 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9814 l_api_name, G_PKG_NAME)
9815 THEN
9816 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9817 END IF;
9818 -- Initialize message list even though we don't currently use it
9819 IF FND_API.To_Boolean(p_init_msg_list) THEN
9820 FND_MSG_PUB.Initialize;
9821 END IF;
9822
9823 INSERT INTO EGO_PAGE_ENTRIES_B
9824 (
9825 PAGE_ID
9826 ,ASSOCIATION_ID
9827 ,SEQUENCE
9828 ,CLASSIFICATION_CODE
9829 ,CREATION_DATE
9830 ,CREATED_BY
9831 ,LAST_UPDATE_DATE
9832 ,LAST_UPDATED_BY
9833 ,LAST_UPDATE_LOGIN
9834 )
9835 VALUES
9836 (
9837 p_page_id
9838 ,p_association_id
9839 ,p_sequence
9840 ,p_classification_code
9841 ,l_Sysdate
9842 ,g_current_user_id
9843 ,l_Sysdate
9844 ,g_current_user_id
9845 ,g_current_login_id
9846 );
9847
9848 -- Standard check of p_commit
9849 IF FND_API.To_Boolean(p_commit) THEN
9850 COMMIT WORK;
9851 END IF;
9852
9853 x_return_status := FND_API.G_RET_STS_SUCCESS;
9854
9855 EXCEPTION
9856 WHEN DUP_VAL_ON_INDEX THEN
9857 IF FND_API.To_Boolean(p_commit) THEN
9858 ROLLBACK TO Create_Page_Entry_PUB;
9859 END IF;
9860 x_return_status := FND_API.G_RET_STS_ERROR;
9861 DECLARE
9862 l_ag_disp_name VARCHAR2(80);
9863 l_page_disp_name VARCHAR2(240);
9864 l_class_meaning VARCHAR2(1000);
9865 BEGIN
9866 SELECT A.ATTR_GROUP_DISP_NAME
9867 ,PE.PAGE_DISPLAY_NAME
9868 ,EGO_EXT_FWK_PUB.Get_Class_Meaning(A.OBJECT_ID, PE.CLASSIFICATION_CODE)
9869 INTO l_ag_disp_name
9870 ,l_page_disp_name
9871 ,l_class_meaning
9872 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V A,
9873 EGO_PAGE_ENTRIES_V PE
9874 WHERE A.ASSOCIATION_ID = PE.ASSOCIATION_ID
9875 AND PE.PAGE_ID = p_page_id
9876 AND PE.ASSOCIATION_ID = p_association_id;
9877
9878 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_ALREADY_IN_PAGE');
9879 FND_MESSAGE.Set_Token('AG_NAME', l_ag_disp_name);
9880 FND_MESSAGE.Set_Token('PAGE_NAME', l_page_disp_name);
9881 FND_MESSAGE.Set_Token('CLASS_MEANING', l_class_meaning);
9882 FND_MSG_PUB.Add;
9883 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9884 ,p_count => x_msg_count
9885 ,p_data => x_msg_data);
9886 --ego_ef_test_pub.insert_into_ego_err_msgs(x_msg_data);
9887 ------------------------------------------------------------------
9888 -- If anything went wrong with our user-friend error reporting, --
9889 -- just resort to the unexpected error reporting behavior. --
9890 ------------------------------------------------------------------
9891 EXCEPTION
9892 WHEN OTHERS THEN
9893 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9894
9895 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9896 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9897 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9898 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9899 FND_MSG_PUB.Add;
9900 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9901 ,p_count => x_msg_count
9902 ,p_data => x_msg_data);
9903 END;
9904
9905 WHEN OTHERS THEN
9906 IF FND_API.To_Boolean(p_commit) THEN
9907 ROLLBACK TO Create_Page_Entry_PUB;
9908 END IF;
9909 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9910
9911 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
9912 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
9913 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
9914 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
9915 FND_MSG_PUB.Add;
9916 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
9917 ,p_count => x_msg_count
9918 ,p_data => x_msg_data);
9919
9920
9921 END Create_Page_Entry;
9922
9923 ----------------------------------------------------------------------
9924
9925 PROCEDURE Update_Page_Entry (
9926 p_api_version IN NUMBER
9927 ,p_page_id IN NUMBER
9931 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
9928 ,p_new_association_id IN NUMBER --2995435: Doesnt update association id
9929 ,p_old_association_id IN NUMBER --2995435: Doesnt update association id
9930 ,p_sequence IN NUMBER
9932 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
9933 ,x_return_status OUT NOCOPY VARCHAR2
9934 ,x_errorcode OUT NOCOPY NUMBER
9935 ,x_msg_count OUT NOCOPY NUMBER
9936 ,x_msg_data OUT NOCOPY VARCHAR2
9937 ) IS
9938
9939 l_api_name CONSTANT VARCHAR2(30) := 'Update_Page_Entry';
9940
9941 --we don't use l_api_version yet, but eventually we might:
9942 --if we change required parameters, version goes FROM n.x to (n+1).x
9943 --if we change optional parameters, version goes FROM x.n to x.(n+1)
9944 l_api_version CONSTANT NUMBER := 1.0;
9945
9946 l_Sysdate DATE := Sysdate;
9947
9948 BEGIN
9949
9950 -- Standard start of API savepoint
9951 IF FND_API.To_Boolean(p_commit) THEN
9952 SAVEPOINT Update_Page_Entry_PUB;
9953 END IF;
9954
9955 -- Check for call compatibility
9956 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
9957 l_api_name, G_PKG_NAME)
9958 THEN
9959 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9960 END IF;
9961 -- Initialize message list even though we don't currently use it
9962 IF FND_API.To_Boolean(p_init_msg_list) THEN
9963 FND_MSG_PUB.Initialize;
9964 END IF;
9965
9966 UPDATE EGO_PAGE_ENTRIES_B
9967 SET SEQUENCE = p_sequence,
9968 ASSOCIATION_ID = p_new_association_id, --2995435: Doesnt update association id
9969 LAST_UPDATED_BY = g_current_user_id,
9970 LAST_UPDATE_DATE = l_Sysdate,
9971 LAST_UPDATE_LOGIN = g_current_login_id
9972 WHERE PAGE_ID = p_page_id
9973 AND ASSOCIATION_ID = p_old_association_id;
9974
9975 -- Standard check of p_commit
9976 IF FND_API.To_Boolean(p_commit) THEN
9977 COMMIT WORK;
9978 END IF;
9979
9980 x_return_status := FND_API.G_RET_STS_SUCCESS;
9981
9982 EXCEPTION
9983 WHEN DUP_VAL_ON_INDEX THEN
9984 IF FND_API.To_Boolean(p_commit) THEN
9985 ROLLBACK TO Update_Page_Entry_PUB;
9986 END IF;
9987 x_return_status := FND_API.G_RET_STS_ERROR;
9988 DECLARE
9989 l_ag_disp_name VARCHAR2(80);
9990 l_page_disp_name VARCHAR2(240);
9991 l_class_meaning VARCHAR2(1000);
9992 BEGIN
9993 SELECT A.ATTR_GROUP_DISP_NAME
9994 ,PE.PAGE_DISPLAY_NAME
9995 ,EGO_EXT_FWK_PUB.Get_Class_Meaning(A.OBJECT_ID, PE.CLASSIFICATION_CODE)
9996 INTO l_ag_disp_name
9997 ,l_page_disp_name
9998 ,l_class_meaning
9999 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V A,
10000 EGO_PAGE_ENTRIES_V PE
10001 WHERE A.ASSOCIATION_ID = PE.ASSOCIATION_ID
10002 AND PE.PAGE_ID = p_page_id
10003 AND PE.ASSOCIATION_ID = p_new_association_id;
10004
10005 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_AG_ALREADY_IN_PAGE');
10006 FND_MESSAGE.Set_Token('AG_NAME', l_ag_disp_name);
10007 FND_MESSAGE.Set_Token('PAGE_NAME', l_page_disp_name);
10008 FND_MESSAGE.Set_Token('CLASS_MEANING', l_class_meaning);
10009 FND_MSG_PUB.Add;
10010 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10011 ,p_count => x_msg_count
10012 ,p_data => x_msg_data);
10013
10014 ------------------------------------------------------------------
10015 -- If anything went wrong with our user-friend error reporting, --
10016 -- just resort to the unexpected error reporting behavior. --
10017 ------------------------------------------------------------------
10018 EXCEPTION
10019 WHEN OTHERS THEN
10020 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10021
10022 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10023 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10024 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10025 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10026 FND_MSG_PUB.Add;
10027 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10028 ,p_count => x_msg_count
10029 ,p_data => x_msg_data);
10030 END;
10031
10032 WHEN OTHERS THEN
10033 IF FND_API.To_Boolean(p_commit) THEN
10034 ROLLBACK TO Update_Page_Entry_PUB;
10035 END IF;
10036 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10037
10038 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10039 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10040 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10041 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10042 FND_MSG_PUB.Add;
10043 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10044 ,p_count => x_msg_count
10045 ,p_data => x_msg_data);
10046
10047
10048 END Update_Page_Entry;
10049
10053 p_api_version IN NUMBER
10050 ----------------------------------------------------------------------
10051
10052 PROCEDURE Delete_Page_Entry (
10054 ,p_page_id IN NUMBER
10055 ,p_association_id IN NUMBER
10056 ,p_classification_code IN VARCHAR2
10057 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10058 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10059 ,x_return_status OUT NOCOPY VARCHAR2
10060 ,x_errorcode OUT NOCOPY NUMBER
10061 ,x_msg_count OUT NOCOPY NUMBER
10062 ,x_msg_data OUT NOCOPY VARCHAR2
10063 ) IS
10064
10065 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Page_Entry';
10066
10067 --we don't use l_api_version yet, but eventually we might:
10068 --if we change required parameters, version goes FROM n.x to (n+1).x
10069 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10070 l_api_version CONSTANT NUMBER := 1.0;
10071
10072 BEGIN
10073
10074 -- Standard start of API savepoint
10075 IF FND_API.To_Boolean(p_commit) THEN
10076 SAVEPOINT Delete_Page_Entry_PUB;
10077 END IF;
10078
10079 -- Check for call compatibility
10080 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10081 l_api_name, G_PKG_NAME)
10082 THEN
10083 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10084 END IF;
10085 -- Initialize message list even though we don't currently use it
10086 IF FND_API.To_Boolean(p_init_msg_list) THEN
10087 FND_MSG_PUB.Initialize;
10088 END IF;
10089
10090 --Bug 3871440
10091 DELETE FROM EGO_PAGE_ENTRIES_B
10092 WHERE PAGE_ID = p_page_id
10093 AND ASSOCIATION_ID = p_association_id
10094 AND CLASSIFICATION_CODE = p_classification_code;
10095
10096 -- Standard check of p_commit
10097 IF FND_API.To_Boolean(p_commit) THEN
10098 COMMIT WORK;
10099 END IF;
10100
10101 x_return_status := FND_API.G_RET_STS_SUCCESS;
10102
10103 EXCEPTION
10104 WHEN OTHERS THEN
10105 IF FND_API.To_Boolean(p_commit) THEN
10106 ROLLBACK TO Delete_Page_Entry_PUB;
10107 END IF;
10108 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10109
10110 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10111 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10112 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10113 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10114 FND_MSG_PUB.Add;
10115 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10116 ,p_count => x_msg_count
10117 ,p_data => x_msg_data);
10118
10119
10120 END Delete_Page_Entry;
10121
10122 ----------------------------------------------------------------------
10123
10124 -------------------
10125 -- Function APIs --
10126 -------------------
10127
10128 ----------------------------------------------------------------------
10129
10130 PROCEDURE Create_Function (
10131 p_api_version IN NUMBER
10132 ,p_internal_name IN VARCHAR2
10133 ,p_function_type IN VARCHAR2
10134 ,p_function_info_1 IN VARCHAR2
10135 ,p_function_info_2 IN VARCHAR2
10136 ,p_display_name IN VARCHAR2
10137 ,p_description IN VARCHAR2
10138 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10139 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10140 ,x_function_id OUT NOCOPY NUMBER
10141 ,x_return_status OUT NOCOPY VARCHAR2
10142 ,x_errorcode OUT NOCOPY NUMBER
10143 ,x_msg_count OUT NOCOPY NUMBER
10144 ,x_msg_data OUT NOCOPY VARCHAR2
10145 ) IS
10146
10147 l_api_name CONSTANT VARCHAR2(30) := 'Create_Function';
10148
10149 --we don't use l_api_version yet, but eventually we might:
10150 --if we change required parameters, version goes FROM n.x to (n+1).x
10151 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10152 l_api_version CONSTANT NUMBER := 1.0;
10153
10154 l_Sysdate DATE := Sysdate;
10155
10156 BEGIN
10157
10158 -- Standard start of API savepoint
10159 IF FND_API.To_Boolean(p_commit) THEN
10160 SAVEPOINT Create_Function_PUB;
10161 END IF;
10162
10163 -- Check for call compatibility
10164 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10165 l_api_name, G_PKG_NAME)
10166 THEN
10167 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10168 END IF;
10169 -- Initialize message list even though we don't currently use it
10170 IF FND_API.To_Boolean(p_init_msg_list) THEN
10171 FND_MSG_PUB.Initialize;
10172 END IF;
10173
10174 SELECT EGO_FUNCTIONS_S.NEXTVAL INTO x_function_id FROM DUAL;
10175
10176 INSERT INTO EGO_FUNCTIONS_B
10177 (
10178 FUNCTION_ID
10182 ,FUNCTION_INFO_2
10179 ,INTERNAL_NAME
10180 ,FUNCTION_TYPE
10181 ,FUNCTION_INFO_1
10183 ,LAST_UPDATE_DATE
10184 ,LAST_UPDATED_BY
10185 ,CREATION_DATE
10186 ,CREATED_BY
10187 ,LAST_UPDATE_LOGIN
10188 )
10189 VALUES
10190 (
10191 x_function_id
10192 ,p_internal_name
10193 ,p_function_type
10194 ,p_FUNCTION_INFO_1
10195 ,p_FUNCTION_INFO_2
10196 ,l_Sysdate
10197 ,g_current_user_id
10198 ,l_Sysdate
10199 ,g_current_user_id
10200 ,g_current_login_id
10201 );
10202
10203 INSERT INTO EGO_FUNCTIONS_TL
10204 (
10205 FUNCTION_ID
10206 ,DISPLAY_NAME
10207 ,DESCRIPTION
10208 ,LANGUAGE
10209 ,SOURCE_LANG
10210 ,LAST_UPDATE_DATE
10211 ,LAST_UPDATED_BY
10212 ,CREATION_DATE
10213 ,CREATED_BY
10214 ,LAST_UPDATE_LOGIN
10215 )
10216 SELECT
10217 x_function_id
10218 ,p_display_name
10219 ,p_description
10220 ,L.LANGUAGE_CODE
10221 ,USERENV('LANG')
10222 ,l_Sysdate
10223 ,g_current_user_id
10224 ,l_Sysdate
10225 ,g_current_user_id
10226 ,g_current_login_id
10227 FROM FND_LANGUAGES L
10228 WHERE L.INSTALLED_FLAG in ('I', 'B');
10229
10230 -- Standard check of p_commit
10231 IF FND_API.To_Boolean(p_commit) THEN
10232 COMMIT WORK;
10233 END IF;
10234
10235 x_return_status := FND_API.G_RET_STS_SUCCESS;
10236
10237 EXCEPTION
10238 WHEN OTHERS THEN
10239 IF FND_API.To_Boolean(p_commit) THEN
10240 ROLLBACK TO Create_Function_PUB;
10241 END IF;
10242 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10243
10244 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10245 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10246 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10247 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10248 FND_MSG_PUB.Add;
10249 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10250 ,p_count => x_msg_count
10251 ,p_data => x_msg_data);
10252
10253
10254 END Create_Function;
10255
10256 ----------------------------------------------------------------------
10257
10258 PROCEDURE Update_Function (
10259 p_api_version IN NUMBER
10260 ,p_function_id IN NUMBER
10261 ,p_internal_name IN VARCHAR2
10262 ,p_function_info_1 IN VARCHAR2
10263 ,p_function_info_2 IN VARCHAR2
10264 ,p_display_name IN VARCHAR2
10265 ,p_description IN VARCHAR2
10266 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10267 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10268 ,x_return_status OUT NOCOPY VARCHAR2
10269 ,x_errorcode OUT NOCOPY NUMBER
10270 ,x_msg_count OUT NOCOPY NUMBER
10271 ,x_msg_data OUT NOCOPY VARCHAR2
10272 ) IS
10273
10274 l_api_name CONSTANT VARCHAR2(30) := 'Update_Function';
10275
10276 --we don't use l_api_version yet, but eventually we might:
10277 --if we change required parameters, version goes FROM n.x to (n+1).x
10278 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10279 l_api_version CONSTANT NUMBER := 1.0;
10280
10281 l_Sysdate DATE := Sysdate;
10282
10283 BEGIN
10284
10285 -- Standard start of API savepoint
10286 IF FND_API.To_Boolean(p_commit) THEN
10287 SAVEPOINT Update_Function_PUB;
10288 END IF;
10289
10290 -- Check for call compatibility
10291 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10292 l_api_name, G_PKG_NAME)
10293 THEN
10294 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10295 END IF;
10296 -- Initialize message list even though we don't currently use it
10297 IF FND_API.To_Boolean(p_init_msg_list) THEN
10298 FND_MSG_PUB.Initialize;
10299 END IF;
10300
10301 UPDATE EGO_FUNCTIONS_B
10302 SET
10303 INTERNAL_NAME = p_internal_name
10304 , FUNCTION_INFO_1 = p_FUNCTION_INFO_1
10305 , FUNCTION_INFO_2 = p_FUNCTION_INFO_2
10306 , LAST_UPDATE_DATE = l_Sysdate
10307 , LAST_UPDATED_BY = g_current_user_id
10308 , LAST_UPDATE_LOGIN = g_current_login_id
10309
10310 WHERE
10311 FUNCTION_ID = p_function_id;
10312
10313 UPDATE EGO_FUNCTIONS_TL
10314 SET
10315 DISPLAY_NAME = p_display_name
10316 , DESCRIPTION = p_description
10317 , LAST_UPDATE_DATE = l_Sysdate
10318 , LAST_UPDATED_BY = g_current_user_id
10319 , LAST_UPDATE_LOGIN = g_current_login_id
10320 , SOURCE_LANG = USERENV('LANG')
10321 WHERE
10322 -- FUNCTION_ID = p_function_id AND LANGUAGE = USERENV('LANG');
10323 FUNCTION_ID = p_function_id AND USERENV('LANG') IN (LANGUAGE ,SOURCE_LANG );
10324
10325 -- Standard check of p_commit
10326 IF FND_API.To_Boolean(p_commit) THEN
10330 x_return_status := FND_API.G_RET_STS_SUCCESS;
10327 COMMIT WORK;
10328 END IF;
10329
10331
10332 EXCEPTION
10333 WHEN OTHERS THEN
10334 IF FND_API.To_Boolean(p_commit) THEN
10335 ROLLBACK TO Update_Function_PUB;
10336 END IF;
10337 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10338
10339 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10340 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10341 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10342 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10343 FND_MSG_PUB.Add;
10344 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10345 ,p_count => x_msg_count
10346 ,p_data => x_msg_data);
10347
10348
10349 END Update_Function;
10350
10351 ----------------------------------------------------------------------
10352
10353 PROCEDURE Delete_Function (
10354 p_api_version IN NUMBER
10355 ,p_function_id IN NUMBER
10356 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10357 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10358 ,x_return_status OUT NOCOPY VARCHAR2
10359 ,x_errorcode OUT NOCOPY NUMBER
10360 ,x_msg_count OUT NOCOPY NUMBER
10361 ,x_msg_data OUT NOCOPY VARCHAR2
10362 ) IS
10363
10364 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Function';
10365
10366 --we don't use l_api_version yet, but eventually we might:
10367 --if we change required parameters, version goes FROM n.x to (n+1).x
10368 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10369 l_api_version CONSTANT NUMBER := 1.0;
10370
10371 l_function_use_count NUMBER;
10372 l_delete_error_flag VARCHAR2(1) := 'N';
10373 l_Sysdate DATE := Sysdate;
10374
10375 BEGIN
10376
10377 -- Standard start of API savepoint
10378 IF FND_API.To_Boolean(p_commit) THEN
10379 SAVEPOINT Delete_Function_PUB;
10380 END IF;
10381
10382 -- Check for call compatibility
10383 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10384 l_api_name, G_PKG_NAME)
10385 THEN
10386 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10387 END IF;
10388 -- Initialize message list even though we don't currently use it
10389 IF FND_API.To_Boolean(p_init_msg_list) THEN
10390 FND_MSG_PUB.Initialize;
10391 END IF;
10392
10393 -- If a Function is in use by any Actions, it cannot be deleted.
10394 -- We check function_id, prompt_function_id and visibility_func_id
10395 -- to make sure the Function we're trying to delete isn't in use.
10396
10397 SELECT count(*)
10398 INTO l_function_use_count
10399 FROM EGO_ACTIONS_B
10400 WHERE FUNCTION_ID = p_function_id;
10401 IF (l_function_use_count > 0)
10402 THEN
10403 l_delete_error_flag := 'Y';
10404 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10405 END IF;
10406
10407 SELECT count(*)
10408 INTO l_function_use_count
10409 FROM EGO_ACTION_DISPLAYS_B
10410 WHERE PROMPT_FUNCTION_ID = p_function_id;
10411 IF (l_function_use_count > 0)
10412 THEN
10413 l_delete_error_flag := 'Y';
10414 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10415 END IF;
10416
10417 SELECT count(*)
10418 INTO l_function_use_count
10419 FROM EGO_ACTION_DISPLAYS_B
10420 WHERE VISIBILITY_FUNC_ID = p_function_id;
10421 IF (l_function_use_count > 0)
10422 THEN
10423 l_delete_error_flag := 'Y';
10424 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10425 END IF;
10426
10427 DELETE FROM EGO_FUNCTIONS_B
10428 WHERE
10429 FUNCTION_ID = p_function_id;
10430
10431 DELETE FROM EGO_FUNCTIONS_TL
10432 WHERE
10433 FUNCTION_ID = p_function_id;
10434
10435 -- Standard check of p_commit
10436 IF FND_API.To_Boolean(p_commit) THEN
10437 COMMIT WORK;
10438 END IF;
10439
10440 x_return_status := FND_API.G_RET_STS_SUCCESS;
10441
10442 EXCEPTION
10443 WHEN OTHERS THEN
10444 IF FND_API.To_Boolean(p_commit) THEN
10445 ROLLBACK TO Delete_Function_PUB;
10446 END IF;
10447 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10448
10449 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10450 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10451 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10452 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10453 FND_MSG_PUB.Add;
10454 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10455 ,p_count => x_msg_count
10456 ,p_data => x_msg_data);
10457
10458
10459 IF (l_delete_error_flag = 'Y') THEN
10460 -- Let the calling API know that this Function is being used
10461 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' FunctionInUse';
10462 END IF;
10463
10464 END Delete_Function;
10465
10466 ----------------------------------------------------------------------
10467
10468 ------------------------------------
10469 -- Action AND Action Display APIs --
10470 ------------------------------------
10471
10475 p_api_version IN NUMBER
10472 ----------------------------------------------------------------------
10473
10474 PROCEDURE Create_Action (
10476 ,p_object_id IN NUMBER
10477 ,p_classification_code IN VARCHAR2
10478 ,p_attr_group_id IN NUMBER DEFAULT NULL
10479 ,p_sequence IN NUMBER
10480 ,p_action_name IN VARCHAR2
10481 ,p_description IN VARCHAR2
10482 ,p_function_id IN NUMBER
10483 ,p_enable_key_attrs IN VARCHAR2 DEFAULT NULL
10484 ,p_security_privilege_id IN NUMBER
10485 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10486 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10487 ,x_action_id OUT NOCOPY NUMBER
10488 ,x_return_status OUT NOCOPY VARCHAR2
10489 ,x_errorcode OUT NOCOPY NUMBER
10490 ,x_msg_count OUT NOCOPY NUMBER
10491 ,x_msg_data OUT NOCOPY VARCHAR2
10492 ) IS
10493
10494 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action';
10495
10496 --we don't use l_api_version yet, but eventually we might:
10497 --if we change required parameters, version goes FROM n.x to (n+1).x
10498 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10499 l_api_version CONSTANT NUMBER := 1.0;
10500
10501 l_Sysdate DATE := Sysdate;
10502 l_validate NUMBER;
10503
10504 e_dup_action_seq_error EXCEPTION;
10505 e_dup_action_name_error EXCEPTION;
10506
10507 BEGIN
10508
10509 -- Standard start of API savepoint
10510 IF FND_API.To_Boolean(p_commit) THEN
10511 SAVEPOINT Create_Action_PUB;
10512 END IF;
10513
10514 -- Check for call compatibility
10515 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10516 l_api_name, G_PKG_NAME)
10517 THEN
10518 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10519 END IF;
10520 -- Initialize message list even though we don't currently use it
10521 IF FND_API.To_Boolean(p_init_msg_list) THEN
10522 FND_MSG_PUB.Initialize;
10523 END IF;
10524
10525 SELECT EGO_ACTIONS_S.NEXTVAL INTO x_action_id FROM DUAL;
10526
10527 -- Ensure created action's name or sequence number do not
10528 -- match those of an action already associated with the
10529 -- classification/attribute pair.
10530
10531 -- Validate sequence
10532 SELECT COUNT(*)
10533 INTO l_validate
10534 FROM EGO_ACTIONS_B
10535 WHERE SEQUENCE = p_sequence
10536 AND OBJECT_ID = p_object_id
10537 AND CLASSIFICATION_CODE = p_classification_code
10538 AND ATTR_GROUP_ID = p_attr_group_id;
10539
10540 IF (l_validate > 0) THEN
10541 RAISE e_dup_action_seq_error;
10542 END IF;
10543
10544 -- Validate name
10545 SELECT COUNT(*)
10546 INTO l_validate
10547 FROM EGO_ACTIONS_B
10548 WHERE ACTION_NAME = p_action_name
10549 AND OBJECT_ID = p_object_id
10550 AND CLASSIFICATION_CODE = p_classification_code
10551 AND ATTR_GROUP_ID = p_attr_group_id;
10552
10553 IF (l_validate > 0) THEN
10554 RAISE e_dup_action_name_error;
10555 END IF;
10556
10557
10558 INSERT INTO EGO_ACTIONS_B
10559 (
10560 ACTION_ID
10561 ,OBJECT_ID
10562 ,CLASSIFICATION_CODE
10563 ,ATTR_GROUP_ID
10564 ,SEQUENCE
10565 ,ACTION_NAME
10566 ,FUNCTION_ID
10567 ,ENABLE_KEY_ATTRIBUTES
10568 ,SECURITY_PRIVILEGE_ID
10569 ,LAST_UPDATE_DATE
10570 ,LAST_UPDATED_BY
10571 ,CREATION_DATE
10572 ,CREATED_BY
10573 ,LAST_UPDATE_LOGIN
10574 )
10575 VALUES
10576 (
10577 x_action_id
10578 ,p_object_id
10579 ,p_classification_code
10580 ,p_attr_group_id
10581 ,p_sequence
10582 ,p_action_name
10583 ,p_function_id
10584 ,p_enable_key_attrs
10585 ,p_security_privilege_id
10586 ,l_Sysdate
10587 ,g_current_user_id
10588 ,l_Sysdate
10589 ,g_current_user_id
10590 ,g_current_login_id
10591 );
10592
10593 INSERT INTO EGO_ACTIONS_TL
10594 (
10595 ACTION_ID
10596 ,DESCRIPTION
10597 ,LANGUAGE
10598 ,SOURCE_LANG
10599 ,LAST_UPDATE_DATE
10600 ,LAST_UPDATED_BY
10601 ,CREATION_DATE
10602 ,CREATED_BY
10603 ,LAST_UPDATE_LOGIN
10604 )
10605 SELECT
10606 x_action_id
10607 ,p_description
10608 ,L.LANGUAGE_CODE
10609 ,USERENV('LANG')
10610 ,l_Sysdate
10611 ,g_current_user_id
10612 ,l_Sysdate
10613 ,g_current_user_id
10614 ,g_current_login_id
10615
10616 FROM FND_LANGUAGES L
10617 WHERE L.INSTALLED_FLAG in ('I', 'B');
10618
10619 -- Standard check of p_commit
10620 IF FND_API.To_Boolean(p_commit) THEN
10621 COMMIT WORK;
10622 END IF;
10623
10624 x_return_status := FND_API.G_RET_STS_SUCCESS;
10625 x_errorcode := 0;
10626
10627 EXCEPTION
10628 WHEN e_dup_action_seq_error THEN
10632 x_return_status := FND_API.G_RET_STS_ERROR;
10629 IF FND_API.To_Boolean(p_commit) THEN
10630 ROLLBACK TO Create_Action_PUB;
10631 END IF;
10633 x_errorcode := 1;
10634 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ACTN_DUP_SEQ_ERR');
10635 FND_MSG_PUB.Add;
10636 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10637 ,p_count => x_msg_count
10638 ,p_data => x_msg_data);
10639
10640 WHEN e_dup_action_name_error THEN
10641 IF FND_API.To_Boolean(p_commit) THEN
10642 ROLLBACK TO Create_Action_PUB;
10643 END IF;
10644 x_return_status := FND_API.G_RET_STS_ERROR;
10645 x_errorcode := 1;
10646 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CR_ACTN_DUP_NAME_ERR');
10647 FND_MSG_PUB.Add;
10648 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10649 ,p_count => x_msg_count
10650 ,p_data => x_msg_data);
10651
10652 WHEN OTHERS THEN
10653 IF FND_API.To_Boolean(p_commit) THEN
10654 ROLLBACK TO Create_Action_PUB;
10655 END IF;
10656 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10657 x_errorcode := 1;
10658 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10659 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10660 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10661 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10662 FND_MSG_PUB.Add;
10663 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10664 ,p_count => x_msg_count
10665 ,p_data => x_msg_data);
10666
10667
10668 END Create_Action;
10669
10670 ----------------------------------------------------------------------
10671
10672 PROCEDURE Create_Action (
10673 p_api_version IN NUMBER
10674 ,p_object_id IN NUMBER
10675 ,p_classification_code IN VARCHAR2
10676 ,p_attr_grp_application_id IN NUMBER
10677 ,p_attr_group_type IN VARCHAR2
10678 ,p_attr_group_name IN VARCHAR2
10679 ,p_sequence IN NUMBER
10680 ,p_action_name IN VARCHAR2
10681 ,p_description IN VARCHAR2
10682 ,p_function_id IN NUMBER
10683 ,p_enable_key_attrs IN VARCHAR2 DEFAULT NULL
10684 ,p_security_privilege_id IN NUMBER
10685 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10686 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10687 ,x_action_id OUT NOCOPY NUMBER
10688 ,x_return_status OUT NOCOPY VARCHAR2
10689 ,x_errorcode OUT NOCOPY NUMBER
10690 ,x_msg_count OUT NOCOPY NUMBER
10691 ,x_msg_data OUT NOCOPY VARCHAR2
10692 ) IS
10693
10694 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action';
10695
10696 l_attr_group_id NUMBER;
10697
10698 BEGIN
10699
10700 -- Standard start of API savepoint
10701 IF FND_API.To_Boolean(p_commit) THEN
10702 SAVEPOINT Create_Action_PUB;
10703 END IF;
10704
10705 l_attr_group_id := Get_Attr_Group_Id_From_PKs(p_attr_grp_application_id
10706 ,p_attr_group_type
10707 ,p_attr_group_name);
10708 IF l_attr_group_id IS NULL THEN
10709 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10710 END IF;
10711
10712 EGO_EXT_FWK_PUB.Create_Action(
10713 p_api_version => p_api_version
10714 ,p_object_id => p_object_id
10715 ,p_classification_code => p_classification_code
10716 ,p_attr_group_id => l_attr_group_id
10717 ,p_sequence => p_sequence
10718 ,p_action_name => p_action_name
10719 ,p_description => p_description
10720 ,p_function_id => p_function_id
10721 ,p_security_privilege_id => p_security_privilege_id
10722 ,p_init_msg_list => p_init_msg_list
10723 ,p_commit => p_commit
10724 ,x_action_id => x_action_id
10725 ,x_return_status => x_return_status
10726 ,x_errorcode => x_errorcode
10727 ,x_msg_count => x_msg_count
10728 ,x_msg_data => x_msg_data
10729 );
10730
10731 -- Standard check of p_commit
10732 IF FND_API.To_Boolean(p_commit) THEN
10733 COMMIT WORK;
10734 END IF;
10735
10736 EXCEPTION
10737 WHEN OTHERS THEN
10738 IF FND_API.To_Boolean(p_commit) THEN
10739 ROLLBACK TO Create_Action_PUB;
10740 END IF;
10741 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10742 x_errorcode := 1;
10743
10744 IF l_attr_group_id IS NULL THEN
10745 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupIDFoundForPKs';
10746 ELSE
10747 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10748 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10749 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10750 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10751 FND_MSG_PUB.Add;
10755
10752 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10753 ,p_count => x_msg_count
10754 ,p_data => x_msg_data);
10756 END IF;
10757
10758 END Create_Action;
10759
10760 ----------------------------------------------------------------------
10761
10762 PROCEDURE Update_Action (
10763 p_api_version IN NUMBER
10764 ,p_action_id IN NUMBER
10765 ,p_sequence IN NUMBER
10766 ,p_action_name IN VARCHAR2
10767 ,p_description IN VARCHAR2
10768 ,p_function_id IN NUMBER
10769 ,p_enable_key_attrs IN VARCHAR2 DEFAULT NULL
10770 ,p_security_privilege_id IN NUMBER
10771 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10772 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10773 ,x_return_status OUT NOCOPY VARCHAR2
10774 ,x_errorcode OUT NOCOPY NUMBER
10775 ,x_msg_count OUT NOCOPY NUMBER
10776 ,x_msg_data OUT NOCOPY VARCHAR2
10777 ) IS
10778
10779 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action';
10780
10781 --we don't use l_api_version yet, but eventually we might:
10782 --if we change required parameters, version goes FROM n.x to (n+1).x
10783 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10784 l_api_version CONSTANT NUMBER := 1.0;
10785
10786 l_Sysdate DATE := Sysdate;
10787 l_validate NUMBER;
10788 l_old_function_id NUMBER;
10789 l_mapping_count NUMBER;
10790 l_mapped_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'A';
10791 l_object_id NUMBER;
10792 l_classification_code VARCHAR2(150);
10793 l_attr_group_id NUMBER;
10794
10795 e_dup_action_seq_error EXCEPTION;
10796 e_dup_action_name_error EXCEPTION;
10797
10798 BEGIN
10799
10800 -- Standard start of API savepoint
10801 IF FND_API.To_Boolean(p_commit) THEN
10802 SAVEPOINT Update_Action_PUB;
10803 END IF;
10804
10805 -- Check for call compatibility
10806 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10807 l_api_name, G_PKG_NAME)
10808 THEN
10809 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10810 END IF;
10811 -- Initialize message list even though we don't currently use it
10812 IF FND_API.To_Boolean(p_init_msg_list) THEN
10813 FND_MSG_PUB.Initialize;
10814 END IF;
10815
10816 -- Disallow changes that duplicate a preexisting action's sequence
10817 -- number or name in the classification/attribute group association.
10818
10819 -- Retrieve type/classification/attribute group info.
10820 SELECT OBJECT_ID, CLASSIFICATION_CODE, ATTR_GROUP_ID
10821 INTO l_object_id, l_classification_code, l_attr_group_id
10822 FROM EGO_ACTIONS_B
10823 WHERE ACTION_ID = p_action_id;
10824
10825 -- Validate sequence
10826 SELECT COUNT(*)
10827 INTO l_validate
10828 FROM EGO_ACTIONS_B
10829 WHERE SEQUENCE = p_sequence
10830 AND ACTION_ID <> p_action_id
10831 AND OBJECT_ID = l_object_id
10832 AND CLASSIFICATION_CODE = l_classification_code
10833 AND ATTR_GROUP_ID = l_attr_group_id;
10834
10835 IF (l_validate > 0) THEN
10836 RAISE e_dup_action_seq_error;
10837 END IF;
10838
10839 -- Validate name
10840 SELECT COUNT(*)
10841 INTO l_validate
10842 FROM EGO_ACTIONS_B
10843 WHERE ACTION_NAME = p_action_name
10844 AND ACTION_ID <> p_action_id
10845 AND OBJECT_ID = l_object_id
10846 AND CLASSIFICATION_CODE = l_classification_code
10847 AND ATTR_GROUP_ID = l_attr_group_id;
10848
10849 IF (l_validate > 0) THEN
10850 RAISE e_dup_action_name_error;
10851 END IF;
10852
10853
10854 -- If the function_id is different and if there were
10855 -- Mappings for the old Function, we delete those Mappings.
10856
10857 SELECT FUNCTION_ID
10858 INTO l_old_function_id
10859 FROM EGO_ACTIONS_B
10860 WHERE ACTION_ID = p_action_id;
10861
10862 IF l_old_function_id <> p_function_id THEN
10863 SELECT COUNT(*)
10864 INTO l_mapping_count
10865 FROM EGO_MAPPINGS_B
10866 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
10867 AND FUNCTION_ID = l_old_function_id
10868 AND MAPPED_OBJ_TYPE = l_mapped_obj_type;
10869
10870 IF (l_mapping_count > 0) THEN
10871 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_function_id,
10872 l_mapped_obj_type, p_action_id, null,
10873 null, x_return_status, x_errorcode,
10874 x_msg_count, x_msg_data);
10875 END IF;
10876 END IF;
10877
10878 UPDATE EGO_ACTIONS_B
10879 SET
10880 SEQUENCE = p_sequence
10881 , ACTION_NAME = p_action_name
10882 , FUNCTION_ID = p_function_id
10883 , SECURITY_PRIVILEGE_ID = p_security_privilege_id
10887 , ENABLE_KEY_ATTRIBUTES = p_enable_key_attrs
10884 , LAST_UPDATE_DATE = l_Sysdate
10885 , LAST_UPDATED_BY = g_current_user_id
10886 , LAST_UPDATE_LOGIN = g_current_login_id
10888 WHERE
10889 ACTION_ID = p_action_id;
10890
10891 UPDATE EGO_ACTIONS_TL
10892 SET
10893 DESCRIPTION = p_description
10894 , LAST_UPDATE_DATE = l_Sysdate
10895 , LAST_UPDATED_BY = g_current_user_id
10896 , LAST_UPDATE_LOGIN = g_current_login_id
10897 , SOURCE_LANG = USERENV('LANG')
10898 WHERE
10899 -- ACTION_ID = p_action_id AND LANGUAGE = USERENV('LANG');
10900 ACTION_ID = p_action_id AND USERENV('LANG') IN (LANGUAGE , SOURCE_LANG);
10901
10902 -- Standard check of p_commit
10903 IF FND_API.To_Boolean(p_commit) THEN
10904 COMMIT WORK;
10905 END IF;
10906
10907 x_return_status := FND_API.G_RET_STS_SUCCESS;
10908 x_errorcode := 0;
10909
10910 EXCEPTION
10911 WHEN e_dup_action_seq_error THEN
10912 IF FND_API.To_Boolean(p_commit) THEN
10913 ROLLBACK TO Update_Action_PUB;
10914 END IF;
10915 x_return_status := FND_API.G_RET_STS_ERROR;
10916 x_errorcode := 1;
10917 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_UP_ACTN_DUP_SEQ_ERR');
10918 FND_MSG_PUB.Add;
10919 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10920 ,p_count => x_msg_count
10921 ,p_data => x_msg_data);
10922
10923 WHEN e_dup_action_name_error THEN
10924 IF FND_API.To_Boolean(p_commit) THEN
10925 ROLLBACK TO Update_Action_PUB;
10926 END IF;
10927 x_return_status := FND_API.G_RET_STS_ERROR;
10928 x_errorcode := 1;
10929 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_UP_ACTN_DUP_NAME_ERR');
10930 FND_MSG_PUB.Add;
10931 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10932 ,p_count => x_msg_count
10933 ,p_data => x_msg_data);
10934
10935 WHEN OTHERS THEN
10936 IF FND_API.To_Boolean(p_commit) THEN
10937 ROLLBACK TO Update_Action_PUB;
10938 END IF;
10939 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10940
10941 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
10942 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
10943 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
10944 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
10945 FND_MSG_PUB.Add;
10946 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
10947 ,p_count => x_msg_count
10948 ,p_data => x_msg_data);
10949
10950
10951 END Update_Action;
10952
10953 ----------------------------------------------------------------------
10954
10955 PROCEDURE Delete_Action (
10956 p_api_version IN NUMBER
10957 ,p_action_id IN NUMBER
10958 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
10959 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
10960 ,x_return_status OUT NOCOPY VARCHAR2
10964 ) IS
10961 ,x_errorcode OUT NOCOPY NUMBER
10962 ,x_msg_count OUT NOCOPY NUMBER
10963 ,x_msg_data OUT NOCOPY VARCHAR2
10965
10966 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action';
10967
10968 --we don't use l_api_version yet, but eventually we might:
10969 --if we change required parameters, version goes FROM n.x to (n+1).x
10970 --if we change optional parameters, version goes FROM x.n to x.(n+1)
10971 l_api_version CONSTANT NUMBER := 1.0;
10972
10973 l_function_id NUMBER;
10974 l_mapping_count NUMBER;
10975 l_mapped_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'A';
10976 --R12C
10977 l_visibility_count NUMBER;
10978
10979
10980 BEGIN
10981
10982 -- Standard start of API savepoint
10983 IF FND_API.To_Boolean(p_commit) THEN
10984 SAVEPOINT Delete_Action_PUB;
10985 END IF;
10986
10987 -- Check for call compatibility
10988 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
10989 l_api_name, G_PKG_NAME)
10990 THEN
10991 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10992 END IF;
10993 -- Initialize message list even though we don't currently use it
10994 IF FND_API.To_Boolean(p_init_msg_list) THEN
10995 FND_MSG_PUB.Initialize;
10996 END IF;
10997
10998 -- We get the Function ID before deleting the row so we can
10999 -- delete Mappings for the Function if necessary.
11000
11001 SELECT FUNCTION_ID
11002 INTO l_function_id
11003 FROM EGO_ACTIONS_B
11004 WHERE ACTION_ID = p_action_id;
11005
11006 DELETE FROM EGO_ACTIONS_B
11007 WHERE
11008 ACTION_ID = p_action_id;
11009
11010 DELETE FROM EGO_ACTIONS_TL
11011 WHERE
11012 ACTION_ID = p_action_id;
11013
11014 SELECT COUNT(*)
11015 INTO l_mapping_count
11016 FROM EGO_MAPPINGS_B
11017 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11018 AND FUNCTION_ID = l_function_id
11019 AND MAPPED_OBJ_TYPE = l_mapped_obj_type;
11020
11021 IF (l_mapping_count > 0) THEN
11022 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_function_id, l_mapped_obj_type,
11023 p_action_id, null, null, x_return_status,
11024 x_errorcode, x_msg_count, x_msg_data);
11025 END IF;
11026
11027 --R12C Deleting the datalevel visibility from the EGO_ACTIONS_DL table.
11028 SELECT COUNT(*)
11029 INTO l_visibility_count
11030 FROM EGO_ACTIONS_DL
11031 WHERE ACTION_ID = p_action_id;
11032 code_debug ('ENTERED THE FUCNTION Delete_Action l_visibility_count'||l_visibility_count);
11033
11034 IF (l_visibility_count > 0) THEN
11035 Delete_Action_Data_Level(p_api_version,p_action_id,null, null, x_return_status,x_errorcode, x_msg_count, x_msg_data);
11036 END IF;
11037
11038 -- Standard check of p_commit
11039 IF FND_API.To_Boolean(p_commit) THEN
11040 COMMIT WORK;
11041 END IF;
11042
11043 x_return_status := FND_API.G_RET_STS_SUCCESS;
11044
11045 EXCEPTION
11046 WHEN OTHERS THEN
11047 IF FND_API.To_Boolean(p_commit) THEN
11048 ROLLBACK TO Delete_Action_PUB;
11049 END IF;
11050 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11051
11052 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11053 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11054 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11055 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11056 FND_MSG_PUB.Add;
11057 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11058 ,p_count => x_msg_count
11059 ,p_data => x_msg_data);
11060
11061
11062 END Delete_Action;
11063
11064 ----------------------------------------------------------------------
11065 --R12C
11066 -- call this API to create an Visibilty information that is executed by a user action
11067 PROCEDURE Create_Action_Data_Level (
11068 p_api_version IN NUMBER
11069 ,p_action_id IN NUMBER
11070 ,p_data_level_id IN NUMBER
11071 ,p_visibility_flag IN VARCHAR2 DEFAULT 'Y'
11072 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11073 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11074 ,x_return_status OUT NOCOPY VARCHAR2
11075 ,x_errorcode OUT NOCOPY NUMBER
11076 ,x_msg_count OUT NOCOPY NUMBER
11077 ,x_msg_data OUT NOCOPY VARCHAR2
11078 ) IS
11079
11080 l_api_name CONSTANT VARCHAR2(30) := 'Create_Visibilty_DL';
11081
11082 --we don't use l_api_version yet, but eventually we might:
11083 --if we change required parameters, version goes FROM n.x to (n+1).x
11084 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11085 l_api_version CONSTANT NUMBER := 1.0;
11086
11087 l_Sysdate DATE := Sysdate;
11088
11089 BEGIN
11090
11091 -- Standard start of API savepoint
11095
11092 IF FND_API.To_Boolean(p_commit) THEN
11093 SAVEPOINT Create_Visibilty_DL_PUB;
11094 END IF;
11096 -- Check for call compatibility
11097 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11098 l_api_name, G_PKG_NAME)
11099 THEN
11100 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11101 END IF;
11102 -- Initialize message list even though we don't currently use it
11103 IF FND_API.To_Boolean(p_init_msg_list) THEN
11104 FND_MSG_PUB.Initialize;
11105 END IF;
11106
11107 INSERT INTO EGO_ACTIONS_DL
11108 (
11109 ACTION_ID
11110 ,DATA_LEVEL_ID
11111 ,VISIBILITY_FLAG
11112 ,LAST_UPDATE_DATE
11113 ,LAST_UPDATED_BY
11114 ,CREATION_DATE
11115 ,CREATED_BY
11116 ,LAST_UPDATE_LOGIN
11117 )
11118 VALUES
11119 (
11120 p_action_id
11121 ,p_data_level_id
11122 ,p_visibility_flag
11123 ,l_Sysdate
11124 ,g_current_user_id
11125 ,l_Sysdate
11126 ,g_current_user_id
11127 ,g_current_login_id
11128 );
11129
11130 -- Standard check of p_commit
11131 IF FND_API.To_Boolean(p_commit) THEN
11132 COMMIT WORK;
11133 END IF;
11134
11135 x_return_status := FND_API.G_RET_STS_SUCCESS;
11136
11137 EXCEPTION
11138 WHEN OTHERS THEN
11139 IF FND_API.To_Boolean(p_commit) THEN
11140 ROLLBACK TO Create_Visibilty_DL_PUB;
11141 END IF;
11142 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11143
11144 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11145 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11146 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11147 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11148 FND_MSG_PUB.Add;
11149 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11150 ,p_count => x_msg_count
11151 ,p_data => x_msg_data);
11152 END Create_Action_Data_Level;
11153
11154
11155
11156 -- call this API to create an action that is executed by a user action
11157 PROCEDURE Create_Action_Display (
11158 p_api_version IN NUMBER
11159 ,p_action_id IN NUMBER
11160 ,p_display_style IN VARCHAR2
11161 ,p_prompt_application_id IN NUMBER
11162 ,p_prompt_message_name IN VARCHAR2
11163 ,p_visibility_flag IN VARCHAR2
11164 ,p_prompt_function_id IN NUMBER
11165 ,p_visibility_func_id IN NUMBER
11166 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11167 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11168 ,x_return_status OUT NOCOPY VARCHAR2
11169 ,x_errorcode OUT NOCOPY NUMBER
11170 ,x_msg_count OUT NOCOPY NUMBER
11171 ,x_msg_data OUT NOCOPY VARCHAR2
11172 ) IS
11173
11174 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Display';
11175
11176 --we don't use l_api_version yet, but eventually we might:
11177 --if we change required parameters, version goes FROM n.x to (n+1).x
11178 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11179 l_api_version CONSTANT NUMBER := 1.0;
11180
11181 l_Sysdate DATE := Sysdate;
11182
11183 BEGIN
11184
11185 -- Standard start of API savepoint
11186 IF FND_API.To_Boolean(p_commit) THEN
11187 SAVEPOINT Create_Action_Display_PUB;
11188 END IF;
11189
11190 -- Check for call compatibility
11191 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11192 l_api_name, G_PKG_NAME)
11193 THEN
11194 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11195 END IF;
11196 -- Initialize message list even though we don't currently use it
11197 IF FND_API.To_Boolean(p_init_msg_list) THEN
11198 FND_MSG_PUB.Initialize;
11199 END IF;
11200
11201 INSERT INTO EGO_ACTION_DISPLAYS_B
11202 (
11203 ACTION_ID
11204 ,EXECUTION_METHOD
11205 ,DISPLAY_STYLE
11206 ,PROMPT_APPLICATION_ID
11207 ,PROMPT_MESSAGE_NAME
11208 ,VISIBILITY_FLAG
11209 ,PROMPT_FUNCTION_ID
11210 ,VISIBILITY_FUNC_ID
11211 ,LAST_UPDATE_DATE
11212 ,LAST_UPDATED_BY
11213 ,CREATION_DATE
11214 ,CREATED_BY
11215 ,LAST_UPDATE_LOGIN
11216 )
11217 VALUES
11218 (
11219 p_action_id
11220 ,'U'
11221 ,p_display_style
11222 ,p_prompt_application_id
11223 ,p_prompt_message_name
11224 ,p_visibility_flag
11225 ,p_prompt_function_id
11226 ,p_visibility_func_id
11227 ,l_Sysdate
11228 ,g_current_user_id
11229 ,l_Sysdate
11230 ,g_current_user_id
11231 ,g_current_login_id
11232 );
11233
11234 -- Standard check of p_commit
11235 IF FND_API.To_Boolean(p_commit) THEN
11236 COMMIT WORK;
11237 END IF;
11238
11239 x_return_status := FND_API.G_RET_STS_SUCCESS;
11243 IF FND_API.To_Boolean(p_commit) THEN
11240
11241 EXCEPTION
11242 WHEN OTHERS THEN
11244 ROLLBACK TO Create_Action_Display_PUB;
11245 END IF;
11246 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11247
11248 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11249 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11250 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11251 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11252 FND_MSG_PUB.Add;
11253 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11254 ,p_count => x_msg_count
11255 ,p_data => x_msg_data);
11256
11257
11258 END Create_Action_Display;
11259
11260 ----------------------------------------------------------------------
11261
11262 -- call this API to create an action that is executed by a trigger
11263 PROCEDURE Create_Action_Display (
11264 p_api_version IN NUMBER
11265 ,p_action_id IN NUMBER
11266 ,p_trigger_code IN VARCHAR2
11267 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11268 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11269 ,x_return_status OUT NOCOPY VARCHAR2
11270 ,x_errorcode OUT NOCOPY NUMBER
11271 ,x_msg_count OUT NOCOPY NUMBER
11272 ,x_msg_data OUT NOCOPY VARCHAR2
11273 ) IS
11274
11275 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Display';
11276
11277 --we don't use l_api_version yet, but eventually we might:
11278 --if we change required parameters, version goes FROM n.x to (n+1).x
11279 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11280 l_api_version CONSTANT NUMBER := 1.0;
11281
11282 l_Sysdate DATE := Sysdate;
11283
11284 BEGIN
11285
11286 -- Standard start of API savepoint
11287 IF FND_API.To_Boolean(p_commit) THEN
11288 SAVEPOINT Create_Action_Display_PUB;
11289 END IF;
11290
11291 -- Check for call compatibility
11292 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11293 l_api_name, G_PKG_NAME)
11294 THEN
11295 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11296 END IF;
11297 -- Initialize message list even though we don't currently use it
11298 IF FND_API.To_Boolean(p_init_msg_list) THEN
11299 FND_MSG_PUB.Initialize;
11300 END IF;
11301
11302 INSERT INTO EGO_ACTION_DISPLAYS_B
11303 (
11304 ACTION_ID
11305 ,EXECUTION_METHOD
11306 ,EXECUTION_TRIGGER
11307 ,LAST_UPDATE_DATE
11308 ,LAST_UPDATED_BY
11309 ,CREATION_DATE
11310 ,CREATED_BY
11311 ,LAST_UPDATE_LOGIN
11312 )
11313 VALUES
11314 (
11315 p_action_id
11316 ,'T'
11317 ,p_trigger_code
11318 ,l_Sysdate
11319 ,g_current_user_id
11320 ,l_Sysdate
11321 ,g_current_user_id
11322 ,g_current_login_id
11323 );
11324
11325 -- Standard check of p_commit
11326 IF FND_API.To_Boolean(p_commit) THEN
11327 COMMIT WORK;
11328 END IF;
11329
11330 x_return_status := FND_API.G_RET_STS_SUCCESS;
11331
11332 EXCEPTION
11333 WHEN OTHERS THEN
11334 IF FND_API.To_Boolean(p_commit) THEN
11335 ROLLBACK TO Create_Action_Display_PUB;
11336 END IF;
11337 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11338
11339 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11340 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11341 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11342 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11343 FND_MSG_PUB.Add;
11344 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11345 ,p_count => x_msg_count
11346 ,p_data => x_msg_data);
11347
11348
11349 END Create_Action_Display;
11350
11351 ----------------------------------------------------------------------
11352
11353 -- call this API to update an action that is executed by a user action
11354 PROCEDURE Update_Action_Display (
11355 p_api_version IN NUMBER
11356 ,p_action_id IN NUMBER
11357 ,p_display_style IN VARCHAR2
11358 ,p_prompt_application_id IN NUMBER
11359 ,p_prompt_message_name IN VARCHAR2
11360 ,p_visibility_flag IN VARCHAR2
11361 ,p_prompt_function_id IN NUMBER
11362 ,p_visibility_func_id IN NUMBER
11363 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11364 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11365 ,x_return_status OUT NOCOPY VARCHAR2
11366 ,x_errorcode OUT NOCOPY NUMBER
11367 ,x_msg_count OUT NOCOPY NUMBER
11368 ,x_msg_data OUT NOCOPY VARCHAR2
11369 ) IS
11370
11371 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Display';
11372
11373 --we don't use l_api_version yet, but eventually we might:
11377
11374 --if we change required parameters, version goes FROM n.x to (n+1).x
11375 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11376 l_api_version CONSTANT NUMBER := 1.0;
11378 l_Sysdate DATE := Sysdate;
11379 l_disp_check_count NUMBER;
11380 l_old_prompt_func_id NUMBER;
11381 l_old_vis_func_id NUMBER;
11382 l_mapping_count NUMBER;
11383 l_prompt_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'P';
11384 l_vis_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'V';
11385
11386 BEGIN
11387
11388 -- Standard start of API savepoint
11389 IF FND_API.To_Boolean(p_commit) THEN
11390 SAVEPOINT Update_Action_Display_PUB;
11391 END IF;
11392
11393 -- Check for call compatibility
11394 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11395 l_api_name, G_PKG_NAME)
11396 THEN
11397 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11398 END IF;
11399 -- Initialize message list even though we don't currently use it
11400 IF FND_API.To_Boolean(p_init_msg_list) THEN
11401 FND_MSG_PUB.Initialize;
11402 END IF;
11403
11404 -- Just in case caller is updating an Action that doesn't yet have a Display...
11405
11406 SELECT COUNT(*)
11407 INTO l_disp_check_count
11408 FROM EGO_ACTION_DISPLAYS_B
11409 WHERE ACTION_ID = p_action_id;
11410
11411 IF (l_disp_check_count = 0)
11412 THEN
11413 EGO_EXT_FWK_PUB.Create_Action_Display (
11414 p_api_version => '1.0'
11415 ,p_action_id => p_action_id
11416 ,p_display_style => p_display_style
11417 ,p_prompt_application_id => p_prompt_application_id
11418 ,p_prompt_message_name => p_prompt_message_name
11419 ,p_visibility_flag => p_visibility_flag
11420 ,p_prompt_function_id => p_prompt_function_id
11421 ,p_visibility_func_id => p_visibility_func_id
11422 ,p_init_msg_list => p_init_msg_list
11423 ,p_commit => p_commit
11424 ,x_return_status => x_return_status
11425 ,x_errorcode => x_errorcode
11426 ,x_msg_count => x_msg_count
11427 ,x_msg_data => x_msg_data
11428 );
11429 ELSE
11430
11431 -- If the function_id's are different, we delete Mappings.
11432
11433 SELECT PROMPT_FUNCTION_ID
11434 INTO l_old_prompt_func_id
11435 FROM EGO_ACTION_DISPLAYS_B
11436 WHERE ACTION_ID = p_action_id;
11437
11438 IF ((l_old_prompt_func_id IS NOT NULL)
11439 AND (l_old_prompt_func_id <> p_prompt_function_id)) THEN
11440 SELECT COUNT(*)
11441 INTO l_mapping_count
11442 FROM EGO_MAPPINGS_B
11443 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11444 AND FUNCTION_ID = l_old_prompt_func_id
11445 AND MAPPED_OBJ_TYPE = l_prompt_obj_type;
11446
11447 IF (l_mapping_count > 0)
11448 THEN
11449 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_prompt_func_id,
11450 l_prompt_obj_type, p_action_id, null,
11451 null, x_return_status, x_errorcode,
11452 x_msg_count, x_msg_data);
11453 END IF;
11454 END IF;
11455
11456 SELECT VISIBILITY_FUNC_ID
11457 INTO l_old_vis_func_id
11458 FROM EGO_ACTION_DISPLAYS_B
11459 WHERE ACTION_ID = p_action_id;
11460
11461 IF l_old_vis_func_id is not null AND l_old_vis_func_id <> p_visibility_func_id
11462 THEN
11463 SELECT COUNT(*)
11464 INTO l_mapping_count
11465 FROM EGO_MAPPINGS_B
11466 WHERE MAPPED_OBJ_PK1_VAL = to_char(p_action_id)
11467 AND FUNCTION_ID = l_old_vis_func_id
11468 AND MAPPED_OBJ_TYPE = l_vis_obj_type;
11469
11470 IF (l_mapping_count > 0)
11471 THEN
11472 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_vis_func_id,
11473 l_vis_obj_type, p_action_id, null,
11474 null, x_return_status, x_errorcode,
11475 x_msg_count, x_msg_data);
11476 END IF;
11477 END IF;
11478
11479 UPDATE EGO_ACTION_DISPLAYS_B
11480 SET
11481 EXECUTION_METHOD = 'U'
11482 ,DISPLAY_STYLE = p_display_style
11483 ,PROMPT_APPLICATION_ID = p_prompt_application_id
11484 ,PROMPT_MESSAGE_NAME = p_prompt_message_name
11485 ,VISIBILITY_FLAG = p_visibility_flag
11486 ,PROMPT_FUNCTION_ID = p_prompt_function_id
11487 ,VISIBILITY_FUNC_ID = p_visibility_func_id
11488 ,LAST_UPDATE_DATE = l_Sysdate
11489 ,LAST_UPDATED_BY = g_current_user_id
11490 ,LAST_UPDATE_LOGIN = g_current_login_id
11491 ,EXECUTION_TRIGGER = null
11492 WHERE
11493 ACTION_ID = p_action_id;
11494 END IF;
11495
11496 -- Standard check of p_commit
11497 IF FND_API.To_Boolean(p_commit) THEN
11498 COMMIT WORK;
11499 END IF;
11500
11501 x_return_status := FND_API.G_RET_STS_SUCCESS;
11502
11503 EXCEPTION
11504 WHEN OTHERS THEN
11508 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11505 IF FND_API.To_Boolean(p_commit) THEN
11506 ROLLBACK TO Update_Action_Display_PUB;
11507 END IF;
11509
11510 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11511 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11512 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11513 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11514 FND_MSG_PUB.Add;
11515 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11516 ,p_count => x_msg_count
11517 ,p_data => x_msg_data);
11518
11519
11520 END Update_Action_Display;
11521
11522 ----------------------------------------------------------------------
11523
11524 -- call this API to update an action that is executed by a trigger
11525 PROCEDURE Update_Action_Display (
11526 p_api_version IN NUMBER
11527 ,p_action_id IN NUMBER
11528 ,p_trigger_code IN VARCHAR2
11529 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11530 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11531 ,x_return_status OUT NOCOPY VARCHAR2
11532 ,x_errorcode OUT NOCOPY NUMBER
11533 ,x_msg_count OUT NOCOPY NUMBER
11534 ,x_msg_data OUT NOCOPY VARCHAR2
11535 ) IS
11536
11537 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Display';
11538
11539 --we don't use l_api_version yet, but eventually we might:
11540 --if we change required parameters, version goes FROM n.x to (n+1).x
11541 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11542 l_api_version CONSTANT NUMBER := 1.0;
11543
11544 l_Sysdate DATE := Sysdate;
11545 l_disp_check_count NUMBER;
11546 l_old_prompt_func_id NUMBER;
11547 l_old_vis_func_id NUMBER;
11548 l_mapping_count NUMBER;
11549 l_prompt_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'P';
11550 l_vis_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'V';
11551
11552 BEGIN
11553
11554 -- Standard start of API savepoint
11555 IF FND_API.To_Boolean(p_commit) THEN
11556 SAVEPOINT Update_Action_Display_PUB;
11557 END IF;
11558
11559 -- Check for call compatibility
11560 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11561 l_api_name, G_PKG_NAME)
11562 THEN
11563 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11564 END IF;
11565 -- Initialize message list even though we don't currently use it
11566 IF FND_API.To_Boolean(p_init_msg_list) THEN
11567 FND_MSG_PUB.Initialize;
11568 END IF;
11569
11570 SELECT COUNT(*)
11571 INTO l_disp_check_count
11572 FROM EGO_ACTION_DISPLAYS_B
11573 WHERE ACTION_ID = p_action_id;
11574
11575 IF (l_disp_check_count = 0) THEN
11576 EGO_EXT_FWK_PUB.Create_Action_Display
11577 (
11578 p_api_version => '1.0'
11579 ,p_action_id => p_action_id
11580 ,p_trigger_code => p_trigger_code
11581 ,p_init_msg_list => p_init_msg_list
11582 ,p_commit => p_commit
11583 ,x_return_status => x_return_status
11584 ,x_errorcode => x_errorcode
11585 ,x_msg_count => x_msg_count
11586 ,x_msg_data => x_msg_data
11587 );
11588
11589 ELSE
11590
11591 -- If the Action execution is changed from a user Action to trigger
11592 -- then we need to delete Mappings for prompt, visibility function IDs.
11593
11594 SELECT PROMPT_FUNCTION_ID
11595 INTO l_old_prompt_func_id
11596 FROM EGO_ACTION_DISPLAYS_B
11597 WHERE ACTION_ID = p_action_id;
11598
11599 IF l_old_prompt_func_id IS NOT NULL THEN
11600 SELECT COUNT(*)
11601 INTO l_mapping_count
11602 FROM EGO_MAPPINGS_B
11603 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11604 AND FUNCTION_ID = l_old_prompt_func_id
11605 AND MAPPED_OBJ_TYPE = l_prompt_obj_type;
11606
11607 IF (l_mapping_count > 0) THEN
11608 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_prompt_func_id,
11609 l_prompt_obj_type, p_action_id, null,
11610 null, x_return_status, x_errorcode,
11611 x_msg_count, x_msg_data);
11612 END IF;
11613 END IF;
11614
11615 SELECT VISIBILITY_FUNC_ID
11616 INTO l_old_vis_func_id
11617 FROM EGO_ACTION_DISPLAYS_B
11618 WHERE ACTION_ID = p_action_id;
11619
11620 IF l_old_vis_func_id IS NOT NULL THEN
11621 SELECT COUNT(*)
11622 INTO l_mapping_count
11623 FROM EGO_MAPPINGS_B
11624 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11625 AND FUNCTION_ID = l_old_vis_func_id
11626 AND MAPPED_OBJ_TYPE = l_vis_obj_type;
11627
11628 IF (l_mapping_count > 0) THEN
11629 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_old_vis_func_id,
11633 END IF;
11630 l_vis_obj_type, p_action_id, null,
11631 null, x_return_status, x_errorcode,
11632 x_msg_count, x_msg_data);
11634 END IF;
11635
11636 UPDATE EGO_ACTION_DISPLAYS_B
11637 SET
11638 EXECUTION_METHOD = 'T'
11639 ,EXECUTION_TRIGGER = p_trigger_code
11640 ,DISPLAY_STYLE = NULL
11641 ,PROMPT_APPLICATION_ID = NULL
11642 ,PROMPT_MESSAGE_NAME = NULL
11643 ,VISIBILITY_FLAG = NULL
11644 ,PROMPT_FUNCTION_ID = NULL
11645 ,VISIBILITY_FUNC_ID = NULL
11646 ,LAST_UPDATE_DATE = l_Sysdate
11647 ,LAST_UPDATED_BY = g_current_user_id
11648 ,LAST_UPDATE_LOGIN = g_current_login_id
11649 WHERE
11650 ACTION_ID = p_action_id;
11651
11652 END IF;
11653
11654 -----------------------------------
11655
11656 -- Standard check of p_commit
11657 IF FND_API.To_Boolean(p_commit) THEN
11658 COMMIT WORK;
11659 END IF;
11660
11661 x_return_status := FND_API.G_RET_STS_SUCCESS;
11662
11663 EXCEPTION
11664 WHEN OTHERS THEN
11665 IF FND_API.To_Boolean(p_commit) THEN
11666 ROLLBACK TO Update_Action_Display_PUB;
11667 END IF;
11668 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11669
11670 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11671 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11672 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11673 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11674 FND_MSG_PUB.Add;
11675 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11676 ,p_count => x_msg_count
11677 ,p_data => x_msg_data);
11678
11679
11680 END Update_Action_Display;
11681
11682 ----------------------------------------------------------------------
11683
11684 PROCEDURE Delete_Action_Display (
11685 p_api_version IN NUMBER
11686 ,p_action_id IN NUMBER
11687 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11688 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11689 ,x_return_status OUT NOCOPY VARCHAR2
11690 ,x_errorcode OUT NOCOPY NUMBER
11691 ,x_msg_count OUT NOCOPY NUMBER
11692 ,x_msg_data OUT NOCOPY VARCHAR2
11693 ) IS
11694
11695 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action';
11696
11697 --we don't use l_api_version yet, but eventually we might:
11698 --if we change required parameters, version goes FROM n.x to (n+1).x
11699 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11700 l_api_version CONSTANT NUMBER := 1.0;
11701
11702 l_mapping_count NUMBER;
11703 l_prompt_func_id NUMBER;
11704 l_vis_func_id NUMBER;
11705 l_prompt_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'P';
11706 l_vis_obj_type EGO_MAPPINGS_B.MAPPED_OBJ_TYPE%TYPE := 'V';
11707
11708 BEGIN
11709
11710 -- Standard start of API savepoint
11711 IF FND_API.To_Boolean(p_commit) THEN
11712 SAVEPOINT Delete_Action_Display_PUB;
11713 END IF;
11714
11715 -- Check for call compatibility
11716 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11717 l_api_name, G_PKG_NAME)
11718 THEN
11719 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11720 END IF;
11721 -- Initialize message list even though we don't currently use it
11722 IF FND_API.To_Boolean(p_init_msg_list) THEN
11723 FND_MSG_PUB.Initialize;
11724 END IF;
11725
11726 -- We get the prompt and vis function IDs before we delete the row
11727 -- so we can also delete their function mappings, if necessary
11728
11729 SELECT PROMPT_FUNCTION_ID
11730 INTO l_prompt_func_id
11731 FROM EGO_ACTION_DISPLAYS_B
11732 WHERE ACTION_ID = p_action_id;
11733
11734 SELECT VISIBILITY_FUNC_ID
11735 INTO l_vis_func_id
11736 FROM EGO_ACTION_DISPLAYS_B
11737 WHERE ACTION_ID = p_action_id;
11738
11739 -- Then we delete the row
11740
11741 DELETE FROM EGO_ACTION_DISPLAYS_B
11742 WHERE ACTION_ID = p_action_id;
11743
11744 -- Then we delete the mappings for the prompt and visibility
11745 -- functions for this action, if there are any
11746
11747 SELECT COUNT(*)
11748 INTO l_mapping_count
11749 FROM EGO_MAPPINGS_B
11750 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11751 AND FUNCTION_ID = l_prompt_func_id
11752 AND MAPPED_OBJ_TYPE = l_prompt_obj_type;
11753
11754 IF (l_mapping_count > 0) THEN
11755 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_prompt_func_id,
11756 l_prompt_obj_type, p_action_id, null,
11757 null, x_return_status, x_errorcode,
11758 x_msg_count, x_msg_data);
11759 END IF;
11760
11761 SELECT COUNT(*)
11762 INTO l_mapping_count
11763 FROM EGO_MAPPINGS_B
11767
11764 WHERE MAPPED_OBJ_PK1_VAL = TO_CHAR(p_action_id)
11765 AND FUNCTION_ID = l_vis_func_id
11766 AND MAPPED_OBJ_TYPE = l_vis_obj_type;
11768 IF (l_mapping_count > 0) THEN
11769 EGO_EXT_FWK_PUB.Delete_Func_Mapping(p_api_version, l_vis_func_id,
11770 l_vis_obj_type, p_action_id, null,
11771 null, x_return_status, x_errorcode,
11772 x_msg_count, x_msg_data);
11773 END IF;
11774
11775 -- Standard check of p_commit
11776 IF FND_API.To_Boolean(p_commit) THEN
11777 COMMIT WORK;
11778 END IF;
11779
11780 x_return_status := FND_API.G_RET_STS_SUCCESS;
11781
11782 EXCEPTION
11783 WHEN OTHERS THEN
11784 IF FND_API.To_Boolean(p_commit) THEN
11785 ROLLBACK TO Delete_Action_Display_PUB;
11786 END IF;
11787 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11788
11789 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11790 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11791 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11792 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11793 FND_MSG_PUB.Add;
11794 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11795 ,p_count => x_msg_count
11796 ,p_data => x_msg_data);
11797
11798
11799 END Delete_Action_Display;
11800
11801 ----------------------------------------------------------------------
11802
11803 -----------------------------
11804 -- Function Parameter APIs --
11805 -----------------------------
11806
11807 ----------------------------------------------------------------------
11808
11809 PROCEDURE Create_Function_Param (
11810 p_api_version IN NUMBER
11811 ,p_function_id IN NUMBER
11812 ,p_sequence IN NUMBER
11813 ,p_internal_name IN VARCHAR2
11814 ,p_data_type IN VARCHAR2
11815 ,p_param_type IN VARCHAR2
11816 ,p_display_name IN VARCHAR2
11817 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11818 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11819 ,x_function_param_id OUT NOCOPY NUMBER
11820 ,x_return_status OUT NOCOPY VARCHAR2
11821 ,x_errorcode OUT NOCOPY NUMBER
11822 ,x_msg_count OUT NOCOPY NUMBER
11823 ,x_msg_data OUT NOCOPY VARCHAR2
11824 ) IS
11825
11826 l_api_name CONSTANT VARCHAR2(30) := 'Create_Function_Param';
11827
11828 --we don't use l_api_version yet, but eventually we might:
11829 --if we change required parameters, version goes FROM n.x to (n+1).x
11830 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11831 l_api_version CONSTANT NUMBER := 1.0;
11832
11833 l_Sysdate DATE := Sysdate;
11834
11838 IF FND_API.To_Boolean(p_commit) THEN
11835 BEGIN
11836
11837 -- Standard start of API savepoint
11839 SAVEPOINT Create_Function_Param_PUB;
11840 END IF;
11841
11842 -- Check for call compatibility
11843 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11844 l_api_name, G_PKG_NAME)
11845 THEN
11846 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11847 END IF;
11848 -- Initialize message list even though we don't currently use it
11849 IF FND_API.To_Boolean(p_init_msg_list) THEN
11850 FND_MSG_PUB.Initialize;
11851 END IF;
11852
11853 SELECT EGO_FUNC_PARAMS_S.NEXTVAL INTO x_function_param_id FROM DUAL;
11854
11855 INSERT INTO EGO_FUNC_PARAMS_B
11856 (
11857 FUNC_PARAM_ID
11858 ,FUNCTION_ID
11859 ,SEQUENCE
11860 ,INTERNAL_NAME
11861 ,DATA_TYPE
11862 ,PARAM_TYPE
11863 ,LAST_UPDATE_DATE
11864 ,LAST_UPDATED_BY
11865 ,CREATION_DATE
11866 ,CREATED_BY
11867 ,LAST_UPDATE_LOGIN
11868 )
11869 VALUES
11870 (
11871 x_function_param_id
11872 ,p_function_id
11873 ,p_sequence
11874 ,p_internal_name
11875 ,p_data_type
11876 ,p_param_type
11877 ,l_Sysdate
11878 ,g_current_user_id
11879 ,l_Sysdate
11880 ,g_current_user_id
11881 ,g_current_login_id
11882 );
11883
11884 INSERT INTO EGO_FUNC_PARAMS_TL
11885 (
11886 FUNC_PARAM_ID
11887 ,DISPLAY_NAME
11888 ,LANGUAGE
11889 ,SOURCE_LANG
11890 ,LAST_UPDATE_DATE
11891 ,LAST_UPDATED_BY
11892 ,CREATION_DATE
11893 ,CREATED_BY
11894 ,LAST_UPDATE_LOGIN
11895 )
11896 SELECT
11897 x_function_param_id
11898 ,p_display_name
11899 ,L.LANGUAGE_CODE
11900 ,USERENV('LANG')
11901 ,l_Sysdate
11902 ,g_current_user_id
11903 ,l_Sysdate
11904 ,g_current_user_id
11905 ,g_current_login_id
11906 FROM FND_LANGUAGES L
11907 WHERE L.INSTALLED_FLAG in ('I', 'B');
11908
11909 -- Standard check of p_commit
11910 IF FND_API.To_Boolean(p_commit) THEN
11911 COMMIT WORK;
11912 END IF;
11913
11914 x_return_status := FND_API.G_RET_STS_SUCCESS;
11915
11916 EXCEPTION
11917 WHEN OTHERS THEN
11918 IF FND_API.To_Boolean(p_commit) THEN
11919 ROLLBACK TO Create_Function_Param_PUB;
11920 END IF;
11921 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11922
11923 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
11924 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
11925 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
11926 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
11927 FND_MSG_PUB.Add;
11928 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
11929 ,p_count => x_msg_count
11930 ,p_data => x_msg_data);
11931
11932
11933 END Create_Function_Param;
11934
11935 ----------------------------------------------------------------------
11936
11937 PROCEDURE Update_Function_Param (
11938 p_api_version IN NUMBER
11939 ,p_function_param_id IN NUMBER
11940 ,p_sequence IN NUMBER
11941 ,p_internal_name IN VARCHAR2
11942 ,p_display_name IN VARCHAR2
11943 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
11944 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
11945 ,x_return_status OUT NOCOPY VARCHAR2
11946 ,x_errorcode OUT NOCOPY NUMBER
11947 ,x_msg_count OUT NOCOPY NUMBER
11948 ,x_msg_data OUT NOCOPY VARCHAR2
11949 ) IS
11950
11951 l_api_name CONSTANT VARCHAR2(30) := 'Update_Function_Param';
11952
11953 --we don't use l_api_version yet, but eventually we might:
11954 --if we change required parameters, version goes FROM n.x to (n+1).x
11955 --if we change optional parameters, version goes FROM x.n to x.(n+1)
11956 l_api_version CONSTANT NUMBER := 1.0;
11957
11958 l_Sysdate DATE := Sysdate;
11959
11960 BEGIN
11961
11965 END IF;
11962 -- Standard start of API savepoint
11963 IF FND_API.To_Boolean(p_commit) THEN
11964 SAVEPOINT Update_Function_Param_PUB;
11966
11967 -- Check for call compatibility
11968 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
11969 l_api_name, G_PKG_NAME)
11970 THEN
11971 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11972 END IF;
11973 -- Initialize message list even though we don't currently use it
11974 IF FND_API.To_Boolean(p_init_msg_list) THEN
11975 FND_MSG_PUB.Initialize;
11976 END IF;
11977
11978 UPDATE EGO_FUNC_PARAMS_B
11979 SET
11980 SEQUENCE = p_sequence
11981 ,INTERNAL_NAME = p_internal_name
11982 ,LAST_UPDATE_DATE = l_Sysdate
11983 ,LAST_UPDATED_BY = g_current_user_id
11984 ,LAST_UPDATE_LOGIN = g_current_login_id
11985 WHERE
11986 FUNC_PARAM_ID = p_function_param_id;
11987
11988 UPDATE EGO_FUNC_PARAMS_TL
11989 SET
11990 DISPLAY_NAME = p_display_name
11991 ,LAST_UPDATE_DATE = l_Sysdate
11992 ,LAST_UPDATED_BY = g_current_user_id
11993 ,LAST_UPDATE_LOGIN = g_current_login_id
11994 ,SOURCE_LANG = USERENV('LANG')
11995 WHERE
11996 FUNC_PARAM_ID = p_function_param_id AND
11997 --userenv('LANG') = LANGUAGE;
11998 USERENV('LANG') IN ( LANGUAGE ,SOURCE_LANG );
11999
12000 -- Standard check of p_commit
12001 IF FND_API.To_Boolean(p_commit) THEN
12002 COMMIT WORK;
12003 END IF;
12004
12005 x_return_status := FND_API.G_RET_STS_SUCCESS;
12006
12007 EXCEPTION
12008 WHEN OTHERS THEN
12009 IF FND_API.To_Boolean(p_commit) THEN
12010 ROLLBACK TO Update_Function_Param_PUB;
12011 END IF;
12012 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12013
12014 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12015 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12016 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12017 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12018 FND_MSG_PUB.Add;
12019 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12020 ,p_count => x_msg_count
12021 ,p_data => x_msg_data);
12022
12023
12024 END Update_Function_Param;
12025
12026 ----------------------------------------------------------------------
12027
12028 PROCEDURE Delete_Function_Param (
12029 p_api_version IN NUMBER
12030 ,p_function_param_id IN NUMBER
12031 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12032 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12033 ,x_return_status OUT NOCOPY VARCHAR2
12034 ,x_errorcode OUT NOCOPY NUMBER
12035 ,x_msg_count OUT NOCOPY NUMBER
12036 ,x_msg_data OUT NOCOPY VARCHAR2
12037 ) IS
12038
12039 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Function_Param';
12040
12041 --we don't use l_api_version yet, but eventually we might:
12042 --if we change required parameters, version goes FROM n.x to (n+1).x
12043 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12044 l_api_version CONSTANT NUMBER := 1.0;
12045
12046 l_Sysdate DATE := Sysdate;
12047
12048 BEGIN
12049
12050 -- Standard start of API savepoint
12051 IF FND_API.To_Boolean(p_commit) THEN
12052 SAVEPOINT Delete_Function_Param_PUB;
12053 END IF;
12054
12055 -- Check for call compatibility
12056 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12057 l_api_name, G_PKG_NAME)
12058 THEN
12059 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12060 END IF;
12061 -- Initialize message list even though we don't currently use it
12062 IF FND_API.To_Boolean(p_init_msg_list) THEN
12063 FND_MSG_PUB.Initialize;
12064 END IF;
12065
12066 DELETE FROM EGO_FUNC_PARAMS_B
12067 WHERE
12068 FUNC_PARAM_ID = p_function_param_id;
12069
12070 DELETE FROM EGO_FUNC_PARAMS_TL
12071 WHERE
12072 FUNC_PARAM_ID = p_function_param_id;
12073
12074 DELETE FROM EGO_MAPPINGS_B
12075 WHERE
12076 FUNC_PARAM_ID = p_function_param_id;
12077
12078 -- Standard check of p_commit
12079 IF FND_API.To_Boolean(p_commit) THEN
12080 COMMIT WORK;
12081 END IF;
12082
12083 x_return_status := FND_API.G_RET_STS_SUCCESS;
12084
12085 EXCEPTION
12086 WHEN OTHERS THEN
12087 IF FND_API.To_Boolean(p_commit) THEN
12088 ROLLBACK TO Delete_Function_Param_PUB;
12089 END IF;
12090 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12091
12092 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12093 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12094 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12095 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12096 FND_MSG_PUB.Add;
12097 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12098 ,p_count => x_msg_count
12099 ,p_data => x_msg_data);
12100
12101
12105
12102 END Delete_Function_Param;
12103
12104 ----------------------------------------------------------------------
12106 -------------------------
12107 -- Action Mapping APIs --
12108 -------------------------
12109
12110 ----------------------------------------------------------------------
12111
12112 PROCEDURE Create_Mapping (
12113 p_api_version IN NUMBER
12114 ,p_function_id IN NUMBER
12115 ,p_mapped_obj_type IN VARCHAR2
12116 ,p_mapped_obj_pk1_value IN VARCHAR2
12117 ,p_func_param_id IN NUMBER
12118 ,p_mapping_group_type IN VARCHAR2
12119 ,p_mapping_group_pk1 IN VARCHAR2
12120 ,p_mapping_group_pk2 IN VARCHAR2
12121 ,p_mapping_group_pk3 IN VARCHAR2
12122 ,p_mapping_value IN VARCHAR2
12123 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
12124 ,p_value_uom_source IN VARCHAR2 := NULL
12125 ,p_fixed_uom IN VARCHAR2 := NULL
12126 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12127 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12128 ,x_return_status OUT NOCOPY VARCHAR2
12129 ,x_errorcode OUT NOCOPY NUMBER
12130 ,x_msg_count OUT NOCOPY NUMBER
12131 ,x_msg_data OUT NOCOPY VARCHAR2
12132 ) IS
12133
12134 l_api_name CONSTANT VARCHAR2(30) := 'Create_Mapping';
12135
12136 --we don't use l_api_version yet, but eventually we might:
12137 --if we change required parameters, version goes FROM n.x to (n+1).x
12138 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12139 l_api_version CONSTANT NUMBER := 1.0;
12140
12141 l_Sysdate DATE := Sysdate;
12142
12143 BEGIN
12144
12145 -- Standard start of API savepoint
12146 IF FND_API.To_Boolean(p_commit) THEN
12147 SAVEPOINT Create_Mapping_PUB;
12148 END IF;
12149
12150 -- Check for call compatibility
12151 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12152 l_api_name, G_PKG_NAME)
12153 THEN
12154 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12155 END IF;
12156 -- Initialize message list even though we don't currently use it
12157 IF FND_API.To_Boolean(p_init_msg_list) THEN
12158 FND_MSG_PUB.Initialize;
12159 END IF;
12160
12161 INSERT INTO EGO_MAPPINGS_B
12162 (
12163 FUNCTION_ID
12164 ,MAPPED_OBJ_TYPE
12165 ,MAPPED_OBJ_PK1_VAL
12166 ,FUNC_PARAM_ID
12167 ,MAPPED_TO_GROUP_TYPE
12168 ,MAPPED_TO_GROUP_PK1
12169 ,MAPPED_TO_GROUP_PK2
12170 ,MAPPED_TO_GROUP_PK3
12171 ,MAPPED_ATTRIBUTE
12172 ,MAPPED_UOM_PARAMETER
12173 ,VALUE_UOM_SOURCE
12174 ,FIXED_UOM
12175 ,LAST_UPDATE_DATE
12176 ,LAST_UPDATED_BY
12177 ,CREATION_DATE
12178 ,CREATED_BY
12179 ,LAST_UPDATE_LOGIN
12180 )
12181 VALUES
12182 (
12183 p_function_id
12184 ,p_mapped_obj_type
12185 ,p_mapped_obj_pk1_value
12186 ,p_func_param_id
12187 ,p_mapping_group_type
12188 ,p_mapping_group_pk1
12189 ,p_mapping_group_pk2
12190 ,p_mapping_group_pk3
12191 ,p_mapping_value
12192 ,p_mapped_uom_parameter
12193 ,p_value_uom_source
12194 ,p_fixed_uom
12195 ,l_Sysdate
12196 ,g_current_user_id
12197 ,l_Sysdate
12198 ,g_current_user_id
12199 ,g_current_login_id
12200 );
12201
12202 -- Standard check of p_commit
12203 IF FND_API.To_Boolean(p_commit) THEN
12204 COMMIT WORK;
12205 END IF;
12206
12207 x_return_status := FND_API.G_RET_STS_SUCCESS;
12208
12209 EXCEPTION
12210 WHEN OTHERS THEN
12211 IF FND_API.To_Boolean(p_commit) THEN
12212 ROLLBACK TO Create_Mapping_PUB;
12213 END IF;
12214 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12215
12216 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12217 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12218 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12219 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12220 FND_MSG_PUB.Add;
12221 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12222 ,p_count => x_msg_count
12226 END Create_Mapping;
12223 ,p_data => x_msg_data);
12224
12225
12227
12228 ----------------------------------------------------------------------
12229
12230
12231 PROCEDURE Create_Mapping (
12232 p_api_version IN NUMBER
12233 ,p_function_id IN NUMBER
12234 ,p_mapped_obj_type IN VARCHAR2
12235 ,p_mapped_obj_pk1_value IN VARCHAR2
12236 ,p_func_param_id IN NUMBER
12237 ,p_attr_group_id IN NUMBER
12238 ,p_mapping_value IN VARCHAR2
12239 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
12240 ,p_value_uom_source IN VARCHAR2 := NULL
12241 ,p_fixed_uom IN VARCHAR2 := NULL
12242 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12243 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12244 ,x_return_status OUT NOCOPY VARCHAR2
12245 ,x_errorcode OUT NOCOPY NUMBER
12246 ,x_msg_count OUT NOCOPY NUMBER
12247 ,x_msg_data OUT NOCOPY VARCHAR2
12248 ) IS
12249
12250 l_api_name CONSTANT VARCHAR2(30) := 'Create_Mapping';
12251
12252 l_application_id NUMBER;
12253 l_attr_grp_type VARCHAR2(40);
12254 l_attr_grp_name VARCHAR2(30);
12255 l_mapping_group_type VARCHAR2(30);
12256
12257 BEGIN
12258
12259 -- Standard start of API savepoint
12260 IF FND_API.TO_BOOLEAN(p_commit) THEN
12261 SAVEPOINT Create_Mapping_PUB;
12262 END IF;
12263
12264 Get_Attr_Group_Comb_PKs(p_attr_group_id, l_application_id,l_attr_grp_type ,l_attr_grp_name );
12265 IF l_application_id IS NULL THEN
12266 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12267 END IF;
12268 l_mapping_group_type := 'A';
12269 EGO_EXT_FWK_PUB.Create_Mapping(
12270 p_api_version => p_api_version
12271 ,p_function_id => p_function_id
12272 ,p_mapped_obj_type => p_mapped_obj_type
12273 ,p_mapped_obj_pk1_value => p_mapped_obj_pk1_value
12274 ,p_func_param_id => p_func_param_id
12275 ,p_mapping_group_type => l_mapping_group_type
12276 ,p_mapping_group_pk1 => l_application_id
12277 ,p_mapping_group_pk2 => l_attr_grp_type
12278 ,p_mapping_group_pk3 => l_attr_grp_name
12279 ,p_mapping_value => p_mapping_value
12280 ,p_mapped_uom_parameter => p_mapped_uom_parameter
12281 ,p_value_uom_source => p_value_uom_source
12282 ,p_fixed_uom => p_fixed_uom
12283 ,p_init_msg_list => p_init_msg_list
12284 ,p_commit => p_commit
12285 ,x_return_status => x_return_status
12286 ,x_errorcode => x_errorcode
12287 ,x_msg_count => x_msg_count
12288 ,x_msg_data => x_msg_data
12289 );
12290
12291 -- Standard check of p_commit
12292 IF FND_API.To_Boolean(p_commit) THEN
12293 COMMIT WORK;
12294 END IF;
12295
12296 EXCEPTION
12297 WHEN OTHERS THEN
12298 IF FND_API.TO_BOOLEAN(p_commit) THEN
12299 ROLLBACK TO Create_Mapping_PUB;
12300 END IF;
12301 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12302
12303 IF l_application_id IS NULL THEN
12304 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupApplicationIDFoundForPKs';
12305 ELSE
12306 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12307 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12308 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12309 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12310 FND_MSG_PUB.Add;
12311 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12312 ,p_count => x_msg_count
12313 ,p_data => x_msg_data);
12314
12315 END IF;
12316
12317 END Create_Mapping;
12318
12319 ----------------------------------------------------------------------
12320
12321 PROCEDURE Update_Mapping (
12322 p_api_version IN NUMBER
12323 ,p_function_id IN NUMBER
12324 ,p_mapped_obj_type IN VARCHAR2
12325 ,p_mapped_obj_pk1_value IN VARCHAR2
12326 ,p_func_param_id IN NUMBER
12327 ,p_mapping_group_type IN VARCHAR2
12328 ,p_mapping_group_pk1 IN VARCHAR2
12329 ,p_mapping_group_pk2 IN VARCHAR2
12330 ,p_mapping_group_pk3 IN VARCHAR2
12331 ,p_mapping_value IN VARCHAR2
12332 ,p_new_func_param_id IN NUMBER := NULL
12333 ,p_new_mapping_group_pk1 IN VARCHAR2 := NULL
12334 ,p_new_mapping_group_pk2 IN VARCHAR2 := NULL
12335 ,p_new_mapping_group_pk3 IN VARCHAR2 := NULL
12336 ,p_new_mapping_value IN VARCHAR2 := NULL
12340 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12337 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
12338 ,p_value_uom_source IN VARCHAR2 := NULL
12339 ,p_fixed_uom IN VARCHAR2 := NULL
12341 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12342 ,x_return_status OUT NOCOPY VARCHAR2
12343 ,x_errorcode OUT NOCOPY NUMBER
12344 ,x_msg_count OUT NOCOPY NUMBER
12345 ,x_msg_data OUT NOCOPY VARCHAR2
12346 ) IS
12347
12348 l_api_name CONSTANT VARCHAR2(30) := 'Update_Mapping';
12349
12350 --we don't use l_api_version yet, but eventually we might:
12351 --if we change required parameters, version goes FROM n.x to (n+1).x
12352 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12353 l_api_version CONSTANT NUMBER := 1.0;
12354
12355 l_Sysdate DATE := Sysdate;
12356
12357 BEGIN
12358
12359 -- Standard start of API savepoint
12360 IF FND_API.To_Boolean(p_commit) THEN
12361 SAVEPOINT Update_Mapping_PUB;
12362 END IF;
12363
12364 -- Check for call compatibility
12365 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12366 l_api_name, G_PKG_NAME)
12367 THEN
12368 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12369 END IF;
12370 -- Initialize message list even though we don't currently use it
12371 IF FND_API.To_Boolean(p_init_msg_list) THEN
12372 FND_MSG_PUB.Initialize;
12373 END IF;
12374
12375 IF (p_new_mapping_group_pk1 IS NOT NULL AND
12376 p_new_mapping_group_pk2 IS NOT NULL AND
12377 p_new_mapping_group_pk3 IS NOT NULL AND
12378 p_new_mapping_value IS NOT NULL) THEN
12379
12380 UPDATE EGO_MAPPINGS_B
12381 SET
12382 MAPPED_TO_GROUP_TYPE = p_mapping_group_type
12383 ,MAPPED_TO_GROUP_PK1 = p_new_mapping_group_pk1
12384 ,MAPPED_TO_GROUP_PK2 = p_new_mapping_group_pk2
12385 ,MAPPED_TO_GROUP_PK3 = p_new_mapping_group_pk3
12386 ,MAPPED_ATTRIBUTE = p_new_mapping_value
12387 ,MAPPED_UOM_PARAMETER = p_mapped_uom_parameter
12388 ,VALUE_UOM_SOURCE = p_value_uom_source
12389 ,FIXED_UOM = p_fixed_uom
12390 ,FUNC_PARAM_ID = NVL(p_new_func_param_id, p_func_param_id)
12391 ,LAST_UPDATE_DATE = l_Sysdate
12392 ,LAST_UPDATED_BY = g_current_user_id
12393 ,LAST_UPDATE_LOGIN = g_current_login_id
12394 WHERE
12395 FUNCTION_ID = p_function_id AND
12396 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
12397 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value AND
12398 FUNC_PARAM_ID = p_func_param_id AND
12399 MAPPED_TO_GROUP_PK1 = p_mapping_group_pk1 AND
12400 MAPPED_TO_GROUP_PK2 = p_mapping_group_pk2 AND
12401 MAPPED_TO_GROUP_PK3 = p_mapping_group_pk3 AND
12402 MAPPED_ATTRIBUTE = p_mapping_value;
12403
12404 ELSE
12405
12406 UPDATE EGO_MAPPINGS_B
12407 SET
12408 MAPPED_TO_GROUP_TYPE = p_mapping_group_type
12409 ,MAPPED_TO_GROUP_PK1 = p_mapping_group_pk1
12410 ,MAPPED_TO_GROUP_PK2 = p_mapping_group_pk2
12411 ,MAPPED_TO_GROUP_PK3 = p_mapping_group_pk3
12412 ,MAPPED_ATTRIBUTE = p_mapping_value
12413 ,MAPPED_UOM_PARAMETER = p_mapped_uom_parameter
12414 ,VALUE_UOM_SOURCE = p_value_uom_source
12415 ,FIXED_UOM = p_fixed_uom
12416 ,FUNC_PARAM_ID = NVL(p_new_func_param_id, p_func_param_id)
12417 ,LAST_UPDATE_DATE = l_Sysdate
12418 ,LAST_UPDATED_BY = g_current_user_id
12419 ,LAST_UPDATE_LOGIN = g_current_login_id
12420 WHERE
12421 FUNCTION_ID = p_function_id AND
12422 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
12423 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value AND
12424 FUNC_PARAM_ID = p_func_param_id;
12425
12426 END IF;
12427
12428 -- Standard check of p_commit
12429 IF FND_API.To_Boolean(p_commit) THEN
12430 COMMIT WORK;
12431 END IF;
12432
12433 x_return_status := FND_API.G_RET_STS_SUCCESS;
12434
12435 EXCEPTION
12436 WHEN OTHERS THEN
12437 IF FND_API.To_Boolean(p_commit) THEN
12438 ROLLBACK TO Update_Mapping_PUB;
12439 END IF;
12440 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12441
12442 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12443 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12444 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12445 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12446 FND_MSG_PUB.Add;
12447 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12448 ,p_count => x_msg_count
12449 ,p_data => x_msg_data);
12450
12451
12452 END Update_Mapping;
12453
12454 ----------------------------------------------------------------------
12455
12456
12457
12458 PROCEDURE Update_Mapping (
12459 p_api_version IN NUMBER
12460 ,p_function_id IN NUMBER
12464 ,p_attr_group_id IN NUMBER
12461 ,p_mapped_obj_type IN VARCHAR2
12462 ,p_mapped_obj_pk1_value IN VARCHAR2
12463 ,p_func_param_id IN NUMBER
12465 ,p_mapping_value IN VARCHAR2
12466 ,p_mapping_group_pk1 IN VARCHAR2 := NULL
12467 ,p_mapping_group_pk2 IN VARCHAR2 := NULL
12468 ,p_mapping_group_pk3 IN VARCHAR2 := NULL
12469 ,p_new_func_param_id IN NUMBER := NULL
12470 ,p_new_mapping_value IN VARCHAR2 := NULL
12471 ,p_mapped_uom_parameter IN VARCHAR2 := NULL
12472 ,p_value_uom_source IN VARCHAR2 := NULL
12473 ,p_fixed_uom IN VARCHAR2 := NULL
12474 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12475 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12476 ,x_return_status OUT NOCOPY VARCHAR2
12477 ,x_errorcode OUT NOCOPY NUMBER
12478 ,x_msg_count OUT NOCOPY NUMBER
12479 ,x_msg_data OUT NOCOPY VARCHAR2
12480 ) IS
12481
12482 l_api_name CONSTANT VARCHAR2(30) := 'Update_Mapping';
12483
12484 l_application_id NUMBER;
12485 l_attr_grp_type VARCHAR2(40);
12486 l_attr_grp_name VARCHAR2(30);
12487 l_mapping_group_type VARCHAR2(30);
12488
12489 BEGIN
12490
12491 -- Standard start of API savepoint
12492 IF FND_API.TO_BOOLEAN(p_commit) THEN
12493 SAVEPOINT Update_Mapping_PUB;
12494 END IF;
12495
12496 Get_Attr_Group_Comb_PKs(p_attr_group_id, l_application_id,l_attr_grp_type ,l_attr_grp_name);
12497 IF l_application_id IS NULL THEN
12498 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12499 END IF;
12500 l_mapping_group_type := 'A';
12501
12502 EGO_EXT_FWK_PUB.Update_Mapping (
12503
12504 p_api_version => p_api_version
12505 ,p_function_id => p_function_id
12506 ,p_mapped_obj_type => p_mapped_obj_type
12507 ,p_mapped_obj_pk1_value => p_mapped_obj_pk1_value
12508 ,p_func_param_id => p_func_param_id
12509 ,p_mapping_group_type => l_mapping_group_type
12510 ,p_mapping_group_pk1 => p_mapping_group_pk1
12511 ,p_mapping_group_pk2 => p_mapping_group_pk2
12512 ,p_mapping_group_pk3 => p_mapping_group_pk3
12513 ,p_mapping_value => p_mapping_value
12514 ,p_new_mapping_group_pk1 => l_application_id
12515 ,p_new_mapping_group_pk2 => l_attr_grp_type
12516 ,p_new_mapping_group_pk3 => l_attr_grp_name
12517 ,p_new_mapping_value => p_new_mapping_value
12518 ,p_new_func_param_id => p_new_func_param_id
12519 ,p_mapped_uom_parameter => p_mapped_uom_parameter
12520 ,p_value_uom_source => p_value_uom_source
12521 ,p_fixed_uom => p_fixed_uom
12522 ,p_init_msg_list => p_init_msg_list
12523 ,p_commit => p_commit
12524 ,x_return_status => x_return_status
12525 ,x_errorcode => x_errorcode
12526 ,x_msg_count => x_msg_count
12527 ,x_msg_data => x_msg_data
12528 );
12529
12530 -- Standard check of p_commit
12531 IF FND_API.To_Boolean(p_commit) THEN
12532 COMMIT WORK;
12533 END IF;
12534 EXCEPTION
12535 WHEN OTHERS THEN
12536 IF FND_API.TO_BOOLEAN(p_commit) THEN
12537 ROLLBACK TO Update_Mapping_PUB;
12538 END IF;
12539 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12540
12541 IF l_application_id IS NULL THEN
12542 x_msg_data := 'Executing - '||G_PKG_NAME||'.'||l_api_name||' NoAttrGroupApplicationIDFoundForPKs';
12543 ELSE
12544 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12545 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12546 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12547 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12548 FND_MSG_PUB.Add;
12549 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12550 ,p_count => x_msg_count
12551 ,p_data => x_msg_data);
12552
12553 END IF;
12554
12555 END Update_Mapping;
12556
12557 ----------------------------------------------------------------------------
12558
12559 -- call this API to delete all mappings for a given Action and Function
12560 PROCEDURE Delete_Func_Mapping (
12561 p_api_version IN NUMBER
12562 ,p_function_id IN NUMBER
12563 ,p_mapped_obj_type IN VARCHAR2
12564 ,p_mapped_obj_pk1_value IN VARCHAR2
12565 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12566 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12567 ,x_return_status OUT NOCOPY VARCHAR2
12571 ) IS
12568 ,x_errorcode OUT NOCOPY NUMBER
12569 ,x_msg_count OUT NOCOPY NUMBER
12570 ,x_msg_data OUT NOCOPY VARCHAR2
12572
12573 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Func_Mapping';
12574
12575 --we don't use l_api_version yet, but eventually we might:
12576 --if we change required parameters, version goes FROM n.x to (n+1).x
12577 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12578 l_api_version CONSTANT NUMBER := 1.0;
12579
12580 BEGIN
12581
12582 -- Standard start of API savepoint
12583 IF FND_API.To_Boolean(p_commit) THEN
12584 SAVEPOINT Update_Mapping_PUB;
12585 END IF;
12586
12587 -- Check for call compatibility
12588 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12589 l_api_name, G_PKG_NAME)
12590 THEN
12591 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12592 END IF;
12593 -- Initialize message list even though we don't currently use it
12594 IF FND_API.To_Boolean(p_init_msg_list) THEN
12595 FND_MSG_PUB.Initialize;
12596 END IF;
12597
12598 DELETE FROM EGO_MAPPINGS_B
12599 WHERE
12600 FUNCTION_ID = p_function_id AND
12601 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
12602 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value;
12603
12604 -- Standard check of p_commit
12605 IF FND_API.To_Boolean(p_commit) THEN
12606 COMMIT WORK;
12607 END IF;
12608
12609 x_return_status := FND_API.G_RET_STS_SUCCESS;
12610
12611 EXCEPTION
12612 WHEN OTHERS THEN
12613 IF FND_API.To_Boolean(p_commit) THEN
12614 ROLLBACK TO Delete_Func_Mapping_PUB;
12615 END IF;
12616 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12617
12618 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12619 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12620 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12621 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12622 FND_MSG_PUB.Add;
12623 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12624 ,p_count => x_msg_count
12625 ,p_data => x_msg_data);
12626
12627
12628 END Delete_Func_Mapping;
12629
12630 ----------------------------------------------------------------------
12631
12632 -- call this API to delete an individual parameter mapping
12633 PROCEDURE Delete_Func_Param_Mapping (
12634 p_api_version IN NUMBER
12635 ,p_function_id IN NUMBER
12636 ,p_mapped_obj_type IN VARCHAR2
12637 ,p_mapped_obj_pk1_value IN VARCHAR2
12638 ,p_func_param_id IN NUMBER
12639 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12640 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12641 ,x_return_status OUT NOCOPY VARCHAR2
12642 ,x_errorcode OUT NOCOPY NUMBER
12643 ,x_msg_count OUT NOCOPY NUMBER
12644 ,x_msg_data OUT NOCOPY VARCHAR2
12645 ) IS
12646
12647 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Func_Param_Mapping';
12648
12649 --we don't use l_api_version yet, but eventually we might:
12650 --if we change required parameters, version goes FROM n.x to (n+1).x
12651 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12652 l_api_version CONSTANT NUMBER := 1.0;
12653
12654 BEGIN
12655
12656 -- Standard start of API savepoint
12657 IF FND_API.To_Boolean(p_commit) THEN
12658 SAVEPOINT Delete_Func_Param_Mapping_PUB;
12659 END IF;
12660
12661 -- Check for call compatibility
12662 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12663 l_api_name, G_PKG_NAME)
12664 THEN
12665 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12666 END IF;
12667 -- Initialize message list even though we don't currently use it
12668 IF FND_API.To_Boolean(p_init_msg_list) THEN
12669 FND_MSG_PUB.Initialize;
12670 END IF;
12671
12672 DELETE FROM EGO_MAPPINGS_B
12673 WHERE
12674 FUNCTION_ID = p_function_id AND
12675 MAPPED_OBJ_TYPE = p_mapped_obj_type AND
12676 MAPPED_OBJ_PK1_VAL = p_mapped_obj_pk1_value AND
12677 FUNC_PARAM_ID = p_func_param_id;
12678
12679 -- Standard check of p_commit
12680 IF FND_API.To_Boolean(p_commit) THEN
12681 COMMIT WORK;
12682 END IF;
12683
12684 x_return_status := FND_API.G_RET_STS_SUCCESS;
12685
12686 EXCEPTION
12687 WHEN OTHERS THEN
12688 IF FND_API.TO_BOOLEAN(p_commit) THEN
12689 ROLLBACK TO Delete_Func_Param_Mapping_PUB;
12690 END IF;
12691 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12692
12693 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12694 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12695 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12696 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12697 FND_MSG_PUB.Add;
12698 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12702
12699 ,p_count => x_msg_count
12700 ,p_data => x_msg_data);
12701
12703 END Delete_Func_Param_Mapping;
12704
12705 ----------------------------------------------------------------------
12706
12707 -----------------------
12708 -- Action Group APIs --
12709 -----------------------
12710
12711 ----------------------------------------------------------------------
12712
12713 PROCEDURE Create_Action_Group (
12714 p_api_version IN NUMBER
12715 ,p_object_id IN NUMBER
12716 ,p_classification_code IN VARCHAR2
12717 ,p_sequence IN NUMBER
12718 ,p_internal_name IN VARCHAR2
12719 ,p_display_name IN VARCHAR2
12720 ,p_description IN VARCHAR2
12721 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12722 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12723 ,x_action_group_id OUT NOCOPY NUMBER
12724 ,x_return_status OUT NOCOPY VARCHAR2
12725 ,x_errorcode OUT NOCOPY NUMBER
12726 ,x_msg_count OUT NOCOPY NUMBER
12727 ,x_msg_data OUT NOCOPY VARCHAR2
12728 ) IS
12729
12730 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Group';
12731
12732 --we don't use l_api_version yet, but eventually we might:
12733 --if we change required parameters, version goes FROM n.x to (n+1).x
12734 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12735 l_api_version CONSTANT NUMBER := 1.0;
12736
12737 l_Sysdate DATE := Sysdate;
12738
12739 BEGIN
12740
12741 -- Standard start of API savepoint
12742 IF FND_API.To_Boolean(p_commit) THEN
12743 SAVEPOINT Create_Action_Group_PUB;
12744 END IF;
12745
12746 -- Check for call compatibility
12747 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12748 l_api_name, G_PKG_NAME)
12749 THEN
12750 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12751 END IF;
12752 -- Initialize message list even though we don't currently use it
12753 IF FND_API.To_Boolean(p_init_msg_list) THEN
12754 FND_MSG_PUB.Initialize;
12755 END IF;
12756
12757 SELECT EGO_ACTION_GROUPS_S.NEXTVAL INTO x_action_group_id FROM DUAL;
12758
12759 INSERT INTO EGO_ACTION_GROUPS_B
12760 (
12761 ACTION_GROUP_ID
12762 ,OBJECT_ID
12763 ,CLASSIFICATION_CODE
12764 ,SEQUENCE
12765 ,INTERNAL_NAME
12766 ,LAST_UPDATE_DATE
12767 ,LAST_UPDATED_BY
12768 ,CREATION_DATE
12769 ,CREATED_BY
12770 ,LAST_UPDATE_LOGIN
12771 )
12772 VALUES
12773 (
12774 x_action_group_id
12775 ,p_object_id
12776 ,p_classification_code
12777 ,p_sequence
12778 ,p_internal_name
12779 ,l_Sysdate
12780 ,g_current_user_id
12781 ,l_Sysdate
12782 ,g_current_user_id
12783 ,g_current_login_id
12784 );
12785
12786 INSERT INTO EGO_ACTION_GROUPS_TL
12787 (
12788 ACTION_GROUP_ID
12789 ,DISPLAY_NAME
12790 ,DESCRIPTION
12791 ,LANGUAGE
12792 ,SOURCE_LANG
12793 ,LAST_UPDATE_DATE
12794 ,LAST_UPDATED_BY
12795 ,CREATION_DATE
12796 ,CREATED_BY
12797 ,LAST_UPDATE_LOGIN
12798 )
12799 SELECT
12800 x_action_group_id
12801 ,p_display_name
12802 ,p_description
12803 ,L.LANGUAGE_CODE
12804 ,USERENV('LANG')
12805 ,l_Sysdate
12806 ,g_current_user_id
12807 ,l_Sysdate
12808 ,g_current_user_id
12809 ,g_current_login_id
12810
12811 FROM FND_LANGUAGES L
12812 WHERE L.INSTALLED_FLAG in ('I', 'B');
12813
12814 -- Standard check of p_commit
12815 IF FND_API.To_Boolean(p_commit) THEN
12816 COMMIT WORK;
12817 END IF;
12818
12819 x_return_status := FND_API.G_RET_STS_SUCCESS;
12820
12821 EXCEPTION
12822 WHEN OTHERS THEN
12823 IF FND_API.To_Boolean(p_commit) THEN
12824 ROLLBACK TO Create_Action_Group_PUB;
12825 END IF;
12826 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12827
12828 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12829 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12830 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12831 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12832 FND_MSG_PUB.Add;
12833 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12837
12834 ,p_count => x_msg_count
12835 ,p_data => x_msg_data);
12836
12838 END Create_Action_Group;
12839
12840 ----------------------------------------------------------------------
12841
12842 PROCEDURE Update_Action_Group (
12843 p_api_version IN NUMBER
12844 ,p_action_group_id IN NUMBER
12845 ,p_sequence IN NUMBER
12846 ,p_internal_name IN VARCHAR2
12847 ,p_display_name IN VARCHAR2
12848 ,p_description IN VARCHAR2
12849 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12850 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12851 ,x_return_status OUT NOCOPY VARCHAR2
12852 ,x_errorcode OUT NOCOPY NUMBER
12853 ,x_msg_count OUT NOCOPY NUMBER
12854 ,x_msg_data OUT NOCOPY VARCHAR2
12855 ) IS
12856
12857 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Group';
12858
12859 --we don't use l_api_version yet, but eventually we might:
12860 --if we change required parameters, version goes FROM n.x to (n+1).x
12861 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12862 l_api_version CONSTANT NUMBER := 1.0;
12863
12864 l_Sysdate DATE := Sysdate;
12865
12866 BEGIN
12867
12868 -- Standard start of API savepoint
12869 IF FND_API.To_Boolean(p_commit) THEN
12870 SAVEPOINT Update_Action_Group_PUB;
12871 END IF;
12872
12873 -- Check for call compatibility
12874 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12875 l_api_name, G_PKG_NAME)
12876 THEN
12877 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12878 END IF;
12879 -- Initialize message list even though we don't currently use it
12880 IF FND_API.To_Boolean(p_init_msg_list) THEN
12881 FND_MSG_PUB.Initialize;
12882 END IF;
12883
12884 UPDATE EGO_ACTION_GROUPS_B
12885 SET
12886 SEQUENCE = p_sequence
12887 , INTERNAL_NAME = p_internal_name
12888 , LAST_UPDATE_DATE = l_Sysdate
12889 , LAST_UPDATED_BY = g_current_user_id
12890 , LAST_UPDATE_LOGIN = g_current_login_id
12891
12892 WHERE
12893 ACTION_GROUP_ID = p_action_group_id;
12894
12895 UPDATE EGO_ACTION_GROUPS_TL
12896 SET
12897 DESCRIPTION = p_description
12898 , DISPLAY_NAME = p_display_name
12899 , LAST_UPDATE_DATE = l_Sysdate
12900 , LAST_UPDATED_BY = g_current_user_id
12901 , LAST_UPDATE_LOGIN = g_current_login_id
12902 , SOURCE_LANG = USERENV('LANG')
12903
12904 WHERE
12905 -- ACTION_GROUP_ID = p_action_group_id AND LANGUAGE = USERENV('LANG');
12906 ACTION_GROUP_ID = p_action_group_id AND USERENV('LANG') IN (LANGUAGE , SOURCE_LANG);
12907
12908 -- Standard check of p_commit
12909 IF FND_API.To_Boolean(p_commit) THEN
12910 COMMIT WORK;
12911 END IF;
12912
12913 x_return_status := FND_API.G_RET_STS_SUCCESS;
12914
12915 EXCEPTION
12916 WHEN OTHERS THEN
12917 IF FND_API.TO_BOOLEAN(p_commit) THEN
12918 ROLLBACK TO Update_Action_Group_PUB;
12919 END IF;
12920 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12921
12922 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
12923 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
12924 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
12925 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
12926 FND_MSG_PUB.Add;
12927 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
12928 ,p_count => x_msg_count
12929 ,p_data => x_msg_data);
12930
12931
12932 END Update_Action_Group;
12933
12934 ----------------------------------------------------------------------
12935
12936 PROCEDURE Delete_Action_Group (
12937 p_api_version IN NUMBER
12938 ,p_action_group_id IN NUMBER
12939 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
12940 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
12941 ,x_return_status OUT NOCOPY VARCHAR2
12942 ,x_errorcode OUT NOCOPY NUMBER
12943 ,x_msg_count OUT NOCOPY NUMBER
12944 ,x_msg_data OUT NOCOPY VARCHAR2
12945 ) IS
12946
12947 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action_Group';
12948
12949 --we don't use l_api_version yet, but eventually we might:
12950 --if we change required parameters, version goes FROM n.x to (n+1).x
12951 --if we change optional parameters, version goes FROM x.n to x.(n+1)
12952 l_api_version CONSTANT NUMBER := 1.0;
12953
12954 BEGIN
12955
12956 -- Standard start of API savepoint
12957 IF FND_API.To_Boolean(p_commit) THEN
12958 SAVEPOINT Delete_Action_Group_PUB;
12959 END IF;
12963 l_api_name, G_PKG_NAME)
12960
12961 -- Check for call compatibility
12962 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
12964 THEN
12965 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12966 END IF;
12967 -- Initialize message list even though we don't currently use it
12968 IF FND_API.To_Boolean(p_init_msg_list) THEN
12969 FND_MSG_PUB.Initialize;
12970 END IF;
12971
12972 -- If there are Actions in this Action Group, we delete their entries
12973 -- in the Action_Group_Entries table (but we don't delete the Actions).
12974 DELETE FROM EGO_ACTN_GRP_ENTRIES_B
12975 WHERE
12976 ACTION_GROUP_ID = p_action_group_id;
12977
12978 DELETE FROM EGO_ACTION_GROUPS_B
12979 WHERE
12980 ACTION_GROUP_ID = p_action_group_id;
12981
12982 DELETE FROM EGO_ACTION_GROUPS_TL
12983 WHERE
12984 ACTION_GROUP_ID = p_action_group_id;
12985
12986 -- Standard check of p_commit
12987 IF FND_API.To_Boolean(p_commit) THEN
12988 COMMIT WORK;
12989 END IF;
12990
12991 x_return_status := FND_API.G_RET_STS_SUCCESS;
12992
12993 EXCEPTION
12994 WHEN OTHERS THEN
12995 IF FND_API.To_Boolean(p_commit) THEN
12996 ROLLBACK TO Delete_Action_Group_PUB;
12997 END IF;
12998 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12999
13000 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13001 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13002 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13003 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13004 FND_MSG_PUB.Add;
13005 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13006 ,p_count => x_msg_count
13007 ,p_data => x_msg_data);
13008
13009
13010 END Delete_Action_Group;
13011
13012 ----------------------------------------------------------------------
13013
13014 -----------------------------
13015 -- Action Group Entry APIs --
13016 -----------------------------
13017
13018 ----------------------------------------------------------------------
13019
13020 PROCEDURE Create_Action_Group_Entry (
13021 p_api_version IN NUMBER
13022 ,p_action_group_id IN NUMBER
13023 ,p_action_id IN NUMBER
13024 ,p_sequence IN NUMBER
13025 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13026 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13027 ,x_return_status OUT NOCOPY VARCHAR2
13028 ,x_errorcode OUT NOCOPY NUMBER
13029 ,x_msg_count OUT NOCOPY NUMBER
13030 ,x_msg_data OUT NOCOPY VARCHAR2
13031 ) IS
13032
13033 l_api_name CONSTANT VARCHAR2(30) := 'Create_Action_Group_Entry';
13034
13035 --we don't use l_api_version yet, but eventually we might:
13036 --if we change required parameters, version goes FROM n.x to (n+1).x
13037 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13038 l_api_version CONSTANT NUMBER := 1.0;
13039
13040 l_Sysdate DATE := Sysdate;
13041 l_exist_action_count NUMBER := 0;
13042
13043 BEGIN
13044
13045 -- Standard start of API savepoint
13046 IF FND_API.To_Boolean(p_commit) THEN
13047 SAVEPOINT Create_Action_Group_Entry_PUB;
13048 END IF;
13049
13050 -- Check for call compatibility
13051 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13052 l_api_name, G_PKG_NAME)
13053 THEN
13054 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13055 END IF;
13056 -- Initialize message list even though we don't currently use it
13057 IF FND_API.To_Boolean(p_init_msg_list) THEN
13058 FND_MSG_PUB.Initialize;
13059 END IF;
13060
13061 SELECT COUNT(ACTION_ID)
13062 INTO l_exist_action_count
13063 FROM EGO_ACTN_GRP_ENTRIES_B
13064 WHERE ACTION_GROUP_ID = p_action_group_id
13065 AND ACTION_ID = p_action_id;
13066
13067 IF (l_exist_action_count = 0) THEN
13068 INSERT INTO EGO_ACTN_GRP_ENTRIES_B
13069 (
13070 ACTION_GROUP_ID
13071 ,ACTION_ID
13072 ,SEQUENCE
13073 ,LAST_UPDATE_DATE
13074 ,LAST_UPDATED_BY
13075 ,CREATION_DATE
13076 ,CREATED_BY
13077 ,LAST_UPDATE_LOGIN
13078 )
13079 VALUES
13080 (
13081 p_action_group_id
13082 ,p_action_id
13083 ,p_sequence
13084 ,l_Sysdate
13085 ,g_current_user_id
13086 ,l_Sysdate
13087 ,g_current_user_id
13088 ,g_current_login_id
13089 );
13090 END IF;
13091
13092 -- Standard check of p_commit
13093 IF FND_API.To_Boolean(p_commit) THEN
13094 COMMIT WORK;
13095 END IF;
13096
13097 x_return_status := FND_API.G_RET_STS_SUCCESS;
13098
13099 EXCEPTION
13100 WHEN OTHERS THEN
13104 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13101 IF FND_API.To_Boolean(p_commit) THEN
13102 ROLLBACK TO Create_Action_Group_Entry_PUB;
13103 END IF;
13105
13106 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13107 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13108 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13109 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13110 FND_MSG_PUB.Add;
13111 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13112 ,p_count => x_msg_count
13113 ,p_data => x_msg_data);
13114
13115
13116 END Create_Action_Group_Entry;
13117
13118 ----------------------------------------------------------------------
13119
13120 PROCEDURE Update_Action_Group_Entry (
13121 p_api_version IN NUMBER
13122 ,p_action_group_id IN NUMBER
13123 ,p_action_id IN NUMBER
13124 ,p_sequence IN NUMBER
13125 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13126 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13127 ,x_return_status OUT NOCOPY VARCHAR2
13128 ,x_errorcode OUT NOCOPY NUMBER
13129 ,x_msg_count OUT NOCOPY NUMBER
13130 ,x_msg_data OUT NOCOPY VARCHAR2
13131 ) IS
13132
13133 l_api_name CONSTANT VARCHAR2(30) := 'Update_Action_Group_Entry';
13134
13135 --we don't use l_api_version yet, but eventually we might:
13136 --if we change required parameters, version goes FROM n.x to (n+1).x
13137 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13138 l_api_version CONSTANT NUMBER := 1.0;
13139
13140 l_Sysdate DATE := Sysdate;
13141 l_exist_action_count NUMBER := 0;
13142
13143 BEGIN
13144
13145 -- Standard start of API savepoint
13146 IF FND_API.To_Boolean(p_commit) THEN
13147 SAVEPOINT Update_Action_Group_Entry_PUB;
13148 END IF;
13149
13150 -- Check for call compatibility
13151 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13152 l_api_name, G_PKG_NAME)
13153 THEN
13154 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13155 END IF;
13156 -- Initialize message list even though we don't currently use it
13157 IF FND_API.To_Boolean(p_init_msg_list) THEN
13158 FND_MSG_PUB.Initialize;
13159 END IF;
13160
13161 UPDATE EGO_ACTN_GRP_ENTRIES_B
13162 SET SEQUENCE = p_sequence
13163 WHERE ACTION_GROUP_ID = p_action_group_id
13164 AND ACTION_ID = p_action_id;
13165
13166 -- Standard check of p_commit
13167 IF FND_API.To_Boolean(p_commit) THEN
13168 COMMIT WORK;
13169 END IF;
13170
13171 x_return_status := FND_API.G_RET_STS_SUCCESS;
13172
13173 EXCEPTION
13174 WHEN OTHERS THEN
13175 IF FND_API.To_Boolean(p_commit) THEN
13176 ROLLBACK TO Update_Action_Group_Entry_PUB;
13177 END IF;
13178 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13179
13180 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13181 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13182 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13183 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13184 FND_MSG_PUB.Add;
13185 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13186 ,p_count => x_msg_count
13187 ,p_data => x_msg_data);
13188
13189
13190 END Update_Action_Group_Entry;
13191
13192 ----------------------------------------------------------------------
13193
13194 PROCEDURE Delete_Action_Group_Entry (
13195 p_api_version IN NUMBER
13196 ,p_action_group_id IN NUMBER
13197 ,p_action_id IN NUMBER
13198 ,p_init_msg_list IN VARCHAR2 := fnd_api.g_FALSE
13199 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13200 ,x_return_status OUT NOCOPY VARCHAR2
13201 ,x_errorcode OUT NOCOPY NUMBER
13202 ,x_msg_count OUT NOCOPY NUMBER
13203 ,x_msg_data OUT NOCOPY VARCHAR2
13204 ) IS
13205
13206 l_api_name CONSTANT VARCHAR2(30) := 'Delete_Action_Group_Entry';
13207
13208 --we don't use l_api_version yet, but eventually we might:
13209 --if we change required parameters, version goes FROM n.x to (n+1).x
13210 --if we change optional parameters, version goes FROM x.n to x.(n+1)
13211 l_api_version CONSTANT NUMBER := 1.0;
13212
13213 BEGIN
13214
13215 -- Standard start of API savepoint
13216 IF FND_API.To_Boolean(p_commit) THEN
13217 SAVEPOINT Update_Action_Group_Entry_PUB;
13218 END IF;
13219
13220 -- Check for call compatibility
13221 IF NOT FND_API.Compatible_API_Call (l_api_version, p_api_version,
13222 l_api_name, G_PKG_NAME)
13223 THEN
13224 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13225 END IF;
13226 -- Initialize message list even though we don't currently use it
13230
13227 IF FND_API.To_Boolean(p_init_msg_list) THEN
13228 FND_MSG_PUB.Initialize;
13229 END IF;
13231 DELETE FROM EGO_ACTN_GRP_ENTRIES_B
13232 WHERE
13233 ACTION_GROUP_ID = p_action_group_id AND
13234 ACTION_ID = p_action_id;
13235
13236 -- Standard check of p_commit
13237 IF FND_API.To_Boolean(p_commit) THEN
13238 COMMIT WORK;
13239 END IF;
13240
13241 x_return_status := FND_API.G_RET_STS_SUCCESS;
13242
13243 EXCEPTION
13244 WHEN OTHERS THEN
13245 IF FND_API.To_Boolean(p_commit) THEN
13246 ROLLBACK TO Delete_Action_Group_Entry_PUB;
13247 END IF;
13248 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13249
13250 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
13251 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
13252 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
13253 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
13254 FND_MSG_PUB.Add;
13255 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13256 ,p_count => x_msg_count
13257 ,p_data => x_msg_data);
13258
13259
13260 END Delete_Action_Group_Entry;
13261
13262 ----------------------------------------------------------------------
13263
13264 PROCEDURE Add_Language_for_Action IS
13265
13266 BEGIN
13267
13268 delete from EGO_ACTIONS_TL T
13269 where not exists
13270 (select NULL
13271 from EGO_ACTIONS_B B
13272 where B.ACTION_ID = T.ACTION_ID
13273 );
13274
13275 update EGO_ACTIONS_TL T set (
13276 DESCRIPTION
13277 ) = (select
13278 B.DESCRIPTION
13279 from EGO_ACTIONS_TL B
13280 where B.ACTION_ID = T.ACTION_ID
13281 and B.LANGUAGE = T.SOURCE_LANG)
13282 where (
13283 T.ACTION_ID,
13284 T.LANGUAGE
13285 ) in (select
13286 SUBT.ACTION_ID,
13287 SUBT.LANGUAGE
13288 from EGO_ACTIONS_TL SUBB, EGO_ACTIONS_TL SUBT
13289 where SUBB.ACTION_ID = SUBT.ACTION_ID
13290 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
13291 and (SUBB.DESCRIPTION <> SUBT.DESCRIPTION
13292 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
13293 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
13294 ));
13295
13296 insert into EGO_ACTIONS_TL (
13297 ACTION_ID,
13298 DESCRIPTION,
13299 CREATED_BY,
13300 CREATION_DATE,
13301 LAST_UPDATED_BY,
13302 LAST_UPDATE_DATE,
13303 LAST_UPDATE_LOGIN,
13304 LANGUAGE,
13305 SOURCE_LANG)
13306 select
13307 B.ACTION_ID,
13308 B.DESCRIPTION,
13309 B.CREATED_BY,
13310 B.CREATION_DATE,
13311 B.LAST_UPDATED_BY,
13312 B.LAST_UPDATE_DATE,
13313 B.LAST_UPDATE_LOGIN,
13314 L.LANGUAGE_CODE,
13315 B.SOURCE_LANG
13316 from EGO_ACTIONS_TL B, FND_LANGUAGES L
13317 where L.INSTALLED_FLAG in ('I', 'B')
13318 and B.LANGUAGE = userenv('LANG')
13319 and not exists
13320 (select NULL
13321 from EGO_ACTIONS_TL T
13322 where T.ACTION_ID = B.ACTION_ID
13323 and T.LANGUAGE = L.LANGUAGE_CODE);
13324
13325 END Add_Language_for_Action;
13326
13327 ----------------------------------------------------------------------
13328
13329
13330 PROCEDURE Add_Language_for_Action_Group IS
13331 BEGIN
13332
13333 delete from EGO_ACTION_GROUPS_TL T
13334 where not exists
13335 (select NULL
13336 from EGO_ACTION_GROUPS_B B
13337 where B.ACTION_GROUP_ID = T.ACTION_GROUP_ID
13338 );
13339
13340 update EGO_ACTION_GROUPS_TL T set (
13341 DISPLAY_NAME,
13342 DESCRIPTION
13343 ) = (select
13344 B.DISPLAY_NAME,
13345 B.DESCRIPTION
13346 from EGO_ACTION_GROUPS_TL B
13347 where B.ACTION_GROUP_ID = T.ACTION_GROUP_ID
13348 and B.LANGUAGE = T.SOURCE_LANG)
13349 where (
13350 T.ACTION_GROUP_ID,
13351 T.LANGUAGE
13352 ) in (select
13353 SUBT.ACTION_GROUP_ID,
13354 SUBT.LANGUAGE
13355 from EGO_ACTION_GROUPS_TL SUBB, EGO_ACTION_GROUPS_TL SUBT
13356 where SUBB.ACTION_GROUP_ID = SUBT.ACTION_GROUP_ID
13357 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
13358 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
13359 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
13360 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
13361 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
13362 ));
13363
13364 insert into EGO_ACTION_GROUPS_TL (
13365 ACTION_GROUP_ID,
13366 DISPLAY_NAME,
13367 DESCRIPTION,
13368 CREATED_BY,
13369 CREATION_DATE,
13370 LAST_UPDATED_BY,
13371 LAST_UPDATE_DATE,
13372 LAST_UPDATE_LOGIN,
13373 LANGUAGE,
13374 SOURCE_LANG
13375 ) select
13376 B.ACTION_GROUP_ID,
13377 B.DISPLAY_NAME,
13378 B.DESCRIPTION,
13379 B.CREATED_BY,
13380 B.CREATION_DATE,
13381 B.LAST_UPDATED_BY,
13382 B.LAST_UPDATE_DATE,
13383 B.LAST_UPDATE_LOGIN,
13384 L.LANGUAGE_CODE,
13388 and B.LANGUAGE = userenv('LANG')
13385 B.SOURCE_LANG
13386 from EGO_ACTION_GROUPS_TL B, FND_LANGUAGES L
13387 where L.INSTALLED_FLAG in ('I', 'B')
13389 and not exists
13390 (select NULL
13391 from EGO_ACTION_GROUPS_TL T
13392 where T.ACTION_GROUP_ID = B.ACTION_GROUP_ID
13393 and T.LANGUAGE = L.LANGUAGE_CODE);
13394
13395 END Add_Language_for_Action_Group;
13396
13397 ----------------------------------------------------------------------
13398
13399 PROCEDURE Add_Language_for_Function IS
13400 BEGIN
13401
13402 delete from EGO_FUNCTIONS_TL T
13403 where not exists
13404 (select NULL
13405 from EGO_FUNCTIONS_B B
13406 where B.FUNCTION_ID = T.FUNCTION_ID
13407 );
13408
13409 update EGO_FUNCTIONS_TL T set (
13410 DISPLAY_NAME,
13411 DESCRIPTION
13412 ) = (select
13413 B.DISPLAY_NAME,
13414 B.DESCRIPTION
13415 from EGO_FUNCTIONS_TL B
13416 where B.FUNCTION_ID = T.FUNCTION_ID
13417 and B.LANGUAGE = T.SOURCE_LANG)
13418 where (
13419 T.FUNCTION_ID,
13420 T.LANGUAGE
13421 ) in (select
13422 SUBT.FUNCTION_ID,
13423 SUBT.LANGUAGE
13424 from EGO_FUNCTIONS_TL SUBB, EGO_FUNCTIONS_TL SUBT
13425 where SUBB.FUNCTION_ID = SUBT.FUNCTION_ID
13426 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
13427 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
13428 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
13429 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
13430 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
13431 ));
13432
13433 insert into EGO_FUNCTIONS_TL (
13434 CREATION_DATE,
13435 LAST_UPDATED_BY,
13436 LAST_UPDATE_DATE,
13437 LAST_UPDATE_LOGIN,
13438 CREATED_BY,
13439 FUNCTION_ID,
13440 DISPLAY_NAME,
13441 DESCRIPTION,
13442 LANGUAGE,
13443 SOURCE_LANG
13444 ) select
13445 B.CREATION_DATE,
13446 B.LAST_UPDATED_BY,
13447 B.LAST_UPDATE_DATE,
13448 B.LAST_UPDATE_LOGIN,
13449 B.CREATED_BY,
13450 B.FUNCTION_ID,
13451 B.DISPLAY_NAME,
13452 B.DESCRIPTION,
13453 L.LANGUAGE_CODE,
13454 B.SOURCE_LANG
13455 from EGO_FUNCTIONS_TL B, FND_LANGUAGES L
13456 where L.INSTALLED_FLAG in ('I', 'B')
13457 and B.LANGUAGE = userenv('LANG')
13458 and not exists
13459 (select NULL
13460 from EGO_FUNCTIONS_TL T
13461 where T.FUNCTION_ID = B.FUNCTION_ID
13462 and T.LANGUAGE = L.LANGUAGE_CODE);
13463
13464 END Add_Language_for_Function;
13465
13466 ----------------------------------------------------------------------
13467
13468 PROCEDURE Add_Language_for_Func_Param IS
13469 BEGIN
13470
13471 delete from EGO_FUNC_PARAMS_TL T
13472 where not exists
13473 (select NULL
13474 from EGO_FUNC_PARAMS_B B
13475 where B.FUNC_PARAM_ID = T.FUNC_PARAM_ID
13476 );
13477
13478 update EGO_FUNC_PARAMS_TL T set (
13479 DISPLAY_NAME,
13480 DESCRIPTION
13481 ) = (select
13482 B.DISPLAY_NAME,
13483 B.DESCRIPTION
13484 from EGO_FUNC_PARAMS_TL B
13485 where B.FUNC_PARAM_ID = T.FUNC_PARAM_ID
13486 and B.LANGUAGE = T.SOURCE_LANG)
13487 where (
13488 T.FUNC_PARAM_ID,
13489 T.LANGUAGE
13490 ) in (select
13491 SUBT.FUNC_PARAM_ID,
13492 SUBT.LANGUAGE
13493 from EGO_FUNC_PARAMS_TL SUBB, EGO_FUNC_PARAMS_TL SUBT
13494 where SUBB.FUNC_PARAM_ID = SUBT.FUNC_PARAM_ID
13495 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
13496 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
13497 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
13498 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
13499 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
13500 ));
13501
13502 insert into EGO_FUNC_PARAMS_TL (
13503 FUNC_PARAM_ID,
13504 DISPLAY_NAME,
13505 DESCRIPTION,
13506 CREATED_BY,
13507 CREATION_DATE,
13508 LAST_UPDATED_BY,
13509 LAST_UPDATE_DATE,
13510 LAST_UPDATE_LOGIN,
13511 LANGUAGE,
13512 SOURCE_LANG
13513 ) select
13514 B.FUNC_PARAM_ID,
13515 B.DISPLAY_NAME,
13516 B.DESCRIPTION,
13517 B.CREATED_BY,
13518 B.CREATION_DATE,
13519 B.LAST_UPDATED_BY,
13520 B.LAST_UPDATE_DATE,
13521 B.LAST_UPDATE_LOGIN,
13522 L.LANGUAGE_CODE,
13523 B.SOURCE_LANG
13524 from EGO_FUNC_PARAMS_TL B, FND_LANGUAGES L
13525 where L.INSTALLED_FLAG in ('I', 'B')
13526 and B.LANGUAGE = userenv('LANG')
13527 and not exists
13528 (select NULL
13529 from EGO_FUNC_PARAMS_TL T
13530 where T.FUNC_PARAM_ID = B.FUNC_PARAM_ID
13531 and T.LANGUAGE = L.LANGUAGE_CODE);
13532
13533 END Add_Language_for_Func_Param;
13534
13535 ----------------------------------------------------------------------
13536
13537 PROCEDURE Add_Language_for_Pages IS
13538 BEGIN
13539
13540 delete from EGO_PAGES_TL T
13541 where not exists
13542 (select NULL
13543 from EGO_PAGES_B B
13547 update EGO_PAGES_TL T set (
13544 where B.PAGE_ID = T.PAGE_ID
13545 );
13546
13548 DISPLAY_NAME,
13549 DESCRIPTION
13550 ) = (select
13551 B.DISPLAY_NAME,
13552 B.DESCRIPTION
13553 from EGO_PAGES_TL B
13554 where B.PAGE_ID = T.PAGE_ID
13555 and B.LANGUAGE = T.SOURCE_LANG)
13556 where (
13557 T.PAGE_ID,
13558 T.LANGUAGE
13559 ) in (select
13560 SUBT.PAGE_ID,
13561 SUBT.LANGUAGE
13562 from EGO_PAGES_TL SUBB, EGO_PAGES_TL SUBT
13563 where SUBB.PAGE_ID = SUBT.PAGE_ID
13564 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
13565 and (SUBB.DISPLAY_NAME <> SUBT.DISPLAY_NAME
13566 or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
13567 or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
13568 or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
13569 ));
13570
13571 insert into EGO_PAGES_TL (
13572 PAGE_ID,
13573 DISPLAY_NAME,
13574 DESCRIPTION,
13575 CREATED_BY,
13576 CREATION_DATE,
13577 LAST_UPDATED_BY,
13578 LAST_UPDATE_DATE,
13579 LAST_UPDATE_LOGIN,
13580 LANGUAGE,
13581 SOURCE_LANG
13582 ) select
13583 B.PAGE_ID,
13584 B.DISPLAY_NAME,
13585 B.DESCRIPTION,
13586 B.CREATED_BY,
13587 B.CREATION_DATE,
13588 B.LAST_UPDATED_BY,
13589 B.LAST_UPDATE_DATE,
13590 B.LAST_UPDATE_LOGIN,
13591 L.LANGUAGE_CODE,
13592 B.SOURCE_LANG
13593 from EGO_PAGES_TL B, FND_LANGUAGES L
13594 where L.INSTALLED_FLAG in ('I', 'B')
13595 and B.LANGUAGE = userenv('LANG')
13596 and not exists
13597 (select NULL
13598 from EGO_PAGES_TL T
13599 where T.PAGE_ID = B.PAGE_ID
13600 and T.LANGUAGE = L.LANGUAGE_CODE);
13601
13602 END Add_Language_for_Pages;
13603
13604 ----------------------------------------------------------------------
13605
13606 PROCEDURE Add_Language_for_Data_level IS
13607 BEGIN
13608
13609 DELETE FROM EGO_DATA_LEVEL_TL T
13610 WHERE NOT EXISTS
13611 (SELECT NULL
13612 FROM EGO_DATA_LEVEL_B B
13613 WHERE B.DATA_LEVEL_ID = T.DATA_LEVEL_ID
13614 );
13615
13616 UPDATE EGO_DATA_LEVEL_TL T
13617 SET (USER_DATA_LEVEL_NAME
13618 )
13619 =
13620 (SELECT B.USER_DATA_LEVEL_NAME
13621 FROM EGO_DATA_LEVEL_TL B
13622 WHERE B.DATA_LEVEL_ID = T.DATA_LEVEL_ID
13623 AND B.LANGUAGE = T.SOURCE_LANG)
13624 WHERE (
13625 T.DATA_LEVEL_ID,
13626 T.LANGUAGE
13627 )
13628 IN
13629 (SELECT
13630 SUBT.DATA_LEVEL_ID,
13631 SUBT.LANGUAGE
13632 from EGO_DATA_LEVEL_TL SUBB, EGO_DATA_LEVEL_TL SUBT
13633 where SUBB.DATA_LEVEL_ID = SUBT.DATA_LEVEL_ID
13634 and SUBB.LANGUAGE = SUBT.SOURCE_LANG
13635 and SUBB.USER_DATA_LEVEL_NAME <> SUBT.USER_DATA_LEVEL_NAME
13636 );
13637
13638 INSERT INTO EGO_DATA_LEVEL_TL (
13639 DATA_LEVEL_ID,
13640 USER_DATA_LEVEL_NAME,
13641 CREATED_BY,
13642 CREATION_DATE,
13643 LAST_UPDATED_BY,
13644 LAST_UPDATE_DATE,
13645 LAST_UPDATE_LOGIN,
13646 LANGUAGE,
13647 SOURCE_LANG
13648 ) select
13649 B.DATA_LEVEL_ID,
13650 B.USER_DATA_LEVEL_NAME,
13651 B.CREATED_BY,
13652 B.CREATION_DATE,
13653 B.LAST_UPDATED_BY,
13654 B.LAST_UPDATE_DATE,
13655 B.LAST_UPDATE_LOGIN,
13656 L.LANGUAGE_CODE,
13657 B.SOURCE_LANG
13658 from EGO_DATA_LEVEL_TL B, FND_LANGUAGES L
13659 where L.INSTALLED_FLAG in ('I', 'B')
13660 and B.LANGUAGE = userenv('LANG')
13661 and not exists
13662 (select NULL
13663 from EGO_DATA_LEVEL_TL T
13664 where T.DATA_LEVEL_ID = B.DATA_LEVEL_ID
13665 and T.LANGUAGE = L.LANGUAGE_CODE);
13666
13667 END Add_Language_for_Data_level;
13668
13669 ----------------------------------------------------------------------
13670
13671 PROCEDURE ADD_LANGUAGE (
13672 p_tl_table_name IN VARCHAR2
13673 ) IS
13674
13675 BEGIN
13676
13677 IF (p_tl_table_name = 'EGO_ACTIONS_TL') THEN
13678 Add_Language_for_Action;
13679 ELSIF (p_tl_table_name = 'EGO_ACTION_GROUPS_TL') THEN
13680 Add_Language_for_Action_Group;
13681 ELSIF (p_tl_table_name = 'EGO_FUNCTIONS_TL') THEN
13682 Add_Language_for_Function;
13683 ELSIF (p_tl_table_name = 'EGO_FUNC_PARAMS_TL') THEN
13684 Add_Language_for_Func_Param;
13685 ELSIF (p_tl_table_name = 'EGO_PAGES_TL') THEN
13686 Add_Language_for_Pages;
13687 ELSIF (p_tl_table_name = 'EGO_DATA_LEVEL_TL') THEN
13688 Add_Language_for_Data_level;
13689 END IF;
13690
13691 END ADD_LANGUAGE;
13692
13693 ---------------------------------------------------------------------
13694 FUNCTION Return_Association_Existance
13695 (p_application_id IN NUMBER
13696 ,p_attr_group_type IN VARCHAR2
13697 ,p_attr_group_name IN VARCHAR2) RETURN VARCHAR2 IS
13698 --
13699 -- The function takes the application_id, attribute Group Type
13700 -- and Attribute Group Name and determines whether any associations
13701 -- are created for the attribute specified
13702 -- If there are any existing associations
13703 -- then 1 will be returned
13704 -- else 0 will be returned
13708 BEGIN
13705 --
13706
13707 check_association_existance BOOLEAN := true;
13709 check_association_existance := Check_Associations_Exist
13710 (p_application_id => p_application_id
13711 ,p_attr_group_type => p_attr_group_type
13712 ,p_attr_group_name => p_attr_group_name);
13713 IF check_association_existance THEN
13714 RETURN '1';
13715 ELSE
13716 RETURN '0';
13717 END IF;
13718
13719 EXCEPTION
13720 WHEN OTHERS THEN
13721 return '1';
13722 END Return_Association_Existance;
13723
13724 --------------------------------------------------------------------------
13725
13726 PROCEDURE Update_AGV_Name(
13727 p_api_version IN NUMBER
13728 ,p_application_id IN NUMBER
13729 ,p_attr_group_type IN VARCHAR2
13730 ,p_attr_group_name IN VARCHAR2
13731 ,p_agv_name IN VARCHAR2
13732 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
13733 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
13734 ,x_return_status OUT NOCOPY VARCHAR2
13735 ,x_errorcode OUT NOCOPY NUMBER
13736 ,x_msg_count OUT NOCOPY NUMBER
13737 ,x_msg_data OUT NOCOPY VARCHAR2)
13738 IS
13739
13740 -- Start OF comments
13741 -- API name : Update_AGV_Name
13742 -- TYPE : Public
13743 -- Pre-reqs : None
13744 -- FUNCTION : Update Table 'ego_fnd_dsc_flx_ctx_ext'
13745 -- for attribute View Name
13746 -- Version: Current Version 1.0
13747 -- Previous Version : None
13748 --
13749 -- END OF comments
13750
13751 CURSOR c_check_agv_name (cp_agv_name IN VARCHAR2
13752 ,cp_application_id IN NUMBER
13753 ,cp_attr_group_type IN VARCHAR2
13754 ,cp_attr_group_name IN VARCHAR2
13755 ) IS
13756 SELECT agv_name
13757 FROM ego_fnd_dsc_flx_ctx_ext
13758 WHERE agv_name = cp_agv_name
13759 AND attr_group_id NOT IN
13760 (select attr_group_id
13761 from ego_fnd_dsc_flx_ctx_ext
13762 where agv_name = cp_agv_name
13763 AND application_id = cp_application_id
13764 AND descriptive_flexfield_name = cp_attr_group_type
13765 AND descriptive_flex_context_code = cp_attr_group_name
13766 );
13767
13768 CURSOR c_check_obj_name (cp_agv_name IN VARCHAR2, cp_appl_id IN NUMBER) IS
13769 SELECT object_name
13770 FROM all_objects
13771 where object_name = cp_agv_name
13772 and owner in (EGO_EXT_FWK_PUB.Get_Application_Owner(cp_appl_id), EGO_EXT_FWK_PUB.Get_Oracle_UserName);
13773
13774 l_api_version CONSTANT NUMBER := 1.0 ;
13775 l_api_name CONSTANT VARCHAR (30) := 'Update_AGV_Name' ;
13776
13777 l_dynamic_sql VARCHAR2(100);
13778 l_agv_name ego_fnd_dsc_flx_ctx_ext.agv_name%TYPE;
13779 l_temp_agv_name ego_fnd_dsc_flx_ctx_ext.agv_name%TYPE;
13780
13781 BEGIN
13782 -- Standard Start of API savepoint
13783 IF FND_API.To_Boolean( p_commit ) THEN
13784 SAVEPOINT Update_AGV_Name ;
13785 END IF;
13786 -- Check for call compatibility.
13787 IF NOT FND_API.Compatible_API_Call( l_api_version ,
13788 p_api_version ,
13789 l_api_name ,
13790 G_PKG_NAME
13791 ) THEN
13792 RAISE FND_API.G_EXC_ERROR;
13793 END IF;
13794
13795 -- Initialize API message list if necessary.
13796 -- Initialize message list if p_init_msg_list is set to TRUE.
13797 IF FND_API.to_Boolean( P_INIT_MSG_LIST ) THEN
13798 FND_MSG_PUB.initialize;
13799 END IF;
13800
13801 -- Check If the view name is already present
13802 l_agv_name := UPPER(p_agv_name);
13803 OPEN c_check_agv_name (cp_agv_name => l_agv_name
13804 ,cp_application_id => p_application_id
13805 ,cp_attr_group_type => p_attr_group_type
13806 ,cp_attr_group_name => p_attr_group_name
13807 );
13808 FETCH c_check_agv_name INTO l_temp_agv_name;
13809 IF c_check_agv_name%FOUND THEN
13810 FND_MESSAGE.set_name('EGO','EGO_EF_NAME_EXTS');
13811 FND_MSG_PUB.add;
13812 RAISE FND_API.g_exc_error;
13813 END IF;
13814 CLOSE c_check_agv_name;
13815
13816 -- the AGV Name is unique among the existing records
13817 -- check if the AGV Name is an already existing object
13818 OPEN c_check_obj_name (cp_agv_name => l_agv_name,
13819 cp_appl_id => p_application_id);
13820 FETCH c_check_obj_name INTO l_temp_agv_name;
13821 IF c_check_obj_name%FOUND THEN
13822 FND_MESSAGE.set_name('EGO','EGO_EF_NAME_EXTS');
13823 FND_MSG_PUB.add;
13824 RAISE FND_API.g_exc_error;
13825 END IF;
13826 CLOSE c_check_obj_name;
13827
13828 --Test with this dummy Query for the validity of the view name
13829 --It should not be a reserve word
13830 l_dynamic_sql := 'CREATE OR REPLACE VIEW '|| l_agv_name ||' AS SELECT * FROM DUAL';
13831 EXECUTE IMMEDIATE l_dynamic_sql;
13832
13836 -- dummy view should not exist in the database.
13833 -- Syalaman - Fix for bug 5911824
13834 -- Droping the dummy view created in above statement so that
13835 -- if any error occurs while creating the actual view, this
13837 l_dynamic_sql := 'DROP VIEW '|| l_agv_name;
13838 EXECUTE IMMEDIATE l_dynamic_sql;
13839 -- End of fix for bug 5911824
13840
13841 --
13842 -- As the method is called in validate, we should not update
13843 --
13844 -- -- Insert Attribute Group View name for the corresponding
13845 -- -- Attribute Group
13846 -- UPDATE ego_fnd_dsc_flx_ctx_ext
13847 -- SET agv_name = l_agv_name,
13848 -- last_updated_by = FND_GLOBAL.user_id,
13849 -- last_update_date = SYSDATE,
13850 -- last_update_login = FND_GLOBAL.login_id
13851 -- WHERE application_id = p_application_id
13852 -- AND descriptive_flexfield_name = p_attr_group_type
13853 -- AND descriptive_flex_context_code = p_attr_group_name ;
13854 --
13855 IF FND_API.To_Boolean(p_commit) THEN
13856 COMMIT WORK;
13857 END IF;
13858 x_return_status := FND_API.G_RET_STS_SUCCESS;
13859 EXCEPTION
13860 WHEN FND_API.G_EXC_ERROR THEN
13861 IF FND_API.To_Boolean( p_commit ) THEN
13862 ROLLBACK TO Update_AGV_Name;
13863 END IF;
13864 IF c_check_agv_name%ISOPEN THEN
13865 CLOSE c_check_agv_name;
13866 END IF;
13867 IF c_check_obj_name%ISOPEN THEN
13868 CLOSE c_check_obj_name;
13869 END IF;
13870 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13871 ,p_count => x_msg_count
13872 ,p_data => x_msg_data);
13873 x_return_status := FND_API.G_RET_STS_ERROR;
13874 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13875 IF FND_API.To_Boolean( p_commit ) THEN
13876 ROLLBACK TO Update_AGV_Name;
13877 END IF;
13878 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13879 ,p_count => x_msg_count
13880 ,p_data => x_msg_data);
13881 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13882 WHEN OTHERS THEN
13883 IF FND_API.To_Boolean( p_commit ) THEN
13884 ROLLBACK TO Update_AGV_Name;
13885 END IF;
13886 IF c_check_agv_name%ISOPEN THEN
13887 CLOSE c_check_agv_name;
13888 END IF;
13889 IF c_check_obj_name%ISOPEN THEN
13890 CLOSE c_check_obj_name;
13891 END IF;
13892 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13893 ,p_count => x_msg_count
13894 ,p_data => x_msg_data);
13895 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13896
13897 END Update_AGV_Name;
13898
13899 ------------------------------------------------------------------------------------------
13900 -- This method will update the control level of an attribute in EGO_FND_DF_COL_USGS_EXT
13901 -- requires: 1) p_control_level is a valid control level
13902 -- as represented in lookup 'EGO_PC_CONTROL_LEVEL' in fnd_lookups
13903 -- 2) p_application_column_name is not null and is a valid column name
13904 -- 3) p_application_id is not null and is valid
13905 -- 4) p_descriptive_flexfield_name corresponds to a valid attribute group type
13906 ------------------------------------------------------------------------------------------
13907 PROCEDURE Update_Attribute_Control_Level (
13908 p_api_version IN NUMBER
13909 ,p_application_id IN NUMBER
13910 ,p_descriptive_flexfield_name IN VARCHAR2
13911 ,p_application_column_name IN VARCHAR2
13912 ,p_control_level IN NUMBER
13913 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
13914 ,p_commit IN VARCHAR2 := fnd_api.g_FALSE
13915 ,x_return_status OUT NOCOPY VARCHAR2
13916 ,x_msg_count OUT NOCOPY NUMBER
13917 ,x_msg_data OUT NOCOPY VARCHAR2
13918 ) IS
13919
13920 l_api_name CONSTANT VARCHAR2(30) := 'Update_Attribute_Control_Level';
13921 l_attr_id NUMBER;
13922 l_control_level VARCHAR2(30);
13923 e_control_level_invalid EXCEPTION;
13924 e_no_attr_for_id_error EXCEPTION;
13925
13926 BEGIN
13927
13928 -- Initialize API message list if necessary.
13929 -- Initialize message list if p_init_msg_list is set to TRUE.
13930 IF FND_API.to_Boolean( P_INIT_MSG_LIST ) THEN
13931 FND_MSG_PUB.initialize;
13932 END IF;
13933
13934 -------------------------------------------------------------------------------------
13935 -- Make sure that the control level corresponds with either Master Level or Org Level
13936 -------------------------------------------------------------------------------------
13937 IF( p_control_level IS NULL ) THEN
13938 RAISE e_control_level_invalid;
13939 ELSE
13940 BEGIN
13941 select lookup_code into l_control_level from fnd_lookups
13942 where lookup_type = 'EGO_PC_CONTROL_LEVEL'
13943 and lookup_code = p_control_level;
13944
13945 EXCEPTION
13946 WHEN NO_DATA_FOUND THEN
13950
13947 RAISE e_control_level_invalid;
13948 END;
13949 END IF;
13951 -------------------------------------------------------------------------------------
13952 -- Make sure that application_id, descriptive_flexfield_name and application_column_name were passed in
13953 -- and correspond to a valid attribute id
13954 -------------------------------------------------------------------------------------
13955
13956
13957 IF (p_application_column_name IS NULL OR p_descriptive_flexfield_name IS NULL OR p_application_column_name IS NULL) THEN
13958 RAISE e_no_attr_for_id_error;
13959 ELSE
13960 BEGIN
13961
13962 -- check if there exists any attributes to be updated
13963 select attr_id into l_attr_id
13964 from EGO_FND_DF_COL_USGS_EXT
13965 where application_id = p_application_id
13966 and descriptive_flexfield_name = p_descriptive_flexfield_name
13967 and application_column_name = p_application_column_name;
13968
13969 -- change the control level for this attribute
13970 update EGO_FND_DF_COL_USGS_EXT
13971 set control_level = p_control_level
13972 where application_id = p_application_id
13973 and descriptive_flexfield_name = p_descriptive_flexfield_name
13974 and application_column_name = p_application_column_name;
13975
13976 EXCEPTION
13977 WHEN NO_DATA_FOUND THEN
13978 RAISE e_no_attr_for_id_error;
13979 END;
13980 END IF;
13981
13982
13983
13984 -- Standard check of p_commit
13985 IF FND_API.To_Boolean(p_commit) THEN
13986 COMMIT WORK;
13987 END IF;
13988
13989 x_return_status := FND_API.G_RET_STS_SUCCESS;
13990
13991
13992 EXCEPTION
13993 WHEN e_control_level_invalid THEN
13994 x_return_status := FND_API.G_RET_STS_ERROR;
13995 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_CL_INVALID');
13996 FND_MSG_PUB.Add;
13997 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
13998 ,p_count => x_msg_count
13999 ,p_data => x_msg_data);
14000
14001
14002 WHEN e_no_attr_for_id_error THEN
14003 x_return_status := FND_API.G_RET_STS_ERROR;
14004 FND_MESSAGE.Set_Name('EGO', 'EGO_EF_NO_ATTR_FOUND');
14005 FND_MSG_PUB.Add;
14006 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14007 ,p_count => x_msg_count
14008 ,p_data => x_msg_data);
14009
14010
14011
14012 WHEN OTHERS THEN
14013 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14014
14015 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
14016 FND_MESSAGE.Set_Token('PKG_NAME', G_PKG_NAME);
14017 FND_MESSAGE.Set_Token('API_NAME', l_api_name);
14018 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM||' '||FND_FLEX_DSC_API.Message());
14019 FND_MSG_PUB.Add;
14020 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
14021 ,p_count => x_msg_count
14022 ,p_data => x_msg_data);
14023
14024 END Update_Attribute_Control_Level;
14025 ------------------------------------------------------------------------------------------
14026 -- Requirement: bug: 3801472
14027 --
14028 -- Function: To return the attribute changes table for a given attribute group type.
14029 -- If the table is not defined, NULL is returned
14030 --
14031 -- Parameters:
14032 -- IN
14033 -- p_attr_group_type: attribute_group_type
14034 -- OUT
14035 -- x_base_table : base table for attribute_changes
14036 -- x_tl_table : translatable table for attribute_changes
14037 --
14038 ------------------------------------------------------------------------------------------
14039 --
14040 PROCEDURE Get_Attr_Changes_Table (
14041 p_attr_group_type IN VARCHAR2
14042 ,x_base_table OUT NOCOPY VARCHAR2
14043 ,x_tl_table OUT NOCOPY VARCHAR2
14044 ) IS
14045 BEGIN
14046 -- currently all programs call this
14047 -- this need to be changed once we have decided
14048 -- where to store this meta data.
14049 IF p_attr_group_type = 'EGO_ITEMMGMT_GROUP' THEN
14050 x_base_table := 'EGO_ITEMS_ATTRS_CHANGES_B';
14051 x_tl_table := 'EGO_ITEMS_ATTRS_CHANGES_TL';
14052 ELSE
14053 x_base_table := NULL;
14054 x_tl_table := NULL;
14055 END IF;
14056
14057 EXCEPTION
14058 WHEN OTHERS THEN
14059 x_base_table := NULL;
14060 x_tl_table := NULL;
14061 END Get_Attr_Changes_Table;
14062 ------------------------------------------------------------------------------------------
14063
14064 ------------------------------------------------------------------------------------------
14065 -- This function takes an object name and a classification code and returns the display --
14066 -- name belonging to the classification code. --
14067 ------------------------------------------------------------------------------------------
14068 FUNCTION Convert_Class_Code_To_Name (
14069 p_object_name IN VARCHAR2
14070 ,p_class_code IN VARCHAR2
14071 ) RETURN VARCHAR2 IS
14072
14073 l_ocv_name VARCHAR2(30);
14074 l_class_name VARCHAR2(40);
14075
14076 BEGIN
14080 WHERE OBJECT_NAME = p_object_name;
14077 SELECT EXT_ATTR_OCV_NAME
14078 INTO l_ocv_name
14079 FROM EGO_FND_OBJECTS_EXT
14081
14082 IF (p_class_code = '-1') THEN
14083 l_class_name := '-1';
14084 ELSE
14085 EXECUTE IMMEDIATE 'SELECT MEANING FROM '||l_ocv_name||' WHERE CODE = :code AND ROWNUM = 1'
14086 INTO l_class_name
14087 USING p_class_code;
14088
14089 END IF;
14090
14091 RETURN l_class_name;
14092 EXCEPTION
14093 WHEN OTHERS THEN
14094 RETURN NULL;
14095 END Convert_Class_Code_To_Name;
14096
14097 ------------------------------------------------------------------------------------------
14098 -- This function takes an object name and a classification name and returns the --
14099 -- classification code of the given classification name. --
14100 ------------------------------------------------------------------------------------------
14101 FUNCTION Convert_Name_To_Class_Code (
14102 p_object_name IN VARCHAR2
14103 ,p_class_name IN VARCHAR2
14104 ) RETURN VARCHAR2 IS
14105
14106 l_ocv_name VARCHAR2(30);
14107 l_class_code VARCHAR2(40);
14108
14109 BEGIN
14110 SELECT EXT_ATTR_OCV_NAME
14111 INTO l_ocv_name
14112 FROM EGO_FND_OBJECTS_EXT
14113 WHERE OBJECT_NAME = p_object_name;
14114
14115 IF (p_class_name = '-1') THEN
14116 l_class_code := '-1';
14117 ELSE
14118 EXECUTE IMMEDIATE 'SELECT CODE FROM '||l_ocv_name||' WHERE MEANING = :name AND ROWNUM = 1'
14119 INTO l_class_code
14120 USING p_class_name;
14121
14122 END IF;
14123
14124 RETURN l_class_code;
14125 EXCEPTION
14126 WHEN OTHERS THEN
14127 RETURN NULL;
14128 END Convert_Name_To_Class_Code;
14129
14130 -------------------------------------------------------------------------------------------
14131 -- This function calls the specified API, passing the specified attribute metadata, to --
14132 -- determine whether the attribute is supported by application to which the API belongs. --
14133 -------------------------------------------------------------------------------------------
14134 FUNCTION Check_Supported_Attr_Usages (
14135 p_support_api IN VARCHAR2
14136 ,p_application_id IN NUMBER
14137 ,p_attr_grp_type IN VARCHAR2
14138 ,p_attr_grp_name IN VARCHAR2
14139 ,p_attr_name IN VARCHAR2
14140 ,p_data_level IN VARCHAR2
14141 ,p_is_multi_row IN VARCHAR2
14142 ,p_data_type IN VARCHAR2
14143 ) RETURN VARCHAR2 IS
14144
14145 l_ret_char_val VARCHAR2(1);
14146 l_string VARCHAR2(10000);
14147
14148 BEGIN
14149
14150 EXECUTE IMMEDIATE
14151 'DECLARE ' ||
14152 ' l_metadata EGO_EXT_FWK_PUB.EGO_ATTR_USG_METADATA; ' ||
14153 ' l_api_ret_val VARCHAR2(1); ' ||
14154 'BEGIN ' ||
14155 ' l_api_ret_val := ''N''; ' ||
14156 ' l_metadata.application_id := :1; ' ||
14157 ' l_metadata.attr_grp_type := :2; ' ||
14158 ' l_metadata.attr_grp_name := :3; ' ||
14159 ' l_metadata.attr_name := :4; ' ||
14160 ' l_metadata.data_level := :5; ' ||
14161 ' l_metadata.is_multi_row := :6; ' ||
14162 ' l_metadata.data_type := :7; ' ||
14163 ' IF (' || p_support_api || '(l_metadata)) THEN ' ||
14164 ' l_api_ret_val := ''Y''; ' ||
14165 ' ELSE ' ||
14166 ' l_api_ret_val := ''N''; ' ||
14167 ' END IF; ' ||
14168 ' :8 := l_api_ret_val; ' ||
14169 'END;'
14170 USING IN p_application_id
14171 ,IN p_attr_grp_type
14172 ,IN p_attr_grp_name
14173 ,IN p_attr_name
14174 ,IN p_data_level
14175 ,IN p_is_multi_row
14176 ,IN p_data_type
14177 ,OUT l_ret_char_val;
14178
14179 RETURN l_ret_char_val;
14180
14181 EXCEPTION
14182
14183 WHEN OTHERS THEN
14184 RETURN 'N';
14185
14186 END Check_Supported_Attr_Usages;
14187
14188 ------------------------------------------------------------------------------------------
14189 -- Function: To return the pending transalatable table name for a given attribute group type
14190 -- an the application id
14191 -- If the table is not defined, NULL is returned
14192 --
14193 -- Parameters:
14194 -- IN
14195 -- p_attr_group_type: attribute_group_type
14196 -- p_attr_group_type application_id
14197 -- OUT
14198 -- l_table_name : translatable table for attribute_changes
14199 ------------------------------------------------------------------------------------------
14200 FUNCTION Get_Attr_Changes_TL_Table (
14201 p_application_id IN NUMBER
14202 ,p_attr_group_type IN VARCHAR2
14203 )
14204 RETURN VARCHAR2
14205 IS
14206
14207 l_table_name VARCHAR2(30);
14208 l_dynamic_sql VARCHAR2(350);
14209
14210 BEGIN
14211 l_dynamic_sql:='SELECT CHANGE_TL_TABLE_NAME'||
14212 ' FROM ENG_PENDING_CHANGE_CTX'||
14213 ' WHERE APPLICATION_ID = :1'||--p_application_id
14214 ' AND CHANGE_ATTRIBUTE_GROUP_TYPE =:2' ;--p_attr_group_type;
14215
14216 EXECUTE IMMEDIATE l_dynamic_sql INTO l_table_name USING p_application_id
14217 ,p_attr_group_type;
14218
14219 RETURN l_table_name;
14220
14221 EXCEPTION
14222 WHEN OTHERS THEN
14223 RETURN NULL;
14224
14225 END Get_Attr_Changes_TL_Table;
14226 -------------------------------------------------------------------------------
14227 ------------------------------------------------------------------------------------------
14228 -- Function: To return the pending base table name for a given attribute group type
14229 -- an the application id
14230 -- If the table is not defined, NULL is returned
14231 --
14232 -- Parameters:
14233 -- IN
14234 -- p_attr_group_type: attribute_group_type
14235 -- p_attr_group_type application_id
14236 -- OUT
14237 -- l_table_name : base table for attribute_changes
14238 ------------------------------------------------------------------------------------------
14239 FUNCTION Get_Attr_Changes_B_Table (
14240 p_application_id IN NUMBER
14241 ,p_attr_group_type IN VARCHAR2
14242 )
14243 RETURN VARCHAR2
14244 IS
14245
14246 l_table_name VARCHAR2(30);
14247 l_dynamic_sql VARCHAR2(350);
14248
14249 BEGIN
14250 l_dynamic_sql:='SELECT CHANGE_B_TABLE_NAME'||
14251 ' FROM ENG_PENDING_CHANGE_CTX'||
14252 ' WHERE APPLICATION_ID = :1'||--p_application_id
14253 ' AND CHANGE_ATTRIBUTE_GROUP_TYPE =:2' ;--p_attr_group_type;
14254
14255 EXECUTE IMMEDIATE l_dynamic_sql INTO l_table_name USING p_application_id
14256 ,p_attr_group_type;
14257 RETURN l_table_name;
14258
14259 EXCEPTION
14260 WHEN OTHERS THEN
14261 RETURN NULL;
14262 END Get_Attr_Changes_B_Table;
14263
14264 -----------------------------------------------------------------------------------------
14265
14266
14267
14268
14269
14270
14271 PROCEDURE Sync_Up_Attr_Metadata (
14272 p_source_ag_name IN VARCHAR2,
14273 p_source_ag_type IN VARCHAR2,
14274 p_source_appl_id IN VARCHAR2,
14275 p_target_ag_name IN VARCHAR2,
14276 p_target_ag_type IN VARCHAR2,
14277 p_target_appl_id IN VARCHAR2,
14278 x_return_status OUT NOCOPY VARCHAR2,
14279 x_errorcode OUT NOCOPY VARCHAR2,
14280 x_msg_count OUT NOCOPY NUMBER,
14281 x_msg_data OUT NOCOPY VARCHAR2
14282 )
14283 IS
14284
14285 l_attr_Group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
14286 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
14287 l_return_status VARCHAR2(1);
14288 l_errorcode VARCHAR2(100);
14289 l_msg_count NUMBER;
14290 l_msg_data VARCHAR2(10000);
14291 l_col_name VARCHAR2(30);
14292
14293 BEGIN
14294
14295 l_attr_group_metadata_obj :=
14296 EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata(
14297 p_application_id => p_source_appl_id
14298 ,p_attr_group_type => p_source_ag_type
14299 ,p_attr_group_name => p_source_ag_name
14300 ,p_pick_from_cache => FALSE
14301 );
14302
14303 IF (l_attr_group_metadata_obj IS NOT NULL ) THEN
14304 l_attr_metadata_table := l_attr_group_metadata_obj.attr_metadata_table;
14305 END IF;
14306
14307 IF (l_attr_metadata_table IS NOT NULL) THEN
14308
14309 FOR i IN l_attr_metadata_table.FIRST .. l_attr_metadata_table.LAST
14310 LOOP
14311
14312 BEGIN
14313 SELECT APPLICATION_COLUMN_NAME
14314 INTO l_col_name
14315 FROM FND_DESCR_FLEX_COLUMN_USAGES
14316 WHERE APPLICATION_ID = p_target_appl_id
14317 AND DESCRIPTIVE_FLEXFIELD_NAME = p_target_ag_type
14318 AND DESCRIPTIVE_FLEX_CONTEXT_CODE = p_target_ag_name
14319 AND END_USER_COLUMN_NAME = l_attr_metadata_table(i).ATTR_NAME;
14320 EXCEPTION
14321 WHEN OTHERS THEN
14322 l_col_name := NULL;
14323 END;
14324
14325 IF (l_col_name IS NOT NULL) THEN
14326
14327 Update_Attribute (
14328 p_api_version => 1.0
14329 ,p_application_id => p_target_appl_id
14330 ,p_attr_group_type => p_target_ag_type
14331 ,p_attr_group_name => p_target_ag_name
14332 ,p_internal_name => l_attr_metadata_table(i).ATTR_NAME
14333 ,p_display_name => l_attr_metadata_table(i).ATTR_DISP_NAME
14334 ,p_description => NULL
14335 ,p_sequence => l_attr_metadata_table(i).SEQUENCE
14336 ,p_required => l_attr_metadata_table(i).REQUIRED_FLAG
14337 ,p_searchable => NULL
14338 ,p_column => l_col_name
14339 ,p_value_set_id => l_attr_metadata_table(i).VALUE_SET_ID
14340 ,p_info_1 => l_attr_metadata_table(i).INFO_1
14341 ,p_default_value => l_attr_metadata_table(i).DEFAULT_VALUE
14342 ,p_enabled => NULL
14343 ,p_display => NULL
14344 ,p_view_in_hierarchy_code => NULL
14345 ,p_edit_in_hierarchy_code => NULL
14346 ,p_uom_class => l_attr_metadata_table(i).UNIT_OF_MEASURE_CLASS
14347 ,x_return_status => l_return_status
14348 ,x_errorcode => l_errorcode
14349 ,x_msg_count => l_msg_count
14350 ,x_msg_data => l_msg_data
14351 );
14352
14353 x_msg_count := l_msg_count + NVL(x_msg_count,0);
14354 x_msg_data := x_msg_data || l_msg_data;
14355 x_errorcode := x_errorcode || l_errorcode;
14356
14357 IF (x_return_status IS NULL) THEN
14358 x_return_status := l_return_status;
14359 END IF;
14360
14361 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
14362 x_return_status := l_return_status;
14363 END IF;
14364
14365 END IF;
14366
14367 END LOOP;
14368
14369 END IF;
14370
14371 END Sync_Up_Attr_Metadata;
14372
14373 --Method for concatenating DataLevels, R12C changes--
14374 FUNCTION Concat_Data_Level_DisplayNames (p_attr_grp_id IN NUMBER)
14375 RETURN VARCHAR2 IS
14376
14377 CURSOR c_data_levels(p_attr_grp_id IN NUMBER) IS
14378 SELECT DL_TL.user_data_level_name data_level_name
14379 FROM EGO_ATTR_GROUP_DL AG_DL, EGO_DATA_LEVEL_B DL_B, EGO_DATA_LEVEL_TL DL_TL
14380 WHERE AG_DL.data_level_id = DL_B.data_level_id
14381 AND DL_B.data_level_id = DL_TL.data_level_id
14382 AND UserEnv('LANG')=LANGUAGE
14383 AND AG_DL.attr_group_id = p_attr_grp_id;
14384
14385 l_data_levels VARCHAR2(4000) := '';
14386
14387 BEGIN
14388
14389 FOR i IN c_data_levels(p_attr_grp_id) LOOP
14390 l_data_levels := l_data_levels || ',' || i.data_level_name;
14391 END LOOP;
14392 l_data_levels := SubStr(l_data_levels,2);
14393 RETURN l_data_levels;
14394
14395 END;
14396
14397 END EGO_EXT_FWK_PUB;
14398