DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_WF_SYNCH

Source


1 PACKAGE BODY HZ_WF_SYNCH AS
2 /* $Header: ARHWFSNB.pls 120.15 2006/06/27 10:15:28 smattegu noship $ */
3 
4 /*===========================================================================+
5  | FUNCTION                                                                  |
6  |              propogate_user_role 					     |
7  |									     |
8  | DESCRIPTION								     |
9  |              Propogates user information to WF API's			     |
10  |									     |
11  | SCOPE - Public							     |
12  |									     |
13  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED				     |
14  |              NONE							     |
15  |									     |
16  | ARGUMENTS  : IN:							     |
17  |               p_subscription_guid      in raw,			     |
18  |									     |
19  |              OUT:							     |
20  |									     |
21  |          IN/ OUT:							     |
22  |               p_event                  in out NOCOPY wf_event_t 	     |
23  |									     |
24  |									     |
25  |									     |
26  | RETURNS    : VARCHAR2						     |
27  |									     |
28  | NOTES								     |
29  |              The create or update relationship should call    	     |
30  |              SynchGroupWFUserRole procedure, which in turn synchs the     |
31  |              work flow tables.                                            |
32  |									     |
33  | MODIFICATION HISTORY							     |
34  |									     |
35  |   03-Jan-2003      Porkodi Chinnandar     Bug 2627161: Modified the code  |
36  |					     to populate proper values before|
37  |					     calling WFSYNCH procedures      |
38  |									     |
39  +===========================================================================*/
40 
41 FUNCTION propagate_user_role(
42                        p_subscription_guid      IN RAW,
43                        p_event                  IN OUT NOCOPY wf_event_t)
44 RETURN VARCHAR2
45 IS
46   l_key                   VARCHAR2(240) := p_event.GetEventKey();
47   l_user_orig_system      VARCHAR2(100) := 'HZ_PARTY';
48   l_user_orig_system_id   NUMBER;
49   l_role_orig_system      VARCHAR2(100) := 'HZ_PARTY';
50   l_role_orig_system_id   NUMBER;
51   l_start_date            DATE DEFAULT NULL;
52   l_expiration_date       DATE DEFAULT NULL;
53   l_relationship_id       NUMBER;
54   l_match_string          VARCHAR2(240) := NULL;
55   id                      NUMBER;
56   l_debug_prefix	    VARCHAR2(30) := '';
57 BEGIN
58   SAVEPOINT propagate_user_role;
59 
60   -- Check if API is called in debug mode. If yes, enable debug.
61   --enable_debug;
62 
63   --Checks for the event and synchs data with the workflow table
64   --by calling propagate_user_role
65   IF (l_key like 'oracle.apps.ar.hz.Relationship.create%')  OR
66      (l_key like 'oracle.apps.ar.hz.Relationship.update%') THEN
67     id := p_event.getValueForParameter('RELATIONSHIP_ID');
68     SynchGroupWFUserRole(id);
69 	 -- Debug info.
70     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
71       hz_utility_v2pub.debug(
72         p_message=>'After calling the propagate_user_role for the relationship_id '||id,
73         p_prefix =>l_debug_prefix,
74         p_msg_level=>fnd_log.level_statement);
75     END IF;
76   END IF; -- chk for Relationship Create or Update Events
77   RETURN 'SUCCESS';
78  EXCEPTION
79    WHEN OTHERS THEN
80      FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
81      FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
82      FND_MSG_PUB.ADD;
83      WF_CORE.CONTEXT('HZ_WF_SYNCH',
84           'propagate_user_role',
85           p_event.getEventName(),
86           p_subscription_guid);
87       WF_EVENT.setErrorInfo(p_event, 'ERROR');
88     ROLLBACK TO propagate_user_role;
89     RETURN 'ERROR';
90 END; -- propagate_user_role()
91 
92 
93 /*===========================================================================+
94  | PROCEDURE								     |
95  |              propogate_role						     |
96  |									     |
97  | DESCRIPTION								     |
98  |              Propogates user information to WF API's			     |
99  |									     |
100  | SCOPE - Public							     |
101  |									     |
102  | EXETERNAL PROCEDURES/FUNCTIONS ACCESSED				     |
103  |		WF_LOCAL_SYNCH						     |
104  |									     |
105  | ARGUMENTS  : IN:							     |
106  |             p_subscription_guid      in raw,				     |
107  |									     |
108  |              OUT:							     |
109  |									     |
110  |          IN/ OUT:							     |
111  |             p_event                  in out NOCOPY wf_event_t |	     |
112  |									     |
113  |									     |
114  |									     |
115  | RETURNS    : NONE							     |
116  |									     |
117  | NOTES								     |
118  |              The create or update of Person/PersonLanguage/OrgContact/    |
119  |              Group/ContactPoint events should call any of the             |
120  |              SynchPersonWFRole/SynchContactWFRole/SynchGroupWFRole or all |
121  |              of them to synch with workflow tables.            	     |
122  |									     |
123  | MODIFICATION HISTORY							     |
124  |									     |
125  |   03-Jan-2003      Porkodi Chinnandar     Bug 2627161: Modified the code  |
126  |					     to populate proper values before|
127  |					     calling WFSYNCH procedures      |
128  |									     |
129  +===========================================================================*/
130 
131 FUNCTION propagate_role(
132    p_subscription_guid      IN RAW,
133    p_event                  IN OUT NOCOPY wf_event_t)
134 RETURN VARCHAR2
135 IS
136   l_key              		VARCHAR2(240) := p_event.GetEventKey();
137   l_orig_system      		VARCHAR2(100) := 'HZ_PARTY';
138   l_orig_system_id   		NUMBER;
139   l_attributes       		wf_parameter_list_t;
140   l_start_date       		DATE DEFAULT NULL;
141   l_expiration_date  		DATE DEFAULT NULL;
142   l_match_string     		VARCHAR2(240) := null;
143   l_primary_lang_indicator 	VARCHAR2(10) := 'N';
144   l_temp_party_id    		NUMBER;
145   wf_party_id        		NUMBER;
146   wf_lang_user_ref_id 	NUMBER;
147   wf_party_type               VARCHAR2(30);
148   wf_party_relationship_id    NUMBER;
149   wf_owner_table_id           NUMBER;
150   l_debug_prefix		    VARCHAR2(30) := '';
151 
152   Cursor find_contacts is
153   select party_id
154   from   hz_relationships rel,
155            hz_org_contacts org
156   where  rel.relationship_id=org.party_relationship_id and
157    Subject_table_name = 'HZ_PARTIES' and
158    Object_table_name  = 'HZ_PARTIES' and
159    Directional_flag = 'F' and
160    subject_id = wf_party_id;
161 
162  	Cursor org_update is
163      select party_id
164      from   hz_relationships rel,
165             hz_org_contacts org
166      where  rel.relationship_id=org.party_relationship_id and
167             Subject_table_name = 'HZ_PARTIES' and
168             Object_table_name  = 'HZ_PARTIES' and
169             Directional_flag = 'F' and
170             object_id = l_match_string;
171 
172 BEGIN
173   SAVEPOINT propagate_role;
174 
175   -- Check if API is called in debug mode. If yes, enable debug.
176   --enable_debug;
177 
178   IF (l_key LIKE 'oracle.apps.ar.hz.Person.create%')   THEN
179 
180     -- Debug info.
181     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
182   		hz_utility_v2pub.debug(
183         p_message=>l_key,
184   			p_prefix =>l_debug_prefix,
185         p_msg_level=>fnd_log.level_statement);
186     END IF;
187 
188     wf_party_id := p_event.getValueForParameter('PARTY_ID');
189     SynchPersonWFRole(wf_party_id);
190 
191     -- Debug info.
192     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
193   		hz_utility_v2pub.debug(
194         p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
195   			p_prefix =>l_debug_prefix,
196         p_msg_level=>fnd_log.level_statement);
197     END IF;
198 
199   ELSIF (l_key LIKE 'oracle.apps.ar.hz.Person.update%')   THEN
200     -- Debug info.
201     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
202   		hz_utility_v2pub.debug(
203         p_message=>l_key,
204   			p_prefix =>l_debug_prefix,
205         p_msg_level=>fnd_log.level_statement);
206     END IF;
207 
208     wf_party_id := p_event.getValueForParameter('PARTY_ID');
209     SynchPersonWFRole(wf_party_id,TRUE,TRUE);
210 
211     -- Debug info.
212     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
213   		hz_utility_v2pub.debug(
214         p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
215   			p_prefix =>l_debug_prefix,
216         p_msg_level=>fnd_log.level_statement);
217     END IF;
218 
219    --While updating the person details, his details in contact should
220    --also be updated in workflow tables
221      For Contact in find_contacts  Loop
222         SynchContactWFRole(Contact.party_id,TRUE,TRUE);
223      End Loop;
224 
225      -- Debug info.
226 	    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
227   		 hz_utility_v2pub.debug(
228           p_message=>'After updating the contact details in WF for subject partyid: '||wf_party_id,
229           p_prefix =>l_debug_prefix,
230           p_msg_level=>fnd_log.level_statement);
231 	    END IF;
232 
233   ELSIF (l_key LIKE 'oracle.apps.ar.hz.PersonLanguage.create%')    THEN
234     -- Debug info.
235     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
236   		hz_utility_v2pub.debug(
237         p_message=>l_key,
238   			p_prefix =>l_debug_prefix,
239         p_msg_level=>fnd_log.level_statement);
240     END IF;
241 
242     wf_lang_user_ref_id := p_event.getValueForParameter('LANGUAGE_USE_REFERENCE_ID');
243 
244     -- anonymous block to find the person corresponding to language
245     BEGIN
246      select p.party_id,  party_type
247      into   wf_party_id, wf_party_type
248      from   hz_parties p, hz_person_language l
249      where  p.party_id= l.party_id and
250             primary_language_indicator='Y' and
251             l.status ='A' and
252             language_use_reference_id = wf_lang_user_ref_id;
253     EXCEPTION
254        WHEN NO_DATA_FOUND THEN
255         -- Debug info.
256         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
257       		hz_utility_v2pub.debug(
258             p_message=>'No person found for language_use_reference_id: '||wf_lang_user_ref_id,
259       			p_prefix =>l_debug_prefix,
260             p_msg_level=>fnd_log.level_statement);
261       		hz_utility_v2pub.debug(
262             p_message=>'No person party_id found for event '||l_key,
263       			p_prefix =>l_debug_prefix,
264             p_msg_level=>fnd_log.level_statement);
265         END IF;
266     END; -- end of anonymous block to find the person corresponding to language
267 
268     --For personLanguage create event it tries to synch all the
269     --personLanguage related details in workflow table
270     IF (wf_party_type = 'PERSON') THEN
271       -- sync person
272       SynchPersonWFRole(wf_party_id);
273       -- Debug info.
274       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
275     		hz_utility_v2pub.debug(
276           p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
277     			p_prefix =>l_debug_prefix,
278           p_msg_level=>fnd_log.level_statement);
279       END IF;
280 
281       -- sync all the contacts
282       For Contact in find_contacts
283       Loop
284          SynchContactWFRole(Contact.party_id);
285       End Loop;
286       -- Debug info.
287       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
288       hz_utility_v2pub.debug(
289         p_message=>'After updating the contact details in WF for subject partyid: '||wf_party_id,
290         p_prefix =>l_debug_prefix,
291         p_msg_level=>fnd_log.level_statement);
292       END IF;
293 
294     ELSIF (wf_party_type = 'GROUP') THEN
295     -- sync group
296       SynchGroupWFRole(wf_party_id);
297       -- Debug info.
298       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
299     		hz_utility_v2pub.debug(
300           p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
301     			p_prefix =>l_debug_prefix,
302           p_msg_level=>fnd_log.level_statement);
303       END IF;
304     END IF;
305 
306     --For personLanguage update event it tries to synch all the
307     --personLanguage related details in workflow table
308 
309   ELSIF (l_key LIKE 'oracle.apps.ar.hz.PersonLanguage.update%') THEN
310     -- Debug info.
311     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
312   		hz_utility_v2pub.debug(
313         p_message=>l_key,
314   			p_prefix =>l_debug_prefix,
315         p_msg_level=>fnd_log.level_statement);
316     END IF;
317     -- read the lang ref id from param
318     wf_lang_user_ref_id := p_event.getValueForParameter('LANGUAGE_USE_REFERENCE_ID');
319     -- anonymous block to find the person corresponding to language
320     BEGIN
321     select p.party_id,   party_type
322     into   wf_party_id,  wf_party_type
323     from   hz_parties p, hz_person_language l
324     where  p.party_id= l.party_id and
325 --    primary_language_indicator='Y' and
326 --    l.status ='A' and
327     language_use_reference_id = wf_lang_user_ref_id;
328     EXCEPTION
329     WHEN NO_DATA_FOUND THEN
330         -- Debug info.
331         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
332       		hz_utility_v2pub.debug(
333             p_message=>'No person found for language_use_reference_id: '||wf_lang_user_ref_id,
334       			p_prefix =>l_debug_prefix,
335             p_msg_level=>fnd_log.level_statement);
336       		hz_utility_v2pub.debug(
337             p_message=>'No person party_id found for event '||l_key,
338       			p_prefix =>l_debug_prefix,
339             p_msg_level=>fnd_log.level_statement);
340         END IF;
341     END; -- end of anonymous block to find the person corresponding to language
342 
343     IF (wf_party_type = 'PERSON') THEN
344       -- sync person
345       SynchPersonWFRole(wf_party_id,TRUE,TRUE);
346       -- Debug info.
347       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
348         hz_utility_v2pub.debug(
349         p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
350         p_prefix =>l_debug_prefix,
351         p_msg_level=>fnd_log.level_statement);
352       END IF;
353       -- sync all the contacts
354       For Contact in find_contacts  Loop
355         SynchContactWFRole(Contact.party_id,TRUE,TRUE);
356       End Loop;
357       -- Debug info.
358       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
359       hz_utility_v2pub.debug(
360         p_message=>'After updating the contact details in WF for subject partyid: '||wf_party_id,
361         p_prefix =>l_debug_prefix,
362         p_msg_level=>fnd_log.level_statement);
363       END IF;
364     ELSIF (wf_party_type = 'GROUP') THEN
365     -- sync group
366        SynchGroupWFRole(wf_party_id,TRUE,TRUE);
367       -- Debug info.
368       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
369     		hz_utility_v2pub.debug(
370           p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
371     			p_prefix =>l_debug_prefix,
372           p_msg_level=>fnd_log.level_statement);
373       END IF;
374     END IF; -- check for party type ends in personLang.update event
375 
376   --On creation of OrgContact this code synchs this details with
377   --work flow table
378   ELSIF (l_key LIKE 'oracle.apps.ar.hz.OrgContact.create%')   THEN
379     -- Debug info.
380     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
381   		hz_utility_v2pub.debug(
382         p_message=>l_key,
383   			p_prefix =>l_debug_prefix,
384         p_msg_level=>fnd_log.level_statement);
385     END IF;
386     l_match_string := p_event.getValueForParameter('ORG_CONTACT_ID');
387 
388     -- given an orgContactId, get the relParty (Contact) that must be synced
389     -- anonymous block to find the orgContact
390     BEGIN
391       select party_id
392       into   wf_party_id
393       from hz_org_contacts org, hz_relationships rel
394       where org.party_relationship_id=rel.relationship_id and
395       Subject_table_name = 'HZ_PARTIES' and
396       Object_table_name  = 'HZ_PARTIES' and
397       Directional_flag = 'F' and
398       org.org_contact_id=l_match_string;
399 
400       SynchContactWFRole(wf_party_id);
401       -- Debug info.
402       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
403       hz_utility_v2pub.debug(
404         p_message=>'After updating the contact details in WF for partyid: '||wf_party_id,
405         p_prefix =>l_debug_prefix,
406         p_msg_level=>fnd_log.level_statement);
407       END IF;
408     EXCEPTION
409     WHEN NO_DATA_FOUND THEN
410         -- Debug info.
411         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
412       		hz_utility_v2pub.debug(
413             p_message=>'No orgContact found for orgContactId: '||l_match_string,
414       			p_prefix =>l_debug_prefix,
415             p_msg_level=>fnd_log.level_statement);
416       		hz_utility_v2pub.debug(
417             p_message=>'No rel party_id found for event '||l_key,
418       			p_prefix =>l_debug_prefix,
419             p_msg_level=>fnd_log.level_statement);
420         END IF;
421     END; -- end of anonymous block to find the orgContact
422 
423     --On updation of OrgContact this code synchs this details with
424     --work flow table
425     ELSIF (l_key like 'oracle.apps.ar.hz.OrgContact.update%')  THEN
426       -- Debug info.
427       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
428     		hz_utility_v2pub.debug(
429           p_message=>l_key,
430     			p_prefix =>l_debug_prefix,
431           p_msg_level=>fnd_log.level_statement);
432       END IF;
433      l_match_string := p_event.getValueForParameter('ORG_CONTACT_ID');
434     -- given an orgContactId, get the relParty (Contact) that must be synced
435     -- anonymous block to find the orgContact
436     BEGIN
437       select party_id
438       into   wf_party_id
439       from hz_org_contacts org, hz_relationships rel
440       where org.party_relationship_id=rel.relationship_id and
441       Subject_table_name = 'HZ_PARTIES' and
442       Object_table_name  = 'HZ_PARTIES' and
443       Directional_flag = 'F' and
444       org.org_contact_id=l_match_string;
445       -- sync contact
446       SynchContactWFRole(wf_party_id,TRUE,TRUE);
447       -- Debug info.
448       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
449       hz_utility_v2pub.debug(
450         p_message=>'After updating the contact details in WF for partyid: '||wf_party_id,
451         p_prefix =>l_debug_prefix,
452         p_msg_level=>fnd_log.level_statement);
453       END IF;
454     EXCEPTION
455     WHEN NO_DATA_FOUND THEN
456         -- Debug info.
457         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
458       		hz_utility_v2pub.debug(
459             p_message=>'No orgContact found for orgContactId: '||l_match_string,
460       			p_prefix =>l_debug_prefix,
461             p_msg_level=>fnd_log.level_statement);
462       		hz_utility_v2pub.debug(
463             p_message=>'No rel party_id found for event '||l_key,
464       			p_prefix =>l_debug_prefix,
465             p_msg_level=>fnd_log.level_statement);
466         END IF;
467     END; -- end of anonymous block to find the orgContact
468 
469   --On creation of Group party this code synchs this details with
470   --work flow table
471   ELSIF (l_key LIKE 'oracle.apps.ar.hz.Group.create%')  THEN
472     -- Debug info.
473     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
474   		hz_utility_v2pub.debug(
475         p_message=>l_key,
476   			p_prefix =>l_debug_prefix,
477         p_msg_level=>fnd_log.level_statement);
478     END IF;
479     l_match_string := p_event.getValueForParameter('PARTY_ID');
480     SynchGroupWFRole(l_match_string);
481     -- Debug info.
482     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
483   		hz_utility_v2pub.debug(
484         p_message=>'After SynchGroupWFRole() for party_id: '||l_match_string,
485   			p_prefix =>l_debug_prefix,
486         p_msg_level=>fnd_log.level_statement);
487     END IF;
488   --On updation of Group party this code synchs this details with
489   --work flow table
490   ELSIF (l_key like 'oracle.apps.ar.hz.Group.update%')  THEN
491     -- Debug info.
492     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
493   		hz_utility_v2pub.debug(
494         p_message=>l_key,
495   			p_prefix =>l_debug_prefix,
496         p_msg_level=>fnd_log.level_statement);
497     END IF;
498     l_match_string := p_event.getValueForParameter('PARTY_ID');
499     SynchGroupWFRole(l_match_string,TRUE,TRUE);
500     -- Debug info.
501     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
502   		hz_utility_v2pub.debug(
503         p_message=>'After SynchGroupWFRole() for party_id: '||l_match_string,
504   			p_prefix =>l_debug_prefix,
505         p_msg_level=>fnd_log.level_statement);
506     END IF;
507   --On creation of ContactPoint this code synchs this details with
508   --work flow table
509   ELSIF (l_key LIKE 'oracle.apps.ar.hz.ContactPoint.create%')  THEN
510     -- Debug info.
511     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
512   		hz_utility_v2pub.debug(
513         p_message=>l_key,
514   			p_prefix =>l_debug_prefix,
515         p_msg_level=>fnd_log.level_statement);
516     END IF;
517     l_match_string := p_event.getValueForParameter('CONTACT_POINT_ID');
518     -- anonymous block to find the party corresponding to CP
519     BEGIN
520       select owner_table_id, party_type
521       into   wf_party_id, wf_party_type
522       from   hz_contact_points pt, hz_parties
523       where  pt.owner_table_id = party_id and
524       pt.contact_point_type = 'EMAIL' and
525       pt.status ='A' and
526       pt.primary_flag='Y' and
527       pt.owner_table_name ='HZ_PARTIES' and
528       pt.contact_point_id = l_match_string;
529     EXCEPTION
530     WHEN NO_DATA_FOUND THEN
531         -- Debug info.
532         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
533       		hz_utility_v2pub.debug(
534             p_message=>'No party_id found for contact point id: '||l_match_string,
535       			p_prefix =>l_debug_prefix,
536             p_msg_level=>fnd_log.level_statement);
537       		hz_utility_v2pub.debug(
538             p_message=>'No party_id found for event '||l_key,
539       			p_prefix =>l_debug_prefix,
540             p_msg_level=>fnd_log.level_statement);
541         END IF;
542     END; -- end of anonymous block to find the party corresponding to CP
543 
544     IF (wf_party_type = 'PERSON') THEN
545       -- sync person
546       SynchPersonWFRole(wf_party_id);
547       -- Debug info.
548       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
549         hz_utility_v2pub.debug(
550         p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
551         p_prefix =>l_debug_prefix,
552         p_msg_level=>fnd_log.level_statement);
553       END IF;
554     ELSIF (wf_party_type = 'PARTY_RELATIONSHIP') then
555       -- sync Contact
556       SynchContactWFRole(wf_party_id);
557       -- Debug info.
558       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
559       hz_utility_v2pub.debug(
560         p_message=>'After updating the contact details in WF for subject partyid: '||wf_party_id,
561         p_prefix =>l_debug_prefix,
562         p_msg_level=>fnd_log.level_statement);
563       END IF;
564     ELSIF (wf_party_type = 'GROUP')  THEN
565       -- sync Group
566       SynchGroupWFRole(wf_party_id);
567       -- Debug info.
568       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
569       hz_utility_v2pub.debug(
570         p_message=>'After SynchGroupWFRole() for party_id: '||wf_party_id,
571         p_prefix =>l_debug_prefix,
572         p_msg_level=>fnd_log.level_statement);
573       END IF;
574     END IF; -- check of partyType ends
575 
576   --On updation of ContactPoint this code synchs this details with
577   --work flow table
578   ELSIF (l_key like 'oracle.apps.ar.hz.ContactPoint.update%')  THEN
579     -- Debug info.
580     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
581   		hz_utility_v2pub.debug(
582         p_message=>l_key,
583   			p_prefix =>l_debug_prefix,
584         p_msg_level=>fnd_log.level_statement);
585     END IF;
586     l_match_string := p_event.getValueForParameter('CONTACT_POINT_ID');
587     -- anonymous block to find the party corresponding to CP
588     BEGIN
589       select owner_table_id, party_type
590       into   wf_party_id,  wf_party_type
591       from   hz_contact_points pt,  hz_parties
592       where  pt.owner_table_id = party_id and
593       pt.contact_point_type = 'EMAIL' and
594       pt.owner_table_name ='HZ_PARTIES' and
595       pt.contact_point_id = l_match_string;
596     EXCEPTION
597     WHEN NO_DATA_FOUND THEN
598         -- Debug info.
599         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
600       		hz_utility_v2pub.debug(
601             p_message=>'No party_id found for contact point id: '||l_match_string,
602       			p_prefix =>l_debug_prefix,
603             p_msg_level=>fnd_log.level_statement);
604       		hz_utility_v2pub.debug(
605             p_message=>'No party_id found for event '||l_key,
606       			p_prefix =>l_debug_prefix,
607             p_msg_level=>fnd_log.level_statement);
608         END IF;
609     END; -- end of anonymous block to find the party corresponding to CP
610 
611     IF (wf_party_type = 'PERSON') THEN
612       -- sync person
613       SynchPersonWFRole(wf_party_id,TRUE,TRUE);
614       -- Debug info.
615       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
616         hz_utility_v2pub.debug(
617         p_message=>'After calling the SynchPersonWFRole for party '||wf_party_id,
618         p_prefix =>l_debug_prefix,
619         p_msg_level=>fnd_log.level_statement);
620       END IF;
621     ELSIF (wf_party_type = 'PARTY_RELATIONSHIP') then
622       -- sync Contact
623 	    SynchContactWFRole(wf_party_id,TRUE,TRUE);
624       -- Debug info.
625       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
626       hz_utility_v2pub.debug(
627         p_message=>'After updating the contact details in WF for subject partyid: '||wf_party_id,
628         p_prefix =>l_debug_prefix,
629         p_msg_level=>fnd_log.level_statement);
630       END IF;
631     ELSIF (wf_party_type = 'GROUP')  THEN
632       -- sync Group
633       SynchGroupWFRole(wf_party_id,TRUE,TRUE);
634       -- Debug info.
635       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
636       hz_utility_v2pub.debug(
637         p_message=>'After SynchGroupWFRole() for party_id: '||wf_party_id,
638         p_prefix =>l_debug_prefix,
639         p_msg_level=>fnd_log.level_statement);
640       END IF;
641     END IF; -- check of partyType ends
642 
643   --On updation of Organization this code synchs this details with
644   --work flow table
645   ELSIF (l_key like 'oracle.apps.ar.hz.Organization.update%') THEN
646     -- Debug info.
647     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
648   		hz_utility_v2pub.debug(
649         p_message=>l_key,
650   			p_prefix =>l_debug_prefix,
651         p_msg_level=>fnd_log.level_statement);
652     END IF;
653     l_match_string := p_event.getValueForParameter('PARTY_ID');
654     -- sync all orgContacts for the Org
655     For orga_update in org_update  Loop
656       SynchContactWFRole(orga_update.party_id,TRUE,TRUE);
657     End Loop;
658     -- Debug info.
659     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
660     hz_utility_v2pub.debug(p_message=>'After updating the Contact details in WF for Org party_id: '||l_match_string,
661     p_prefix =>l_debug_prefix,
662     p_msg_level=>fnd_log.level_statement);
663     END IF;
664 
665   END IF; -- end of event key check
666 
667   RETURN 'SUCCESS';
668 
669 EXCEPTION
670     WHEN OTHERS THEN
671       FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
672       FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
673       FND_MSG_PUB.ADD;
674       WF_CORE.CONTEXT('HZ_WF_SYNCH',
675               'propagate_user_role',
676               p_event.getEventName(),
677               p_subscription_guid);
678       WF_EVENT.setErrorInfo(p_event, 'ERROR');
679     ROLLBACK TO propagate_role;
680     RETURN 'ERROR';
681 END; -- end of propagate_role()
682 
683 -------------------------------------------------------------------------
684 /**
685  * PROCEDURE SynchPersonWFRole
686  *
687  * DESCRIPTION
688  *     This is a wrapper to call the WF_LOCAL_SYNCH.propagate_role method
689  *
690  *
691  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
692  *     WF_LOCAL_SYNCH.propagate_role
693  *
694  * ARGUMENTS
695  *   IN:
696  *     PartyId                       party_id for which the synch has
697  *				     to be done
698  *     p_update                      Update flag
699  *     p_overwrite                   Overwrite flag
700  *
701  *   IN/OUT:
702  *
703  *   OUT:
704  *
705  *
706  * NOTES
707  *
708  * MODIFICATION HISTORY
709  *
710  *   03-Jan-2003    Porkodi Chinnandar  o Created.
711  *   13-Mar-2003    Leena Sampemane     o Person needs to be created as a
712  *                                                     wf_user.
713  *   07-JUN-2005  Srikanth o fixed bug4390816 for release 12
714  *
715  */
716 -------------------------------------------------------------------------
717 
718 PROCEDURE SYNCHPERSONWFROLE (
719   PartyId         IN Number,
720   p_update 	IN Boolean Default False ,
721   p_overwrite 	IN Boolean Default False )
722 IS
723   List               wf_parameter_list_t;
724   user_name	         VARCHAR2(25);
725   display_name       VARCHAR2(360);
726   description        VARCHAR2(360);
727   notification_pref  VARCHAR2(30);
728   language           VARCHAR2(30);
729   territory          VARCHAR2(30);
730   email_address      VARCHAR2(325);
731   fax                VARCHAR2(80);
732   status             VARCHAR2(8);
733   expiration_date    DATE;
734   start_date         DATE DEFAULT NULL;
735   system             VARCHAR2(10) := 'HZ_PARTY';
736   system_id          VARCHAR2(15);
737   l_debug_prefix     VARCHAR2(30) := 'SYNCPERWFROLE';
738 
739 BEGIN
740   -- debug info
741   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
742      hz_utility_v2pub.DEBUG
743      (p_message=>'SYNCHPERSONWFROLE()+',
744       p_prefix =>l_debug_prefix,
745       p_msg_level=>fnd_log.level_statement);
746   END IF;
747   SAVEPOINT SynchPersonWFRole;
748 /*
749 As part of Bug 4390816, following changes were done to this procedure:
750 Select stmt changes:
751 1. email_format is no longer hardcoded to MAILTEXT when null
752 2. email format is truncated to 8 char
753 3. email address is truncated to 320 char
754 
755 BUG 4957312 changes
756 1. email_format a.k.a Notification Preference defaulting was re-inroduced.
757 
758 Details-
759 If the email is present and has a notification preference, then it was used.
760 If the notification preference was not present and the email was present,
761  then MAILTEXT is deafulted. This is to be consistent with email defaulting
762  in Public API Bug4359226.
763 If the email itself was not available, notification preference was defaulted
764 to Query.
765 */
766 
767   BEGIN -- anonymous block to select the records from TCA Registry
768     SELECT
769       'HZ_PARTY:'||p.party_id,          --  Username
770       p.party_name,	-- DisplayName
771       p.party_name,	-- description
772       nvl2(p.email_address, nvl(substrb(cp.email_format,1,8),'MAILTEXT'),'QUERY'),     -- notification_pref
773       fl.nls_language,	-- preferredLanguage
774       fl.nls_territory,	-- orclNLSTerritory
775       substrb(p.email_address,1,320),	  -- mail
776       NULL,	-- fax
777       decode(p.status, 'A',  'ACTIVE', 'INACTIVE'),  -- orclIsEnabled
778       NULL,	-- ExpirationDate
779       p.party_id   -- System Id
780     INTO
781       user_name,
782       display_name,
783       description,
784       notification_pref,
785       language,
786       territory,
787       email_address,
788       fax,
789       status,
790       expiration_date,
791       system_id
792     FROM
793       HZ_PARTIES p,
794       HZ_CONTACT_POINTS cp,
795       HZ_PERSON_LANGUAGE pl,
796       FND_LANGUAGES fl
797     WHERE
798       p.party_id = PartyId
799       AND p.party_type = 'PERSON'
800       AND cp.owner_table_name(+) = 'HZ_PARTIES'
801       AND cp.owner_table_id (+) = p.party_id
802       AND cp.contact_point_type(+) = 'EMAIL'
803       AND cp.primary_flag(+) = 'Y'
804       AND cp.status(+) = 'A'
805       AND pl.party_id (+) = p.party_id
806       AND pl.primary_language_indicator(+) = 'Y'
807       AND pl.status(+) = 'A'
808       AND pl.language_name = fl.language_code(+);
809    EXCEPTION
810    WHEN NO_DATA_FOUND THEN
811      -- Debug info.
812      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
813 	hz_utility_v2pub.DEBUG
814 	(p_message=>'no data found to sync',
815 	p_prefix =>l_debug_prefix,
816 	p_msg_level=>fnd_log.level_statement);
817      END IF;
818    END; -- anonymous block to fetch the TCA Registry records ends
819 
820    IF (system_id IS NOT NULL) THEN
821     -- if there is a valid record from TCA Registry to Sync
822     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
823        hz_utility_v2pub.DEBUG
824        (p_message=>'Orig system ID:'||system_id,
825         p_prefix =>l_debug_prefix,
826         p_msg_level=>fnd_log.level_statement);
827     END IF;
828 
829        -- Add the  TCA registry Data as parameters to wf_event
830        -- This is needed as the WF API access the wf_event structure for
831        -- the information passed.
832 
833     wf_event.AddParameterToList('User_Name', user_name, List);
834     wf_event.AddParameterToList('DisplayName', display_name, List);
835     wf_event.AddParameterToList('Description', description, List);
836     wf_event.AddParameterToList('orclWorkFlowNotificationPref', notification_pref, List);
837     wf_event.AddParameterToList('preferredLanguage', language, List);
838     wf_event.AddParameterToList('OrclNLSTerritory', territory, List);
839     wf_event.AddParameterToList('Mail', email_address, List);
840     wf_event.AddParameterToList('FacsimileTelephoneNumber', fax, List);
841     wf_event.AddParameterToList('orclisEnabled', status, List);
842     wf_event.AddParameterToList('ExpirationDate', expiration_date, List);
843     wf_event.AddParameterToList('orclWFOrigSystem',system, List);
844     wf_event.AddParameterToList('orclWFOrigSystemID',system_id, List);
845 
846     if (p_update = TRUE) then
847 	wf_event.AddParameterToList('UpdateOnly', 'TRUE' , List);
848     end if;
849 
850     if (p_overwrite = TRUE) then
851        wf_event.AddParameterToList('WFSYNCH_OVERWRITE', 'TRUE', List);
852     end if;
853 
854     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
855        hz_utility_v2pub.DEBUG
856 	(p_message=>'bfr Calling WF_LOCAL_SYNCH.propagate_role API',
857 	p_prefix =>l_debug_prefix,
858 	p_msg_level=>fnd_log.level_statement);
859     END IF;
860 
861        -- call WF API for Synchronization
862     WF_LOCAL_SYNCH.propagate_user(
863        system,
864        system_id,
865        List,
866        start_date,
867        expiration_date);
868   END IF; -- check for valid TCA id ends
869 
870   -- debug info
871   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
872      hz_utility_v2pub.DEBUG
873      (p_message=>'SYNCHPERSONWFROLE()-',
874      p_prefix =>l_debug_prefix,
875      p_msg_level=>fnd_log.level_statement);
876   END IF;
877 
878 END SYNCHPERSONWFROLE;
879 -------------------------------------------------------------------------
880 /**
881  * PROCEDURE SynchContactWFRole
882  *
883  * DESCRIPTION
884  *     This is a wrapper to call the WF_LOCAL_SYNCH.propagate_role method
885  *
886  *
887  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
888  *     WF_LOCAL_SYNCH.propagate_role
889  *
890  * ARGUMENTS
891  *   IN:
892  *     PartyId                       party_id for which the synch has
893  *				     to be done
894  *     p_update                      Update flag
895  *     p_overwrite                   overwrite flag
896  *
897  *   IN/OUT:
898  *
899  *   OUT:
900  *
901  *
902  * NOTES
903  *
904  * MODIFICATION HISTORY
905  *
906  *   03-Jan-2003    Porkodi Chinnandar   o Created.
907  *   11-Mar-2003    Leena Sampemane   - Contact needs to be created as a WF  User
908  *   07-JUN-2005  Srikanth o fixed bug4390816 for release 12
909  *
910  *
911  */
912 -------------------------------------------------------------------------
913 PROCEDURE SYNCHCONTACTWFROLE (
914   PartyId         IN Number,
915   p_update 	IN Boolean Default False ,
916   p_overwrite 	IN Boolean Default False )
917 IS
918   List         WF_PARAMETER_LIST_T;
919   system       VARCHAR2(10) := 'HZ_PARTY';
920   l_tbl        SYNC_TBL_TYPE;
921   l_rec_count  NUMBER := 0;
922   l_debug_prefix VARCHAR2(30) := 'SYNCCNTWFROLE';
923 
924 /*
925 As part of Bug 4390816, following changes were done to this procedure:
926 
927 Select stmt changes:
928 1. Email_format is no longer hardcoded to MAILTEXT when null
929 2. Email format is truncated to 8 char
930 3. Email address is truncated to 320 char
931 4. StartDate, ExpirationDate are populated from relationship table
932 5. Unnecessary joining for 'object' to hz_parties removed
933 6. Removed directional flag filtering. This would mean that there
934    are relationship records that must sync up (unlike the previous
935    design). Hence need to re-write the SQL as a cursor.
936 
937 Param changes:
938 1, Added wf_event.AddParameterToList('StartDate', start_date, List);
939 
940 BUG 4957312 changes
941 1. email_format a.k.a Notification Preference defaulting was re-inroduced.
942 
943 Details-
944 If the email is present and has a notification preference, then it was used.
945 If the notification preference was not present and the email was present,
946  then MAILTEXT is deafulted. This is to be consistent with email defaulting
947  in Public API Bug4359226.
948 If the email itself was not available, notification preference was defaulted
949 to Query.
950 
951 2. Notification Preference selected must belong to the Email chosen.
952 In case of email of a contact, the notification preference must belong
953 to the same email (of that contact).
954 
955 3. Incase of person to person rel, directional flag was re-intorduced.
956 
957 Details-
958 This was to avoid selecting two rows in case of Person-Person relationships.
959 
960 4. Person-Group relationships are no longer considered in SyncContactWFRole().
961 */
962 
963   CURSOR c_rel (c_p_rel_party_id IN NUMBER) IS
964   SELECT
965    'HZ_PARTY:'||to_char(pr.party_id) -- Username
966     ,per.party_name -- DisplayName
967     ,prp.party_name -- description
968     ,nvl2(prp.email_address, nvl(substrb(cp.email_format,1,8),'MAILTEXT'),'QUERY') -- notification_pref
969     ,fl.nls_language                   -- language
970     ,fl.nls_territory                  -- territory
971     ,substrb(prp.email_address,1,320)  -- email_address
972     ,NULL -- fax
973     ,DECODE(prp.status,'A','ACTIVE','INACTIVE') -- status
974     ,pr.start_date        -- startDate
975     ,DECODE(pr.status, 'A', pr.end_date,  'I',
976      (CASE
977        WHEN MONTHS_BETWEEN(NVL(pr.end_date, SYSDATE), SYSDATE) < 0 THEN pr.end_date
978        WHEN MONTHS_BETWEEN(NVL(pr.end_date, SYSDATE), SYSDATE) > 0 THEN SYSDATE
979        ELSE SYSDATE
980      END),  SYSDATE) -- ExpirationDate --Bug#5209709 fix
981     ,pr.party_id  -- system_id
982   FROM
983 	hz_relationships pr
984 	,hz_org_contacts oc
985 	,hz_parties prp -- party relationship party
986 	,hz_parties per
987 	,hz_contact_points cp
988 	,hz_person_language pl
989 	,fnd_languages fl
990   WHERE
991     pr.party_id = c_p_rel_party_id
992     AND pr.subject_table_name = 'HZ_PARTIES'
993     AND pr.object_table_name  = 'HZ_PARTIES'
994     AND pr.subject_id = per.party_id
995     AND per.party_type = 'PERSON'
996     AND ((pr.object_type = 'PERSON' AND pr.directional_flag = 'F')
997 	OR pr.object_type = 'ORGANIZATION')
998     AND pr.relationship_id = oc.party_relationship_id
999     AND prp.party_id = pr.party_id
1000     AND prp.party_type = 'PARTY_RELATIONSHIP'
1001     AND cp.owner_table_name(+) = 'HZ_PARTIES'
1002     AND cp.owner_table_id (+) = prp.party_id
1003     AND cp.contact_point_type(+) = 'EMAIL'
1004     AND cp.email_address(+) = prp.email_address
1005     AND cp.primary_flag(+) = 'Y'
1006     AND cp.status(+) = 'A'
1007     AND per.party_id = pl.party_id(+)
1008     AND pl.primary_language_indicator(+) = 'Y'
1009     AND pl.status(+) = 'A'
1010     AND pl.language_name = fl.language_code(+);
1011 
1012 BEGIN
1013   SAVEPOINT SynchContactWFRole;
1014     -- Debug info.
1015     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1016        hz_utility_v2pub.DEBUG
1017 	(p_message=>'SynchContactWFRole()+',
1018 	p_prefix =>l_debug_prefix,
1019 	p_msg_level=>fnd_log.level_statement);
1020     END IF;
1021 
1022   OPEN c_rel(PartyId);
1023   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1024      hz_utility_v2pub.DEBUG
1025      (p_message=>'OPENED THE CURSOR',
1026 	p_prefix =>l_debug_prefix,
1027 	p_msg_level=>fnd_log.level_statement);
1028   END IF;
1029   FETCH c_rel  BULK COLLECT INTO l_tbl; -- select records from TCA Registry
1030   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1031      hz_utility_v2pub.DEBUG
1032      (p_message=>'Bulk collected the data',
1033 	p_prefix =>l_debug_prefix,
1034 	p_msg_level=>fnd_log.level_statement);
1035   END IF;
1036   CLOSE c_rel;
1037 
1038   l_rec_count := l_tbl.COUNT;
1039   FOR i IN l_tbl.FIRST..l_tbl.LAST
1040   LOOP
1041     -- for each of the selected record from TCA Registry
1042     -- perform WF Synchronization.
1043     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1044 	hz_utility_v2pub.DEBUG
1045 	(p_message=>'At '||i||' Rec',
1046 	p_prefix =>l_debug_prefix,
1047 	p_msg_level=>fnd_log.level_statement);
1048     END IF;
1049 
1050     IF (l_tbl(i).system_id IS NOT NULL) THEN
1051        -- for each of the valid record with a partyId
1052 
1053        List  := WF_PARAMETER_LIST_T();
1054        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1055 	  hz_utility_v2pub.DEBUG
1056 	  (p_message=>'Orig system ID: '||l_tbl(i).system_id,
1057 	   p_prefix =>l_debug_prefix,
1058 	   p_msg_level=>fnd_log.level_statement);
1059        END IF;
1060 
1061        -- Add the  TCA registry Data as parameters to wf_event
1062        -- This is needed as the WF API access the wf_event structure for
1063        -- the information passed.
1064 
1065        wf_event.AddParameterToList('User_Name', l_tbl(i).user_name, List);
1066        wf_event.AddParameterToList('DisplayName', l_tbl(i).display_name, List);
1067        wf_event.AddParameterToList('Description', l_tbl(i).description, List);
1068        wf_event.AddParameterToList('orclWorkFlowNotificationPref', l_tbl(i).notification_pref, List);
1069        wf_event.AddParameterToList('preferredLanguage', l_tbl(i).language, List);
1070        wf_event.AddParameterToList('OrclNLSTerritory', l_tbl(i).territory, List);
1071        wf_event.AddParameterToList('Mail', l_tbl(i).email_address, List);
1072        wf_event.AddParameterToList('FacsimileTelephoneNumber', l_tbl(i).fax, List);
1073        wf_event.AddParameterToList('orclisEnabled', l_tbl(i).status, List);
1074        wf_event.AddParameterToList('StartDate', l_tbl(i).start_date, List);
1075        wf_event.AddParameterToList('ExpirationDate', l_tbl(i).expiration_date, List);
1076        wf_event.AddParameterToList('orclWFOrigSystem',system, List);
1077        wf_event.AddParameterToList('orclWFOrigSystemID',l_tbl(i).system_id, List);
1078 
1079        IF (p_update = TRUE) then
1080 	   wf_event.AddParameterToList('UpdateOnly', 'TRUE', List);
1081        END IF;
1082 
1083        IF (p_overwrite = TRUE) THEN
1084            wf_event.AddParameterToList('WFSYNCH_OVERWRITE', 'TRUE', List);
1085        END IF;
1086 
1087        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1088 	hz_utility_v2pub.DEBUG
1089 	(p_message=>'Before WF API Call',
1090 	p_prefix =>l_debug_prefix,
1091 	p_msg_level=>fnd_log.level_statement);
1092        END IF;
1093 
1094        -- call WF API for Synchronization
1095 
1096        WF_LOCAL_SYNCH.propagate_user(
1097           system,
1098           l_tbl(i).system_id,
1099           List,
1100           l_tbl(i).start_date,
1101           l_tbl(i).expiration_date);
1102      END IF; -- check for valid TCA id ends
1103    END LOOP; -- looping through all selected record ends
1104 
1105    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1106       hz_utility_v2pub.DEBUG
1107       (p_message=>'SynchContactWFRole()-',
1108       p_prefix =>l_debug_prefix,
1109       p_msg_level=>fnd_log.level_statement);
1110    END IF;
1111 
1112 EXCEPTION
1113  WHEN NO_DATA_FOUND THEN
1114      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1115 	hz_utility_v2pub.DEBUG
1116 	(p_message=>'No data found excep:'||sqlerrm,
1117 	p_prefix =>l_debug_prefix,
1118 	p_msg_level=>fnd_log.level_statement);
1119      END IF;
1120      -- no error is raised as not finding any record to sync is not an error.
1121 END SynchContactWFRole;
1122 
1123 -------------------------------------------------------------------------
1124 /**
1125  * PROCEDURE SynchGroupWFRole
1126  *
1127  * DESCRIPTION
1128  *     This is a wrapper to call the WF_LOCAL_SYNCH.propagate_role method
1129  *     When the party type is group.
1130  *
1131  *
1132  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1133  *     WF_LOCAL_SYNCH.propagate_role
1134  *
1135  * ARGUMENTS
1136  *   IN:
1137  *     PartyId                       party_id for which the synch has
1138  *				     to be done
1139  *     p_update                      Update flag
1140  *     p_overwrite                   Overwrite flag
1141  *
1142  *   IN/OUT:
1143  *
1144  *   OUT:
1145  *
1146  *
1147  * NOTES
1148  *
1149  * MODIFICATION HISTORY
1150  *
1151  *   03-Jan-2003    Porkodi Chinnandar               o Created.
1152  *   07-JUN-2005  Srikanth o fixed bug4390816 for release 12
1153  *
1154  */
1155 
1156 -------------------------------------------------------------------------
1157 PROCEDURE SYNCHGROUPWFROLE (
1158 	PartyId         IN Number,
1159 	p_update 	IN Boolean Default False ,
1160 	p_overwrite 	IN Boolean Default False )
1161 
1162 IS
1163 	List               wf_parameter_list_t;
1164 	user_name	   varchar2(25);
1165 	display_name       varchar2(360);
1166 	description        varchar2(360);
1167 	notification_pref  varchar2(30);
1168 	language           varchar2(30);
1169 	territory          varchar2(30);
1170 	email_address      varchar2(325);
1171 	fax                varchar2(80);
1172 	status             varchar2(8);
1173 	expiration_date    Date;
1174 	start_date         Date DEFAULT NULL;
1175 	system             varchar2(10) := 'HZ_GROUP';
1176 	system_id          varchar2(15);
1177 	l_debug_prefix VARCHAR2(30) := 'SYNCGRWFROLE';
1178 
1179 BEGIN
1180   SAVEPOINT SynchGroupWFRole;
1181   -- Debug info.
1182   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1183      hz_utility_v2pub.DEBUG
1184 	(p_message=>'SynchGroupWFRole()+',
1185 	p_prefix =>l_debug_prefix,
1186 	p_msg_level=>fnd_log.level_statement);
1187   END IF;
1188 
1189   -- As part of Bug 4390816, following changes were done to this procedure:
1190   -- select stmt changes
1191      -- 1. email_format is no longer hardcoded to MAILTEXT when null
1192      -- 2. email format is truncated to 8 char
1193      -- 3. email address is truncated to 320 char
1194      -- 4. mission statement is truncated to 1000 chars
1195 
1196   BEGIN -- anonymous block to select the TCA Registry
1197     -- Debug info.
1198     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1199 	hz_utility_v2pub.DEBUG
1200 	(p_message=>'Bfr Selecting the data',
1201 	p_prefix =>l_debug_prefix,
1202 	p_msg_level=>fnd_log.level_statement);
1203     END IF;
1204 /*
1205 BUG 4957312 changes
1206 1. email_format a.k.a Notification Preference defaulting was re-inroduced.
1207 
1208 Details-
1209 If the email is present and has a notification preference, then it was used.
1210 If the notification preference was not present and the email was present,
1211  then MAILTEXT is deafulted. This is to be consistent with email defaulting
1212  in Public API Bug4359226.
1213 If the email itself was not available, notification preference was defaulted
1214 to Query.
1215 
1216 2. Notification Preference selected must belong to the Email chosen.
1217 In case of email of a contact, the notification preference must belong
1218 to the same email (of that contact).
1219 */
1220      SELECT
1221        'HZ_GROUP:'||p.party_id, --  USER_NAME,  note the :
1222        p.party_name, -- DisplayName
1223        substrb(p.mission_statement,1,1000),   -- DESCRIPTION
1224        nvl2(p.email_address, nvl(substrb(cp.email_format,1,8),'MAILTEXT'),'QUERY'),     -- notification_pref
1225        fl.nls_language,	-- Language
1226        fl.nls_territory, -- Territory
1227        substrb(p.email_address,1,320),	-- email mail
1228        NULL,	-- fax
1229        decode(p.status, 'A',  'ACTIVE', 'INACTIVE'),  -- status
1230        NULL,	-- ExpirationDate
1231        p.party_id -- System Id
1232      INTO
1233 	user_name,
1234 	display_name,
1235 	description,
1236 	notification_pref,
1237 	language,
1238 	territory,
1239 	email_address,
1240 	fax,
1241 	status,
1242 	expiration_date,
1243 	system_id
1244       FROM
1245 	HZ_PARTIES p,
1246 	HZ_CONTACT_POINTS cp,
1247 	HZ_PERSON_LANGUAGE pl,
1248 	FND_LANGUAGES fl
1249       WHERE
1250 	p.party_id = PartyId
1251 	AND p.party_type = 'GROUP'
1252 	AND cp.owner_table_name(+) = 'HZ_PARTIES'
1253 	AND cp.owner_table_id (+) = p.party_id
1254 	AND cp.contact_point_type(+) = 'EMAIL'
1255 	AND cp.primary_flag(+) = 'Y'
1256 	AND cp.status(+) = 'A'
1257 	AND pl.party_id (+) = p.party_id
1258 	AND pl.primary_language_indicator(+) = 'Y'
1259 	AND pl.status(+) = 'A'
1260 	AND pl.language_name = fl.language_code(+);
1261    EXCEPTION
1262    WHEN NO_DATA_FOUND THEN
1263      -- Debug info.
1264      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1265 	hz_utility_v2pub.DEBUG
1266 	(p_message=>'no data found to sync',
1267 	p_prefix =>l_debug_prefix,
1268 	p_msg_level=>fnd_log.level_statement);
1269      END IF;
1270      -- no error is raised as not finding any record to sync is not an error.
1271    END; -- anonymous block to query the TCA Registry ends
1272 
1273    IF (system_id IS NOT NULL) THEN
1274 
1275      -- if there any record to be synchonized with WF
1276      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1277 	hz_utility_v2pub.DEBUG
1278 	(p_message=>'Orig system ID:'||system_id,
1279 	p_prefix =>l_debug_prefix,
1280 	p_msg_level=>fnd_log.level_statement);
1281      END IF;
1282 
1283      -- Add the  TCA registry Data as parameters to wf_event
1284      -- This is needed as the WF API access the wf_event structure for
1285      -- the information passed.
1286 
1287      wf_event.AddParameterToList('User_Name', user_name, List);
1288      wf_event.AddParameterToList('DisplayName', display_name, List);
1289      wf_event.AddParameterToList('Description', description, List);
1290      wf_event.AddParameterToList('orclWorkFlowNotificationPref', notification_pref, List);
1291      wf_event.AddParameterToList('preferredLanguage', language, List);
1292      wf_event.AddParameterToList('OrclNLSTerritory', territory, List);
1293      wf_event.AddParameterToList('Mail', email_address, List);
1294      wf_event.AddParameterToList('FacsimileTelephoneNumber', fax, List);
1295      wf_event.AddParameterToList('orclisEnabled', status, List);
1296      wf_event.AddParameterToList('ExpirationDate', expiration_date, List);
1297      wf_event.AddParameterToList('orclWFOrigSystem',system, List);
1298      wf_event.AddParameterToList('orclWFOrigSystemID',system_id, List);
1299 
1300      IF (p_update = TRUE) then
1301 	wf_event.AddParameterToList('UpdateOnly', 'TRUE', List);
1302      END IF;
1303 
1304      IF (p_overwrite = TRUE) then
1305 	wf_event.AddParameterToList('WFSYNCH_OVERWRITE', 'TRUE', List);
1306      END IF;
1307 
1308      IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1309 	hz_utility_v2pub.DEBUG
1310 	(p_message=>'bfr Calling WF_LOCAL_SYNCH.propagate_role API',
1311 	p_prefix =>l_debug_prefix,
1312 	p_msg_level=>fnd_log.level_statement);
1313      END IF;
1314 
1315      -- calling the WF API to propagate role
1316      WF_LOCAL_SYNCH.propagate_role(
1317 	system,
1318 	system_id,
1319 	List,
1320 	start_date,
1321 	expiration_date);
1322     END IF; -- if there is any TCA Registry record to sync, check ends
1323 
1324     -- Debug info.
1325     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1326        hz_utility_v2pub.DEBUG
1327 	(p_message=>'SynchGroupWFRole()-',
1328 	p_prefix =>l_debug_prefix,
1329 	p_msg_level=>fnd_log.level_statement);
1330     END IF;
1331 END SYNCHGROUPWFROLE;
1332 
1333 -------------------------------------------------------------------------
1334 /**
1335  * PROCEDURE SynchGroupWFUserRole
1336  *
1337  * DESCRIPTION
1338  *     This is a wrapper to call the WF_LOCAL_SYNCH.propagate_user_role method
1339  *
1340  *
1341  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1342  *     WF_LOCAL_SYNCH.propagate_user_role
1343  *
1344  * ARGUMENTS
1345  *   IN:
1346  *     PartyId                       party_id for which the synch has
1347  *				     to be done
1348  *
1349  *   IN/OUT:
1350  *
1351  *   OUT:
1352  *
1353  *
1354  * NOTES
1355  *
1356  * MODIFICATION HISTORY
1357  *
1358  *   03-Jan-2003    Porkodi Chinnandar               o Created.
1359  *   07-JUN-2005  Srikanth o fixed bug4390816 for release 12
1360  *
1361  */
1362 -------------------------------------------------------------------------
1363 
1364 PROCEDURE SYNCHGROUPWFUSERROLE (RelationshipId  IN NUMBER )
1365 IS
1366     expiration_date    Date DEFAULT NULL;
1367     start_date         Date DEFAULT NULL;
1368     user_system        varchar2(10);
1369     user_system_id     Number;
1370     role_system        varchar2(10);
1371     role_system_id     Number;
1372     l_debug_prefix VARCHAR2(30) := 'SYNCGRPWFUR';
1373 
1374 BEGIN
1375   -- debug info
1376   IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1377      hz_utility_v2pub.DEBUG
1378 	(p_message=>'SYNCHGROUPWFUSERROLE()+',
1379 	p_prefix =>l_debug_prefix,
1380 	p_msg_level=>fnd_log.level_statement);
1381   END IF;
1382 
1383   SAVEPOINT SynchGroupWFUserRole;
1384   -- changes done because of Bug#4390816 is
1385   -- removed the filtering based on directional flag from the select stmt
1386 
1387   BEGIN
1388     -- Debug info.
1389     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1390 	hz_utility_v2pub.DEBUG
1391 	(p_message=>'Bfr Selecting the data',
1392 	p_prefix =>l_debug_prefix,
1393 	p_msg_level=>fnd_log.level_statement);
1394     END IF;
1395 
1396     SELECT
1397       'HZ_PARTY'       --    USER_ORIG_SYSTEM
1398       ,sp.party_id     --    USER_ORIG_SYSTEM_ID
1399       ,'HZ_GROUP'      --    ROLE_ORIG_SYSTEM
1400       ,op.party_id     --    ROLE_ORIG_SYSTEM_ID
1401       ,pr.start_date   --    START_DATE
1402     ,DECODE(pr.status, 'A', pr.end_date,  'I',
1403      (CASE
1404        WHEN MONTHS_BETWEEN(NVL(pr.end_date, SYSDATE), SYSDATE) < 0 THEN pr.end_date
1405        WHEN MONTHS_BETWEEN(NVL(pr.end_date, SYSDATE), SYSDATE) > 0 THEN SYSDATE
1406        ELSE SYSDATE
1407      END),  SYSDATE) -- EndDate --Bug#5209709 fix
1408     INTO
1409        user_system,
1410        user_system_id,
1411        role_system,
1412        role_system_id,
1413        start_date,
1414        expiration_date
1415      FROM
1416        hz_relationships pr
1417        ,hz_parties sp
1418        ,hz_parties op
1419      WHERE
1420        pr.relationship_id = RelationshipId
1421        and    pr.subject_table_name = 'HZ_PARTIES'
1422        and    pr.object_table_name  = 'HZ_PARTIES'
1423        and    sp.party_id = pr.subject_id
1424        and    sp.party_type = 'PERSON'
1425        and    op.party_id = pr.object_id
1426        and    op.party_type = 'GROUP';
1427 
1428     EXCEPTION
1429       WHEN NO_DATA_FOUND THEN
1430 	-- Debug info.
1431 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1432 	    hz_utility_v2pub.DEBUG
1433 	    (p_message=>'no data found to sync',
1434 	     p_prefix =>l_debug_prefix,
1435 	     p_msg_level=>fnd_log.level_statement);
1436 	END IF;
1437         -- no error is raised as not finding any record to sync is not an error.
1438         -- return the control to the caller as no action is necessary.
1439         RETURN;
1440      END; -- anonymous block for selecting the person-group relationships end
1441 
1442      BEGIN
1443        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1444 	  hz_utility_v2pub.DEBUG
1445 	   (p_message=>'User Sys:'||user_system||' USER sysID:'||user_system_id,
1446 	        p_prefix =>l_debug_prefix,
1447 		p_msg_level=>fnd_log.level_statement);
1448        END IF;
1449        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1450 	  hz_utility_v2pub.DEBUG
1451 	   (p_message=>'Role Sys:'||role_system||' Role sysID:'||role_system_id,
1452 	    p_prefix =>l_debug_prefix,
1453 	    p_msg_level=>fnd_log.level_statement);
1454        END IF;
1455 
1456        WF_LOCAL_SYNCH.propagate_user_role(
1457 	     user_system,
1458 	     user_system_id,
1459 	     role_system,
1460 	     role_system_id,
1461 	     start_date,
1462 	     expiration_date);
1463 
1464       EXCEPTION
1465 	  WHEN NO_DATA_FOUND THEN
1466 	    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1467 		hz_utility_v2pub.DEBUG
1468 		(p_message=>'No data found to propagate_user_role',
1469 		p_prefix =>l_debug_prefix,
1470 		p_msg_level=>fnd_log.level_statement);
1471 	     END IF;
1472 	    -- as there is no data to sync as user role, first sync person and
1473 	     -- then group. After syncing person and group as roles, then sync
1474 	     -- person-Group as user role.
1475             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1476 	       hz_utility_v2pub.DEBUG
1477 	       (p_message=>'Bfr SynchPersonWFRole to propagate per:'||user_system_id,
1478 	        p_prefix =>l_debug_prefix,
1479 		p_msg_level=>fnd_log.level_statement);
1480 	    END IF;
1481 
1482 	    SynchPersonWFRole(user_system_id);
1483 
1484 	    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1485 		hz_utility_v2pub.DEBUG
1486 		(p_message=>'Bfr SynchGroupWFRole to propagate grp:'||role_system_id,
1487 		p_prefix =>l_debug_prefix,
1488 		p_msg_level=>fnd_log.level_statement);
1489 	    END IF;
1490 
1491 	    SynchGroupWFRole(role_system_id);
1492 
1493 	    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1494 	       hz_utility_v2pub.DEBUG
1495 	       (p_message=>'Bfr WF_LOCAL_SYNCH.propagate_user_role()',
1496 		p_prefix =>l_debug_prefix,
1497 		p_msg_level=>fnd_log.level_statement);
1498 	    END IF;
1499 
1500 	    WF_LOCAL_SYNCH.propagate_user_role(
1501 		user_system,
1502 		user_system_id,
1503 		role_system,
1504 		role_system_id,
1505 		start_date,
1506 		expiration_date);
1507       END; -- anonymous block to propagate the wf tables end.
1508 	-- debug info
1509 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1510 	   hz_utility_v2pub.DEBUG
1511 		(p_message=>'SYNCHGROUPWFUSERROLE()-',
1512 		p_prefix =>l_debug_prefix,
1513 		p_msg_level=>fnd_log.level_statement);
1514 	END IF;
1515 END SYNCHGROUPWFUSERROLE;
1516 -------------------------------------------------------------------------
1517 -------------------------------------------------------------------------
1518 END HZ_WF_SYNCH;