[Home] [Help]
PACKAGE BODY: APPS.EDR_PSIG_RULE
Source
1 PACKAGE BODY EDR_PSIG_RULE AS
2 /* $Header: EDRRULEB.pls 120.20.12000000.3 2007/02/20 11:40:03 rvsingh ship $ */
3
4 /* Global varaibles */
5
6 G_ENTITY_NAME constant varchar2(10) := 'ERECORD';
7 G_TEMP_ENTITY_NAME constant varchar2(15) := 'TEMPERECORD';
8 G_PUBLISH_FLAG_N constant varchar2(1) := 'N';
9 G_PUBLISH_FLAG_Y constant varchar2(1) := 'Y';
10 G_SECURITY_OFF constant NUMBER := 4;
11 G_SECURITY_ON constant NUMBER := 1;
12
13 L_EVENT_NAME VARCHAR2(240);
14 L_EVENT_KEY VARCHAR2(240);
15
16 ------------------------------------------------------------------------------
17 --Bug 4577122: Start
18
19 procedure validate_voting_regime
20 (p_approver_list IN EDR_UTILITIES.approvers_Table,
21 x_valid_regime OUT NOCOPY VARCHAR2,
22 x_voting_regime OUT NOCOPY VARCHAR2)
23 as
24 G_UNVIABLE_NUMBER constant number := -1984;
25
26 l_group_id number;
27 l_action_type_id number;
28 l_action_type_voting_regime varchar2(1);
29
30 l_group_id_prev number := G_UNVIABLE_NUMBER;
31 l_action_type_id_prev number := G_UNVIABLE_NUMBER;
32 l_firstvoter_found varchar2(1) := 'N';
33
34 l_multiple_group_id varchar2(1) := 'N';
35 l_multiple_action_type_id varchar2(1) := 'N';
36 l_multiple_voting_regime varchar2(1) := 'N';
37
38 i number;
39 begin
40 for i in 1..p_approver_list.count loop
41 --get the voting regime of the action id
42 l_action_type_voting_regime :=
43 ame_engine.GETACTIONTYPEVOTINGREGIME
44 (ACTIONTYPEIDIN => p_approver_list(i).action_type_id);
45
46 l_group_id := p_approver_list(i).group_or_chain_id;
47 l_action_type_id := p_approver_list(i).action_type_id;
48 l_action_type_voting_regime := ame_engine.GETACTIONTYPEVOTINGREGIME
49 (ACTIONTYPEIDIN => l_action_type_id);
50
51 if (l_group_id_prev <> G_UNVIABLE_NUMBER and
52 l_group_id_prev <> l_group_id and
53 l_multiple_group_id <> 'Y') then
54 l_multiple_group_id := 'Y';
55 else
56 l_group_id_prev := l_group_id;
57 end if;
58
59 if (l_action_type_id_prev <> G_UNVIABLE_NUMBER and
60 l_action_type_id_prev <> l_action_type_id and
61 l_multiple_action_type_id <> 'Y') then
62 l_multiple_action_type_id := 'Y';
63 else
64 l_action_type_id_prev := l_action_type_id;
65 end if;
66
67 if (l_action_type_voting_regime = ame_util.firstApproverVoting) then
68 l_firstvoter_found := 'Y';
69 x_voting_regime := ame_util.firstApproverVoting;
70 end if;
71
72 if (l_firstvoter_found = 'Y' and
73 (l_multiple_group_id = 'Y' or l_multiple_action_type_id = 'Y')) then
74 x_valid_regime := 'N';
75 return;
76 end if;
77 end loop;
78
79 x_valid_regime := 'Y';
80 end validate_voting_regime;
81 --Bug 4577122: End
82 ------------------------------------------------------------------------------
83
84 -- Bug 3761813 : start
85 ------------------------------------------------------------------------------
86 /* PRE_TX_SNAPSHOT IN:
87 p_event_id Unique eREcord ID,
88 p_map_code Map Code passed as Subscription parameter,
89 p_document EVENT KEY
90 */
91
92 --Bug 4306292: Start
93 --Commenting changes made for red lining.
94
95 function PRE_TX_SNAPSHOT
96 ( p_event_id in number,
97 p_MAPCODE in varchar2,
98 p_document in varchar2
99 ) return boolean IS PRAGMA AUTONOMOUS_TRANSACTION;
100 L_XML_DOCUMENT CLOB;
101 retcode pls_integer;
102 errmsg varchar2(2000);
103 logfile varchar2(200);
104 begin
105 INSERT into edr_erecord_id_temp (document_id) values (p_Event_id);
106 ecx_outbound.getXML
107 (
108 i_map_code => p_MAPCODE,
109 i_document_id => P_DOCUMENT,
110 i_debug_level => 6,
111 i_xmldoc => L_XML_DOCUMENT,
112 i_ret_code => retcode,
113 i_errbuf => errmsg,
114 i_log_file => logfile
115 );
116 insert into EDR_REDLINE_TRANS_DATA (EVENT_ID,PRE_XML_DATA,POST_XML_DATA,ERR_CODE,ERR_MSG,DIFF_XML,APPENDIX_GEN_XML) values (p_event_id,L_XML_DOCUMENT,empty_clob(), retcode, errmsg, empty_clob(),empty_clob());
117 commit;
118 return true;
119 exception
120 when others then
121 rollback;
122 return false;
123 end;
124
125 --Bug 4306292: End
126
127 -- Bug 3761813 : end
128
129 ----------------------------------------------------------------------------------
130
131 /* CREATE Pageflow IN:
132 p_event_id Unique eREcord ID,
133 p_map_code Map Code passed as Subscription parameter,
134 p_ame_transaction_type AME Transaction Type passed as Subscription parameter,
135 p_audit_group AOL Audit Group passed as Subscription parameter,
136 p_eventP Event to be processes
137 p_approverlist AME approver Table
138 */
139
140 function CREATE_PAGEFLOW
141 ( p_event_id in number,
142 p_map_code in varchar2,
143 p_ame_transaction_type in varchar2,
144 p_audit_group in varchar2,
145 p_eventP in out NOCOPY wf_event_t,
146 p_subscription_guid in raw,
147 P_approverlist in EDR_UTILITIES.approvers_Table,
148 P_ERR_CODE out NOCOPY varchar2,
149 P_ERR_MSG out NOCOPY varchar2
150
151 ) return varchar2 IS PRAGMA AUTONOMOUS_TRANSACTION;
152
153 l_event_user_key_label VARCHAR2(240);
154 l_event_user_key_VALUE VARCHAR2(240);
155 l_transaction_audit_id NUMBER;
156 i integer;
157 l_edr_signature_id number;
158 l_fnd_user varchar2(100);
159 l_temp_clob CLOB;
160 l_itemtype varchar2(240);
161 l_itemkey varchar2(240);
162 aname varchar2(240);
163 avalue varchar2(4000);
164 lparam wf_parameter_list_t;
165 l_event wf_event_t;
166 l_return_status varchar2(240);
167 l_document_id number;
168 l_error number;
169 l_error_msg varchar2(4000);
170 l_error_stack varchar2(4000);
171 l_signature_id number;
172 l_requester varchar2(240);
173 l_doc_params EDR_PSIG.params_table;
174
175 /*Save Current Workflow Threshold */
176 l_cur_threshold WF_ENGINE.THRESHOLD%TYPE;
177 l_overriding_approver varchar2(80);
178 l_overriding_comments varchar2(4000);
179 BAD_RULE Exception;
180 DEFAULT_RULE_ERROR Exception;
181
182 BEGIN
183 --Bug 4074173 : start
184 l_cur_threshold := WF_ENGINE.THRESHOLD;
185 --Bug 4074173 : end
186
187 /* Update workflow threshold to default threshold */
188 WF_ENGINE.THRESHOLD := 50;
189
190 /* Get Payload Attributes required by Rule function */
191 l_event_user_key_label := wf_event.getValueForParameter('PSIG_USER_KEY_LABEL',p_eventP.Parameter_List);
192 l_event_user_key_value := wf_event.getValueForParameter('PSIG_USER_KEY_VALUE',p_eventP.Parameter_List);
193 l_transaction_audit_id := wf_event.getValueForParameter('PSIG_TRANSACTION_AUDIT_ID',p_eventP.Parameter_List);
194 l_requester := wf_event.getValueForParameter('#WF_SIGN_REQUESTER',p_eventP.Parameter_List);
195 wf_event.AddParameterToList('#FROM_ROLE', l_requester,p_eventP.Parameter_List); /* From Role */
196
197 /* Temp Table Insertion */
198 l_event_name:=P_eventP.getEventName( );
199 l_event_key:=P_eventP.getEventKey( );
200 l_temp_clob:=P_eventP.getEventData( );
201
202 --Diagnostics Start
203 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
204 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_PAGEFLOW_PROC_EVT');
205 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
206 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
207 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
208 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
209 FALSE
210 );
211 end if;
212 --Diagnostics End
213
214 /* Insert into Temp tables for Further Processing */
215 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','Event Name Assigned');
216 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','CLOB Assignment Complete and insert being executed');
217
218 INSERT INTO EDR_ERECORDS(EVENT_ID,
219 EVENT_NAME,
220 EVENT_KEY,
221 EVENT_USER_KEY_LABEL,
222 EVENT_USER_KEY_VALUE,
223 EVENT_TIMESTAMP,
224 EVENT_TIMEZONE,
225 ERECORD_XML,
226 ERECORD_SIGNATURE_STATUS,
227 XML_MAP_NAME,
228 AME_TRANSACTION_TYPE,
229 AUDIT_GROUP,
230 TRANSACTION_AUDIT_ID)
231 Values(p_event_id,
232 l_event_name,
233 l_event_key,
234 l_event_user_key_label,
235 l_event_user_key_value,
236 SYSDATE,
237 NULL, -- Still figuring out how to populate this
238 l_temp_clob,
239 'PENDING',
240 P_map_code,
241 p_ame_transaction_type,
242 p_audit_group,
243 l_transaction_audit_id);
244
245
246 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','Insertion Complete in EDR_ERECORDS');
247 -- Bug Fix 3143107
248 -- Removed Open Docement
249 -- Post document parameters
250 -- Change status
251 -- Now this part will be handeled in PSIG_RULE for Both eRecord Only
252 -- and eSignature Required scenarios
253 --
254 l_document_id := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.g_erecord_id_attr,p_eventP.Parameter_List);
255 --Diagnostics Start
256 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
257 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_PAGEFLOW_EREC_EVT');
258 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
259 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
260 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
261 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
262 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
263 FALSE
264 );
265 end if;
266 --Diagnostics End
267
268
269 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','Set the Document ID '||l_document_ID ||' as Event Parameter');
270 wf_event.AddParameterToList('PSIG_DOCUMENT_ID', l_document_id,p_eventP.Parameter_List); /* Document_ID*/
271 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','Document ID added to event parameters ' );
272
273 /* 24-FEB-2003: CJ : add the attachment item attribute to the workflow so that the attachments
274 of the eRecord show up in the workflow notification sent out to the signer*/
275
276
277 /* Attachments_ID*/
278 wf_event.AddParameterToList('#ATTACHMENTS', 'FND:entity=ERECORD'||'&'||'pk1name=DOCUMENT_ID'||'&'||'pk1value='||l_document_id,p_eventP.Parameter_List);
279 wf_log_pkg.string(3, 'EDR_PSIG_rule.create_pageflow','Attachments added to event parameters ' );
280 /* 24-FEB-2003: CJ: end */
281
282 for i in 1 .. P_approverlist.count loop
283
284 --Bug 2674799: start
285 --New AME approvers table has the WF Directory name of user.
286 l_fnd_user := P_approverList(i).name;
287 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','AME Approver '||P_approverlist(i).occurrence||'-'||l_fnd_user);
288 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','Figuring out overriding approver for '||l_fnd_user);
289 --Bug 4160412: Start
290 --Find the overriding details only if a user name is provided.
291 if length(l_fnd_user) > 0 and instr(l_fnd_user,'#') = 0 then
292 EDR_STANDARD.FIND_WF_NTF_RECIPIENT(l_fnd_user,'EDRPSIGF','PSIG_EREC_MESSAGE_BLAF',
293 l_overriding_approver,l_overriding_comments,
294 l_error,l_error_msg);
295
296 IF l_error > 0 THEN
297 RAISE BAD_RULE;
298 END IF;
299
300 else
301
302 l_overriding_approver := l_fnd_user;
303
304 end if;
305
306 --Bug 4160412: End
307
308 --Diagnostics Start
309 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
310 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_PAGEFLOW_APPR_EVT');
311 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
312 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
313 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
314 FND_MESSAGE.SET_TOKEN('APPROVER_NO',i);
315 FND_MESSAGE.SET_TOKEN('APPROVER_COUNT',p_approverlist.count);
316 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
317 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
318 FALSE
319 );
320 end if;
321 --Diagnostics End
322
323 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','Figured out overriding approver for '||l_fnd_user||' as '||l_overriding_approver);
324
325 /* Insert into Temp tables for Further Processing */
326 SELECT EDR_ESIGNATURES_S.NEXTVAL into l_edr_signature_id from DUAL;
327 wf_log_pkg.string(3, 'EDR_PSIG_rule.create_pageflow','Signature Sequence Fetched '||l_edr_signature_id);
328
329 INSERT into EDR_ESIGNATURES(SIGNATURE_ID,
330 EVENT_ID,
331 EVENT_NAME,
332 USER_NAME,
333 SIGNATURE_SEQUENCE,
334 SIGNATURE_STATUS,
335 ORIGINAL_RECIPIENT,
336 SIGNATURE_OVERRIDING_COMMENTS)
337
338 values(l_edr_signature_id,
339 p_event_id,
340 l_event_name,
341 l_OVERRIDING_APPROVER,
342 P_approverList(i).approver_order_number,
343 'PENDING',
344 L_FND_USER,
345 L_OVERRIDING_COMMENTS);
346 --Bug 2674799 : end
347
348 --Diagnostics Start
349 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
350 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_PAGEFLOW_ESIG_EVT');
351 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
352 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
353 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
354 FND_MESSAGE.SET_TOKEN('APPROVER',l_overriding_approver);
355 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
356 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
357 FALSE
358 );
359 end if;
360 --Diagnostics End
361
362
363 wf_log_pkg.string(3, 'EDR_PSIG_rule.create_pageflow','Insert Complete into EDR_ESIGNATURES');
364 wf_log_pkg.string(3, 'EDR_PSIG_rule.create_pageflow','Requesting Signatures in PSIG evidance Store');
365
366 --Bug 2674799: start
367 --Store the approver order number in EDR_PSIG_DETAILS
368 --Bug 4160412: Start
369 --Request for signature only if a user name is provided.
370 if length(l_fnd_user) > 0 and instr(l_fnd_user,'#') = 0 then
371 EDR_PSIG.REQUESTSIGNATURE(P_DOCUMENT_ID=>l_document_id,
372 P_USER_NAME=>l_overriding_approver,
373 P_ORIGINAL_RECIPIENT=>l_fnd_user,
374 P_OVERRIDING_COMMENTS=>l_overriding_comments,
375 P_SIGNATURE_ID=>l_signature_id,
376 P_ERROR=>L_ERROR,
377 P_ERROR_MSG=>l_error_msg,
378 P_SIGNATURE_SEQUENCE => P_APPROVERLIST(I).APPROVER_ORDER_NUMBER);
379 --Bug 2674799: end
380
381 --Bug 3416357: start
382 --Trap the error after requestSignature.
383 IF (nvl(l_error,0) > 0) THEN
384 RAISE BAD_RULE;
385 END IF;
386 end if;
387 --Bug 3416357: end
388 --Bug 4160412: End
389
390 --Diagnostics Start
391 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
392 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_PAGEFLOW_PSIG_EVT');
393 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
394 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
395 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
396 FND_MESSAGE.SET_TOKEN('APPROVER',l_overriding_approver);
397 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
398 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
399 FALSE
400 );
401 end if;
402 --Diagnostics End
403
404 wf_log_pkg.string(1, 'EDR_PSIG_rule.create_pageflow','PSIG id for' ||l_fnd_user||' is '||l_signature_id);
405
406 /* Clear the entries */
407 l_overriding_comments:=NULL;
408 l_overriding_approver:=NULL;
409 l_fnd_user:=NULL;
410
411 end loop;
412
413 /* END Approver List */
414
415 wf_log_pkg.string(3, 'EDR_PSIG_RULE.create_pageflow','AME Approver list inserted into temp table');
416 /*call Workflow dEfault Rule funciton */
417
418 l_return_status:=WF_RULE.DEFAULT_RULE(p_subscription_guid=>p_subscription_guid,p_event=>p_eventP);
419
420
421 if l_return_status = EDR_CONSTANTS_GRP.g_error_status THEN
422 ROLLBACK;
423 -- Bug Fix :3154362
424 -- Added following two lines first one retrieves error message populated by
425 -- Rule function
426 -- second line will push error message it UI as cascading exception handling
427 --
428 l_error_msg := p_eventP.GETERRORMESSAGE;
429 RAISE DEFAULT_RULE_ERROR;
430 ELSE
431 COMMIT;
432 wf_log_pkg.string(3, 'EDR_PSIG_RULE.create_pageflow','COMMIT Completed in Create pageflow');
433
434 --Diagnostics Start
435 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
436 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_PAGEFLOW_SUCCESS_EVT');
437 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
438 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
439 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
440 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
441 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
442 FALSE
443 );
444 end if;
445 --Diagnostics End
446
447 END IF;
448
449 /* Udate workflow threshold to saved value */
450 WF_ENGINE.THRESHOLD := l_cur_threshold;
451 RETURN l_return_status;
452
453 exception
454 when BAD_RULE then
455
456 /* Update workflow threshold to saved value */
457 WF_ENGINE.THRESHOLD := l_cur_threshold;
458 Wf_Core.Context('EDR_PSIG_RULE', 'CREATE_PAGEFLOW', p_eventP.getEventName(), p_subscription_guid);
459 wf_event.setErrorInfo(p_eventP,'ERROR');
460 ROLLBACK;
461 p_err_code:=l_error;
462 p_err_msg:=l_error_msg;
463
464 --Diagnostics Start
465 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
466 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
467 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
468 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','CREATE_PAGEFLOW');
469 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
470 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
471 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
472 FALSE
473 );
474 end if;
475 --Diagnostics End
476
477 return 'ERROR';
478
479 when DEFAULT_RULE_ERROR then
480 /* Update workflow threshold to saved value */
481 WF_ENGINE.THRESHOLD := l_cur_threshold;
482 Wf_Core.Context('EDR_PSIG_RULE', 'CREATE_PAGEFLOW', p_eventP.getEventName(), p_subscription_guid);
483 wf_event.setErrorInfo(p_eventP,'ERROR');
484 ROLLBACK;
485 p_err_code:=l_error;
486 p_err_msg:= l_error_msg;
487
488 --Diagnostics Start
489 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
490 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
491 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
492 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','CREATE_PAGEFLOW');
493 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
494 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
495 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
496 FALSE
497 );
498 end if;
499 --Diagnostics End
500
501 return 'ERROR';
502
503 when others then
504 /* Udate workflow threshold to saved value */
505 Wf_Core.get_ERROR(l_error,l_error_msg,l_error_stack);
506 wf_log_pkg.string(6,'in when others of create_pageflow'||l_error,l_error_msg||substr(l_error_stack,1,100));
507 WF_ENGINE.THRESHOLD := l_cur_threshold;
508 Wf_Core.Context('EDR_PSIG_RULE', 'CREATE_PAGEFLOW', p_eventP.getEventName(), p_subscription_guid);
509 wf_event.setErrorInfo(p_eventP,'ERROR');
510 ROLLBACK;
511 p_err_code:=l_error;
512 p_err_msg:=l_error_msg;
513 --Diagnostics Start
514 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
515 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
516 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
517 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','CREATE_PAGEFLOW');
518 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
519 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
520 'edr.plsql.EDR_PSIG_RULE.CREATE_PAGEFLOW',
521 FALSE
522 );
523 end if;
524 --Diagnostics End
525 return 'ERROR';
526 END CREATE_PAGEFLOW;
527
528 -------------------------------------------------------------------------------------------------------------------------------------
529
530 --
531 -- Start of comments
532 -- API name : STORE_ERECORD
533 -- Type : Private.
534 -- Function : Generates and stores eRecord into Evidence Store
535 -- autonomously.
536 -- Pre-reqs : None.
537 -- Parameters :
538 -- p_XML_DOCUMENT -- XML Generated in calling procedure
539 -- p_style_shee_repository -- Style Sheet repository which will be responsibile for providing the API
540 -- to be called to provide the stylesheet in blob
541 -- p_style_sheet -- Style Sheet to be applied
542 -- p_style_sheet_ver -- Version of the stlye sheet to be applied
543 -- p_approved_style_sheet_required -- Whether appoved Style Sheet is required for current transaction
544 -- p_edr_event_id -- Event Id this is used to associate with attachments
545 -- p_esign_required -- Siganture Required flag it will be either 'Y' or 'N'
546 -- p_subscription_guid -- Subscription Id
547 -- x_event -- This is in OUT using this calling code can access
548 -- updated event parameters
549
550 PROCEDURE STORE_ERECORD(p_XML_DOCUMENT CLOB,
551 p_style_sheet_repository VARCHAR2,
552 p_style_sheet VARCHAR2,
553 p_style_sheet_ver VARCHAR2,
554 p_application_code VARCHAR2,
555 p_edr_event_id NUMBER,
556 p_esign_required VARCHAR2,
557 p_subscription_guid RAW,
558 x_event in out NOCOPY wf_event_t
559 ) IS PRAGMA AUTONOMOUS_TRANSACTION;
560 l_XML_DOCUMENT CLOB ;
561 l_EREC_OUTPUT CLOB;
562 l_EREC_OUTPUT_CH VARCHAR2(512);
563 l_erec_output_ln number;
564 L_EVENT_NAME varchar2(240);
565 L_EVENT_KEY varchar2(240);
566 l_document_id number;
567 l_error number;
568 l_error_msg varchar2(4000);
569 l_event_user_key_label VARCHAR2(240);
570 l_event_user_key_VALUE VARCHAR2(240);
571 l_params EDR_PSIG.params_table;
572 l_source_application varchar2(240);
573 l_requester varchar2(240);
574 l_user_id NUMBER;
575 l_login_id NUMBER;
576
577 l_approved BOOLEAN ;
578 l_style_sheet_type VARCHAR2(240);
579 l_output_format VARCHAR2(25);
580 ERECORD_GENERATION_ERROR EXCEPTION;
581 ERECORD_CREATION_ERROR EXCEPTION;
582 ERECORD_PARAM_ERROR EXCEPTION;
583
584 ERECORD_GEN_XSLFOMISS_ERR EXCEPTION;
585 ERECORD_GEN_FATALERR EXCEPTION;
586 ERECORD_GEN_XDOERR EXCEPTION;
587 ERECORD_GEN_UNKNWN_ERR EXCEPTION;
588 ERECORD_GEN_JSPMSNG_ERR EXCEPTION;
589 ERECORD_GEN_JSPRQFAIL_ERR EXCEPTION;
590 ERECORD_UNKWN_TMPL_TYPE EXCEPTION;
591
592 ERECORD_GEN_XSLT_ERR EXCEPTION;
593
594 --Bug 2637353: Start
595 l_source_application_type VARCHAR2(10);
596 MSCA_TMPL_ERROR EXCEPTION;
597 --Bug 2637353: End
598 -- Bug 3761813 : start
599 l_redline_required varchar2(30);
600 X_DIFF_XML CLOB ;
601 x_output CLOB ;
602 l_amount BINARY_INTEGER ;
603 l_pos PLS_INTEGER ;
604 l_clob_len PLS_INTEGER;
605 vBuffer VARCHAR2 (32767);
606 -- Bug 3761813 : END
607
608 --Bug 4150616: Start
609 l_force_erecord VARCHAR2(10);
610 l_force_erecord_used VARCHAR2(10);
611 --Bug 4150616: End
612 BEGIN
613
614 --Bug 4150616: Start
615 --Fetch the value of FORCE_ERECORD from the event payload.
616 l_force_erecord := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_FORCE_ERECORD,x_event.Parameter_List);
617
618 --Fetch the value of FORCE_ERECORD_USED from the event payload.
619 l_force_erecord_used := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_FORCE_ERECORD_USED,x_event.Parameter_List);
620 --Bug 4150616: End
621
622 --Bug 4074173 : start
623 l_approved := false;
624 l_XML_DOCUMENT := p_XML_DOCUMENT;
625 l_user_id := fnd_global.user_id;
626 l_login_id := fnd_global.login_id;
627 l_style_sheet_type := 'XSL';
628 l_output_format := null;
629 --Bug 4074173 : end
630
631 l_event_name:=x_event.getEventName( );
632 l_event_key:=x_event.getEventKey( );
633
634 --Diagnostics Start
635 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
636 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_PROC_EVT');
637 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
638 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
639 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
640 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
641 FALSE
642 );
643 end if;
644 --Diagnostics End
645
646 /* Only eRecord Required. Generate the eRecord output Output and post it in temp tables */
647 L_EREC_OUTPUT:=P_XML_DOCUMENT;
648 wf_log_pkg.string(3, 'EDR_PSIG_RULE.STORE_ERECORD','Start of store erecord');
649 l_requester := wf_event.getValueForParameter('#WF_SIGN_REQUESTER',x_event.Parameter_List);
650
651 --Bug 3170251 : Start- EREC_TEMPLATE TYPE from Workflow
652 /* Find the Style Sheet Type from Workflow Parameter EREC_TEMPLATE_TYPE */
653 l_style_sheet_type := wf_event.getValueForParameter('EREC_TEMPLATE_TYPE',x_event.Parameter_List);
654 -- Bug 3170251 : End
655
656 -- Bug 3170251 : Start- Open the PSIG document, to get the l_document_id value for use in XDOC
657 EDR_PSIG.openDocument(P_PSIG_XML => p_xml_document,
658 P_PSIG_REQUESTER => l_requester,
659 P_DOCUMENT_ID => l_document_id,
660 P_ERROR => l_error,
661 P_ERROR_MSG => l_error_msg);
662 -- Bug 3170251 : End
663
664 IF l_error is NOT NULL THEN
665 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','open document errored out with code '||l_error);
666 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','open document Error Msg '||l_error_msg);
667 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Opened Document in eRecords Repository with Document ID '||l_document_id);
668 RAISE ERECORD_CREATION_ERROR;
669 END IF;
670
671 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','committing the transaction in store erecord');
672 commit;
673
674 --Diagnostics Start
675 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
676 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_EREC_EVT');
677 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
678 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
679 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
680 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
681 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
682 FALSE
683 );
684 end if;
685 --Diagnostics End
686
687 -- Bug 3761813 : start
688 l_redline_required := wf_event.getValueForParameter('REDLINE_REQUIRED',x_event.Parameter_List);
689 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','REDLINE_REQUIRED'||l_redline_required);
690 -- Bug 3761813 : end
691
692
693 -- Bug 3170251 : Start- if EREC_TEMPLATE TYPE isRTF then call EDR_XDOC_UTIL_PKG.GENERATE_ERECORD procedure.
694 -- call xdoc utility package to geneate the pdf document if style sheet is RTF
695 IF (UPPER(l_style_sheet_type) = 'RTF') THEN
696
697 --Bug 2637353: Start
698 --Check if source application type is "MSCA".
699 l_source_application_type := wf_event.getValueForParameter('#WF_SOURCE_APPLICATION_TYPE',x_event.Parameter_List);
700 if(l_source_application_type = 'MSCA') then
701 raise MSCA_TMPL_ERROR;
702 END IF;
703 --Bug 2637353: End
704
705 --Diagnostics Start
706 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
707 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_RTF_EVT');
708 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
709 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
710 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
711 FND_MESSAGE.SET_TOKEN('TEMPLATE_NAME',p_style_sheet);
712 FND_MESSAGE.SET_TOKEN('TEMPLATE_VER',p_style_sheet_ver);
713 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
714 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
715 FALSE
716 );
717 end if;
718 --Diagnostics End
719
720 /* EDR_XDOC_UTIL_PKG.generate_ERecord(p_edr_event_id =>p_edr_event_id,
721 p_erecord_id => l_document_id,
722 p_style_sheet_repository => p_style_sheet_repository,
723 p_style_sheet => p_style_sheet,
724 p_style_sheet_ver => p_style_sheet_ver,
725 x_output_format => l_output_format,
726 x_error_code => l_error,
727 x_error_msg => l_error_msg);*/
728 --Bug 3761813 : start
729 -- new parameter p_redline_mode is added
730
731 EDR_XDOC_UTIL_PKG.generate_ERecord(p_edr_event_id => p_edr_event_id,
732 p_erecord_id => l_document_id,
733 p_style_sheet_repository => p_style_sheet_repository,
734 p_style_sheet => p_style_sheet,
735 p_style_sheet_ver => p_style_sheet_ver,
736 p_redline_mode => l_redline_required,
737 --Bug 4306292: End
738 -- Bug 3170251 : start
739 p_application_code => p_application_code,
740 -- Bug 3170251 : end
741 x_output_format => l_output_format,
742 x_error_code => l_error,
743 x_error_msg => l_error_msg);
744 --Bug 3761813 : end
745
746 --Bug 3474765 : Start
747 -- Changing to MIME Format
748 l_output_format := 'application/pdf';
749 --Bug 3474765 : End
750
751 --Raise exception if there is any error in e-Record Generation
752
753 -- Important Error Handling done to make sure UTL_HTTP based eRecord PDF generation
754 -- was successful, otherwise throw appropriate error to the user,
755
756 IF l_error = 10 THEN
757 -- This error means either the XSLFO for given template is missing i.e. due to
758 -- approval process missing or converision error OR Template is not uploaded
759 -- in the respective repository.
760 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
761 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
762 RAISE ERECORD_GEN_XSLFOMISS_ERR;
763 END IF;
764
765 IF l_error = 20 THEN
766 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
767 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
768 RAISE ERECORD_CREATION_ERROR;
769 END IF;
770
771 IF l_error = 30 THEN
772 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
773 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
774 RAISE ERECORD_GEN_FATALERR;
775 END IF;
776
777 IF l_error = 40 THEN
778 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
779 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
780 RAISE ERECORD_GEN_XDOERR;
781 END IF;
782
783 IF l_error = 100 THEN
784 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
785 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
786 RAISE ERECORD_GEN_UNKNWN_ERR;
787 END IF;
788
789 IF l_error = 505 THEN
790 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
791 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
792 RAISE ERECORD_GEN_JSPMSNG_ERR;
793 END IF;
794
795 IF l_error = 500 THEN
796 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code from PDF e-record generation process: '||l_error);
797 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg from PDF e-record generation process: '||l_error_msg);
798 RAISE ERECORD_GEN_JSPRQFAIL_ERR;
799 END IF;
800
801 /* Set the E-Record Notification Details to Message for PDF E-Records */
802 fnd_message.set_name('EDR','EDR_EREC_ATT_NTF_BODY');
803 fnd_message.set_token('ERECORD_ID',l_document_id);
804
805 l_erec_output_ch := fnd_message.get;
806 l_erec_output_ln := DBMS_LOB.GETLENGTH(L_EREC_OUTPUT);
807 DBMS_LOB.ERASE(L_EREC_OUTPUT,l_erec_output_ln , 1);
808 DBMS_LOB.WRITE(L_EREC_OUTPUT, LENGTH(L_EREC_OUTPUT_CH), 1, l_erec_output_ch);
809 DBMS_LOB.TRIM(L_EREC_OUTPUT, length(l_erec_output_ch));
810
811 --Diagnostics Start
812 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
813 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_PDF_SUC_EVT');
814 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
815 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
816 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
817 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
818 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
819 FALSE
820 );
821 end if;
822 --Diagnostics End
823
824 END IF;
825 --Bug: 3170251 - End
826
827 -- For normal XSL stylsheet generate HTML eRecord using ECX Transformations
828 IF(UPPER(l_style_sheet_type) = 'XSL') THEN
829
830 --Diagnostics Start
831 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
832 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_XSL_EVT');
833 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
834 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
835 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
836 FND_MESSAGE.SET_TOKEN('TEMPLATE_NAME',p_style_sheet);
837 FND_MESSAGE.SET_TOKEN('TEMPLATE_VER',p_style_sheet_ver);
838 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
839 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
840 FALSE
841 );
842 end if;
843 --Diagnostics End
844
845 -- Bug 3761813 : start
846 --Bug 4306292: Start
847 --Commenting the changes made for red lining.
848
849 --get the DIFF XML and transform the same.
850 if (nvl(l_redline_required,'N') = 'Y' ) then
851
852 X_DIFF_XML := EMPTY_CLOB;
853 x_output := EMPTY_CLOB;
854 l_amount := 32767;
855 l_pos := 1;
856
857 EDR_XDOC_UTIL_PKG.generate_ERecord(p_edr_event_id => p_edr_event_id,
858 p_erecord_id => l_document_id,
859 p_style_sheet_repository => p_style_sheet_repository,
860 p_style_sheet => p_style_sheet,
861 p_style_sheet_ver => p_style_sheet_ver,
862 p_redline_mode => l_redline_required,
863 p_application_code => p_application_code,
864 x_output_format => l_output_format,
865 x_error_code => l_error,
866 x_error_msg => l_error_msg);
867
868 wf_log_pkg.string(1, 'EDR_PSIG_RULE.store_erecord',' generate_ERecord for redline. Error '||l_error );
869
870 wf_log_pkg.string(1, 'EDR_PSIG_RULE.store_erecord',' generate_ERecord for redline. l_error_msg '||l_error_msg );
871
872 dbms_lob.createtemporary(X_DIFF_XML,TRUE);
873 dbms_lob.open( X_DIFF_XML, dbms_lob.lob_readwrite );
874
875 select DIFF_XML into x_output from EDR_REDLINE_TRANS_DATA where EVENT_ID = p_edr_event_id ;
876
877 l_clob_len := dbms_lob.getlength(x_output);
878 WHILE l_pos < l_clob_len LOOP
879 dbms_lob.read(x_output, l_amount, l_pos, vBuffer);
880 dbms_lob.writeappend(X_DIFF_XML, LENGTH(vBuffer), vBuffer);
881 l_pos := l_pos + l_amount;
882 END LOOP;
883
884 L_EREC_OUTPUT := X_DIFF_XML;
885 dbms_lob.close(X_DIFF_XML);
886 dbms_lob.freeTemporary(X_DIFF_XML );
887
888 IF nvl(l_error,0) <> 0 THEN
889 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Template Type : text ');
890 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code '||l_error);
891 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
892 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','eRecord generated');
893 RAISE ERECORD_GEN_XSLT_ERR;
894 END IF;
895
896 IF l_error = 10 THEN
897 -- This error means either the XSLFO for given template is missing i.e. due to
898 -- approval process missing or converision error OR Template is not uploaded
899 -- in the respective repository.
900 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code XSL '||l_error);
901 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
902 RAISE ERECORD_GEN_XSLFOMISS_ERR;
903 END IF;
904
905 IF l_error = 20 THEN
906 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code XSL'||l_error);
907 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
908 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','eRecord generated');
909 RAISE ERECORD_CREATION_ERROR;
910 END IF;
911
912 IF l_error = 30 THEN
913 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code XSL'||l_error);
914 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
915 RAISE ERECORD_GEN_FATALERR;
916 END IF;
917
918 IF l_error = 40 THEN
919 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error CodeXSL '||l_error);
920 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
921 RAISE ERECORD_GEN_XDOERR;
922 END IF;
923
924 IF l_error = 100 THEN
925 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code XSL'||l_error);
926 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
927 RAISE ERECORD_GEN_UNKNWN_ERR;
928 END IF;
929
930 IF l_error = 505 THEN
931 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code XSL'||l_error);
932 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
933 RAISE ERECORD_GEN_JSPMSNG_ERR;
934 END IF;
935
936 IF l_error = 500 THEN
937 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code XSL'||l_error);
938 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg '||l_error_msg);
939 RAISE ERECORD_GEN_JSPRQFAIL_ERR;
940 END IF;
941 END IF;
942 --Bug 4306292: End
943 --Bug 3761813 : END
944
945 ECX_STANDARD.perform_xslt_transformation (i_xml_file => L_EREC_OUTPUT,
946 i_xslt_file_name => p_style_sheet,
947 i_XSLT_FILE_VER => p_style_sheet_ver,
948 i_XSLT_APPLICATION_CODE => lower(p_application_code),
949 i_retcode => l_error,
950 i_retmsg => l_error_msg);
951 -- Bug 4862464: Start
952 -- l_output_format :=TEXT;
953 -- Changing the harcoded document format from TEXT to
954 -- text/plain
955 -- The edr_psig.openDocument api converts the document format from TEXT
956 -- to text/plain but the updatedocument api retains the document format
957 -- so for consistency we pass the text/plain document format.
958 l_output_format := WF_NOTIFICATION.doc_text;
959 -- Bug 4862464: End
960 IF nvl(l_error,0) <> 0 THEN
961 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','XSL Transformation Error Code '||l_error);
962 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','XSL Transformation Error Msg '||l_error_msg);
963 RAISE ERECORD_GEN_XSLT_ERR;
964 END IF;
965
966 --Diagnostics Start
967 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
968 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_XSL_SUC_EVT');
969 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
970 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
971 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
972 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
973 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
974 FALSE
975 );
976 end if;
977 --Diagnostics End
978
979 END IF;
980
981
982
983 -- Check if template type is one of the valid types.
984 IF ((UPPER(l_style_sheet_type) <> 'XSL') AND (UPPER(l_style_sheet_type) <> 'RTF')) THEN
985 wf_log_pkg.string(5, 'EDR_PSIG_RULE.store_erecord','Wrong Stylesheet Type ' || l_style_sheet_type );
986 RAISE ERECORD_UNKWN_TMPL_TYPE;
987 END IF;
988
989 /* Get Payload Attributes required by Rule function */
990 l_event_user_key_label := wf_event.getValueForParameter('PSIG_USER_KEY_LABEL',x_event.Parameter_List);
991 l_event_user_key_value := wf_event.getValueForParameter('PSIG_USER_KEY_VALUE',x_event.Parameter_List);
992 l_source_application := wf_event.getValueForParameter('#WF_SOURCE_APPLICATION_TYPE',x_event.Parameter_List);
993 l_requester := wf_event.getValueForParameter('#WF_SIGN_REQUESTER',x_event.Parameter_List);
994
995 /* Call Repository API's */
996 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','Posting Document in eRecords Repository');
997
998 EDR_PSIG.updateDocument(P_DOCUMENT_ID => l_document_id,
999 P_PSIG_XML => L_XML_DOCUMENT,
1000 P_PSIG_DOCUMENT => L_EREC_OUTPUT,
1001 P_PSIG_DOCUMENTFORMAT => l_output_format,
1002 P_PSIG_REQUESTER => l_requester,
1003 P_PSIG_SOURCE => l_source_application,
1004 P_EVENT_NAME => l_event_name,
1005 P_EVENT_KEY => l_event_key,
1006 P_WF_NID => NULL,
1007 P_ERROR => l_error,
1008 P_ERROR_MSG => l_error_msg);
1009 IF l_error is NOT NULL THEN
1010 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code during update document '||l_error);
1011 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg during update document '||l_error_msg);
1012 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Updated Document in eRecords Repository with Document ID '||l_document_id);
1013 RAISE ERECORD_CREATION_ERROR;
1014 END IF;
1015
1016 --Diagnostics Start
1017 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1018 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_REC_UPD_EVT');
1019 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
1020 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
1021 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
1022 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1023 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1024 FALSE
1025 );
1026 end if;
1027 --Diagnostics End
1028
1029
1030 /* 20-OCT-2003: SRPURI : Modified attachment code to resolve the bug 3058816 */
1031
1032 /*
1033 -- Commented and added Copy Attachments and delete attachments
1034 update fnd_attached_documents
1035 set pk1_value = l_document_id
1036 where entity_name = EDR_CONSTANTS_GRP.g_erecord_entity_name
1037 and pk1_value = p_edr_event_id; */
1038 wf_log_pkg.string(1, 'EDR_PSIG_RULE.store_erecord','Before Moving attachments from Temp entity to eRecord '
1039 ||'from '||p_edr_event_id||' to '||l_document_id);
1040
1041 --Bug 4381237: Start
1042 --Change the call to EDR attachment API
1043 --fnd_attached_documents2_pkg.copy_attachments(
1044 edr_attachments_grp.copy_attachments
1045 --Bug 4381237: End
1046 (X_from_entity_name => G_TEMP_ENTITY_NAME,
1047 X_from_pk1_value => p_edr_event_id,
1048 X_from_pk2_value => null,
1049 X_from_pk3_value => null,
1050 X_from_pk4_value => null,
1051 X_from_pk5_value => null,
1052 X_to_entity_name => G_ENTITY_NAME,
1053 X_to_pk1_value => l_document_id,
1054 X_to_pk2_value => null,
1055 X_to_pk3_value => null,
1056 X_to_pk4_value => null,
1057 X_to_pk5_value => null,
1058 X_created_by => l_user_id,
1059 X_last_update_login => l_login_id,
1060 X_program_application_id => null,
1061 X_program_id => null,
1062 X_request_id => null,
1063 X_automatically_added_flag => 'N',
1064 X_from_category_id => null,
1065 X_to_category_id => null);
1066
1067 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','After Moving attachments from Temp entity to eRecord '
1068 ||'from '||p_edr_event_id||' to '||l_document_id);
1069
1070 wf_log_pkg.string(1, 'EDR_PSIG_RULE.store_erecord','Before Deleting attachments from Temp entity '
1071 ||'from '||p_edr_event_id);
1072
1073
1074 -- Bug 3863541 : Start
1075 -- Modified call to delete_attachments to support
1076 -- URL / Web page attachments
1077
1078 fnd_attached_documents2_pkg.delete_attachments
1079 (X_entity_name => G_TEMP_ENTITY_NAME,
1080 X_pk1_value => to_char(p_edr_event_id),
1081 X_pk2_value => null,
1082 X_pk3_value => null,
1083 X_pk4_value => null,
1084 X_pk5_value => null,
1085 --Bug 4381237: Start
1086 --pass this flag as Y so that the attachments to TEMPERECORD
1087 --are deleted. this is ok NOW because we are using our
1088 --own attachment api above. That would not bring the base
1089 --entities attachment into picture
1090 --X_delete_document_flag => 'N',
1091 X_delete_document_flag => 'Y',
1092 --Bug 4381237: End
1093 X_automatically_added_flag => 'N');
1094 --Bug 3863541 : End
1095
1096 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','After Deleting attachments from Temp entity '
1097 ||'from '||p_edr_event_id);
1098
1099
1100 --Diagnostics Start
1101 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1102 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_ATCH_EVT');
1103 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
1104 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
1105 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
1106 FND_MESSAGE.SET_TOKEN('ATTACHMENT_ID',p_edr_event_id);
1107 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1108 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1109 FALSE
1110 );
1111 end if;
1112 --Diagnostics End
1113
1114
1115 /* 20-OCT-2003: srpuri : end */
1116 --ER # 2966866 start
1117 wf_event.AddParameterToList('#ERECORD_ID',
1118 l_document_id,
1119 x_event.Parameter_List);
1120 wf_log_pkg.string(1, 'EDR_PSIG_RULE.store_erecord','eRecord Id added to payload: '||l_document_id);
1121
1122 --ER # 2966866 end
1123 /* Add Document Parameters */
1124 l_params(1).param_name:='PSIG_USER_KEY_LABEL';
1125 l_params(1).param_value:=l_event_user_key_label;
1126 l_params(1).param_displayname:='Identifier label';
1127 l_params(2).param_name:='PSIG_USER_KEY_VALUE';
1128 l_params(2).param_value:=l_event_user_key_value;
1129 l_params(2).param_displayname:='Identifier value';
1130
1131 /* Style Sheet information */
1132 l_params(3).param_name:='TEXT_XSLNAME';
1133 l_params(3).param_value:=p_style_sheet;
1134 l_params(3).param_displayname:='Stylesheet';
1135 l_params(4).param_name:='TEXT_XSLVERSION';
1136 l_params(4).param_value:=p_style_sheet_ver;
1137 l_params(4).param_displayname:='Stylesheet Version';
1138
1139 --Bug 4150616: Start
1140 --Set the value of FORCE_ERECORD if it exists in the
1141 --doc params.
1142 if upper(l_force_erecord) in('Y','N') then
1143 l_params(5).param_name := EDR_CONSTANTS_GRP.G_FORCE_ERECORD;
1144 l_params(5).param_value := l_force_erecord;
1145 l_params(5).param_displayname := 'Force E-record';
1146
1147 --If FORCE_ERECORD_USED is set then set that parameter and its value
1148 --in the doc params.
1149 if l_force_erecord_used = 'Y' then
1150 l_params(6).param_name := EDR_CONSTANTS_GRP.G_FORCE_ERECORD_USED;
1151 l_params(6).param_value := l_force_erecord_used;
1152 l_params(6).param_displayname := 'E-record Creation Forced';
1153 end if;
1154 end if;
1155 --Bug 4150616: End
1156
1157 --Bug 4755255: Start
1158 l_params(5).param_name := '#ATTACHMENTS';
1159 l_params(5).param_value := 'FND:entity=ERECORD'||'&'||'pk1name=DOCUMENT_ID'||'&'||'pk1value='||l_document_id;
1160
1161 --Bug 4755255: End
1162
1163 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Posting Document Parameters');
1164
1165 EDR_PSIG.POSTDOCUMENTPARAMETER(P_DOCUMENT_ID => l_document_id,
1166 P_PARAMETERS => l_params,
1167 P_ERROR => l_error,
1168 P_ERROR_MSG => l_error_msg);
1169
1170 IF l_error is NOT NULL THEN
1171 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Code during posting doc params '||l_error);
1172 wf_log_pkg.string(4, 'EDR_PSIG_RULE.store_erecord','Error Msg during posting doc params '||l_error_msg);
1173 RAISE ERECORD_PARAM_ERROR;
1174 END IF;
1175
1176 --Diagnostics Start
1177 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1178 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_POST_EVT');
1179 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
1180 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
1181 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
1182 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1183 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1184 FALSE
1185 );
1186 end if;
1187 --Diagnostics End
1188
1189 -- Bug Fix 3143107
1190 -- Modified unconditional Close document to Conditional Close
1191 -- and added Conditional Status Change Call where eSignature is Required
1192 --Bug 4150616: Start
1193 --If either ESIG_REQUIRED is set to 'N' or FORCE_ERECORD_USED has been set to 'Y' then close the document.
1194 IF p_esign_required = 'N' OR l_force_erecord_used = 'Y' THEN
1195 --Bug 4150616: End
1196 EDR_PSIG.closeDocument(P_DOCUMENT_ID => l_document_id,
1197 P_ERROR => l_error,
1198 P_ERROR_MSG => l_error_msg);
1199 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','Document Closed');
1200
1201 ELSIF p_esign_required = 'Y' THEN
1202 EDR_PSIG.CHANGEDOCUMENTSTATUS(P_DOCUMENT_ID => l_document_id,
1203 P_STATUS => 'ERROR',
1204 P_ERROR => L_ERROR,
1205 P_ERROR_MSG => l_error_msg);
1206 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','Changed Document Status to an Intermediate Status');
1207 END IF;
1208 -- END Bug Fix 3143107
1209
1210 -- If everything went fine, commiting the ERECORD Contents by commiting this autonomous transaction
1211 COMMIT;
1212
1213 --Diagnostics Start
1214 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1215 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_ST_ERECORD_STATUS_EVT');
1216 FND_MESSAGE.SET_TOKEN('EVENT_NAME',l_event_name);
1217 FND_MESSAGE.SET_TOKEN('EVENT_KEY',l_event_key);
1218 FND_MESSAGE.SET_TOKEN('ERECORD_ID',l_document_id);
1219 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1220 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1221 FALSE
1222 );
1223 end if;
1224 --Diagnostics End
1225
1226 wf_log_pkg.string(3, 'EDR_PSIG_RULE.store_erecord','Store_erecord completed successfully');
1227
1228 EXCEPTION
1229 when ERECORD_GENERATION_ERROR then
1230 ROLLBACK;
1231 Wf_Core.Context('EDR_PSIG_RULE', 'STORE_ERECORD', x_event.getEventName(), p_subscription_guid);
1232 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR');
1233 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
1234 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
1235 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
1236 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','PSIG_RULE');
1237
1238 --Diagnostics Start
1239 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1240 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1241 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1242 FALSE
1243 );
1244 end if;
1245 --Diagnostics End
1246
1247 APP_EXCEPTION.RAISE_EXCEPTION;
1248 when ERECORD_CREATION_ERROR then
1249 ROLLBACK;
1250 Wf_Core.Context('EDR_PSIG_RULE', 'STORE_ERECORD', x_event.getEventName(), p_subscription_guid);
1251 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR');
1252 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
1253 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
1254 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
1255 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','STORE_ERECORD');
1256
1257 --Diagnostics Start
1258 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1259 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1260 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1261 FALSE
1262 );
1263 end if;
1264 --Diagnostics End
1265
1266 APP_EXCEPTION.RAISE_EXCEPTION;
1267 when ERECORD_PARAM_ERROR then
1268 ROLLBACK;
1269 Wf_Core.Context('EDR_PSIG_RULE', 'STORE_ERECORD', x_event.getEventName(), p_subscription_guid);
1270 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR');
1271 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
1272 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
1273 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
1274 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','STORE_ERECORD');
1275 --Diagnostics Start
1276 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1277 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1278 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1279 FALSE
1280 );
1281 end if;
1282 --Diagnostics End
1283
1284 APP_EXCEPTION.RAISE_EXCEPTION;
1285
1286 -- Bug 3170251 : Start - Added following new exceptions for error handling
1287 when ERECORD_GEN_XSLFOMISS_ERR then
1288 ROLLBACK;
1289 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1290 Wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR XSLFO MISSING');
1291 FND_MESSAGE.SET_NAME('EDR','EDR_EREC_XSLFO_MISSING_ERR');
1292 fnd_message.set_token( 'TEMPLATE_NAME',p_style_sheet);
1293 fnd_message.set_token( 'TEMPLATE_VER',p_style_sheet_ver);
1294 --Diagnostics Start
1295 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1296 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
1297 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1298 FALSE
1299 );
1300 end if;
1301 --Diagnostics End
1302 APP_EXCEPTION.RAISE_EXCEPTION;
1303
1304 when ERECORD_GEN_FATALERR then
1305 ROLLBACK;
1306 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1307 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR');
1308
1309 wf_log_pkg.string(5, 'EDR_PSIG_RULE.store_erecord','There is a fatal error during e-record creation using XDO API');
1310
1311 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
1312 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
1313 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
1314 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','STORE_ERECORD');
1315
1316 --Diagnostics Start
1317 if (FND_LOG.LEVEL_ERROR >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1318 FND_LOG.MESSAGE(FND_LOG.LEVEL_ERROR,
1319 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1320 FALSE
1321 );
1322 end if;
1323 --Diagnostics End
1324
1325 APP_EXCEPTION.RAISE_EXCEPTION;
1326 when ERECORD_GEN_UNKNWN_ERR then
1327 ROLLBACK;
1328 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1329 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR');
1330 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
1331 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
1332 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
1333 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','STORE_ERECORD');
1334
1335 --Diagnostics Start
1336 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1337 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1338 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1339 FALSE
1340 );
1341 end if;
1342 --Diagnostics End
1343
1344 APP_EXCEPTION.RAISE_EXCEPTION;
1345 when ERECORD_GEN_XDOERR then
1346 ROLLBACK;
1347 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1348 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR IN XDO');
1349 FND_MESSAGE.SET_NAME('EDR','EDR_EREC_XDO_ERR');
1350 fnd_message.set_token( 'TEMPLATE_NAME',p_style_sheet);
1351 fnd_message.set_token( 'TEMPLATE_VER',p_style_sheet_ver);
1352
1353 --Diagnostics Start
1354 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1355 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
1356 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1357 FALSE
1358 );
1359 end if;
1360 --Diagnostics End
1361
1362 APP_EXCEPTION.RAISE_EXCEPTION;
1363 when ERECORD_UNKWN_TMPL_TYPE then
1364 ROLLBACK;
1365 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1366 wf_event.setErrorInfo(x_event,SQLERRM || 'Unknown Template Type'|| l_style_sheet_type);
1367 FND_MESSAGE.SET_NAME('EDR','EDR_EREC_TMPL_TYPE_ERR');
1368 fnd_message.set_token( 'TEMPLATE_NAME',p_style_sheet);
1369 fnd_message.set_token( 'TEMPLATE_VER',p_style_sheet_ver);
1370
1371 --Diagnostics Start
1372 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1373 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
1374 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1375 FALSE
1376 );
1377 end if;
1378 --Diagnostics End
1379
1380 APP_EXCEPTION.RAISE_EXCEPTION;
1381
1382 when ERECORD_GEN_JSPMSNG_ERR then
1383 ROLLBACK;
1384 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1385 Wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR JSP MISSING');
1386 FND_MESSAGE.SET_NAME('EDR','EDR_EREC_JSP_MISSING_ERR');
1387
1388 --Diagnostics Start
1389 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1390 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1391 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1392 FALSE
1393 );
1394 end if;
1395 --Diagnostics End
1396
1397 APP_EXCEPTION.RAISE_EXCEPTION;
1398 when ERECORD_GEN_JSPRQFAIL_ERR then
1399 ROLLBACK;
1400 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1401 Wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR JSP UTL_HTTP REQUEST FAILED');
1402 FND_MESSAGE.SET_NAME('EDR','EDR_EREC_JSPREQFAIL_ERR');
1403
1404 --Diagnostics Start
1405 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1406 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1407 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1408 FALSE
1409 );
1410 end if;
1411 --Diagnostics End
1412
1413 APP_EXCEPTION.RAISE_EXCEPTION;
1414 -- Bug 3170251 : End
1415
1416 -- Bug 3390571 : Start
1417 when ERECORD_GEN_XSLT_ERR then
1418 ROLLBACK;
1419 wf_core.context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1420 Wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR : XSLT Transformation error');
1421 FND_MESSAGE.SET_NAME('EDR','EDR_EREC_XSLTTRANS_ERR');
1422 fnd_message.set_token( 'TEMPLATE_NAME',p_style_sheet);
1423 fnd_message.set_token( 'TEMPLATE_VER',p_style_sheet_ver);
1424 --Diagnostics Start
1425 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1426 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
1427 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1428 FALSE
1429 );
1430 end if;
1431 --Diagnostics End
1432 APP_EXCEPTION.RAISE_EXCEPTION;
1433
1434 --Bug 3390571: End
1435
1436 --Bug 2637353: Start
1437 WHEN MSCA_TMPL_ERROR THEN
1438 FND_MESSAGE.SET_NAME('EDR','EDR_MSCA_TMPL_ERR');
1439 --Diagnostics Start
1440 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1441 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
1442 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1443 FALSE
1444 );
1445 end if;
1446 APP_EXCEPTION.RAISE_EXCEPTION;
1447 --Diagnostics End
1448 --Bug 2637353: End
1449
1450
1451 when OTHERS then
1452 ROLLBACK;
1453 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', x_event.getEventName(), p_subscription_guid);
1454 wf_event.setErrorInfo(x_event,SQLERRM || 'ERROR');
1455 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
1456 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
1457 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
1458 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','STORE_ERECORD');
1459 --Diagnostics Start
1460 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1461 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
1462 'edr.plsql.EDR_PSIG_RULE.STORE_ERECORD',
1463 FALSE
1464 );
1465 end if;
1466 --Diagnostics End
1467
1468
1469 APP_EXCEPTION.RAISE_EXCEPTION;
1470 END STORE_ERECORD;
1471
1472 -------------------------------------------------------------------------------------------------------------------------------------
1473
1474 /* Signature Rule function
1475 IN:
1476 p_subscription_guid GUID of Subscription to be processed
1477 p_event Event to be processes
1478 */
1479
1480
1481 function psig_rule(p_subscription_guid in raw,
1482 p_event in out NOCOPY wf_event_t)
1483
1484 return varchar2
1485
1486 is
1487
1488 L_EVENT_NAME varchar2(240);
1489 L_EVENT_KEY varchar2(240);
1490 --sswa addition
1491 L_EVENT_DATA CLOB;
1492 l_erecord_data CLOB;
1493 l_application_id NUMBER;
1494 l_application_code varchar2(32);
1495
1496 -- using EDR approvers table
1497 approverList EDR_UTILITIES.approvers_Table;
1498
1499 upperLimit integer;
1500 i integer;
1501 l_esign_required varchar2(1);
1502 l_eRecord_required varchar2(1);
1503 l_rule_esign_required varchar2(1);
1504 l_rule_eRecord_required varchar2(1);
1505 l_XML_DOCUMENT CLOB;
1506 l_EREC_OUTPUT CLOB;
1507 lparamlist wf_parameter_list_t;
1508 l_STYLE_SHEET varchar2(240);
1509 l_STYLE_SHEET_VER varchar2(240);
1510 l_STYLE_SHEET_repository varchar2(240);
1511 l_STYLE_SHEET_type varchar2(240);
1512 l_temp_style_sheet varchar2(240);
1513 l_temp_style_sheet_ver varchar2(240);
1514
1515 l_POS number;
1516
1517 l_return_status varchar2(10);
1518 l_xml_map_code varchar2(240);
1519 l_audit_group varchar2(240);
1520 l_ame_transaction_type varchar2(240);
1521 l_edr_Event_id number;
1522 l_event_user_key_label VARCHAR2(240);
1523 l_event_user_key_VALUE VARCHAR2(240);
1524 l_transaction_audit_id NUMBER;
1525 l_document_id number;
1526 l_error number;
1527 l_error_msg varchar2(4000);
1528 l_params EDR_PSIG.params_table;
1529 l_source_application varchar2(240);
1530 l_requester varchar2(240);
1531 l_transaction_name varchar2(240);
1532
1533 --Using EDR idList and stringList types
1534 l_ruleids edr_utilities.id_List;
1535 l_rulenames edr_utilities.string_List;
1536
1537 l_application_name varchar2(240);
1538
1539 l_rulevalues EDR_STANDARD.ameruleinputvalues;
1540 l_wftype varchar2(240);
1541 l_wfprocess varchar2(240);
1542 l_no_enabled_eres_sub NUMBER;
1543 l_error_event varchar2(240);
1544
1545 user_data varchar2(2000);
1546 user_data_placeholder varchar2(40);
1547 placeholder_position integer;
1548
1549 MULTIPLE_ERES_SUBSCRIPTIONS EXCEPTION;
1550 NO_ENABLED_ERES_SUBSCRIPTION EXCEPTION;
1551 NO_ERES_SUBSCRIPTION EXCEPTION;
1552 --Bug 5724159:Start
1553 --Define a new Exception to be raised when the signature mode
1554 -- is set to SHORT ,adhoc signer capability is set to ALL or ADHOC
1555 --and the number of approvers is 0.
1556 NO_SIGNERS_DEF_FOR_LITE_MODE EXCEPTION;
1557 -- Bug 5724159 :End
1558
1559 --parameters for inter event
1560 l_parent_event varchar2(240) ;
1561 l_parent_key varchar2(2000) ;
1562 l_parent_erecord_id number ;
1563
1564 l_inter_event_mode varchar2(1);
1565 l_relationship varchar2(200);
1566 l_trans_value_only varchar2(1);
1567 l_parent_sub_guid raw(16);
1568 l_rule_id number;
1569
1570 --Bug 3161859 : start
1571 l_change_signer varchar2(32);
1572 l_change_signer_defined varchar2(1);
1573 --Bug 3161859 : end
1574
1575 -- Bug 4197656 : Start
1576 l_change_signer_evaluate varchar2(1);
1577 -- Bug 4197656 : End
1578
1579
1580 l_debug_level number;
1581 l_ret_code pls_integer;
1582 l_log_file varchar2(2000);
1583 l_errbuf varchar2(2000);
1584
1585 -- Exceptions
1586 PAGE_FLOW_FAILED EXCEPTION;
1587 BAD_RELATIONSHIP_ERROR EXCEPTION;
1588 NO_STYLE_SHEET_FOUND EXCEPTION;
1589 ECX_XML_TO_XML_ERROR EXCEPTION;
1590
1591 --Bug 3893101: Start
1592 l_transform_xml varchar2(1);
1593 TRANSFORM_XML_VAR_ERROR EXCEPTION;
1594 --Bug 3893101: End
1595
1596 l_attachment_string_details VARCHAR2(2000);
1597
1598 -- Bug 3567868 Start
1599 l_source_application_type VARCHAR2(10);
1600 -- Bug 3567868 End
1601 -- Bug 3567868 End
1602 -- Bug 3761813 : start
1603 l_redline_required varchar2(30);
1604 l_snapstatus boolean;
1605 -- -- Bug 3761813 : end
1606
1607 --Bug 4122622: Start
1608 --This variable would hold the comma separated string of child e-record IDs
1609 --set on the event parameters.
1610 l_child_erecord_ids VARCHAR2(4000);
1611
1612 --These variables would indicate whether the parent e-record Id and child e-record
1613 --Id have been set.
1614 l_parent_erecord_id_set boolean;
1615 l_child_erecord_id_set boolean;
1616 l_child_erecord_ids_set boolean;
1617 l_url VARCHAR2(500);
1618 --Bug 4122622: End
1619
1620 --Bug 4150616: Start
1621 --This variable would be used to hold the value of the FORCE_ERECORD subscription parameter.
1622 L_FORCE_ERECORD VARCHAR2(10);
1623 --The ERES profile option value will be stored in this variable.
1624 L_ERES_PROFILE_VALUE VARCHAR2(1);
1625 --Bug 4150616: End
1626
1627 --Bug 4160412: Start
1628 L_TEMP_SIGNATURE_MODE VARCHAR2(10);
1629 L_SIGNATURE_MODE VARCHAR2(10);
1630 L_APPROVER_COUNT VARCHAR2(128);
1631 L_APPROVER_LIST VARCHAR2(4000);
1632 L_ARE_APPROVERS_VALID VARCHAR2(1);
1633 L_INVALID_APPROVERS VARCHAR2(4000);
1634 L_CUSTOM_APPROVER_LIST EDR_UTILITIES.APPROVERS_TABLE;
1635 L_APPROVER_COUNT_VALUE NUMBER;
1636 L_LIST_COUNT NUMBER;
1637 L_TEMP_COUNT NUMBER;
1638 L_LITE_MODE BOOLEAN;
1639 L_REPEATING_APPROVERS BOOLEAN;
1640 L_EINITIALS_DEFER_MODE VARCHAR2(1);
1641 L_ERES_DEFER_MODE VARCHAR2(1);
1642 APPROVING_USERS_PARAMS_ERR EXCEPTION;
1643 INVALID_APPROVING_USERS EXCEPTION;
1644 REPEATING_APPROVERS_ERR EXCEPTION;
1645 INVALID_APPR_COUNT_ERR EXCEPTION;
1646 INVALID_APPR_COUNT_VALUE_ERR EXCEPTION;
1647 --Bug 4160412: End
1648
1649 --Bug 3960236: Start
1650 --This variable would be used to hold the value of the
1651 --call back API passed by product teams in XML_GENERATION_API parameter to generate XML
1652 L_XML_GENERATION_API VARCHAR2(240);
1653 L_SQL_STR varchar2(4000);
1654 EMPTY_XML_DOCUMENT EXCEPTION;
1655 API_EXECUTION_ERROR EXCEPTION;
1656 --Bug 3960236: End
1657
1658 --Bug 4577122: Start
1659
1660 l_valid_regime varchar2(1);
1661 l_voting_regime varchar2(1);
1662 l_temp_value VARCHAR2(4000);
1663
1664 INVALID_FIRST_VOTER_WINS_SETUP EXCEPTION;
1665 --Bug 4577122: End
1666
1667 BEGIN
1668
1669 --Bug 4122622: Start
1670 l_parent_erecord_id_set := false;
1671 l_child_erecord_id_set := false;
1672 l_child_erecord_ids_set := false;
1673 --Bug 4122622: End
1674
1675
1676 --Bug 4074173 : start
1677 l_esign_required :='N';
1678 l_eRecord_required :='N';
1679
1680 l_STYLE_SHEET_repository := 'ISIGN';
1681 user_data_placeholder := 'EDR_USER_DATA_xxYG%7#@(765';
1682
1683 l_parent_event := EDR_CONSTANTS_GRP.g_default_char_param_value;
1684 l_parent_key := EDR_CONSTANTS_GRP.g_default_char_param_value;
1685 l_parent_erecord_id := EDR_CONSTANTS_GRP.g_default_num_param_value;
1686
1687 l_change_signer :='ALL';
1688 l_change_signer_defined :='N';
1689
1690 -- Bug 4197656 : Start
1691 l_change_signer_evaluate := 'N';
1692 -- Bug 4197656 : End
1693
1694 l_debug_level :=6;
1695
1696 --Bug 4074173 : end
1697
1698 --Bug 4150616: Start
1699 --We need to fetch the subscrpition parameters irrespective of whether profile option
1700 --is switched on.
1701 -- Bug 5639849: Starts
1702 -- Instead of loading all subscription parameters, just load the following
1703 -- variables. 1. EDR_AME_TRANSACTION_TYPE 2. EDR_XML_MAP_CODE 3. FORCE_ERECORD
1704 -- All others either are custom variables or interevent speficand those are
1705 -- not required to load at this point.
1706 -- srpuri: We still need to copy parameters whatever workflow can copy.
1707 l_return_status := wf_rule.setParametersIntoParameterList(p_subscription_guid,p_event);
1708 l_temp_value := EDR_INDEXED_XML_UTIL.GET_WF_PARAMS('EDR_AME_TRANSACTION_TYPE',p_subscription_guid);
1709 if(l_temp_value is not null) then
1710 wf_event.AddParameterToList('EDR_AME_TRANSACTION_TYPE',
1711 l_temp_value,
1712 p_event.Parameter_List);
1713 end if;
1714 l_temp_value := EDR_INDEXED_XML_UTIL.GET_WF_PARAMS('EDR_XML_MAP_CODE',p_subscription_guid);
1715 if(l_temp_value is not null) then
1716 wf_event.AddParameterToList('EDR_XML_MAP_CODE',
1717 l_temp_value,
1718 p_event.Parameter_List);
1719 end if;
1720 l_temp_value := EDR_INDEXED_XML_UTIL.GET_WF_PARAMS(EDR_CONSTANTS_GRP.G_FORCE_ERECORD,p_subscription_guid);
1721
1722 if(l_temp_value is not null) then
1723 wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_FORCE_ERECORD,
1724 l_temp_value,
1725 p_event.Parameter_List);
1726 end if;
1727 -- Bug 5639849: Ends
1728
1729 --Fetch the value of the ERES profile option.
1730 l_eres_profile_value := fnd_profile.value('EDR_ERES_ENABLED');
1731
1732 --Fetch the value of FORCE_ERECORD.
1733 l_force_erecord := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_FORCE_ERECORD,p_event.Parameter_List);
1734
1735 --Convert it to upper case for ease in verification later in the code.
1736 l_force_erecord := upper(l_force_erecord);
1737 --Bug 4150616: End
1738 --Bug 5891879: Start
1739 --Read the source application type
1740 l_source_application_type := wf_event.getValueForParameter('#WF_SOURCE_APPLICATION_TYPE',p_event.Parameter_List);
1741 --Bug 5891879 : End
1742 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Start of the rule function');
1743
1744 --Bug 4150616: Start
1745 IF l_eres_profile_value = 'Y' OR l_force_erecord = 'Y' THEN
1746 --Bug 4150616: End
1747
1748 --Bug 4160412: Start
1749 L_LITE_MODE := false;
1750 --Bug 4160412: End
1751
1752 --IF l_return_status='SUCCESS' THEN
1753 /* Check for User Defined Parameters. We only require AME parameter for now */
1754 l_ame_transaction_type := NVL(wf_event.getValueForParameter('EDR_AME_TRANSACTION_TYPE',p_event.Parameter_List),
1755 P_EVENT.getEventName());
1756 -- END IF;
1757
1758 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','AME transaction Type :'||l_ame_transaction_type );
1759
1760 --Diagnostics Start
1761 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1762 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_START_EVT');
1763 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
1764 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
1765 FND_MESSAGE.SET_TOKEN('AME_TYPE',l_ame_transaction_type);
1766 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1767 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
1768 FALSE
1769 );
1770 end if;
1771 --Diagnostics End
1772
1773 --ER # 2966866 start
1774
1775 --get the PARENT_EVENT_NAME parameter
1776 l_parent_event := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.g_parent_event_name ,p_event.Parameter_List);
1777 wf_log_pkg.string(1, 'EDR_PSIG_rule.psig_rule','Parent Event Name:'||l_parent_event);
1778
1779 --get the PARENT_EVENT_KEY parameter
1780 l_parent_key := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.g_parent_event_key,p_event.Parameter_List);
1781
1782 wf_log_pkg.string(1, 'EDR_PSIG_rule.psig_rule','Parent Event Key:'||l_parent_key);
1783
1784 --get the PARENT_ERECORD_ID parameter
1785 l_parent_erecord_id := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.g_parent_erecord_id,p_event.Parameter_List);
1786
1787 wf_log_pkg.string(1, 'EDR_PSIG_rule.psig_rule','Parent eRecord ID:'||l_parent_erecord_id);
1788
1789 --find out if the requisite parameters are passed in the payload so as
1790 --to make it an inter event. either the parent event name AND parent event
1791 --key have to be passed in the payload OR all three, to make this an inter
1792 --event context
1793
1794 IF (l_parent_event <> EDR_CONSTANTS_GRP.g_default_char_param_value
1795 AND l_parent_key <> EDR_CONSTANTS_GRP.g_default_char_param_value )THEN
1796
1797 l_inter_event_mode := 'Y';
1798
1799 ELSIF (l_parent_erecord_id <> EDR_CONSTANTS_GRP.g_default_num_param_value) THEN
1800
1801 l_inter_event_mode := 'Y';
1802
1803 ELSE
1804
1805 l_inter_event_mode := 'N';
1806
1807 END IF;
1808
1809 wf_log_pkg.string(1, 'EDR_PSIG_rule.psig_rule','Inter Event Mode: '||l_inter_event_mode);
1810
1811 if (l_inter_event_mode = 'Y') then
1812 --Diagnostics Start
1813 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1814 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_INTER_EVENT_EVT');
1815 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
1816 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
1817 FND_MESSAGE.SET_TOKEN('PARENT_NAME',nvl(l_parent_event,'NULL'));
1818 FND_MESSAGE.SET_TOKEN('PARENT_KEY',nvl(l_parent_key,'NULL'));
1819 FND_MESSAGE.SET_TOKEN('PARENT_EREC_ID',l_parent_erecord_id);
1820 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1821 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
1822 FALSE
1823 );
1824 end if;
1825 --Diagnostics End
1826
1827
1828 --
1829 -- Start Bug Fix 3355468
1830 -- to resolve this issue we need to modify following code
1831 -- to do following
1832 -- 1. Verify how many ERES subscriptions are available at parent event level
1833 -- 2. If only one subscription is available then do nothing.
1834 -- 3. If more than one ERES subscriptions are enabled then raise error.
1835 -- 4. If more than one ERES subscription is present at parent level and all are disabled raise ERROR
1836 -- 5. if more than one ERES subscription is present at parent level but only one ERES subscription is
1837 -- enabled then do nothing.
1838 -- find out how many ERES subscriptions are
1839 -- present for the parent event
1840 --
1841
1842 select count(*) INTO l_no_enabled_eres_sub
1843 from wf_events a, wf_event_subscriptions b
1844 where a.GUID = b.EVENT_FILTER_GUID
1845 and a.name = l_parent_event
1846 and b.RULE_FUNCTION='EDR_PSIG_RULE.PSIG_RULE'
1847 --Bug No 4912782- Start
1848 and b.source_type = 'LOCAL'
1849 and b.system_guid = hextoraw(wf_core.translate('WF_SYSTEM_GUID')) ;
1850 --Bug No 4912782- End
1851
1852 IF l_no_enabled_eres_sub > 1 then
1853
1854 --
1855 -- Start Bug Fix 3078516
1856 -- Verify is more than one active ERES subscriptions are present
1857 -- for parent event. if more than one ERES subscription is ENABLED
1858 -- Raise Multiple ERES Subscriptions error
1859 --
1860 select count(*) INTO l_no_enabled_eres_sub
1861 from wf_events a, wf_event_subscriptions b
1862 where a.GUID = b.EVENT_FILTER_GUID
1863 and a.name = l_parent_event
1864 and b.RULE_FUNCTION='EDR_PSIG_RULE.PSIG_RULE'
1865 and b.STATUS = 'ENABLED'
1866 --Bug No 4912782- Start
1867 and b.source_type = 'LOCAL'
1868 and b.system_guid = hextoraw(wf_core.translate('WF_SYSTEM_GUID')) ;
1869 --Bug No 4912782- End
1870
1871 IF l_no_enabled_eres_sub > 1 THEN
1872 l_error_event := l_parent_event;
1873 RAISE MULTIPLE_ERES_SUBSCRIPTIONS;
1874 ELSIF l_no_enabled_eres_sub = 0 THEN
1875 l_error_event := l_parent_event;
1876 RAISE NO_ENABLED_ERES_SUBSCRIPTION;
1877 END IF;
1878
1879 ELSIF l_no_enabled_eres_sub = 0 THEN
1880 l_error_event := l_parent_event;
1881 RAISE NO_ERES_SUBSCRIPTION;
1882 END IF;
1883 --
1884 -- end of bug fix 3355468
1885 --
1886
1887 --get the guid of the parent event
1888 l_parent_sub_guid := EDR_ERES_EVENT_PVT.GET_SUBSCRIPTION_GUID(p_event_name => l_parent_event);
1889
1890 l_relationship := upper(EDR_INDEXED_XML_UTIL.GET_WF_PARAMS(p_event.event_name,l_parent_sub_guid));
1891
1892 --Diagnostics Start
1893 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1894 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_INTEREVENT_REL_EVT');
1895 FND_MESSAGE.SET_TOKEN('CHILD_NAME',p_event.getEventName());
1896 FND_MESSAGE.SET_TOKEN('PARENT_EVENT',l_parent_event);
1897 FND_MESSAGE.SET_TOKEN('RELATION',l_relationship);
1898 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1899 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
1900 FALSE
1901 );
1902 end if;
1903 --Diagnostics End
1904
1905 wf_log_pkg.string(1, 'EDR_PSIG_rule.psig_rule','Relationship between parent and child:'||l_relationship);
1906
1907 --l_relationship can have three possible values
1908 --EVALUATE_NORMAL, IGNORE_SIGNATURE, ERECORD_ONLY
1909 end if;
1910 --ER # 2966866 end
1911
1912 --
1913 -- Verify is more than one active ERES subscriptions are present
1914 -- for current event. if more than one ERES subscription is ENABLED
1915 -- Raise Multiple ERES Subscriptions error
1916 --
1917 select count(*) INTO l_no_enabled_eres_sub
1918 from wf_events a, wf_event_subscriptions b
1919 where a.GUID = b.EVENT_FILTER_GUID
1920 and a.name = p_event.event_name
1921 and b.RULE_FUNCTION='EDR_PSIG_RULE.PSIG_RULE'
1922 and b.STATUS = 'ENABLED'
1923 --Bug No 4912782- Start
1924 and b.source_type = 'LOCAL'
1925 and b.system_guid = hextoraw(wf_core.translate('WF_SYSTEM_GUID')) ;
1926 --Bug No 4912782- End
1927
1928 IF l_no_enabled_eres_sub > 1 THEN
1929 l_error_event := p_event.event_name;
1930 RAISE MULTIPLE_ERES_SUBSCRIPTIONS;
1931 END IF;
1932
1933 /* AME Processing */
1934 /* Select APPLICATION_ID of the Event. This is required by AME. Assumption made here
1935 is OWNER_TAG will always be set to application Short Name */
1936
1937 SELECT application_id,APPLICATION_SHORT_NAME into l_application_id,l_application_code
1938 FROM FND_APPLICATION A, WF_EVENTS B
1939 WHERE A.APPLICATION_SHORT_NAME = B.OWNER_TAG
1940 AND B.NAME=P_EVENT.getEventName( );
1941
1942 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Application_id :'||l_application_id );
1943 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','event key :'||P_EVENT.getEventKey( ));
1944 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Trans Type :'||NVL(l_ame_transaction_type,P_EVENT.getEventName( )) );
1945
1946 /* AME Enhancement Code. Determine if singature is need or not and also get approvers */
1947 -- if the inter event mode is on and the relationship is ERECORD_ONLY then
1948 -- also we need to go to AME to get the transaction type
1949 -- the transaction type would help in determining the stylesheet to be applied
1950 -- to create the erecord
1951
1952 --ER # 2966866 start
1953
1954 --Bug 3667036 : Start
1955
1956 --Obtain event details
1957 l_event_data:=p_event.getEventData();
1958 l_event_name:=p_event.getEventName();
1959 l_event_key:=p_event.getEventKey();
1960 l_xml_map_code := NVL(wf_event.getValueForParameter('EDR_XML_MAP_CODE',p_event.Parameter_List),
1961 P_EVENT.getEventName( ));
1962
1963
1964 --Insert into temp table. This is done because a handle to a CLOB created through JDBC
1965 --can be obtained only if it stored in a table and the table queried.
1966 insert into EDR_FINAL_XML_GT(event_name,event_key,event_xml)
1967 values(l_event_name,l_event_key,l_event_data);
1968
1969 select event_xml
1970 into l_event_data
1971 from EDR_FINAL_XML_GT;
1972
1973 if dbms_lob.getlength(l_event_data)>0 then
1974 --Diagnostics Start
1975 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
1976 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_DATA_SOURCE_EVT');
1977 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
1978 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
1979 FND_MESSAGE.SET_TOKEN('DATA_SOURCE','VIEW OBJECT');
1980 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
1981 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
1982 FALSE
1983 );
1984 end if;
1985 --Diagnostics End
1986
1987 --insert the erecord id into the temp table
1988 --This would be picked up by the procedures called by the XML Map for attacments
1989 --Delete the global temp table before inserting a row
1990 delete edr_erecord_id_temp;
1991
1992 SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL;
1993 INSERT into edr_erecord_id_temp (document_id) values (l_edr_Event_id);
1994 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','eRecord id: '||l_edr_Event_id||' will be sent to ECX');
1995
1996 --Bug 3893101: Start
1997 --Obtain the value of transform xml parameter.
1998 l_transform_xml := NVL(wf_event.getValueForParameter('TRANSFORM_XML',p_event.Parameter_List),
1999 'Y');
2000 --If it is set to 'Y' then generate the XML as required.
2001 if l_transform_xml = 'Y' then
2002 --Generate the customised Erecord using XML Gateway
2003 ecx_inbound_trig.processXML
2004 (i_map_code => l_xml_map_code,
2005 i_payload => l_event_data,
2006 i_debug_level => l_debug_level,
2007 i_ret_code => l_ret_code,
2008 i_errbuf => l_errbuf,
2009 i_log_file => l_log_file,
2010 o_payload => l_erecord_data
2011 );
2012
2013 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','ecx inbound trig called');
2014
2015 --If it is set to 'N' then do not perform the XML to XML transformation.
2016 --Take the source XML as the target itself.
2017 elsif l_transform_xml = 'N' then
2018 --We need to recreate the event CLOB in another XML CLOB as
2019 --the CLOB obtained from the event definition cannot be modified.
2020 DBMS_LOB.CREATETEMPORARY(l_erecord_data, TRUE, DBMS_LOB.SESSION);
2021 DBMS_LOB.COPY(l_erecord_data,l_event_data,DBMS_LOB.GETLENGTH(l_event_data));
2022 l_attachment_string_details := wf_event.getValueForParameter('EDR_PSIG_ATTACHMENT',p_event.Parameter_List);
2023 if l_attachment_string_details is not null then
2024 EDR_ATTACHMENTS_GRP.ADD_ERP_ATTACH(p_attachment_string => l_attachment_string_details);
2025 end if;
2026
2027 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','no ecx transformation required');
2028 else
2029 raise TRANSFORM_XML_VAR_ERROR;
2030 end if;
2031 --Bug 3893101: End
2032
2033 --If the return code from ECX is a value other than 0 then
2034 --an error has occurred
2035 if(l_transform_xml = 'Y' and l_ret_code <> 0) then
2036 raise ECX_XML_TO_XML_ERROR;
2037 end if;
2038
2039 --Bug 3893101: Start
2040 --Check for transform xml parameter before writing into diagnostics.
2041 if l_transform_xml = 'Y' then
2042
2043 --Ensure that the ECX error handling is put here.
2044 --Diagnostics Start
2045 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2046 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_ECX_GEN_EVT');
2047 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2048 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2049 FND_MESSAGE.SET_TOKEN('XML_MAP_CODE',l_xml_map_code);
2050 FND_MESSAGE.SET_TOKEN('TRANS','XML TO XML');
2051 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2052 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2053 FALSE
2054 );
2055 end if;
2056 --Diagnostics End
2057 else
2058 --Diagnostics Start
2059 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2060 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_NO_XML_TRANS_EVT');
2061 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2062 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2063 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2064 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2065 FALSE
2066 );
2067 end if;
2068 --Diagnostics End
2069
2070 end if;
2071 --Bug 3893101: End
2072
2073 --update the global temp table with the final xml obtained from ECX
2074 --this would be the xml payload of the e-record
2075 update EDR_FINAL_XML_GT
2076 set event_xml = l_erecord_data
2077 where event_name = l_event_name
2078 and event_key = l_event_key;
2079
2080 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','updated edr_final_xml_gt with the final xml');
2081 else
2082 --Diagnostics Start
2083 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2084 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_DATA_SOURCE_EVT');
2085 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2086 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2087 FND_MESSAGE.SET_TOKEN('DATA_SOURCE','DATABASE');
2088 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2089 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2090 FALSE
2091 );
2092 end if;
2093 --Diagnostics End
2094
2095 end if;
2096 --Bug 3667036 : End
2097
2098
2099 -- Bug 4126932 : Start
2100 -- No need to call AME API in case of Inter Event and relationship is E-Record
2101
2102 -- Bug 2674799 : start
2103 if (l_inter_event_mode = 'Y' and l_relationship = EDR_CONSTANTS_GRP.g_erecord_only) then
2104 l_trans_value_only := 'Y';
2105 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','no need to find out approvers form ame as interevent relationship forces erecord_only');
2106 else
2107 EDR_UTILITIES.GET_APPROVERS(P_APPLICATION_ID => l_application_id,
2108 P_TRANSACTION_ID => p_event.getEventKey(),
2109 P_TRANSACTION_TYPE => NVL(l_ame_transaction_type,p_event.getEventName()),
2110 X_approvers => approverList,
2111 X_rule_Ids => l_ruleids,
2112 X_rule_Descriptions => l_rulenames);
2113 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','called ame to get the approvers');
2114 END IF ;
2115 -- Bug 2674799: end
2116
2117 -- Bug 4126932 : END
2118
2119 --clean up temp table
2120 delete from EDR_FINAL_XML_GT where event_name = l_event_name and event_key=l_event_key;
2121
2122 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','AME API Called. Total Approver '||approverlist.count);
2123
2124 -- get the Application Name
2125 select ltrim(rtrim(application_name)) into l_application_name
2126 from ame_Calling_Apps
2127 where FND_APPLICATION_ID=l_application_id and
2128 TRANSACTION_TYPE_ID=NVL(l_ame_transaction_type,P_EVENT.getEventName( ))
2129 --Bug 4652277: Start
2130 --and end_Date is null;
2131 and sysdate between START_DATE AND NVL(END_DATE, SYSDATE);
2132 --Bug 4652277: End
2133
2134 --Bug fix 3168963 when eRecord_Only is subscription parameter we should not
2135 --look for number of approvers
2136 -- Bug 3567868 :Start
2137 --Bug 5724159 :Start
2138 --Added an extra 'AND' condtion to ensure that no processing takes place if no rules are defined.
2139 IF ((approverlist.count = 0)
2140 and (nvl(l_relationship,'EDR') <> EDR_CONSTANTS_GRP.g_erecord_only) and l_ruleids.count >0 )then
2141
2142 --Bug 5724159 :End
2143 --Diagnostics Start
2144 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2145 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_NO_APPROVERS_EVT');
2146 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2147 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2148 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2149 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2150 FALSE
2151 );
2152 end if;
2153 --Diagnostics End
2154 l_source_application_type := wf_event.getValueForParameter('#WF_SOURCE_APPLICATION_TYPE',p_event.Parameter_List);
2155 -- Bug 3214495 : Start
2156
2157 EDR_STANDARD.GET_AMERULE_INPUT_VARIABLES
2158 (transactiontypeid => NVL(l_ame_transaction_type,P_EVENT.getEventName()),
2159 ameruleid => -1,
2160 amerulename => null,
2161 ameruleinputvalues => l_rulevalues);
2162
2163 --Bug 3214495 : End
2164
2165 --Bug 4197656 : Start
2166
2167 for i in 1..l_rulevalues.count loop
2168 if l_rulevalues(i).input_name = 'ESIG_REQUIRED' then
2169
2170 l_esign_required:= upper(l_rulevalues(i).input_value);
2171
2172 elsif l_rulevalues(i).input_name = 'EREC_REQUIRED' then
2173
2174 l_erecord_required:= upper(l_rulevalues(i).input_value);
2175
2176 elsif l_rulevalues(i).input_name = 'EREC_STYLE_SHEET' then
2177
2178 l_STYLE_SHEET := l_rulevalues(i).input_value;
2179
2180 elsif l_rulevalues(i).input_name = 'EREC_STYLE_SHEET_VER' then
2181
2182 l_STYLE_SHEET_VER := l_rulevalues(i).input_value;
2183
2184 elsif l_rulevalues(i).input_name = 'CHANGE_SIGNERS' then
2185
2186 l_change_signer:= upper(l_rulevalues(i).input_value);
2187 l_change_signer_evaluate := 'Y';
2188
2189 --Bug 3761813 : start
2190
2191 elsif l_rulevalues(i).input_name = 'REDLINE_REQUIRED' then
2192
2193 l_redline_required := upper(l_rulevalues(i).input_value);
2194 --Bug 3761813: End
2195
2196 --Bug 4160412: Start
2197 --Set the signature mode parameter if it is set.
2198 elsif l_rulevalues(i).input_name = EDR_CONSTANTS_GRP.G_SIGNATURE_MODE then
2199
2200 l_signature_mode := upper(l_rulevalues(i).input_value);
2201
2202 --Bug 4160412: End
2203
2204
2205
2206 end if;
2207 end loop;
2208 -- If E- Signature is required and CHANGE_SIGNER is ALL or ADHOC
2209 -- and source application is not 'DB'' the set l_change_signer_defined
2210 -- else return the process .
2211
2212 --Bug 4150616: Start
2213 --This "IF" condition needs to modified to check if the profile option is switched on.
2214 --If the profile option has been switched off, then the force e-record option has been used.
2215 --Hence in that scenario, the if condition should fail.
2216 IF (l_esign_required ='Y' AND l_change_signer_evaluate = 'Y'
2217 AND (l_change_signer = 'ALL' OR l_change_signer = EDR_CONSTANTS_GRP.g_change_signer_adhoc)
2218 AND l_source_application_type not in (EDR_CONSTANTS_GRP.g_db_mode , EDR_CONSTANTS_GRP.g_msca_mode)
2219 AND l_eres_profile_value = 'Y') THEN
2220 l_change_signer_defined := 'Y';
2221 --Bug 4150616: End
2222
2223 --Bug 4150616: Start
2224 --If force_erecord is set to 'Y', then add the "FORCE_ERECORD_USED" parameter into the event list.
2225 --Otherwise exit the rule function with a return status of "SUCCESS". (as before).
2226
2227 --Bug 4543216: Start
2228 ELSIF (l_esign_required = 'Y' and l_signature_mode = EDR_CONSTANTS_GRP.G_ERES_LITE
2229 AND l_source_application_type not in (EDR_CONSTANTS_GRP.g_db_mode,EDR_CONSTANTS_GRP.g_msca_mode) AND l_eres_profile_value = 'Y') then
2230 --Bug 4543216: End
2231 l_lite_mode := true;
2232 ELSIF l_force_erecord = 'Y' then
2233 --Add the parameter into the event list.
2234 wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_FORCE_ERECORD_USED, 'Y',p_event.Parameter_List);
2235 --Bug 4150616: End
2236 --Bug 5724159 : Start
2237 --The Control should not return back without generating E-Record
2238 /* ELSE*/
2239 /* Terminate the process . Nothing has to be done */
2240 /* return 'SUCCESS';*/
2241 --Bug 5724159 : End
2242
2243 END IF;
2244 END IF;
2245
2246 -- Bug 4197656 : End
2247 -- Bug 3567868 :END
2248
2249 --ER # 2966866 start
2250 if (l_inter_event_mode = 'Y' and l_relationship = EDR_CONSTANTS_GRP.g_erecord_only) then
2251 l_trans_value_only := 'Y';
2252 -- SRPURI : Bug fix 3168963 Added following code
2253 -- Deletes data in Rule Id and rulename arrays as these are not used if relationship between
2254 -- events is 'ERECORD_ONLY' and initialize array with dummay values assumin -1 never be a valid
2255 -- row in EDR_AMERULE_INPUT_VAR and null for rule name since we need to pass rulename to
2256 -- get AME input variable values call
2257 -- following statements are valid only when relationship between events is 'ERECORD_ONLY'
2258 -- if you are planning to use this if you are planning to overload this if condition for
2259 -- some other purpose make sure it is not breaking ERECORD_ONLY Functionality
2260 l_ruleids.delete;
2261 l_rulenames.delete;
2262 l_ruleids(1) := -1;
2263 l_rulenames(1) := Null;
2264 --
2265 -- when event 2 is raised in the context of event 1 and subscription parameter is
2266 -- event1=ERECORD_ONLY then we need to capture eRecord unconditionaly
2267 -- by setting l_erecord_required = 'Y' we will achieve this.
2268 --
2269 l_erecord_required := 'Y';
2270 wf_log_pkg.string(3, 'EDR_PSIG_rule.psig_rule','Get Only the input variables at txn level');
2271 end if;
2272 --ER # 2966866 end
2273
2274 for i in 1..l_ruleids.count loop
2275
2276 --ER # 2966866 start
2277 if (l_trans_value_only = 'Y') then
2278 l_rule_id := -1;
2279 else
2280 l_rule_id := l_ruleids(i);
2281 end if;
2282
2283 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Rule_id: '||l_ruleids(i)||' Rule '||l_rulenames(i));
2284
2285 -- Bug 3214495 : Start
2286
2287 EDR_STANDARD.GET_AMERULE_INPUT_VARIABLES( transactiontypeid =>NVL(l_ame_transaction_type,P_EVENT.getEventName( )),
2288 ameruleid =>l_ruleids(i),
2289 amerulename=>l_rulenames(i),
2290 ameruleinputvalues=>l_rulevalues);
2291
2292 -- Bug 3214495 : End
2293
2294 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Total Input Values '||l_rulevalues.count );
2295 if l_rulevalues.count > 0 then
2296 for i in 1..l_rulevalues.count loop
2297 if l_rulevalues(i).input_name = 'ESIG_REQUIRED' then
2298 l_rule_esign_required:=upper(l_rulevalues(i).input_value);
2299 if ( upper(l_esign_required)='N' and l_rule_esign_required ='Y') then
2300 l_esign_required:= l_rule_esign_required;
2301 end if;
2302 elsif l_rulevalues(i).input_name = 'EREC_REQUIRED' then
2303 l_rule_erecord_required:=upper(l_rulevalues(i).input_value);
2304 if ( upper(l_erecord_required)='N' and l_rule_erecord_required ='Y') then
2305 l_erecord_required:= l_rule_erecord_required;
2306 end if;
2307 elsif l_rulevalues(i).input_name = 'EREC_STYLE_SHEET' then
2308 l_temp_style_sheet:= l_rulevalues(i).input_value;
2309 -- Bug 3761813 : start
2310 elsif l_rulevalues(i).input_name = 'REDLINE_REQUIRED' then
2311 l_redline_required := upper(l_rulevalues(i).input_value);
2312 -- Bug 3761813 : end
2313 elsif l_rulevalues(i).input_name = 'EREC_STYLE_SHEET_VER' then
2314 l_temp_style_sheet_ver:= l_rulevalues(i).input_value;
2315 -- Bug 3161859 : Start
2316 elsif l_rulevalues(i).input_name = 'CHANGE_SIGNERS' then
2317 l_change_signer_defined := 'Y';
2318 if ( upper(l_change_signer)='ADHOC' and upper(l_rulevalues(i).input_value) ='NONE') then
2319 l_change_signer:= l_rulevalues(i).input_value;
2320 elsif ( upper(l_change_signer)='ALL' and upper(l_rulevalues(i).input_value) ='NONE') then
2321 l_change_signer:= l_rulevalues(i).input_value;
2322 elsif ( upper(l_change_signer)='ALL' and upper(l_rulevalues(i).input_value) ='ADHOC') then
2323 l_change_signer:= l_rulevalues(i).input_value;
2324 end if;
2325 -- Bug 3161859 : End
2326
2327 --Bug 4160412: Start
2328 --Get the signature mode parameter if found.
2329 elsif l_rulevalues(i).input_name = EDR_CONSTANTS_GRP.G_SIGNATURE_MODE then
2330 l_temp_signature_mode := l_rulevalues(i).input_value;
2331 --Bug 4160412: End
2332 end if;
2333 end loop;
2334 end if;
2335 -- Begin Bug 3334148
2336 -- Determine if sytlesheet belongs to most deterministic Rule
2337 -- Bug 3456530 : Start
2338 if (l_rule_erecord_required ='Y' and l_esign_required ='N') then
2339 -- Bug 3456530 : End
2340 l_style_sheet:=l_temp_style_sheet;
2341 l_style_sheet_ver:=l_temp_style_sheet_ver;
2342 end if;
2343 if l_rule_esign_required ='Y' then
2344 l_style_sheet:=l_temp_style_sheet;
2345 l_style_sheet_ver:=l_temp_style_sheet_ver;
2346
2347 --Bug 4160412: Start
2348 l_signature_mode := l_temp_signature_mode;
2349 --Bug 4160412: End
2350 end if;
2351 --End Bug 3334148
2352 --Start Bug 5158772
2353 IF l_force_erecord = 'Y' then
2354 l_style_sheet := l_temp_style_sheet;
2355 l_style_sheet_ver := l_temp_style_sheet_ver;
2356 wf_log_pkg.string(3, 'EDR_PSIG_rule.psig_rule','Force Ereocrd setting style sheet and version');
2357 end if;
2358 --End Bug 5158772
2359 end loop;
2360
2361 -- Bug 3161859 : Start
2362 if (l_change_signer_defined = 'N') then
2363 l_change_signer:= 'NONE';
2364 end if;
2365 -- Bug 3161859 : End
2366
2367 --ER # 2966866 start
2368 if (l_inter_event_mode = 'Y' and(l_relationship = EDR_CONSTANTS_GRP.g_erecord_only OR
2369 l_relationship = EDR_CONSTANTS_GRP.g_ignore_signature )) then
2370
2371 l_esign_required := 'N';
2372 -- Bug : 3499326 - start
2373 l_style_sheet := l_temp_style_sheet;
2374 l_style_sheet_ver := l_temp_style_sheet_ver;
2375 -- Bug : 3499326 - end
2376
2377 wf_log_pkg.string(3, 'EDR_PSIG_rule.psig_rule','Inter Event Mode and No eSignature');
2378 end if;
2379 --ER # 2966866 end
2380
2381
2382 -- Bug 3170251 : Start Get the File Extension of Template Associated with this event
2383 -- Bug 3456399 : Start - get the last three characters from file name
2384 L_STYLE_SHEET_TYPE := UPPER(SUBSTR(L_STYLE_SHEET,LENGTH(L_STYLE_SHEET)-2,LENGTH(L_STYLE_SHEET)));
2385 -- Bug 3456399 : End
2386 --Bug: 3170251 : End
2387
2388 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Signature Required :'||l_esign_required);
2389 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','eRecord Required :'||l_erecord_required);
2390 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Style Sheet :'||l_style_sheet);
2391 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','StyleSheet Version :'||l_style_sheet_ver);
2392 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','StyleSheet repository :'||l_style_sheet_repository);
2393
2394 --Diagnostics Start
2395 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2396 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_PARAM_LIST_EVT');
2397 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2398 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2399 FND_MESSAGE.SET_TOKEN('ESIG_VALUE',l_esign_required);
2400 FND_MESSAGE.SET_TOKEN('EREC_VALUE',l_erecord_required);
2401 FND_MESSAGE.SET_TOKEN('STYLE_SHEET',l_style_sheet);
2402 FND_MESSAGE.SET_TOKEN('STYLE_VER',l_style_sheet_ver);
2403 FND_MESSAGE.SET_TOKEN('STYLE_REP',l_style_sheet_repository);
2404 FND_MESSAGE.SET_TOKEN('XML_MAP_CODE',l_xml_map_code);
2405 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2406 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2407 FALSE
2408 );
2409 end if;
2410 --Diagnostics End
2411
2412
2413 --Bug 4150616: Start
2414 --We want to create the e-record for any the following conditions being true.
2415 --1. ESIG_REQUIRED = Y
2416 --2. EREC_REQUIRED = Y
2417 --3. Subscription parameter FORCE_ERECORD = Y
2418 IF (upper(l_esign_required)='Y' OR upper(l_erecord_required)='Y' or l_force_erecord = 'Y') THEN
2419 /* Read the Require Parameter */
2420
2421 --If this condition is true then it means that the e-record is being created
2422 --because FORCE_ERECORD is set to Y and either the profile option is switched off
2423 --or (ESIG_REQUIRED=N and EREC_REQUIRED = N).
2424 --Hence we would add an addittional parameter to the event payload which in
2425 --turn is added to the doc params which indicates that the e-record is being
2426 --created because FORCE_ERECORD is set to Y.
2427 --This parameter is named "FORCE_ERECORD_USED".
2428 if l_eres_profile_value = 'N' OR (upper(l_esign_required) = 'N' and upper(l_erecord_required) = 'N') then
2429 wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_FORCE_ERECORD_USED,'Y',p_event.Parameter_List);
2430 end if;
2431 --Bug 4150616: End
2432
2433 l_audit_group := NVL(wf_event.getValueForParameter('EDR_AUDIT_GROUP',p_event.Parameter_List),
2434 P_EVENT.getEventName( ));
2435
2436 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','XML Map Code :'||l_xml_map_code );
2437 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Audit Group :'||l_audit_group );
2438 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Setting ECX parameter');
2439
2440 /* Set Additional Parameters required by Esignature */
2441 /* wf_event.AddParameterToList('SUB_GUID', p_subscription_guid,p_event.Parameter_List); Subscription ID */
2442 wf_event.AddParameterToList('ECX_MAP_CODE', l_xml_map_code,p_event.Parameter_List); /* XML Map Code*/
2443 wf_event.AddParameterToList('ECX_DOCUMENT_ID', P_EVENT.getEventKey( ),p_event.Parameter_List); /* XML Document ID*/
2444 wf_event.AddParameterToList('TEXT_XSLNAME', l_style_sheet,p_event.Parameter_List); /* Style Sheet*/
2445 wf_event.AddParameterToList('TEXT_XSLVERSION', l_style_sheet_ver,p_event.Parameter_List); /* Style Sheet*/
2446 wf_event.AddParameterToList('HTML_XSLNAME', NULL,p_event.Parameter_List); /* Style Sheet*/
2447 wf_event.AddParameterToList('HTML_XSLVERSION', NULL,p_event.Parameter_List); /* Style Sheet*/
2448 wf_event.AddParameterToList('APPLICATION_CODE', lower(l_application_code),p_event.Parameter_List); /* Style Sheet*/
2449 wf_event.AddParameterToList('EDR_SIGN_REQUIRED', l_esign_required,p_event.Parameter_List); /* Signature Required*/
2450 wf_event.AddParameterToList('EDR_EREC_REQUIRED', l_erecord_required,p_event.Parameter_List); /* eRecord Required*/
2451 --Bug 3761813 : start
2452 wf_event.AddParameterToList('REDLINE_REQUIRED', nvl(l_redline_required,'N'),p_event.Parameter_List); /* redline Required*/
2453 --Bug 3761813 : END
2454
2455 -- Bug 3161859 : Start
2456 -- this parameter would be used to show whether or not to display
2457 -- the Update Signer button wouuld be enabled or disabled
2458 wf_event.AddParameterToList('EDR_CHANGE_SIGNERS', l_change_signer,p_event.Parameter_List); /* Change Signer Required*/
2459 -- Bug 3161859 : End
2460
2461 -- Bug 3170251 : Start - Store EREC_TEMPLATE_TYPE in the event parameter list so that its available throughout
2462 -- the rule function and pageflow till the workflow is alive for this event
2463 wf_event.AddParameterToList('EREC_TEMPLATE_TYPE', l_style_sheet_type,p_event.Parameter_List); /* Template Type */
2464 -- Bug 3170251 : End
2465
2466 -- Bug 5158510 :start
2467 wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_SIGNATURE_MODE, l_signature_mode,p_event.Parameter_List);
2468 -- Bug 5158510 :end
2469 wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','ECX Parameter set have been set' );
2470
2471 /* Generate XML Document */
2472 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Calling ECX Standard package to generate XML' );
2473 -- Bug 3960236 : Start
2474 -- Fetch the payload parameter
2475 L_XML_GENERATION_API := wf_event.getValueForParameter('XML_GENERATION_API',p_event.Parameter_List);
2476
2477 -- Bug 3960236 : end
2478 --Bug 3667036 : Start
2479 --if event data is not null then don't call XML gateway again
2480 if dbms_lob.getlength(l_event_data) > 0 then
2481 L_XML_DOCUMENT := l_erecord_data;
2482 -- Bug 3960236 : Start
2483 elsif L_XML_GENERATION_API is NOT NULL then
2484 -- Check if call back function has been passed to generate XML document by product team
2485 begin
2486 --bug 4730592: start
2487 --changed the way the callback api is called dynamically
2488 --L_SQL_STR:= 'select '|| l_xml_generation_api || ' from dual';
2489 --execute immediate L_SQL_STR into L_XML_DOCUMENT;
2490 execute immediate 'begin :1:= '||l_xml_generation_api ||'; end;'
2491 using out l_xml_document;
2492 --bug 4730592: end
2493 if l_XML_DOCUMENT is NULL then
2494 raise EMPTY_XML_DOCUMENT;
2495 end if;
2496 exception
2497 when others then
2498 raise API_EXECUTION_ERROR;
2499 end;
2500
2501 --Bug 4529417: Start
2502 --We need to obtain the next sequence value from EDR_ERECORDS_S.
2503
2504 --insert the erecord id into the temp table
2505 --This would be picked up by the procedures called by the XML Map for attacments
2506 --Delete the global temp table before inserting a row
2507 delete edr_erecord_id_temp;
2508
2509 --select Unique event Id to be posted in temp tables
2510 SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL;
2511
2512 INSERT into edr_erecord_id_temp (document_id) values (l_edr_Event_id);
2513
2514 --Obtain the attachment string parameter.
2515 l_attachment_string_details := wf_event.getValueForParameter('EDR_PSIG_ATTACHMENT',p_event.Parameter_List);
2516
2517 --If the attachment string exists then call the attachment API to create the attachments.
2518 if l_attachment_string_details is not null then
2519 EDR_ATTACHMENTS_GRP.ADD_ERP_ATTACH(p_attachment_string => l_attachment_string_details);
2520 end if;
2521 --Bug 4529417: End
2522
2523
2524
2525
2526 -- Bug 3960236 : end
2527 else
2528 --otherwise call XML gateway
2529 --insert the erecord id into the temp table
2530 --This would be picked up by the procedures called by the XML Map for attacments
2531 --Delete the global temp table before inserting a row
2532 delete edr_erecord_id_temp;
2533
2534 --select Unique event Id to be posted in temp tables
2535 SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL;
2536
2537
2538 --Bug 3761813 : start
2539 --Bug 4306292: Start
2540 --Commenting changes made for red lining.
2541
2542 if ( nvl(l_redline_required,'N') = 'Y') then
2543 l_snapstatus:= PRE_TX_SNAPSHOT(l_edr_Event_id,l_xml_map_code,P_EVENT.getEventKey());
2544 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','After Calling Snapshot to generate XML'||P_EVENT.getEventKey( ));
2545 END IF;
2546 --Bug 4306292: End
2547 -- Bug 3761813 : end
2548
2549 INSERT into edr_erecord_id_temp (document_id) values (l_edr_Event_id);
2550 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','eRecord id: '||l_edr_Event_id||' has been sent to ECX');
2551
2552 L_XML_DOCUMENT:=ECX_STANDARD.GENERATE(p_event_name => P_EVENT.getEventName(),
2553 p_event_key => P_EVENT.getEventKey(),
2554 p_parameter_list => p_event.Parameter_List);
2555
2556 --Diagnostics Start
2557 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2558 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_ECX_GEN_EVT');
2559 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2560 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2561 FND_MESSAGE.SET_TOKEN('XML_MAP_CODE',l_xml_map_code);
2562 FND_MESSAGE.SET_TOKEN('TRANS','DB TO XML');
2563 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2564 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2565 FALSE
2566 );
2567 end if;
2568 --Diagnostics End
2569
2570 end if;
2571 --Bug 3667036 : End
2572
2573 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','XML Document Generated' );
2574
2575 --Bug 5724159 :Start
2576 --When the number of approvers is 0,Adhoc signer capability is ALL or ADHOC and the
2577 --Signature mode is SHORT,Error message needs to displayed. E-Record will not be captured in this scenario.
2578 IF(approverlist.count=0 and l_change_signer_defined ='Y' AND l_change_signer <>'NONE' and l_signature_mode='SHORT') THEN
2579 RAISE NO_SIGNERS_DEF_FOR_LITE_MODE;
2580 END IF;
2581 --Bug 5724159 :End
2582
2583 --Bug 3437422: Start
2584 --call an api that would find out of the xml contains the user_data
2585 --placeholder and replace it with the actual contents of the user_data
2586 --node.
2587 edr_utilities.replace_user_data_token(l_xml_document);
2588 --Bug 3437422: End
2589 --To make eRecord generation storing autonomous
2590 --Moved all of the following code in this IF clause
2591 --to STROE_ERECORD Local Procedure
2592 --
2593 -- Bug Fix 3143107
2594 -- Removed elsif l_erecord_required = Y clause as we already know that
2595 -- we need to generate eRecord irrespective of l_erecord_required value
2596 -- we will use l_esign_required required in STORE_ERECORD to move the eRecord
2597 -- status to 'COMPLETE'(l_esign_required = 'N') or 'ERROR' (l_esign_required ='Y')
2598
2599 STORE_ERECORD(p_XML_DOCUMENT => l_XML_DOCUMENT,
2600 p_style_sheet_repository => l_style_sheet_repository,
2601 p_style_sheet => l_style_sheet,
2602 p_style_sheet_ver => l_style_sheet_ver,
2603 p_application_code => l_application_code,
2604 p_edr_event_id => l_edr_event_id ,
2605 p_esign_required => l_esign_required,
2606 p_subscription_guid => p_subscription_guid,
2607 x_event => p_event);
2608 --Bug 4590037
2609 --Set the XML document to CLOB datatype of the event
2610 P_EVENT.setEventData(L_XML_DOCUMENT);
2611 --Bug 4590037
2612
2613 --Bug 4150616: Start
2614 --Start the workflow process only if the profile option is switched on.
2615 IF upper(l_esign_required)='Y' and l_eres_profile_value = 'Y' THEN
2616 --Bug 4150616: End
2617
2618 --Bug 3761813 : start
2619 --Bug 4306292: Start
2620 --Commenting changes made for red lining.
2621 if (l_style_sheet_type = 'XSL' and nvl(l_redline_required,'N') = 'Y' ) then
2622 select DIFF_XML into L_XML_DOCUMENT from EDR_REDLINE_TRANS_DATA where EVENT_ID = l_edr_event_id ;
2623 -- Bug 5167207 : start
2624 --Set the XML document to CLOB datatype of the event
2625 P_EVENT.setEventData(L_XML_DOCUMENT);
2626 -- Bug 5167207 : end
2627 end if;
2628 --Bug 4306292: End
2629 --Bug 3761813 : end
2630
2631 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','XML Document Set to event Data' );
2632
2633 /* GET Approver List.
2634 ame_api.getAllApprovers(applicationIdIn=>l_application_Id,
2635 transactionIdIn=>P_EVENT.getEventKey( ),
2636 transactionTypeIn=>NVL(l_ame_transaction_type,P_EVENT.getEventName( )),
2637 approversOut=>approverList); */
2638
2639 --Diagnostics Start
2640 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2641 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_APPROVER_COUNT_EVT');
2642 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2643 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2644 FND_MESSAGE.SET_TOKEN('COUNT',approverList.count);
2645 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2646 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2647 FALSE
2648 );
2649 end if;
2650 --Diagnostics End
2651 --Bug 5724159 : Start
2652 /*check whether number of approvers is zero,Change signer property is defined and its value is
2653 NONE, List Of signers should not be launched in this scenario, return success*/
2654
2655 IF (approverList.count=0 AND l_change_signer_defined ='Y' AND l_change_signer ='NONE') THEN
2656 return 'SUCCESS' ;
2657 END IF;
2658 --Bug 5724159 : End
2659
2660 -- BUG 3567868 Start
2661 -- IF No Approver but Change Signer is 'ADHOC' or 'ALL'
2662 IF ( (approverList.count > 0) OR (upper(l_change_signer_defined) = 'Y') or l_lite_mode) THEN
2663 -- BUG 3567868 END
2664
2665
2666 --Bug 4577122: Start
2667 --validate the voting regime and then proceed
2668 validate_voting_regime
2669 (
2670 p_approver_list => approverList,
2671 x_valid_regime => l_valid_regime,
2672 x_voting_regime => l_voting_regime
2673 );
2674
2675 if (l_valid_regime = 'N') then
2676 raise INVALID_FIRST_VOTER_WINS_SETUP;
2677 else
2678 if (l_voting_regime <> ame_util.firstApproverVoting ) then
2679 l_voting_regime := 'X';
2680 end if;
2681
2682 --set the voting regime on the workflow attribute
2683 wf_event.AddParameterToList
2684 ('AME_VOTING_REGIME', l_voting_regime,p_event.Parameter_List);
2685
2686 end if;
2687 --Bug 4577122: End
2688
2689 --Bug 4160412: Start
2690 --Check the value of signature mode.
2691 --If it is set to lite then, fetch the value of the attributes APPROVING_USERS,
2692 --APPROVER_COUNT and APPROVING RESPONSIBILITY.
2693 --Bug 5891879 :Start
2694 --Defaults Signature mode to SHORT when the src application type is KIOSK
2695 IF l_source_application_type = EDR_CONSTANTS_PUB.g_kiosk_mode then
2696 l_signature_mode := EDR_CONSTANTS_GRP.G_ERES_LITE;
2697 end if;
2698 --Bug 5891879 :End
2699
2700 --Bug 4543216: Start
2701 if l_signature_mode = EDR_CONSTANTS_GRP.G_ERES_LITE then
2702 --Bug 4543216: Start
2703
2704 --Diagnostics Start
2705 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2706 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_SIGN_MODE_EVT');
2707 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2708 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2709 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2710 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2711 FALSE
2712 );
2713 end if;
2714 --Diagnostics End
2715
2716 l_einitials_defer_mode := 'Y';
2717 wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_SIGNATURE_MODE, l_signature_mode,p_event.Parameter_List);
2718 l_approver_count := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_APPROVER_COUNT,p_event.Parameter_List);
2719 l_approver_list := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_APPROVER_LIST,p_event.Parameter_List);
2720
2721 --If approver_count and approving users are set, then raise an exception.
2722 if l_approver_count is not null and l_approver_list is not null then
2723 RAISE APPROVING_USERS_PARAMS_ERR;
2724 end if;
2725
2726 --If approving users are set, then fetch the approver list from the comma separated string.
2727 if l_approver_list is not null then
2728
2729 --Diagnostics Start
2730 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2731 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_APPR_LIST_EVT');
2732 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2733 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2734 FND_MESSAGE.SET_TOKEN('APPROVER_LIST',l_approver_list);
2735 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2736 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2737 FALSE
2738 );
2739 end if;
2740 --Diagnostics End
2741
2742 EDR_UTILITIES.GET_APPROVER_LIST(P_APPROVING_USERS => L_APPROVER_LIST,
2743 X_APPROVER_LIST => L_CUSTOM_APPROVER_LIST,
2744 X_ARE_APPROVERS_VALID => L_ARE_APPROVERS_VALID,
2745 X_INVALID_APPROVERS => L_INVALID_APPROVERS);
2746
2747 l_repeating_approvers := EDR_UTILITIES.ARE_APPROVERS_REPEATING(P_APPROVER_LIST => L_CUSTOM_APPROVER_LIST);
2748
2749 --If there are repeating approvers then raise an exception
2750 if l_repeating_approvers then
2751 raise REPEATING_APPROVERS_ERR;
2752 end if;
2753
2754 --If the approvers are invalid then raise an exception.
2755 if l_are_approvers_valid = 'N' then
2756 RAISE INVALID_APPROVING_USERS;
2757 end if;
2758 approverlist := L_CUSTOM_APPROVER_LIST;
2759
2760 for l_list_count in 1..approverlist.count loop
2761 if instr(approverlist(l_list_count).name,'#') = 1 then
2762 wf_event.addParameterToList(EDR_CONSTANTS_GRP.G_DO_RESPS_EXIST,'Y',p_event.Parameter_List);
2763 l_einitials_defer_mode := 'N';
2764 exit;
2765 end if;
2766 end loop;
2767 end if;
2768
2769 if l_approver_count is not null then
2770
2771 --Diagnostics Start
2772 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2773 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_APPR_COUNT_EVT');
2774 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2775 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2776 FND_MESSAGE.SET_TOKEN('APPROVER_COUNT',l_approver_count);
2777 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2778 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2779 FALSE
2780 );
2781 end if;
2782 --Diagnostics End
2783
2784 --Approver Count has been specified
2785 --Convert it into a number type.
2786 BEGIN
2787 l_approver_count_value := to_number(l_approver_count,'999999999999');
2788 --If approver count is less then 0 then raise an error.
2789 if l_approver_count_value < 0 then
2790 raise INVALID_APPR_COUNT_VALUE_ERR;
2791 end if;
2792 EXCEPTION
2793 --Approver Count attribute was a not a valid number. Hence raise an exception.
2794 WHEN VALUE_ERROR THEN
2795 RAISE INVALID_APPR_COUNT_ERR;
2796 END;
2797
2798
2799 --Make null entries in the approver list table type.
2800 for l_list_count in 1..l_approver_count_value loop
2801 L_CUSTOM_APPROVER_LIST(l_list_count).name := null;
2802 L_CUSTOM_APPROVER_LIST(l_list_count).approver_order_number := l_list_count;
2803 approverList := L_CUSTOM_APPROVER_LIST;
2804 end loop;
2805
2806 l_einitials_defer_mode := 'N';
2807
2808 end if;
2809
2810 --If approver count is zero, then do not start the pageflow process.
2811 --This is because adhoc functionality is not supported in EINITIALS.
2812 if approverList.count = 0 then
2813 return 'SUCCESS';
2814 end if;
2815
2816 --Evaluate the einitials deferred mode variable.
2817 if l_einitials_defer_mode = 'Y' then
2818 l_eres_defer_mode := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_DEFERRED_PARAM,p_event.Parameter_List);
2819 if l_eres_defer_mode is null or l_eres_defer_mode <> 'Y' then
2820 l_einitials_defer_mode := 'N';
2821 end if;
2822 END IF;
2823
2824 --Diagnostics Start
2825 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2826 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_DEFER_MODE_EVT');
2827 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2828 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2829 FND_MESSAGE.SET_TOKEN('DEFER_MODE',l_einitials_defer_mode);
2830 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2831 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2832 FALSE
2833 );
2834 end if;
2835 --Diagnostics End
2836
2837 --Add the e-initials deferred mode variable to the event.
2838 wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_EINITIALS_DEFER_MODE,l_einitials_defer_mode,p_event.Parameter_List);
2839 END IF;
2840 --Bug 4160412: End
2841
2842
2843 /* select Unique event Id to be posted in temp tables */
2844 /* 24-FEB-2003: CJ: commented one line below as the erecord id is already available
2845 in the local variable and added a line to delete the erecord id from temp
2846 table */
2847 /* SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL; */
2848 /* 24-FEB-2003: CJ : end */
2849 /* Set this value to correlation_id to be used by WF_RULE.DEFAULT_RULE funciton */
2850 P_EVENT.SETCORRELATIONID(l_edr_event_id);
2851 /* Select the workflow process for the subscription */
2852 select wf_process_type,wf_process_name
2853 into l_wftype, l_wfprocess
2854 from wf_event_subscriptions
2855 where guid = p_subscription_guid;
2856
2857 wf_event.AddParameterToList('#WF_PAGEFLOW_ITEMTYPE', l_wftype,p_event.Parameter_List); /* Page Flow Workflow type*/
2858 wf_event.AddParameterToList('#WF_PAGEFLOW_ITEMPROCESS', l_wfprocess,p_event.Parameter_List); /* Page Flow Workflow process*/
2859 wf_event.AddParameterToList('#WF_PAGEFLOW_ITEMKEY', l_edr_event_id,p_event.Parameter_List); /* Item Key*/
2860
2861 /* CAll Page Flow Creation API */
2862 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Calling Page Flow Creation Procedure');
2863
2864 --Diagnostics Start
2865 if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2866 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_WF_PARAMS_EVT');
2867 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2868 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2869 FND_MESSAGE.SET_TOKEN('ITEM_TYPE',l_wftype);
2870 FND_MESSAGE.SET_TOKEN('ITEM_KEY',l_edr_event_id);
2871 FND_MESSAGE.SET_TOKEN('PROCESS',l_wfprocess);
2872 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2873 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2874 FALSE
2875 );
2876 end if;
2877 --Diagnostics End
2878
2879 --Bug 4122622: Start
2880 --Obtain the value of the comma separated child e-record ID string.
2881 l_child_erecord_ids := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_CHILD_ERECORD_IDS,p_event.Parameter_List);
2882
2883 --Set the approriate flags based on this value.
2884 if l_child_erecord_ids is not null then
2885 if instr(l_child_erecord_ids,',') > 0 then
2886 l_child_erecord_ids_set := true;
2887 else
2888 l_child_erecord_id_set := true;
2889 end if;
2890 end if;
2891
2892 --Set the approriate flags based on the parent e-record id.
2893 if(l_parent_erecord_id is not null and l_parent_erecord_id <> EDR_CONSTANTS_GRP.g_default_num_param_value) then
2894 l_parent_erecord_id_set := true;
2895 end if;
2896
2897 --Set the related e-record IDs URLs based on the flags.
2898 if l_parent_erecord_id_set then
2899 if l_child_erecord_id_set then
2900
2901 l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_RELATED_ERECORDS_VIEW&retainAM=Y&parentERecordId='||
2902 l_parent_erecord_id||'&childERecordIds='||l_child_erecord_ids||'&addBreadCrumb=Y';
2903
2904 elsif l_child_erecord_ids_set then
2905 l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_RELATED_ERECORDS_VIEW&edrNotifId=-NID-&retainAM=Y'||
2906 '&parentERecordId='||l_parent_erecord_id||'&addBreadCrumb=Y';
2907 else
2908
2909 l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_ERECORD_DETAILS_VIEW&retainAM=Y' ||
2910 '&relatedERecordType=PARENT&fromNotifPG=Y&eRecordId='||l_parent_erecord_id;
2911 end if;
2912
2913 elsif l_child_erecord_ids_set then
2914
2915 l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_RELATED_ERECORDS_VIEW&edrNotifId=-NID-&retainAM=Y&addBreadCrumb=Y';
2916
2917 elsif l_child_erecord_id_set then
2918
2919 l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_ERECORD_DETAILS_VIEW&retainAM=Y' ||
2920 '&relatedERecordType=CHILD&fromNotifPG=Y&eRecordId='||l_child_erecord_ids;
2921
2922 end if;
2923
2924 wf_event.AddParameterToList('RELATED_ERECORDS',l_url,p_event.Parameter_List);
2925
2926 --Bug 4122622: End;
2927
2928 l_return_status:= CREATE_PAGEFLOW(p_event_id => l_edr_event_id,
2929 p_map_code => l_xml_map_code,
2930 p_ame_transaction_type => l_ame_transaction_type,
2931 p_audit_group => l_audit_group,
2932 p_eventP => p_event,
2933 p_subscription_guid => p_subscription_guid,
2934 P_approverlist => approverList,
2935 P_ERR_CODE => l_error,
2936 P_ERR_MSG => l_error_msg);
2937 wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Page Flow Returned '||l_return_status);
2938
2939 IF l_return_status = 'ERROR' OR L_ERROR is not null then
2940 raise PAGE_FLOW_FAILED;
2941 ELSE
2942 RETURN l_return_status;
2943 END IF;
2944
2945 ELSE
2946 /* No approver Required, Signature Not REquired */
2947 RETURN 'SUCCESS';
2948 END IF;
2949 END IF;
2950 end if;
2951 end if;
2952
2953 RETURN 'SUCCESS';
2954
2955 exception
2956 --Bug 4577122: Start
2957 when INVALID_FIRST_VOTER_WINS_SETUP then
2958 FND_MESSAGE.SET_NAME('EDR','EDR_BAD_FRST_VOTER_SETUP');
2959 fnd_message.set_token( 'EVENT', l_error_event);
2960 APP_EXCEPTION.RAISE_EXCEPTION;
2961 return EDR_CONSTANTS_GRP.g_error_status;
2962 --Bug 4577122: End
2963
2964 when NO_ENABLED_ERES_SUBSCRIPTION THEN
2965 FND_MESSAGE.SET_NAME('EDR','EDR_ERES_SUBSCRIPTION_DISABLED');
2966 fnd_message.set_token( 'EVENT', l_error_event);
2967 --Diagnostics Start
2968 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2969 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
2970 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2971 FALSE
2972 );
2973 end if;
2974 --Diagnostics End
2975 APP_EXCEPTION.RAISE_EXCEPTION;
2976 return EDR_CONSTANTS_GRP.g_error_status;
2977
2978 when NO_ERES_SUBSCRIPTION THEN
2979 FND_MESSAGE.SET_NAME('EDR','EDR_NO_ERES_SUBSCRIPTION');
2980 fnd_message.set_token( 'EVENT', l_error_event);
2981
2982 --Diagnostics Start
2983 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2984 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
2985 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2986 FALSE
2987 );
2988 end if;
2989 --Diagnostics End
2990
2991 APP_EXCEPTION.RAISE_EXCEPTION;
2992 return EDR_CONSTANTS_GRP.g_error_status;
2993
2994 WHEN MULTIPLE_ERES_SUBSCRIPTIONS THEN
2995 FND_MESSAGE.SET_NAME('EDR','EDR_MULTI_ERES_SUBSCRIPTIONS');
2996 fnd_message.set_token( 'EVENT',l_error_event);
2997 --Diagnostics Start
2998 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2999 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3000 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3001 FALSE
3002 );
3003 end if;
3004 --Diagnostics End
3005
3006 APP_EXCEPTION.RAISE_EXCEPTION;
3007 return EDR_CONSTANTS_GRP.g_error_status;
3008
3009 when PAGE_FLOW_FAILED then
3010 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', p_event.getEventName(), p_subscription_guid);
3011 wf_event.setErrorInfo(p_event,SQLERRM || 'ERROR');
3012 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
3013 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
3014 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
3015 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','PSIG_RULE');
3016 --Diagnostics Start
3017 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3018 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3019 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3020 FALSE
3021 );
3022 end if;
3023 --Diagnostics End
3024 APP_EXCEPTION.RAISE_EXCEPTION;
3025 return EDR_CONSTANTS_GRP.g_error_status;
3026
3027 --Bug 3667036: Start
3028 --Catch the XML to XML transformation error.
3029 when ECX_XML_TO_XML_ERROR then
3030 FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_XML_TO_XML_ERR');
3031 FND_MESSAGE.SET_TOKEN('EXCEPTION_MESSAGE',l_errbuf);
3032 FND_MESSAGE.SET_TOKEN('LOG',l_log_file);
3033 --Diagnostics Start
3034 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3035 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3036 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3037 FALSE
3038 );
3039 end if;
3040 --Diagnostics End
3041 APP_EXCEPTION.RAISE_EXCEPTION;
3042 return EDR_CONSTANTS_GRP.g_error_status;
3043 --Bug 3667036: End
3044
3045 --Bug 3893101: Start
3046 WHEN TRANSFORM_XML_VAR_ERROR then
3047 FND_MESSAGE.SET_NAME('EDR','EDR_FWK_TRANSFORM_XML_VAR_ERR');
3048 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3049 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3050 --Diagnostics Start
3051 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3052 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3053 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3054 FALSE
3055 );
3056 end if;
3057 --Diagnostics End
3058 APP_EXCEPTION.RAISE_EXCEPTION;
3059 return EDR_CONSTANTS_GRP.g_error_status;
3060 --Bug 3893101: End
3061
3062 --Bug 4160412: Start
3063 WHEN APPROVING_USERS_PARAMS_ERR THEN
3064 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_USERS_PARAMS_ERR');
3065 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3066 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3067 --Diagnostics Start
3068 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3069 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3070 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3071 FALSE
3072 );
3073 end if;
3074 --Diagnostics End
3075 APP_EXCEPTION.RAISE_EXCEPTION;
3076 return EDR_CONSTANTS_GRP.g_error_status;
3077
3078 WHEN INVALID_APPROVING_USERS THEN
3079 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_INVALID_USERS');
3080 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3081 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3082 FND_MESSAGE.SET_TOKEN('APPROVER_NAMES',l_invalid_approvers);
3083 --Diagnostics Start
3084 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3085 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3086 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3087 FALSE
3088 );
3089 end if;
3090 --Diagnostics End
3091 APP_EXCEPTION.RAISE_EXCEPTION;
3092 return EDR_CONSTANTS_GRP.g_error_status;
3093
3094 WHEN REPEATING_APPROVERS_ERR THEN
3095 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_REPEATING_APPRS');
3096 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3097 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3098 FND_MESSAGE.SET_TOKEN('STRING',l_approver_list);
3099 --Diagnostics Start
3100 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3101 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3102 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3103 FALSE
3104 );
3105 end if;
3106 --Diagnostics End
3107 APP_EXCEPTION.RAISE_EXCEPTION;
3108 return EDR_CONSTANTS_GRP.g_error_status;
3109
3110 WHEN INVALID_APPR_COUNT_ERR THEN
3111 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_INVALID_APPR_CNT');
3112 FND_MESSAGE.SET_TOKEN('APPROVER_COUNT',l_approver_count);
3113 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3114 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3115
3116 --Diagnostics Start
3117 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3118 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3119 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3120 FALSE
3121 );
3122 end if;
3123 --Diagnostics End
3124 APP_EXCEPTION.RAISE_EXCEPTION;
3125 return EDR_CONSTANTS_GRP.g_error_status;
3126
3127 WHEN INVALID_APPR_COUNT_VALUE_ERR THEN
3128 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_APPR_CNT_ERR');
3129 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3130 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3131
3132 --Diagnostics Start
3133 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3134 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3135 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3136 FALSE
3137 );
3138 end if;
3139 --Diagnostics End
3140 APP_EXCEPTION.RAISE_EXCEPTION;
3141 return EDR_CONSTANTS_GRP.g_error_status;
3142 --Bug 4160412: End
3143
3144 --Bug 3960236: Start
3145 WHEN API_EXECUTION_ERROR THEN
3146 FND_MESSAGE.SET_NAME('EDR','EDR_XMLCALLBACK_API_ERR');
3147 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3148 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3149 FND_MESSAGE.SET_TOKEN('APINAME',SQLERRM||': '||l_xml_generation_api);
3150 --Diagnostics Start
3151 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3152 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3153 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3154 FALSE
3155 );
3156 end if;
3157 --Diagnostics End
3158 APP_EXCEPTION.RAISE_EXCEPTION;
3159 return EDR_CONSTANTS_GRP.g_error_status;
3160 -- Bug 3960236 : end
3161
3162
3163 WHEN EMPTY_XML_DOCUMENT THEN
3164 FND_MESSAGE.SET_NAME('EDR','EDR_XMLCALLBACK_EMPTY_ERR');
3165 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3166 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3167 FND_MESSAGE.SET_TOKEN('APINAME',SQLERRM);
3168 --Diagnostics Start
3169 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3170 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3171 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3172 FALSE
3173 );
3174 end if;
3175 --Diagnostics End
3176 APP_EXCEPTION.RAISE_EXCEPTION;
3177 return EDR_CONSTANTS_GRP.g_error_status;
3178 -- Bug 3960236 : end
3179
3180 --Bug 5724159 :start
3181 --define a new exception to throw error message when there are no approvers, Signature mode is SHORT
3182 --and the Adhoc Signer capability is ALL or ADHOC.
3183 WHEN NO_SIGNERS_DEF_FOR_LITE_MODE THEN
3184 FND_MESSAGE.SET_NAME('EDR','EDR_NO_SIGNER_DEF_ERR');
3185 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3186 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3187 --Diagnostics Start
3188 if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3189 FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3190 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3191 FALSE
3192 );
3193 end if;
3194 --Diagnostics End
3195 APP_EXCEPTION.RAISE_EXCEPTION;
3196 return EDR_CONSTANTS_GRP.g_error_status;
3197 --Bug 5724159 :End
3198
3199 when others then
3200 Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', p_event.getEventName(), p_subscription_guid);
3201 wf_event.setErrorInfo(p_event,SQLERRM || 'ERROR');
3202 FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
3203 FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
3204 FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
3205 FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','PSIG_RULE');
3206 --Diagnostics Start
3207 if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3208 FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3209 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3210 FALSE
3211 );
3212 end if;
3213 --Diagnostics End
3214
3215 APP_EXCEPTION.RAISE_EXCEPTION;
3216 return EDR_CONSTANTS_GRP.g_error_status;
3217
3218 end PSIG_RULE;
3219
3220 end EDR_PSIG_RULE;