DBA Data[Home] [Help]

PACKAGE BODY: APPS.EDR_PSIG_RULE

Source


1 PACKAGE BODY EDR_PSIG_RULE AS
2 /* $Header: EDRRULEB.pls 120.22.12010000.2 2008/12/09 20:18:51 srpuri 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     -- bug 7154935
2249     -- Added OR condition to fix eRecord Generation issue when Force ERecord
2250     -- is used but no rule is defined.
2251     --ER # 2966866 start
2252     if (l_inter_event_mode = 'Y' and l_relationship = EDR_CONSTANTS_GRP.g_erecord_only)
2253        OR (l_force_erecord = 'Y' and l_ruleids.count = 0)
2254     then
2255       l_trans_value_only := 'Y';
2256       -- SRPURI : Bug fix 3168963 Added following code
2257       -- Deletes data in Rule Id and rulename arrays as these are not used if relationship between
2258       -- events is 'ERECORD_ONLY' and initialize array with dummay values assumin -1 never be a valid
2259       -- row in EDR_AMERULE_INPUT_VAR and null for rule name since we need to pass rulename to
2260       -- get AME input variable values call
2261       -- following statements are valid only when relationship between events is 'ERECORD_ONLY'
2262       -- if you are planning to use this if you are planning to overload this if condition for
2263       -- some other purpose make sure it is not breaking ERECORD_ONLY Functionality
2264       l_ruleids.delete;
2265       l_rulenames.delete;
2266       l_ruleids(1) := -1;
2267       l_rulenames(1) := Null;
2268       --
2269       -- when event 2 is raised in the context of event 1 and subscription parameter is
2270       -- event1=ERECORD_ONLY then we need to capture eRecord unconditionaly
2271       -- by setting l_erecord_required = 'Y' we will achieve this.
2272       --
2273       l_erecord_required := 'Y';
2274       wf_log_pkg.string(3, 'EDR_PSIG_rule.psig_rule','Get Only the input variables at txn level');
2275     end if;
2276     --ER # 2966866 end
2277 
2278     for i in 1..l_ruleids.count loop
2279 
2280       --ER # 2966866 start
2281       if (l_trans_value_only = 'Y') then
2282         l_rule_id := -1;
2283       else
2284         l_rule_id := l_ruleids(i);
2285       end if;
2286 
2287       wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Rule_id: '||l_ruleids(i)||' Rule '||l_rulenames(i));
2288 
2289       -- Bug 3214495 : Start
2290 
2291       EDR_STANDARD.GET_AMERULE_INPUT_VARIABLES( transactiontypeid =>NVL(l_ame_transaction_type,P_EVENT.getEventName( )),
2292                                                 ameruleid =>l_ruleids(i),
2293                                                 amerulename=>l_rulenames(i),
2294                                                 ameruleinputvalues=>l_rulevalues);
2295 
2296       -- Bug 3214495 : End
2297 
2298       wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Total Input Values '||l_rulevalues.count );
2299       if l_rulevalues.count > 0 then
2300         for i in 1..l_rulevalues.count loop
2301           if l_rulevalues(i).input_name = 'ESIG_REQUIRED' then
2302             l_rule_esign_required:=upper(l_rulevalues(i).input_value);
2303             if ( upper(l_esign_required)='N' and l_rule_esign_required ='Y') then
2304               l_esign_required:= l_rule_esign_required;
2305             end if;
2306           elsif l_rulevalues(i).input_name = 'EREC_REQUIRED' then
2307             l_rule_erecord_required:=upper(l_rulevalues(i).input_value);
2308             if ( upper(l_erecord_required)='N' and l_rule_erecord_required ='Y') then
2309               l_erecord_required:= l_rule_erecord_required;
2310             end if;
2311           elsif l_rulevalues(i).input_name = 'EREC_STYLE_SHEET' then
2312             l_temp_style_sheet:= l_rulevalues(i).input_value;
2313             -- Bug 3761813 : start
2314           elsif l_rulevalues(i).input_name = 'REDLINE_REQUIRED' then
2315             l_redline_required := upper(l_rulevalues(i).input_value);
2316             -- Bug 3761813 : end
2317           elsif l_rulevalues(i).input_name = 'EREC_STYLE_SHEET_VER' then
2318             l_temp_style_sheet_ver:= l_rulevalues(i).input_value;
2319           -- Bug 3161859 : Start
2320           elsif l_rulevalues(i).input_name = 'CHANGE_SIGNERS' then
2321             l_change_signer_defined := 'Y';
2322             if ( upper(l_change_signer)='ADHOC' and upper(l_rulevalues(i).input_value) ='NONE') then
2323               l_change_signer:= l_rulevalues(i).input_value;
2324             elsif ( upper(l_change_signer)='ALL' and upper(l_rulevalues(i).input_value) ='NONE') then
2325               l_change_signer:= l_rulevalues(i).input_value;
2326             elsif ( upper(l_change_signer)='ALL' and upper(l_rulevalues(i).input_value) ='ADHOC') then
2327               l_change_signer:= l_rulevalues(i).input_value;
2328             end if;
2329           -- Bug 3161859 : End
2330 
2331           --Bug 4160412: Start
2332           --Get the signature mode parameter if found.
2333           elsif l_rulevalues(i).input_name = EDR_CONSTANTS_GRP.G_SIGNATURE_MODE then
2334             l_temp_signature_mode := l_rulevalues(i).input_value;
2335           --Bug 4160412: End
2336           end if;
2337         end loop;
2338       end if;
2339       -- Begin Bug 3334148
2340       -- Determine if sytlesheet belongs to most deterministic Rule
2341       -- Bug 3456530 : Start
2342       if (l_rule_erecord_required ='Y' and l_esign_required ='N') then
2343       -- Bug 3456530 : End
2344         l_style_sheet:=l_temp_style_sheet;
2345         l_style_sheet_ver:=l_temp_style_sheet_ver;
2346       end if;
2347       if l_rule_esign_required ='Y' then
2348         l_style_sheet:=l_temp_style_sheet;
2349         l_style_sheet_ver:=l_temp_style_sheet_ver;
2350 
2351         --Bug 4160412: Start
2352         l_signature_mode := l_temp_signature_mode;
2353         --Bug 4160412: End
2354       end if;
2355       --End Bug 3334148
2356       --Start Bug 5158772
2357       IF l_force_erecord  = 'Y' then
2358        l_style_sheet := l_temp_style_sheet;
2359        l_style_sheet_ver := l_temp_style_sheet_ver;
2360        wf_log_pkg.string(3, 'EDR_PSIG_rule.psig_rule','Force Ereocrd setting style sheet and version');
2361      end if;
2362       --End Bug 5158772
2363     end loop;
2364 
2365     -- Bug 3161859 : Start
2366     if (l_change_signer_defined = 'N') then
2367       l_change_signer:= 'NONE';
2368     end if;
2369     -- Bug 3161859 : End
2370 
2371     --ER # 2966866 start
2372     if (l_inter_event_mode = 'Y' and(l_relationship = EDR_CONSTANTS_GRP.g_erecord_only OR
2373         l_relationship = EDR_CONSTANTS_GRP.g_ignore_signature )) then
2374 
2375       l_esign_required := 'N';
2376       -- Bug : 3499326 - start
2377       l_style_sheet := l_temp_style_sheet;
2378       l_style_sheet_ver := l_temp_style_sheet_ver;
2379       -- Bug : 3499326 - end
2380 
2381       wf_log_pkg.string(3, 'EDR_PSIG_rule.psig_rule','Inter Event Mode and No eSignature');
2382     end if;
2383     --ER # 2966866 end
2384 
2385 
2386     -- Bug 3170251 : Start Get the File Extension of Template Associated with this event
2387     -- Bug 3456399 : Start - get the last three characters from file name
2388     L_STYLE_SHEET_TYPE := UPPER(SUBSTR(L_STYLE_SHEET,LENGTH(L_STYLE_SHEET)-2,LENGTH(L_STYLE_SHEET)));
2389     -- Bug 3456399 : End
2390     --Bug: 3170251 : End
2391 
2392     wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Signature Required :'||l_esign_required);
2393     wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','eRecord Required   :'||l_erecord_required);
2394     wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Style Sheet :'||l_style_sheet);
2395     wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','StyleSheet Version :'||l_style_sheet_ver);
2396     wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','StyleSheet repository :'||l_style_sheet_repository);
2397 
2398     --Diagnostics Start
2399     if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2400       FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_PARAM_LIST_EVT');
2401       FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2402       FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2403       FND_MESSAGE.SET_TOKEN('ESIG_VALUE',l_esign_required);
2404       FND_MESSAGE.SET_TOKEN('EREC_VALUE',l_erecord_required);
2405       FND_MESSAGE.SET_TOKEN('STYLE_SHEET',l_style_sheet);
2406       FND_MESSAGE.SET_TOKEN('STYLE_VER',l_style_sheet_ver);
2407       FND_MESSAGE.SET_TOKEN('STYLE_REP',l_style_sheet_repository);
2408       FND_MESSAGE.SET_TOKEN('XML_MAP_CODE',l_xml_map_code);
2409       FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2410                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2411                       FALSE
2412                      );
2413     end if;
2414     --Diagnostics End
2415 
2416 
2417     --Bug 4150616: Start
2418     --We want to create the e-record for any the following conditions being true.
2419     --1. ESIG_REQUIRED = Y
2420     --2. EREC_REQUIRED = Y
2421     --3. Subscription parameter FORCE_ERECORD = Y
2422     IF (upper(l_esign_required)='Y' OR upper(l_erecord_required)='Y' or l_force_erecord = 'Y') THEN
2423       /* Read  the Require Parameter */
2424 
2425       --If this condition is true then it means that the e-record is being created
2426       --because FORCE_ERECORD is set to Y and either the profile option is switched off
2427       --or (ESIG_REQUIRED=N and EREC_REQUIRED = N).
2428       --Hence we would add an addittional  parameter to the event payload which in
2429       --turn is added to the doc params which indicates that the e-record is being
2430       --created because FORCE_ERECORD is set to Y.
2431       --This parameter is named "FORCE_ERECORD_USED".
2432       if l_eres_profile_value = 'N' OR (upper(l_esign_required) = 'N' and upper(l_erecord_required) = 'N') then
2433         wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_FORCE_ERECORD_USED,'Y',p_event.Parameter_List);
2434       end if;
2435       --Bug 4150616: End
2436 
2437       l_audit_group  := NVL(wf_event.getValueForParameter('EDR_AUDIT_GROUP',p_event.Parameter_List),
2438                             P_EVENT.getEventName( ));
2439 
2440       wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','XML Map Code :'||l_xml_map_code );
2441       wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Audit Group  :'||l_audit_group );
2442       wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','Setting ECX parameter');
2443 
2444       /* Set Additional Parameters required by Esignature */
2445       /* wf_event.AddParameterToList('SUB_GUID', p_subscription_guid,p_event.Parameter_List);  Subscription ID */
2446       wf_event.AddParameterToList('ECX_MAP_CODE', l_xml_map_code,p_event.Parameter_List); /* XML Map Code*/
2447       wf_event.AddParameterToList('ECX_DOCUMENT_ID', P_EVENT.getEventKey( ),p_event.Parameter_List); /* XML Document ID*/
2448       wf_event.AddParameterToList('TEXT_XSLNAME', l_style_sheet,p_event.Parameter_List); /* Style Sheet*/
2449       wf_event.AddParameterToList('TEXT_XSLVERSION', l_style_sheet_ver,p_event.Parameter_List); /* Style Sheet*/
2450       wf_event.AddParameterToList('HTML_XSLNAME', NULL,p_event.Parameter_List); /* Style Sheet*/
2451       wf_event.AddParameterToList('HTML_XSLVERSION', NULL,p_event.Parameter_List); /* Style Sheet*/
2452       wf_event.AddParameterToList('APPLICATION_CODE', lower(l_application_code),p_event.Parameter_List); /* Style Sheet*/
2453       wf_event.AddParameterToList('EDR_SIGN_REQUIRED', l_esign_required,p_event.Parameter_List); /* Signature Required*/
2454       wf_event.AddParameterToList('EDR_EREC_REQUIRED', l_erecord_required,p_event.Parameter_List); /* eRecord Required*/
2455       --Bug 3761813 : start
2456       wf_event.AddParameterToList('REDLINE_REQUIRED',  nvl(l_redline_required,'N'),p_event.Parameter_List); /* redline Required*/
2457       --Bug 3761813 : END
2458 
2459       -- Bug 3161859 : Start
2460       -- this parameter would be used to show whether or not to display
2461       -- the Update Signer button wouuld be enabled or disabled
2462       wf_event.AddParameterToList('EDR_CHANGE_SIGNERS', l_change_signer,p_event.Parameter_List); /* Change Signer Required*/
2463       -- Bug 3161859 : End
2464 
2465       -- Bug 3170251 : Start - Store EREC_TEMPLATE_TYPE in the event parameter list so that its available throughout
2466       --               the rule function and pageflow till the workflow is alive for this event
2467       wf_event.AddParameterToList('EREC_TEMPLATE_TYPE', l_style_sheet_type,p_event.Parameter_List); /* Template Type */
2468       -- Bug 3170251 : End
2469 
2470        -- Bug 5158510 :start
2471        wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_SIGNATURE_MODE, l_signature_mode,p_event.Parameter_List);
2472        -- Bug 5158510 :end
2473       wf_log_pkg.string(1, 'EDR_PSIG_RULE.psig_rule','ECX  Parameter set have been set' );
2474 
2475       /* Generate XML Document */
2476       wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Calling ECX Standard package to generate XML' );
2477       -- Bug 3960236 : Start
2478       -- Fetch the payload parameter
2479          L_XML_GENERATION_API := wf_event.getValueForParameter('XML_GENERATION_API',p_event.Parameter_List);
2480 
2481       -- Bug 3960236 : end
2482       --Bug 3667036 : Start
2483       --if event data is not null then don't call XML gateway again
2484       if dbms_lob.getlength(l_event_data) > 0 then
2485         L_XML_DOCUMENT := l_erecord_data;
2486       -- Bug 3960236 : Start
2487       elsif L_XML_GENERATION_API is NOT NULL then
2488         -- Check if call back function has been passed to generate XML document by product team
2489         begin
2490             --bug 4730592: start
2491             --changed the way the callback api is called dynamically
2492             --L_SQL_STR:= 'select '|| l_xml_generation_api || ' from dual';
2493             --execute immediate L_SQL_STR into L_XML_DOCUMENT;
2494             execute immediate 'begin :1:= '||l_xml_generation_api ||'; end;'
2495             using out l_xml_document;
2496             --bug 4730592: end
2497             if  l_XML_DOCUMENT is NULL then
2498                 raise EMPTY_XML_DOCUMENT;
2499             end if;
2500         exception
2501         when others then
2502           raise API_EXECUTION_ERROR;
2503         end;
2504 
2505         --Bug 4529417: Start
2506         --We need to obtain the next sequence value from EDR_ERECORDS_S.
2507 
2508         --insert the erecord id into the temp table
2509         --This would be picked up by the procedures called by the XML Map for attacments
2510         --Delete the global temp table before inserting a row
2511         delete edr_erecord_id_temp;
2512 
2513         --select Unique event Id to be posted in temp tables
2514         SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL;
2515 
2516         INSERT into edr_erecord_id_temp (document_id) values (l_edr_Event_id);
2517 
2518         --Obtain the attachment string parameter.
2519         l_attachment_string_details := wf_event.getValueForParameter('EDR_PSIG_ATTACHMENT',p_event.Parameter_List);
2520 
2521         --If the attachment string exists then call the attachment API to create the attachments.
2522         if l_attachment_string_details is not null then
2523           EDR_ATTACHMENTS_GRP.ADD_ERP_ATTACH(p_attachment_string => l_attachment_string_details);
2524         end if;
2525         --Bug 4529417: End
2526 
2527 
2528 
2529 
2530        -- Bug 3960236 : end
2531       else
2532         --otherwise call XML gateway
2533         --insert the erecord id into the temp table
2534         --This would be picked up by the procedures called by the XML Map for attacments
2535         --Delete the global temp table before inserting a row
2536         delete edr_erecord_id_temp;
2537 
2538         --select Unique event Id to be posted in temp tables
2539         SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL;
2540 
2541 
2542         --Bug 3761813 : start
2543         --Bug 4306292: Start
2544         --Commenting changes made for red lining.
2545 
2546           if ( nvl(l_redline_required,'N') = 'Y') then
2547             l_snapstatus:= PRE_TX_SNAPSHOT(l_edr_Event_id,l_xml_map_code,P_EVENT.getEventKey());
2548             wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','After Calling Snapshot to generate XML'||P_EVENT.getEventKey( ));
2549           END IF;
2550         --Bug 4306292: End
2551         --   Bug 3761813 : end
2552 
2553         INSERT into edr_erecord_id_temp (document_id) values (l_edr_Event_id);
2554         wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','eRecord id: '||l_edr_Event_id||' has been sent to ECX');
2555 
2556         L_XML_DOCUMENT:=ECX_STANDARD.GENERATE(p_event_name     => P_EVENT.getEventName(),
2557                                               p_event_key      => P_EVENT.getEventKey(),
2558                                               p_parameter_list => p_event.Parameter_List);
2559 
2560         --Diagnostics Start
2561         if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2562           FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_ECX_GEN_EVT');
2563           FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2564           FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2565           FND_MESSAGE.SET_TOKEN('XML_MAP_CODE',l_xml_map_code);
2566           FND_MESSAGE.SET_TOKEN('TRANS','DB TO XML');
2567           FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2568                           'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2569                           FALSE
2570                          );
2571         end if;
2572         --Diagnostics End
2573 
2574       end if;
2575       --Bug 3667036 : End
2576 
2577       wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','XML Document Generated' );
2578 
2579       --Bug 5724159  :Start
2580 	    --When the number of approvers is 0,Adhoc signer capability is ALL or ADHOC and the
2581 	    --Signature mode is SHORT,Error message needs to displayed. E-Record will not be captured in this scenario.
2582       IF(approverlist.count=0 and l_change_signer_defined ='Y' AND  l_change_signer <>'NONE' and l_signature_mode='SHORT') THEN
2583           RAISE NO_SIGNERS_DEF_FOR_LITE_MODE;
2584       END IF;
2585      --Bug 5724159  :End
2586 
2587       --Bug 3437422: Start
2588       --call an api that would find out of the xml contains the user_data
2589       --placeholder and replace it with the actual contents of the user_data
2590       --node.
2591       edr_utilities.replace_user_data_token(l_xml_document);
2592       --Bug 3437422: End
2593       --To make eRecord generation storing autonomous
2594       --Moved all of the following code in this IF clause
2595       --to STROE_ERECORD Local Procedure
2596       --
2597       -- Bug Fix 3143107
2598       -- Removed elsif l_erecord_required = Y clause as we already know that
2599       -- we need to generate eRecord irrespective of l_erecord_required value
2600       -- we will use l_esign_required required in STORE_ERECORD to move the eRecord
2601       -- status to 'COMPLETE'(l_esign_required = 'N') or 'ERROR' (l_esign_required ='Y')
2602 
2603       STORE_ERECORD(p_XML_DOCUMENT            => l_XML_DOCUMENT,
2604                     p_style_sheet_repository  => l_style_sheet_repository,
2605                     p_style_sheet             => l_style_sheet,
2606                     p_style_sheet_ver         => l_style_sheet_ver,
2607                     p_application_code        => l_application_code,
2608                     p_edr_event_id            => l_edr_event_id ,
2609                     p_esign_required          => l_esign_required,
2610                     p_subscription_guid       => p_subscription_guid,
2611                     x_event                   => p_event);
2612       --Bug 4590037
2613       --Set the XML document to CLOB datatype of the event
2614       P_EVENT.setEventData(L_XML_DOCUMENT);
2615       --Bug 4590037
2616 
2617       --Bug 4150616: Start
2618       --Start the workflow process only if the profile option is switched on.
2619       IF upper(l_esign_required)='Y' and l_eres_profile_value = 'Y' THEN
2620       --Bug 4150616: End
2621 
2622         --Bug 3761813 : start
2623         --Bug 4306292: Start
2624         --Commenting changes made for red lining.
2625          if (l_style_sheet_type = 'XSL' and nvl(l_redline_required,'N') = 'Y' ) then
2626             select DIFF_XML into L_XML_DOCUMENT  from EDR_REDLINE_TRANS_DATA  where EVENT_ID  = l_edr_event_id ;
2627             -- Bug 5167207  : start
2628             --Set the XML document to CLOB datatype of the event
2629             P_EVENT.setEventData(L_XML_DOCUMENT);
2630             -- Bug 5167207  : end
2631          end if;
2632         --Bug 4306292: End
2633         --Bug 3761813 : end
2634 
2635         wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','XML Document Set to event Data' );
2636 
2637         /* GET Approver List.
2638         ame_api.getAllApprovers(applicationIdIn=>l_application_Id,
2639                                 transactionIdIn=>P_EVENT.getEventKey( ),
2640                                 transactionTypeIn=>NVL(l_ame_transaction_type,P_EVENT.getEventName( )),
2641                                 approversOut=>approverList); */
2642 
2643         --Diagnostics Start
2644         if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2645           FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_APPROVER_COUNT_EVT');
2646           FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2647           FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2648           FND_MESSAGE.SET_TOKEN('COUNT',approverList.count);
2649           FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2650                           'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2651                           FALSE
2652                          );
2653         end if;
2654         --Diagnostics End
2655         --Bug 5724159  : Start
2656           /*check whether number of approvers is zero,Change signer property is defined and its value is
2657             NONE, List Of signers should not be launched in this scenario, return success*/
2658 
2659 	IF (approverList.count=0 AND l_change_signer_defined ='Y' AND  l_change_signer ='NONE') THEN
2660 	     return 'SUCCESS' ;
2661 	 END IF;
2662        --Bug 5724159  : End
2663 
2664         -- BUG 3567868 Start
2665         -- IF No Approver but Change Signer is 'ADHOC' or 'ALL'
2666         IF ( (approverList.count > 0)  OR (upper(l_change_signer_defined) = 'Y') or l_lite_mode) THEN
2667           -- BUG  3567868 END
2668 
2669 
2670           --Bug 4577122: Start
2671           --validate the voting regime and then proceed
2672           validate_voting_regime
2673           (
2674                  p_approver_list => approverList,
2675                  x_valid_regime  => l_valid_regime,
2676                  x_voting_regime => l_voting_regime
2677           );
2678 
2679           if (l_valid_regime = 'N') then
2680               raise INVALID_FIRST_VOTER_WINS_SETUP;
2681           else
2682              if (l_voting_regime <> ame_util.firstApproverVoting ) then
2683                     l_voting_regime := 'X';
2684              end if;
2685 
2686              --set the voting regime on the workflow attribute
2687              wf_event.AddParameterToList
2688                   ('AME_VOTING_REGIME', l_voting_regime,p_event.Parameter_List);
2689 
2690           end if;
2691           --Bug 4577122: End
2692 
2693           --Bug 4160412: Start
2694           --Check the value of signature mode.
2695           --If it is set to lite then, fetch the value of the attributes APPROVING_USERS,
2696           --APPROVER_COUNT and APPROVING RESPONSIBILITY.
2697           --Bug 5891879 :Start
2698 	  --Defaults Signature mode to SHORT when the src application type is KIOSK
2699             IF l_source_application_type = EDR_CONSTANTS_PUB.g_kiosk_mode then
2700              l_signature_mode := EDR_CONSTANTS_GRP.G_ERES_LITE;
2701             end if;
2702 	  --Bug 5891879 :End
2703 
2704           --Bug 4543216: Start
2705           if l_signature_mode = EDR_CONSTANTS_GRP.G_ERES_LITE then
2706           --Bug 4543216: Start
2707 
2708             --Diagnostics Start
2709             if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2710               FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_SIGN_MODE_EVT');
2711               FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2712               FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2713               FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2714                               'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2715                               FALSE
2716                              );
2717             end if;
2718             --Diagnostics End
2719 
2720             l_einitials_defer_mode := 'Y';
2721             wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_SIGNATURE_MODE, l_signature_mode,p_event.Parameter_List);
2722             l_approver_count := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_APPROVER_COUNT,p_event.Parameter_List);
2723             l_approver_list := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_APPROVER_LIST,p_event.Parameter_List);
2724 
2725             --If approver_count and approving users are set, then raise an exception.
2726             if l_approver_count is not null and l_approver_list is not null then
2727               RAISE APPROVING_USERS_PARAMS_ERR;
2728             end if;
2729 
2730             --If approving users are set, then fetch the approver list from the comma separated string.
2731             if l_approver_list is not null then
2732 
2733               --Diagnostics Start
2734               if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2735                 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_APPR_LIST_EVT');
2736                 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2737                 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2738                 FND_MESSAGE.SET_TOKEN('APPROVER_LIST',l_approver_list);
2739                 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2740                                 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2741                                 FALSE
2742                                );
2743               end if;
2744               --Diagnostics End
2745 
2746               EDR_UTILITIES.GET_APPROVER_LIST(P_APPROVING_USERS     => L_APPROVER_LIST,
2747                                               X_APPROVER_LIST       => L_CUSTOM_APPROVER_LIST,
2748                                               X_ARE_APPROVERS_VALID => L_ARE_APPROVERS_VALID,
2749                                               X_INVALID_APPROVERS   => L_INVALID_APPROVERS);
2750 
2751               l_repeating_approvers := EDR_UTILITIES.ARE_APPROVERS_REPEATING(P_APPROVER_LIST => L_CUSTOM_APPROVER_LIST);
2752 
2753               --If there are repeating approvers then raise an exception
2754               if l_repeating_approvers then
2755                 raise REPEATING_APPROVERS_ERR;
2756               end if;
2757 
2758               --If the approvers are invalid then raise an exception.
2759               if l_are_approvers_valid = 'N' then
2760                 RAISE INVALID_APPROVING_USERS;
2761               end if;
2762               approverlist := L_CUSTOM_APPROVER_LIST;
2763 
2764               for l_list_count in 1..approverlist.count loop
2765                 if instr(approverlist(l_list_count).name,'#') = 1 then
2766                   wf_event.addParameterToList(EDR_CONSTANTS_GRP.G_DO_RESPS_EXIST,'Y',p_event.Parameter_List);
2767                   l_einitials_defer_mode := 'N';
2768                   exit;
2769                 end if;
2770               end loop;
2771             end if;
2772 
2773             if l_approver_count is not null then
2774 
2775               --Diagnostics Start
2776               if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2777                 FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_APPR_COUNT_EVT');
2778                 FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2779                 FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2780                 FND_MESSAGE.SET_TOKEN('APPROVER_COUNT',l_approver_count);
2781                 FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2782                                 'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2783                                 FALSE
2784                                );
2785               end if;
2786               --Diagnostics End
2787 
2788               --Approver Count has been specified
2789               --Convert it into a number type.
2790               BEGIN
2791                  l_approver_count_value := to_number(l_approver_count,'999999999999');
2792                  --If approver count is less then 0 then raise an error.
2793                  if l_approver_count_value < 0 then
2794                    raise INVALID_APPR_COUNT_VALUE_ERR;
2795                  end if;
2796                  EXCEPTION
2797                  --Approver Count attribute was a not a valid number. Hence raise an exception.
2798                  WHEN VALUE_ERROR THEN
2799                    RAISE INVALID_APPR_COUNT_ERR;
2800               END;
2801 
2802 
2803               --Make null entries in the approver list table type.
2804               for l_list_count in 1..l_approver_count_value loop
2805                 L_CUSTOM_APPROVER_LIST(l_list_count).name := null;
2806                 L_CUSTOM_APPROVER_LIST(l_list_count).approver_order_number := l_list_count;
2807                 approverList := L_CUSTOM_APPROVER_LIST;
2808               end loop;
2809 
2810               l_einitials_defer_mode := 'N';
2811 
2812             end if;
2813 
2814             --If approver count is zero, then do not start the pageflow process.
2815             --This is because adhoc functionality is not supported in EINITIALS.
2816             if approverList.count = 0 then
2817               return 'SUCCESS';
2818             end if;
2819 
2820             --Evaluate the einitials deferred mode variable.
2821             if l_einitials_defer_mode = 'Y' then
2822               l_eres_defer_mode := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_DEFERRED_PARAM,p_event.Parameter_List);
2823               if l_eres_defer_mode is null or l_eres_defer_mode <> 'Y' then
2824                 l_einitials_defer_mode := 'N';
2825               end if;
2826             END IF;
2827 
2828             --Diagnostics Start
2829             if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2830               FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_DEFER_MODE_EVT');
2831               FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2832               FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2833               FND_MESSAGE.SET_TOKEN('DEFER_MODE',l_einitials_defer_mode);
2834               FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2835                               'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2836                               FALSE
2837                              );
2838             end if;
2839             --Diagnostics End
2840 
2841             --Add the e-initials deferred mode variable to the event.
2842             wf_event.AddParameterToList(EDR_CONSTANTS_GRP.G_EINITIALS_DEFER_MODE,l_einitials_defer_mode,p_event.Parameter_List);
2843           END IF;
2844           --Bug 4160412: End
2845 
2846 
2847           /* select Unique event Id to be posted in temp tables */
2848           /* 24-FEB-2003: CJ: commented one line below as the erecord id is already available
2849           in the local variable and added a line to delete the erecord id from temp
2850           table */
2851           /* SELECT EDR_ERECORDS_S.NEXTVAL into l_edr_Event_id from DUAL; */
2852           /* 24-FEB-2003: CJ : end */
2853           /* Set this value to correlation_id to be used by WF_RULE.DEFAULT_RULE funciton */
2854           P_EVENT.SETCORRELATIONID(l_edr_event_id);
2855           /* Select the workflow process for the subscription */
2856           select wf_process_type,wf_process_name
2857             into   l_wftype, l_wfprocess
2858             from   wf_event_subscriptions
2859             where  guid = p_subscription_guid;
2860 
2861           wf_event.AddParameterToList('#WF_PAGEFLOW_ITEMTYPE', l_wftype,p_event.Parameter_List); /* Page Flow Workflow type*/
2862           wf_event.AddParameterToList('#WF_PAGEFLOW_ITEMPROCESS', l_wfprocess,p_event.Parameter_List); /* Page Flow Workflow process*/
2863           wf_event.AddParameterToList('#WF_PAGEFLOW_ITEMKEY', l_edr_event_id,p_event.Parameter_List); /* Item Key*/
2864 
2865           /* CAll Page Flow Creation API */
2866           wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Calling Page Flow Creation Procedure');
2867 
2868           --Diagnostics Start
2869           if (FND_LOG.LEVEL_EVENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2870             FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_WF_PARAMS_EVT');
2871             FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
2872             FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
2873             FND_MESSAGE.SET_TOKEN('ITEM_TYPE',l_wftype);
2874             FND_MESSAGE.SET_TOKEN('ITEM_KEY',l_edr_event_id);
2875             FND_MESSAGE.SET_TOKEN('PROCESS',l_wfprocess);
2876             FND_LOG.MESSAGE(FND_LOG.LEVEL_EVENT,
2877                             'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2878                             FALSE
2879                            );
2880           end if;
2881           --Diagnostics End
2882 
2883           --Bug 4122622: Start
2884           --Obtain the value of the comma separated child e-record ID string.
2885           l_child_erecord_ids := wf_event.getValueForParameter(EDR_CONSTANTS_GRP.G_CHILD_ERECORD_IDS,p_event.Parameter_List);
2886 
2887           --Set the approriate flags based on this value.
2888           if l_child_erecord_ids is not null then
2889             if instr(l_child_erecord_ids,',') > 0 then
2890               l_child_erecord_ids_set := true;
2891             else
2892               l_child_erecord_id_set := true;
2893             end if;
2894           end if;
2895 
2896           --Set the approriate flags based on the parent e-record id.
2897           if(l_parent_erecord_id is not null and l_parent_erecord_id <> EDR_CONSTANTS_GRP.g_default_num_param_value) then
2898             l_parent_erecord_id_set := true;
2899           end if;
2900 
2901           --Set the related e-record IDs URLs based on the flags.
2902           if l_parent_erecord_id_set then
2903             if l_child_erecord_id_set then
2904 
2905               l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_RELATED_ERECORDS_VIEW&retainAM=Y&parentERecordId='||
2906                        l_parent_erecord_id||'&childERecordIds='||l_child_erecord_ids||'&addBreadCrumb=Y';
2907 
2908             elsif l_child_erecord_ids_set then
2909               l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_RELATED_ERECORDS_VIEW&edrNotifId=-&#NID-&retainAM=Y'||
2910                        '&parentERecordId='||l_parent_erecord_id||'&addBreadCrumb=Y';
2911             else
2912 
2913               l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_ERECORD_DETAILS_VIEW&retainAM=Y' ||
2914                        '&relatedERecordType=PARENT&fromNotifPG=Y&eRecordId='||l_parent_erecord_id;
2915             end if;
2916 
2917           elsif l_child_erecord_ids_set then
2918 
2919             l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_RELATED_ERECORDS_VIEW&edrNotifId=-&#NID-&retainAM=Y&addBreadCrumb=Y';
2920 
2921           elsif l_child_erecord_id_set then
2922 
2923             l_url := 'JSP:/OA_HTML/OA.jsp?OAFunc=EDR_ERECORD_DETAILS_VIEW&retainAM=Y' ||
2924                      '&relatedERecordType=CHILD&fromNotifPG=Y&eRecordId='||l_child_erecord_ids;
2925 
2926           end if;
2927 
2928           wf_event.AddParameterToList('RELATED_ERECORDS',l_url,p_event.Parameter_List);
2929 
2930           --Bug 4122622: End;
2931 
2932           l_return_status:= CREATE_PAGEFLOW(p_event_id             => l_edr_event_id,
2933                                             p_map_code             => l_xml_map_code,
2934                                             p_ame_transaction_type => l_ame_transaction_type,
2935                                             p_audit_group          => l_audit_group,
2936                                             p_eventP               => p_event,
2937                                             p_subscription_guid    => p_subscription_guid,
2938                                             P_approverlist         => approverList,
2939                                             P_ERR_CODE             => l_error,
2940                                             P_ERR_MSG              => l_error_msg);
2941           wf_log_pkg.string(3, 'EDR_PSIG_RULE.psig_rule','Page Flow Returned '||l_return_status);
2942 
2943           IF l_return_status = 'ERROR' OR L_ERROR is not null then
2944             raise PAGE_FLOW_FAILED;
2945           ELSE
2946             RETURN l_return_status;
2947           END IF;
2948 
2949         ELSE
2950           /* No approver Required, Signature Not REquired */
2951           RETURN 'SUCCESS';
2952         END IF;
2953       END IF;
2954     end if;
2955   end if;
2956 
2957   RETURN 'SUCCESS';
2958 
2959 exception
2960   --Bug 4577122: Start
2961   when INVALID_FIRST_VOTER_WINS_SETUP then
2962      FND_MESSAGE.SET_NAME('EDR','EDR_BAD_FRST_VOTER_SETUP');
2963      fnd_message.set_token( 'EVENT', l_error_event);
2964      APP_EXCEPTION.RAISE_EXCEPTION;
2965      return EDR_CONSTANTS_GRP.g_error_status;
2966   --Bug 4577122: End
2967 
2968   when NO_ENABLED_ERES_SUBSCRIPTION THEN
2969     FND_MESSAGE.SET_NAME('EDR','EDR_ERES_SUBSCRIPTION_DISABLED');
2970     fnd_message.set_token( 'EVENT', l_error_event);
2971     --Diagnostics Start
2972     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2973       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
2974                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2975                       FALSE
2976                      );
2977     end if;
2978     --Diagnostics End
2979     APP_EXCEPTION.RAISE_EXCEPTION;
2980     return EDR_CONSTANTS_GRP.g_error_status;
2981 
2982   when NO_ERES_SUBSCRIPTION THEN
2983     FND_MESSAGE.SET_NAME('EDR','EDR_NO_ERES_SUBSCRIPTION');
2984     fnd_message.set_token( 'EVENT', l_error_event);
2985 
2986     --Diagnostics Start
2987     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
2988       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
2989                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
2990                       FALSE
2991                      );
2992     end if;
2993     --Diagnostics End
2994 
2995     APP_EXCEPTION.RAISE_EXCEPTION;
2996     return EDR_CONSTANTS_GRP.g_error_status;
2997 
2998   WHEN MULTIPLE_ERES_SUBSCRIPTIONS THEN
2999     FND_MESSAGE.SET_NAME('EDR','EDR_MULTI_ERES_SUBSCRIPTIONS');
3000     fnd_message.set_token( 'EVENT',l_error_event);
3001     --Diagnostics Start
3002     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3003       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3004                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3005                       FALSE
3006                      );
3007     end if;
3008     --Diagnostics End
3009 
3010     APP_EXCEPTION.RAISE_EXCEPTION;
3011     return EDR_CONSTANTS_GRP.g_error_status;
3012 
3013   when PAGE_FLOW_FAILED then
3014     Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', p_event.getEventName(), p_subscription_guid);
3015     wf_event.setErrorInfo(p_event,SQLERRM || 'ERROR');
3016     FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
3017     FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
3018     FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
3019     FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','PSIG_RULE');
3020     --Diagnostics Start
3021     if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3022       FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3023                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3024                       FALSE
3025                      );
3026     end if;
3027     --Diagnostics End
3028     APP_EXCEPTION.RAISE_EXCEPTION;
3029     return EDR_CONSTANTS_GRP.g_error_status;
3030 
3031   --Bug 3667036: Start
3032   --Catch the XML to XML transformation error.
3033   when ECX_XML_TO_XML_ERROR then
3034     FND_MESSAGE.SET_NAME('EDR','EDR_FWKRULE_XML_TO_XML_ERR');
3035     FND_MESSAGE.SET_TOKEN('EXCEPTION_MESSAGE',l_errbuf);
3036     FND_MESSAGE.SET_TOKEN('LOG',l_log_file);
3037     --Diagnostics Start
3038     if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3039       FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3040                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3041                       FALSE
3042                      );
3043     end if;
3044     --Diagnostics End
3045     APP_EXCEPTION.RAISE_EXCEPTION;
3046     return EDR_CONSTANTS_GRP.g_error_status;
3047   --Bug 3667036: End
3048 
3049   --Bug 3893101: Start
3050   WHEN TRANSFORM_XML_VAR_ERROR then
3051     FND_MESSAGE.SET_NAME('EDR','EDR_FWK_TRANSFORM_XML_VAR_ERR');
3052     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3053     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3054     --Diagnostics Start
3055     if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3056       FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3057                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3058                        FALSE
3059                      );
3060     end if;
3061     --Diagnostics End
3062     APP_EXCEPTION.RAISE_EXCEPTION;
3063     return EDR_CONSTANTS_GRP.g_error_status;
3064   --Bug 3893101: End
3065 
3066   --Bug 4160412: Start
3067   WHEN APPROVING_USERS_PARAMS_ERR THEN
3068     FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_USERS_PARAMS_ERR');
3069     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3070     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3071     --Diagnostics Start
3072     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3073       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3074                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3075                        FALSE
3076                      );
3077     end if;
3078     --Diagnostics End
3079     APP_EXCEPTION.RAISE_EXCEPTION;
3080     return EDR_CONSTANTS_GRP.g_error_status;
3081 
3082   WHEN INVALID_APPROVING_USERS THEN
3083     FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_INVALID_USERS');
3084     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3085     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3086     FND_MESSAGE.SET_TOKEN('APPROVER_NAMES',l_invalid_approvers);
3087     --Diagnostics Start
3088     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3089       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3090                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3091                        FALSE
3092                      );
3093     end if;
3094     --Diagnostics End
3095     APP_EXCEPTION.RAISE_EXCEPTION;
3096     return EDR_CONSTANTS_GRP.g_error_status;
3097 
3098   WHEN REPEATING_APPROVERS_ERR THEN
3099     FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_REPEATING_APPRS');
3100     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3101     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3102     FND_MESSAGE.SET_TOKEN('STRING',l_approver_list);
3103     --Diagnostics Start
3104     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3105       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3106                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3107                        FALSE
3108                      );
3109     end if;
3110     --Diagnostics End
3111     APP_EXCEPTION.RAISE_EXCEPTION;
3112     return EDR_CONSTANTS_GRP.g_error_status;
3113 
3114   WHEN INVALID_APPR_COUNT_ERR THEN
3115      FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_INVALID_APPR_CNT');
3116      FND_MESSAGE.SET_TOKEN('APPROVER_COUNT',l_approver_count);
3117      FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3118      FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3119 
3120     --Diagnostics Start
3121     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3122       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3123                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3124                       FALSE
3125                      );
3126     end if;
3127     --Diagnostics End
3128     APP_EXCEPTION.RAISE_EXCEPTION;
3129     return EDR_CONSTANTS_GRP.g_error_status;
3130 
3131   WHEN INVALID_APPR_COUNT_VALUE_ERR THEN
3132      FND_MESSAGE.SET_NAME('EDR','EDR_EINITIALS_APPR_CNT_ERR');
3133      FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3134      FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3135 
3136     --Diagnostics Start
3137     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3138       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3139                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3140                       FALSE
3141                      );
3142     end if;
3143     --Diagnostics End
3144     APP_EXCEPTION.RAISE_EXCEPTION;
3145     return EDR_CONSTANTS_GRP.g_error_status;
3146   --Bug 4160412: End
3147 
3148   --Bug 3960236: Start
3149   WHEN API_EXECUTION_ERROR THEN
3150     FND_MESSAGE.SET_NAME('EDR','EDR_XMLCALLBACK_API_ERR');
3151     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3152     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3153     FND_MESSAGE.SET_TOKEN('APINAME',SQLERRM||': '||l_xml_generation_api);
3154     --Diagnostics Start
3155     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3156       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3157                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3158                        FALSE
3159                      );
3160     end if;
3161     --Diagnostics End
3162     APP_EXCEPTION.RAISE_EXCEPTION;
3163     return EDR_CONSTANTS_GRP.g_error_status;
3164     -- Bug 3960236 : end
3165 
3166 
3167   WHEN EMPTY_XML_DOCUMENT THEN
3168     FND_MESSAGE.SET_NAME('EDR','EDR_XMLCALLBACK_EMPTY_ERR');
3169     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3170     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3171     FND_MESSAGE.SET_TOKEN('APINAME',SQLERRM);
3172     --Diagnostics Start
3173     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3174       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3175                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3176                        FALSE
3177                      );
3178     end if;
3179     --Diagnostics End
3180     APP_EXCEPTION.RAISE_EXCEPTION;
3181     return EDR_CONSTANTS_GRP.g_error_status;
3182    -- Bug 3960236 : end
3183 
3184   --Bug 5724159  :start
3185   --define a new exception to throw error message when there are no approvers, Signature mode is SHORT
3186   --and the Adhoc Signer capability is ALL or ADHOC.
3187   WHEN NO_SIGNERS_DEF_FOR_LITE_MODE THEN
3188     FND_MESSAGE.SET_NAME('EDR','EDR_NO_SIGNER_DEF_ERR');
3189     FND_MESSAGE.SET_TOKEN('EVENT_NAME',p_event.getEventName());
3190     FND_MESSAGE.SET_TOKEN('EVENT_KEY',p_event.getEventKey());
3191     --Diagnostics Start
3192     if (FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3193       FND_LOG.MESSAGE(FND_LOG.LEVEL_EXCEPTION,
3194                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3195                        FALSE
3196                      );
3197     end if;
3198     --Diagnostics End
3199     APP_EXCEPTION.RAISE_EXCEPTION;
3200     return EDR_CONSTANTS_GRP.g_error_status;
3201    --Bug 5724159  :End
3202 
3203   when others then
3204     Wf_Core.Context('EDR_PSIG_RULE', 'PSIG_RULE', p_event.getEventName(), p_subscription_guid);
3205     wf_event.setErrorInfo(p_event,SQLERRM || 'ERROR');
3206     FND_MESSAGE.SET_NAME('FND','FND_AS_UNEXPECTED_ERROR');
3207     FND_MESSAGE.SET_TOKEN('ERROR_TEXT',nvl(l_error_msg,SQLERRM));
3208     FND_MESSAGE.SET_TOKEN('PKG_NAME','EDR_PSIG_RULE');
3209     FND_MESSAGE.SET_TOKEN('PROCEDURE_NAME','PSIG_RULE');
3210     --Diagnostics Start
3211     if (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) then
3212       FND_LOG.MESSAGE(FND_LOG.LEVEL_UNEXPECTED,
3213                       'edr.plsql.EDR_PSIG_RULE.PSIG_RULE',
3214                       FALSE
3215                      );
3216     end if;
3217     --Diagnostics End
3218 
3219     APP_EXCEPTION.RAISE_EXCEPTION;
3220     return EDR_CONSTANTS_GRP.g_error_status;
3221 
3222 end PSIG_RULE;
3223 
3224 end EDR_PSIG_RULE;