[Home] [Help]
PACKAGE BODY: APPS.FEM_DIMENSION_UTIL_PKG
Source
1 PACKAGE BODY FEM_DIMENSION_UTIL_PKG AS
2 --$Header: FEMDIMAPB.plb 120.16.12000000.3 2007/08/08 16:16:46 gdonthir ship $
3 /*==========================================================================+
4 | Copyright (c) 1997 Oracle Corporation, Redwood Shores, CA, USA |
5 | All rights reserved. |
6 +==========================================================================+
7 | FILENAME
8 |
9 | FEMDIMAPB.plb
10 |
11 | NAME fem_dimension_util_pkg
12 |
13 | DESCRIPTION
14 |
15 | Package Body for fem_dimension_util_pkg
16 |
17 | HISTORY
18 |
19 | 16-JUN-03 SSista Added APIs for Local VS Combo ID
20 | 02-MAY-03 RFlippo Created
21 | 27-OCT-03 TimMoore added following:
22 | Get_Cal_Period_ID
23 | Register_Data_Location
24 | UnRegister_Data_Location
25 | Generate_Member_ID
26 | New_Dataset
27 | New_Ledger
28 | Get_Dim_Attr_ID_Ver_ID
29 | 05-NOV-03 TimMoore modified following:
30 | Effective_Cal_Period_ID
31 | 03-JUN-04 Rflippo added SOURCE_SYSTEM as a member_id_method_code
32 | 06-JUL-04 Rfippo changes to the Generate_Default_Load_Member procedure
33 | to create attr assignment rows for each member; also
34 | changed name/display_code of the generated members to
35 | 'Default' instead of 'Undefined';
36 |
37 | 09-JUL-04 Rflippo bug#3755923 changes to new_ledger API signature
38 | so that all "Is Pop" attributes are defaulted to 'N';
39 | Also added new 'Is Pop' attributes for Task and
40 | Financial Element.
41 | 10-AUG-04 Rflippo bug#3824427 - added New_Budget API to create budget
42 | members
43 | 28-OCT-04 Rflippo bug#3972903 - modify the Local_vs_combo_id function to
44 | return the Global Combo, not the Local. This change
45 | is for the FEM.C modifications in the rule sharing
46 | design;
47 | 22-Nov-04 gcheng bug#4005877 - obsolete the Effective_Cal_Period_ID
48 | and replaced it with a new Relative_Cal_Period_ID
49 | function. The details of this new function can be
50 | found in the Dimension APIs document on ASDEV.
51 | 13-JAN-05 gcheng Bug 3824701 - altered Register_Data_Location
52 | and Unregister_Data_Location APIs
53 |
54 | 17-JAN-05 tmoore Bug 4106880 - added following APIs:
55 | Register_Budget
56 | Register_Ledger
57 | Register_Encumbrance_Type
58 | New_Global_VS_Combo
59 |
60 | 26-JAN-05 tmoore Bug 4145122 - added New_Encumbrance_Type
61 | 21-APR-05 RFlippo Bug#4303380 Add Global_vs_combo_display_code to the
62 | Insert statement for FEM_GLOBAL_VS_COMBOS_PKG
63 | -- this fix will preserve the original signature
64 | for this API so that it is backward compatible
65 | with OGL by employing a default for the
66 | global combo display_code. If the user passes
67 | null for the display code, it set it = global combo name.
68 | 03-MAY-05 tmoore Bug 4036498 - Added Get_Dim_Member_ID.
69 | This function returns a dimension
70 | member ID
71 | 13-MAY-05 Rflippo Bug4367375 - some required attributes missing
72 | a default assignment for the
73 | generate_default_load_member proc
74 | 23-MAY-05 Rflippo Bug4316406 modify generate_default_load_member
75 | for new req attribute security_enabled_flag
76 | 15-JUN-05 gcheng 4417618. Created the Get_Default_Dim_Member procedures.
77 | 30-JUN-05 gcheng 4143586. Added another version to the overloaded
78 | Generate_Default_Load_Member procedure.
79 | Also extensively modified the existing versions.
80 | Also modified Get_Default_Dim_Member to make sure
81 | it exits when OA Param validation fails.
82 | 26-JUL-05 ghall 4503014. Added user messages for Attribute errors
83 | in Relative_Cal_Period; changed WHEN OTHERS exception
84 | to WHEN e_error, so that database errors can
85 | pass through (for now, anyway).
86 | 24-OCT-05 tmoore 4619062. Added Get_Dim_Member_Display_Code.
87 | 21-NOV-05 rflippo 4749235 Modified get_default_dim_member (1) - set
88 | variable v_member_code to be typed as varchar2
89 | so the procedure will work for both non-value set
90 | and value set dims
91 | 30-JAN-06 gcheng 5011140 (FP:4596447) . Added an optional parameter
92 | v120.9 p_table_name to UnRegister_Data_Location.
93 | 17-FEB-06 rflippo Bug#5040996 - added support for Composite dimensions
94 | in v120.10 to Get_Dim_Member_ID function.
95 | 27-FEB-06 rflippo Bug#5065490 Performance improvement for
96 | Dimension_Value_Set_ID function when called for VS view
97 | 09-MAR-06 rflippo Bug#5065490 - modified return statement for
98 | Dimension_Value_Set_ID function to be nvl
99 | because DHM calls the function for non-vsr dims
100 | 17-MAR-06 rflippo Bug#5102692 Overload Generate_Member_ID for Cal Period
101 | dimension;
102 | 04-AUG-06 rflippo Bug 5060702 modify get_cal_period_id function to be
103 | more performant
104 | 23-AUG-06 rflippo Bug#5486589 Modify logic so that if -1 passed in as the
105 | Cal Period Hier ID then it doesn't try to validate it.
106 | 24-AUG-06 nmartine Bug 5473131. Added Get_Dim_Member_Name.
107 | 23-MAR-07 rflippo MappingWizard project - modify Dimension_Value_Set_Id
108 | API to return -1 if passed in a non-vsr dimension
109 | 01-AUG-07 gdonthir Bug#5604779
110 +=========================================================================*/
111
112 -----------------------
113 -- Package Constants --
114 -----------------------
115 c_resp_app_id CONSTANT NUMBER := FND_GLOBAL.RESP_APPL_ID;
116
117 c_user_id CONSTANT NUMBER := FND_GLOBAL.USER_ID;
118 c_login_id NUMBER := FND_GLOBAL.Login_Id;
119
120 c_module_pkg CONSTANT VARCHAR2(80) := 'fem.plsql.fem_dimension_util_pkg';
121 G_PKG_NAME CONSTANT VARCHAR2(30) := 'FEM_DIMENSION_UTIL_PKG';
122
123 f_set_status BOOLEAN;
124
125 c_log_level_1 CONSTANT NUMBER := fnd_log.level_statement;
126 c_log_level_2 CONSTANT NUMBER := fnd_log.level_procedure;
127 c_log_level_3 CONSTANT NUMBER := fnd_log.level_event;
128 c_log_level_4 CONSTANT NUMBER := fnd_log.level_exception;
129 c_log_level_5 CONSTANT NUMBER := fnd_log.level_error;
130 c_log_level_6 CONSTANT NUMBER := fnd_log.level_unexpected;
131
132 -----------------------
133 -- Package Variables --
134 -----------------------
135 v_module_log VARCHAR2(255);
136
137 v_session_ledger_id NUMBER := NULL;
138
139 g_cache_ledger_id NUMBER := NULL; -- this replaces v_session_ledger_id for
140 -- use with the Dimension_Value_Set_ID API
141 g_cache_dimension_id NUMBER := NULL; -- cached dimension_id
142 g_cache_dim_vs_id NUMBER := NULL; -- cached value set
143
144 v_varchar VARCHAR2(255);
145
146 -- v_attr_label VARCHAR2(30);
147 -- v_attr_value VARCHAR2(150);
148
149 v_token_value VARCHAR2(150);
150 v_token_trans VARCHAR2(1);
151
152 v_msg_text VARCHAR2(4000);
153
154 gv_prg_msg VARCHAR2(2000);
155 gv_callstack VARCHAR2(2000);
156
157 ------------------------
158 -- Package Exceptions --
159 ------------------------
160 e_bad_param_value EXCEPTION;
161 e_null_param_value EXCEPTION;
162 e_no_value_found EXCEPTION;
163 e_many_values_found EXCEPTION;
164 e_no_version_name EXCEPTION;
165 e_bad_dim_id EXCEPTION;
166 e_dup_mem_id EXCEPTION;
167 e_user_exception EXCEPTION;
168 e_dup_display_code EXCEPTION;
169 e_req_attr_assign EXCEPTION;
170 e_FEM_XDIM_UTIL_ATTR_NODEFAULT EXCEPTION;
171 e_unexp EXCEPTION;
172 e_error EXCEPTION;
173
174 /*************************************************************************
175
176 FEM_Initialize
177
178 This procuedure sets a global variable storing the Ledger ID so that it
179 can be available to other subprograms in the package.
180
181 *************************************************************************/
182
183 PROCEDURE FEM_Initialize (
184 p_ledger_id IN NUMBER
185 ) IS
186 BEGIN
187 v_session_ledger_id := p_ledger_id;
188 End FEM_Initialize;
189
190 /*************************************************************************
191
192 Ledger_From_Session
193
194 This function returns the Ledger ID that was set with FEM_Initialize
195
196 *************************************************************************/
197
198 FUNCTION Ledger_From_Session
199 RETURN NUMBER
200 IS
201 BEGIN
202 RETURN v_session_ledger_id;
203 END Ledger_From_Session;
204
205 /*************************************************************************
206
207 Application_Group_ID
208
209 *************************************************************************/
210
211 FUNCTION Application_Group_ID
212 RETURN NUMBER
213 IS
214 v_app_grp_id NUMBER;
215 BEGIN
216
217 SELECT application_group_id
218 INTO v_app_grp_id
219 FROM fem_applications
220 WHERE application_id = c_resp_app_id;
221
222 RETURN v_app_grp_id;
223
224 EXCEPTION
225 WHEN no_data_found THEN
226 RETURN -1;
227
228 END Application_Group_ID;
229
230 /*************************************************************************
231
232 Is_Ledger_ID_Valid
233
234 *************************************************************************/
235
236 FUNCTION Is_Ledger_ID_Valid (
237 p_ledger_id IN NUMBER
238 ) RETURN VARCHAR2
239 IS
240 v_ledger_id NUMBER;
241 BEGIN
242
243 SELECT ledger_id
244 INTO v_ledger_id
245 FROM fem_ledgers_b
246 WHERE ledger_id = p_ledger_id;
247
248 RETURN 'Y';
249
250 EXCEPTION
251 WHEN no_data_found THEN
252 RETURN 'N';
253
254 END Is_Ledger_ID_Valid;
255
256 /*************************************************************************
257
258 Is_Dimension_ID_Valid
259
260 *************************************************************************/
261
262 FUNCTION Is_Dimension_ID_Valid (
263 p_dimension_id IN NUMBER
264 ) RETURN VARCHAR2
265 IS
266 v_dimension_id NUMBER;
267 BEGIN
268
269 SELECT dimension_id
270 INTO v_dimension_id
271 FROM fem_xdim_dimensions
272 WHERE dimension_id = p_dimension_id;
273
274 RETURN 'Y';
275
276 EXCEPTION
277 WHEN no_data_found THEN
278 RETURN 'N';
279
280 END Is_Dimension_ID_Valid;
281
282 /*************************************************************************
283
284 Global_VS_Combo_ID
285
286 Ths procedure obtains the Global VS Combo attribute assignment of the
287 current Ledger. The current Ledger is determined in any of the
288 following ways:
289 a) directly passed in as a parameter
290 b) set by the FEM_INITIALIZE procedure
291 c) from the Set of Books user profile
292
293 *************************************************************************/
294
295 FUNCTION Global_VS_Combo_ID (
296 p_ledger_id IN NUMBER,
297 x_err_code OUT NOCOPY NUMBER,
298 x_num_msg OUT NOCOPY NUMBER
299 ) RETURN NUMBER
300 IS
301 v_global_vs_id NUMBER;
302 v_ledger_id NUMBER;
303 v_dim_name VARCHAR2(80);
304 BEGIN
305
306 x_err_code := 0;
307 x_num_msg := 0;
308 IF (p_ledger_id is NULL)
309 THEN
310 IF (v_session_ledger_id IS NULL)
311 THEN
312 v_ledger_id := FND_PROFILE.VALUE_SPECIFIC (
313 c_fem_ledger,
314 fnd_global.user_id,
315 null ,null);
316 ELSE
317 v_ledger_id := v_session_ledger_id;
318 END IF;
319 ELSE
320 v_ledger_id := p_ledger_id;
321 END IF;
322
323 v_dim_name := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
324 p_dim_label => 'LEDGER');
325
326 IF (v_ledger_id is NULL)
327 THEN
328 v_token_value := v_dim_name;
329 x_err_code := 2;
330 x_num_msg := x_num_msg + 1;
331 RAISE e_null_param_value;
332
333 ELSE
334 IF (Is_Ledger_ID_Valid(v_ledger_id) = 'Y')
335 THEN
336 BEGIN
337 SELECT dim_attribute_numeric_member
338 INTO v_global_vs_id
339 FROM fem_ledgers_attr f
340 WHERE f.ledger_id = v_ledger_id
341 AND f.attribute_id =
342 (SELECT attribute_id
343 FROM fem_dim_attributes_b
344 WHERE attribute_varchar_label = 'GLOBAL_VS_COMBO')
345 AND f.version_id =
346 (SELECT version_id
347 FROM fem_dim_attr_versions_b
348 WHERE attribute_id = f.attribute_id
349 AND default_version_flag = 'Y');
350 EXCEPTION
351 WHEN no_data_found THEN
352 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
353 p_dim_label => 'LEDGER',
354 p_attr_label => 'GLOBAL_VS_COMBO');
355 x_err_code := 2;
356 x_num_msg := x_num_msg + 1;
357 RAISE e_no_value_found;
358 END;
359 ELSE
360 v_token_value := v_dim_name;
361 x_err_code := 2;
362 x_num_msg := x_num_msg + 1;
363 RAISE e_no_value_found;
364 END IF;
365 END IF;
366
367 RETURN v_global_vs_id;
368
369 EXCEPTION
370 WHEN e_null_param_value THEN
371 FEM_ENGINES_PKG.Put_Message(
372 p_app_name => 'FEM',
373 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
374 p_token1 => 'PARAM',
375 p_value1 => v_token_value);
376 RETURN -1;
377
378 WHEN e_no_value_found THEN
379 FEM_ENGINES_PKG.Put_Message(
380 p_app_name => 'FEM',
381 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
382 p_token1 => 'ENTITY',
383 p_value1 => v_token_value);
384 RETURN -1;
385
386 END Global_VS_Combo_ID;
387
388 --------------------------------------------------------------------------
389
390 FUNCTION Global_VS_Combo_ID (
391 p_api_version IN NUMBER DEFAULT c_api_version,
392 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
393 p_commit IN VARCHAR2 DEFAULT c_false,
394 p_encoded IN VARCHAR2 DEFAULT c_true,
395 x_return_status OUT NOCOPY VARCHAR2,
396 x_msg_count OUT NOCOPY NUMBER,
397 x_msg_data OUT NOCOPY VARCHAR2,
398 p_ledger_id IN NUMBER
399 ) RETURN NUMBER
400 IS
404 BEGIN
401 v_global_vs_id NUMBER;
402 v_ledger_id NUMBER;
403 v_dim_name VARCHAR2(80);
405
406 x_return_status := c_success;
407
408 Validate_OA_Params (
409 p_api_version => p_api_version,
410 p_init_msg_list => p_init_msg_list,
411 p_commit => p_commit,
412 p_encoded => p_encoded,
413 x_return_status => x_return_status);
414
415 IF (x_return_status <> c_success)
416 THEN
417 FND_MSG_PUB.Count_and_Get(
418 p_encoded => c_false,
419 p_count => x_msg_count,
420 p_data => x_msg_data);
421 RETURN -1;
422 END IF;
423
424 IF (p_ledger_id is NULL)
425 THEN
426 IF (v_session_ledger_id IS NULL)
427 THEN
428 v_ledger_id := FND_PROFILE.VALUE_SPECIFIC (
429 c_fem_ledger,
430 fnd_global.user_id,
431 null ,null);
432 ELSE
433 v_ledger_id := v_session_ledger_id;
434 END IF;
435 ELSE
436 v_ledger_id := p_ledger_id;
437 END IF;
438
439 v_dim_name := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
440 p_dim_label => 'LEDGER');
441
442 IF (v_ledger_id is NULL)
443 THEN
444 v_token_value := v_dim_name;
445 RAISE e_null_param_value;
446
447 ELSE
448 IF (Is_Ledger_ID_Valid(v_ledger_id) = 'Y')
449 THEN
450 BEGIN
451 SELECT dim_attribute_numeric_member
452 INTO v_global_vs_id
453 FROM fem_ledgers_attr f
454 WHERE f.ledger_id = v_ledger_id
455 AND f.attribute_id =
456 (SELECT attribute_id
457 FROM fem_dim_attributes_b
458 WHERE attribute_varchar_label = 'GLOBAL_VS_COMBO')
459 AND f.version_id =
460 (SELECT version_id
461 FROM fem_dim_attr_versions_b
462 WHERE attribute_id = f.attribute_id
463 AND default_version_flag = 'Y');
464 EXCEPTION
465 WHEN no_data_found THEN
466 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
467 p_dim_label => 'LEDGER',
468 p_attr_label => 'GLOBAL_VS_COMBO');
469 RAISE e_no_value_found;
470 END;
471 ELSE
472 v_token_value := v_dim_name;
473 RAISE e_no_value_found;
474 END IF;
475 END IF;
476
477 RETURN v_global_vs_id;
478
479 EXCEPTION
480 WHEN e_null_param_value THEN
481 FEM_ENGINES_PKG.Put_Message(
482 p_app_name => 'FEM',
483 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
484 p_token1 => 'PARAM',
485 p_value1 => v_token_value);
486 FND_MSG_PUB.Count_and_Get(
487 p_encoded => p_encoded,
488 p_count => x_msg_count,
489 p_data => x_msg_data);
490 x_return_status := c_error;
491 RETURN -1;
492
493 WHEN e_no_value_found THEN
494 FEM_ENGINES_PKG.Put_Message(
495 p_app_name => 'FEM',
496 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
497 p_token1 => 'ENTITY',
498 p_value1 => v_token_value);
499 FND_MSG_PUB.Count_and_Get(
500 p_encoded => p_encoded,
501 p_count => x_msg_count,
502 p_data => x_msg_data);
503 x_return_status := c_error;
504 RETURN -1;
505
506 END Global_VS_Combo_ID;
507
508 /*************************************************************************
509
510 Local_VS_Combo_ID
511
512 rflippo 10/26/2004 Due to changes in the rule sharing design for FEM.C,
513 this function now returns the Global VS Combo ID.
514 Local Combos have been obsoleted and are no longer
515 applicable to FEM.
516
517 The function returns the value for the GLOBAL_VS_COMBO
518 attribute assignment for the given ledger.
519
520 PURPOSE: This function is meant to be called by engines and UI to determine
521 the value set context for a given ledger. The returned Global combo
522 then gets attached to business rules when they are created - this
523 controls how those rules are shared.
524
525 For example - you create a Mapping Rule - the UI should call this
526 function to identify the Global Combo for that mapping rule based upon
527 the ledger under which it was created. It then
528 stores that value into FEM_OBJECT_CATALOG_B.local_vs_combo_id.
529
530 When you go to open that rule under a different ledger, the UI compares
531 the Global Combo that returns for the new Ledger with the global combo
532 stored in FEM_OBJECT_CATALOG_B.local_vs_combo_id for the rule being
533 opened.
534
535 There are 2 signatures for this function - one is OA framework
536 compatible while the other is not.
537
538 *************************************************************************/
539
540 -- Non OA framework compatible signature
541 FUNCTION Local_VS_Combo_ID (
542 p_ledger_id IN NUMBER,
543 x_err_code OUT NOCOPY NUMBER,
544 x_num_msg OUT NOCOPY NUMBER
548 v_global_vs_id NUMBER;
545 ) RETURN NUMBER
546 IS
547
549
550 BEGIN
551
552 x_err_code := 0;
553 x_num_msg := 0;
554
555 v_global_vs_id := Global_VS_Combo_ID (
556 p_ledger_id => p_ledger_id,
557 x_err_code => x_err_code,
558 x_num_msg => x_num_msg);
559
560 IF (v_global_vs_id = -1)
561 THEN
562 RAISE e_user_exception;
563 END IF;
564
565
566 RETURN v_global_vs_id;
567
568 EXCEPTION
569 WHEN e_user_exception THEN
570 RETURN -1;
571
572 END Local_VS_Combo_ID;
573
574 --------------------------------------------------------------------------
575 -- OA Framework compatible signature
576 FUNCTION Local_VS_Combo_ID (
577 p_api_version IN NUMBER DEFAULT c_api_version,
578 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
579 p_commit IN VARCHAR2 DEFAULT c_false,
580 p_encoded IN VARCHAR2 DEFAULT c_true,
581 x_return_status OUT NOCOPY VARCHAR2,
582 x_msg_count OUT NOCOPY NUMBER,
583 x_msg_data OUT NOCOPY VARCHAR2,
584 p_ledger_id IN NUMBER
585 ) RETURN NUMBER
586 IS
587 v_global_vs_id NUMBER;
588
589 BEGIN
590
591 x_return_status := c_success;
592
593 Validate_OA_Params (
594 p_api_version => p_api_version,
595 p_init_msg_list => p_init_msg_list,
596 p_commit => p_commit,
597 p_encoded => p_encoded,
598 x_return_status => x_return_status);
599
600 IF (x_return_status <> c_success)
601 THEN
602 FND_MSG_PUB.Count_and_Get(
603 p_encoded => c_false,
604 p_count => x_msg_count,
605 p_data => x_msg_data);
606 RETURN -1;
607 END IF;
608
609 v_global_vs_id := Global_VS_Combo_ID (
610 p_api_version => p_api_version,
611 p_init_msg_list => c_false,
612 p_commit => c_false,
613 p_encoded => p_encoded,
614 x_return_status => x_return_status,
615 x_msg_count => x_msg_count,
616 x_msg_data => x_msg_data,
617 p_ledger_id => p_ledger_id);
618
619 IF (v_global_vs_id = -1)
620 THEN
621 RAISE e_user_exception;
622 END IF;
623
624
625 RETURN v_global_vs_id;
626
627 EXCEPTION
628
629 WHEN e_user_exception THEN
630 RETURN -1;
631
632 END Local_VS_Combo_ID;
633
634 /*************************************************************************
635
636 Dimension_Value_Set_ID
637
638 This procedure returns the Value Set ID based upon the Global
639 Value Set of the ledger
640
641 Normally, call the overloaded version of the function
642 that has the OUT NOCOPY parameters.
643 The version that only accepts the Dimension ID parameter is called only
644 as the where condition in the Value Set context views (_VS).
645
646 2/27/2006 rflippo
647 NOTE: In order to improve performance of this function for the VS views
648 I have done the following:
649 - cached values for ledger, dimension_id and value_set
650 The function returns the cache value set whenever the
651 ledger + dimension in the cache match the ledger + dimension
652 in the user's session. This saves work because we don't
653 need to retrieve the global combo info again
654 - duplicated code for the global combo retreival from the
655 Global_VS_Combo_ID procedure in this package. This will
656 improve performance because it skips error checks that are
657 in that procedure, as well as provides more efficient access
658 by removing one calling layer
659 - duplicated code from the overloaded Dimension_Value_Set_ID
660 function. This improves performance by removing one calling
661 layer
662 The idea is to make this function as efficient as possible for
663 use with the VS views. This means doing away from with error checks
664 so that we assume that we are getting a valid ledger/dimension being
665 passed in. The function always has to call out to the
666 FND_PROFILE.value function in order to identify the ledger of the current
667 session - this is unavoidable because of the way that OA framework pools
668 sessions. However, other than this one function call, we can return
669 the value set without any additional work for the same session. This
670 means the VS views will only have to call the FND_PROFILE.value function
671 when returning rows, rather than redo all of the global combo/value
672 set retrievals.
673
674 *************************************************************************/
675
676 FUNCTION Dimension_Value_Set_ID (
677 p_dimension_id IN NUMBER,
678 p_ledger_id IN NUMBER DEFAULT NULL
679 ) RETURN NUMBER
680 IS
681 v_count NUMBER;
682 v_vsr_flag VARCHAR2(1);
683 v_current_session_ledger_id NUMBER;
684 v_global_vs_id NUMBER;
685
686 v_dim_vs_id NUMBER;
687 v_err_code NUMBER;
688 v_num_msg NUMBER;
692 SELECT count(*)
689 v_return_value_set NUMBER;
690 BEGIN
691
693 INTO v_count
694 FROM fem_xdim_dimensions
695 WHERE dimension_id = p_dimension_id;
696
697 IF v_count > 0 THEN
698 v_vsr_flag := 'Y';
699 ELSE v_vsr_flag := 'N';
700 END IF;
701
702 /****************************************************
703 If the calling app passes in the ledger, then we use that ledger
704 for determining the global value set combo info.
705 Otherwise, we compare the ledger and dimension of the user's session with the
706 Ledger and dimension in the global variable for the package -
707 if they are NOT the same, then we need to retrieve all of the global combo
708 info from the database again (and store into global variables in the
709 package).
710 However, if they are the same, we use the value set that we already have
711 cached in a global package variable
712 ******************************************************/
713 IF v_vsr_flag = 'Y' THEN
714
715 IF (p_ledger_id IS NULL) THEN
716 --Bug#5604779: Use Value_Specific to prevent caching
717 --v_current_session_ledger_id := FND_PROFILE.VALUE (c_fem_ledger);
718 v_current_session_ledger_id := FND_PROFILE.VALUE_SPECIFIC(
719 c_fem_ledger,
720 fnd_global.user_id,
721 null,null);
722 ELSE v_current_session_ledger_id := p_ledger_id;
723 END IF;
724
725 IF v_current_session_ledger_id <> nvl(g_cache_ledger_id,-1) OR
726 p_dimension_id <> nvl(g_cache_dimension_id,-1) THEN
727 g_cache_ledger_id := v_current_session_ledger_id;
728 g_cache_dimension_id := p_dimension_id;
729
730 BEGIN
731 SELECT dim_attribute_numeric_member
732 INTO v_global_vs_id
733 FROM fem_ledgers_attr f
734 WHERE f.ledger_id = v_current_session_ledger_id
735 AND f.attribute_id =
736 (SELECT attribute_id
737 FROM fem_dim_attributes_b
738 WHERE attribute_varchar_label = 'GLOBAL_VS_COMBO')
739 AND f.version_id =
740 (SELECT version_id
741 FROM fem_dim_attr_versions_b
742 WHERE attribute_id = f.attribute_id
743 AND default_version_flag = 'Y');
744 EXCEPTION
745 WHEN no_data_found THEN
746 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
747 p_dim_label => 'LEDGER',
748 p_attr_label => 'GLOBAL_VS_COMBO');
749 FEM_ENGINES_PKG.Put_Message(
750 p_app_name => 'FEM',
751 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
752 p_token1 => 'ENTITY',
753 p_value1 => v_token_value);
754 END;
755
756 BEGIN
757 SELECT value_set_id
758 INTO v_dim_vs_id
759 FROM fem_global_vs_combo_defs
760 WHERE global_vs_combo_id = v_global_vs_id
761 AND dimension_id = p_dimension_id;
762
763 g_cache_dim_vs_id := v_dim_vs_id;
764 EXCEPTION
765 WHEN no_data_found THEN
766 v_token_value := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
767 p_dim_label => 'VALUE_SET');
768 FEM_ENGINES_PKG.Put_Message(
769 p_app_name => 'FEM',
770 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
771 p_token1 => 'ENTITY',
772 p_value1 => v_token_value);
773
774 END;
775
776 END IF;
777 END IF; -- v_vsr_flag
778
779 IF v_vsr_flag = 'N' THEN
780 v_return_value_set := -1;
781 ELSE
782 v_return_value_set := nvl(g_cache_dim_vs_id,-1);
783 END IF;
784 RETURN v_return_value_set;
785
786
787 END Dimension_Value_Set_ID;
788
789 ------------------------------------------------------------------------
790
791 FUNCTION Dimension_Value_Set_ID (
792 p_dimension_id IN NUMBER,
793 p_ledger_id IN NUMBER,
794 x_err_code OUT NOCOPY NUMBER,
795 x_num_msg OUT NOCOPY NUMBER
796 ) RETURN NUMBER
797 IS
798 v_vs_id NUMBER;
799 v_global_vs_id NUMBER;
800 BEGIN
801
802 x_err_code := 0;
803 x_num_msg := 0;
804
805 IF (Is_Dimension_ID_Valid(p_dimension_id) <> 'Y')
806 THEN
807 v_token_value := 'FEM_DIMENSION_TXT';
808 v_token_trans := 'Y';
809 x_err_code := 2;
810 x_num_msg := x_num_msg + 1;
811 RAISE e_no_value_found;
812 ELSE
813 v_global_vs_id := Global_VS_Combo_ID (
814 p_ledger_id => p_ledger_id,
815 x_err_code => x_err_code,
816 x_num_msg => x_num_msg);
817 IF (v_global_vs_id = -1)
818 THEN
819 RAISE e_user_exception;
820 END IF;
821
822 BEGIN
823 SELECT value_set_id
824 INTO v_vs_id
825 FROM fem_global_vs_combo_defs
826 WHERE global_vs_combo_id = v_global_vs_id
827 AND dimension_id = p_dimension_id;
828 EXCEPTION
832 v_token_trans := 'N';
829 WHEN no_data_found THEN
830 v_token_value := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
831 p_dim_label => 'VALUE_SET');
833 x_err_code := 2;
834 x_num_msg := x_num_msg + 1;
835 RAISE e_no_value_found;
836 END;
837
838 END IF;
839
840 RETURN v_vs_id;
841
842 EXCEPTION
843 WHEN e_no_value_found THEN
844 FEM_ENGINES_PKG.Put_Message(
845 p_app_name => 'FEM',
846 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
847 p_token1 => 'ENTITY',
848 p_value1 => v_token_value,
849 p_trans1 => v_token_trans);
850 RETURN -1;
851
852 WHEN e_user_exception THEN
853 RETURN -1;
854
855 END Dimension_Value_Set_ID;
856
857 ------------------------------------------------------------------------
858
859 FUNCTION Dimension_Value_Set_ID (
860 p_api_version IN NUMBER DEFAULT c_api_version,
861 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
862 p_commit IN VARCHAR2 DEFAULT c_false,
863 p_encoded IN VARCHAR2 DEFAULT c_true,
864 x_return_status OUT NOCOPY VARCHAR2,
865 x_msg_count OUT NOCOPY NUMBER,
866 x_msg_data OUT NOCOPY VARCHAR2,
867 p_dimension_id IN NUMBER,
868 p_ledger_id IN NUMBER
869 ) RETURN NUMBER
870 IS
871 v_vs_id NUMBER;
872 v_global_vs_id NUMBER;
873 BEGIN
874
875 x_return_status := c_success;
876
877 Validate_OA_Params (
878 p_api_version => p_api_version,
879 p_init_msg_list => p_init_msg_list,
880 p_commit => p_commit,
881 p_encoded => p_encoded,
882 x_return_status => x_return_status);
883
884 IF (x_return_status <> c_success)
885 THEN
886 FND_MSG_PUB.Count_and_Get(
887 p_encoded => c_false,
888 p_count => x_msg_count,
889 p_data => x_msg_data);
890 RETURN -1;
891 END IF;
892
893 IF (Is_Dimension_ID_Valid(p_dimension_id) <> 'Y')
894 THEN
895 v_token_value := 'FEM_DIMENSION_TXT';
896 v_token_trans := 'Y';
897 x_return_status := c_error;
898 RAISE e_no_value_found;
899 ELSE
900 v_global_vs_id := Global_VS_Combo_ID (
901 p_api_version => p_api_version,
902 p_init_msg_list => c_false,
903 p_commit => c_false,
904 p_encoded => p_encoded,
905 x_return_status => x_return_status,
906 x_msg_count => x_msg_count,
907 x_msg_data => x_msg_data,
908 p_ledger_id => p_ledger_id);
909
910 IF (v_global_vs_id = -1)
911 THEN
912 RAISE e_user_exception;
913 END IF;
914
915 BEGIN
916 SELECT value_set_id
917 INTO v_vs_id
918 FROM fem_global_vs_combo_defs
919 WHERE global_vs_combo_id = v_global_vs_id
920 AND dimension_id = p_dimension_id;
921 EXCEPTION
922 WHEN no_data_found THEN
923 v_token_value := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
924 p_dim_label => 'VALUE_SET');
925 v_token_trans := 'N';
926 RAISE e_no_value_found;
927 END;
928
929 END IF;
930
931 RETURN v_vs_id;
932
933 EXCEPTION
934 WHEN e_no_value_found THEN
935 FEM_ENGINES_PKG.Put_Message(
936 p_app_name => 'FEM',
937 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
938 p_token1 => 'ENTITY',
939 p_value1 => v_token_value,
940 p_trans1 => v_token_trans);
941 FND_MSG_PUB.Count_and_Get(
942 p_encoded => p_encoded,
943 p_count => x_msg_count,
944 p_data => x_msg_data);
945 x_return_status := c_error;
946 RETURN -1;
947
948 WHEN e_user_exception THEN
949 RETURN -1;
950
951 END Dimension_Value_Set_ID;
952
953 /*************************************************************************
954
955 Is_Rule_Valid_For_Ledger
956
957 *************************************************************************/
958
959 FUNCTION Is_Rule_Valid_For_Ledger (
960 p_object_id IN NUMBER,
961 p_ledger_id IN NUMBER
962 ) RETURN VARCHAR2
963 IS
964 v_return_status VARCHAR2(1);
965 v_msg_count NUMBER;
966 v_msg_data VARCHAR2(255);
967 v_rule_vs_id NUMBER;
968 v_local_vs_id NUMBER;
969 BEGIN
970
971 v_local_vs_id := Local_VS_Combo_ID (
972 p_api_version => c_api_version,
973 p_init_msg_list => c_false,
974 p_commit => c_false,
975 p_encoded => c_true,
976 x_return_status => v_return_status,
977 x_msg_count => v_msg_count,
978 x_msg_data => v_msg_data,
979 p_ledger_id => p_ledger_id);
980
981 IF (v_local_vs_id = -1)
982 THEN
983 RETURN 'N';
984 END IF;
988 INTO v_rule_vs_id
985
986 BEGIN
987 SELECT local_vs_combo_id
989 FROM fem_object_catalog_b
990 WHERE object_id = p_object_id;
991 EXCEPTION
992 WHEN no_data_found THEN
993 RETURN 'N';
994 END;
995
996 IF (v_local_vs_id = v_rule_vs_id)
997 THEN
998 RETURN 'Y';
999 ELSE
1000 RETURN 'N';
1001 END IF;
1002
1003 END Is_Rule_Valid_For_Ledger;
1004
1005 /*************************************************************************
1006
1007 Create_Local_VS_Combo_ID
1008
1009 *************************************************************************/
1010
1011 PROCEDURE Create_Local_VS_Combo_ID
1012 IS
1013 v_app_grp NUMBER;
1014 v_global_vs_id NUMBER;
1015 BEGIN
1016
1017 SELECT application_group_id
1018 INTO v_app_grp
1019 FROM fem_applications;
1020
1021 SELECT global_vs_combo_id
1022 INTO v_global_vs_id
1023 FROM fem_global_vs_combos_b;
1024
1025 END Create_Local_VS_Combo_ID;
1026
1027
1028 /*************************************************************************
1029
1030 Relative_Cal_Period_ID
1031 Purpose: To identify an offset calendar period when given
1032 a base calendar period and an offset count, within
1033 the same level (Dimension Group) and Calendar of
1034 the base period.
1035
1036 The function works as follows:
1037
1038 It builds a list of all of the Calendar Periods for the level
1039 and Calendar of the Base Period. It orders these periods by
1040 End Date and period number. Note that because CAL_PERIOD_ID
1041 is a composite key, it allows us to simploy order by CAL_PERIOD_ID
1042 to achieve the desire sequence. This is because the first 2
1043 components of CAL_PERIOD_ID are End_Date (julian) and Period Number.
1044
1045 The function then counts up and down the list based upon the
1046 offset value.
1047
1048 Adjustment periods are considered based upon the value for a new
1049 attribute "USE_ADJ_PERIOD_FLAG" for the "CALENDAR" dimension.
1050
1051 For example - here is a possible list of Periods
1052 (notice there is a gap for AUG):
1053
1054 Calendar = Financial
1055 Level = Month
1056
1057 End Date Period Number Adjustment Period Flag? Fiscal Year
1058 JAN-31-2004 1 N 2003
1059 FEB-28-2004 2 N 2003
1060 MAR-31-2004 3 N 2003
1061 MAR-31-2004 13 Y 2003
1062 APR-30-2004 4 N 2004
1063 MAY-31-2004 5 N 2004
1064 JUN-30-2004 6 N 2004
1065 JUL-31-2004 7 N 2004
1066 SEP-30-2004 9 N 2004
1067 OCT-31-2004 10 N 2004
1068 NOV-30-2004 11 N 2004
1069 DEC-31-2004 12 N 2004
1070 DEC-31-2004 14 Y 2004
1071
1072
1073 Example1 - Assuming Adjustment Periods are counted:
1074 Base Period = JAN-31-2004
1075 Offset = +4
1076 Function returns - APR-30-2004
1077
1078 Example2 - Assuming Adjustment Periods are not counted:
1079 Base Period = JAN-31-2004
1080 Offset= +4
1081 Function returns: MAY-31-2004
1082
1083 Example3:
1084 Base Period = APR-30-2004
1085 Offset=+6
1086 Function returns: NOV-30-2004
1087
1088 Note: The function returns p_base_cal_period_id when p_per_num_offset = 0
1089 (regardless of the adjustment period attribute settings).
1090
1091 *************************************************************************/
1092
1093 FUNCTION Relative_Cal_Period_ID (
1094 p_api_version IN NUMBER DEFAULT c_api_version,
1095 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
1096 p_commit IN VARCHAR2 DEFAULT c_false,
1097 p_encoded IN VARCHAR2 DEFAULT c_true,
1098 x_return_status OUT NOCOPY VARCHAR2,
1099 x_msg_count OUT NOCOPY NUMBER,
1100 x_msg_data OUT NOCOPY VARCHAR2,
1101 p_per_num_offset IN NUMBER,
1102 p_base_cal_period_id IN NUMBER
1103 ) RETURN NUMBER
1104 IS
1105 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
1106 'fem.plsql.fem_dimension_util_pkg.relative_cal_period_id';
1107 C_LIMIT CONSTANT NUMBER := 10000; -- fetch limit
1108 e_unexp EXCEPTION;
1109
1110 TYPE cal_period_tbl_type IS TABLE OF FEM_CAL_PERIODS_B.cal_period_id%TYPE;
1111 v_cal_period_tbl cal_period_tbl_type;
1112 TYPE cal_period_cur_type IS REF CURSOR; -- define weak REF CURSOR type
1113 v_cal_period_cv cal_period_cur_type;
1114
1115 v_base_dimgrp_id FEM_CAL_PERIODS_B.calendar_id%TYPE;
1116 v_base_calendar_id FEM_CAL_PERIODS_B.dimension_group_id%TYPE;
1117 v_dim_id FEM_DIMENSIONS_B.dimension_id%TYPE;
1118 v_dim_name FEM_DIMENSIONS_TL.dimension_name%TYPE;
1119 v_dim_attr_id FEM_DIM_ATTRIBUTES_B.attribute_id%TYPE;
1120 v_dim_attr_ver_id FEM_DIM_ATTR_VERSIONS_B.version_id%TYPE;
1121 v_cal_attr_id FEM_DIM_ATTRIBUTES_B.attribute_id%TYPE;
1122 v_cal_attr_ver_id FEM_DIM_ATTR_VERSIONS_B.version_id%TYPE;
1123 v_cal_attr_name FEM_DIM_ATTRIBUTES_TL.attribute_name%TYPE;
1124 v_incl_adj_period FEM_CALENDARS_ATTR.dim_attribute_varchar_member%TYPE;
1125
1126 v_return_code NUMBER;
1127 v_sql VARCHAR2(1000);
1128 v_offset NUMBER;
1129 v_fetch_count NUMBER;
1130 v_index NUMBER;
1134 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1131 v_fetches_needed NUMBER;
1132 BEGIN
1133
1135 FEM_ENGINES_PKG.TECH_MESSAGE(
1136 p_severity => FND_LOG.level_procedure,
1137 p_module => C_MODULE,
1138 p_msg_text => 'Begin Procedure');
1139 END IF;
1140
1141 x_return_status := c_success;
1142
1143 Validate_OA_Params (
1144 p_api_version => p_api_version,
1145 p_init_msg_list => p_init_msg_list,
1146 p_commit => p_commit,
1147 p_encoded => p_encoded,
1148 x_return_status => x_return_status);
1149
1150 IF (x_return_status <> c_success)
1151 THEN
1152 FND_MSG_PUB.Count_and_Get(
1153 p_encoded => p_encoded,
1154 p_count => x_msg_count,
1155 p_data => x_msg_data);
1156 RETURN -1;
1157 END IF;
1158
1159 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1160 FEM_ENGINES_PKG.TECH_MESSAGE(
1161 p_severity => FND_LOG.level_statement,
1162 p_module => C_MODULE,
1163 p_msg_text => 'p_per_num_offset = '||to_char(p_per_num_offset));
1164 FEM_ENGINES_PKG.TECH_MESSAGE(
1165 p_severity => FND_LOG.level_statement,
1166 p_module => C_MODULE,
1167 p_msg_text => 'p_base_cal_period_id = '||to_char(p_base_cal_period_id));
1168 END IF;
1169
1170 -- Determine the dimension_group_id and calendar_id
1171 -- of the base period
1172 BEGIN
1173 SELECT calendar_id, dimension_group_id
1174 INTO v_base_calendar_id, v_base_dimgrp_id
1175 FROM fem_cal_periods_b
1176 WHERE cal_period_id = p_base_cal_period_id;
1177
1178 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1179 FEM_ENGINES_PKG.TECH_MESSAGE(
1180 p_severity => FND_LOG.level_statement,
1181 p_module => C_MODULE,
1182 p_msg_text => 'v_base_calendar_id = '||to_char(v_base_calendar_id));
1183 FEM_ENGINES_PKG.TECH_MESSAGE(
1184 p_severity => FND_LOG.level_statement,
1185 p_module => C_MODULE,
1186 p_msg_text => 'v_base_dimgrp_id = '||to_char(v_base_dimgrp_id));
1187 END IF;
1188 EXCEPTION
1189 WHEN OTHERS THEN
1190 IF FND_LOG.level_error >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1191 FEM_ENGINES_PKG.TECH_MESSAGE(
1192 p_severity => FND_LOG.level_error,
1193 p_module => C_MODULE,
1194 p_msg_text => 'Calendar period '||to_char(p_base_cal_period_id)
1195 ||' cannot be found.');
1196 END IF;
1197
1198 -- Log user message onto the message stack:
1199 -- Calendar Period 'CAL_PER' is invalid
1200 FEM_ENGINES_PKG.Put_Message(
1201 p_app_name => 'FEM',
1202 p_msg_name => 'FEM_DATAX_LDR_BAD_CAL_PER_ERR',
1203 p_token1 => 'CAL_PER',
1204 p_value1 => TO_CHAR(p_base_cal_period_id));
1205
1206 RAISE e_error;
1207 END;
1208
1209 -- Obtain the value of the calendar attribute INCLUDE_ADJ_PERIOD_FLAG
1210 -- that determines whether or not Adjustment Periods
1211 -- will be considered in the relative period calc
1212
1213 -- 1. Get the Dimension ID for Calendar.
1214 BEGIN
1215 SELECT dimension_id, dimension_name
1216 INTO v_dim_id, v_dim_name
1217 FROM fem_dimensions_vl
1218 WHERE dimension_varchar_label = 'CALENDAR';
1219
1220 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1221 FEM_ENGINES_PKG.TECH_MESSAGE(
1222 p_severity => FND_LOG.level_statement,
1223 p_module => C_MODULE,
1224 p_msg_text => 'Dimension ID of Calendar dimenions is '
1225 ||to_char(v_dim_id));
1226 END IF;
1227 EXCEPTION
1228 WHEN others THEN
1229 IF FND_LOG.level_error >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1230 FEM_ENGINES_PKG.TECH_MESSAGE(
1231 p_severity => FND_LOG.level_error,
1232 p_module => C_MODULE,
1233 p_msg_text => 'CALENDAR dimension does not exist!');
1234 END IF;
1235 RAISE e_error;
1236 END;
1237
1238 -- 2. Get the default dimension attribute id and version for
1239 -- calendar attribute INCLUDE_ADJ_PERIOD_FLAG.
1240 get_dim_attr_id_ver_id
1241 (p_dim_id => v_dim_id,
1242 p_attr_label => 'INCLUDE_ADJ_PERIOD_FLAG',
1243 x_attr_id => v_cal_attr_id,
1244 x_ver_id => v_cal_attr_ver_id,
1245 x_err_code => v_return_code);
1246
1250 p_module => C_MODULE,
1247 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1248 FEM_ENGINES_PKG.TECH_MESSAGE(
1249 p_severity => FND_LOG.level_statement,
1251 p_msg_text => 'FEM_Dimension_Util_Pkg.get_dim_attr_id_ver_id'
1252 ||'(INCLUDE_ADJ_PERIOD_FLAG) returned with return code of '
1253 ||to_char(v_return_code));
1254 END IF;
1255
1256 IF v_return_code <> 0 THEN -- if not success
1257
1258 -- Log debug message and put user user message on the message stack:
1259 -- The specified Dimension Attribute was not found. Please contact your System
1260 -- Administrator for assistance.
1261 -- Dimension: DIMENSION_VARCHAR_LABEL
1262 -- Attribute: ATTRIBUTE_VARCHAR_LABEL
1263
1264 IF FND_LOG.level_error >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1265 FEM_ENGINES_PKG.TECH_MESSAGE(
1266 p_severity => FND_LOG.level_error,
1267 p_module => C_MODULE,
1268 p_app_name => 'FEM',
1269 p_msg_name => 'FEM_ENG_NO_DIM_ATTR_VER_ERR',
1270 p_token1 => 'DIMENSION_VARCHAR_LABEL',
1271 p_value1 => v_dim_name,
1272 p_token2 => 'ATTRIBUTE_VARCHAR_LABEL',
1273 p_value2 => 'INCLUDE_ADJ_PERIOD_FLAG');
1274 END IF;
1275
1276 FEM_ENGINES_PKG.Put_Message(
1277 p_app_name => 'FEM',
1278 p_msg_name => 'FEM_ENG_NO_DIM_ATTR_VER_ERR',
1279 p_token1 => 'DIMENSION_VARCHAR_LABEL',
1280 p_value1 => v_dim_name,
1281 p_token2 => 'ATTRIBUTE_VARCHAR_LABEL',
1282 p_value2 => 'INCLUDE_ADJ_PERIOD_FLAG');
1283
1284 RAISE e_error;
1285
1286 END IF;
1287
1288 -- 3. Get the default version attribute assignment for
1289 -- calendar attribute INCLUDE_ADJ_PERIOD_FLAG.
1290 BEGIN
1291 SELECT dim_attribute_varchar_member
1292 INTO v_incl_adj_period
1293 FROM fem_calendars_attr
1294 WHERE attribute_id = v_cal_attr_id
1295 AND version_id = v_cal_attr_ver_id
1296 AND calendar_id = v_base_calendar_id;
1297
1298 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1299 FEM_ENGINES_PKG.TECH_MESSAGE(
1300 p_severity => FND_LOG.level_statement,
1301 p_module => C_MODULE,
1302 p_msg_text => 'Calendar attribute INCLUDE_ADJ_PERIOD_FLAG is set to '
1303 ||v_incl_adj_period);
1304 END IF;
1305 EXCEPTION
1306 WHEN others THEN
1307
1308 IF FND_LOG.level_error >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1309 FEM_ENGINES_PKG.TECH_MESSAGE(
1310 p_severity => FND_LOG.level_error,
1311 p_module => C_MODULE,
1312 p_msg_text => 'Calendar does not have attribute value for '
1313 ||'attribute INCLUDE_ADJ_PERIOD_FLAG');
1314 END IF;
1315
1316 -- Put user user message on the message stack:
1317 -- A Valid Attribute value was not found for the specified Dimension Attribute.
1318 -- Please contact your System Administrator for assistance.
1319 -- Dimension: DIMENSION_VARCHAR_LABEL
1320 -- Attribute: ATTRIBUTE_VARCHAR_LABEL
1321
1322 SELECT attribute_name
1323 INTO v_cal_attr_name
1324 FROM fem_dim_attributes_vl
1325 WHERE attribute_id = v_cal_attr_id;
1326
1327 FEM_ENGINES_PKG.Put_Message(
1328 p_app_name => 'FEM',
1329 p_msg_name => 'FEM_ENG_NO_DIM_ATTR_VAL_ERR',
1330 p_token1 => 'DIMENSION_VARCHAR_LABEL',
1331 p_value1 => v_dim_name,
1332 p_token2 => 'ATTRIBUTE_VARCHAR_LABEL',
1333 p_value2 => v_cal_attr_name);
1334
1335 RAISE e_error;
1336 END;
1337
1338 -- Obtain the dim attribute id and attribute version id for
1339 -- the calendar period attribute ADJ_PERIOD_FLAG
1340 -- that determines if a calendar period is an adjustment period.
1341
1342 -- 1. Get the Dimension ID for Calendar Period.
1343 BEGIN
1344 SELECT dimension_id, dimension_name
1345 INTO v_dim_id, v_dim_name
1346 FROM fem_dimensions_vl
1347 WHERE dimension_varchar_label = 'CAL_PERIOD';
1348
1349 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1350 FEM_ENGINES_PKG.TECH_MESSAGE(
1351 p_severity => FND_LOG.level_statement,
1352 p_module => C_MODULE,
1353 p_msg_text => 'Dimension ID of Calendar Period dimenions is '
1354 ||to_char(v_dim_id));
1355 END IF;
1356 EXCEPTION
1357 WHEN others THEN
1358 IF FND_LOG.level_error >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1359 FEM_ENGINES_PKG.TECH_MESSAGE(
1360 p_severity => FND_LOG.level_error,
1361 p_module => C_MODULE,
1362 p_msg_text => 'CAL_PERIOD dimension does not exist!');
1363 END IF;
1364 RAISE e_error;
1365 END;
1366
1367 -- 2. Get the default dimension attribute id and version for
1368 -- calendar period attribute ADJ_PERIOD_FLAG.
1369 get_dim_attr_id_ver_id
1370 (p_dim_id => v_dim_id,
1371 p_attr_label => 'ADJ_PERIOD_FLAG',
1372 x_attr_id => v_dim_attr_id,
1373 x_ver_id => v_dim_attr_ver_id,
1374 x_err_code => v_return_code);
1375
1376 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1380 p_msg_text => 'FEM_Dimension_Util_Pkg.get_dim_attr_id_ver_id '
1377 FEM_ENGINES_PKG.TECH_MESSAGE(
1378 p_severity => FND_LOG.level_statement,
1379 p_module => C_MODULE,
1381 ||'(INCLUDE_ADJ_PERIOD_FLAG) returned with error code of '
1382 ||to_char(v_return_code));
1383 END IF;
1384
1385 IF v_return_code <> 0 THEN -- if not success
1386
1387 -- Log a debug message and put user user message on the message stack:
1388 -- The specified Dimension Attribute was not found. Please contact your System
1389 -- Administrator for assistance.
1390 -- Dimension: DIMENSION_VARCHAR_LABEL
1391 -- Attribute: ATTRIBUTE_VARCHAR_LABEL
1392
1393 FEM_ENGINES_PKG.TECH_MESSAGE(
1394 p_severity => FND_LOG.level_error,
1395 p_module => C_MODULE,
1396 p_app_name => 'FEM',
1397 p_msg_name => 'FEM_ENG_NO_DIM_ATTR_VER_ERR',
1398 p_token1 => 'DIMENSION_VARCHAR_LABEL',
1399 p_value1 => v_dim_name,
1400 p_token2 => 'ATTRIBUTE_VARCHAR_LABEL',
1401 p_value2 => 'ADJ_PERIOD_FLAG');
1402
1403 FEM_ENGINES_PKG.Put_Message(
1404 p_app_name => 'FEM',
1405 p_msg_name => 'FEM_ENG_NO_DIM_ATTR_VER_ERR',
1406 p_token1 => 'DIMENSION_VARCHAR_LABEL',
1407 p_value1 => v_dim_name,
1408 p_token2 => 'ATTRIBUTE_VARCHAR_LABEL',
1409 p_value2 => 'ADJ_PERIOD_FLAG');
1410
1411 RAISE e_error;
1412
1413 END IF;
1414
1415 IF p_per_num_offset = 0 THEN
1416
1417 -- 0 offset returns the base period as the relative period
1418
1419 FND_MSG_PUB.Count_and_Get(
1420 p_encoded => p_encoded,
1421 p_count => x_msg_count,
1422 p_data => x_msg_data);
1423
1424 x_return_status := c_success;
1425
1426 RETURN p_base_cal_period_id;
1427
1428 END IF;
1429
1430 -- Build the dynamic sql to return the relevant calendar periods
1431 -- needed for the relative offset calcs
1432
1433 v_sql := 'SELECT CP.cal_period_id FROM fem_cal_periods_b CP';
1434
1435 IF v_incl_adj_period = 'N' THEN
1436 v_sql := v_sql||',fem_cal_periods_attr CPA';
1437 END IF;
1438
1439 v_sql := v_sql||' WHERE CP.calendar_id=:1'
1440 || ' AND CP.dimension_group_id=:2'
1441 || ' AND CP.cal_period_id';
1442 -- If offset is negative, then only look at earlier cal periods.
1443 -- Else, if offset is 0, then validate that the cal period
1444 -- being passed in actually exists.
1445 -- Else, only look at later cal periods.
1446 IF p_per_num_offset < 0 THEN
1447 v_sql := v_sql||'<';
1448 ELSIF p_per_num_offset = 0 THEN
1449 v_sql := v_sql||'=';
1450 ELSE
1451 v_sql := v_sql||'>';
1452 END IF;
1453 v_sql := v_sql||':3';
1454
1455 IF v_incl_adj_period = 'N' THEN
1456 v_sql := v_sql||' AND CP.cal_period_id=CPA.cal_period_id'
1457 ||' AND CPA.attribute_id='||to_char(v_dim_attr_id)
1458 ||' AND CPA.version_id='||to_char(v_dim_attr_ver_id)
1459 ||' AND CPA.dim_attribute_varchar_member = ''N''';
1460 END IF;
1461
1462 -- If offset is negative, then order by descending order.
1463 -- Else, order by ascending order.
1464 IF p_per_num_offset < 0 THEN
1465 v_sql := v_sql||' ORDER BY cal_period_id desc';
1466 ELSE
1467 v_sql := v_sql||' ORDER BY cal_period_id asc';
1468 END IF;
1469
1470 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1471 FEM_ENGINES_PKG.TECH_MESSAGE(
1472 p_severity => FND_LOG.level_statement,
1473 p_module => C_MODULE,
1474 p_msg_text => 'Dynamic sql is '||v_sql);
1475 END IF;
1476
1477 -- Fetch all of the cal periods for the same
1478 -- Calendar and Dimension Group into an array.
1479 -- As the number of calendar periods fetched can be large
1480 -- the bulk collect fetch is set with a limit.
1481
1482 -- If the offset parameter is 0, set the offset variable
1483 -- to 1 since the table index starts at 1.
1484 -- Otherwise, the offset variable needs to be set as
1485 -- a positive number so it can be used as the table index.
1486 IF p_per_num_offset = 0 THEN
1487 v_offset := 1;
1488 ELSE
1489 v_offset := abs(p_per_num_offset);
1490 END IF;
1491 -- Counter to keep track of number of fetches
1492 v_fetch_count := 1;
1493 -- Number of fetches needed to reach the offset number.
1494 v_fetches_needed := ceil(v_offset/C_LIMIT);
1495 -- Position of the cal period in the table, adjusted to compensate
1496 -- for the multiple fetches
1497 v_index := mod(v_offset,C_LIMIT);
1498
1499 OPEN v_cal_period_cv FOR v_sql
1500 USING v_base_calendar_id, v_base_dimgrp_id, p_base_cal_period_id;
1501 LOOP
1502 FETCH v_cal_period_cv BULK COLLECT INTO v_cal_period_tbl LIMIT C_LIMIT;
1503 -- Exit loop if there are no more rows to fetch (cv%NOTFOUND), or
1504 -- if there is no need to fetch any further as the offset
1505 -- number has already been reached.
1506 EXIT WHEN v_cal_period_cv%NOTFOUND or v_fetch_count>=v_fetches_needed;
1507 v_fetch_count := v_fetch_count + 1;
1508 END LOOP;
1509 CLOSE v_cal_period_cv;
1510
1511 IF v_index > v_cal_period_tbl.count OR v_fetch_count < v_fetches_needed THEN
1512
1516 -- Log debug and user messages:
1513 -- If number of calendar periods found is less than the offset number,
1514 -- return -1 and set return status to error.
1515
1517 -- Invalid Calendar Period Offset: CAL_PERIOD_OFFSET. The offset is greater
1518 -- than the number of existing Calendar Periods before or after the base period.
1519
1520 SELECT attribute_name
1521 INTO v_cal_attr_name
1522 FROM fem_dim_attributes_vl
1523 WHERE attribute_id = v_cal_attr_id;
1524
1525 FEM_ENGINES_PKG.TECH_MESSAGE(
1526 p_severity => FND_LOG.level_error,
1527 p_module => C_MODULE,
1528 p_app_name => 'FEM',
1529 p_msg_name => 'FEM_INVALID_PERIOD_OFFSET',
1530 p_token1 => 'CAL_PERIOD_OFFSET',
1531 p_value1 => TO_CHAR(p_per_num_offset));
1532
1533 FEM_ENGINES_PKG.Put_Message(
1534 p_app_name => 'FEM',
1535 p_msg_name => 'FEM_INVALID_PERIOD_OFFSET',
1536 p_token1 => 'CAL_PERIOD_OFFSET',
1537 p_value1 => TO_CHAR(p_per_num_offset));
1538
1539 RAISE e_error;
1540
1541 ELSE
1542 v_return_code := v_cal_period_tbl(v_index);
1543 END IF;
1544
1545 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1546 FEM_ENGINES_PKG.TECH_MESSAGE(
1547 p_severity => FND_LOG.level_statement,
1548 p_module => C_MODULE,
1549 p_msg_text => 'v_fetch_count = '||to_char(v_fetch_count));
1550 FEM_ENGINES_PKG.TECH_MESSAGE(
1551 p_severity => FND_LOG.level_statement,
1552 p_module => C_MODULE,
1553 p_msg_text => 'v_fetches_needed = '||to_char(v_fetches_needed));
1554 FEM_ENGINES_PKG.TECH_MESSAGE(
1555 p_severity => FND_LOG.level_statement,
1556 p_module => C_MODULE,
1557 p_msg_text => 'v_index = '||to_char(v_index));
1558 FEM_ENGINES_PKG.TECH_MESSAGE(
1559 p_severity => FND_LOG.level_statement,
1560 p_module => C_MODULE,
1561 p_msg_text => 'v_cal_period_tbl.count = '||to_char(v_cal_period_tbl.count));
1562 FEM_ENGINES_PKG.TECH_MESSAGE(
1563 p_severity => FND_LOG.level_statement,
1564 p_module => C_MODULE,
1565 p_msg_text => 'Returning value = '||to_char(v_return_code));
1566 END IF;
1567 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1568 FEM_ENGINES_PKG.TECH_MESSAGE(
1569 p_severity => FND_LOG.level_procedure,
1570 p_module => C_MODULE,
1571 p_msg_text => 'End Procedure');
1572 END IF;
1573
1574 FND_MSG_PUB.Count_and_Get(
1575 p_encoded => p_encoded,
1576 p_count => x_msg_count,
1577 p_data => x_msg_data);
1578
1579 x_return_status := c_success;
1580
1581 RETURN v_return_code;
1582
1583 EXCEPTION
1584
1585 WHEN e_error THEN
1586
1587 FND_MSG_PUB.Count_and_Get(
1588 p_encoded => p_encoded,
1589 p_count => x_msg_count,
1590 p_data => x_msg_data);
1591
1592 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
1593 FEM_ENGINES_PKG.TECH_MESSAGE(
1594 p_severity => FND_LOG.level_procedure,
1595 p_module => C_MODULE,
1596 p_msg_text => 'End Procedure');
1597 END IF;
1598
1599 x_return_status := c_error;
1600
1601 RETURN -1;
1602
1603 END Relative_Cal_Period_ID;
1604
1605
1606 /*************************************************************************
1607
1608 Effective_Cal_Period_ID
1609
1610 *************************************************************************/
1611
1612 FUNCTION Effective_Cal_Period_ID (
1613 p_per_num_offset IN NUMBER,
1614 p_rel_dim_grp_id IN NUMBER,
1615 p_ledger_id IN NUMBER,
1616 p_ref_cal_per_id IN NUMBER,
1617 x_err_code OUT NOCOPY NUMBER,
1618 x_num_msg OUT NOCOPY NUMBER
1619 ) RETURN NUMBER
1620 IS
1621 BEGIN
1622
1623 x_err_code := 2;
1624 x_num_msg := 0;
1625 RETURN -1;
1626
1627 END Effective_Cal_Period_Id;
1628
1629
1630 /*************************************************************************
1631
1632 Get_Cal_Period_ID
1633
1634 *************************************************************************
1635 This function is called by the OGL integration. Note
1636 that the fiscal_year does not always match the calendar year, so this
1637 procedure could return a cal_period_id where the Year of the End Date
1638 belongs in a different year than the fiscal year.
1639
1640 The above version finds the CAL_PERIOD_ID where:
1641 CALENDAR_ID (in fem_cal_periods_b) is the same as the Calendar
1642 of the CAL_PERIOD_HIER_OBJ_DEF_ID attribute of the p_ledger_id
1643
1644 DIMENSION_GROUP_ID (in fem_cal_periods_b) matches the
1645 DIMENSION_GROUP_ID from fem_dimension_grps_b where
1646 the DIMENSION_GROUP_DISPLAY_CODE = p_dim grp_dc
1647
1648 Value for the GL_PERIOD_NUM attribute (in fem_cal_periods_attr)
1649 matches the value from p_cal_per_num
1650
1651 Value for the ACCOUNTING_YEAR attribute (in fem_Cal_periods_attr)
1652 matches value in p_fiscal_year.
1653
1654 HISTORY
1658 *************************************************************************/
1655 04-AUG-06 rflippo Bug 5060702 Split single sql statement into individual
1656 statements to avoid cartesian join
1657
1659
1660 FUNCTION Get_Cal_Period_ID
1661 (p_ledger_id IN NUMBER,
1662 p_dim_grp_dc IN VARCHAR2,
1663 p_cal_per_num IN NUMBER,
1664 p_fiscal_year IN NUMBER)
1665 RETURN NUMBER IS
1666 v_calp_dim_id NUMBER;
1667 v_ledger_dim_id NUMBER;
1668
1669 v_cal_period_id NUMBER;
1670 v_periodnum_attr_id NUMBER;
1671 v_acctyear_attr_id NUMBER;
1672 v_ledgerobj_attr_id NUMBER;
1673
1674 v_periodnum_vers_id NUMBER;
1675 v_acctyear_vers_id NUMBER;
1676 v_ledgerobj_vers_id NUMBER;
1677
1678 v_ledger_calphier_id NUMBER;
1679 v_ledger_calphier_obj_id NUMBER;
1680 v_calendar_id NUMBER;
1681 BEGIN
1682
1683 SELECT dimension_id
1684 INTO v_calp_dim_id
1685 FROM fem_dimensions_b
1686 WHERE dimension_varchar_label='CAL_PERIOD';
1687
1688 SELECT dimension_id
1689 INTO v_ledger_dim_id
1690 FROM fem_dimensions_b
1691 WHERE dimension_varchar_label='LEDGER';
1692
1693
1694 SELECT attribute_id
1695 INTO v_ledgerobj_attr_id
1696 FROM fem_dim_attributes_b
1697 WHERE attribute_varchar_label='CAL_PERIOD_HIER_OBJ_DEF_ID'
1698 AND dimension_id = v_ledger_dim_id;
1699
1700 SELECT version_id
1701 INTO v_ledgerobj_vers_id
1702 FROM fem_dim_attr_versions_b
1703 WHERE attribute_id = v_ledgerobj_attr_id
1704 AND default_version_flag='Y';
1705
1706 SELECT dim_attribute_numeric_member
1707 INTO v_ledger_calphier_id
1708 FROM fem_ledgers_attr
1709 WHERE ledger_id = p_ledger_id
1710 AND attribute_id = v_ledgerobj_attr_id
1711 AND version_id = v_ledgerobj_vers_id;
1712
1713 SELECT object_id
1714 INTO v_ledger_calphier_obj_id
1715 FROM fem_object_definition_b
1716 WHERE object_definition_id = v_ledger_calphier_id;
1717
1718 SELECT calendar_id
1719 INTO v_calendar_id
1720 FROM fem_hierarchies
1721 WHERE hierarchy_obj_id = v_ledger_calphier_obj_id;
1722
1723 SELECT attribute_id
1724 INTO v_periodnum_attr_id
1725 FROM fem_dim_attributes_b
1726 WHERE attribute_varchar_label='GL_PERIOD_NUM'
1727 AND dimension_id = v_calp_dim_id;
1728
1729 SELECT attribute_id
1730 INTO v_acctyear_attr_id
1731 FROM fem_dim_attributes_b
1732 WHERE attribute_varchar_label='ACCOUNTING_YEAR'
1733 AND dimension_id = v_calp_dim_id;
1734
1735 SELECT version_id
1736 INTO v_periodnum_vers_id
1737 FROM fem_dim_attr_versions_b
1738 WHERE attribute_id = v_periodnum_attr_id
1739 AND default_version_flag = 'Y';
1740
1741 SELECT version_id
1742 INTO v_acctyear_vers_id
1743 FROM fem_dim_attr_versions_b
1744 WHERE attribute_id = v_acctyear_attr_id
1745 AND default_version_flag = 'Y';
1746
1747
1748 SELECT B.cal_period_id
1749 INTO v_cal_period_id
1750 FROM fem_cal_periods_b B,
1751 fem_cal_periods_attr N,
1752 fem_cal_periods_attr D,
1753 fem_dimension_grps_b G
1754 WHERE N.attribute_id = v_periodnum_attr_id
1755 AND N.version_id = v_periodnum_vers_id
1756 AND N.cal_period_id = B.cal_period_id
1757 AND N.number_assign_value = p_cal_per_num
1758 AND D.attribute_id = v_acctyear_attr_id
1759 AND D.version_id = v_acctyear_vers_id
1760 AND D.cal_period_id = B.cal_period_id
1761 AND D.number_assign_value = p_fiscal_year
1762 AND B.calendar_id = v_calendar_id
1763 AND G.dimension_group_id = B.dimension_group_id
1764 AND G.dimension_group_display_code = p_dim_grp_dc;
1765 RETURN v_cal_period_id;
1766
1767 EXCEPTION
1768 WHEN no_data_found THEN
1769 RETURN -1;
1770 WHEN too_many_rows THEN
1771 RETURN -1;
1772
1773 END Get_Cal_Period_ID;
1774
1775 /*************************************************************************
1776 This function is available for applications to call when they
1777 want to find the corresponding CAL_PERIOD_ID for a given end date.
1778
1779 The above version finds the CAL_PERIOD_ID where:
1780 CALENDAR_ID (in fem_cal_periods_b) is the same as the Calendar
1781 of the CAL_PERIOD_HIER_OBJ_DEF_ID attribute of the p_ledger_id
1782
1783 DIMENSION_GROUP_ID (in fem_cal_periods_b) matches the
1784 DIMENSION_GROUP_ID from fem_dimension_grps_b where
1785 the DIMENSION_GROUP_DISPLAY_CODE = p_dim grp_dc
1786
1787 Value for the GL_PERIOD_NUM attribute (in fem_cal_periods_attr)
1788 matches the value from p_cal_per_num
1789
1790 Value for the CAL_PERIOD_END_DATE attribute (in
1791 fem_Cal_periods_attr) matches value in p_cal_per_end_date.
1792
1793 04-AUG-06 rflippo Bug 5060702 Split single sql statement into individual
1794 statements to avoid cartesian join
1795 *************************************************************************/
1796
1797 FUNCTION Get_Cal_Period_ID
1798 (p_ledger_id IN NUMBER,
1799 p_dim_grp_dc IN VARCHAR2,
1800 p_cal_per_num IN NUMBER,
1801 p_cal_per_end_date IN DATE)
1802 RETURN NUMBER IS
1803 v_calp_dim_id NUMBER;
1804 v_ledger_dim_id NUMBER;
1805
1806 v_cal_period_id NUMBER;
1807 v_periodnum_attr_id NUMBER;
1808 v_enddate_attr_id NUMBER;
1809 v_ledgerobj_attr_id NUMBER;
1810
1814
1811 v_periodnum_vers_id NUMBER;
1812 v_enddate_vers_id NUMBER;
1813 v_ledgerobj_vers_id NUMBER;
1815 v_ledger_calphier_id NUMBER;
1816 v_ledger_calphier_obj_id NUMBER;
1817 v_calendar_id NUMBER;
1818
1819
1820 BEGIN
1821
1822 SELECT dimension_id
1823 INTO v_calp_dim_id
1824 FROM fem_dimensions_b
1825 WHERE dimension_varchar_label='CAL_PERIOD';
1826
1827 SELECT dimension_id
1828 INTO v_ledger_dim_id
1829 FROM fem_dimensions_b
1830 WHERE dimension_varchar_label='LEDGER';
1831
1832
1833 SELECT attribute_id
1834 INTO v_ledgerobj_attr_id
1835 FROM fem_dim_attributes_b
1836 WHERE attribute_varchar_label='CAL_PERIOD_HIER_OBJ_DEF_ID'
1837 AND dimension_id = v_ledger_dim_id;
1838
1839 SELECT version_id
1840 INTO v_ledgerobj_vers_id
1841 FROM fem_dim_attr_versions_b
1842 WHERE attribute_id = v_ledgerobj_attr_id
1843 AND default_version_flag='Y';
1844
1845 SELECT dim_attribute_numeric_member
1846 INTO v_ledger_calphier_id
1847 FROM fem_ledgers_attr
1848 WHERE ledger_id = p_ledger_id
1849 AND attribute_id = v_ledgerobj_attr_id
1850 AND version_id = v_ledgerobj_vers_id;
1851
1852 SELECT object_id
1853 INTO v_ledger_calphier_obj_id
1854 FROM fem_object_definition_b
1855 WHERE object_definition_id = v_ledger_calphier_id;
1856
1857 SELECT calendar_id
1858 INTO v_calendar_id
1859 FROM fem_hierarchies
1860 WHERE hierarchy_obj_id = v_ledger_calphier_obj_id;
1861
1862 SELECT attribute_id
1863 INTO v_periodnum_attr_id
1864 FROM fem_dim_attributes_b
1865 WHERE attribute_varchar_label='GL_PERIOD_NUM'
1866 AND dimension_id = v_calp_dim_id;
1867
1868 SELECT attribute_id
1869 INTO v_enddate_attr_id
1870 FROM fem_dim_attributes_b
1871 WHERE attribute_varchar_label='CAL_PERIOD_END_DATE'
1872 AND dimension_id = v_calp_dim_id;
1873
1874 SELECT version_id
1875 INTO v_periodnum_vers_id
1876 FROM fem_dim_attr_versions_b
1877 WHERE attribute_id = v_periodnum_attr_id
1878 AND default_version_flag = 'Y';
1879
1880 SELECT version_id
1881 INTO v_enddate_vers_id
1882 FROM fem_dim_attr_versions_b
1883 WHERE attribute_id = v_enddate_attr_id
1884 AND default_version_flag = 'Y';
1885
1886
1887 SELECT B.cal_period_id
1888 INTO v_cal_period_id
1889 FROM fem_cal_periods_b B,
1890 fem_cal_periods_attr N,
1891 fem_cal_periods_attr D,
1892 fem_dimension_grps_b G
1893 WHERE N.attribute_id = v_periodnum_attr_id
1894 AND N.version_id = v_periodnum_vers_id
1895 AND N.cal_period_id = B.cal_period_id
1896 AND N.number_assign_value = p_cal_per_num
1897 AND D.attribute_id = v_enddate_attr_id
1898 AND D.version_id = v_enddate_vers_id
1899 AND D.cal_period_id = B.cal_period_id
1903 AND G.dimension_group_display_code = p_dim_grp_dc;
1900 AND D.date_assign_value = p_cal_per_end_date
1901 AND B.calendar_id = v_calendar_id
1902 AND G.dimension_group_id = B.dimension_group_id
1904
1905 RETURN v_cal_period_id;
1906
1907 EXCEPTION
1908 WHEN no_data_found THEN
1909 RETURN -1;
1910 WHEN too_many_rows THEN
1911 RETURN -1;
1912
1913 END Get_Cal_Period_ID;
1914
1915 /*************************************************************************
1916
1917 Register_Data_Location
1918
1919 *************************************************************************/
1920
1921 PROCEDURE Register_Data_Location (
1922 p_request_id NUMBER,
1923 p_object_id NUMBER,
1924 p_table_name VARCHAR2,
1925 p_ledger_id NUMBER,
1926 p_cal_per_id NUMBER,
1927 p_dataset_cd NUMBER,
1928 p_source_cd NUMBER,
1929 p_load_status VARCHAR2 DEFAULT NULL,
1930 p_avg_bal_flag IN VARCHAR2 DEFAULT NULL,
1931 p_trans_curr IN VARCHAR2 DEFAULT NULL
1932 ) IS
1933 v_ledger_col VARCHAR2(30);
1934 v_cal_per_col VARCHAR2(30);
1935 v_dataset_col VARCHAR2(30);
1936 v_source_col VARCHAR2(30);
1937 v_bal_type_col VARCHAR2(30);
1938 v_bal_type_cd VARCHAR2(50);
1939 v_number NUMBER;
1940 v_sql_cmd VARCHAR2(32767);
1941 v_avg_balances NUMBER;
1942 BEGIN
1943 -- Verify prcedure parameters are valid
1944 IF p_load_status IS NOT NULL AND
1945 p_load_status NOT IN ('COMPLETE','INCOMPLETE') THEN
1946 RAISE e_bad_param_value;
1947 END IF;
1948
1949 IF p_avg_bal_flag IS NOT NULL AND
1950 p_avg_bal_flag NOT IN ('Y','N') THEN
1951 RAISE e_bad_param_value;
1952 END IF;
1953
1954 -- Comments by gcheng:
1955 -- From looking at the legacy code, this is what I think it is doing.
1956 --
1957 -- If load status is not given (i.e. not being called from the loader),
1958 -- make sure the dimension values actually exist on the table.
1959 -- Only register data locations if dimension values are found.
1960 --
1961 -- Not sure why the check is not necessary wen called by the loaders.
1962 -- Also, not sure why the dynamic sql selects from a hard-coded
1963 -- column name for ledger ID, and not use v_ledger_col.
1964 -- This is probably a mute issue because all existing tables
1965 -- store ledger ID in columns named ledger_id.
1966 IF (p_load_status IS NULL)
1967 THEN
1968 SELECT column_name
1969 INTO v_ledger_col
1970 FROM fem_tab_columns_b
1971 WHERE table_name = p_table_name
1972 AND dimension_id =
1973 (SELECT dimension_id
1974 FROM fem_dimensions_b
1975 WHERE dimension_varchar_label = 'LEDGER');
1976
1977 SELECT column_name
1978 INTO v_cal_per_col
1979 FROM fem_tab_columns_b
1980 WHERE table_name = p_table_name
1981 AND dimension_id =
1982 (SELECT dimension_id
1983 FROM fem_dimensions_b
1984 WHERE dimension_varchar_label = 'CAL_PERIOD');
1985
1986 SELECT column_name
1987 INTO v_dataset_col
1988 FROM fem_tab_columns_b
1989 WHERE table_name = p_table_name
1990 AND dimension_id =
1991 (SELECT dimension_id
1992 FROM fem_dimensions_b
1993 WHERE dimension_varchar_label = 'DATASET');
1994
1995 SELECT column_name
1996 INTO v_source_col
1997 FROM fem_tab_columns_b
1998 WHERE table_name = p_table_name
1999 AND dimension_id =
2000 (SELECT dimension_id
2001 FROM fem_dimensions_b
2002 WHERE dimension_varchar_label = 'SOURCE_SYSTEM');
2003
2004 v_sql_cmd :=
2005 'SELECT MIN(ledger_id)'||
2006 ' FROM '||p_table_name||
2007 ' WHERE '||v_ledger_col||' = :b_ledger_id'||
2008 ' AND '||v_cal_per_col||' = :b_cal_per_id'||
2009 ' AND '||v_dataset_col||' = :b_dataset_cd'||
2010 ' AND '||v_source_col||' = :b_source_cd';
2011
2012 EXECUTE IMMEDIATE v_sql_cmd
2013 INTO v_number
2014 USING p_ledger_id,
2015 p_cal_per_id,
2016 p_dataset_cd,
2017 p_source_cd;
2018 ELSE
2019 v_number := 0;
2020 END IF;
2021
2022 IF (v_number IS NOT NULL)
2023 THEN
2024 -- Grab the dataset balance type code
2025 SELECT attribute_value_column_name
2026 INTO v_bal_type_col
2027 FROM fem_dim_attributes_b
2028 WHERE dimension_id =
2029 (SELECT dimension_id
2030 FROM fem_dimensions_b
2031 WHERE dimension_varchar_label = 'DATASET')
2032 AND attribute_varchar_label = 'DATASET_BALANCE_TYPE_CODE';
2033
2034 v_sql_cmd :=
2035 'SELECT '||v_bal_type_col||
2036 ' FROM fem_datasets_attr A,fem_dim_attr_versions_b V'||
2037 ' WHERE dataset_code = :b_dataset_cd'||
2038 ' AND A.attribute_id = '||
2039 ' (SELECT attribute_id'||
2040 ' FROM fem_dim_attributes_b'||
2041 ' WHERE dimension_id ='||
2042 ' (SELECT dimension_id'||
2043 ' FROM fem_dimensions_b'||
2044 ' WHERE dimension_varchar_label = ''DATASET'')'||
2045 ' AND attribute_varchar_label = ''DATASET_BALANCE_TYPE_CODE'')'||
2049
2046 ' AND A.attribute_id = V.attribute_id'||
2047 ' AND A.version_id = V.version_id'||
2048 ' AND V.default_version_flag = ''Y''';
2050 EXECUTE IMMEDIATE v_sql_cmd
2051 INTO v_bal_type_cd
2052 USING p_dataset_cd;
2053
2054 -- Determin avg_balances value.
2055 -- avg_balances should be 1 if avg_bal_flag is 'Y',
2056 -- 0 if avg_bal_flag is 'N', and null otherwise.
2057 IF p_avg_bal_flag = 'Y' THEN
2058 v_avg_balances := 1;
2059 ELSIF p_avg_bal_flag = 'N' THEN
2060 v_avg_balances := 0;
2061 ELSE
2062 v_avg_balances := NULL;
2063 END IF;
2064
2065 -- Insert into fem_dl_dimensions.
2066 -- If duplicate, update load status and avg_balances
2067 BEGIN
2068 INSERT INTO fem_dl_dimensions
2069 (request_id,
2070 object_id,
2071 ledger_id,
2072 cal_period_id,
2073 dataset_code,
2074 source_system_code,
2075 balance_type_code,
2076 table_name,
2077 avg_balances,
2078 creation_date,
2079 created_by,
2080 last_updated_by,
2081 last_update_date,
2082 last_update_login,
2083 load_status,
2084 reprocess_errors_flag,
2085 object_version_number)
2086 VALUES
2087 (p_request_id,
2088 p_object_id,
2089 p_ledger_id,
2090 p_cal_per_id,
2091 p_dataset_cd,
2092 p_source_cd,
2093 v_bal_type_cd,
2094 p_table_name,
2095 v_avg_balances,
2096 sysdate,
2097 c_user_id,
2098 c_user_id,
2099 sysdate,
2100 null,
2101 p_load_status,
2102 'N',
2103 1);
2104 EXCEPTION
2105 WHEN dup_val_on_index THEN
2106 UPDATE fem_dl_dimensions
2107 SET load_status = p_load_status,
2108 avg_balances = v_avg_balances,
2109 last_updated_by = c_user_id,
2110 last_update_date = sysdate
2111 WHERE request_id = p_request_id
2112 AND object_id = p_object_id
2113 AND ledger_id = p_ledger_id
2114 AND cal_period_id = p_cal_per_id
2115 AND dataset_code = p_dataset_cd
2116 AND source_system_code = p_source_cd
2117 AND table_name = p_table_name;
2118 END;
2119
2120 -- If p_trans_curr is not null, insert into fem_dl_trans_curr
2121 -- Do nothing if inserting duplicate row.
2122 IF p_trans_curr IS NOT NULL THEN
2123 BEGIN
2124 INSERT INTO fem_dl_trans_curr
2125 (request_id,
2126 object_id,
2127 ledger_id,
2128 cal_period_id,
2129 dataset_code,
2130 source_system_code,
2131 table_name,
2132 translated_currency,
2133 creation_date,
2134 created_by,
2135 last_updated_by,
2136 last_update_date,
2137 last_update_login,
2138 object_version_number)
2139 VALUES
2140 (p_request_id,
2141 p_object_id,
2142 p_ledger_id,
2143 p_cal_per_id,
2144 p_dataset_cd,
2145 p_source_cd,
2146 p_table_name,
2147 p_trans_curr,
2148 sysdate,
2149 c_user_id,
2150 c_user_id,
2151 sysdate,
2152 null,
2153 1);
2154 EXCEPTION WHEN dup_val_on_index THEN null;
2155 END;
2156 END IF;
2157 END IF;
2158
2159 END Register_Data_Location;
2160
2161
2162 /*************************************************************************
2163
2164 UnRegister_Data_Location
2165
2166 *************************************************************************/
2170 p_object_id IN NUMBER,
2167
2168 PROCEDURE UnRegister_Data_Location (
2169 p_request_id IN NUMBER,
2171 p_table_name IN VARCHAR2 DEFAULT NULL
2172 ) IS
2173 -- =========================================================================
2174 -- Purpose
2175 -- Given an object execution, check if it has been chained to other
2176 -- object executions. If yes, this procedure also returns one
2177 -- of the object executions chained to the given object execution.
2178 -- History
2179 -- 01-30-06 G Cheng Bug 4596447. Created.
2180 -- Arguments
2181 -- p_request_id Object execution Concurrent Request ID
2182 -- p_object_id Object execution Object ID
2183 -- p_table_name Table name (Optional)
2184 -- Logic
2185 -- If the optional p_table_name parameter is provided, delete
2186 -- data locations information for just one table. Otherwise,
2187 -- remove data locations information for all tables associated with
2188 -- the object execution.
2189 -- =========================================================================
2190 BEGIN
2191
2192 -- If p_table_name is not passed, then unregister the whole object execution.
2193 -- Otherwise, just unregister the data locations for the table.
2194 IF p_table_name IS NULL THEN
2195 DELETE FROM fem_dl_dimensions
2196 WHERE request_id = p_request_id
2197 AND object_id = p_object_id;
2198
2199 DELETE FROM fem_dl_trans_curr
2200 WHERE request_id = p_request_id
2201 AND object_id = p_object_id;
2202 ELSE
2203 DELETE FROM fem_dl_dimensions
2204 WHERE request_id = p_request_id
2205 AND object_id = p_object_id
2206 AND table_name = p_table_name;
2207
2208 DELETE FROM fem_dl_trans_curr
2209 WHERE request_id = p_request_id
2210 AND object_id = p_object_id
2211 AND table_name = p_table_name;
2212 END IF;
2213 END UnRegister_Data_Location;
2214
2215 /*************************************************************************
2216
2217 Generate_Member_ID
2218
2219 *************************************************************************/
2220
2221 FUNCTION Generate_Member_ID (
2222 p_dim_id IN NUMBER
2223 ) RETURN NUMBER
2224 AS
2225 v_dim_label VARCHAR2(80);
2226 v_source_cd VARCHAR2(30);
2227 v_mem_id NUMBER;
2228 BEGIN
2229
2230 BEGIN
2231 SELECT dimension_varchar_label
2232 INTO v_dim_label
2233 FROM fem_dimensions_b
2234 WHERE dimension_id = p_dim_id;
2235 EXCEPTION
2236 WHEN no_data_found THEN
2237 RETURN null;
2238 END;
2239
2240 BEGIN
2241 SELECT member_id_source_code
2242 INTO v_source_cd
2243 FROM fem_xdim_dimensions
2244 WHERE dimension_id = p_dim_id
2245 AND member_id_method_code = 'FUNCTION';
2246 EXCEPTION
2247 WHEN no_data_found THEN
2248 RETURN null;
2249 END;
2250
2251 CASE v_source_cd
2252 WHEN 'DATASET' THEN
2253 SELECT fem_datasets_b_s.NEXTVAL
2254 INTO v_mem_id FROM dual;
2255 WHEN 'SOURCE_SYSTEM' THEN
2256 SELECT fem_source_systems_b_s.NEXTVAL
2257 INTO v_mem_id FROM dual;
2258 WHEN 'CALENDAR' THEN
2259 SELECT fem_calendars_b_s.NEXTVAL
2260 INTO v_mem_id FROM dual;
2261 WHEN 'FLEX' THEN
2262 SELECT fnd_flex_values_s.NEXTVAL
2263 INTO v_mem_id FROM dual;
2264 WHEN 'LEDGER' THEN
2265 SELECT gl_sets_of_books_s.NEXTVAL
2266 INTO v_mem_id FROM dual;
2267 WHEN 'ORG' THEN
2268 SELECT fem_cctr_orgs_b_s.NEXTVAL
2269 INTO v_mem_id FROM dual;
2270 WHEN 'BUDGET' THEN
2271 SELECT gl_budget_versions_s.NEXTVAL
2272 INTO v_mem_id FROM dual;
2273 WHEN 'ENCUMBRANCE' THEN
2274 SELECT gl_encumbrance_types_s.NEXTVAL
2275 INTO v_mem_id FROM dual;
2276 ELSE
2277 RETURN null;
2278 END CASE;
2279
2280 RETURN v_mem_id;
2281
2282 END Generate_Member_ID;
2283
2284 ------------------------------------------------------------------------
2285
2286 FUNCTION Generate_Member_ID (
2287 p_dim_id IN NUMBER,
2288 x_err_code OUT NOCOPY NUMBER,
2289 x_num_msg OUT NOCOPY NUMBER
2290 ) RETURN NUMBER
2291 AS
2292 v_dim_name VARCHAR2(80);
2293 v_source_cd VARCHAR2(30);
2294 v_mem_id NUMBER;
2295
2296 no_source_code EXCEPTION;
2297 BEGIN
2298
2299 x_err_code := 0;
2300 x_num_msg := 0;
2301
2302 IF (p_dim_id IS NOT NULL)
2303 THEN
2304 BEGIN
2305 SELECT dimension_name
2306 INTO v_dim_name
2307 FROM fem_dimensions_tl
2308 WHERE dimension_id = p_dim_id
2309 AND language = userenv('LANG');
2310 EXCEPTION
2311 WHEN no_data_found THEN
2312 RAISE e_bad_dim_id;
2313 END;
2314 ELSE
2315 RAISE e_null_param_value;
2316 END IF;
2317
2318 BEGIN
2319 SELECT member_id_source_code
2320 INTO v_source_cd
2321 FROM fem_xdim_dimensions
2322 WHERE dimension_id = p_dim_id
2323 AND member_id_method_code = 'FUNCTION';
2324 EXCEPTION
2325 WHEN no_data_found THEN
2326 x_err_code := 2;
2330
2327 x_num_msg := x_num_msg + 1;
2328 RAISE no_source_code;
2329 END;
2331 CASE v_source_cd
2332 WHEN 'DATASET' THEN
2333 SELECT fem_datasets_b_s.NEXTVAL
2334 INTO v_mem_id FROM dual;
2335 WHEN 'SOURCE_SYSTEM' THEN
2336 SELECT fem_source_systems_b_s.NEXTVAL
2337 INTO v_mem_id FROM dual;
2338 WHEN 'CALENDAR' THEN
2339 SELECT fem_calendars_b_s.NEXTVAL
2340 INTO v_mem_id FROM dual;
2341 WHEN 'FLEX' THEN
2342 SELECT fnd_flex_values_s.NEXTVAL
2343 INTO v_mem_id FROM dual;
2344 WHEN 'LEDGER' THEN
2345 SELECT gl_sets_of_books_s.NEXTVAL
2346 INTO v_mem_id FROM dual;
2347 WHEN 'ORG' THEN
2348 SELECT fem_cctr_orgs_b_s.NEXTVAL
2349 INTO v_mem_id FROM dual;
2350 WHEN 'BUDGET' THEN
2351 SELECT gl_budget_versions_s.NEXTVAL
2352 INTO v_mem_id FROM dual;
2353 WHEN 'ENCUMBRANCE' THEN
2354 SELECT gl_encumbrance_types_s.NEXTVAL
2355 INTO v_mem_id FROM dual;
2356 ELSE
2357 x_err_code := 2;
2358 x_num_msg := x_num_msg + 1;
2359 RAISE no_source_code;
2360 END CASE;
2361
2362 RETURN v_mem_id;
2363
2364 EXCEPTION
2365 WHEN no_source_code THEN
2366 FEM_ENGINES_PKG.Put_Message(
2367 p_app_name => 'FEM',
2368 p_msg_name => 'FEM_NO_SOURCE_CODE_ERR',
2369 p_token1 => 'DIMENSION',
2370 p_value1 => v_dim_name);
2371 RETURN -1;
2372
2373 WHEN e_bad_dim_id THEN
2374 FEM_ENGINES_PKG.PUT_MESSAGE(
2375 p_app_name => 'FEM',
2376 p_msg_name => 'FEM_BAD_DIM_ID_ERR',
2377 p_token1 => 'DIM_ID',
2378 p_value1 => p_dim_id);
2379 RETURN -1;
2380
2381 WHEN e_null_param_value THEN
2382 FEM_ENGINES_PKG.PUT_MESSAGE(
2383 p_app_name => 'FEM',
2384 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
2385 p_token1 => 'PARAM',
2386 p_value1 => 'FEM_DIMENSION_TXT',
2387 p_trans1 => 'Y');
2388 RETURN -1;
2389
2390 END Generate_Member_ID;
2391
2392 ------------------------------------------------------------------------
2393
2394 FUNCTION Generate_Member_ID (
2395 p_api_version IN NUMBER DEFAULT c_api_version,
2396 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
2397 p_commit IN VARCHAR2 DEFAULT c_false,
2398 p_encoded IN VARCHAR2 DEFAULT c_true,
2399 x_return_status OUT NOCOPY VARCHAR2,
2400 x_msg_count OUT NOCOPY NUMBER,
2401 x_msg_data OUT NOCOPY VARCHAR2,
2402 p_dim_id IN NUMBER
2403 ) RETURN NUMBER
2404 AS
2405 v_dim_name VARCHAR2(80);
2406 v_source_cd VARCHAR2(30);
2407 v_mem_id NUMBER;
2408
2409 no_source_code EXCEPTION;
2410 BEGIN
2411
2412 x_return_status := c_success;
2413
2414 Validate_OA_Params (
2415 p_api_version => p_api_version,
2416 p_init_msg_list => p_init_msg_list,
2417 p_commit => p_commit,
2418 p_encoded => p_encoded,
2419 x_return_status => x_return_status);
2420
2421 IF (x_return_status <> c_success)
2422 THEN
2423 FND_MSG_PUB.Count_and_Get(
2424 p_encoded => c_false,
2425 p_count => x_msg_count,
2426 p_data => x_msg_data);
2427 RETURN -1;
2428 END IF;
2429
2430 IF (p_dim_id IS NOT NULL)
2431 THEN
2432 BEGIN
2433 SELECT dimension_name
2434 INTO v_dim_name
2435 FROM fem_dimensions_tl
2436 WHERE dimension_id = p_dim_id
2437 AND language = userenv('LANG');
2438 EXCEPTION
2439 WHEN no_data_found THEN
2440 RAISE e_bad_dim_id;
2441 END;
2442 ELSE
2443 RAISE e_null_param_value;
2444 END IF;
2445
2446 BEGIN
2447 SELECT member_id_source_code
2448 INTO v_source_cd
2449 FROM fem_xdim_dimensions
2450 WHERE dimension_id = p_dim_id
2451 AND member_id_method_code = 'FUNCTION';
2452 EXCEPTION
2453 WHEN no_data_found THEN
2454 RAISE no_source_code;
2455 END;
2456
2457 CASE v_source_cd
2458 WHEN 'DATASET' THEN
2459 SELECT fem_datasets_b_s.NEXTVAL
2460 INTO v_mem_id FROM dual;
2461 WHEN 'SOURCE_SYSTEM' THEN
2462 SELECT fem_source_systems_b_s.NEXTVAL
2463 INTO v_mem_id FROM dual;
2464 WHEN 'CALENDAR' THEN
2465 SELECT fem_calendars_b_s.NEXTVAL
2466 INTO v_mem_id FROM dual;
2470 WHEN 'LEDGER' THEN
2467 WHEN 'FLEX' THEN
2468 SELECT fnd_flex_values_s.NEXTVAL
2469 INTO v_mem_id FROM dual;
2471 SELECT gl_sets_of_books_s.NEXTVAL
2472 INTO v_mem_id FROM dual;
2473 WHEN 'ORG' THEN
2474 SELECT fem_cctr_orgs_b_s.NEXTVAL
2475 INTO v_mem_id FROM dual;
2476 WHEN 'BUDGET' THEN
2477 SELECT gl_budget_versions_s.NEXTVAL
2478 INTO v_mem_id FROM dual;
2479 WHEN 'ENCUMBRANCE' THEN
2480 SELECT gl_encumbrance_types_s.NEXTVAL
2481 INTO v_mem_id FROM dual;
2482 ELSE
2483 RAISE no_source_code;
2484 END CASE;
2485
2486 RETURN v_mem_id;
2487
2488 EXCEPTION
2489 WHEN no_source_code THEN
2490 FEM_ENGINES_PKG.Put_Message(
2491 p_app_name => 'FEM',
2492 p_msg_name => 'FEM_NO_SOURCE_CODE_ERR',
2493 p_token1 => 'DIMENSION',
2494 p_value1 => v_dim_name);
2495 FND_MSG_PUB.Count_and_Get(
2496 p_encoded => p_encoded,
2497 p_count => x_msg_count,
2498 p_data => x_msg_data);
2499 x_return_status := c_error;
2500 RETURN -1;
2501
2502 WHEN e_bad_dim_id THEN
2503 FEM_ENGINES_PKG.PUT_MESSAGE(
2504 p_app_name => 'FEM',
2505 p_msg_name => 'FEM_BAD_DIM_ID_ERR',
2506 p_token1 => 'DIM_ID',
2507 p_value1 => p_dim_id);
2508 FND_MSG_PUB.Count_and_Get(
2509 p_encoded => p_encoded,
2510 p_count => x_msg_count,
2511 p_data => x_msg_data);
2512 x_return_status := c_error;
2513 RETURN -1;
2514
2515 WHEN e_null_param_value THEN
2516 FEM_ENGINES_PKG.PUT_MESSAGE(
2517 p_app_name => 'FEM',
2518 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
2519 p_token1 => 'PARAM',
2520 p_value1 => 'FEM_DIMENSION_TXT',
2521 p_trans1 => 'Y');
2522 FND_MSG_PUB.Count_and_Get(
2523 p_encoded => p_encoded,
2524 p_count => x_msg_count,
2525 p_data => x_msg_data);
2526 x_return_status := c_error;
2527 RETURN -1;
2528
2529 END Generate_Member_ID;
2530
2531 --------------------------------------------------------------------------
2532
2533 FUNCTION Generate_Member_ID (
2534 p_end_date IN DATE,
2535 p_period_num IN NUMBER,
2536 p_calendar_id IN NUMBER,
2537 p_dim_grp_id IN NUMBER
2538 ) RETURN NUMBER
2539 IS
2540 v_cal_per_id NUMBER;
2541 v_num_of_periods NUMBER;
2542 v_julian_date VARCHAR2(7);
2543 v_period_chr VARCHAR2(15);
2544 v_calendar_chr VARCHAR2(5);
2545 v_dim_grp_key VARCHAR2(5);
2546 BEGIN
2547
2548 SELECT TO_CHAR(p_end_date,'J')
2549 INTO v_julian_date
2550 FROM dual;
2551
2552 BEGIN
2553 SELECT T.number_assign_value
2554 INTO v_num_of_periods
2555 FROM fem_time_grp_types_attr T,
2556 fem_dimension_grps_b G,
2557 fem_dim_attributes_b A,
2558 fem_dim_attr_versions_b V
2559 WHERE G.dimension_group_id = p_dim_grp_id
2560 AND A.attribute_varchar_label = 'PERIODS_IN_YEAR'
2561 AND A.attribute_id = T.attribute_id
2562 AND G.time_group_type_code = T.time_group_type_code
2563 AND V.attribute_id = T.attribute_id
2564 AND V.version_id = T.version_id
2565 AND V.default_version_flag = 'Y';
2566 EXCEPTIOn
2567 WHEN no_data_found THEN
2568 RETURN null;
2569 WHEN too_many_rows THEN
2570 RETURN null;
2571 END;
2572
2573 -- IF (p_period_num > v_num_of_periods)
2574 -- THEN
2575 -- RETURN null;
2576 -- END IF;
2577
2578 SELECT LPAD(TO_CHAR(p_period_num),15,'0')
2579 INTO v_period_chr
2580 FROM dual;
2581
2582 BEGIN
2583 SELECT LPAD(TO_CHAR(calendar_id),5,'0')
2584 INTO v_calendar_chr
2585 FROM fem_calendars_b
2586 WHERE calendar_id = p_calendar_id;
2587 EXCEPTION
2588 WHEN no_data_found THEN
2589 RETURN null;
2590 END;
2591
2592 SELECT LPAD(TO_CHAR(time_dimension_group_key),5,'0')
2593 INTO v_dim_grp_key
2594 FROM fem_dimension_grps_b
2595 WHERE dimension_group_id = p_dim_grp_id;
2596
2597 SELECT TO_NUMBER(v_julian_date||v_period_chr||v_calendar_chr||v_dim_grp_key)
2598 INTO v_cal_per_id
2599 FROM dual;
2600
2601 RETURN v_cal_per_id;
2602
2603 END Generate_Member_ID;
2604
2605 --------------------------------------------------------------------------
2606
2607 FUNCTION Generate_Member_ID (
2608 p_end_date IN DATE,
2609 p_period_num IN NUMBER,
2610 p_calendar_dc IN VARCHAR2,
2611 p_dim_grp_dc IN VARCHAR2
2612 ) RETURN NUMBER
2613 IS
2614 v_cal_per_id NUMBER;
2615 v_num_of_periods NUMBER;
2616 v_julian_date VARCHAR2(7);
2617 v_period_chr VARCHAR2(15);
2618 v_calendar_chr VARCHAR2(5);
2619 v_dim_grp_key VARCHAR2(5);
2620 BEGIN
2621
2622 SELECT TO_CHAR(p_end_date,'J')
2623 INTO v_julian_date
2624 FROM dual;
2625
2626 BEGIN
2627 SELECT T.number_assign_value
2628 INTO v_num_of_periods
2629 FROM fem_time_grp_types_attr T,
2633 WHERE G.dimension_group_display_code = p_dim_grp_dc
2630 fem_dimension_grps_b G,
2631 fem_dim_attributes_b A,
2632 fem_dim_attr_versions_b V
2634 AND A.attribute_varchar_label = 'PERIODS_IN_YEAR'
2635 AND A.attribute_id = T.attribute_id
2636 AND G.time_group_type_code = T.time_group_type_code
2637 AND V.attribute_id = T.attribute_id
2638 AND V.version_id = T.version_id
2639 AND V.default_version_flag = 'Y';
2640 EXCEPTION
2641 WHEN no_data_found THEN
2642 RETURN null;
2643 WHEN too_many_rows THEN
2644 RETURN null;
2645 END;
2646
2647 -- IF (p_period_num > v_num_of_periods)
2648 -- THEN
2649 -- RETURN null;
2650 -- END IF;
2651
2652 SELECT LPAD(TO_CHAR(p_period_num),15,'0')
2653 INTO v_period_chr
2654 FROM dual;
2655
2656 BEGIN
2657 SELECT LPAD(TO_CHAR(calendar_id),5,'0')
2658 INTO v_calendar_chr
2659 FROM fem_calendars_b
2660 WHERE calendar_display_code = p_calendar_dc;
2661 EXCEPTION
2662 WHEN no_data_found THEN
2663 RETURN null;
2664 END;
2665
2666 SELECT LPAD(TO_CHAR(time_dimension_group_key),5,'0')
2667 INTO v_dim_grp_key
2668 FROM fem_dimension_grps_b
2669 WHERE dimension_group_display_code = p_dim_grp_dc;
2670
2671 SELECT TO_NUMBER(v_julian_date||v_period_chr||v_calendar_chr||v_dim_grp_key)
2672 INTO v_cal_per_id
2673 FROM dual;
2674
2675 RETURN v_cal_per_id;
2676
2677 END Generate_Member_ID;
2678
2679 --------------------------------------------------------------------------
2680 FUNCTION Generate_Member_ID (
2681 p_api_version IN NUMBER DEFAULT c_api_version,
2682 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
2683 p_commit IN VARCHAR2 DEFAULT c_false,
2684 p_encoded IN VARCHAR2 DEFAULT c_true,
2685 x_return_status OUT NOCOPY VARCHAR2,
2686 x_msg_count OUT NOCOPY NUMBER,
2687 x_msg_data OUT NOCOPY VARCHAR2,
2688 p_end_date IN DATE,
2689 p_period_num IN NUMBER,
2690 p_calendar_dc IN VARCHAR2,
2691 p_dim_grp_dc IN VARCHAR2
2692 ) RETURN NUMBER IS
2693
2694 v_cal_per_id NUMBER;
2695
2696 BEGIN
2697
2698 x_return_status := c_success;
2699
2700 Validate_OA_Params (
2701 p_api_version => p_api_version,
2702 p_init_msg_list => p_init_msg_list,
2703 p_commit => p_commit,
2704 p_encoded => p_encoded,
2705 x_return_status => x_return_status);
2706
2707 IF (x_return_status <> c_success)
2708 THEN
2709 FND_MSG_PUB.Count_and_Get(
2710 p_encoded => c_false,
2711 p_count => x_msg_count,
2712 p_data => x_msg_data);
2713 RETURN -1;
2714 END IF;
2715
2716 v_cal_per_id := Generate_Member_ID (p_end_date => p_end_date
2717 ,p_period_num => p_period_num
2718 ,p_calendar_dc => p_calendar_dc
2719 ,p_dim_grp_dc => p_dim_grp_dc);
2720
2721
2722 RETURN v_cal_per_id;
2723
2724 END Generate_Member_ID;
2725
2726
2727 ------------------------------------------------------------------------
2728
2729 FUNCTION Generate_Member_ID (
2730 p_end_date IN DATE,
2731 p_period_num IN NUMBER,
2732 p_calendar_id IN NUMBER,
2733 p_dim_grp_id IN NUMBER,
2734 x_err_code OUT NOCOPY NUMBER,
2735 x_num_msg OUT NOCOPY NUMBER
2736 ) RETURN NUMBER
2737 IS
2738 v_cal_per_id NUMBER;
2739 v_num_of_periods NUMBER;
2740 v_attr_value VARCHAR2(150);
2741 v_julian_date VARCHAR2(7);
2742 v_period_chr VARCHAR2(15);
2743 v_calendar_chr VARCHAR2(5);
2744 v_dim_grp_key VARCHAR2(5);
2745 BEGIN
2746
2747 x_err_code := 0;
2748 x_num_msg := 0;
2749
2750 SELECT TO_CHAR(p_end_date,'J')
2751 INTO v_julian_date
2752 FROM dual;
2753
2754 BEGIN
2755 SELECT T.number_assign_value
2756 INTO v_num_of_periods
2757 FROM fem_time_grp_types_attr T,
2758 fem_dimension_grps_b G,
2759 fem_dim_attributes_b A,
2760 fem_dim_attr_versions_b V
2761 WHERE G.dimension_group_id = p_dim_grp_id
2762 AND A.attribute_varchar_label = 'PERIODS_IN_YEAR'
2763 AND A.attribute_id = T.attribute_id
2764 AND G.time_group_type_code = T.time_group_type_code
2765 AND V.attribute_id = T.attribute_id
2766 AND V.version_id = T.version_id
2767 AND V.default_version_flag = 'Y';
2768 EXCEPTION
2769 WHEN no_data_found THEN
2770 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
2771 p_dim_label => 'TIME_GROUP_TYPE',
2772 p_attr_label => 'PERIODS_IN_YEAR');
2773 RAISE e_no_value_found;
2774 WHEN too_many_rows THEN
2775 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
2776 p_dim_label => 'TIME_GROUP_TYPE',
2777 p_attr_label => 'PERIODS_IN_YEAR');
2778 RAISE e_many_values_found;
2779 END;
2780
2781 -- IF (p_period_num > v_num_of_periods)
2782 -- THEN
2783 -- v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
2787 -- RAISE e_bad_param_value;
2784 -- p_dim_label => 'CAL_PERIOD',
2785 -- p_attr_label => 'GL_PERIOD_NUM');
2786 -- v_attr_value := TO_CHAR(p_period_num);
2788 -- END IF;
2789
2790 SELECT LPAD(TO_CHAR(p_period_num),15,'0')
2791 INTO v_period_chr
2792 FROM dual;
2793
2794 BEGIN
2795 SELECT LPAD(TO_CHAR(calendar_id),5,'0')
2796 INTO v_calendar_chr
2797 FROM fem_calendars_b
2798 WHERE calendar_id = p_calendar_id;
2799 EXCEPTION
2800 WHEN no_data_found THEN
2801 v_token_value := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
2802 p_dim_label => 'CALENDAR');
2803 v_attr_value := TO_CHAR(p_calendar_id);
2804 RAISE e_bad_param_value;
2805 END;
2806
2807 SELECT LPAD(TO_CHAR(time_dimension_group_key),5,'0')
2808 INTO v_dim_grp_key
2809 FROM fem_dimension_grps_b
2810 WHERE dimension_group_id = p_dim_grp_id;
2811
2812 SELECT TO_NUMBER(v_julian_date||v_period_chr||v_calendar_chr||v_dim_grp_key)
2813 INTO v_cal_per_id
2814 FROM dual;
2815 RETURN v_cal_per_id;
2816
2817 EXCEPTION
2818 WHEN e_bad_param_value THEN
2819 FEM_Engines_Pkg.Put_Message(
2820 p_app_name => 'FEM',
2821 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
2822 p_token1 => 'PARAM',
2823 p_value1 => v_token_value,
2824 p_trans1 => null,
2825 p_token2 => 'VALUE',
2826 p_value2 => v_attr_value);
2827 x_err_code := 2;
2828 x_num_msg := x_num_msg + 1;
2829 RETURN -1;
2830
2831 WHEN e_no_value_found THEN
2832 FEM_Engines_Pkg.Put_Message(
2833 p_app_name => 'FEM',
2834 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
2835 p_token1 => 'ENTITY',
2836 p_value1 => v_token_value);
2837 x_err_code := 2;
2838 x_num_msg := x_num_msg + 1;
2839 RETURN -1;
2840
2841 WHEN e_many_values_found THEN
2842 FEM_Engines_Pkg.Put_Message(
2843 p_app_name => 'FEM',
2844 p_msg_name => 'FEM_MANY_VALUES_FOUND_ERR',
2845 p_token1 => 'ENTITY',
2846 p_value1 => v_token_value);
2847 x_err_code := 2;
2848 x_num_msg := x_num_msg + 1;
2849 RETURN -1;
2850 END Generate_Member_ID;
2851
2852 ------------------------------------------------------------------------
2853
2854 FUNCTION Generate_Member_ID (
2855 p_api_version IN NUMBER DEFAULT c_api_version,
2856 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
2857 p_commit IN VARCHAR2 DEFAULT c_false,
2858 p_encoded IN VARCHAR2 DEFAULT c_true,
2859 x_return_status OUT NOCOPY VARCHAR2,
2860 x_msg_count OUT NOCOPY NUMBER,
2861 x_msg_data OUT NOCOPY VARCHAR2,
2862 p_end_date IN DATE,
2863 p_period_num IN NUMBER,
2864 p_calendar_id IN NUMBER,
2865 p_dim_grp_id IN NUMBER
2866 ) RETURN NUMBER
2867 IS
2868 v_cal_per_id NUMBER;
2869 v_num_of_periods NUMBER;
2870 v_julian_date VARCHAR2(7);
2871 v_period_chr VARCHAR2(15);
2872 v_calendar_chr VARCHAR2(5);
2873 v_dim_grp_key VARCHAR2(5);
2874 v_attr_value VARCHAR2(150);
2875 BEGIN
2876
2877 x_return_status := c_success;
2878
2879 Validate_OA_Params (
2880 p_api_version => p_api_version,
2881 p_init_msg_list => p_init_msg_list,
2882 p_commit => p_commit,
2883 p_encoded => p_encoded,
2884 x_return_status => x_return_status);
2885
2886 IF (x_return_status <> c_success)
2887 THEN
2888 FND_MSG_PUB.Count_and_Get(
2889 p_encoded => c_false,
2890 p_count => x_msg_count,
2891 p_data => x_msg_data);
2892 RETURN -1;
2893 END IF;
2894
2895 SELECT TO_CHAR(p_end_date,'J')
2896 INTO v_julian_date
2897 FROM dual;
2898
2899 BEGIN
2900 SELECT T.number_assign_value
2901 INTO v_num_of_periods
2902 FROM fem_time_grp_types_attr T,
2903 fem_dimension_grps_b G,
2904 fem_dim_attributes_b A,
2905 fem_dim_attr_versions_b V
2906 WHERE G.dimension_group_id = p_dim_grp_id
2907 AND A.attribute_varchar_label = 'PERIODS_IN_YEAR'
2908 AND A.attribute_id = T.attribute_id
2909 AND G.time_group_type_code = T.time_group_type_code
2910 AND V.attribute_id = T.attribute_id
2911 AND V.version_id = T.version_id
2912 AND V.default_version_flag = 'Y';
2913 EXCEPTION
2914 WHEN no_data_found THEN
2915 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
2916 p_dim_label => 'TIME_GROUP_TYPE',
2917 p_attr_label => 'PERIODS_IN_YEAR');
2918 RAISE e_no_value_found;
2919 WHEN too_many_rows THEN
2920 v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
2921 p_dim_label => 'TIME_GROUP_TYPE',
2922 p_attr_label => 'PERIODS_IN_YEAR');
2923 RAISE e_many_values_found;
2924 END;
2925
2926 -- IF (p_period_num > v_num_of_periods)
2927 -- THEN
2928 -- v_token_value := FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
2929 -- p_dim_label => 'CAL_PERIOD',
2930 -- p_attr_label => 'GL_PERIOD_NUM');
2931 -- v_attr_value := TO_CHAR(p_period_num);
2932 -- RAISE e_bad_param_value;
2936 INTO v_period_chr
2933 -- END IF;
2934
2935 SELECT LPAD(TO_CHAR(p_period_num),15,'0')
2937 FROM dual;
2938
2939 BEGIN
2940 SELECT LPAD(TO_CHAR(calendar_id),5,'0')
2941 INTO v_calendar_chr
2942 FROM fem_calendars_b
2943 WHERE calendar_id = p_calendar_id;
2944 EXCEPTION
2945 WHEN no_data_found THEN
2946 v_token_value := FEM_Dimension_Util_Pkg.Get_Dimension_Name(
2947 p_dim_label => 'CALENDAR');
2948 v_attr_value := TO_CHAR(p_calendar_id);
2949 RAISE e_bad_param_value;
2950 END;
2951
2952 SELECT LPAD(TO_CHAR(time_dimension_group_key),5,'0')
2953 INTO v_dim_grp_key
2954 FROM fem_dimension_grps_b
2955 WHERE dimension_group_id = p_dim_grp_id;
2956
2957 SELECT TO_NUMBER(v_julian_date||v_period_chr||v_calendar_chr||v_dim_grp_key)
2958 INTO v_cal_per_id
2959 FROM dual;
2960
2961 RETURN v_cal_per_id;
2962
2963 EXCEPTION
2964 WHEN e_bad_param_value THEN
2965 FEM_Engines_Pkg.Put_Message(
2966 p_app_name => 'FEM',
2967 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
2968 p_token1 => 'PARAM',
2969 p_value1 => v_token_value,
2970 p_trans1 => null,
2971 p_token2 => 'VALUE',
2972 p_value2 => v_attr_value);
2973 FND_MSG_PUB.Count_and_Get(
2974 p_encoded => p_encoded,
2975 p_count => x_msg_count,
2976 p_data => x_msg_data);
2977 x_return_status := c_error;
2978 RETURN -1;
2979
2980 WHEN e_no_value_found THEN
2981 FEM_Engines_Pkg.Put_Message(
2982 p_app_name => 'FEM',
2983 p_msg_name => 'FEM_NO_VALUE_FOUND_ERR',
2984 p_token1 => 'ENTITY',
2985 p_value1 => v_token_value);
2986 FND_MSG_PUB.Count_and_Get(
2987 p_encoded => p_encoded,
2988 p_count => x_msg_count,
2989 p_data => x_msg_data);
2990 x_return_status := c_error;
2991 RETURN -1;
2992
2993 WHEN e_many_values_found THEN
2994 FEM_Engines_Pkg.Put_Message(
2995 p_app_name => 'FEM',
2996 p_msg_name => 'FEM_MANY_VALUES_FOUND_ERR',
2997 p_token1 => 'ENTITY',
2998 p_value1 => v_token_value);
2999 FND_MSG_PUB.Count_and_Get(
3000 p_encoded => p_encoded,
3001 p_count => x_msg_count,
3002 p_data => x_msg_data);
3003 x_return_status := c_error;
3004 RETURN -1;
3005 END Generate_Member_ID;
3006
3007
3008 /*************************************************************************
3009
3010 Generate_Default_Load_Member
3011
3012 PURPOSE: This procedure creates a default member for dimensions
3013 that do not already have any members in the system.
3014 The new member is named "Default". This procedure is
3015 overloaded and each version performs a slightly different task.
3016
3017 If called with a dimension (and value set for VSR dimensions),
3018 this version will return the default member for the dimension
3019 (and value set). If a default member already exists, this
3020 version will return that default member. If members exist
3021 but no default has yet been designated, this version will
3022 return the first member that was created in the system and
3023 set that as the new default member. If no members exist, this
3024 version will create a default member and set that as the default member.
3025
3026 If called with just a value set, this version will set a default
3027 member for the value set. If a default member already exists,
3028 this version does nothing. If members exist but no default has
3029 yet been designated, this version will find the first member that
3030 was created in the system and set that as the new default member.
3031 If no members exist, this version will create a default member and
3032 set that as the default member.
3033
3034 If called with no API-specific parameters, this version generates
3035 default members for all dimensions that can be defaulted. For each
3036 Value Set Required (VSR) dimension, this version will populate all
3037 dimension value sets (FEM_VALUE_SETS_B) with the newly created
3038 default member. For each non-VSR dimension, this version will
3039 populate the dimensions metadata (FEM_XDIM_DIMENSIONS) with the
3040 default member display code.
3041
3042 When each member is created, the procedure also creates the
3043 assignments for any required attributes of the dimension.
3044 These assignments are defined in the fem_dim_attributes_b.
3045
3046 This procedure is run at installation time. It may also
3047 be called separately after installation.
3048
3049 *************************************************************************/
3050
3051 PROCEDURE Generate_Default_Load_Member (
3052 p_api_version IN NUMBER DEFAULT c_api_version,
3053 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
3054 p_commit IN VARCHAR2 DEFAULT c_false,
3055 p_encoded IN VARCHAR2 DEFAULT c_true,
3056 x_return_status OUT NOCOPY VARCHAR2,
3057 x_msg_count OUT NOCOPY NUMBER,
3058 x_msg_data OUT NOCOPY VARCHAR2,
3062 )
3059 p_dim_label IN VARCHAR2,
3060 p_vs_id IN NUMBER DEFAULT NULL,
3061 x_member_code OUT NOCOPY VARCHAR2
3063 IS
3064
3065 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
3066 'fem.plsql.fem_dimension_util_pkg.generate_default_load_member(1)';
3067 C_API_NAME CONSTANT VARCHAR2(30) := 'Genereate_Default_Load_Member';
3068
3069 v_sql VARCHAR2(8191);
3070 v_member_code VARCHAR2(250);
3071 v_member_dc VARCHAR2(250);
3072 v_member_name VARCHAR2(150);
3073 v_member_desc VARCHAR2(255);
3074 v_dim_id FEM_DIMENSIONS_B.dimension_id%TYPE;
3075 v_member_b_tab FEM_XDIM_DIMENSIONS.member_b_table_name%TYPE;
3076 v_member_col FEM_XDIM_DIMENSIONS.member_col%TYPE;
3077 v_member_dc_col FEM_XDIM_DIMENSIONS.member_display_code_col%TYPE;
3078 v_member_name_col FEM_XDIM_DIMENSIONS.member_name_col%TYPE;
3079 v_member_desc_col FEM_XDIM_DIMENSIONS.member_description_col%TYPE;
3080 v_member_data_type_code FEM_XDIM_DIMENSIONS.member_data_type_code%TYPE;
3081 v_group_use_code FEM_XDIM_DIMENSIONS.group_use_code%TYPE;
3082 v_attr_tab FEM_XDIM_DIMENSIONS.attribute_table_name%TYPE;
3083 v_vsr_flag FEM_XDIM_DIMENSIONS.value_set_required_flag%TYPE;
3084 v_default_member_dc FEM_XDIM_DIMENSIONS.default_member_display_code%TYPE;
3085 v_member_id_method_code FEM_XDIM_DIMENSIONS.member_id_method_code%TYPE;
3086 v_default_load_member_id FEM_VALUE_SETS_B.default_load_member_id%TYPE;
3087 v_member_pkg VARCHAR2(30);
3088
3089 -- This cursor retrieves all of the required attributes
3090 -- of the dimension of the value set
3091 CURSOR c_req_attr (p_dimension_id NUMBER) IS
3092 SELECT A.attribute_id,
3093 A.attribute_varchar_label,
3094 A.attribute_value_column_name,
3095 A.attribute_data_type_code,
3096 A.default_assignment,
3097 A.default_assignment_vs_id,
3098 V.version_id
3099 FROM fem_dim_attributes_b A, fem_dim_attr_versions_b V
3100 WHERE A.attribute_required_flag = 'Y'
3101 AND A.dimension_id = p_dimension_id
3102 AND V.version_id =
3103 (SELECT min(version_id)
3104 FROM fem_dim_attr_versions_b V2
3105 WHERE V2.attribute_id = A.attribute_id
3106 AND V2.default_version_flag = 'Y');
3107
3108 BEGIN
3109
3110 -- Standard Start of API savepoint
3111 SAVEPOINT gen_default_load_member1_pub;
3112
3113 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3114 FEM_ENGINES_PKG.TECH_MESSAGE(
3115 p_severity => FND_LOG.level_procedure,
3116 p_module => C_MODULE,
3117 p_msg_text => 'Begin Procedure');
3118 END IF;
3119
3120 -- Initialize return status to unexpected error
3121 x_return_status := c_unexp;
3122
3123 -- Check for call compatibility.
3124 IF NOT FND_API.Compatible_API_Call (c_api_version,
3125 p_api_version,
3126 C_API_NAME,
3127 G_PKG_NAME)
3128 THEN
3129 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3130 FEM_ENGINES_PKG.TECH_MESSAGE(
3131 p_severity => FND_LOG.level_statement,
3132 p_module => C_MODULE,
3133 p_msg_text => 'API Version ('||C_API_VERSION||') not compatible with '
3134 ||'passed in version ('||p_api_version||')');
3135 END IF;
3136 RAISE e_unexp;
3137 END IF;
3138
3139 Validate_OA_Params (
3140 p_api_version => p_api_version,
3141 p_init_msg_list => p_init_msg_list,
3142 p_commit => p_commit,
3143 p_encoded => p_encoded,
3144 x_return_status => x_return_status);
3145
3146 IF (x_return_status <> c_success) THEN
3147 RAISE e_error;
3148 END IF;
3149
3150 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3151 FEM_ENGINES_PKG.TECH_MESSAGE(
3152 p_severity => FND_LOG.level_statement,
3153 p_module => C_MODULE,
3154 p_msg_text => 'p_dim_label = '||p_dim_label);
3155 FEM_ENGINES_PKG.TECH_MESSAGE(
3156 p_severity => FND_LOG.level_statement,
3157 p_module => C_MODULE,
3158 p_msg_text => 'p_vs_id = '||to_char(p_vs_id));
3159 END IF;
3160
3161 -- Get dimension info.
3162 -- This API will only populate default members for those dimensions where
3163 -- * members can be created in DHM, i.e. not seeded or created
3164 -- through another mechanism (READ_ONLY_FLAG = 'N')
3165 -- * is not a composite dimension (COMPOSITE_DIMENSION_FLAG = 'N')
3166 -- * dimension is a not hidden dimension and shows up in DHM
3167 -- (HIER_EDITOR_MANAGED_FLAG = 'Y')
3168 BEGIN
3169 SELECT d.dimension_id,
3170 x.member_b_table_name,
3171 x.member_col,
3172 x.member_display_code_col,
3173 x.member_name_col,
3174 x.member_description_col,
3175 x.member_data_type_code,
3176 x.group_use_code,
3177 x.attribute_table_name,
3178 x.value_set_required_flag,
3179 x.member_id_method_code,
3180 x.default_member_display_code,
3181 REPLACE(x.member_b_table_name||'XYZ','_BXYZ','_PKG')
3182 INTO v_dim_id,
3183 v_member_b_tab,
3187 v_member_desc_col,
3184 v_member_col,
3185 v_member_dc_col,
3186 v_member_name_col,
3188 v_member_data_type_code,
3189 v_group_use_code,
3190 v_attr_tab,
3191 v_vsr_flag,
3192 v_member_id_method_code,
3193 v_default_member_dc,
3194 v_member_pkg
3195 FROM fem_xdim_dimensions x, fem_dimensions_b d
3196 WHERE d.dimension_varchar_label = p_dim_label
3197 AND x.read_only_flag = 'N'
3198 AND x.composite_dimension_flag = 'N'
3199 AND x.hier_editor_managed_flag = 'Y'
3200 AND x.dimension_id = d.dimension_id;
3201 EXCEPTION
3202 WHEN no_data_found THEN
3203 FEM_Engines_Pkg.Put_Message(
3204 p_app_name => 'FEM',
3205 p_msg_name => 'FEM_BAD_DIM_ID_ERR',
3206 p_token1 => 'DIM_ID',
3207 p_value1 => v_dim_id);
3208 RAISE e_error;
3209 END;
3210
3211 -- Check that value set exists if dimension is VSR
3212 IF v_vsr_flag = 'Y' THEN
3213 BEGIN
3214 SELECT default_load_member_id
3215 INTO v_default_load_member_id
3216 FROM fem_value_sets_b
3217 WHERE value_set_id = p_vs_id
3218 AND dimension_id = v_dim_id;
3219 EXCEPTION
3220 WHEN no_data_found THEN
3221 FEM_Engines_Pkg.Put_Message(
3222 p_app_name => 'FEM',
3223 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
3224 p_token1 => 'PARAM',
3225 p_value1 => 'FEM_VALUE_SET_TXT',
3226 p_trans1 => 'Y',
3227 p_token2 => 'VALUE',
3228 p_value2 => p_vs_id);
3229 RAISE e_error;
3230 END;
3231 END IF; -- v_vsr_flag = 'Y'
3232
3233 -- Initialize
3234 v_member_code := null;
3235
3236 -- If defaults already exist, verify that the member exists
3237 IF (v_vsr_flag = 'N' AND v_default_member_dc IS NOT NULL) OR
3238 (v_vsr_flag = 'Y' AND v_default_load_member_id IS NOT NULL) THEN
3239 v_sql := 'SELECT '||v_member_col||', '||v_member_dc_col
3240 ||' FROM '||v_member_b_tab;
3241 IF v_vsr_flag = 'N' THEN
3242 v_sql := v_sql||' WHERE '||v_member_dc_col||' = :1';
3243 ELSE
3244 v_sql := v_sql||' WHERE '||v_member_col||' = :1'
3245 ||' AND value_set_id = :2';
3246 END IF;
3247
3248 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3249 FEM_ENGINES_PKG.TECH_MESSAGE(
3250 p_severity => FND_LOG.level_statement,
3251 p_module => C_MODULE,
3252 p_msg_text => 'v_sql = '||v_sql);
3253 END IF;
3254
3255 BEGIN
3256 IF v_vsr_flag = 'N' THEN
3257 EXECUTE IMMEDIATE v_sql INTO v_member_code, v_member_dc USING v_default_member_dc;
3258 ELSE
3259 EXECUTE IMMEDIATE v_sql INTO v_member_code, v_member_dc USING v_default_load_member_id, p_vs_id;
3260 END IF;
3261 EXCEPTION
3262 WHEN no_data_found THEN
3263 v_default_member_dc := null;
3264 v_default_load_member_id := null;
3265 v_member_code := null;
3266 END;
3267 END IF;
3268
3269 -- If default does not exist, check if any members exist
3270 IF v_member_code IS NULL THEN
3271 -- If the dimension already has a member,
3272 -- return the first created member.
3273 v_sql := 'SELECT MAX('||v_member_col||') KEEP (DENSE_RANK FIRST ORDER BY creation_date),'
3274 ||' MAX('||v_member_dc_col||') KEEP (DENSE_RANK FIRST ORDER BY creation_date)'
3275 ||' FROM '||v_member_b_tab;
3276 IF v_vsr_flag = 'Y' THEN
3277 v_sql := v_sql||' WHERE value_set_id = :1';
3278 END IF;
3279
3280 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3281 FEM_ENGINES_PKG.TECH_MESSAGE(
3282 p_severity => FND_LOG.level_statement,
3283 p_module => C_MODULE,
3284 p_msg_text => 'v_sql = '||v_sql);
3285 END IF;
3286
3287 BEGIN
3288 IF v_vsr_flag = 'Y' THEN
3289 EXECUTE IMMEDIATE v_sql INTO v_member_code, v_member_dc USING p_vs_id;
3290 ELSE
3291 EXECUTE IMMEDIATE v_sql INTO v_member_code, v_member_dc;
3292 END IF;
3293 EXCEPTION
3294 WHEN no_data_found THEN
3295 v_member_code := null;
3296 END;
3297 END IF; -- v_member_code IS NULL
3298
3299 -- If no members exist, then create default member
3300 IF v_member_code IS NULL THEN
3301 -- the default member display code is hard coded
3302 v_member_dc := 'Default';
3303
3304 IF v_member_id_method_code = 'FUNCTION' THEN
3305 v_member_code := FEM_Dimension_Util_Pkg.Generate_Member_ID (
3306 p_api_version => 1.0,
3307 p_init_msg_list => c_false,
3308 p_commit => c_false,
3309 p_encoded => p_encoded,
3310 x_return_status => x_return_status,
3311 x_msg_count => x_msg_count,
3312 x_msg_data => x_msg_data,
3313 p_dim_id => v_dim_id);
3314 ELSE
3315 IF v_member_data_type_code = 'VARCHAR' THEN
3316 -- Display code is only necessary if the member code column
3317 -- is a surrogate key column (which should have a NUMBER data type).
3318 -- IF that is not the case, this API does not know what value to
3322 FEM_ENGINES_PKG.TECH_MESSAGE(
3319 -- use to default the display code column and errors.
3320 IF v_member_col <> v_member_dc_col THEN
3321 IF FND_LOG.level_exception >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3323 p_severity => FND_LOG.level_exception,
3324 p_module => C_MODULE,
3325 p_msg_text => 'Dimension member display code column ('||v_member_dc_col
3326 ||') must be same as member code column ('||v_member_col
3327 ||') if member data type is VARCHAR.');
3328 END IF;
3329 RAISE e_unexp;
3330 END IF; -- v_member_col <> v_member_dc_col
3331
3332 v_member_code := v_member_dc;
3333 ELSE
3334 -- If member data type is not VARCHAR, this API
3335 -- does not know what value to default so it errors.
3336 IF FND_LOG.level_exception >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3337 FEM_ENGINES_PKG.TECH_MESSAGE(
3338 p_severity => FND_LOG.level_exception,
3339 p_module => C_MODULE,
3340 p_msg_text => 'Dimension member data type ('||v_member_data_type_code
3341 ||') has to be VARCHAR if the member ID source code is not FUNCTION');
3342 END IF;
3343 RAISE e_unexp;
3344 END IF; -- v_member_data_type_code = 'VARCHAR'
3345 END IF; -- v_member_id_source_code = 'FUNCTION'
3346
3347 ----------------------------------------------------------
3348 -- Insert new member using Dimension table handler package
3349 ----------------------------------------------------------
3350
3351 -- First get the translated default member name and description
3352 FND_MESSAGE.Set_Name('FEM','FEM_DEFAULT_TXT');
3353 v_member_name := substr(FND_MESSAGE.Get,1,150);
3354 FND_MESSAGE.Set_Name('FEM','FEM_DEFAULT_MEMBER_TXT');
3355 v_member_desc := substr(FND_MESSAGE.Get,1,255);
3356
3357 v_sql :=
3358 'DECLARE v_rowid VARCHAR2(20);'||
3359 ' BEGIN '||
3360 v_member_pkg||'.INSERT_ROW('||
3361 'x_rowid => v_rowid,';
3362
3363 IF v_member_data_type_code = 'NUMBER' THEN
3364 v_sql := v_sql||'x_'||substr(v_member_col,1,28)||' => '||v_member_code||',';
3365 ELSIF v_member_data_type_code = 'VARCHAR' THEN
3366 v_sql := v_sql||'x_'||substr(v_member_col,1,28)||' => '''||v_member_code||''',';
3367 ELSE
3368 IF FND_LOG.level_exception >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3369 FEM_ENGINES_PKG.TECH_MESSAGE(
3370 p_severity => FND_LOG.level_exception,
3371 p_module => C_MODULE,
3372 p_msg_text => 'Member data type ('||v_member_data_type_code
3373 ||') must be is not NUMBER or VARCHAR.');
3374 END IF;
3375 RAISE e_unexp;
3376 END IF;
3377
3378 IF v_member_id_method_code = 'FUNCTION' THEN
3379 v_sql := v_sql||'x_'||substr(v_member_dc_col,1,28)||' => '''||v_member_dc||''',';
3380 END IF;
3381
3382 IF v_vsr_flag = 'Y' THEN
3383 v_sql := v_sql||'x_value_set_id => '||p_vs_id||',';
3384 END IF;
3385
3386 IF v_group_use_code <> 'NOT_SUPPORTED' THEN
3387 v_sql := v_sql||'x_dimension_group_id => null,';
3388 END IF;
3389
3390 v_sql := v_sql||
3391 'x_'||substr(v_member_name_col,1,28)||' => '''||v_member_name||''','||
3392 'x_'||substr(v_member_desc_col,1,28)||' => '''||v_member_desc||''','||
3393 'x_enabled_flag => ''Y'','||
3394 'x_personal_flag => ''N'','||
3395 'x_read_only_flag => ''N'','||
3396 'x_object_version_number => 1,'||
3397 'x_creation_date => sysdate,'||
3398 'x_created_by => '||c_user_id||','||
3399 'x_last_update_date => sysdate,'||
3400 'x_last_updated_by => '||c_user_id||','||
3401 'x_last_update_login => null);'||
3402 ' END;';
3403
3404 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3405 FEM_ENGINES_PKG.TECH_MESSAGE(
3406 p_severity => FND_LOG.level_statement,
3407 p_module => C_MODULE,
3408 p_msg_text => 'v_sql = '||v_sql);
3409 END IF;
3410
3411 BEGIN
3412 EXECUTE IMMEDIATE v_sql;
3413 EXCEPTION
3414 WHEN dup_val_on_index THEN
3415 FEM_Engines_Pkg.Put_Message(
3416 p_app_name => 'FEM',
3417 p_msg_name => 'FEM_DUP_NEW_MEMBER_ERR',
3418 p_token1 => 'VALUE',
3419 p_value1 => v_member_code,
3420 p_trans1 => 'N',
3421 p_token2 => 'DIMENSION',
3422 p_value2 => FEM_Dimension_Util_Pkg.Get_Dimension_Name(
3423 p_dim_id => v_dim_id));
3424 RAISE e_error;
3425 END;
3426
3427 ----------------------------------------
3428 -- Create attribute assignments for the new member,
3429 -- but only for the required attributes.
3430 -- If the assignment value is a DATE, it will be stored as a VARCHAR2
3431 -- in the Canonical date format as defined in FND_DATE package.
3432 ----------------------------------------
3433 IF v_attr_tab IS NOT NULL THEN
3434 FOR attr IN c_req_attr (v_dim_id) LOOP
3435 -- Raise error if no default assignment is found
3436 IF attr.default_assignment IS NULL THEN
3437 FEM_ENGINES_PKG.Put_Message(
3438 p_app_name => 'FEM',
3442 p_trans1 => 'N',
3439 p_msg_name => 'FEM_XDIM_UTIL_ATTR_NODEFAULT',
3440 p_token1 => 'DIMLABEL',
3441 p_value1 => p_dim_label,
3443 p_token2 => 'ATTRLABEL',
3444 p_value2 => attr.attribute_varchar_label,
3445 p_trans2 => 'N');
3446 RAISE e_error;
3447 END IF;
3448 -- Otherwise, insert the attribute assignment
3449 v_sql := 'INSERT INTO '||v_attr_tab||
3450 ' (ATTRIBUTE_ID'||
3451 ',VERSION_ID'||
3452 ','||v_member_col;
3453 IF v_vsr_flag = 'Y' THEN
3454 v_sql := v_sql||',VALUE_SET_ID';
3455 END IF;
3456 IF attr.default_assignment_vs_id IS NOT NULL THEN
3457 v_sql := v_sql||',DIM_ATTRIBUTE_VALUE_SET_ID';
3458 END IF;
3459 v_sql := v_sql||
3460 ','||attr.attribute_value_column_name||
3461 ',CREATION_DATE'||
3462 ',CREATED_BY'||
3463 ',LAST_UPDATED_BY'||
3464 ',LAST_UPDATE_DATE'||
3465 ',LAST_UPDATE_LOGIN'||
3466 ',OBJECT_VERSION_NUMBER'||
3467 ',AW_SNAPSHOT_FLAG)'||
3468 ' select '||attr.attribute_id||
3469 ','||attr.version_id||
3470 ','||v_member_code;
3471 IF v_vsr_flag = 'Y' THEN
3472 v_sql := v_sql||','||p_vs_id;
3473 END IF;
3474 IF attr.default_assignment_vs_id IS NOT NULL THEN
3475 v_sql := v_sql||','''||attr.default_assignment_vs_id||'''';
3476 END IF;
3477 -- If the attribute is a DATE, it would have been stored
3478 -- in DEFAULT_ASSIGNMENT in the canonical format.
3479 -- Otherwise, just assign it as is.
3480 IF attr.attribute_data_type_code = 'DATE' THEN
3481 v_sql := v_sql||','''||to_char(FND_DATE.canonical_to_date(attr.default_assignment))||'''';
3482 ELSE
3483 v_sql := v_sql||','''||attr.default_assignment||'''';
3484 END IF;
3485 v_sql := v_sql||
3486 ',sysdate'||
3487 ','||c_user_id||
3488 ','||c_user_id||
3489 ',sysdate'||
3490 ','||c_login_id||
3491 ','||1||
3492 ','||'''N'' from dual';
3493
3494 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3495 FEM_ENGINES_PKG.TECH_MESSAGE(
3496 p_severity => FND_LOG.level_statement,
3497 p_module => C_MODULE,
3498 p_msg_text => 'v_sql = '||v_sql);
3499 END IF;
3500
3501 EXECUTE IMMEDIATE v_sql;
3502
3503 END LOOP;
3504 END IF; -- v_attr_tab is not null
3505 END IF; -- v_member_code IS NULL
3506
3507 -- Set the default member if none exists
3508 IF v_vsr_flag = 'Y' THEN
3509 IF v_default_load_member_id IS NULL THEN
3510 UPDATE fem_value_sets_b
3511 SET default_load_member_id = to_number(v_member_code),
3512 last_update_date = sysdate,
3513 last_updated_by = c_user_id
3514 WHERE value_set_id = p_vs_id;
3515
3516 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3517 FEM_ENGINES_PKG.TECH_MESSAGE(
3518 p_severity => FND_LOG.level_statement,
3519 p_module => C_MODULE,
3520 p_msg_text => 'Updated FEM_VALUE_SETS_B.default_load_member_id = '
3521 ||v_member_code);
3522 END IF;
3523 END IF;
3524 ELSE
3525 IF v_default_member_dc IS NULL THEN
3526 UPDATE fem_xdim_dimensions
3527 SET default_member_display_code = (v_member_dc),
3528 last_update_date = sysdate,
3529 last_updated_by = c_user_id
3530 WHERE dimension_id = v_dim_id;
3531
3532 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3533 FEM_ENGINES_PKG.TECH_MESSAGE(
3534 p_severity => FND_LOG.level_statement,
3535 p_module => C_MODULE,
3536 p_msg_text => 'Updated FEM_XDIM_DIMENSIONS.default_member_display_code = '
3537 ||v_member_dc);
3538 END IF;
3539 END IF;
3540 END IF; -- v_vsr_flag = 'Y'
3541
3542 IF (p_commit = c_true) THEN
3543 COMMIT;
3544 END IF;
3545
3546 x_member_code := v_member_code;
3547 x_return_status := c_success;
3548
3549 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3550 FEM_ENGINES_PKG.TECH_MESSAGE(
3551 p_severity => FND_LOG.level_statement,
3552 p_module => C_MODULE,
3553 p_msg_text => 'x_member_code = '||x_member_code);
3554 END IF;
3555 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3556 FEM_ENGINES_PKG.TECH_MESSAGE(
3557 p_severity => FND_LOG.level_procedure,
3558 p_module => C_MODULE,
3559 p_msg_text => 'End Procedure');
3560 END IF;
3561
3562 EXCEPTION
3563 WHEN e_error THEN
3564 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3565 FEM_ENGINES_PKG.TECH_MESSAGE(
3569 END IF;
3566 p_severity => FND_LOG.level_procedure,
3567 p_module => C_MODULE,
3568 p_msg_text => 'End Procedure');
3570 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
3571 p_count => x_msg_count,
3572 p_data => x_msg_data);
3573 ROLLBACK TO gen_default_load_member1_pub;
3574 x_return_status := c_error;
3575
3576 WHEN others THEN
3577 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3578 FEM_ENGINES_PKG.TECH_MESSAGE(
3579 p_severity => FND_LOG.level_statement,
3580 p_module => C_MODULE,
3581 p_msg_text => 'Unexpected error.');
3582 FEM_ENGINES_PKG.TECH_MESSAGE(
3583 p_severity => FND_LOG.level_statement,
3584 p_module => C_MODULE,
3585 p_msg_text => SQLERRM);
3586 END IF;
3587 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3588 FEM_ENGINES_PKG.TECH_MESSAGE(
3589 p_severity => FND_LOG.level_procedure,
3590 p_module => C_MODULE,
3591 p_msg_text => 'End Procedure');
3592 END IF;
3593 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
3594 p_count => x_msg_count,
3595 p_data => x_msg_data);
3596 ROLLBACK TO gen_default_load_member1_pub;
3597 x_return_status := c_unexp;
3598
3599 END;
3600
3601 PROCEDURE Generate_Default_Load_Member (
3602 p_api_version IN NUMBER DEFAULT c_api_version,
3603 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
3604 p_commit IN VARCHAR2 DEFAULT c_false,
3605 p_encoded IN VARCHAR2 DEFAULT c_true,
3606 x_return_status OUT NOCOPY VARCHAR2,
3607 x_msg_count OUT NOCOPY NUMBER,
3608 x_msg_data OUT NOCOPY VARCHAR2,
3609 p_vs_id IN NUMBER
3610 )
3611 IS
3612 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
3613 'fem.plsql.fem_dimension_util_pkg.generate_default_load_member(2)';
3614 C_API_NAME CONSTANT VARCHAR2(30) := 'Genereate_Default_Load_Member';
3615
3616 v_dim_label FEM_DIMENSIONS_B.dimension_varchar_label%TYPE;
3617 v_def_load_id NUMBER;
3618 v_member_code VARCHAR2(38);
3619 BEGIN
3620
3621 -- Standard Start of API savepoint
3622 SAVEPOINT gen_default_load_member2_pub;
3623
3624 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3625 FEM_ENGINES_PKG.TECH_MESSAGE(
3626 p_severity => FND_LOG.level_procedure,
3627 p_module => C_MODULE,
3628 p_msg_text => 'Begin Procedure');
3629 END IF;
3630
3631 -- Initialize return status to unexpected error
3632 x_return_status := c_unexp;
3633
3634 -- Check for call compatibility.
3635 IF NOT FND_API.Compatible_API_Call (c_api_version,
3636 p_api_version,
3637 C_API_NAME,
3638 G_PKG_NAME)
3639 THEN
3640 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3641 FEM_ENGINES_PKG.TECH_MESSAGE(
3642 p_severity => FND_LOG.level_statement,
3643 p_module => C_MODULE,
3644 p_msg_text => 'API Version ('||C_API_VERSION||') not compatible with '
3645 ||'passed in version ('||p_api_version||')');
3646 END IF;
3647 RAISE e_unexp;
3648 END IF;
3649
3650 Validate_OA_Params (
3651 p_api_version => p_api_version,
3652 p_init_msg_list => p_init_msg_list,
3653 p_commit => p_commit,
3654 p_encoded => p_encoded,
3655 x_return_status => x_return_status);
3656
3657 IF (x_return_status <> c_success) THEN
3658 RAISE e_error;
3659 END IF;
3660
3661 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3662 FEM_ENGINES_PKG.TECH_MESSAGE(
3663 p_severity => FND_LOG.level_statement,
3664 p_module => C_MODULE,
3665 p_msg_text => 'p_vs_id = '||to_char(p_vs_id));
3666 END IF;
3667
3668 -------------------------------------
3669 -- Check that Value Set ID was passed
3670 -------------------------------------
3671 IF (p_vs_id IS NULL) THEN
3672 FEM_ENGINES_PKG.Put_Message(
3673 p_app_name => 'FEM',
3674 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
3675 p_token1 => 'PARAM',
3676 p_value1 => 'FEM_VALUE_SET_TXT',
3677 p_trans1 => 'Y');
3678 RAISE e_error;
3679 END IF;
3680
3681 ------------------------------
3682 -- Check that Value Set exists
3683 ------------------------------
3684 BEGIN
3685 SELECT D.dimension_varchar_label,
3686 V.default_load_member_id
3687 INTO v_dim_label,
3688 v_def_load_id
3689 FROM fem_value_sets_b V, fem_dimensions_b D
3690 WHERE V.value_set_id = p_vs_id
3691 AND V.dimension_id = D.dimension_id;
3692 EXCEPTION
3693 WHEN no_data_found THEN
3694 FEM_Engines_Pkg.Put_Message(
3695 p_app_name => 'FEM',
3696 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
3697 p_token1 => 'PARAM',
3698 p_value1 => 'FEM_VALUE_SET_TXT',
3699 p_trans1 => 'Y',
3700 p_token2 => 'VALUE',
3701 p_value2 => p_vs_id);
3705 -----------------------------------------------
3702 RAISE e_error;
3703 END;
3704
3706 -- Return if Default Load Member already exists
3707 -----------------------------------------------
3708 IF (v_def_load_id IS NULL) THEN
3709 Generate_Default_Load_Member (
3710 p_api_version => 1.0,
3711 p_init_msg_list => c_false,
3712 p_commit => c_false,
3713 p_encoded => p_encoded,
3714 x_return_status => x_return_status,
3715 x_msg_count => x_msg_count,
3716 x_msg_data => x_msg_data,
3717 p_dim_label => v_dim_label,
3718 p_vs_id => p_vs_id,
3719 x_member_code => v_member_code);
3720
3721 IF (x_return_status <> c_success) THEN
3722 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3723 FEM_ENGINES_PKG.TECH_MESSAGE(
3724 p_severity => FND_LOG.level_statement,
3725 p_module => C_MODULE,
3726 p_msg_text => 'Call to FEM_Dimension_Util_Pkg.Generate_Default_Load_Member(1)'
3727 ||' returned with status: '||x_return_status);
3728 END IF;
3729 RAISE e_error;
3730 END IF;
3731 END IF; -- v_def_load_id IS NULL
3732
3733 IF (p_commit = c_true) THEN
3734 COMMIT;
3735 END IF;
3736
3737 x_return_status := c_success;
3738
3739 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3740 FEM_ENGINES_PKG.TECH_MESSAGE(
3741 p_severity => FND_LOG.level_procedure,
3742 p_module => C_MODULE,
3743 p_msg_text => 'End Procedure');
3744 END IF;
3745
3746 EXCEPTION
3747 WHEN e_error THEN
3748 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3749 FEM_ENGINES_PKG.TECH_MESSAGE(
3750 p_severity => FND_LOG.level_procedure,
3751 p_module => C_MODULE,
3752 p_msg_text => 'End Procedure');
3753 END IF;
3754 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
3755 p_count => x_msg_count,
3756 p_data => x_msg_data);
3757 ROLLBACK TO gen_default_load_member2_pub;
3758 x_return_status := c_error;
3759
3760 WHEN others THEN
3761 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3762 FEM_ENGINES_PKG.TECH_MESSAGE(
3763 p_severity => FND_LOG.level_statement,
3764 p_module => C_MODULE,
3765 p_msg_text => 'Unexpected error.');
3766 END IF;
3767 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3768 FEM_ENGINES_PKG.TECH_MESSAGE(
3769 p_severity => FND_LOG.level_procedure,
3770 p_module => C_MODULE,
3771 p_msg_text => 'End Procedure');
3772 END IF;
3773 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
3774 p_count => x_msg_count,
3775 p_data => x_msg_data);
3776 ROLLBACK TO gen_default_load_member2_pub;
3777 x_return_status := c_unexp;
3778
3779 END Generate_Default_Load_Member;
3780
3781 --------------------------------------------------------------------
3782
3783 PROCEDURE Generate_Default_Load_Member (
3784 p_api_version IN NUMBER DEFAULT c_api_version,
3785 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
3786 p_commit IN VARCHAR2 DEFAULT c_false,
3787 p_encoded IN VARCHAR2 DEFAULT c_true,
3788 x_return_status OUT NOCOPY VARCHAR2,
3789 x_msg_count OUT NOCOPY NUMBER,
3790 x_msg_data OUT NOCOPY VARCHAR2
3791 )
3792 IS
3793 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
3794 'fem.plsql.fem_dimension_util_pkg.generate_default_load_member(3)';
3795 C_API_NAME CONSTANT VARCHAR2(30) := 'Genereate_Default_Load_Member';
3796
3797 v_member_code VARCHAR2(250);
3798 v_exception_flag BOOLEAN;
3799
3800 -- All dimensions that this API is able to default
3801 CURSOR c_dims IS
3802 SELECT d.dimension_id,
3803 d.dimension_varchar_label,
3804 x.value_set_required_flag
3805 FROM fem_xdim_dimensions x, fem_dimensions_b d
3806 WHERE x.dimension_id = d.dimension_id
3807 AND x.read_only_flag = 'N'
3808 AND x.composite_dimension_flag = 'N'
3809 AND x.hier_editor_managed_flag = 'Y'
3810 AND (x.default_member_display_code IS NULL OR
3811 x.value_set_required_flag = 'Y');
3812
3813 -- All value sets given a dimension
3814 CURSOR c_value_sets (p_dim_id NUMBER) IS
3815 SELECT value_set_id
3816 FROM fem_value_sets_b
3817 WHERE dimension_id = p_dim_id
3818 AND default_load_member_id IS NULL;
3819
3820 BEGIN
3821
3822 -- Standard Start of API savepoint
3823 SAVEPOINT gen_default_load_member3_pub;
3824
3825 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3826 FEM_ENGINES_PKG.TECH_MESSAGE(
3827 p_severity => FND_LOG.level_procedure,
3828 p_module => C_MODULE,
3829 p_msg_text => 'Begin Procedure');
3830 END IF;
3831
3832 -- Initialize variables
3833 x_return_status := c_unexp;
3834 v_exception_flag := FALSE;
3835
3836 -- Check for call compatibility.
3840 G_PKG_NAME)
3837 IF NOT FND_API.Compatible_API_Call (c_api_version,
3838 p_api_version,
3839 C_API_NAME,
3841 THEN
3842 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3843 FEM_ENGINES_PKG.TECH_MESSAGE(
3844 p_severity => FND_LOG.level_statement,
3845 p_module => C_MODULE,
3846 p_msg_text => 'API Version ('||C_API_VERSION||') not compatible with '
3847 ||'passed in version ('||p_api_version||')');
3848 END IF;
3849 RAISE e_unexp;
3850 END IF;
3851
3852 Validate_OA_Params (
3853 p_api_version => p_api_version,
3854 p_init_msg_list => p_init_msg_list,
3855 p_commit => p_commit,
3856 p_encoded => p_encoded,
3857 x_return_status => x_return_status);
3858
3859 IF (x_return_status <> c_success) THEN
3860 RAISE e_error;
3861 END IF;
3862
3863 FOR dims IN c_dims LOOP
3864 IF dims.value_set_required_flag = 'Y' THEN
3865 FOR value_sets IN c_value_sets(dims.dimension_id) LOOP
3866 Generate_Default_Load_Member(
3867 p_api_version => 1.0,
3868 p_init_msg_list => c_false,
3869 p_commit => c_false,
3870 p_encoded => p_encoded,
3871 x_return_status => x_return_status,
3872 x_msg_count => x_msg_count,
3873 x_msg_data => x_msg_data,
3874 p_dim_label => dims.dimension_varchar_label,
3875 p_vs_id => value_sets.value_set_id,
3876 x_member_code => v_member_code);
3877
3878 IF x_return_status <> c_success THEN
3879 IF FND_LOG.level_exception >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3880 v_exception_flag := TRUE;
3881 FEM_ENGINES_PKG.TECH_MESSAGE(
3882 p_severity => FND_LOG.level_exception,
3883 p_module => C_MODULE,
3884 p_msg_text => 'Generate_Default_Load_Member returned with error for'
3885 ||' dim_label = '||dims.dimension_varchar_label
3886 ||', value_set_id = '||value_sets.value_set_id);
3887 END IF;
3888 END IF;
3889 END LOOP;
3890 ELSE
3891 Generate_Default_Load_Member(
3892 p_api_version => 1.0,
3893 p_init_msg_list => c_false,
3894 p_commit => c_false,
3895 p_encoded => p_encoded,
3896 x_return_status => x_return_status,
3897 x_msg_count => x_msg_count,
3898 x_msg_data => x_msg_data,
3899 p_dim_label => dims.dimension_varchar_label,
3900 x_member_code => v_member_code);
3901
3902 IF x_return_status <> c_success THEN
3903 v_exception_flag := TRUE;
3904 IF FND_LOG.level_exception >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3905 FEM_ENGINES_PKG.TECH_MESSAGE(
3906 p_severity => FND_LOG.level_exception,
3907 p_module => C_MODULE,
3908 p_msg_text => 'Generate_Default_Load_Member returned with error for'
3909 ||' dim_label = '||dims.dimension_varchar_label);
3910 END IF;
3911 END IF;
3912 END IF;
3913 END LOOP;
3914
3915 IF (p_commit = c_true) THEN
3916 COMMIT;
3917 END IF;
3918
3919 IF v_exception_flag THEN
3920 x_return_status := c_error;
3921 ELSE
3922 x_return_status := c_success;
3923 END IF;
3924
3925 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3926 FEM_ENGINES_PKG.TECH_MESSAGE(
3927 p_severity => FND_LOG.level_procedure,
3928 p_module => C_MODULE,
3929 p_msg_text => 'End Procedure');
3930 END IF;
3931
3932 EXCEPTION
3933 WHEN others THEN
3934 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3935 FEM_ENGINES_PKG.TECH_MESSAGE(
3936 p_severity => FND_LOG.level_statement,
3937 p_module => C_MODULE,
3938 p_msg_text => 'Unexpected error.');
3939 END IF;
3940 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
3941 FEM_ENGINES_PKG.TECH_MESSAGE(
3942 p_severity => FND_LOG.level_procedure,
3943 p_module => C_MODULE,
3944 p_msg_text => 'End Procedure');
3945 END IF;
3946 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
3947 p_count => x_msg_count,
3948 p_data => x_msg_data);
3949 ROLLBACK TO gen_default_load_member3_pub;
3950 x_return_status := c_unexp;
3951
3952 END Generate_Default_Load_Member;
3953
3954 /*************************************************************************
3955
3956 New_Dataset
3957
3958 *************************************************************************/
3959
3960 PROCEDURE New_Dataset (
3961 p_display_code IN VARCHAR2,
3962 p_dataset_name IN VARCHAR2,
3963 p_bal_type_cd IN VARCHAR2,
3964 p_source_cd IN NUMBER,
3965 p_pft_w_flg IN VARCHAR2 DEFAULT 'Y',
3966 p_prod_flg IN VARCHAR2 DEFAULT 'Y',
3967 p_budget_id IN NUMBER,
3968 p_enc_type_id IN NUMBER,
3969 p_ver_name IN VARCHAR2,
3970 p_ver_disp_cd IN VARCHAR2,
3971 p_dataset_desc IN VARCHAR2,
3972 x_err_code OUT NOCOPY NUMBER,
3976
3973 x_num_msg OUT NOCOPY NUMBER
3974 )
3975 IS
3977 c_module_prg CONSTANT VARCHAR2(160) := c_module_pkg||'.new_dataset';
3978
3979 c_dim_label CONSTANT VARCHAR2(30) := 'DATASET';
3980 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
3981 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
3982 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
3983 c_obj_ver_no CONSTANT NUMBER := 1;
3984 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
3985
3986 v_row_id VARCHAR2(20) := '';
3987
3988 v_prg_msg VARCHAR2(4000);
3989 v_err_code NUMBER;
3990 v_num_msg NUMBER;
3991 v_err_msg VARCHAR2(4000);
3992
3993 v_dim_id NUMBER;
3994 v_ds_cd NUMBER;
3995 v_ver_id NUMBER;
3996 v_attr_id NUMBER;
3997 v_xdim_id NUMBER;
3998 v_xdim_tab VARCHAR2(30);
3999 v_xdim_col VARCHAR2(30);
4000 v_xdim_cd_col VARCHAR2(30);
4001 v_attr_col VARCHAR2(30);
4002 v_reqd_flg VARCHAR2(1);
4003 v_attr_value VARCHAR2(1000);
4004 v_attr_date DATE;
4005 v_attr_label VARCHAR2(150);
4006 v_attr_num NUMBER;
4007 v_attr_vch VARCHAR2(30);
4008
4009 v_sql_cmd VARCHAR2(32767);
4010
4011 CURSOR cv_dim_attr IS
4012 SELECT attribute_id,
4013 attribute_varchar_label,
4014 attribute_dimension_id,
4015 attribute_value_column_name,
4016 attribute_required_flag
4017 FROM fem_dim_attributes_b
4018 WHERE dimension_id =
4019 (SELECT dimension_id
4020 FROM fem_dimensions_b
4021 WHERE dimension_varchar_label = c_dim_label);
4022
4023 TYPE cv_curs_type IS REF CURSOR;
4024 cv_attr_dim cv_curs_type;
4025
4026 BEGIN
4027
4028 x_err_code := 0;
4029 x_num_msg := 0;
4030
4031 ------------------------
4032 -- Get New Dataset ID --
4033 ------------------------
4034 SELECT dimension_id
4035 INTO v_dim_id
4036 FROM fem_dimensions_b
4037 WHERE dimension_varchar_label = c_dim_label;
4038
4039 v_ds_cd := FEM_Dimension_Util_Pkg.Generate_Member_ID(
4040 p_dim_id => v_dim_id,
4041 x_err_code => v_err_code,
4042 x_num_msg => v_num_msg);
4043 IF (v_err_code > 0)
4044 THEN
4045 RAISE e_user_exception;
4046 END IF;
4047
4048 -------------------------------
4049 -- Insert New Dataset Member --
4050 -------------------------------
4051 BEGIN
4052 FEM_DATASETS_PKG.INSERT_ROW(
4053 x_rowid => v_row_id,
4054 x_dataset_code => v_ds_cd,
4055 x_enabled_flag => c_enbld_flg,
4056 x_dataset_display_code => p_display_code,
4057 x_read_only_flag => c_ro_flg,
4058 x_personal_flag => c_pers_flg,
4059 x_object_version_number => c_obj_ver_no,
4060 x_dataset_name => p_dataset_name,
4061 x_description => p_dataset_desc,
4062 x_creation_date => sysdate,
4063 x_created_by => c_user_id,
4064 x_last_update_date => sysdate,
4065 x_last_updated_by => c_user_id,
4066 x_last_update_login => null);
4067 EXCEPTION
4068 WHEN dup_val_on_index THEN
4069 RAISE e_dup_display_code;
4070 END;
4071
4072 -----------------------------------
4073 -- Insert New Dataset Attributes --
4074 -----------------------------------
4075 FOR r_dim_attr IN cv_dim_attr
4076 LOOP
4077 v_attr_id := r_dim_attr.attribute_id;
4078 v_attr_label := r_dim_attr.attribute_varchar_label;
4079 v_xdim_id := r_dim_attr.attribute_dimension_id;
4080 v_attr_col := r_dim_attr.attribute_value_column_name;
4081 v_reqd_flg := r_dim_attr.attribute_required_flag;
4082
4083 -------------------------------
4084 -- Check Attribute's Version --
4085 -------------------------------
4086 SELECT MIN(version_id)
4087 INTO v_ver_id
4088 FROM fem_dim_attr_versions_b
4089 WHERE attribute_id = v_attr_id
4090 AND default_version_flag = 'Y';
4091
4092 IF (v_ver_id IS NULL)
4093 THEN
4094 IF (p_ver_name IS NULL)
4095 THEN
4096 RAISE e_no_version_name;
4097 ELSIF (p_ver_disp_cd IS NULL)
4098 THEN
4099 RAISE e_no_version_name;
4100 END IF;
4101
4102 SELECT fem_dim_attr_versions_b_s.NEXTVAL
4103 INTO v_ver_id FROM dual;
4104
4105 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
4106 x_rowid => v_row_id,
4107 x_version_id => v_ver_id,
4108 x_aw_snapshot_flag => c_aw_flg,
4109 x_version_display_code => p_ver_disp_cd,
4110 x_object_version_number => c_obj_ver_no,
4111 x_default_version_flag => 'Y',
4112 x_personal_flag => c_pers_flg,
4113 x_attribute_id => v_attr_id,
4114 x_version_name => p_ver_name,
4115 x_description => null,
4116 x_creation_date => sysdate,
4117 x_created_by => c_user_id,
4118 x_last_update_date => sysdate,
4119 x_last_updated_by => c_user_id,
4120 x_last_update_login => null);
4121 END IF;
4122
4123 -----------------------------
4124 -- Get Attribute Parameter --
4125 -----------------------------
4126 CASE v_attr_label
4130 v_attr_value := p_source_cd;
4127 WHEN 'DATASET_BALANCE_TYPE_CODE' THEN
4128 v_attr_value := p_bal_type_cd;
4129 WHEN 'SOURCE_SYSTEM_CODE' THEN
4131 WHEN 'PFT_ENG_WRITE_FLAG' THEN
4132 v_attr_value := p_pft_w_flg;
4133 WHEN 'PRODUCTION_FLAG' THEN
4134 v_attr_value := p_prod_flg;
4135 WHEN 'BUDGET_ID' THEN
4136 v_attr_value := p_budget_id;
4137 WHEN 'ENCUMBRANCE_TYPE_ID' THEN
4138 v_attr_value := p_enc_type_id;
4139 ELSE
4140 FEM_ENGINES_PKG.Tech_Message(
4141 p_severity => c_log_level_1,
4142 p_module => c_module_pkg||'.New_Dataset.bad_attr_list',
4143 p_msg_text => 'The Dataset attribute '||v_attr_label||
4144 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
4145 ' the API''s list of attribute labels');
4146
4147 FEM_ENGINES_PKG.Put_Message(
4148 p_app_name => 'FEM',
4149 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
4150 p_token1 => 'ATTR',
4151 p_value1 => v_attr_label);
4152
4153 x_err_code := 1;
4154 x_num_msg := x_num_msg + 1;
4155 END CASE;
4156
4157 IF (v_attr_value IS NULL)
4158 THEN
4159 CASE v_reqd_flg
4160 WHEN 'Y' THEN
4161 RAISE e_null_param_value;
4162 ELSE null;
4163 END CASE;
4164 ELSE
4165 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
4166 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
4167 THEN
4168 -------------------------------------
4169 -- Attribute is a Dimension Attribute
4170 -- which needs to be validated
4171 -------------------------------------
4172 SELECT member_b_table_name,
4173 member_col
4174 INTO v_xdim_tab,
4175 v_xdim_col
4176 FROM fem_xdim_dimensions
4177 WHERE dimension_id = v_xdim_id;
4178
4179 v_sql_cmd :=
4180 'SELECT '||v_xdim_col||
4181 ' FROM '||v_xdim_tab||
4182 ' WHERE '||v_xdim_col||' = :b_attr_value';
4183
4184 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
4185 THEN
4186 BEGIN
4187 EXECUTE IMMEDIATE v_sql_cmd
4188 INTO v_attr_num
4189 USING v_attr_value;
4190 EXCEPTION
4191 WHEN no_data_found THEN
4192 RAISE e_bad_param_value;
4193 END;
4194 v_attr_vch := '';
4195 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
4196 THEN
4197 BEGIN
4198 EXECUTE IMMEDIATE v_sql_cmd
4199 INTO v_attr_vch
4200 USING v_attr_value;
4201 EXCEPTION
4202 WHEN no_data_found THEN
4203 RAISE e_bad_param_value;
4204 END;
4205 v_attr_num := '';
4206 END IF;
4207
4208 INSERT INTO fem_datasets_attr(
4209 attribute_id,
4210 version_id,
4211 dataset_code,
4212 dim_attribute_numeric_member,
4213 dim_attribute_varchar_member,
4214 number_assign_value,
4215 varchar_assign_value,
4216 date_assign_value,
4217 creation_date,
4218 created_by,
4219 last_updated_by,
4220 last_update_date,
4221 last_update_login,
4222 aw_snapshot_flag,
4223 object_version_number)
4224 VALUES(
4225 v_attr_id,
4226 v_ver_id,
4227 v_ds_cd,
4228 v_attr_num,
4229 v_attr_vch,
4230 null,
4231 null,
4232 null,
4233 sysdate,
4234 c_user_id,
4235 c_user_id,
4236 sysdate,
4237 null,
4238 c_aw_flg,
4239 c_obj_ver_no);
4240
4241 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
4242 THEN
4243 ----------------------------------------
4244 -- Attribute is an assigned number value
4245 ----------------------------------------
4246 INSERT INTO fem_datasets_attr(
4247 attribute_id,
4248 version_id,
4249 dataset_code,
4250 dim_attribute_numeric_member,
4251 dim_attribute_varchar_member,
4252 number_assign_value,
4253 varchar_assign_value,
4254 date_assign_value,
4255 creation_date,
4256 created_by,
4257 last_updated_by,
4258 last_update_date,
4259 last_update_login,
4260 aw_snapshot_flag,
4261 object_version_number)
4262 VALUES(
4263 v_attr_id,
4264 v_ver_id,
4265 v_ds_cd,
4266 null,
4267 null,
4268 v_attr_value,
4269 null,
4270 null,
4271 sysdate,
4272 c_user_id,
4273 c_user_id,
4274 sysdate,
4275 null,
4279 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
4276 c_aw_flg,
4277 c_obj_ver_no);
4278
4280 THEN
4281 -----------------------------------------
4282 -- Attribute is an assigned varchar value
4283 -----------------------------------------
4284 INSERT INTO fem_datasets_attr(
4285 attribute_id,
4286 version_id,
4287 dataset_code,
4288 dim_attribute_numeric_member,
4289 dim_attribute_varchar_member,
4290 number_assign_value,
4291 varchar_assign_value,
4292 date_assign_value,
4293 creation_date,
4294 created_by,
4295 last_updated_by,
4296 last_update_date,
4297 last_update_login,
4298 aw_snapshot_flag,
4299 object_version_number)
4300 VALUES(
4301 v_attr_id,
4302 v_ver_id,
4303 v_ds_cd,
4304 null,
4305 null,
4306 null,
4307 v_attr_value,
4308 null,
4309 sysdate,
4310 c_user_id,
4311 c_user_id,
4312 sysdate,
4313 null,
4314 c_aw_flg,
4315 c_obj_ver_no);
4316
4317 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
4318 THEN
4319 --------------------------------------
4320 -- Attribute is an assigned date value
4321 --------------------------------------
4322 INSERT INTO fem_datasets_attr(
4323 attribute_id,
4324 version_id,
4325 dataset_code,
4326 dim_attribute_numeric_member,
4327 dim_attribute_varchar_member,
4328 number_assign_value,
4329 varchar_assign_value,
4330 date_assign_value,
4331 creation_date,
4332 created_by,
4333 last_updated_by,
4334 last_update_date,
4335 last_update_login,
4336 aw_snapshot_flag,
4337 object_version_number)
4338 VALUES(
4339 v_attr_id,
4340 v_ver_id,
4341 v_ds_cd,
4342 null,
4343 null,
4344 null,
4345 null,
4346 v_attr_date,
4347 sysdate,
4348 c_user_id,
4349 c_user_id,
4350 sysdate,
4351 null,
4352 c_aw_flg,
4353 c_obj_ver_no);
4354 END IF;
4355 END IF;
4356 END LOOP;
4357
4358 EXCEPTION
4359 WHEN e_bad_param_value THEN
4360 ROLLBACK;
4361 FEM_ENGINES_PKG.Put_Message(
4362 p_app_name => 'FEM',
4363 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
4364 p_token1 => 'PARAM',
4365 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
4366 p_attr_id => v_attr_id),
4367 p_token2 => 'VALUE',
4368 p_value2 => v_attr_value);
4369 x_err_code := 2;
4370 x_num_msg := x_num_msg + 1;
4371
4372 WHEN e_null_param_value THEN
4373 ROLLBACK;
4374 FEM_ENGINES_PKG.Put_Message(
4375 p_app_name => 'FEM',
4376 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
4377 p_token1 => 'PARAM',
4378 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
4379 p_attr_id => v_attr_id));
4380 x_err_code := 2;
4381 x_num_msg := x_num_msg + 1;
4382
4383 WHEN e_no_version_name THEN
4384 ROLLBACK;
4385 FEM_ENGINES_PKG.Put_Message(
4386 p_app_name => 'FEM',
4387 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
4388 p_token1 => 'ENTITY',
4389 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
4390 p_attr_id => v_attr_id));
4391 x_err_code := 2;
4392 x_num_msg := x_num_msg + 1;
4393
4394 WHEN e_dup_display_code THEN
4395 ROLLBACK;
4396 FEM_ENGINES_PKG.Put_Message(
4397 p_app_name => 'FEM',
4398 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
4399 p_token1 => 'VALUE',
4400 p_value1 => p_display_code);
4401 x_err_code := 2;
4402 x_num_msg := x_num_msg + 1;
4403
4404 WHEN e_user_exception THEN
4405 ROLLBACK;
4406 x_err_code := 2;
4407 x_num_msg := v_num_msg;
4408
4409 END New_Dataset;
4410
4411 ---------------------------------------------------------------
4412
4413 PROCEDURE New_Dataset (
4414 p_api_version IN NUMBER DEFAULT c_api_version,
4415 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
4416 p_commit IN VARCHAR2 DEFAULT c_false,
4417 p_encoded IN VARCHAR2 DEFAULT c_true,
4418 x_return_status OUT NOCOPY VARCHAR2,
4419 x_msg_count OUT NOCOPY NUMBER,
4420 x_msg_data OUT NOCOPY VARCHAR2,
4421 p_display_code IN VARCHAR2,
4422 p_dataset_name IN VARCHAR2,
4423 p_bal_type_cd IN VARCHAR2,
4424 p_source_cd IN NUMBER,
4425 p_pft_w_flg IN VARCHAR2 DEFAULT 'Y',
4429 p_ver_name IN VARCHAR2,
4426 p_prod_flg IN VARCHAR2 DEFAULT 'Y',
4427 p_budget_id IN NUMBER,
4428 p_enc_type_id IN NUMBER,
4430 p_ver_disp_cd IN VARCHAR2,
4431 p_dataset_desc IN VARCHAR2
4432 )
4433 IS
4434
4435 c_module_prg CONSTANT VARCHAR2(160) := c_module_pkg||'.new_dataset';
4436
4437 c_dim_label CONSTANT VARCHAR2(30) := 'DATASET';
4438 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
4439 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
4440 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
4441 c_obj_ver_no CONSTANT NUMBER := 1;
4442 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
4443
4444 v_row_id VARCHAR2(20) := '';
4445
4446 v_dim_id NUMBER;
4447 v_ds_cd NUMBER;
4448 v_ver_id NUMBER;
4449 v_attr_id NUMBER;
4450 v_xdim_id NUMBER;
4451 v_xdim_tab VARCHAR2(30);
4452 v_xdim_col VARCHAR2(30);
4453 v_xdim_cd_col VARCHAR2(30);
4454 v_attr_col VARCHAR2(30);
4455 v_reqd_flg VARCHAR2(1);
4456 v_attr_value VARCHAR2(1000);
4457 v_attr_date DATE;
4458 v_attr_label VARCHAR2(150);
4459 v_attr_num NUMBER;
4460 v_attr_vch VARCHAR2(30);
4461
4462 v_sql_cmd VARCHAR2(32767);
4463
4464 CURSOR cv_dim_attr IS
4465 SELECT attribute_id,
4466 attribute_varchar_label,
4467 attribute_dimension_id,
4468 attribute_value_column_name,
4469 attribute_required_flag
4470 FROM fem_dim_attributes_b
4471 WHERE dimension_id =
4472 (SELECT dimension_id
4473 FROM fem_dimensions_b
4474 WHERE dimension_varchar_label = c_dim_label);
4475
4476 TYPE cv_curs_type IS REF CURSOR;
4477 cv_attr_dim cv_curs_type;
4478
4479 BEGIN
4480
4481 x_return_status := c_success;
4482
4483 Validate_OA_Params (
4484 p_api_version => p_api_version,
4485 p_init_msg_list => p_init_msg_list,
4486 p_commit => p_commit,
4487 p_encoded => p_encoded,
4488 x_return_status => x_return_status);
4489
4490 IF (x_return_status <> c_success)
4491 THEN
4492 FND_MSG_PUB.Count_and_Get(
4493 p_encoded => c_false,
4494 p_count => x_msg_count,
4495 p_data => x_msg_data);
4496 RETURN;
4497 END IF;
4498
4499 ------------------------
4500 -- Get New Dataset ID --
4501 ------------------------
4502 SELECT dimension_id
4503 INTO v_dim_id
4504 FROM fem_dimensions_b
4505 WHERE dimension_varchar_label = c_dim_label;
4506
4507 v_ds_cd := FEM_Dimension_Util_Pkg.Generate_Member_ID(
4508 p_api_version => p_api_version,
4509 p_init_msg_list => c_false,
4510 p_commit => c_false,
4511 p_encoded => p_encoded,
4512 x_return_status => x_return_status,
4513 x_msg_count => x_msg_count,
4514 x_msg_data => x_msg_data,
4515 p_dim_id => v_dim_id);
4516
4517 IF (x_return_status <> c_success)
4518 THEN
4519 RETURN;
4520 END IF;
4521
4522 -------------------------------
4523 -- Insert New Dataset Member --
4524 -------------------------------
4525 BEGIN
4526 FEM_DATASETS_PKG.INSERT_ROW(
4527 x_rowid => v_row_id,
4528 x_dataset_code => v_ds_cd,
4529 x_enabled_flag => c_enbld_flg,
4530 x_dataset_display_code => p_display_code,
4531 x_read_only_flag => c_ro_flg,
4532 x_personal_flag => c_pers_flg,
4533 x_object_version_number => c_obj_ver_no,
4534 x_dataset_name => p_dataset_name,
4535 x_description => p_dataset_desc,
4536 x_creation_date => sysdate,
4537 x_created_by => c_user_id,
4538 x_last_update_date => sysdate,
4539 x_last_updated_by => c_user_id,
4540 x_last_update_login => null);
4541 EXCEPTION
4542 WHEN dup_val_on_index THEN
4543 RAISE e_dup_display_code;
4544 END;
4545
4546 -----------------------------------
4547 -- Insert New Dataset Attributes --
4548 -----------------------------------
4549 FOR r_dim_attr IN cv_dim_attr
4550 LOOP
4551 v_attr_id := r_dim_attr.attribute_id;
4552 v_attr_label := r_dim_attr.attribute_varchar_label;
4553 v_xdim_id := r_dim_attr.attribute_dimension_id;
4554 v_attr_col := r_dim_attr.attribute_value_column_name;
4555 v_reqd_flg := r_dim_attr.attribute_required_flag;
4556
4557 -------------------------------
4558 -- Check Attribute's Version --
4559 -------------------------------
4560 SELECT MIN(version_id)
4561 INTO v_ver_id
4562 FROM fem_dim_attr_versions_b
4563 WHERE attribute_id = v_attr_id
4564 AND default_version_flag = 'Y';
4565
4566 IF (v_ver_id IS NULL)
4567 THEN
4568 IF (p_ver_name IS NULL)
4569 THEN
4570 RAISE e_no_version_name;
4571 ELSIF (p_ver_disp_cd IS NULL)
4572 THEN
4573 RAISE e_no_version_name;
4574 END IF;
4575
4576 SELECT fem_dim_attr_versions_b_s.NEXTVAL
4577 INTO v_ver_id FROM dual;
4578
4579 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
4580 x_rowid => v_row_id,
4581 x_version_id => v_ver_id,
4585 x_default_version_flag => 'Y',
4582 x_aw_snapshot_flag => c_aw_flg,
4583 x_version_display_code => p_ver_disp_cd,
4584 x_object_version_number => c_obj_ver_no,
4586 x_personal_flag => c_pers_flg,
4587 x_attribute_id => v_attr_id,
4588 x_version_name => p_ver_name,
4589 x_description => null,
4590 x_creation_date => sysdate,
4591 x_created_by => c_user_id,
4592 x_last_update_date => sysdate,
4593 x_last_updated_by => c_user_id,
4594 x_last_update_login => null);
4595 END IF;
4596
4597 -----------------------------
4598 -- Get Attribute Parameter --
4599 -----------------------------
4600 CASE v_attr_label
4601 WHEN 'DATASET_BALANCE_TYPE_CODE' THEN
4602 v_attr_value := p_bal_type_cd;
4603 WHEN 'SOURCE_SYSTEM_CODE' THEN
4604 v_attr_value := p_source_cd;
4605 WHEN 'PFT_ENG_WRITE_FLAG' THEN
4606 v_attr_value := p_pft_w_flg;
4607 WHEN 'PRODUCTION_FLAG' THEN
4608 v_attr_value := p_prod_flg;
4609 WHEN 'BUDGET_ID' THEN
4610 v_attr_value := p_budget_id;
4611 WHEN 'ENCUMBRANCE_TYPE_ID' THEN
4612 v_attr_value := p_enc_type_id;
4613 ELSE
4614 FEM_ENGINES_PKG.Tech_Message(
4615 p_severity => c_log_level_1,
4616 p_module => c_module_pkg||'.New_Dataset.bad_attr_list',
4617 p_msg_text => 'The Dataset attribute '||v_attr_label||
4618 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
4619 ' the API''s list of attribute labels');
4620
4621 FEM_ENGINES_PKG.Put_Message(
4622 p_app_name => 'FEM',
4623 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
4624 p_token1 => 'ATTR',
4625 p_value1 => v_attr_label);
4626 END CASE;
4627
4628 IF (v_attr_value IS NULL)
4629 THEN
4630 CASE v_reqd_flg
4631 WHEN 'Y' THEN
4632 RAISE e_null_param_value;
4633 ELSE null;
4634 END CASE;
4635 ELSE
4636 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
4637 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
4638 THEN
4639 -------------------------------------
4640 -- Attribute is a Dimension Attribute
4641 -- which needs to be validated
4642 -------------------------------------
4643 SELECT member_b_table_name,
4644 member_col
4645 INTO v_xdim_tab,
4646 v_xdim_col
4647 FROM fem_xdim_dimensions
4648 WHERE dimension_id = v_xdim_id;
4649
4650 v_sql_cmd :=
4651 'SELECT '||v_xdim_col||
4652 ' FROM '||v_xdim_tab||
4653 ' WHERE '||v_xdim_col||' = :b_attr_value';
4654
4655 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
4656 THEN
4657 BEGIN
4658 EXECUTE IMMEDIATE v_sql_cmd
4659 INTO v_attr_num
4660 USING v_attr_value;
4661 EXCEPTION
4662 WHEN no_data_found THEN
4663 RAISE e_bad_param_value;
4664 END;
4665 v_attr_vch := '';
4666 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
4667 THEN
4668 BEGIN
4669 EXECUTE IMMEDIATE v_sql_cmd
4670 INTO v_attr_vch
4671 USING v_attr_value;
4672 EXCEPTION
4673 WHEN no_data_found THEN
4674 RAISE e_bad_param_value;
4675 END;
4676 v_attr_num := '';
4677 END IF;
4678
4679 INSERT INTO fem_datasets_attr(
4680 attribute_id,
4681 version_id,
4682 dataset_code,
4683 dim_attribute_numeric_member,
4684 dim_attribute_varchar_member,
4685 number_assign_value,
4686 varchar_assign_value,
4687 date_assign_value,
4688 creation_date,
4689 created_by,
4690 last_updated_by,
4691 last_update_date,
4692 last_update_login,
4693 aw_snapshot_flag,
4694 object_version_number)
4695 VALUES(
4696 v_attr_id,
4697 v_ver_id,
4698 v_ds_cd,
4699 v_attr_num,
4700 v_attr_vch,
4701 null,
4702 null,
4703 null,
4704 sysdate,
4705 c_user_id,
4706 c_user_id,
4707 sysdate,
4708 null,
4709 c_aw_flg,
4710 c_obj_ver_no);
4711
4712 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
4713 THEN
4714 ----------------------------------------
4715 -- Attribute is an assigned number value
4716 ----------------------------------------
4717 INSERT INTO fem_datasets_attr(
4718 attribute_id,
4719 version_id,
4720 dataset_code,
4721 dim_attribute_numeric_member,
4722 dim_attribute_varchar_member,
4723 number_assign_value,
4727 created_by,
4724 varchar_assign_value,
4725 date_assign_value,
4726 creation_date,
4728 last_updated_by,
4729 last_update_date,
4730 last_update_login,
4731 aw_snapshot_flag,
4732 object_version_number)
4733 VALUES(
4734 v_attr_id,
4735 v_ver_id,
4736 v_ds_cd,
4737 null,
4738 null,
4739 v_attr_value,
4740 null,
4741 null,
4742 sysdate,
4743 c_user_id,
4744 c_user_id,
4745 sysdate,
4746 null,
4747 c_aw_flg,
4748 c_obj_ver_no);
4749
4750 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
4751 THEN
4752 -----------------------------------------
4753 -- Attribute is an assigned varchar value
4754 -----------------------------------------
4755 INSERT INTO fem_datasets_attr(
4756 attribute_id,
4757 version_id,
4758 dataset_code,
4759 dim_attribute_numeric_member,
4760 dim_attribute_varchar_member,
4761 number_assign_value,
4762 varchar_assign_value,
4763 date_assign_value,
4764 creation_date,
4765 created_by,
4766 last_updated_by,
4767 last_update_date,
4768 last_update_login,
4769 aw_snapshot_flag,
4770 object_version_number)
4771 VALUES(
4772 v_attr_id,
4773 v_ver_id,
4774 v_ds_cd,
4775 null,
4776 null,
4777 null,
4778 v_attr_value,
4779 null,
4780 sysdate,
4781 c_user_id,
4782 c_user_id,
4783 sysdate,
4784 null,
4785 c_aw_flg,
4786 c_obj_ver_no);
4787
4788 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
4789 THEN
4790 -----------------------------------------
4791 -- Attribute is an assigned date value
4792 -----------------------------------------
4793 INSERT INTO fem_datasets_attr(
4794 attribute_id,
4795 version_id,
4796 dataset_code,
4797 dim_attribute_numeric_member,
4798 dim_attribute_varchar_member,
4799 number_assign_value,
4800 varchar_assign_value,
4801 date_assign_value,
4802 creation_date,
4803 created_by,
4804 last_updated_by,
4805 last_update_date,
4806 last_update_login,
4807 aw_snapshot_flag,
4808 object_version_number)
4809 VALUES(
4810 v_attr_id,
4811 v_ver_id,
4812 v_ds_cd,
4813 null,
4814 null,
4815 null,
4816 null,
4817 v_attr_date,
4818 sysdate,
4819 c_user_id,
4820 c_user_id,
4821 sysdate,
4822 null,
4823 c_aw_flg,
4824 c_obj_ver_no);
4825 END IF;
4826 END IF;
4827 END LOOP;
4828
4829 IF (p_commit = c_true)
4830 THEN
4831 COMMIT;
4832 END IF;
4833
4834 FND_MSG_PUB.Count_and_Get(
4835 p_encoded => p_encoded,
4836 p_count => x_msg_count,
4837 p_data => x_msg_data);
4838
4839 EXCEPTION
4840 WHEN e_bad_param_value THEN
4841 ROLLBACK;
4842 FEM_ENGINES_PKG.Put_Message(
4843 p_app_name => 'FEM',
4844 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
4845 p_token1 => 'PARAM',
4846 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
4847 p_attr_id => v_attr_id),
4848 p_token2 => 'VALUE',
4849 p_value2 => v_attr_value);
4850 FND_MSG_PUB.Count_and_Get(
4851 p_encoded => p_encoded,
4852 p_count => x_msg_count,
4853 p_data => x_msg_data);
4854 x_return_status := c_error;
4855
4856 WHEN e_null_param_value THEN
4857 ROLLBACK;
4858 FEM_ENGINES_PKG.Put_Message(
4859 p_app_name => 'FEM',
4860 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
4861 p_token1 => 'PARAM',
4862 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
4863 p_attr_id => v_attr_id));
4864 FND_MSG_PUB.Count_and_Get(
4865 p_encoded => p_encoded,
4866 p_count => x_msg_count,
4867 p_data => x_msg_data);
4868 x_return_status := c_error;
4869
4870 WHEN e_no_version_name THEN
4871 ROLLBACK;
4872 FEM_ENGINES_PKG.Put_Message(
4873 p_app_name => 'FEM',
4874 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
4875 p_token1 => 'ENTITY',
4876 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
4877 p_attr_id => v_attr_id));
4878 FND_MSG_PUB.Count_and_Get(
4882 x_return_status := c_error;
4879 p_encoded => p_encoded,
4880 p_count => x_msg_count,
4881 p_data => x_msg_data);
4883
4884 WHEN e_dup_display_code THEN
4885 ROLLBACK;
4886 FEM_ENGINES_PKG.Put_Message(
4887 p_app_name => 'FEM',
4888 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
4889 p_token1 => 'VALUE',
4890 p_value1 => p_display_code);
4891 FND_MSG_PUB.Count_and_Get(
4892 p_encoded => p_encoded,
4893 p_count => x_msg_count,
4894 p_data => x_msg_data);
4895 x_return_status := c_error;
4896
4897 END New_Dataset;
4898
4899 /*************************************************************************
4900
4901 New_Ledger
4902
4903 *************************************************************************/
4904
4905 PROCEDURE New_Ledger (
4906 p_display_code IN VARCHAR2,
4907 p_ledger_name IN VARCHAR2,
4908 p_func_curr_cd IN VARCHAR2,
4909 p_source_cd IN NUMBER,
4910 p_cal_per_hid IN NUMBER,
4911 p_global_vs_id IN NUMBER,
4912 p_epb_def_lg_flg IN VARCHAR2,
4913 p_ent_curr_flg IN VARCHAR2,
4914 p_avg_bal_flg IN VARCHAR2,
4915 p_chan_flg IN VARCHAR2 DEFAULT 'N',
4916 p_cctr_flg IN VARCHAR2 DEFAULT 'N',
4917 p_cust_flg IN VARCHAR2 DEFAULT 'N',
4918 p_geog_flg IN VARCHAR2 DEFAULT 'N',
4919 p_ln_item_flg IN VARCHAR2 DEFAULT 'N',
4920 p_nat_acct_flg IN VARCHAR2 DEFAULT 'N',
4921 p_prod_flg IN VARCHAR2 DEFAULT 'N',
4922 p_proj_flg IN VARCHAR2 DEFAULT 'N',
4923 p_entity_flg IN VARCHAR2 DEFAULT 'N',
4924 p_user1_flg IN VARCHAR2 DEFAULT 'N',
4925 p_user2_flg IN VARCHAR2 DEFAULT 'N',
4926 p_user3_flg IN VARCHAR2 DEFAULT 'N',
4927 p_user4_flg IN VARCHAR2 DEFAULT 'N',
4928 p_user5_flg IN VARCHAR2 DEFAULT 'N',
4929 p_user6_flg IN VARCHAR2 DEFAULT 'N',
4930 p_user7_flg IN VARCHAR2 DEFAULT 'N',
4931 p_user8_flg IN VARCHAR2 DEFAULT 'N',
4932 p_user9_flg IN VARCHAR2 DEFAULT 'N',
4933 p_user10_flg IN VARCHAR2 DEFAULT 'N',
4934 p_task_flg IN VARCHAR2 DEFAULT 'N',
4935 p_fin_elem_flg IN VARCHAR2 DEFAULT 'N',
4936 p_ver_name IN VARCHAR2,
4937 p_ver_disp_cd IN VARCHAR2,
4938 p_ledger_desc IN VARCHAR2,
4939 x_err_code OUT NOCOPY NUMBER,
4940 x_num_msg OUT NOCOPY NUMBER
4941 )
4942 IS
4943
4944 c_module_prg VARCHAR2(160) := c_module_pkg||'.new_ledger';
4945
4946 c_dim_label CONSTANT VARCHAR2(30) := 'LEDGER';
4947 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
4948 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
4949 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
4950 c_obj_ver_no CONSTANT NUMBER := 1;
4951 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
4952
4953 v_row_id VARCHAR2(20) := '';
4954
4955 v_prg_msg VARCHAR2(4000);
4956 v_err_code NUMBER;
4957 v_num_msg NUMBER;
4958 v_err_msg VARCHAR2(4000);
4959
4960 v_dim_id NUMBER;
4961 v_lg_id NUMBER;
4962 v_ver_id NUMBER;
4963 v_attr_id NUMBER;
4964 v_xdim_id NUMBER;
4965 v_xdim_tab VARCHAR2(30);
4966 v_xdim_col VARCHAR2(30);
4967 v_xdim_cd_col VARCHAR2(30);
4968 v_attr_label VARCHAR2(30);
4969 v_attr_col VARCHAR2(30);
4970 v_reqd_flg VARCHAR2(1);
4971 v_attr_value VARCHAR2(1000);
4972 v_attr_date DATE;
4973 v_attr_num NUMBER;
4974 v_attr_vch VARCHAR2(30);
4975
4976 v_sql_cmd VARCHAR2(32767);
4977
4978 CURSOR cv_dim_attr IS
4979 SELECT attribute_id,
4980 attribute_varchar_label,
4981 attribute_dimension_id,
4982 attribute_value_column_name,
4983 attribute_required_flag
4984 FROM fem_dim_attributes_b
4985 WHERE dimension_id =
4986 (SELECT dimension_id
4987 FROM fem_dimensions_b
4988 WHERE dimension_varchar_label = c_dim_label);
4989
4990 BEGIN
4991
4992 x_err_code := 0;
4993 x_num_msg := 0;
4994
4995 ------------------------
4996 -- Get New Ledger ID --
4997 ------------------------
4998 SELECT dimension_id
4999 INTO v_dim_id
5000 FROM fem_dimensions_b
5001 WHERE dimension_varchar_label = c_dim_label;
5002
5003 v_lg_id := FEM_Dimension_Util_Pkg.Generate_Member_ID(
5004 p_dim_id => v_dim_id,
5005 x_err_code => v_err_code,
5006 x_num_msg => v_num_msg);
5007 IF (v_err_code > 0)
5008 THEN
5009 RAISE e_user_exception;
5010 END IF;
5011
5012 ------------------------------
5013 -- Insert New Ledger Member --
5014 ------------------------------
5015 BEGIN
5016 FEM_LEDGERS_PKG.INSERT_ROW(
5017 x_rowid => v_row_id,
5018 x_ledger_id => v_lg_id,
5019 x_personal_flag => c_pers_flg,
5020 x_read_only_flag => c_ro_flg,
5021 x_object_version_number => c_obj_ver_no,
5022 x_enabled_flag => c_enbld_flg,
5023 x_ledger_display_code => p_display_code,
5024 x_ledger_name => p_ledger_name,
5025 x_description => p_ledger_desc,
5029 x_last_updated_by => c_user_id,
5026 x_creation_date => sysdate,
5027 x_created_by => c_user_id,
5028 x_last_update_date => sysdate,
5030 x_last_update_login => null);
5031 EXCEPTION
5032 WHEN dup_val_on_index THEN
5033 RAISE e_dup_display_code;
5034 END;
5035
5036 ----------------------------------
5037 -- Insert New Ledger Attributes --
5038 ----------------------------------
5039 FOR r_dim_attr IN cv_dim_attr
5040 LOOP
5041 v_attr_id := r_dim_attr.attribute_id;
5042 v_attr_label := r_dim_attr.attribute_varchar_label;
5043 v_xdim_id := r_dim_attr.attribute_dimension_id;
5044 v_attr_col := r_dim_attr.attribute_value_column_name;
5045 v_reqd_flg := r_dim_attr.attribute_required_flag;
5046
5047 -------------------------------
5048 -- Check Attribute's Version --
5049 -------------------------------
5050 SELECT MIN(version_id)
5051 INTO v_ver_id
5052 FROM fem_dim_attr_versions_b
5053 WHERE attribute_id = v_attr_id
5054 AND default_version_flag = 'Y';
5055
5056 IF (v_ver_id IS NULL)
5057 THEN
5058 IF (p_ver_name IS NULL)
5059 THEN
5060 RAISE e_no_version_name;
5061 ELSIF (p_ver_disp_cd IS NULL)
5062 THEN
5063 RAISE e_no_version_name;
5064 END IF;
5065
5066 SELECT fem_dim_attr_versions_b_s.NEXTVAL
5067 INTO v_ver_id FROM dual;
5068
5069 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
5070 x_rowid => v_row_id,
5071 x_version_id => v_ver_id,
5072 x_aw_snapshot_flag => c_aw_flg,
5073 x_version_display_code => p_ver_disp_cd,
5074 x_object_version_number => c_obj_ver_no,
5075 x_default_version_flag => 'Y',
5076 x_personal_flag => c_pers_flg,
5077 x_attribute_id => v_attr_id,
5078 x_version_name => p_ver_name,
5079 x_description => null,
5080 x_creation_date => sysdate,
5081 x_created_by => c_user_id,
5082 x_last_update_date => sysdate,
5083 x_last_updated_by => c_user_id,
5084 x_last_update_login => null);
5085 END IF;
5086
5087 -----------------------------
5088 -- Get Attribute Parameter --
5089 -----------------------------
5090 CASE v_attr_label
5091 WHEN 'LEDGER_FUNCTIONAL_CRNCY_CODE' THEN
5092 v_attr_value := p_func_curr_cd;
5093 WHEN 'SOURCE_SYSTEM_CODE' THEN
5094 v_attr_value := p_source_cd;
5095 WHEN 'CAL_PERIOD_HIER_OBJ_DEF_ID' THEN
5096 v_attr_value := p_cal_per_hid;
5097 WHEN 'GLOBAL_VS_COMBO' THEN
5098 v_attr_value := p_global_vs_id;
5099 WHEN 'EPB_DEFAULT_LEDGER_FLAG' THEN
5100 v_attr_value := null;
5101 WHEN 'ENTERED_CRNCY_ENABLE_FLAG' THEN
5102 v_attr_value := p_ent_curr_flg;
5103 WHEN 'LEDGER_ENABLE_AVG_BAL_FLAG' THEN
5104 v_attr_value := p_avg_bal_flg;
5105 WHEN 'LEDGER_CHANNEL_IS_POP_FLAG' THEN
5106 v_attr_value := p_chan_flg;
5107 WHEN 'LEDGER_CCTR_IS_POP_FLAG' THEN
5108 v_attr_value := p_cctr_flg;
5109 WHEN 'LEDGER_CUSTOMER_IS_POP_FLAG' THEN
5110 v_attr_value := p_cust_flg;
5111 WHEN 'LEDGER_GEOGRAPHY_IS_POP_FLAG' THEN
5112 v_attr_value := p_geog_flg;
5113 WHEN 'LEDGER_LINE_ITEM_IS_POP_FLAG' THEN
5114 v_attr_value := p_ln_item_flg;
5115 WHEN 'LEDGER_NAT_ACCT_IS_POP_FLAG' THEN
5116 v_attr_value := p_nat_acct_flg;
5117 WHEN 'LEDGER_PRODUCT_IS_POP_FLAG' THEN
5118 v_attr_value := p_prod_flg;
5119 WHEN 'LEDGER_PROJECT_IS_POP_FLAG' THEN
5120 v_attr_value := p_proj_flg;
5121 WHEN 'LEDGER_ENTITY_IS_POP_FLAG' THEN
5122 v_attr_value := p_entity_flg;
5123 WHEN 'LEDGER_USER_DIM1_IS_POP_FLAG' THEN
5124 v_attr_value := p_user1_flg;
5125 WHEN 'LEDGER_USER_DIM2_IS_POP_FLAG' THEN
5126 v_attr_value := p_user2_flg;
5127 WHEN 'LEDGER_USER_DIM3_IS_POP_FLAG' THEN
5128 v_attr_value := p_user3_flg;
5129 WHEN 'LEDGER_USER_DIM4_IS_POP_FLAG' THEN
5130 v_attr_value := p_user4_flg;
5131 WHEN 'LEDGER_USER_DIM5_IS_POP_FLAG' THEN
5132 v_attr_value := p_user5_flg;
5133 WHEN 'LEDGER_USER_DIM6_IS_POP_FLAG' THEN
5134 v_attr_value := p_user6_flg;
5135 WHEN 'LEDGER_USER_DIM7_IS_POP_FLAG' THEN
5136 v_attr_value := p_user7_flg;
5137 WHEN 'LEDGER_USER_DIM8_IS_POP_FLAG' THEN
5138 v_attr_value := p_user8_flg;
5139 WHEN 'LEDGER_USER_DIM9_IS_POP_FLAG' THEN
5140 v_attr_value := p_user9_flg;
5141 WHEN 'LEDGER_USER_DIM10_IS_POP_FLAG' THEN
5142 v_attr_value := p_user10_flg;
5143 WHEN 'LEDGER_TASK_IS_POP_FLAG' THEN
5144 v_attr_value := p_task_flg;
5145 WHEN 'LEDGER_FIN_ELEM_IS_POP_FLAG' THEN
5146 v_attr_value := p_fin_elem_flg;
5147 ELSE
5148 FEM_ENGINES_PKG.Tech_Message(
5149 p_severity => c_log_level_1,
5150 p_module => c_module_pkg||'.New_Ledger.bad_attr_list',
5151 p_msg_text => 'The Ledger attribute '||v_attr_label||
5152 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
5153 ' the API''s list of attribute labels');
5154
5158 p_token1 => 'ATTR',
5155 FEM_ENGINES_PKG.Put_Message(
5156 p_app_name => 'FEM',
5157 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
5159 p_value1 => v_attr_label);
5160
5161 x_err_code := 1;
5162 x_num_msg := x_num_msg + 1;
5163 END CASE;
5164
5165 IF (v_attr_value IS NULL)
5166 THEN
5167 CASE v_reqd_flg
5168 WHEN 'Y' THEN
5169 RAISE e_null_param_value;
5170 ELSE null;
5171 END CASE;
5172 ELSE
5173 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
5174 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
5175 THEN
5176 -------------------------------------
5177 -- Attribute is a Dimension Attribute
5178 -- which needs to be validated
5179 -------------------------------------
5180 SELECT member_b_table_name,
5181 member_col
5182 INTO v_xdim_tab,
5183 v_xdim_col
5184 FROM fem_xdim_dimensions
5185 WHERE dimension_id = v_xdim_id;
5186
5187 v_sql_cmd :=
5188 'SELECT '||v_xdim_col||
5189 ' FROM '||v_xdim_tab||
5190 ' WHERE '||v_xdim_col||' = :b_attr_value';
5191
5192 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
5193 THEN
5194 BEGIN
5195 EXECUTE IMMEDIATE v_sql_cmd
5196 INTO v_attr_num
5197 USING v_attr_value;
5198 EXCEPTION
5199 WHEN no_data_found THEN
5200 RAISE e_bad_param_value;
5201 END;
5202 v_attr_vch := '';
5203 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
5204 THEN
5205 BEGIN
5206 EXECUTE IMMEDIATE v_sql_cmd
5207 INTO v_attr_vch
5208 USING v_attr_value;
5209 EXCEPTION
5210 WHEN no_data_found THEN
5211 RAISE e_bad_param_value;
5212 END;
5213 v_attr_num := '';
5214 END IF;
5215
5216 INSERT INTO fem_ledgers_attr(
5217 attribute_id,
5218 version_id,
5219 ledger_id,
5220 dim_attribute_numeric_member,
5221 dim_attribute_varchar_member,
5222 number_assign_value,
5223 varchar_assign_value,
5224 date_assign_value,
5225 creation_date,
5226 created_by,
5227 last_updated_by,
5228 last_update_date,
5229 last_update_login,
5230 object_version_number,
5231 aw_snapshot_flag)
5232 VALUES(
5233 v_attr_id,
5234 v_ver_id,
5235 v_lg_id,
5236 v_attr_num,
5237 v_attr_vch,
5238 null,
5239 null,
5240 null,
5241 sysdate,
5242 c_user_id,
5243 c_user_id,
5244 sysdate,
5245 null,
5246 c_obj_ver_no,
5247 c_aw_flg);
5248
5249 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
5250 THEN
5251 ----------------------------------------
5252 -- Attribute is an assigned number value
5253 ----------------------------------------
5254 INSERT INTO fem_ledgers_attr(
5255 attribute_id,
5256 version_id,
5257 ledger_id,
5258 dim_attribute_numeric_member,
5259 dim_attribute_varchar_member,
5260 number_assign_value,
5261 varchar_assign_value,
5262 date_assign_value,
5263 creation_date,
5264 created_by,
5265 last_updated_by,
5266 last_update_date,
5267 last_update_login,
5268 object_version_number,
5269 aw_snapshot_flag)
5270 VALUES(
5271 v_attr_id,
5272 v_ver_id,
5273 v_lg_id,
5274 null,
5275 null,
5276 v_attr_value,
5277 null,
5278 null,
5279 sysdate,
5280 c_user_id,
5281 c_user_id,
5282 sysdate,
5283 null,
5284 c_obj_ver_no,
5285 c_aw_flg);
5286
5287 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
5288 THEN
5289 -----------------------------------------
5290 -- Attribute is an assigned varchar value
5291 -----------------------------------------
5292 INSERT INTO fem_ledgers_attr(
5293 attribute_id,
5294 version_id,
5295 ledger_id,
5296 dim_attribute_numeric_member,
5297 dim_attribute_varchar_member,
5298 number_assign_value,
5299 varchar_assign_value,
5300 date_assign_value,
5301 creation_date,
5302 created_by,
5303 last_updated_by,
5304 last_update_date,
5305 last_update_login,
5309 v_attr_id,
5306 object_version_number,
5307 aw_snapshot_flag)
5308 VALUES(
5310 v_ver_id,
5311 v_lg_id,
5312 null,
5313 null,
5314 null,
5315 v_attr_value,
5316 null,
5317 sysdate,
5318 c_user_id,
5319 c_user_id,
5320 sysdate,
5321 null,
5322 c_obj_ver_no,
5323 c_aw_flg);
5324
5325 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
5326 THEN
5327 --------------------------------------
5328 -- Attribute is an assigned date value
5329 --------------------------------------
5330 INSERT INTO fem_ledgers_attr(
5331 attribute_id,
5332 version_id,
5333 ledger_id,
5334 dim_attribute_numeric_member,
5335 dim_attribute_varchar_member,
5336 number_assign_value,
5337 varchar_assign_value,
5338 date_assign_value,
5339 creation_date,
5340 created_by,
5341 last_updated_by,
5342 last_update_date,
5343 last_update_login,
5344 object_version_number,
5345 aw_snapshot_flag)
5346 VALUES(
5347 v_attr_id,
5348 v_ver_id,
5349 v_lg_id,
5350 null,
5351 null,
5352 null,
5353 null,
5354 v_attr_date,
5355 sysdate,
5356 c_user_id,
5357 c_user_id,
5358 sysdate,
5359 null,
5360 c_obj_ver_no,
5361 c_aw_flg);
5362
5363 END IF;
5364 END IF;
5365 END LOOP;
5366
5367 EXCEPTION
5368 WHEN e_bad_param_value THEN
5369 ROLLBACK;
5370 FEM_ENGINES_PKG.Put_Message(
5371 p_app_name => 'FEM',
5372 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
5373 p_token1 => 'PARAM',
5374 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
5375 p_attr_id => v_attr_id),
5376 p_trans1 => 'n',
5377 p_token2 => 'VALUE',
5378 p_value2 => v_attr_value);
5379 x_err_code := 2;
5380 x_num_msg := x_num_msg + 1;
5381
5382 WHEN e_null_param_value THEN
5383 ROLLBACK;
5384 FEM_ENGINES_PKG.Put_Message(
5385 p_app_name => 'FEM',
5386 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
5387 p_token1 => 'PARAM',
5388 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
5389 p_attr_id => v_attr_id));
5390 x_err_code := 2;
5391 x_num_msg := x_num_msg + 1;
5392
5393 WHEN e_no_version_name THEN
5394 ROLLBACK;
5395 FEM_ENGINES_PKG.Put_Message(
5396 p_app_name => 'FEM',
5397 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
5398 p_token1 => 'ENTITY',
5399 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
5400 p_attr_id => v_attr_id));
5401 x_err_code := 2;
5402 x_num_msg := x_num_msg + 1;
5403
5404 WHEN e_dup_display_code THEN
5405 ROLLBACK;
5406 FEM_ENGINES_PKG.Put_Message(
5407 p_app_name => 'FEM',
5408 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
5409 p_token1 => 'VALUE',
5410 p_value1 => p_display_code);
5411 x_err_code := 2;
5412 x_num_msg := x_num_msg + 1;
5413
5414 WHEN e_user_exception THEN
5415 ROLLBACK;
5416
5417 x_err_code := 2;
5418 x_num_msg := v_num_msg;
5419
5420 END New_Ledger;
5421
5422 ------------------------------------------------------------------
5423
5424 PROCEDURE New_Ledger (
5425 p_api_version IN NUMBER DEFAULT c_api_version,
5426 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
5427 p_commit IN VARCHAR2 DEFAULT c_false,
5428 p_encoded IN VARCHAR2 DEFAULT c_true,
5429 x_return_status OUT NOCOPY VARCHAR2,
5430 x_msg_count OUT NOCOPY NUMBER,
5431 x_msg_data OUT NOCOPY VARCHAR2,
5432 p_display_code IN VARCHAR2,
5433 p_ledger_name IN VARCHAR2,
5434 p_func_curr_cd IN VARCHAR2,
5435 p_source_cd IN NUMBER,
5436 p_cal_per_hid IN NUMBER,
5437 p_global_vs_id IN NUMBER,
5438 p_epb_def_lg_flg IN VARCHAR2,
5439 p_ent_curr_flg IN VARCHAR2,
5440 p_avg_bal_flg IN VARCHAR2,
5441 p_chan_flg IN VARCHAR2 DEFAULT 'N',
5442 p_cctr_flg IN VARCHAR2 DEFAULT 'N',
5443 p_cust_flg IN VARCHAR2 DEFAULT 'N',
5444 p_geog_flg IN VARCHAR2 DEFAULT 'N',
5445 p_ln_item_flg IN VARCHAR2 DEFAULT 'N',
5446 p_nat_acct_flg IN VARCHAR2 DEFAULT 'N',
5447 p_prod_flg IN VARCHAR2 DEFAULT 'N',
5448 p_proj_flg IN VARCHAR2 DEFAULT 'N',
5449 p_entity_flg IN VARCHAR2 DEFAULT 'N',
5450 p_user1_flg IN VARCHAR2 DEFAULT 'N',
5451 p_user2_flg IN VARCHAR2 DEFAULT 'N',
5452 p_user3_flg IN VARCHAR2 DEFAULT 'N',
5453 p_user4_flg IN VARCHAR2 DEFAULT 'N',
5454 p_user5_flg IN VARCHAR2 DEFAULT 'N',
5458 p_user9_flg IN VARCHAR2 DEFAULT 'N',
5455 p_user6_flg IN VARCHAR2 DEFAULT 'N',
5456 p_user7_flg IN VARCHAR2 DEFAULT 'N',
5457 p_user8_flg IN VARCHAR2 DEFAULT 'N',
5459 p_user10_flg IN VARCHAR2 DEFAULT 'N',
5460 p_task_flg IN VARCHAR2 DEFAULT 'N',
5461 p_fin_elem_flg IN VARCHAR2 DEFAULT 'N',
5462 p_ver_name IN VARCHAR2,
5463 p_ver_disp_cd IN VARCHAR2,
5464 p_ledger_desc IN VARCHAR2
5465 )
5466 IS
5467
5468 c_module_prg VARCHAR2(160) := c_module_pkg||'.new_ledger';
5469
5470 c_dim_label CONSTANT VARCHAR2(30) := 'LEDGER';
5471 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
5472 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
5473 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
5474 c_obj_ver_no CONSTANT NUMBER := 1;
5475 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
5476
5477 v_row_id VARCHAR2(20) := '';
5478
5479 v_dim_id NUMBER;
5480 v_lg_id NUMBER;
5481 v_ver_id NUMBER;
5482 v_attr_id NUMBER;
5483 v_xdim_id NUMBER;
5484 v_xdim_tab VARCHAR2(30);
5485 v_xdim_col VARCHAR2(30);
5486 v_xdim_cd_col VARCHAR2(30);
5487 v_attr_label VARCHAR2(30);
5488 v_attr_col VARCHAR2(30);
5489 v_reqd_flg VARCHAR2(1);
5490 v_attr_value VARCHAR2(1000);
5491 v_attr_date DATE;
5492 v_attr_num NUMBER;
5493 v_attr_vch VARCHAR2(30);
5494
5495 v_sql_cmd VARCHAR2(32767);
5496
5497 CURSOR cv_dim_attr IS
5498 SELECT attribute_id,
5499 attribute_varchar_label,
5500 attribute_dimension_id,
5501 attribute_value_column_name,
5502 attribute_required_flag
5503 FROM fem_dim_attributes_b
5504 WHERE dimension_id =
5505 (SELECT dimension_id
5506 FROM fem_dimensions_b
5507 WHERE dimension_varchar_label = c_dim_label);
5508
5509 BEGIN
5510
5511 x_return_status := c_success;
5512
5513 Validate_OA_Params (
5514 p_api_version => p_api_version,
5515 p_init_msg_list => p_init_msg_list,
5516 p_commit => p_commit,
5517 p_encoded => p_encoded,
5518 x_return_status => x_return_status);
5519
5520 IF (x_return_status <> c_success)
5521 THEN
5522 FND_MSG_PUB.Count_and_Get(
5523 p_encoded => c_false,
5524 p_count => x_msg_count,
5525 p_data => x_msg_data);
5526 RETURN;
5527 END IF;
5528
5529 ------------------------
5530 -- Get New Ledger ID --
5531 ------------------------
5532 SELECT dimension_id
5533 INTO v_dim_id
5534 FROM fem_dimensions_b
5535 WHERE dimension_varchar_label = c_dim_label;
5536
5537 v_lg_id := FEM_Dimension_Util_Pkg.Generate_Member_ID(
5538 p_api_version => p_api_version,
5539 p_init_msg_list => c_false,
5540 p_commit => c_false,
5541 p_encoded => p_encoded,
5542 x_return_status => x_return_status,
5543 x_msg_count => x_msg_count,
5544 x_msg_data => x_msg_data,
5545 p_dim_id => v_dim_id);
5546
5547 IF (x_return_status <> c_success)
5548 THEN
5549 RETURN;
5550 END IF;
5551
5552 ------------------------------
5553 -- Insert New Ledger Member --
5554 ------------------------------
5555 BEGIN
5556 FEM_LEDGERS_PKG.INSERT_ROW(
5557 x_rowid => v_row_id,
5558 x_ledger_id => v_lg_id,
5559 x_personal_flag => c_pers_flg,
5560 x_read_only_flag => c_ro_flg,
5561 x_object_version_number => c_obj_ver_no,
5562 x_enabled_flag => c_enbld_flg,
5563 x_ledger_display_code => p_display_code,
5564 x_ledger_name => p_ledger_name,
5565 x_description => p_ledger_desc,
5566 x_creation_date => sysdate,
5567 x_created_by => c_user_id,
5568 x_last_update_date => sysdate,
5569 x_last_updated_by => c_user_id,
5570 x_last_update_login => null);
5571 EXCEPTION
5572 WHEN dup_val_on_index THEN
5573 RAISE e_dup_display_code;
5574 END;
5575
5576 ----------------------------------
5577 -- Insert New Ledger Attributes --
5578 ----------------------------------
5579 FOR r_dim_attr IN cv_dim_attr
5580 LOOP
5581 v_attr_id := r_dim_attr.attribute_id;
5582 v_attr_label := r_dim_attr.attribute_varchar_label;
5583 v_xdim_id := r_dim_attr.attribute_dimension_id;
5584 v_attr_col := r_dim_attr.attribute_value_column_name;
5585 v_reqd_flg := r_dim_attr.attribute_required_flag;
5586
5587 -------------------------------
5588 -- Check Attribute's Version --
5589 -------------------------------
5590 SELECT MIN(version_id)
5591 INTO v_ver_id
5592 FROM fem_dim_attr_versions_b
5593 WHERE attribute_id = v_attr_id
5594 AND default_version_flag = 'Y';
5595
5596 IF (v_ver_id IS NULL)
5597 THEN
5598 IF (p_ver_name IS NULL)
5599 THEN
5600 RAISE e_no_version_name;
5601 ELSIF (p_ver_disp_cd IS NULL)
5602 THEN
5603 RAISE e_no_version_name;
5604 END IF;
5605
5606 SELECT fem_dim_attr_versions_b_s.NEXTVAL
5607 INTO v_ver_id FROM dual;
5608
5609 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
5610 x_rowid => v_row_id,
5614 x_object_version_number => c_obj_ver_no,
5611 x_version_id => v_ver_id,
5612 x_aw_snapshot_flag => c_aw_flg,
5613 x_version_display_code => p_ver_disp_cd,
5615 x_default_version_flag => 'Y',
5616 x_personal_flag => c_pers_flg,
5617 x_attribute_id => v_attr_id,
5618 x_version_name => p_ver_name,
5619 x_description => null,
5620 x_creation_date => sysdate,
5621 x_created_by => c_user_id,
5622 x_last_update_date => sysdate,
5623 x_last_updated_by => c_user_id,
5624 x_last_update_login => null);
5625 END IF;
5626
5627 -----------------------------
5628 -- Get Attribute Parameter --
5629 -----------------------------
5630 CASE v_attr_label
5631 WHEN 'LEDGER_FUNCTIONAL_CRNCY_CODE' THEN
5632 v_attr_value := p_func_curr_cd;
5633 WHEN 'SOURCE_SYSTEM_CODE' THEN
5634 v_attr_value := p_source_cd;
5635 WHEN 'CAL_PERIOD_HIER_OBJ_DEF_ID' THEN
5636 v_attr_value := p_cal_per_hid;
5637 WHEN 'GLOBAL_VS_COMBO' THEN
5638 v_attr_value := p_global_vs_id;
5639 WHEN 'EPB_DEFAULT_LEDGER_FLAG' THEN
5640 v_attr_value := null;
5641 WHEN 'ENTERED_CRNCY_ENABLE_FLAG' THEN
5642 v_attr_value := p_ent_curr_flg;
5643 WHEN 'LEDGER_ENABLE_AVG_BAL_FLAG' THEN
5644 v_attr_value := p_avg_bal_flg;
5645 WHEN 'LEDGER_CHANNEL_IS_POP_FLAG' THEN
5646 v_attr_value := p_chan_flg;
5647 WHEN 'LEDGER_CCTR_IS_POP_FLAG' THEN
5648 v_attr_value := p_cctr_flg;
5649 WHEN 'LEDGER_CUSTOMER_IS_POP_FLAG' THEN
5650 v_attr_value := p_cust_flg;
5651 WHEN 'LEDGER_GEOGRAPHY_IS_POP_FLAG' THEN
5652 v_attr_value := p_geog_flg;
5653 WHEN 'LEDGER_LINE_ITEM_IS_POP_FLAG' THEN
5654 v_attr_value := p_ln_item_flg;
5655 WHEN 'LEDGER_NAT_ACCT_IS_POP_FLAG' THEN
5656 v_attr_value := p_nat_acct_flg;
5657 WHEN 'LEDGER_PRODUCT_IS_POP_FLAG' THEN
5658 v_attr_value := p_prod_flg;
5659 WHEN 'LEDGER_PROJECT_IS_POP_FLAG' THEN
5660 v_attr_value := p_proj_flg;
5661 WHEN 'LEDGER_ENTITY_IS_POP_FLAG' THEN
5662 v_attr_value := p_entity_flg;
5663 WHEN 'LEDGER_USER_DIM1_IS_POP_FLAG' THEN
5664 v_attr_value := p_user1_flg;
5665 WHEN 'LEDGER_USER_DIM2_IS_POP_FLAG' THEN
5666 v_attr_value := p_user2_flg;
5667 WHEN 'LEDGER_USER_DIM3_IS_POP_FLAG' THEN
5668 v_attr_value := p_user3_flg;
5669 WHEN 'LEDGER_USER_DIM4_IS_POP_FLAG' THEN
5670 v_attr_value := p_user4_flg;
5671 WHEN 'LEDGER_USER_DIM5_IS_POP_FLAG' THEN
5672 v_attr_value := p_user5_flg;
5673 WHEN 'LEDGER_USER_DIM6_IS_POP_FLAG' THEN
5674 v_attr_value := p_user6_flg;
5675 WHEN 'LEDGER_USER_DIM7_IS_POP_FLAG' THEN
5676 v_attr_value := p_user7_flg;
5677 WHEN 'LEDGER_USER_DIM8_IS_POP_FLAG' THEN
5678 v_attr_value := p_user8_flg;
5679 WHEN 'LEDGER_USER_DIM9_IS_POP_FLAG' THEN
5680 v_attr_value := p_user9_flg;
5681 WHEN 'LEDGER_USER_DIM10_IS_POP_FLAG' THEN
5682 v_attr_value := p_user10_flg;
5683 WHEN 'LEDGER_TASK_IS_POP_FLAG' THEN
5684 v_attr_value := p_task_flg;
5685 WHEN 'LEDGER_FIN_ELEM_IS_POP_FLAG' THEN
5686 v_attr_value := p_fin_elem_flg;
5687 ELSE
5688 FEM_ENGINES_PKG.Tech_Message(
5689 p_severity => c_log_level_1,
5690 p_module => c_module_pkg||'.New_Ledger.bad_attr_list',
5691 p_msg_text => 'The Ledger attribute '||v_attr_label||
5692 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
5693 ' the API''s list of attribute labels');
5694
5695 FEM_ENGINES_PKG.Put_Message(
5696 p_app_name => 'FEM',
5697 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
5698 p_token1 => 'ATTR',
5699 p_value1 => v_attr_label);
5700 END CASE;
5701
5702 IF (v_attr_value IS NULL)
5703 THEN
5704 CASE v_reqd_flg
5705 WHEN 'Y' THEN
5706 RAISE e_null_param_value;
5707 ELSE null;
5708 END CASE;
5709 ELSE
5710 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
5711 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
5712 THEN
5713 -------------------------------------
5714 -- Attribute is a Dimension Attribute
5715 -- which needs to be validated
5716 -------------------------------------
5717 SELECT member_b_table_name,
5718 member_col
5719 INTO v_xdim_tab,
5720 v_xdim_col
5721 FROM fem_xdim_dimensions
5722 WHERE dimension_id = v_xdim_id;
5723
5724 v_sql_cmd :=
5725 'SELECT '||v_xdim_col||
5726 ' FROM '||v_xdim_tab||
5727 ' WHERE '||v_xdim_col||' = :b_attr_value';
5728
5729 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
5730 THEN
5731 BEGIN
5732 EXECUTE IMMEDIATE v_sql_cmd
5733 INTO v_attr_num
5734 USING v_attr_value;
5735 EXCEPTION
5736 WHEN no_data_found THEN
5737 RAISE e_bad_param_value;
5738 END;
5739 v_attr_vch := '';
5743 EXECUTE IMMEDIATE v_sql_cmd
5740 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
5741 THEN
5742 BEGIN
5744 INTO v_attr_vch
5745 USING v_attr_value;
5746 EXCEPTION
5747 WHEN no_data_found THEN
5748 RAISE e_bad_param_value;
5749 END;
5750 v_attr_num := '';
5751 END IF;
5752
5753 INSERT INTO fem_ledgers_attr(
5754 attribute_id,
5755 version_id,
5756 ledger_id,
5757 dim_attribute_numeric_member,
5758 dim_attribute_varchar_member,
5759 number_assign_value,
5760 varchar_assign_value,
5761 date_assign_value,
5762 creation_date,
5763 created_by,
5764 last_updated_by,
5765 last_update_date,
5766 last_update_login,
5767 object_version_number,
5768 aw_snapshot_flag)
5769 VALUES(
5770 v_attr_id,
5771 v_ver_id,
5772 v_lg_id,
5773 v_attr_num,
5774 v_attr_vch,
5775 null,
5776 null,
5777 null,
5778 sysdate,
5779 c_user_id,
5780 c_user_id,
5781 sysdate,
5782 null,
5783 c_obj_ver_no,
5784 c_aw_flg);
5785
5786 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
5787 THEN
5788 ----------------------------------------
5789 -- Attribute is an assigned number value
5790 ----------------------------------------
5791 INSERT INTO fem_ledgers_attr(
5792 attribute_id,
5793 version_id,
5794 ledger_id,
5795 dim_attribute_numeric_member,
5796 dim_attribute_varchar_member,
5797 number_assign_value,
5798 varchar_assign_value,
5799 date_assign_value,
5800 creation_date,
5801 created_by,
5802 last_updated_by,
5803 last_update_date,
5804 last_update_login,
5805 object_version_number,
5806 aw_snapshot_flag)
5807 VALUES(
5808 v_attr_id,
5809 v_ver_id,
5810 v_lg_id,
5811 null,
5812 null,
5813 v_attr_value,
5814 null,
5815 null,
5816 sysdate,
5817 c_user_id,
5818 c_user_id,
5819 sysdate,
5820 null,
5821 c_obj_ver_no,
5822 c_aw_flg);
5823
5824 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
5825 THEN
5826 -----------------------------------------
5827 -- Attribute is an assigned varchar value
5828 -----------------------------------------
5829 INSERT INTO fem_ledgers_attr(
5830 attribute_id,
5831 version_id,
5832 ledger_id,
5833 dim_attribute_numeric_member,
5834 dim_attribute_varchar_member,
5835 number_assign_value,
5836 varchar_assign_value,
5837 date_assign_value,
5838 creation_date,
5839 created_by,
5840 last_updated_by,
5841 last_update_date,
5842 last_update_login,
5843 object_version_number,
5844 aw_snapshot_flag)
5845 VALUES(
5846 v_attr_id,
5847 v_ver_id,
5848 v_lg_id,
5849 null,
5850 null,
5851 null,
5852 v_attr_value,
5853 null,
5854 sysdate,
5855 c_user_id,
5856 c_user_id,
5857 sysdate,
5858 null,
5859 c_obj_ver_no,
5860 c_aw_flg);
5861
5862 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
5863 THEN
5864 --------------------------------------
5865 -- Attribute is an assigned date value
5866 --------------------------------------
5867 INSERT INTO fem_ledgers_attr(
5868 attribute_id,
5869 version_id,
5870 ledger_id,
5871 dim_attribute_numeric_member,
5872 dim_attribute_varchar_member,
5873 number_assign_value,
5874 varchar_assign_value,
5875 date_assign_value,
5876 creation_date,
5877 created_by,
5878 last_updated_by,
5879 last_update_date,
5880 last_update_login,
5881 object_version_number,
5882 aw_snapshot_flag)
5883 VALUES(
5884 v_attr_id,
5885 v_ver_id,
5886 v_lg_id,
5887 null,
5888 null,
5889 null,
5890 null,
5891 v_attr_date,
5892 sysdate,
5893 c_user_id,
5894 c_user_id,
5895 sysdate,
5896 null,
5897 c_obj_ver_no,
5898 c_aw_flg);
5899
5900 END IF;
5904 IF (p_commit = c_true)
5901 END IF;
5902 END LOOP;
5903
5905 THEN
5906 COMMIT;
5907 END IF;
5908
5909 FND_MSG_PUB.Count_and_Get(
5910 p_encoded => p_encoded,
5911 p_count => x_msg_count,
5912 p_data => x_msg_data);
5913
5914 EXCEPTION
5915 WHEN e_bad_param_value THEN
5916 ROLLBACK;
5917 FEM_ENGINES_PKG.Put_Message(
5918 p_app_name => 'FEM',
5919 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
5920 p_token1 => 'PARAM',
5921 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
5922 p_attr_id => v_attr_id),
5923 p_token2 => 'VALUE',
5924 p_value2 => v_attr_value);
5925 FND_MSG_PUB.Count_and_Get(
5926 p_encoded => p_encoded,
5927 p_count => x_msg_count,
5928 p_data => x_msg_data);
5929 x_return_status := c_error;
5930
5931 WHEN e_null_param_value THEN
5932 ROLLBACK;
5933 FEM_ENGINES_PKG.Put_Message(
5934 p_app_name => 'FEM',
5935 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
5936 p_token1 => 'PARAM',
5937 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
5938 p_attr_id => v_attr_id));
5939 FND_MSG_PUB.Count_and_Get(
5940 p_encoded => p_encoded,
5941 p_count => x_msg_count,
5942 p_data => x_msg_data);
5943 x_return_status := c_error;
5944
5945 WHEN e_no_version_name THEN
5946 ROLLBACK;
5947 FEM_ENGINES_PKG.Put_Message(
5948 p_app_name => 'FEM',
5949 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
5950 p_token1 => 'ENTITY',
5951 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
5952 p_attr_id => v_attr_id));
5953 FND_MSG_PUB.Count_and_Get(
5954 p_encoded => p_encoded,
5955 p_count => x_msg_count,
5956 p_data => x_msg_data);
5957 x_return_status := c_error;
5958
5959 WHEN e_dup_display_code THEN
5960 ROLLBACK;
5961 FEM_ENGINES_PKG.Put_Message(
5962 p_app_name => 'FEM',
5963 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
5964 p_token1 => 'VALUE',
5965 p_value1 => p_display_code);
5966 FND_MSG_PUB.Count_and_Get(
5967 p_encoded => p_encoded,
5968 p_count => x_msg_count,
5969 p_data => x_msg_data);
5970 x_return_status := c_error;
5971
5972 END New_Ledger;
5973
5974 /*************************************************************************
5975
5976 New_Budget
5977 This procedure creates a new budget member
5978 Notes:
5979 The "FIRST_PERIOD" and "LAST_PERIOD" attributes both require a
5980 CAL_PERIOD_ID assignment. Since the person calling the API will
5981 not necessarily know the 32 digit numeric CAL_PERIOD_ID value,
5982 the API requires that they specify the 4 components (Calendar, Dimension Group,
5983 Period Number and End Date) instead.
5984
5985 *************************************************************************/
5986
5987
5988 PROCEDURE New_Budget (
5989 p_api_version IN NUMBER DEFAULT c_api_version,
5990 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
5991 p_commit IN VARCHAR2 DEFAULT c_false,
5992 p_encoded IN VARCHAR2 DEFAULT c_true,
5993 x_return_status OUT NOCOPY VARCHAR2,
5994 x_msg_count OUT NOCOPY NUMBER,
5995 x_msg_data OUT NOCOPY VARCHAR2,
5996 p_budget_display_code IN VARCHAR2,
5997 p_budget_name IN VARCHAR2,
5998 p_budget_ledger IN VARCHAR2,
5999 p_require_journals_flag IN VARCHAR2,
6000 p_budget_status_code IN VARCHAR2,
6001 p_budget_latest_open_year IN NUMBER,
6002 p_budget_source_system IN VARCHAR2,
6003 p_first_period_calendar IN VARCHAR2,
6004 p_first_period_dimgrp IN VARCHAR2,
6005 p_first_period_number IN VARCHAR2,
6006 p_first_period_end_date IN DATE,
6007 p_last_period_calendar IN VARCHAR2,
6008 p_last_period_dimgrp IN VARCHAR2,
6009 p_last_period_number IN VARCHAR2,
6010 p_last_period_end_date IN DATE,
6011 p_ver_name IN VARCHAR2,
6012 p_ver_disp_cd IN VARCHAR2,
6013 p_budget_desc IN VARCHAR2)
6014 IS
6015
6016 -- constant declarations
6017 c_module_prg CONSTANT VARCHAR2(160) := c_module_pkg||'.new_budget';
6018
6019 c_budget_label CONSTANT VARCHAR2(30) := 'BUDGET';
6020 c_enabled_flag CONSTANT VARCHAR2(1) := 'Y';
6021 c_read_only_flag CONSTANT VARCHAR2(1) := 'N';
6022 c_personal_flag CONSTANT VARCHAR2(1) := 'N';
6023 c_object_version_number CONSTANT NUMBER := 1;
6024 c_aw_snapshot_flag CONSTANT VARCHAR2(1) := 'N';
6025
6026 v_row_id VARCHAR2(20) := '';
6027
6028 v_budget_dimension_id NUMBER; -- dimension_id of BUDGET
6029 v_budget_id NUMBER;
6030 v_version_id NUMBER;
6031 v_attr_label VARCHAR2(30);
6032 v_attr_assign_value VARCHAR2(150); -- placeholder for the assignment
6033 -- value that will be used for each
6034 -- attribute
6035
6039
6036 v_attr_numeric_member NUMBER; -- placeholder for numeric dimensions
6037 v_attr_number_assign NUMBER; -- placeholder for number assignment values
6038 v_attr_varchar_member VARCHAR2(30); -- placeholder for alphanumeric dimensions
6040 -- Variables used to identify the CAL_PERIOD_ID for the BUDGET_FIRST_PERIOD
6041 -- and BUDGET_LAST_PERIOD attribute assignments
6042 v_first_period_calendar_id NUMBER;
6043 v_last_period_calendar_id NUMBER;
6044 v_first_period_time_dimgrp_key NUMBER;
6045 v_last_period_time_dimgrp_key NUMBER;
6046
6047 -- placeholder variables for the member table of the Dimension from which
6048 -- the attribute assignment comes from
6049 -- we use this information to validate that the attribute assignment
6050 -- is a valid Dimension member (for DIMENSION attributes only)
6051 v_attribute_id NUMBER;
6052 v_attr_member_tab VARCHAR2(30);
6053 v_attr_member_col VARCHAR2(30);
6054 v_attr_member_dc_col VARCHAR2(30); -- display_code column of the attribute dim
6055 v_param_req BOOLEAN;
6056
6057 v_sql_stmt VARCHAR2(32767);
6058
6059 CURSOR cv_budget_attr IS
6060 SELECT attribute_id,
6061 attribute_varchar_label,
6062 attribute_dimension_id,
6063 attribute_value_column_name
6064 FROM fem_dim_attributes_b
6065 WHERE dimension_id =
6066 (SELECT dimension_id
6067 FROM fem_dimensions_b
6068 WHERE dimension_varchar_label = 'BUDGET')
6069 AND attribute_required_flag = 'Y';
6070
6071 TYPE cv_curs_type IS REF CURSOR;
6072 cv_attr_dim cv_curs_type;
6073
6074 BEGIN
6075
6076 x_return_status := c_success;
6077
6078 Validate_OA_Params (
6079 p_api_version => p_api_version,
6080 p_init_msg_list => p_init_msg_list,
6081 p_commit => p_commit,
6082 p_encoded => p_encoded,
6083 x_return_status => x_return_status);
6084
6085 IF (x_return_status <> c_success)
6086 THEN
6087 FND_MSG_PUB.Count_and_Get(
6088 p_encoded => c_false,
6089 p_count => x_msg_count,
6090 p_data => x_msg_data);
6091 RETURN;
6092 END IF;
6093
6094 ------------------------
6095 -- Get the next BUDGET_ID value available --
6096 ------------------------
6097 SELECT dimension_id
6098 INTO v_budget_dimension_id
6099 FROM fem_dimensions_b
6100 WHERE dimension_varchar_label = c_budget_label;
6101
6102 v_budget_id := FEM_Dimension_Util_Pkg.Generate_Member_ID(
6103 p_api_version => p_api_version,
6104 p_init_msg_list => c_false,
6105 p_commit => c_false,
6106 p_encoded => p_encoded,
6107 x_return_status => x_return_status,
6108 x_msg_count => x_msg_count,
6109 x_msg_data => x_msg_data,
6110 p_dim_id => v_budget_dimension_id);
6111
6112 IF (x_return_status <> c_success)
6113 THEN
6114 RETURN;
6115 END IF;
6116
6117 -------------------------------
6118 -- Insert New Budget Member --
6119 -------------------------------
6120 BEGIN
6121 FEM_BUDGETS_PKG.INSERT_ROW(
6122 x_rowid => v_row_id,
6123 x_budget_id => v_budget_id,
6124 x_enabled_flag => c_enabled_flag,
6125 x_budget_display_code => p_budget_display_code,
6126 x_read_only_flag => c_read_only_flag,
6127 x_personal_flag => c_personal_flag,
6128 x_object_version_number => c_object_version_number,
6129 x_budget_name => p_budget_name,
6130 x_description => p_budget_desc,
6131 x_creation_date => sysdate,
6132 x_created_by => c_user_id,
6133 x_last_update_date => sysdate,
6134 x_last_updated_by => c_user_id,
6135 x_last_update_login => null);
6136 EXCEPTION
6137 WHEN dup_val_on_index THEN
6138 RAISE e_dup_display_code;
6139 END;
6140
6141 -----------------------------------
6142 -- Insert New Budget Attributes --
6143 -----------------------------------
6144 FOR attr IN cv_budget_attr
6145 LOOP
6146
6147 v_attribute_id := attr.attribute_id;
6148 v_attr_label := attr.attribute_varchar_label;
6149 -------------------------------
6150 -- Check Attribute Version --
6151 -------------------------------
6152 BEGIN
6153 SELECT MIN(version_id)
6154 INTO v_version_id
6155 FROM fem_dim_attr_versions_b
6156 WHERE attribute_id = v_attribute_id
6157 AND default_version_flag = 'Y';
6158 EXCEPTION
6159 WHEN no_data_found THEN
6160 -- In this case, the version did not exist, so we will try
6161 -- to create a new version for the attribute using the provided
6162 -- version display code and version name
6163
6164 IF (p_ver_name IS NULL)
6165 THEN
6166 RAISE e_no_version_name;
6167 ELSIF (p_ver_disp_cd IS NULL)
6168 THEN
6169 RAISE e_no_version_name;
6170 END IF;
6171
6172 SELECT fem_dim_attr_versions_b_s.NEXTVAL
6173 INTO v_version_id FROM dual;
6174
6175 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
6176 x_rowid => v_row_id,
6180 x_object_version_number => c_object_version_number,
6177 x_version_id => v_version_id,
6178 x_aw_snapshot_flag => c_aw_snapshot_flag,
6179 x_version_display_code => p_ver_disp_cd,
6181 x_default_version_flag => 'Y',
6182 x_personal_flag => c_personal_flag,
6183 x_attribute_id => v_attribute_id,
6184 x_version_name => p_ver_name,
6185 x_description => null,
6186 x_creation_date => sysdate,
6187 x_created_by => c_user_id,
6188 x_last_update_date => sysdate,
6189 x_last_updated_by => c_user_id,
6190 x_last_update_login => null);
6191 END;
6192
6193 -----------------------------
6194 -- Get Attribute information --
6195 -----------------------------
6196 CASE attr.attribute_varchar_label
6197 WHEN 'BUDGET_LEDGER' THEN
6198 v_attr_assign_value := p_budget_ledger;
6199 v_param_req := TRUE;
6200 WHEN 'REQUIRE_JOURNALS_FLAG' THEN
6201 v_attr_assign_value := p_require_journals_flag;
6202 v_param_req := TRUE;
6203 WHEN 'BUDGET_STATUS_CODE' THEN
6204 v_attr_assign_value := p_budget_status_code;
6205 v_param_req := TRUE;
6206 WHEN 'BUDGET_LATEST_OPEN_YEAR' THEN
6207 v_attr_assign_value := p_budget_latest_open_year;
6208 v_param_req := TRUE;
6209 WHEN 'SOURCE_SYSTEM_CODE' THEN
6210 v_attr_assign_value := p_budget_source_system;
6211 v_param_req := TRUE;
6212 WHEN 'BUDGET_FIRST_PERIOD' THEN
6213 -- for this attribute we have to identify the CAL_PERIOD_ID
6214 -- of the assignment
6215 BEGIN
6216 select calendar_id
6217 into v_first_period_calendar_id
6218 from fem_calendars_b
6219 where calendar_display_code = p_first_period_calendar;
6220 EXCEPTION
6221 WHEN no_data_found THEN
6222 RAISE e_null_param_value;
6223 END;
6224
6225 BEGIN
6226 select time_dimension_group_key
6227 into v_first_period_time_dimgrp_key
6228 from fem_dimension_grps_b D, fem_dimensions_b B
6229 where D.dimension_group_display_code = p_first_period_dimgrp
6230 and D.dimension_id = B.dimension_id
6231 and B.dimension_varchar_label = 'CAL_PERIOD';
6232 EXCEPTION
6233 WHEN no_data_found THEN
6234 RAISE e_null_param_value;
6235 END;
6236
6237 select LPAD(to_char(to_number(to_char(p_first_period_end_date,'j'))),7,'0')||
6238 LPAD(TO_CHAR(p_first_period_number),15,'0')||
6239 LPAD(to_char(v_first_period_calendar_id),5,'0')||
6240 LPAD(to_char(v_first_period_time_dimgrp_key),5,'0')
6241 into v_attr_assign_value
6242 from dual;
6243
6244 v_param_req := TRUE;
6245 WHEN 'BUDGET_LAST_PERIOD' THEN
6246 -- for this attribute we have to identify the CAL_PERIOD_ID
6247 -- of the assignment
6248 BEGIN
6249 select calendar_id
6250 into v_last_period_calendar_id
6251 from fem_calendars_b
6252 where calendar_display_code = p_last_period_calendar;
6253 EXCEPTION
6254 WHEN no_data_found THEN
6255 RAISE e_null_param_value;
6256 END;
6257
6258 BEGIN
6259 select time_dimension_group_key
6260 into v_last_period_time_dimgrp_key
6261 from fem_dimension_grps_b D, fem_dimensions_b B
6262 where D.dimension_group_display_code = p_last_period_dimgrp
6263 and D.dimension_id = B.dimension_id
6264 and B.dimension_varchar_label = 'CAL_PERIOD';
6265 EXCEPTION
6266 WHEN no_data_found THEN
6267 RAISE e_null_param_value;
6268 END;
6269
6270 select LPAD(to_char(to_number(to_char(p_last_period_end_date,'j'))),7,'0')||
6271 LPAD(TO_CHAR(p_last_period_number),15,'0')||
6272 LPAD(to_char(v_last_period_calendar_id),5,'0')||
6273 LPAD(to_char(v_last_period_time_dimgrp_key),5,'0')
6274 into v_attr_assign_value
6275 from dual;
6276
6277 v_param_req := TRUE;
6278 ELSE
6279 FEM_ENGINES_PKG.Tech_Message(
6280 p_severity => c_log_level_1,
6281 p_module => c_module_pkg||'.New_Budget.bad_attr_list',
6282 p_msg_text => 'The Budget attribute '||v_attr_label||
6283 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
6284 ' the API''s list of attribute labels');
6285
6286 FEM_ENGINES_PKG.Put_Message(
6287 p_app_name => 'FEM',
6288 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
6289 p_token1 => 'ATTR',
6290 p_value1 => v_attr_label);
6291 END CASE;
6292
6293 IF (v_attr_assign_value IS NULL)
6294 THEN
6295 CASE v_param_req
6296 WHEN TRUE THEN
6297 RAISE e_null_param_value;
6298 ELSE null;
6299 END CASE;
6300 ELSE
6301
6302 -------------------------
6303 -- Verify that the attribute assignment value is a valid
6304 -- for that attribute
6308 IF attr.attribute_dimension_id is not null THEN
6305 -- this only applies for DIMENSION attributes (i.e., where
6306 -- attribute_dimension_id is not null
6307 -------------------------
6309 SELECT member_b_table_name,
6310 member_col,
6311 member_display_code_col
6312 INTO v_attr_member_tab,
6313 v_attr_member_col,
6314 v_attr_member_dc_col
6315 FROM fem_xdim_dimensions
6316 WHERE dimension_id = attr.attribute_dimension_id;
6317
6318 v_sql_stmt :=
6319 'SELECT '||v_attr_member_col||
6320 ' FROM '||v_attr_member_tab||
6321 ' WHERE to_char('||v_attr_member_dc_col||') = '''||v_attr_assign_value||'''';
6322 END IF;
6323
6324 IF (attr.attribute_value_column_name = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
6325 THEN
6326 BEGIN
6327 EXECUTE IMMEDIATE v_sql_stmt
6328 INTO v_attr_numeric_member;
6329 EXCEPTION
6330 WHEN no_data_found THEN
6331 RAISE e_bad_param_value;
6332 END;
6333 v_attr_varchar_member := '';
6334 v_attr_number_assign := '';
6335 ELSIF (attr.attribute_value_column_name = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
6336 THEN
6337 BEGIN
6338 EXECUTE IMMEDIATE v_sql_stmt
6339 INTO v_attr_varchar_member;
6340 EXCEPTION
6341 WHEN no_data_found THEN
6342 RAISE e_bad_param_value;
6343 END;
6344 v_attr_numeric_member := '';
6345 v_attr_number_assign := '';
6346 ELSIF (attr.attribute_value_column_name = 'NUMBER_ASSIGN_VALUE')
6347 THEN
6348 v_attr_number_assign := v_attr_assign_value;
6349 v_attr_numeric_member := '';
6350 v_attr_varchar_member := '';
6351 END IF;
6352
6353 -----------------------------
6354 -- Insert Attribute Values --
6355 -----------------------------
6356 INSERT INTO fem_budgets_attr(
6357 attribute_id,
6358 version_id,
6359 budget_id,
6360 dim_attribute_numeric_member,
6361 dim_attribute_varchar_member,
6362 number_assign_value,
6363 varchar_assign_value,
6364 date_assign_value,
6365 creation_date,
6366 created_by,
6367 last_updated_by,
6368 last_update_date,
6369 last_update_login,
6370 aw_snapshot_flag,
6371 object_version_number)
6372 VALUES(
6373 v_attribute_id,
6374 v_version_id,
6375 v_budget_id,
6376 v_attr_numeric_member,
6377 v_attr_varchar_member,
6378 v_attr_number_assign,
6379 null,
6380 null,
6381 sysdate,
6382 c_user_id,
6383 c_user_id,
6384 sysdate,
6385 null,
6386 c_aw_snapshot_flag,
6387 c_object_version_number);
6388
6389 END IF;
6390
6391 END LOOP;
6392
6393 IF (p_commit = c_true)
6394 THEN
6395 COMMIT;
6396 END IF;
6397
6398 FND_MSG_PUB.Count_and_Get(
6399 p_encoded => p_encoded,
6400 p_count => x_msg_count,
6401 p_data => x_msg_data);
6402
6403 EXCEPTION
6404 WHEN e_bad_param_value THEN
6405 ROLLBACK;
6406 FEM_ENGINES_PKG.Put_Message(
6407 p_app_name => 'FEM',
6408 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
6409 p_token1 => 'PARAM',
6410 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
6411 p_attr_id => v_attribute_id),
6412 p_token2 => 'VALUE',
6413 p_value2 => v_attr_assign_value);
6414 FND_MSG_PUB.Count_and_Get(
6415 p_encoded => p_encoded,
6416 p_count => x_msg_count,
6417 p_data => x_msg_data);
6418 x_return_status := c_error;
6419
6420 WHEN e_null_param_value THEN
6421 ROLLBACK;
6422 FEM_ENGINES_PKG.Put_Message(
6423 p_app_name => 'FEM',
6424 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
6425 p_token1 => 'PARAM',
6426 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
6427 p_attr_id => v_attribute_id));
6428 FND_MSG_PUB.Count_and_Get(
6429 p_encoded => p_encoded,
6430 p_count => x_msg_count,
6431 p_data => x_msg_data);
6432 x_return_status := c_error;
6433
6434 WHEN e_no_version_name THEN
6435 ROLLBACK;
6436 FEM_ENGINES_PKG.Put_Message(
6437 p_app_name => 'FEM',
6438 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
6439 p_token1 => 'ENTITY',
6440 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
6441 p_attr_id => v_attribute_id));
6442 FND_MSG_PUB.Count_and_Get(
6443 p_encoded => p_encoded,
6444 p_count => x_msg_count,
6445 p_data => x_msg_data);
6446 x_return_status := c_error;
6447
6448 WHEN e_dup_display_code THEN
6449 ROLLBACK;
6450 FEM_ENGINES_PKG.Put_Message(
6451 p_app_name => 'FEM',
6452 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
6453 p_token1 => 'VALUE',
6457 p_count => x_msg_count,
6454 p_value1 => p_budget_display_code);
6455 FND_MSG_PUB.Count_and_Get(
6456 p_encoded => p_encoded,
6458 p_data => x_msg_data);
6459 x_return_status := c_error;
6460
6461 END New_Budget;
6462
6463 /*************************************************************************
6464
6465 Register Budget
6466
6467 *************************************************************************/
6468
6469 PROCEDURE Register_Budget (
6470 p_api_version IN NUMBER DEFAULT c_api_version,
6471 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
6472 p_commit IN VARCHAR2 DEFAULT c_false,
6473 p_encoded IN VARCHAR2 DEFAULT c_true,
6474 x_return_status OUT NOCOPY VARCHAR2,
6475 x_msg_count OUT NOCOPY NUMBER,
6476 x_msg_data OUT NOCOPY VARCHAR2,
6477 p_budget_id IN NUMBER,
6478 p_budget_display_code IN VARCHAR2,
6479 p_budget_name IN VARCHAR2,
6480 p_budget_ledger IN VARCHAR2,
6481 p_require_journals_flag IN VARCHAR2,
6482 p_budget_status_code IN VARCHAR2,
6483 p_budget_latest_open_year IN NUMBER,
6484 p_budget_source_system IN VARCHAR2,
6485 p_first_period_calendar IN VARCHAR2,
6486 p_first_period_dimgrp IN VARCHAR2,
6487 p_first_period_number IN VARCHAR2,
6488 p_first_period_end_date IN DATE,
6489 p_last_period_calendar IN VARCHAR2,
6490 p_last_period_dimgrp IN VARCHAR2,
6491 p_last_period_number IN VARCHAR2,
6492 p_last_period_end_date IN DATE,
6493 p_ver_name IN VARCHAR2,
6494 p_ver_disp_cd IN VARCHAR2,
6495 p_budget_desc IN VARCHAR2)
6496 IS
6497
6498 -- constant declarations
6499 c_module_prg CONSTANT VARCHAR2(160) := c_module_pkg||'.new_budget';
6500
6501 c_budget_label CONSTANT VARCHAR2(30) := 'BUDGET';
6502 c_enabled_flag CONSTANT VARCHAR2(1) := 'Y';
6503 c_read_only_flag CONSTANT VARCHAR2(1) := 'N';
6504 c_personal_flag CONSTANT VARCHAR2(1) := 'N';
6505 c_object_version_number CONSTANT NUMBER := 1;
6506 c_aw_snapshot_flag CONSTANT VARCHAR2(1) := 'N';
6507
6508 v_row_id VARCHAR2(20) := '';
6509 v_dim_id NUMBER;
6510 v_budget_dimension_id NUMBER; -- dimension_id of BUDGET
6511 v_budget_id NUMBER;
6512 v_version_id NUMBER;
6513 v_attr_label VARCHAR2(30);
6514 v_attr_assign_value VARCHAR2(150); -- placeholder for the assignment
6515 -- value that will be used for each
6516 -- attribute
6517
6518 v_attr_numeric_member NUMBER; -- placeholder for numeric dimensions
6519 v_attr_number_assign NUMBER; -- placeholder for number assignment values
6520 v_attr_varchar_member VARCHAR2(30); -- placeholder for alphanumeric dimensions
6521
6522 -- Variables used to identify the CAL_PERIOD_ID for the BUDGET_FIRST_PERIOD
6523 -- and BUDGET_LAST_PERIOD attribute assignments
6524 v_first_period_calendar_id NUMBER;
6525 v_last_period_calendar_id NUMBER;
6526 v_first_period_time_dimgrp_key NUMBER;
6527 v_last_period_time_dimgrp_key NUMBER;
6528
6529 -- placeholder variables for the member table of the Dimension from which
6530 -- the attribute assignment comes from
6531 -- we use this information to validate that the attribute assignment
6532 -- is a valid Dimension member (for DIMENSION attributes only)
6533
6534 v_attribute_id NUMBER;
6535 v_attr_member_tab VARCHAR2(30);
6536 v_attr_member_col VARCHAR2(30);
6537 v_attr_member_dc_col VARCHAR2(30); -- display_code column of the attribute dim
6538 v_param_req BOOLEAN;
6539
6540 v_sql_stmt VARCHAR2(32767);
6541
6542 CURSOR cv_budget_attr IS
6543 SELECT attribute_id,
6544 attribute_varchar_label,
6545 attribute_dimension_id,
6546 attribute_value_column_name
6547 FROM fem_dim_attributes_b
6548 WHERE dimension_id =
6549 (SELECT dimension_id
6550 FROM fem_dimensions_b
6551 WHERE dimension_varchar_label = 'BUDGET')
6552 AND attribute_required_flag = 'Y';
6553
6554 TYPE cv_curs_type IS REF CURSOR;
6555 cv_attr_dim cv_curs_type;
6556
6557 e_dup_reg_id EXCEPTION;
6558
6559 BEGIN
6560
6561 x_return_status := c_success;
6562
6563 ---------------------
6564 -- Validate Budget ID
6565 ---------------------
6566 SELECT dimension_id
6567 INTO v_dim_id
6568 FROM fem_dimensions_b
6569 WHERE dimension_varchar_label = c_budget_label;
6570
6571 BEGIN
6572 SELECT budget_id
6573 INTO v_budget_id
6574 FROM fem_budgets_b
6575 WHERE budget_id = p_budget_id;
6576 EXCEPTION
6577 WHEN no_data_found THEN
6578 v_budget_id := null;
6579 END;
6580
6581 IF (v_budget_id IS NULL)
6582 THEN
6583 v_budget_id := p_budget_id;
6584 ELSE
6585 RAISE e_dup_reg_id;
6586 END IF;
6587
6588 Validate_OA_Params (
6589 p_api_version => p_api_version,
6593 x_return_status => x_return_status);
6590 p_init_msg_list => p_init_msg_list,
6591 p_commit => p_commit,
6592 p_encoded => p_encoded,
6594
6595 IF (x_return_status <> c_success)
6596 THEN
6597 FND_MSG_PUB.Count_and_Get(
6598 p_encoded => c_false,
6599 p_count => x_msg_count,
6600 p_data => x_msg_data);
6601 RETURN;
6602 END IF;
6603
6604 -------------------------------
6605 -- Insert New Budget Member --
6606 -------------------------------
6607 BEGIN
6608 FEM_BUDGETS_PKG.INSERT_ROW(
6609 x_rowid => v_row_id,
6610 x_budget_id => v_budget_id,
6611 x_enabled_flag => c_enabled_flag,
6612 x_budget_display_code => p_budget_display_code,
6613 x_read_only_flag => c_read_only_flag,
6614 x_personal_flag => c_personal_flag,
6615 x_object_version_number => c_object_version_number,
6616 x_budget_name => p_budget_name,
6617 x_description => p_budget_desc,
6618 x_creation_date => sysdate,
6619 x_created_by => c_user_id,
6620 x_last_update_date => sysdate,
6621 x_last_updated_by => c_user_id,
6622 x_last_update_login => null);
6623 EXCEPTION
6624 WHEN dup_val_on_index THEN
6625 RAISE e_dup_display_code;
6626 END;
6627
6628 -----------------------------------
6629 -- Insert New Budget Attributes --
6630 -----------------------------------
6631 FOR attr IN cv_budget_attr
6632 LOOP
6633
6634 v_attribute_id := attr.attribute_id;
6635 v_attr_label := attr.attribute_varchar_label;
6636 -------------------------------
6637 -- Check Attribute Version --
6638 -------------------------------
6639 SELECT MIN(version_id)
6640 INTO v_version_id
6641 FROM fem_dim_attr_versions_b
6642 WHERE attribute_id = v_attribute_id
6643 AND default_version_flag = 'Y';
6644
6645 IF (v_version_id IS NULL)
6646 THEN
6647 -- In this case, the version did not exist, so we will try
6648 -- to create a new version for the attribute using the provided
6649 -- version display code and version name
6650
6651 IF (p_ver_name IS NULL)
6652 THEN
6653 RAISE e_no_version_name;
6654 ELSIF (p_ver_disp_cd IS NULL)
6655 THEN
6656 RAISE e_no_version_name;
6657 END IF;
6658
6659 SELECT fem_dim_attr_versions_b_s.NEXTVAL
6660 INTO v_version_id FROM dual;
6661
6662 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
6663 x_rowid => v_row_id,
6664 x_version_id => v_version_id,
6665 x_aw_snapshot_flag => c_aw_snapshot_flag,
6666 x_version_display_code => p_ver_disp_cd,
6667 x_object_version_number => c_object_version_number,
6668 x_default_version_flag => 'Y',
6669 x_personal_flag => c_personal_flag,
6670 x_attribute_id => v_attribute_id,
6671 x_version_name => p_ver_name,
6672 x_description => null,
6673 x_creation_date => sysdate,
6674 x_created_by => c_user_id,
6675 x_last_update_date => sysdate,
6676 x_last_updated_by => c_user_id,
6677 x_last_update_login => null);
6678 END IF;
6679
6680 -----------------------------
6681 -- Get Attribute information --
6682 -----------------------------
6683 CASE attr.attribute_varchar_label
6684 WHEN 'BUDGET_LEDGER' THEN
6685 v_attr_assign_value := p_budget_ledger;
6686 v_param_req := TRUE;
6687 WHEN 'REQUIRE_JOURNALS_FLAG' THEN
6688 v_attr_assign_value := p_require_journals_flag;
6689 v_param_req := TRUE;
6690 WHEN 'BUDGET_STATUS_CODE' THEN
6691 v_attr_assign_value := p_budget_status_code;
6692 v_param_req := TRUE;
6693 WHEN 'BUDGET_LATEST_OPEN_YEAR' THEN
6694 v_attr_assign_value := p_budget_latest_open_year;
6695 v_param_req := TRUE;
6696 WHEN 'SOURCE_SYSTEM_CODE' THEN
6697 v_attr_assign_value := p_budget_source_system;
6698 v_param_req := TRUE;
6699 WHEN 'BUDGET_FIRST_PERIOD' THEN
6700 -- for this attribute we have to identify the CAL_PERIOD_ID
6701 -- of the assignment
6702 BEGIN
6703 select calendar_id
6704 into v_first_period_calendar_id
6705 from fem_calendars_b
6706 where calendar_display_code = p_first_period_calendar;
6707 EXCEPTION
6708 WHEN no_data_found THEN
6709 RAISE e_null_param_value;
6710 END;
6711
6712 BEGIN
6713 select time_dimension_group_key
6714 into v_first_period_time_dimgrp_key
6715 from fem_dimension_grps_b D, fem_dimensions_b B
6716 where D.dimension_group_display_code = p_first_period_dimgrp
6717 and D.dimension_id = B.dimension_id
6718 and B.dimension_varchar_label = 'CAL_PERIOD';
6719 EXCEPTION
6720 WHEN no_data_found THEN
6721 RAISE e_null_param_value;
6722 END;
6723
6724 select LPAD(to_char(to_number(to_char(p_first_period_end_date,'j'))),7,'0')||
6725 LPAD(TO_CHAR(p_first_period_number),15,'0')||
6726 LPAD(to_char(v_first_period_calendar_id),5,'0')||
6730
6727 LPAD(to_char(v_first_period_time_dimgrp_key),5,'0')
6728 into v_attr_assign_value
6729 from dual;
6731 v_param_req := TRUE;
6732 WHEN 'BUDGET_LAST_PERIOD' THEN
6733 -- for this attribute we have to identify the CAL_PERIOD_ID
6734 -- of the assignment
6735 BEGIN
6736 select calendar_id
6737 into v_last_period_calendar_id
6738 from fem_calendars_b
6739 where calendar_display_code = p_last_period_calendar;
6740 EXCEPTION
6741 WHEN no_data_found THEN
6742 RAISE e_null_param_value;
6743 END;
6744
6745 BEGIN
6746 select time_dimension_group_key
6747 into v_last_period_time_dimgrp_key
6748 from fem_dimension_grps_b D, fem_dimensions_b B
6749 where D.dimension_group_display_code = p_last_period_dimgrp
6750 and D.dimension_id = B.dimension_id
6751 and B.dimension_varchar_label = 'CAL_PERIOD';
6752 EXCEPTION
6753 WHEN no_data_found THEN
6754 RAISE e_null_param_value;
6755 END;
6756
6757 select LPAD(to_char(to_number(to_char(p_last_period_end_date,'j'))),7,'0')||
6758 LPAD(TO_CHAR(p_last_period_number),15,'0')||
6759 LPAD(to_char(v_last_period_calendar_id),5,'0')||
6760 LPAD(to_char(v_last_period_time_dimgrp_key),5,'0')
6761 into v_attr_assign_value
6762 from dual;
6763
6764 v_param_req := TRUE;
6765 ELSE
6766 FEM_ENGINES_PKG.Tech_Message(
6767 p_severity => c_log_level_1,
6768 p_module => c_module_pkg||'.New_Budget.bad_attr_list',
6769 p_msg_text => 'The Budget attribute '||v_attr_label||
6770 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
6771 ' the API''s list of attribute labels');
6772
6773 FEM_ENGINES_PKG.Put_Message(
6774 p_app_name => 'FEM',
6775 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
6776 p_token1 => 'ATTR',
6777 p_value1 => v_attr_label);
6778 END CASE;
6779
6780 IF (v_attr_assign_value IS NULL)
6781 THEN
6782 CASE v_param_req
6783 WHEN TRUE THEN
6784 RAISE e_null_param_value;
6785 ELSE null;
6786 END CASE;
6787 ELSE
6788
6789 -------------------------
6790 -- Verify that the attribute assignment value is a valid
6791 -- for that attribute
6792 -- this only applies for DIMENSION attributes (i.e., where
6793 -- attribute_dimension_id is not null
6794 -------------------------
6795 IF attr.attribute_dimension_id is not null THEN
6796 SELECT member_b_table_name,
6797 member_col,
6798 member_display_code_col
6799 INTO v_attr_member_tab,
6800 v_attr_member_col,
6801 v_attr_member_dc_col
6802 FROM fem_xdim_dimensions
6803 WHERE dimension_id = attr.attribute_dimension_id;
6804
6805 v_sql_stmt :=
6806 'SELECT '||v_attr_member_col||
6807 ' FROM '||v_attr_member_tab||
6808 ' WHERE to_char('||v_attr_member_dc_col||') = '''||v_attr_assign_value||'''';
6809 END IF;
6810
6811 IF (attr.attribute_value_column_name = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
6812 THEN
6813 BEGIN
6814 EXECUTE IMMEDIATE v_sql_stmt
6815 INTO v_attr_numeric_member;
6816 EXCEPTION
6817 WHEN no_data_found THEN
6818 RAISE e_bad_param_value;
6819 END;
6820 v_attr_varchar_member := '';
6821 v_attr_number_assign := '';
6822 ELSIF (attr.attribute_value_column_name = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
6823 THEN
6824 BEGIN
6825 EXECUTE IMMEDIATE v_sql_stmt
6826 INTO v_attr_varchar_member;
6827 EXCEPTION
6828 WHEN no_data_found THEN
6829 RAISE e_bad_param_value;
6830 END;
6831 v_attr_numeric_member := '';
6832 v_attr_number_assign := '';
6833 ELSIF (attr.attribute_value_column_name = 'NUMBER_ASSIGN_VALUE')
6834 THEN
6835 v_attr_number_assign := v_attr_assign_value;
6836 v_attr_numeric_member := '';
6837 v_attr_varchar_member := '';
6838 END IF;
6839
6840 -----------------------------
6841 -- Insert Attribute Values --
6842 -----------------------------
6843 INSERT INTO fem_budgets_attr(
6844 attribute_id,
6845 version_id,
6846 budget_id,
6847 dim_attribute_numeric_member,
6848 dim_attribute_varchar_member,
6849 number_assign_value,
6850 varchar_assign_value,
6851 date_assign_value,
6852 creation_date,
6853 created_by,
6854 last_updated_by,
6855 last_update_date,
6856 last_update_login,
6857 aw_snapshot_flag,
6858 object_version_number)
6859 VALUES(
6860 v_attribute_id,
6861 v_version_id,
6865 v_attr_number_assign,
6862 v_budget_id,
6863 v_attr_numeric_member,
6864 v_attr_varchar_member,
6866 null,
6867 null,
6868 sysdate,
6869 c_user_id,
6870 c_user_id,
6871 sysdate,
6872 null,
6873 c_aw_snapshot_flag,
6874 c_object_version_number);
6875
6876 END IF;
6877
6878 END LOOP;
6879
6880 IF (p_commit = c_true)
6881 THEN
6882 COMMIT;
6883 END IF;
6884
6885 FND_MSG_PUB.Count_and_Get(
6886 p_encoded => p_encoded,
6887 p_count => x_msg_count,
6888 p_data => x_msg_data);
6889
6890 EXCEPTION
6891 WHEN e_dup_reg_id THEN
6892 FEM_Engines_Pkg.Put_Message(
6893 p_app_name => 'FEM',
6894 p_msg_name => 'FEM_DUP_REG_MEMBER_ERR',
6895 p_token1 => 'DIMENSION',
6896 p_value1 => FEM_Dimension_Util_Pkg.Get_Dimension_Name(
6897 p_dim_id => v_dim_id),
6898 p_trans1 => 'N',
6899 p_token2 => 'VALUE',
6900 p_value2 => p_budget_id);
6901 FND_MSG_PUB.Count_and_Get(
6902 p_encoded => p_encoded,
6903 p_count => x_msg_count,
6904 p_data => x_msg_data);
6905 x_return_status := c_error;
6906
6907 WHEN e_bad_param_value THEN
6908 ROLLBACK;
6909 FEM_ENGINES_PKG.Put_Message(
6910 p_app_name => 'FEM',
6911 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
6912 p_token1 => 'PARAM',
6913 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
6914 p_attr_id => v_attribute_id),
6915 p_token2 => 'VALUE',
6916 p_value2 => v_attr_assign_value);
6917 FND_MSG_PUB.Count_and_Get(
6918 p_encoded => p_encoded,
6919 p_count => x_msg_count,
6920 p_data => x_msg_data);
6921 x_return_status := c_error;
6922
6923 WHEN e_null_param_value THEN
6924 ROLLBACK;
6925 FEM_ENGINES_PKG.Put_Message(
6926 p_app_name => 'FEM',
6927 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
6928 p_token1 => 'PARAM',
6929 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
6930 p_attr_id => v_attribute_id));
6931 FND_MSG_PUB.Count_and_Get(
6932 p_encoded => p_encoded,
6933 p_count => x_msg_count,
6934 p_data => x_msg_data);
6935 x_return_status := c_error;
6936
6937 WHEN e_no_version_name THEN
6938 ROLLBACK;
6939 FEM_ENGINES_PKG.Put_Message(
6940 p_app_name => 'FEM',
6941 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
6942 p_token1 => 'ENTITY',
6943 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
6944 p_attr_id => v_attribute_id));
6945 FND_MSG_PUB.Count_and_Get(
6946 p_encoded => p_encoded,
6947 p_count => x_msg_count,
6948 p_data => x_msg_data);
6949 x_return_status := c_error;
6950
6951 WHEN e_dup_display_code THEN
6952 ROLLBACK;
6953 FEM_ENGINES_PKG.Put_Message(
6954 p_app_name => 'FEM',
6955 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
6956 p_token1 => 'VALUE',
6957 p_value1 => p_budget_display_code);
6958 FND_MSG_PUB.Count_and_Get(
6959 p_encoded => p_encoded,
6960 p_count => x_msg_count,
6961 p_data => x_msg_data);
6962 x_return_status := c_error;
6963
6964 END Register_Budget;
6965
6966 /*************************************************************************
6967
6968 Register Ledger
6969
6970 08/23/2006 rflippo Bug#5486589 Modify logic so that if -1 passed in as the
6971 Cal Period Hier ID then it doesn't try to validate it.
6972 The reason is that the OGL integration needs to create the
6973 ledger with a placeholder for the Cal Period Hier ID, since
6974 they won't have that information until the Cal Period hiers
6975 are created later.
6976 *************************************************************************/
6977
6978 PROCEDURE Register_Ledger (
6979 p_api_version IN NUMBER DEFAULT c_api_version,
6980 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
6981 p_commit IN VARCHAR2 DEFAULT c_false,
6982 p_encoded IN VARCHAR2 DEFAULT c_true,
6983 x_return_status OUT NOCOPY VARCHAR2,
6984 x_msg_count OUT NOCOPY NUMBER,
6985 x_msg_data OUT NOCOPY VARCHAR2,
6986 p_ledger_id IN NUMBER,
6987 p_display_code IN VARCHAR2,
6988 p_ledger_name IN VARCHAR2,
6989 p_func_curr_cd IN VARCHAR2,
6990 p_source_cd IN NUMBER,
6991 p_cal_per_hid IN NUMBER,
6992 p_global_vs_id IN NUMBER,
6993 p_epb_def_lg_flg IN VARCHAR2,
6994 p_ent_curr_flg IN VARCHAR2,
6995 p_avg_bal_flg IN VARCHAR2,
6996 p_chan_flg IN VARCHAR2 DEFAULT 'N',
6997 p_cctr_flg IN VARCHAR2 DEFAULT 'N',
6998 p_cust_flg IN VARCHAR2 DEFAULT 'N',
6999 p_geog_flg IN VARCHAR2 DEFAULT 'N',
7000 p_ln_item_flg IN VARCHAR2 DEFAULT 'N',
7004 p_entity_flg IN VARCHAR2 DEFAULT 'N',
7001 p_nat_acct_flg IN VARCHAR2 DEFAULT 'N',
7002 p_prod_flg IN VARCHAR2 DEFAULT 'N',
7003 p_proj_flg IN VARCHAR2 DEFAULT 'N',
7005 p_user1_flg IN VARCHAR2 DEFAULT 'N',
7006 p_user2_flg IN VARCHAR2 DEFAULT 'N',
7007 p_user3_flg IN VARCHAR2 DEFAULT 'N',
7008 p_user4_flg IN VARCHAR2 DEFAULT 'N',
7009 p_user5_flg IN VARCHAR2 DEFAULT 'N',
7010 p_user6_flg IN VARCHAR2 DEFAULT 'N',
7011 p_user7_flg IN VARCHAR2 DEFAULT 'N',
7012 p_user8_flg IN VARCHAR2 DEFAULT 'N',
7013 p_user9_flg IN VARCHAR2 DEFAULT 'N',
7014 p_user10_flg IN VARCHAR2 DEFAULT 'N',
7015 p_task_flg IN VARCHAR2 DEFAULT 'N',
7016 p_fin_elem_flg IN VARCHAR2 DEFAULT 'N',
7017 p_ver_name IN VARCHAR2,
7018 p_ver_disp_cd IN VARCHAR2,
7019 p_ledger_desc IN VARCHAR2
7020 )
7021 IS
7022
7023 c_module_prg VARCHAR2(160) := c_module_pkg||'.new_ledger';
7024
7025 c_dim_label CONSTANT VARCHAR2(30) := 'LEDGER';
7026 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
7027 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
7028 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
7029 c_obj_ver_no CONSTANT NUMBER := 1;
7030 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
7031
7032 v_row_id VARCHAR2(20) := '';
7033
7034 v_dim_id NUMBER;
7035 v_lg_id NUMBER;
7036 v_ver_id NUMBER;
7037 v_attr_id NUMBER;
7038 v_xdim_id NUMBER;
7039 v_xdim_tab VARCHAR2(30);
7040 v_xdim_col VARCHAR2(30);
7041 v_xdim_cd_col VARCHAR2(30);
7042 v_attr_label VARCHAR2(30);
7043 v_attr_col VARCHAR2(30);
7044 v_reqd_flg VARCHAR2(1);
7045 v_attr_value VARCHAR2(1000);
7046 v_attr_date DATE;
7047 v_attr_num NUMBER;
7048 v_attr_vch VARCHAR2(30);
7049
7050 v_sql_cmd VARCHAR2(32767);
7051
7052 CURSOR cv_dim_attr IS
7053 SELECT attribute_id,
7054 attribute_varchar_label,
7055 attribute_dimension_id,
7056 attribute_value_column_name,
7057 attribute_required_flag
7058 FROM fem_dim_attributes_b
7059 WHERE dimension_id =
7060 (SELECT dimension_id
7061 FROM fem_dimensions_b
7062 WHERE dimension_varchar_label = c_dim_label);
7063
7064 e_dup_reg_id EXCEPTION;
7065
7066 BEGIN
7067
7068 x_return_status := c_success;
7069
7070 ---------------------
7071 -- Validate Ledger ID
7072 ---------------------
7073 SELECT dimension_id
7074 INTO v_dim_id
7075 FROM fem_dimensions_b
7076 WHERE dimension_varchar_label = c_dim_label;
7077
7078 BEGIN
7079 SELECT ledger_id
7080 INTO v_lg_id
7081 FROM fem_ledgers_b
7082 WHERE ledger_id = p_ledger_id;
7083 EXCEPTION
7084 WHEN no_data_found THEN
7085 v_lg_id := null;
7086 END;
7087
7088 IF (v_lg_id IS NULL)
7089 THEN
7090 v_lg_id := p_ledger_id;
7091 ELSE
7092 RAISE e_dup_reg_id;
7093 END IF;
7094
7095 Validate_OA_Params (
7096 p_api_version => p_api_version,
7097 p_init_msg_list => p_init_msg_list,
7098 p_commit => p_commit,
7099 p_encoded => p_encoded,
7100 x_return_status => x_return_status);
7101
7102 IF (x_return_status <> c_success)
7103 THEN
7104 FND_MSG_PUB.Count_and_Get(
7105 p_encoded => c_false,
7106 p_count => x_msg_count,
7107 p_data => x_msg_data);
7108 RETURN;
7109 END IF;
7110
7111 ------------------------------
7112 -- Insert New Ledger Member --
7113 ------------------------------
7114 BEGIN
7115 FEM_LEDGERS_PKG.INSERT_ROW(
7116 x_rowid => v_row_id,
7117 x_ledger_id => v_lg_id,
7118 x_personal_flag => c_pers_flg,
7119 x_read_only_flag => c_ro_flg,
7120 x_object_version_number => c_obj_ver_no,
7121 x_enabled_flag => c_enbld_flg,
7122 x_ledger_display_code => p_display_code,
7123 x_ledger_name => p_ledger_name,
7124 x_description => p_ledger_desc,
7125 x_creation_date => sysdate,
7126 x_created_by => c_user_id,
7127 x_last_update_date => sysdate,
7128 x_last_updated_by => c_user_id,
7129 x_last_update_login => null);
7130 EXCEPTION
7131 WHEN dup_val_on_index THEN
7132 RAISE e_dup_display_code;
7133 END;
7134
7135 ----------------------------------
7136 -- Insert New Ledger Attributes --
7137 ----------------------------------
7138 FOR r_dim_attr IN cv_dim_attr
7139 LOOP
7140 v_attr_id := r_dim_attr.attribute_id;
7141 v_attr_label := r_dim_attr.attribute_varchar_label;
7142 v_xdim_id := r_dim_attr.attribute_dimension_id;
7143 v_attr_col := r_dim_attr.attribute_value_column_name;
7144 v_reqd_flg := r_dim_attr.attribute_required_flag;
7145
7146 -------------------------------
7147 -- Check Attribute's Version --
7148 -------------------------------
7149 SELECT MIN(version_id)
7150 INTO v_ver_id
7151 FROM fem_dim_attr_versions_b
7152 WHERE attribute_id = v_attr_id
7153 AND default_version_flag = 'Y';
7154
7155 IF (v_ver_id IS NULL)
7156 THEN
7157 IF (p_ver_name IS NULL)
7161 THEN
7158 THEN
7159 RAISE e_no_version_name;
7160 ELSIF (p_ver_disp_cd IS NULL)
7162 RAISE e_no_version_name;
7163 END IF;
7164
7165 SELECT fem_dim_attr_versions_b_s.NEXTVAL
7166 INTO v_ver_id FROM dual;
7167
7168 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
7169 x_rowid => v_row_id,
7170 x_version_id => v_ver_id,
7171 x_aw_snapshot_flag => c_aw_flg,
7172 x_version_display_code => p_ver_disp_cd,
7173 x_object_version_number => c_obj_ver_no,
7174 x_default_version_flag => 'Y',
7175 x_personal_flag => c_pers_flg,
7176 x_attribute_id => v_attr_id,
7177 x_version_name => p_ver_name,
7178 x_description => null,
7179 x_creation_date => sysdate,
7180 x_created_by => c_user_id,
7181 x_last_update_date => sysdate,
7182 x_last_updated_by => c_user_id,
7183 x_last_update_login => null);
7184 END IF;
7185
7186 -----------------------------
7187 -- Get Attribute Parameter --
7188 -----------------------------
7189 CASE v_attr_label
7190 WHEN 'LEDGER_FUNCTIONAL_CRNCY_CODE' THEN
7191 v_attr_value := p_func_curr_cd;
7192 WHEN 'SOURCE_SYSTEM_CODE' THEN
7193 v_attr_value := p_source_cd;
7194 WHEN 'CAL_PERIOD_HIER_OBJ_DEF_ID' THEN
7195 v_attr_value := p_cal_per_hid;
7196 WHEN 'GLOBAL_VS_COMBO' THEN
7197 v_attr_value := p_global_vs_id;
7198 WHEN 'EPB_DEFAULT_LEDGER_FLAG' THEN
7199 v_attr_value := p_epb_def_lg_flg;
7200 WHEN 'ENTERED_CRNCY_ENABLE_FLAG' THEN
7201 v_attr_value := p_ent_curr_flg;
7202 WHEN 'LEDGER_ENABLE_AVG_BAL_FLAG' THEN
7203 v_attr_value := p_avg_bal_flg;
7204 WHEN 'LEDGER_CHANNEL_IS_POP_FLAG' THEN
7205 v_attr_value := p_chan_flg;
7206 WHEN 'LEDGER_CCTR_IS_POP_FLAG' THEN
7207 v_attr_value := p_cctr_flg;
7208 WHEN 'LEDGER_CUSTOMER_IS_POP_FLAG' THEN
7209 v_attr_value := p_cust_flg;
7210 WHEN 'LEDGER_GEOGRAPHY_IS_POP_FLAG' THEN
7211 v_attr_value := p_geog_flg;
7212 WHEN 'LEDGER_LINE_ITEM_IS_POP_FLAG' THEN
7213 v_attr_value := p_ln_item_flg;
7214 WHEN 'LEDGER_NAT_ACCT_IS_POP_FLAG' THEN
7215 v_attr_value := p_nat_acct_flg;
7216 WHEN 'LEDGER_PRODUCT_IS_POP_FLAG' THEN
7217 v_attr_value := p_prod_flg;
7218 WHEN 'LEDGER_PROJECT_IS_POP_FLAG' THEN
7219 v_attr_value := p_proj_flg;
7220 WHEN 'LEDGER_ENTITY_IS_POP_FLAG' THEN
7221 v_attr_value := p_entity_flg;
7222 WHEN 'LEDGER_USER_DIM1_IS_POP_FLAG' THEN
7223 v_attr_value := p_user1_flg;
7224 WHEN 'LEDGER_USER_DIM2_IS_POP_FLAG' THEN
7225 v_attr_value := p_user2_flg;
7226 WHEN 'LEDGER_USER_DIM3_IS_POP_FLAG' THEN
7227 v_attr_value := p_user3_flg;
7228 WHEN 'LEDGER_USER_DIM4_IS_POP_FLAG' THEN
7229 v_attr_value := p_user4_flg;
7230 WHEN 'LEDGER_USER_DIM5_IS_POP_FLAG' THEN
7231 v_attr_value := p_user5_flg;
7232 WHEN 'LEDGER_USER_DIM6_IS_POP_FLAG' THEN
7233 v_attr_value := p_user6_flg;
7234 WHEN 'LEDGER_USER_DIM7_IS_POP_FLAG' THEN
7235 v_attr_value := p_user7_flg;
7236 WHEN 'LEDGER_USER_DIM8_IS_POP_FLAG' THEN
7237 v_attr_value := p_user8_flg;
7238 WHEN 'LEDGER_USER_DIM9_IS_POP_FLAG' THEN
7239 v_attr_value := p_user9_flg;
7240 WHEN 'LEDGER_USER_DIM10_IS_POP_FLAG' THEN
7241 v_attr_value := p_user10_flg;
7242 WHEN 'LEDGER_TASK_IS_POP_FLAG' THEN
7243 v_attr_value := p_task_flg;
7244 WHEN 'LEDGER_FIN_ELEM_IS_POP_FLAG' THEN
7245 v_attr_value := p_fin_elem_flg;
7246 ELSE
7247 FEM_ENGINES_PKG.Tech_Message(
7248 p_severity => c_log_level_1,
7249 p_module => c_module_pkg||'.New_Ledger.bad_attr_list',
7250 p_msg_text => 'The Ledger attribute '||v_attr_label||
7251 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
7252 ' the API''s list of attribute labels');
7253
7254 FEM_ENGINES_PKG.Put_Message(
7255 p_app_name => 'FEM',
7256 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
7257 p_token1 => 'ATTR',
7258 p_value1 => v_attr_label);
7259 END CASE;
7260
7261 IF (v_attr_value IS NULL)
7262 THEN
7263 CASE v_reqd_flg
7264 WHEN 'Y' THEN
7265 RAISE e_null_param_value;
7266 ELSE null;
7267 END CASE;
7268 ELSE
7269 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
7270 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
7271 THEN
7272 -------------------------------------
7273 -- Attribute is a Dimension Attribute
7274 -- which needs to be validated
7275 -------------------------------------
7276 SELECT member_b_table_name,
7277 member_col
7278 INTO v_xdim_tab,
7279 v_xdim_col
7280 FROM fem_xdim_dimensions
7281 WHERE dimension_id = v_xdim_id;
7282
7283 v_sql_cmd :=
7284 'SELECT '||v_xdim_col||
7285 ' FROM '||v_xdim_tab||
7289 IF v_attr_label = 'CAL_PERIOD_HIER_OBJ_DEF_ID' AND v_attr_value = -1 THEN
7286 ' WHERE '||v_xdim_col||' = :b_attr_value';
7287
7288 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER') THEN
7290 v_attr_num := v_attr_value;
7291 ELSE
7292 BEGIN
7293 EXECUTE IMMEDIATE v_sql_cmd
7294 INTO v_attr_num
7295 USING v_attr_value;
7296 EXCEPTION
7297 WHEN no_data_found THEN
7298 RAISE e_bad_param_value;
7299 END;
7300 END IF;
7301 v_attr_vch := '';
7302 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
7303 THEN
7304 BEGIN
7305 EXECUTE IMMEDIATE v_sql_cmd
7306 INTO v_attr_vch
7307 USING v_attr_value;
7308 EXCEPTION
7309 WHEN no_data_found THEN
7310 RAISE e_bad_param_value;
7311 END;
7312 v_attr_num := '';
7313 END IF;
7314
7315 INSERT INTO fem_ledgers_attr(
7316 attribute_id,
7317 version_id,
7318 ledger_id,
7319 dim_attribute_numeric_member,
7320 dim_attribute_varchar_member,
7321 number_assign_value,
7322 varchar_assign_value,
7323 date_assign_value,
7324 creation_date,
7325 created_by,
7326 last_updated_by,
7327 last_update_date,
7328 last_update_login,
7329 object_version_number,
7330 aw_snapshot_flag)
7331 VALUES(
7332 v_attr_id,
7333 v_ver_id,
7334 v_lg_id,
7335 v_attr_num,
7336 v_attr_vch,
7337 null,
7338 null,
7339 null,
7340 sysdate,
7341 c_user_id,
7342 c_user_id,
7343 sysdate,
7344 null,
7345 c_obj_ver_no,
7346 c_aw_flg);
7347
7348 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
7349 THEN
7350 ----------------------------------------
7351 -- Attribute is an assigned number value
7352 ----------------------------------------
7353 INSERT INTO fem_ledgers_attr(
7354 attribute_id,
7355 version_id,
7356 ledger_id,
7357 dim_attribute_numeric_member,
7358 dim_attribute_varchar_member,
7359 number_assign_value,
7360 varchar_assign_value,
7361 date_assign_value,
7362 creation_date,
7363 created_by,
7364 last_updated_by,
7365 last_update_date,
7366 last_update_login,
7367 object_version_number,
7368 aw_snapshot_flag)
7369 VALUES(
7370 v_attr_id,
7371 v_ver_id,
7372 v_lg_id,
7373 null,
7374 null,
7375 v_attr_value,
7376 null,
7377 null,
7378 sysdate,
7379 c_user_id,
7380 c_user_id,
7381 sysdate,
7382 null,
7383 c_obj_ver_no,
7384 c_aw_flg);
7385
7386 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
7387 THEN
7388 -----------------------------------------
7389 -- Attribute is an assigned varchar value
7390 -----------------------------------------
7391 INSERT INTO fem_ledgers_attr(
7392 attribute_id,
7393 version_id,
7394 ledger_id,
7395 dim_attribute_numeric_member,
7396 dim_attribute_varchar_member,
7397 number_assign_value,
7398 varchar_assign_value,
7399 date_assign_value,
7400 creation_date,
7401 created_by,
7402 last_updated_by,
7403 last_update_date,
7404 last_update_login,
7405 object_version_number,
7406 aw_snapshot_flag)
7407 VALUES(
7408 v_attr_id,
7409 v_ver_id,
7410 v_lg_id,
7411 null,
7412 null,
7413 null,
7414 v_attr_value,
7415 null,
7416 sysdate,
7417 c_user_id,
7418 c_user_id,
7419 sysdate,
7420 null,
7421 c_obj_ver_no,
7422 c_aw_flg);
7423
7424 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
7425 THEN
7426 --------------------------------------
7427 -- Attribute is an assigned date value
7428 --------------------------------------
7429 INSERT INTO fem_ledgers_attr(
7430 attribute_id,
7431 version_id,
7432 ledger_id,
7433 dim_attribute_numeric_member,
7434 dim_attribute_varchar_member,
7435 number_assign_value,
7436 varchar_assign_value,
7440 last_updated_by,
7437 date_assign_value,
7438 creation_date,
7439 created_by,
7441 last_update_date,
7442 last_update_login,
7443 object_version_number,
7444 aw_snapshot_flag)
7445 VALUES(
7446 v_attr_id,
7447 v_ver_id,
7448 v_lg_id,
7449 null,
7450 null,
7451 null,
7452 null,
7453 v_attr_date,
7454 sysdate,
7455 c_user_id,
7456 c_user_id,
7457 sysdate,
7458 null,
7459 c_obj_ver_no,
7460 c_aw_flg);
7461
7462 END IF;
7463 END IF;
7464 END LOOP;
7465
7466 IF (p_commit = c_true)
7467 THEN
7468 COMMIT;
7469 END IF;
7470
7471 FND_MSG_PUB.Count_and_Get(
7472 p_encoded => p_encoded,
7473 p_count => x_msg_count,
7474 p_data => x_msg_data);
7475
7476 EXCEPTION
7477 WHEN e_dup_reg_id THEN
7478 FEM_Engines_Pkg.Put_Message(
7479 p_app_name => 'FEM',
7480 p_msg_name => 'FEM_DUP_REG_MEMBER_ERR',
7481 p_token1 => 'DIMENSION',
7482 p_value1 => FEM_Dimension_Util_Pkg.Get_Dimension_Name(
7483 p_dim_id => v_dim_id),
7484 p_trans1 => 'N',
7485 p_token2 => 'VALUE',
7486 p_value2 => p_ledger_id);
7487 FND_MSG_PUB.Count_and_Get(
7488 p_encoded => p_encoded,
7489 p_count => x_msg_count,
7490 p_data => x_msg_data);
7491 x_return_status := c_error;
7492
7493 WHEN e_bad_param_value THEN
7494 ROLLBACK;
7495 FEM_ENGINES_PKG.Put_Message(
7496 p_app_name => 'FEM',
7497 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
7498 p_token1 => 'PARAM',
7499 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
7500 p_attr_id => v_attr_id),
7501 p_token2 => 'VALUE',
7502 p_value2 => v_attr_value);
7503 FND_MSG_PUB.Count_and_Get(
7504 p_encoded => p_encoded,
7505 p_count => x_msg_count,
7506 p_data => x_msg_data);
7507 x_return_status := c_error;
7508
7509 WHEN e_null_param_value THEN
7510 ROLLBACK;
7511 FEM_ENGINES_PKG.Put_Message(
7512 p_app_name => 'FEM',
7513 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
7514 p_token1 => 'PARAM',
7515 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
7516 p_attr_id => v_attr_id));
7517 FND_MSG_PUB.Count_and_Get(
7518 p_encoded => p_encoded,
7519 p_count => x_msg_count,
7520 p_data => x_msg_data);
7521 x_return_status := c_error;
7522
7523 WHEN e_no_version_name THEN
7524 ROLLBACK;
7525 FEM_ENGINES_PKG.Put_Message(
7526 p_app_name => 'FEM',
7527 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
7528 p_token1 => 'ENTITY',
7529 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
7530 p_attr_id => v_attr_id));
7531 FND_MSG_PUB.Count_and_Get(
7532 p_encoded => p_encoded,
7533 p_count => x_msg_count,
7534 p_data => x_msg_data);
7535 x_return_status := c_error;
7536
7537 WHEN e_dup_display_code THEN
7538 ROLLBACK;
7539 FEM_ENGINES_PKG.Put_Message(
7540 p_app_name => 'FEM',
7541 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
7542 p_token1 => 'VALUE',
7543 p_value1 => p_display_code);
7544 FND_MSG_PUB.Count_and_Get(
7545 p_encoded => p_encoded,
7546 p_count => x_msg_count,
7547 p_data => x_msg_data);
7548 x_return_status := c_error;
7549
7550 END Register_Ledger;
7551
7552 /*************************************************************************
7553
7554 New Encumbrance Type
7555
7556 *************************************************************************/
7557
7558 PROCEDURE New_Encumbrance_Type (
7559 p_api_version IN NUMBER DEFAULT c_api_version,
7560 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
7561 p_commit IN VARCHAR2 DEFAULT c_false,
7562 p_encoded IN VARCHAR2 DEFAULT c_true,
7563 x_return_status OUT NOCOPY VARCHAR2,
7564 x_msg_count OUT NOCOPY NUMBER,
7565 x_msg_data OUT NOCOPY VARCHAR2,
7566 x_enc_type_id OUT NOCOPY NUMBER,
7567 p_enc_type_code IN VARCHAR2,
7568 p_enc_type_name IN VARCHAR2,
7569 p_enc_type_desc IN VARCHAR2,
7570 p_source_cd IN NUMBER,
7571 p_ver_name IN VARCHAR2,
7572 p_ver_disp_cd IN VARCHAR2
7573 )
7574 IS
7575
7576 c_module_prg VARCHAR2(160) := c_module_pkg||'.new_enc_type';
7577
7578 c_dim_label CONSTANT VARCHAR2(30) := 'ENCUMBRANCE_TYPE';
7579 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
7580 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
7581 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
7582 c_obj_ver_no CONSTANT NUMBER := 1;
7583 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
7584
7588 v_enc_type_id NUMBER;
7585 v_row_id VARCHAR2(20) := '';
7586
7587 v_dim_id NUMBER;
7589 v_ver_id NUMBER;
7590 v_attr_id NUMBER;
7591 v_xdim_id NUMBER;
7592 v_xdim_tab VARCHAR2(30);
7593 v_xdim_col VARCHAR2(30);
7594 v_xdim_cd_col VARCHAR2(30);
7595 v_attr_label VARCHAR2(30);
7596 v_attr_col VARCHAR2(30);
7597 v_reqd_flg VARCHAR2(1);
7598 v_attr_value VARCHAR2(1000);
7599 v_attr_date DATE;
7600 v_attr_num NUMBER;
7601 v_attr_vch VARCHAR2(30);
7602
7603 v_sql_cmd VARCHAR2(32767);
7604
7605 CURSOR cv_dim_attr IS
7606 SELECT attribute_id,
7607 attribute_varchar_label,
7608 attribute_dimension_id,
7609 attribute_value_column_name,
7610 attribute_required_flag
7611 FROM fem_dim_attributes_b
7612 WHERE dimension_id =
7613 (SELECT dimension_id
7614 FROM fem_dimensions_b
7615 WHERE dimension_varchar_label = c_dim_label);
7616
7617 BEGIN
7618
7619 x_return_status := c_success;
7620 x_enc_type_id := -1;
7621
7622 Validate_OA_Params (
7623 p_api_version => p_api_version,
7624 p_init_msg_list => p_init_msg_list,
7625 p_commit => p_commit,
7626 p_encoded => p_encoded,
7627 x_return_status => x_return_status);
7628
7629 IF (x_return_status <> c_success)
7630 THEN
7631 FND_MSG_PUB.Count_and_Get(
7632 p_encoded => c_false,
7633 p_count => x_msg_count,
7634 p_data => x_msg_data);
7635 RETURN;
7636 END IF;
7637
7638 ---------------------------------
7639 -- Get New Encumbrance Type ID --
7640 ---------------------------------
7641 SELECT dimension_id
7642 INTO v_dim_id
7643 FROM fem_dimensions_b
7644 WHERE dimension_varchar_label = c_dim_label;
7645
7646 v_enc_type_id := FEM_Dimension_Util_Pkg.Generate_Member_ID(
7647 p_api_version => p_api_version,
7648 p_init_msg_list => c_false,
7649 p_commit => c_false,
7650 p_encoded => p_encoded,
7651 x_return_status => x_return_status,
7652 x_msg_count => x_msg_count,
7653 x_msg_data => x_msg_data,
7654 p_dim_id => v_dim_id);
7655
7656 IF (x_return_status <> c_success)
7657 THEN
7658 RETURN;
7659 END IF;
7660
7661 ----------------------------------------
7662 -- Insert New Encumbrance Type Member --
7663 ----------------------------------------
7664 BEGIN
7665 FEM_ENCUMBRANCE_TYPES_PKG.INSERT_ROW(
7666 x_rowid => v_row_id,
7667 x_encumbrance_type_id => v_enc_type_id,
7668 x_personal_flag => c_pers_flg,
7669 x_encumbrance_type_code => p_enc_type_code,
7670 x_enabled_flag => c_enbld_flg,
7671 x_object_version_number => c_obj_ver_no,
7672 x_read_only_flag => c_ro_flg,
7673 x_encumbrance_type_name => p_enc_type_name,
7674 x_description => p_enc_type_desc,
7675 x_creation_date => sysdate,
7676 x_created_by => c_user_id,
7677 x_last_update_date => sysdate,
7678 x_last_updated_by => c_user_id,
7679 x_last_update_login => null);
7680 EXCEPTION
7681 WHEN dup_val_on_index THEN
7682 RAISE e_dup_display_code;
7683 END;
7684
7685 --------------------------------------------
7686 -- Insert New Encumbrance Type Attributes --
7687 --------------------------------------------
7688 FOR r_dim_attr IN cv_dim_attr
7689 LOOP
7690 v_attr_id := r_dim_attr.attribute_id;
7691 v_attr_label := r_dim_attr.attribute_varchar_label;
7692 v_xdim_id := r_dim_attr.attribute_dimension_id;
7693 v_attr_col := r_dim_attr.attribute_value_column_name;
7694 v_reqd_flg := r_dim_attr.attribute_required_flag;
7695
7696 -------------------------------
7697 -- Check Attribute's Version --
7698 -------------------------------
7699 SELECT MIN(version_id)
7700 INTO v_ver_id
7701 FROM fem_dim_attr_versions_b
7702 WHERE attribute_id = v_attr_id
7703 AND default_version_flag = 'Y';
7704
7705 IF (v_ver_id IS NULL)
7706 THEN
7707 IF (p_ver_name IS NULL)
7708 THEN
7709 RAISE e_no_version_name;
7710 ELSIF (p_ver_disp_cd IS NULL)
7711 THEN
7712 RAISE e_no_version_name;
7713 END IF;
7714
7715 SELECT fem_dim_attr_versions_b_s.NEXTVAL
7716 INTO v_ver_id FROM dual;
7717
7718 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
7719 x_rowid => v_row_id,
7720 x_version_id => v_ver_id,
7721 x_aw_snapshot_flag => c_aw_flg,
7722 x_version_display_code => p_ver_disp_cd,
7723 x_object_version_number => c_obj_ver_no,
7724 x_default_version_flag => 'Y',
7725 x_personal_flag => c_pers_flg,
7726 x_attribute_id => v_attr_id,
7727 x_version_name => p_ver_name,
7728 x_description => null,
7729 x_creation_date => sysdate,
7730 x_created_by => c_user_id,
7731 x_last_update_date => sysdate,
7732 x_last_updated_by => c_user_id,
7733 x_last_update_login => null);
7734 END IF;
7735
7736 -----------------------------
7740 WHEN 'SOURCE_SYSTEM_CODE' THEN
7737 -- Get Attribute Parameter --
7738 -----------------------------
7739 CASE v_attr_label
7741 v_attr_value := p_source_cd;
7742 ELSE
7743 FEM_ENGINES_PKG.Tech_Message(
7744 p_severity => c_log_level_1,
7745 p_module => c_module_pkg||'.New_Encumbrance Type.bad_attr_list',
7746 p_msg_text => 'The Encumbrance Type attribute '||v_attr_label||
7747 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
7748 ' the API''s list of attribute labels');
7749
7750 FEM_ENGINES_PKG.Put_Message(
7751 p_app_name => 'FEM',
7752 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
7753 p_token1 => 'ATTR',
7754 p_value1 => v_attr_label);
7755 END CASE;
7756
7757 IF (v_attr_value IS NULL)
7758 THEN
7759 CASE v_reqd_flg
7760 WHEN 'Y' THEN
7761 RAISE e_null_param_value;
7762 ELSE null;
7763 END CASE;
7764 ELSE
7765 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
7766 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
7767 THEN
7768 -------------------------------------
7769 -- Attribute is a Dimension Attribute
7770 -- which needs to be validated
7771 -------------------------------------
7772 SELECT member_b_table_name,
7773 member_col
7774 INTO v_xdim_tab,
7775 v_xdim_col
7776 FROM fem_xdim_dimensions
7777 WHERE dimension_id = v_xdim_id;
7778
7779 v_sql_cmd :=
7780 'SELECT '||v_xdim_col||
7781 ' FROM '||v_xdim_tab||
7782 ' WHERE '||v_xdim_col||' = :b_attr_value';
7783
7784 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
7785 THEN
7786 BEGIN
7787 EXECUTE IMMEDIATE v_sql_cmd
7788 INTO v_attr_num
7789 USING v_attr_value;
7790 EXCEPTION
7791 WHEN no_data_found THEN
7792 RAISE e_bad_param_value;
7793 END;
7794 v_attr_vch := '';
7795 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
7796 THEN
7797 BEGIN
7798 EXECUTE IMMEDIATE v_sql_cmd
7799 INTO v_attr_vch
7800 USING v_attr_value;
7801 EXCEPTION
7802 WHEN no_data_found THEN
7803 RAISE e_bad_param_value;
7804 END;
7805 v_attr_num := '';
7806 END IF;
7807
7808 INSERT INTO fem_enc_types_attr(
7809 attribute_id,
7810 version_id,
7811 encumbrance_type_id,
7812 dim_attribute_numeric_member,
7813 dim_attribute_varchar_member,
7814 number_assign_value,
7815 varchar_assign_value,
7816 date_assign_value,
7817 creation_date,
7818 created_by,
7819 last_updated_by,
7820 last_update_date,
7821 last_update_login,
7822 aw_snapshot_flag,
7823 object_version_number)
7824 VALUES(
7825 v_attr_id,
7826 v_ver_id,
7827 v_enc_type_id,
7828 v_attr_num,
7829 v_attr_vch,
7830 null,
7831 null,
7832 null,
7833 sysdate,
7834 c_user_id,
7835 c_user_id,
7836 sysdate,
7837 null,
7838 c_aw_flg,
7839 c_obj_ver_no);
7840 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
7841 THEN
7842 ----------------------------------------
7843 -- Attribute is an assigned number value
7844 ----------------------------------------
7845 INSERT INTO fem_enc_types_attr(
7846 attribute_id,
7847 version_id,
7848 encumbrance_type_id,
7849 dim_attribute_numeric_member,
7850 dim_attribute_varchar_member,
7851 number_assign_value,
7852 varchar_assign_value,
7853 date_assign_value,
7854 creation_date,
7855 created_by,
7856 last_updated_by,
7857 last_update_date,
7858 last_update_login,
7859 aw_snapshot_flag,
7860 object_version_number)
7861 VALUES(
7862 v_attr_id,
7863 v_ver_id,
7864 v_enc_type_id,
7865 null,
7866 null,
7867 v_attr_value,
7868 null,
7869 null,
7870 sysdate,
7871 c_user_id,
7872 c_user_id,
7873 sysdate,
7874 null,
7875 c_aw_flg,
7876 c_obj_ver_no);
7877 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
7878 THEN
7879 -----------------------------------------
7880 -- Attribute is an assigned varchar value
7881 -----------------------------------------
7882 INSERT INTO fem_enc_types_attr(
7883 attribute_id,
7884 version_id,
7888 number_assign_value,
7885 encumbrance_type_id,
7886 dim_attribute_numeric_member,
7887 dim_attribute_varchar_member,
7889 varchar_assign_value,
7890 date_assign_value,
7891 creation_date,
7892 created_by,
7893 last_updated_by,
7894 last_update_date,
7895 last_update_login,
7896 aw_snapshot_flag,
7897 object_version_number)
7898 VALUES(
7899 v_attr_id,
7900 v_ver_id,
7901 v_enc_type_id,
7902 null,
7903 null,
7904 null,
7905 v_attr_value,
7906 null,
7907 sysdate,
7908 c_user_id,
7909 c_user_id,
7910 sysdate,
7911 null,
7912 c_aw_flg,
7913 c_obj_ver_no);
7914 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
7915 THEN
7916 -----------------------------------------
7917 -- Attribute is an assigned date value
7918 -----------------------------------------
7919 INSERT INTO fem_enc_types_attr(
7920 attribute_id,
7921 version_id,
7922 encumbrance_type_id,
7923 dim_attribute_numeric_member,
7924 dim_attribute_varchar_member,
7925 number_assign_value,
7926 varchar_assign_value,
7927 date_assign_value,
7928 creation_date,
7929 created_by,
7930 last_updated_by,
7931 last_update_date,
7932 last_update_login,
7933 aw_snapshot_flag,
7934 object_version_number)
7935 VALUES(
7936 v_attr_id,
7937 v_ver_id,
7938 v_enc_type_id,
7939 null,
7940 null,
7941 null,
7942 null,
7943 v_attr_date,
7944 sysdate,
7945 c_user_id,
7946 c_user_id,
7947 sysdate,
7948 null,
7949 c_aw_flg,
7950 c_obj_ver_no);
7951 END IF;
7952 END IF;
7953 END LOOP;
7954
7955 x_enc_type_id := v_enc_type_id;
7956
7957 IF (p_commit = c_true)
7958 THEN
7959 COMMIT;
7960 END IF;
7961
7962 FND_MSG_PUB.Count_and_Get(
7963 p_encoded => p_encoded,
7964 p_count => x_msg_count,
7965 p_data => x_msg_data);
7966
7967 EXCEPTION
7968 WHEN e_bad_param_value THEN
7969 ROLLBACK;
7970 FEM_ENGINES_PKG.Put_Message(
7971 p_app_name => 'FEM',
7972 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
7973 p_token1 => 'PARAM',
7974 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
7975 p_attr_id => v_attr_id),
7976 p_token2 => 'VALUE',
7977 p_value2 => v_attr_value);
7978 FND_MSG_PUB.Count_and_Get(
7979 p_encoded => p_encoded,
7980 p_count => x_msg_count,
7981 p_data => x_msg_data);
7982 x_return_status := c_error;
7983
7984 WHEN e_null_param_value THEN
7985 ROLLBACK;
7986 FEM_ENGINES_PKG.Put_Message(
7987 p_app_name => 'FEM',
7988 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
7989 p_token1 => 'PARAM',
7990 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
7991 p_attr_id => v_attr_id));
7992 FND_MSG_PUB.Count_and_Get(
7993 p_encoded => p_encoded,
7994 p_count => x_msg_count,
7995 p_data => x_msg_data);
7996 x_return_status := c_error;
7997
7998 WHEN e_no_version_name THEN
7999 ROLLBACK;
8000 FEM_ENGINES_PKG.Put_Message(
8001 p_app_name => 'FEM',
8002 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
8003 p_token1 => 'ENTITY',
8004 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
8005 p_attr_id => v_attr_id));
8006 FND_MSG_PUB.Count_and_Get(
8007 p_encoded => p_encoded,
8008 p_count => x_msg_count,
8009 p_data => x_msg_data);
8010 x_return_status := c_error;
8011
8012 WHEN e_dup_display_code THEN
8013 ROLLBACK;
8014 FEM_ENGINES_PKG.Put_Message(
8015 p_app_name => 'FEM',
8016 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
8017 p_token1 => 'VALUE',
8018 p_value1 => p_enc_type_code);
8019 FND_MSG_PUB.Count_and_Get(
8020 p_encoded => p_encoded,
8021 p_count => x_msg_count,
8022 p_data => x_msg_data);
8023 x_return_status := c_error;
8024
8025 END New_Encumbrance_Type;
8026
8027 /*************************************************************************
8028
8029 Register Encumbrance Type
8030
8031 *************************************************************************/
8032
8033 PROCEDURE Register_Encumbrance_Type (
8034 p_api_version IN NUMBER DEFAULT c_api_version,
8035 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
8036 p_commit IN VARCHAR2 DEFAULT c_false,
8037 p_encoded IN VARCHAR2 DEFAULT c_true,
8038 x_return_status OUT NOCOPY VARCHAR2,
8042 p_enc_type_code IN VARCHAR2,
8039 x_msg_count OUT NOCOPY NUMBER,
8040 x_msg_data OUT NOCOPY VARCHAR2,
8041 p_enc_type_id IN NUMBER,
8043 p_enc_type_name IN VARCHAR2,
8044 p_enc_type_desc IN VARCHAR2,
8045 p_source_cd IN NUMBER,
8046 p_ver_name IN VARCHAR2,
8047 p_ver_disp_cd IN VARCHAR2
8048 )
8049 IS
8050
8051 c_module_prg VARCHAR2(160) := c_module_pkg||'.new_enc_type';
8052
8053 c_dim_label CONSTANT VARCHAR2(30) := 'ENCUMBRANCE_TYPE';
8054 c_enbld_flg CONSTANT VARCHAR2(1) := 'Y';
8055 c_ro_flg CONSTANT VARCHAR2(1) := 'N';
8056 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
8057 c_obj_ver_no CONSTANT NUMBER := 1;
8058 c_aw_flg CONSTANT VARCHAR2(1) := 'N';
8059
8060 v_row_id VARCHAR2(20) := '';
8061
8062 v_dim_id NUMBER;
8063 v_enc_type_id NUMBER;
8064 v_ver_id NUMBER;
8065 v_attr_id NUMBER;
8066 v_xdim_id NUMBER;
8067 v_xdim_tab VARCHAR2(30);
8068 v_xdim_col VARCHAR2(30);
8069 v_xdim_cd_col VARCHAR2(30);
8070 v_attr_label VARCHAR2(30);
8071 v_attr_col VARCHAR2(30);
8072 v_reqd_flg VARCHAR2(1);
8073 v_attr_value VARCHAR2(1000);
8074 v_attr_date DATE;
8075 v_attr_num NUMBER;
8076 v_attr_vch VARCHAR2(30);
8077
8078 v_sql_cmd VARCHAR2(32767);
8079
8080 CURSOR cv_dim_attr IS
8081 SELECT attribute_id,
8082 attribute_varchar_label,
8083 attribute_dimension_id,
8084 attribute_value_column_name,
8085 attribute_required_flag
8086 FROM fem_dim_attributes_b
8087 WHERE dimension_id =
8088 (SELECT dimension_id
8089 FROM fem_dimensions_b
8090 WHERE dimension_varchar_label = c_dim_label);
8091
8092 e_dup_reg_id EXCEPTION;
8093
8094 BEGIN
8095
8096 x_return_status := c_success;
8097
8098 -------------------------------
8099 -- Validate Encumbrance Type ID
8100 -------------------------------
8101 SELECT dimension_id
8102 INTO v_dim_id
8103 FROM fem_dimensions_b
8104 WHERE dimension_varchar_label = c_dim_label;
8105
8106 BEGIN
8107 SELECT encumbrance_type_id
8108 INTO v_enc_type_id
8109 FROM fem_encumbrance_types_b
8110 WHERE encumbrance_type_id = p_enc_type_id;
8111 EXCEPTION
8112 WHEN no_data_found THEN
8113 v_enc_type_id := null;
8114 END;
8115
8116 IF (v_enc_type_id IS NULL)
8117 THEN
8118 v_enc_type_id := p_enc_type_id;
8119 ELSE
8120 RAISE e_dup_reg_id;
8121 END IF;
8122
8123 Validate_OA_Params (
8124 p_api_version => p_api_version,
8125 p_init_msg_list => p_init_msg_list,
8126 p_commit => p_commit,
8127 p_encoded => p_encoded,
8128 x_return_status => x_return_status);
8129
8130 IF (x_return_status <> c_success)
8131 THEN
8132 FND_MSG_PUB.Count_and_Get(
8133 p_encoded => c_false,
8134 p_count => x_msg_count,
8135 p_data => x_msg_data);
8136 RETURN;
8137 END IF;
8138
8139 ----------------------------------------
8140 -- Insert New Encumbrance Type Member --
8141 ----------------------------------------
8142 BEGIN
8143 FEM_ENCUMBRANCE_TYPES_PKG.INSERT_ROW(
8144 x_rowid => v_row_id,
8145 x_encumbrance_type_id => v_enc_type_id,
8146 x_personal_flag => c_pers_flg,
8147 x_encumbrance_type_code => p_enc_type_code,
8148 x_enabled_flag => c_enbld_flg,
8149 x_object_version_number => c_obj_ver_no,
8150 x_read_only_flag => c_ro_flg,
8151 x_encumbrance_type_name => p_enc_type_name,
8152 x_description => p_enc_type_desc,
8153 x_creation_date => sysdate,
8154 x_created_by => c_user_id,
8155 x_last_update_date => sysdate,
8156 x_last_updated_by => c_user_id,
8157 x_last_update_login => null);
8158 EXCEPTION
8159 WHEN dup_val_on_index THEN
8160 RAISE e_dup_display_code;
8161 END;
8162
8163 --------------------------------------------
8164 -- Insert New Encumbrance Type Attributes --
8165 --------------------------------------------
8166 FOR r_dim_attr IN cv_dim_attr
8167 LOOP
8168 v_attr_id := r_dim_attr.attribute_id;
8169 v_attr_label := r_dim_attr.attribute_varchar_label;
8170 v_xdim_id := r_dim_attr.attribute_dimension_id;
8171 v_attr_col := r_dim_attr.attribute_value_column_name;
8172 v_reqd_flg := r_dim_attr.attribute_required_flag;
8173
8174 -------------------------------
8175 -- Check Attribute's Version --
8176 -------------------------------
8177 SELECT MIN(version_id)
8178 INTO v_ver_id
8179 FROM fem_dim_attr_versions_b
8180 WHERE attribute_id = v_attr_id
8181 AND default_version_flag = 'Y';
8182
8183 IF (v_ver_id IS NULL)
8184 THEN
8185 IF (p_ver_name IS NULL)
8186 THEN
8187 RAISE e_no_version_name;
8188 ELSIF (p_ver_disp_cd IS NULL)
8189 THEN
8190 RAISE e_no_version_name;
8191 END IF;
8192
8193 SELECT fem_dim_attr_versions_b_s.NEXTVAL
8194 INTO v_ver_id FROM dual;
8195
8196 FEM_DIM_ATTR_VERSIONS_PKG.INSERT_ROW(
8197 x_rowid => v_row_id,
8198 x_version_id => v_ver_id,
8202 x_default_version_flag => 'Y',
8199 x_aw_snapshot_flag => c_aw_flg,
8200 x_version_display_code => p_ver_disp_cd,
8201 x_object_version_number => c_obj_ver_no,
8203 x_personal_flag => c_pers_flg,
8204 x_attribute_id => v_attr_id,
8205 x_version_name => p_ver_name,
8206 x_description => null,
8207 x_creation_date => sysdate,
8208 x_created_by => c_user_id,
8209 x_last_update_date => sysdate,
8210 x_last_updated_by => c_user_id,
8211 x_last_update_login => null);
8212 END IF;
8213
8214 -----------------------------
8215 -- Get Attribute Parameter --
8216 -----------------------------
8217 CASE v_attr_label
8218 WHEN 'SOURCE_SYSTEM_CODE' THEN
8219 v_attr_value := p_source_cd;
8220 ELSE
8221 FEM_ENGINES_PKG.Tech_Message(
8222 p_severity => c_log_level_1,
8223 p_module => c_module_pkg||'.New_Encumbrance Type.bad_attr_list',
8224 p_msg_text => 'The Encumbrance Type attribute '||v_attr_label||
8225 ' is in FEM_DIM_ATTRIBUTES_B but not in'||
8226 ' the API''s list of attribute labels');
8227
8228 FEM_ENGINES_PKG.Put_Message(
8229 p_app_name => 'FEM',
8230 p_msg_name => 'FEM_BAD_ATTR_LIST_WARN',
8231 p_token1 => 'ATTR',
8232 p_value1 => v_attr_label);
8233 END CASE;
8234
8235 IF (v_attr_value IS NULL)
8236 THEN
8237 CASE v_reqd_flg
8238 WHEN 'Y' THEN
8239 RAISE e_null_param_value;
8240 ELSE null;
8241 END CASE;
8242 ELSE
8243 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER' OR
8244 v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
8245 THEN
8246 -------------------------------------
8247 -- Attribute is a Dimension Attribute
8248 -- which needs to be validated
8249 -------------------------------------
8250 SELECT member_b_table_name,
8251 member_col
8252 INTO v_xdim_tab,
8253 v_xdim_col
8254 FROM fem_xdim_dimensions
8255 WHERE dimension_id = v_xdim_id;
8256
8257 v_sql_cmd :=
8258 'SELECT '||v_xdim_col||
8259 ' FROM '||v_xdim_tab||
8260 ' WHERE '||v_xdim_col||' = :b_attr_value';
8261
8262 IF (v_attr_col = 'DIM_ATTRIBUTE_NUMERIC_MEMBER')
8263 THEN
8264 BEGIN
8265 EXECUTE IMMEDIATE v_sql_cmd
8266 INTO v_attr_num
8267 USING v_attr_value;
8268 EXCEPTION
8269 WHEN no_data_found THEN
8270 RAISE e_bad_param_value;
8271 END;
8272 v_attr_vch := '';
8273 ELSIF (v_attr_col = 'DIM_ATTRIBUTE_VARCHAR_MEMBER')
8274 THEN
8275 BEGIN
8276 EXECUTE IMMEDIATE v_sql_cmd
8277 INTO v_attr_vch
8278 USING v_attr_value;
8279 EXCEPTION
8280 WHEN no_data_found THEN
8281 RAISE e_bad_param_value;
8282 END;
8283 v_attr_num := '';
8284 END IF;
8285
8286 INSERT INTO fem_enc_types_attr(
8287 attribute_id,
8288 version_id,
8289 encumbrance_type_id,
8290 dim_attribute_numeric_member,
8291 dim_attribute_varchar_member,
8292 number_assign_value,
8293 varchar_assign_value,
8294 date_assign_value,
8295 creation_date,
8296 created_by,
8297 last_updated_by,
8298 last_update_date,
8299 last_update_login,
8300 aw_snapshot_flag,
8301 object_version_number)
8302 VALUES(
8303 v_attr_id,
8304 v_ver_id,
8305 v_enc_type_id,
8306 v_attr_num,
8307 v_attr_vch,
8308 null,
8309 null,
8310 null,
8311 sysdate,
8312 c_user_id,
8313 c_user_id,
8314 sysdate,
8315 null,
8316 c_aw_flg,
8317 c_obj_ver_no);
8318
8319 ELSIF (v_attr_col = 'NUMBER_ASSIGN_VALUE')
8320 THEN
8321 ----------------------------------------
8322 -- Attribute is an assigned number value
8323 ----------------------------------------
8324 INSERT INTO fem_enc_types_attr(
8325 attribute_id,
8326 version_id,
8327 encumbrance_type_id,
8328 dim_attribute_numeric_member,
8329 dim_attribute_varchar_member,
8330 number_assign_value,
8331 varchar_assign_value,
8332 date_assign_value,
8333 creation_date,
8334 created_by,
8335 last_updated_by,
8336 last_update_date,
8337 last_update_login,
8338 aw_snapshot_flag,
8339 object_version_number)
8340 VALUES(
8341 v_attr_id,
8342 v_ver_id,
8346 v_attr_value,
8343 v_enc_type_id,
8344 null,
8345 null,
8347 null,
8348 null,
8349 sysdate,
8350 c_user_id,
8351 c_user_id,
8352 sysdate,
8353 null,
8354 c_aw_flg,
8355 c_obj_ver_no);
8356
8357 ELSIF (v_attr_col = 'VARCHAR_ASSIGN_VALUE')
8358 THEN
8359 -----------------------------------------
8360 -- Attribute is an assigned varchar value
8361 -----------------------------------------
8362 INSERT INTO fem_enc_types_attr(
8363 attribute_id,
8364 version_id,
8365 encumbrance_type_id,
8366 dim_attribute_numeric_member,
8367 dim_attribute_varchar_member,
8368 number_assign_value,
8369 varchar_assign_value,
8370 date_assign_value,
8371 creation_date,
8372 created_by,
8373 last_updated_by,
8374 last_update_date,
8375 last_update_login,
8376 aw_snapshot_flag,
8377 object_version_number)
8378 VALUES(
8379 v_attr_id,
8380 v_ver_id,
8381 v_enc_type_id,
8382 null,
8383 null,
8384 null,
8385 v_attr_value,
8386 null,
8387 sysdate,
8388 c_user_id,
8389 c_user_id,
8390 sysdate,
8391 null,
8392 c_aw_flg,
8393 c_obj_ver_no);
8394
8395 ELSIF (v_attr_col = 'DATE_ASSIGN_VALUE')
8396 THEN
8397 -----------------------------------------
8398 -- Attribute is an assigned date value
8399 -----------------------------------------
8400 INSERT INTO fem_enc_types_attr(
8401 attribute_id,
8402 version_id,
8403 encumbrance_type_id,
8404 dim_attribute_numeric_member,
8405 dim_attribute_varchar_member,
8406 number_assign_value,
8407 varchar_assign_value,
8408 date_assign_value,
8409 creation_date,
8410 created_by,
8411 last_updated_by,
8412 last_update_date,
8413 last_update_login,
8414 aw_snapshot_flag,
8415 object_version_number)
8416 VALUES(
8417 v_attr_id,
8418 v_ver_id,
8419 v_enc_type_id,
8420 null,
8421 null,
8422 null,
8423 null,
8424 v_attr_date,
8425 sysdate,
8426 c_user_id,
8427 c_user_id,
8428 sysdate,
8429 null,
8430 c_aw_flg,
8431 c_obj_ver_no);
8432 END IF;
8433
8434 END IF;
8435 END LOOP;
8436
8437 IF (p_commit = c_true)
8438 THEN
8439 COMMIT;
8440 END IF;
8441
8442 FND_MSG_PUB.Count_and_Get(
8443 p_encoded => p_encoded,
8444 p_count => x_msg_count,
8445 p_data => x_msg_data);
8446
8447 EXCEPTION
8448 WHEN e_dup_reg_id THEN
8449 FEM_Engines_Pkg.Put_Message(
8450 p_app_name => 'FEM',
8451 p_msg_name => 'FEM_DUP_REG_MEMBER_ERR',
8452 p_token1 => 'DIMENSION',
8453 p_value1 => FEM_Dimension_Util_Pkg.Get_Dimension_Name(
8454 p_dim_id => v_dim_id),
8455 p_trans1 => 'N',
8456 p_token2 => 'VALUE',
8457 p_value2 => p_enc_type_id);
8458 FND_MSG_PUB.Count_and_Get(
8459 p_encoded => p_encoded,
8460 p_count => x_msg_count,
8461 p_data => x_msg_data);
8462 x_return_status := c_error;
8463
8464 WHEN e_bad_param_value THEN
8465 ROLLBACK;
8466 FEM_ENGINES_PKG.Put_Message(
8467 p_app_name => 'FEM',
8468 p_msg_name => 'FEM_BAD_PARAM_VALUE_ERR',
8469 p_token1 => 'PARAM',
8470 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
8471 p_attr_id => v_attr_id),
8472 p_token2 => 'VALUE',
8473 p_value2 => v_attr_value);
8474 FND_MSG_PUB.Count_and_Get(
8475 p_encoded => p_encoded,
8476 p_count => x_msg_count,
8477 p_data => x_msg_data);
8478 x_return_status := c_error;
8479
8480 WHEN e_null_param_value THEN
8481 ROLLBACK;
8482 FEM_ENGINES_PKG.Put_Message(
8483 p_app_name => 'FEM',
8484 p_msg_name => 'FEM_NULL_PARAM_VALUE_ERR',
8485 p_token1 => 'PARAM',
8486 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
8487 p_attr_id => v_attr_id));
8488 FND_MSG_PUB.Count_and_Get(
8489 p_encoded => p_encoded,
8490 p_count => x_msg_count,
8491 p_data => x_msg_data);
8492 x_return_status := c_error;
8493
8494 WHEN e_no_version_name THEN
8495 ROLLBACK;
8496 FEM_ENGINES_PKG.Put_Message(
8497 p_app_name => 'FEM',
8498 p_msg_name => 'FEM_NO_VERSION_NAME_ERR',
8502 FND_MSG_PUB.Count_and_Get(
8499 p_token1 => 'ENTITY',
8500 p_value1 => FEM_Dimension_Util_Pkg.Get_Dim_Attr_Name(
8501 p_attr_id => v_attr_id));
8503 p_encoded => p_encoded,
8504 p_count => x_msg_count,
8505 p_data => x_msg_data);
8506 x_return_status := c_error;
8507
8508 WHEN e_dup_display_code THEN
8509 ROLLBACK;
8510 FEM_ENGINES_PKG.Put_Message(
8511 p_app_name => 'FEM',
8512 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
8513 p_token1 => 'VALUE',
8514 p_value1 => p_enc_type_code);
8515 FND_MSG_PUB.Count_and_Get(
8516 p_encoded => p_encoded,
8517 p_count => x_msg_count,
8518 p_data => x_msg_data);
8519 x_return_status := c_error;
8520
8521 END Register_Encumbrance_Type;
8522
8523 /*************************************************************************
8524
8525 New_Global_VS_Combo
8526
8527 4/20/2005 RobFlippo Bug#4303380 Add Global_vs_combo_display_code to the
8528 Insert statement for FEM_GLOBAL_VS_COMBOS_PKG
8529 -- this fix will preserve the original signature
8530 for this API so that it is backward compatible
8531 with OGL by employing a default for the
8532 global combo display_code. If the user passes
8533 null for the display code, it set it = global combo name.
8534
8535 *************************************************************************/
8536
8537 PROCEDURE New_Global_VS_Combo (
8538 p_api_version IN NUMBER DEFAULT c_api_version,
8539 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
8540 p_commit IN VARCHAR2 DEFAULT c_false,
8541 p_encoded IN VARCHAR2 DEFAULT c_true,
8542 x_return_status OUT NOCOPY VARCHAR2,
8543 x_msg_count OUT NOCOPY NUMBER,
8544 x_msg_data OUT NOCOPY VARCHAR2,
8545 x_global_vs_combo_id OUT NOCOPY NUMBER,
8546 p_global_vs_combo_name IN VARCHAR2,
8547 p_global_vs_combo_desc IN VARCHAR2 DEFAULT NULL,
8548 p_read_only_flag IN VARCHAR2 DEFAULT 'N',
8549 p_enabled_flag IN VARCHAR2 DEFAULT 'Y',
8550 p_global_vs_combo_dc IN VARCHAR2 DEFAULT NULL
8551 )
8552 IS
8553
8554 c_obj_ver_no CONSTANT NUMBER := 1;
8555 c_pers_flg CONSTANT VARCHAR2(1) := 'N';
8556
8557 v_vs_id NUMBER := -1;
8558
8559 v_row_id VARCHAR2(20) := '';
8560 v_gvsc_id NUMBER;
8561 v_vs_dim_id NUMBER;
8562 v_global_vs_combo_dc VARCHAR2(150);
8563
8564 ---------------------------------------------------
8565 -- Cursor to get dimensions that require Value Sets
8566 ---------------------------------------------------
8567 CURSOR c_vs_dim_ids IS
8568 SELECT dimension_id, dimension_varchar_label
8569 FROM fem_xdim_dimensions_vl
8570 WHERE value_set_required_flag = 'Y'
8571 ORDER BY dimension_id;
8572
8573 BEGIN
8574
8575 x_return_status := c_success;
8576 x_global_vs_combo_id := -1;
8577
8578 Validate_OA_Params (
8579 p_api_version => p_api_version,
8580 p_init_msg_list => p_init_msg_list,
8581 p_commit => p_commit,
8582 p_encoded => p_encoded,
8583 x_return_status => x_return_status);
8584
8585 IF (x_return_status <> c_success)
8586 THEN
8587 FND_MSG_PUB.Count_and_Get(
8588 p_encoded => c_false,
8589 p_count => x_msg_count,
8590 p_data => x_msg_data);
8591 RETURN;
8592 END IF;
8593
8594 --------------------------------
8595 -- Get New Global VS Combo ID --
8596 --------------------------------
8597 SELECT fem_global_vs_combos_b_s.NEXTVAL
8598 INTO v_gvsc_id
8599 FROM dual;
8600 ---------------------------------------
8601 -- Validate the Global VS Combo Display Code --
8602 ---------------------------------------
8603 IF p_global_vs_combo_dc IS NULL THEN
8604 v_global_vs_combo_dc := p_global_vs_combo_name;
8605 ELSE
8606 v_global_vs_combo_dc := p_global_vs_combo_dc;
8607 END IF;
8608
8609
8610 ---------------------------------------
8611 -- Insert New Global VS Combo Member --
8612 ---------------------------------------
8613 BEGIN
8614 FEM_GLOBAL_VS_COMBOS_PKG.INSERT_ROW(
8615 x_rowid => v_row_id,
8616 x_global_vs_combo_id => v_gvsc_id,
8617 x_global_vs_combo_display_code => v_global_vs_combo_dc,
8618 x_enabled_flag => p_enabled_flag,
8619 x_read_only_flag => p_read_only_flag,
8620 x_personal_flag => c_pers_flg,
8621 x_object_version_number => c_obj_ver_no,
8622 x_global_vs_combo_name => p_global_vs_combo_name,
8623 x_description => p_global_vs_combo_desc,
8624 x_creation_date => sysdate,
8625 x_created_by => c_user_id,
8626 x_last_update_date => sysdate,
8627 x_last_updated_by => c_user_id,
8628 x_last_update_login => null);
8629 EXCEPTION
8630 WHEN dup_val_on_index THEN
8631 FEM_ENGINES_PKG.Put_Message(
8632 p_app_name => 'FEM',
8633 p_msg_name => 'FEM_DUP_DISPLAY_CODE_ERR',
8634 p_token1 => 'VALUE',
8635 p_value1 => p_global_vs_combo_name);
8636 FND_MSG_PUB.Count_and_Get(
8637 p_encoded => p_encoded,
8641 RETURN;
8638 p_count => x_msg_count,
8639 p_data => x_msg_data);
8640 x_return_status := c_error;
8642 END;
8643
8644 ----------------------------------------------------------------
8645 -- Initialize Value Set ID for each value-set_required dimension
8646 ----------------------------------------------------------------
8647 FOR r_vs_dim_id IN c_vs_dim_ids
8648 LOOP
8649
8650 -- Retrieve the seeded value set for the dimension
8651 -- We do this by getting the value_set_id that has
8652 -- the display_code = dimension varchar label
8653 SELECT value_set_id
8654 INTO v_vs_id
8655 FROM fem_value_sets_b
8656 WHERE dimension_id = r_vs_dim_id.dimension_id
8657 AND value_set_display_code = r_vs_dim_id.dimension_varchar_label;
8658
8659 -- RCF 4/20/2005 Obsolete - v_vs_dim_id := r_vs_dim_id.dimension_id;
8660
8661 INSERT INTO fem_global_vs_combo_defs
8662 (global_vs_combo_id,
8663 dimension_id,
8664 value_set_id,
8665 creation_date,
8666 created_by,
8667 last_updated_by,
8668 last_update_date,
8669 last_update_login,
8670 object_version_number)
8671 VALUES
8672 (v_gvsc_id,
8673 r_vs_dim_id.dimension_id,
8674 v_vs_id,
8675 sysdate,
8676 c_user_id,
8677 c_user_id,
8678 sysdate,
8679 null,
8680 c_obj_ver_no);
8681 END LOOP;
8682
8683 IF (p_commit = c_true)
8684 THEN
8685 COMMIT;
8686 END IF;
8687
8688 x_global_vs_combo_id := v_gvsc_id;
8689
8690 END New_Global_VS_Combo;
8691
8692 /*************************************************************************
8693
8694 Get_Dim_Attr_ID_Ver_ID
8695
8696 *************************************************************************/
8697
8698 PROCEDURE Get_Dim_Attr_ID_Ver_ID (
8699 p_dim_id IN NUMBER,
8700 p_attr_label IN VARCHAR,
8701 x_attr_id OUT NOCOPY NUMBER,
8702 x_ver_id OUT NOCOPY NUMBER,
8703 x_err_code OUT NOCOPY NUMBER
8704 )
8705 IS
8706 BEGIN
8707
8708 x_err_code := 0;
8709
8710 SELECT A.attribute_id,
8711 V.version_id
8712 INTO x_attr_id,
8713 x_ver_id
8714 FROM fem_dim_attributes_b A,
8715 fem_dim_attr_versions_b V
8716 WHERE attribute_varchar_label = p_attr_label
8717 AND dimension_id = p_dim_id
8718 AND A.attribute_id = V.attribute_id
8719 AND V.default_version_flag = 'Y';
8720
8721 EXCEPTION
8722 WHEN no_data_found THEN
8723 x_err_code := 2;
8724 END Get_Dim_Attr_ID_Ver_ID;
8725
8726 /*************************************************************************
8727
8728 Get_Dim_Member_ID
8729
8730 This function returns a dimension member ID
8731
8732 NOTE: This procedure assumes that the dimension being evaluated
8733 is a surrogate key dimension. If the dimension does not have
8734 a surrogate key (i.e., member_col = member_display_code_col),
8735 then the function returns a -1 since there is no "member_id"
8736 for that members of that dimension.
8737
8738 HISTORY:
8739 Rob Flippo 2/17/2006 Bug#5040996 - added support for Composite dimensions
8740
8741 *************************************************************************/
8742
8743 FUNCTION Get_Dim_Member_ID (
8744 p_api_version IN NUMBER DEFAULT 1.0,
8745 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
8746 p_commit IN VARCHAR2 DEFAULT c_false,
8747 p_encoded IN VARCHAR2 DEFAULT c_true,
8748 x_return_status OUT NOCOPY VARCHAR2,
8749 x_msg_count OUT NOCOPY NUMBER,
8750 x_msg_data OUT NOCOPY VARCHAR2,
8751 p_dimension_varchar_label IN VARCHAR2,
8752 p_member_display_code IN VARCHAR2,
8753 p_member_vs_display_code IN VARCHAR2
8754 ) RETURN VARCHAR2
8755 IS
8756
8757 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
8758 'fem.plsql.fem_dimension_util_pkg.get_dim_member_id';
8759
8760 v_dim_id NUMBER;
8761 v_vs_id NUMBER;
8762 v_mem_b_tab VARCHAR2(30);
8763 v_mem_col VARCHAR2(30);
8764 v_mem_dc_col VARCHAR2(30);
8765 v_vs_req_flg VARCHAR2(1);
8766 v_gvsc_id NUMBER; --- Global Value Set Combo ID for the users session
8767
8768 v_comp_dim_flg VARCHAR2(1); -- Designates if the dimension is a composite dim
8769 v_member_id NUMBER;
8770
8771 v_sql_stmt VARCHAR2(32767);
8772
8773 -- OUT parameters for calling the Global_vs_combo_id function
8774 -- we ignore these parameters - if there is an error, that function
8775 -- will post a message to the stack and this api exits via the When OTHERS
8776 v_return_status VARCHAR2(100);
8777 v_msg_count NUMBER;
8778 v_msg_data VARCHAR2(4000);
8779
8780 e_bad_dim_label EXCEPTION;
8781 e_bad_vs_code EXCEPTION;
8782 e_no_member EXCEPTION;
8783
8784 BEGIN
8785
8786 ---------------------------
8787 -- Verify the OA parameters
8788 ---------------------------
8789 FEM_Dimension_Util_Pkg.Validate_OA_Params (
8793 p_encoded => p_encoded,
8790 p_api_version => c_api_version,
8791 p_init_msg_list => p_init_msg_list,
8792 p_commit => p_commit,
8794 x_return_status => x_return_status);
8795
8796 IF (x_return_status <> c_success)
8797 THEN
8798 FND_MSG_PUB.Count_and_Get(
8799 p_encoded => c_false,
8800 p_count => x_msg_count,
8801 p_data => x_msg_data);
8802 RETURN -1;
8803 END IF;
8804
8805 ---------------------------------
8806 -- Verify the specified Dimension
8807 ---------------------------------
8808 BEGIN
8809 SELECT dimension_id
8810 INTO v_dim_id
8811 FROM fem_dimensions_b
8812 WHERE dimension_varchar_label = p_dimension_varchar_label;
8813 EXCEPTION
8814 WHEN no_data_found THEN
8815 RAISE e_bad_dim_label;
8816 END;
8817
8818 -------------------------------
8819 -- Get the Dimension's metadata
8820 -------------------------------
8821 SELECT member_b_table_name,
8822 member_col,
8823 member_display_code_col,
8824 value_set_required_flag,
8825 composite_dimension_flag
8826 INTO v_mem_b_tab,
8827 v_mem_col,
8828 v_mem_dc_col,
8829 v_vs_req_flg,
8830 v_comp_dim_flg
8831 FROM fem_xdim_dimensions
8832 WHERE dimension_id = v_dim_id;
8833
8834 ---------------------------------
8835 -- Verify the specified Value Set
8836 ---------------------------------
8837
8838 v_gvsc_id := null;
8839 v_vs_id := null;
8840 -- For composite dimensions, we also need to get the Global VS Combo
8841 -- for the user's session
8842 IF (v_comp_dim_flg = 'Y')
8843 THEN
8844 v_gvsc_id :=
8845 Global_VS_Combo_ID (
8846 x_return_status => v_return_status,
8847 x_msg_count => v_msg_count,
8848 x_msg_data => v_msg_data,
8849 p_ledger_id => null);
8850
8851 ELSIF (v_vs_req_flg = 'Y')
8852 THEN
8853 BEGIN
8854 SELECT value_set_id
8855 INTO v_vs_id
8856 FROM fem_value_sets_b
8857 WHERE value_set_display_code = p_member_vs_display_code
8858 AND dimension_id = v_dim_id;
8859 EXCEPTION
8860 WHEN no_data_found THEN
8861 RAISE e_bad_vs_code;
8862 END;
8863 ELSE
8864 v_vs_id := null;
8865 END IF;
8866
8867 ----------------
8868 -- Get Member ID
8869 ----------------
8870 IF (v_gvsc_id IS NOT NULL) -- query for composite dims
8871 THEN
8872 v_sql_stmt :=
8873 'SELECT '||v_mem_col||
8874 ' FROM '||v_mem_b_tab||
8875 ' WHERE '||v_mem_dc_col||' = :b_member_display_code'||
8876 ' AND local_vs_combo_id = :b_gvsc_id';
8877
8878 BEGIN
8879 EXECUTE IMMEDIATE v_sql_stmt
8880 INTO v_member_id
8881 USING p_member_display_code,
8882 v_gvsc_id;
8883 EXCEPTION
8884 WHEN no_data_found THEN
8885 RAISE e_no_member;
8886 END;
8887
8888 ELSIF (v_vs_id IS NOT NULL) -- query for value set dims
8889 THEN
8890 v_sql_stmt :=
8891 'SELECT '||v_mem_col||
8892 ' FROM '||v_mem_b_tab||
8893 ' WHERE '||v_mem_dc_col||' = :b_member_display_code'||
8894 ' AND value_set_id = :b_vs_id';
8895
8896 BEGIN
8897 EXECUTE IMMEDIATE v_sql_stmt
8898 INTO v_member_id
8899 USING p_member_display_code,
8900 v_vs_id;
8901 EXCEPTION
8902 WHEN no_data_found THEN
8903 RAISE e_no_member;
8904 END;
8905 ELSE
8906 v_sql_stmt :=
8907 'SELECT '||v_mem_col||
8908 ' FROM '||v_mem_b_tab||
8909 ' WHERE '||v_mem_dc_col||' = :b_member_display_code';
8910
8911 BEGIN
8912 EXECUTE IMMEDIATE v_sql_stmt
8913 INTO v_member_id
8914 USING p_member_display_code;
8915 EXCEPTION
8916 WHEN no_data_found THEN
8917 RAISE e_no_member;
8918 END;
8919 END IF;
8920
8921 x_return_status := c_success;
8922 RETURN v_member_id;
8923
8924 ------------------
8925 -- Exception Block
8926 ------------------
8927 EXCEPTION
8928
8929 WHEN e_bad_dim_label THEN
8930 FEM_ENGINES_PKG.Put_Message(
8931 p_app_name => 'FEM',
8932 p_msg_name => 'FEM_DIM_BAD_DIM_LABEL',
8933 p_token1 => 'DIM_LABEL',
8934 p_value1 => p_dimension_varchar_label);
8935 FND_MSG_PUB.Count_and_Get(
8936 p_encoded => p_encoded,
8937 p_count => x_msg_count,
8938 p_data => x_msg_data);
8939 x_return_status := c_error;
8940 RETURN -1;
8941
8942 WHEN e_bad_vs_code THEN
8943 FEM_ENGINES_PKG.Put_Message(
8944 p_app_name => 'FEM',
8945 p_msg_name => 'FEM_DIM_BAD_VS_CODE',
8946 p_token1 => 'VS_CODE',
8947 p_value1 => p_member_vs_display_code);
8948 FND_MSG_PUB.Count_and_Get(
8949 p_encoded => p_encoded,
8950 p_count => x_msg_count,
8951 p_data => x_msg_data);
8952 x_return_status := c_error;
8953 RETURN -1;
8954
8955 WHEN e_no_member THEN
8956 FEM_ENGINES_PKG.Put_Message(
8957 p_app_name => 'FEM',
8958 p_msg_name => 'FEM_DIM_NO_MEMBER',
8959 p_token1 => 'MEM_CODE',
8963 p_count => x_msg_count,
8960 p_value1 => p_member_display_code);
8961 FND_MSG_PUB.Count_and_Get(
8962 p_encoded => p_encoded,
8964 p_data => x_msg_data);
8965 x_return_status := c_error;
8966 RETURN -1;
8967
8968 WHEN others THEN
8969 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
8970 FEM_ENGINES_PKG.TECH_MESSAGE(
8971 p_severity => FND_LOG.level_statement,
8972 p_module => C_MODULE,
8973 p_msg_text => 'Unexpected error.');
8974 END IF;
8975 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
8976 FEM_ENGINES_PKG.TECH_MESSAGE(
8977 p_severity => FND_LOG.level_procedure,
8978 p_module => C_MODULE,
8979 p_msg_text => 'End Procedure');
8980 END IF;
8981 x_return_status := c_unexp;
8982 RETURN -1;
8983
8984
8985 END Get_Dim_Member_ID;
8986
8987 /*************************************************************************
8988
8989 Get_Dim_Attr_Name
8990
8991 *************************************************************************/
8992
8993 FUNCTION Get_Dim_Attr_Name (
8994 p_attr_id IN NUMBER
8995 ) RETURN VARCHAR2
8996 IS
8997 v_attr_name VARCHAR2(80);
8998 BEGIN
8999
9000 SELECT attribute_name
9001 INTO v_attr_name
9002 FROM fem_dim_attributes_tl
9003 WHERE attribute_id = p_attr_id
9004 AND language = userenv('LANG');
9005
9006 RETURN v_attr_name;
9007
9008 EXCEPTION
9009 WHEN no_data_found THEN
9010 RETURN null;
9011 END Get_Dim_Attr_Name;
9012
9013 --------------------------------------------------------------------------
9014
9015 FUNCTION Get_Dim_Attr_Name (
9016 p_dim_id IN NUMBER,
9017 p_attr_label IN VARCHAR2
9018 ) RETURN VARCHAR2
9019 IS
9020 v_attr_name VARCHAR2(80);
9021 BEGIN
9022
9023 SELECT T.attribute_name
9024 INTO v_attr_name
9025 FROM fem_dim_attributes_b B,
9026 fem_dim_attributes_tl T
9027 WHERE B.attribute_varchar_label = p_attr_label
9028 AND B.dimension_id = p_dim_id
9029 AND T.attribute_id = B.attribute_id
9030 AND T.language = userenv('LANG');
9031
9032 RETURN v_attr_name;
9033
9034 EXCEPTION
9035 WHEN no_data_found THEN
9036 RETURN null;
9037 END Get_Dim_Attr_Name;
9038
9039 --------------------------------------------------------------------------
9040
9041 FUNCTION Get_Dim_Attr_Name (
9042 p_dim_label IN VARCHAR2,
9043 p_attr_label IN VARCHAR2
9044 ) RETURN VARCHAR2
9045 IS
9046 v_attr_name VARCHAR2(80);
9047 BEGIN
9048
9049 SELECT AT.attribute_name
9050 INTO v_attr_name
9051 FROM fem_dim_attributes_b AB,
9052 fem_dim_attributes_tl AT,
9053 fem_dimensions_b DB
9054 WHERE AB.attribute_varchar_label = p_attr_label
9055 AND DB.dimension_varchar_label = p_dim_label
9056 AND AB.dimension_id = DB.dimension_id
9057 AND AT.attribute_id = AB.attribute_id
9058 AND AT.language = userenv('LANG');
9059
9060 RETURN v_attr_name;
9061
9062 EXCEPTION
9063 WHEN no_data_found THEN
9064 RETURN null;
9065 END Get_Dim_Attr_Name;
9066
9067 /*************************************************************************
9068
9069 Get_Dimension_Name
9070
9071 *************************************************************************/
9072
9073 FUNCTION Get_Dimension_Name (
9074 p_dim_id IN NUMBER
9075 ) RETURN VARCHAR2
9076 IS
9077 v_dim_name VARCHAR2(80);
9078 BEGIN
9079
9080 SELECT dimension_name
9081 INTO v_dim_name
9082 FROM fem_dimensions_tl
9083 WHERE dimension_id = p_dim_id
9084 AND language = userenv('LANG');
9085
9086 RETURN v_dim_name;
9087
9088 EXCEPTION
9089 WHEN no_data_found THEN
9090 RETURN null;
9091 END Get_Dimension_Name;
9092
9093 --------------------------------------------------------------------------
9094
9095 FUNCTION Get_Dimension_Name (
9096 p_dim_label IN VARCHAR2
9097 ) RETURN VARCHAR2
9098 IS
9099 v_dim_name VARCHAR2(80);
9100 BEGIN
9101
9102 SELECT T.dimension_name
9103 INTO v_dim_name
9104 FROM fem_dimensions_b B,
9105 fem_dimensions_tl T
9106 WHERE B.dimension_varchar_label = p_dim_label
9107 AND T.dimension_id = B.dimension_id
9108 AND T.language = userenv('LANG');
9109
9110 RETURN v_dim_name;
9111
9112 EXCEPTION
9113 WHEN no_data_found THEN
9114 RETURN null;
9115 END Get_Dimension_Name;
9116
9117 /*************************************************************************
9118
9119 OA Exception Handler
9120
9121 *************************************************************************/
9122
9123 PROCEDURE Validate_OA_Params (
9124 p_api_version IN NUMBER,
9125 p_init_msg_list IN VARCHAR2,
9126 p_commit IN VARCHAR2,
9127 p_encoded IN VARCHAR2,
9128 x_return_status OUT NOCOPY VARCHAR2
9129 )
9130 IS
9134 e_bad_p_encoded EXCEPTION;
9131 e_bad_p_api_ver EXCEPTION;
9132 e_bad_p_init_msg_list EXCEPTION;
9133 e_bad_p_commit EXCEPTION;
9135 BEGIN
9136
9137 x_return_status := c_success;
9138
9139 CASE p_api_version
9140 WHEN c_api_version THEN NULL;
9141 ELSE RAISE e_bad_p_api_ver;
9142 END CASE;
9143
9144 CASE p_init_msg_list
9145 WHEN c_false THEN NULL;
9146 WHEN c_true THEN
9147 FND_MSG_PUB.Initialize;
9148 ELSE RAISE e_bad_p_init_msg_list;
9149 END CASE;
9150
9151 CASE p_encoded
9152 WHEN c_false THEN NULL;
9153 WHEN c_true THEN NULL;
9154 ELSE RAISE e_bad_p_encoded;
9155 END CASE;
9156
9157 CASE p_commit
9158 WHEN c_false THEN NULL;
9159 WHEN c_true THEN NULL;
9160 ELSE RAISE e_bad_p_commit;
9161 END CASE;
9162
9163 EXCEPTION
9164 WHEN e_bad_p_api_ver THEN
9165 FEM_ENGINES_PKG.Put_Message(
9166 p_app_name => 'FEM',
9167 p_msg_name => 'FEM_BAD_P_API_VER_ERR',
9168 p_token1 => 'VALUE',
9169 p_value1 => p_api_version);
9170 x_return_status := c_error;
9171
9172 WHEN e_bad_p_init_msg_list THEN
9173 FEM_ENGINES_PKG.Put_Message(
9174 p_app_name => 'FEM',
9175 p_msg_name => 'FEM_BAD_P_INIT_MSG_LIST_ERR');
9176 x_return_status := c_error;
9177
9178 WHEN e_bad_p_encoded THEN
9179 FEM_ENGINES_PKG.Put_Message(
9180 p_app_name => 'FEM',
9181 p_msg_name => 'FEM_BAD_P_ENCODED_ERR');
9182 x_return_status := c_error;
9183
9184 WHEN e_bad_p_commit THEN
9185 FEM_ENGINES_PKG.Put_Message(
9186 p_app_name => 'FEM',
9187 p_msg_name => 'FEM_BAD_P_COMMIT_ERR');
9188 x_return_status := c_error;
9189
9190 END Validate_OA_Params;
9191
9192 /*************************************************************************
9193
9194 Get_Default_Dim_Member
9195
9196 Purpose: This function returns the default dimension member code and
9197 display code given a ledger ID and dimension.
9198
9199 Usage: The caller has the option to provide either the dimension ID
9200 or dimension varchar label - but at least one must be provided.
9201 If both are provided, the dimension ID is used.
9202
9203 Ledger ID is an optional parameter because:
9204 1) Only value set required (VSR) dimensions require the ledger ID.
9205 In fact, for non VSR dimensions, if Ledger ID is provided,
9206 it is ignored.
9207 2) Even for VSR dimensions, if the Ledger ID is left null, this
9208 API will attempt to find a default ledger based on the
9209 User Profile: 'FEM_LEDGER'.
9210
9211 Return variables:
9212 x_member_code - Member ID/Code
9213 x_member_data_type - Member ID/Code Data Type
9214 (from FEM_XDIM_DIMENSIONS.MEMBER_DATA_TYPE_CODE)
9215 x_member_display_code - Member Display Code
9216 x_return_status
9217 - FND_API.G_RET_STS_SUCCESS ('S') if default member was found
9218 - FND_API.G_RET_STS_ERROR ('E') if no default member exists
9219 - FND_API.G_RET_STS_UNEXP_ERROR if something unexpected occurs
9220
9221 *************************************************************************/
9222
9223 PROCEDURE Get_Default_Dim_Member (
9224 p_api_version IN NUMBER DEFAULT 1.0,
9225 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
9226 p_commit IN VARCHAR2 DEFAULT c_false,
9227 p_encoded IN VARCHAR2 DEFAULT c_true,
9228 p_dimension_id IN NUMBER DEFAULT NULL,
9229 p_dimension_varchar_label IN VARCHAR2 DEFAULT NULL,
9230 p_ledger_id IN NUMBER DEFAULT NULL,
9231 x_member_code OUT NOCOPY VARCHAR2,
9232 x_member_data_type OUT NOCOPY VARCHAR2,
9233 x_member_display_code OUT NOCOPY VARCHAR2,
9234 x_return_status OUT NOCOPY VARCHAR2,
9235 x_msg_count OUT NOCOPY NUMBER,
9236 x_msg_data OUT NOCOPY VARCHAR2
9237 )
9238 IS
9239
9240 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
9241 'fem.plsql.fem_dimension_util_pkg.get_default_dim_member';
9242 C_API_VERSION CONSTANT NUMBER := 1.0;
9243 C_API_NAME CONSTANT VARCHAR2(30) := 'Get_Default_Dim_Member';
9244 e_no_member EXCEPTION;
9245
9246 v_dim_id FEM_DIMENSIONS_B.dimension_id%TYPE;
9247 v_member_table FEM_XDIM_DIMENSIONS.member_b_table_name%TYPE;
9248 v_member_col FEM_XDIM_DIMENSIONS.member_col%TYPE;
9249 v_member_dc_col FEM_XDIM_DIMENSIONS.member_display_code_col%TYPE;
9250 v_vsr_flag FEM_XDIM_DIMENSIONS.value_set_required_flag%TYPE;
9251 v_default_member_dc FEM_XDIM_DIMENSIONS.default_member_display_code%TYPE;
9252 v_vs_id FEM_VALUE_SETS_B.value_set_id%TYPE;
9253 v_default_member FEM_XDIM_DIMENSIONS.default_member_display_code%TYPE;
9254 v_sql VARCHAR2(4000);
9255
9256 BEGIN
9257
9258 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9259 FEM_ENGINES_PKG.TECH_MESSAGE(
9260 p_severity => FND_LOG.level_procedure,
9261 p_module => C_MODULE,
9265 -- Initialize return status to unexpected error
9262 p_msg_text => 'Begin Procedure');
9263 END IF;
9264
9266 x_return_status := c_unexp;
9267
9268 -- Check for call compatibility.
9269 IF NOT FND_API.Compatible_API_Call (C_API_VERSION,
9270 p_api_version,
9271 C_API_NAME,
9272 G_PKG_NAME)
9273 THEN
9274 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9275 FEM_ENGINES_PKG.TECH_MESSAGE(
9276 p_severity => FND_LOG.level_statement,
9277 p_module => C_MODULE,
9278 p_msg_text => 'API Version ('||C_API_VERSION||') not compatible with '
9279 ||'passed in version ('||p_api_version||')');
9280 END IF;
9281 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
9282 p_count => x_msg_count,
9283 p_data => x_msg_data);
9284 RAISE e_unexp;
9285 END IF;
9286
9287 Validate_OA_Params (
9288 p_api_version => p_api_version,
9289 p_init_msg_list => p_init_msg_list,
9290 p_commit => p_commit,
9291 p_encoded => p_encoded,
9292 x_return_status => x_return_status);
9293
9294 IF (x_return_status <> c_success) THEN
9295 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
9296 p_count => x_msg_count,
9297 p_data => x_msg_data);
9298 RETURN;
9299 END IF;
9300
9301 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9302 FEM_ENGINES_PKG.TECH_MESSAGE(
9303 p_severity => FND_LOG.level_statement,
9304 p_module => C_MODULE,
9305 p_msg_text => 'p_ledger_id = '||to_char(p_ledger_id));
9306 FEM_ENGINES_PKG.TECH_MESSAGE(
9307 p_severity => FND_LOG.level_statement,
9308 p_module => C_MODULE,
9309 p_msg_text => 'p_dimension_id = '||to_char(p_dimension_id));
9310 FEM_ENGINES_PKG.TECH_MESSAGE(
9311 p_severity => FND_LOG.level_statement,
9312 p_module => C_MODULE,
9313 p_msg_text => 'p_dimension_varchar_label = '||p_dimension_varchar_label);
9314 END IF;
9315
9316 -- Make sure at least one dimension parameter is provided
9317 IF p_dimension_id IS NULL AND p_dimension_varchar_label IS NULL THEN
9318 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9319 FEM_ENGINES_PKG.TECH_MESSAGE(
9320 p_severity => FND_LOG.level_statement,
9321 p_module => C_MODULE,
9322 p_msg_text => 'At least one of the dimension parameters must be provided');
9323 END IF;
9324 RAISE e_unexp;
9325 END IF;
9326
9327 -- Obtain some dimension info
9328 BEGIN
9329 IF p_dimension_id IS NULL THEN
9330 SELECT dimension_id
9331 INTO v_dim_id
9332 FROM fem_dimensions_b
9333 WHERE dimension_varchar_label = p_dimension_varchar_label;
9334 ELSE
9335 v_dim_id := p_dimension_id;
9336 END IF;
9337
9338 SELECT member_b_table_name,
9339 member_col,
9340 member_display_code_col,
9341 member_data_type_code,
9342 value_set_required_flag,
9343 default_member_display_code
9344 INTO v_member_table,
9345 v_member_col,
9346 v_member_dc_col,
9347 x_member_data_type,
9348 v_vsr_flag,
9349 v_default_member_dc
9350 FROM fem_xdim_dimensions
9351 WHERE dimension_id = v_dim_id;
9352
9353 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9354 FEM_ENGINES_PKG.TECH_MESSAGE(
9355 p_severity => FND_LOG.level_statement,
9356 p_module => C_MODULE,
9357 p_msg_text => 'XDIM Info for dim '||v_dim_id
9358 ||': v_member_table = '||v_member_table
9359 ||', v_member_col = '||v_member_col
9360 ||', v_member_dc_col = '||v_member_dc_col
9361 ||', v_vsr_flag = '||v_vsr_flag
9362 ||', v_default_member_dc = '||v_default_member_dc);
9363 END IF;
9364
9365 EXCEPTION WHEN no_data_found THEN
9366 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9367 FEM_ENGINES_PKG.TECH_MESSAGE(
9368 p_severity => FND_LOG.level_statement,
9369 p_module => C_MODULE,
9370 p_msg_text => 'Dimension is not registered in FEM_DIMENSIONS_B or FEM_XDIM_DIMENSIONS');
9371 END IF;
9372 RAISE e_unexp;
9373 END;
9374
9375 -- If dimension is a VSR dimension, then the default
9376 -- member is stored in with the Global Combo Value Set.
9377 -- Otherwise, it is stored in XDIM_DIMENSIONS.
9378 IF v_vsr_flag = 'Y' THEN
9379 v_vs_id := Dimension_Value_Set_ID (
9380 p_api_version => 1.0,
9381 p_init_msg_list => p_init_msg_list,
9382 p_commit => p_commit,
9383 p_encoded => p_encoded,
9384 p_dimension_id => v_dim_id,
9385 p_ledger_id => p_ledger_id,
9386 x_return_status => x_return_status,
9387 x_msg_count => x_msg_count,
9388 x_msg_data => x_msg_data);
9389
9390 IF x_return_status <> c_success THEN
9391 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9392 FEM_ENGINES_PKG.TECH_MESSAGE(
9393 p_severity => FND_LOG.level_statement,
9394 p_module => C_MODULE,
9395 p_msg_text => 'Call to Dimension_Value_Set_ID failed');
9399
9396 END IF;
9397 raise e_unexp;
9398 END IF;
9400 BEGIN
9401 SELECT default_load_member_id
9402 INTO v_default_member
9403 FROM fem_value_sets_b
9404 WHERE value_set_id = v_vs_id;
9405
9406 -- Get the default member display code
9407 IF v_default_member IS NOT NULL THEN
9408 v_sql := 'SELECT '||v_member_dc_col
9409 ||' FROM '||v_member_table
9410 ||' WHERE '||v_member_col||' = :v_default_member'
9411 ||' AND value_set_id = :v_vs_id';
9412
9413 BEGIN
9414 v_default_member_dc := NULL;
9415
9416 EXECUTE IMMEDIATE v_sql
9417 INTO v_default_member_dc
9418 USING v_default_member, v_vs_id;
9419 EXCEPTION WHEN no_data_found THEN
9420 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9421 FEM_ENGINES_PKG.TECH_MESSAGE(
9422 p_severity => FND_LOG.level_statement,
9423 p_module => C_MODULE,
9424 p_msg_text => 'Following SQL failed to return rows: '||v_sql);
9425 FEM_ENGINES_PKG.TECH_MESSAGE(
9426 p_severity => FND_LOG.level_statement,
9427 p_module => C_MODULE,
9428 p_msg_text => 'Cannot find the dimension member (ID) = '||to_char(v_default_member)
9429 ||' in '||v_member_table||' where vaset set ID = '||to_char(v_vs_id));
9430 END IF;
9431 RAISE e_no_member;
9432 END;
9433 END IF; -- v_default_member IS NOT NULL
9434 EXCEPTION WHEN no_data_found THEN
9435 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9436 FEM_ENGINES_PKG.TECH_MESSAGE(
9437 p_severity => FND_LOG.level_statement,
9438 p_module => C_MODULE,
9439 p_msg_text => 'Cannot find value set ID = '||to_char(v_vs_id));
9440 END IF;
9441 RAISE e_unexp;
9442 END;
9443 ELSE -- v_vsr_flag = 'N'
9444 -- Get the default member code
9445 IF v_default_member_dc IS NOT NULL THEN
9446 v_sql := 'SELECT '||v_member_col
9447 ||' FROM '||v_member_table
9448 ||' WHERE '||v_member_dc_col||' = :v_default_member_dc';
9449
9450 BEGIN
9451 EXECUTE IMMEDIATE v_sql
9452 INTO v_default_member
9453 USING v_default_member_dc;
9454 EXCEPTION WHEN no_data_found THEN
9455 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9456 FEM_ENGINES_PKG.TECH_MESSAGE(
9457 p_severity => FND_LOG.level_statement,
9458 p_module => C_MODULE,
9459 p_msg_text => 'Following SQL failed to return rows: '||v_sql);
9460 FEM_ENGINES_PKG.TECH_MESSAGE(
9461 p_severity => FND_LOG.level_statement,
9462 p_module => C_MODULE,
9463 p_msg_text => 'Cannot find the dimension member (display code) '
9464 ||v_default_member_dc||' in '||v_member_table);
9465 END IF;
9466 RAISE e_no_member;
9467 END;
9468 END IF; -- v_default_member IS NOT NULL
9469 END IF; -- v_vsr_flag
9470
9471 -- set return vars
9472 x_member_code := v_default_member;
9473 x_member_display_code := v_default_member_dc;
9474
9475 IF x_member_code IS NULL THEN
9476 x_return_status := c_error;
9477 ELSE
9478 x_return_status := c_success;
9479 END IF;
9480
9481 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9482 FEM_ENGINES_PKG.TECH_MESSAGE(
9483 p_severity => FND_LOG.level_statement,
9484 p_module => C_MODULE,
9485 p_msg_text => 'x_member_code = '||x_member_code);
9486 FEM_ENGINES_PKG.TECH_MESSAGE(
9487 p_severity => FND_LOG.level_statement,
9488 p_module => C_MODULE,
9489 p_msg_text => 'x_member_data_type = '||x_member_data_type);
9490 FEM_ENGINES_PKG.TECH_MESSAGE(
9491 p_severity => FND_LOG.level_statement,
9492 p_module => C_MODULE,
9493 p_msg_text => 'x_member_display_code = '||x_member_display_code);
9494 FEM_ENGINES_PKG.TECH_MESSAGE(
9495 p_severity => FND_LOG.level_statement,
9496 p_module => C_MODULE,
9497 p_msg_text => 'x_return_status = '||x_return_status);
9498 END IF;
9499 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9500 FEM_ENGINES_PKG.TECH_MESSAGE(
9501 p_severity => FND_LOG.level_procedure,
9502 p_module => C_MODULE,
9503 p_msg_text => 'End Procedure');
9504 END IF;
9505
9506 EXCEPTION
9507 WHEN e_no_member THEN
9508 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9509 FEM_ENGINES_PKG.TECH_MESSAGE(
9510 p_severity => FND_LOG.level_procedure,
9511 p_module => C_MODULE,
9515 x_member_data_type := NULL;
9512 p_msg_text => 'End Procedure');
9513 END IF;
9514 x_member_code := NULL;
9516 x_member_display_code := NULL;
9517 x_return_status := c_error;
9518 WHEN others THEN
9519 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9520 FEM_ENGINES_PKG.TECH_MESSAGE(
9521 p_severity => FND_LOG.level_statement,
9522 p_module => C_MODULE,
9523 p_msg_text => 'Unexpected error.');
9524 END IF;
9525 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9526 FEM_ENGINES_PKG.TECH_MESSAGE(
9527 p_severity => FND_LOG.level_procedure,
9528 p_module => C_MODULE,
9529 p_msg_text => 'End Procedure');
9530 END IF;
9531 x_return_status := c_unexp;
9532
9533 END Get_Default_Dim_Member;
9534
9535 /*************************************************************************
9536
9537 Get_Default_Dim_Member
9538
9539 Purpose: This procedure returns the default dimension member code and display code
9540 given a ledger ID, table name and column name.
9541
9542 Usage: Ledger ID is an optional parameter because:
9543 1) Only value set required (VSR) dimensions require the ledger ID.
9544 In fact, for non VSR dimensions, if Ledger ID is provided,
9545 it is ignored.
9546 2) Even for VSR dimensions, if the Ledger ID is left null, this
9547 API will attempt to find a default ledger based on the
9548 User Profile: 'FEM_LEDGER'.
9549
9550 Return variables:
9551 x_member_code - Member ID/Code
9552 x_member_data_type - Member ID/Code Data Type
9553 (from FEM_XDIM_DIMENSIONS.MEMBER_DATA_TYPE_CODE)
9554 x_member_display_code - Member Display Code
9555 x_return_status
9556 - FND_API.G_RET_STS_SUCCESS ('S') if default member was found
9557 - FND_API.G_RET_STS_ERROR ('E') if no default member exists
9558 - FND_API.G_RET_STS_UNEXP_ERROR if something unexpected occurs
9559
9560 *************************************************************************/
9561
9562 PROCEDURE Get_Default_Dim_Member (
9563 p_api_version IN NUMBER DEFAULT 1.0,
9564 p_init_msg_list IN VARCHAR2 DEFAULT c_false,
9565 p_commit IN VARCHAR2 DEFAULT c_false,
9566 p_encoded IN VARCHAR2 DEFAULT c_true,
9567 p_table_name IN VARCHAR2,
9568 p_column_name IN VARCHAR2,
9569 p_ledger_id IN NUMBER DEFAULT NULL,
9570 x_member_code OUT NOCOPY VARCHAR2,
9571 x_member_data_type OUT NOCOPY VARCHAR2,
9572 x_member_display_code OUT NOCOPY VARCHAR2,
9573 x_return_status OUT NOCOPY VARCHAR2,
9574 x_msg_count OUT NOCOPY NUMBER,
9575 x_msg_data OUT NOCOPY VARCHAR2
9576 )
9577 IS
9578
9579 C_MODULE CONSTANT FND_LOG_MESSAGES.module%TYPE :=
9580 'fem.plsql.fem_dimension_util_pkg.get_default_dim_member.table';
9581 C_API_VERSION CONSTANT NUMBER := 1.0;
9582 C_API_NAME CONSTANT VARCHAR2(30) := 'Get_Default_Dim_Member';
9583
9584 v_dim_id FEM_DIMENSIONS_B.dimension_id%TYPE;
9585
9586 BEGIN
9587
9588 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9589 FEM_ENGINES_PKG.TECH_MESSAGE(
9590 p_severity => FND_LOG.level_procedure,
9591 p_module => C_MODULE,
9592 p_msg_text => 'Begin Procedure');
9593 END IF;
9594
9595 -- Initialize return status to unexpected error
9596 x_return_status := c_unexp;
9597
9598 -- Check for call compatibility.
9599 IF NOT FND_API.Compatible_API_Call (C_API_VERSION,
9600 p_api_version,
9601 C_API_NAME,
9602 G_PKG_NAME)
9603 THEN
9604 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9605 FEM_ENGINES_PKG.TECH_MESSAGE(
9606 p_severity => FND_LOG.level_statement,
9607 p_module => C_MODULE,
9608 p_msg_text => 'API Version ('||C_API_VERSION||') not compatible with '
9609 ||'passed in version ('||p_api_version||')');
9610 END IF;
9611 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
9612 p_count => x_msg_count,
9613 p_data => x_msg_data);
9614 RAISE e_unexp;
9615 END IF;
9616
9617 Validate_OA_Params (
9618 p_api_version => p_api_version,
9619 p_init_msg_list => p_init_msg_list,
9620 p_commit => p_commit,
9621 p_encoded => p_encoded,
9622 x_return_status => x_return_status);
9623
9624 IF (x_return_status <> c_success) THEN
9625 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded,
9626 p_count => x_msg_count,
9627 p_data => x_msg_data);
9628 RETURN;
9629 END IF;
9630
9631 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9632 FEM_ENGINES_PKG.TECH_MESSAGE(
9633 p_severity => FND_LOG.level_statement,
9634 p_module => C_MODULE,
9635 p_msg_text => 'p_ledger_id = '||to_char(p_ledger_id));
9636 FEM_ENGINES_PKG.TECH_MESSAGE(
9637 p_severity => FND_LOG.level_statement,
9638 p_module => C_MODULE,
9639 p_msg_text => 'p_table_name = '||p_table_name);
9640 FEM_ENGINES_PKG.TECH_MESSAGE(
9641 p_severity => FND_LOG.level_statement,
9642 p_module => C_MODULE,
9643 p_msg_text => 'p_column_name = '||p_column_name);
9644 END IF;
9645
9646 -- Determine the dimension associated with the column
9647 BEGIN
9648 SELECT dimension_id
9649 INTO v_dim_id
9650 FROM fem_tab_columns_b
9654 IF v_dim_id IS NULL THEN
9651 WHERE table_name = Upper(p_table_name)
9652 AND column_name = Upper(p_column_name);
9653
9655 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9656 FEM_ENGINES_PKG.TECH_MESSAGE(
9660 END IF;
9657 p_severity => FND_LOG.level_statement,
9658 p_module => C_MODULE,
9659 p_msg_text => 'Column does not point to a dimension');
9661 RAISE e_unexp;
9662 END IF;
9663
9664 EXCEPTION WHEN no_data_found THEN
9665 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9666 FEM_ENGINES_PKG.TECH_MESSAGE(
9667 p_severity => FND_LOG.level_statement,
9668 p_module => C_MODULE,
9669 p_msg_text => 'Column is not registered in FEM_TAB_COLUMNS_B');
9670 END IF;
9671 RAISE e_unexp;
9672 END;
9673
9674 -- Call Get_Default_Dim_Member with the dimension ID
9675 -- to obtain the default dim member
9676 Get_Default_Dim_Member (
9677 p_api_version => 1.0,
9678 p_init_msg_list => p_init_msg_list,
9679 p_commit => p_commit,
9680 p_encoded => p_encoded,
9681 x_return_status => x_return_status,
9682 x_msg_count => x_msg_count,
9683 x_msg_data => x_msg_data,
9684 p_dimension_id => v_dim_id,
9685 p_ledger_id => p_ledger_id,
9686 x_member_code => x_member_code,
9687 x_member_data_type => x_member_data_type,
9688 x_member_display_code => x_member_display_code);
9689
9690 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9691 FEM_ENGINES_PKG.TECH_MESSAGE(
9695 END IF;
9692 p_severity => FND_LOG.level_procedure,
9693 p_module => C_MODULE,
9694 p_msg_text => 'End Procedure');
9696
9697 EXCEPTION
9698 WHEN others THEN
9699 IF FND_LOG.level_statement >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9700 FEM_ENGINES_PKG.TECH_MESSAGE(
9701 p_severity => FND_LOG.level_statement,
9702 p_module => C_MODULE,
9703 p_msg_text => 'Unexpected error.');
9704 END IF;
9705 IF FND_LOG.level_procedure >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
9706 FEM_ENGINES_PKG.TECH_MESSAGE(
9707 p_severity => FND_LOG.level_procedure,
9708 p_module => C_MODULE,
9709 p_msg_text => 'End Procedure');
9710 END IF;
9711 x_return_status := c_unexp;
9712
9713 END Get_Default_Dim_Member;
9714
9715
9716 /*************************************************************************
9717
9718 Get_Dim_Member_Display_Code
9719
9720 *************************************************************************/
9721
9722 FUNCTION Get_Dim_Member_Display_Code (
9723 p_dimension_id IN NUMBER,
9724 p_dimension_member_id IN VARCHAR2,
9725 p_dimension_member_vs_id IN NUMBER DEFAULT NULL
9726 ) RETURN VARCHAR2
9727 IS
9728
9729 v_dim_id NUMBER;
9730 v_vs_id NUMBER;
9731 v_mem_b_tab VARCHAR2(30);
9732 v_mem_col VARCHAR2(30);
9733 v_mem_dc_col VARCHAR2(30);
9734 v_vs_req_flg VARCHAR2(1);
9735
9736 v_member_display_code VARCHAR(150);
9737
9738 v_sql_stmt VARCHAR2(32767);
9739
9740 e_error EXCEPTION;
9741
9742 BEGIN
9743
9744 ---------------------------------
9745 -- Verify the specified Dimension
9746 ---------------------------------
9747 BEGIN
9748 SELECT dimension_id
9749 INTO v_dim_id
9750 FROM fem_dimensions_b
9751 WHERE dimension_id = p_dimension_id;
9752 EXCEPTION
9753 WHEN no_data_found THEN
9754 RAISE e_error;
9755 END;
9756
9757 -------------------------------
9758 -- Get the Dimension's metadata
9759 -------------------------------
9760 SELECT member_b_table_name,
9761 member_col,
9762 member_display_code_col,
9763 value_set_required_flag
9764 INTO v_mem_b_tab,
9765 v_mem_col,
9766 v_mem_dc_col,
9767 v_vs_req_flg
9768 FROM fem_xdim_dimensions
9769 WHERE dimension_id = v_dim_id;
9770
9771 ---------------------------------
9772 -- Verify the specified Value Set
9773 ---------------------------------
9774 IF (v_vs_req_flg = 'Y')
9775 THEN
9776 BEGIN
9777 SELECT value_set_id
9778 INTO v_vs_id
9779 FROM fem_value_sets_b
9780 WHERE value_set_id = p_dimension_member_vs_id
9781 AND dimension_id = v_dim_id;
9782 EXCEPTION
9783 WHEN no_data_found THEN
9784 RAISE e_error;
9785 END;
9786 ELSE
9787 v_vs_id := null;
9788 END IF;
9789
9790 ----------------
9791 -- Get Member ID
9792 ----------------
9793 IF (v_vs_id IS NOT NULL)
9794 THEN
9795 v_sql_stmt :=
9796 'SELECT '||v_mem_dc_col||
9797 ' FROM '||v_mem_b_tab||
9798 ' WHERE '||v_mem_col||' = :b_dimension_member_id'||
9799 ' AND value_set_id = :b_vs_id';
9800
9801 BEGIN
9802 EXECUTE IMMEDIATE v_sql_stmt
9803 INTO v_member_display_code
9804 USING p_dimension_member_id,
9805 v_vs_id;
9806 EXCEPTION
9807 WHEN no_data_found THEN
9808 RAISE e_error;
9809 END;
9810 ELSE
9811 v_sql_stmt :=
9812 'SELECT '||v_mem_dc_col||
9813 ' FROM '||v_mem_b_tab||
9814 ' WHERE '||v_mem_col||' = :b_dimension_member_id';
9815
9816 BEGIN
9817 EXECUTE IMMEDIATE v_sql_stmt
9818 INTO v_member_display_code
9819 USING p_dimension_member_id;
9820 EXCEPTION
9821 WHEN no_data_found THEN
9822 RAISE e_error;
9823 END;
9824 END IF;
9825
9826 RETURN v_member_display_code;
9827
9828 ------------------
9829 -- Exception Block
9830 ------------------
9831 EXCEPTION
9832
9833 WHEN e_error THEN
9834 RETURN null;
9835
9836 END Get_Dim_Member_Display_Code;
9837
9838
9839 /*************************************************************************
9840
9841 Get_Dim_Member_Name
9842
9843 *************************************************************************/
9844
9845 FUNCTION Get_Dim_Member_Name (
9846 p_dimension_id IN NUMBER,
9847 p_dimension_member_id IN VARCHAR2,
9848 p_dimension_member_vs_id IN NUMBER DEFAULT NULL
9849 ) RETURN VARCHAR2
9850 IS
9851
9852 v_dim_id NUMBER;
9853 v_vs_id NUMBER;
9854 v_mem_vl_tab VARCHAR2(30);
9855 v_mem_col VARCHAR2(30);
9856 v_mem_name_col VARCHAR2(30);
9857 v_vs_req_flg VARCHAR2(1);
9858
9859 v_member_name VARCHAR(150);
9860
9861 v_sql_stmt VARCHAR2(32767);
9862
9863 e_error EXCEPTION;
9864
9865 BEGIN
9866
9867 ---------------------------------
9868 -- Verify the specified Dimension
9869 ---------------------------------
9870 BEGIN
9871 SELECT dimension_id
9872 INTO v_dim_id
9873 FROM fem_dimensions_b
9874 WHERE dimension_id = p_dimension_id;
9875 EXCEPTION
9876 WHEN no_data_found THEN
9877 RAISE e_error;
9878 END;
9879
9880 -------------------------------
9881 -- Get the Dimension's metadata
9885 member_name_col,
9882 -------------------------------
9883 SELECT member_vl_object_name,
9884 member_col,
9886 value_set_required_flag
9887 INTO v_mem_vl_tab,
9888 v_mem_col,
9889 v_mem_name_col,
9890 v_vs_req_flg
9891 FROM fem_xdim_dimensions
9892 WHERE dimension_id = v_dim_id;
9893
9894 ---------------------------------
9895 -- Verify the specified Value Set
9896 ---------------------------------
9897 IF (v_vs_req_flg = 'Y')
9898 THEN
9899 BEGIN
9900 SELECT value_set_id
9901 INTO v_vs_id
9902 FROM fem_value_sets_b
9903 WHERE value_set_id = p_dimension_member_vs_id
9904 AND dimension_id = v_dim_id;
9905 EXCEPTION
9906 WHEN no_data_found THEN
9907 RAISE e_error;
9908 END;
9909 ELSE
9910 v_vs_id := null;
9911 END IF;
9912
9913 ----------------
9914 -- Get Member ID
9915 ----------------
9916 IF (v_vs_id IS NOT NULL)
9917 THEN
9918 v_sql_stmt :=
9919 'SELECT '||v_mem_name_col||
9920 ' FROM '||v_mem_vl_tab||
9921 ' WHERE '||v_mem_col||' = :b_dimension_member_id'||
9922 ' AND value_set_id = :b_vs_id';
9923
9924 BEGIN
9925 EXECUTE IMMEDIATE v_sql_stmt
9926 INTO v_member_name
9927 USING p_dimension_member_id,
9928 v_vs_id;
9929 EXCEPTION
9930 WHEN no_data_found THEN
9931 RAISE e_error;
9932 END;
9933 ELSE
9934 v_sql_stmt :=
9935 'SELECT '||v_mem_name_col||
9936 ' FROM '||v_mem_vl_tab||
9937 ' WHERE '||v_mem_col||' = :b_dimension_member_id';
9938
9939 BEGIN
9940 EXECUTE IMMEDIATE v_sql_stmt
9941 INTO v_member_name
9942 USING p_dimension_member_id;
9943 EXCEPTION
9944 WHEN no_data_found THEN
9945 RAISE e_error;
9946 END;
9947 END IF;
9948
9949 RETURN v_member_name;
9950
9951 ------------------
9952 -- Exception Block
9953 ------------------
9954 EXCEPTION
9955
9956 WHEN e_error THEN
9957 RETURN null;
9958
9959 END Get_Dim_Member_Name;
9960
9961
9962 ---------------------------------------------
9963
9964 END FEM_Dimension_Util_Pkg;