[Home] [Help]
PACKAGE BODY: APPS.FEM_GL_POST_PROCESS_PKG
Source
1 PACKAGE BODY FEM_GL_POST_PROCESS_PKG AS
2 /* $Header: fem_gl_post_proc.plb 120.11 2008/04/01 06:55:49 rguerrer ship $ */
3
4 /**************************************************************************
5 -- Private Package Variables and exceptions
6 **************************************************************************/
7
8 pc_log_level_statement CONSTANT NUMBER := fnd_log.level_statement;
9 pc_log_level_procedure CONSTANT NUMBER := fnd_log.level_procedure;
10 pc_log_level_event CONSTANT NUMBER := fnd_log.level_event;
11 pc_log_level_exception CONSTANT NUMBER := fnd_log.level_exception;
12 pc_log_level_error CONSTANT NUMBER := fnd_log.level_error;
13 pc_log_level_unexpected CONSTANT NUMBER := fnd_log.level_unexpected;
14
15 pc_API_version CONSTANT NUMBER := 1.0;
16
17 pv_proc_name VARCHAR2(30);
18
19 pv_API_return_code NUMBER;
20
21 pv_dim_attr_id fem_dim_attributes_b.attribute_id%TYPE;
22 pv_dim_attr_ver_id fem_dim_attr_versions_b.version_id%TYPE;
23 pv_attr_label fem_dim_attributes_b.attribute_varchar_label%TYPE;
24 pv_dim_name fem_dimensions_tl.dimension_name%TYPE;
25
26 pv_obj_type_cd fem_object_catalog_b.object_type_code%TYPE;
27 pv_cal_per_calendar_id fem_cal_periods_b.calendar_id%TYPE;
28 pv_ledger_calendar_id fem_hierarchies.calendar_id%TYPE;
29 pv_precedent_dataset_code fem_datasets_b.dataset_code%TYPE;
30
31 Invalid_Budget_ID EXCEPTION;
32 Invalid_Budget_or_Dataset EXCEPTION;
33 Invalid_Cal_Period_ID EXCEPTION;
34 Invalid_Dataset_Code EXCEPTION;
35 Invalid_DS_Bal_Type EXCEPTION;
36 Invalid_Enc_Type_ID EXCEPTION;
37 Invalid_Enc_or_Dataset EXCEPTION;
38 Invalid_Engine_Parameter EXCEPTION;
39 Invalid_Execution_Mode EXCEPTION;
40 Invalid_Ledger_ID EXCEPTION;
41 Invalid_Obj_Approval_Status EXCEPTION;
42 Invalid_Object_Def_ID EXCEPTION;
43 Invalid_Object_ID EXCEPTION;
44 Invalid_QTD_YTD EXCEPTION;
45 Invalid_Request_ID EXCEPTION;
46 Invalid_Runtime_Parameter EXCEPTION;
47 Ledger_Cal_NEQ_Period_Cal EXCEPTION;
48 Value_Set_ID_Error EXCEPTION;
49 User_Not_Allowed EXCEPTION;
50
51
52 /**************************************************************************
53 -- Private Procedure Declarations
54 **************************************************************************/
55
56 PROCEDURE Get_Dim_IDs;
57
58
59 PROCEDURE Validate_Budget;
60
61 PROCEDURE Validate_Cal_Period;
62
63 PROCEDURE Validate_Dataset;
64
65 PROCEDURE Validate_DS_Bal_Type;
66
67 PROCEDURE Validate_Encumbrance_Type;
68
69 PROCEDURE Validate_Ledger;
70
71 PROCEDURE Validate_Object_Def_ID;
72
73
74 PROCEDURE Validate_Engine_Parameters (x_completion_code OUT NOCOPY NUMBER);
75
76
77 /**************************************************************************
78 -- Public Procedures
79 **************************************************************************/
80
81 -- =======================================================================
82 PROCEDURE Validate_XGL_Eng_Parameters
83 (p_ledger_id IN NUMBER,
84 p_cal_period_id IN NUMBER,
85 p_dataset_code IN NUMBER,
86 p_xgl_obj_def_id IN NUMBER,
87 p_exec_mode IN VARCHAR2,
88 p_qtd_ytd_code IN VARCHAR2 DEFAULT NULL,
89 p_budget_id IN NUMBER DEFAULT NULL,
90 p_enc_type_id IN NUMBER DEFAULT NULL,
91 x_completion_code OUT NOCOPY NUMBER) IS
92 -- =======================================================================
93 -- Purpose
94 -- XGL-specific wrapper for Validate_Engine_Parameters, which has
95 -- functionality that is common to both engines. All functionality
96 -- for setting package variables and validating engine parameters
97 -- that is specific to the XGL engine should go here.
98 -- History
99 -- 11-13-03 G Hall Created
100 -- 12-02-03 G Hall Added Object Type validation
101 -- 01-27-04 G Hall Moved the Object ID lookup to
102 -- Validate_Object_Def_ID.
103 -- 05-12-04 G Hall Bug# 3610446: Added validation for p_qtd_ytd_code
104 -- parameter.
105 -- Arguments
106 -- All of the IN arguments are the same as the IN arguments for the
107 -- FEM_XGL_POST_ENGINE_PKG.Main procedure.
108 -- x_completion_code returns 0 for success, 1 for warning, 2 for failure.
109 -- Notes
110 -- Called from the beginning of FEM_XGL_POST_ENGINE_PKG.Main
111 -- =======================================================================
112
113 v_row_count NUMBER;
114
115 BEGIN
116
117 FEM_ENGINES_PKG.Tech_Message
118 (p_severity => pc_log_level_procedure,
119 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
120 'validate_xgl_eng_parameters.begin',
121 p_msg_text => 'BEGIN');
122
123 -- --------------------------------------------------------------------
124 -- Set all engine parameters as public package variables
125 -- --------------------------------------------------------------------
126
127 pv_ledger_id := p_ledger_id;
128 pv_cal_period_id := p_cal_period_id;
129 pv_dataset_code := p_dataset_code;
130 pv_rule_obj_def_id := p_xgl_obj_def_id;
131 pv_exec_mode := p_exec_mode;
132 -- Updated by L Poon to fix the GSCC warning - File.Sql.35
133 pv_qtd_ytd_code := NVL(p_qtd_ytd_code, 'PTD');
134 pv_budget_id := p_budget_id;
135 pv_enc_type_id := p_enc_type_id;
136
137 -- --------------------------------------------------------------------
138 -- Log debug messages to display values for those variables
139 -- --------------------------------------------------------------------
140
141 FEM_ENGINES_PKG.Tech_Message
142 (p_severity => pc_log_level_statement,
143 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
144 'validate_xgl_eng_parameters.pv_ledger_id',
145 p_app_name => 'FEM',
146 p_msg_name => 'FEM_GL_POST_204',
147 p_token1 => 'VAR_NAME',
148 p_value1 => 'pv_ledger_id',
149 p_token2 => 'VAR_VAL',
150 p_value2 => TO_CHAR(pv_ledger_id));
151
152 FEM_ENGINES_PKG.Tech_Message
153 (p_severity => pc_log_level_statement,
154 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
155 'validate_xgl_eng_parameters.pv_cal_period_id',
156 p_app_name => 'FEM',
157 p_msg_name => 'FEM_GL_POST_204',
158 p_token1 => 'VAR_NAME',
159 p_value1 => 'pv_cal_period_id',
160 p_token2 => 'VAR_VAL',
161 p_value2 => TO_CHAR(pv_cal_period_id));
162
163 FEM_ENGINES_PKG.Tech_Message
164 (p_severity => pc_log_level_statement,
165 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
166 'validate_xgl_eng_parameters.pv_dataset_code',
167 p_app_name => 'FEM',
168 p_msg_name => 'FEM_GL_POST_204',
169 p_token1 => 'VAR_NAME',
170 p_value1 => 'pv_dataset_code',
171 p_token2 => 'VAR_VAL',
172 p_value2 => TO_CHAR(pv_dataset_code));
173
174 FEM_ENGINES_PKG.Tech_Message
175 (p_severity => pc_log_level_statement,
176 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
177 'validate_xgl_eng_parameters.pv_budget_id',
178 p_app_name => 'FEM',
179 p_msg_name => 'FEM_GL_POST_204',
180 p_token1 => 'VAR_NAME',
181 p_value1 => 'pv_budget_id',
182 p_token2 => 'VAR_VAL',
183 p_value2 => TO_CHAR(pv_budget_id));
184
185 FEM_ENGINES_PKG.Tech_Message
186 (p_severity => pc_log_level_statement,
187 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
188 'validate_xgl_eng_parameters.pv_enc_type_id',
189 p_app_name => 'FEM',
190 p_msg_name => 'FEM_GL_POST_204',
191 p_token1 => 'VAR_NAME',
192 p_value1 => 'pv_enc_type_id',
193 p_token2 => 'VAR_VAL',
194 p_value2 => TO_CHAR(pv_enc_type_id));
195
196 FEM_ENGINES_PKG.Tech_Message
197 (p_severity => pc_log_level_statement,
198 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
199 'validate_xgl_eng_parameters.pv_exec_mode',
200 p_app_name => 'FEM',
201 p_msg_name => 'FEM_GL_POST_204',
202 p_token1 => 'VAR_NAME',
203 p_value1 => 'pv_exec_mode',
204 p_token2 => 'VAR_VAL',
205 p_value2 => pv_exec_mode);
206
207 FEM_ENGINES_PKG.Tech_Message
208 (p_severity => pc_log_level_statement,
209 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
210 'validate_xgl_eng_parameters.pv_rule_obj_def_id',
211 p_app_name => 'FEM',
212 p_msg_name => 'FEM_GL_POST_204',
213 p_token1 => 'VAR_NAME',
214 p_value1 => 'pv_rule_obj_def_id',
215 p_token2 => 'VAR_VAL',
216 p_value2 => TO_CHAR(pv_rule_obj_def_id));
217
218 FEM_ENGINES_PKG.Tech_Message
219 (p_severity => pc_log_level_statement,
220 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
221 'validate_xgl_eng_parameters.pv_qtd_ytd_code',
222 p_app_name => 'FEM',
223 p_msg_name => 'FEM_GL_POST_204',
224 p_token1 => 'VAR_NAME',
225 p_value1 => 'pv_qtd_ytd_code',
226 p_token2 => 'VAR_VAL',
227 p_value2 => pv_qtd_ytd_code);
228
229 -- --------------------------------------------------------------------
230 -- Validate the p_qtd_ytd_code engine parameter.
231 -- --------------------------------------------------------------------
232
233 SELECT COUNT(*)
234 INTO v_row_count
235 FROM fnd_lookup_values
236 WHERE lookup_type = 'FEM_XGL_QTD_YTD_DSC'
237 AND lookup_code = pv_qtd_ytd_code
238 AND language = USERENV('LANG')
239 AND view_application_id = 274;
240
241 IF v_row_count = 0 THEN
242
243 FEM_ENGINES_PKG.Tech_Message
244 (p_severity => pc_log_level_statement,
245 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
246 'validate_xgl_eng_parameters.iqy',
247 p_msg_text => 'raising Invalid_QTD_YTD');
248
249 RAISE Invalid_QTD_YTD;
250
251 END IF;
252
253 -- --------------------------------------------------------------------
254 -- Set package variables common to both GL posting engines and
255 -- validate the engine parameters that are common to both engines.
256 -- --------------------------------------------------------------------
257
258 Validate_Engine_Parameters
259 (x_completion_code => x_completion_code);
260
261 IF x_completion_code = 2 THEN
262
263 RAISE Invalid_Engine_Parameter;
264
265 END IF;
266
267 -- Validate that the rule to be executed is an XGL_INTEGRATION rule.
268
269 IF pv_obj_type_cd <> 'XGL_INTEGRATION' THEN
270
271 FEM_ENGINES_PKG.Tech_Message
272 (p_severity => pc_log_level_statement,
273 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
274 'validate_xgl_eng_parameters.iobj2.',
275 p_msg_text => 'raising Invalid_Object_ID');
276
277 RAISE Invalid_Object_ID;
278
279 END IF;
280
281 -- Successful completion
282
283 IF x_completion_code <> 1 THEN
284 x_completion_code := 0;
285 END IF;
286
287 FEM_ENGINES_PKG.Tech_Message
288 (p_severity => pc_log_level_procedure,
289 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
290 'validate_xgl_eng_parameters.end',
291 p_msg_text => 'END');
292
293 EXCEPTION
294 WHEN Invalid_Engine_Parameter THEN
295 ------------------------------------------------------------------
296 -- Messages are aleady logged, x_completion_code is already set.
297 ------------------------------------------------------------------
298 NULL;
299
300 WHEN Invalid_Object_ID THEN
301 ------------------------------------------------------------------
302 -- Invalid External GL Integration Rule: Value not found or rule
303 -- has the wrong Object Type.
304 ------------------------------------------------------------------
305 x_completion_code := 2;
306
307 FEM_ENGINES_PKG.Tech_Message
308 (p_severity => pc_log_level_error,
309 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
310 'validate_xgl_eng_parameters.invalid_object_id',
311 p_app_name => 'FEM',
312 p_msg_name => 'FEM_GL_POST_010');
313
314 FEM_ENGINES_PKG.User_Message
315 (p_app_name => 'FEM',
316 p_msg_name => 'FEM_GL_POST_010');
317
318 WHEN Invalid_QTD_YTD THEN
319 ------------------------------------------------------------------
320 -- Invalid parameter. Value not found. Parameter Name:
321 -- P_QTD_YTD_CODE (Period Specific Amounts Provided)
322 ------------------------------------------------------------------
323 x_completion_code := 2;
324
325 FEM_ENGINES_PKG.Tech_Message
326 (p_severity => pc_log_level_error,
327 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
328 'validate_xgl_eng_parameters.invalid_qtd_ytd',
329 p_app_name => 'FEM',
330 p_msg_name => 'FEM_GL_POST_001',
331 p_token1 => 'DIMENSION_NAME',
332 p_value1 => 'P_QTD_YTD_CODE (Period Specific Amounts Provided)');
333
334 FEM_ENGINES_PKG.User_Message
335 (p_app_name => 'FEM',
336 p_msg_name => 'FEM_GL_POST_001',
337 p_token1 => 'DIMENSION_NAME',
338 p_value1 => 'P_QTD_YTD_CODE (Period Specific Amounts Provided)');
339
340 WHEN OTHERS THEN
341 ------------------------------------------------------------------
342 -- Unexpected exceptions
343 ------------------------------------------------------------------
344 pv_sqlerrm := SQLERRM;
345 pv_callstack := dbms_utility.format_call_stack;
346
347 x_completion_code := 2;
348
349 -- Log the call stack and the Oracle error message to
350 -- FND_LOG with the "unexpected exception" severity level.
351
352 FEM_ENGINES_PKG.Tech_Message
353 (p_severity => pc_log_level_unexpected,
354 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
355 'validate_xgl_eng_parameters.unexpected_exception',
356 p_msg_text => pv_sqlerrm);
357
358 FEM_ENGINES_PKG.Tech_Message
359 (p_severity => pc_log_level_unexpected,
360 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
361 'validate_xgl_eng_parameters.unexpected_exception',
362 p_msg_text => pv_callstack);
363
364 -- Log the Oracle error message to the Concurrent Request Log.
365
366 FEM_ENGINES_PKG.User_Message
367 (p_app_name => 'FEM',
368 p_msg_text => pv_sqlerrm);
369
370 END Validate_XGL_Eng_Parameters;
371 -- =======================================================================
372
373
374 -- =======================================================================
375 PROCEDURE Register_Process_Execution
376 (x_completion_code OUT NOCOPY NUMBER) IS
377 -- =======================================================================
378 -- Purpose
382 -- steps.
379 -- Registers the concurrent request in FEM_PL_REQUESTS, registers
380 -- the object execution in FEM_PL_OBJECT_EXECUTIION, obtaining an
381 -- FEM "execution lock, and performs other FEM process initialization
383 -- History
384 -- 11-13-03 G Hall Created
385 -- 01-27-04 G Hall Added P_EXEC_MODE_CODE parameter in call
386 -- to Register_Request.
387 -- 03-10-04 G Hall Added OA-compliant parameters to all
388 -- Process Lock procedure calls.
389 -- 03-16-04 G Hall Added debug messages for message stack
390 -- operations; added p_msg_index to call to
391 -- FND_MSG_PUB.Get.
392 -- 05-13-04 G Hall Bug# 3597495: Removed call to Register_Data_Location.
393 -- Final_Process_Logging now makes a call for each
394 -- valid Source System Code processed.
395 -- 08-23-05 G Hall Bug# 4521255: Fixed message decoding after API calls
396 -- when x_msg_count = 1.
397 -- Arguments
398 -- x_completion_code returns 0 for success, 2 for failure.
399 -- Notes
400 -- Called by FEM_XGL_POST_ENGINE_PKG.Main or by
401 -- FEM_OGL_POST_ENGINE.Main prior to processing.
402 -- =======================================================================
403
404 v_return_status VARCHAR2(1);
405 v_msg_count NUMBER;
406 v_msg_data VARCHAR2(2000);
407
408 i PLS_INTEGER;
409
410 v_exec_lock_exists BOOLEAN := FALSE;
411
412 API_Error EXCEPTION;
413
414 BEGIN
415
416 FEM_ENGINES_PKG.Tech_Message
417 (p_severity => pc_log_level_procedure,
418 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
419 'register_process_execution.begin',
420 p_msg_text => 'BEGIN');
421
422 -- Call the FEM_PL_PKG.Register_Request API procedure to register
423 -- the concurrent request in FEM_PL_REQUESTS.
424
425 FND_MSG_PUB.Initialize;
426
427 FEM_PL_PKG.Register_Request
428 (P_API_VERSION => pc_API_version,
429 P_COMMIT => 'T',
430 P_CAL_PERIOD_ID => pv_cal_period_id,
431 P_LEDGER_ID => pv_ledger_id,
432 P_OUTPUT_DATASET_CODE => pv_dataset_code,
433 P_REQUEST_ID => pv_req_id,
434 P_USER_ID => pv_user_id,
435 P_LAST_UPDATE_LOGIN => pv_login_id,
436 P_PROGRAM_ID => pv_pgm_id,
437 P_PROGRAM_LOGIN_ID => pv_login_id,
438 P_PROGRAM_APPLICATION_ID => pv_pgm_app_id,
439 P_EXEC_MODE_CODE => pv_exec_mode,
440 X_MSG_COUNT => v_msg_count,
441 X_MSG_DATA => v_msg_data,
442 X_RETURN_STATUS => v_return_status);
443
444 IF v_return_status <> 'S' THEN
445
446 FEM_ENGINES_PKG.Tech_Message
447 (p_severity => pc_log_level_statement,
448 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
449 'register_process_execution.rrapie',
450 p_msg_text => 'raising API_Error');
451
452 RAISE API_Error;
453
454 END IF;
455
456 -- Check for process locks and process overlaps, validate the Execution Mode
457 -- parameter, validate the period (for snapshot loads only), and register
458 -- the execution in FEM_PL_OBJECT_EXECUTIONS, obtaining an execution lock.
459
460 FND_MSG_PUB.Initialize;
461
462 FEM_PL_PKG.Register_Object_Execution
463 (P_API_VERSION => pc_API_version,
464 P_COMMIT => 'T',
465 P_REQUEST_ID => pv_req_id,
466 P_OBJECT_ID => pv_rule_obj_id,
467 P_EXEC_OBJECT_DEFINITION_ID => pv_rule_obj_def_id,
468 P_USER_ID => pv_user_id,
469 P_LAST_UPDATE_LOGIN => pv_login_id,
470 P_EXEC_MODE_CODE => pv_exec_mode,
471 X_EXEC_STATE => pv_exec_state,
472 X_PREV_REQUEST_ID => pv_prev_req_id,
473 X_MSG_COUNT => v_msg_count,
474 X_MSG_DATA => v_msg_data,
475 X_RETURN_STATUS => v_return_status);
476
477 IF v_return_status <> 'S' THEN
478
479 IF v_return_status = 'E' THEN
480 -- Lock exists
481 v_exec_lock_exists := TRUE;
482 END IF;
483
484 FEM_ENGINES_PKG.Tech_Message
485 (p_severity => pc_log_level_statement,
486 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
487 'register_process_execution.roeapie',
488 p_msg_text => 'raising API_Error');
489
490 RAISE API_Error;
491
492 END IF;
493
494 FEM_ENGINES_PKG.Tech_Message
495 (p_severity => pc_log_level_statement,
496 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
497 'register_process_execution.pv_exec_state',
498 p_app_name => 'FEM',
499 p_msg_name => 'FEM_GL_POST_204',
500 p_token1 => 'VAR_NAME',
501 p_value1 => 'pv_exec_state',
502 p_token2 => 'VAR_VAL',
503 p_value2 => pv_exec_state);
504
505 IF pv_exec_state = 'RERUN' THEN
509 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
506
507 FEM_ENGINES_PKG.Tech_Message
508 (p_severity => pc_log_level_statement,
510 'register_process_execution.pv_prev_req_id',
511 p_app_name => 'FEM',
512 p_msg_name => 'FEM_GL_POST_204',
513 p_token1 => 'VAR_NAME',
514 p_value1 => 'pv_prev_req_id',
515 p_token2 => 'VAR_VAL',
516 p_value2 => TO_CHAR(pv_prev_req_id));
517
518 END If;
519
520 -- Register the Object Definition ID together with this process execution in
521 -- FEM_PL_OBJECT_DEFS to establish the required edit locks on the executed
522 -- rule version.
523
524 FND_MSG_PUB.Initialize;
525
526 FEM_PL_PKG.Register_Object_Def
527 (P_API_VERSION => pc_API_version,
528 P_COMMIT => 'T',
529 P_REQUEST_ID => pv_req_id,
530 P_OBJECT_ID => pv_rule_obj_id,
531 P_OBJECT_DEFINITION_ID => pv_rule_obj_def_id,
532 P_USER_ID => pv_user_id,
533 P_LAST_UPDATE_LOGIN => pv_login_id,
534 X_MSG_COUNT => v_msg_count,
535 X_MSG_DATA => v_msg_data,
536 X_RETURN_STATUS => v_return_status);
537
538 IF v_return_status <> 'S' THEN
539
540 FEM_ENGINES_PKG.Tech_Message
541 (p_severity => pc_log_level_statement,
542 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
543 'register_process_execution.rodapie',
544 p_msg_text => 'raising API_Error');
545
546 RAISE API_Error;
547
548 END IF;
549
550 -- Log Undo information in FEM_PL_TABLES for rows inserted or merged into
551 -- FEM_BALANCES.
552
553 -- FEM-OGL Intg: Replace v_stmt_type by pv_stmt_type
554 IF pv_exec_mode = 'S' THEN
555 pv_stmt_type := 'INSERT';
556 ELSE
557 pv_stmt_type := 'MERGE';
558 END IF;
559
560 FND_MSG_PUB.Initialize;
561
562 FEM_PL_PKG.Register_Table
563 (P_API_VERSION => pc_API_version,
564 P_COMMIT => 'T',
565 P_REQUEST_ID => pv_req_id,
566 P_OBJECT_ID => pv_rule_obj_id,
567 P_TABLE_NAME => 'FEM_BALANCES',
568 P_STATEMENT_TYPE => pv_stmt_type,
569 P_NUM_OF_OUTPUT_ROWS => 0,
570 P_USER_ID => pv_user_id,
571 P_LAST_UPDATE_LOGIN => pv_login_id,
572 X_MSG_COUNT => v_msg_count,
573 X_MSG_DATA => v_msg_data,
574 X_RETURN_STATUS => v_return_status);
575
576 IF v_return_status <> 'S' THEN
577
578 FEM_ENGINES_PKG.Tech_Message
579 (p_severity => pc_log_level_statement,
580 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
581 'register_process_execution.rtapie',
582 p_msg_text => 'raising API_Error');
583
584 RAISE API_Error;
585
586 END IF;
587
588 -- Successful completion
589
590 x_completion_code := 0;
591
592 FEM_ENGINES_PKG.Tech_Message
593 (p_severity => pc_log_level_procedure,
594 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
595 'register_process_execution.end',
596 p_msg_text => 'END');
597
598 EXCEPTION
599
600 WHEN API_Error THEN
601
602 x_completion_code := 2;
603
604 -- Technical messages have already been logged by the API; user
605 -- messages are on the message stack.
606
607 FND_MSG_PUB.Count_and_Get(
608 p_encoded => 'F',
609 p_count => v_msg_count,
610 p_data => v_msg_data);
611
612 FEM_ENGINES_PKG.Tech_Message
613 (p_severity => pc_log_level_statement,
614 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
615 'register_process_execution.v_msg_count',
616 p_app_name => 'FEM',
617 p_msg_name => 'FEM_GL_POST_204',
618 p_token1 => 'VAR_NAME',
619 p_value1 => 'v_msg_count',
620 p_token2 => 'VAR_VAL',
621 p_value2 => TO_CHAR(v_msg_count));
622
623 IF v_msg_count = 1 THEN
624
625 FEM_ENGINES_PKG.Tech_Message
626 (p_severity => pc_log_level_statement,
627 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
628 'register_process_execution.v_msg_data1',
629 p_app_name => 'FEM',
630 p_msg_name => 'FEM_GL_POST_204',
631 p_token1 => 'VAR_NAME',
632 p_value1 => 'v_msg_data',
633 p_token2 => 'VAR_VAL',
634 p_value2 => v_msg_data);
635
636 FEM_ENGINES_PKG.User_Message
637 (p_app_name => 'FEM',
638 p_msg_text => v_msg_data);
639
640 ELSIF v_msg_count > 1 THEN
641
642 FOR i IN 1 .. v_msg_count LOOP
643
644 -- Try fuller call here; see Tim's doc.
645
646 v_msg_data :=
647 FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
648
652 'register_process_execution.v_msg_data2.',
649 FEM_ENGINES_PKG.Tech_Message
650 (p_severity => pc_log_level_statement,
651 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
653 p_app_name => 'FEM',
654 p_msg_name => 'FEM_GL_POST_204',
655 p_token1 => 'VAR_NAME',
656 p_value1 => 'v_msg_data',
657 p_token2 => 'VAR_VAL',
658 p_value2 => v_msg_data);
659
660 FEM_ENGINES_PKG.User_Message
661 (p_app_name => 'FEM',
662 p_msg_text => v_msg_data);
663
664 END LOOP;
665
666 END IF;
667
668 IF v_exec_lock_exists THEN
669
670 -- Unregister the concurrent request.
671
672 FEM_PL_PKG.Unregister_Request
673 (P_API_VERSION => pc_API_version,
674 P_COMMIT => 'T',
675 P_REQUEST_ID => pv_req_id,
676 X_MSG_COUNT => v_msg_count,
677 X_MSG_DATA => v_msg_data,
678 X_RETURN_STATUS => v_return_status);
679
680 END IF;
681
682 WHEN OTHERS THEN
683 --------------------------------------------------------------------
684 -- Unexpected exceptions
685 --------------------------------------------------------------------
686 x_completion_code := 2;
687
688 pv_sqlerrm := SQLERRM;
689 pv_callstack := dbms_utility.format_call_stack;
690
691 -- Log the call stack and the Oracle error message to
692 -- FND_LOG with the "unexpected exception" severity level.
693
694 FEM_ENGINES_PKG.Tech_Message
695 (p_severity => pc_log_level_unexpected,
696 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
697 'register_process_execution.unexpected_exception',
698 p_msg_text => pv_sqlerrm);
699
700 FEM_ENGINES_PKG.Tech_Message
701 (p_severity => pc_log_level_unexpected,
702 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
703 'register_process_execution.unexpected_exception',
704 p_msg_text => pv_callstack);
705
706 -- Log the Oracle error message to the Concurrent Request Log.
707
708 FEM_ENGINES_PKG.User_Message
709 (p_app_name => 'FEM',
710 p_msg_text => pv_sqlerrm);
711
712 END Register_Process_Execution;
713 -- =======================================================================
714
715
716 -- =======================================================================
717 PROCEDURE Final_Process_Logging
718 (p_exec_status IN VARCHAR2,
719 p_num_data_errors IN NUMBER,
720 p_num_data_errors_reproc IN NUMBER,
721 p_num_output_rows IN NUMBER,
722 p_final_message_name IN VARCHAR2) IS
723 -- =======================================================================
724 -- Purpose
725 -- Performs final process logging after process completion.
726 -- History
727 -- 11-13-03 G Hall Created
728 -- 03-10-04 G Hall Added OA-compliant parameters to all
729 -- Process Locks procedure calls.
730 -- 03-16-04 G Hall Added debug messages for message stack
731 -- operations; added p_msg_index to call to
732 -- FND_MSG_PUB.Get.
733 -- 03-17-04 G Hall Removed logging of p_final_message_name
734 -- parameter to the Debug Log and the
735 -- Concurrent Request Log. The parameter will
736 -- be eliminated altogether during MP
737 -- implementation.
738 -- 05-12-04 G Hall Reinstated logging of p_final_message_name
739 -- parameter to the Debug Log and the
740 -- Concurrent Request Log, and removed redundant
741 -- message calls from Main.
742 -- 05-13-04 G Hall Bug# 3597495: Added a call to Register_Data_Location
743 -- for each valid Source System Code processed.
744 -- 05-25-04 G Hall Changed call to Get_SSC_Not_Processed to parameterized
745 -- call to Get_SSC.
746 -- 07-06-05 G Hall Bug# 4050862 Added successful and error row counts
747 -- message to concurrent log file.
748 -- Arguments
749 -- p_exec_status The final completion status:
750 -- 'SUCCESS','CANCELLED_RERUN','ERROR_RERUN'.
751 -- p_num_data_errors The total number of data rows rejected
752 -- with errors, including reprocessed
753 -- previous errors that are still errors.
754 -- p_num_data_errors_reproc The total number of previous error rows
755 -- successfully reprocessed.
756 -- p_num_output_rows The total number of rows inserted or
757 -- merged into FEM_BALANCES by the engine.
758 -- p_final_message_name The name of the final message to be logged
759 -- for the engine.
760 -- Notes
761 -- Called by FEM_XGL_POST_ENGINE_PKG.Main or by
762 -- FEM_OGL_POST_ENGINE.Main after processing is complete.
766 v_msg_count NUMBER;
763 -- =======================================================================
764
765 v_return_status VARCHAR2(1);
767 v_msg_data VARCHAR2(2000);
768
769 v_statement_type fem_pl_tables.statement_type%TYPE;
770 v_src_sys_code fem_source_systems_b.source_system_code%TYPE;
771
772 i PLS_INTEGER;
773 j PLS_INTEGER;
774
775 BEGIN
776
777 FEM_ENGINES_PKG.Tech_Message
778 (p_severity => pc_log_level_procedure,
779 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
780 'final_process_logging.begin',
781 p_msg_text => 'BEGIN');
782
783 -- Update the total number of rows inserted and/or updated in FEM_BALANCES
784 -- by this execution, in the entry already posted in FEM_PL_TABLES.
785
786 IF pv_exec_mode = 'S' THEN
787 v_statement_type := 'INSERT';
788 ELSE
789 v_statement_type := 'MERGE';
790 END IF;
791
792 FND_MSG_PUB.Initialize;
793
794 FEM_PL_PKG.Update_Num_of_Output_Rows
795 (P_API_VERSION => pc_API_version,
796 P_COMMIT => 'T',
797 P_REQUEST_ID => pv_req_id,
798 P_OBJECT_ID => pv_rule_obj_id,
799 P_TABLE_NAME => 'FEM_BALANCES',
800 P_STATEMENT_TYPE => v_statement_type,
801 P_NUM_OF_OUTPUT_ROWS => p_num_output_rows,
802 P_USER_ID => pv_user_id,
803 P_LAST_UPDATE_LOGIN => pv_login_id,
804 X_MSG_COUNT => v_msg_count,
805 X_MSG_DATA => v_msg_data,
806 X_RETURN_STATUS => v_return_status);
807
808 -- Log the number of data errors flagged on individual input rows in the
809 -- interface table in this execution and the number of previously failed
810 -- rows successfully reprocessed in this execution.
811
812 FEM_PL_PKG.Update_Obj_Exec_Errors
813 (P_API_VERSION => pc_API_version,
814 P_COMMIT => 'T',
815 P_REQUEST_ID => pv_req_id,
816 P_OBJECT_ID => pv_rule_obj_id,
817 P_ERRORS_REPORTED => p_num_data_errors,
818 P_ERRORS_REPROCESSED => p_num_data_errors_reproc,
819 P_USER_ID => pv_user_id,
820 P_LAST_UPDATE_LOGIN => pv_login_id,
821 X_MSG_COUNT => v_msg_count,
822 X_MSG_DATA => v_msg_data,
823 X_RETURN_STATUS => v_return_status);
824
825 -- Update the status of the object execution from 'RUNNING' to
826 -- 'SUCCESS', 'CANCELLED_RERUN', or 'ERROR_RERUN'.
827
828 FEM_PL_PKG.Update_Obj_Exec_Status
829 (P_API_VERSION => pc_API_version,
830 P_COMMIT => 'T',
831 P_REQUEST_ID => pv_req_id,
832 P_OBJECT_ID => pv_rule_obj_id,
833 P_EXEC_STATUS_CODE => p_exec_status,
834 P_USER_ID => pv_user_id,
835 P_LAST_UPDATE_LOGIN => pv_login_id,
836 X_MSG_COUNT => v_msg_count,
837 X_MSG_DATA => v_msg_data,
838 X_RETURN_STATUS => v_return_status);
839
840 -- Update the status of the concurrent request from 'RUNNING' to
841 -- 'SUCCESS', 'CANCELLED_RERUN', or 'ERROR_RERUN'.
842
843 FEM_PL_PKG.Update_Request_Status
844 (P_API_VERSION => pc_API_version,
845 P_COMMIT => 'T',
846 P_REQUEST_ID => pv_req_id,
847 P_EXEC_STATUS_CODE => p_exec_status,
848 P_USER_ID => pv_user_id,
849 P_LAST_UPDATE_LOGIN => pv_login_id,
850 X_MSG_COUNT => v_msg_count,
851 X_MSG_DATA => v_msg_data,
852 X_RETURN_STATUS => v_return_status);
853
854 FND_MSG_PUB.Count_and_Get(
855 p_encoded => 'F',
856 p_count => v_msg_count,
857 p_data => v_msg_data);
858
859 IF v_msg_count = 1 THEN
860
861 FEM_ENGINES_PKG.User_Message
862 (p_app_name => 'FEM',
863 p_msg_text => v_msg_data);
864
865 ELSIF v_msg_count > 1 THEN
866
867 FOR i IN 1 .. v_msg_count LOOP
868
869 v_msg_data :=
870 FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
871
872 FEM_ENGINES_PKG.User_Message
873 (p_app_name => 'FEM',
874 p_msg_text => v_msg_data);
875
876 END LOOP;
877
878 END IF;
879
880 IF pv_ssc_where IS NOT NULL THEN
881
882 -- -----------------------------------------------------------------------
883 -- Register a data locations entry for each Source System Code processed,
884 -- as 'COMPLETE' or 'INCOMPLETE' depending on whether or not there are
885 -- any remaining error rows from the current process for that Source
886 -- System Code. If pv_ssc_where is NULL, a fatal error has occurred
887 -- before any rows could be processed, so there is nothing to log in
888 -- Data Locations.
889 -- -----------------------------------------------------------------------
890
891 -- Get the distinct list of Source System Codes with remaining error rows
892 -- for the current process set.
893
897
894 Get_SSC (p_dest_code => 'NP');
895
896 j := 1;
898 -- Loop thru the Source System Codes "To Be Processed" and compare them
899 -- with the Source System Codes "Not (fully) Processed".
900
901 FOR i IN 1..pv_ssc_tbp.count LOOP
902
903 FEM_ENGINES_PKG.Tech_Message
904 (p_severity => pc_log_level_statement,
905 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
906 'final_process_logging.i',
907 p_app_name => 'FEM',
908 p_msg_name => 'FEM_GL_POST_204',
909 p_token1 => 'VAR_NAME',
910 p_value1 => 'i',
911 p_token2 => 'VAR_VAL',
912 p_value2 => TO_CHAR(i));
913
914 FEM_ENGINES_PKG.Tech_Message
915 (p_severity => pc_log_level_statement,
916 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
917 'final_process_logging.j',
918 p_app_name => 'FEM',
919 p_msg_name => 'FEM_GL_POST_204',
920 p_token1 => 'VAR_NAME',
921 p_value1 => 'j',
922 p_token2 => 'VAR_VAL',
923 p_value2 => TO_CHAR(j));
924
925 BEGIN
926
927 -- Look up the Source System Code from the Display Code, for logging.
928
929 SELECT source_system_code
930 INTO v_src_sys_code
931 FROM fem_source_systems_b
932 WHERE source_system_display_code = pv_ssc_tbp(i).display_code;
933
934 EXCEPTION
935 WHEN NO_DATA_FOUND THEN
936
937 -- No interface rows with this Source System Code should have been
938 -- processed because it's an invalid code. Don't log any Data
939 -- Locations entry for it.
940
941 FEM_ENGINES_PKG.Tech_Message
942 (p_severity => pc_log_level_statement,
943 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
944 'final_process_logging.ssc_invalid',
945 p_app_name => 'FEM',
946 p_msg_name => 'FEM_GL_POST_204',
947 p_token1 => 'VAR_NAME',
948 p_value1 => 'pv_ssc_tbp(i).display_code',
949 p_token2 => 'VAR_VAL',
950 p_value2 => pv_ssc_tbp(i).display_code || ' INVALID');
951
952 j := j + 1;
953
954 GOTO End_pv_ssc_tbp_Loop;
955 END;
956
957 IF pv_ssc_tbp(i).display_code < pv_ssc_np(j).display_code THEN
958
959 -- This Source System Display Code was completly processed: Log
960 -- it in Data Locations as 'COMPLETE'.
961
962 FEM_DIMENSION_UTIL_PKG.Register_Data_Location
963 (P_REQUEST_ID => pv_req_id,
964 P_OBJECT_ID => pv_rule_obj_id,
965 P_TABLE_NAME => 'FEM_BALANCES',
966 P_LEDGER_ID => pv_ledger_id,
967 P_CAL_PER_ID => pv_cal_period_id,
968 P_DATASET_CD => pv_dataset_code,
969 P_SOURCE_CD => v_src_sys_code,
970 P_LOAD_STATUS => 'COMPLETE');
971
972 FEM_ENGINES_PKG.Tech_Message
973 (p_severity => pc_log_level_statement,
974 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
975 'final_process_logging.ssc_complete',
976 p_app_name => 'FEM',
977 p_msg_name => 'FEM_GL_POST_204',
978 p_token1 => 'VAR_NAME',
979 p_value1 => 'pv_ssc_tbp(i).display_code',
980 p_token2 => 'VAR_VAL',
981 p_value2 => pv_ssc_tbp(i).display_code || ' COMPLETE');
982
983 ELSE
984
985 -- They must be equal; that means there is still at least one row
986 -- for the current processing set with this Source System Code, so
987 -- it must not have been fully processed.
988
989 IF pv_ssc_tbp(i).row_count > pv_ssc_np(j).row_count THEN
990
991 -- The number remaining is less than the original number to be
992 -- processed: at least one row was processed for this Source
993 -- System Code, so log it in Data Locations as 'INCOMPLETE'.
994
995 FEM_DIMENSION_UTIL_PKG.Register_Data_Location
996 (P_REQUEST_ID => pv_req_id,
997 P_OBJECT_ID => pv_rule_obj_id,
998 P_TABLE_NAME => 'FEM_BALANCES',
999 P_LEDGER_ID => pv_ledger_id,
1000 P_CAL_PER_ID => pv_cal_period_id,
1001 P_DATASET_CD => pv_dataset_code,
1002 P_SOURCE_CD => v_src_sys_code,
1003 P_LOAD_STATUS => 'INCOMPLETE');
1004
1005 FEM_ENGINES_PKG.Tech_Message
1006 (p_severity => pc_log_level_statement,
1007 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1008 'final_process_logging.ssc_complete',
1009 p_app_name => 'FEM',
1010 p_msg_name => 'FEM_GL_POST_204',
1011 p_token1 => 'VAR_NAME',
1012 p_value1 => 'pv_ssc_tbp(i).display_code',
1016 END IF;
1013 p_token2 => 'VAR_VAL',
1014 p_value2 => pv_ssc_tbp(i).display_code || ' INCOMPLETE');
1015
1017
1018 j := j + 1;
1019
1020 END IF;
1021
1022 <<End_pv_ssc_tbp_Loop>>
1023 NULL;
1024
1025 END LOOP;
1026
1027 END IF;
1028
1029 -- Log final messages
1030
1031 FEM_ENGINES_PKG.Tech_Message
1032 (P_SEVERITY => pc_log_level_statement,
1033 P_MODULE => 'fem.plsql.fem_gl_post_process_pkg.' ||
1034 'final_process_logging.completion_status',
1035 P_APP_NAME => 'FEM',
1036 P_MSG_NAME => 'FEM_GL_POST_204',
1037 P_TOKEN1 => 'VAR_NAME',
1038 P_VALUE1 => 'Completion Status',
1039 P_TOKEN2 => 'VAR_VAL',
1040 P_VALUE2 => p_exec_status);
1041
1042 -- Successful completion
1043
1044 -- LOADNUM rows loaded successfully.
1045 -- REJECTNUM rows failed to load successfully.
1046 FEM_ENGINES_PKG.User_Message
1047 (P_APP_NAME => 'FEM',
1048 P_MSG_NAME => 'FEM_SD_LDR_PROCESS_SUMMARY',
1049 P_TOKEN1 => 'LOADNUM',
1050 P_VALUE1 => TO_CHAR(NVL(p_num_output_rows, 0)),
1051 P_TOKEN2 => 'REJECTNUM',
1052 P_VALUE2 => TO_CHAR(NVL(p_num_data_errors, 0)));
1053
1054 FEM_ENGINES_PKG.User_Message
1055 (P_APP_NAME => 'FEM',
1056 P_MSG_NAME => p_final_message_name);
1057
1058 FEM_ENGINES_PKG.Tech_Message
1059 (P_SEVERITY => pc_log_level_event,
1060 P_MODULE => 'fem.plsql.fem_gl_post_process_pkg.' ||
1061 'final_process_logging.final',
1062 P_APP_NAME => 'FEM',
1063 P_MSG_NAME => p_final_message_name);
1064
1065 FEM_ENGINES_PKG.Tech_Message
1066 (P_SEVERITY => pc_log_level_procedure,
1067 P_MODULE => 'fem.plsql.fem_gl_post_process_pkg.' ||
1068 'final_process_logging.end',
1069 P_MSG_TEXT => 'END');
1070
1071 EXCEPTION
1072
1073 WHEN OTHERS THEN
1074 ------------------------------------------------------------------
1075 -- Unexpected exceptions
1076 ------------------------------------------------------------------
1077 pv_sqlerrm := SQLERRM;
1078 pv_callstack := dbms_utility.format_call_stack;
1079
1080 -- Log the call stack and the Oracle error message to
1081 -- FND_LOG with the "unexpected exception" severity level.
1082
1083 FEM_ENGINES_PKG.Tech_Message
1084 (P_SEVERITY => pc_log_level_unexpected,
1085 P_MODULE => 'fem.plsql.fem_gl_post_process_pkg.' ||
1086 'final_process_logging.exception',
1087 P_MSG_TEXT => pv_sqlerrm);
1088
1089 FEM_ENGINES_PKG.Tech_Message
1090 (P_SEVERITY => pc_log_level_unexpected,
1091 P_MODULE => 'fem.plsql.fem_gl_post_process_pkg.' ||
1092 'final_process_logging.exception',
1093 P_MSG_TEXT => pv_callstack);
1094
1095 -- Log the Oracle error message to the Concurrent Request Log.
1096
1097 FEM_ENGINES_PKG.User_Message
1098 (p_app_name => 'FEM',
1099 p_msg_text => pv_sqlerrm);
1100
1101 -- LOADNUM rows loaded successfully.
1102 -- REJECTNUM rows failed to load successfully.
1103 FEM_ENGINES_PKG.User_Message
1104 (P_APP_NAME => 'FEM',
1105 P_MSG_NAME => 'FEM_SD_LDR_PROCESS_SUMMARY',
1106 P_TOKEN1 => 'LOADNUM',
1107 P_VALUE1 => TO_CHAR(NVL(p_num_output_rows, 0)),
1108 P_TOKEN2 => 'REJECTNUM',
1109 P_VALUE2 => TO_CHAR(NVL(p_num_data_errors, 0)));
1110
1111 END Final_Process_Logging;
1112 -- =======================================================================
1113
1114
1115 -- ======================================================================
1116 PROCEDURE Get_Proc_Key_Info
1117 (p_process_slice IN VARCHAR2,
1118 x_completion_code OUT NOCOPY NUMBER) IS
1119 -- ======================================================================
1120 -- Purpose
1121 -- Fetches the list of FEM_BALANCES processing key columns and other
1122 -- related info from the FEM metadata.
1123 -- History
1124 -- 10-31-03 S Kung Created
1125 -- 01-27-04 G Hall Removed superfluous call to get the
1126 -- Global VS Combo ID; Added check on
1127 -- VALUE_SET_REQUIRED_FLAG for getting
1128 -- Value Set ID for each dim; changed error
1129 -- handling to match other subroutines of
1130 -- Validate_Engine_Parameters.
1131 -- 02-06-04 G Hall Added lookup to populate
1132 -- dim_int_disp_code_col.
1133 -- 03-10-04 G Hall Removed SOURCE_SYSTEM_CODE from dim_col_name
1134 -- exclusion.
1135 -- 05-03-04 G Hall Bug# 3603234 Change pv_proc_keys(v).dim_member_col
1136 -- to pv_proc_keys(v).dim_col_name. Hard-coded a
1137 -- temporary workaround for INTERCOMPANY_DISPLAY_CODE.
1138 -- 05-07-04 G Hall Bug# 3597527: Added IN parameter p_process_slice
1139 -- and used it in each call to Tech_Message.
1140 -- 05-12-04 G Hall Bug# 3603260: Unhardcoded for INTERCOMPANY_
1141 -- DISPLAY_CODE; added FEM_DISPLAY_CODE_COL_MAP into
1145 -- (e.g. CURRENCY_TYPE_CODE).
1142 -- BULK COLLECT join to fetch display code column names.
1143 -- 05-24-04 G Hall Changed join to fem_xdim_dimensions to outer join,
1144 -- since some processing key columns are not dimenions
1146 -- 05-25-04 G Hall Added x_completion_code parameter; modified error-
1147 -- handling logic for being called by Process_Data_Slice.
1148 -- 06-02-04 G Hall Bug# 3603260: Changed FEM_DISPLAY_CODE_COL_MAP to
1149 -- FEM_INT_COLUMN_MAP per design changes for this table.
1150 -- 01-28-05 G Hall Bug# 4148677: Changed main query to get the
1151 -- DIMENSION_ID from FEM_TAB_COLUMNS_B instead of from
1152 -- FEM_COLUMN_REQUIREMNT_B.
1153 -- Arguments
1154 -- p_process_slice A character string concatenation of the MP FW
1155 -- subrequest process number and the data slice id
1156 -- for distinguishing messages logged by different
1157 -- executions of FEM_XGL_ENGINE_PKG.Process_Data_Slice.
1158 -- x_completion_code returns 0 for success, 2 for failure.
1159 -- Notes
1160 -- Called by Process_Data_Slice once for each subrequest.
1161 -- ======================================================================
1162
1163 v NUMBER;
1164
1165 BEGIN
1166
1167 FEM_ENGINES_PKG.Tech_Message
1168 (p_severity => pc_log_level_procedure,
1169 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1170 'get_proc_key_info.' || p_process_slice,
1171 p_msg_text => 'BEGIN');
1172
1173 -- Bulk select dimension information into array of records
1174
1175 SELECT
1176 xd.dimension_id,
1177 NULL,
1178 xd.value_set_required_flag,
1179 tcp.column_name,
1180 xd.member_b_table_name,
1181 xd.member_col,
1182 xd.member_display_code_col,
1183 cm.interface_column_name,
1184 xd.attribute_table_name
1185 BULK COLLECT INTO pv_proc_keys
1186 FROM fem_tab_column_prop tcp,
1187 fem_tab_columns_b tc,
1188 fem_xdim_dimensions xd,
1189 fem_int_column_map cm
1190 WHERE tcp.table_name = 'FEM_BALANCES'
1191 AND tcp.column_property_code = 'PROCESSING_KEY'
1192 AND tc.table_name = 'FEM_BALANCES'
1193 AND tc.column_name = tcp.column_name
1194 AND xd.dimension_id = tc.dimension_id
1195 AND cm.target_column_name (+) = tcp.column_name
1196 AND cm.object_type_code (+) = 'XGL_INTEGRATION'
1197 ORDER BY tcp.column_name;
1198
1199 pv_proc_key_dim_num := pv_proc_keys.count;
1200
1201 FEM_ENGINES_PKG.Tech_Message
1202 (p_severity => pc_log_level_statement,
1203 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1204 'get_proc_key_info.' || p_process_slice,
1205 p_app_name => 'FEM',
1206 p_msg_name => 'FEM_GL_POST_204',
1207 p_token1 => 'VAR_NAME',
1208 p_value1 => 'pv_proc_key_dim_num',
1209 p_token2 => 'VAR_VAL',
1210 p_value2 => TO_CHAR(pv_proc_key_dim_num));
1211
1212 IF pv_proc_key_dim_num = 0 THEN
1213
1214 FEM_ENGINES_PKG.Tech_Message
1215 (p_severity => pc_log_level_error,
1216 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1217 'get_proc_key_info.' || p_process_slice,
1218 p_app_name => 'FEM',
1219 p_msg_text => 'The FEM_BALANCES Processing Key ' ||
1220 'has not been set up yet.');
1221
1222 END IF;
1223
1224 FOR v IN 1..pv_proc_key_dim_num LOOP
1225
1226 FEM_ENGINES_PKG.Tech_Message
1227 (p_severity => pc_log_level_statement,
1228 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1229 'get_proc_key_info.' || p_process_slice,
1230 p_app_name => 'FEM',
1231 p_msg_name => 'FEM_GL_POST_204',
1232 p_token1 => 'VAR_NAME',
1233 p_value1 => 'dim_col_name',
1234 p_token2 => 'VAR_VAL',
1235 p_value2 => pv_proc_keys(v).dim_col_name);
1236
1237 FEM_ENGINES_PKG.Tech_Message
1238 (p_severity => pc_log_level_statement,
1239 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1240 'get_proc_key_info.' || p_process_slice,
1241 p_app_name => 'FEM',
1242 p_msg_name => 'FEM_GL_POST_204',
1243 p_token1 => 'VAR_NAME',
1244 p_value1 => 'dimension_id',
1245 p_token2 => 'VAR_VAL',
1246 p_value2 => TO_CHAR(pv_proc_keys(v).dimension_id));
1247
1248 IF pv_proc_keys(v).dim_vsr_flag = 'Y' THEN
1249
1250 -- Set Value Set ID for each dimension based on the ledger
1251
1252 pv_proc_keys(v).dim_vs_id :=
1253 FEM_DIMENSION_UTIL_PKG.Dimension_Value_Set_ID
1254 (p_Dimension_ID => pv_proc_keys(v).dimension_id,
1255 p_Ledger_ID => pv_ledger_id);
1256
1257 IF pv_proc_keys(v).dim_vs_id = -1 THEN
1258
1259 FEM_ENGINES_PKG.Tech_Message
1260 (p_severity => pc_log_level_statement,
1261 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1262 'get_proc_key_info.' || p_process_slice,
1263 p_msg_text => 'raising Value_Set_ID_Error');
1267
1264
1265 pv_dim_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
1266 (p_dim_id => pv_proc_keys(v).dimension_id);
1268 RAISE Value_Set_ID_Error;
1269
1270 END IF;
1271
1272 FEM_ENGINES_PKG.Tech_Message
1273 (p_severity => pc_log_level_statement,
1274 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1275 'get_proc_key_info.' || p_process_slice,
1276 p_app_name => 'FEM',
1277 p_msg_name => 'FEM_GL_POST_204',
1278 p_token1 => 'VAR_NAME',
1279 p_value1 => 'dim_vs_id',
1280 p_token2 => 'VAR_VAL',
1281 p_value2 => TO_CHAR(pv_proc_keys(v).dim_vs_id));
1282
1283 END IF;
1284
1285 FEM_ENGINES_PKG.Tech_Message
1286 (p_severity => pc_log_level_statement,
1287 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1288 'get_proc_key_info.' || p_process_slice,
1289 p_app_name => 'FEM',
1290 p_msg_name => 'FEM_GL_POST_204',
1291 p_token1 => 'VAR_NAME',
1292 p_value1 => 'dim_member_b_table_name',
1293 p_token2 => 'VAR_VAL',
1294 p_value2 => pv_proc_keys(v).dim_member_b_table_name);
1295
1296 FEM_ENGINES_PKG.Tech_Message
1297 (p_severity => pc_log_level_statement,
1298 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1299 'get_proc_key_info.' || p_process_slice,
1300 p_app_name => 'FEM',
1301 p_msg_name => 'FEM_GL_POST_204',
1302 p_token1 => 'VAR_NAME',
1303 p_value1 => 'dim_member_col',
1304 p_token2 => 'VAR_VAL',
1305 p_value2 => pv_proc_keys(v).dim_member_col);
1306
1307 IF pv_proc_keys(v).dim_col_name NOT IN
1308 ('CAL_PERIOD_ID', 'DATASET_CODE', 'CREATED_BY_OBJECT_ID') THEN
1309
1310 FEM_ENGINES_PKG.Tech_Message
1311 (p_severity => pc_log_level_statement,
1312 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1313 'get_proc_key_info.' || p_process_slice,
1314 p_app_name => 'FEM',
1315 p_msg_name => 'FEM_GL_POST_204',
1316 p_token1 => 'VAR_NAME',
1317 p_value1 => 'dim_member_disp_code_col',
1318 p_token2 => 'VAR_VAL',
1319 p_value2 => pv_proc_keys(v).dim_member_disp_code_col);
1320
1321 FEM_ENGINES_PKG.Tech_Message
1322 (p_severity => pc_log_level_statement,
1323 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1324 'get_proc_key_info.' || p_process_slice,
1325 p_app_name => 'FEM',
1326 p_msg_name => 'FEM_GL_POST_204',
1327 p_token1 => 'VAR_NAME',
1328 p_value1 => 'dim_int_disp_code_col',
1329 p_token2 => 'VAR_VAL',
1330 p_value2 => pv_proc_keys(v).dim_int_disp_code_col);
1331
1332 END IF;
1333
1334 FEM_ENGINES_PKG.Tech_Message
1335 (p_severity => pc_log_level_statement,
1336 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1337 'get_proc_key_info.' || p_process_slice,
1338 p_app_name => 'FEM',
1339 p_msg_name => 'FEM_GL_POST_204',
1340 p_token1 => 'VAR_NAME',
1341 p_value1 => 'dim_attr_table_name',
1342 p_token2 => 'VAR_VAL',
1343 p_value2 => pv_proc_keys(v).dim_attr_table_name);
1344
1345 END LOOP;
1346
1347 x_completion_code := 0;
1348
1349 FEM_ENGINES_PKG.Tech_Message
1350 (p_severity => pc_log_level_procedure,
1351 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1352 'get_proc_key_info.' || p_process_slice,
1353 p_msg_text => 'END');
1354
1355 EXCEPTION
1356
1357 WHEN Value_Set_ID_Error THEN
1358 ------------------------------------------------------------------
1359 -- Unable to retrieve the Value Set ID for a processing key
1360 -- dimension. Dimension Name:
1361 ------------------------------------------------------------------
1362
1363 x_completion_code := 2;
1364
1365 FEM_ENGINES_PKG.Tech_Message
1366 (p_severity => pc_log_level_error,
1367 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1368 'get_proc_key_info.' || p_process_slice,
1369 p_app_name => 'FEM',
1370 p_msg_name => 'FEM_GL_POST_022',
1371 p_token1 => 'DIMENSION_NAME',
1372 p_value1 => pv_dim_name);
1373
1374 FEM_ENGINES_PKG.User_Message
1375 (p_app_name => 'FEM',
1376 p_msg_name => 'FEM_GL_POST_022',
1377 p_token1 => 'DIMENSION_NAME',
1378 p_value1 => pv_dim_name);
1379
1380 FND_MSG_PUB.Initialize;
1381
1382 FEM_ENGINES_PKG.Put_Message
1383 (p_app_name => 'FEM',
1384 p_msg_name => 'FEM_GL_POST_022',
1385 p_token1 => 'DIMENSION_NAME',
1386 p_value1 => pv_dim_name);
1387
1388 pv_sqlerrm := FND_MSG_PUB.Get(1, p_encoded => 'F');
1389
1390 WHEN OTHERS THEN
1394 pv_sqlerrm := SQLERRM;
1391 ------------------------------------------------------------------
1392 -- Unexpected exceptions
1393 ------------------------------------------------------------------
1395 pv_callstack := dbms_utility.format_call_stack;
1396
1397 -- Log the call stack and the Oracle error message to
1398 -- FND_LOG with the "unexpected exception" severity level.
1399
1400 FEM_ENGINES_PKG.Tech_Message
1401 (p_severity => pc_log_level_unexpected,
1402 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1403 'get_proc_key_info.' || p_process_slice,
1404 p_msg_text => pv_sqlerrm);
1405
1406 FEM_ENGINES_PKG.Tech_Message
1407 (p_severity => pc_log_level_unexpected,
1408 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1409 'get_proc_key_info.' || p_process_slice,
1410 p_msg_text => pv_callstack);
1411
1412 -- Log the Oracle error message to the Concurrent Request Log.
1413
1414 FEM_ENGINES_PKG.User_Message
1415 (p_app_name => 'FEM',
1416 p_msg_text => pv_sqlerrm);
1417
1418 END Get_Proc_Key_Info;
1419 -- =======================================================================
1420
1421 -- ======================================================================
1422 PROCEDURE Get_SSC (p_dest_code IN VARCHAR2) IS
1423 -- ======================================================================
1424 -- Purpose
1425 -- Fetches the distinct list and rowcount of Source System Display
1426 -- Codes (SSDC's) from the interface table, for Data Locations logging.
1427 -- When called prior to processing, it gets SSDC's to be processed;
1428 -- when called after processing, it gets SSDC's not processed (due to
1429 -- parameter error, data error, or unexpected database error). This
1430 -- way we can tell which SSC's to make Data Locations entries for, and
1431 -- whether to post them as complete or incomplete.
1432 -- History
1433 -- 05-13-04 G Hall Bug# 3597495: Created.
1434 -- 05-25-04 G Hall Renamed from Get_SSC_To_Be_Processed to Get_SSC;
1435 -- Changed p_sql_where argument reference to use a
1436 -- package variable instead; removed p_sql_where
1437 -- argument and added p_dest_code argument, so it
1438 -- can be used to populate both SSDC's to be
1439 -- processed and SSDC's not processed.
1440 -- 04-25-06 G Hall Bug 5190527. Changed VARRAY to TABLE for
1441 -- src_sys_dsp_cd_list type, to remove limit on number
1442 -- of distinct source systems that can be loaded; this
1443 -- required a change to the syntax for adding the
1444 -- 'ZZZZZZZZZZZZZZZ' display code as the last element
1445 -- of the collection.
1446 -- 06-01-06 G Hall Bug 5190527 (as forward port for 11i bug 5257358).
1447 -- Added check for pv_ssc_np.count = 0.
1448 -- Argument
1449 -- p_dest_code 'TBP' to populate the pv_ssc_tbp structure;
1450 -- 'NP' to populate the pv_ssc_np structure.
1451 -- Notes
1452 -- Called by Main just prior to calling MP Master, and by
1453 -- Final_Process_Logging after processing is complete on upon early
1454 -- termination due to error.
1455 -- ======================================================================
1456
1457 v_sql_stmt VARCHAR2(1200);
1458
1459 TYPE SrcSysDspCdTBP_cursor IS REF CURSOR;
1460 SrcSysDspCdTBP SrcSysDspCdTBP_cursor;
1461
1462 BEGIN
1463
1464 FEM_ENGINES_PKG.Tech_Message
1465 (p_severity => pc_log_level_procedure,
1466 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1467 'get_ssc.begin',
1468 p_msg_text => 'BEGIN');
1469
1470 v_sql_stmt := 'SELECT source_system_display_code, COUNT(*)' ||
1471 ' FROM fem_bal_interface_t' ||
1472 ' WHERE ' || pv_ssc_where ||
1473 ' GROUP BY source_system_display_code' ||
1474 ' ORDER BY source_system_display_code';
1475
1476 FEM_ENGINES_PKG.Tech_Message
1477 (p_severity => pc_log_level_statement,
1478 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1479 'get_ssc',
1480 p_app_name => 'FEM',
1481 p_msg_name => 'FEM_GL_POST_204',
1482 p_token1 => 'VAR_NAME',
1483 p_value1 => 'v_sql_stmt',
1484 p_token2 => 'VAR_VAL',
1485 p_value2 => v_sql_stmt);
1486
1487 OPEN SrcSysDspCdTBP FOR v_sql_stmt;
1488
1489 IF p_dest_code = 'TBP' THEN
1490
1491 FETCH SrcSysDspCdTBP BULK COLLECT INTO pv_ssc_tbp;
1492
1493 FEM_ENGINES_PKG.Tech_Message
1494 (p_severity => pc_log_level_statement,
1495 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1496 'get_ssc',
1497 p_app_name => 'FEM',
1498 p_msg_name => 'FEM_GL_POST_204',
1499 p_token1 => 'VAR_NAME',
1500 p_value1 => 'pv_ssc_tbp.count',
1501 p_token2 => 'VAR_VAL',
1502 p_value2 => TO_CHAR(pv_ssc_tbp.count));
1503
1504 ELSE
1505
1506 FETCH SrcSysDspCdTBP BULK COLLECT INTO pv_ssc_np;
1507
1508 FEM_ENGINES_PKG.Tech_Message
1512 p_app_name => 'FEM',
1509 (p_severity => pc_log_level_statement,
1510 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1511 'get_ssc',
1513 p_msg_name => 'FEM_GL_POST_204',
1514 p_token1 => 'VAR_NAME',
1515 p_value1 => 'pv_ssc_np.count',
1516 p_token2 => 'VAR_VAL',
1517 p_value2 => TO_CHAR(pv_ssc_np.count));
1518
1519 -- Add a dummy row at the end whose Display Code value is greater
1520 -- than all (like "high-values"). This is needed for the matching
1521 -- logic in Final_Process_Logging.
1522
1523 IF pv_ssc_np.count = 0 THEN
1524 pv_ssc_np(1).display_code := 'ZZZZZZZZZZZZZZZ';
1525 ELSE
1526 pv_ssc_np(pv_ssc_np.last+1).display_code := 'ZZZZZZZZZZZZZZZ';
1527 END IF;
1528
1529 END IF;
1530
1531 CLOSE SrcSysDspCdTBP;
1532
1533 FEM_ENGINES_PKG.Tech_Message
1534 (p_severity => pc_log_level_procedure,
1535 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1536 'get_ssc.end',
1537 p_msg_text => 'END');
1538
1539 END Get_SSC;
1540 -- =======================================================================
1541
1542
1543 -- ======================================================================
1544 PROCEDURE Undo_XGL_Interface_Error_Rows
1545 (p_request_id IN NUMBER,
1546 x_return_status OUT NOCOPY VARCHAR2,
1547 x_msg_data OUT NOCOPY VARCHAR2,
1548 x_msg_count OUT NOCOPY NUMBER) IS
1549 -- ======================================================================
1550 -- Purpose
1551 -- Called by the Undo engine to delete remaining error rows from the
1552 -- XGL interface table that are associated with the executions being
1553 -- Undone.
1554 -- History
1555 -- 05-18-04 G Hall Bug# 3634602: Created (stubbed for now).
1556 -- 06-07-04 G Hall Bug# 3634602: Developed procedure body.
1557 -- Arguments
1558 -- p_request_id The Request ID of the execution chosen for undo.
1559 -- Used to look up the runtime parameters for that
1560 -- execution, for identifying interface table rows
1561 -- to be deleted.
1562 -- x_return_status Returns 'S' for success, 'E' for detected logic
1563 -- error, 'U' for unexpected error (e.g. database or
1564 -- PL/SQL error).
1565 -- x_msg_data Returns end-user message when there is exactly
1566 -- one.
1567 -- x_msg_count Returns the number of end-user messages generated.
1568 -- ======================================================================
1569
1570 v_cal_per_dim_group_id fem_cal_periods_b.dimension_group_id%TYPE;
1571 v_rows_deleted NUMBER;
1572
1573 v_param_name fem_dimensions_tl.dimension_name%TYPE;
1574 v_param_value VARCHAR2(40);
1575 v_attr_name fem_dim_attributes_tl.attribute_name%TYPE;
1576
1577 BEGIN
1578
1579 FEM_ENGINES_PKG.Tech_Message
1580 (p_severity => pc_log_level_procedure,
1581 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1582 'undo_xgl_int_error_rows.begin',
1583 p_msg_text => 'BEGIN');
1584
1585 -- -------------------------------------------------------------------
1586 -- Using p_request_id, from FEM_PL_REQUESTS look up CAL_PERIOD_ID,
1587 -- LEDGER_ID, and OUTPUT_DATASET_CODE.
1588 -- -------------------------------------------------------------------
1589
1590 BEGIN
1591
1592 SELECT ledger_id, cal_period_id, output_dataset_code
1593 INTO pv_ledger_id, pv_cal_period_id, pv_dataset_code
1594 FROM fem_pl_requests
1595 WHERE request_id = p_request_id;
1596
1597 FEM_ENGINES_PKG.Tech_Message
1598 (p_severity => pc_log_level_statement,
1599 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1600 'undo_xgl_int_error_rows.pv_ledger_id',
1601 p_app_name => 'FEM',
1602 p_msg_name => 'FEM_GL_POST_204',
1603 p_token1 => 'VAR_NAME',
1604 p_value1 => 'pv_ledger_id',
1605 p_token2 => 'VAR_VAL',
1606 p_value2 => TO_CHAR(pv_ledger_id));
1607
1608 FEM_ENGINES_PKG.Tech_Message
1609 (p_severity => pc_log_level_statement,
1610 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1611 'undo_xgl_int_error_rows.pv_cal_period_id',
1612 p_app_name => 'FEM',
1613 p_msg_name => 'FEM_GL_POST_204',
1614 p_token1 => 'VAR_NAME',
1615 p_value1 => 'pv_cal_period_id',
1616 p_token2 => 'VAR_VAL',
1617 p_value2 => TO_CHAR(pv_cal_period_id));
1618
1619 FEM_ENGINES_PKG.Tech_Message
1620 (p_severity => pc_log_level_statement,
1621 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1622 'undo_xgl_int_error_rows.pv_dataset_code',
1623 p_app_name => 'FEM',
1624 p_msg_name => 'FEM_GL_POST_204',
1625 p_token1 => 'VAR_NAME',
1626 p_value1 => 'pv_dataset_code',
1627 p_token2 => 'VAR_VAL',
1628 p_value2 => TO_CHAR(pv_dataset_code));
1629
1630 EXCEPTION
1634 (p_severity => pc_log_level_statement,
1631 WHEN NO_DATA_FOUND THEN
1632
1633 FEM_ENGINES_PKG.Tech_Message
1635 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1636 'undo_xgl_int_error_rows.irid.',
1637 p_msg_text => 'raising Invalid_Request_ID');
1638
1639 RAISE Invalid_Request_ID;
1640 END;
1641
1642 -- -------------------------------------------------------------------
1643 -- Use CAL_PERIOD_ID to look up CAL_PER_DIM_GRP_DISPLAY_CODE,
1644 -- CAL_PERIOD_END_DATE, and CAL_PERIOD_NUMBER.
1645 -- -------------------------------------------------------------------
1646
1647 -- Get the Dimension ID for Cal Period.
1648
1649 SELECT dimension_id
1650 INTO pv_cal_per_dim_id
1651 FROM fem_dimensions_b
1652 WHERE dimension_varchar_label = 'CAL_PERIOD';
1653
1654 -- Set variables used in messaging upon failure.
1655
1656 v_param_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
1657 (p_dim_id => pv_cal_per_dim_id);
1658 IF v_param_name IS NULL THEN
1659 v_param_name := 'Calendar Period';
1660 END IF;
1661 v_param_value := TO_CHAR(pv_cal_period_id);
1662 v_attr_name := NULL;
1663
1664 BEGIN
1665
1666 -- Get DIMENSION_GROUP_DISPLAY_CODE for the Calendar Period.
1667
1668 SELECT dimension_group_id
1669 INTO v_cal_per_dim_group_id
1670 FROM fem_cal_periods_b
1671 WHERE cal_period_id = pv_cal_period_id
1672 AND personal_flag = 'N';
1673
1674 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
1675 (p_dim_id => pv_cal_per_dim_id,
1676 p_attr_label => 'DIMENSION_GROUP_ID');
1677
1678 IF v_attr_name IS NULL THEN
1679 v_attr_name := 'DIMENSION_GROUP_ID';
1680 END IF;
1681
1682 SELECT dimension_group_display_code
1683 INTO pv_cal_per_dim_grp_dsp_cd
1684 FROM fem_dimension_grps_b
1685 WHERE dimension_group_id = v_cal_per_dim_group_id;
1686
1687 FEM_ENGINES_PKG.Tech_Message
1688 (p_severity => pc_log_level_statement,
1689 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1690 'undo_xgl_int_error_rows.pv_cal_per_dim_grp_dsp_cd',
1691 p_app_name => 'FEM',
1692 p_msg_name => 'FEM_GL_POST_204',
1693 p_token1 => 'VAR_NAME',
1694 p_value1 => 'pv_cal_per_dim_grp_dsp_cd',
1695 p_token2 => 'VAR_VAL',
1696 p_value2 => pv_cal_per_dim_grp_dsp_cd);
1697
1698 EXCEPTION
1699 WHEN NO_DATA_FOUND THEN
1700
1701 FEM_ENGINES_PKG.Tech_Message
1702 (p_severity => pc_log_level_statement,
1703 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1704 'undo_xgl_int_error_rows.icpid1.',
1705 p_msg_text => 'raising Invalid_Runtime_Parameter');
1706
1707 RAISE Invalid_Runtime_Parameter;
1708 END;
1709
1710 BEGIN
1711
1712 -- Get the CAL_PERIOD_END_DATE attribute of the Cal Period ID.
1713
1714 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
1715 (p_dim_id => pv_cal_per_dim_id,
1716 p_attr_label => 'CAL_PERIOD_END_DATE');
1717
1718 IF v_attr_name IS NULL THEN
1719 v_attr_name := 'CAL_PERIOD_END_DATE';
1720 END IF;
1721
1722 fem_dimension_util_pkg.get_dim_attr_id_ver_id
1723 (x_err_code => pv_API_return_code,
1724 x_attr_id => pv_dim_attr_id,
1725 x_ver_id => pv_dim_attr_ver_id,
1726 p_dim_id => pv_cal_per_dim_id,
1727 p_attr_label => 'CAL_PERIOD_END_DATE');
1728
1729 IF pv_API_return_code > 0 THEN
1730
1731 FEM_ENGINES_PKG.Tech_Message
1732 (p_severity => pc_log_level_statement,
1733 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1734 'undo_xgl_int_error_rows.icpid2.',
1735 p_msg_text => 'raising Invalid_Runtime_Parameter');
1736
1737 RAISE Invalid_Runtime_Parameter;
1738
1739 END IF;
1740
1741 SELECT date_assign_value
1742 INTO pv_cal_per_end_date
1743 FROM fem_cal_periods_attr
1744 WHERE attribute_id = pv_dim_attr_id
1745 AND version_id = pv_dim_attr_ver_id
1746 AND cal_period_id = pv_cal_period_id;
1747
1748 FEM_ENGINES_PKG.Tech_Message
1749 (p_severity => pc_log_level_statement,
1750 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1751 'undo_xgl_int_error_rows.pv_cal_per_end_date',
1752 p_app_name => 'FEM',
1753 p_msg_name => 'FEM_GL_POST_204',
1754 p_token1 => 'VAR_NAME',
1755 p_value1 => 'pv_cal_per_end_date',
1756 p_token2 => 'VAR_VAL',
1757 p_value2 => TO_CHAR(pv_cal_per_end_date, 'DD-MON-YYYY'));
1758
1759 EXCEPTION
1760 WHEN NO_DATA_FOUND THEN
1761
1762 FEM_ENGINES_PKG.Tech_Message
1763 (p_severity => pc_log_level_statement,
1764 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1768 RAISE Invalid_Runtime_Parameter;
1765 'undo_xgl_int_error_rows.icpid3.',
1766 p_msg_text => 'raising Invalid_Runtime_Parameter');
1767
1769 END;
1770
1771 BEGIN
1772
1773 -- Get the Calendar Period Number from the GL_PERIOD_NUM attribute of the
1774 -- Cal Period ID.
1775
1776 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
1777 (p_dim_id => pv_cal_per_dim_id,
1778 p_attr_label => 'GL_PERIOD_NUM');
1779
1780 IF v_attr_name IS NULL THEN
1781 v_attr_name := 'GL_PERIOD_NUM';
1782 END IF;
1783
1784 fem_dimension_util_pkg.get_dim_attr_id_ver_id
1785 (x_err_code => pv_API_return_code,
1786 x_attr_id => pv_dim_attr_id,
1787 x_ver_id => pv_dim_attr_ver_id,
1788 p_dim_id => pv_cal_per_dim_id,
1789 p_attr_label => 'GL_PERIOD_NUM');
1790
1791 IF pv_API_return_code > 0 THEN
1792
1793 FEM_ENGINES_PKG.Tech_Message
1794 (p_severity => pc_log_level_statement,
1795 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1796 'undo_xgl_int_error_rows.icpid4.',
1797 p_msg_text => 'raising Invalid_Runtime_Parameter');
1798
1799 RAISE Invalid_Runtime_Parameter;
1800
1801 END IF;
1802
1803 SELECT number_assign_value
1804 INTO pv_gl_per_number
1805 FROM fem_cal_periods_attr
1806 WHERE attribute_id = pv_dim_attr_id
1807 AND version_id = pv_dim_attr_ver_id
1808 AND cal_period_id = pv_cal_period_id;
1809
1810 FEM_ENGINES_PKG.Tech_Message
1811 (p_severity => pc_log_level_statement,
1812 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1813 'undo_xgl_int_error_rows.pv_gl_per_number',
1814 p_app_name => 'FEM',
1815 p_msg_name => 'FEM_GL_POST_204',
1816 p_token1 => 'VAR_NAME',
1817 p_value1 => 'pv_gl_per_number',
1818 p_token2 => 'VAR_VAL',
1819 p_value2 => TO_CHAR(pv_gl_per_number));
1820
1821 EXCEPTION
1822 WHEN NO_DATA_FOUND THEN
1823
1824 FEM_ENGINES_PKG.Tech_Message
1825 (p_severity => pc_log_level_statement,
1826 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1827 'undo_xgl_int_error_rows.icpid5.',
1828 p_msg_text => 'raising Invalid_Runtime_Parameter');
1829
1830 RAISE Invalid_Runtime_Parameter;
1831 END;
1832
1833 -- -------------------------------------------------------------------
1834 -- Use LEDGER_ID to look up LEDGER_DISPLAY_CODE.
1835 -- -------------------------------------------------------------------
1836
1837 -- Get the Dimension ID for Ledger.
1838
1839 SELECT dimension_id
1840 INTO pv_ledger_dim_id
1841 FROM fem_dimensions_b
1842 WHERE dimension_varchar_label = 'LEDGER';
1843
1844 -- Set variables used in messaging upon failure.
1845
1846 v_param_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
1847 (p_dim_id => pv_ledger_dim_id);
1848 IF v_param_name IS NULL THEN
1849 v_param_name := 'Ledger';
1850 END IF;
1851 v_param_value := TO_CHAR(pv_ledger_id);
1852 v_attr_name := NULL;
1853
1854 BEGIN
1855
1856 SELECT ledger_display_code
1857 INTO pv_ledger_dsp_cd
1858 FROM fem_ledgers_b
1859 WHERE ledger_id = pv_ledger_id
1860 AND enabled_flag = 'Y'
1861 AND personal_flag = 'N';
1862
1863 FEM_ENGINES_PKG.Tech_Message
1864 (p_severity => pc_log_level_statement,
1865 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1866 'undo_xgl_int_error_rows.pv_ledger_dsp_cd',
1867 p_app_name => 'FEM',
1868 p_msg_name => 'FEM_GL_POST_204',
1869 p_token1 => 'VAR_NAME',
1870 p_value1 => 'pv_ledger_dsp_cd',
1871 p_token2 => 'VAR_VAL',
1872 p_value2 => pv_ledger_dsp_cd);
1873
1874 EXCEPTION
1875 WHEN NO_DATA_FOUND THEN
1876
1877 FEM_ENGINES_PKG.Tech_Message
1878 (p_severity => pc_log_level_statement,
1879 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1880 'undo_xgl_int_error_rows.ilid.',
1881 p_msg_text => 'raising Invalid_Runtime_Parameter');
1882
1883 RAISE Invalid_Runtime_Parameter;
1884 END;
1885
1886 -- -------------------------------------------------------------------
1887 -- Use OUTPUT_DATASET_CODE to look up DS_BALANCE_TYPE_CODE, and if
1888 -- applicable, BUDGET_DISPLAY_CODE or ENCUMBRANCE_TYPE_CODE.
1889 -- -------------------------------------------------------------------
1890
1891 -- Get the Dimension ID for Dataset Code.
1892
1893 SELECT dimension_id
1894 INTO pv_dataset_dim_id
1895 FROM fem_dimensions_b
1896 WHERE dimension_varchar_label = 'DATASET';
1897
1898 -- Set variables used in messaging upon failure.
1899
1900 v_param_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
1901 (p_dim_id => pv_dataset_dim_id);
1902 IF v_param_name IS NULL THEN
1906
1903 v_param_name := 'Dataset';
1904 END IF;
1905 v_param_value := TO_CHAR(pv_dataset_code);
1907 BEGIN
1908
1909 -- Look up the Dataset attribute DATASET_BALANCE_TYPE_CODE
1910
1911 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
1912 (p_dim_id => pv_dataset_dim_id,
1913 p_attr_label => 'DATASET_BALANCE_TYPE_CODE');
1914
1915 IF v_attr_name IS NULL THEN
1916 v_attr_name := 'DATASET_BALANCE_TYPE_CODE';
1917 END IF;
1918
1919 fem_dimension_util_pkg.get_dim_attr_id_ver_id
1920 (x_err_code => pv_API_return_code,
1921 x_attr_id => pv_dim_attr_id,
1922 x_ver_id => pv_dim_attr_ver_id,
1923 p_dim_id => pv_dataset_dim_id,
1924 p_attr_label => 'DATASET_BALANCE_TYPE_CODE');
1925
1926 IF pv_API_return_code > 0 THEN
1927
1928 FEM_ENGINES_PKG.Tech_Message
1929 (p_severity => pc_log_level_statement,
1930 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1931 'undo_xgl_int_error_rows.idsc1.',
1932 p_msg_text => 'raising Invalid_Runtime_Parameter');
1933
1934 RAISE Invalid_Runtime_Parameter;
1935
1936 END IF;
1937
1938 SELECT dim_attribute_varchar_member
1939 INTO pv_ds_balance_type_cd
1940 FROM fem_datasets_attr
1941 WHERE attribute_id = pv_dim_attr_id
1942 AND version_id = pv_dim_attr_ver_id
1943 AND dataset_code = pv_dataset_code;
1944
1945 FEM_ENGINES_PKG.Tech_Message
1946 (p_severity => pc_log_level_statement,
1947 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1948 'undo_xgl_int_error_rows.pv_ds_balance_type_cd',
1949 p_app_name => 'FEM',
1950 p_msg_name => 'FEM_GL_POST_204',
1951 p_token1 => 'VAR_NAME',
1952 p_value1 => 'pv_ds_balance_type_cd',
1953 p_token2 => 'VAR_VAL',
1954 p_value2 => pv_ds_balance_type_cd);
1955
1956 EXCEPTION
1957 WHEN NO_DATA_FOUND THEN
1958
1959 FEM_ENGINES_PKG.Tech_Message
1960 (p_severity => pc_log_level_statement,
1961 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1962 'undo_xgl_int_error_rows.idsc2.',
1963 p_msg_text => 'raising Invalid_Runtime_Parameter');
1964
1965 RAISE Invalid_Runtime_Parameter;
1966 END;
1967
1968 IF pv_ds_balance_type_cd = 'BUDGET' THEN
1969
1970 BEGIN
1971
1972 -- Look up the Dataset Code BUDGET_ID attribute
1973
1974 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
1975 (p_dim_id => pv_dataset_dim_id,
1976 p_attr_label => 'BUDGET_ID');
1977
1978 IF v_attr_name IS NULL THEN
1979 v_attr_name := 'BUDGET_ID';
1980 END IF;
1981
1982 fem_dimension_util_pkg.get_dim_attr_id_ver_id
1983 (x_err_code => pv_API_return_code,
1984 x_attr_id => pv_dim_attr_id,
1985 x_ver_id => pv_dim_attr_ver_id,
1986 p_dim_id => pv_dataset_dim_id,
1987 p_attr_label => 'BUDGET_ID');
1988
1989 IF pv_API_return_code > 0 THEN
1990
1991 FEM_ENGINES_PKG.Tech_Message
1992 (p_severity => pc_log_level_statement,
1993 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
1994 'undo_xgl_int_error_rows.idsc3.',
1995 p_msg_text => 'raising Invalid_Runtime_Parameter');
1996
1997 RAISE Invalid_Runtime_Parameter;
1998
1999 END IF;
2000
2001 SELECT dim_attribute_numeric_member
2002 INTO pv_budget_id
2003 FROM fem_datasets_attr
2004 WHERE attribute_id = pv_dim_attr_id
2005 AND version_id = pv_dim_attr_ver_id
2006 AND dataset_code = pv_dataset_code;
2007
2008 FEM_ENGINES_PKG.Tech_Message
2009 (p_severity => pc_log_level_statement,
2010 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2011 'undo_xgl_int_error_rows.pv_budget_id',
2012 p_app_name => 'FEM',
2013 p_msg_name => 'FEM_GL_POST_204',
2014 p_token1 => 'VAR_NAME',
2015 p_value1 => 'pv_budget_id',
2016 p_token2 => 'VAR_VAL',
2017 p_value2 => pv_budget_id);
2018
2019 EXCEPTION
2020 WHEN NO_DATA_FOUND THEN
2021
2022 FEM_ENGINES_PKG.Tech_Message
2023 (p_severity => pc_log_level_statement,
2024 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2025 'undo_xgl_int_error_rows.idsc4.',
2026 p_msg_text => 'raising Invalid_Runtime_Parameter');
2027
2028 RAISE Invalid_Runtime_Parameter;
2029 END;
2030
2031 BEGIN
2032
2033 -- Look up the Budget Display Code
2034
2035 SELECT dimension_id
2036 INTO pv_budget_dim_id
2040 v_param_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
2037 FROM fem_dimensions_b
2038 WHERE dimension_varchar_label = 'BUDGET';
2039
2041 (p_dim_id => pv_budget_dim_id);
2042 IF v_param_name IS NULL THEN
2043 v_param_name := 'Budget';
2044 END IF;
2045 v_param_value := TO_CHAR(pv_budget_id);
2046 v_attr_name := NULL;
2047
2048 SELECT budget_display_code
2049 INTO pv_budget_dsp_cd
2050 FROM fem_budgets_b
2051 WHERE budget_id = pv_budget_id;
2052
2053 FEM_ENGINES_PKG.Tech_Message
2054 (p_severity => pc_log_level_statement,
2055 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2056 'undo_xgl_int_error_rows.pv_budget_dsp_cd',
2057 p_app_name => 'FEM',
2058 p_msg_name => 'FEM_GL_POST_204',
2059 p_token1 => 'VAR_NAME',
2060 p_value1 => 'pv_budget_dsp_cd',
2061 p_token2 => 'VAR_VAL',
2062 p_value2 => pv_budget_dsp_cd);
2063
2064 EXCEPTION
2065 WHEN NO_DATA_FOUND THEN
2066
2067 FEM_ENGINES_PKG.Tech_Message
2068 (p_severity => pc_log_level_statement,
2069 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2070 'undo_xgl_int_error_rows.idsc5.',
2071 p_msg_text => 'raising Invalid_Runtime_Parameter');
2072
2073 RAISE Invalid_Runtime_Parameter;
2074 END;
2075
2076 ELSIF pv_ds_balance_type_cd = 'ENCUMBRANCE' THEN
2077
2078 BEGIN
2079
2080 -- Look up the Dataset Code ENCUMBRANCE_TYPE_ID attribute
2081
2082 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
2083 (p_dim_id => pv_dataset_dim_id,
2084 p_attr_label => 'ENCUMBRANCE_TYPE_ID');
2085
2086 IF v_attr_name IS NULL THEN
2087 v_attr_name := 'ENCUMBRANCE_TYPE_ID';
2088 END IF;
2089
2090 fem_dimension_util_pkg.get_dim_attr_id_ver_id
2091 (x_err_code => pv_API_return_code,
2092 x_attr_id => pv_dim_attr_id,
2093 x_ver_id => pv_dim_attr_ver_id,
2094 p_dim_id => pv_dataset_dim_id,
2095 p_attr_label => 'ENCUMBRANCE_TYPE_ID');
2096
2097 IF pv_API_return_code > 0 THEN
2098
2099 FEM_ENGINES_PKG.Tech_Message
2100 (p_severity => pc_log_level_statement,
2101 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2102 'undo_xgl_int_error_rows.idsc6.',
2103 p_msg_text => 'raising Invalid_Runtime_Parameter');
2104
2105 RAISE Invalid_Runtime_Parameter;
2106
2107 END IF;
2108
2109 SELECT dim_attribute_numeric_member
2110 INTO pv_enc_type_id
2111 FROM fem_datasets_attr
2112 WHERE attribute_id = pv_dim_attr_id
2113 AND version_id = pv_dim_attr_ver_id
2114 AND dataset_code = pv_dataset_code;
2115
2116 FEM_ENGINES_PKG.Tech_Message
2117 (p_severity => pc_log_level_statement,
2118 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2119 'undo_xgl_int_error_rows.pv_enc_type_id',
2120 p_app_name => 'FEM',
2121 p_msg_name => 'FEM_GL_POST_204',
2122 p_token1 => 'VAR_NAME',
2123 p_value1 => 'pv_enc_type_id',
2124 p_token2 => 'VAR_VAL',
2125 p_value2 => pv_enc_type_id);
2126
2127 EXCEPTION
2128 WHEN NO_DATA_FOUND THEN
2129
2130 FEM_ENGINES_PKG.Tech_Message
2131 (p_severity => pc_log_level_statement,
2132 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2133 'undo_xgl_int_error_rows.idsc7.',
2134 p_msg_text => 'raising Invalid_Runtime_Parameter');
2135
2136 RAISE Invalid_Runtime_Parameter;
2137 END;
2138
2139 BEGIN
2140
2141 -- Look up the Encumbrance Type (Display) Code
2142
2143 SELECT dimension_id
2144 INTO pv_enc_type_dim_id
2145 FROM fem_dimensions_b
2146 WHERE dimension_varchar_label = 'ENCUMBRANCE_TYPE';
2147
2148 v_param_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
2149 (p_dim_id => pv_enc_type_dim_id);
2150 IF v_param_name IS NULL THEN
2151 v_param_name := 'Encumbrance Type';
2152 END IF;
2153 v_param_value := TO_CHAR(pv_enc_type_id);
2154 v_attr_name := NULL;
2155
2156 SELECT encumbrance_type_code
2157 INTO pv_enc_type_dsp_cd
2158 FROM fem_encumbrance_types_b
2159 WHERE encumbrance_type_id = pv_enc_type_id;
2160
2161 FEM_ENGINES_PKG.Tech_Message
2162 (p_severity => pc_log_level_statement,
2163 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2164 'undo_xgl_int_error_rows.pv_enc_type_dsp_cd',
2165 p_app_name => 'FEM',
2166 p_msg_name => 'FEM_GL_POST_204',
2170 p_value2 => pv_enc_type_dsp_cd);
2167 p_token1 => 'VAR_NAME',
2168 p_value1 => 'pv_enc_type_dsp_cd',
2169 p_token2 => 'VAR_VAL',
2171
2172 EXCEPTION
2173 WHEN NO_DATA_FOUND THEN
2174
2175 FEM_ENGINES_PKG.Tech_Message
2176 (p_severity => pc_log_level_statement,
2177 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2178 'undo_xgl_int_error_rows.idsc8.',
2179 p_msg_text => 'raising Invalid_Runtime_Parameter');
2180
2181 RAISE Invalid_Runtime_Parameter;
2182 END;
2183
2184 END IF;
2185
2186 -- -------------------------------------------------------------------
2187 -- Delete all rows for the given ledger, period, and dataset that
2188 -- have a value for POSTING_ERROR_CODE, or that have been tagged for
2189 -- processing by any XGL execution. This puts the interface table
2190 -- to a clean state for the given ledger, period, and dataset so the
2191 -- data can be reloaded and reprocessed without the risk of
2192 -- reprocessing left-over rows resulting in double-counting.
2193 -- -------------------------------------------------------------------
2194
2195 DELETE FROM fem_bal_interface_t
2196 WHERE cal_per_dim_grp_display_code = pv_cal_per_dim_grp_dsp_cd
2197 AND cal_period_end_date = pv_cal_per_end_date
2198 AND cal_period_number = pv_gl_per_number
2199 AND ledger_display_code = pv_ledger_dsp_cd
2200 AND ds_balance_type_code = pv_ds_balance_type_cd
2201 AND (budget_display_code = pv_budget_dsp_cd
2202 OR pv_budget_dsp_cd is NULL)
2203 AND (encumbrance_type_code = pv_enc_type_dsp_cd
2204 OR pv_enc_type_dsp_cd is NULL)
2205 AND posting_error_code IS NOT NULL;
2206
2207 v_rows_deleted := SQL%ROWCOUNT;
2208
2209 COMMIT;
2210
2211 FEM_ENGINES_PKG.Tech_Message
2212 (p_severity => pc_log_level_statement,
2213 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2214 'undo_xgl_int_error_rows.v_rows_deleted',
2215 p_app_name => 'FEM',
2216 p_msg_name => 'FEM_GL_POST_218',
2217 p_token1 => 'NUM',
2218 p_value1 => TO_CHAR(v_rows_deleted),
2219 p_token2 => 'TABLE',
2220 p_value2 => 'FEM_BAL_INTERFACE_T');
2221
2222 x_return_status := 'S';
2223 x_msg_data := NULL;
2224 x_msg_count := 0;
2225
2226 FEM_ENGINES_PKG.Tech_Message
2227 (p_severity => pc_log_level_procedure,
2228 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2229 'undo_xgl_int_error_rows.end',
2230 p_msg_text => 'END');
2231
2232 EXCEPTION
2233 WHEN Invalid_Request_ID THEN
2234
2235 -- WARNING: Error rows not undone from FEM_BAL_INTERFACE_T
2236
2237 FEM_ENGINES_PKG.Tech_Message
2238 (p_severity => pc_log_level_error,
2239 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2240 'undo_xgl_int_error_rows.xirid1',
2241 p_app_name => 'FEM',
2242 p_msg_name => 'FEM_GL_POST_024');
2243
2244 FEM_ENGINES_PKG.Put_Message
2245 (p_app_name => 'FEM',
2246 p_msg_name => 'FEM_GL_POST_024');
2247
2248 -- Invalid parameter. Value not found. Parameter Name: Request ID.
2249
2250 FEM_ENGINES_PKG.Tech_Message
2251 (p_severity => pc_log_level_error,
2252 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2253 'undo_xgl_int_error_rows.xirid2',
2254 p_app_name => 'FEM',
2255 p_msg_name => 'FEM_GL_POST_001',
2256 p_token1 => 'DIMENSION_NAME',
2257 p_value1 => 'FEM_REQUEST_ID_TXT',
2258 p_trans1 => 'Y');
2259
2260 FEM_ENGINES_PKG.Put_Message
2261 (p_app_name => 'FEM',
2262 p_msg_name => 'FEM_GL_POST_001',
2263 p_token1 => 'DIMENSION_NAME',
2264 p_value1 => 'FEM_REQUEST_ID_TXT',
2265 p_trans1 => 'Y');
2266
2267 x_return_status := 'E';
2268 x_msg_data := NULL;
2269 x_msg_count := 2;
2270
2271 WHEN Invalid_Runtime_Parameter THEN
2272 ------------------------------------------------------------------
2273 -- WARNING: Error rows not undone from FEM_BAL_INTERFACE_T
2274 --
2275 -- Unable to resolve one of the original runtime parameter values
2276 -- into its corresponding interface column value or values due to
2277 -- a missing dimension value or dimension attribute value.
2278 -- Parameter Name: v_param_name. Parameter Value:
2279 -- v_param_value. Attribute Name: v_attr_name.
2280 ------------------------------------------------------------------
2281
2282 FEM_ENGINES_PKG.Tech_Message
2283 (p_severity => pc_log_level_error,
2284 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2285 'undo_xgl_int_error_rows.xirp1',
2286 p_app_name => 'FEM',
2287 p_msg_name => 'FEM_GL_POST_024');
2288
2289 FEM_ENGINES_PKG.Put_Message
2290 (p_app_name => 'FEM',
2291 p_msg_name => 'FEM_GL_POST_024');
2292
2293 FEM_ENGINES_PKG.Tech_Message
2294 (p_severity => pc_log_level_error,
2298 p_msg_name => 'FEM_GL_POST_025',
2295 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2296 'undo_xgl_int_error_rows.xirp2',
2297 p_app_name => 'FEM',
2299 p_token1 => 'PARAMETER_NAME',
2300 p_value1 => v_param_name,
2301 p_token2 => 'PARAMETER_VALUE',
2302 p_value2 => v_param_value,
2303 p_token3 => 'ATTRIBUTE_NAME',
2304 p_value3 => v_attr_name);
2305
2306 FEM_ENGINES_PKG.Put_Message
2307 (p_app_name => 'FEM',
2308 p_msg_name => 'FEM_GL_POST_025',
2309 p_token1 => 'PARAMETER_NAME',
2310 p_value1 => v_param_name,
2311 p_token2 => 'PARAMETER_VALUE',
2312 p_value2 => v_param_value,
2313 p_token3 => 'ATTRIBUTE_NAME',
2314 p_value3 => v_attr_name);
2315
2316 x_return_status := 'E';
2317 x_msg_data := NULL;
2318 x_msg_count := 2;
2319
2320 END Undo_XGL_Interface_Error_Rows;
2321 -- ======================================================================
2322
2323
2324 /**************************************************************************
2325 -- Private Procedures
2326 **************************************************************************/
2327
2328 -- =======================================================================
2329 PROCEDURE Get_Dim_IDs IS
2330 -- =======================================================================
2331 -- Purpose
2332 -- Gets the Dimension ID for each of the dimension-based engine
2333 -- parameters and sets them in public package variables.
2334 -- History
2335 -- 11-13-03 G Hall Created
2336 -- 12-15-04 L Poon Added to log messages
2337 -- Notes
2338 -- Called by Validate_XGL_Eng_Parameters
2339 -- (and by Validate_OGL_Eng_Parameters)
2340 -- =======================================================================
2341
2342 BEGIN
2343
2344 FEM_ENGINES_PKG.Tech_Message
2345 (p_severity => pc_log_level_procedure,
2346 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2347 'get_dim_ids.begin',
2348 p_msg_text => 'BEGIN');
2349
2350 FEM_ENGINES_PKG.Tech_Message
2351 (p_severity => pc_log_level_statement,
2352 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2353 'get_dim_ids',
2354 p_msg_text => 'Get Calendar Period dimension ID');
2355
2356 SELECT dimension_id
2357 INTO pv_cal_per_dim_id
2358 FROM fem_dimensions_b
2359 WHERE dimension_varchar_label = 'CAL_PERIOD';
2360
2361 FEM_ENGINES_PKG.Tech_Message
2362 (p_severity => pc_log_level_statement,
2363 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2364 'get_dim_ids',
2365 p_msg_text => 'Get Ledger dimension ID');
2366
2367 SELECT dimension_id
2368 INTO pv_ledger_dim_id
2369 FROM fem_dimensions_b
2370 WHERE dimension_varchar_label = 'LEDGER';
2371
2372 FEM_ENGINES_PKG.Tech_Message
2373 (p_severity => pc_log_level_statement,
2374 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2375 'get_dim_ids',
2376 p_msg_text => 'Get Dataset dimension ID');
2377
2378 SELECT dimension_id
2379 INTO pv_dataset_dim_id
2380 FROM fem_dimensions_b
2381 WHERE dimension_varchar_label = 'DATASET';
2382
2383 FEM_ENGINES_PKG.Tech_Message
2384 (p_severity => pc_log_level_statement,
2385 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2386 'get_dim_ids',
2387 p_msg_text => 'Get Budget dimension ID');
2388
2389 SELECT dimension_id
2390 INTO pv_budget_dim_id
2391 FROM fem_dimensions_b
2392 WHERE dimension_varchar_label = 'BUDGET';
2393
2394 FEM_ENGINES_PKG.Tech_Message
2395 (p_severity => pc_log_level_statement,
2396 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2397 'get_dim_ids',
2398 p_msg_text => 'Get Encumbrance Type dimension ID');
2399
2400 SELECT dimension_id
2401 INTO pv_enc_type_dim_id
2402 FROM fem_dimensions_b
2403 WHERE dimension_varchar_label = 'ENCUMBRANCE_TYPE';
2404
2405 FEM_ENGINES_PKG.Tech_Message
2406 (p_severity => pc_log_level_statement,
2407 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2408 'get_dim_ids',
2409 p_msg_text => 'Get Extended Account Type dimension ID');
2410
2411 SELECT dimension_id
2412 INTO pv_ext_acct_type_dim_id
2413 FROM fem_dimensions_b
2414 WHERE dimension_varchar_label = 'EXTENDED_ACCOUNT_TYPE';
2415
2416 FEM_ENGINES_PKG.Tech_Message
2417 (p_severity => pc_log_level_statement,
2418 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2419 'get_dim_ids',
2420 p_msg_text => 'Get Natural Account dimension ID');
2421
2422 SELECT dimension_id
2423 INTO pv_nat_acct_dim_id
2424 FROM fem_dimensions_b
2425 WHERE dimension_varchar_label = 'NATURAL_ACCOUNT';
2426
2427 FEM_ENGINES_PKG.Tech_Message
2428 (p_severity => pc_log_level_procedure,
2429 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2430 'get_dim_ids.end',
2434
2431 p_msg_text => 'END');
2432
2433 EXCEPTION
2435 WHEN OTHERS THEN
2436 -- ------------------------
2437 -- Unexpected exception
2438 -- ------------------------
2439
2440 pv_sqlerrm := SQLERRM;
2441 pv_callstack := dbms_utility.format_call_stack;
2442 pv_proc_name := 'get_dim_ids';
2443
2444 RAISE;
2445
2446 END Get_Dim_IDs;
2447 -- =======================================================================
2448
2449
2450 -- =======================================================================
2451 PROCEDURE Validate_Budget IS
2452 -- =======================================================================
2453 -- Purpose
2454 -- Validates the Budget ID engine parameter
2455 -- History
2456 -- 11-13-03 G Hall Created
2457 -- 03-30-06 G Hall Bug# 5121106: Removed validation against
2458 -- BUDGET_LEDGER attribute.
2459 -- Notes
2460 -- Called by Validate_Engine_Parameters
2461 -- =======================================================================
2462
2463 v_ds_budget_id fem_datasets_attr.dim_attribute_numeric_member%TYPE;
2464 v_budget_ledger fem_budgets_attr.dim_attribute_numeric_member%TYPE;
2465
2466 BEGIN
2467
2468 FEM_ENGINES_PKG.Tech_Message
2469 (p_severity => pc_log_level_procedure,
2470 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2471 'validate_budget.begin',
2472 p_msg_text => 'BEGIN');
2473
2474 -- Validate the Budget ID engine parameter by looking up the Budget
2475 -- Display Code, and set it in a package variable.
2476
2477 BEGIN
2478
2479 SELECT budget_display_code
2480 INTO pv_budget_dsp_cd
2481 FROM fem_budgets_b
2482 WHERE budget_id = pv_budget_id
2483 AND enabled_flag = 'Y'
2484 AND personal_flag = 'N';
2485
2486 FEM_ENGINES_PKG.Tech_Message
2487 (p_severity => pc_log_level_statement,
2488 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2489 'validate_budget.pv_budget_dsp_cd',
2490 p_app_name => 'FEM',
2491 p_msg_name => 'FEM_GL_POST_204',
2492 p_token1 => 'VAR_NAME',
2493 p_value1 => 'pv_budget_dsp_cd',
2494 p_token2 => 'VAR_VAL',
2495 p_value2 => pv_budget_dsp_cd);
2496
2497 EXCEPTION
2498 WHEN NO_DATA_FOUND THEN
2499
2500 FEM_ENGINES_PKG.Tech_Message
2501 (p_severity => pc_log_level_statement,
2502 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2503 'validate_budget.ibid1.',
2504 p_msg_text => 'raising Invalid_Budget_ID');
2505
2506 RAISE Invalid_Budget_ID;
2507 END;
2508
2509 -- Look up the BUDGET_ID attribute of the Dataset
2510 -- and make sure it matches the Budget ID parameter.
2511
2512 BEGIN
2513
2514 fem_dimension_util_pkg.get_dim_attr_id_ver_id
2515 (x_err_code => pv_API_return_code,
2516 x_attr_id => pv_dim_attr_id,
2517 x_ver_id => pv_dim_attr_ver_id,
2518 p_dim_id => pv_dataset_dim_id,
2519 p_attr_label => 'BUDGET_ID');
2520
2521 IF pv_API_return_code > 0 THEN
2522
2523 FEM_ENGINES_PKG.Tech_Message
2524 (p_severity => pc_log_level_statement,
2525 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2526 'validate_budget.idsc1.',
2527 p_msg_text => 'raising Invalid_Dataset_Code');
2528
2529 RAISE Invalid_Dataset_Code;
2530
2531 END IF;
2532
2533 SELECT dim_attribute_numeric_member
2534 INTO v_ds_budget_id
2535 FROM fem_datasets_attr
2536 WHERE attribute_id = pv_dim_attr_id
2537 AND version_id = pv_dim_attr_ver_id
2538 AND dataset_code = pv_dataset_code;
2539
2540 EXCEPTION
2541 WHEN NO_DATA_FOUND THEN
2542
2543 FEM_ENGINES_PKG.Tech_Message
2544 (p_severity => pc_log_level_statement,
2545 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2546 'validate_budget.idsc2.',
2547 p_msg_text => 'raising Invalid_Dataset_Code');
2548
2549 RAISE Invalid_Dataset_Code;
2550 END;
2551
2552 IF pv_budget_id <> v_ds_budget_id THEN
2553
2554 FEM_ENGINES_PKG.Tech_Message
2555 (p_severity => pc_log_level_statement,
2556 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2557 'validate_budget.ibds1.',
2558 p_msg_text => 'raising Invalid_Budget_or_Dataset');
2559
2560 RAISE Invalid_Budget_or_Dataset;
2561
2562 END IF;
2563
2564 -- Successful completion
2565
2566 FEM_ENGINES_PKG.Tech_Message
2567 (p_severity => pc_log_level_procedure,
2568 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2569 'validate_budget.end',
2570 p_msg_text => 'END');
2571
2572 EXCEPTION
2573
2574 WHEN OTHERS THEN
2575
2576 -- In case it's an unexpected exception
2580
2577
2578 pv_sqlerrm := SQLERRM;
2579 pv_callstack := dbms_utility.format_call_stack;
2581 -- For all exceptions:
2582
2583 pv_proc_name := 'validate_budget';
2584
2585 RAISE;
2586
2587 END Validate_Budget;
2588 -- =======================================================================
2589
2590
2591 -- =======================================================================
2592 PROCEDURE Validate_Cal_Period IS
2593 -- =======================================================================
2594 -- Purpose
2595 -- Validates the Cal Period ID engine parameter and looks up and sets
2596 -- the period-related package variables.
2597 -- History
2598 -- 11-13-03 G Hall Created
2599 -- 05-28-04 G Hall Bug# 3659504: Updated Cal_Period_ID validation logic
2600 -- as required by change in Ledger attribute for Ledger
2601 -- Cal Period hierarchy.
2602 -- 07/07/05 G Hall Bug# 4395891: Updated validation logic to only require
2603 -- that the CAL_PERIOD_ID belong to the same Calendar as
2604 -- the Ledger hierarchy, but does not need to be a node
2605 -- in that hierarchy.
2606 -- Notes
2607 -- Called by Validate_Engine_Parameters
2608 -- =======================================================================
2609
2610 v_cal_per_dim_group_id fem_cal_periods_b.dimension_group_id%TYPE;
2611 v_cp_exists_in_hier VARCHAR2(1);
2612
2613 BEGIN
2614
2615 FEM_ENGINES_PKG.Tech_Message
2616 (p_severity => pc_log_level_procedure,
2617 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2618 'validate_cal_period.begin',
2619 p_msg_text => 'BEGIN');
2620
2621 BEGIN
2622
2623 -- Get the Cal Period Calendar ID and the Cal Period Dimension Group
2624 -- Display Code, and set the former into a package variable.
2625
2626 SELECT calendar_id, dimension_group_id
2627 INTO pv_cal_per_calendar_id, v_cal_per_dim_group_id
2628 FROM fem_cal_periods_b
2629 WHERE cal_period_id = pv_cal_period_id
2630 AND enabled_flag = 'Y'
2631 AND personal_flag = 'N';
2632
2633 FEM_ENGINES_PKG.Tech_Message
2634 (p_severity => pc_log_level_statement,
2635 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2636 'validate_cal_period.pv_cal_per_calendar_id',
2637 p_app_name => 'FEM',
2638 p_msg_name => 'FEM_GL_POST_204',
2639 p_token1 => 'VAR_NAME',
2640 p_value1 => 'pv_cal_per_calendar_id',
2641 p_token2 => 'VAR_VAL',
2642 p_value2 => TO_CHAR(pv_cal_per_calendar_id));
2643
2644 SELECT dimension_group_display_code
2645 INTO pv_cal_per_dim_grp_dsp_cd
2646 FROM fem_dimension_grps_b
2647 WHERE dimension_group_id = v_cal_per_dim_group_id;
2648
2649 FEM_ENGINES_PKG.Tech_Message
2650 (p_severity => pc_log_level_statement,
2651 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2652 'validate_cal_period.pv_cal_per_dim_grp_dsp_cd',
2653 p_app_name => 'FEM',
2654 p_msg_name => 'FEM_GL_POST_204',
2655 p_token1 => 'VAR_NAME',
2656 p_value1 => 'pv_cal_per_dim_grp_dsp_cd',
2657 p_token2 => 'VAR_VAL',
2658 p_value2 => pv_cal_per_dim_grp_dsp_cd);
2659
2660 EXCEPTION
2661 WHEN NO_DATA_FOUND THEN
2662
2663 FEM_ENGINES_PKG.Tech_Message
2664 (p_severity => pc_log_level_statement,
2665 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2666 'validate_cal_period.icpid1.',
2667 p_msg_text => 'raising Invalid_Cal_Period_ID');
2668
2669 RAISE Invalid_Cal_Period_ID;
2670 END;
2671
2672 -- Compare the Cal Period Calendar ID and the Ledger Calendar ID.
2673
2674 IF pv_cal_per_calendar_id <> pv_ledger_calendar_id THEN
2675
2676 FEM_ENGINES_PKG.Tech_Message
2677 (p_severity => pc_log_level_statement,
2678 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2679 'validate_cal_period.lcneqpc.',
2680 p_msg_text => 'raising Ledger_Cal_NEQ_Period_Cal');
2681
2682 RAISE Ledger_Cal_NEQ_Period_Cal;
2683
2684 END IF;
2685
2686 BEGIN
2687
2688 -- Retrieve the CAL_PERIOD_END_DATE attribute of the Cal Period ID
2689 -- and set it into a package variable.
2690
2691 fem_dimension_util_pkg.get_dim_attr_id_ver_id
2692 (x_err_code => pv_API_return_code,
2693 x_attr_id => pv_dim_attr_id,
2694 x_ver_id => pv_dim_attr_ver_id,
2695 p_dim_id => pv_cal_per_dim_id,
2696 p_attr_label => 'CAL_PERIOD_END_DATE');
2697
2698 IF pv_API_return_code > 0 THEN
2699
2700 FEM_ENGINES_PKG.Tech_Message
2701 (p_severity => pc_log_level_statement,
2702 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2703 'validate_cal_period.icpid2.',
2704 p_msg_text => 'raising Invalid_Cal_Period_ID');
2705
2706 RAISE Invalid_Cal_Period_ID;
2707
2708 END IF;
2712 FROM fem_cal_periods_attr
2709
2710 SELECT date_assign_value
2711 INTO pv_cal_per_end_date
2713 WHERE attribute_id = pv_dim_attr_id
2714 AND version_id = pv_dim_attr_ver_id
2715 AND cal_period_id = pv_cal_period_id;
2716
2717 FEM_ENGINES_PKG.Tech_Message
2718 (p_severity => pc_log_level_statement,
2719 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2720 'validate_cal_period.pv_cal_per_end_date',
2721 p_app_name => 'FEM',
2722 p_msg_name => 'FEM_GL_POST_204',
2723 p_token1 => 'VAR_NAME',
2724 p_value1 => 'pv_cal_per_end_date',
2725 p_token2 => 'VAR_VAL',
2726 p_value2 => TO_CHAR(pv_cal_per_end_date, 'DD-MON-YYYY'));
2727
2728 EXCEPTION
2729 WHEN NO_DATA_FOUND THEN
2730
2731 FEM_ENGINES_PKG.Tech_Message
2732 (p_severity => pc_log_level_statement,
2733 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2734 'validate_cal_period.icpid3.',
2735 p_msg_text => 'raising Invalid_Cal_Period_ID');
2736
2737 RAISE Invalid_Cal_Period_ID;
2738 END;
2739
2740 BEGIN
2741
2742 -- Get the Calendar Period Number from the GL_PERIOD_NUM attribute of the
2743 -- Cal Period ID and set it into a package variable.
2744
2745 fem_dimension_util_pkg.get_dim_attr_id_ver_id
2746 (x_err_code => pv_API_return_code,
2747 x_attr_id => pv_dim_attr_id,
2748 x_ver_id => pv_dim_attr_ver_id,
2749 p_dim_id => pv_cal_per_dim_id,
2750 p_attr_label => 'GL_PERIOD_NUM');
2751
2752 IF pv_API_return_code > 0 THEN
2753
2754 FEM_ENGINES_PKG.Tech_Message
2755 (p_severity => pc_log_level_statement,
2756 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2757 'validate_cal_period.icpid4.',
2758 p_msg_text => 'raising Invalid_Cal_Period_ID');
2759
2760 RAISE Invalid_Cal_Period_ID;
2761
2762 END IF;
2763
2764 SELECT number_assign_value
2765 INTO pv_gl_per_number
2766 FROM fem_cal_periods_attr
2767 WHERE attribute_id = pv_dim_attr_id
2768 AND version_id = pv_dim_attr_ver_id
2769 AND cal_period_id = pv_cal_period_id;
2770
2771 FEM_ENGINES_PKG.Tech_Message
2772 (p_severity => pc_log_level_statement,
2773 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2774 'validate_cal_period.pv_gl_per_number',
2775 p_app_name => 'FEM',
2776 p_msg_name => 'FEM_GL_POST_204',
2777 p_token1 => 'VAR_NAME',
2778 p_value1 => 'pv_gl_per_number',
2779 p_token2 => 'VAR_VAL',
2780 p_value2 => TO_CHAR(pv_gl_per_number));
2781
2782 EXCEPTION
2783 WHEN NO_DATA_FOUND THEN
2784
2785 FEM_ENGINES_PKG.Tech_Message
2786 (p_severity => pc_log_level_statement,
2787 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2788 'validate_cal_period.icpid5.',
2789 p_msg_text => 'raising Invalid_Cal_Period_ID');
2790
2791 RAISE Invalid_Cal_Period_ID;
2792 END;
2793
2794 -- Successful completion
2795
2796 FEM_ENGINES_PKG.Tech_Message
2797 (p_severity => pc_log_level_procedure,
2798 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2799 'validate_cal_period.end',
2800 p_msg_text => 'END');
2801
2802 EXCEPTION
2803
2804 WHEN OTHERS THEN
2805 -- In case it's an unexpected exception
2806
2807 pv_sqlerrm := SQLERRM;
2808 pv_callstack := dbms_utility.format_call_stack;
2809
2810 -- For all exceptions:
2811
2812 pv_proc_name := 'validate_cal_period';
2813
2814 RAISE;
2815
2816 END Validate_Cal_Period;
2817 -- =======================================================================
2818
2819
2820 -- =======================================================================
2821 PROCEDURE Validate_Dataset IS
2822 -- =======================================================================
2823 -- Purpose
2824 -- Validates the Dataset Code engine parameter.
2825 -- History
2826 -- 11-13-03 G Hall Created
2827 -- Notes
2828 -- Called by Validate_Engine_Parameters
2829 -- =======================================================================
2830
2831 v_rowcount PLS_INTEGER;
2832
2833 BEGIN
2834
2835 FEM_ENGINES_PKG.Tech_Message
2836 (p_severity => pc_log_level_procedure,
2837 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2838 'validate_dataset.begin',
2839 p_msg_text => 'BEGIN');
2840
2841
2842 -- Validate the Dataset Code engine parameter.
2843
2844 SELECT COUNT(*)
2845 INTO v_rowcount
2846 FROM fem_datasets_b
2847 WHERE dataset_code = pv_dataset_code
2848 AND enabled_flag = 'Y'
2849 AND personal_flag = 'N';
2850
2851 IF v_rowcount <> 1 THEN
2852
2856 'validate_dataset.idsc7.',
2853 FEM_ENGINES_PKG.Tech_Message
2854 (p_severity => pc_log_level_statement,
2855 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2857 p_msg_text => 'raising Invalid_Dataset_Code');
2858
2859 RAISE Invalid_Dataset_Code;
2860
2861 END IF;
2862
2863 -- Look up the Dataset Code DATASET_BALANCE_TYPE_CODE attribute
2864
2865 BEGIN
2866
2867 fem_dimension_util_pkg.get_dim_attr_id_ver_id
2868 (x_err_code => pv_API_return_code,
2869 x_attr_id => pv_dim_attr_id,
2870 x_ver_id => pv_dim_attr_ver_id,
2871 p_dim_id => pv_dataset_dim_id,
2872 p_attr_label => 'DATASET_BALANCE_TYPE_CODE');
2873
2874 IF pv_API_return_code > 0 THEN
2875
2876 FEM_ENGINES_PKG.Tech_Message
2877 (p_severity => pc_log_level_statement,
2878 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2879 'validate_dataset.idsc8.',
2880 p_msg_text => 'raising Invalid_Dataset_Code');
2881
2882 RAISE Invalid_Dataset_Code;
2883
2884 END IF;
2885
2886 SELECT dim_attribute_varchar_member
2887 INTO pv_ds_balance_type_cd
2888 FROM fem_datasets_attr
2889 WHERE attribute_id = pv_dim_attr_id
2890 AND version_id = pv_dim_attr_ver_id
2891 AND dataset_code = pv_dataset_code;
2892
2893 FEM_ENGINES_PKG.Tech_Message
2894 (p_severity => pc_log_level_statement,
2895 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2896 'validate_dataset.pv_ds_balance_type_cd',
2897 p_app_name => 'FEM',
2898 p_msg_name => 'FEM_GL_POST_204',
2899 p_token1 => 'VAR_NAME',
2900 p_value1 => 'pv_ds_balance_type_cd',
2901 p_token2 => 'VAR_VAL',
2902 p_value2 => pv_ds_balance_type_cd);
2903
2904 EXCEPTION
2905 WHEN NO_DATA_FOUND THEN
2906
2907 FEM_ENGINES_PKG.Tech_Message
2908 (p_severity => pc_log_level_statement,
2909 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2910 'validate_dataset.idsc9.',
2911 p_msg_text => 'raising Invalid_Dataset_Code');
2912
2913 RAISE Invalid_Dataset_Code;
2914 END;
2915
2916 -- Successful completion
2917
2918 FEM_ENGINES_PKG.Tech_Message
2919 (p_severity => pc_log_level_procedure,
2920 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2921 'validate_dataset.end',
2922 p_msg_text => 'END');
2923
2924 EXCEPTION
2925
2926 WHEN OTHERS THEN
2927
2928 -- In case it's an unexpected exception
2929
2930 pv_sqlerrm := SQLERRM;
2931 pv_callstack := dbms_utility.format_call_stack;
2932
2933 -- For all exceptions:
2934
2935 pv_proc_name := 'validate_dataset';
2936
2937 RAISE;
2938
2939 END Validate_Dataset;
2940 -- =======================================================================
2941
2942
2943 -- =======================================================================
2944 PROCEDURE Validate_DS_Bal_Type IS
2945 -- =======================================================================
2946 -- Purpose
2947 -- Validates that the Dataset Balance Type has not already been run
2948 -- for a different dataset for the current ledger and period.
2949 -- History
2950 -- 07-19-05 G Hall Created
2951 -- 03-30-06 G Hall Bug# 5121111: Added specific validations for
2952 -- Budget and Encumbrance.
2953 -- Notes
2954 -- Called by Validate_Engine_Parameters
2955 -- =======================================================================
2956
2957 BEGIN
2958
2959 FEM_ENGINES_PKG.Tech_Message
2960 (p_severity => pc_log_level_procedure,
2961 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
2962 'validate_ds_bal_type.begin',
2963 p_msg_text => 'BEGIN');
2964
2965 IF pv_ds_balance_type_cd = 'ACTUAL' THEN
2966
2967 SELECT MAX(r.output_dataset_code)
2968 INTO pv_precedent_dataset_code
2969 FROM fem_pl_requests r,
2970 fem_pl_object_executions x,
2971 fem_object_catalog_b o
2972 WHERE r.ledger_id = pv_ledger_id
2973 AND r.cal_period_id = pv_cal_period_id
2974 AND r.output_dataset_code <> pv_dataset_code
2975 AND r.exec_mode_code = 'S'
2976 AND r.exec_status_code = 'SUCCESS'
2977 AND x.request_id = r.request_id
2978 AND o.object_id = x.object_id
2979 AND o.object_type_code = 'XGL_INTEGRATION'
2980 AND 'ACTUAL' =
2981 (SELECT DIM_ATTRIBUTE_VARCHAR_MEMBER
2982 FROM fem_datasets_attr
2983 WHERE dataset_code = r.output_dataset_code
2984 AND (attribute_id, version_id) =
2985 (SELECT a.attribute_id, v.version_id
2986 FROM fem_dim_attributes_b a,
2987 fem_dim_attr_versions_b v
2988 WHERE a.attribute_varchar_label = 'DATASET_BALANCE_TYPE_CODE'
2992 ELSIF pv_ds_balance_type_cd = 'BUDGET' THEN
2989 AND v.attribute_id = a.attribute_id
2990 and v.default_version_flag = 'Y'));
2991
2993
2994 SELECT MAX(r.output_dataset_code)
2995 INTO pv_precedent_dataset_code
2996 FROM fem_pl_requests r,
2997 fem_pl_object_executions x,
2998 fem_object_catalog_b o
2999 WHERE r.ledger_id = pv_ledger_id
3000 AND r.cal_period_id = pv_cal_period_id
3001 AND r.output_dataset_code <> pv_dataset_code
3002 AND r.exec_mode_code = 'S'
3003 AND r.exec_status_code = 'SUCCESS'
3004 AND x.request_id = r.request_id
3005 AND o.object_id = x.object_id
3006 AND o.object_type_code = 'XGL_INTEGRATION'
3007 AND pv_budget_id =
3008 (SELECT DIM_ATTRIBUTE_NUMERIC_MEMBER
3009 FROM fem_datasets_attr
3010 WHERE dataset_code = r.output_dataset_code
3011 AND (attribute_id, version_id) =
3012 (SELECT a.attribute_id, v.version_id
3013 FROM fem_dim_attributes_b a,
3014 fem_dim_attr_versions_b v
3015 WHERE a.attribute_varchar_label = 'BUDGET_ID'
3016 AND v.attribute_id = a.attribute_id
3017 and v.default_version_flag = 'Y'));
3018
3019 ELSIF pv_ds_balance_type_cd = 'ENCUMBRANCE' THEN
3020
3021 SELECT MAX(r.output_dataset_code)
3022 INTO pv_precedent_dataset_code
3023 FROM fem_pl_requests r,
3024 fem_pl_object_executions x,
3025 fem_object_catalog_b o
3026 WHERE r.ledger_id = pv_ledger_id
3027 AND r.cal_period_id = pv_cal_period_id
3028 AND r.output_dataset_code <> pv_dataset_code
3029 AND r.exec_mode_code = 'S'
3030 AND r.exec_status_code = 'SUCCESS'
3031 AND x.request_id = r.request_id
3032 AND o.object_id = x.object_id
3033 AND o.object_type_code = 'XGL_INTEGRATION'
3034 AND pv_enc_type_id =
3035 (SELECT DIM_ATTRIBUTE_NUMERIC_MEMBER
3036 FROM fem_datasets_attr
3037 WHERE dataset_code = r.output_dataset_code
3038 AND (attribute_id, version_id) =
3039 (SELECT a.attribute_id, v.version_id
3040 FROM fem_dim_attributes_b a,
3041 fem_dim_attr_versions_b v
3042 WHERE a.attribute_varchar_label = 'ENCUMBRANCE_TYPE_ID'
3043 AND v.attribute_id = a.attribute_id
3044 and v.default_version_flag = 'Y'));
3045
3046 END IF;
3047
3048 IF pv_precedent_dataset_code > 0 THEN
3049
3050 FEM_ENGINES_PKG.Tech_Message
3051 (p_severity => pc_log_level_statement,
3052 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3053 'validate_ds_bal_type.idsbt.',
3054 p_msg_text => 'raising Invalid_DS_Bal_Type');
3055
3056 RAISE Invalid_DS_Bal_Type;
3057
3058 END IF;
3059
3060 -- Successful completion
3061
3062 FEM_ENGINES_PKG.Tech_Message
3063 (p_severity => pc_log_level_procedure,
3064 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3065 'validate_ds_bal_type.end',
3066 p_msg_text => 'END');
3067
3068 EXCEPTION
3069
3070 WHEN OTHERS THEN
3071
3072 -- In case it's an unexpected exception
3073
3074 pv_sqlerrm := SQLERRM;
3075 pv_callstack := dbms_utility.format_call_stack;
3076
3077 -- For all exceptions:
3078
3079 pv_proc_name := 'validate_ds_bal_type';
3080
3081 RAISE;
3082
3083 END Validate_DS_Bal_Type;
3084 -- =======================================================================
3085
3086
3087 -- =======================================================================
3088 PROCEDURE Validate_Encumbrance_Type IS
3089 -- =======================================================================
3090 -- Purpose
3091 -- Validates the Encumbrance Type ID engine parameter
3092 -- History
3093 -- 11-13-03 G Hall Created
3094 -- Notes
3095 -- Called by Validate_Engine_Parameters
3096 -- =======================================================================
3097
3098 v_ds_enc_type_id fem_datasets_attr.dim_attribute_numeric_member%TYPE;
3099
3100 BEGIN
3101
3102 FEM_ENGINES_PKG.Tech_Message
3103 (p_severity => pc_log_level_procedure,
3104 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3105 'validate_encumbrance_type.begin',
3106 p_msg_text => 'BEGIN');
3107
3108 -- Validate the Encumbrance Type ID engine parameter by looking up
3109 -- the Encumbrance Type [Display] Code, and set it in a package
3110 -- variable.
3111
3112 BEGIN
3113
3114 SELECT encumbrance_type_code
3115 INTO pv_enc_type_dsp_cd
3116 FROM fem_encumbrance_types_b
3117 WHERE encumbrance_type_id = pv_enc_type_id
3118 AND enabled_flag = 'Y'
3119 AND personal_flag = 'N';
3120
3121 FEM_ENGINES_PKG.Tech_Message
3122 (p_severity => pc_log_level_statement,
3126 p_msg_name => 'FEM_GL_POST_204',
3123 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3124 'validate_encumbrance_type.pv_enc_type_dsp_cd',
3125 p_app_name => 'FEM',
3127 p_token1 => 'VAR_NAME',
3128 p_value1 => 'pv_enc_type_dsp_cd',
3129 p_token2 => 'VAR_VAL',
3130 p_value2 => pv_enc_type_dsp_cd);
3131
3132 EXCEPTION
3133 WHEN NO_DATA_FOUND THEN
3134
3135 FEM_ENGINES_PKG.Tech_Message
3136 (p_severity => pc_log_level_statement,
3137 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3138 'validate_encumbrance_type.ietid1.',
3139 p_msg_text => 'raising Invalid_Enc_Type_ID');
3140
3141 RAISE Invalid_Enc_Type_ID;
3142
3143 END;
3144
3145 -- Look up the DATASET_ENCUMBRANCE_TYPE_ID attribute of the Dataset
3146 -- and make sure it matches the Encumbrance Type ID parameter.
3147
3148 BEGIN
3149
3150 fem_dimension_util_pkg.get_dim_attr_id_ver_id
3151 (x_err_code => pv_API_return_code,
3152 x_attr_id => pv_dim_attr_id,
3153 x_ver_id => pv_dim_attr_ver_id,
3154 p_dim_id => pv_dataset_dim_id,
3155 p_attr_label => 'ENCUMBRANCE_TYPE_ID');
3156
3157 IF pv_API_return_code > 0 THEN
3158
3159 FEM_ENGINES_PKG.Tech_Message
3160 (p_severity => pc_log_level_statement,
3161 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3162 'validate_encumbrance_type.idsc3.',
3163 p_msg_text => 'raising Invalid_Dataset_Code');
3164
3165 RAISE Invalid_Dataset_Code;
3166
3167 END IF;
3168
3169 SELECT dim_attribute_numeric_member
3170 INTO v_ds_enc_type_id
3171 FROM fem_datasets_attr
3172 WHERE attribute_id = pv_dim_attr_id
3173 AND version_id = pv_dim_attr_ver_id
3174 AND dataset_code = pv_dataset_code;
3175
3176 EXCEPTION
3177 WHEN NO_DATA_FOUND THEN
3178
3179 FEM_ENGINES_PKG.Tech_Message
3180 (p_severity => pc_log_level_statement,
3181 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3182 'validate_encumbrance_type.idsc4.',
3183 p_msg_text => 'raising Invalid_Dataset_Code');
3184
3185 RAISE Invalid_Dataset_Code;
3186 END;
3187
3188 IF pv_enc_type_id <> v_ds_enc_type_id THEN
3189
3190 FEM_ENGINES_PKG.Tech_Message
3191 (p_severity => pc_log_level_statement,
3192 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3193 'validate_encumbrance_type.ieds1.',
3194 p_msg_text => 'raising Invalid_Enc_or_Dataset');
3195
3196 RAISE Invalid_Enc_or_Dataset;
3197
3198 END IF;
3199
3200 -- Successful completion
3201
3202 FEM_ENGINES_PKG.Tech_Message
3203 (p_severity => pc_log_level_procedure,
3204 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3205 'validate_encumbrance_type.end',
3206 p_msg_text => 'END');
3207
3208 EXCEPTION
3209
3210 WHEN OTHERS THEN
3211
3212 -- In case it's an unexpected exception
3213
3214 pv_sqlerrm := SQLERRM;
3215 pv_callstack := dbms_utility.format_call_stack;
3216
3217 -- For all exceptions:
3218
3219 pv_proc_name := 'validate_encumbrance_type';
3220
3221 RAISE;
3222
3223 END Validate_Encumbrance_Type;
3224 -- =======================================================================
3225
3226
3227 -- =======================================================================
3228 PROCEDURE Validate_Ledger IS
3229 -- =======================================================================
3230 -- Purpose
3231 -- Validate the Ledger ID engine parameter. Look up the Calendar ID
3232 -- assigned to it for comparison with the Calendar ID for the period.
3233 -- History
3234 -- 11-13-03 G Hall Created
3235 -- 01-26-04 G Hall Added Entered Currency Enable Flag ledger
3236 -- attribute lookup.
3237 -- 05-28-04 G Hall Bug# 3659504: Updated Cal_Period_ID validation logic
3238 -- as required by change in Ledger attribute for Ledger
3239 -- Cal Period hierarchy.
3240 -- 11-16-04 L POON Add changes for FEM-OGL Integration Project
3241 -- Notes
3242 -- Called by Validate_Engine_Parameters
3243 -- =======================================================================
3244
3245 BEGIN
3246
3247 FEM_ENGINES_PKG.Tech_Message
3248 (p_severity => pc_log_level_procedure,
3249 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3250 'validate_ledger.begin',
3251 p_msg_text => 'BEGIN');
3252
3253 BEGIN
3254
3255 -- Validate the Ledger ID engine parameter by looking up the Ledger
3256 -- Display Code, and set it in a package variable.
3257
3258 SELECT ledger_display_code
3259 INTO pv_ledger_dsp_cd
3260 FROM fem_ledgers_b
3261 WHERE ledger_id = pv_ledger_id
3262 AND enabled_flag = 'Y'
3266 (p_severity => pc_log_level_statement,
3263 AND personal_flag = 'N';
3264
3265 FEM_ENGINES_PKG.Tech_Message
3267 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3268 'validate_ledger.pv_ledger_dsp_cd',
3269 p_app_name => 'FEM',
3270 p_msg_name => 'FEM_GL_POST_204',
3271 p_token1 => 'VAR_NAME',
3272 p_value1 => 'pv_ledger_dsp_cd',
3273 p_token2 => 'VAR_VAL',
3274 p_value2 => pv_ledger_dsp_cd);
3275
3276 EXCEPTION
3277 WHEN NO_DATA_FOUND THEN
3278
3279 FEM_ENGINES_PKG.Tech_Message
3280 (p_severity => pc_log_level_statement,
3281 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3282 'validate_ledger.ilid1.',
3283 p_msg_text => 'raising Invalid_Ledger_ID');
3284
3285 RAISE Invalid_Ledger_ID;
3286 END;
3287
3288 BEGIN
3289
3290 -- Get the Entered Currency Enable Flag attribute of the Ledger ID and store
3291 -- it as a package variable.
3292
3293 fem_dimension_util_pkg.get_dim_attr_id_ver_id
3294 (x_err_code => pv_API_return_code,
3295 x_attr_id => pv_dim_attr_id,
3296 x_ver_id => pv_dim_attr_ver_id,
3297 p_dim_id => pv_ledger_dim_id,
3298 p_attr_label => 'ENTERED_CRNCY_ENABLE_FLAG');
3299
3300 IF pv_API_return_code > 0 THEN
3301
3302 FEM_ENGINES_PKG.Tech_Message
3303 (p_severity => pc_log_level_statement,
3304 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3305 'validate_ledger.ilid7.',
3306 p_msg_text => 'raising Invalid_Ledger_ID');
3307
3308 pv_attr_label := 'ENTERED_CRNCY_ENABLE_FLAG';
3309
3310 RAISE Invalid_Ledger_ID;
3311
3312 END IF;
3313
3314 SELECT dim_attribute_varchar_member
3315 INTO pv_entered_crncy_flag
3316 FROM fem_ledgers_attr
3317 WHERE attribute_id = pv_dim_attr_id
3318 AND version_id = pv_dim_attr_ver_id
3319 AND ledger_id = pv_ledger_id;
3320
3321 FEM_ENGINES_PKG.Tech_Message
3322 (p_severity => pc_log_level_statement,
3323 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3324 'validate_ledger.pv_entered_crncy_flag',
3325 p_app_name => 'FEM',
3326 p_msg_name => 'FEM_GL_POST_204',
3327 p_token1 => 'VAR_NAME',
3328 p_value1 => 'pv_entered_crncy_flag',
3329 p_token2 => 'VAR_VAL',
3330 p_value2 => pv_entered_crncy_flag);
3331
3332 EXCEPTION
3333 WHEN NO_DATA_FOUND THEN
3334
3335 FEM_ENGINES_PKG.Tech_Message
3336 (p_severity => pc_log_level_statement,
3337 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3338 'validate_ledger.ilid8.',
3339 p_msg_text => 'raising Invalid_Ledger_ID');
3340
3341 pv_attr_label := 'ENTERED_CRNCY_ENABLE_FLAG';
3342
3343 RAISE Invalid_Ledger_ID;
3344 END;
3345
3346 BEGIN
3347
3348 -- Get the Hierarchy Object Definition ID of the Time hierarchy assigned
3349 -- to the given ledger. It is stored as a row-based ledger attribute.
3350
3351 fem_dimension_util_pkg.get_dim_attr_id_ver_id
3352 (x_err_code => pv_API_return_code,
3353 x_attr_id => pv_dim_attr_id,
3354 x_ver_id => pv_dim_attr_ver_id,
3355 p_dim_id => pv_ledger_dim_id,
3356 p_attr_label => 'CAL_PERIOD_HIER_OBJ_DEF_ID');
3357
3358 IF pv_API_return_code> 0 THEN
3359
3360 FEM_ENGINES_PKG.Tech_Message
3361 (p_severity => pc_log_level_statement,
3362 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3363 'validate_ledger.ilid4.',
3364 p_msg_text => 'raising Invalid_Ledger_ID');
3365
3366 pv_attr_label := 'CAL_PERIOD_HIER_OBJ_DEF_ID';
3367
3368 RAISE Invalid_Ledger_ID;
3369
3370 END IF;
3371
3372 SELECT dim_attribute_numeric_member
3373 INTO pv_ledger_per_hier_obj_def_id
3374 FROM fem_ledgers_attr
3375 WHERE attribute_id = pv_dim_attr_id
3376 AND version_id = pv_dim_attr_ver_id
3377 AND ledger_id = pv_ledger_id;
3378
3379 FEM_ENGINES_PKG.Tech_Message
3380 (p_severity => pc_log_level_statement,
3381 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3382 'validate_ledger.pv_lph_odid',
3383 p_app_name => 'FEM',
3384 p_msg_name => 'FEM_GL_POST_204',
3385 p_token1 => 'VAR_NAME',
3386 p_value1 => 'pv_ledger_per_hier_obj_def_id',
3387 p_token2 => 'VAR_VAL',
3388 p_value2 => pv_ledger_per_hier_obj_def_id);
3389
3390 SELECT object_id
3391 INTO pv_ledger_per_hier_obj_id
3392 FROM fem_object_definition_b
3393 WHERE object_definition_id = pv_ledger_per_hier_obj_def_id;
3394
3395 FEM_ENGINES_PKG.Tech_Message
3396 (p_severity => pc_log_level_statement,
3397 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3401 p_token1 => 'VAR_NAME',
3398 'validate_ledger.pv_lph_oid',
3399 p_app_name => 'FEM',
3400 p_msg_name => 'FEM_GL_POST_204',
3402 p_value1 => 'pv_ledger_per_hier_obj_id',
3403 p_token2 => 'VAR_VAL',
3404 p_value2 => pv_ledger_per_hier_obj_id);
3405
3406 EXCEPTION
3407 WHEN NO_DATA_FOUND THEN
3408
3409 FEM_ENGINES_PKG.Tech_Message
3410 (p_severity => pc_log_level_statement,
3411 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3412 'validate_ledger.ilid5.',
3413 p_msg_text => 'raising Invalid_Ledger_ID');
3414
3415 pv_attr_label := 'CAL_PERIOD_HIER_OBJ_DEF_ID';
3416
3417 RAISE Invalid_Ledger_ID;
3418 END;
3419
3420 BEGIN
3421
3422 -- Look up the Calendar ID for that hierarchy.
3423
3424 SELECT calendar_id
3425 INTO pv_ledger_calendar_id
3426 FROM fem_hierarchies
3427 WHERE hierarchy_obj_id = pv_ledger_per_hier_obj_id;
3428
3429 FEM_ENGINES_PKG.Tech_Message
3430 (p_severity => pc_log_level_statement,
3431 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3432 'validate_ledger.pv_ledger_calendar_id',
3433 p_app_name => 'FEM',
3434 p_msg_name => 'FEM_GL_POST_204',
3435 p_token1 => 'VAR_NAME',
3436 p_value1 => 'pv_ledger_calendar_id',
3437 p_token2 => 'VAR_VAL',
3438 p_value2 => TO_CHAR(pv_ledger_calendar_id));
3439
3440 EXCEPTION
3441 WHEN NO_DATA_FOUND THEN
3442
3443 FEM_ENGINES_PKG.Tech_Message
3444 (p_severity => pc_log_level_statement,
3445 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3446 'validate_ledger.ilid6.',
3447 p_msg_text => 'raising Invalid_Ledger_ID');
3448
3449 pv_attr_label := 'CAL_PERIOD_HIER_OBJ_DEF_ID';
3450
3451 RAISE Invalid_Ledger_ID;
3452 END;
3453
3454
3455 BEGIN
3456
3457 -- FEM-OGL Intg: Added to get the Ledger Functional Currency Code
3458 -- attribute of the Ledger ID and store it as a package variable.
3459
3460 fem_dimension_util_pkg.get_dim_attr_id_ver_id
3461 (x_err_code => pv_API_return_code,
3462 x_attr_id => pv_dim_attr_id,
3463 x_ver_id => pv_dim_attr_ver_id,
3464 p_dim_id => pv_ledger_dim_id,
3465 p_attr_label => 'LEDGER_FUNCTIONAL_CRNCY_CODE');
3466
3467 IF pv_API_return_code > 0 THEN
3468
3469 FEM_ENGINES_PKG.Tech_Message
3470 (p_severity => pc_log_level_statement,
3471 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3472 'validate_ledger.ilid9.',
3473 p_msg_text => 'raising Invalid_Ledger_ID');
3474
3475 pv_attr_label := 'LEDGER_FUNCTIONAL_CRNCY_CODE';
3476
3477 RAISE Invalid_Ledger_ID;
3478
3479 END IF;
3480
3481 SELECT dim_attribute_varchar_member
3482 INTO pv_func_ccy_code
3483 FROM fem_ledgers_attr
3484 WHERE attribute_id = pv_dim_attr_id
3485 AND version_id = pv_dim_attr_ver_id
3486 AND ledger_id = pv_ledger_id;
3487
3488 FEM_ENGINES_PKG.Tech_Message
3489 (p_severity => pc_log_level_statement,
3490 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3491 'validate_ledger.pv_func_ccy_code',
3492 p_app_name => 'FEM',
3493 p_msg_name => 'FEM_GL_POST_204',
3494 p_token1 => 'VAR_NAME',
3495 p_value1 => 'pv_func_ccy_code',
3496 p_token2 => 'VAR_VAL',
3497 p_value2 => pv_func_ccy_code);
3498
3499 EXCEPTION
3500 WHEN NO_DATA_FOUND THEN
3501
3502 FEM_ENGINES_PKG.Tech_Message
3503 (p_severity => pc_log_level_statement,
3504 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3505 'validate_ledger.ilid10.',
3506 p_msg_text => 'raising Invalid_Ledger_ID');
3507
3508 pv_attr_label := 'LEDGER_FUNCTIONAL_CRNCY_CODE';
3509
3510 RAISE Invalid_Ledger_ID;
3511 END;
3512
3513 BEGIN
3514
3515 -- FEM-OGL Intg: Added to get the Global Value Set Combination ID
3516 -- attribute of the Ledger ID and store it as a package variable.
3517
3518 fem_dimension_util_pkg.get_dim_attr_id_ver_id
3519 (x_err_code => pv_API_return_code,
3520 x_attr_id => pv_dim_attr_id,
3521 x_ver_id => pv_dim_attr_ver_id,
3522 p_dim_id => pv_ledger_dim_id,
3523 p_attr_label => 'GLOBAL_VS_COMBO');
3524
3525 IF pv_API_return_code > 0 THEN
3526
3527 FEM_ENGINES_PKG.Tech_Message
3528 (p_severity => pc_log_level_statement,
3529 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3530 'validate_ledger.ilid11.',
3531 p_msg_text => 'raising Invalid_Ledger_ID');
3532
3533 pv_attr_label := 'GLOBAL_VS_COMBO';
3534
3535 RAISE Invalid_Ledger_ID;
3536
3540 INTO pv_global_vs_combo_id
3537 END IF;
3538
3539 SELECT dim_attribute_numeric_member
3541 FROM fem_ledgers_attr
3542 WHERE attribute_id = pv_dim_attr_id
3543 AND version_id = pv_dim_attr_ver_id
3544 AND ledger_id = pv_ledger_id;
3545
3546 FEM_ENGINES_PKG.Tech_Message
3547 (p_severity => pc_log_level_statement,
3548 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3549 'validate_ledger.pv_global_vs_combo_id',
3550 p_app_name => 'FEM',
3551 p_msg_name => 'FEM_GL_POST_204',
3552 p_token1 => 'VAR_NAME',
3553 p_value1 => 'pv_global_vs_combo_id',
3554 p_token2 => 'VAR_VAL',
3555 p_value2 => pv_global_vs_combo_id);
3556
3557 EXCEPTION
3558 WHEN NO_DATA_FOUND THEN
3559
3560 FEM_ENGINES_PKG.Tech_Message
3561 (p_severity => pc_log_level_statement,
3562 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3563 'validate_ledger.ilid12.',
3564 p_msg_text => 'raising Invalid_Ledger_ID');
3565
3566 pv_attr_label := 'GLOBAL_VS_COMBO';
3567
3568 RAISE Invalid_Ledger_ID;
3569 END;
3570
3571 -- Successful completion
3572
3573 FEM_ENGINES_PKG.Tech_Message
3574 (p_severity => pc_log_level_procedure,
3575 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3576 'validate_ledger.end',
3577 p_msg_text => 'END');
3578
3579 EXCEPTION
3580
3581 WHEN OTHERS THEN
3582
3583 -- In case it's an unexpected exception
3584
3585 pv_sqlerrm := SQLERRM;
3586 pv_callstack := dbms_utility.format_call_stack;
3587
3588 -- For all exceptions:
3589
3590 pv_proc_name := 'validate_ledger';
3591
3592 RAISE;
3593
3594 END Validate_Ledger;
3595 -- =======================================================================
3596
3597
3598 -- =======================================================================
3599 PROCEDURE Validate_Object_Def_ID IS
3600 -- =======================================================================
3601 -- Purpose
3602 -- Validates the Object Def ID engine parameter and its Object ID
3603 -- History
3604 -- 11-13-03 G Hall Created
3605 -- 01-26-04 G Hall Added user privileges validation; added "AND
3606 -- old_approved_copy_flag = 'N'";
3607 -- 04-22-04 G Hall Bug# 3585824: Commented out user/folder security
3608 -- validation since there's no Folders Security
3609 -- UI yet.
3610 -- 11-16-04 L POON Add changes for FEM-OGL Integration Project
3611 -- Notes
3612 -- Called by Validate_Engine_Parameters
3613 -- =======================================================================
3614
3615 v_obj_approval_status_cd fem_object_definition_b.approval_status_code%TYPE;
3616 v_folder_id fem_object_catalog_b.folder_id%TYPE;
3617 v_ds_production_flag fem_datasets_attr.dim_attribute_varchar_member%TYPE;
3618 v_rowcount PLS_INTEGER;
3619
3620 BEGIN
3621
3622 FEM_ENGINES_PKG.Tech_Message
3623 (p_severity => pc_log_level_procedure,
3624 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3625 'validate_object_def_id.begin',
3626 p_msg_text => 'BEGIN');
3627
3628 -- --------------------------------------------------------------------
3629 -- Validate the Object Definition ID engine parameter by looking up the
3630 -- Object ID and set it in a package variable.
3631 -- --------------------------------------------------------------------
3632
3633 BEGIN
3634
3635 SELECT object_id, approval_status_code
3636 INTO pv_rule_obj_id, v_obj_approval_status_cd
3637 FROM fem_object_definition_b
3638 WHERE object_definition_id = pv_rule_obj_def_id
3639 AND old_approved_copy_flag = 'N';
3640
3641 FEM_ENGINES_PKG.Tech_Message
3642 (p_severity => pc_log_level_statement,
3643 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3644 'validate_object_def_id.pv_rule_obj_id',
3645 p_app_name => 'FEM',
3646 p_msg_name => 'FEM_GL_POST_204',
3647 p_token1 => 'VAR_NAME',
3648 p_value1 => 'pv_rule_obj_id',
3649 p_token2 => 'VAR_VAL',
3650 p_value2 => TO_CHAR(pv_rule_obj_id));
3651
3652 FEM_ENGINES_PKG.Tech_Message
3653 (p_severity => pc_log_level_statement,
3654 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3655 'validate_object_def_id.v_obj_approval_status_cd',
3656 p_app_name => 'FEM',
3657 p_msg_name => 'FEM_GL_POST_204',
3658 p_token1 => 'VAR_NAME',
3659 p_value1 => 'v_obj_approval_status_cd',
3660 p_token2 => 'VAR_VAL',
3661 p_value2 => v_obj_approval_status_cd);
3662
3663 EXCEPTION
3664 WHEN NO_DATA_FOUND THEN
3665
3666 FEM_ENGINES_PKG.Tech_Message
3667 (p_severity => pc_log_level_statement,
3668 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3669 'validate_object_def_id.iodid1.',
3673 END;
3670 p_msg_text => 'raising Invalid_Object_Def_ID');
3671
3672 RAISE Invalid_Object_Def_ID;
3674
3675 -- --------------------------------------------------------------------
3676 -- Get the Object Type Code and the Folder ID for the rule.
3677 -- --------------------------------------------------------------------
3678
3679 BEGIN
3680
3681 SELECT object_type_code, folder_id
3682 INTO pv_obj_type_cd, v_folder_id
3683 FROM fem_object_catalog_b
3684 WHERE object_id = pv_rule_obj_id;
3685
3686 FEM_ENGINES_PKG.Tech_Message
3687 (p_severity => pc_log_level_statement,
3688 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3689 'validate_object_def_id.pv_obj_type_cd',
3690 p_app_name => 'FEM',
3691 p_msg_name => 'FEM_GL_POST_204',
3692 p_token1 => 'VAR_NAME',
3693 p_value1 => 'pv_obj_type_cd',
3694 p_token2 => 'VAR_VAL',
3695 p_value2 => pv_obj_type_cd);
3696
3697 FEM_ENGINES_PKG.Tech_Message
3698 (p_severity => pc_log_level_statement,
3699 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3700 'validate_object_def_id.v_folder_id',
3701 p_app_name => 'FEM',
3702 p_msg_name => 'FEM_GL_POST_204',
3703 p_token1 => 'VAR_NAME',
3704 p_value1 => 'v_folder_id',
3705 p_token2 => 'VAR_VAL',
3706 p_value2 => TO_CHAR(v_folder_id));
3707
3708 EXCEPTION
3709 WHEN NO_DATA_FOUND THEN
3710
3711 FEM_ENGINES_PKG.Tech_Message
3712 (p_severity => pc_log_level_statement,
3713 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3714 'validate_object_def_id.iobj1.',
3715 p_msg_text => 'raising Invalid_Object_ID');
3716
3717 RAISE Invalid_Object_ID;
3718 END;
3719
3720 -- --------------------------------------------------------------------
3721 -- Validate that the user has privileges to execute this rule.
3722 -- Commented out per Bug# 3585824
3723 -- --------------------------------------------------------------------
3724
3725 -- FEM-OGL Intg: Folder Security is ready, so uncomment the following codes
3726 -- removed code
3727
3728 -- FEM-OGL Intg: Since workflow is not implemented for OGL, the following
3729 -- codes will be only executed for XGL for this release.
3730 IF pv_obj_type_cd = 'XGL_INTEGRATION' THEN
3731
3732 -- --------------------------------------------------------------------
3733 -- Validate that the approval status of the Object Definition is
3734 -- compatible with the Dataset's production status.
3735 -- --------------------------------------------------------------------
3736
3737 BEGIN
3738
3739 fem_dimension_util_pkg.get_dim_attr_id_ver_id
3740 (x_err_code => pv_API_return_code,
3741 x_attr_id => pv_dim_attr_id,
3742 x_ver_id => pv_dim_attr_ver_id,
3743 p_dim_id => pv_dataset_dim_id,
3744 p_attr_label => 'PRODUCTION_FLAG');
3745
3746 IF pv_API_return_code > 0 THEN
3747
3748 FEM_ENGINES_PKG.Tech_Message
3749 (p_severity => pc_log_level_statement,
3753
3750 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3751 'validate_object_def_id.idsc5.',
3752 p_msg_text => 'raising Invalid_Dataset_Code');
3754 v_ds_production_flag := 'N';
3755
3756 END IF;
3757
3758 SELECT dim_attribute_varchar_member
3759 INTO v_ds_production_flag
3760 FROM fem_datasets_attr
3761 WHERE attribute_id = pv_dim_attr_id
3762 AND version_id = pv_dim_attr_ver_id
3763 AND dataset_code = pv_dataset_code;
3764
3765 EXCEPTION
3766 WHEN NO_DATA_FOUND THEN
3767 v_ds_production_flag := 'N';
3768 END;
3769
3770 -- If the Dataset is in "Production" status, then the Object definition
3771 -- must be in "Approved" status
3772
3773 IF (v_ds_production_flag = 'Y') AND
3774 (v_obj_approval_status_cd <> 'APPROVED') THEN
3775
3776 FEM_ENGINES_PKG.Tech_Message
3777 (p_severity => pc_log_level_statement,
3778 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3779 'validate_object_def_id.ioas1.',
3780 p_msg_text => 'raising Invalid_Obj_Approval_Status');
3781
3782 RAISE Invalid_Obj_Approval_Status;
3783
3784 END IF;
3785
3786 END IF; -- IF pv_obj_type_cd = 'XGL_INTEGRATION' THEN
3787
3788 -- Successful completion
3789 FEM_ENGINES_PKG.Tech_Message
3790 (p_severity => pc_log_level_procedure,
3791 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3792 'validate_object_def_id.end',
3793 p_msg_text => 'END');
3794
3795 EXCEPTION
3796
3797 WHEN OTHERS THEN
3798
3799 -- In case it's an unexpected exception
3800
3801 pv_sqlerrm := SQLERRM;
3802 pv_callstack := dbms_utility.format_call_stack;
3803
3804 -- For all exceptions:
3805
3806 pv_proc_name := 'validate_object_def_id';
3807
3808 RAISE;
3809
3810 END Validate_Object_Def_ID;
3811 -- =======================================================================
3812
3813
3814 -- =======================================================================
3815 PROCEDURE Validate_Engine_Parameters
3816 (x_completion_code OUT NOCOPY NUMBER) IS
3817 -- =======================================================================
3818 -- Purpose
3819 -- Validates the dimension-based engine parameters that are common
3820 -- to both the XGL and the OGL engines, and sets additional package
3821 -- variables that are common to both.
3822 -- History
3823 -- 11-13-03 G Hall Created
3824 -- 01-26-04 G Hall Added pv_pgm_app_id; added validation for
3825 -- Budget ID OR Encumbrance Type, not both;
3826 -- 01-27-04 G Hall Modified call to Get_Proc_Key_Info.
3827 -- 02-16-04 G Hall Enhanced validation for Budget and Encumbrance
3828 -- parameters.
3829 -- 05-07-04 G Hall Bug# 3597527: Removed call to Get_Proc_Key_Info.
3830 -- 05-25-04 G Hall Removed Value_Set_ID_Error exception; moved it
3831 -- to Get_Proc_Key_Info and modified it for passing
3832 -- back a status and message to Main.
3833 -- 05-28-04 G Hall Bug# 3659504: Swapped order of calls to
3834 -- Validate_Cal_Period and Validate_Ledger.
3835 -- 03-30-06 G Hall Bug# 5121111: Added specific error handling to
3836 -- Invalid_DS_Bal_Type for Budget and Encumbrance.
3837 -- Arguments
3838 -- x_completion_code Returns 0 for success, 1 for warning, 2 for failure.
3839 -- Notes
3840 -- Called by Validate_XGL_Eng_Parameters
3841 -- (and by Validate_OGL_Eng_Parameters)
3842 -- =======================================================================
3843
3844 v_dim_name1 fem_dimensions_tl.dimension_name%TYPE;
3845 v_dim_name2 fem_dimensions_tl.dimension_name%TYPE;
3846 v_attr_name fem_dim_attributes_tl.attribute_name%TYPE;
3847 v_precedent_dataset_name fem_datasets_tl.dataset_name%TYPE;
3848 v_ds_balance_type_name fem_ds_balance_types_tl.ds_balance_type_name%TYPE;
3849 v_budget_name fem_budgets_tl.budget_name%TYPE;
3850 v_enc_type_name fem_encumbrance_types_tl.encumbrance_type_name%TYPE;
3851 v_ds_balance_type_string VARCHAR2(300);
3852
3853 BEGIN
3854
3855 x_completion_code := 2;
3856 pv_proc_name := 'validate_engine_parameters';
3857 pv_attr_label := NULL;
3858
3859 FEM_ENGINES_PKG.Tech_Message
3860 (p_severity => pc_log_level_procedure,
3861 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3862 'validate_engine_parameters.begin',
3863 p_msg_text => 'BEGIN');
3864
3865 --------------------------------------------------------------------------
3866 -- Validate the execution mode parameter
3867 --------------------------------------------------------------------------
3868
3869 IF pv_exec_mode NOT IN ('S', 'I', 'E') THEN
3870
3871 -- Execution mode is invalid
3872
3873 FEM_ENGINES_PKG.Tech_Message
3874 (p_severity => pc_log_level_statement,
3875 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3876 'validate_engine_parameters.iem',
3880
3877 p_msg_text => 'raising Invalid_Execution_Mode');
3878
3879 RAISE Invalid_Execution_Mode;
3881 END IF;
3882
3883 --------------------------------------------------------------------------
3884 -- Set package variables common to both XGL and OGL Posting engines
3885 -- and log debug messages to display their values.
3886 --------------------------------------------------------------------------
3887
3888 pv_req_id := FND_GLOBAL.Conc_Request_Id;
3889 pv_user_id := FND_GLOBAL.User_Id;
3890 pv_login_id := FND_GLOBAL.Login_Id;
3891 pv_pgm_id := FND_GLOBAL.Conc_Program_Id;
3892 pv_pgm_app_id := FND_GLOBAL.Prog_Appl_ID;
3893
3894 FEM_ENGINES_PKG.Tech_Message
3895 (p_severity => pc_log_level_statement,
3896 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3897 'validate_engine_parameters.pv_req_id',
3898 p_app_name => 'FEM',
3899 p_msg_name => 'FEM_GL_POST_204',
3900 p_token1 => 'VAR_NAME',
3901 p_value1 => 'pv_req_id',
3902 p_token2 => 'VAR_VAL',
3903 p_value2 => TO_CHAR(pv_req_id));
3904
3905 FEM_ENGINES_PKG.Tech_Message
3906 (p_severity => pc_log_level_statement,
3907 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3908 'validate_engine_parameters.pv_user_id',
3909 p_app_name => 'FEM',
3910 p_msg_name => 'FEM_GL_POST_204',
3911 p_token1 => 'VAR_NAME',
3912 p_value1 => 'pv_user_id',
3913 p_token2 => 'VAR_VAL',
3914 p_value2 => TO_CHAR(pv_user_id));
3915
3916 FEM_ENGINES_PKG.Tech_Message
3917 (p_severity => pc_log_level_statement,
3918 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3919 'validate_engine_parameters.pv_login_id',
3920 p_app_name => 'FEM',
3921 p_msg_name => 'FEM_GL_POST_204',
3922 p_token1 => 'VAR_NAME',
3923 p_value1 => 'pv_login_id',
3924 p_token2 => 'VAR_VAL',
3925 p_value2 => TO_CHAR(pv_login_id));
3926
3927 FEM_ENGINES_PKG.Tech_Message
3928 (p_severity => pc_log_level_statement,
3929 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3930 'validate_engine_parameters.pv_pgm_id',
3931 p_app_name => 'FEM',
3932 p_msg_name => 'FEM_GL_POST_204',
3933 p_token1 => 'VAR_NAME',
3934 p_value1 => 'pv_pgm_id',
3935 p_token2 => 'VAR_VAL',
3936 p_value2 => TO_CHAR(pv_pgm_id));
3937
3938 --------------------------------------------------------------------------
3939 -- Populate dimension ID package variables
3940 --------------------------------------------------------------------------
3941
3942 Get_Dim_IDs;
3943
3944 --------------------------------------------------------------------------
3945 -- Validate the p_dataset_code engine parameter.
3946 --------------------------------------------------------------------------
3947
3948 Validate_Dataset;
3949
3950 --------------------------------------------------------------------------
3951 -- Validate the p_xgl_obj_def_id parameter and look up and set any
3952 -- object_related package variables.
3953 --------------------------------------------------------------------------
3954
3955 Validate_Object_Def_ID;
3956
3957 --------------------------------------------------------------------------
3958 -- Validate the p_ledger_id engine parameter and look up the Calendar ID
3959 -- assigned to it for comparison with the Calendar ID for the period.
3960 --------------------------------------------------------------------------
3961
3962 Validate_Ledger;
3963
3964 --------------------------------------------------------------------------
3965 -- Validate the p_cal_period_id engine parameter and look up and set the
3966 -- period-related package variables.
3967 --------------------------------------------------------------------------
3968
3969 Validate_Cal_Period;
3970
3971 --------------------------------------------------------------------------
3972 -- Validate the Budget ID and Encumbrance Type ID engine parameters if
3973 -- applicable.
3974 --------------------------------------------------------------------------
3975
3976 IF pv_ds_balance_type_cd = 'ACTUAL' THEN
3977
3978 IF (pv_budget_id IS NOT NULL) OR
3979 (pv_enc_type_id IS NOT NULL) THEN
3980
3981 FEM_ENGINES_PKG.Tech_Message
3982 (p_severity => pc_log_level_error,
3983 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
3984 'validate_engine_parameters.budget_enc_ignored',
3985 p_app_name => 'FEM',
3986 p_msg_name => 'FEM_GL_POST_023');
3987
3988 FEM_ENGINES_PKG.User_Message
3989 (p_app_name => 'FEM',
3990 p_msg_name => 'FEM_GL_POST_023');
3991
3992 pv_budget_id := NULL;
3993 pv_enc_type_id := NULL;
3994 x_completion_code := 1;
3995
3996 END IF;
3997
3998 ELSIF pv_ds_balance_type_cd = 'BUDGET' THEN
3999
4000 Validate_Budget;
4001
4002 IF pv_enc_type_id IS NOT NULL THEN
4003
4004 FEM_ENGINES_PKG.Tech_Message
4005 (p_severity => pc_log_level_error,
4009 p_msg_name => 'FEM_GL_POST_020');
4006 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4007 'validate_engine_parameters.enc_type_ignored',
4008 p_app_name => 'FEM',
4010
4011 FEM_ENGINES_PKG.User_Message
4012 (p_app_name => 'FEM',
4013 p_msg_name => 'FEM_GL_POST_020');
4014
4015 pv_enc_type_id := NULL;
4016 x_completion_code := 1;
4017
4018 END IF;
4019
4020 ELSIF pv_ds_balance_type_cd = 'ENCUMBRANCE' THEN
4021
4022 Validate_Encumbrance_Type;
4023
4024 IF pv_budget_id IS NOT NULL THEN
4025
4026 FEM_ENGINES_PKG.Tech_Message
4027 (p_severity => pc_log_level_error,
4028 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4029 'validate_engine_parameters.budget_id_ignored',
4030 p_app_name => 'FEM',
4031 p_msg_name => 'FEM_GL_POST_021');
4032
4033 FEM_ENGINES_PKG.User_Message
4034 (p_app_name => 'FEM',
4035 p_msg_name => 'FEM_GL_POST_021');
4036
4037 pv_budget_id := NULL;
4038 x_completion_code := 1;
4039
4040 END IF;
4041
4042 END IF;
4043
4044 Validate_DS_Bal_Type;
4045
4046 --------------------------------------------------------------------------
4047 -- Successful completion
4048 --------------------------------------------------------------------------
4049
4050 IF x_completion_code <> 1 THEN
4051 x_completion_code := 0;
4052 END IF;
4053
4054 FEM_ENGINES_PKG.Tech_Message
4055 (p_severity => pc_log_level_procedure,
4056 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4057 'validate_engine_parameters.end',
4058 p_msg_text => 'END');
4059
4060 EXCEPTION
4061 ------------------------------------------------------------------
4062 -- For each exception, try to get the translated names for the
4063 -- dimensions (parameters) and dimension attributes used as
4064 -- tokens in the messages logged to FND_LOG and Concurrent
4065 -- Request Log.
4066 ------------------------------------------------------------------
4067
4068 WHEN Invalid_Budget_ID THEN
4069 ------------------------------------------------------------------
4070 -- Invalid Budget parameter: Value not found or
4071 -- Budget attribute "Budget Ledger" not set.
4072 ------------------------------------------------------------------
4073
4074 v_dim_name1 := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
4075 (p_dim_id => pv_budget_dim_id);
4076
4077 IF v_dim_name1 IS NULL THEN
4078 v_dim_name1 := 'Budget';
4079 END IF;
4080
4081 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
4082 (p_dim_id => pv_budget_dim_id,
4083 p_attr_label => 'BUDGET_LEDGER');
4084
4085 IF v_attr_name IS NULL THEN
4086 v_attr_name := 'Budget Ledger';
4087 END IF;
4088
4089 FEM_ENGINES_PKG.Tech_Message
4090 (p_severity => pc_log_level_error,
4091 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4092 pv_proc_name || '.invalid_budget_id',
4093 p_app_name => 'FEM',
4094 p_msg_name => 'FEM_GL_POST_003',
4095 p_token1 => 'DIMENSION_NAME1',
4096 p_value1 => v_dim_name1,
4097 p_token2 => 'DIMENSION_NAME2',
4098 p_value2 => v_dim_name1,
4099 p_token3 => 'ATTRIBUTE_NAME',
4100 p_value3 => v_attr_name);
4101
4102 FEM_ENGINES_PKG.User_Message
4103 (p_app_name => 'FEM',
4107 p_token2 => 'DIMENSION_NAME2',
4104 p_msg_name => 'FEM_GL_POST_003',
4105 p_token1 => 'DIMENSION_NAME1',
4106 p_value1 => v_dim_name1,
4108 p_value2 => v_dim_name1,
4109 p_token3 => 'ATTRIBUTE_NAME',
4110 p_value3 => v_attr_name);
4111
4112 WHEN Invalid_Budget_or_Dataset THEN
4113 ------------------------------------------------------------------
4114 -- Invalid Budget or Dataset parameter: Budget does not match
4115 -- Dataset attribute "Budget ID".
4116 ------------------------------------------------------------------
4117
4118 FEM_ENGINES_PKG.Tech_Message
4119 (p_severity => pc_log_level_error,
4120 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4121 pv_proc_name || '.invalid_budget_or_dataset',
4122 p_app_name => 'FEM',
4123 p_msg_name => 'FEM_GL_POST_007');
4124
4125 FEM_ENGINES_PKG.User_Message
4126 (p_app_name => 'FEM',
4127 p_msg_name => 'FEM_GL_POST_007');
4128
4129 WHEN Invalid_Cal_Period_ID THEN
4130 ------------------------------------------------------------------
4131 -- Invalid Calendar Period parameter: Value not found or
4132 -- Calendar Period attributes not set.
4133 ------------------------------------------------------------------
4134
4135 v_dim_name1 := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
4136 (p_dim_id => pv_cal_per_dim_id);
4137
4138 IF v_dim_name1 IS NULL THEN
4139 v_dim_name1 := 'Calendar Period';
4140 END IF;
4141
4142 FEM_ENGINES_PKG.Tech_Message
4143 (p_severity => pc_log_level_error,
4144 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4145 pv_proc_name || '.invalid_cal_period_id',
4146 p_app_name => 'FEM',
4147 p_msg_name => 'FEM_GL_POST_002',
4148 p_token1 => 'DIMENSION_NAME1',
4149 p_value1 => v_dim_name1,
4150 p_token2 => 'DIMENSION_NAME2',
4151 p_value2 => v_dim_name1);
4152
4153 FEM_ENGINES_PKG.User_Message
4154 (p_app_name => 'FEM',
4155 p_msg_name => 'FEM_GL_POST_002',
4156 p_token1 => 'DIMENSION_NAME1',
4157 p_value1 => v_dim_name1,
4158 p_token2 => 'DIMENSION_NAME2',
4159 p_value2 => v_dim_name1);
4160
4161 WHEN Invalid_Dataset_Code THEN
4162 ------------------------------------------------------------------
4163 -- Invalid Dataset parameter: Value not found or Dataset
4164 -- attributes not set.
4165 ------------------------------------------------------------------
4166
4167 v_dim_name1 := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
4168 (p_dim_id => pv_dataset_dim_id);
4169
4170 IF v_dim_name1 IS NULL THEN
4171 v_dim_name1 := 'Dataset';
4172 END IF;
4173
4174 FEM_ENGINES_PKG.Tech_Message
4175 (p_severity => pc_log_level_error,
4176 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4177 pv_proc_name || '.invalid_dataset_code',
4178 p_app_name => 'FEM',
4179 p_msg_name => 'FEM_GL_POST_002',
4180 p_token1 => 'DIMENSION_NAME1',
4184
4181 p_value1 => v_dim_name1,
4182 p_token2 => 'DIMENSION_NAME2',
4183 p_value2 => v_dim_name1);
4185 FEM_ENGINES_PKG.User_Message
4186 (p_app_name => 'FEM',
4187 p_msg_name => 'FEM_GL_POST_002',
4188 p_token1 => 'DIMENSION_NAME1',
4189 p_value1 => v_dim_name1,
4190 p_token2 => 'DIMENSION_NAME2',
4191 p_value2 => v_dim_name1);
4192
4193 WHEN Invalid_DS_Bal_Type THEN
4194 ------------------------------------------------------------------
4195 -- Invalid Dataset parameter: DS_BAL_TYPE_NAME data has already been loaded into
4196 -- Dataset PRECEDENT_DATASET_NAME for this Ledger and Calendar Period. All DS_BAL_TYPE_NAME
4197 -- data for this Ledger and Calendar Period must be loaded into the same Dataset.
4198 ------------------------------------------------------------------
4199
4200 BEGIN
4201 SELECT dataset_name
4202 INTO v_precedent_dataset_name
4203 FROM fem_datasets_vl
4204 WHERE dataset_code = pv_precedent_dataset_code;
4205 EXCEPTION
4206 WHEN OTHERS THEN
4207 v_precedent_dataset_name := TO_CHAR(pv_precedent_dataset_code);
4208 END;
4209
4210 BEGIN
4211 SELECT ds_balance_type_name
4212 INTO v_ds_balance_type_name
4213 FROM fem_ds_balance_types_vl
4214 WHERE ds_balance_type_code = pv_ds_balance_type_cd;
4215 EXCEPTION
4216 WHEN OTHERS THEN
4217 v_ds_balance_type_name := pv_ds_balance_type_cd;
4218 END;
4219
4220 IF pv_ds_balance_type_cd = 'ACTUAL' THEN
4221
4222 v_ds_balance_type_string := v_ds_balance_type_name;
4223
4224 ELSIF pv_ds_balance_type_cd = 'BUDGET' THEN
4225
4226 BEGIN
4227 SELECT budget_name
4228 INTO v_budget_name
4229 FROM fem_budgets_vl
4230 WHERE budget_id = pv_budget_id;
4231 EXCEPTION
4232 WHEN OTHERS THEN
4233 v_budget_name := TO_CHAR(pv_budget_id);
4234 END;
4235
4236 v_ds_balance_type_string := v_ds_balance_type_name || ' ' || v_budget_name;
4237
4238 ELSIF pv_ds_balance_type_cd = 'ENCUMBRANCE' THEN
4239
4240 BEGIN
4241 SELECT encumbrance_type_name
4242 INTO v_enc_type_name
4243 FROM fem_encumbrance_types_vl
4244 WHERE encumbrance_type_id = pv_enc_type_id;
4245 EXCEPTION
4246 WHEN OTHERS THEN
4247 v_enc_type_name := TO_CHAR(pv_enc_type_id);
4248 END;
4249
4250 v_ds_balance_type_string := v_ds_balance_type_name || ' ' || v_enc_type_name;
4251
4252 END IF;
4253
4254 FEM_ENGINES_PKG.Tech_Message
4255 (p_severity => pc_log_level_error,
4256 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4257 pv_proc_name || '.invalid_dataset_code',
4258 p_app_name => 'FEM',
4259 p_msg_name => 'FEM_GL_POST_026',
4260 p_token1 => 'DS_BAL_TYPE_NAME',
4261 p_value1 => v_ds_balance_type_string,
4262 p_token2 => 'PRECEDENT_DATASET_NAME',
4263 p_value2 => v_precedent_dataset_name);
4264
4265 FEM_ENGINES_PKG.User_Message
4266 (p_app_name => 'FEM',
4267 p_msg_name => 'FEM_GL_POST_026',
4268 p_token1 => 'DS_BAL_TYPE_NAME',
4269 p_value1 => v_ds_balance_type_string,
4270 p_token2 => 'PRECEDENT_DATASET_NAME',
4271 p_value2 => v_precedent_dataset_name);
4272
4273 WHEN Invalid_Enc_Type_ID THEN
4274 ------------------------------------------------------------------
4278 v_dim_name1 := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
4275 -- Invalid Encumbrance Type parameter: Value not found.
4276 ------------------------------------------------------------------
4277
4279 (p_dim_id => pv_enc_type_dim_id);
4280
4281 IF v_dim_name1 IS NULL THEN
4282 v_dim_name1 := 'Encumbrance Type';
4283 END IF;
4284
4285 FEM_ENGINES_PKG.Tech_Message
4286 (p_severity => pc_log_level_error,
4287 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4288 pv_proc_name || '.invalid_enc_type_id',
4289 p_app_name => 'FEM',
4290 p_msg_name => 'FEM_GL_POST_001',
4291 p_token1 => 'DIMENSION_NAME',
4292 p_value1 => v_dim_name1);
4293
4294 FEM_ENGINES_PKG.User_Message
4295 (p_app_name => 'FEM',
4296 p_msg_name => 'FEM_GL_POST_001',
4297 p_token1 => 'DIMENSION_NAME',
4298 p_value1 => v_dim_name1);
4299
4300 WHEN Invalid_Enc_or_Dataset THEN
4301 ------------------------------------------------------------------
4302 -- Invalid Encumbrance Type or Dataset parameter: Encumbrance Type
4303 -- does not match Dataset attribute "Dataset Encumbrance Type ID".
4304 ------------------------------------------------------------------
4305
4306 FEM_ENGINES_PKG.Tech_Message
4307 (p_severity => pc_log_level_error,
4308 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4309 pv_proc_name || '.invalid_enc_or_dataset',
4310 p_app_name => 'FEM',
4311 p_msg_name => 'FEM_GL_POST_009');
4312
4313 FEM_ENGINES_PKG.User_Message
4314 (p_app_name => 'FEM',
4315 p_msg_name => 'FEM_GL_POST_009');
4316
4317 WHEN Invalid_Execution_Mode THEN
4318 ------------------------------------------------------------------
4319 -- Invalid Execution Mode. Valid values are 'S' (Snapshot), 'I'
4320 -- (Incremental), and 'E' (Error Reprocessing Only).
4321 ------------------------------------------------------------------
4322
4323 FEM_ENGINES_PKG.Tech_Message
4324 (p_severity => fnd_log.level_error,
4325 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4326 pv_proc_name || '.invalid_exec_mode',
4327 p_app_name => 'FEM',
4328 p_msg_name => 'FEM_GL_POST_014');
4329
4330 FEM_ENGINES_PKG.Put_Message
4331 (p_app_name => 'FEM',
4332 p_msg_name => 'FEM_GL_POST_014');
4333
4334 WHEN Invalid_Ledger_ID THEN
4335 ------------------------------------------------------------------
4336 -- Invalid Ledger parameter: Value not found or Ledger attributes
4337 -- not set.
4338 ------------------------------------------------------------------
4339
4340 -- FEM-OGL Intg: It should pass the ledger dim id instead of ledger id
4341 -- so replaced pv_ledger_id to pv_ledger_dim_id
4342 v_dim_name1 := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
4343 (p_dim_id => pv_ledger_dim_id);
4344
4345 IF v_dim_name1 IS NULL THEN
4346 v_dim_name1 := 'Ledger';
4347 END IF;
4348
4349 IF pv_attr_label IS NULL THEN
4350
4351 FEM_ENGINES_PKG.Tech_Message
4352 (p_severity => pc_log_level_error,
4353 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4354 pv_proc_name || '.invalid_ledger_id',
4355 p_app_name => 'FEM',
4356 p_msg_name => 'FEM_GL_POST_001',
4357 p_token1 => 'DIMENSION_NAME',
4358 p_value1 => v_dim_name1);
4359
4360 FEM_ENGINES_PKG.User_Message
4361 (p_app_name => 'FEM',
4362 p_msg_name => 'FEM_GL_POST_001',
4363 p_token1 => 'DIMENSION_NAME',
4364 p_value1 => v_dim_name1);
4365
4366 ELSE
4367
4368 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
4369 (p_dim_id => pv_ledger_dim_id,
4370 p_attr_label => pv_attr_label);
4371
4372 IF v_attr_name IS NULL THEN
4373 v_attr_name := pv_attr_label;
4374 END IF;
4375
4376 FEM_ENGINES_PKG.Tech_Message
4377 (p_severity => pc_log_level_error,
4378 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4379 pv_proc_name || '.invalid_ledger_id',
4380 p_app_name => 'FEM',
4381 p_msg_name => 'FEM_GL_POST_003',
4382 p_token1 => 'DIMENSION_NAME1',
4383 p_value1 => v_dim_name1,
4384 p_token2 => 'DIMENSION_NAME2',
4385 p_value2 => v_dim_name1,
4386 p_token3 => 'ATTRIBUTE_NAME',
4387 p_value3 => v_attr_name);
4388
4389 FEM_ENGINES_PKG.User_Message
4390 (p_app_name => 'FEM',
4391 p_msg_name => 'FEM_GL_POST_003',
4392 p_token1 => 'DIMENSION_NAME1',
4393 p_value1 => v_dim_name1,
4394 p_token2 => 'DIMENSION_NAME2',
4395 p_value2 => v_dim_name1,
4396 p_token3 => 'ATTRIBUTE_NAME',
4400
4397 p_value3 => v_attr_name);
4398
4399 END IF;
4401 WHEN Invalid_Obj_Approval_Status THEN
4402 ------------------------------------------------------------------
4403 -- Cannot process a "production" Dataset using an Object
4404 -- Definition that is not in "approved" status.
4405 ------------------------------------------------------------------
4406
4407 FEM_ENGINES_PKG.Tech_Message
4408 (p_severity => pc_log_level_error,
4409 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4410 pv_proc_name || '.invalid_obj_approval_status',
4411 p_app_name => 'FEM',
4412 p_msg_name => 'FEM_GL_POST_005');
4413
4414 FEM_ENGINES_PKG.User_Message
4415 (p_app_name => 'FEM',
4416 p_msg_name => 'FEM_GL_POST_005');
4417
4418 WHEN Invalid_Object_ID THEN
4419 ------------------------------------------------------------------
4420 -- Invalid External GL Integration Rule: Value not found or rule
4421 -- has the wrong Object Type.
4422 ------------------------------------------------------------------
4423
4424 FEM_ENGINES_PKG.Tech_Message
4425 (p_severity => pc_log_level_error,
4426 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4427 pv_proc_name || '.invalid_object_def_id',
4428 p_app_name => 'FEM',
4429 p_msg_name => 'FEM_GL_POST_010');
4430
4431 FEM_ENGINES_PKG.User_Message
4432 (p_app_name => 'FEM',
4433 p_msg_name => 'FEM_GL_POST_010');
4434
4435 WHEN Invalid_Object_Def_ID THEN
4436 ------------------------------------------------------------------
4437 -- Invalid Object Definition ID parameter: Value not found.
4438 ------------------------------------------------------------------
4439
4440 FEM_ENGINES_PKG.Tech_Message
4441 (p_severity => pc_log_level_error,
4442 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4443 pv_proc_name || '.invalid_object_def_id',
4444 p_app_name => 'FEM',
4445 p_msg_name => 'FEM_GL_POST_001',
4446 p_token1 => 'DIMENSION_NAME',
4447 p_value1 => 'FEM_OBJECT_DEF_ID_TXT',
4448 p_trans1 => 'Y');
4449
4450 FEM_ENGINES_PKG.User_Message
4451 (p_app_name => 'FEM',
4452 p_msg_name => 'FEM_GL_POST_001',
4453 p_token1 => 'DIMENSION_NAME',
4454 p_value1 => 'FEM_OBJECT_DEF_ID_TXT',
4455 p_trans1 => 'Y');
4456
4457 WHEN Ledger_Cal_NEQ_Period_Cal THEN
4458 ------------------------------------------------------------------
4459 -- Invalid Ledger or Calendar Period parameter:
4460 -- The Calendar assigned to the Ledger does not match
4461 -- the Calendar assigned to the Calendar Period.
4462 ------------------------------------------------------------------
4463
4464 FEM_ENGINES_PKG.Tech_Message
4465 (p_severity => pc_log_level_error,
4466 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4467 pv_proc_name || '.ledger_cal_neq_period_cal',
4468 p_app_name => 'FEM',
4469 p_msg_name => 'FEM_GL_POST_006');
4470
4471 FEM_ENGINES_PKG.User_Message
4472 (p_app_name => 'FEM',
4473 p_msg_name => 'FEM_GL_POST_006');
4474
4475 WHEN User_Not_Allowed THEN
4476 ------------------------------------------------------------------
4477 -- The current user is not allowed to execute this rule. The
4478 -- user must have access to the folder containing the rule.
4479 ------------------------------------------------------------------
4480
4481 FEM_ENGINES_PKG.Tech_Message
4482 (p_severity => pc_log_level_error,
4483 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4484 pv_proc_name || '.user_not_allowed',
4485 p_app_name => 'FEM',
4486 p_msg_name => 'FEM_GL_POST_011');
4487
4488 FEM_ENGINES_PKG.User_Message
4489 (p_app_name => 'FEM',
4490 p_msg_name => 'FEM_GL_POST_011');
4491
4492 WHEN OTHERS THEN
4493 ------------------------------------------------------------------
4494 -- Unexpected exceptions
4495 ------------------------------------------------------------------
4496 IF pv_proc_name = 'validate_engine_parameters' THEN
4497
4498 pv_sqlerrm := SQLERRM;
4499 pv_callstack := dbms_utility.format_call_stack;
4500
4501 END IF;
4502
4503 -- Log the call stack and the Oracle error message to
4504 -- FND_LOG with the "unexpected exception" severity level.
4505
4506 FEM_ENGINES_PKG.Tech_Message
4507 (p_severity => pc_log_level_unexpected,
4508 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4509 pv_proc_name || '.unexpected_exception',
4510 p_msg_text => pv_sqlerrm);
4511
4512 FEM_ENGINES_PKG.Tech_Message
4513 (p_severity => pc_log_level_unexpected,
4514 p_module => 'fem.plsql.fem_gl_post_process_pkg.' ||
4515 pv_proc_name || '.unexpected_exception',
4516 p_msg_text => pv_callstack);
4517
4521 (p_app_name => 'FEM',
4518 -- Log the Oracle error message to the Concurrent Request Log.
4519
4520 FEM_ENGINES_PKG.User_Message
4522 p_msg_text => pv_sqlerrm);
4523
4524 END Validate_Engine_Parameters;
4525 -- =======================================================================
4526
4527 -- =======================================================================
4528 PROCEDURE Validate_OGL_Eng_Parameters
4529 (p_bal_rule_obj_def_id IN NUMBER,
4530 p_from_period IN VARCHAR2,
4531 p_to_period IN VARCHAR2,
4532 p_effective_date IN OUT NOCOPY DATE,
4533 p_bsv_range_low IN VARCHAR2,
4534 p_bsv_range_high IN VARCHAR2,
4535 x_generate_report_flag OUT NOCOPY VARCHAR2,
4536 x_completion_code OUT NOCOPY NUMBER) IS
4537 -- =======================================================================
4538 -- Purpose
4539 -- Validate the input parameters and perform initialization for FEM-OGL
4540 -- Integration Balances Rule Engine
4541 -- History
4542 -- 11-16-04 L Poon Created
4543 -- 02-07-05 L Poon Bug fix 4170124: Added codes to populate the new
4544 -- error Other_DS_Loaded for Actual balance type
4545 -- 05-27-05 Hari Bug fix 4294018 : Added code to check whether both
4546 -- FEM: Signage Methodology Profile option value and
4547 -- the SIGN attribute for the dimension
4548 -- EXTENDED_ACCOUNT_TYPE is set.
4549 -- 06-22-05 Hari Bug 4394404 - Modified code so that the periods are
4550 -- validated differently for Budget and Encumbrance
4551 -- Balances Rules.
4552 -- Arguments
4553 -- All of the IN arguments are the same as the IN arguments for the
4554 -- FEM_INTG_BAL_RULE_ENG_PKG.Main procedure.
4555 --
4556 -- x_generate_report_flag Returns 'Y' after updating the error code
4557 -- of FEM_INTG_EXEC_PARARMS_GT i.e. indicating
4558 -- report should be generated when erroring out
4559 -- after this point
4560 -- x_completion_code Returns 0 for success, 1 for warning, 2 for
4561 -- failure.
4562 -- Notes
4563 -- Called from the beginning of FEM_INTG_BAL_RULE_ENG_PKG.Main
4564 -- =======================================================================
4565
4566 v_module VARCHAR2(100);
4567 v_func_name VARCHAR2(80);
4568 v_dummy_flag VARCHAR2(1);
4569 v_count NUMBER;
4570 v_signage_method VARCHAR2(50);
4571
4572 v_dim_name fem_dimensions_tl.dimension_name%TYPE;
4573 v_attr_name fem_dim_attributes_tl.attribute_name%TYPE;
4574
4575
4576 OGLEngParam_FatalErr EXCEPTION;
4577
4578 BEGIN
4579 v_module := 'fem.plsql.fem_gl_post_process_pkg.validate_ogl_eng_parameters';
4580 v_func_name := 'FEM_GL_POST_PROCESS_PKG.Validate_OGL_Eng_Parameters';
4581
4582 -- Log the function entry time to FND_LOG
4583 FEM_ENGINES_PKG.Tech_Message
4584 (p_severity => pc_log_level_procedure,
4585 p_module => v_module,
4586 p_app_name => 'FEM',
4587 p_msg_name => 'FEM_GL_POST_201',
4588 p_token1 => 'FUNC_NAME',
4589 p_value1 => v_func_name,
4590 p_token2 => 'TIME',
4591 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
4592
4593 -- -----------------------
4594 -- 1. Initialize variables
4595 -- -----------------------
4596 pv_num_rows := 0;
4597 pv_proc_name := 'validate_ogl_eng_parameters';
4598 pv_attr_label := NULL;
4599 v_count := 0;
4600 -- Bug 4394404 hkaniven start - package variable to store the no of valid rows
4601 pv_num_rows_valid := 0;
4602 -- Bug 4394404 hkaniven end - package variable to store the no of valid rows
4603
4604 -- Set Request ID and then print its value to FND_LOG
4605 pv_req_id := FND_GLOBAL.Conc_Request_Id;
4606 FEM_ENGINES_PKG.Tech_Message
4607 (p_severity => pc_log_level_statement,
4608 p_module => v_module,
4609 p_app_name => 'FEM',
4610 p_msg_name => 'FEM_GL_POST_204',
4611 p_token1 => 'VAR_NAME',
4612 p_value1 => 'pv_req_id',
4613 p_token2 => 'VAR_VAL',
4614 p_value2 => TO_CHAR(pv_req_id));
4615
4616 -- Set User ID and then print its value to FND_LOG
4617 pv_user_id := FND_GLOBAL.User_Id;
4618 FEM_ENGINES_PKG.Tech_Message
4619 (p_severity => pc_log_level_statement,
4620 p_module => v_module,
4621 p_app_name => 'FEM',
4622 p_msg_name => 'FEM_GL_POST_204',
4623 p_token1 => 'VAR_NAME',
4624 p_value1 => 'pv_user_id',
4625 p_token2 => 'VAR_VAL',
4626 p_value2 => TO_CHAR(pv_user_id));
4627
4628 -- Set Login ID and then print its value to FND_LOG
4629 pv_login_id := FND_GLOBAL.Login_Id;
4630 FEM_ENGINES_PKG.Tech_Message
4631 (p_severity => pc_log_level_statement,
4632 p_module => v_module,
4633 p_app_name => 'FEM',
4634 p_msg_name => 'FEM_GL_POST_204',
4635 p_token1 => 'VAR_NAME',
4636 p_value1 => 'pv_login_id',
4637 p_token2 => 'VAR_VAL',
4641 pv_pgm_id := FND_GLOBAL.Conc_Program_Id;
4638 p_value2 => TO_CHAR(pv_login_id));
4639
4640 -- Set Concurrent Program ID and then print its value to FND_LOG
4642 FEM_ENGINES_PKG.Tech_Message
4643 (p_severity => pc_log_level_statement,
4644 p_module => v_module,
4645 p_app_name => 'FEM',
4646 p_msg_name => 'FEM_GL_POST_204',
4647 p_token1 => 'VAR_NAME',
4648 p_value1 => 'pv_pgm_id',
4649 p_token2 => 'VAR_VAL',
4650 p_value2 => TO_CHAR(pv_pgm_id));
4651
4652 -- Set Program Application ID and then print its value to FND_LOG
4653 pv_pgm_app_id := FND_GLOBAL.Prog_Appl_ID;
4654 FEM_ENGINES_PKG.Tech_Message
4655 (p_severity => pc_log_level_statement,
4656 p_module => v_module,
4657 p_app_name => 'FEM',
4658 p_msg_name => 'FEM_GL_POST_204',
4659 p_token1 => 'VAR_NAME',
4660 p_value1 => 'pv_pgm_app_id',
4661 p_token2 => 'VAR_VAL',
4662 p_value2 => TO_CHAR(pv_pgm_app_id));
4663
4664 -- Read the Signage profile option
4665 FND_PROFILE.GET('FEM_SIGNAGE_METHOD', v_signage_method);
4666
4667 -- Bug 4294018 - hkaniven start - If Signage Methodology is not set,
4668 -- then error out
4669 IF (v_signage_method IS NULL)
4670 THEN
4671 -- Print the error message to FND_LOG and concurrent program log
4672 FEM_ENGINES_PKG.Tech_Message
4673 (p_severity => pc_log_level_event,
4674 p_module => v_module,
4675 p_app_name => 'FEM',
4676 p_msg_name => 'FEM_INTG_BAL_SIGN_PROF_NOT_SET');
4677 FEM_ENGINES_PKG.User_Message
4678 (p_app_name => 'FEM',
4679 p_msg_name => 'FEM_INTG_BAL_SIGN_PROF_NOT_SET');
4680
4681 RAISE OGLEngParam_FatalErr;
4682 END IF;
4683 -- Bug 4294018 - hkaniven end - If Signage Methodology is not set,
4684 -- then error out
4685
4686 -- Bug 4294018 hkaniven start - Count the no of 'SIGN' attribute rows
4687 SELECT COUNT(*)
4688 INTO v_count
4689 FROM fem_dimensions_b fdb,
4690 fem_dim_attributes_b fdab,
4691 fem_dim_attr_versions_b fdavb,
4692 fem_ext_acct_types_attr feata
4693 WHERE fdb.dimension_varchar_label = 'EXTENDED_ACCOUNT_TYPE'
4694 AND fdab.attribute_varchar_label = 'SIGN'
4695 AND fdb.dimension_id = fdab.dimension_id
4696 AND fdab.attribute_id = fdavb.attribute_id
4697 AND fdavb.default_version_flag = 'Y'
4698 AND fdab.attribute_id = feata.attribute_id
4699 AND fdavb.version_id = feata.version_id;
4700 -- Bug 4294018 hkaniven end - Count the no of 'SIGN' attribute rows
4701
4702 -- Bug 4294018 hkaniven start - If no 'SIGN' attribute rows then error out
4703 IF v_count = 0 THEN
4704 FEM_ENGINES_PKG.Tech_Message
4705 (p_severity => pc_log_level_event,
4706 p_module => v_module,
4707 p_app_name => 'FEM',
4708 p_msg_name => 'FEM_INTG_BAL_SIGN_CP_NOT_RUN');
4709 FEM_ENGINES_PKG.User_Message
4710 (p_app_name => 'FEM',
4711 p_msg_name => 'FEM_INTG_BAL_SIGN_CP_NOT_RUN');
4712
4713 RAISE OGLEngParam_FatalErr;
4714 END IF;
4715 -- Bug 4294018 hkaniven end - If no 'SIGN' attribute rows then error out
4716
4717 -- Log the signage method value
4718 FEM_ENGINES_PKG.Tech_Message
4719 (p_severity => pc_log_level_statement,
4720 p_module => v_module,
4721 p_app_name => 'FEM',
4722 p_msg_name => 'FEM_GL_POST_204',
4723 p_token1 => 'VAR_NAME',
4724 p_value1 => 'v_signage_method',
4725 p_token2 => 'VAR_VAL',
4726 p_value2 => TO_CHAR(v_signage_method));
4727
4728 -- Set Advanced Line Item and Financial Element Mappings Flag and then
4729 -- print its value to FND_LOG
4730 FND_PROFILE.GET('FEM_GL_ADV_MAPPING_FLAG', pv_adv_li_fe_mappings_flag);
4731
4732 -- If it is not set, default it as 'N'
4733 IF (pv_adv_li_fe_mappings_flag IS NULL)
4734 THEN
4735 -- Print the warning message to FND_LOG and concurrent program log
4736 FEM_ENGINES_PKG.Tech_Message
4737 (p_severity => pc_log_level_event,
4738 p_module => v_module,
4739 p_app_name => 'FEM',
4740 p_msg_name => 'FEM_INTG_BAL_DEFAULT_ADV_MAP');
4741 FEM_ENGINES_PKG.User_Message
4742 (p_app_name => 'FEM',
4743 p_msg_name => 'FEM_INTG_BAL_DEFAULT_ADV_MAP');
4744 -- Default it to No
4745 pv_adv_li_fe_mappings_flag := 'N';
4746 END IF;
4747
4748 -- Log the advanced mapping flag value
4749 FEM_ENGINES_PKG.Tech_Message
4750 (p_severity => pc_log_level_statement,
4751 p_module => v_module,
4752 p_app_name => 'FEM',
4753 p_msg_name => 'FEM_GL_POST_204',
4754 p_token1 => 'VAR_NAME',
4755 p_value1 => 'pv_adv_li_fe_mappings_flag',
4756 p_token2 => 'VAR_VAL',
4757 p_value2 => TO_CHAR(pv_adv_li_fe_mappings_flag));
4758
4759 -- Find the OGL Source System Code
4760 SELECT SOURCE_SYSTEM_CODE
4761 INTO pv_gl_source_system_code
4762 FROM FEM_SOURCE_SYSTEMS_B
4763 WHERE SOURCE_SYSTEM_DISPLAY_CODE = 'OGL';
4764
4765 FEM_ENGINES_PKG.Tech_Message
4766 (p_severity => pc_log_level_statement,
4767 p_module => v_module,
4768 p_app_name => 'FEM',
4769 p_msg_name => 'FEM_GL_POST_204',
4770 p_token1 => 'VAR_NAME',
4774
4771 p_value1 => 'pv_gl_source_system_code',
4772 p_token2 => 'VAR_VAL',
4773 p_value2 => pv_gl_source_system_code);
4775 -- -------------------------------------------------------
4776 -- 2. Retrieve and validate the Balances Rule and Rule Def
4777 -- -------------------------------------------------------
4778 BEGIN
4779 SELECT balRDef.BAL_RULE_OBJ_DEF_ID
4780 , objDefT.DISPLAY_NAME
4781 , balRule.BAL_RULE_OBJ_ID
4782 , balRule.LEDGER_ID
4783 , lgr.NAME
4784 , balRule.CHART_OF_ACCOUNTS_ID
4785 , flex.ID_FLEX_STRUCTURE_NAME
4786 , balRule.BAL_SEG_COLUMN_NAME
4787 , balRule.DS_BAL_TYPE_CODE
4788 , balRule.INCLUDE_AVG_BAL_FLAG
4789 , balRule.MAINTAIN_QTD_FLAG
4790 , DECODE(balRDef.LOAD_METHOD_CODE
4791 , 'SNAPSHOT', 'S'
4792 , 'INCREMENTAL', 'I')
4793 , balRDef.BAL_SEG_VALUE_OPTION_CODE
4794 , balRDef.CURRENCY_OPTION_CODE
4795 , balRDef.XLATED_BAL_OPTION_CODE
4796 , balRDef.ACTUAL_OUTPUT_DATASET_CODE
4797 , objDef.EFFECTIVE_START_DATE
4798 , objDef.EFFECTIVE_END_DATE
4799 INTO pv_rule_obj_def_id
4800 , pv_rule_obj_def_name
4801 , pv_rule_obj_id
4802 , pv_ledger_id
4803 , pv_ledger_name
4804 , pv_coa_id
4805 , pv_coa_name
4806 , pv_bsv_app_col_name
4807 , pv_ds_balance_type_cd
4808 , pv_include_avg_bal
4809 , pv_maintain_qtd_flag
4810 , pv_exec_mode
4811 , pv_bsv_option
4812 , pv_curr_option
4813 , pv_xlated_bal_option
4814 , pv_dataset_code
4815 , pv_rule_eff_start_date
4816 , pv_rule_eff_end_date
4817 FROM FEM_INTG_BAL_RULES balRule
4818 , FEM_INTG_BAL_RULE_DEFS balRDef
4819 , FEM_OBJECT_DEFINITION_B objDef
4820 , FEM_OBJECT_DEFINITION_TL objDefT
4821 , FND_ID_FLEX_STRUCTURES_TL flex
4822 , GL_LEDGERS lgr
4823 WHERE balRule.BAL_RULE_OBJ_ID = objDef.OBJECT_ID
4824 AND objDef.OBJECT_DEFINITION_ID = balRDef.BAL_RULE_OBJ_DEF_ID
4825 AND objDefT.OBJECT_DEFINITION_ID = objDef.OBJECT_DEFINITION_ID
4826 AND objDefT.LANGUAGE = USERENV('LANG')
4827 AND balRDef.BAL_RULE_OBJ_DEF_ID = p_bal_rule_obj_def_id
4828 AND flex.APPLICATION_ID = 101
4829 AND flex.ID_FLEX_CODE = 'GL#'
4830 AND flex.ID_FLEX_NUM = balRule.CHART_OF_ACCOUNTS_ID
4831 AND flex.LANGUAGE = USERENV('LANG')
4832 AND lgr.LEDGER_ID = balRule.LEDGER_ID;
4833 EXCEPTION
4834 WHEN NO_DATA_FOUND THEN
4835 -- The balances rule object definition is not found
4836 FEM_ENGINES_PKG.Tech_Message
4837 (p_severity => pc_log_level_statement,
4838 p_module => v_module,
4839 p_msg_text => 'Raising Invalid_Object_Def_ID exception');
4840 RAISE Invalid_Object_Def_ID;
4841 END;
4842
4843 -- List out the balances rule setup to FND_LOG
4844 FEM_ENGINES_PKG.Tech_Message
4845 (p_severity => pc_log_level_statement,
4846 p_module => v_module,
4847 p_app_name => 'FEM',
4848 p_msg_name => 'FEM_GL_POST_204',
4849 p_token1 => 'VAR_NAME',
4850 p_value1 => 'pv_rule_obj_def_id',
4851 p_token2 => 'VAR_VAL',
4852 p_value2 => TO_CHAR(pv_rule_obj_def_id));
4853 FEM_ENGINES_PKG.Tech_Message
4854 (p_severity => pc_log_level_statement,
4855 p_module => v_module,
4856 p_app_name => 'FEM',
4857 p_msg_name => 'FEM_GL_POST_204',
4858 p_token1 => 'VAR_NAME',
4859 p_value1 => 'pv_rule_obj_def_name',
4860 p_token2 => 'VAR_VAL',
4861 p_value2 => pv_rule_obj_def_name);
4862 FEM_ENGINES_PKG.Tech_Message
4863 (p_severity => pc_log_level_statement,
4864 p_module => v_module,
4865 p_app_name => 'FEM',
4866 p_msg_name => 'FEM_GL_POST_204',
4867 p_token1 => 'VAR_NAME',
4868 p_value1 => 'pv_rule_obj_id',
4869 p_token2 => 'VAR_VAL',
4870 p_value2 => TO_CHAR(pv_rule_obj_id));
4871 FEM_ENGINES_PKG.Tech_Message
4872 (p_severity => pc_log_level_statement,
4873 p_module => v_module,
4874 p_app_name => 'FEM',
4875 p_msg_name => 'FEM_GL_POST_204',
4876 p_token1 => 'VAR_NAME',
4877 p_value1 => 'pv_ledger_id',
4878 p_token2 => 'VAR_VAL',
4879 p_value2 => TO_CHAR(pv_ledger_id));
4880 FEM_ENGINES_PKG.Tech_Message
4881 (p_severity => pc_log_level_statement,
4882 p_module => v_module,
4883 p_app_name => 'FEM',
4884 p_msg_name => 'FEM_GL_POST_204',
4885 p_token1 => 'VAR_NAME',
4886 p_value1 => 'pv_ledger_name',
4887 p_token2 => 'VAR_VAL',
4888 p_value2 => pv_ledger_name);
4889 FEM_ENGINES_PKG.Tech_Message
4890 (p_severity => pc_log_level_statement,
4891 p_module => v_module,
4892 p_app_name => 'FEM',
4893 p_msg_name => 'FEM_GL_POST_204',
4894 p_token1 => 'VAR_NAME',
4895 p_value1 => 'pv_coa_id',
4896 p_token2 => 'VAR_VAL',
4897 p_value2 => TO_CHAR(pv_coa_id));
4898 FEM_ENGINES_PKG.Tech_Message
4899 (p_severity => pc_log_level_statement,
4900 p_module => v_module,
4901 p_app_name => 'FEM',
4902 p_msg_name => 'FEM_GL_POST_204',
4906 p_value2 => pv_coa_name);
4903 p_token1 => 'VAR_NAME',
4904 p_value1 => 'pv_coa_name',
4905 p_token2 => 'VAR_VAL',
4907 FEM_ENGINES_PKG.Tech_Message
4908 (p_severity => pc_log_level_statement,
4909 p_module => v_module,
4910 p_app_name => 'FEM',
4911 p_msg_name => 'FEM_GL_POST_204',
4912 p_token1 => 'VAR_NAME',
4913 p_value1 => 'pv_bsv_app_col_name',
4914 p_token2 => 'VAR_VAL',
4915 p_value2 => pv_bsv_app_col_name);
4916 FEM_ENGINES_PKG.Tech_Message
4917 (p_severity => pc_log_level_statement,
4918 p_module => v_module,
4919 p_app_name => 'FEM',
4920 p_msg_name => 'FEM_GL_POST_204',
4921 p_token1 => 'VAR_NAME',
4922 p_value1 => 'pv_ds_balance_type_cd',
4923 p_token2 => 'VAR_VAL',
4924 p_value2 => pv_ds_balance_type_cd);
4925 FEM_ENGINES_PKG.Tech_Message
4926 (p_severity => pc_log_level_statement,
4927 p_module => v_module,
4928 p_app_name => 'FEM',
4929 p_msg_name => 'FEM_GL_POST_204',
4930 p_token1 => 'VAR_NAME',
4931 p_value1 => 'pv_include_avg_bal',
4932 p_token2 => 'VAR_VAL',
4933 p_value2 => pv_include_avg_bal);
4934 FEM_ENGINES_PKG.Tech_Message
4935 (p_severity => pc_log_level_statement,
4936 p_module => v_module,
4937 p_app_name => 'FEM',
4938 p_msg_name => 'FEM_GL_POST_204',
4939 p_token1 => 'VAR_NAME',
4940 p_value1 => 'pv_maintain_qtd_flag',
4941 p_token2 => 'VAR_VAL',
4942 p_value2 => pv_maintain_qtd_flag);
4943 FEM_ENGINES_PKG.Tech_Message
4944 (p_severity => pc_log_level_statement,
4945 p_module => v_module,
4946 p_app_name => 'FEM',
4947 p_msg_name => 'FEM_GL_POST_204',
4948 p_token1 => 'VAR_NAME',
4949 p_value1 => 'pv_exec_mode',
4950 p_token2 => 'VAR_VAL',
4951 p_value2 => pv_exec_mode);
4952 FEM_ENGINES_PKG.Tech_Message
4953 (p_severity => pc_log_level_statement,
4954 p_module => v_module,
4955 p_app_name => 'FEM',
4956 p_msg_name => 'FEM_GL_POST_204',
4957 p_token1 => 'VAR_NAME',
4958 p_value1 => 'pv_bsv_option',
4959 p_token2 => 'VAR_VAL',
4960 p_value2 => pv_bsv_option);
4961 FEM_ENGINES_PKG.Tech_Message
4962 (p_severity => pc_log_level_statement,
4963 p_module => v_module,
4964 p_app_name => 'FEM',
4965 p_msg_name => 'FEM_GL_POST_204',
4966 p_token1 => 'VAR_NAME',
4967 p_value1 => 'pv_curr_option',
4968 p_token2 => 'VAR_VAL',
4969 p_value2 => pv_curr_option);
4970 FEM_ENGINES_PKG.Tech_Message
4971 (p_severity => pc_log_level_statement,
4972 p_module => v_module,
4973 p_app_name => 'FEM',
4974 p_msg_name => 'FEM_GL_POST_204',
4975 p_token1 => 'VAR_NAME',
4976 p_value1 => 'pv_xlated_bal_option',
4977 p_token2 => 'VAR_VAL',
4978 p_value2 => pv_xlated_bal_option);
4979 FEM_ENGINES_PKG.Tech_Message
4980 (p_severity => pc_log_level_statement,
4981 p_module => v_module,
4982 p_app_name => 'FEM',
4983 p_msg_name => 'FEM_GL_POST_204',
4984 p_token1 => 'VAR_NAME',
4985 p_value1 => 'pv_dataset_code',
4986 p_token2 => 'VAR_VAL',
4987 p_value2 => pv_dataset_code);
4988 FEM_ENGINES_PKG.Tech_Message
4989 (p_severity => pc_log_level_statement,
4990 p_module => v_module,
4991 p_app_name => 'FEM',
4992 p_msg_name => 'FEM_GL_POST_204',
4993 p_token1 => 'VAR_NAME',
4994 p_value1 => 'pv_rule_eff_start_date',
4995 p_token2 => 'VAR_VAL',
4996 p_value2 => TO_CHAR(pv_rule_eff_start_date, 'DD-MON-YYYY'));
4997 FEM_ENGINES_PKG.Tech_Message
4998 (p_severity => pc_log_level_statement,
4999 p_module => v_module,
5000 p_app_name => 'FEM',
5001 p_msg_name => 'FEM_GL_POST_204',
5002 p_token1 => 'VAR_NAME',
5003 p_value1 => 'pv_rule_eff_end_date',
5004 p_token2 => 'VAR_VAL',
5005 p_value2 => TO_CHAR(pv_rule_eff_end_date, 'DD-MON-YYYY'));
5006
5007 -- Validate the p_bal_rule_obj_def_id engine parameter
5008 Validate_Object_Def_ID;
5009
5010 IF pv_obj_type_cd <> 'OGL_INTG_BAL_RULE'
5011 THEN
5012 -- It is not a FEM-OGL Integration Balances Rule
5013 FEM_ENGINES_PKG.Tech_Message
5014 (p_severity => pc_log_level_exception,
5015 p_module => v_module,
5016 p_msg_text => 'Raising Invalid_Object_ID exception');
5017
5018 RAISE Invalid_Object_ID;
5019 END IF; -- IF pv_obj_type_cd <> 'OGL_INTG_BAL_RULE'
5020
5021 -- ----------------------
5022 -- 3. Validate the Ledger
5023 -- ----------------------
5024
5025 -- Verify the ledger is assigned in the source ledger group
5026 BEGIN
5027 -- Bug fix 4214383: Changed the SQL to uptake new SLG implmentation
5028 SELECT 'Y'
5029 INTO v_dummy_flag
5030 FROM FEM_LEDGERS_HIER h
5031 , FEM_LEDGERS_B p
5032 WHERE h.HIERARCHY_OBJ_DEF_ID = 1505
5033 AND h.CHILD_ID = pv_ledger_id
5034 AND h.PARENT_ID = p.LEDGER_ID
5035 AND p.LEDGER_DISPLAY_CODE = 'OGL_SOURCE_LEDGER_GROUP';
5036 EXCEPTION
5037 WHEN NO_DATA_FOUND THEN
5041 p_module => v_module,
5038 -- The Ledger is not assigned to the source ledger group
5039 FEM_ENGINES_PKG.Tech_Message
5040 (p_severity => pc_log_level_error,
5042 p_app_name => 'FEM',
5043 p_msg_name => 'FEM_INTG_BAL_LG_NOT_IN_SRC',
5044 p_token1 => 'LEDGER_NAME',
5045 p_value1 => pv_ledger_name);
5046
5047 FEM_ENGINES_PKG.User_Message
5048 (p_app_name => 'FEM',
5049 p_msg_name => 'FEM_INTG_BAL_LG_NOT_IN_SRC',
5050 p_token1 => 'LEDGER_NAME',
5051 p_value1 => pv_ledger_name);
5052
5053 RAISE OGLEngParam_FatalErr;
5054 END;
5055
5056 -- Cache the dimension IDs
5057 Get_Dim_IDs;
5058
5059 -- Validate the pv_ledger_id retrieved from the balance rule def and
5060 -- cache ledger attributes
5061 Validate_Ledger;
5062
5063 -- Verify the Time Hierarchy Object ID and Time Hierarchy Object Def ID
5064 -- this Ledger
5065 IF (pv_ledger_per_hier_obj_def_id = -1 OR pv_ledger_per_hier_obj_id = -1)
5066 THEN
5067 -- The Time Hierarchy Object ID/Object Def ID is wrong
5068 FEM_ENGINES_PKG.Tech_Message
5069 (p_severity => pc_log_level_error,
5070 p_module => v_module,
5071 p_app_name => 'FEM',
5072 p_msg_name => 'FEM_INTG_BAL_PER_HIER_ERR',
5073 p_token1 => 'LEDGER_NAME',
5074 p_value1 => pv_ledger_name);
5075
5076 FEM_ENGINES_PKG.User_Message
5077 (p_app_name => 'FEM',
5078 p_msg_name => 'FEM_INTG_BAL_PER_HIER_ERR',
5079 p_token1 => 'LEDGER_NAME',
5080 p_value1 => pv_ledger_name);
5081
5082 RAISE OGLEngParam_FatalErr;
5083 END IF;
5084
5085 -- Verify all Value-Set-Required dimensions are defined in the Global
5086 -- Value Set Combination
5087 BEGIN
5088 SELECT DISTINCT 'X'
5089 INTO v_dummy_flag
5090 FROM FEM_XDIM_DIMENSIONS xdim, FEM_DIMENSIONS_B dim
5091 WHERE xdim.VALUE_SET_REQUIRED_FLAG = 'Y'
5092 AND xdim.DIMENSION_ID = dim.DIMENSION_ID
5093 AND dim.DIMENSION_VARCHAR_LABEL
5094 NOT IN ('COMPANY', 'COST_CENTER') -- Bug fix 4158130
5095 AND NOT EXISTS
5096 (SELECT 'X'
5097 FROM FEM_GLOBAL_VS_COMBO_DEFS gvsc
5098 WHERE gvsc.DIMENSION_ID = dim.DIMENSION_ID
5099 AND gvsc.GLOBAL_VS_COMBO_ID = pv_global_vs_combo_id);
5100 EXCEPTION
5101 WHEN NO_DATA_FOUND THEN
5102 -- No missing value-set-required dimensions
5103 FEM_ENGINES_PKG.Tech_Message
5104 (p_severity => pc_log_level_statement,
5105 p_module => v_module,
5106 p_msg_text => 'All Value-Set-Required dimensions are defined in the GVSC');
5107 END;
5108
5109 IF (v_dummy_flag = 'X')
5110 THEN
5111 -- Incomplete the Global Value Set Comboination setup
5112 FEM_ENGINES_PKG.Tech_Message
5113 (p_severity => pc_log_level_error,
5114 p_module => v_module,
5115 p_app_name => 'FEM',
5116 p_msg_name => 'FEM_INTG_BAL_GVSC_ERR',
5117 p_token1 => 'COA_NAME',
5118 p_value1 => pv_coa_name);
5119
5120 FEM_ENGINES_PKG.User_Message
5121 (p_app_name => 'FEM',
5122 p_msg_name => 'FEM_INTG_BAL_GVSC_ERR',
5123 p_token1 => 'COA_NAME',
5124 p_value1 => pv_coa_name);
5125
5126 Raise OGLEngParam_FatalErr;
5127 END IF; -- IF (v_dummy_flag = 'X')
5128
5129 -- Bug fix 4242130: Validate the dimension rules for non-processing key
5130 -- dimensions should have SINGLEVAL option
5131 BEGIN
5132 SELECT DISTINCT 'X'
5133 INTO v_dummy_flag
5134 FROM fem_intg_dim_rules r
5135 , fem_intg_dim_rule_defs rd
5136 , fem_object_definition_b od
5137 WHERE r.dim_rule_obj_id = od.object_id
5138 AND rd.dim_rule_obj_def_id = od.object_definition_id
5139 AND rd.dim_mapping_option_code <> 'SINGLEVAL'
5140 AND r.dimension_id <> 0
5141 AND r.dimension_id NOT IN
5142 (SELECT tc.dimension_id
5143 FROM fem_tab_column_prop tcp
5144 , fem_tab_columns_b tc
5145 WHERE tcp.table_name = 'FEM_BALANCES'
5146 AND tcp.column_property_code = 'PROCESSING_KEY'
5147 AND tc.table_name = 'FEM_BALANCES'
5148 AND tc.column_name = tcp.column_name)
5149 AND r.chart_of_accounts_id = pv_coa_id;
5150 EXCEPTION
5151 WHEN NO_DATA_FOUND THEN
5152 -- All non-processing key dimensions have SINGLEVAL dim rule versions
5153 FEM_ENGINES_PKG.Tech_Message
5154 (p_severity => pc_log_level_statement,
5155 p_module => v_module,
5156 p_msg_text => 'All non-processing key dimensions have SINGLEVAL dimension rule versions');
5157 END;
5158
5159 IF (v_dummy_flag = 'X')
5160 THEN
5161 -- Invalid dimension rule setup for this COA
5162 FEM_ENGINES_PKG.Tech_Message
5163 (p_severity => pc_log_level_error,
5164 p_module => v_module,
5165 p_app_name => 'FEM',
5166 p_msg_name => 'FEM_INTG_BAL_DIM_RULE_ERR',
5167 p_token1 => 'COA_NAME',
5168 p_value1 => pv_coa_name);
5169
5170 FEM_ENGINES_PKG.User_Message
5171 (p_app_name => 'FEM',
5172 p_msg_name => 'FEM_INTG_BAL_DIM_RULE_ERR',
5173 p_token1 => 'COA_NAME',
5177 END IF;
5174 p_value1 => pv_coa_name);
5175
5176 Raise OGLEngParam_FatalErr;
5178
5179 -- ----------------------------
5180 -- 4. Validate the Period Range
5181 -- ----------------------------
5182
5183 -- Check the From Period is a valid OGL period for the Ledger by getting
5184 -- its end date and period effective number
5185 -- Bug fix 4332989: Changed to get the end date of From Period to validate
5186 -- the effective period range
5187 BEGIN
5188 SELECT per.END_DATE
5189 , per.EFFECTIVE_PERIOD_NUM
5190 INTO pv_from_date
5191 , pv_from_period_eff_num
5192 FROM GL_PERIOD_STATUSES per
5193 WHERE per.APPLICATION_ID = 101
5194 AND per.LEDGER_ID = pv_ledger_id
5195 AND per.PERIOD_NAME = p_from_period;
5196 EXCEPTION
5197 WHEN NO_DATA_FOUND THEN
5198 -- The From Period is not a valid OGL period
5199 FEM_ENGINES_PKG.Tech_Message
5200 (p_severity => pc_log_level_error,
5201 p_module => v_module,
5202 p_app_name => 'FEM',
5203 p_msg_name => 'FEM_GL_POST_001',
5204 p_token1 => 'DIMENSION_NAME',
5205 p_value1 => 'FEM_FROM_PERIOD_TXT',
5206 p_trans1 => 'Y');
5207 FEM_ENGINES_PKG.User_Message
5208 (p_app_name => 'FEM',
5209 p_msg_name => 'FEM_GL_POST_001',
5210 p_token1 => 'DIMENSION_NAME',
5211 p_value1 => 'FEM_FROM_PERIOD_TXT',
5212 p_trans1 => 'Y');
5213
5214 Raise OGLEngParam_FatalErr;
5215 END;
5216
5217 FEM_ENGINES_PKG.Tech_Message
5218 (p_severity => pc_log_level_statement,
5219 p_module => v_module,
5220 p_app_name => 'FEM',
5221 p_msg_name => 'FEM_GL_POST_204',
5222 p_token1 => 'VAR_NAME',
5223 p_value1 => 'pv_from_date',
5224 p_token2 => 'VAR_VAL',
5225 p_value2 => TO_CHAR(pv_from_date, 'DD-MON-YYYY'));
5226
5227 -- Check the To Period is a valid OGL period for the Ledger by getting
5228 -- its start date and period effective number
5229 BEGIN
5230 SELECT per.END_DATE
5231 , per.EFFECTIVE_PERIOD_NUM
5232 , (SELECT 'Y' FROM DUAL
5233 WHERE NVL(p_effective_date, per.END_DATE) BETWEEN per.START_DATE
5234 AND per.END_DATE)
5235 INTO pv_to_date
5236 , pv_to_period_eff_num
5237 , v_dummy_flag
5238 FROM GL_PERIOD_STATUSES per
5239 WHERE per.APPLICATION_ID = 101
5240 AND per.LEDGER_ID = pv_ledger_id
5241 AND per.PERIOD_NAME = p_to_period;
5242 EXCEPTION
5243 WHEN NO_DATA_FOUND THEN
5244 -- The To Period is not a valid OGL period
5245 FEM_ENGINES_PKG.Tech_Message
5246 (p_severity => pc_log_level_error,
5247 p_module => v_module,
5248 p_app_name => 'FEM',
5249 p_msg_name => 'FEM_GL_POST_001',
5250 p_token1 => 'DIMENSION_NAME',
5251 p_value1 => 'FEM_TO_PERIOD_TXT',
5252 p_trans1 => 'Y');
5253 FEM_ENGINES_PKG.User_Message
5254 (p_app_name => 'FEM',
5255 p_msg_name => 'FEM_GL_POST_001',
5256 p_token1 => 'DIMENSION_NAME',
5257 p_value1 => 'FEM_TO_PERIOD_TXT',
5258 p_trans1 => 'Y');
5259
5260 Raise OGLEngParam_FatalErr;
5261 END;
5262
5263 FEM_ENGINES_PKG.Tech_Message
5264 (p_severity => pc_log_level_statement,
5265 p_module => v_module,
5266 p_app_name => 'FEM',
5267 p_msg_name => 'FEM_GL_POST_204',
5268 p_token1 => 'VAR_NAME',
5269 p_value1 => 'pv_to_date',
5273 -- Validate the From Period must be earlier than or same as To Period
5270 p_token2 => 'VAR_VAL',
5271 p_value2 => TO_CHAR(pv_to_date, 'DD-MON-YYYY'));
5272
5274 IF (pv_from_period_eff_num > pv_to_period_eff_num)
5275 THEN
5276 FEM_ENGINES_PKG.Tech_Message
5277 (p_severity => pc_log_level_error,
5278 p_module => v_module,
5279 p_app_name => 'FEM',
5280 p_msg_name => 'FEM_INTG_BAL_PER_RANGE_ERR',
5281 p_token1 => 'FROM_PERIOD',
5282 p_value1 => p_from_period,
5283 p_token2 => 'TO_PERIOD',
5284 p_value2 => p_to_period);
5285 FEM_ENGINES_PKG.User_Message
5286 (p_app_name => 'FEM',
5287 p_msg_name => 'FEM_INTG_BAL_PER_RANGE_ERR',
5288 p_token1 => 'FROM_PERIOD',
5289 p_value1 => p_from_period,
5290 p_token2 => 'TO_PERIOD',
5291 p_value2 => p_to_period);
5292
5293 Raise OGLEngParam_FatalErr;
5294 END IF; -- IF (pv_from_period_eff_num > pv_to_period_eff_num)
5295
5296 -- Validate the pass period range must be within the balance rule effective
5297 -- date range
5298 IF (pv_from_date < pv_rule_eff_start_date
5299 OR pv_to_date > pv_rule_eff_end_date)
5300 THEN
5301 FEM_ENGINES_PKG.Tech_Message
5302 (p_severity => pc_log_level_error,
5303 p_module => v_module,
5304 p_app_name => 'FEM',
5305 p_msg_name => 'FEM_INTG_BAL_RULE_NOT_EFF');
5306 FEM_ENGINES_PKG.User_Message
5307 (p_app_name => 'FEM',
5308 p_msg_name => 'FEM_INTG_BAL_RULE_NOT_EFF');
5309
5310 Raise OGLEngParam_FatalErr;
5311 END IF; -- IF (pv_from_date < pv_rule_eff_start_date ...
5312
5313 -- Check the As-Of-Date parameter if Include Average Balance Flag is Yes
5314 IF ((pv_include_avg_bal = 'Y')
5315 AND (p_effective_date IS NULL OR v_dummy_flag IS NULL))
5316 THEN
5317 -- If the As-Of-Date parameter is not provided or it is not within the To
5318 -- Period, we set it as the end date of the To Period
5319 p_effective_date := pv_to_date;
5320
5321 -- Log a warning message to FND_LOG as well as the concurrent request log
5322 FEM_ENGINES_PKG.Tech_Message
5323 (p_severity => pc_log_level_event,
5324 p_module => v_module,
5325 p_app_name => 'FEM',
5326 p_msg_name => 'FEM_INTG_BAL_EFF_DATE_WARN');
5327 FEM_ENGINES_PKG.User_Message
5328 (p_app_name => 'FEM',
5329 p_msg_name => 'FEM_INTG_BAL_EFF_DATE_WARN');
5330 END IF; -- IF (pv_include_avg_bal = 'Y' ...
5331
5332 -- ------------------------------------------------------------
5333 -- 4.5. Validate the BSV's
5334 -- ------------------------------------------------------------
5335 IF (p_bsv_range_low IS NOT NULL AND p_bsv_range_high IS NULL) OR
5336 (p_bsv_range_low IS NULL AND p_bsv_range_high IS NOT NULL) THEN
5337
5338 FEM_ENGINES_PKG.Tech_Message
5339 (p_severity => pc_log_level_event,
5340 p_module => v_module,
5341 p_app_name => 'FEM',
5342 p_msg_name => 'FEM_INTG_BSV_ONE_NULL');
5343 FEM_ENGINES_PKG.User_Message
5344 (p_app_name => 'FEM',
5345 p_msg_name => 'FEM_INTG_BSV_ONE_NULL');
5346
5347 Raise OGLEngParam_FatalErr;
5348 END IF;
5349
5350 -- Start bug fix 5520680
5351 -- ------------------------------------------------------------
5352 -- we must ensure that no balances have been loaded
5353 -- for this Ledger/Output Dataset/Cal Period
5354 -- since snapshot mode is execution-once-only rules
5358
5355 -- ------------------------------------------------------------
5356 IF (pv_exec_mode = 'S') THEN
5357 BEGIN
5359 SELECT 'Y'
5360 INTO v_dummy_flag
5361 FROM DUAL
5362 WHERE EXISTS
5363 (SELECT 'Loaded'
5364 FROM FEM_DL_DIMENSIONS
5365 WHERE LEDGER_ID = pv_ledger_id
5366 AND EXISTS (SELECT 1
5367 FROM GL_PERIOD_STATUSES per
5368 WHERE per.APPLICATION_ID = 101
5369 AND per.LEDGER_ID = pv_ledger_id
5370 AND FEM_DL_DIMENSIONS.CAL_PERIOD_ID =
5371 FEM_DIMENSION_UTIL_PKG.Get_Cal_Period_ID( pv_ledger_id
5372 , 'OGL_'||per.PERIOD_TYPE
5373 , per.PERIOD_NUM
5374 , per.PERIOD_YEAR)
5375 AND per.EFFECTIVE_PERIOD_NUM BETWEEN pv_from_period_eff_num
5376 AND pv_to_period_eff_num)
5377 AND DATASET_CODE = pv_dataset_code
5378 AND SOURCE_SYSTEM_CODE = pv_gl_source_system_code
5379 AND TABLE_NAME = 'FEM_BALANCES');
5380
5381 EXCEPTION
5382 WHEN NO_DATA_FOUND THEN NULL;
5383
5384 END;
5385
5386 IF (v_dummy_flag = 'Y') THEN
5387
5388 FEM_ENGINES_PKG.Tech_Message
5389 (p_severity => pc_log_level_event,
5390 p_module => v_module,
5391 p_app_name => 'FEM',
5392 p_msg_name => 'FEM_INTG_SNAPSHOT_LOAD_ERR');
5393 FEM_ENGINES_PKG.User_Message
5394 (p_app_name => 'FEM',
5395 p_msg_name => 'FEM_INTG_SNAPSHOT_LOAD_ERR');
5396
5397 Raise OGLEngParam_FatalErr;
5398 END IF;
5399
5400 END IF;
5401 -- End bug fix 5520680
5402
5403 -- ------------------------------------------------------------
5404 -- 5. Populate FEM_INTG_EXEC_PARAMS_GT base on the balance type
5405 -- ------------------------------------------------------------
5406 IF (pv_ds_balance_type_cd = 'ACTUAL')
5407 THEN
5408 INSERT INTO FEM_INTG_EXEC_PARAMS_GT
5409 ( OUTPUT_DATASET_CODE
5410 , EFFECTIVE_PERIOD_NUM
5411 , PERIOD_NAME
5412 , CAL_PERIOD_ID
5413 , LOAD_METHOD_CODE
5414 , ERROR_CODE
5415 , NUM_OF_ROWS_SELECTED
5416 , NUM_OF_ROWS_POSTED
5417 )
5418 SELECT pv_dataset_code
5419 , per.EFFECTIVE_PERIOD_NUM
5420 , per.PERIOD_NAME
5421 , FEM_DIMENSION_UTIL_PKG.Get_Cal_Period_ID( pv_ledger_id
5422 , 'OGL_'||per.PERIOD_TYPE
5423 , per.PERIOD_NUM
5424 , per.PERIOD_YEAR)
5425 , pv_exec_mode
5426 , DECODE(per.CLOSING_STATUS
5427 , 'C', NULL
5428 , 'O', NULL
5429 , 'P', NULL
5430 , 'INVALID_PERIOD_STATUS')
5431 , 0
5432 , 0
5433 FROM GL_PERIOD_STATUSES per
5434 WHERE per.APPLICATION_ID = 101
5435 AND per.LEDGER_ID = pv_ledger_id
5436 AND per.EFFECTIVE_PERIOD_NUM BETWEEN pv_from_period_eff_num
5437 AND pv_to_period_eff_num;
5438
5439 ELSIF (pv_ds_balance_type_cd = 'BUDGET')
5440 THEN
5441 INSERT INTO FEM_INTG_EXEC_PARAMS_GT
5442 ( OUTPUT_DATASET_CODE
5443 , BUDGET_ID
5444 , EFFECTIVE_PERIOD_NUM
5445 , PERIOD_NAME
5446 , CAL_PERIOD_ID
5447 , LOAD_METHOD_CODE
5448 , ERROR_CODE
5449 , NUM_OF_ROWS_SELECTED
5450 , NUM_OF_ROWS_POSTED
5451 )
5452 SELECT bgetDS.OUTPUT_DATASET_CODE
5453 , bget.BUDGET_ID
5454 , per.EFFECTIVE_PERIOD_NUM
5455 , per.PERIOD_NAME
5456 , FEM_DIMENSION_UTIL_PKG.Get_Cal_Period_ID( pv_ledger_id
5457 , 'OGL_'||per.PERIOD_TYPE
5458 , per.PERIOD_NUM
5459 , per.PERIOD_YEAR)
5460 , pv_exec_mode
5461 -- Bug 4394404 hkaniven start - populate 'INVALID_PERIOD_STATUS' error
5462 -- code if period's period year greater than the latest opened period
5463 -- year of the Budget
5464 , DECODE(SIGN(gb.latest_opened_year - per.period_year)
5465 , -1, 'INVALID_PERIOD_STATUS'
5466 , NULL)
5467 -- Bug 4394404 hkaniven end - populate 'INVALID_PERIOD_STATUS' error
5468 -- code if period's period year greater than the latest opened period
5469 -- year of the Budget
5470 , 0
5471 , 0
5472 FROM GL_PERIOD_STATUSES per
5473 , FEM_INTG_BAL_DEF_BUDGTS bget
5477 , GL_BUDGETS gb
5474 , FEM_INTG_BUDGT_DS bgetDS
5475 -- Bug 4394404 hkaniven start - to get the latest opened year of each
5476 -- budget
5478 , GL_BUDGET_VERSIONS gbv
5479 -- Bug 4394404 hkaniven end - to get the latest opened year of each
5480 -- budget
5481 WHERE per.APPLICATION_ID = 101
5482 AND per.LEDGER_ID = pv_ledger_id
5483 AND per.EFFECTIVE_PERIOD_NUM BETWEEN pv_from_period_eff_num
5484 AND pv_to_period_eff_num
5485 AND bget.BAL_RULE_OBJ_DEF_ID = pv_rule_obj_def_id
5486 AND bgetDS.BUDGET_ID = bget.BUDGET_ID
5487 -- Bug 4394404 hkaniven start - to get the latest opened year of each
5488 -- budget
5489 AND gbv.budget_version_id = bget.budget_id
5490 AND gb.budget_name = gbv.budget_name;
5491 -- Bug 4394404 hkaniven end - to get the latest opened year of each
5492 -- budget
5493
5494 ELSE -- i.e. Encumbrance Types
5495 INSERT INTO FEM_INTG_EXEC_PARAMS_GT
5496 ( OUTPUT_DATASET_CODE
5497 , ENCUMBRANCE_TYPE_ID
5498 , EFFECTIVE_PERIOD_NUM
5499 , PERIOD_NAME
5500 , CAL_PERIOD_ID
5501 , LOAD_METHOD_CODE
5502 , ERROR_CODE
5503 , NUM_OF_ROWS_SELECTED
5504 , NUM_OF_ROWS_POSTED
5505 )
5506 SELECT encTypeDS.OUTPUT_DATASET_CODE
5507 , encType.ENCUMBRANCE_TYPE_ID
5508 , per.EFFECTIVE_PERIOD_NUM
5509 , per.PERIOD_NAME
5510 , FEM_DIMENSION_UTIL_PKG.Get_Cal_Period_ID( pv_ledger_id
5511 , 'OGL_'||per.PERIOD_TYPE
5512 , per.PERIOD_NUM
5513 , per.PERIOD_YEAR)
5514 , pv_exec_mode
5515 -- Bug 4394404 hkaniven start - populate 'INVALID_PERIOD_STATUS' error
5516 -- code if period's period year greater than the latest encumbrance year
5517 , DECODE(SIGN(glgr.latest_encumbrance_year - per.period_year)
5518 , -1, 'INVALID_PERIOD_STATUS'
5519 , NULL)
5520 -- Bug 4394404 hkaniven end - populate 'INVALID_PERIOD_STATUS' error
5521 -- code if period's period year greater than the latest encumbrance year
5522 , 0
5523 , 0
5524 FROM GL_PERIOD_STATUSES per
5525 , FEM_INTG_BAL_DEF_ENCS encType
5526 , FEM_INTG_ENC_TYPE_DS encTypeDS
5527 -- Bug 4394404 hkaniven start - to get latest encumbrance year
5528 , GL_LEDGERS glgr
5529 -- Bug 4394404 hkaniven end - to get latest encumbrance year
5530 WHERE per.APPLICATION_ID = 101
5531 AND per.LEDGER_ID = pv_ledger_id
5532 AND per.EFFECTIVE_PERIOD_NUM BETWEEN pv_from_period_eff_num
5533 AND pv_to_period_eff_num
5534 AND encType.BAL_RULE_OBJ_DEF_ID = pv_rule_obj_def_id
5535 AND encTypeDS.ENCUMBRANCE_TYPE_ID = encType.ENCUMBRANCE_TYPE_ID
5536 -- Bug 4394404 hkaniven start - to get latest encumbrance year
5537 AND glgr.ledger_id = pv_ledger_id;
5538 -- Bug 4394404 hkaniven end - to get latest encumbrance year
5539
5540 END IF; -- IF (pv_ds_balance_type_cd = 'ACTUAL')
5541
5542 -- Get the number of rows inserted and log it to FND_LOG
5543 pv_num_rows := SQL%ROWCOUNT;
5544 FEM_ENGINES_PKG.Tech_Message
5545 (p_severity => pc_log_level_statement,
5546 p_module => v_module,
5547 p_app_name => 'FEM',
5548 p_msg_name => 'FEM_GL_POST_216',
5549 p_token1 => 'NUM',
5550 p_value1 => TO_CHAR(pv_num_rows),
5554 IF (pv_num_rows = 0)
5551 p_token2 => 'TABLE',
5552 p_value2 => 'FEM_INTG_EXEC_PARAMS_GT');
5553
5555 THEN
5556 -- No rows are inserted. It can be invalid budget/encumbrance type setup.
5557 -- If it is Actual balance type, it's impossible for them to get 0 rows.
5558 IF (pv_ds_balance_type_cd = 'BUDGET')
5559 THEN
5560 FEM_ENGINES_PKG.Tech_Message
5561 (p_severity => pc_log_level_error,
5562 p_module => v_module,
5563 p_app_name => 'FEM',
5564 p_msg_name => 'FEM_INTG_BAL_BGT_SETUP_ERR');
5565 FEM_ENGINES_PKG.User_Message
5566 (p_app_name => 'FEM',
5567 p_msg_name => 'FEM_INTG_BAL_BGT_SETUP_ERR');
5568
5569 ELSE -- i.e. Encumbrance Type
5570 FEM_ENGINES_PKG.Tech_Message
5571 (p_severity => pc_log_level_error,
5572 p_module => v_module,
5573 p_app_name => 'FEM',
5574 p_msg_name => 'FEM_INTG_BAL_ECT_SETUP_ERR');
5575 FEM_ENGINES_PKG.User_Message
5576 (p_app_name => 'FEM',
5577 p_msg_name => 'FEM_INTG_BAL_ECT_SETUP_ERR');
5578
5579 END IF; -- IF (pv_ds_balance_type_cd = 'BUDGET')
5580
5581 Raise OGLEngParam_FatalErr;
5582 END IF; -- IF (pv_num_rows = 0)
5583
5584 -- For Actual Balance Type, if the balances should be loaded into the same
5585 -- dataset for the entire accounting year, populate the error code for those
5586 -- periods whose accounting year has been loaded into other datasets.
5587 IF (pv_ds_balance_type_cd = 'ACTUAL')
5588 THEN
5589 -- The error OTHER_DS_LOADED will override other errors codes
5590 UPDATE FEM_INTG_EXEC_PARAMS_GT gt
5591 SET ERROR_CODE = 'OTHER_DS_LOADED'
5592 WHERE EFFECTIVE_PERIOD_NUM IN
5593 (SELECT DISTINCT per.EFFECTIVE_PERIOD_NUM
5594 FROM FEM_DL_DIMENSIONS dl
5595 , FEM_CAL_PERIODS_ATTR year
5596 , FEM_DIM_ATTR_VERSIONS_B yearV
5597 , GL_PERIOD_STATUSES per
5598 WHERE dl.LEDGER_ID = pv_ledger_id
5599 AND dl.DATASET_CODE <> pv_dataset_code
5600 AND dl.SOURCE_SYSTEM_CODE = pv_gl_source_system_code
5601 AND dl.TABLE_NAME = 'FEM_BALANCES'
5602 -- Bug fix 4335649: Change to check ACTUAL balance type only
5603 AND dl.BALANCE_TYPE_CODE = 'ACTUAL'
5604 AND year.CAL_PERIOD_ID = dl.CAL_PERIOD_ID
5605 AND year.ATTRIBUTE_ID =
5606 (SELECT ATTRIBUTE_ID
5607 FROM FEM_DIM_ATTRIBUTES_B
5608 WHERE ATTRIBUTE_VARCHAR_LABEL = 'ACCOUNTING_YEAR')
5609 AND year.ATTRIBUTE_ID = yearV.ATTRIBUTE_ID
5610 AND year.VERSION_ID = yearV.VERSION_ID
5611 AND yearV.DEFAULT_VERSION_FLAG = 'Y'
5612 AND year.NUMBER_ASSIGN_VALUE = per.PERIOD_YEAR
5613 AND per.APPLICATION_ID = 101
5614 AND per.LEDGER_ID = dl.LEDGER_ID
5615 AND per.EFFECTIVE_PERIOD_NUM BETWEEN pv_from_period_eff_num
5616 AND pv_to_period_eff_num);
5617
5618 -- Log the number of rows updated in FEM_INTG_EXEC_PARAMS_GT
5619 FEM_ENGINES_PKG.Tech_Message
5620 (p_severity => pc_log_level_statement,
5621 p_module => v_module,
5622 p_app_name => 'FEM',
5623 p_msg_name => 'FEM_GL_POST_217',
5624 p_token1 => 'NUM',
5625 p_value1 => TO_CHAR(SQL%ROWCOUNT),
5626 p_token2 => 'TABLE',
5627 p_value2 => 'FEM_INTG_EXEC_PARAMS_GT');
5628
5632 UPDATE FEM_INTG_EXEC_PARAMS_GT
5629 END IF; -- IF (pv_ds_balance_type_cd = 'ACTUAL')
5630
5631 -- For peirods not mapped to the FEM Cal Periods, update their error codes
5633 SET ERROR_CODE = 'PERIOD_NOT_MAPPED'
5634 WHERE ERROR_CODE IS NULL
5635 AND CAL_PERIOD_ID = -1;
5636
5637 -- Set the Generate Report Flag to 'Y' i.e. indicating report should be
5638 -- generated when erroring out after this point
5639 x_generate_report_flag := 'Y';
5640
5641 -- Log the number of rows updated in FEM_INTG_EXEC_PARAMS_GT
5642 FEM_ENGINES_PKG.Tech_Message
5643 (p_severity => pc_log_level_statement,
5644 p_module => v_module,
5645 p_app_name => 'FEM',
5646 p_msg_name => 'FEM_GL_POST_217',
5647 p_token1 => 'NUM',
5648 p_value1 => TO_CHAR(SQL%ROWCOUNT),
5649 p_token2 => 'TABLE',
5650 p_value2 => 'FEM_INTG_EXEC_PARAMS_GT');
5651
5652 -- Find the min and max valid period effective numbers
5653 SELECT NVL(min(EFFECTIVE_PERIOD_NUM), -1)
5654 , NVL(max(EFFECTIVE_PERIOD_NUM), -1)
5655 INTO pv_min_valid_period_eff_num
5656 , pv_max_valid_period_eff_num
5657 FROM FEM_INTG_EXEC_PARAMS_GT
5658 WHERE ERROR_CODE IS NULL;
5659
5660 FEM_ENGINES_PKG.Tech_Message
5661 (p_severity => pc_log_level_statement,
5662 p_module => v_module,
5663 p_app_name => 'FEM',
5664 p_msg_name => 'FEM_GL_POST_204',
5665 p_token1 => 'VAR_NAME',
5666 p_value1 => 'pv_min_valid_period_eff_num',
5667 p_token2 => 'VAR_VAL',
5668 p_value2 => TO_CHAR(pv_min_valid_period_eff_num));
5669
5670 FEM_ENGINES_PKG.Tech_Message
5671 (p_severity => pc_log_level_statement,
5672 p_module => v_module,
5673 p_app_name => 'FEM',
5674 p_msg_name => 'FEM_GL_POST_204',
5675 p_token1 => 'VAR_NAME',
5676 p_value1 => 'pv_max_valid_period_eff_num',
5677 p_token2 => 'VAR_VAL',
5678 p_value2 => TO_CHAR(pv_max_valid_period_eff_num));
5679
5680 -- Bug 4394404 hkaniven start - Get the no of valid rows in
5681 -- FEM_INTG_EXEC_PARAMS_GT if the Balance type is 'Budget'
5682 IF (pv_ds_balance_type_cd = 'BUDGET') THEN
5683 SELECT COUNT(*)
5684 INTO pv_num_rows_valid
5685 FROM FEM_INTG_EXEC_PARAMS_GT
5686 WHERE ERROR_CODE IS NULL;
5687 END IF;
5688 -- Bug 4394404 hkaniven end - Get the no of valid rows in
5689 -- FEM_INTG_EXEC_PARAMS_GT if the Balance type is 'Budget'
5690
5691 -- Check if there are any valid periods for processing
5692 IF (pv_min_valid_period_eff_num = -1)
5693 THEN
5694 -- All periods are invalid, so errors out
5695 -- Bug fix 4170124: The message is changed and doesn't have any tockens.
5696 FEM_ENGINES_PKG.Tech_Message
5697 (p_severity => pc_log_level_error,
5698 p_module => v_module,
5699 p_app_name => 'FEM',
5700 p_msg_name => 'FEM_INTG_BAL_NO_VALID_PER');
5701 FEM_ENGINES_PKG.User_Message
5702 (p_app_name => 'FEM',
5703 p_msg_name => 'FEM_INTG_BAL_NO_VALID_PER');
5704
5705 Raise OGLEngParam_FatalErr;
5706
5707 ELSIF ((pv_min_valid_period_eff_num <> pv_from_period_eff_num
5708 OR pv_max_valid_period_eff_num <> pv_to_period_eff_num)
5709
5710 -- Bug 4394404 hkaniven start - End the program with a warning
5711 -- if the Balance type is 'Budget' and if any of the rows in
5712 -- FEM_INTG_EXEC_PARAMS_GT is not valid
5713 OR
5714 (pv_ds_balance_type_cd = 'BUDGET'
5715 AND pv_num_rows <> pv_num_rows_valid))
5716 -- Bug 4394404 hkaniven end - End the program with a warning
5717 -- if the Balance type is 'Budget' and if any of the rows in
5718 -- FEM_INTG_EXEC_PARAMS_GT is not valid
5719
5720 THEN
5721 -- At least one but not all peroid are invalid, so set the return code to
5722 -- 1 i.e. indicating warning
5723 x_completion_code := 1;
5724
5725 -- Log a warning message to FND_LOG as well as the concurrent request log
5726 -- Bug fix 4170124: The message is changed and doesn't have any tockens.
5727 FEM_ENGINES_PKG.Tech_Message
5728 (p_severity => pc_log_level_exception,
5729 p_module => v_module,
5730 p_app_name => 'FEM',
5731 p_msg_name => 'FEM_INTG_BAL_INVALID_PER');
5732 FEM_ENGINES_PKG.User_Message
5733 (p_app_name => 'FEM',
5734 p_msg_name => 'FEM_INTG_BAL_INVALID_PER');
5735
5736 END IF; -- IF (pv_min_valid_period_eff_num = -1)
5737
5738 -- ---------------------------------
5739 -- 6. Cache the Maximum Delta Run ID
5740 -- ---------------------------------
5741 SELECT NVL(MAX(DELTA_RUN_ID), 0)
5742 INTO pv_max_delta_run_id
5743 FROM GL_BALANCES_DELTA;
5744
5745 FEM_ENGINES_PKG.Tech_Message
5746 (p_severity => pc_log_level_statement,
5747 p_module => v_module,
5748 p_app_name => 'FEM',
5749 p_msg_name => 'FEM_GL_POST_204',
5750 p_token1 => 'VAR_NAME',
5751 p_value1 => 'pv_max_delta_run_id',
5752 p_token2 => 'VAR_VAL',
5753 p_value2 => TO_CHAR(pv_max_delta_run_id));
5754
5755 -- ----------------------------
5756 -- 7. Exit with success/warning
5757 -- ----------------------------
5758
5759 -- Log the function exit time to FND_LOG (successful completion)
5763 p_app_name => 'FEM',
5760 FEM_ENGINES_PKG.Tech_Message
5761 (p_severity => pc_log_level_procedure,
5762 p_module => v_module,
5764 p_msg_name => 'FEM_GL_POST_202',
5765 p_token1 => 'FUNC_NAME',
5766 p_value1 => v_func_name,
5767 p_token2 => 'TIME',
5768 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5769
5770 EXCEPTION
5771 WHEN Invalid_Object_Def_ID THEN
5772 -- <<< Balances rule definition not found >>>
5773 x_completion_code := 2; -- Indicating fatal error
5774
5775 FEM_ENGINES_PKG.Tech_Message
5776 (p_severity => pc_log_level_error,
5777 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5778 p_app_name => 'FEM',
5779 p_msg_name => 'FEM_GL_POST_001',
5780 p_token1 => 'DIMENSION_NAME',
5781 p_value1 => 'FEM_OBJECT_DEF_ID_TXT',
5782 p_trans1 => 'Y');
5783 FEM_ENGINES_PKG.User_Message
5784 (p_app_name => 'FEM',
5785 p_msg_name => 'FEM_GL_POST_001',
5786 p_token1 => 'DIMENSION_NAME',
5787 p_value1 => 'FEM_OBJECT_DEF_ID_TXT',
5788 p_trans1 => 'Y');
5789
5790 -- Log the function exit time to FND_LOG (with error)
5791 FEM_ENGINES_PKG.Tech_Message
5792 (p_severity => pc_log_level_procedure,
5793 p_module => v_module,
5794 p_app_name => 'FEM',
5795 p_msg_name => 'FEM_GL_POST_203',
5796 p_token1 => 'FUNC_NAME',
5797 p_value1 => v_func_name,
5798 p_token2 => 'TIME',
5799 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5800
5801 WHEN Invalid_Object_ID THEN
5802 -- <<< Balances rule not found or wrong object type >>>
5803 x_completion_code := 2; -- Indicating fatal error
5804
5805 FEM_ENGINES_PKG.Tech_Message
5806 (p_severity => pc_log_level_error,
5807 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5808 p_app_name => 'FEM',
5809 p_msg_name => 'FEM_INTG_BAL_INVALID_RULE');
5810 FEM_ENGINES_PKG.User_Message
5811 (p_app_name => 'FEM',
5812 p_msg_name => 'FEM_INTG_BAL_INVALID_RULE');
5813
5814 -- Log the function exit time to FND_LOG (with error)
5815 FEM_ENGINES_PKG.Tech_Message
5816 (p_severity => pc_log_level_procedure,
5817 p_module => v_module,
5818 p_app_name => 'FEM',
5819 p_msg_name => 'FEM_GL_POST_203',
5820 p_token1 => 'FUNC_NAME',
5821 p_value1 => v_func_name,
5822 p_token2 => 'TIME',
5823 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5824
5825 WHEN User_Not_Allowed THEN
5826 -- <<< User not allowed to execute >>>
5827 x_completion_code := 2; -- Indicating fatal error
5828
5829 FEM_ENGINES_PKG.Tech_Message
5830 (p_severity => pc_log_level_error,
5831 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5832 p_app_name => 'FEM',
5833 p_msg_name => 'FEM_GL_POST_011');
5834 FEM_ENGINES_PKG.User_Message
5835 (p_app_name => 'FEM',
5836 p_msg_name => 'FEM_GL_POST_011');
5837
5838 -- Log the function exit time to FND_LOG (with error)
5839 FEM_ENGINES_PKG.Tech_Message
5840 (p_severity => pc_log_level_procedure,
5841 p_module => v_module,
5842 p_app_name => 'FEM',
5843 p_msg_name => 'FEM_GL_POST_203',
5844 p_token1 => 'FUNC_NAME',
5845 p_value1 => v_func_name,
5846 p_token2 => 'TIME',
5847 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5848
5849 WHEN Invalid_Ledger_ID THEN
5850 -- <<< Ledger not found or ledger attribute not set >>>
5851 x_completion_code := 2; -- Indicating fatal error
5852
5853 -- Get the name for Ledger dimension
5854 v_dim_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
5855 (p_dim_id => pv_ledger_dim_id);
5856
5857 IF (v_dim_name IS NULL)
5858 THEN
5859 v_dim_name := 'Ledger';
5860 END IF;
5861
5862 IF pv_attr_label IS NOT NULL
5863 THEN
5864 -- Failed to retrieve ledger attribute
5865 -- Get the attribute name
5866 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
5867 (p_dim_id => pv_ledger_dim_id,
5868 p_attr_label => pv_attr_label);
5869
5870 IF v_attr_name IS NULL
5871 THEN
5872 v_attr_name := pv_attr_label;
5873 END IF;
5874
5875 FEM_ENGINES_PKG.Tech_Message
5876 (p_severity => pc_log_level_error,
5877 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5878 p_app_name => 'FEM',
5879 p_msg_name => 'FEM_INTG_BAL_LG_ATTR_ERR',
5880 p_token1 => 'ATTR_NAME',
5881 p_value1 => v_attr_name,
5882 p_token2 => 'LEDGER_NAME',
5883 p_value2 => pv_ledger_name,
5884 p_token3 => 'LEDGER_DIM',
5885 p_value3 => v_dim_name);
5886 FEM_ENGINES_PKG.User_Message
5887 (p_app_name => 'FEM',
5888 p_msg_name => 'FEM_INTG_BAL_LG_ATTR_ERR',
5889 p_token1 => 'ATTR_NAME',
5890 p_value1 => v_attr_name,
5891 p_token2 => 'LEDGER_NAME',
5895
5892 p_value2 => pv_ledger_name,
5893 p_token3 => 'LEDGER_DIM',
5894 p_value3 => v_dim_name);
5896 ELSE
5897 -- The Ledger cannot be found in FEM Ledger Dimension
5898 FEM_ENGINES_PKG.Tech_Message
5899 (p_severity => pc_log_level_error,
5900 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5901 p_app_name => 'FEM',
5902 p_msg_name => 'FEM_INTG_BAL_LG_ERR',
5903 p_token1 => 'LEDGER_NAME',
5904 p_value1 => pv_ledger_name,
5905 p_token2 => 'LEDGER_DIM',
5906 p_value2 => v_dim_name);
5907 FEM_ENGINES_PKG.User_Message
5908 (p_app_name => 'FEM',
5909 p_msg_name => 'FEM_INTG_BAL_LG_ERR',
5910 p_token1 => 'LEDGER_NAME',
5911 p_value1 => pv_ledger_name,
5912 p_token2 => 'LEDGER_DIM',
5913 p_value2 => v_dim_name);
5914
5915 END IF; -- IF pv_attr_label IS NOT NULL
5916
5917 -- Log the function exit time to FND_LOG (with error)
5918 FEM_ENGINES_PKG.Tech_Message
5919 (p_severity => pc_log_level_procedure,
5920 p_module => v_module,
5921 p_app_name => 'FEM',
5922 p_msg_name => 'FEM_GL_POST_203',
5923 p_token1 => 'FUNC_NAME',
5924 p_value1 => v_func_name,
5925 p_token2 => 'TIME',
5926 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5927
5928 WHEN OGLEngParam_FatalErr THEN
5929 -- <<< Fatal error >>>
5930 x_completion_code := 2; -- Indicating fatal error
5931
5932 -- The error messages were printed, so just need to log the function exit
5933 -- time to FND_LOG (with error)
5934 FEM_ENGINES_PKG.Tech_Message
5935 (p_severity => pc_log_level_procedure,
5936 p_module => v_module,
5937 p_app_name => 'FEM',
5938 p_msg_name => 'FEM_GL_POST_203',
5939 p_token1 => 'FUNC_NAME',
5940 p_value1 => v_func_name,
5941 p_token2 => 'TIME',
5942 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5943
5944 WHEN Others THEN
5945 -- <<< Unexpected database exceptions >>>
5946 x_completion_code := 2; -- Indicating fatal error
5947
5948 IF pv_proc_name = 'validate_ogl_eng_parameters'
5949 THEN
5950 pv_sqlerrm := SQLERRM;
5951 pv_callstack := dbms_utility.format_call_stack;
5952 END IF;
5953
5954 -- Log the call stack and the Oracle error message to
5955 -- FND_LOG with the "unexpected exception" severity level.
5956 FEM_ENGINES_PKG.Tech_Message
5957 (p_severity => pc_log_level_unexpected,
5958 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5959 p_msg_text => pv_sqlerrm);
5960 FEM_ENGINES_PKG.Tech_Message
5961 (p_severity => pc_log_level_unexpected,
5962 p_module => 'fem.plsql.fem_gl_post_process_pkg.' || pv_proc_name,
5963 p_msg_text => pv_callstack);
5964
5965 -- Log the Oracle error message to the Concurrent Request Log
5966 FEM_ENGINES_PKG.User_Message
5967 (p_app_name => 'FEM',
5968 p_msg_text => pv_sqlerrm);
5969
5970 -- Log the function exit time to FND_LOG (with error)
5971 FEM_ENGINES_PKG.Tech_Message
5972 (p_severity => pc_log_level_procedure,
5973 p_module => v_module,
5974 p_app_name => 'FEM',
5975 p_msg_name => 'FEM_GL_POST_203',
5976 p_token1 => 'FUNC_NAME',
5977 p_value1 => v_func_name,
5978 p_token2 => 'TIME',
5979 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
5980
5981 END Validate_OGL_Eng_Parameters;
5982 -- =======================================================================
5983
5984 -- =======================================================================
5985 PROCEDURE Register_OGL_Process_Execution
5986 (x_completion_code OUT NOCOPY NUMBER) IS
5987 -- =======================================================================
5988 -- Purpose
5989 -- Validate the FEM-OGL Integration Balances Rule execution and perform
5990 -- initial process execution registration in FEM processing architecture
5991 -- History
5992 -- 11-29-04 L Poon Created
5993 -- 02-07-05 L Poon Bug fix 4170124: The period gap check is changed to
5994 -- maintain at ledger level for actual balance type
5995 -- instead of ledger/dataset level
5996 -- Arguments
5997 -- x_completion_code returns 0 for success, 1 for warning, 2 for failure.
5998 -- Notes
5999 -- Called by FEM_INTG_BAL_RULE_ENG_PKG.Main before loading balances
6000 -- =======================================================================
6001
6002 v_module VARCHAR2(100);
6003 v_func_name VARCHAR2(80);
6004
6005 v_msg_count NUMBER;
6006 v_msg_data VARCHAR2(2000);
6007 i PLS_INTEGER;
6008 v_return_status VARCHAR2(1);
6009
6010 CURSOR ds_cur IS
6011 SELECT DISTINCT OUTPUT_DATASET_CODE
6012 FROM FEM_INTG_EXEC_PARAMS_GT
6013 WHERE ERROR_CODE IS NULL;
6014
6015 -- Bug fix 4285337: Get the end date for each period in order to populate
6016 -- it in FEM_PL_REQUESTS.EFFECTIVE_DATE
6017 CURSOR cp_cur (p_dataset_code IN VARCHAR2) IS
6018 SELECT gt.CAL_PERIOD_ID
6022 , per.END_DATE
6019 , gt.LOAD_METHOD_CODE
6020 , gt.PERIOD_NAME
6021 , gt.EFFECTIVE_PERIOD_NUM
6023 FROM FEM_INTG_EXEC_PARAMS_GT gt
6024 , GL_PERIOD_STATUSES per
6025 WHERE gt.ERROR_CODE IS NULL
6026 AND gt.OUTPUT_DATASET_CODE = p_dataset_code
6027 AND per.PERIOD_NAME = gt.PERIOD_NAME
6028 AND per.APPLICATION_ID = 101
6029 AND per.LEDGER_ID = pv_ledger_id
6030 ORDER BY gt.EFFECTIVE_PERIOD_NUM;
6031
6032 CURSOR req_cur IS
6033 SELECT REQUEST_ID
6034 FROM FEM_INTG_EXEC_PARAMS_GT
6035 WHERE ERROR_CODE IS NULL
6036 AND REQUEST_ID IS NOT NULL;
6037
6038 v_first_load_cal_per_id fem_pl_requests.cal_period_id%TYPE;
6039 v_last_load_cal_per_id fem_pl_requests.cal_period_id%TYPE;
6040 v_cal_per_name fem_cal_periods_tl.cal_period_name%TYPE;
6041 v_cal_per_num fem_cal_periods_attr.number_assign_value%TYPE;
6042 v_cal_per_year fem_cal_periods_attr.number_assign_value%TYPE;
6043 v_first_load_eff_per_num gl_period_statuses.effective_period_num%TYPE;
6044 v_last_load_eff_per_num gl_period_statuses.effective_period_num%TYPE;
6045 v_first_reg_eff_per_num gl_period_statuses.effective_period_num%TYPE;
6046 v_last_reg_eff_per_num gl_period_statuses.effective_period_num%TYPE;
6047 v_min_valid_eff_per_num gl_period_statuses.effective_period_num%TYPE;
6048 v_max_valid_eff_per_num gl_period_statuses.effective_period_num%TYPE;
6049 v_any_period_gap VARCHAR2(1);
6050
6051 v_load_method fem_intg_exec_params_gt.load_method_code%TYPE;
6052 v_dummy_flag VARCHAR2(1);
6053 v_req_id NUMBER;
6054
6055 v_dim_name fem_dimensions_tl.dimension_name%TYPE;
6056 v_attr_name fem_dim_attributes_tl.attribute_name%TYPE;
6057
6058 OGLRegProc_FatalErr EXCEPTION;
6059
6060 BEGIN
6061 v_module := 'fem.plsql.fem_gl_post_process_pkg.register_ogl_process_execution';
6062 v_func_name := 'FEM_GL_POST_PROCESS_PKG.Register_OGL_Process_Execution';
6063
6064 -- Log the function entry time to FND_LOG
6065 FEM_ENGINES_PKG.Tech_Message
6066 (p_severity => pc_log_level_procedure,
6067 p_module => v_module,
6068 p_app_name => 'FEM',
6069 p_msg_name => 'FEM_GL_POST_201',
6070 p_token1 => 'FUNC_NAME',
6071 p_value1 => v_func_name,
6072 p_token2 => 'TIME',
6073 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
6074
6075 -- -------------------------------------------------------
6076 -- Loop for each Output Dataset in FEM_INTG_EXEC_PARAMS_GT
6077 -- -------------------------------------------------------
6078 FOR v_ds IN ds_cur LOOP
6079 -- Log the current Dataset Code
6080 FEM_ENGINES_PKG.Tech_Message
6081 (p_severity => pc_log_level_statement,
6082 p_module => v_module,
6083 p_app_name => 'FEM',
6084 p_msg_name => 'FEM_GL_POST_204',
6085 p_token1 => 'VAR_NAME',
6086 p_value1 => 'v_ds.output_dataset_code',
6087 p_token2 => 'VAR_VAL',
6088 p_value2 => v_ds.output_dataset_code);
6089
6090 -- Initailze the local variables for this Dataset
6091 v_cal_per_name := '';
6092 v_first_load_eff_per_num := -1;
6093 v_last_load_eff_per_num := -1;
6094 v_first_reg_eff_per_num := -1;
6095 v_last_reg_eff_per_num := -1;
6096 v_any_period_gap := 'N';
6097
6098 -- Get the first and last valid periods for this Dataset
6099 SELECT NVL(min(EFFECTIVE_PERIOD_NUM), -1)
6100 , NVL(max(EFFECTIVE_PERIOD_NUM), -1)
6101 INTO v_min_valid_eff_per_num,
6102 v_max_valid_eff_per_num
6103 FROM FEM_INTG_EXEC_PARAMS_GT
6104 WHERE ERROR_CODE IS NULL
6105 AND OUTPUT_DATASET_CODE = v_ds.output_dataset_code;
6106
6107 FEM_ENGINES_PKG.Tech_Message
6108 (p_severity => pc_log_level_statement,
6109 p_module => v_module,
6110 p_app_name => 'FEM',
6111 p_msg_name => 'FEM_GL_POST_204',
6112 p_token1 => 'VAR_NAME',
6113 p_value1 => 'v_min_valid_eff_per_num',
6114 p_token2 => 'VAR_VAL',
6115 p_value2 => TO_CHAR(v_min_valid_eff_per_num));
6116 FEM_ENGINES_PKG.Tech_Message
6117 (p_severity => pc_log_level_statement,
6118 p_module => v_module,
6119 p_app_name => 'FEM',
6120 p_msg_name => 'FEM_GL_POST_204',
6121 p_token1 => 'VAR_NAME',
6122 p_value1 => 'v_max_valid_eff_per_num',
6123 p_token2 => 'VAR_VAL',
6124 p_value2 => TO_CHAR(v_max_valid_eff_per_num));
6125
6126 -- Only process this Dataset if at least one valid periods exist
6127 IF (v_min_valid_eff_per_num <> -1)
6128 THEN
6129
6130 -- -------------------------------------------------------------------
6131 -- 1. Initialize the First and Last Load Cal Period ID for this Ledger
6132 -- Actual Balances or this Budget/Encumbrance Type Output Dataset
6133 -- -------------------------------------------------------------------
6134
6135 -- If it is Actual balance type, get the first and last load cal periods
6136 -- of all Actual Balances loads for this ledger regardless the dataset.
6137 -- For other balance types, get these for this Ledger/Dataset.
6138 SELECT NVL(min(CAL_PERIOD_ID), -1)
6139 , NVL(max(CAL_PERIOD_ID), -1)
6143 -- 04-26-05: Changed to check balance_type_code only when the dataset
6140 INTO v_first_load_cal_per_id, v_last_load_cal_per_id
6141 FROM FEM_DL_DIMENSIONS
6142 WHERE LEDGER_ID = pv_ledger_id
6144 -- balance type is ACTUAL
6145 AND ( (pv_ds_balance_type_cd = 'ACTUAL'
6146 AND BALANCE_TYPE_CODE = pv_ds_balance_type_cd)
6147 OR (DATASET_CODE = v_ds.output_dataset_code))
6148 AND SOURCE_SYSTEM_CODE = pv_gl_source_system_code
6149 AND TABLE_NAME = 'FEM_BALANCES';
6150
6151 FEM_ENGINES_PKG.Tech_Message
6152 (p_severity => pc_log_level_statement,
6153 p_module => v_module,
6154 p_app_name => 'FEM',
6155 p_msg_name => 'FEM_GL_POST_204',
6156 p_token1 => 'VAR_NAME',
6157 p_value1 => 'v_first_load_cal_per_id',
6158 p_token2 => 'VAR_VAL',
6159 p_value2 => TO_CHAR(v_first_load_cal_per_id));
6160
6161 FEM_ENGINES_PKG.Tech_Message
6162 (p_severity => pc_log_level_statement,
6163 p_module => v_module,
6164 p_app_name => 'FEM',
6165 p_msg_name => 'FEM_GL_POST_204',
6166 p_token1 => 'VAR_NAME',
6167 p_value1 => 'v_last_load_cal_per_id',
6168 p_token2 => 'VAR_VAL',
6169 p_value2 => TO_CHAR(v_last_load_cal_per_id));
6170
6171 IF (v_first_load_cal_per_id <> -1)
6172 THEN
6173 -- The First Load Cal Period exists for this Dataset, so find its
6174 -- name, GL period number and period year
6175
6176 -- Find the Cal Period Name
6177 SELECT CAL_PERIOD_NAME
6178 INTO v_cal_per_name
6179 FROM FEM_CAL_PERIODS_TL
6180 WHERE CAL_PERIOD_ID = v_first_load_cal_per_id
6181 AND LANGUAGE = USERENV('LANG');
6182
6183 BEGIN
6184 -- Retrieve the First Load Cal Period GL_PERIOD_NUM attribute
6185 fem_dimension_util_pkg.get_dim_attr_id_ver_id
6186 (x_err_code => pv_API_return_code,
6187 x_attr_id => pv_dim_attr_id,
6188 x_ver_id => pv_dim_attr_ver_id,
6189 p_dim_id => pv_cal_per_dim_id,
6190 p_attr_label => 'GL_PERIOD_NUM');
6191
6192 IF pv_API_return_code > 0
6193 THEN
6194 -- Fail to find the attribute version
6195 FEM_ENGINES_PKG.Tech_Message
6196 (p_severity => pc_log_level_exception,
6197 p_module => v_module,
6198 p_msg_text => 'raising Invalid_Cal_Period_ID when getting period num');
6199 pv_attr_label := 'GL_PERIOD_NUM';
6200 RAISE Invalid_Cal_Period_ID;
6201 END IF;
6202
6203 SELECT number_assign_value
6204 INTO v_cal_per_num
6205 FROM fem_cal_periods_attr
6206 WHERE attribute_id = pv_dim_attr_id
6207 AND version_id = pv_dim_attr_ver_id
6208 AND cal_period_id = v_first_load_cal_per_id;
6209
6210 FEM_ENGINES_PKG.Tech_Message
6211 (p_severity => pc_log_level_statement,
6212 p_module => v_module,
6213 p_app_name => 'FEM',
6214 p_msg_name => 'FEM_GL_POST_204',
6215 p_token1 => 'VAR_NAME',
6216 p_value1 => 'v_cal_per_num',
6217 p_token2 => 'VAR_VAL',
6218 p_value2 => TO_CHAR(v_cal_per_num));
6219
6220 EXCEPTION
6221 WHEN NO_DATA_FOUND THEN
6222 -- Fail to retrieve the First Load Cal Peroid Number
6223 FEM_ENGINES_PKG.Tech_Message
6224 (p_severity => pc_log_level_exception,
6225 p_module => v_module,
6226 p_msg_text => 'raising Invalid_Cal_Period_ID when getting period num');
6227 pv_attr_label := 'GL_PERIOD_NUM';
6228 RAISE Invalid_Cal_Period_ID;
6229 END;
6230
6231 BEGIN
6232 -- Retrieve the First Load Cal Period ACCOUNTING_YEAR attribute
6233 fem_dimension_util_pkg.get_dim_attr_id_ver_id
6234 (x_err_code => pv_API_return_code,
6235 x_attr_id => pv_dim_attr_id,
6236 x_ver_id => pv_dim_attr_ver_id,
6237 p_dim_id => pv_cal_per_dim_id,
6238 p_attr_label => 'ACCOUNTING_YEAR');
6239
6240 IF pv_API_return_code > 0
6241 THEN
6242 -- Fail to find the attribute version
6243 FEM_ENGINES_PKG.Tech_Message
6244 (p_severity => pc_log_level_exception,
6245 p_module => v_module,
6246 p_msg_text => 'raising Invalid_Cal_Period_ID when getting year');
6247 pv_attr_label := 'ACCOUNTING_YEAR';
6248 RAISE Invalid_Cal_Period_ID;
6249 END IF;
6250
6251 SELECT number_assign_value
6252 INTO v_cal_per_year
6253 FROM fem_cal_periods_attr
6254 WHERE attribute_id = pv_dim_attr_id
6255 AND version_id = pv_dim_attr_ver_id
6256 AND cal_period_id = v_first_load_cal_per_id;
6257
6258 FEM_ENGINES_PKG.Tech_Message
6259 (p_severity => pc_log_level_statement,
6260 p_module => v_module,
6261 p_app_name => 'FEM',
6262 p_msg_name => 'FEM_GL_POST_204',
6266 p_value2 => TO_CHAR(v_cal_per_year));
6263 p_token1 => 'VAR_NAME',
6264 p_value1 => 'v_cal_per_year',
6265 p_token2 => 'VAR_VAL',
6267
6268 EXCEPTION
6269 WHEN NO_DATA_FOUND THEN
6270 -- Fail to retrieve the First Load Cal Period Accounting Year
6271 FEM_ENGINES_PKG.Tech_Message
6272 (p_severity => pc_log_level_exception,
6273 p_module => v_module,
6274 p_msg_text => 'raising Invalid_Cal_Period_ID when getting year');
6275 pv_attr_label := 'ACCOUNTING_YEAR';
6276 RAISE Invalid_Cal_Period_ID;
6277 END;
6278
6279 -- Find the corresponding GL Effective Period Number
6280 SELECT effective_period_num
6281 INTO v_first_load_eff_per_num
6282 FROM GL_PERIOD_STATUSES
6283 WHERE APPLICATION_ID = 101
6284 AND LEDGER_ID = pv_ledger_id
6285 AND PERIOD_YEAR = v_cal_per_year
6286 AND PERIOD_NUM = v_cal_per_num;
6287
6288 FEM_ENGINES_PKG.Tech_Message
6289 (p_severity => pc_log_level_statement,
6290 p_module => v_module,
6291 p_app_name => 'FEM',
6292 p_msg_name => 'FEM_GL_POST_204',
6293 p_token1 => 'VAR_NAME',
6294 p_value1 => 'v_first_load_eff_per_num',
6295 p_token2 => 'VAR_VAL',
6296 p_value2 => TO_CHAR(v_first_load_eff_per_num));
6297
6298 IF (v_last_load_cal_per_id <> v_first_load_cal_per_id)
6299 THEN
6300 -- The Last Load Cal Period is different with the First Load Cal
6301 -- Period, so find its name, GL period number and period year
6302
6303 -- Find the Cal Period Name
6304 SELECT CAL_PERIOD_NAME
6305 INTO v_cal_per_name
6306 FROM FEM_CAL_PERIODS_TL
6307 WHERE CAL_PERIOD_ID = v_last_load_cal_per_id
6308 AND LANGUAGE = USERENV('LANG');
6309
6310 BEGIN
6311 -- Retrieve the Last Load Cal Period GL_PERIOD_NUM attribute
6312 fem_dimension_util_pkg.get_dim_attr_id_ver_id
6313 (x_err_code => pv_API_return_code,
6314 x_attr_id => pv_dim_attr_id,
6315 x_ver_id => pv_dim_attr_ver_id,
6316 p_dim_id => pv_cal_per_dim_id,
6317 p_attr_label => 'GL_PERIOD_NUM');
6318
6319 IF pv_API_return_code > 0
6320 THEN
6321 -- Fail to find the attribute version
6322 FEM_ENGINES_PKG.Tech_Message
6323 (p_severity => pc_log_level_exception,
6324 p_module => v_module,
6325 p_msg_text => 'raising Invalid_Cal_Period_ID when getting period num');
6326 pv_attr_label := 'GL_PERIOD_NUM';
6327 RAISE Invalid_Cal_Period_ID;
6328 END IF;
6329
6330 SELECT number_assign_value
6331 INTO v_cal_per_num
6332 FROM fem_cal_periods_attr
6333 WHERE attribute_id = pv_dim_attr_id
6334 AND version_id = pv_dim_attr_ver_id
6335 AND cal_period_id = v_last_load_cal_per_id;
6336
6337 FEM_ENGINES_PKG.Tech_Message
6338 (p_severity => pc_log_level_statement,
6339 p_module => v_module,
6340 p_app_name => 'FEM',
6341 p_msg_name => 'FEM_GL_POST_204',
6342 p_token1 => 'VAR_NAME',
6343 p_value1 => 'v_cal_per_num',
6344 p_token2 => 'VAR_VAL',
6345 p_value2 => TO_CHAR(v_cal_per_num));
6346
6347 EXCEPTION
6348 WHEN NO_DATA_FOUND THEN
6349 -- Fail to retrieve the Last Load Cal Peroid Number
6350 FEM_ENGINES_PKG.Tech_Message
6351 (p_severity => pc_log_level_exception,
6352 p_module => v_module,
6353 p_msg_text => 'raising Invalid_Cal_Period_ID when getting period num');
6354 pv_attr_label := 'GL_PERIOD_NUM';
6355 RAISE Invalid_Cal_Period_ID;
6356 END;
6357
6358 BEGIN
6359 -- Retrieve the Last Load Cal Period ACCOUNTING_YEAR attribute
6360 fem_dimension_util_pkg.get_dim_attr_id_ver_id
6361 (x_err_code => pv_API_return_code,
6362 x_attr_id => pv_dim_attr_id,
6363 x_ver_id => pv_dim_attr_ver_id,
6364 p_dim_id => pv_cal_per_dim_id,
6365 p_attr_label => 'ACCOUNTING_YEAR');
6366
6367 IF pv_API_return_code > 0
6368 THEN
6369 -- Fail to find the attribute version
6370 FEM_ENGINES_PKG.Tech_Message
6371 (p_severity => pc_log_level_exception,
6372 p_module => v_module,
6373 p_msg_text => 'raising Invalid_Cal_Period_ID when getting year');
6374 pv_attr_label := 'ACCOUNTING_YEAR';
6375 RAISE Invalid_Cal_Period_ID;
6376 END IF;
6377
6378 SELECT number_assign_value
6379 INTO v_cal_per_year
6380 FROM fem_cal_periods_attr
6381 WHERE attribute_id = pv_dim_attr_id
6382 AND version_id = pv_dim_attr_ver_id
6383 AND cal_period_id = v_last_load_cal_per_id;
6387 p_module => v_module,
6384
6385 FEM_ENGINES_PKG.Tech_Message
6386 (p_severity => pc_log_level_statement,
6388 p_app_name => 'FEM',
6389 p_msg_name => 'FEM_GL_POST_204',
6390 p_token1 => 'VAR_NAME',
6391 p_value1 => 'v_cal_per_year',
6392 p_token2 => 'VAR_VAL',
6393 p_value2 => TO_CHAR(v_cal_per_year));
6394
6395 EXCEPTION
6396 WHEN NO_DATA_FOUND THEN
6397 -- Fail to retrieve the Last Load Cal Period Accounting Year
6398 FEM_ENGINES_PKG.Tech_Message
6399 (p_severity => pc_log_level_exception,
6400 p_module => v_module,
6401 p_msg_text => 'raising Invalid_Cal_Period_ID when getting year');
6402 pv_attr_label := 'ACCOUNTING_YEAR';
6403 RAISE Invalid_Cal_Period_ID;
6404 END;
6405
6406 -- Find the corresponding GL Effective Period Number
6407 SELECT effective_period_num
6408 INTO v_last_load_eff_per_num
6409 FROM GL_PERIOD_STATUSES
6410 WHERE APPLICATION_ID = 101
6411 AND LEDGER_ID = pv_ledger_id
6412 AND PERIOD_YEAR = v_cal_per_year
6413 AND PERIOD_NUM = v_cal_per_num;
6414
6415 ELSE
6416 -- The Last Load Cal Period is same as the First Load Cal Period
6417 v_last_load_eff_per_num := v_first_load_eff_per_num;
6418
6419 END IF; -- IF (v_last_load_cal_per_id <> v_first_load_cal_per_id)
6420
6421 FEM_ENGINES_PKG.Tech_Message
6422 (p_severity => pc_log_level_statement,
6423 p_module => v_module,
6424 p_app_name => 'FEM',
6425 p_msg_name => 'FEM_GL_POST_204',
6426 p_token1 => 'VAR_NAME',
6427 p_value1 => 'v_last_load_eff_per_num',
6428 p_token2 => 'VAR_VAL',
6429 p_value2 => TO_CHAR(v_last_load_eff_per_num));
6430
6431 BEGIN
6432 SELECT 'Y'
6433 INTO v_any_period_gap
6434 FROM DUAL
6435 WHERE EXISTS
6436 (SELECT 'Period gap exists'
6437 FROM GL_PERIOD_STATUSES
6438 WHERE LEDGER_ID = pv_ledger_id
6439 AND APPLICATION_ID = 101
6440 AND ((v_first_load_eff_per_num > v_max_valid_eff_per_num
6441 AND EFFECTIVE_PERIOD_NUM > v_max_valid_eff_per_num
6442 AND EFFECTIVE_PERIOD_NUM < v_first_load_eff_per_num)
6443 OR
6444 (v_min_valid_eff_per_num > v_last_load_eff_per_num
6445 AND EFFECTIVE_PERIOD_NUM > v_last_load_eff_per_num
6446 AND EFFECTIVE_PERIOD_NUM < v_min_valid_eff_per_num)));
6447 EXCEPTION
6448 WHEN NO_DATA_FOUND THEN
6449 v_any_period_gap := 'N';
6450 END;
6451
6452 END IF; -- IF (v_first_load_cal_per_id <> -1)
6453
6454 FEM_ENGINES_PKG.Tech_Message
6455 (p_severity => pc_log_level_statement,
6456 p_module => v_module,
6457 p_app_name => 'FEM',
6458 p_msg_name => 'FEM_GL_POST_204',
6459 p_token1 => 'VAR_NAME',
6460 p_value1 => 'v_any_period_gap',
6461 p_token2 => 'VAR_VAL',
6462 p_value2 => v_any_period_gap);
6463
6464 IF (v_any_period_gap = 'N')
6465 THEN
6466 -- No period gap exists between the loaded period range and the valid
6467 -- period range, so start to register the valid periods
6468
6469 -- ------------------------------------------------------------------
6470 -- Loop for each valid Cal Period in FEM_INTG_EXEC_PARAMS_GT for this
6471 -- Output Dataset
6472 -- ------------------------------------------------------------------
6473 FOR v_cp IN cp_cur(v_ds.output_dataset_code) LOOP
6474 -- Log the current Period Name, Cal Period ID, and Load Method Code
6475 FEM_ENGINES_PKG.Tech_Message
6476 (p_severity => pc_log_level_statement,
6477 p_module => v_module,
6478 p_app_name => 'FEM',
6479 p_msg_name => 'FEM_GL_POST_204',
6480 p_token1 => 'VAR_NAME',
6481 p_value1 => 'v_cp.period_name',
6482 p_token2 => 'VAR_VAL',
6483 p_value2 => v_cp.period_name);
6484 FEM_ENGINES_PKG.Tech_Message
6485 (p_severity => pc_log_level_statement,
6486 p_module => v_module,
6487 p_app_name => 'FEM',
6488 p_msg_name => 'FEM_GL_POST_204',
6489 p_token1 => 'VAR_NAME',
6490 p_value1 => 'v_cp.cal_period_id',
6491 p_token2 => 'VAR_VAL',
6492 p_value2 => TO_CHAR(v_cp.cal_period_id));
6493 FEM_ENGINES_PKG.Tech_Message
6494 (p_severity => pc_log_level_statement,
6495 p_module => v_module,
6496 p_app_name => 'FEM',
6497 p_msg_name => 'FEM_GL_POST_204',
6498 p_token1 => 'VAR_NAME',
6499 p_value1 => 'v_cp.effective_period_num',
6500 p_token2 => 'VAR_VAL',
6501 p_value2 => TO_CHAR(v_cp.effective_period_num));
6502 FEM_ENGINES_PKG.Tech_Message
6506 p_msg_name => 'FEM_GL_POST_204',
6503 (p_severity => pc_log_level_statement,
6504 p_module => v_module,
6505 p_app_name => 'FEM',
6507 p_token1 => 'VAR_NAME',
6508 p_value1 => 'v_cp.load_method_code',
6509 p_token2 => 'VAR_VAL',
6510 p_value2 => v_cp.load_method_code);
6511 -- Bug fix 4285337: Print the end date for each period
6512 FEM_ENGINES_PKG.Tech_Message
6513 (p_severity => pc_log_level_statement,
6514 p_module => v_module,
6515 p_app_name => 'FEM',
6516 p_msg_name => 'FEM_GL_POST_204',
6517 p_token1 => 'VAR_NAME',
6518 p_value1 => 'v_cp.end_date',
6519 p_token2 => 'VAR_VAL',
6520 p_value2 => v_cp.end_date);
6521
6522 -- ------------------------------------------------------------------
6523 -- 2. If the load method is Incremental, check whether it is required
6524 -- to set the load method as Snapshot
6525 -- ------------------------------------------------------------------
6526 v_load_method := v_cp.load_method_code;
6527 IF (v_load_method = 'I')
6528 THEN
6529 IF (v_first_load_cal_per_id = -1)
6530 THEN
6531 -- Since no balances have ever been loaded before for this
6532 -- Ledger/Output Dataset, always set the load method as Snapshot
6533 v_load_method := 'S';
6534 ELSE
6535 -- Balances have been loaded before for this Ledger/Output
6536 -- Dataset, so we need to check if any balances have been loaded
6537 -- for this Ledger/Output Dataset/Cal Period
6538 BEGIN
6539 -- Bug fix 4170124: Changed to check FEM_DL_DIMENSIONS instead
6540 -- of FEM_PL_REQUESTS
6541 SELECT 'Y'
6542 INTO v_dummy_flag
6543 FROM DUAL
6544 WHERE EXISTS
6545 (SELECT 'Loaded'
6546 FROM FEM_DL_DIMENSIONS
6547 WHERE LEDGER_ID = pv_ledger_id
6548 AND CAL_PERIOD_ID = v_cp.cal_period_id
6549 AND DATASET_CODE = v_ds.output_dataset_code
6550 AND SOURCE_SYSTEM_CODE = pv_gl_source_system_code
6551 AND TABLE_NAME = 'FEM_BALANCES');
6552 EXCEPTION
6553 WHEN NO_DATA_FOUND THEN
6554 -- No balances have been loaded for this Ledger/Output
6555 -- Dataset/Cal Period, so set the load method as Snapshot
6556 v_load_method := 'S';
6557 END;
6558 END IF; -- IF (v_first_load_cal_period_id = -1)
6559 END IF; -- IF (v_cp.load_method_code = 'I')
6560
6561 FEM_ENGINES_PKG.Tech_Message
6562 (p_severity => pc_log_level_statement,
6563 p_module => v_module,
6564 p_app_name => 'FEM',
6565 p_msg_name => 'FEM_GL_POST_204',
6566 p_token1 => 'VAR_NAME',
6567 p_value1 => 'v_load_method',
6568 p_token2 => 'VAR_VAL',
6569 p_value2 => v_load_method);
6570
6571 -- -------------------------------------------------------------
6572 -- 3. Register request for this Ledger/Output Dataset/Cal Period
6573 -- -------------------------------------------------------------
6574
6575 -- Get a new request ID to register
6576 SELECT FND_CONCURRENT_REQUESTS_S.nextval
6577 INTO v_req_id
6578 FROM DUAL;
6579
6580 -- Print the request ID to FND Log
6581 FEM_ENGINES_PKG.Tech_Message
6582 (p_severity => pc_log_level_statement,
6583 p_module => v_module,
6584 p_app_name => 'FEM',
6585 p_msg_name => 'FEM_GL_POST_204',
6586 p_token1 => 'VAR_NAME',
6587 p_value1 => 'v_req_id',
6588 p_token2 => 'VAR_VAL',
6589 p_value2 => TO_CHAR(v_req_id));
6590
6591 -- Initialize the FND Message API
6592 FND_MSG_PUB.Initialize;
6593 -- Register the concurrent request in FEM_PL_REQUESTS
6594 -- Bug fix 4285337: Pass the end date of each period when
6595 -- registering the request
6596 FEM_PL_PKG.Register_Request
6597 (P_API_VERSION => pc_API_version,
6598 P_COMMIT => 'T',
6599 P_CAL_PERIOD_ID => v_cp.cal_period_id,
6600 P_LEDGER_ID => pv_ledger_id,
6601 P_OUTPUT_DATASET_CODE => v_ds.output_dataset_code,
6602 P_EFFECTIVE_DATE => v_cp.end_date,
6603 P_REQUEST_ID => v_req_id,
6604 P_USER_ID => pv_user_id,
6605 P_LAST_UPDATE_LOGIN => pv_login_id,
6606 P_PROGRAM_ID => pv_pgm_id,
6607 P_PROGRAM_LOGIN_ID => pv_login_id,
6608 P_PROGRAM_APPLICATION_ID => pv_pgm_app_id,
6609 P_EXEC_MODE_CODE => v_load_method,
6610 X_MSG_COUNT => v_msg_count,
6611 X_MSG_DATA => v_msg_data,
6612 X_RETURN_STATUS => v_return_status);
6613
6617 FEM_ENGINES_PKG.Tech_Message
6614 IF (v_return_status <> 'S')
6615 THEN
6616 -- Incompatible API or unexpected database error
6618 (p_severity => pc_log_level_statement,
6619 p_module => v_module,
6620 p_msg_text => 'Raising OGLRegProc_FatalErr after calling Register_Request');
6621 RAISE OGLRegProc_FatalErr;
6622 END IF; -- IF (v_return_status <> 'S')
6623
6624 -- ---------------------------------------------------------------
6625 -- 4. Register execution for this Ledger/Output Dataset/Cal Period
6626 -- ---------------------------------------------------------------
6627
6628 -- Initialize the FND Message API
6629 FND_MSG_PUB.Initialize;
6630 -- Check for process locks and process overlaps, validate the execution
6631 -- mode parameter, validate the period(s), and register the execution in
6632 -- FEM_PL_OBJECT_EXECUTIONS
6633 FEM_PL_PKG.Register_Object_Execution
6634 (P_API_VERSION => pc_API_version,
6635 P_COMMIT => 'T',
6636 P_REQUEST_ID => v_req_id,
6637 P_OBJECT_ID => pv_rule_obj_id,
6638 P_EXEC_OBJECT_DEFINITION_ID => pv_rule_obj_def_id,
6639 P_USER_ID => pv_user_id,
6640 P_LAST_UPDATE_LOGIN => pv_login_id,
6641 P_EXEC_MODE_CODE => v_load_method,
6642 X_EXEC_STATE => pv_exec_state,
6643 X_PREV_REQUEST_ID => pv_prev_req_id,
6644 X_MSG_COUNT => v_msg_count,
6645 X_MSG_DATA => v_msg_data,
6646 X_RETURN_STATUS => v_return_status);
6647
6648 IF v_return_status = 'E'
6649 THEN
6650 -- The execution lock exists for this Output Dataset/Cal Period
6651 FEM_ENGINES_PKG.Tech_Message
6652 (p_severity => pc_log_level_exception,
6653 p_module => v_module,
6654 p_app_name => 'FEM',
6655 p_msg_name => 'FEM_INTG_BAL_REGISTER_FAIL',
6656 p_token1 => 'DS_CODE',
6657 p_value1 => v_ds.output_dataset_code,
6658 p_token2 => 'PER_NAME',
6659 p_value2 => v_cp.PERIOD_NAME);
6660 FEM_ENGINES_PKG.User_Message
6661 (p_app_name => 'FEM',
6662 p_msg_name => 'FEM_INTG_BAL_REGISTER_FAIL',
6663 p_token1 => 'DS_CODE',
6664 p_value1 => v_ds.output_dataset_code,
6665 p_token2 => 'PER_NAME',
6666 p_value2 => v_cp.PERIOD_NAME);
6667
6668 -- Log the user message(s) returned by Register_Object_Execution()
6669 IF v_msg_count = 1
6670 THEN
6671 -- Only one message
6672 FEM_ENGINES_PKG.User_Message
6673 (p_app_name => 'FEM',
6674 p_msg_text => v_msg_data);
6675
6676 ELSIF v_msg_count > 1
6677 THEN
6678 -- More than one messages
6679 FOR i IN 1 .. v_msg_count LOOP
6680 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
6681 FEM_ENGINES_PKG.User_Message
6682 (p_app_name => 'FEM',
6683 p_msg_text => v_msg_data);
6684 END LOOP;
6685
6686 END IF; -- IF v_msg_count = 1
6687
6688 -- Update the load method code and error code of
6689 -- FEM_INTG_EXEC_PARAMS_GT for this Output Dataset/Cal Period
6690 UPDATE FEM_INTG_EXEC_PARAMS_GT
6691 SET LOAD_METHOD_CODE = v_load_method
6692 , ERROR_CODE = 'EXEC_LOCK_EXISTS'
6693 WHERE CAL_PERIOD_ID = v_cp.cal_period_id
6694 AND OUTPUT_DATASET_CODE = v_ds.output_dataset_code;
6695
6696 -- Initialize the FND Message API
6697 FND_MSG_PUB.Initialize;
6698 -- Unregister the request for this Cal Period/Output Dataset
6699 FEM_PL_PKG.Unregister_Request
6700 (P_API_VERSION => pc_API_version,
6701 P_COMMIT => 'T',
6702 P_REQUEST_ID => v_req_id,
6703 X_MSG_COUNT => v_msg_count,
6704 X_MSG_DATA => v_msg_data,
6705 X_RETURN_STATUS => v_return_status);
6706
6707 -- Log the user message(s) returned by Unregister_Request()
6708 IF v_msg_count = 1
6709 THEN
6710 -- Only one message
6711 FEM_ENGINES_PKG.User_Message
6712 (p_app_name => 'FEM',
6713 p_msg_text => v_msg_data);
6714
6715 ELSIF v_msg_count > 1
6716 THEN
6717 -- More than one messages
6718 FOR i IN 1 .. v_msg_count LOOP
6719 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
6720 FEM_ENGINES_PKG.User_Message
6721 (p_app_name => 'FEM',
6722 p_msg_text => v_msg_data);
6723 END LOOP;
6724 END IF; -- IF v_msg_count = 1
6725
6726 x_completion_code := 1; -- Indicating warning
6730 THEN
6727 EXIT; -- Exit the cp_cur loop
6728
6729 ELSIF v_return_status = 'U'
6731 -- Unexpected database error
6732 FEM_ENGINES_PKG.Tech_Message
6733 (p_severity => pc_log_level_exception,
6734 p_module => v_module,
6735 p_app_name => 'FEM',
6736 p_msg_name => 'FEM_INTG_BAL_REGISTER_FAIL',
6737 p_token1 => 'DS_CODE',
6738 p_value1 => v_ds.output_dataset_code,
6739 p_token2 => 'PER_NAME',
6740 p_value2 => v_cp.PERIOD_NAME);
6741 FEM_ENGINES_PKG.User_Message
6742 (p_app_name => 'FEM',
6743 p_msg_name => 'FEM_INTG_BAL_REGISTER_FAIL',
6744 p_token1 => 'DS_CODE',
6745 p_value1 => v_ds.output_dataset_code,
6746 p_token2 => 'PER_NAME',
6747 p_value2 => v_cp.PERIOD_NAME);
6748
6749 FEM_ENGINES_PKG.Tech_Message
6750 (p_severity => pc_log_level_exception,
6751 p_module => v_module,
6752 p_msg_text => 'Raising OGLRegProc_FatalErr after calling Register_Object_Execution');
6753 RAISE OGLRegProc_FatalErr;
6754
6755 ELSE
6756 -- Succeed to register execution for this Cal Period/Output Dataset
6757 FEM_ENGINES_PKG.Tech_Message
6758 (p_severity => pc_log_level_event,
6759 p_module => v_module,
6760 p_app_name => 'FEM',
6761 p_msg_name => 'FEM_INTG_BAL_REGISTER_SUCC',
6762 p_token1 => 'DS_CODE',
6763 p_value1 => v_ds.output_dataset_code,
6764 p_token2 => 'PER_NAME',
6765 p_value2 => v_cp.PERIOD_NAME);
6766 FEM_ENGINES_PKG.User_Message
6767 (p_app_name => 'FEM',
6768 p_msg_name => 'FEM_INTG_BAL_REGISTER_SUCC',
6769 p_token1 => 'DS_CODE',
6770 p_value1 => v_ds.output_dataset_code,
6771 p_token2 => 'PER_NAME',
6772 p_value2 => v_cp.PERIOD_NAME);
6773
6774 UPDATE FEM_INTG_EXEC_PARAMS_GT
6775 SET REQUEST_ID = v_req_id
6776 , LOAD_METHOD_CODE = v_load_method
6777 WHERE CAL_PERIOD_ID = v_cp.cal_period_id
6778 AND OUTPUT_DATASET_CODE = v_ds.output_dataset_code;
6779
6780 -- Set the First Registered Effective Period Number as the current
6781 -- Effective Period Number of this Cal Period if this is the first
6782 -- period registered successfully for this Dataset
6783 IF (v_first_reg_eff_per_num = -1)
6784 THEN
6785 v_first_reg_eff_per_num := v_cp.effective_period_num;
6786 END IF;
6787
6788 -- Set the Last Registered Effective Period Number as the current
6789 -- Effective Period Number of this Cal Period
6790 v_last_reg_eff_per_num := v_cp.effective_period_num;
6791
6792 END IF; -- IF v_return_status = 'E'
6793
6794 END LOOP; -- cp_cur LOOP
6795
6796 FEM_ENGINES_PKG.Tech_Message
6797 (p_severity => pc_log_level_statement,
6798 p_module => v_module,
6799 p_app_name => 'FEM',
6800 p_msg_name => 'FEM_GL_POST_204',
6801 p_token1 => 'VAR_NAME',
6802 p_value1 => 'v_first_reg_eff_per_num',
6803 p_token2 => 'VAR_VAL',
6804 p_value2 => TO_CHAR(v_first_reg_eff_per_num));
6805 FEM_ENGINES_PKG.Tech_Message
6806 (p_severity => pc_log_level_statement,
6807 p_module => v_module,
6808 p_app_name => 'FEM',
6809 p_msg_name => 'FEM_GL_POST_204',
6810 p_token1 => 'VAR_NAME',
6811 p_value1 => 'v_last_reg_eff_per_num',
6812 p_token2 => 'VAR_VAL',
6813 p_value2 => TO_CHAR(v_last_reg_eff_per_num));
6814
6815 IF (v_first_load_eff_per_num <> -1)
6816 THEN
6817 BEGIN
6818 SELECT 'Y'
6819 INTO v_any_period_gap
6820 FROM DUAL
6821 WHERE EXISTS
6822 (SELECT 'Period gap exists'
6823 FROM GL_PERIOD_STATUSES
6824 WHERE LEDGER_ID = pv_ledger_id
6825 AND APPLICATION_ID = 101
6826 AND ((v_first_load_eff_per_num > v_last_reg_eff_per_num
6827 AND EFFECTIVE_PERIOD_NUM > v_last_reg_eff_per_num
6828 AND EFFECTIVE_PERIOD_NUM < v_first_load_eff_per_num)
6829 OR
6830 (v_first_reg_eff_per_num > v_last_load_eff_per_num
6831 AND EFFECTIVE_PERIOD_NUM > v_last_load_eff_per_num
6832 AND EFFECTIVE_PERIOD_NUM < v_first_reg_eff_per_num)));
6833
6834 EXCEPTION
6835 WHEN NO_DATA_FOUND THEN
6836 v_any_period_gap := 'N';
6837 END;
6838 END IF; -- IF (v_first_load_eff_per_num <> -1)
6839
6840 FEM_ENGINES_PKG.Tech_Message
6841 (p_severity => pc_log_level_statement,
6842 p_module => v_module,
6843 p_app_name => 'FEM',
6844 p_msg_name => 'FEM_GL_POST_204',
6845 p_token1 => 'VAR_NAME',
6849
6846 p_value1 => 'v_any_period_gap',
6847 p_token2 => 'VAR_VAL',
6848 p_value2 => v_any_period_gap);
6850 END IF; -- IF (v_any_period_gap = 'N')
6851
6852 IF (v_any_period_gap = 'Y')
6853 THEN
6854 -- Period gap exists between the loaded period range and the valid
6855 -- period range/registered period range, so no periods can be
6856 -- processed
6857
6858 -- Log the warning messages
6859 FEM_ENGINES_PKG.Tech_Message
6860 (p_severity => pc_log_level_exception,
6861 p_module => v_module,
6862 p_app_name => 'FEM',
6863 p_msg_name => 'FEM_INTG_BAL_PERIOD_GAP',
6864 p_token1 => 'DS_CODE',
6865 p_value1 => v_ds.output_dataset_code);
6866 FEM_ENGINES_PKG.User_Message
6867 (p_app_name => 'FEM',
6868 p_msg_name => 'FEM_INTG_BAL_PERIOD_GAP',
6869 p_token1 => 'DS_CODE',
6870 p_value1 => v_ds.output_dataset_code);
6871
6872 -- Populate the error code PERIOD_GAP_EXISTS for all Cal Periods for
6873 -- this Output Dataset
6874 UPDATE FEM_INTG_EXEC_PARAMS_GT
6875 SET ERROR_CODE = 'PERIOD_GAP_EXISTS'
6876 WHERE OUTPUT_DATASET_CODE = v_ds.output_dataset_code
6877 AND ERROR_CODE IS NULL;
6878
6879 x_completion_code := 1; -- Indicating warning
6880
6881 END IF; -- IF (v_any_period_gap = 'Y')
6882
6883 END IF; -- IF (v_min_valid_eff_per_num <> -1)
6884
6885 END LOOP; -- ds_cur LOOP
6886
6887 -- ------------------------------------------------------------------
6888 -- 5. Determine the statment type performed on FEM_BALANCES and which
6889 -- tables the balances will be loaded from
6890 -- ------------------------------------------------------------------
6891
6892 BEGIN
6893 SELECT DISTINCT LOAD_METHOD_CODE
6894 INTO v_load_method
6895 FROM FEM_INTG_EXEC_PARAMS_GT
6896 WHERE ERROR_CODE IS NULL
6897 AND REQUEST_ID IS NOT NULL;
6898 EXCEPTION
6899 WHEN NO_DATA_FOUND THEN
6900 -- There are no valid execution parameters
6901 FEM_ENGINES_PKG.Tech_Message
6902 (p_severity => pc_log_level_error,
6903 p_module => v_module,
6904 p_app_name => 'FEM',
6905 p_msg_name => 'FEM_INTG_BAL_NO_VALID_EXEC');
6906 FEM_ENGINES_PKG.User_Message
6907 (p_app_name => 'FEM',
6908 p_msg_name => 'FEM_INTG_BAL_NO_VALID_EXEC');
6909 RAISE OGLRegProc_FatalErr;
6910
6911 WHEN TOO_MANY_ROWS THEN
6912 v_load_method := 'B'; -- indicating both 'S' and 'I' exists
6913 END;
6914
6915 -- Set the pv_stmt_type
6916 IF (v_load_method = 'S')
6917 THEN
6918 -- All load method codes are Snapshot
6919 pv_stmt_type := 'INSERT';
6920
6921 IF (pv_exec_mode = 'I')
6922 THEN
6923 -- The original execution mode is Incremental, so log a message to
6924 -- inform users that it's been changed to Snapshot mode
6925 FEM_ENGINES_PKG.Tech_Message
6926 (p_severity => pc_log_level_event,
6927 p_module => v_module,
6928 p_app_name => 'FEM',
6929 p_msg_name => 'FEM_INTG_BAL_CHANGE_TO_SNAP');
6930 FEM_ENGINES_PKG.User_Message
6931 (p_app_name => 'FEM',
6932 p_msg_name => 'FEM_INTG_BAL_CHANGE_TO_SNAP');
6933 END IF;
6934
6935 ELSE
6936 -- All load method codes are Incremental or both codes exist
6937 pv_stmt_type := 'MERGE';
6938
6939 END IF; -- IF (v_load_method = 'S')
6940
6941 FEM_ENGINES_PKG.Tech_Message
6942 (p_severity => pc_log_level_statement,
6943 p_module => v_module,
6944 p_app_name => 'FEM',
6945 p_msg_name => 'FEM_GL_POST_204',
6946 p_token1 => 'VAR_NAME',
6947 p_value1 => 'pv_stmt_type',
6948 p_token2 => 'VAR_VAL',
6949 p_value2 => pv_stmt_type);
6950
6951 -- Set the pv_from_gl_bal_flag and pv_from_gl_delta_flag
6952 IF (pv_ds_balance_type_cd = 'BUDGET' OR v_load_method = 'S')
6953 THEN
6954 -- The balance type is Budget or all load method codes are 'Snapshot', so
6955 -- it'll only load balances from GL_BALANCES
6956 pv_from_gl_bal_flag := 'Y';
6957 pv_from_gl_delta_flag := 'N';
6958
6959 ELSIF (v_load_method = 'I')
6960 THEN
6961 -- All load method codes are 'Incremental' and the balance type is Actual
6962 -- or Encumbrance Type, so it'll only load balances from GL_BALANCES_DELTA
6963 pv_from_gl_bal_flag := 'N';
6964 pv_from_gl_delta_flag := 'Y';
6965
6966 ELSE
6967 -- Both codes exist and the balance type is Actual or Encumbrance Type, so
6968 -- it'll load balances from both GL_BALANCES and GL_BALANCES_DELTA
6969 pv_from_gl_bal_flag := 'Y';
6970 pv_from_gl_delta_flag := 'Y';
6971
6972 END IF; -- IF (pv_ds_balance_type_cd = 'BALANCE' OR v_load_method = 'S')
6973
6974 FEM_ENGINES_PKG.Tech_Message
6975 (p_severity => pc_log_level_statement,
6976 p_module => v_module,
6977 p_app_name => 'FEM',
6978 p_msg_name => 'FEM_GL_POST_204',
6979 p_token1 => 'VAR_NAME',
6980 p_value1 => 'pv_from_gl_bal_flag',
6981 p_token2 => 'VAR_VAL',
6982 p_value2 => pv_from_gl_bal_flag);
6983
6987 p_app_name => 'FEM',
6984 FEM_ENGINES_PKG.Tech_Message
6985 (p_severity => pc_log_level_statement,
6986 p_module => v_module,
6988 p_msg_name => 'FEM_GL_POST_204',
6989 p_token1 => 'VAR_NAME',
6990 p_value1 => 'pv_from_gl_delta_flag',
6991 p_token2 => 'VAR_VAL',
6992 p_value2 => pv_from_gl_delta_flag);
6993
6994 -- -----------------------------------------------------
6995 -- 6. Register table information for registered requests
6996 -- -----------------------------------------------------
6997 FOR v_req IN req_cur LOOP
6998 -- Initialize the FND Message API
6999 FND_MSG_PUB.Initialize;
7000 -- Log Undo information for this Request, which will insert/update the
7001 -- table FEM_BALANCES; pass pv_stmt_type as the statement type
7002 FEM_PL_PKG.Register_Table
7003 (P_API_VERSION => pc_API_version,
7004 P_COMMIT => 'T',
7005 P_REQUEST_ID => v_req.request_id,
7006 P_OBJECT_ID => pv_rule_obj_id,
7007 P_TABLE_NAME => 'FEM_BALANCES',
7008 P_STATEMENT_TYPE => pv_stmt_type,
7009 P_NUM_OF_OUTPUT_ROWS => 0,
7010 P_USER_ID => pv_user_id,
7011 P_LAST_UPDATE_LOGIN => pv_login_id,
7012 X_MSG_COUNT => v_msg_count,
7013 X_MSG_DATA => v_msg_data,
7014 X_RETURN_STATUS => v_return_status);
7015
7016 IF v_return_status <> 'S'
7017 THEN
7018 FEM_ENGINES_PKG.Tech_Message
7019 (p_severity => pc_log_level_exception,
7020 p_module => v_module,
7021 p_msg_text => 'Raising OGLRegProc_FatalErr after calling Register_Table');
7022 RAISE OGLRegProc_FatalErr;
7023 END IF; -- IF v_return_status <> 'S'
7024
7025 END LOOP; -- req_cur LOOP
7026
7027 -- ----------------------------
7028 -- 7. Exit with success/warning
7029 -- ----------------------------
7030
7031 -- Log the function exit time to FND_LOG (successful completion)
7032 FEM_ENGINES_PKG.Tech_Message
7033 (p_severity => pc_log_level_procedure,
7034 p_module => v_module,
7035 p_app_name => 'FEM',
7036 p_msg_name => 'FEM_GL_POST_202',
7037 p_token1 => 'FUNC_NAME',
7038 p_value1 => v_func_name,
7039 p_token2 => 'TIME',
7040 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7041
7042 EXCEPTION
7043 WHEN Invalid_Cal_Period_ID THEN
7044 -- <<< Cal Period attributes not set >>>
7045 x_completion_code := 2; -- Indicating fatal error
7046
7047 -- Get the name for Calendar Period dimension
7048 v_dim_name := FEM_DIMENSION_UTIL_PKG.Get_Dimension_Name
7049 (p_dim_id => pv_cal_per_dim_id);
7050
7051 IF (v_dim_name IS NULL)
7052 THEN
7053 v_dim_name := 'Calendar Period';
7054 END IF;
7055
7056 -- Get the attribute name
7057 IF (pv_attr_label IS NOT NULL)
7058 THEN
7059 v_attr_name := FEM_DIMENSION_UTIL_PKG.Get_Dim_Attr_Name
7060 (p_dim_id => pv_cal_per_dim_id,
7061 p_attr_label => pv_attr_label);
7062
7063 IF v_attr_name IS NULL
7064 THEN
7065 v_attr_name := pv_attr_label;
7066 END IF;
7067
7068 END IF; -- IF (pv_attr_label IS NOT NULL)
7069
7070 -- Log the error message
7071 FEM_ENGINES_PKG.Tech_Message
7072 (p_severity => pc_log_level_error,
7073 p_module => v_module,
7074 p_app_name => 'FEM',
7075 p_msg_name => 'FEM_INTG_BAL_DIM_ATTR_ERR',
7076 p_token1 => 'ATTR_NAME',
7077 p_value1 => v_attr_name,
7078 p_token2 => 'PER_NAME',
7079 p_value2 => v_cal_per_name,
7080 p_token3 => 'DIM_NAME',
7081 p_value3 => v_dim_name);
7082 FEM_ENGINES_PKG.User_Message
7083 (p_app_name => 'FEM',
7084 p_msg_name => 'FEM_INTG_BAL_PER_ATTR_ERR',
7085 p_token1 => 'ATTR_NAME',
7086 p_value1 => v_attr_name,
7087 p_token2 => 'PER_NAME',
7088 p_value2 => v_cal_per_name,
7089 p_token3 => 'DIM_NAME',
7090 p_value3 => v_dim_name);
7091
7092 -- Log the function exit time to FND_LOG (with error)
7093 FEM_ENGINES_PKG.Tech_Message
7094 (p_severity => pc_log_level_procedure,
7095 p_module => v_module,
7096 p_app_name => 'FEM',
7097 p_msg_name => 'FEM_GL_POST_203',
7098 p_token1 => 'FUNC_NAME',
7099 p_value1 => v_func_name,
7100 p_token2 => 'TIME',
7101 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7102
7103 WHEN OGLRegProc_FatalErr THEN
7104 -- <<< Fatal error >>>
7105 x_completion_code := 2; -- Indicating fatal error
7106
7107 -- Log the user message(s) returned by the API being called
7108 IF v_msg_count = 1
7109 THEN
7110 -- Only one message
7111 FEM_ENGINES_PKG.User_Message
7112 (p_app_name => 'FEM',
7113 p_msg_text => v_msg_data);
7114
7115 ELSIF v_msg_count > 1
7116 THEN
7117 -- More than one messages
7118 FOR i IN 1 .. v_msg_count LOOP
7119 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
7120 FEM_ENGINES_PKG.User_Message
7124
7121 (p_app_name => 'FEM',
7122 p_msg_text => v_msg_data);
7123 END LOOP;
7125 END IF; -- IF v_msg_count = 1
7126
7127 -- Log the function exit time to FND_LOG (with error)
7128 FEM_ENGINES_PKG.Tech_Message
7129 (p_severity => pc_log_level_procedure,
7130 p_module => v_module,
7131 p_app_name => 'FEM',
7132 p_msg_name => 'FEM_GL_POST_203',
7133 p_token1 => 'FUNC_NAME',
7134 p_value1 => v_func_name,
7135 p_token2 => 'TIME',
7136 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7137
7138 WHEN OTHERS THEN
7139 -- <<< Unexpected database exceptions >>>
7140 x_completion_code := 2; -- Indicating fatal error
7141
7142 pv_sqlerrm := SQLERRM;
7143 pv_callstack := dbms_utility.format_call_stack;
7144
7145 -- Log the call stack and the Oracle error message to
7146 -- FND_LOG with the "unexpected exception" severity level.
7147 FEM_ENGINES_PKG.Tech_Message
7148 (p_severity => pc_log_level_unexpected,
7149 p_module => v_module,
7150 p_msg_text => pv_sqlerrm);
7151 FEM_ENGINES_PKG.Tech_Message
7152 (p_severity => pc_log_level_unexpected,
7153 p_module => v_module,
7154 p_msg_text => pv_callstack);
7155
7156 -- Log the Oracle error message to the Concurrent Request Log
7157 FEM_ENGINES_PKG.User_Message
7158 (p_app_name => 'FEM',
7159 p_msg_text => pv_sqlerrm);
7160
7161 -- Log the function exit time to FND_LOG (with error)
7162 FEM_ENGINES_PKG.Tech_Message
7163 (p_severity => pc_log_level_procedure,
7164 p_module => v_module,
7165 p_app_name => 'FEM',
7166 p_msg_name => 'FEM_GL_POST_203',
7167 p_token1 => 'FUNC_NAME',
7168 p_value1 => v_func_name,
7169 p_token2 => 'TIME',
7170 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7171
7172 END Register_OGL_Process_Execution;
7173 -- =======================================================================
7174
7175 -- =======================================================================
7176 PROCEDURE Final_OGL_Process_Logging
7177 (p_exec_status IN VARCHAR2,
7178 p_final_message_name IN VARCHAR2) IS
7179 -- =======================================================================
7180 -- Purpose
7181 -- Performs final process logging after FEM-OGL Integration Balances
7182 -- Rule execution
7183 -- History
7184 -- 12-01-2004 L Poon Created
7185 -- 01-25-2005 L Poon Bug fix 4143603 - Uptake latest changes for the API
7186 -- register_data_location()
7187 -- Arguments
7188 -- p_exec_status The final completion status: SUCCESS or
7189 -- ERROR_RERUN
7190 -- p_final_message_name The name of the final message to be logged for
7191 -- the engine
7192 -- Notes
7193 -- Called by FEM_INTG_BAL_RULE_ENG_PKG.Main after process completion
7194 -- =======================================================================
7195
7196 v_module VARCHAR2(100);
7197 v_func_name VARCHAR2(80);
7198
7199 v_msg_count NUMBER;
7200 v_msg_data VARCHAR2(2000);
7201 i PLS_INTEGER;
7202 v_return_status VARCHAR2(1);
7203
7204 v_exec_status VARCHAR2(30);
7205 v_load_status VARCHAR2(30);
7206
7207 v_xlated_curr_ds_code FEM_BAL_POST_INTERIM_GT.DATASET_CODE%TYPE;
7208 v_xlated_curr_cal_per_id FEM_BAL_POST_INTERIM_GT.CAL_PERIOD_ID%TYPE;
7209 v_xlated_curr_code FEM_BAL_POST_INTERIM_GT.CURRENCY_CODE%TYPE;
7210 v_xlated_curr_found BOOLEAN;
7211
7212 CURSOR xlated_curr_cur IS
7213 SELECT DISTINCT bpi.DATASET_CODE
7214 , bpi.CAL_PERIOD_ID
7215 , bpi.CURRENCY_CODE
7216 FROM FEM_BAL_POST_INTERIM_GT bpi
7217 WHERE bpi.CURRENCY_TYPE_CODE = 'TRANSLATED'
7218 AND bpi.POSTING_ERROR_FLAG = 'N'
7219 AND NOT EXISTS
7220 (SELECT 'Invalid Delta Load'
7221 FROM FEM_INTG_DELTA_LOADS dl
7222 WHERE dl.LEDGER_ID = bpi.LEDGER_ID
7223 AND dl.DATASET_CODE = bpi.DATASET_CODE
7224 AND dl.CAL_PERIOD_ID = bpi.CAL_PERIOD_ID
7225 AND dl.DELTA_RUN_ID = bpi.DELTA_RUN_ID
7226 AND dl.LOADED_FLAG = 'N')
7227 ORDER BY bpi.DATASET_CODE, bpi.CAL_PERIOD_ID, bpi.CURRENCY_CODE;
7228
7229 CURSOR req_cur IS
7230 SELECT REQUEST_ID
7231 , OUTPUT_DATASET_CODE
7232 , PERIOD_NAME
7233 , CAL_PERIOD_ID
7234 , NUM_OF_ROWS_SELECTED
7235 , NUM_OF_ROWS_POSTED
7236 , ERROR_CODE
7237 FROM FEM_INTG_EXEC_PARAMS_GT
7238 WHERE REQUEST_ID IS NOT NULL
7239 ORDER BY OUTPUT_DATASET_CODE, CAL_PERIOD_ID;
7240
7241 BEGIN
7242 v_module := 'fem.plsql.fem_gl_post_process_pkg.final_ogl_process_logging';
7243 v_func_name := 'FEM_GL_POST_PROCESS_PKG.Final_OGL_Process_Logging';
7244
7245 -- Log the function entry time to FND_LOG
7246 FEM_ENGINES_PKG.Tech_Message
7247 (p_severity => pc_log_level_procedure,
7248 p_module => v_module,
7249 p_app_name => 'FEM',
7250 p_msg_name => 'FEM_GL_POST_201',
7254 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7251 p_token1 => 'FUNC_NAME',
7252 p_value1 => v_func_name,
7253 p_token2 => 'TIME',
7255
7256 -- List the IN parameters to FND_LOG
7257 FEM_ENGINES_PKG.Tech_Message
7258 (p_severity => pc_log_level_statement,
7259 p_module => v_module,
7260 p_app_name => 'FEM',
7261 p_msg_name => 'FEM_GL_POST_204',
7262 p_token1 => 'VAR_NAME',
7263 p_value1 => 'p_exec_status',
7264 p_token2 => 'VAR_VAL',
7265 p_value2 => p_exec_status);
7266 FEM_ENGINES_PKG.Tech_Message
7267 (p_severity => pc_log_level_statement,
7268 p_module => v_module,
7269 p_app_name => 'FEM',
7270 p_msg_name => 'FEM_GL_POST_204',
7271 p_token1 => 'VAR_NAME',
7272 p_value1 => 'p_final_message_name',
7273 p_token2 => 'VAR_VAL',
7274 p_value2 => p_final_message_name);
7275
7276 -- Initialize local variables
7277 v_xlated_curr_found := FALSE;
7278 v_xlated_curr_ds_code := NULL;
7279 v_xlated_curr_cal_per_id := NULL;
7280 v_xlated_curr_code := NULL;
7281
7282 -- If the translated balances are included, open translated currency cursor
7283 IF (pv_xlated_bal_option <> 'NONE')
7284 THEN
7285 OPEN xlated_curr_cur;
7286 FETCH xlated_curr_cur INTO v_xlated_curr_ds_code,
7287 v_xlated_curr_cal_per_id,
7288 v_xlated_curr_code;
7289 IF (xlated_curr_cur%FOUND)
7290 THEN
7291 -- A translated currency is found
7292 v_xlated_curr_found := TRUE;
7293 -- Log the values retrieved from the translated currency cursor
7294 FEM_ENGINES_PKG.Tech_Message
7295 (p_severity => pc_log_level_statement,
7296 p_module => v_module,
7297 p_app_name => 'FEM',
7298 p_msg_name => 'FEM_GL_POST_204',
7299 p_token1 => 'VAR_NAME',
7300 p_value1 => 'v_xlated_curr_ds_code',
7301 p_token2 => 'VAR_VAL',
7302 p_value2 => TO_CHAR(v_xlated_curr_ds_code));
7303 FEM_ENGINES_PKG.Tech_Message
7304 (p_severity => pc_log_level_statement,
7305 p_module => v_module,
7306 p_app_name => 'FEM',
7307 p_msg_name => 'FEM_GL_POST_204',
7308 p_token1 => 'VAR_NAME',
7309 p_value1 => 'v_xlated_curr_cal_per_id',
7310 p_token2 => 'VAR_VAL',
7311 p_value2 => TO_CHAR(v_xlated_curr_cal_per_id));
7312 FEM_ENGINES_PKG.Tech_Message
7313 (p_severity => pc_log_level_statement,
7314 p_module => v_module,
7315 p_app_name => 'FEM',
7316 p_msg_name => 'FEM_GL_POST_204',
7317 p_token1 => 'VAR_NAME',
7318 p_value1 => 'v_xlated_curr_code',
7319 p_token2 => 'VAR_VAL',
7320 p_value2 => v_xlated_curr_code);
7321 END IF; -- IF (xlated_curr_cur%FOUND)
7322 END IF; -- IF (pv_xlated_bal_option <> 'NONE')
7323
7324 -- Loop for each request to perform final process logging
7325 FOR v_req IN req_cur LOOP
7326
7327 -- Log the values retrieved from the request cursor for this Request
7328 FEM_ENGINES_PKG.Tech_Message
7329 (p_severity => pc_log_level_statement,
7330 p_module => v_module,
7331 p_app_name => 'FEM',
7332 p_msg_name => 'FEM_GL_POST_204',
7333 p_token1 => 'VAR_NAME',
7334 p_value1 => 'v_req.request_id',
7335 p_token2 => 'VAR_VAL',
7336 p_value2 => TO_CHAR(v_req.request_id));
7337 FEM_ENGINES_PKG.Tech_Message
7338 (p_severity => pc_log_level_statement,
7339 p_module => v_module,
7340 p_app_name => 'FEM',
7341 p_msg_name => 'FEM_GL_POST_204',
7342 p_token1 => 'VAR_NAME',
7343 p_value1 => 'v_req.output_dataset_code',
7344 p_token2 => 'VAR_VAL',
7345 p_value2 => v_req.output_dataset_code);
7346 FEM_ENGINES_PKG.Tech_Message
7347 (p_severity => pc_log_level_statement,
7348 p_module => v_module,
7349 p_app_name => 'FEM',
7350 p_msg_name => 'FEM_GL_POST_204',
7351 p_token1 => 'VAR_NAME',
7352 p_value1 => 'v_req.period_name',
7353 p_token2 => 'VAR_VAL',
7354 p_value2 => v_req.period_name);
7355 FEM_ENGINES_PKG.Tech_Message
7356 (p_severity => pc_log_level_statement,
7357 p_module => v_module,
7358 p_app_name => 'FEM',
7359 p_msg_name => 'FEM_GL_POST_204',
7360 p_token1 => 'VAR_NAME',
7361 p_value1 => 'v_req.cal_period_id',
7362 p_token2 => 'VAR_VAL',
7363 p_value2 => TO_CHAR(v_req.cal_period_id));
7364 FEM_ENGINES_PKG.Tech_Message
7365 (p_severity => pc_log_level_statement,
7366 p_module => v_module,
7367 p_app_name => 'FEM',
7368 p_msg_name => 'FEM_GL_POST_204',
7369 p_token1 => 'VAR_NAME',
7370 p_value1 => 'v_req.num_of_rows_selected',
7371 p_token2 => 'VAR_VAL',
7372 p_value2 => TO_CHAR(v_req.num_of_rows_selected));
7373 FEM_ENGINES_PKG.Tech_Message
7374 (p_severity => pc_log_level_statement,
7375 p_module => v_module,
7376 p_app_name => 'FEM',
7377 p_msg_name => 'FEM_GL_POST_204',
7378 p_token1 => 'VAR_NAME',
7382 FEM_ENGINES_PKG.Tech_Message
7379 p_value1 => 'v_req.num_of_rows_posted',
7380 p_token2 => 'VAR_VAL',
7381 p_value2 => TO_CHAR(v_req.num_of_rows_posted));
7383 (p_severity => pc_log_level_statement,
7384 p_module => v_module,
7385 p_app_name => 'FEM',
7386 p_msg_name => 'FEM_GL_POST_204',
7387 p_token1 => 'VAR_NAME',
7388 p_value1 => 'v_req.error_code',
7389 p_token2 => 'VAR_VAL',
7390 p_value2 => NVL(v_req.error_code, ''));
7391
7392 -- ---------------------------------------------------------------------
7393 -- 1. Update the number of rows posted into FEM_BALANCES by this Request
7394 -- if there are any for this Output Dataset/Cal Period and the
7395 -- Execution Status is SUCCESS
7396 -- ---------------------------------------------------------------------
7397 IF (v_req.num_of_rows_posted > 0 AND p_exec_status = 'SUCCESS')
7398 THEN
7399 -- Initialize the FND Message API
7400 FND_MSG_PUB.Initialize;
7401 -- Update the number of output rows in FEM_PL_TABLES for this Request
7402 FEM_PL_PKG.Update_Num_of_Output_Rows
7403 (P_API_VERSION => pc_API_version,
7404 P_COMMIT => 'T',
7405 P_REQUEST_ID => v_req.request_id,
7406 P_OBJECT_ID => pv_rule_obj_id,
7407 P_TABLE_NAME => 'FEM_BALANCES',
7408 P_STATEMENT_TYPE => pv_stmt_type,
7409 P_NUM_OF_OUTPUT_ROWS => v_req.num_of_rows_posted,
7410 P_USER_ID => pv_user_id,
7411 P_LAST_UPDATE_LOGIN => pv_login_id,
7412 X_MSG_COUNT => v_msg_count,
7413 X_MSG_DATA => v_msg_data,
7414 X_RETURN_STATUS => v_return_status);
7415
7416 -- Log the user message(s) returned by the API
7417 IF v_msg_count = 1
7418 THEN
7419 -- Only one message
7420 FEM_ENGINES_PKG.User_Message
7421 (p_app_name => 'FEM',
7422 p_msg_text => v_msg_data);
7423
7424 ELSIF v_msg_count > 1
7425 THEN
7426 -- More than one messages
7427 FOR i IN 1 .. v_msg_count LOOP
7428 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
7429 FEM_ENGINES_PKG.User_Message
7430 (p_app_name => 'FEM',
7431 p_msg_text => v_msg_data);
7432 END LOOP;
7433 END IF; -- IF v_msg_count = 1
7434
7435 END IF; -- IF (v_req.num_of_rows_posted > 0 AND p_exec_status = 'SUCCESS')
7436
7437 -- ---------------------------------------------------------------------
7438 -- 2. Update the number of rows not posted into FEM_BALANCES for this
7439 -- Request if the number of rows posted is smaller than the number of
7440 -- rows selected for this Output Dataset/Cal Period
7441 -- ---------------------------------------------------------------------
7442 IF (v_req.num_of_rows_selected > v_req.num_of_rows_posted)
7443 THEN
7444 -- Initialize the FND Message API
7445 FND_MSG_PUB.Initialize;
7446 -- Update the number of data errors in FEM_PL_OBJECT_EXECUTIONS for
7447 -- this Request
7448 FEM_PL_PKG.Update_Obj_Exec_Errors
7449 (P_API_VERSION => pc_API_version,
7450 P_COMMIT => 'T',
7451 P_REQUEST_ID => v_req.request_id,
7452 P_OBJECT_ID => pv_rule_obj_id,
7453 P_ERRORS_REPORTED => (v_req.num_of_rows_selected
7454 - v_req.num_of_rows_posted),
7455 P_ERRORS_REPROCESSED => 0,
7456 P_USER_ID => pv_user_id,
7457 P_LAST_UPDATE_LOGIN => pv_login_id,
7458 X_MSG_COUNT => v_msg_count,
7459 X_MSG_DATA => v_msg_data,
7460 X_RETURN_STATUS => v_return_status);
7461
7462 -- Log the user message(s) returned by the API
7463 IF v_msg_count = 1
7464 THEN
7465 -- Only one message
7466 FEM_ENGINES_PKG.User_Message
7467 (p_app_name => 'FEM',
7468 p_msg_text => v_msg_data);
7469
7470 ELSIF v_msg_count > 1
7471 THEN
7472 -- More than one messages
7473 FOR i IN 1 .. v_msg_count LOOP
7474 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
7475 FEM_ENGINES_PKG.User_Message
7476 (p_app_name => 'FEM',
7477 p_msg_text => v_msg_data);
7478 END LOOP;
7479 END IF; -- IF v_msg_count = 1
7480
7481 END IF; -- IF (v_req.num_of_rows_selected > v_req.num_of_rows_posted)
7482
7483 -- --------------------------------------------------
7484 -- 3. Determine the execution status for this Request
7485 -- --------------------------------------------------
7486 IF ( (p_exec_status = 'ERROR_RERUN')
7487 OR (v_req.num_of_rows_posted = 0 AND v_req.num_of_rows_selected > 0)
7488 OR (v_req.error_code IS NOT NULL))
7489 THEN
7490 -- Set the execution status to ERROR_RERUN when:
7491 -- * The passed Execution Status is ERROR_RERUN
7492 -- * OR there are rows selected but none of them can be posted
7493 -- * OR the error code of this Request is populated i.e. the possible
7494 -- error code will be PERIOD_GAP_EXIST
7495 v_exec_status := 'ERROR_RERUN';
7499 END IF;
7496 ELSE
7497 -- For other cases, set the execution status to SUCCESS
7498 v_exec_status := 'SUCCESS';
7500 -- Log the execution status of this Request
7501 FEM_ENGINES_PKG.Tech_Message
7502 (p_severity => pc_log_level_statement,
7503 p_module => v_module,
7504 p_app_name => 'FEM',
7505 p_msg_name => 'FEM_GL_POST_204',
7506 p_token1 => 'VAR_NAME',
7507 p_value1 => 'v_exec_status',
7508 p_token2 => 'VAR_VAL',
7509 p_value2 => v_exec_status);
7510
7511 -- ------------------------------------------------------------
7512 -- 4. Update the object execution status to ERROR_RERUN/SUCCESS
7513 -- ------------------------------------------------------------
7514 -- Initialize the FND Message API
7515 FND_MSG_PUB.Initialize;
7516 -- Update the object execution status
7517 FEM_PL_PKG.Update_Obj_Exec_Status
7518 (P_API_VERSION => pc_API_version,
7519 P_COMMIT => 'T',
7520 P_REQUEST_ID => v_req.request_id,
7521 P_OBJECT_ID => pv_rule_obj_id,
7522 P_EXEC_STATUS_CODE => v_exec_status,
7523 P_USER_ID => pv_user_id,
7524 P_LAST_UPDATE_LOGIN => pv_login_id,
7525 X_MSG_COUNT => v_msg_count,
7526 X_MSG_DATA => v_msg_data,
7527 X_RETURN_STATUS => v_return_status);
7528
7529 -- Log the user message(s) returned by the API
7530 IF v_msg_count = 1
7531 THEN
7532 -- Only one message
7533 FEM_ENGINES_PKG.User_Message
7534 (p_app_name => 'FEM',
7535 p_msg_text => v_msg_data);
7536
7537 ELSIF v_msg_count > 1
7538 THEN
7539 -- More than one messages
7540 FOR i IN 1 .. v_msg_count LOOP
7541 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
7542 FEM_ENGINES_PKG.User_Message
7543 (p_app_name => 'FEM',
7544 p_msg_text => v_msg_data);
7545 END LOOP;
7546 END IF; -- IF v_msg_count = 1
7547
7548 -- -------------------------------------------------------------
7549 -- 5. Update the request execution status to ERROR_RERUN/SUCCESS
7550 -- -------------------------------------------------------------
7551 -- Initialize the FND Message API
7552 FND_MSG_PUB.Initialize;
7553 -- Update the request execution status
7554 FEM_PL_PKG.Update_Request_Status
7555 (P_API_VERSION => pc_API_version,
7556 P_COMMIT => 'T',
7557 P_REQUEST_ID => v_req.request_id,
7558 P_EXEC_STATUS_CODE => v_exec_status,
7559 P_USER_ID => pv_user_id,
7560 P_LAST_UPDATE_LOGIN => pv_login_id,
7561 X_MSG_COUNT => v_msg_count,
7562 X_MSG_DATA => v_msg_data,
7563 X_RETURN_STATUS => v_return_status);
7564
7565 -- Log the user message(s) returned by the API
7566 IF v_msg_count = 1
7567 THEN
7568 -- Only one message
7569 FEM_ENGINES_PKG.User_Message
7570 (p_app_name => 'FEM',
7571 p_msg_text => v_msg_data);
7572
7573 ELSIF v_msg_count > 1
7574 THEN
7575 -- More than one messages
7576 FOR i IN 1 .. v_msg_count LOOP
7577 v_msg_data := FND_MSG_PUB.Get(p_msg_index => i, p_encoded => 'F');
7578 FEM_ENGINES_PKG.User_Message
7579 (p_app_name => 'FEM',
7580 p_msg_text => v_msg_data);
7581 END LOOP;
7582 END IF; -- IF v_msg_count = 1
7583
7584 -- -------------------------------------------------------------------
7585 -- 6. Register a data location entry for this Request if the execution
7586 -- status of this Request is SUCCESS
7587 -- -------------------------------------------------------------------
7588 -- Bug fix 4330346: Changed to register the data location if the execution
7589 -- status of this Request is SUCCESS regardless any
7590 -- balances are posted to FEM
7591 IF (v_exec_status = 'SUCCESS')
7592 THEN
7593 -- Determine the load status i.e. COMPLETE or INCOMPLETE
7594 IF (v_req.num_of_rows_selected = v_req.num_of_rows_posted)
7595 THEN
7596 -- All rows are posted, so set the load status to COMPLETE
7597 v_load_status := 'COMPLETE';
7598
7599 ELSE
7600 -- Only some rows are posted so set the load status to INCOMPLETE
7601 v_load_status := 'INCOMPLETE';
7602
7603 END IF; -- IF (v_req.num_of_rows_selected = v_req.num_of_rows_posted)
7604
7605 IF (v_xlated_curr_found
7606 AND v_req.output_dataset_code = v_xlated_curr_ds_code
7607 AND v_req.cal_period_id = v_xlated_curr_cal_per_id)
7608 THEN
7609 -- This translated currency is for this Request, so register the data
7610 -- location for each translated currency found
7611 LOOP
7612 -- Register the data location for a translated currency
7613 FEM_DIMENSION_UTIL_PKG.Register_Data_Location
7614 (P_REQUEST_ID => v_req.request_id,
7615 P_OBJECT_ID => pv_rule_obj_id,
7616 P_TABLE_NAME => 'FEM_BALANCES',
7617 P_LEDGER_ID => pv_ledger_id,
7618 P_CAL_PER_ID => v_req.cal_period_id,
7622 P_AVG_BAL_FLAG => pv_include_avg_bal,
7619 P_DATASET_CD => v_req.output_dataset_code,
7620 P_SOURCE_CD => pv_gl_source_system_code,
7621 P_LOAD_STATUS => v_load_status,
7623 P_TRANS_CURR => v_xlated_curr_code);
7624
7625 -- Get next translated currency
7626 FETCH xlated_curr_cur INTO v_xlated_curr_ds_code,
7627 v_xlated_curr_cal_per_id,
7628 v_xlated_curr_code;
7629 IF (xlated_curr_cur%NOTFOUND)
7630 THEN
7631 -- No more translated currency is found, so exit
7632 v_xlated_curr_found := FALSE;
7633 EXIT;
7634 ELSE
7635 -- A translated currency is found
7636 IF (v_xlated_curr_ds_code <> v_req.output_dataset_code
7637 OR v_xlated_curr_cal_per_id <> v_req.cal_period_id)
7638 THEN
7639 -- This translated currency is for another request, so exit
7640 EXIT;
7641 END IF; -- IF (v_xlated_curr_ds_code <> v_req.output_dataset_code
7642 END IF; -- IF (xlated_curr_cur%NOTFOUND)
7643
7644 END LOOP;
7645
7646 ELSE
7647 -- No translated currency is found for the output dataset code and
7648 -- cal period of this Request, so register the data location without
7649 -- passing any translated currency code
7650 FEM_DIMENSION_UTIL_PKG.Register_Data_Location
7651 (P_REQUEST_ID => v_req.request_id,
7652 P_OBJECT_ID => pv_rule_obj_id,
7653 P_TABLE_NAME => 'FEM_BALANCES',
7654 P_LEDGER_ID => pv_ledger_id,
7655 P_CAL_PER_ID => v_req.cal_period_id,
7656 P_DATASET_CD => v_req.output_dataset_code,
7657 P_SOURCE_CD => pv_gl_source_system_code,
7658 P_LOAD_STATUS => v_load_status,
7659 P_AVG_BAL_FLAG => pv_include_avg_bal);
7660
7661 END IF; -- IF (v_xlated_curr_found ...
7662
7663 END IF; -- IF (v_exec_status = 'SUCCESS' AND v_req.num_of_rows_posted > 0)
7664
7665 END LOOP; -- req_cur Loop
7666
7667 -- If the translated balances are included, close translated currency cursor
7668 IF (pv_xlated_bal_option <> 'NONE')
7669 THEN
7670 CLOSE xlated_curr_cur;
7671 END IF; -- IF (pv_xlated_bal_option <> 'NONE')
7672
7673 -- ---------------------------------------------
7674 -- 7. Log the passed Final Message and then exit
7675 -- ---------------------------------------------
7676 FEM_ENGINES_PKG.Tech_Message
7677 (P_SEVERITY => pc_log_level_event,
7678 P_MODULE => v_module,
7679 P_APP_NAME => 'FEM',
7680 P_MSG_NAME => p_final_message_name);
7681 FEM_ENGINES_PKG.User_Message
7682 (P_APP_NAME => 'FEM',
7683 P_MSG_NAME => p_final_message_name);
7684
7685 -- Log the function exit time to FND_LOG (successful completion)
7686 FEM_ENGINES_PKG.Tech_Message
7687 (p_severity => pc_log_level_procedure,
7688 p_module => v_module,
7689 p_app_name => 'FEM',
7690 p_msg_name => 'FEM_GL_POST_202',
7691 p_token1 => 'FUNC_NAME',
7692 p_value1 => v_func_name,
7693 p_token2 => 'TIME',
7694 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7695
7696 EXCEPTION
7697 WHEN OTHERS THEN
7698 -- <<< Unexpected database exceptions >>>
7699 pv_sqlerrm := SQLERRM;
7700 pv_callstack := dbms_utility.format_call_stack;
7701
7702 -- Log the call stack and the Oracle error message to
7703 -- FND_LOG with the "unexpected exception" severity level.
7704 FEM_ENGINES_PKG.Tech_Message
7705 (p_severity => pc_log_level_unexpected,
7706 p_module => v_module,
7707 p_msg_text => pv_sqlerrm);
7708 FEM_ENGINES_PKG.Tech_Message
7709 (p_severity => pc_log_level_unexpected,
7710 p_module => v_module,
7711 p_msg_text => pv_callstack);
7712
7713 -- Log the Oracle error message to the Concurrent Request Log
7714 FEM_ENGINES_PKG.User_Message
7715 (p_app_name => 'FEM',
7716 p_msg_text => pv_sqlerrm);
7717
7718 -- Log the function exit time to FND_LOG (with error)
7719 FEM_ENGINES_PKG.Tech_Message
7720 (p_severity => pc_log_level_procedure,
7721 p_module => v_module,
7722 p_app_name => 'FEM',
7723 p_msg_name => 'FEM_GL_POST_203',
7724 p_token1 => 'FUNC_NAME',
7725 p_value1 => v_func_name,
7726 p_token2 => 'TIME',
7727 p_value2 => TO_CHAR(SYSDATE)||' '||TO_CHAR(SYSDATE,'HH24:MI:SS'));
7728
7729 END Final_OGL_Process_Logging;
7730 -- =======================================================================
7731
7732 END FEM_GL_POST_PROCESS_PKG;