[Home] [Help]
PACKAGE BODY: APPS.FEM_RULE_SET_MANAGER
Source
1 package body FEM_RULE_SET_MANAGER AS
2 --$Header: FEMRSMANB.pls 120.5.12010000.3 2008/12/18 22:56:06 huli ship $
3
4 z_global_counter NUMBER := 0;
5 z_conc_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
6 z_user_id NUMBER := FND_GLOBAL.USER_ID;
7 z_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
8 z_local_vs_for_session NUMBER ;
9 z_Err_Code NUMBER := NULL;
10 z_Err_Msg VARCHAR2(30) := NULL;
11 z_continue_on_error BOOLEAN := TRUE;
12 z_dataset_error BOOLEAN := FALSE;
13
14 g_max_rule_set_depth NUMBER := FND_PROFILE.VALUE('FEM_RULE_SET_DEPTH');
15
16 -- TECH MESSAGE FORMAT (debugging oriented)
17 -- procedure/function definition for I/F
18 -- l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Mem_Obj_Prev_Processed';
19 -- fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
20 -- p_module=> l_module_name,
21 -- p_msg_text=> 'something happened here msg');
22 -- fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
23 -- p_module=> l_module_name,
24 -- p_msg_text=> 'something happened here msg');
25 G_LOG_STATEMENT CONSTANT NUMBER := fnd_log.level_statement;
26 G_LOG_PROCEDURE CONSTANT NUMBER := fnd_log.level_procedure;
27 G_LOG_EVENT CONSTANT NUMBER := fnd_log.level_event;
28 G_LOG_EXCEPTION CONSTANT NUMBER := fnd_log.level_exception;
29 G_LOG_ERROR CONSTANT NUMBER := fnd_log.level_error;
30 G_LOG_UNEXPECTED CONSTANT NUMBER := fnd_log.level_unexpected;
31 -- 000000000111111111122222222223333333333444444444455555555556
32 -- 123456789012345678901234567890123456789012345678901234567890
33 G_APP_NAME CONSTANT VARCHAR2(4) := 'FEM';
34 G_PKG_NAME CONSTANT VARCHAR2(25) := 'fem_rule_set_manager';
35 G_MODULE_NAME CONSTANT VARCHAR2(40) := 'fem.plsql.' || G_PKG_NAME || '.';
36
37 z_master_err_state NUMBER := FEM_UTILS.G_RSM_NO_ERR;
38
39
40
41 -- error messages and their macro replacement strings
42 -- 000000000111111111122222222223333333333444444444455555555556
43 -- 123456789012345678901234567890123456789012345678901234567890
44 G_FEMRSM_NOVALID_DEP_DEF CONSTANT VARCHAR2(40) := 'FEM_RSM_NOVALID_DEP_DEFINITION';
45 G_ERRMSG_NO_VALID_DEFINITION CONSTANT varchar2(40) := 'FEM_RSM_NO_VALID_DEFINITION';
46 G_ERRMSG_UNEXPECTED_SQLERROR CONSTANT varchar2(40) := 'FEM_RSM_UNEXPECTED_SQLERROR';
47 G_ERRMSG_DUP_RULE_OCC CONSTANT varchar2(40) := 'FEM_RSM_DUP_RULE_OCC';
48 G_ERRMSG_DUPLICATE_OCCURRENCE CONSTANT varchar2(40) := 'FEM_RSM_DUPLICATE_OCCURRENCE';
49 G_ERRMSG_DEPTH_CHECK_FAILURE CONSTANT varchar2(40) := 'FEM_RSM_DEPTH_CHECK_FAILURE';
50 G_ERRMSG_NO_VALID_VALSETS CONSTANT varchar2(40) := 'FEM_RSM_NO_VALID_VALSETS';
51 G_ERRMSG_DEFN_NOT_APPROVED CONSTANT varchar2(40) := 'FEM_RSM_DEFN_NOT_APPROVED';
52 G_ERRMSG_DSGRP_NOT_FOUND CONSTANT varchar2(40) := 'FEM_RSM_DATASETGROUP_NOT_FOUND';
53 G_ERRMSG_NO_DSG_FOR_LID CONSTANT varchar2(40) := 'FEM_RSM_NO_DSG_FOR_LID';
54 G_ERRMSG_NO_ODS CONSTANT varchar2(40) := 'FEM_RSM_NO_ODS';
55 G_ERRMSG_NO_ODSPRODFLAG CONSTANT varchar2(40) := 'FEM_RSM_NO_PRODFLAG_FOR_ODS';
56 G_ERRMSG_INVALID_ODS_PRODFLAG CONSTANT varchar2(40) := 'FEM_RSM_INVALID_ODS_PRODFLAG';
57
58 G_ERRMAC_ROUTINE_NAME CONSTANT varchar2(40) := 'ROUTINE_NAME';
59 G_ERRMAC_SQL_ERROR CONSTANT varchar2(40) := 'SQL_ERROR';
60 G_ERRMAC_RULE_SET CONSTANT varchar2(40) := 'RULE_SET';
61 G_ERRMAC_RULE_NAME CONSTANT varchar2(40) := 'RULE_NAME';
62 G_ERRMAC_DUP_RS CONSTANT varchar2(40) := 'DUP_RS';
63 G_ERRMAC_CONTAIN_RS CONSTANT varchar2(40) := 'CONTAIN_RS';
64 G_ERRMAC_VALUE CONSTANT varchar2(40) := 'VALUE';
65
66
67 Function getProcedureVersionFromDB RETURN VARCHAR2
68 IS
69 l_revString VARCHAR2(100);
70 l_start_of_string NUMBER;
71 l_charcount NUMBER;
72
73 Begin
74 -- return the current version of this file...
75 l_revString := '$Revision: 120.5.12010000.3 $';
76 l_start_of_string := instr(l_revString,':') + 1;
77 l_charcount := instr(l_revString,'$',-1) - l_start_of_string;
78
79 RETURN substr(l_revString,l_start_of_string,l_charcount);
80
81 End getProcedureVersionFromDB;
82
83
84 Procedure Get_ValidDefinition_Priv(p_Object_ID IN DEF_OBJECT_ID%TYPE
85 ,p_Rule_Effective_Date IN DATE
86 ,x_Object_Definition_ID OUT NOCOPY DEF_OBJECT_DEFINITION_ID%TYPE
87 ,x_Approval_Status_Code OUT NOCOPY DEF_APPROVAL_STATUS_CODE%TYPE
88 ) IS
89
90 l_Object_Definition_ID DEF_OBJECT_DEFINITION_ID%TYPE;
91 l_Approval_Status_Code DEF_APPROVAL_STATUS_CODE%TYPE;
92 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Get_ValidDefinition_Priv';
93
94 BEGIN
95 -- *******************************************************************************************
96 -- name : Get_ValidDefinition_Priv
97 -- Function : retrieve a valid object_definition_id using the passed
98 -- object_id and effective_date
99 -- Parameters
100 -- IN
101 -- p_Object_ID IN DEF_OBJECT_ID%TYPE
102 -- - the object_id to convert to an object_definition_id
103 -- p_Rule_Effective_Date IN DATE
104 -- - the effective date to use during the conversion
105 --
106 --
107 -- OUT
108 -- x_Object_Definition_ID OUT DEF_OBJECT_DEFINITION_ID%TYPE
109 -- - set to either a valid object_definition_id, or -1 if none found
110 -- x_Approval_Status_Code OUT DEF_APPROVAL_STATUS_CODE%TYPE
111 -- - set to the value of the same named column in fem_object_definition_vl
112 -- if we found a valid definition, NULL otherwise
113 --
114 -- HISTORY
115 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
116 --
117 -- *******************************************************************************************
118
119 -- retrieve a valid object-definition-id for the passed object-id
120 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
121 p_module=> l_module_name,
122 p_msg_text=> 'ENTRY');
123
124
125 open getValidDefForObject( p_Object_ID
126 ,p_Rule_Effective_Date);
127 FETCH getValidDefForObject
128 INTO
129 l_Object_Definition_ID
130 ,l_Approval_Status_Code;
131
132 -- return -1 if we didn't find any valid definition for the current
133 -- effective date.
134 If getValidDefForObject%NOTFOUND then
135 x_Object_Definition_ID := -1;
136 x_Approval_Status_Code := NULL;
137 Else
138 x_Object_Definition_ID := l_Object_Definition_ID;
139 x_Approval_Status_Code := l_Approval_Status_Code;
140 End If;
141
142 CLOSE getValidDefForObject;
143
144
145 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
146 p_module=> l_module_name,
147 p_msg_text=> 'EXIT');
148 End Get_ValidDefinition_Priv;
149
150
151
152
153
154 -- *******************************************************************************************
155 -- name : reset_master_err_state
156 -- Function : set master_err_state to no error on entry to master API calls.
157 -- Parameters
158 --
159 -- HISTORY
160 -- 22-Apr-2004 rjking created
161 --
162 -- *******************************************************************************************
163 PROCEDURE reset_master_err_state IS
164 BEGIN
165 z_master_err_state := FEM_UTILS.G_RSM_NO_ERR;
166 END reset_master_err_state;
167
168
169
170 Function GetObjectDisplayName(p_Obj_ID IN DEF_OBJECT_ID%TYPE) RETURN VARCHAR2 IS
171
172 l_Object_Display_Name DEF_OBJECT_DISPLAY_NAME%TYPE;
173 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'GetObjectDisplayName';
174
175 Cursor getObjectDisplayName(p_Obj_ID IN DEF_OBJECT_ID%TYPE) IS
176 select o.object_name
177 from fem_object_catalog_vl o
178 where o.object_id = p_Obj_ID;
179
180 Begin
181 -- *******************************************************************************************
182 -- name : GetObjectDisplayName
183 -- Function : lookup the display name for a passed object_id
184 -- Parameters
185 -- IN
186 -- p_Obj_ID
187 -- - the object_id for the name we are looking up
188 --
189 -- OUT
190 -- none
191 --
192 -- Return value
193 -- the display name for the object.
194 --
195 -- HISTORY
196 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
197 --
198 -- *******************************************************************************************
199
200 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
201 p_module=> l_module_name,
202 p_msg_text=> 'ENTRY');
203
204 OPEN getObjectDisplayName(p_Obj_ID);
205 FETCH getObjectDisplayName
206 INTO l_Object_Display_Name;
207
208 -- Bug 6972946: Instead of showing a hard coded string of "Not Valid
209 -- Object" (which is a translation issue anyway), we should just
210 -- show the actual missing Object ID.
211 If getObjectDisplayName%NOTFOUND then
212 -- l_Object_Display_Name := '[Not Valid Object]';
213 l_Object_Display_Name := '['||p_Obj_ID||']';
214 End If;
215
216 CLOSE getObjectDisplayName;
217
218 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
219 p_module=> l_module_name,
220 p_msg_text=> 'EXIT');
221
222 RETURN l_Object_Display_Name;
223
224 EXCEPTION
225 WHEN OTHERS THEN
226 FEM_UTILS.set_master_err_state( z_master_err_state,
227 FEM_UTILS.G_RSM_FATAL_ERR,
228 G_APP_NAME,
229 G_ERRMSG_UNEXPECTED_SQLERROR,
230 G_ERRMAC_ROUTINE_NAME,
231 l_module_name,
232 NULL,
233 G_ERRMAC_SQL_ERROR,
234 SQLERRM);
235 RAISE;
236
237 End GetObjectDisplayName;
238
239
240
241
242
243 Procedure Get_ValidDefinition_Pub(p_Object_ID IN DEF_OBJECT_ID%TYPE
244 ,p_Rule_Effective_Date IN VARCHAR2
245 ,x_Object_Definition_ID OUT NOCOPY FEM_OBJECT_DEFINITION_B.OBJECT_DEFINITION_ID%TYPE
246 ,x_Err_Code OUT NOCOPY NUMBER
247 ,x_Err_Msg OUT NOCOPY VARCHAR2) IS
248 l_Rule_Effective_Date DATE;
249 l_Approval_Status_Code DEF_APPROVAL_STATUS_CODE%TYPE;
250 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Get_ValidDefinition_Pub';
251
252 Begin
253 -- *******************************************************************************************
254 -- name : Get_ValidDefinition_Pub
255 -- Function : retrieve a valid object_definition_id using the passed
256 -- object_id and effective_date
257 -- Parameters
258 -- IN
259 -- p_Object_ID IN DEF_OBJECT_ID%TYPE
260 -- - the object_id to convert to an object_definition_id
261 -- p_Rule_Effective_Date IN DATE
262 -- - the effective date to use during the conversion
263 --
264 --
265 -- OUT
266 -- x_Object_Definition_ID OUT DEF_OBJECT_DEFINITION_ID%TYPE
267 -- - set to either a valid object_definition_id, or -1 if none found
268 -- x_Approval_Status_Code OUT DEF_APPROVAL_STATUS_CODE%TYPE
269 -- - set to the value of the same named column in fem_object_definition_vl
270 -- if we found a valid definition, NULL otherwise
271 --
272 -- HISTORY
273 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
274 --
275 -- *******************************************************************************************
276
277
278 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
279 p_module=> l_module_name,
280 p_msg_text=> 'ENTRY: p_Object_ID = '||p_Object_ID||'; p_Rule_Effective_Date = '||p_Rule_Effective_Date);
281
282 l_Rule_Effective_Date := FND_DATE.CANONICAL_TO_DATE(p_Rule_Effective_Date);
283
284 Get_ValidDefinition_Priv(p_Object_ID
285 ,l_Rule_Effective_Date
286 ,x_Object_Definition_ID
287 ,l_Approval_Status_Code);
288
289 -- remember, -1 means 'no valid definition'..
290 If (x_Object_Definition_ID = -1) then
291 -- we had an error.. no valid object_definition for p_Object_ID
292 -- error codes maintained right now for backwards compatibility..
293 z_Err_Code := 1;
294 -- todo:: setup error message here..
295 FEM_UTILS.set_master_err_state( z_master_err_state,
296 FEM_UTILS.G_RSM_NONFATAL_ERR,
297 G_APP_NAME,
298 G_ERRMSG_NO_VALID_DEFINITION ,
299 G_ERRMAC_RULE_NAME,
300 GetObjectDisplayName(p_Object_ID));
301 Else
302 z_Err_Code := 0;
303 End If;
304
305
306 x_Err_Code := z_Err_Code;
307 x_Err_Msg := z_Err_Msg ;
308
309 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
310 p_module=> l_module_name,
311 p_msg_text=> 'EXIT');
312 EXCEPTION
313 WHEN OTHERS THEN
314 FEM_UTILS.set_master_err_state( z_master_err_state,
315 FEM_UTILS.G_RSM_FATAL_ERR,
316 G_APP_NAME,
317 G_ERRMSG_UNEXPECTED_SQLERROR,
318 G_ERRMAC_ROUTINE_NAME,
319 l_module_name,
320 NULL,
321 G_ERRMAC_SQL_ERROR,
322 SQLERRM);
323 RAISE;
324
325 End Get_ValidDefinition_Pub;
326
327
328 Function GetErrMsgText(p_Msg_Name IN VARCHAR2
329 ,p_Token_Name IN VARCHAR2 DEFAULT NULL
330 ,p_Token_Value IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
331 x_Msg_Text VARCHAR2(2000);
332 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'GetErrMsgText';
333 Begin
334 -- *******************************************************************************************
335 -- name : GetErrMsgText
336 -- Function : Do simple lookup of message. Support for one token only
337 -- Parameters
338 -- IN
339 -- p_Msg_Name
340 -- - Name of message to look up
341 -- p_Token_Name
342 -- - either token name, or NULL if no token
343 -- p_Token_Value
344 -- - value for token.
345 --
346 -- OUT
347 -- none
348 --
349 -- Return value
350 -- set to message text
351 --
352 -- HISTORY
353 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
354 --
355 -- *******************************************************************************************
356
357 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
358 p_module=> l_module_name,
359 p_msg_text=> 'ENTRY');
360
361
362 FND_MESSAGE.SET_NAME('FEM',p_Msg_Name);
363
364 If (p_Token_Name IS NOT NULL) then
365 FND_MESSAGE.SET_TOKEN(p_Token_Name,p_Token_Value );
366 End If;
367
368 x_Msg_Text := FND_MESSAGE.GET();
369
370 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
371 p_module=> l_module_name,
372 p_msg_text=> 'EXIT');
373 RETURN x_Msg_Text;
374
375 EXCEPTION
376 WHEN OTHERS THEN
377 FEM_UTILS.set_master_err_state( z_master_err_state,
378 FEM_UTILS.G_RSM_FATAL_ERR,
379 G_APP_NAME,
380 G_ERRMSG_UNEXPECTED_SQLERROR,
381 G_ERRMAC_ROUTINE_NAME,
382 l_module_name,
383 NULL,
384 G_ERRMAC_SQL_ERROR,
385 SQLERRM);
386 RAISE;
387 End GetErrMsgText;
388
389
390 Function GetObjectIDFromDefID(p_Obj_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE) RETURN NUMBER IS
391 l_Object_ID DEF_OBJECT_ID%TYPE;
392 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'GetObjectIDFromDefID';
393
394 Cursor getObjectID(p_Obj_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE) IS
395 SELECT o.object_id
396 from fem_object_catalog_b o
397 ,fem_object_definition_b od
398 where o.object_id = od.object_id
399 and od.object_definition_id = p_Obj_Def_ID;
400
401 Begin
402 -- *******************************************************************************************
403 -- name : GetObjectIDFromDefID
404 -- Function : Lookup an object_id from the passed object_definition_id
405 -- Parameters
406 -- IN
407 -- p_Obj_Def_ID
408 -- - the object_definition_id to lookup
409 --
410 -- OUT
411 -- none
412 --
413 -- Return value
414 -- the object_id_found
415 --
416 -- HISTORY
417 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
418 --
419 -- *******************************************************************************************
420 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
421 p_module=> l_module_name,
422 p_msg_text=> 'ENTRY');
423
424 OPEN getObjectID(p_Obj_Def_ID);
425 FETCH getObjectID
426 INTO l_Object_ID;
427 CLOSE getObjectID;
428
429 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
430 p_module=> l_module_name,
431 p_msg_text=> 'EXIT');
432 RETURN l_Object_ID;
433
434 EXCEPTION
435 WHEN OTHERS THEN
436 FEM_UTILS.set_master_err_state( z_master_err_state,
437 FEM_UTILS.G_RSM_FATAL_ERR,
438 G_APP_NAME,
439 G_ERRMSG_UNEXPECTED_SQLERROR,
440 G_ERRMAC_ROUTINE_NAME,
441 l_module_name,
442 NULL,
443 G_ERRMAC_SQL_ERROR,
444 SQLERRM);
445 RAISE;
446 End GetObjectIDFromDefID;
447
448
449
450 Procedure GetObjectDisplayNameandFolder(p_Obj_ID IN DEF_OBJECT_ID%TYPE
451 ,l_Object_Display_Name OUT NOCOPY DEF_OBJECT_DISPLAY_NAME%TYPE
452 ,l_Object_Folder_Name OUT NOCOPY DEF_FOLDER_NAME%TYPE) IS
453
454 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'GetObjectDisplayNameandFolder';
455
456 Cursor getNameAndFolder(p_Obj_ID IN DEF_OBJECT_ID%TYPE) IS
457 select o.object_name
458 ,f.folder_name
459 from fem_object_catalog_vl o
460 ,fem_folders_vl f
461 where o.object_id = p_Obj_ID
462 and f.folder_id = o.folder_id;
463
464 Begin
465 -- *******************************************************************************************
466 -- name : GetObjectDisplayNameandFolder
467 -- Function : lookup the display name and folder name
468 -- for a passed object_id
469 -- Parameters
470 -- IN
471 -- p_Obj_ID
472 -- - the object_id for the name we are looking up
473 --
474 -- OUT
475 -- l_Object_Display_Name OUT DEF_OBJECT_DISPLAY_NAME%TYPE
476 -- - the display name found.
477 -- l_Object_Folder_Name OUT DEF_FOLDER_NAME%TYPE) IS
478 -- - the folder name found.
479 --
480 --
481 -- HISTORY
482 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
483 --
484 -- *******************************************************************************************
485 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
486 p_module=> l_module_name,
487 p_msg_text=> 'ENTRY');
488
489 OPEN getNameAndFolder(p_Obj_ID);
490 FETCH getNameAndFolder
491 INTO l_Object_Display_Name
492 ,l_Object_Folder_Name;
493
494 If getNameAndFolder%NOTFOUND then
495 l_Object_Display_Name := '[Not Valid Object]';
496 l_Object_Folder_Name := '[*****]';
497 End If;
498
499 CLOSE getNameAndFolder;
500
501 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
502 p_module=> l_module_name,
503 p_msg_text=> 'EXIT');
504 EXCEPTION
505 WHEN OTHERS THEN
506 FEM_UTILS.set_master_err_state( z_master_err_state,
507 FEM_UTILS.G_RSM_FATAL_ERR,
508 G_APP_NAME,
509 G_ERRMSG_UNEXPECTED_SQLERROR,
510 G_ERRMAC_ROUTINE_NAME,
511 l_module_name,
512 NULL,
513 G_ERRMAC_SQL_ERROR,
514 SQLERRM);
515 RAISE;
516
517 End GetObjectDisplayNameandFolder;
518
519
520 Procedure Pop_Invalid_MmbrFlags_Tbl
521 (p_Member_Flags_Tab IN OUT NOCOPY Members_Validation_Status_Tab
522 ,p_Member_Flags_Count IN OUT NOCOPY BINARY_INTEGER
523 ,p_Folder_Name_Of_Member IN VARCHAR2
524 ,p_Owning_RS_Name_Of_Member IN VARCHAR2
525 ,p_Member_Object_ID IN DEF_OBJECT_ID%TYPE
526 ,p_Member_Name IN VARCHAR2
527 ,p_Member_Type IN VARCHAR2
528 ,p_Valid_Member_Enabled_Status IN VARCHAR2
529 ,p_Valid_Rule_Def_Status IN VARCHAR2
530 ,p_Valid_Lock_Status IN VARCHAR2
531 ,p_Valid_Approval_Status IN VARCHAR2
532 ,p_Valid_Dep_Obj_Status IN VARCHAR2
533 ,p_Valid_Local_VS_Status IN VARCHAR2
534 ,p_Other_Error_Status IN VARCHAR2) IS
535 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Pop_Invalid_MmbrFlags_Tbl';
536 Begin
537 -- *******************************************************************************************
538 -- name : Pop_Invalid_MmbrFlags_Tbl
539 -- Function : Initialize entry in p_Member_Flags_Tab that is
540 -- pointed to by p_Member_Flags_Count.
541 -- Parameters
542 -- IN
543 -- p_Folder_Name_Of_Member
544 -- - folder where member is stored..
545 -- p_Owning_RS_Name_Of_Member
546 -- - rule set that owns this rule entry
547 -- p_Member_Object_ID
548 -- - object of this rule entry
549 -- p_Member_Name
550 -- - display name of this rule entry
551 -- p_Member_Type
552 -- - type of this rule entry (i.e. 'MAPPING_RULE')
553 -- p_Valid_Member_Enabled_Status
554 -- - valid values:?
555 -- p_Valid_Rule_Def_Status
556 -- - ?
557 -- p_Valid_Lock_Status
558 -- - ?
559 -- p_Valid_Approval_Status
560 -- - ?
561 -- p_Valid_Dep_Obj_Status
562 -- - ?
563 -- p_Valid_Local_VS_Status
564 -- - ?
565 -- p_Other_Error_Status
566 -- - ?
567 --
568 -- OUT
569 -- none.
570 --
571 -- In Out
572 -- p_Member_Flags_Tab
573 -- - the table containing the current members (processed?)
574 -- p_Member_Flags_Count
575 -- - current index into p_Member_Flags_Tab
576 --
577 -- HISTORY
578 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
579 --
580 -- *******************************************************************************************
581 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
582 p_module=> l_module_name,
583 p_msg_text=> 'ENTRY');
584
585 p_Member_Flags_Tab(p_Member_Flags_Count).Folder_Name := p_Folder_Name_Of_Member;
586 p_Member_Flags_Tab(p_Member_Flags_Count).Owning_RuleSet_Name := p_Owning_RS_Name_Of_Member;
587 p_Member_Flags_Tab(p_Member_Flags_Count).Object_Name := p_Member_Name;
588 p_Member_Flags_Tab(p_Member_Flags_Count).Object_Type := p_Member_Type;
589 p_Member_Flags_Tab(p_Member_Flags_Count).Object_ID := p_Member_Object_ID;
590
591 If ( (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Member_Enabled_Status = ' ')
592 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Member_Enabled_Status IS NULL) ) then
593 p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Member_Enabled_Status := p_Valid_Member_Enabled_Status;
594 End If;
595
596 If ( (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Rule_Def_Status = ' ')
597 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Rule_Def_Status IS NULL) ) then
598 p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Rule_Def_Status := p_Valid_Rule_Def_Status;
599 End If;
600
601 If ( (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Lock_Status = ' ')
602 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Lock_Status IS NULL) ) then
603 p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Lock_Status := p_Valid_Lock_Status;
604 End If;
605
606 If ( (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Approval_Status = ' ')
607 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Approval_Status IS NULL) ) then
608 p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Approval_Status := p_Valid_Approval_Status;
609 End If;
610
611 If ( (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Dep_Obj_Status = ' ')
612 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Dep_Obj_Status IS NULL) ) then
613 p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Dep_Obj_Status := p_Valid_Dep_Obj_Status;
614 End If;
615
616 If ( (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Local_VS_Status = ' ')
617 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Local_VS_Status IS NULL) ) then
618 p_Member_Flags_Tab(p_Member_Flags_Count).Valid_Local_VS_Status := p_Valid_Local_VS_Status;
619 End If;
620
621 IF ( (p_Member_Flags_Tab(p_Member_Flags_Count).Other_Error_Status = ' ')
622 OR (p_Member_Flags_Tab(p_Member_Flags_Count).Other_Error_Status IS NULL) ) then
623 p_Member_Flags_Tab(p_Member_Flags_Count).Other_Error_Status := p_Other_Error_Status;
624 End If;
625
626 -- move pointer to next free cell.
627 p_Member_Flags_Count := p_Member_Flags_Count + 1;
628
629 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
630 p_module=> l_module_name,
631 p_msg_text=> 'EXIT');
632 EXCEPTION
633 WHEN OTHERS THEN
634 -- todo:: useful?? z_Err_Code := -1;
635 FEM_UTILS.set_master_err_state( z_master_err_state,
636 FEM_UTILS.G_RSM_FATAL_ERR,
637 G_APP_NAME,
638 G_ERRMSG_UNEXPECTED_SQLERROR,
639 G_ERRMAC_ROUTINE_NAME,
640 l_module_name,
641 NULL,
642 G_ERRMAC_SQL_ERROR,
643 SQLERRM);
644 RAISE;
645
646 End Pop_Invalid_MmbrFlags_Tbl;
647
648
649 Procedure Populate_Valid_Member_Tab(p_Valid_Invalid_Members_Tab IN OUT NOCOPY Valid_Invalid_Members_Inst_Tab
650 ,p_Valid_Invalid_Members_Count IN OUT NOCOPY BINARY_INTEGER
651 ,p_Folder_Name_Of_Member IN VARCHAR2
652 ,p_Owning_RS_Name_Of_Member IN VARCHAR2
653 ,p_Member_Object_ID IN DEF_OBJECT_ID%TYPE
654 ,p_Member_Name IN VARCHAR2
655 ,p_Member_Type IN VARCHAR2
656 ,p_Member_Status IN VARCHAR2) IS
657 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Populate_Valid_Member_Tab';
658 Begin
659 -- *******************************************************************************************
660 -- name : Populate_Valid_Member_Tab
661 -- Function : Initialize entry in p_Valid_Invalid_Members_Tab that is
662 -- pointed to by p_Valid_Invalid_Members_Count.
663 -- Parameters
664 -- IN
665 -- p_Folder_Name_Of_Member
666 -- - folder name of current object pointed to by p_Valid_Invalid_Members_Count
667 -- p_Owning_RS_Name_Of_Member
668 -- - owning rule set of current object pointed to by p_Valid_Invalid_Members_Count
669 -- p_Member_Object_ID
670 -- - object_id of current object pointed to by p_Valid_Invalid_Members_Count
671 -- p_Member_Name
672 -- - display name of current object pointed to by p_Valid_Invalid_Members_Count
673 -- p_Member_Type
674 -- - type of current object (i.e. 'MAPPING_RULE') pointed to by p_Valid_Invalid_Members_Count
675 -- p_Member_Status
676 -- - ?
677 --
678 -- OUT
679 -- none.
680 --
681 -- In Out
682 -- p_Valid_Invalid_Members_Tab
683 -- - ?
684 -- p_Valid_Invalid_Members_Count
685 -- - current indext into p_Valid_Invalid_Members_Tab
686 --
687 --
688 -- HISTORY
689 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
690 --
691 -- *******************************************************************************************
692 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
693 p_module=> l_module_name,
694 p_msg_text=> 'ENTRY');
695
696 p_Valid_Invalid_Members_Tab(p_Valid_Invalid_Members_Count).Folder_Name := p_Folder_Name_Of_Member;
697 p_Valid_Invalid_Members_Tab(p_Valid_Invalid_Members_Count).Owning_RuleSet_Name := p_Owning_RS_Name_Of_Member;
698 p_Valid_Invalid_Members_Tab(p_Valid_Invalid_Members_Count).Object_ID := p_Member_Object_ID;
699 p_Valid_Invalid_Members_Tab(p_Valid_Invalid_Members_Count).Object_Name := p_Member_Name;
700 p_Valid_Invalid_Members_Tab(p_Valid_Invalid_Members_Count).Object_Type := p_Member_Type;
701 p_Valid_Invalid_Members_Tab(p_Valid_Invalid_Members_Count).Validation_Status := p_Member_Status;
702
703 -- move pointer to next free cell.
704 p_Valid_Invalid_Members_Count := p_Valid_Invalid_Members_Count +1;
705
706 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
707 p_module=> l_module_name,
708 p_msg_text=> 'EXIT');
709 EXCEPTION
710 WHEN OTHERS THEN
711 -- todo:: useful? z_Err_Code := -1;
712 FEM_UTILS.set_master_err_state( z_master_err_state,
713 FEM_UTILS.G_RSM_FATAL_ERR,
714 G_APP_NAME,
715 G_ERRMSG_UNEXPECTED_SQLERROR,
716 G_ERRMAC_ROUTINE_NAME,
717 l_module_name,
718 NULL,
719 G_ERRMAC_SQL_ERROR,
720 SQLERRM);
721 RAISE;
722
723
724 End Populate_Valid_Member_Tab;
725
726
727 Procedure Log_Dependent_Object_Status(p_Parent_Object_ID IN DEF_OBJECT_ID%TYPE
728 ,p_Dependent_Objects_Tab IN Dependent_Objects_Tab
729 ,p_Dependent_Objects_Count IN BINARY_INTEGER) IS
730 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Log_Dependent_Object_Status';
731 Begin
732 -- *******************************************************************************************
733 -- name : Log_Dependent_Object_Status
734 -- Function : Log dependent object status to the fnd_file output file.
735 -- ?? this may be where we output invalid rules found in rulesets rjk ??
736 -- Parameters
737 -- IN
738 -- p_Parent_Object_ID
739 -- - object_id of owning object
740 -- p_Dependent_Objects_Tab
741 -- - table of dependent objects??
742 -- p_Dependent_Objects_Count
743 -- - count of object in table.
744 --
745 -- OUT
746 -- none.
747 --
748 --
749
750 --
751 -- HISTORY
752 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
753 --
754 -- *******************************************************************************************
755 -- implemented as linear search.
756 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
757 p_module=> l_module_name,
758 p_msg_text=> 'ENTRY');
759
760 For i in 0..p_Dependent_Objects_Count-1 LOOP
761 if (p_Dependent_Objects_Tab(i).Parent_Object_ID = p_Parent_Object_ID) then
762
763 fnd_file.put_line(FND_FILE.OUTPUT,
764 '=>'
765 || RPAD(p_Dependent_Objects_Tab(i).Dependent_Object_Display_Name,40,' ')
766 || RPAD(p_Dependent_Objects_Tab(i).Dependent_Object_Type_Code,32,' ')
767 || RPAD(p_Dependent_Objects_Tab(i).Dependent_Object_Folder_Name,32,' ')
768 || RPAD('***',42,' ')
769 || RPAD('***',16,' ')
770 || RPAD('***',22,' ')
771 || RPAD(G_RSM_NO_VALID_DEFN,12,' ')
772 || RPAD('***',13,' ')
773 || RPAD('***',17,' ')
774 || RPAD('***',18,' ')
775 );
776 end if;
777 End LOOP;
778
779 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
780 p_module=> l_module_name,
781 p_msg_text=> 'EXIT');
782 End Log_Dependent_Object_Status;
783
784
785 Procedure Log_Dep_Status_For_Single_Rule(p_Parent_Object_ID IN DEF_OBJECT_ID%TYPE
786 ,p_Dependent_Objects_Tab IN Dependent_Objects_Tab
787 ,p_Dependent_Objects_Count IN BINARY_INTEGER) IS
788 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Log_Dep_Status_For_Single_Rule';
789 Begin
790 -- *******************************************************************************************
791 -- name : Log_Dep_Status_For_Single_Rule
792 -- Function : Log dependent object status to the fnd_file output file.
793 -- ?? this may be where we output invalid rules found in rulesets rjk ??
794 -- Parameters
795 -- IN
796 -- p_Parent_Object_ID
797 -- - object_id of owning object
798 -- p_Dependent_Objects_Tab
799 -- - table of dependent objects??
800 -- p_Dependent_Objects_Count
801 -- - count of object in table.
802 --
803 -- OUT
804 -- none.
805 --
806 -- HISTORY
807 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
808 --
809 -- *******************************************************************************************
810
811 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
812 p_module=> l_module_name,
813 p_msg_text=> 'ENTRY');
814
815
816 -- implemented as linear search
817 For i in 0..p_Dependent_Objects_Count-1 LOOP
818 if (p_Dependent_Objects_Tab(i).Parent_Object_ID = p_Parent_Object_ID) then
819
820 fnd_file.put_line(FND_FILE.OUTPUT,
821 '=>'
822 || RPAD(p_Dependent_Objects_Tab(i).Dependent_Object_Display_Name,40,' ')
823 || RPAD(p_Dependent_Objects_Tab(i).Dependent_Object_Folder_Name,32,' ')
824 || RPAD(G_RSM_NO_VALID_DEFN,32,' ')
825 || RPAD('***',13,' ')
826 || RPAD('***',17,' ')
827 || RPAD('***',18,' ')
828 );
829
830 end if;
831 End LOOP;
832
833 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
834 p_module=> l_module_name,
835 p_msg_text=> 'EXIT');
836
837 End Log_Dep_Status_For_Single_Rule;
838
839
840
841 Procedure Write_Flagged_Members_Output( p_Flagged_Members_Tab IN OUT NOCOPY Members_Validation_Status_Tab
842 ,p_Flagged_Members_Count IN OUT NOCOPY BINARY_INTEGER
843 ,p_Dependent_Objects_Tab IN OUT NOCOPY Dependent_Objects_Tab
844 ,p_Dependent_Objects_Count IN OUT NOCOPY BINARY_INTEGER) IS
845 s_Err_Msg_Text VARCHAR2(2000);
846 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Write_Flagged_Members_Output';
847
848 Begin
849 -- *******************************************************************************************
850 -- name : Write_Flagged_Members_Output
851 -- Function : Log entire contents of p_Flagged_Members_Tab table. Also log
852 -- dependent objects entries if the status of the current entry is
853 -- 'G_RSM_DEP_OBJECTS_INVALID'
854 -- Parameters
855 -- IN
856 -- p_Flagged_Members_Tab
857 -- - table to log..
858 -- p_Flagged_Members_Count
859 -- - count of entries in p_Flagged_Members_Tab
860 -- p_Dependent_Objects_Tab
861 -- - table containing objects that are dependent objects of objects in p_Flagged_Members_Tab
862 -- p_Dependent_Objects_Count
863 -- - count of entries in p_Dependent_Objects_Tab
864 --
865 -- OUT
866 -- none.
867 --
868 --
869 -- HISTORY
870 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
871 --
872 -- *******************************************************************************************
873 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
874 p_module=> l_module_name,
875 p_msg_text=> 'ENTRY');
876
877 For i in 0..p_Flagged_Members_Count -1 LOOP
878
879 fnd_file.put_line(FND_FILE.OUTPUT,
880 RPAD(p_Flagged_Members_Tab(i).Object_Name,42,' ')
881 || RPAD(p_Flagged_Members_Tab(i).Object_Type,32,' ')
882 || RPAD(p_Flagged_Members_Tab(i).Folder_Name,32,' ')
883 || RPAD(p_Flagged_Members_Tab(i).Owning_RuleSet_Name,42,' ')
884 || RPAD(p_Flagged_Members_Tab(i).Valid_Member_Enabled_Status,16,' ')
885 || RPAD(p_Flagged_Members_Tab(i).Other_Error_Status,22,' ')
886 || RPAD(p_Flagged_Members_Tab(i).Valid_Rule_Def_Status,12,' ')
887 || RPAD(p_Flagged_Members_Tab(i).Valid_Lock_Status,13,' ')
888 || RPAD(p_Flagged_Members_Tab(i).Valid_Local_VS_Status,17,' ')
889 || RPAD(p_Flagged_Members_Tab(i).Valid_Approval_Status,17,' ')
890 || RPAD(p_Flagged_Members_Tab(i).Valid_Dep_Obj_Status,18,' ')
891 );
892
893 If (p_Flagged_Members_Tab(i).Valid_Dep_Obj_Status = G_RSM_DEP_OBJECTS_INVALID) then
894 Log_Dependent_Object_Status(p_Flagged_Members_Tab(i).Object_ID
895 ,p_Dependent_Objects_Tab
896 ,p_Dependent_Objects_Count);
897
898 End If;
899 End LOOP;
900 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
901 p_module=> l_module_name,
902 p_msg_text=> 'EXIT');
903
904 End Write_Flagged_Members_Output;
905
906
907
908 Procedure Write_Valid_Invalid_Mem_Output(p_Valid_Invalid_Members_Tab IN OUT NOCOPY Valid_Invalid_Members_Inst_Tab
909 ,p_Valid_Invalid_Members_Count IN OUT NOCOPY BINARY_INTEGER
910 ,p_Dependent_Objects_Tab IN OUT NOCOPY Dependent_Objects_Tab -- looks dead..
911 ,p_Dependent_Objects_Count IN OUT NOCOPY BINARY_INTEGER) IS -- looks dead..
912 s_Err_Msg_Text VARCHAR2(2000);
913 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Write_Valid_Invalid_Mem_Output';
914
915 Begin
916 -- *******************************************************************************************
917 -- name : Write_Valid_Invalid_Mem_Output
918 -- Function : Log entire contents of p_Valid_Invalid_Members_Tab table.
919 --
920 -- Parameters
921 -- IN
922 -- p_Valid_Invalid_Members_Tab
923 -- - table to log..
924 -- p_Valid_Invalid_Members_Count
925 -- - count of entries in p_Valid_Invalid_Members_Tab
926 --
927 -- -----------the two parameters below appear to be deprecated------------
928 -- p_Dependent_Objects_Tab
929 -- - table containing objects that are dependent objects of objects in p_Flagged_Members_Tab
930 -- p_Dependent_Objects_Count
931 -- - count of entries in p_Dependent_Objects_Tab
932 --
933 -- OUT
934 -- none.
935 --
936 --
937 --
938 -- HISTORY
939 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
940 --
941 -- *******************************************************************************************
942 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
943 p_module=> l_module_name,
944 p_msg_text=> 'ENTRY');
945
946
947 For i in 0..p_Valid_Invalid_Members_Count-1 LOOP
948 fnd_file.put_line(FND_FILE.OUTPUT,
949 RPAD(p_Valid_Invalid_Members_Tab(i).Object_Name,40,' ')
950 || RPAD(p_Valid_Invalid_Members_Tab(i).Object_Type,30,' ')
951 || RPAD(p_Valid_Invalid_Members_Tab(i).Folder_Name,30,' ')
952 || RPAD(p_Valid_Invalid_Members_Tab(i).Owning_RuleSet_Name,40,' ')
953 || RPAD(p_Valid_Invalid_Members_Tab(i).Validation_Status,12,' ')
954 );
955
956 End LOOP;
957
958 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
959 p_module=> l_module_name,
960 p_msg_text=> 'EXIT');
961 EXCEPTION
962 WHEN OTHERS THEN
963 -- todo:: useful? z_Err_Code := -1;
964 FEM_UTILS.set_master_err_state( z_master_err_state,
965 FEM_UTILS.G_RSM_FATAL_ERR,
966 G_APP_NAME,
967 G_ERRMSG_UNEXPECTED_SQLERROR,
968 G_ERRMAC_ROUTINE_NAME,
969 l_module_name,
970 NULL,
971 G_ERRMAC_SQL_ERROR,
972 SQLERRM);
973 RAISE;
974
975 End Write_Valid_Invalid_Mem_Output;
976
977
978 Procedure Write_Output(p_Valid_Members_Tab IN OUT NOCOPY Valid_Invalid_Members_Inst_Tab
979 ,p_Valid_Members_Count IN OUT NOCOPY BINARY_INTEGER
980 ,p_Flagged_Members_Tab IN OUT NOCOPY Members_Validation_Status_Tab
981 ,p_Flagged_Members_Count IN OUT NOCOPY BINARY_INTEGER
982 ,p_Dependent_Objects_Tab IN OUT NOCOPY Dependent_Objects_Tab
983 ,p_Dependent_Objects_Count IN OUT NOCOPY BINARY_INTEGER
984 ,p_Orig_RuleSet_Object_ID IN NUMBER
985 ,p_Rule_Effective_Date IN DATE
986 ,p_Output_Dataset_Name IN VARCHAR2
987 ,p_IsProductionODS IN BOOLEAN
988 ,p_Execution_Mode IN VARCHAR2) IS
989 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Write_Output';
990 l_IsProductionODSstr VARCHAR2(6) := NULL;
991 Begin
992 -- *******************************************************************************************
993 -- name : Write_Output
994 -- Function : write a report to the fnd_file output file.
995 --
996 -- Parameters
997 -- IN
998 --
999 -- OUT
1000 -- none.
1001 --
1002 --
1003 --
1004 -- HISTORY
1005 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1006 --
1007 -- *******************************************************************************************
1008 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1009 p_module=> l_module_name,
1010 p_msg_text=> 'ENTRY');
1011
1012
1013 fnd_file.put_line(FND_FILE.OUTPUT,'Procedure Name : Fem_Rule_Set_Manager.Preprocess_RuleSet');
1014 fnd_file.put_line(FND_FILE.OUTPUT,'Package Version');
1015 fnd_file.put_line(FND_FILE.OUTPUT,' : '||getProcedureVersionFromDB);
1016 fnd_file.put_line(FND_FILE.OUTPUT,'Run Date : '||to_char(sysdate,'DD-MON-YYYY HH:MI:SS'));
1017 fnd_file.put_line(FND_FILE.OUTPUT,'----------------------------------------------------------');
1018
1019 fnd_file.put_line(FND_FILE.OUTPUT
1020 ,'Rule Set being validated : '||GetObjectDisplayName(p_Orig_RuleSet_Object_ID));
1021
1022 fnd_file.put_line(FND_FILE.OUTPUT
1023 ,'Rule Effective Date : '||p_Rule_Effective_Date);
1024
1025 fnd_file.put_line(FND_FILE.OUTPUT
1026 ,'Output Dataset : '||p_Output_Dataset_Name);
1027
1028 IF p_IsProductionODS THEN
1029 l_IsProductionODSstr := 'Y';
1030 ELSE
1031 l_IsProductionODSstr := 'N';
1032 END IF;
1033
1034 fnd_file.put_line(FND_FILE.OUTPUT
1035 ,'Is Output Dataset Production: '||l_IsProductionODSstr);
1036
1037 fnd_file.put_line(FND_FILE.OUTPUT,'----------------------------------------------------------');
1038
1039 If (NOT z_dataset_error) then
1040
1041 --***********************************************************************
1042 -- p_Execution_Mode valid values......................
1043 -- E=Engine Execution Mode (used by engines only)
1044 -- A=All Rules (report on all rules whether they are valid or not)
1045 -- I=Invalid Rules (report on invalid rules only)
1046 -- V=Valid Rules (report on valid rules only)
1047 --***********************************************************************
1048 If (p_Execution_Mode = 'V' OR p_Execution_Mode = 'A' OR p_Execution_Mode = 'E') then
1049 fnd_file.put_line(FND_FILE.OUTPUT,' ');
1050 fnd_file.put_line(FND_FILE.OUTPUT,'Valid Rules/Rule Sets');
1051 fnd_file.put_line(FND_FILE.OUTPUT,'=====================');
1052 fnd_file.put_line(FND_FILE.OUTPUT,
1053 RPAD('Rule Name',40,' ')
1054 || RPAD('Type',30,' ')
1055 || RPAD('Folder',30,' ')
1056 || RPAD('Owning RuleSet',40,' ')
1057 || RPAD('Status',12,' ')
1058 );
1059 fnd_file.put_line(FND_FILE.OUTPUT,
1060 RPAD('---------',40,' ')
1061 || RPAD('----',30,' ')
1062 || RPAD('------',30,' ')
1063 || RPAD('--------------',40,' ')
1064 || RPAD('------',12,' ')
1065 );
1066
1067 Write_Valid_Invalid_Mem_Output(p_Valid_Members_Tab
1068 ,p_Valid_Members_Count
1069 ,p_Dependent_Objects_Tab
1070 ,p_Dependent_Objects_Count);
1071 --If (z_Err_Code = -1) then
1072 -- RETURN;
1073 -- End If;
1074
1075 End If;
1076
1077 --***********************************************************************
1078 -- p_Execution_Mode valid values......................
1079 -- E=Engine Execution Mode (used by engines only)
1080 -- A=All Rules (report on all rules whether they are valid or not)
1081 -- I=Invalid Rules (report on invalid rules only)
1082 -- V=Valid Rules (report on valid rules only)
1083 --***********************************************************************
1084 If ( p_Execution_Mode = 'I'
1085 OR p_Execution_Mode = 'A'
1086 OR p_Execution_Mode = 'E') then
1087 fnd_file.put_line(FND_FILE.OUTPUT,' ');
1088 fnd_file.put_line(FND_FILE.OUTPUT,'Invalid Rules/Rule Sets');
1089 fnd_file.put_line(FND_FILE.OUTPUT,'=======================');
1090
1091 fnd_file.put_line(FND_FILE.OUTPUT,
1092 RPAD('Rule Name',42,' ')
1093 || RPAD('Type',32,' ')
1094 || RPAD('Folder',32,' ')
1095 || RPAD('Owning RuleSet',42,' ')
1096 || RPAD('Enabled Status',16,' ')
1097 || RPAD('Other Error',22,' ')
1098 || RPAD('Rule Def',12,' ')
1099 || RPAD('Lock Status',13,' ')
1100 || RPAD('Local VS Status',17,' ')
1101 || RPAD('Approval Status',17,' ')
1102 || RPAD('Dependent Status',18,' ')
1103 );
1104
1105 fnd_file.put_line(FND_FILE.OUTPUT,
1106 RPAD('---------',42,' ')
1107 || RPAD('----',32,' ')
1108 || RPAD('------',32,' ')
1109 || RPAD('--------------',42,' ')
1110 || RPAD('--------------',16,' ')
1111 || RPAD('----------',22,' ')
1112 || RPAD('--------',12,' ')
1113 || RPAD('-----------',13,' ')
1114 || RPAD('---------------',17,' ')
1115 || RPAD('---------------',17,' ')
1116 || RPAD('----------------',18,' ')
1117 );
1118
1119 Write_Flagged_Members_Output( p_Flagged_Members_Tab
1120 ,p_Flagged_Members_Count
1121 ,p_Dependent_Objects_Tab
1122 ,p_Dependent_Objects_Count);
1123
1124 End If;
1125
1126 End If;
1127
1128 fnd_file.put_line(FND_FILE.OUTPUT,' ');
1129 fnd_file.put_line(FND_FILE.OUTPUT,' -----------------End of Report-----------------');
1130
1131 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1132 p_module=> l_module_name,
1133 p_msg_text=> 'EXIT');
1134
1135 EXCEPTION
1136 WHEN OTHERS THEN
1137 -- todo:: useful? z_Err_Code := -1;
1138 FEM_UTILS.set_master_err_state( z_master_err_state,
1139 FEM_UTILS.G_RSM_FATAL_ERR,
1140 G_APP_NAME,
1141 G_ERRMSG_UNEXPECTED_SQLERROR,
1142 G_ERRMAC_ROUTINE_NAME,
1143 l_module_name,
1144 NULL,
1145 G_ERRMAC_SQL_ERROR,
1146 SQLERRM);
1147 RAISE;
1148
1149 End Write_Output;
1150
1151
1152 FUNCTION Mem_Obj_Prev_Processed(p_currRuleSet IN Rule_Set_Instance_Rec
1153 ,p_Child_Object_ID IN DEF_OBJECT_ID%TYPE
1154 ,p_Child_Folder_Name IN DEF_FOLDER_NAME%TYPE
1155 ,p_Child_Object_Name IN DEF_OBJECT_DISPLAY_NAME%TYPE
1156 ,x_Members_Processed_Tab IN OUT NOCOPY Members_Processed_Instance_Tab
1157 ,x_Members_Processed_Count IN OUT NOCOPY BINARY_INTEGER
1158 ,p_Child_Object_Type_Code IN DEF_OBJECT_TYPE_CODE%TYPE) RETURN BOOLEAN IS
1159
1160 -- 000000000111111111122222222223333333333444444444455555555556
1161 -- 123456789012345678901234567890123456789012345678901234567890
1162 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Mem_Obj_Prev_Processed';
1163 l_found_error BOOLEAN := FALSE;
1164
1165 BEGIN
1166 -- *******************************************************************************************
1167 -- name : Mem_Obj_Prev_Processed
1168 -- Function : Search for a previously processed Object_ID in the x_Members_Processed_Tab table.
1169 -- If it was previously processed, raise a user exception and return TRUE..
1170 -- Otherwise add the current member to the x_Members_Processed_Tab and return FALSE
1171 --
1172 -- Parameters
1173 -- IN
1174 -- p_Child_Object_ID
1175 -- - The OBJECT_ID we are searching for in the x_Members_Processed_Tab table.
1176 -- p_Child_Folder_Name IN DEF_FOLDER_NAME%TYPE
1177 -- - The Folder name associated with p_Child_Object_ID
1178 -- p_Child_Object_Name IN DEF_OBJECT_DISPLAY_NAME%TYPE
1179 -- - The Display name associated with p_Child_Object_ID
1180 -- In OUT
1181 -- x_Members_Processed_Tab
1182 -- - The previously processed member table.
1183 -- x_Members_Processed_Count
1184 -- - The count of entries stored in the x_Members_Processed_Tab table
1185 --
1186 -- returns
1187 -- TRUE - we found the object ID, this may be bad...
1188 -- FALSE - object ID not found, things are normal (no error)...
1189 --
1190 -- HISTORY
1191 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1192 --
1193 -- *******************************************************************************************
1194 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1195 p_module=> l_module_name,
1196 p_msg_text=> 'ENTRY');
1197
1198 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1199 p_module=> l_module_name,
1200 p_msg_text=> 'p_Child_Object_ID->' || p_Child_Object_ID);
1201 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1202 p_module=> l_module_name,
1203 p_msg_text=> 'p_Child_Folder_Name->' || p_Child_Folder_Name);
1204 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1205 p_module=> l_module_name,
1206 p_msg_text=> 'p_Child_Object_Name->' || p_Child_Object_Name);
1207 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1208 p_module=> l_module_name,
1209 p_msg_text=> 'p_currRuleSet.RuleSet_Object_Name->' || p_currRuleSet.RuleSet_Object_Name);
1210
1211 If (x_Members_Processed_Count > 0) then
1212 For l_current_member in 0..x_Members_Processed_Count - 1 LOOP
1213
1214 If (x_Members_Processed_Tab(l_current_member).Member_Object_ID = p_Child_Object_ID) then
1215
1216 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1217 p_module=> l_module_name,
1218 p_msg_text=> 'match found.. failing');
1219 z_Err_Code := 4;
1220 -- todo:: fix to new standards..
1221 IF p_Child_Object_Type_Code = 'RULE_SET' THEN
1222
1223 FEM_UTILS.set_master_err_state( z_master_err_state,
1224 FEM_UTILS.G_RSM_NONFATAL_ERR,
1225 G_APP_NAME,
1226 G_ERRMSG_DUPLICATE_OCCURRENCE,
1227 G_ERRMAC_DUP_RS,
1228 p_Child_Object_Name,
1229 NULL,
1230 G_ERRMAC_CONTAIN_RS,
1231 p_currRuleSet.RuleSet_Object_Name
1232 );
1233 ELSE
1234
1235 FEM_UTILS.set_master_err_state( z_master_err_state,
1236 FEM_UTILS.G_RSM_NONFATAL_ERR,
1237 G_APP_NAME,
1238 G_ERRMSG_DUP_RULE_OCC,
1239 G_ERRMAC_RULE_SET,
1240 p_currRuleSet.RuleSet_Object_Name,
1241 NULL,
1242 G_ERRMAC_RULE_NAME,
1243 p_Child_Object_Name
1244 );
1245 END IF;
1246 l_found_error := TRUE;
1247 End If;
1248
1249 End LOOP;
1250 End If; /* If (x_Members_Processed_Count > 0) */
1251
1252 IF NOT l_found_error THEN
1253 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1254 p_module=> l_module_name,
1255 p_msg_text=> 'match NOT found.. adding to list');
1256 /****Adding Member to Members_Processed_Tab*****/
1257 -- add it.
1258 x_Members_Processed_Tab(x_Members_Processed_Count).Member_Object_ID := p_Child_Object_ID;
1259 -- increment the entry count..
1260 x_Members_Processed_Count := x_Members_Processed_Count + 1;
1261
1262 /****************************************************/
1263 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1264 p_module=> l_module_name,
1265 p_msg_text=> 'NORMAL EXIT');
1266 END IF;
1267
1268 RETURN l_found_error;
1269
1270
1271 EXCEPTION
1272 WHEN OTHERS THEN
1273 -- todo:: useful? z_Err_Code := -1;
1274 FEM_UTILS.set_master_err_state( z_master_err_state,
1275 FEM_UTILS.G_RSM_FATAL_ERR,
1276 G_APP_NAME,
1277 G_ERRMSG_UNEXPECTED_SQLERROR,
1278 G_ERRMAC_ROUTINE_NAME,
1279 l_module_name,
1280 NULL,
1281 G_ERRMAC_SQL_ERROR,
1282 SQLERRM);
1283 RAISE;
1284
1285 End Mem_Obj_Prev_Processed;
1286
1287
1288 FUNCTION RS_Cyclical_And_Depth_Check(
1289 p_Child_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
1290 ,p_Child_Object_Display_Name IN DEF_OBJECT_DISPLAY_NAME%TYPE
1291 ,x_Rule_Set_Level IN OUT NOCOPY NUMBER
1292 ,x_Rule_Set_Count IN OUT NOCOPY BINARY_INTEGER
1293 ,x_Rule_Set_Instance_Tab IN OUT NOCOPY Rule_Set_Instance_Tab
1294 ,p_Other_Error_Status IN OUT NOCOPY VARCHAR2) RETURN BOOLEAN IS
1295
1296 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'RS_Cyclical_And_Depth_Check';
1297 l_ruleset_already_used BOOLEAN := FALSE;
1298
1299 Begin
1300 -- *******************************************************************************************
1301 -- name : RS_Cyclical_And_Depth_Check
1302 -- Function : Search for a previously used Ruleset in the x_Rule_Set_Instance_Tab, and also check
1303 -- for max-depth of ruleset nesting. If the ruleset was not found
1304 -- put its object_id into the x_Rule_Set_Instance_Tab. If it was, return an error. If max-nesting was
1305 -- exceeded, return an error.
1306 --
1307 -- Parameters
1308 -- IN
1309 -- p_Child_RuleSet_Object_ID
1310 -- - ruleset to search for..
1311 -- IN OUT
1312 -- x_Rule_Set_Level
1313 -- - current nesting level.
1314 -- x_Rule_Set_Count
1315 -- - count of rulesets we have processed.
1316 -- x_Rule_Set_Instance_Tab
1317 -- - table of previously used rulesets..
1318 -- p_Other_Error_Status
1319 -- - separate place to return an error (!)
1320 -- returns
1321 -- TRUE - If we found a previous usage of this Ruleset object_id
1322 -- *OR* we exceeded the maximum level for ruleset nesting.
1323 -- FALSE - If things went ok (no previous usage found)
1324 --
1325 -- HISTORY
1326 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1327 --
1328 -- *******************************************************************************************
1329 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1330 p_module=> l_module_name,
1331 p_msg_text=> 'ENTRY');
1332
1333
1334 /*************Cyclical check***********************/
1335 If (x_Rule_Set_Count > 0) then
1336
1337 For i in 0..x_Rule_Set_Count LOOP
1338
1339 If (x_Rule_Set_Instance_Tab(i).RuleSet_Object_ID = p_Child_RuleSet_Object_ID) then
1340 -- todo:: remove err code??
1341 z_Err_Code := 2;
1342 FEM_UTILS.set_master_err_state( z_master_err_state,
1343 FEM_UTILS.G_RSM_NONFATAL_ERR,
1344 G_APP_NAME,
1345 G_ERRMSG_DUPLICATE_OCCURRENCE,
1346 G_ERRMAC_DUP_RS,
1347 p_Child_Object_Display_Name,
1348 NULL,
1349 G_ERRMAC_CONTAIN_RS,
1350 x_Rule_Set_Instance_Tab(x_Rule_Set_Count).RuleSet_Object_Name
1351 );
1352
1353
1354
1355 p_Other_Error_Status := G_RSM_CYCLICAL_FAILURE;
1356 -- soft error..
1357 l_ruleset_already_used := TRUE;
1358 End If;
1359
1360 End LOOP;
1361 End If;
1362
1363 IF NOT l_ruleset_already_used THEN
1364 /******Adding Rule Set to Rule_Set_Instance_Tab******/
1365 x_Rule_Set_Count := X_Rule_Set_Count +1;
1366 x_Rule_Set_Instance_Tab(X_Rule_Set_Count).RuleSet_Object_ID := p_Child_RuleSet_Object_ID;
1367 x_Rule_Set_Instance_Tab(X_Rule_Set_Count).RuleSet_Object_Name := p_Child_Object_Display_Name;
1368 x_Rule_Set_Instance_Tab(X_Rule_Set_Count).Owning_RuleSet_Name := x_Rule_Set_Instance_Tab(X_Rule_Set_Count - 1).RuleSet_Object_Name;
1369
1370 x_Rule_Set_Level := x_Rule_Set_Level +1;
1371
1372 /***Level Check***/
1373 If (x_Rule_Set_Level > g_max_rule_set_depth) then
1374 -- todo:: fix to new standards..
1375 z_Err_Code := 3;
1376 FEM_UTILS.set_master_err_state( z_master_err_state,
1377 FEM_UTILS.G_RSM_FATAL_ERR,
1378 G_APP_NAME,
1379 G_ERRMSG_DEPTH_CHECK_FAILURE
1380 );
1381 p_Other_Error_Status := G_RSM_DEPTH_FAILURE;
1382
1383 -- hard error.. fail out..
1384 RAISE FND_API.G_EXC_ERROR;
1385 End If;
1386 END IF;
1387
1388
1389 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1390 p_module=> l_module_name,
1391 p_msg_text=> 'EXIT');
1392
1393 RETURN l_ruleset_already_used;
1394
1395 EXCEPTION
1396 WHEN FND_API.G_EXC_ERROR THEN
1397 -- top calling routine will handle this one.
1398 RAISE;
1399 WHEN OTHERS THEN
1400 -- todo:: useful? z_Err_Code := -1;
1401 FEM_UTILS.set_master_err_state( z_master_err_state,
1402 FEM_UTILS.G_RSM_FATAL_ERR,
1403 G_APP_NAME,
1404 G_ERRMSG_UNEXPECTED_SQLERROR,
1405 G_ERRMAC_ROUTINE_NAME,
1406 l_module_name,
1407 NULL,
1408 G_ERRMAC_SQL_ERROR,
1409 SQLERRM);
1410 RAISE;
1411
1412 End RS_Cyclical_And_Depth_Check;
1413
1414
1415
1416
1417 PROCEDURE Create_RuleSet_Process_Data(p_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
1418 ,p_Child_Object_ID IN DEF_OBJECT_ID%TYPE
1419 ,p_Child_Object_Definition_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
1420 ,p_Engine_Execution_Seq IN NUMBER) IS
1421 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Create_RuleSet_Process_Data';
1422 Begin
1423 -- *******************************************************************************************
1424 -- name : Create_RuleSet_Process_Data
1425 -- Function : Insert a row into the fem_ruleset_process_data table.
1426 --
1427 -- Parameters
1428 -- IN
1429 -- p_RuleSet_Object_ID
1430 -- - owning ruleset? Master Ruleset?
1431 -- p_Child_Object_ID
1432 -- - Object ID to be run.
1433 -- p_Child_Object_Definition_ID
1434 -- - Object Definition ID for the Object ID to be run
1435 -- p_Engine_Execution_Seq
1436 -- - run sequence for the rules (parallel rules all have same sequence #)
1437 --
1438 --
1439 -- HISTORY
1440 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1441 --
1442 -- *******************************************************************************************
1443 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1444 p_module=> l_module_name,
1445 p_msg_text=> 'ENTRY');
1446
1447 z_global_counter := z_global_counter+1;
1448 --Bug # 4283689
1449 --fnd_file.put_line(fnd_file.LOG,'Inserting row :'||GetObjectDisplayName(p_Child_Object_ID)||':'||p_RuleSet_Object_ID||':'||z_conc_request_id||':'||p_Child_Object_Definition_ID);
1450
1451 insert into fem_ruleset_process_data
1452 (RULE_SET_OBJ_ID
1453 ,CHILD_OBJ_ID
1454 ,CHILD_OBJ_DEF_ID
1455 ,ENGINE_EXECUTION_SEQUENCE
1456 ,REQUEST_ID
1457 ,CREATION_DATE
1458 ,CREATED_BY
1459 ,LAST_UPDATE_DATE
1460 ,LAST_UPDATED_BY
1461 ,LAST_UPDATE_LOGIN
1462 )
1463 values
1464 (p_RuleSet_Object_ID
1465 ,p_Child_Object_ID
1466 ,p_Child_Object_Definition_ID
1467 ,p_Engine_Execution_Seq
1468 ,z_conc_request_id
1469 ,sysdate
1470 ,z_user_id
1471 ,sysdate
1472 ,z_user_id
1473 ,z_login_id
1474 );
1475
1476 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1477 p_module=> l_module_name,
1478 p_msg_text=> 'EXIT');
1479
1480 EXCEPTION
1481 WHEN OTHERS THEN
1482 -- todo:: useful? z_Err_Code := -1;
1483 FEM_UTILS.set_master_err_state( z_master_err_state,
1484 FEM_UTILS.G_RSM_FATAL_ERR,
1485 G_APP_NAME,
1486 G_ERRMSG_UNEXPECTED_SQLERROR,
1487 G_ERRMAC_ROUTINE_NAME,
1488 l_module_name,
1489 NULL,
1490 G_ERRMAC_SQL_ERROR,
1491 SQLERRM);
1492 RAISE;
1493
1494 End Create_RuleSet_Process_Data;
1495
1496
1497
1498
1499 Function IsProductionODS( p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
1500 ,p_Output_Dataset_Name OUT NOCOPY VARCHAR2
1501 ,p_Output_Dataset_Code OUT NOCOPY DEF_DATASET_CODE%TYPE )
1502 RETURN BOOLEAN IS
1503
1504 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'IsProductionODS';
1505 l_ods_found BOOLEAN := FALSE;
1506 l_ods_prodflag_found BOOLEAN := FALSE;
1507 x_production_flag VARCHAR2(1) := ' ';
1508 l_isProduction BOOLEAN := FALSE;
1509
1510 Cursor getOutputDataset(p_DS_IO_Def_ID IN NUMBER) IS
1511 SELECT a.dataset_name
1512 ,b.output_dataset_code
1513 from
1514 fem_datasets_vl a
1515 ,fem_ds_input_output_defs b
1516 where b.output_dataset_code = a.dataset_code
1517 and b.dataset_io_obj_def_id = p_DS_IO_Def_ID;
1518
1519 Cursor getProductionFlag(p_Output_Dataset_Code IN DEF_DATASET_CODE%TYPE) Is
1520 select a.DIM_ATTRIBUTE_VARCHAR_MEMBER
1521 from FEM_DATASETS_ATTR a
1522 ,FEM_DIM_ATTRIBUTES_B b
1523 where a.DATASET_CODE = p_Output_Dataset_Code
1524 and b.ATTRIBUTE_ID = a.ATTRIBUTE_ID
1525 and b.ATTRIBUTE_VARCHAR_LABEL = 'PRODUCTION_FLAG';
1526
1527 Begin
1528 -- *******************************************************************************************
1529 -- name : IsProductionODS
1530 -- Function :
1531 --
1532 -- Parameters
1533 -- IN
1534 -- p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
1535 -- - Data set IO Definition object_id in question..
1536 -- OUT
1537 -- p_Output_Dataset_Name OUT NOCOPY VARCHAR2
1538 -- - the name of the dataset associated with p_DS_IO_Def_ID
1539 -- p_Output_Dataset_Code OUT NOCOPY DEF_DATASET_CODE%TYPE
1540 -- - the output dataset specified for the DS_IO_Def_ID
1541 --
1542 -- RETURNS
1543 -- TRUE - is a production DS
1544 -- FALSE - is a non-production DS
1545 -- Exceptions:
1546 -- OTHERS: SQL/unknown exceptions only.
1547 --
1548 -- HISTORY
1549 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1550 --
1551 -- *******************************************************************************************
1552 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1553 p_module=> l_module_name,
1554 p_msg_text=> 'ENTRY');
1555
1556 OPEN getOutputDataset(p_DS_IO_Def_ID);
1557
1558 FETCH getOutputDataset
1559 into p_Output_Dataset_Name
1560 ,p_Output_Dataset_Code;
1561
1562 If getOutputDataset%NOTFOUND then
1563 -- we have no output data set, fail now.
1564 l_ods_found := FALSE;
1565 ELSE
1566 l_ods_found := TRUE;
1567 End If;
1568
1569 CLOSE getOutputDataset;
1570
1571 IF NOT l_ods_found THEN
1572 FEM_UTILS.set_master_err_state( z_master_err_state,
1573 FEM_UTILS.G_RSM_NONFATAL_ERR,
1574 G_APP_NAME,
1575 G_ERRMSG_NO_ODS
1576 );
1577 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1578 p_module=> l_module_name,
1579 p_msg_text=> 'failed in output dataset query');
1580 z_dataset_error := TRUE;
1581 ELSE
1582
1583 OPEN getProductionFlag(p_Output_Dataset_Code);
1584 FETCH getProductionFlag
1585 into x_Production_Flag;
1586
1587 If getProductionFlag%NOTFOUND then
1588 l_ods_prodflag_found := FALSE;
1589 ELSE
1590 l_ods_prodflag_found := TRUE;
1591 End If;
1592 CLOSE getProductionFlag;
1593
1594 -- error...
1595 IF NOT l_ods_prodflag_found THEN
1596 FEM_UTILS.set_master_err_state( z_master_err_state,
1597 FEM_UTILS.G_RSM_NONFATAL_ERR,
1598 G_APP_NAME,
1599 G_ERRMSG_NO_ODSPRODFLAG
1600 );
1601 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1602 p_module=> l_module_name,
1603 p_msg_text=> 'failed in production flag query');
1604 z_dataset_error := TRUE;
1605 END IF;
1606 END IF;
1607
1608
1609 IF x_Production_Flag = 'Y' THEN
1610 l_isProduction := TRUE;
1611 ELSIF x_Production_Flag = 'N' THEN
1612 l_isProduction := FALSE;
1613 ELSE
1614 -- This case should not occur because PRODUCTION_FLAG is a
1615 -- required attribute.
1616 FEM_UTILS.set_master_err_state( z_master_err_state,
1617 FEM_UTILS.G_RSM_NONFATAL_ERR,
1618 G_APP_NAME,
1619 G_ERRMSG_NO_ODSPRODFLAG,
1620 G_ERRMAC_VALUE,
1621 x_Production_Flag );
1622 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
1623 p_module=> l_module_name,
1624 p_msg_text=> 'PRODUCTION_FLAG attribute is null');
1625 z_dataset_error := TRUE;
1626
1627 END IF;
1628
1629
1630 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1631 p_module=> l_module_name,
1632 p_msg_text=> 'EXIT');
1633
1634 RETURN l_isProduction;
1635
1636 EXCEPTION
1637 WHEN OTHERS THEN
1638 FEM_UTILS.set_master_err_state( z_master_err_state,
1639 FEM_UTILS.G_RSM_FATAL_ERR,
1640 G_APP_NAME,
1641 G_ERRMSG_UNEXPECTED_SQLERROR,
1642 G_ERRMAC_ROUTINE_NAME,
1643 l_module_name,
1644 NULL,
1645 G_ERRMAC_SQL_ERROR,
1646 SQLERRM);
1647 RAISE;
1648
1649 End IsProductionODS;
1650
1651
1652
1653 Procedure Validate_Dependent_Objects_Pvt(p_Top_Object_ID IN DEF_OBJECT_ID%TYPE
1654 ,p_Top_Obj_Def_Id IN DEF_OBJECT_DEFINITION_ID%TYPE
1655 ,p_Parent_Obj_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
1656 ,p_Rule_Effective_Date IN DATE
1657 ,p_Dependent_Objects_Tab IN OUT NOCOPY Dependent_Objects_Tab
1658 ,p_Dependent_Objects_Count IN OUT NOCOPY BINARY_INTEGER
1659 ,p_Valid_Dep_Obj_Status IN OUT NOCOPY VARCHAR2) IS
1660
1661 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Validate_Dependent_Objects_Pvt';
1662 cursor getDepObjects(p_Parent_Obj_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE) IS
1663 select
1664 a.required_object_id
1665 ,o.object_name
1666 ,f.folder_name
1667 ,o.object_type_code
1668 ,t.OBJECT_TYPE_NAME
1669 from
1670 fem_object_dependencies a
1671 ,fem_object_catalog_vl o
1672 ,fem_folders_vl f
1673 ,fem_object_types t
1674 where a.object_definition_id = p_Parent_Obj_Def_Id
1675 and a.required_object_id = o.object_id
1676 and o.folder_id = f.folder_id
1677 and t.object_type_code = o.object_type_code;
1678
1679 l_Dependent_Obj_ID DEF_OBJECT_ID%TYPE;
1680 l_Dependent_Obj_Display_Name DEF_OBJECT_DISPLAY_NAME%TYPE;
1681 l_Dependent_Obj_Folder_Name DEF_FOLDER_NAME%TYPE;
1682 l_Dependent_Obj_Type_Code DEF_OBJECT_TYPE_CODE%TYPE;
1683
1684
1685 l_Dependent_Obj_Def_ID DEF_OBJECT_DEFINITION_ID%TYPE := 0;
1686 l_Approval_Status_Code DEF_APPROVAL_STATUS_CODE%TYPE := 'XX';
1687
1688 l_Dependent_Object_Count NUMBER;
1689
1690 l_object_type_name fem_object_types_tl.OBJECT_TYPE_NAME%TYPE;
1691
1692 Begin
1693 -- *******************************************************************************************
1694 -- name : Validate_Dependent_Objects_Pvt
1695 -- Function : Compile a list of all dependent objects that do NOT have valid object_definition_ids
1696 -- for the current p_Rule_Effective_Date into the p_Dependent_Objects_Tab table
1697 --
1698 -- Parameters
1699 -- IN
1700 -- p_Top_Object_ID
1701 -- -
1702 -- p_Top_Obj_Def_Id
1703 -- -
1704 -- p_Parent_Obj_Def_ID
1705 -- -
1706 -- p_Rule_Effective_Date
1707 -- - Effective date for this run.
1708 --
1709 -- IN OUT
1710 -- p_Dependent_Objects_Tab
1711 -- - invalid dependents..
1712 -- p_Dependent_Objects_Count
1713 -- - count of invalid dependents..
1714 -- p_Valid_Dep_Obj_Status
1715 -- -
1716 --
1717 --
1718 -- HISTORY
1719 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1720 --
1721 -- *******************************************************************************************
1722 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1723 p_module=> l_module_name,
1724 p_msg_text=> 'ENTRY');
1725
1726 Begin
1727 select count(required_object_id)
1728 into
1729 l_Dependent_Object_Count
1730 from fem_object_Dependencies
1731 where object_definition_id = p_Parent_Obj_Def_Id;
1732
1733 If (l_Dependent_Object_Count = 0) then
1734 If (p_Valid_Dep_Obj_Status = 'NA') then
1735 p_Valid_Dep_Obj_Status := G_RSM_NO_DEP_OBJECTS;
1736 End If;
1737 -- RETURN;
1738 End If;
1739 End;
1740
1741 If (l_Dependent_Object_Count > 0) then
1742 OPEN getDepObjects(p_Parent_Obj_Def_ID);
1743 LOOP
1744 Fetch getDepObjects
1745 into
1746 l_Dependent_Obj_ID
1747 ,l_Dependent_Obj_Display_Name
1748 ,l_Dependent_Obj_Folder_Name
1749 ,l_Dependent_Obj_Type_Code
1750 ,l_object_type_name;
1751 EXIT WHEN getDepObjects%NOTFOUND;
1752
1753 Begin
1754 Get_ValidDefinition_Priv(l_Dependent_Obj_ID
1755 ,p_Rule_Effective_Date
1756 ,l_Dependent_Obj_Def_ID
1757 ,l_Approval_Status_Code);
1758 End;
1759
1760 If (l_Dependent_Obj_Def_ID = -1) then
1761 -- we DIDN'T find a def ID for this dependent object..
1762 -- todo:: fix to new standards
1763 z_Err_Code := 6;
1764 --FEM_UTILS.set_master_err_state( z_master_err_state,
1765 -- FEM_UTILS.G_RSM_NONFATAL_ERR,
1766 -- G_APP_NAME,
1767 -- G_ERRMSG_NO_VALID_DEFINITION,
1768 -- G_ERRMAC_RULE_NAME,
1769 -- l_Dependent_Obj_Display_Name);
1770 FEM_UTILS.set_master_err_state( z_master_err_state,
1771 FEM_UTILS.G_RSM_NONFATAL_ERR,
1772 G_APP_NAME,
1773 G_FEMRSM_NOVALID_DEP_DEF,
1774 'RULE_NAME',
1775 l_Dependent_Obj_Display_Name,
1776 NULL,
1777 'OBJECT_TYPE',
1778 l_object_type_name,
1779 NULL,
1780 'EFFECTIVE_DATE',
1781 to_char(p_Rule_Effective_Date));
1782
1783 p_Valid_Dep_Obj_Status := G_RSM_DEP_OBJECTS_INVALID;
1784
1785 -- show it in the dependent objects table...
1786
1787 -- this next line could very easily become invalid if the dependency graph goes deeper than 1
1788 -- rjk
1789 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Parent_Object_ID := p_Top_Object_ID;
1790 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Dependent_Object_ID := l_Dependent_Obj_ID;
1791 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Dependent_Object_Display_Name := l_Dependent_Obj_Display_Name;
1792 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Dependent_Object_Folder_Name := l_Dependent_Obj_Folder_Name;
1793 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Dependent_Object_Type_Code := l_Dependent_Obj_Type_Code;
1794 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Status := 'I';
1795 p_Dependent_Objects_Tab(p_Dependent_Objects_Count).Message_If_Invalid := z_Err_Msg ;
1796
1797
1798 p_Dependent_Objects_Count := p_Dependent_Objects_Count + 1;
1799
1800 Else
1801 If (p_Valid_Dep_Obj_Status = 'NA') then
1802 p_Valid_Dep_Obj_Status := G_RSM_MEMBER_VALID;
1803 End If;
1804
1805 -- recurse..
1806 Validate_Dependent_Objects_Pvt( p_Top_Object_ID
1807 ,p_Top_Obj_Def_Id
1808 ,l_Dependent_Obj_Def_ID
1809 ,p_Rule_Effective_Date
1810 ,p_Dependent_Objects_Tab
1811 ,p_Dependent_Objects_Count
1812 ,p_Valid_Dep_Obj_Status);
1813 End If;
1814
1815 END LOOP;
1816 CLOSE getDepObjects;
1817
1818 End If;
1819
1820 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1821 p_module=> l_module_name,
1822 p_msg_text=> 'EXIT');
1823
1824 EXCEPTION
1825 WHEN OTHERS THEN
1826 -- todo:: useful? z_Err_Code := -1;
1827 FEM_UTILS.set_master_err_state( z_master_err_state,
1828 FEM_UTILS.G_RSM_FATAL_ERR,
1829 G_APP_NAME,
1830 G_ERRMSG_UNEXPECTED_SQLERROR,
1831 G_ERRMAC_ROUTINE_NAME,
1832 l_module_name,
1833 NULL,
1834 G_ERRMAC_SQL_ERROR,
1835 SQLERRM);
1836 RAISE;
1837
1838 End Validate_Dependent_Objects_Pvt;
1839
1840
1841
1842 Procedure Validate_Rule_Private(p_Rule_Object_ID IN DEF_OBJECT_ID%TYPE
1843 ,p_Rule_Local_VS_Combo_ID IN DEF_LOCAL_VS_COMBO_ID%TYPE
1844 ,p_Rule_Effective_Date IN DATE
1845 ,p_IsProductionODS IN BOOLEAN
1846 ,p_Reference_Period_ID IN NUMBER
1847 ,p_Ledger_ID IN NUMBER
1848 ,p_Dependent_Objects_Tab IN OUT NOCOPY Dependent_Objects_Tab
1849 ,p_Dependent_Objects_Count IN OUT NOCOPY BINARY_INTEGER
1850 ,p_Rule_Obj_Def_ID OUT NOCOPY DEF_OBJECT_DEFINITION_ID%TYPE
1851 ,p_Valid_Rule_Def_Status IN OUT NOCOPY VARCHAR2
1852 ,p_Valid_Lock_Status IN OUT NOCOPY VARCHAR2
1853 ,p_Valid_Approval_Status IN OUT NOCOPY VARCHAR2
1854 ,p_Valid_Dep_Obj_Status IN OUT NOCOPY VARCHAR2
1855 ,p_Valid_Local_VS_Status IN OUT NOCOPY VARCHAR2) IS
1856
1857 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Validate_Rule_Private';
1858 l_Rule_Obj_Def_ID DEF_OBJECT_DEFINITION_ID%TYPE := 0;
1859 l_Rule_Approval_Status_Code DEF_APPROVAL_STATUS_CODE%TYPE := 'XX';
1860
1861 l_Is_Rule_Locked BOOLEAN;
1862
1863 Begin
1864 -- *******************************************************************************************
1865 -- name : Validate_Rule_Private
1866 -- Function :
1867 --
1868 -- Parameters
1869 -- IN
1870 -- p_Rule_Object_ID
1871 -- -
1872 -- p_Rule_Local_VS_Combo_ID
1873 -- -
1874 -- p_Rule_Effective_Date
1875 -- -
1876 -- p_Is_Output_DS_Production
1877 -- -
1878 -- p_Reference_Period_ID
1879 -- -
1880 -- p_Ledger_ID
1881 -- -
1882 --
1883 -- OUT
1884 -- p_Rule_Obj_Def_ID
1885 -- -
1886 -- IN OUT
1887 -- p_Dependent_Objects_Tab
1888 -- -
1889 -- p_Dependent_Objects_Count
1890 -- -
1891 -- p_Valid_Rule_Def_Status
1892 -- -
1893 -- p_Valid_Lock_Status
1894 -- -
1895 -- p_Valid_Approval_Status
1896 -- -
1897 -- p_Valid_Dep_Obj_Status
1898 -- -
1899 -- p_Valid_Local_VS_Status
1900 -- -
1901 --
1902 --
1903 -- HISTORY
1904 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
1905 --
1906 -- *******************************************************************************************
1907 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
1908 p_module=> l_module_name,
1909 p_msg_text=> 'ENTRY');
1910
1911 z_Err_Code := 0;
1912 z_Err_Msg := NULL;
1913
1914 p_Valid_Rule_Def_Status := 'NA';
1915 p_Valid_Local_VS_Status := 'NA';
1916 p_Valid_Lock_Status := 'NA';
1917 p_Valid_Approval_Status := 'NA';
1918 p_Valid_Dep_Obj_Status := 'NA';
1919
1920 /***** Check for Valid Definition of Rule for given Effective Date *****/
1921
1922 Begin
1923 -- will return -1 if no object_definition_id for this object_id.
1924 Get_ValidDefinition_Priv(p_Rule_Object_ID
1925 ,p_Rule_Effective_Date
1926 ,l_Rule_Obj_Def_ID
1927 ,l_Rule_Approval_Status_Code);
1928
1929 p_Rule_Obj_Def_ID := l_Rule_Obj_Def_ID;
1930
1931 End;
1932
1933 If (p_Rule_Obj_Def_ID = -1) then
1934 -- no valid definition ID!
1935 p_Valid_Rule_Def_Status := G_RSM_NO_VALID_DEFN;
1936 -- todo:: fix to new standards ... this one may be ok
1937 z_Err_Code := 1;
1938 FEM_UTILS.set_master_err_state( z_master_err_state,
1939 FEM_UTILS.G_RSM_NONFATAL_ERR,
1940 G_APP_NAME,
1941 G_ERRMSG_NO_VALID_DEFINITION,
1942 G_ERRMAC_RULE_NAME,
1943 GetObjectDisplayName(p_Rule_Object_ID)
1944 );
1945 RETURN;
1946 ELSE
1947 -- we are cool up to here.. continue..
1948 p_Valid_Rule_Def_Status := G_RSM_VALID_DEFN_EXISTS;
1949 End If;
1950
1951
1952 /****** Check for Process Locks on Object *************************/
1953
1954 /*-----Waiting for code to be finalized---------
1955
1956 FEM_PL_PKG.obj_execution_lock_exists
1957 (p_request_id => z_conc_request_id
1958 ,p_object_id => p_Rule_Object_ID
1959 ,p_lock_exists => l_Is_Rule_Locked);
1960 If (l_Is_Rule_Locked) then
1961 p_Valid_Lock_Status := G_RSM_RULE_LOCKED;
1962 -- todo:: fix to new standards..
1963 z_Err_Code := 7;
1964 set_master_err_state(FEM_UTILS.G_RSM_NONFATAL_ERR,
1965 G_APP_NAME,);
1966 Else
1967 p_Valid_Lock_Status := G_RSM_RULE_NOT_LOCKED;
1968 End If;
1969 --------------------------------------------------*/
1970
1971 /******************************************************************/
1972
1973 /*******Check the status of Local VS Combo ID on Rule *************/
1974
1975 -- our general session LOCAL_VS must match the rule's LOCAL_VS, or we
1976 -- have SERIOUS problems (non-existant dimension values)
1977 If (p_Rule_Local_VS_Combo_ID <> z_local_vs_for_session) then
1978 p_Valid_Local_VS_Status := G_RSM_INVALID_STATUS;
1979 -- todo:: fix to new standards
1980 z_Err_Code := 8;
1981 FEM_UTILS.set_master_err_state( z_master_err_state,
1982 FEM_UTILS.G_RSM_NONFATAL_ERR,
1983 G_APP_NAME,
1984 G_ERRMSG_NO_VALID_VALSETS,
1985 G_ERRMAC_RULE_NAME,
1986 GetObjectDisplayName(p_Rule_Object_ID)
1987 );
1988 Else
1989 p_Valid_Local_VS_Status := G_RSM_MEMBER_VALID;
1990 End If;
1991
1992
1993 /****** Check for Approval Status of Rule Definition **************/
1994
1995 -- if the output data set is a production data set, then
1996 -- EVERY rule that writes to it must also be approved, otherwise
1997 -- we have a FATAL on that rule and should NOT run it.
1998 If (p_IsProductionODS) then
1999
2000 If ((l_Rule_Approval_Status_Code <> 'APPROVED')AND(l_Rule_Approval_Status_Code <> 'XX')) then
2001 p_Valid_Approval_Status := G_RSM_RULE_NOT_APPROVED;
2002 -- todo:: fix to new standards
2003 z_Err_Code := 5;
2004 FEM_UTILS.set_master_err_state( z_master_err_state,
2005 FEM_UTILS.G_RSM_NONFATAL_ERR,
2006 G_APP_NAME,
2007 G_ERRMSG_DEFN_NOT_APPROVED,
2008 G_ERRMAC_RULE_NAME,
2009 GetObjectDisplayName(p_Rule_Object_ID)
2010 );
2011 Elsif (l_Rule_Approval_Status_Code = 'APPROVED') then
2012 p_Valid_Approval_Status := G_RSM_RULE_APPROVED;
2013 End If;
2014
2015 End If ;
2016
2017
2018 -- check all dependents for the rule object_id in question and
2019 -- verify that all dependents have a valid object_definition for
2020 -- this Rule_Effective_Date.
2021 Validate_Dependent_Objects_Pvt(p_Rule_Object_ID
2022 ,l_Rule_Obj_Def_Id
2023 ,l_Rule_Obj_Def_Id
2024 ,p_Rule_Effective_Date
2025 ,p_Dependent_Objects_Tab
2026 ,p_Dependent_Objects_Count
2027 ,p_Valid_Dep_Obj_Status);
2028
2029 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2030 p_module=> l_module_name,
2031 p_msg_text=> 'EXIT');
2032 EXCEPTION
2033 WHEN OTHERS THEN
2034 FEM_UTILS.set_master_err_state( z_master_err_state,
2035 FEM_UTILS.G_RSM_FATAL_ERR,
2036 G_APP_NAME,
2037 G_ERRMSG_UNEXPECTED_SQLERROR,
2038 G_ERRMAC_ROUTINE_NAME,
2039 l_module_name,
2040 NULL,
2041 G_ERRMAC_SQL_ERROR,
2042 SQLERRM);
2043 RAISE;
2044
2045 End Validate_Rule_Private;
2046
2047
2048
2049 PROCEDURE Process_RuleSet( p_Orig_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
2050 ,p_Curr_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
2051 ,x_Rule_Set_Instance_Tab IN OUT NOCOPY Rule_Set_Instance_Tab
2052 ,x_Rule_Set_Count IN OUT NOCOPY BINARY_INTEGER
2053 ,x_Rule_Set_Level IN OUT NOCOPY NUMBER
2054 ,x_Members_Processed_Tab IN OUT NOCOPY Members_Processed_Instance_Tab
2055 ,x_Members_Processed_Count IN OUT NOCOPY BINARY_INTEGER
2056 ,p_Rule_Effective_Date IN DATE
2057 ,p_IsProductionODS IN BOOLEAN
2058 ,p_Engine_Execution_Sequence IN OUT NOCOPY NUMBER
2059 ,p_Execution_Mode IN VARCHAR2
2060 ,p_Valid_Members_Tab IN OUT NOCOPY Valid_Invalid_Members_Inst_Tab
2061 ,p_Valid_Members_Count IN OUT NOCOPY BINARY_INTEGER
2062 ,p_Invalid_Member_Flags_Tab IN OUT NOCOPY Members_Validation_Status_Tab
2063 ,p_Invalid_Member_Flags_Count IN OUT NOCOPY BINARY_INTEGER
2064 ,p_Dependent_Objects_Tab IN OUT NOCOPY Dependent_Objects_Tab
2065 ,p_Dependent_Objects_Count IN OUT NOCOPY BINARY_INTEGER
2066 ,p_Output_Dataset_Code IN DEF_DATASET_CODE%TYPE
2067 ,p_Output_Period_ID IN NUMBER
2068 ,p_Ledger_ID IN NUMBER
2069 ,l_Maximum_Sequence IN OUT NOCOPY NUMBER
2070 ,p_curr_RS IN Rule_Set_Instance_Rec
2071 ) IS
2072
2073 -- as it suggests.. get all the members for a given ruleset.
2074 CURSOR Get_Rule_Set_Members(p_Curr_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE) IS
2075 select
2076 rs.RULE_SET_OBJECT_TYPE_CODE as Current_RuleSet_Obj_Type
2077 ,rsm.CHILD_EXECUTION_SEQUENCE as Child_Execution_Sequence
2078 ,rsm.CHILD_OBJ_ID as Child_Object_ID
2079 ,cm_o.OBJECT_TYPE_CODE as Child_Object_Type
2080 ,cm_o.OBJECT_NAME as Child_Object_Display_Name
2081 ,cm_f.FOLDER_NAME as Child_Folder_Name
2082 ,rsm.EXECUTE_CHILD_FLAG as Execute_Child_Flag
2083 ,nvl(cm_o.LOCAL_VS_COMBO_ID,-1) as Child_Local_VS_Combo_ID
2084 from
2085 FEM_RULE_SET_MEMBERS rsm
2086 ,FEM_RULE_SETS rs
2087 ,FEM_OBJECT_CATALOG_VL cm_o
2088 ,FEM_OBJECT_DEFINITION_B rsm_d
2089 ,FEM_FOLDERS_VL cm_f
2090 where
2091 rsm.RULE_SET_OBJ_DEF_ID = rsm_d.OBJECT_DEFINITION_ID
2092 and rsm_d.OBJECT_ID = p_Curr_RuleSet_Object_ID
2093 and rsm.RULE_SET_OBJ_DEF_ID = rs.RULE_SET_OBJ_DEF_ID
2094 --and rsm.CHILD_ENABLED_FLAG = 'Y'
2095 and rsm.CHILD_OBJ_ID = cm_o.OBJECT_ID
2096 and cm_f.FOLDER_ID = cm_o.FOLDER_ID
2097 order by rsm.CHILD_EXECUTION_SEQUENCE;
2098
2099
2100 /*--Get_Rule_Set_Members Cursor Fetch variables--*/
2101 l_Current_RuleSet_Obj_Typ_Code DEF_RULESET_OBJECT_TYPE_CODE%TYPE;
2102 l_Child_Sequence_From_DB DEF_CHILD_EXEC_SEQUENCE%TYPE;
2103 l_Child_Object_ID DEF_OBJECT_ID%TYPE;
2104 l_Child_Object_Type_Code DEF_OBJECT_TYPE_CODE%TYPE;
2105 l_Child_Object_Display_Name DEF_OBJECT_DISPLAY_NAME%TYPE;
2106 l_Child_Folder_Name DEF_FOLDER_NAME%TYPE;
2107 l_Execute_Child_Flag DEF_EXECUTE_CHILD_FLAG%TYPE;
2108 l_Child_Local_VS_Combo_ID DEF_LOCAL_VS_COMBO_ID%TYPE;
2109
2110 /* Rule and Rule Set Flags */
2111 l_Valid_Member_Enabled_Status VARCHAR2(30); -- := 'NA';
2112 l_Other_Error_Status VARCHAR2(30); -- := 'NA';
2113
2114 /* Rule Validation Flags */
2115 l_Valid_Rule_Def_Status VARCHAR2(30); -- := 'NA';
2116 l_Valid_Lock_Status VARCHAR2(30); -- := 'NA';
2117 l_Valid_Approval_Status VARCHAR2(30); -- := 'NA';
2118 l_Valid_Dep_Obj_Status VARCHAR2(30) ; --:= 'NA';
2119 l_Valid_Local_VS_Status VARCHAR2(30);
2120
2121
2122 l_Child_Object_Definition_ID DEF_OBJECT_DEFINITION_ID%TYPE := 0;
2123
2124 l_Current_Rule_Set_Position BINARY_INTEGER := 0;
2125
2126 l_Current_Sequence NUMBER := 0;
2127 l_Previous_Sequence NUMBER := 0;
2128
2129 l_Current_RuleType VARCHAR2(30) := 'XX';
2130 l_Previous_RuleType VARCHAR2(30) := 'XX';
2131
2132 l_Starting_Seq_For_RS_Members NUMBER := 0; /* This is used to ensure that two Rule Set members
2133 having the same sequence, have their children starting
2134 at the same sequence */
2135
2136 l_Current_RuleSet_Name FEM_OBJECT_CATALOG_TL.object_name%TYPE := 'xxx';
2137 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Process_RuleSet';
2138
2139 l_curr_RS Rule_Set_Instance_Rec;
2140
2141 Begin
2142 -- *******************************************************************************************
2143 -- name : Process_RuleSet
2144 -- Function : Master processing loop for RSM.
2145 --
2146 -- Parameters
2147 --
2148 -- IN
2149 -- p_Orig_RuleSet_Object_ID
2150 -- -
2151 -- p_Curr_RuleSet_Object_ID
2152 -- -
2153 -- p_Rule_Effective_Date
2154 -- -
2155 -- p_Is_Output_DS_Production
2156 -- -
2157 -- p_Execution_Mode
2158 -- execution mode definitions from 'FEM_LOOKUPS' where lookup_type = 'FEM_RS_VALIDATE_TYPE_DSC'
2159 -- CODE UI parameter name UI Parameter Description
2160 -- ==== ===================== ========================================================================================
2161 -- A All Rules Will Report on Valid and Invalid Rules in a Rule Set
2162 -- E Engine Execution Mode Will by default report on Valid and Invalid Rules. Same as 'A' but also launches Engine
2163 -- I Invalid Rules Will Report on Invalid Rules in a Rule Set
2164 -- V Valid Rules Will Report on Valid Rules in a Rule Set
2165 --
2166 -- p_Output_Dataset_Code
2167 -- -
2168 -- p_Output_Period_ID
2169 -- -
2170 -- p_Ledger_ID
2171 -- -
2172 --
2173 -- OUT
2174 --
2175 -- IN OUT
2176 -- l_Maximum_Sequence
2177 -- -
2178 -- x_Rule_Set_Instance_Tab
2179 -- -
2180 -- x_Rule_Set_Count
2181 -- -
2182 -- x_Rule_Set_Level
2183 -- -
2184 -- x_Members_Processed_Tab
2185 -- -
2186 -- x_Members_Processed_Count
2187 -- -
2188 -- p_Engine_Execution_Sequence
2189 -- -
2190 -- p_Valid_Members_Tab
2191 -- -
2192 -- p_Valid_Members_Count
2193 -- -
2194 -- p_Invalid_Member_Flags_Tab
2195 -- -
2196 -- p_Invalid_Member_Flags_Count
2197 -- -
2198 -- p_Dependent_Objects_Tab
2199 -- -
2200 -- p_Dependent_Objects_Count
2201 -- -
2202 --
2203 --
2204 -- HISTORY
2205 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
2206 --
2207 -- *******************************************************************************************
2208
2209 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2210 p_module=> l_module_name,
2211 p_msg_text=> 'ENTRY');
2212
2213 l_Current_Rule_Set_Position := x_Rule_Set_Count;
2214
2215 -- verify that the ruleSet Members cursor is open and read for business.
2216 If NOT Get_Rule_Set_Members%ISOPEN then
2217 OPEN Get_Rule_Set_Members(p_Curr_RuleSet_Object_ID);
2218 End If;
2219
2220
2221 LOOP
2222
2223 -- ************************************************************************************
2224 -- ** loop on rule set entries..
2225 -- ** this is the master processing loop for validating/preparing rules/contained rulesets
2226 -- ** shown in the master ruleset.
2227 -- ************************************************************************************
2228 <<PROCESS_NEXT_RULESET_MEMBER>>
2229
2230 l_Valid_Member_Enabled_Status := 'NA';
2231 l_Other_Error_Status := 'NA';
2232
2233 l_Valid_Rule_Def_Status := 'NA';
2234 l_Valid_Lock_Status := 'NA';
2235 l_Valid_Approval_Status := 'NA';
2236 l_Valid_Dep_Obj_Status := 'NA';
2237 l_Valid_Local_VS_Status := 'NA';
2238
2239 FETCH Get_Rule_Set_Members
2240 INTO
2241 l_Current_RuleSet_Obj_Typ_Code
2242 ,l_Child_Sequence_From_DB
2243 ,l_Child_Object_ID
2244 ,l_Child_Object_Type_Code
2245 ,l_Child_Object_Display_Name
2246 ,l_Child_Folder_Name
2247 ,l_Execute_Child_Flag
2248 ,l_Child_Local_VS_Combo_ID;
2249
2250 EXIT WHEN Get_Rule_Set_Members%NOTFOUND;
2251
2252
2253 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2254 p_module=> l_module_name,
2255 p_msg_text=> 'l_Current_RuleSet_Obj_Typ_Code->' || l_Current_RuleSet_Obj_Typ_Code);
2256 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2257 p_module=> l_module_name,
2258 p_msg_text=> 'l_Child_Sequence_From_DB->' || l_Child_Sequence_From_DB);
2259 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2260 p_module=> l_module_name,
2261 p_msg_text=> 'l_Child_Object_ID->' || l_Child_Object_ID);
2262 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2263 p_module=> l_module_name,
2264 p_msg_text=> 'l_Child_Object_Type_Code->' || l_Child_Object_Type_Code);
2265 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2266 p_module=> l_module_name,
2267 p_msg_text=> 'l_Child_Object_Display_Name->' || l_Child_Object_Display_Name);
2268 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2269 p_module=> l_module_name,
2270 p_msg_text=> 'l_Child_Folder_Name->' || l_Child_Folder_Name);
2271 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2272 p_module=> l_module_name,
2273 p_msg_text=> 'l_Execute_Child_Flag->' || l_Execute_Child_Flag);
2274 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
2275 p_module=> l_module_name,
2276 p_msg_text=> 'l_Child_Local_VS_Combo_ID->' || l_Child_Local_VS_Combo_ID);
2277
2278 -- simple do NOT know why this wasn't in the original cursor.. rjk
2279 l_Current_RuleSet_Name := GetObjectDisplayName(p_Curr_RuleSet_Object_ID);
2280
2281 -- ************************************************************************************
2282 -- ** makes sure that this rule/ruleset entry is actually enabled in the current ruleset.
2283 -- ************************************************************************************
2284 If l_Execute_Child_Flag = 'N' then
2285
2286 l_Valid_Member_Enabled_Status := G_RSM_MEMBER_DISABLED;
2287
2288 --***********************************************************************
2289 -- p_Execution_Mode valid values......................
2290 -- E=Engine Execution Mode (used by engines only)
2291 -- A=All Rules (report on all rules whether they are valid or not)
2292 -- I=Invalid Rules (report on invalid rules only)
2293 -- V=Valid Rules (report on valid rules only)
2294 --***********************************************************************
2295 If ( p_Execution_Mode = 'I'
2296 OR p_Execution_Mode = 'A'
2297 OR p_Execution_Mode = 'E') then
2298 -- slap this entry into the invalid member table, shown as disabled..
2299 Pop_Invalid_MmbrFlags_Tbl
2300 ( p_Invalid_Member_Flags_Tab
2301 ,p_Invalid_Member_Flags_Count
2302 ,l_Child_Folder_Name
2303 ,l_Current_RuleSet_Name
2304 ,l_Child_Object_ID
2305 ,l_Child_Object_Display_Name
2306 ,l_Child_Object_Type_Code
2307 ,l_Valid_Member_Enabled_Status
2308 ,l_Valid_Rule_Def_Status
2309 ,l_Valid_Lock_Status
2310 ,l_Valid_Approval_Status
2311 ,l_Valid_Dep_Obj_Status
2312 ,l_Valid_Local_VS_Status
2313 ,l_Other_Error_Status);
2314
2315 End If;
2316 -- next member plz, since the current rule is not enabled.
2317 GOTO PROCESS_NEXT_RULESET_MEMBER;
2318 ELSE
2319 -- otherwise show it as 'enabled' and continue to next check.
2320 l_Valid_Member_Enabled_Status := G_RSM_MEMBER_ENABLED;
2321 End If; -- If l_Execute_Child_Flag
2322
2323 --**********************************************************************
2324 --*****Rule Set : Check for Member processed before in current run******
2325 --**********************************************************************
2326
2327 If Mem_Obj_Prev_Processed(p_curr_RS
2328 ,l_Child_Object_ID
2329 ,l_Child_Folder_Name
2330 ,l_Child_Object_Display_Name
2331 ,x_Members_Processed_Tab
2332 ,x_Members_Processed_Count
2333 ,l_Child_Object_Type_Code ) then
2334 l_Other_Error_Status := G_RSM_MEMBER_PREV_PROCESSED;
2335
2336 --***********************************************************************
2337 -- p_Execution_Mode valid values......................
2338 -- E=Engine Execution Mode (used by engines only)
2339 -- A=All Rules (report on all rules whether they are valid or not)
2340 -- I=Invalid Rules (report on invalid rules only)
2341 -- V=Valid Rules (report on valid rules only)
2342 --***********************************************************************
2343 If ( p_Execution_Mode = 'I'
2344 OR p_Execution_Mode = 'A'
2345 OR p_Execution_Mode = 'E') then
2346
2347 -- slap this entry into the invalid member flags table, shown as already processed..
2348 Pop_Invalid_MmbrFlags_Tbl
2349 (p_Invalid_Member_Flags_Tab
2350 ,p_Invalid_Member_Flags_Count
2351 ,l_Child_Folder_Name
2352 ,l_Current_RuleSet_Name
2353 ,l_Child_Object_ID
2354 ,l_Child_Object_Display_Name
2355 ,l_Child_Object_Type_Code
2356 ,l_Valid_Member_Enabled_Status
2357 ,l_Valid_Rule_Def_Status
2358 ,l_Valid_Lock_Status
2359 ,l_Valid_Approval_Status
2360 ,l_Valid_Dep_Obj_Status
2361 ,l_Valid_Local_VS_Status
2362 ,l_Other_Error_Status);
2363
2364 End If;
2365 GOTO PROCESS_NEXT_RULESET_MEMBER;
2366 Else
2367 l_Other_Error_Status := 'NA';
2368 End If; /* If Mem_Obj_Prev_Processed */
2369
2370 --**********************************************************************
2371 --** if we are currently processing a contained ruleset, then check:
2372 --** 1) has it been included before?
2373 --** 2) Is it the same as the master ruleset passed to us?
2374 --** 3) are we above the maximum nesting allowed?
2375 --**
2376 --** if any of the above conditions are true, show an error!
2377 --**********************************************************************
2378 If (l_Child_Object_Type_Code = 'RULE_SET') then
2379
2380 If RS_Cyclical_And_Depth_Check(l_Child_Object_ID
2381 ,l_Child_Object_Display_Name
2382 ,x_Rule_Set_Level
2383 ,x_Rule_Set_Count
2384 ,x_Rule_Set_Instance_Tab
2385 ,l_Other_Error_Status) then
2386
2387 -- l_Other_Error_Status := 'Cyclical or Depth Error';
2388
2389 --***********************************************************************
2390 -- p_Execution_Mode valid values......................
2391 -- E=Engine Execution Mode (used by engines only)
2392 -- A=All Rules (report on all rules whether they are valid or not)
2393 -- I=Invalid Rules (report on invalid rules only)
2394 -- V=Valid Rules (report on valid rules only)
2395 --***********************************************************************
2396 If ( p_Execution_Mode = 'I'
2397 OR p_Execution_Mode = 'A'
2398 OR p_Execution_Mode = 'E') then
2399
2400 -- slap this entry into the invalid member flags table.. we either exceeded
2401 -- nesting or this ruleset has been seen before.
2402 Pop_Invalid_MmbrFlags_Tbl
2403 ( p_Invalid_Member_Flags_Tab
2404 ,p_Invalid_Member_Flags_Count
2405 ,l_Child_Folder_Name
2406 ,l_Current_RuleSet_Name
2407 ,l_Child_Object_ID
2408 ,l_Child_Object_Display_Name
2409 ,l_Child_Object_Type_Code
2410 ,l_Valid_Member_Enabled_Status
2411 ,l_Valid_Rule_Def_Status
2412 ,l_Valid_Lock_Status
2413 ,l_Valid_Approval_Status
2414 ,l_Valid_Dep_Obj_Status
2415 ,l_Valid_Local_VS_Status
2416 ,l_Other_Error_Status);
2417
2418
2419 End If;
2420 --RETURN ;
2421 GOTO PROCESS_NEXT_RULESET_MEMBER;
2422 ELSE
2423 -- we are ok, continue on..
2424 l_Other_Error_Status := 'NA';
2425 End If;
2426 End If; /* If (l_Child_Object_Type_Code = 'RULE_SET') */
2427
2428
2429
2430 --**********************************************************************
2431 --** this is a rule, continue with validations..
2432 --**********************************************************************
2433
2434 If (l_Child_Object_Type_Code <> 'RULE_SET') then
2435 -- we know this rule is 'enabled', and not been processed yet.
2436 -- so validate it..
2437 Validate_Rule_Private(l_Child_Object_ID
2438 ,l_Child_Local_VS_Combo_ID
2439 ,p_Rule_Effective_Date
2440 ,p_IsProductionODS
2441 ,p_Output_Period_ID
2442 ,p_Ledger_ID
2443 ,p_Dependent_Objects_Tab
2444 ,p_Dependent_Objects_Count
2445 ,l_Child_Object_Definition_ID
2446 ,l_Valid_Rule_Def_Status
2447 ,l_Valid_Lock_Status
2448 ,l_Valid_Approval_Status
2449 ,l_Valid_Dep_Obj_Status
2450 ,l_Valid_Local_VS_Status);
2451
2452 -- z_Err_Code will be non-0 if something bad happened
2453 -- in Validate_Rule_Private
2454
2455 -- todo:: rationalize...
2456 If (z_Err_Code = 0) then
2457 --***********************************************************************
2458 -- p_Execution_Mode valid values......................
2459 -- E=Engine Execution Mode (used by engines only)
2460 -- A=All Rules (report on all rules whether they are valid or not)
2461 -- I=Invalid Rules (report on invalid rules only)
2462 -- V=Valid Rules (report on valid rules only)
2463 --***********************************************************************
2464 If ( p_Execution_Mode = 'V'
2465 OR p_Execution_Mode = 'A'
2466 OR p_Execution_Mode = 'E') then
2467
2468 -- it is valid and we should report on it ...
2469 Populate_Valid_Member_Tab(p_Valid_Members_Tab
2470 ,p_Valid_Members_Count
2471 ,l_Child_Folder_Name
2472 ,l_Current_RuleSet_Name
2473 ,l_Child_Object_ID
2474 ,l_Child_Object_Display_Name
2475 ,l_Child_Object_Type_Code
2476 ,G_RSM_MEMBER_VALID);
2477 End If;
2478 Elsif (z_Err_Code <> 0) then
2479 --***********************************************************************
2480 -- p_Execution_Mode valid values......................
2481 -- E=Engine Execution Mode (used by engines only)
2482 -- A=All Rules (report on all rules whether they are valid or not)
2483 -- I=Invalid Rules (report on invalid rules only)
2484 -- V=Valid Rules (report on valid rules only)
2485 --***********************************************************************
2486 If ( p_Execution_Mode = 'I'
2487 OR p_Execution_Mode = 'A'
2488 OR p_Execution_Mode = 'E') then
2489 -- slap this entry into the invalid member flags table.. we just had a
2490 -- validation error.
2491 Pop_Invalid_MmbrFlags_Tbl
2492 ( p_Invalid_Member_Flags_Tab
2493 ,p_Invalid_Member_Flags_Count
2494 ,l_Child_Folder_Name
2495 ,l_Current_RuleSet_Name
2496 ,l_Child_Object_ID
2497 ,l_Child_Object_Display_Name
2498 ,l_Child_Object_Type_Code
2499 ,l_Valid_Member_Enabled_Status
2500 ,l_Valid_Rule_Def_Status
2501 ,l_Valid_Lock_Status
2502 ,l_Valid_Approval_Status
2503 ,l_Valid_Dep_Obj_Status
2504 ,l_Valid_Local_VS_Status
2505 ,l_Other_Error_Status);
2506
2507 If z_continue_on_error then
2508 GOTO PROCESS_NEXT_RULESET_MEMBER;
2509 Else
2510 RETURN;
2511 End If;
2512 End If;
2513 End If; /* pseudo case: (z_Err_Code = 0), (z_Err_Code <> 0) */
2514
2515 End If; /* If (l_Child_Object_Type_Code <> 'RULE_SET') */
2516
2517
2518 -- current ruleset member settings.
2519 l_Current_Sequence := l_Child_Sequence_From_DB;
2520 l_Current_RuleType := l_Child_Object_Type_Code;
2521
2522
2523 -- ??
2524 If (p_Engine_Execution_Sequence > l_Maximum_Sequence) then
2525 l_Maximum_Sequence := p_Engine_Execution_Sequence;
2526 End If;
2527
2528
2529 If (l_Child_Object_Type_Code = 'RULE_SET') then
2530
2531 If (l_Current_RuleType <> l_Previous_RuleType) then
2532
2533 -- if the previous rule member WAS NOT a rule set..
2534 l_Starting_Seq_For_RS_Members := p_Engine_Execution_Sequence;
2535
2536 ElsIf ( (l_Current_RuleType = l_Previous_RuleType)
2537 and (l_Current_Sequence = l_Previous_Sequence) ) then
2538 -- if the previous rule member WAS a rule set..
2539
2540 p_Engine_Execution_Sequence := l_Starting_Seq_For_RS_Members;
2541
2542 End If;
2543 l_curr_RS.RuleSet_Object_ID :=l_Child_Object_ID;
2544 l_curr_RS.Owning_RuleSet_Name :=p_curr_RS.RuleSet_Object_Name;
2545 l_curr_RS.RuleSet_Object_Name :=l_Child_Object_Display_Name;
2546
2547 Process_RuleSet( p_Orig_RuleSet_Object_ID
2548 ,l_Child_Object_ID
2549 ,x_Rule_Set_Instance_Tab
2550 ,x_Rule_Set_Count
2551 ,x_Rule_Set_Level
2552 ,x_Members_Processed_Tab
2553 ,x_Members_Processed_Count
2554 ,p_Rule_Effective_Date
2555 ,p_IsProductionODS
2556 ,p_Engine_Execution_Sequence
2557 ,p_Execution_Mode
2558 ,p_Valid_Members_Tab
2559 ,p_Valid_Members_Count
2560 ,p_Invalid_Member_Flags_Tab
2561 ,p_Invalid_Member_Flags_Count
2562 ,p_Dependent_Objects_Tab
2563 ,p_Dependent_Objects_Count
2564 ,p_Output_Dataset_Code
2565 ,p_Output_Period_ID
2566 ,p_Ledger_ID
2567 ,l_Maximum_Sequence
2568 ,l_curr_RS );
2569
2570 -- fnd_file.put_line(FND_FILE.LOG,'Error Code after internal Process Rule Set call is : '||z_Err_Code);
2571
2572 -- capture error state and react accordingly
2573 If (z_master_err_state = FEM_UTILS.G_RSM_FATAL_ERR ) THEN
2574 -- this is a backstop err capture routine.. we (hopefully) should never get here..
2575 RAISE FND_API.G_EXC_ERROR;
2576
2577 Elsif (z_master_err_state = FEM_UTILS.G_RSM_NONFATAL_ERR) then
2578
2579 If NOT z_continue_on_error then
2580 -- if the caller wants to stop on error, we stop..
2581 RETURN;
2582 End If;
2583
2584 End If;
2585
2586 End If; /* If (l_Child_Object_Type_Code = 'RULE_SET') */
2587
2588
2589 If (l_Child_Object_Type_Code <> 'RULE_SET') then
2590
2591 If (l_Current_Sequence <> l_Previous_Sequence) then
2592
2593 If ( (l_Previous_RuleType = 'RULE_SET')
2594 and (p_Engine_Execution_Sequence < l_Maximum_Sequence)) then
2595
2596 p_Engine_Execution_Sequence := l_Maximum_Sequence;
2597
2598 End If;
2599
2600 p_Engine_Execution_Sequence := p_Engine_Execution_Sequence + 1;
2601
2602 Elsif (l_Current_Sequence = l_Previous_Sequence) then
2603
2604 If (l_Previous_RuleType = 'RULE_SET') then
2605 p_Engine_Execution_Sequence := p_Engine_Execution_Sequence + 1;
2606 End If;
2607
2608 End If;
2609
2610 --***********************************************************************
2611 -- p_Execution_Mode valid values......................
2612 -- E=Engine Execution Mode (used by engines only)
2613 -- A=All Rules (report on all rules whether they are valid or not)
2614 -- I=Invalid Rules (report on invalid rules only)
2615 -- V=Valid Rules (report on valid rules only)
2616 --***********************************************************************
2617 If (p_Execution_Mode = 'E') then
2618 Create_RuleSet_Process_Data(p_Orig_RuleSet_Object_ID
2619 ,l_Child_Object_ID
2620 ,l_Child_Object_Definition_ID
2621 ,p_Engine_Execution_Sequence);
2622
2623 End If;
2624
2625 End If; /* If (l_Child_Object_Type_Code <> 'RULE_SET') */
2626 --------------------------------------------------------------------
2627
2628 l_Previous_Sequence := l_Current_Sequence;
2629 l_Previous_RuleType := l_Current_RuleType;
2630
2631 END LOOP; /* exit point for loop */
2632
2633 /* Clearing out RuleSet entry from PLSQL table once the RuleSet is processed */
2634 /* so that a second occurance of the same Rule Set as a child of a different Parent */
2635 /* Rule Set is not misinterpreted as a recursive occurrance */
2636
2637 x_Rule_Set_Instance_Tab(l_Current_Rule_Set_Position).RuleSet_Object_ID := -1;
2638
2639 /* Decrementing Rule_Set_Level after Rule_Set is processed so that an occurrance of */
2640 /* another Rule_Set at a higher level is not misinterpreted as a Rule Set in the same tree */
2641
2642 x_Rule_Set_Level := x_Rule_Set_Level -1;
2643
2644 CLOSE Get_Rule_Set_Members;
2645
2646 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2647 p_module=> l_module_name,
2648 p_msg_text=> 'EXIT');
2649
2650
2651 EXCEPTION
2652 WHEN FND_API.G_EXC_ERROR THEN
2653 -- top caller will handle this one..
2654 RAISE;
2655 WHEN OTHERS THEN
2656 -- todo:: useful?? z_Err_Code := -1;
2657 FEM_UTILS.set_master_err_state( z_master_err_state,
2658 FEM_UTILS.G_RSM_FATAL_ERR,
2659 G_APP_NAME,
2660 G_ERRMSG_UNEXPECTED_SQLERROR,
2661 G_ERRMAC_ROUTINE_NAME,
2662 l_module_name,
2663 NULL,
2664 G_ERRMAC_SQL_ERROR,
2665 SQLERRM);
2666 RAISE ;
2667
2668 End Process_RuleSet;
2669
2670
2671
2672
2673 Procedure Log_Rule_Status(p_Rule_Object_ID IN DEF_OBJECT_ID%TYPE
2674 ,p_Valid_Rule_Def_Status IN VARCHAR2
2675 ,p_Valid_Lock_Status IN VARCHAR2
2676 ,p_Valid_Local_VS_Status IN VARCHAR2
2677 ,p_Valid_Approval_Status IN VARCHAR2
2678 ,p_Valid_Dep_Obj_Status IN VARCHAR2
2679 ,p_Dependent_Objects_Tab IN Dependent_Objects_Tab
2680 ,p_Dependent_Objects_Count IN BINARY_INTEGER) IS
2681
2682 l_Rule_Display_Name DEF_OBJECT_DISPLAY_NAME%TYPE;
2683 l_Rule_Folder_Name DEF_FOLDER_NAME%TYPE;
2684 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Log_Rule_Status';
2685
2686 Begin
2687 -- *******************************************************************************************
2688 -- name : Log_Rule_Status
2689 -- Function : print report to pertinent log.
2690 --
2691 -- Parameters
2692 -- IN
2693 --
2694 -- p_Rule_Object_ID IN DEF_OBJECT_ID%TYPE
2695 -- -
2696 -- p_Valid_Rule_Def_Status IN VARCHAR2
2697 -- -
2698 -- p_Valid_Lock_Status IN VARCHAR2
2699 -- -
2700 -- p_Valid_Local_VS_Status IN VARCHAR2
2701 -- -
2702 -- p_Valid_Approval_Status IN VARCHAR2
2703 -- -
2704 -- p_Valid_Dep_Obj_Status IN VARCHAR2
2705 -- -
2706 -- p_Dependent_Objects_Tab IN Dependent_Objects_Tab
2707 -- -
2708 -- p_Dependent_Objects_Count IN BINARY_INTEGER
2709 -- -
2710 -- OUT
2711 --
2712 -- IN OUT
2713 --
2714 --
2715 --
2716 -- HISTORY
2717 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
2718 --
2719 -- *******************************************************************************************
2720 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2721 p_module=> l_module_name,
2722 p_msg_text=> 'ENTRY');
2723
2724 GetObjectDisplayNameandFolder(p_Rule_Object_ID
2725 ,l_Rule_Display_Name
2726 ,l_Rule_Folder_Name);
2727
2728 fnd_file.put_line(FND_FILE.OUTPUT
2729 ,RPAD('Rule Name',42,' ')
2730 ||RPAD('Folder',32,' ')
2731 ||RPAD('Rule Def',32,' ')
2732 ||RPAD('Lock Status',13,' ')
2733 ||RPAD('Local VS Status',17,' ')
2734 ||RPAD('Approval Status',17,' ')
2735 ||RPAD('Dependent Status',18,' ')
2736 );
2737
2738 fnd_file.put_line(FND_FILE.OUTPUT
2739 ,RPAD('---------',42,' ')
2740 ||RPAD('------',32,' ')
2741 ||RPAD('---------------------',32,' ')
2742 ||RPAD('-----------',13,' ')
2743 ||RPAD('---------------',17,' ')
2744 ||RPAD('---------------',17,' ')
2745 ||RPAD('----------------',18,' ')
2746 );
2747
2748 fnd_file.put_line(FND_FILE.OUTPUT
2749 ,RPAD(l_Rule_Display_Name,42,' ')
2750 ||RPAD(l_Rule_Folder_Name,32,' ')
2751 ||RPAD(p_Valid_Rule_Def_Status,32,' ')
2752 ||RPAD(p_Valid_Lock_Status,13,' ')
2753 ||RPAD(p_Valid_Local_VS_Status,17,' ')
2754 ||RPAD(p_Valid_Approval_Status,17,' ')
2755 ||RPAD(p_Valid_Dep_Obj_Status,18,' ')
2756 );
2757
2758 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2759 p_module=> l_module_name,
2760 p_msg_text=> 'EXIT');
2761
2762 End Log_Rule_Status;
2763
2764
2765 Procedure Validate_Rule_Public(x_Err_Code OUT NOCOPY NUMBER
2766 ,x_Err_Msg OUT NOCOPY VARCHAR2
2767 ,p_Rule_Object_ID IN DEF_OBJECT_ID%TYPE
2768 ,p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
2769 ,p_Rule_Effective_Date IN VARCHAR2
2770 ,p_Reference_Period_ID IN NUMBER
2771 ,p_Ledger_ID IN NUMBER) IS
2772
2773 l_module_name VARCHAR2(70) := G_MODULE_NAME || 'Validate_Rule_Public';
2774 l_Output_Dataset_Code NUMBER(9):= NULL;
2775 l_Output_Dataset_Name VARCHAR2(120) := NULL;
2776 -- l_Is_Output_DS_Production VARCHAR2(1) := NULL;
2777 l_isProductionODS BOOLEAN := FALSE;
2778
2779 l_Dependent_Objects_Tab Dependent_Objects_Tab;
2780 l_Dependent_Objects_Count BINARY_INTEGER := 0;
2781
2782 /* Rule Validation Flags */
2783 l_Valid_Rule_Def_Status VARCHAR2(30) := ' ';
2784 l_Valid_Lock_Status VARCHAR2(30) := ' ';
2785 l_Valid_Approval_Status VARCHAR2(30) := ' ';
2786 l_Valid_Dep_Obj_Status VARCHAR2(30) := ' ';
2787 l_Valid_Local_VS_Status VARCHAR2(30) := ' ';
2788
2789 l_Rule_Obj_Def_ID DEF_OBJECT_DEFINITION_ID%TYPE;
2790
2791 l_Rule_Local_VSCID DEF_LOCAL_VS_COMBO_ID%TYPE;
2792
2793 l_Rule_Effective_Date DATE;
2794 l_TEMP NUMBER;
2795
2796 Begin
2797 -- *******************************************************************************************
2798 -- name : Validate_Rule_Public
2799 -- Function : Verify that:
2800 -- 1) Local VS Combo ID for LEDGER_ID matches the rule..
2801 -- 2) If the dataset in use is production, that the ruleis production.
2802 -- 3) call our internal private validation routine (Validate_Rule_Private)
2803 -- Log this via a call to Log_Rule_Status
2804 --
2805 -- Parameters
2806 -- p_Rule_Object_ID IN DEF_OBJECT_ID%TYPE
2807 -- -
2808 -- p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
2809 -- -
2810 -- p_Rule_Effective_Date IN VARCHAR2
2811 -- -
2812 -- p_Reference_Period_ID IN NUMBER
2813 -- -
2814 -- p_Ledger_ID IN NUMBER
2815 -- -
2816 --
2817 -- OUT
2818 --
2819 -- x_Err_Code OUT NUMBER
2820 -- -
2821 -- x_Err_Msg OUT VARCHAR2
2822 -- -
2823 -- IN OUT
2824 --
2825 --
2826 --
2827 -- HISTORY
2828 -- 27-Jun-2006 dyung removed 'raise' from the exception
2829 -- handling and added a savepoint for the
2830 -- rollback.
2831 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
2832 --
2833 -- *******************************************************************************************
2834 SAVEPOINT Validate_Rule_Public_SvPt;
2835
2836 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2837 p_module=> l_module_name,
2838 p_msg_text=> 'ENTRY: p_Rule_Object_ID = '||p_Rule_Object_ID);
2839
2840 l_Rule_Effective_Date := FND_DATE.CANONICAL_TO_DATE(p_Rule_Effective_Date);
2841
2842 z_Err_Code := 0;
2843
2844 -- fetch the local value set associated with the p_Ledger_ID we were passed.
2845 Begin
2846 -- todo:: fix to new standards ??
2847 z_local_vs_for_session := fem_dimension_util_pkg.Local_VS_Combo_ID
2848 ( p_Ledger_ID
2849 , z_Err_Code
2850 ,l_TEMP);
2851
2852 If (z_local_vs_for_session = -1) then
2853 -- todo:: fix to new standards..
2854 RAISE USER_EXCEPTION;
2855 End If;
2856 End;
2857
2858
2859 -- now compare the local value set combo ID of the rule in question with
2860 -- the fetched local value set combo ID associated with the p_Ledger_ID passed to us.
2861 Begin
2862 -- get rule's local value set combo ID
2863 select local_vs_combo_id
2864 into l_Rule_Local_VSCID
2865 from Fem_Object_Catalog_B
2866 where object_id = p_Rule_Object_ID;
2867
2868 -- if the rule's local value set id doesn't match the one for the ledger, its BAD.
2869 If (l_Rule_Local_VSCID <> z_local_vs_for_session) then
2870 z_Err_Code := 9;
2871 FEM_UTILS.set_master_err_state( z_master_err_state,
2872 FEM_UTILS.G_RSM_NONFATAL_ERR,
2873 G_APP_NAME,
2874 G_ERRMSG_NO_VALID_VALSETS,
2875 G_ERRMAC_RULE_NAME,
2876 GetObjectDisplayName(p_Rule_Object_ID)
2877 );
2878 z_Err_Msg := G_INVALID_LVSCID_ON_OBJECT;
2879 -- todo:: fix to new standards..
2880 RAISE USER_EXCEPTION;
2881 End If;
2882
2883 End;
2884
2885 l_isProductionODS := IsProductionODS( p_DS_IO_Def_ID
2886 ,l_Output_Dataset_Name
2887 ,l_Output_Dataset_Code );
2888
2889 -- if we found the output data set in question..
2890 If (NOT z_dataset_error) then
2891
2892 -- then run further validations..
2893 Validate_Rule_Private( p_Rule_Object_ID
2894 ,l_Rule_Local_VSCID
2895 ,l_Rule_Effective_Date
2896 ,l_isProductionODS
2897 ,p_Reference_Period_ID
2898 ,p_Ledger_ID
2899 ,l_Dependent_Objects_Tab
2900 ,l_Dependent_Objects_Count
2901 ,l_Rule_Obj_Def_ID
2902 ,l_Valid_Rule_Def_Status
2903 ,l_Valid_Lock_Status
2904 ,l_Valid_Approval_Status
2905 ,l_Valid_Dep_Obj_Status
2906 ,l_Valid_Local_VS_Status);
2907
2908 Else
2909 z_Err_Code := 10;
2910 FEM_UTILS.set_master_err_state( z_master_err_state,
2911 FEM_UTILS.G_RSM_NONFATAL_ERR,
2912 G_APP_NAME,
2913 G_ERRMSG_DSGRP_NOT_FOUND );
2914 z_Err_Msg := G_INVALID_DATASET_GROUP;
2915 -- todo:: fix to new standards..
2916 RAISE USER_EXCEPTION;
2917 End If;
2918
2919 Log_Rule_Status( p_Rule_Object_ID
2920 ,l_Valid_Rule_Def_Status
2921 ,l_Valid_Lock_Status
2922 ,l_Valid_Local_VS_Status
2923 ,l_Valid_Approval_Status
2924 ,l_Valid_Dep_Obj_Status
2925 ,l_Dependent_Objects_Tab
2926 ,l_Dependent_Objects_Count);
2927
2928 If (l_Valid_Dep_Obj_Status = G_RSM_DEP_OBJECTS_INVALID) then
2929 Log_Dep_Status_For_Single_Rule( p_Rule_Object_ID
2930 ,l_Dependent_Objects_Tab
2931 ,l_Dependent_Objects_Count);
2932 End If;
2933
2934 x_Err_Code := z_Err_Code;
2935 x_Err_Msg := z_Err_Msg;
2936
2937 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
2938 p_module=> l_module_name,
2939 p_msg_text=> 'EXIT');
2940
2941 EXCEPTION
2942 WHEN USER_EXCEPTION THEN
2943 x_Err_Code := z_Err_Code;
2944 x_Err_Msg := z_Err_Msg;
2945 -- todo:: fix to new standards
2946 fem_engines_pkg.user_message(p_msg_text =>
2947 z_Err_Code||':'||z_Err_Msg);
2948 fnd_file.put_line(FND_FILE.OUTPUT,z_Err_Msg);
2949 ROLLBACK TO Validate_Rule_Public_SvPt;
2950 WHEN OTHERS THEN
2951 x_Err_Code := -1;
2952 -- todo:: this is a main I/F procedure and should conform to the 'new way of thinking'.
2953 FEM_UTILS.set_master_err_state( z_master_err_state,
2954 FEM_UTILS.G_RSM_FATAL_ERR,
2955 G_APP_NAME,
2956 G_ERRMSG_UNEXPECTED_SQLERROR,
2957 G_ERRMAC_ROUTINE_NAME,
2958 l_module_name,
2959 NULL,
2960 G_ERRMAC_SQL_ERROR,
2961 SQLERRM);
2962
2963 End Validate_Rule_Public;
2964
2965
2966
2967 Procedure Validate_Rule_Public(p_api_version IN NUMBER
2968 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2969 ,p_encoded IN VARCHAR2 := FND_API.G_TRUE
2970 ,p_Rule_Object_ID IN DEF_OBJECT_ID%TYPE
2971 ,p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
2972 ,p_Rule_Effective_Date IN VARCHAR2
2973 ,p_Reference_Period_ID IN NUMBER
2974 ,p_Ledger_ID IN NUMBER
2975 ,x_return_status OUT NOCOPY VARCHAR2
2976 ,x_msg_count OUT NOCOPY NUMBER
2977 ,x_msg_data OUT NOCOPY VARCHAR2) IS
2978
2979 l_api_name CONSTANT VARCHAR2(30) := 'Validate_Rule_Public';
2980 l_api_version CONSTANT NUMBER := 1.0;
2981 l_Err_Code NUMBER := 0;
2982 l_Err_Msg VARCHAR2(30) := NULL;
2983
2984 Begin
2985 -- *******************************************************************************************
2986 -- name : Validate_Rule_Public
2987 -- Function : Standards-compliant wrapper around Validate_Rule_Public
2988 --
2989 -- HISTORY
2990 -- 27-Jun-2006 dyung initial version
2991 --
2992 -- *******************************************************************************************
2993 IF NOT FND_API.Compatible_API_Call(l_api_version
2994 ,p_api_version
2995 ,l_api_name
2996 ,G_PKG_NAME)
2997 THEN
2998 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2999 END IF;
3000
3001 IF FND_API.to_Boolean(p_init_msg_list) THEN
3002 FND_MSG_PUB.Initialize;
3003 END IF;
3004
3005 Validate_Rule_Public(l_Err_Code
3006 ,l_Err_Msg
3007 ,p_Rule_Object_ID
3008 ,p_DS_IO_Def_ID
3009 ,p_Rule_Effective_Date
3010 ,p_Reference_Period_ID
3011 ,p_Ledger_ID);
3012
3013 -- any errors in Validate_Rule_Public should be on the message stack
3014 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded, p_count => x_msg_count,
3015 p_data => x_msg_data);
3016
3017 IF (l_Err_Code > 0) THEN
3018 x_return_status := FND_API.G_RET_STS_ERROR;
3019 ELSE
3020 IF (l_Err_Code = 0) THEN
3021 x_return_status := FND_API.G_RET_STS_SUCCESS;
3022 ELSE
3023 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3024 END IF;
3025 END IF;
3026
3027 EXCEPTION
3028 WHEN OTHERS THEN
3029 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3030 FND_MSG_PUB.Count_And_Get(p_encoded => p_encoded, p_count => x_msg_count, p_data => x_msg_data);
3031
3032 End Validate_Rule_Public;
3033
3034
3035
3036
3037 Procedure Preprocess_RuleSet( x_Err_Code OUT NOCOPY NUMBER
3038 ,x_Err_Msg OUT NOCOPY VARCHAR2
3039 ,p_Orig_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
3040 ,p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
3041 ,p_Rule_Effective_Date IN VARCHAR2
3042 ,p_Output_Period_ID IN NUMBER
3043 ,p_Ledger_ID IN NUMBER
3044 ,p_Continue_Process_On_Err_Flg IN VARCHAR2
3045 ,p_Execution_Mode IN VARCHAR2
3046 ) IS
3047
3048 l_Rule_Set_Instance_Tab Rule_Set_Instance_Tab;
3049 l_Rule_Set_Count BINARY_INTEGER := 0;
3050 l_Rule_Set_Level NUMBER := 0;
3051
3052 l_Members_Processed_Tab Members_Processed_Instance_Tab;
3053 l_Members_Processed_Count BINARY_INTEGER := 0;
3054
3055 l_Valid_Members_Tab Valid_Invalid_Members_Inst_Tab;
3056 l_Valid_Members_Count BINARY_INTEGER := 0;
3057
3058 l_Invalid_Member_Flags_Tab Members_Validation_Status_Tab;
3059 l_Invalid_Member_Flags_Count BINARY_INTEGER := 0;
3060
3061 l_Dependent_Objects_Tab Dependent_Objects_Tab;
3062 l_Dependent_Objects_Count BINARY_INTEGER := 0;
3063
3064 l_Engine_Execution_Sequence NUMBER := 0;
3065
3066 l_Output_Dataset_Name VARCHAR2(120) := NULL;
3067 l_Output_Dataset_Code NUMBER(9) := NULL;
3068 l_IsProductionODS BOOLEAN := FALSE;
3069
3070 l_Rule_Effective_Date DATE;
3071 l_RuleSet_LocalVSComboID NUMBER;
3072
3073 l_Maximum_Sequence NUMBER := 0; /*---Keeps track of the maximum sequence of
3074 members of a given Rule Set member. */
3075 l_TEMP NUMBER;
3076
3077 l_curr_RS Rule_Set_Instance_Rec;
3078 Begin
3079 -- *******************************************************************************************
3080 -- name : Preprocess_RuleSet
3081 -- Function : Entry point for RSM.
3082 --
3083 -- Parameters
3084 -- IN
3085 -- p_Orig_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
3086 -- -
3087 -- p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
3088 -- -
3089 -- p_Rule_Effective_Date IN VARCHAR2
3090 -- -
3091 -- p_Output_Period_ID IN NUMBER
3092 -- -
3093 -- p_Ledger_ID IN NUMBER
3094 -- -
3095 -- p_Continue_Process_On_Err_Flg IN VARCHAR2
3096 -- -
3097 -- p_Execution_Mode IN VARCHAR2
3098 -- execution mode definitions from DB
3099 -- CODE UI parameter name UI Parameter Description
3100 -- ==== ===================== ========================================================================================
3101 -- A All Rules Will Report on Valid and Invalid Rules in a Rule Set
3102 -- E Engine Execution Mode Will by default report on Valid and Invalid Rules. Same as 'A' but also launches Engine
3103 -- I Invalid Rules Will Report on Invalid Rules in a Rule Set
3104 -- V Valid Rules Will Report on Valid Rules in a Rule Set
3105 --
3106 -- OUT
3107 -- x_Err_Code OUT NUMBER
3108 -- -
3109 -- x_Err_Msg OUT VARCHAR2
3110 -- -
3111 --
3112 -- IN OUT
3113 --
3114 --
3115 --
3116 -- HISTORY
3117 -- 05-Jan-2004 rjking comment header added, reformatted and commented.
3118 --
3119 -- *******************************************************************************************
3120
3121 reset_master_err_state;
3122 z_Err_Code := 0;
3123
3124 Begin
3125 z_local_vs_for_session := fem_dimension_util_pkg.Local_VS_Combo_ID
3126 (p_Ledger_ID
3127 ,z_Err_Code
3128 ,l_TEMP);
3129 If (z_local_vs_for_session = -1) then
3130 RAISE USER_EXCEPTION;
3131 End If;
3132 End;
3133
3134 Begin /*--Check Local VS of Rule Set being run --*/
3135 select local_vs_combo_id
3136 into l_RuleSet_LocalVSComboID
3137 from Fem_Object_Catalog_B
3138 where object_id = p_Orig_RuleSet_Object_ID;
3139 If (l_RuleSet_LocalVSComboID <> z_local_vs_for_session) then
3140 z_Err_Code := 9;
3141 z_Err_Msg := G_INVALID_LVSCID_ON_OBJECT;
3142 RAISE USER_EXCEPTION;
3143 End If;
3144 End;
3145
3146 Begin
3147 l_Rule_Effective_Date := FND_DATE.CANONICAL_TO_DATE(p_Rule_Effective_Date);
3148 End;
3149
3150 l_Rule_Set_Instance_Tab(l_Rule_Set_Count).RuleSet_Object_ID := p_Orig_RuleSet_Object_ID;
3151 l_Rule_Set_Instance_Tab(l_Rule_Set_Count).RuleSet_Object_Name := GetObjectDisplayName(p_Orig_RuleSet_Object_ID);
3152 l_Rule_Set_Instance_Tab(l_Rule_Set_Count).Owning_RuleSet_Name := '';
3153
3154 l_curr_RS.RuleSet_Object_ID :=p_Orig_RuleSet_Object_ID;
3155 l_curr_RS.RuleSet_Object_Name :=l_Rule_Set_Instance_Tab(l_Rule_Set_Count).RuleSet_Object_Name;
3156 l_curr_RS.Owning_RuleSet_Name :='';
3157
3158
3159 If (p_DS_IO_Def_ID is NOT NULL) then
3160 l_IsProductionODS := IsProductionODS
3161 (p_DS_IO_Def_ID
3162 ,l_Output_Dataset_Name
3163 ,l_Output_Dataset_Code
3164 );
3165 End If;
3166
3167 If (NOT z_dataset_error) then
3168 Process_RuleSet ( p_Orig_RuleSet_Object_ID
3169 ,p_Orig_RuleSet_Object_ID
3170 ,l_Rule_Set_Instance_Tab
3171 ,l_Rule_Set_Count
3172 ,l_Rule_Set_Level
3173 ,l_Members_Processed_Tab
3174 ,l_Members_Processed_Count
3175 ,l_Rule_Effective_Date
3176 ,l_IsProductionODS
3177 ,l_Engine_Execution_Sequence
3178 ,p_Execution_Mode
3179 ,l_Valid_Members_Tab
3180 ,l_Valid_Members_Count
3181 ,l_Invalid_Member_Flags_Tab
3182 ,l_Invalid_Member_Flags_Count
3183 ,l_Dependent_Objects_Tab
3184 ,l_Dependent_Objects_Count
3185 ,l_Output_Dataset_Code
3186 ,p_Output_Period_ID
3187 ,p_Ledger_ID
3188 ,l_Maximum_Sequence
3189 ,l_curr_RS);
3190 Else
3191 z_Err_Code := 10;
3192 z_Err_Msg := G_INVALID_DATASET_GROUP;
3193 RAISE USER_EXCEPTION;
3194 End If;
3195
3196 Write_Output( l_Valid_Members_Tab
3197 ,l_Valid_Members_Count
3198 ,l_Invalid_Member_Flags_Tab
3199 ,l_Invalid_Member_Flags_Count
3200 ,l_Dependent_Objects_Tab
3201 ,l_Dependent_Objects_Count
3202 ,p_Orig_RuleSet_Object_ID
3203 ,l_Rule_Effective_Date
3204 ,l_Output_Dataset_Name
3205 ,l_IsProductionODS
3206 ,p_Execution_Mode);
3207
3208 If (p_Continue_Process_On_Err_Flg = 'Y') then
3209 If (z_Err_Code <> -1 and z_Err_Code <> 2 and z_Err_Code <> 3) then
3210 z_Err_Code := 0;
3211 z_Err_Msg := NULL;
3212 End If;
3213 End If;
3214
3215 x_Err_Code := z_Err_Code;
3216 x_Err_Msg := z_Err_Msg;
3217
3218 EXCEPTION
3219 WHEN USER_EXCEPTION THEN
3220 x_Err_Code := z_Err_Code;
3221 x_Err_Msg := z_Err_Msg;
3222 fem_engines_pkg.user_message(p_msg_text => z_Err_Code||':'||z_Err_Msg);
3223 fnd_file.put_line(FND_FILE.OUTPUT,z_Err_Code||':'||z_Err_Msg);
3224 rollback;
3225 RETURN;
3226
3227 WHEN OTHERS THEN
3228 z_Err_Code := -1;
3229 z_Err_Msg := 'Preprocess_RuleSet :'||SQLERRM;
3230 fem_engines_pkg.user_message(p_msg_text => z_Err_Msg);
3231 rollback;
3232 RAISE;
3233
3234 End Preprocess_RuleSet;
3235
3236
3237 -- *******************************************************************************************
3238 -- API name : FEM_DeleteFlatRuleList_PVT
3239 -- Type : Private
3240 -- Pre-reqs : None
3241 -- Function : 1) delete all rules associated with the current request ID and ruleset ObjID
3242 -- 2) Report all errors that occur during the conversion that are not
3243 -- covered by the UI validation routines
3244 --
3245 --
3246 -- Parameters
3247 -- IN
3248 -- p_api_version IN NUMBER
3249 -- Current version of this API
3250 -- p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3251 -- If set to:
3252 -- FND_API.G_TRUE - Initialize FND_MSG_PUB
3253 -- FND_API.G_FALSE - DO NOT Initialize FND_MSG_PUB
3254 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
3255 -- If set to:
3256 -- FND_API.G_TRUE - Commit data at exit of this routine
3257 -- FND_API.G_FALSE - DO NOT commit data at exit of this routine
3258 -- p_Orig_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
3259 -- the object id associated with the list to delete.
3260 --
3261 --
3262 -- OUT
3263 -- x_return_status OUT VARCHAR2
3264 -- Possible return status:
3265 -- FND_API.G_RET_STS_SUCCESS - Call was successful, msgs may
3266 -- still be present (check x_msg_count)
3267 -- FND_API.G_RET_STS_ERROR - Call was not successful, msgs should
3268 -- be present (check x_msg_count)
3269 -- FND_API.G_RET_STS_UNEXP_ERROR - Unexpected errors occurred which are
3270 -- unrecoverable (check x_msg_count)
3271 --
3272 -- x_msg_count OUT NUMBER
3273 -- Count of messages returned. If x_msg_count = 1, then the message is returned
3274 -- in x_msg_data. If x_msg_count > 1, then messages are returned via FND_MSG_PUB.
3275 --
3276 -- x_msg_data OUT VARCHAR2
3277 -- Error message returned.
3278 --
3279 -- Version: Current Version 1.0
3280 --
3281 -- Previous version N/A
3282 -- Initial version 1.0
3283 -- *******************************************************************************************
3284 PROCEDURE FEM_DeleteFlatRuleList_PVT(
3285 p_api_version IN NUMBER
3286 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3287 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3288 ,p_encoded IN VARCHAR2 := FND_API.G_TRUE
3289 ,x_return_status OUT NOCOPY VARCHAR2
3290 ,x_msg_count OUT NOCOPY NUMBER
3291 ,x_msg_data OUT NOCOPY VARCHAR2
3292 ,p_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
3293 )
3294 IS
3295 l_api_version NUMBER := 1.0;
3296 l_api_name CONSTANT VARCHAR2(27) := 'FEM_Preprocess_RuleSet_PVT';
3297 l_module_name VARCHAR2(70) := G_MODULE_NAME || l_api_name;
3298
3299 BEGIN
3300 -- the infamous preamble..
3301 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
3302 p_module=> l_module_name,
3303 p_msg_text=> 'ENTER');
3304
3305 -- initialize our status to 'we are good!'
3306 x_return_status := FND_API.G_RET_STS_SUCCESS;
3307
3308 -- setup save point for rollbacks..
3309 SAVEPOINT FEM_DeleteFlatRuleList_SvPt;
3310
3311 -- initialize msg stack?
3312 IF fnd_api.to_Boolean(p_init_msg_list) THEN
3313 fnd_msg_pub.initialize;
3314 END IF;
3315
3316 -- check API version...
3317 IF NOT fnd_api.Compatible_API_Call (l_api_version,
3318 p_api_version,
3319 l_api_name,
3320 G_PKG_NAME ) THEN
3321 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3322 END IF;
3323
3324 -- and on to the real code...
3325 DELETE FROM fem_ruleset_process_DATA
3326 WHERE request_id = FND_GLOBAL.CONC_REQUEST_ID
3327 AND rule_set_obj_id = p_RuleSet_Object_ID;
3328
3329
3330 -- and the required post work code...
3331 IF fnd_api.to_boolean(p_commit) THEN
3332 COMMIT WORK;
3333 END IF;
3334
3335 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
3336 p_module=> l_module_name,
3337 p_msg_text=> 'EXIT');
3338
3339 FND_MSG_PUB.Count_And_Get ( p_encoded,
3340 x_msg_count,
3341 x_msg_data );
3342
3343 EXCEPTION
3344 WHEN OTHERS THEN
3345 FEM_UTILS.set_master_err_state( z_master_err_state,
3346 FEM_UTILS.G_RSM_FATAL_ERR,
3347 G_APP_NAME,
3348 G_ERRMSG_UNEXPECTED_SQLERROR,
3349 G_ERRMAC_ROUTINE_NAME,
3350 l_module_name,
3351 NULL,
3352 G_ERRMAC_SQL_ERROR,
3353 SQLERRM);
3354
3355 ROLLBACK TO FEM_DeleteFlatRuleList_SvPt;
3356
3357 FND_MSG_PUB.Count_And_Get ( p_encoded,
3358 x_msg_count,
3359 x_msg_data );
3360
3361 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3362
3363 END FEM_DeleteFlatRuleList_PVT;
3364
3365
3366 -- *******************************************************************************************
3367 -- API name : FEM_Preprocess_RuleSet_PVT
3368 -- Type : Private
3369 -- Pre-reqs : None
3370 -- Function : 1) convert a rule set into a flat structure prior to engine processing
3371 -- 2) Report all errors that occur during the conversion that are not
3372 -- covered by the UI validation routines
3373 --
3374 --
3375 -- Parameters
3376 -- IN
3377 -- p_api_version IN NUMBER
3378 -- Current version of this API
3379 -- p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3380 -- If set to:
3381 -- FND_API.G_TRUE - Initialize FND_MSG_PUB
3382 -- FND_API.G_FALSE - DO NOT Initialize FND_MSG_PUB
3383 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
3384 -- If set to:
3385 -- FND_API.G_TRUE - Commit data at exit of this routine
3386 -- FND_API.G_FALSE - DO NOT commit data at exit of this routine
3387 -- p_Orig_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
3388 --
3389 -- p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
3390 --
3391 -- p_Rule_Effective_Date IN VARCHAR2
3392 --
3393 -- p_Output_Period_ID IN NUMBER
3394 --
3395 -- p_Ledger_ID IN NUMBER
3396 --
3397 -- p_Continue_Process_On_Err_Flg IN VARCHAR2
3398 -- if set to:
3399 -- 'Y' - continue processing except on extreme fatal errors
3400 -- 'N' - stop on first non-fatal
3401 --
3402 -- p_Execution_Mode IN VARCHAR2
3403 --
3404 -- execution mode definitions from 'FEM_LOOKUPS' where lookup_type = 'FEM_RS_VALIDATE_TYPE_DSC'
3405 -- CODE UI parameter name UI Parameter Description
3406 -- ==== ===================== ========================================================================================
3407 -- A All Rules Will Report on Valid and Invalid Rules in a Rule Set
3408 -- E Engine Execution Mode Will by default report on Valid and Invalid Rules. Same as 'A' but also launches Engine
3409 -- I Invalid Rules Will Report on Invalid Rules in a Rule Set
3410 -- V Valid Rules Will Report on Valid Rules in a Rule Set
3411 --
3412 -- The value passed to this routine is the value from the CODE column.
3413 --
3414 --
3415 -- OUT
3416 -- x_return_status OUT VARCHAR2
3417 -- Possible return status:
3418 -- FND_API.G_RET_STS_SUCCESS - Call was successful, msgs may
3419 -- still be present (check x_msg_count)
3420 -- FND_API.G_RET_STS_ERROR - Call was not successful, msgs should
3421 -- be present (check x_msg_count)
3422 -- FND_API.G_RET_STS_UNEXP_ERROR - Unexpected errors occurred which are
3423 -- unrecoverable (check x_msg_count)
3424 --
3425 -- x_msg_count OUT NUMBER
3426 -- Count of messages returned. If x_msg_count = 1, then the message is returned
3427 -- in x_msg_data. If x_msg_count > 1, then messages are returned via FND_MSG_PUB.
3428 --
3429 -- x_msg_data OUT VARCHAR2
3430 -- Error message returned.
3431 --
3432 -- Version: Current Version 1.0
3433 --
3434 -- Previous version N/A
3435 -- Initial version 1.0
3436 -- *******************************************************************************************
3437
3438 PROCEDURE FEM_Preprocess_RuleSet_PVT(
3439 p_api_version IN NUMBER
3440 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3441 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3442 ,p_encoded IN VARCHAR2 := FND_API.G_TRUE
3443 ,x_return_status OUT NOCOPY VARCHAR2
3444 ,x_msg_count OUT NOCOPY NUMBER
3445 ,x_msg_data OUT NOCOPY VARCHAR2
3446 ,p_Orig_RuleSet_Object_ID IN DEF_OBJECT_ID%TYPE
3447 ,p_DS_IO_Def_ID IN DEF_OBJECT_DEFINITION_ID%TYPE
3448 ,p_Rule_Effective_Date IN VARCHAR2
3449 ,p_Output_Period_ID IN NUMBER
3450 ,p_Ledger_ID IN NUMBER
3451 ,p_Continue_Process_On_Err_Flg IN VARCHAR2
3452 ,p_Execution_Mode IN VARCHAR2
3453 )
3454 IS
3455 -- STANDARD STUFF
3456 l_api_version NUMBER := 1.0;
3457 l_api_name CONSTANT VARCHAR2(27) := 'FEM_Preprocess_RuleSet_PVT';
3458 l_module_name VARCHAR2(70) := G_MODULE_NAME || l_api_name;
3459
3460 l_Rule_Set_Instance_Tab Rule_Set_Instance_Tab;
3461 l_Rule_Set_Count BINARY_INTEGER := 0;
3462 l_Rule_Set_Level NUMBER := 0;
3463
3464 l_Members_Processed_Tab Members_Processed_Instance_Tab;
3465 l_Members_Processed_Count BINARY_INTEGER := 0;
3466
3467 l_Valid_Members_Tab Valid_Invalid_Members_Inst_Tab;
3468 l_Valid_Members_Count BINARY_INTEGER := 0;
3469
3470 l_Invalid_Member_Flags_Tab Members_Validation_Status_Tab;
3471 l_Invalid_Member_Flags_Count BINARY_INTEGER := 0;
3472
3473 l_Dependent_Objects_Tab Dependent_Objects_Tab;
3474 l_Dependent_Objects_Count BINARY_INTEGER := 0;
3475
3476 l_Engine_Execution_Sequence NUMBER := 0;
3477
3478 l_Output_Dataset_Name VARCHAR2(120) := NULL;
3479 l_Output_Dataset_Code NUMBER(9) := NULL;
3480
3481 l_IsProductionODS BOOLEAN := FALSE;
3482
3483 l_Rule_Effective_Date DATE;
3484 l_RuleSet_LocalVSComboID NUMBER;
3485
3486 -- Keeps track of the maximum sequence of
3487 -- members of a given Rule Set member.
3488 l_Maximum_Sequence NUMBER := 0;
3489 l_TEMP NUMBER;
3490
3491 l_curr_RS Rule_Set_Instance_Rec;
3492
3493
3494 BEGIN
3495 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
3496 p_module=> l_module_name,
3497 p_msg_text=> 'ENTRY');
3498 reset_master_err_state;
3499 z_dataset_error := FALSE;
3500
3501 -------------------------------------------------------
3502 -- standard API support header ------------------------
3503 -------------------------------------------------------
3504
3505 -- initialize our status to 'we are good!'
3506 x_return_status := FND_API.G_RET_STS_SUCCESS;
3507
3508 -- setup save point for rollbacks..
3509 SAVEPOINT FEM_Preprocess_RuleSet_SvPt;
3510
3511
3512 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3513 p_module=> l_module_name,
3514 p_msg_text=> 'p_api_version(' || p_api_version || ')');
3515 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3516 p_module=> l_module_name,
3517 p_msg_text=> 'p_init_msg_list(' || p_init_msg_list || ')');
3518 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3519 p_module=> l_module_name,
3520 p_msg_text=> 'p_commit(' || p_commit || ')');
3521 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3522 p_module=> l_module_name,
3523 p_msg_text=> 'p_encoded(' || p_encoded || ')');
3524 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3525 p_module=> l_module_name,
3526 p_msg_text=> 'p_Orig_RuleSet_Object_ID(' || p_Orig_RuleSet_Object_ID || ')');
3527 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3528 p_module=> l_module_name,
3529 p_msg_text=> 'p_DS_IO_Def_ID(' || p_DS_IO_Def_ID || ')');
3530 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3531 p_module=> l_module_name,
3532 p_msg_text=> 'p_Rule_Effective_Date(' || p_Rule_Effective_Date || ')');
3533 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3534 p_module=> l_module_name,
3535 p_msg_text=> 'p_Output_Period_ID(' || p_Output_Period_ID || ')');
3536 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3537 p_module=> l_module_name,
3538 p_msg_text=> 'p_Ledger_ID(' || p_Ledger_ID || ')');
3539 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3540 p_module=> l_module_name,
3541 p_msg_text=> 'p_Execution_Mode(' || p_Execution_Mode || ')');
3542
3543
3544 -- initialize msg stack?
3545 IF fnd_api.to_Boolean(p_init_msg_list) THEN
3546 fnd_msg_pub.initialize;
3547 END IF;
3548
3549 -- since this interface is PVT, this use is trusted and error capture
3550 -- is minimal..
3551 IF p_Continue_Process_On_Err_Flg = 'N' THEN
3552 z_continue_on_error := FALSE;
3553 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3554 p_module=> l_module_name,
3555 p_msg_text=> 'z_continue_on_error := FALSE');
3556 ELSE
3557 z_continue_on_error := TRUE;
3558 fem_engines_pkg.tech_message(p_severity=>G_LOG_STATEMENT ,
3559 p_module=> l_module_name,
3560 p_msg_text=> 'z_continue_on_error := TRUE');
3561 END IF;
3562
3563 -- check API version...
3564 IF NOT fnd_api.Compatible_API_Call (l_api_version,
3565 p_api_version,
3566 l_api_name,
3567 G_PKG_NAME ) THEN
3568 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3569 END IF;
3570
3571 -------------------------------------------------------
3572 -- end of standard API support header -----------------
3573 -------------------------------------------------------
3574
3575 -- todo:: most likely bye-bye
3576 z_Err_Code := 0;
3577
3578 z_local_vs_for_session := fem_dimension_util_pkg.Local_VS_Combo_ID
3579 (p_Ledger_ID
3580 ,z_Err_Code
3581 ,l_TEMP);
3582 If (z_local_vs_for_session = -1) then
3583 -- todo:: unknown error in Local_VS_Combo_ID call.. report as such
3584
3585 FEM_UTILS.set_master_err_state( z_master_err_state,
3586 FEM_UTILS.G_RSM_FATAL_ERR,
3587 G_APP_NAME,
3588 G_ERRMSG_NO_DSG_FOR_LID );
3589
3590 -- this one is bad.. our master rule/ruleset has an invalid VS combo ID.. bomb out now
3591 RAISE FND_API.G_EXC_ERROR;
3592 End If;
3593
3594 Begin /*--Check Local VS of Rule Set being run --*/
3595 select local_vs_combo_id
3596 into l_RuleSet_LocalVSComboID
3597 from Fem_Object_Catalog_B
3598 where object_id = p_Orig_RuleSet_Object_ID;
3599 If (l_RuleSet_LocalVSComboID <> z_local_vs_for_session) then
3600
3601 -- originally error number's 8 and 9.
3602 FEM_UTILS.set_master_err_state( z_master_err_state,
3603 FEM_UTILS.G_RSM_FATAL_ERR,
3604 G_APP_NAME,
3605 G_ERRMSG_NO_VALID_VALSETS,
3606 G_ERRMAC_RULE_NAME,
3607 GetObjectDisplayName(p_Orig_RuleSet_Object_ID));
3608
3609 RAISE FND_API.G_EXC_ERROR;
3610 End If;
3611 End;
3612
3613 l_Rule_Effective_Date := FND_DATE.CANONICAL_TO_DATE(p_Rule_Effective_Date);
3614
3615
3616 l_Rule_Set_Instance_Tab(l_Rule_Set_Count).RuleSet_Object_ID := p_Orig_RuleSet_Object_ID;
3617 l_Rule_Set_Instance_Tab(l_Rule_Set_Count).RuleSet_Object_Name := GetObjectDisplayName(p_Orig_RuleSet_Object_ID);
3618 l_Rule_Set_Instance_Tab(l_Rule_Set_Count).Owning_RuleSet_Name := '';
3619
3620 -- tracking for RS that is currently being processed.
3621 l_curr_RS.RuleSet_Object_ID :=p_Orig_RuleSet_Object_ID;
3622 l_curr_RS.RuleSet_Object_Name :=l_Rule_Set_Instance_Tab(l_Rule_Set_Count).RuleSet_Object_Name;
3623 l_curr_RS.Owning_RuleSet_Name :='';
3624
3625 If (p_DS_IO_Def_ID is NOT NULL) then
3626 l_IsProductionODS := IsProductionODS( p_DS_IO_Def_ID
3627 ,l_Output_Dataset_Name
3628 ,l_Output_Dataset_Code );
3629 End If;
3630
3631 If (NOT z_dataset_error) then
3632 Process_RuleSet ( p_Orig_RuleSet_Object_ID
3633 ,p_Orig_RuleSet_Object_ID
3634 ,l_Rule_Set_Instance_Tab
3635 ,l_Rule_Set_Count
3636 ,l_Rule_Set_Level
3637 ,l_Members_Processed_Tab
3638 ,l_Members_Processed_Count
3639 ,l_Rule_Effective_Date
3640 ,l_IsProductionODS
3641 ,l_Engine_Execution_Sequence
3642 ,p_Execution_Mode
3643 ,l_Valid_Members_Tab
3644 ,l_Valid_Members_Count
3645 ,l_Invalid_Member_Flags_Tab
3646 ,l_Invalid_Member_Flags_Count
3647 ,l_Dependent_Objects_Tab
3648 ,l_Dependent_Objects_Count
3649 ,l_Output_Dataset_Code
3650 ,p_Output_Period_ID
3651 ,p_Ledger_ID
3652 ,l_Maximum_Sequence
3653 ,l_curr_RS );
3654
3655 Write_Output( l_Valid_Members_Tab
3656 ,l_Valid_Members_Count
3657 ,l_Invalid_Member_Flags_Tab
3658 ,l_Invalid_Member_Flags_Count
3659 ,l_Dependent_Objects_Tab
3660 ,l_Dependent_Objects_Count
3661 ,p_Orig_RuleSet_Object_ID
3662 ,l_Rule_Effective_Date
3663 ,l_Output_Dataset_Name
3664 ,l_IsProductionODS
3665 ,p_Execution_Mode);
3666
3667 ELSE
3668 -- originally error # '10'
3669 FEM_UTILS.set_master_err_state( z_master_err_state,
3670 FEM_UTILS.G_RSM_NONFATAL_ERR,
3671 G_APP_NAME,
3672 G_ERRMSG_DSGRP_NOT_FOUND );
3673 RAISE FND_API.G_EXC_ERROR;
3674 End If;
3675
3676 -- For fatal errors, force a rollback and get out..
3677 IF (z_master_err_state = FEM_UTILS.G_RSM_FATAL_ERR) THEN
3678 RAISE FND_API.G_EXC_ERROR;
3679 -- For nonfatal errors, report error if "continue to process on error"
3680 -- is set to No. In either case, do not rollback what was stored
3681 -- in fem_ruleset_process_data so the engines can run.
3682 -- Ideally, we want to differentiate between a fatal and nonfatal error
3683 -- but since the FND API Standard has only one expected error code,
3684 -- we have to continue to report error for the same cases as before this
3685 -- change for backward compatability.
3686 ELSIF ((z_master_err_state = FEM_UTILS.G_RSM_NONFATAL_ERR) AND
3687 (NOT z_continue_on_error)) THEN
3688 x_return_status := FND_API.G_RET_STS_ERROR;
3689 END IF;
3690
3691
3692 -------------------------------------------------------
3693 -- standard API support
3694 -------------------------------------------------------
3695 IF fnd_api.to_boolean(p_commit) THEN
3696 COMMIT WORK;
3697 END IF;
3698
3699 fem_engines_pkg.tech_message(p_severity=>G_LOG_PROCEDURE ,
3700 p_module=> l_module_name,
3701 p_msg_text=> 'EXIT');
3702
3703 FND_MSG_PUB.Count_And_Get ( p_encoded,
3704 x_msg_count,
3705 x_msg_data );
3706
3707 EXCEPTION
3708 WHEN FND_API.G_EXC_ERROR THEN
3709 ROLLBACK TO FEM_Preprocess_RuleSet_SvPt;
3710 FND_MSG_PUB.Count_And_Get ( p_encoded,
3711 x_msg_count,
3712 x_msg_data );
3713 x_return_status := FND_API.G_RET_STS_ERROR;
3714
3715
3716 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3717 ROLLBACK TO FEM_Preprocess_RuleSet_SvPt;
3718 FND_MSG_PUB.Count_And_Get ( p_encoded,
3719 x_msg_count,
3720 x_msg_data );
3721
3722 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3723
3724 WHEN OTHERS THEN
3725 FEM_UTILS.set_master_err_state( z_master_err_state,
3726 FEM_UTILS.G_RSM_FATAL_ERR,
3727 G_APP_NAME,
3728 G_ERRMSG_UNEXPECTED_SQLERROR,
3729 G_ERRMAC_ROUTINE_NAME,
3730 l_module_name,
3731 NULL,
3732 G_ERRMAC_SQL_ERROR,
3733 SQLERRM);
3734
3735 ROLLBACK TO FEM_Preprocess_RuleSet_SvPt;
3736
3737 FND_MSG_PUB.Count_And_Get ( p_encoded,
3738 x_msg_count,
3739 x_msg_data );
3740
3741 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3742
3743
3744 END FEM_Preprocess_RuleSet_PVT;
3745
3746
3747 End FEM_RULE_SET_MANAGER;