DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_PERSON_BO_PUB

Source


1 PACKAGE BODY hz_person_bo_pub AS
2 /*$Header: ARHBPPBB.pls 120.25.12010000.8 2009/10/28 18:03:20 awu ship $ */
3 
4   -- PRIVATE PROCEDURE assign_person_rec
5   --
6   -- DESCRIPTION
7   --     Assign attribute value from person business object to plsql record.
8   --
9   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10   --
11   -- ARGUMENTS
12   --   IN:
13   --     p_person_obj         Person business object.
14   --     p_person_id          Person ID.
15   --     p_person_os          Person orig system.
16   --     p_person_osr         Person orig system reference.
17   --     p_create_or_update   Create or update flag.
18   --   IN/OUT:
19   --     px_person_rec        Person plsql record.
20   --
21   -- NOTES
22   --
23   -- MODIFICATION HISTORY
24   --
25   --   14-DEC-2004    Arnold Ng          Created.
26   --
27 
28   PROCEDURE assign_person_rec(
29     p_person_obj                 IN            HZ_PERSON_BO,
30     p_person_id                  IN            NUMBER,
31     p_person_os                  IN            VARCHAR2,
32     p_person_osr                 IN            VARCHAR2,
33     p_create_or_update           IN            VARCHAR2 := 'C',
34     px_person_rec                IN OUT NOCOPY HZ_PARTY_V2PUB.PERSON_REC_TYPE
35   );
36 
37   -- PRIVATE PROCEDURE assign_person_lang_rec
38   --
39   -- DESCRIPTION
40   --     Assign attribute value from person language object to plsql record.
41   --
42   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
43   --
44   -- ARGUMENTS
45   --   IN:
46   --     p_person_lang_obj    Person language object.
47   --     p_party_id           Party ID.
48   --   IN/OUT:
49   --     px_person_lang_rec   Person language plsql record.
50   --
51   -- NOTES
52   --
53   -- MODIFICATION HISTORY
54   --
55   --   14-DEC-2004    Arnold Ng          Created.
56   --
57 
58   PROCEDURE assign_person_lang_rec(
59     p_person_lang_obj            IN            HZ_PERSON_LANG_OBJ,
60     p_party_id                   IN            NUMBER,
61     px_person_lang_rec           IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE
62   );
63 
64   -- PRIVATE PROCEDURE assign_education_rec
65   --
66   -- DESCRIPTION
67   --     Assign attribute value from education object to plsql record.
68   --
69   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
70   --
71   -- ARGUMENTS
72   --   IN:
73   --     p_education_obj      Education object.
74   --     p_party_id           Party ID.
75   --   IN/OUT:
76   --     px_education_rec     Education plsql record.
77   --
78   -- NOTES
79   --
80   -- MODIFICATION HISTORY
81   --
82   --   14-DEC-2004    Arnold Ng          Created.
83   --
84 
85   PROCEDURE assign_education_rec(
86     p_education_obj              IN            HZ_EDUCATION_OBJ,
87     p_party_id                   IN            NUMBER,
88     px_education_rec             IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE
89   );
90 
91   -- PRIVATE PROCEDURE assign_citizenship_rec
92   --
93   -- DESCRIPTION
94   --     Assign attribute value from citizenship object to plsql record.
95   --
96   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
97   --
98   -- ARGUMENTS
99   --   IN:
100   --     p_citizenship_obj    Citizenship object.
101   --     p_party_id           Party ID.
102   --   IN/OUT:
103   --     px_citizenship_rec   Citizenship plsql record.
104   --
105   -- NOTES
106   --
107   -- MODIFICATION HISTORY
108   --
109   --   14-DEC-2004    Arnold Ng          Created.
110   --
111 
112   PROCEDURE assign_citizenship_rec(
113     p_citizenship_obj            IN            HZ_CITIZENSHIP_OBJ,
114     p_party_id                   IN            NUMBER,
115     px_citizenship_rec           IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE
116   );
117 
118   -- PRIVATE PROCEDURE assign_employ_hist_rec
119   --
120   -- DESCRIPTION
121   --     Assign attribute value from employment history object to plsql record.
122   --
123   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
124   --
125   -- ARGUMENTS
126   --   IN:
127   --     p_employ_hist_obj    Employment history object.
128   --     p_party_id           Party ID.
129   --   IN/OUT:
130   --     px_employ_hist_rec   Employment history plsql record.
131   --
132   -- NOTES
133   --
134   -- MODIFICATION HISTORY
135   --
136   --   14-DEC-2004    Arnold Ng          Created.
137   --
138 
139   PROCEDURE assign_employ_hist_rec(
140     p_employ_hist_obj            IN            HZ_EMPLOY_HIST_BO,
141     p_party_id                   IN            NUMBER,
142     px_employ_hist_rec           IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE
143   );
144 
145   -- PRIVATE PROCEDURE assign_work_class_rec
146   --
147   -- DESCRIPTION
148   --     Assign attribute value from work class object to plsql record.
149   --
150   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
151   --
152   -- ARGUMENTS
153   --   IN:
154   --     p_work_class_obj     Work class object.
155   --     p_employ_hist_id     Employment history ID.
156   --   IN/OUT:
157   --     px_work_class_rec    Work class plsql record.
158   --
159   -- NOTES
160   --
161   -- MODIFICATION HISTORY
162   --
163   --   14-DEC-2004    Arnold Ng          Created.
164   --
165 
166   PROCEDURE assign_work_class_rec(
167     p_work_class_obj             IN            HZ_WORK_CLASS_OBJ,
168     p_employ_hist_id             IN            NUMBER,
169     px_work_class_rec            IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE
170   );
171 
172   -- PRIVATE PROCEDURE assign_interest_rec
173   --
174   -- DESCRIPTION
175   --     Assign attribute value from person interest object to plsql record.
176   --
177   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
178   --
179   -- ARGUMENTS
180   --   IN:
181   --     p_work_class_obj     Person interest object.
182   --     p_party_id           Party ID.
183   --   IN/OUT:
184   --     px_person_interest_rec    Person interest plsql record.
185   --
186   -- NOTES
187   --
188   -- MODIFICATION HISTORY
189   --
190   --   14-DEC-2004    Arnold Ng          Created.
191   --
192 
193   PROCEDURE assign_interest_rec(
194     p_person_interest_obj        IN            HZ_PERSON_INTEREST_OBJ,
195     p_party_id                   IN            NUMBER,
196     px_person_interest_rec       IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.PERSON_INTEREST_REC_TYPE
197   );
198 
199   -- PRIVATE PROCEDURE create_person_info
200   --
201   -- DESCRIPTION
202   --     Create person information, such as language, education, citizenship,
203   --     employment history and interest
204   --
205   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
206   --
207   -- ARGUMENTS
208   --   IN:
209   --     p_language_obj       Person language object.
210   --     p_education_obj      Education object.
211   --     p_citizenship_obj    Citizenship object.
212   --     p_employ_hist_obj    Employment history object.
213   --     p_interest_obj       Person interest object.
214   --     p_party_id           Party ID.
215   --   OUT:
216   --     x_return_status      Return status after the call. The status can
217   --                          be fnd_api.g_ret_sts_success (success),
218   --                          fnd_api.g_ret_sts_error (error),
219   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
220   --     x_msg_count          Number of messages in message stack.
221   --     x_msg_data           Message text if x_msg_count is 1.
222   --
223   -- NOTES
224   --
225   -- MODIFICATION HISTORY
226   --
227   --   14-DEC-2004    Arnold Ng          Created.
228   --
229 
230   PROCEDURE create_person_info(
231     p_language_obj               IN OUT NOCOPY HZ_PERSON_LANG_OBJ_TBL,
232     p_education_obj              IN OUT NOCOPY HZ_EDUCATION_OBJ_TBL,
233     p_citizenship_obj            IN OUT NOCOPY HZ_CITIZENSHIP_OBJ_TBL,
234     p_employ_hist_obj            IN OUT NOCOPY HZ_EMPLOY_HIST_BO_TBL,
235     p_interest_obj               IN OUT NOCOPY HZ_PERSON_INTEREST_OBJ_TBL,
236     p_person_id                  IN         NUMBER,
237     x_return_status              OUT NOCOPY VARCHAR2,
238     x_msg_count                  OUT NOCOPY NUMBER,
239     x_msg_data                   OUT NOCOPY VARCHAR2
240   );
241 
242   -- PRIVATE PROCEDURE save_person_info
243   --
244   -- DESCRIPTION
245   --     Create or update person information, such as language, education, citizenship,
246   --     employment history and interest
247   --
248   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
249   --
250   -- ARGUMENTS
251   --   IN:
252   --     p_language_obj       Person language object.
253   --     p_education_obj      Education object.
254   --     p_citizenship_obj    Citizenship object.
255   --     p_employ_hist_obj    Employment history object.
256   --     p_interest_obj       Person interest object.
257   --     p_party_id           Party ID.
258   --   OUT:
259   --     x_return_status      Return status after the call. The status can
260   --                          be fnd_api.g_ret_sts_success (success),
261   --                          fnd_api.g_ret_sts_error (error),
262   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
263   --     x_msg_count          Number of messages in message stack.
264   --     x_msg_data           Message text if x_msg_count is 1.
265   --
266   -- NOTES
267   --
268   -- MODIFICATION HISTORY
269   --
270   --   14-DEC-2004    Arnold Ng          Created.
271   --
272 
273   PROCEDURE save_person_info(
274     p_language_obj               IN OUT NOCOPY HZ_PERSON_LANG_OBJ_TBL,
275     p_education_obj              IN OUT NOCOPY HZ_EDUCATION_OBJ_TBL,
276     p_citizenship_obj            IN OUT NOCOPY HZ_CITIZENSHIP_OBJ_TBL,
277     p_employ_hist_obj            IN OUT NOCOPY HZ_EMPLOY_HIST_BO_TBL,
278     p_interest_obj               IN OUT NOCOPY HZ_PERSON_INTEREST_OBJ_TBL,
279     p_person_id                  IN         NUMBER,
280     x_return_status              OUT NOCOPY VARCHAR2,
281     x_msg_count                  OUT NOCOPY NUMBER,
282     x_msg_data                   OUT NOCOPY VARCHAR2
283   );
284 
285   -- PRIVATE PROCEDURE assign_person_rec
286   --
287   -- DESCRIPTION
288   --     Assign attribute value from person business object to plsql record.
289   --
290   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
291   --
292   -- ARGUMENTS
293   --   IN:
294   --     p_person_obj         Person business object.
295   --     p_person_id          Person ID.
296   --     p_person_os          Person orig system.
297   --     p_person_osr         Person orig system reference.
298   --     p_create_or_update   Create or update flag.
299   --   IN/OUT:
300   --     px_person_rec        Person plsql record.
301   --
302   -- NOTES
303   --
304   -- MODIFICATION HISTORY
305   --
306   --   14-DEC-2004    Arnold Ng          Created.
307 
308   PROCEDURE assign_person_rec(
309     p_person_obj                 IN            HZ_PERSON_BO,
310     p_person_id                  IN            NUMBER,
311     p_person_os                  IN            VARCHAR2,
312     p_person_osr                 IN            VARCHAR2,
313     p_create_or_update           IN            VARCHAR2 := 'C',
314     px_person_rec                IN OUT NOCOPY HZ_PARTY_V2PUB.PERSON_REC_TYPE
315   ) IS
316   BEGIN
317     px_person_rec.person_pre_name_adjunct := p_person_obj.person_pre_name_adjunct;
318     px_person_rec.person_first_name := p_person_obj.person_first_name;
319     px_person_rec.person_middle_name := p_person_obj.person_middle_name;
320     px_person_rec.person_last_name := p_person_obj.person_last_name;
321     px_person_rec.person_name_suffix := p_person_obj.person_name_suffix;
322     px_person_rec.person_title := p_person_obj.person_title;
323     px_person_rec.person_academic_title := p_person_obj.person_academic_title;
324     px_person_rec.person_previous_last_name := p_person_obj.person_previous_last_name;
325     px_person_rec.person_initials := p_person_obj.person_initials;
326     px_person_rec.known_as  := p_person_obj.known_as;
327     px_person_rec.known_as2 := p_person_obj.known_as2;
328     px_person_rec.known_as3 := p_person_obj.known_as3;
329     px_person_rec.known_as4 := p_person_obj.known_as4;
330     px_person_rec.known_as5 := p_person_obj.known_as5;
331     px_person_rec.person_name_phonetic := p_person_obj.person_name_phonetic;
332     px_person_rec.person_first_name_phonetic := p_person_obj.person_first_name_phonetic;
333     px_person_rec.person_last_name_phonetic := p_person_obj.person_last_name_phonetic;
334     px_person_rec.middle_name_phonetic := p_person_obj.middle_name_phonetic;
335     px_person_rec.tax_reference := p_person_obj.tax_reference;
336     px_person_rec.jgzz_fiscal_code := p_person_obj.jgzz_fiscal_code;
337     px_person_rec.person_iden_type := p_person_obj.person_iden_type;
338     px_person_rec.person_identifier := p_person_obj.person_identifier;
339     px_person_rec.date_of_birth := p_person_obj.date_of_birth;
340     px_person_rec.place_of_birth := p_person_obj.place_of_birth;
341     px_person_rec.date_of_death := p_person_obj.date_of_death;
342     IF(p_person_obj.deceased_flag in ('Y','N')) THEN
343       px_person_rec.deceased_flag := p_person_obj.deceased_flag;
344     END IF;
345     px_person_rec.gender := p_person_obj.gender;
346     px_person_rec.declared_ethnicity := p_person_obj.declared_ethnicity;
347     px_person_rec.marital_status := p_person_obj.marital_status;
348     px_person_rec.marital_status_effective_date := p_person_obj.marital_status_eff_date;
349     px_person_rec.personal_income := p_person_obj.personal_income;
350     IF(p_person_obj.head_of_household_flag in ('Y','N')) THEN
351       px_person_rec.head_of_household_flag := p_person_obj.head_of_household_flag;
352     END IF;
353     px_person_rec.household_income := p_person_obj.household_income;
354     px_person_rec.household_size := p_person_obj.household_size;
355     px_person_rec.rent_own_ind := p_person_obj.rent_own_ind;
356     px_person_rec.last_known_gps:= p_person_obj.last_known_gps;
357     px_person_rec.internal_flag:= p_person_obj.internal_flag;
358     IF(p_create_or_update = 'C') THEN
359       px_person_rec.party_rec.orig_system:= p_person_os;
360       px_person_rec.party_rec.orig_system_reference:= p_person_osr;
361       px_person_rec.created_by_module:= HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
362     END IF;
363     px_person_rec.actual_content_source:= p_person_obj.actual_content_source;
364     px_person_rec.party_rec.party_id:= p_person_id;
365     px_person_rec.party_rec.party_number:= p_person_obj.party_number;
366     px_person_rec.party_rec.validated_flag:= p_person_obj.validated_flag;
367     IF(p_person_obj.status in ('A','I')) THEN
368       px_person_rec.party_rec.status:= p_person_obj.status;
369     END IF;
370     px_person_rec.party_rec.category_code:= p_person_obj.category_code;
371     px_person_rec.party_rec.salutation:= p_person_obj.salutation;
372     px_person_rec.party_rec.attribute_category:= p_person_obj.attribute_category;
373     px_person_rec.party_rec.attribute1:= p_person_obj.attribute1;
374     px_person_rec.party_rec.attribute2:= p_person_obj.attribute2;
375     px_person_rec.party_rec.attribute3:= p_person_obj.attribute3;
376     px_person_rec.party_rec.attribute4:= p_person_obj.attribute4;
377     px_person_rec.party_rec.attribute5:= p_person_obj.attribute5;
378     px_person_rec.party_rec.attribute6:= p_person_obj.attribute6;
379     px_person_rec.party_rec.attribute7:= p_person_obj.attribute7;
380     px_person_rec.party_rec.attribute8:= p_person_obj.attribute8;
381     px_person_rec.party_rec.attribute9:= p_person_obj.attribute9;
382     px_person_rec.party_rec.attribute10:= p_person_obj.attribute10;
383     px_person_rec.party_rec.attribute11:= p_person_obj.attribute11;
384     px_person_rec.party_rec.attribute12:= p_person_obj.attribute12;
385     px_person_rec.party_rec.attribute13:= p_person_obj.attribute13;
386     px_person_rec.party_rec.attribute14:= p_person_obj.attribute14;
387     px_person_rec.party_rec.attribute15:= p_person_obj.attribute15;
388     px_person_rec.party_rec.attribute16:= p_person_obj.attribute16;
389     px_person_rec.party_rec.attribute17:= p_person_obj.attribute17;
390     px_person_rec.party_rec.attribute18:= p_person_obj.attribute18;
391     px_person_rec.party_rec.attribute19:= p_person_obj.attribute19;
392     px_person_rec.party_rec.attribute20:= p_person_obj.attribute20;
393     px_person_rec.party_rec.attribute21:= p_person_obj.attribute21;
394     px_person_rec.party_rec.attribute22:= p_person_obj.attribute22;
395     px_person_rec.party_rec.attribute23:= p_person_obj.attribute23;
396     px_person_rec.party_rec.attribute24:= p_person_obj.attribute24;
397   END assign_person_rec;
398 
399   -- PRIVATE PROCEDURE assign_person_lang_rec
400   --
401   -- DESCRIPTION
402   --     Assign attribute value from person language object to plsql record.
403   --
404   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
405   --
406   -- ARGUMENTS
407   --   IN:
408   --     p_person_lang_obj    Person language object.
409   --     p_party_id           Party ID.
410   --   IN/OUT:
411   --     px_person_lang_rec   Person language plsql record.
412   --
413   -- NOTES
414   --
415   -- MODIFICATION HISTORY
416   --
417   --   14-DEC-2004    Arnold Ng          Created.
418   --
419 
420   PROCEDURE assign_person_lang_rec(
421     p_person_lang_obj            IN            HZ_PERSON_LANG_OBJ,
422     p_party_id                   IN            NUMBER,
423     px_person_lang_rec           IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE
424   )IS
425   BEGIN
426     px_person_lang_rec.language_use_reference_id := p_person_lang_obj.language_use_reference_id;
427     px_person_lang_rec.language_name             := p_person_lang_obj.language_name;
428     px_person_lang_rec.party_id                  := p_party_id;
429     IF(p_person_lang_obj.native_language in ('Y','N')) THEN
430       px_person_lang_rec.native_language           := p_person_lang_obj.native_language;
431     END IF;
432     IF(p_person_lang_obj.primary_language_indicator in ('Y','N')) THEN
433       px_person_lang_rec.primary_language_indicator:= p_person_lang_obj.primary_language_indicator;
434     END IF;
435     px_person_lang_rec.reads_level               := p_person_lang_obj.reads_level;
436     px_person_lang_rec.speaks_level              := p_person_lang_obj.speaks_level;
437     px_person_lang_rec.writes_level              := p_person_lang_obj.writes_level;
438     px_person_lang_rec.spoken_comprehension_level:= p_person_lang_obj.spoken_comprehension_level;
439     IF(p_person_lang_obj.status in ('A','I')) THEN
440       px_person_lang_rec.status                    := p_person_lang_obj.status;
441     END IF;
442     px_person_lang_rec.created_by_module         := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
443   END assign_person_lang_rec;
444 
445   -- PRIVATE PROCEDURE assign_education_rec
446   --
447   -- DESCRIPTION
448   --     Assign attribute value from education object to plsql record.
449   --
450   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
451   --
452   -- ARGUMENTS
453   --   IN:
454   --     p_education_obj      Education object.
455   --     p_party_id           Party ID.
456   --   IN/OUT:
457   --     px_education_rec     Education plsql record.
458   --
459   -- NOTES
460   --
461   -- MODIFICATION HISTORY
462   --
463   --   14-DEC-2004    Arnold Ng          Created.
464   --
465 
466   PROCEDURE assign_education_rec(
467     p_education_obj              IN            HZ_EDUCATION_OBJ,
468     p_party_id                   IN            NUMBER,
469     px_education_rec             IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE
470   )IS
471   BEGIN
472     px_education_rec.education_id:= p_education_obj.education_id;
473     px_education_rec.party_id:= p_party_id;
474     px_education_rec.course_major:= p_education_obj.course_major;
475     px_education_rec.degree_received:= p_education_obj.degree_received;
476     px_education_rec.start_date_attended:= p_education_obj.start_date_attended;
477     px_education_rec.last_date_attended:= p_education_obj.last_date_attended;
478     px_education_rec.school_attended_name:= p_education_obj.school_attended_name;
479     px_education_rec.school_party_id:= p_education_obj.school_party_id;
480     px_education_rec.type_of_school:= p_education_obj.type_of_school;
481     IF(p_education_obj.status in ('A','I')) THEN
482       px_education_rec.status:= p_education_obj.status;
483     END IF;
484     px_education_rec.created_by_module:= HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
485   END assign_education_rec;
486 
487   -- PRIVATE PROCEDURE assign_citizenship_rec
488   --
489   -- DESCRIPTION
490   --     Assign attribute value from citizenship object to plsql record.
491   --
492   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
493   --
494   -- ARGUMENTS
495   --   IN:
496   --     p_citizenship_obj    Citizenship object.
497   --     p_party_id           Party ID.
498   --   IN/OUT:
499   --     px_citizenship_rec   Citizenship plsql record.
500   --
501   -- NOTES
502   --
503   -- MODIFICATION HISTORY
504   --
505   --   14-DEC-2004    Arnold Ng          Created.
506   --
507 
508   PROCEDURE assign_citizenship_rec(
509     p_citizenship_obj            IN            HZ_CITIZENSHIP_OBJ,
510     p_party_id                   IN            NUMBER,
511     px_citizenship_rec           IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE
512   )IS
513   BEGIN
514     px_citizenship_rec.citizenship_id := p_citizenship_obj.citizenship_id;
515     px_citizenship_rec.party_id := p_party_id;
516     px_citizenship_rec.birth_or_selected := p_citizenship_obj.birth_or_selected;
517     px_citizenship_rec.country_code := p_citizenship_obj.country_code;
518     px_citizenship_rec.date_recognized := p_citizenship_obj.date_recognized;
519     px_citizenship_rec.date_disowned := p_citizenship_obj.date_disowned;
520     px_citizenship_rec.end_date := p_citizenship_obj.end_date;
521     px_citizenship_rec.document_type := p_citizenship_obj.document_type;
522     px_citizenship_rec.document_reference := p_citizenship_obj.document_reference;
523     IF(p_citizenship_obj.status in ('A','I')) THEN
524       px_citizenship_rec.status := p_citizenship_obj.status;
525     END IF;
526     px_citizenship_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
527   END assign_citizenship_rec;
528 
529   -- PRIVATE PROCEDURE assign_employ_hist_rec
530   --
531   -- DESCRIPTION
532   --     Assign attribute value from employment history object to plsql record.
533   --
534   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
535   --
536   -- ARGUMENTS
537   --   IN:
538   --     p_employ_hist_obj    Employment history object.
539   --     p_party_id           Party ID.
540   --   IN/OUT:
541   --     px_employ_hist_rec   Employment history plsql record.
542   --
543   -- NOTES
544   --
545   -- MODIFICATION HISTORY
546   --
547   --   14-DEC-2004    Arnold Ng          Created.
548   --
549 
550   PROCEDURE assign_employ_hist_rec(
551     p_employ_hist_obj            IN            HZ_EMPLOY_HIST_BO,
552     p_party_id                   IN            NUMBER,
553     px_employ_hist_rec           IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE
554   )IS
555   BEGIN
556     px_employ_hist_rec.employment_history_id := p_employ_hist_obj.employment_history_id;
557     px_employ_hist_rec.party_id := p_party_id;
558     px_employ_hist_rec.begin_date := p_employ_hist_obj.begin_date;
559     px_employ_hist_rec.end_date := p_employ_hist_obj.end_date;
560     px_employ_hist_rec.employment_type_code := p_employ_hist_obj.employment_type_code;
561     px_employ_hist_rec.employed_as_title_code := p_employ_hist_obj.employed_as_title_code;
562     px_employ_hist_rec.employed_as_title := p_employ_hist_obj.employed_as_title;
563     px_employ_hist_rec.employed_by_name_company := p_employ_hist_obj.employed_by_name_company;
564     px_employ_hist_rec.employed_by_party_id := p_employ_hist_obj.employed_by_party_id;
565     px_employ_hist_rec.employed_by_division_name := p_employ_hist_obj.employed_by_division_name;
566     px_employ_hist_rec.supervisor_name := p_employ_hist_obj.supervisor_name;
567     px_employ_hist_rec.branch := p_employ_hist_obj.branch;
568     px_employ_hist_rec.military_rank := p_employ_hist_obj.military_rank;
569     px_employ_hist_rec.served := p_employ_hist_obj.served;
570     px_employ_hist_rec.station := p_employ_hist_obj.station;
571     px_employ_hist_rec.responsibility := p_employ_hist_obj.responsibility;
572     px_employ_hist_rec.weekly_work_hours := p_employ_hist_obj.weekly_work_hours;
573     px_employ_hist_rec.reason_for_leaving := p_employ_hist_obj.reason_for_leaving;
574     px_employ_hist_rec.faculty_position_flag := p_employ_hist_obj.faculty_position_flag;
575     px_employ_hist_rec.tenure_code := p_employ_hist_obj.tenure_code;
576     px_employ_hist_rec.fraction_of_tenure := p_employ_hist_obj.fraction_of_tenure;
577     px_employ_hist_rec.comments := p_employ_hist_obj.comments;
578     IF(p_employ_hist_obj.status in ('A','I')) THEN
579       px_employ_hist_rec.status := p_employ_hist_obj.status;
580     END IF;
581     px_employ_hist_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
582   END assign_employ_hist_rec;
583 
584   -- PRIVATE PROCEDURE assign_work_class_rec
585   --
586   -- DESCRIPTION
587   --     Assign attribute value from work class object to plsql record.
588   --
589   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
590   --
591   -- ARGUMENTS
592   --   IN:
593   --     p_work_class_obj     Work class object.
594   --     p_employ_hist_id     Employment history ID.
595   --   IN/OUT:
596   --     px_work_class_rec    Work class plsql record.
597   --
598   -- NOTES
599   --
600   -- MODIFICATION HISTORY
601   --
602   --   14-DEC-2004    Arnold Ng          Created.
603   --
604 
605   PROCEDURE assign_work_class_rec(
606     p_work_class_obj             IN            HZ_WORK_CLASS_OBJ,
607     p_employ_hist_id             IN            NUMBER,
608     px_work_class_rec            IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE
609   )IS
610   BEGIN
611     px_work_class_rec.work_class_id := p_work_class_obj.work_class_id;
612     px_work_class_rec.level_of_experience := p_work_class_obj.level_of_experience;
613     px_work_class_rec.work_class_name := p_work_class_obj.work_class_name;
614     px_work_class_rec.employment_history_id := p_employ_hist_id;
615     IF(p_work_class_obj.status in ('A','I')) THEN
616       px_work_class_rec.status := p_work_class_obj.status;
617     END IF;
618     px_work_class_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
619   END assign_work_class_rec;
620 
621   -- PRIVATE PROCEDURE assign_interest_rec
622   --
623   -- DESCRIPTION
624   --     Assign attribute value from person interest object to plsql record.
625   --
626   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
627   --
628   -- ARGUMENTS
629   --   IN:
630   --     p_work_class_obj     Person interest object.
631   --     p_party_id           Party ID.
632   --   IN/OUT:
633   --     px_person_interest_rec    Person interest plsql record.
634   --
635   -- NOTES
636   --
637   -- MODIFICATION HISTORY
638   --
639   --   14-DEC-2004    Arnold Ng          Created.
640   --
641 
642   PROCEDURE assign_interest_rec(
643     p_person_interest_obj        IN            HZ_PERSON_INTEREST_OBJ,
644     p_party_id                   IN            NUMBER,
645     px_person_interest_rec       IN OUT NOCOPY HZ_PERSON_INFO_V2PUB.PERSON_INTEREST_REC_TYPE
646   )IS
647   BEGIN
648     px_person_interest_rec.person_interest_id := p_person_interest_obj.person_interest_id;
649     px_person_interest_rec.level_of_interest := p_person_interest_obj.level_of_interest;
650     px_person_interest_rec.party_id := p_party_id;
651     px_person_interest_rec.level_of_participation := p_person_interest_obj.level_of_participation;
652     px_person_interest_rec.interest_type_code := p_person_interest_obj.interest_type_code;
653     px_person_interest_rec.comments := p_person_interest_obj.comments;
654     IF(p_person_interest_obj.sport_indicator in ('Y','N')) THEN
655       px_person_interest_rec.sport_indicator := p_person_interest_obj.sport_indicator;
656     END IF;
657     px_person_interest_rec.sub_interest_type_code := p_person_interest_obj.sub_interest_type_code;
658     px_person_interest_rec.interest_name := p_person_interest_obj.interest_name;
659     px_person_interest_rec.team := p_person_interest_obj.team;
660     px_person_interest_rec.since := p_person_interest_obj.since;
661     IF(p_person_interest_obj.status in ('A','I')) THEN
662       px_person_interest_rec.status := p_person_interest_obj.status;
663     END IF;
664     px_person_interest_rec.created_by_module := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
665   END assign_interest_rec;
666 
667   -- PROCEDURE do_create_person_bo
668   --
669   -- DESCRIPTION
670   --     Create a person business object.
671   PROCEDURE do_create_person_bo(
672     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
673     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
674     p_person_obj          IN OUT NOCOPY HZ_PERSON_BO,
675     p_created_by_module   IN            VARCHAR2,
676     p_obj_source          IN            VARCHAR2 := null,
677     x_return_status       OUT NOCOPY    VARCHAR2,
678     x_msg_count           OUT NOCOPY    NUMBER,
679     x_msg_data            OUT NOCOPY    VARCHAR2,
680     x_person_id           OUT NOCOPY    NUMBER,
681     x_person_os           OUT NOCOPY    VARCHAR2,
682     x_person_osr          OUT NOCOPY    VARCHAR2
683   ) IS
684     l_debug_prefix             VARCHAR2(30);
685     l_person_rec               HZ_PARTY_V2PUB.PERSON_REC_TYPE;
686     l_profile_id               NUMBER;
687     l_party_number             VARCHAR2(30);
688     l_dummy_id                 NUMBER;
689     l_valid_obj                BOOLEAN;
690     l_bus_object               HZ_REGISTRY_VALIDATE_BO_PVT.COMPLETENESS_REC_TYPE;
691     l_errorcode                NUMBER;
692     l_raise_event              BOOLEAN := FALSE;
693     l_cbm                      VARCHAR2(30);
694     l_event_id                 NUMBER;
695     l_telex_objs               HZ_TELEX_CP_BO_TBL;
696     l_edi_objs                 HZ_EDI_CP_BO_TBL;
697     l_eft_objs                 HZ_EFT_CP_BO_TBL;
698     l_party_search_rec 	       HZ_PARTY_SEARCH.PARTY_SEARCH_REC_TYPE;
699     l_party_site_list          HZ_PARTY_SEARCH.PARTY_SITE_LIST;
700     l_contact_list             HZ_PARTY_SEARCH.CONTACT_LIST;
701     l_contact_point_list       HZ_PARTY_SEARCH.CONTACT_POINT_LIST;
702     l_match_rule_id number;
703     l_search_ctx_id NUMBER;
704     l_num_matches NUMBER;
705     l_party_id NUMBER;
706     l_match_score NUMBER;
707     l_tmp_score NUMBER;
708     l_match_threshold NUMBER;
709     l_automerge_threshold NUMBER;
710     l_dup_batch_id NUMBER;
711     l_dup_set_id NUMBER;
712     l_request_id NUMBER;
713     l_dup_batch_rec  HZ_DUP_PVT.DUP_BATCH_REC_TYPE;
714     l_dup_set_rec    HZ_DUP_PVT.DUP_SET_REC_TYPE;
715     l_dup_party_tbl  HZ_DUP_PVT.DUP_PARTY_TBL_TYPE;
716     l_party_name     varchar2(360);
717     l_overlap_merge_req_id NUMBER;
718     l_object_version_number NUMBER;
719     l_batch_id NUMBER;
720     l_cpt_count NUMBER;
721 
722     cursor get_obj_version_csr(cp_dup_set_id number) is
723 		SELECT object_version_number
724   		FROM   hz_dup_sets
725   		WHERE  dup_set_id = cp_dup_set_id;
726 
727   BEGIN
728     -- Standard start of API savepoint
729     SAVEPOINT do_create_person_bo_pub;
730 
731     -- initialize API return status to success.
732     x_return_status := FND_API.G_RET_STS_SUCCESS;
733 
734     -- Initialize message list if p_init_msg_list is set to TRUE.
735     IF FND_API.to_Boolean(p_init_msg_list) THEN
736       FND_MSG_PUB.initialize;
737     END IF;
738 
739     -- initialize Global variable
740     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
741     IF(p_created_by_module IS NULL) THEN
742       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
743     ELSE
744       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
745     END IF;
746 
747     -- Debug info.
748     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
749         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(+)',
750                                p_prefix=>l_debug_prefix,
751                                p_msg_level=>fnd_log.level_procedure);
752     END IF;
753 
754     -- Base on p_validate_bo_flag, check the completeness of business objects
755     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
756       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
757         p_bus_object_code         => 'PERSON',
758         x_bus_object              => l_bus_object
759       );
760 
761       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_person_bo_comp(
762                        p_person_obj => p_person_obj,
763                        p_bus_object => l_bus_object
764                      );
765       IF NOT(l_valid_obj) THEN
766         RAISE fnd_api.g_exc_error;
767       END IF;
768 
769       -- find out if raise event at the end
770       l_raise_event := HZ_PARTY_BO_PVT.is_raising_create_event(
771                          p_obj_complete_flag => l_valid_obj);
772 
773       IF(l_raise_event) THEN
774         -- get event_id and set global variable to event_id for
775         -- BOT populate function
776         SELECT HZ_BUS_OBJ_TRACKING_S.nextval
777         INTO l_event_id
778         FROM DUAL;
779       END IF;
780     ELSE
781       l_raise_event := FALSE;
782     END IF;
783 
784     x_person_id := p_person_obj.person_id;
785     x_person_os := p_person_obj.orig_system;
786     x_person_osr:= p_person_obj.orig_system_reference;
787 
788     -- check input person party id and os+osr
789     hz_registry_validate_bo_pvt.validate_ssm_id(
790       px_id              => x_person_id,
791       px_os              => x_person_os,
792       px_osr             => x_person_osr,
793       p_obj_type         => 'PERSON',
794       p_create_or_update => 'C',
795       x_return_status    => x_return_status,
796       x_msg_count        => x_msg_count,
797       x_msg_data         => x_msg_data);
798 
799     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
800       RAISE FND_API.G_EXC_ERROR;
801     END IF;
802 
803     ---------------------------------
804     -- Assign person and party record
805     ---------------------------------
806     assign_person_rec(
807       p_person_obj  => p_person_obj,
808       p_person_id   => x_person_id,
809       p_person_os   => x_person_os,
810       p_person_osr  => x_person_osr,
811       px_person_rec => l_person_rec
812     );
813 
814     HZ_PARTY_V2PUB.create_person(
815       p_person_rec                => l_person_rec,
816       x_party_id                  => x_person_id,
817       x_party_number              => l_party_number,
818       x_profile_id                => l_profile_id,
819       x_return_status             => x_return_status,
820       x_msg_count                 => x_msg_count,
821       x_msg_data                  => x_msg_data
822     );
823 
824     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
825       RAISE FND_API.G_EXC_ERROR;
826     END IF;
827 
828     -- assign person party_id
829     p_person_obj.person_id := x_person_id;
830     p_person_obj.party_number := l_party_number;
831     --------------------------
832     -- Create Person Ext Attrs
833     --------------------------
834     IF((p_person_obj.ext_attributes_objs IS NOT NULL) AND
835        (p_person_obj.ext_attributes_objs.COUNT > 0)) THEN
836       HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
837         p_ext_attr_objs             => p_person_obj.ext_attributes_objs,
838         p_parent_obj_id             => l_profile_id,
839         p_parent_obj_type           => 'PERSON',
840         p_create_or_update          => 'C',
841         x_return_status             => x_return_status,
842         x_errorcode                 => l_errorcode,
843         x_msg_count                 => x_msg_count,
844         x_msg_data                  => x_msg_data
845       );
846 
847       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
848         RAISE FND_API.G_EXC_ERROR;
849       END IF;
850     END IF;
851 
852     ----------------------------
853     -- Call party info v2pub api
854     ----------------------------
855     IF(((p_person_obj.language_objs IS NOT NULL) AND (p_person_obj.language_objs.COUNT > 0)) OR
856        ((p_person_obj.education_objs IS NOT NULL) AND (p_person_obj.education_objs.COUNT > 0)) OR
857        ((p_person_obj.citizenship_objs IS NOT NULL) AND (p_person_obj.citizenship_objs.COUNT > 0)) OR
858        ((p_person_obj.employ_hist_objs IS NOT NULL) AND (p_person_obj.employ_hist_objs.COUNT > 0)) OR
859        ((p_person_obj.interest_objs IS NOT NULL) AND (p_person_obj.interest_objs.COUNT > 0))) THEN
860       create_person_info(
861         p_language_obj              => p_person_obj.language_objs,
862         p_education_obj             => p_person_obj.education_objs,
863         p_citizenship_obj           => p_person_obj.citizenship_objs,
864         p_employ_hist_obj           => p_person_obj.employ_hist_objs,
865         p_interest_obj              => p_person_obj.interest_objs,
866         p_person_id                 => x_person_id,
867         x_return_status             => x_return_status,
868         x_msg_count                 => x_msg_count,
869         x_msg_data                  => x_msg_data
870       );
871 
872       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
873         RAISE FND_API.G_EXC_ERROR;
874       END IF;
875     END IF;
876 
877     ----------------------------
878     -- Party Preferences
879     ----------------------------
880     IF((p_person_obj.preference_objs IS NOT NULL) AND
881        (p_person_obj.preference_objs.COUNT > 0)) THEN
882       HZ_PARTY_BO_PVT.save_party_preferences(
883         p_party_pref_objs           => p_person_obj.preference_objs,
884         p_party_id                  => x_person_id,
885         x_return_status             => x_return_status,
886         x_msg_count                 => x_msg_count,
887         x_msg_data                  => x_msg_data
888       );
889 
890       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
891         RAISE FND_API.G_EXC_ERROR;
892       END IF;
893     END IF;
894 
895     ----------------------------
896     -- Contact Preferences
897     ----------------------------
898     IF((p_person_obj.contact_pref_objs IS NOT NULL) AND
899        (p_person_obj.contact_pref_objs.COUNT > 0)) THEN
900       HZ_CONTACT_PREFERENCE_BO_PVT.create_contact_preferences(
901         p_cp_pref_objs           => p_person_obj.contact_pref_objs,
902         p_contact_level_table_id => x_person_id,
903         p_contact_level_table    => 'HZ_PARTIES',
904         x_return_status          => x_return_status,
905         x_msg_count              => x_msg_count,
906         x_msg_data               => x_msg_data
907       );
908 
909       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
910         RAISE FND_API.G_EXC_ERROR;
911       END IF;
912     END IF;
913 
914     ----------------------------
915     -- Relationship api
916     ----------------------------
917     IF((p_person_obj.relationship_objs IS NOT NULL) AND
918        (p_person_obj.relationship_objs.COUNT > 0)) THEN
919       HZ_PARTY_BO_PVT.create_relationships(
920         p_rel_objs                  => p_person_obj.relationship_objs,
921         p_subject_id                => x_person_id,
922         p_subject_type              => 'PERSON',
923         x_return_status             => x_return_status,
924         x_msg_count                 => x_msg_count,
925         x_msg_data                  => x_msg_data
926       );
927 
928       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
929         RAISE FND_API.G_EXC_ERROR;
930       END IF;
931     END IF;
932 
933     ----------------------------
934     -- Classification api
935     ----------------------------
936     IF((p_person_obj.class_objs IS NOT NULL) AND
937        (p_person_obj.class_objs.COUNT > 0)) THEN
938       HZ_PARTY_BO_PVT.create_classifications(
939         p_code_assign_objs          => p_person_obj.class_objs,
940         p_owner_table_name          => 'HZ_PARTIES',
941         p_owner_table_id            => x_person_id,
942         x_return_status             => x_return_status,
943         x_msg_count                 => x_msg_count,
944         x_msg_data                  => x_msg_data
945       );
946 
947       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
948         RAISE FND_API.G_EXC_ERROR;
949       END IF;
950     END IF;
951 
952     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
953 
954     ----------------------------
955     -- Create logical party site
956     ----------------------------
957     IF((p_person_obj.party_site_objs IS NOT NULL) AND
958        (p_person_obj.party_site_objs.COUNT > 0)) THEN
959       HZ_PARTY_SITE_BO_PVT.save_party_sites(
960         p_ps_objs            => p_person_obj.party_site_objs,
961         p_create_update_flag => 'C',
962         p_obj_source         => p_obj_source,
963         x_return_status      => x_return_status,
964         x_msg_count          => x_msg_count,
965         x_msg_data           => x_msg_data,
966         p_parent_id          => x_person_id,
967         p_parent_os          => x_person_os,
968         p_parent_osr         => x_person_osr,
969         p_parent_obj_type    => 'PERSON'
970       );
971 
972       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
973         RAISE FND_API.G_EXC_ERROR;
974       END IF;
975     END IF;
976 
977     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
978 
979     ------------------------
980     -- Create contact points
981     ------------------------
982     IF(((p_person_obj.phone_objs IS NOT NULL) AND (p_person_obj.phone_objs.COUNT > 0)) OR
983        ((p_person_obj.email_objs IS NOT NULL) AND (p_person_obj.email_objs.COUNT > 0)) OR
984        ((p_person_obj.web_objs IS NOT NULL) AND (p_person_obj.web_objs.COUNT > 0)) OR
985        ((p_person_obj.sms_objs IS NOT NULL) AND (p_person_obj.sms_objs.COUNT > 0))) THEN
986       HZ_CONTACT_POINT_BO_PVT.save_contact_points(
987         p_phone_objs         => p_person_obj.phone_objs,
988         p_telex_objs         => l_telex_objs,
989         p_email_objs         => p_person_obj.email_objs,
990         p_web_objs           => p_person_obj.web_objs,
991         p_edi_objs           => l_edi_objs,
992         p_eft_objs           => l_eft_objs,
993         p_sms_objs           => p_person_obj.sms_objs,
994         p_owner_table_id     => x_person_id,
995         p_owner_table_os     => x_person_os,
996         p_owner_table_osr    => x_person_osr,
997         p_parent_obj_type    => 'PERSON',
998         p_create_update_flag => 'C',
999         p_obj_source         => p_obj_source,
1000         x_return_status      => x_return_status,
1001         x_msg_count          => x_msg_count,
1002         x_msg_data           => x_msg_data
1003       );
1004 
1005       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1006         RAISE FND_API.G_EXC_ERROR;
1007       END IF;
1008     END IF;
1009 
1010     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1011 
1012     ----------------------------
1013     -- Certifications
1014     ----------------------------
1015     IF((p_person_obj.certification_objs IS NOT NULL) AND
1016        (p_person_obj.certification_objs.COUNT > 0)) THEN
1017       HZ_PARTY_BO_PVT.create_certifications(
1018         p_cert_objs                 => p_person_obj.certification_objs,
1019         p_party_id                  => x_person_id,
1020         x_return_status             => x_return_status,
1021         x_msg_count                 => x_msg_count,
1022         x_msg_data                  => x_msg_data
1023       );
1024 
1025       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1026         RAISE FND_API.G_EXC_ERROR;
1027       END IF;
1028     END IF;
1029 
1030     ----------------------------
1031     -- Financial Profiles
1032     ----------------------------
1033     IF((p_person_obj.financial_prof_objs IS NOT NULL) AND
1034        (p_person_obj.financial_prof_objs.COUNT > 0)) THEN
1035       HZ_PARTY_BO_PVT.create_financial_profiles(
1036         p_fin_prof_objs             => p_person_obj.financial_prof_objs,
1037         p_party_id                  => x_person_id,
1038         x_return_status             => x_return_status,
1039         x_msg_count                 => x_msg_count,
1040         x_msg_data                  => x_msg_data
1041       );
1042 
1043       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1044         RAISE FND_API.G_EXC_ERROR;
1045       END IF;
1046     END IF;
1047 
1048   ----------------------------------
1049   --  Party Usages -------
1050   ----------------------------------
1051    IF ((p_person_obj.party_usage_objs IS NOT NULL) AND
1052       (p_person_obj.party_usage_objs.COUNT > 0 )) THEN
1053        HZ_PARTY_BO_PVT.create_party_usage_assgmnt(
1054 	   p_party_usg_objs				=> p_person_obj.party_usage_objs,
1055 	   p_party_id					=> x_person_id,
1056 	   x_return_status				=> x_return_status,
1057 	   x_msg_count					=> x_msg_count,
1058 	   x_msg_data					=> x_msg_data
1059 	   );
1060         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1061         RAISE FND_API.G_EXC_ERROR;
1062       END IF;
1063     END IF;
1064 
1065 
1066     -- raise event
1067     IF(l_raise_event) THEN
1068       HZ_PARTY_BO_PVT.call_bes(
1069         p_party_id         => x_person_id,
1070         p_bo_code          => 'PERSON',
1071         p_create_or_update => 'C',
1072         p_obj_source       => p_obj_source,
1073         p_event_id         => l_event_id
1074       );
1075     END IF;
1076 
1077   -- Enh: check if DQM is enabled
1078     if nvl(fnd_profile.value('HZ_BO_ENABLE_DQ'),'N') = 'Y'
1079     then
1080 	-- call DQM search API
1081 
1082         l_match_rule_id := nvl(fnd_profile.value('HZ_BO_PERSON_MATCH_RULE'), 240); -- 240: new person match rule
1083 
1084         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1085 		hz_utility_v2pub.debug(p_message=>'Enable DQ on Integration Services: START ',p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1086       		hz_utility_v2pub.debug(p_message=>'Match Rule ID '||l_match_rule_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1087 		hz_utility_v2pub.debug(p_message=>'Newly Created Party Id: '||x_person_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1088         END IF;
1089 
1090 	l_party_search_rec.JGZZ_FISCAL_CODE := l_person_rec.JGZZ_FISCAL_CODE;
1091   	l_party_search_rec.PARTY_ALL_NAMES := hz_format_pub.format_name(x_person_id)|| ' ' ||
1092 						l_person_rec.KNOWN_AS|| ' ' ||
1093 						l_person_rec.KNOWN_AS2|| ' ' ||
1094 						l_person_rec.KNOWN_AS3|| ' ' ||
1095 						l_person_rec.KNOWN_AS4|| ' ' ||
1096 						l_person_rec.KNOWN_AS5;
1097   	l_party_search_rec.KNOWN_AS := l_person_rec.KNOWN_AS;
1098   	l_party_search_rec.KNOWN_AS2 := l_person_rec.KNOWN_AS2;
1099   	l_party_search_rec.KNOWN_AS3 := l_person_rec.KNOWN_AS3;
1100   	l_party_search_rec.KNOWN_AS4 := l_person_rec.KNOWN_AS4;
1101   	l_party_search_rec.KNOWN_AS5 := l_person_rec.KNOWN_AS5;
1102 	l_party_search_rec.TAX_REFERENCE := l_person_rec.TAX_REFERENCE;
1103   	l_party_search_rec.CATEGORY_CODE := p_person_obj.CATEGORY_CODE;
1104   	l_party_search_rec.PARTY_NAME := hz_format_pub.format_name(x_person_id);
1105   	l_party_search_rec.PARTY_NUMBER := p_person_obj.PARTY_NUMBER;
1106   	l_party_search_rec.PARTY_TYPE := 'PERSON';
1107   	l_party_search_rec.STATUS := p_person_obj.STATUS;
1108   	l_party_search_rec.DATE_OF_BIRTH := l_person_rec.DATE_OF_BIRTH;
1109   	l_party_search_rec.DATE_OF_DEATH := l_person_rec.DATE_OF_DEATH;
1110   	l_party_search_rec.DECLARED_ETHNICITY := l_person_rec.DECLARED_ETHNICITY;
1111   	l_party_search_rec.GENDER := l_person_rec.GENDER;
1112   	l_party_search_rec.HEAD_OF_HOUSEHOLD_FLAG := l_person_rec.HEAD_OF_HOUSEHOLD_FLAG;
1113   	l_party_search_rec.HOUSEHOLD_INCOME := l_person_rec.HOUSEHOLD_INCOME;
1114   	l_party_search_rec.HOUSEHOLD_SIZE := l_person_rec.HOUSEHOLD_SIZE;
1115   	l_party_search_rec.LAST_KNOWN_GPS := l_person_rec.LAST_KNOWN_GPS;
1116   	l_party_search_rec.MARITAL_STATUS := l_person_rec.MARITAL_STATUS;
1117   	l_party_search_rec.MARITAL_STATUS_EFFECTIVE_DATE := l_person_rec.MARITAL_STATUS_EFFECTIVE_DATE;
1118   	l_party_search_rec.MIDDLE_NAME_PHONETIC := l_person_rec.MIDDLE_NAME_PHONETIC;
1119   	l_party_search_rec.PERSONAL_INCOME := l_person_rec.PERSONAL_INCOME;
1120   	l_party_search_rec.PERSON_ACADEMIC_TITLE := l_person_rec.PERSON_ACADEMIC_TITLE;
1121   	l_party_search_rec.PERSON_FIRST_NAME := l_person_rec.PERSON_FIRST_NAME;
1122   	l_party_search_rec.PERSON_FIRST_NAME_PHONETIC := l_person_rec.PERSON_FIRST_NAME_PHONETIC;
1123   	l_party_search_rec.PERSON_IDENTIFIER := l_person_rec.PERSON_IDENTIFIER;
1124   	l_party_search_rec.PERSON_IDEN_TYPE := l_person_rec.PERSON_IDEN_TYPE;
1125   	l_party_search_rec.PERSON_INITIALS := l_person_rec.PERSON_INITIALS;
1126   	l_party_search_rec.PERSON_LAST_NAME := l_person_rec.PERSON_LAST_NAME;
1127   	l_party_search_rec.PERSON_LAST_NAME_PHONETIC := l_person_rec.PERSON_LAST_NAME_PHONETIC;
1128   	l_party_search_rec.PERSON_MIDDLE_NAME := l_person_rec.PERSON_MIDDLE_NAME;
1129   	l_party_search_rec.PERSON_NAME := l_party_search_rec.PARTY_NAME;
1130 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1131 		hz_utility_v2pub.debug(p_message=>'l_party_search_rec.PARTY_NAME(formatted):  '||l_party_search_rec.PARTY_NAME,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1132 
1133         END IF;
1134 
1135   	l_party_search_rec.PERSON_NAME_PHONETIC := l_person_rec.PERSON_NAME_PHONETIC;
1136   	l_party_search_rec.PERSON_NAME_SUFFIX := l_person_rec.PERSON_NAME_SUFFIX;
1137   	l_party_search_rec.PERSON_PREVIOUS_LAST_NAME := l_person_rec.PERSON_PREVIOUS_LAST_NAME;
1138   	l_party_search_rec.PERSON_PRE_NAME_ADJUNCT := l_person_rec.PERSON_PRE_NAME_ADJUNCT;
1139   	l_party_search_rec.PERSON_TITLE := l_person_rec.PERSON_TITLE;
1140   	l_party_search_rec.PLACE_OF_BIRTH := l_person_rec.PLACE_OF_BIRTH;
1141 	l_party_search_rec.PARTY_SOURCE_SYSTEM_REF := p_person_obj.orig_system|| ' ' ||p_person_obj.orig_system_reference||' ';
1142 
1143      IF((p_person_obj.party_site_objs IS NOT NULL) AND (p_person_obj.party_site_objs.COUNT > 0)) THEN
1144 
1145       for i in 1..p_person_obj.party_site_objs.COUNT loop
1146 	l_party_site_list(i).ADDR_SOURCE_SYSTEM_REF := p_person_obj.party_site_objs(i).orig_system|| ' ' ||p_person_obj.party_site_objs(i).orig_system_reference||' ';
1147 		l_party_site_list(i).address := p_person_obj.party_site_objs(i).location_obj.ADDRESS1|| ' ' ||
1148      					p_person_obj.party_site_objs(i).location_obj.ADDRESS2|| ' ' ||
1149      					p_person_obj.party_site_objs(i).location_obj.ADDRESS3|| ' ' ||
1150      					p_person_obj.party_site_objs(i).location_obj.ADDRESS4;
1151 
1152 	l_party_site_list(i).ADDRESS1 := p_person_obj.party_site_objs(i).location_obj.ADDRESS1;
1153   	l_party_site_list(i).ADDRESS2 := p_person_obj.party_site_objs(i).location_obj.ADDRESS2;
1154   	l_party_site_list(i).ADDRESS3 := p_person_obj.party_site_objs(i).location_obj.ADDRESS3;
1155   	l_party_site_list(i).ADDRESS4 := p_person_obj.party_site_objs(i).location_obj.ADDRESS4;
1156   	l_party_site_list(i).ADDRESS_EFFECTIVE_DATE := p_person_obj.party_site_objs(i).location_obj.ADDRESS_EFFECTIVE_DATE;
1157   	l_party_site_list(i).ADDRESS_EXPIRATION_DATE := p_person_obj.party_site_objs(i).location_obj.ADDRESS_EXPIRATION_DATE;
1158   	l_party_site_list(i).ADDRESS_LINES_PHONETIC := p_person_obj.party_site_objs(i).location_obj.ADDRESS_LINES_PHONETIC;
1159   	l_party_site_list(i).CITY := p_person_obj.party_site_objs(i).location_obj.CITY;
1160   	l_party_site_list(i).CLLI_CODE := p_person_obj.party_site_objs(i).location_obj.CLLI_CODE;
1161   	l_party_site_list(i).COUNTRY := p_person_obj.party_site_objs(i).location_obj.COUNTRY;
1162   	l_party_site_list(i).COUNTY := p_person_obj.party_site_objs(i).location_obj.COUNTY;
1163   	l_party_site_list(i).LANGUAGE := p_person_obj.party_site_objs(i).LANGUAGE;
1164   	l_party_site_list(i).POSITION := p_person_obj.party_site_objs(i).location_obj.POSITION;
1165   	l_party_site_list(i).POSTAL_CODE := p_person_obj.party_site_objs(i).location_obj.POSTAL_CODE;
1166   	l_party_site_list(i).POSTAL_PLUS4_CODE := p_person_obj.party_site_objs(i).location_obj.POSTAL_PLUS4_CODE;
1167   	l_party_site_list(i).PROVINCE := p_person_obj.party_site_objs(i).location_obj.PROVINCE;
1168 
1169 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1170 		hz_utility_v2pub.debug(p_message=>'l_party_site_list('||i||').address: '||l_party_site_list(i).ADDRESS,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1171 		hz_utility_v2pub.debug(p_message=>'l_party_site_list('||i||').postal_code: '||l_party_site_list(i).POSTAL_CODE,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1172         END IF;
1173   	l_party_site_list(i).SALES_TAX_GEOCODE := p_person_obj.party_site_objs(i).location_obj.SALES_TAX_GEOCODE;
1174   	l_party_site_list(i).SALES_TAX_INSIDE_CITY_LIMITS := p_person_obj.party_site_objs(i).location_obj.SALES_TAX_INSIDE_CITY_LIMITS;
1175   	l_party_site_list(i).STATE := p_person_obj.party_site_objs(i).location_obj.STATE;
1176   	l_party_site_list(i).IDENTIFYING_ADDRESS_FLAG := p_person_obj.party_site_objs(i).IDENTIFYING_ADDRESS_FLAG;
1177   	l_party_site_list(i).MAILSTOP := p_person_obj.party_site_objs(i).MAILSTOP;
1178   	l_party_site_list(i).PARTY_SITE_NAME := p_person_obj.party_site_objs(i).PARTY_SITE_NAME;
1179   	l_party_site_list(i).PARTY_SITE_NUMBER := p_person_obj.party_site_objs(i).PARTY_SITE_NUMBER;
1180   	l_party_site_list(i).STATUS := p_person_obj.party_site_objs(i).STATUS;
1181       end loop;
1182     end if;
1183 
1184 
1185 
1186      IF((p_person_obj.phone_objs IS NOT NULL) AND (p_person_obj.phone_objs.COUNT > 0))
1187      then
1188       for i in 1..p_person_obj.phone_objs.COUNT loop
1189 	l_contact_point_list(i).CPT_SOURCE_SYSTEM_REF := p_person_obj.phone_objs(i).orig_system|| ' ' ||p_person_obj.phone_objs(i).orig_system_reference||' ';
1190         l_contact_point_list(i).CONTACT_POINT_TYPE := 'PHONE';
1191 	l_contact_point_list(i).PRIMARY_FLAG := p_person_obj.phone_objs(i).PRIMARY_FLAG;
1192   	l_contact_point_list(i).STATUS := p_person_obj.phone_objs(i).STATUS;
1193   	l_contact_point_list(i).CONTACT_POINT_PURPOSE := p_person_obj.phone_objs(i).CONTACT_POINT_PURPOSE;
1194   	l_contact_point_list(i).LAST_CONTACT_DT_TIME := p_person_obj.phone_objs(i).LAST_CONTACT_DT_TIME;
1195   	l_contact_point_list(i).PHONE_AREA_CODE := p_person_obj.phone_objs(i).PHONE_AREA_CODE;
1196   	l_contact_point_list(i).PHONE_CALLING_CALENDAR := p_person_obj.phone_objs(i).PHONE_CALLING_CALENDAR;
1197   	l_contact_point_list(i).PHONE_COUNTRY_CODE := p_person_obj.phone_objs(i).PHONE_COUNTRY_CODE;
1198   	l_contact_point_list(i).PHONE_EXTENSION := p_person_obj.phone_objs(i).PHONE_EXTENSION;
1199   	l_contact_point_list(i).PHONE_LINE_TYPE := p_person_obj.phone_objs(i).PHONE_LINE_TYPE;
1200   	l_contact_point_list(i).PHONE_NUMBER := p_person_obj.phone_objs(i).PHONE_NUMBER;
1201   	l_contact_point_list(i).PRIMARY_FLAG := p_person_obj.phone_objs(i).PRIMARY_FLAG;
1202   	l_contact_point_list(i).RAW_PHONE_NUMBER := p_person_obj.phone_objs(i).RAW_PHONE_NUMBER;
1203   	l_contact_point_list(i).TELEPHONE_TYPE := p_person_obj.phone_objs(i).PHONE_LINE_TYPE;
1204   	l_contact_point_list(i).TIME_ZONE := p_person_obj.phone_objs(i).TIMEZONE_ID;
1205 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1206 		hz_utility_v2pub.debug(p_message=>'l_contact_point_list('||i||')'||'.phone_number'||l_contact_point_list(i).PHONE_NUMBER,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1207         end if;
1208         -- Per DQM, flex_formatted_phone_number is the concate of country code, area code and phone number
1209         if p_person_obj.phone_objs(i).PHONE_NUMBER is not null
1210 	then
1211  		l_contact_point_list(i).FLEX_FORMAT_PHONE_NUMBER := p_person_obj.phone_objs(i).PHONE_COUNTRY_CODE ||p_person_obj.phone_objs(i).PHONE_AREA_CODE||p_person_obj.phone_objs(i).PHONE_NUMBER;
1212 
1213 	elsif l_contact_point_list(i).RAW_PHONE_NUMBER is not null
1214 	then
1215 		 hz_contact_point_v2pub.phone_format (
1216                                  p_raw_phone_number       => p_person_obj.phone_objs(i).RAW_PHONE_NUMBER,
1217                                  p_territory_code         => p_person_obj.phone_objs(i).PHONE_COUNTRY_CODE,
1218                                  x_formatted_phone_number => l_contact_point_list(i).FLEX_FORMAT_PHONE_NUMBER,
1219                                  x_phone_country_code     => l_contact_point_list(i).PHONE_COUNTRY_CODE,
1220                                  x_phone_area_code        => l_contact_point_list(i).PHONE_AREA_CODE,
1221                                  x_phone_number           => l_contact_point_list(i).PHONE_NUMBER,
1222                                  x_return_status          => x_return_status,
1223                                  x_msg_count              => x_msg_count,
1224                                  x_msg_data               => x_msg_data);
1225 		 l_contact_point_list(i).FLEX_FORMAT_PHONE_NUMBER := l_contact_point_list(i).PHONE_COUNTRY_CODE ||l_contact_point_list(i).PHONE_AREA_CODE||l_contact_point_list(i).PHONE_NUMBER;
1226 
1227 	end if;
1228 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1229 		hz_utility_v2pub.debug(p_message=>'l_contact_point_list('||to_char(i)||').flex_format_phone_number: '||l_contact_point_list(i).FLEX_FORMAT_PHONE_NUMBER,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1230 		hz_utility_v2pub.debug(p_message=>'l_contact_point_list('||i||').phone_number(parsed): '||l_contact_point_list(i).PHONE_NUMBER,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1231         END IF;
1232        end loop;
1233      end if;
1234 
1235      l_cpt_count := l_contact_point_list.COUNT;
1236 
1237     IF((p_person_obj.email_objs IS NOT NULL) AND (p_person_obj.email_objs.COUNT > 0))
1238     then
1239       for i in 1..p_person_obj.email_objs.COUNT loop
1240 	l_contact_point_list(l_cpt_count+i).CPT_SOURCE_SYSTEM_REF := p_person_obj.email_objs(i).orig_system|| ' ' ||p_person_obj.email_objs(i).orig_system_reference||' ';
1241         l_contact_point_list(l_cpt_count+i).CONTACT_POINT_TYPE := 'EMAIL';
1242 	l_contact_point_list(l_cpt_count+i).PRIMARY_FLAG := p_person_obj.email_objs(i).PRIMARY_FLAG;
1243   	l_contact_point_list(l_cpt_count+i).STATUS := p_person_obj.email_objs(i).STATUS;
1244   	l_contact_point_list(l_cpt_count+i).CONTACT_POINT_PURPOSE := p_person_obj.email_objs(i).CONTACT_POINT_PURPOSE;
1245 	l_contact_point_list(l_cpt_count+i).EMAIL_ADDRESS := p_person_obj.email_objs(i).EMAIL_ADDRESS;
1246         l_contact_point_list(l_cpt_count+i).EMAIL_FORMAT := p_person_obj.email_objs(i).EMAIL_FORMAT;
1247 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1248 		hz_utility_v2pub.debug(p_message=>'l_contact_point_list('||to_char(l_cpt_count+i)||')'||'.email_address'||l_contact_point_list(l_cpt_count+i).EMAIL_ADDRESS,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1249         end if;
1250       end loop;
1251     end if;
1252 
1253      l_cpt_count := l_contact_point_list.COUNT;
1254 
1255     IF((p_person_obj.web_objs IS NOT NULL) AND (p_person_obj.web_objs.COUNT > 0))
1256     then
1257       for i in 1..p_person_obj.web_objs.COUNT loop
1258 	l_contact_point_list(l_cpt_count+i).CPT_SOURCE_SYSTEM_REF := p_person_obj.web_objs(i).orig_system|| ' ' ||p_person_obj.web_objs(i).orig_system_reference||' ';
1259         l_contact_point_list(l_cpt_count+i).CONTACT_POINT_TYPE := 'WEB';
1260 	l_contact_point_list(l_cpt_count+i).PRIMARY_FLAG := p_person_obj.web_objs(i).PRIMARY_FLAG;
1261   	l_contact_point_list(l_cpt_count+i).STATUS := p_person_obj.web_objs(i).STATUS;
1262   	l_contact_point_list(l_cpt_count+i).CONTACT_POINT_PURPOSE := p_person_obj.web_objs(i).CONTACT_POINT_PURPOSE;
1263 	l_contact_point_list(l_cpt_count+i).URL := p_person_obj.web_objs(i).URL ;
1264   	l_contact_point_list(l_cpt_count+i).WEB_TYPE := p_person_obj.web_objs(i).WEB_TYPE;
1265 
1266       end loop;
1267     end if;
1268 
1269     l_cpt_count := l_contact_point_list.COUNT;
1270 
1271     IF((p_person_obj.sms_objs IS NOT NULL) AND (p_person_obj.sms_objs.COUNT > 0))
1272     then
1273       for i in 1..p_person_obj.sms_objs.COUNT loop
1274 	l_contact_point_list(l_cpt_count+i).CPT_SOURCE_SYSTEM_REF := p_person_obj.sms_objs(i).orig_system|| ' ' ||p_person_obj.sms_objs(i).orig_system_reference||' ';
1275         l_contact_point_list(l_cpt_count+i).CONTACT_POINT_TYPE := 'SMS';
1276 	l_contact_point_list(l_cpt_count+i).PRIMARY_FLAG := p_person_obj.sms_objs(i).PRIMARY_FLAG;
1277   	l_contact_point_list(l_cpt_count+i).STATUS := p_person_obj.sms_objs(i).STATUS;
1278   	l_contact_point_list(l_cpt_count+i).CONTACT_POINT_PURPOSE := p_person_obj.sms_objs(i).CONTACT_POINT_PURPOSE;
1279       end loop;
1280     end if;
1281 
1282     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1283 	hz_utility_v2pub.debug(p_message=>'Calling DQM API HZ_PARTY_SEARCH.find_persons ',p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1284 	hz_utility_v2pub.debug(p_message=>'HZ_PARTY_SEARCH.find_persons Start time: '||TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'),p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1285     END IF;
1286 
1287     HZ_PARTY_SEARCH.find_persons (
1288 	     p_rule_id           => l_match_rule_id,
1289 	     p_party_search_rec  => l_party_search_rec,
1290 	     p_party_site_list   => l_party_site_list,
1291 	     p_contact_list      => l_contact_list,
1292 	     p_contact_point_list=> l_contact_point_list,
1293   	     p_restrict_sql      => null,
1294 	     p_match_type        => null,
1295 	     x_search_ctx_id     => l_search_ctx_id,
1296 	     x_num_matches       => l_num_matches,
1297 	     x_return_status     => x_return_status,
1298  	     x_msg_count         => x_msg_count,
1299              x_msg_data          => x_msg_data
1300 
1301     );
1302 
1303     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1304 	hz_utility_v2pub.debug(p_message=>'HZ_PARTY_SEARCH.find_persons end time: '||TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'),p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1305      --   hz_utility_v2pub.debug(p_message=>'# of Matches: '||l_num_matches,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1306  	hz_utility_v2pub.debug(p_message=>'return status of find_persons: '||x_return_status,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1307 	hz_utility_v2pub.debug(p_message=>'search_ctx_id: '||l_search_ctx_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1308 	if l_num_matches = 0
1309         then
1310           hz_utility_v2pub.debug(p_message=>'# of Matches: '||l_num_matches,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1311         end if;
1312     END IF;
1313 
1314    if l_num_matches > 0 then
1315 
1316 	hz_dup_pvt.get_most_matching_party(p_search_ctx_id => l_search_ctx_id,
1317 					p_new_party_id => x_person_id,
1318 				       x_party_id => l_party_id,
1319 				       x_match_score => l_match_score,
1320 				       x_party_name => l_party_name);
1321      if l_party_id is null
1322      then
1323 		 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1324 		 	hz_utility_v2pub.debug(p_message=>'# of Matches: 0 ',p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1325 		 end if;
1326      else
1327          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1328 		 	hz_utility_v2pub.debug(p_message=>'# of Matches: '||l_num_matches,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1329         	hz_utility_v2pub.debug(p_message=>'Most matching Party Id: '||l_party_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1330 	        hz_utility_v2pub.debug(p_message=>'Most matching Party Name: '||l_party_name,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1331         	hz_utility_v2pub.debug(p_message=>'Match score: '||l_match_score,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1332     	 END IF;
1333 
1334 	hz_dup_pvt.get_match_rule_thresholds(p_match_rule_id => l_match_rule_id,
1335 				    x_match_threshold => l_match_threshold,
1336 				    x_automerge_threshold => l_automerge_threshold);
1337 
1338 	IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1339         	hz_utility_v2pub.debug(p_message=>'Match Threshold: '||l_match_threshold,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1340         	hz_utility_v2pub.debug(p_message=>'Automerge Threshold: '||l_automerge_threshold,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1341 
1342     	 END IF;
1343 
1344 	if l_match_score >= l_match_threshold
1345 	then
1346 		hz_dup_pvt.validate_master_party_id(px_party_id => l_party_id,
1347 					x_overlap_merge_req_id => l_overlap_merge_req_id);
1348 
1349 		hz_utility_v2pub.debug(p_message=>'xx: Winner Party ID is changed. Overlapping Merge Req ID: '||l_overlap_merge_req_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1350   	hz_utility_v2pub.debug(p_message=>'xx: Winner Party ID is changed. Party ID: '||l_party_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1351         	if l_overlap_merge_req_id is not null
1352 		then
1353 			l_tmp_score := l_match_score;
1354 			begin
1355 				SELECT score, party_name into l_match_score, l_party_name
1356 				FROM hz_matched_parties_gt mpg, hz_parties p
1357 				WHERE mpg.party_id = p.party_id
1358 				and mpg.party_id = l_party_id
1359 				and mpg.search_context_id = l_search_ctx_id
1360 				and rownum = 1;
1361 			 EXCEPTION
1362        				WHEN NO_DATA_FOUND THEN
1363 				l_match_score := 0;
1364 				IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1365 					hz_utility_v2pub.debug(p_message=>'The changed party is not a duplicate with the newly created party' ,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1366 				end if;
1367 
1368 			END;
1369 
1370  			IF l_match_score > 0 and fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1371 				hz_utility_v2pub.debug(p_message=>'Winner Party ID is changed. Overlapping Merge Req ID: '||l_overlap_merge_req_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1372 
1373         		hz_utility_v2pub.debug(p_message=>'Winner Party Id: '||l_party_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1374 			hz_utility_v2pub.debug(p_message=>'Winner Party Id match score: '||l_match_score,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1375 			end if;
1376     	        END IF;
1377 	      if l_match_score >= l_match_threshold
1378 	      then -- match score might get reset due to overlapping req, need to check this again.
1379 		l_dup_batch_rec.dup_batch_name := l_party_name||'-'|| to_char(sysdate);
1380     		l_dup_batch_rec.match_rule_id := l_match_rule_id;
1381     		l_dup_batch_rec.application_id := 222;
1382     		l_dup_batch_rec.request_type := 'USER_ENTERED';
1383     		l_dup_batch_id := NULL;
1384     		l_dup_set_rec.winner_party_id := l_party_id;
1385     		l_dup_set_rec.status := 'SYSBATCH';
1386     		l_dup_set_rec.assigned_to_user_id := fnd_global.user_id;
1387 		l_dup_set_rec.merge_type := 'PARTY_MERGE';
1388 
1389 		l_dup_party_tbl(1).party_id := l_party_id;
1390       		l_dup_party_tbl(1).score := l_match_score;
1391       		l_dup_party_tbl(1).merge_flag := 'Y';
1392 
1393 	 	l_dup_party_tbl(2).party_id := x_person_id; -- newly created person id
1394       		l_dup_party_tbl(2).score := 0;
1395       		l_dup_party_tbl(2).merge_flag := 'Y';
1396 
1397 		HZ_DUP_PVT.create_dup_batch(
1398          	p_dup_batch_rec             => l_dup_batch_rec
1399         	,p_dup_set_rec               => l_dup_set_rec
1400         	,p_dup_party_tbl             => l_dup_party_tbl
1401         	,x_dup_batch_id              => l_dup_batch_id
1402         	,x_dup_set_id                => l_dup_set_id
1403         	,x_return_status             => x_return_status
1404         	,x_msg_count                 => x_msg_count
1405         	,x_msg_data                  => x_msg_data );
1406 
1407 
1408       		IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
1409       			RAISE FND_API.G_EXC_ERROR;
1410       		END IF;
1411 
1412 		IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1413         			hz_utility_v2pub.debug(p_message=>'Created dup batch: dup_set_id: '||l_dup_set_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1414 
1415     	        END IF;
1416 
1417 
1418 		if l_dup_set_id is not null
1419 		then
1420 		  if l_match_score < l_automerge_threshold -- create merge request
1421 		  then
1422 			hz_dup_pvt.submit_dup (
1423    					p_dup_set_id    => l_dup_set_id
1424   					,x_request_id    => l_request_id
1425   					,x_return_status => x_return_status
1426   					,x_msg_count     => x_msg_count
1427   					,x_msg_data      => x_msg_data);
1428 
1429 		        IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1430         				hz_utility_v2pub.debug(p_message=>'Merge Request Created with merge request id: '||l_dup_set_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1431         				hz_utility_v2pub.debug(p_message=>'Create Merge Request conc request id: '||l_request_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1432 
1433 			end if;
1434 		  end if; --if l_match_score < l_automerge_threshold
1435 		 end if; --if l_match_score >= l_match_threshold then
1436 
1437 		  if l_match_score >= l_automerge_threshold
1438     		  then
1439 				open get_obj_version_csr(l_dup_set_id);
1440 				fetch get_obj_version_csr into l_object_version_number;
1441 	        		close get_obj_version_csr;
1442 
1443 				hz_merge_dup_pvt.Create_Merge_Batch(  -- need to create merge in real time.
1444   					p_dup_set_id    => l_dup_set_id,
1445   					p_default_mapping  => 'Y',
1446   					p_object_version_number => l_object_version_number,
1447   					x_merge_batch_id     => l_batch_id,
1448 					x_return_status => x_return_status,
1449   					x_msg_count     => x_msg_count,
1450   					x_msg_data      => x_msg_data);
1451 
1452 
1453 	            		--submit Party Merge concurrent program
1454                                      hz_merge_dup_pvt.submit_batch(
1455   					p_batch_id      => l_dup_set_id,
1456   					p_preview       => 'N',
1457   					x_request_id    => l_request_id,
1458   					x_return_status => x_return_status,
1459   					x_msg_count     => x_msg_count,
1460   					x_msg_data      => x_msg_data);
1461 				IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1462 					hz_utility_v2pub.debug(p_message=>'Party Merge request status: '||x_return_status,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1463         				hz_utility_v2pub.debug(p_message=>'Party Merge request submitted with conc request_id: '||l_request_id,p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1464                         	end if;
1465 
1466     	          end if; -- if l_match_score >= l_automerge_threshold
1467 		end if; --if l_dup_set_id is not null
1468 	end if;	-- if l_match_score >= l_match_threshold
1469       end if; -- if l_party_id = x_person_id
1470    end if;  -- if l_num_matches > 0 then
1471    IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1472 	hz_utility_v2pub.debug(p_message=>'Enable DQ on Integration Services: End ',p_prefix=>'DEBUG: ',p_msg_level=>fnd_log.level_statement, p_module=>'HZ_Module.enableDQ');
1473    end if;
1474 end if;  -- if nvl(fnd_profile.value('HZ_BO_ENABLE_DQ'),'N') = 'Y'
1475 
1476 
1477     -- reset Global variable
1478     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1479     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1480 
1481     -- Debug info.
1482     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1483          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1484                                p_msg_data=>x_msg_data,
1485                                p_msg_type=>'WARNING',
1486                                p_msg_level=>fnd_log.level_exception);
1487     END IF;
1488     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1489         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1490                                p_prefix=>l_debug_prefix,
1491                                p_msg_level=>fnd_log.level_procedure);
1492     END IF;
1493 
1494   EXCEPTION
1495     WHEN fnd_api.g_exc_error THEN
1496       ROLLBACK TO do_create_person_bo_pub;
1497 
1498       -- reset Global variable
1499       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1500       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1501 
1502       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1503       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1504       FND_MSG_PUB.ADD;
1505 
1506       x_return_status := fnd_api.g_ret_sts_error;
1507 
1508       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1509                                 p_count => x_msg_count,
1510                                 p_data  => x_msg_data);
1511 
1512       -- Debug info.
1513       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1514         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1515                                p_msg_data=>x_msg_data,
1516                                p_msg_type=>'ERROR',
1517                                p_msg_level=>fnd_log.level_error);
1518       END IF;
1519       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1520         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1521                                p_prefix=>l_debug_prefix,
1522                                p_msg_level=>fnd_log.level_procedure);
1523       END IF;
1524 
1525     WHEN fnd_api.g_exc_unexpected_error THEN
1526       ROLLBACK TO do_create_person_bo_pub;
1527 
1528       -- reset Global variable
1529       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1530       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1531 
1532       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1533       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1534       FND_MSG_PUB.ADD;
1535 
1536       x_return_status := fnd_api.g_ret_sts_unexp_error;
1537 
1538       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1539                                 p_count => x_msg_count,
1540                                 p_data  => x_msg_data);
1541 
1542       -- Debug info.
1543       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1544         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1545                                p_msg_data=>x_msg_data,
1546                                p_msg_type=>'UNEXPECTED ERROR',
1547                                p_msg_level=>fnd_log.level_error);
1548       END IF;
1549       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1550         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1551                                p_prefix=>l_debug_prefix,
1552                                p_msg_level=>fnd_log.level_procedure);
1553       END IF;
1554 
1555     WHEN OTHERS THEN
1556       ROLLBACK TO do_create_person_bo_pub;
1557 
1558       -- reset Global variable
1559       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1560       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1561 
1562       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1563       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1564       FND_MSG_PUB.ADD;
1565 
1566       x_return_status := fnd_api.g_ret_sts_unexp_error;
1567 
1568       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1569       fnd_message.set_token('ERROR' ,SQLERRM);
1570       fnd_msg_pub.add;
1571 
1572       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1573                                 p_count => x_msg_count,
1574                                 p_data  => x_msg_data);
1575 
1576       -- Debug info.
1577       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1578         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1579                                p_msg_data=>x_msg_data,
1580                                p_msg_type=>'SQL ERROR',
1581                                p_msg_level=>fnd_log.level_error);
1582       END IF;
1583       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1584         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1585                                p_prefix=>l_debug_prefix,
1586                                p_msg_level=>fnd_log.level_procedure);
1587       END IF;
1588   END do_create_person_bo;
1589 
1590   PROCEDURE create_person_bo(
1591     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1592     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1593     p_person_obj          IN            HZ_PERSON_BO,
1594     p_created_by_module   IN            VARCHAR2,
1595     x_return_status       OUT NOCOPY    VARCHAR2,
1596     x_msg_count           OUT NOCOPY    NUMBER,
1597     x_msg_data            OUT NOCOPY    VARCHAR2,
1598     x_person_id           OUT NOCOPY    NUMBER,
1599     x_person_os           OUT NOCOPY    VARCHAR2,
1600     x_person_osr          OUT NOCOPY    VARCHAR2
1601   ) IS
1602     l_per_obj             HZ_PERSON_BO;
1603   BEGIN
1604     l_per_obj := p_person_obj;
1605     do_create_person_bo(
1606       p_init_msg_list      => p_init_msg_list,
1607       p_validate_bo_flag   => p_validate_bo_flag,
1608       p_person_obj         => l_per_obj,
1609       p_created_by_module  => p_created_by_module,
1610       p_obj_source         => null,
1611       x_return_status      => x_return_status,
1612       x_msg_count          => x_msg_count,
1613       x_msg_data           => x_msg_data,
1614       x_person_id          => x_person_id,
1615       x_person_os          => x_person_os,
1616       x_person_osr         => x_person_osr
1617     );
1618   END create_person_bo;
1619 
1620   PROCEDURE create_person_bo(
1621     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1622     p_person_obj          IN            HZ_PERSON_BO,
1623     p_created_by_module   IN            VARCHAR2,
1624     p_obj_source          IN            VARCHAR2 := NULL,
1625     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
1626     x_return_status       OUT NOCOPY    VARCHAR2,
1627     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
1628     x_return_obj          OUT NOCOPY    HZ_PERSON_BO,
1629     x_person_id           OUT NOCOPY    NUMBER,
1630     x_person_os           OUT NOCOPY    VARCHAR2,
1631     x_person_osr          OUT NOCOPY    VARCHAR2
1632   ) IS
1633     l_msg_count           NUMBER;
1634     l_msg_data            VARCHAR2(2000);
1635     l_per_obj             HZ_PERSON_BO;
1636   BEGIN
1637     l_per_obj := p_person_obj;
1638     do_create_person_bo(
1639       p_init_msg_list      => FND_API.G_TRUE,
1640       p_validate_bo_flag   => p_validate_bo_flag,
1641       p_person_obj         => l_per_obj,
1642       p_created_by_module  => p_created_by_module,
1643       p_obj_source         => p_obj_source,
1644       x_return_status      => x_return_status,
1645       x_msg_count          => l_msg_count,
1646       x_msg_data           => l_msg_data,
1647       x_person_id          => x_person_id,
1648       x_person_os          => x_person_os,
1649       x_person_osr         => x_person_osr
1650     );
1651     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1652                     x_return_status   => x_return_status,
1653                     x_msg_count       => l_msg_count,
1654                     x_msg_data        => l_msg_data);
1655     IF FND_API.to_Boolean(p_return_obj_flag) THEN
1656       x_return_obj := l_per_obj;
1657     END IF;
1658   END create_person_bo;
1659 
1660   -- PROCEDURE do_update_person_bo
1661   --
1662   -- DESCRIPTION
1663   --     Update a person business object.
1664   PROCEDURE do_update_person_bo(
1665     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1666     p_person_obj          IN OUT NOCOPY HZ_PERSON_BO,
1667     p_created_by_module   IN            VARCHAR2,
1668     p_obj_source          IN            VARCHAR2 := NULL,
1669     x_return_status       OUT NOCOPY    VARCHAR2,
1670     x_msg_count           OUT NOCOPY    NUMBER,
1671     x_msg_data            OUT NOCOPY    VARCHAR2,
1672     x_person_id           OUT NOCOPY    NUMBER,
1673     x_person_os           OUT NOCOPY    VARCHAR2,
1674     x_person_osr          OUT NOCOPY    VARCHAR2
1675   )IS
1676     l_debug_prefix             VARCHAR2(30);
1677     l_person_rec               HZ_PARTY_V2PUB.PERSON_REC_TYPE;
1678     l_create_update_flag       VARCHAR2(1);
1679     l_ovn                      NUMBER;
1680     l_dummy_id                 NUMBER;
1681     l_profile_id               NUMBER;
1682     l_errorcode                NUMBER;
1683     l_per_raise_event          BOOLEAN := FALSE;
1684     l_pc_raise_event           BOOLEAN := FALSE;
1685     l_cbm                      VARCHAR2(30);
1686     l_per_event_id             NUMBER;
1687     l_pc_event_id              NUMBER;
1688     l_telex_objs               HZ_TELEX_CP_BO_TBL;
1689     l_edi_objs                 HZ_EDI_CP_BO_TBL;
1690     l_eft_objs                 HZ_EFT_CP_BO_TBL;
1691     l_party_number             VARCHAR2(30);
1692 
1693     CURSOR get_ovn(l_party_id  NUMBER) IS
1694     SELECT p.object_version_number, p.party_number
1695     FROM HZ_PARTIES p
1696     WHERE p.party_id = l_party_id
1697     AND p.party_type = 'PERSON'
1698     AND p.status in ('A','I');
1699 
1700   BEGIN
1701     -- Standard start of API savepoint
1702     SAVEPOINT do_update_person_bo_pub;
1703 
1704     -- initialize API return status to success.
1705     x_return_status := FND_API.G_RET_STS_SUCCESS;
1706 
1707     -- Initialize message list if p_init_msg_list is set to TRUE.
1708     IF FND_API.to_Boolean(p_init_msg_list) THEN
1709       FND_MSG_PUB.initialize;
1710     END IF;
1711 
1712     -- initialize Global variable
1713     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
1714     IF(p_created_by_module IS NULL) THEN
1715       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
1716     ELSE
1717       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
1718     END IF;
1719 
1720     -- Debug info.
1721     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1722         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(+)',
1723                                p_prefix=>l_debug_prefix,
1724                                p_msg_level=>fnd_log.level_procedure);
1725     END IF;
1726 
1727     x_person_id := p_person_obj.person_id;
1728     x_person_os := p_person_obj.orig_system;
1729     x_person_osr:= p_person_obj.orig_system_reference;
1730 
1731     -- check input party_id and os+osr
1732     hz_registry_validate_bo_pvt.validate_ssm_id(
1733       px_id              => x_person_id,
1734       px_os              => x_person_os,
1735       px_osr             => x_person_osr,
1736       p_obj_type         => 'PERSON',
1737       p_create_or_update => 'U',
1738       x_return_status    => x_return_status,
1739       x_msg_count        => x_msg_count,
1740       x_msg_data         => x_msg_data);
1741 
1742     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1743       RAISE FND_API.G_EXC_ERROR;
1744     END IF;
1745 
1746     -- must check after calling validate_ssm_id because
1747     -- if user pass os+osr and no id, validate_ssm_id will
1748     -- populate x_person_id based on os+osr
1749     -- find out if raise event at the end
1750 
1751     -- if this procedure is called from person cust bo, set l_raise_event to false
1752     -- otherwise, call is_raising_update_event
1753     IF(HZ_PARTY_BO_PVT.G_CALL_UPDATE_CUST_BO IS NOT NULL) THEN
1754       l_per_raise_event := FALSE;
1755       l_pc_raise_event := FALSE;
1756     ELSE
1757       l_per_raise_event := HZ_PARTY_BO_PVT.is_raising_update_event(
1758                              p_party_id          => x_person_id,
1759                              p_bo_code           => 'PERSON'
1760                            );
1761 
1762       l_pc_raise_event := HZ_PARTY_BO_PVT.is_raising_update_event(
1763                             p_party_id          => x_person_id,
1764                             p_bo_code           => 'PERSON_CUST'
1765                           );
1766 
1767       IF(l_per_raise_event) THEN
1768         -- Get event_id for person
1769         SELECT HZ_BUS_OBJ_TRACKING_S.nextval
1770         INTO l_per_event_id
1771         FROM DUAL;
1772       END IF;
1773 
1774       IF(l_pc_raise_event) THEN
1775         -- Get event_id for person customer
1776         SELECT HZ_BUS_OBJ_TRACKING_S.nextval
1777         INTO l_pc_event_id
1778         FROM DUAL;
1779       END IF;
1780     END IF;
1781 
1782     OPEN get_ovn(x_person_id);
1783     FETCH get_ovn INTO l_ovn, l_party_number;
1784     CLOSE get_ovn;
1785 
1786     --------------------
1787     -- For Update Person
1788     --------------------
1789     -- Assign person record
1790     assign_person_rec(
1791       p_person_obj       => p_person_obj,
1792       p_person_id        => x_person_id,
1793       p_person_os        => x_person_os,
1794       p_person_osr       => x_person_osr,
1795       p_create_or_update => 'U',
1796       px_person_rec      => l_person_rec
1797     );
1798 
1799     HZ_PARTY_V2PUB.update_person(
1800       p_person_rec                => l_person_rec,
1801       p_party_object_version_number  => l_ovn,
1802       x_profile_id                => l_profile_id,
1803       x_return_status             => x_return_status,
1804       x_msg_count                 => x_msg_count,
1805       x_msg_data                  => x_msg_data
1806     );
1807 
1808     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1809       RAISE FND_API.G_EXC_ERROR;
1810     END IF;
1811 
1812     -- assign person party_id
1813     p_person_obj.person_id := x_person_id;
1814     p_person_obj.party_number := l_party_number;
1815     --------------------------
1816     -- Create Person Ext Attrs
1817     --------------------------
1818     IF((p_person_obj.ext_attributes_objs IS NOT NULL) AND
1819        (p_person_obj.ext_attributes_objs.COUNT > 0)) THEN
1820       HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
1821         p_ext_attr_objs             => p_person_obj.ext_attributes_objs,
1822         p_parent_obj_id             => l_profile_id,
1823         p_parent_obj_type           => 'PERSON',
1824         p_create_or_update          => 'U',
1825         x_return_status             => x_return_status,
1826         x_errorcode                 => l_errorcode,
1827         x_msg_count                 => x_msg_count,
1828         x_msg_data                  => x_msg_data
1829       );
1830 
1831       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1832         RAISE FND_API.G_EXC_ERROR;
1833       END IF;
1834     END IF;
1835 
1836     ------------------
1837     -- For Person Info
1838     ------------------
1839     IF(((p_person_obj.language_objs IS NOT NULL) AND (p_person_obj.language_objs.COUNT > 0)) OR
1840        ((p_person_obj.education_objs IS NOT NULL) AND (p_person_obj.education_objs.COUNT > 0)) OR
1841        ((p_person_obj.citizenship_objs IS NOT NULL) AND (p_person_obj.citizenship_objs.COUNT > 0)) OR
1842        ((p_person_obj.employ_hist_objs IS NOT NULL) AND (p_person_obj.employ_hist_objs.COUNT > 0)) OR
1843        ((p_person_obj.interest_objs IS NOT NULL) AND (p_person_obj.interest_objs.COUNT > 0))) THEN
1844       save_person_info(
1845         p_language_obj       => p_person_obj.language_objs,
1846         p_education_obj      => p_person_obj.education_objs,
1847         p_citizenship_obj    => p_person_obj.citizenship_objs,
1848         p_employ_hist_obj    => p_person_obj.employ_hist_objs,
1849         p_interest_obj       => p_person_obj.interest_objs,
1850         p_person_id          => x_person_id,
1851         x_return_status      => x_return_status,
1852         x_msg_count          => x_msg_count,
1853         x_msg_data           => x_msg_data
1854       );
1855 
1856       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1857         RAISE FND_API.G_EXC_ERROR;
1858       END IF;
1859     END IF;
1860 
1861     ----------------------------
1862     -- Party Preferences
1863     ----------------------------
1864     IF((p_person_obj.preference_objs IS NOT NULL) AND
1865        (p_person_obj.preference_objs.COUNT > 0)) THEN
1866       HZ_PARTY_BO_PVT.save_party_preferences(
1867         p_party_pref_objs           => p_person_obj.preference_objs,
1868         p_party_id                  => x_person_id,
1869         x_return_status             => x_return_status,
1870         x_msg_count                 => x_msg_count,
1871         x_msg_data                  => x_msg_data
1872       );
1873 
1874       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1875         RAISE FND_API.G_EXC_ERROR;
1876       END IF;
1877     END IF;
1878 
1879     ----------------------------
1880     -- Contact Preferences
1881     ----------------------------
1882     IF((p_person_obj.contact_pref_objs IS NOT NULL) AND
1883        (p_person_obj.contact_pref_objs.COUNT > 0)) THEN
1884       HZ_CONTACT_PREFERENCE_BO_PVT.save_contact_preferences(
1885         p_cp_pref_objs           => p_person_obj.contact_pref_objs,
1886         p_contact_level_table_id => x_person_id,
1887         p_contact_level_table    => 'HZ_PARTIES',
1888         x_return_status          => x_return_status,
1889         x_msg_count              => x_msg_count,
1890         x_msg_data               => x_msg_data
1891       );
1892 
1893       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1894         RAISE FND_API.G_EXC_ERROR;
1895       END IF;
1896     END IF;
1897 
1898     ----------------------------
1899     -- Relationship api
1900     ----------------------------
1901     IF((p_person_obj.relationship_objs IS NOT NULL) AND
1902        (p_person_obj.relationship_objs.COUNT > 0)) THEN
1903       HZ_PARTY_BO_PVT.save_relationships(
1904         p_rel_objs                  => p_person_obj.relationship_objs,
1905         p_subject_id                => x_person_id,
1906         p_subject_type              => 'PERSON',
1907         x_return_status             => x_return_status,
1908         x_msg_count                 => x_msg_count,
1909         x_msg_data                  => x_msg_data
1910       );
1911 
1912       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1913         RAISE FND_API.G_EXC_ERROR;
1914       END IF;
1915     END IF;
1916 
1917     ----------------------------
1918     -- Classification api
1919     ----------------------------
1920     IF((p_person_obj.class_objs IS NOT NULL) AND
1921        (p_person_obj.class_objs.COUNT > 0)) THEN
1922       HZ_PARTY_BO_PVT.save_classifications(
1923         p_code_assign_objs          => p_person_obj.class_objs,
1924         p_owner_table_name          => 'HZ_PARTIES',
1925         p_owner_table_id            => x_person_id,
1926         x_return_status             => x_return_status,
1927         x_msg_count                 => x_msg_count,
1928         x_msg_data                  => x_msg_data
1929       );
1930 
1931       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1932         RAISE FND_API.G_EXC_ERROR;
1933       END IF;
1934     END IF;
1935 
1936     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
1937 
1938     -----------------
1939     -- For Party Site
1940     -----------------
1941     IF((p_person_obj.party_site_objs IS NOT NULL) AND
1942        (p_person_obj.party_site_objs.COUNT > 0)) THEN
1943       HZ_PARTY_SITE_BO_PVT.save_party_sites(
1944         p_ps_objs            => p_person_obj.party_site_objs,
1945         p_create_update_flag => 'U',
1946         p_obj_source         => p_obj_source,
1947         x_return_status      => x_return_status,
1948         x_msg_count          => x_msg_count,
1949         x_msg_data           => x_msg_data,
1950         p_parent_id          => x_person_id,
1951         p_parent_os          => x_person_os,
1952         p_parent_osr         => x_person_osr,
1953         p_parent_obj_type    => 'PERSON'
1954       );
1955 
1956       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1957         RAISE FND_API.G_EXC_ERROR;
1958       END IF;
1959     END IF;
1960 
1961     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1962 
1963     ---------------------
1964     -- For Contact Points
1965     ---------------------
1966     IF(((p_person_obj.phone_objs IS NOT NULL) AND (p_person_obj.phone_objs.COUNT > 0)) OR
1967        ((p_person_obj.email_objs IS NOT NULL) AND (p_person_obj.email_objs.COUNT > 0)) OR
1968        ((p_person_obj.web_objs IS NOT NULL) AND (p_person_obj.web_objs.COUNT > 0)) OR
1969        ((p_person_obj.sms_objs IS NOT NULL) AND (p_person_obj.sms_objs.COUNT > 0))) THEN
1970       HZ_CONTACT_POINT_BO_PVT.save_contact_points(
1971         p_phone_objs         => p_person_obj.phone_objs,
1972         p_telex_objs         => l_telex_objs,
1973         p_email_objs         => p_person_obj.email_objs,
1974         p_web_objs           => p_person_obj.web_objs,
1975         p_edi_objs           => l_edi_objs,
1976         p_eft_objs           => l_eft_objs,
1977         p_sms_objs           => p_person_obj.sms_objs,
1978         p_owner_table_id     => x_person_id,
1979         p_owner_table_os     => x_person_os,
1980         p_owner_table_osr    => x_person_osr,
1981         p_parent_obj_type    => 'PERSON',
1982         p_create_update_flag => 'U',
1983         p_obj_source         => p_obj_source,
1984         x_return_status      => x_return_status,
1985         x_msg_count          => x_msg_count,
1986         x_msg_data           => x_msg_data
1987       );
1988 
1989       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1990         RAISE FND_API.G_EXC_ERROR;
1991       END IF;
1992     END IF;
1993 
1994     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1995 
1996     ---------------------
1997     -- Certifications
1998     ---------------------
1999     IF((p_person_obj.certification_objs IS NOT NULL) AND
2000        (p_person_obj.certification_objs.COUNT > 0)) THEN
2001       HZ_PARTY_BO_PVT.save_certifications(
2002         p_cert_objs          => p_person_obj.certification_objs,
2003         p_party_id           => x_person_id,
2004         x_return_status      => x_return_status,
2005         x_msg_count          => x_msg_count,
2006         x_msg_data           => x_msg_data
2007       );
2008 
2009       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2010         RAISE FND_API.G_EXC_ERROR;
2011       END IF;
2012     END IF;
2013 
2014     ---------------------
2015     -- Financial Profiles
2016     ---------------------
2017     IF((p_person_obj.financial_prof_objs IS NOT NULL) AND
2018        (p_person_obj.financial_prof_objs.COUNT > 0)) THEN
2019       HZ_PARTY_BO_PVT.save_financial_profiles(
2020         p_fin_prof_objs      => p_person_obj.financial_prof_objs,
2021         p_party_id           => x_person_id,
2022         x_return_status      => x_return_status,
2023         x_msg_count          => x_msg_count,
2024         x_msg_data           => x_msg_data
2025       );
2026 
2027       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2028         RAISE FND_API.G_EXC_ERROR;
2029       END IF;
2030     END IF;
2031 
2032     ----------------------------------
2033   --  Party Usages -------
2034   ----------------------------------
2035    IF ((p_person_obj.party_usage_objs IS NOT NULL) AND
2036       (p_person_obj.party_usage_objs.COUNT > 0 )) THEN
2037        HZ_PARTY_BO_PVT.save_party_usage_assgmnt(
2038 	   p_party_usg_objs				=> p_person_obj.party_usage_objs,
2039 	   p_party_id					=> x_person_id,
2040 	   x_return_status				=> x_return_status,
2041 	   x_msg_count					=> x_msg_count,
2042 	   x_msg_data					=> x_msg_data
2043 	   );
2044         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2045         RAISE FND_API.G_EXC_ERROR;
2046       END IF;
2047     END IF;
2048 
2049 
2050     -- raise update person event
2051     IF(l_per_raise_event) THEN
2052       HZ_PARTY_BO_PVT.call_bes(
2053         p_party_id         => x_person_id,
2054         p_bo_code          => 'PERSON',
2055         p_create_or_update => 'U',
2056         p_obj_source       => p_obj_source,
2057         p_event_id         => l_per_event_id
2058       );
2059     END IF;
2060 
2061     IF(l_pc_raise_event) THEN
2062       HZ_PARTY_BO_PVT.call_bes(
2063         p_party_id         => x_person_id,
2064         p_bo_code          => 'PERSON_CUST',
2065         p_create_or_update => 'U',
2066         p_obj_source       => p_obj_source,
2067         p_event_id         => l_pc_event_id
2068       );
2069     END IF;
2070 
2071     -- reset Global variable
2072     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2073     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2074 
2075     -- Debug info.
2076     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2077          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2078                                p_msg_data=>x_msg_data,
2079                                p_msg_type=>'WARNING',
2080                                p_msg_level=>fnd_log.level_exception);
2081     END IF;
2082     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2083         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
2084                                p_prefix=>l_debug_prefix,
2085                                p_msg_level=>fnd_log.level_procedure);
2086     END IF;
2087   EXCEPTION
2088     WHEN fnd_api.g_exc_error THEN
2089       ROLLBACK TO do_update_person_bo_pub;
2090 
2091       -- reset Global variable
2092       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2093       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2094 
2095       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2096       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
2097       FND_MSG_PUB.ADD;
2098 
2099       x_return_status := fnd_api.g_ret_sts_error;
2100 
2101       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2102                                 p_count => x_msg_count,
2103                                 p_data  => x_msg_data);
2104 
2105       -- Debug info.
2106       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2107         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2108                                p_msg_data=>x_msg_data,
2109                                p_msg_type=>'ERROR',
2110                                p_msg_level=>fnd_log.level_error);
2111       END IF;
2112       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2113         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
2114                                p_prefix=>l_debug_prefix,
2115                                p_msg_level=>fnd_log.level_procedure);
2116       END IF;
2117 
2118 
2119     WHEN fnd_api.g_exc_unexpected_error THEN
2120       ROLLBACK TO do_update_person_bo_pub;
2121 
2122       -- reset Global variable
2123       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2124       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2125 
2126       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2127       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
2128       FND_MSG_PUB.ADD;
2129 
2130       x_return_status := fnd_api.g_ret_sts_unexp_error;
2131 
2132       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2133                                 p_count => x_msg_count,
2134                                 p_data  => x_msg_data);
2135 
2136       -- Debug info.
2137       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2138         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2139                                p_msg_data=>x_msg_data,
2140                                p_msg_type=>'UNEXPECTED ERROR',
2141                                p_msg_level=>fnd_log.level_error);
2142       END IF;
2143       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2144         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
2145                                p_prefix=>l_debug_prefix,
2146                                p_msg_level=>fnd_log.level_procedure);
2147       END IF;
2148     WHEN OTHERS THEN
2149       ROLLBACK TO do_update_person_bo_pub;
2150 
2151       -- reset Global variable
2152       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
2153       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
2154 
2155       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2156       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
2157       FND_MSG_PUB.ADD;
2158 
2159       x_return_status := fnd_api.g_ret_sts_unexp_error;
2160 
2161       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2162       fnd_message.set_token('ERROR' ,SQLERRM);
2163       fnd_msg_pub.add;
2164 
2165       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2166                                 p_count => x_msg_count,
2167                                 p_data  => x_msg_data);
2168 
2169       -- Debug info.
2170       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2171         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2172                                p_msg_data=>x_msg_data,
2173                                p_msg_type=>'SQL ERROR',
2174                                p_msg_level=>fnd_log.level_error);
2175       END IF;
2176       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2177         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
2178                                p_prefix=>l_debug_prefix,
2179                                p_msg_level=>fnd_log.level_procedure);
2180       END IF;
2181   END do_update_person_bo;
2182 
2183   PROCEDURE update_person_bo(
2184     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
2185     p_person_obj          IN            HZ_PERSON_BO,
2186     p_created_by_module   IN            VARCHAR2,
2187     x_return_status       OUT NOCOPY    VARCHAR2,
2188     x_msg_count           OUT NOCOPY    NUMBER,
2189     x_msg_data            OUT NOCOPY    VARCHAR2,
2190     x_person_id           OUT NOCOPY    NUMBER,
2191     x_person_os           OUT NOCOPY    VARCHAR2,
2192     x_person_osr          OUT NOCOPY    VARCHAR2
2193   ) IS
2194     l_per_obj             HZ_PERSON_BO;
2195   BEGIN
2196     l_per_obj := p_person_obj;
2197     do_update_person_bo(
2198       p_init_msg_list      => p_init_msg_list,
2199       p_person_obj         => l_per_obj,
2200       p_created_by_module  => p_created_by_module,
2201       p_obj_source         => NULL,
2202       x_return_status      => x_return_status,
2203       x_msg_count          => x_msg_count,
2204       x_msg_data           => x_msg_data,
2205       x_person_id          => x_person_id,
2206       x_person_os          => x_person_os,
2207       x_person_osr         => x_person_osr
2208     );
2209   END update_person_bo;
2210 
2211   PROCEDURE update_person_bo(
2212     p_person_obj          IN            HZ_PERSON_BO,
2213     p_created_by_module   IN            VARCHAR2,
2214     p_obj_source          IN            VARCHAR2 := null,
2215     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
2216     x_return_status       OUT NOCOPY    VARCHAR2,
2217     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
2218     x_return_obj          OUT NOCOPY    HZ_PERSON_BO,
2219     x_person_id           OUT NOCOPY    NUMBER,
2220     x_person_os           OUT NOCOPY    VARCHAR2,
2221     x_person_osr          OUT NOCOPY    VARCHAR2
2222   )IS
2223     l_msg_count       NUMBER;
2224     l_msg_data        VARCHAR2(2000);
2225     l_per_obj         HZ_PERSON_BO;
2226   BEGIN
2227     l_per_obj := p_person_obj;
2228     do_update_person_bo(
2229       p_init_msg_list      => FND_API.G_TRUE,
2230       p_person_obj         => l_per_obj,
2231       p_created_by_module  => p_created_by_module,
2232       p_obj_source         => p_obj_source,
2233       x_return_status      => x_return_status,
2234       x_msg_count          => l_msg_count,
2235       x_msg_data           => l_msg_data,
2236       x_person_id          => x_person_id,
2237       x_person_os          => x_person_os,
2238       x_person_osr         => x_person_osr
2239     );
2240     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
2241                     x_return_status   => x_return_status,
2242                     x_msg_count       => l_msg_count,
2243                     x_msg_data        => l_msg_data);
2244     IF FND_API.to_Boolean(p_return_obj_flag) THEN
2245       x_return_obj := l_per_obj;
2246     END IF;
2247   END update_person_bo;
2248 
2249   -- PROCEDURE do_save_person_bo
2250   --
2251   -- DESCRIPTION
2252   --     Create or update a person business object.
2253   PROCEDURE do_save_person_bo(
2254     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
2255     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
2256     p_person_obj          IN OUT NOCOPY HZ_PERSON_BO,
2257     p_created_by_module   IN            VARCHAR2,
2258     p_obj_source          IN            VARCHAR2 := null,
2259     x_return_status       OUT NOCOPY    VARCHAR2,
2260     x_msg_count           OUT NOCOPY    NUMBER,
2261     x_msg_data            OUT NOCOPY    VARCHAR2,
2262     x_person_id           OUT NOCOPY    NUMBER,
2263     x_person_os           OUT NOCOPY    VARCHAR2,
2264     x_person_osr          OUT NOCOPY    VARCHAR2
2265   ) IS
2266     l_return_status            VARCHAR2(30);
2267     l_msg_count                NUMBER;
2268     l_msg_data                 VARCHAR2(2000);
2269     l_create_update_flag       VARCHAR2(1);
2270     l_debug_prefix             VARCHAR2(30);
2271   BEGIN
2272     -- initialize API return status to success.
2273     x_return_status := FND_API.G_RET_STS_SUCCESS;
2274 
2275     -- Initialize message list if p_init_msg_list is set to TRUE.
2276     IF FND_API.to_Boolean(p_init_msg_list) THEN
2277       FND_MSG_PUB.initialize;
2278     END IF;
2279 
2280     -- Debug info.
2281     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2282         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(+)',
2283                                p_prefix=>l_debug_prefix,
2284                                p_msg_level=>fnd_log.level_procedure);
2285     END IF;
2286 
2287     x_person_id := p_person_obj.person_id;
2288     x_person_os := p_person_obj.orig_system;
2289     x_person_osr:= p_person_obj.orig_system_reference;
2290 
2291     -- check root business object to determine that it should be
2292     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
2293     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
2294                               p_entity_id      => x_person_id,
2295                               p_entity_os      => x_person_os,
2296                               p_entity_osr     => x_person_osr,
2297                               p_entity_type    => 'HZ_PARTIES',
2298                               p_parent_id      => NULL,
2299                               p_parent_obj_type=> NULL);
2300 
2301     IF(l_create_update_flag = 'E') THEN
2302       FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2303       FND_MSG_PUB.ADD;
2304       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
2305       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
2306       FND_MSG_PUB.ADD;
2307       RAISE FND_API.G_EXC_ERROR;
2308     END IF;
2309 
2310     IF(l_create_update_flag = 'C') THEN
2311       do_create_person_bo(
2312         p_init_msg_list      => fnd_api.g_false,
2313         p_validate_bo_flag   => p_validate_bo_flag,
2314         p_person_obj         => p_person_obj,
2315         p_created_by_module  => p_created_by_module,
2316         p_obj_source         => p_obj_source,
2317         x_return_status      => x_return_status,
2318         x_msg_count          => x_msg_count,
2319         x_msg_data           => x_msg_data,
2320         x_person_id          => x_person_id,
2321         x_person_os          => x_person_os,
2322         x_person_osr         => x_person_osr
2323       );
2324     ELSIF(l_create_update_flag = 'U') THEN
2325       do_update_person_bo(
2326         p_init_msg_list      => fnd_api.g_false,
2327         p_person_obj         => p_person_obj,
2328         p_created_by_module  => p_created_by_module,
2329         p_obj_source         => p_obj_source,
2330         x_return_status      => x_return_status,
2331         x_msg_count          => x_msg_count,
2332         x_msg_data           => x_msg_data,
2333         x_person_id          => x_person_id,
2334         x_person_os          => x_person_os,
2335         x_person_osr         => x_person_osr
2336       );
2337     ELSE
2338       RAISE FND_API.G_EXC_ERROR;
2339     END IF;
2340 
2341     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2342       RAISE FND_API.G_EXC_ERROR;
2343     END IF;
2344 
2345     -- Debug info.
2346     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2347          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2348                                p_msg_data=>x_msg_data,
2349                                p_msg_type=>'WARNING',
2350                                p_msg_level=>fnd_log.level_exception);
2351     END IF;
2352     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2353         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
2354                                p_prefix=>l_debug_prefix,
2355                                p_msg_level=>fnd_log.level_procedure);
2356     END IF;
2357   EXCEPTION
2358     WHEN fnd_api.g_exc_error THEN
2359       x_return_status := fnd_api.g_ret_sts_error;
2360 
2361       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2362                                 p_count => x_msg_count,
2363                                 p_data  => x_msg_data);
2364 
2365       -- Debug info.
2366       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2367         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2368                                p_msg_data=>x_msg_data,
2369                                p_msg_type=>'ERROR',
2370                                p_msg_level=>fnd_log.level_error);
2371       END IF;
2372       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2373         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
2374                                p_prefix=>l_debug_prefix,
2375                                p_msg_level=>fnd_log.level_procedure);
2376       END IF;
2377 
2378     WHEN fnd_api.g_exc_unexpected_error THEN
2379       x_return_status := fnd_api.g_ret_sts_unexp_error;
2380 
2381       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2382                                 p_count => x_msg_count,
2383                                 p_data  => x_msg_data);
2384 
2385       -- Debug info.
2386       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2387         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2388                                p_msg_data=>x_msg_data,
2389                                p_msg_type=>'UNEXPECTED ERROR',
2390                                p_msg_level=>fnd_log.level_error);
2391       END IF;
2392       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2393         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
2394                                p_prefix=>l_debug_prefix,
2395                                p_msg_level=>fnd_log.level_procedure);
2396       END IF;
2397     WHEN OTHERS THEN
2398       x_return_status := fnd_api.g_ret_sts_unexp_error;
2399 
2400       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2401       fnd_message.set_token('ERROR' ,SQLERRM);
2402       fnd_msg_pub.add;
2403 
2404       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2405                                 p_count => x_msg_count,
2406                                 p_data  => x_msg_data);
2407 
2408       -- Debug info.
2409       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2410         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2411                                p_msg_data=>x_msg_data,
2412                                p_msg_type=>'SQL ERROR',
2413                                p_msg_level=>fnd_log.level_error);
2414       END IF;
2415       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2416         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
2417                                p_prefix=>l_debug_prefix,
2418                                p_msg_level=>fnd_log.level_procedure);
2419       END IF;
2420   END do_save_person_bo;
2421 
2422   PROCEDURE save_person_bo(
2423     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
2424     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
2425     p_person_obj          IN            HZ_PERSON_BO,
2426     p_created_by_module   IN            VARCHAR2,
2427     x_return_status       OUT NOCOPY    VARCHAR2,
2428     x_msg_count           OUT NOCOPY    NUMBER,
2429     x_msg_data            OUT NOCOPY    VARCHAR2,
2430     x_person_id           OUT NOCOPY    NUMBER,
2431     x_person_os           OUT NOCOPY    VARCHAR2,
2432     x_person_osr          OUT NOCOPY    VARCHAR2
2433   ) IS
2434     l_per_obj             HZ_PERSON_BO;
2435   BEGIN
2436     l_per_obj := p_person_obj;
2437     do_save_person_bo(
2438       p_init_msg_list      => p_init_msg_list,
2439       p_validate_bo_flag   => p_validate_bo_flag,
2440       p_person_obj         => l_per_obj,
2441       p_created_by_module  => p_created_by_module,
2442       p_obj_source         => NULL,
2443       x_return_status      => x_return_status,
2444       x_msg_count          => x_msg_count,
2445       x_msg_data           => x_msg_data,
2446       x_person_id          => x_person_id,
2447       x_person_os          => x_person_os,
2448       x_person_osr         => x_person_osr
2449     );
2450   END save_person_bo;
2451 
2452   PROCEDURE save_person_bo(
2453     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
2454     p_person_obj          IN            HZ_PERSON_BO,
2455     p_created_by_module   IN            VARCHAR2,
2456     p_obj_source          IN            VARCHAR2 := NULL,
2457     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
2458     x_return_status       OUT NOCOPY    VARCHAR2,
2459     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
2460     x_return_obj          OUT NOCOPY    HZ_PERSON_BO,
2461     x_person_id           OUT NOCOPY    NUMBER,
2462     x_person_os           OUT NOCOPY    VARCHAR2,
2463     x_person_osr          OUT NOCOPY    VARCHAR2
2464   ) IS
2465     l_msg_count           NUMBER;
2466     l_msg_data            VARCHAR2(2000);
2467     l_per_obj             HZ_PERSON_BO;
2468   BEGIN
2469     l_per_obj := p_person_obj;
2470     do_save_person_bo(
2471       p_init_msg_list      => FND_API.G_TRUE,
2472       p_validate_bo_flag   => p_validate_bo_flag,
2473       p_person_obj         => l_per_obj,
2474       p_created_by_module  => p_created_by_module,
2475       p_obj_source         => p_obj_source,
2476       x_return_status      => x_return_status,
2477       x_msg_count          => l_msg_count,
2478       x_msg_data           => l_msg_data,
2479       x_person_id          => x_person_id,
2480       x_person_os          => x_person_os,
2481       x_person_osr         => x_person_osr
2482     );
2483     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
2484                     x_return_status   => x_return_status,
2485                     x_msg_count       => l_msg_count,
2486                     x_msg_data        => l_msg_data);
2487     IF FND_API.to_Boolean(p_return_obj_flag) THEN
2488       x_return_obj := l_per_obj;
2489     END IF;
2490   END save_person_bo;
2491 
2492   -- PRIVATE PROCEDURE create_person_info
2493   --
2494   -- DESCRIPTION
2495   --     Create person information, such as language, education, citizenship,
2496   --     employment history and interest
2497   --
2498   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2499   --
2500   -- ARGUMENTS
2501   --   IN:
2502   --     p_language_obj       Person language object.
2503   --     p_education_obj      Education object.
2504   --     p_citizenship_obj    Citizenship object.
2505   --     p_employ_hist_obj    Employment history object.
2506   --     p_interest_obj       Person interest object.
2507   --     p_party_id           Party ID.
2508   --   OUT:
2509   --     x_return_status      Return status after the call. The status can
2510   --                          be fnd_api.g_ret_sts_success (success),
2511   --                          fnd_api.g_ret_sts_error (error),
2512   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2513   --     x_msg_count          Number of messages in message stack.
2514   --     x_msg_data           Message text if x_msg_count is 1.
2515   --
2516   -- NOTES
2517   --
2518   -- MODIFICATION HISTORY
2519   --
2520   --   14-DEC-2004    Arnold Ng          Created.
2521   --
2522 
2523   PROCEDURE create_person_info(
2524     p_language_obj               IN OUT NOCOPY HZ_PERSON_LANG_OBJ_TBL,
2525     p_education_obj              IN OUT NOCOPY HZ_EDUCATION_OBJ_TBL,
2526     p_citizenship_obj            IN OUT NOCOPY HZ_CITIZENSHIP_OBJ_TBL,
2527     p_employ_hist_obj            IN OUT NOCOPY HZ_EMPLOY_HIST_BO_TBL,
2528     p_interest_obj               IN OUT NOCOPY HZ_PERSON_INTEREST_OBJ_TBL,
2529     p_person_id                  IN         NUMBER,
2530     x_return_status              OUT NOCOPY VARCHAR2,
2531     x_msg_count                  OUT NOCOPY NUMBER,
2532     x_msg_data                   OUT NOCOPY VARCHAR2
2533   )IS
2534     l_debug_prefix        VARCHAR2(30);
2535     l_person_lang_rec     HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE;
2536     l_education_rec       HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE;
2537     l_citizenship_rec     HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE;
2538     l_employ_hist_rec     HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE;
2539     l_work_class_rec      HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE;
2540     l_interest_rec        HZ_PERSON_INFO_V2PUB.PERSON_INTEREST_REC_TYPE;
2541     l_dummy_id            NUMBER;
2542   BEGIN
2543     -- Standard start of API savepoint
2544     SAVEPOINT create_person_info_pub;
2545 
2546     -- initialize API return status to success.
2547     x_return_status := FND_API.G_RET_STS_SUCCESS;
2548 
2549     -- Debug info.
2550     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2551         hz_utility_v2pub.debug(p_message=>'create_person_info(+)',
2552                                p_prefix=>l_debug_prefix,
2553                                p_msg_level=>fnd_log.level_procedure);
2554     END IF;
2555 
2556     --------------------------------
2557     -- Assign person language record
2558     --------------------------------
2559     IF(p_language_obj IS NOT NULL) THEN
2560     FOR i IN 1..p_language_obj.COUNT LOOP
2561       assign_person_lang_rec(
2562         p_person_lang_obj           => p_language_obj(i),
2563         p_party_id                  => p_person_id,
2564         px_person_lang_rec          => l_person_lang_rec
2565       );
2566 
2567       HZ_PERSON_INFO_V2PUB.create_person_language(
2568         p_person_language_rec       => l_person_lang_rec,
2569         x_language_use_reference_id => l_dummy_id,
2570         x_return_status             => x_return_status,
2571         x_msg_count                 => x_msg_count,
2572         x_msg_data                  => x_msg_data
2573       );
2574 
2575       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2576         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2577           hz_utility_v2pub.debug(p_message=>'Create Person Language - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2578                                  p_prefix=>l_debug_prefix,
2579                                  p_msg_level=>fnd_log.level_procedure);
2580         END IF;
2581         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2582         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_LANGUAGE');
2583         FND_MSG_PUB.ADD;
2584         RAISE FND_API.G_EXC_ERROR;
2585       END IF;
2586 
2587       -- assign person language_use_reference_id
2588       p_language_obj(i).language_use_reference_id := l_dummy_id;
2589     END LOOP;
2590     END IF;
2591 
2592     --------------------------
2593     -- Assign education record
2594     --------------------------
2595     IF(p_education_obj IS NOT NULL) THEN
2596     FOR i IN 1..p_education_obj.COUNT LOOP
2597       assign_education_rec(
2598         p_education_obj             => p_education_obj(i),
2599         p_party_id                  => p_person_id,
2600         px_education_rec            => l_education_rec
2601       );
2602 
2603       HZ_PERSON_INFO_V2PUB.create_education(
2604         p_education_rec             => l_education_rec,
2605         x_education_id              => l_dummy_id,
2606         x_return_status             => x_return_status,
2607         x_msg_count                 => x_msg_count,
2608         x_msg_data                  => x_msg_data
2609       );
2610 
2611       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2612         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2613           hz_utility_v2pub.debug(p_message=>'Create Education - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2614                                  p_prefix=>l_debug_prefix,
2615                                  p_msg_level=>fnd_log.level_procedure);
2616         END IF;
2617         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2618         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_EDUCATION');
2619         FND_MSG_PUB.ADD;
2620         RAISE FND_API.G_EXC_ERROR;
2621       END IF;
2622 
2623       -- assign education_id
2624       p_education_obj(i).education_id := l_dummy_id;
2625     END LOOP;
2626     END IF;
2627 
2628     ----------------------------
2629     -- Assign citizenship record
2630     ----------------------------
2631     IF(p_citizenship_obj IS NOT NULL) THEN
2632     FOR i IN 1..p_citizenship_obj.COUNT LOOP
2633       assign_citizenship_rec(
2634         p_citizenship_obj           => p_citizenship_obj(i),
2635         p_party_id                  => p_person_id,
2636         px_citizenship_rec          => l_citizenship_rec
2637       );
2638 
2639       HZ_PERSON_INFO_V2PUB.create_citizenship(
2640         p_citizenship_rec           => l_citizenship_rec,
2641         x_citizenship_id            => l_dummy_id,
2642         x_return_status             => x_return_status,
2643         x_msg_count                 => x_msg_count,
2644         x_msg_data                  => x_msg_data
2645       );
2646 
2647       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2648         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2649           hz_utility_v2pub.debug(p_message=>'Create Citizenship - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2650                                  p_prefix=>l_debug_prefix,
2651                                  p_msg_level=>fnd_log.level_procedure);
2652         END IF;
2653         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2654         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CITIZENSHIP');
2655         FND_MSG_PUB.ADD;
2656         RAISE FND_API.G_EXC_ERROR;
2657       END IF;
2658 
2659       -- assign citizenship_id
2660       p_citizenship_obj(i).citizenship_id := l_dummy_id;
2661     END LOOP;
2662     END IF;
2663 
2664     -----------------------------------
2665     -- Assign employment history record
2666     -----------------------------------
2667     IF(p_employ_hist_obj IS NOT NULL) THEN
2668     FOR i IN 1..p_employ_hist_obj.COUNT LOOP
2669       assign_employ_hist_rec(
2670         p_employ_hist_obj           => p_employ_hist_obj(i),
2671         p_party_id                  => p_person_id,
2672         px_employ_hist_rec          => l_employ_hist_rec
2673       );
2674 
2675       HZ_PERSON_INFO_V2PUB.create_employment_history(
2676         p_employment_history_rec    => l_employ_hist_rec,
2677         x_employment_history_id     => l_dummy_id,
2678         x_return_status             => x_return_status,
2679         x_msg_count                 => x_msg_count,
2680         x_msg_data                  => x_msg_data
2681       );
2682 
2683       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2684         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2685           hz_utility_v2pub.debug(p_message=>'Create Employment History - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2686                                  p_prefix=>l_debug_prefix,
2687                                  p_msg_level=>fnd_log.level_procedure);
2688         END IF;
2689         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
2690         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'HZ_EMPLOYMENT_HISTORY');
2691         FND_MSG_PUB.ADD;
2692         RAISE FND_API.G_EXC_ERROR;
2693       ELSE
2694 
2695         -- assign employment_history_id
2696         p_employ_hist_obj(i).employment_history_id := l_dummy_id;
2697 
2698         -- Call work class v2api if employment history record is created successfully
2699         -------------------------------------------------
2700         -- Assign work class of employment history record
2701         -------------------------------------------------
2702         IF(p_employ_hist_obj(i).work_class_objs IS NOT NULL) THEN
2703         FOR j IN 1..p_employ_hist_obj(i).work_class_objs.COUNT LOOP
2704           assign_work_class_rec(
2705             p_work_class_obj            => p_employ_hist_obj(i).work_class_objs(j),
2706             p_employ_hist_id            => l_dummy_id,
2707             px_work_class_rec           => l_work_class_rec
2708           );
2709 
2710           HZ_PERSON_INFO_V2PUB.create_work_class(
2711             p_work_class_rec            => l_work_class_rec,
2712             x_work_class_id             => l_dummy_id,
2713             x_return_status             => x_return_status,
2714             x_msg_count                 => x_msg_count,
2715             x_msg_data                  => x_msg_data
2716           );
2717 
2718           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2719             IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2720               hz_utility_v2pub.debug(p_message=>'Create Work Class - Error occurred at hz_person_bo_pub.create_person_info, employ_hist_id: '||l_dummy_id,
2721                                      p_prefix=>l_debug_prefix,
2722                                      p_msg_level=>fnd_log.level_procedure);
2723             END IF;
2724             FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2725             FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_WORK_CLASS');
2726             FND_MSG_PUB.ADD;
2727             RAISE FND_API.G_EXC_ERROR;
2728           END IF;
2729 
2730           -- assign work_class_id
2731           p_employ_hist_obj(i).work_class_objs(j).work_class_id := l_dummy_id;
2732         END LOOP;
2733         END IF;
2734       END IF;
2735     END LOOP;
2736     END IF;
2737 
2738     --------------------------------
2739     -- Assign person interest record
2740     --------------------------------
2741     IF(p_interest_obj IS NOT NULL) THEN
2742     FOR i IN 1..p_interest_obj.COUNT LOOP
2743       assign_interest_rec(
2744         p_person_interest_obj       => p_interest_obj(i),
2745         p_party_id                  => p_person_id,
2746         px_person_interest_rec      => l_interest_rec
2747       );
2748 
2749       HZ_PERSON_INFO_V2PUB.create_person_interest(
2750         p_person_interest_rec       => l_interest_rec,
2751         x_person_interest_id        => l_dummy_id,
2752         x_return_status             => x_return_status,
2753         x_msg_count                 => x_msg_count,
2754         x_msg_data                  => x_msg_data
2755       );
2756 
2757       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2758         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2759           hz_utility_v2pub.debug(p_message=>'Create Person Interest - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2760                                  p_prefix=>l_debug_prefix,
2761                                  p_msg_level=>fnd_log.level_procedure);
2762         END IF;
2763         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2764         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_INTEREST');
2765         FND_MSG_PUB.ADD;
2766         RAISE FND_API.G_EXC_ERROR;
2767       END IF;
2768 
2769       -- assign person_interest_id
2770       p_interest_obj(i).person_interest_id := l_dummy_id;
2771     END LOOP;
2772     END IF;
2773 
2774     -- Debug info.
2775     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2776          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2777                                p_msg_data=>x_msg_data,
2778                                p_msg_type=>'WARNING',
2779                                p_msg_level=>fnd_log.level_exception);
2780     END IF;
2781     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2782         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2783                                p_prefix=>l_debug_prefix,
2784                                p_msg_level=>fnd_log.level_procedure);
2785     END IF;
2786   EXCEPTION
2787     WHEN fnd_api.g_exc_error THEN
2788       ROLLBACK TO create_person_info_pub;
2789       x_return_status := fnd_api.g_ret_sts_error;
2790 
2791       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2792                                 p_count => x_msg_count,
2793                                 p_data  => x_msg_data);
2794 
2795       -- Debug info.
2796       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2797         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2798                                p_msg_data=>x_msg_data,
2799                                p_msg_type=>'ERROR',
2800                                p_msg_level=>fnd_log.level_error);
2801       END IF;
2802       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2803         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2804                                p_prefix=>l_debug_prefix,
2805                                p_msg_level=>fnd_log.level_procedure);
2806       END IF;
2807     WHEN fnd_api.g_exc_unexpected_error THEN
2808       ROLLBACK TO create_person_info_pub;
2809       x_return_status := fnd_api.g_ret_sts_unexp_error;
2810 
2811       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2812                                 p_count => x_msg_count,
2813                                 p_data  => x_msg_data);
2814 
2815       -- Debug info.
2816       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2817         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2818                                p_msg_data=>x_msg_data,
2819                                p_msg_type=>'UNEXPECTED ERROR',
2820                                p_msg_level=>fnd_log.level_error);
2821       END IF;
2822       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2823         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2824                                p_prefix=>l_debug_prefix,
2825                                p_msg_level=>fnd_log.level_procedure);
2826       END IF;
2827 
2828     WHEN OTHERS THEN
2829       ROLLBACK TO create_person_info_pub;
2830       x_return_status := fnd_api.g_ret_sts_unexp_error;
2831 
2832       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2833       fnd_message.set_token('ERROR' ,SQLERRM);
2834       fnd_msg_pub.add;
2835 
2836       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2837                                 p_count => x_msg_count,
2838                                 p_data  => x_msg_data);
2839 
2840       -- Debug info.
2841       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2842         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2843                                p_msg_data=>x_msg_data,
2844                                p_msg_type=>'SQL ERROR',
2845                                p_msg_level=>fnd_log.level_error);
2846       END IF;
2847       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2848         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2849                                p_prefix=>l_debug_prefix,
2850                                p_msg_level=>fnd_log.level_procedure);
2851       END IF;
2852   END create_person_info;
2853 
2854   -- PRIVATE PROCEDURE save_person_info
2855   --
2856   -- DESCRIPTION
2857   --     Create or update person information, such as language, education, citizenship,
2858   --     employment history and interest
2859   --
2860   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2861   --
2862   -- ARGUMENTS
2863   --   IN:
2864   --     p_language_obj       Person language object.
2865   --     p_education_obj      Education object.
2866   --     p_citizenship_obj    Citizenship object.
2867   --     p_employ_hist_obj    Employment history object.
2868   --     p_interest_obj       Person interest object.
2869   --     p_party_id           Party ID.
2870   --   OUT:
2871   --     x_return_status      Return status after the call. The status can
2872   --                          be fnd_api.g_ret_sts_success (success),
2873   --                          fnd_api.g_ret_sts_error (error),
2874   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2875   --     x_msg_count          Number of messages in message stack.
2876   --     x_msg_data           Message text if x_msg_count is 1.
2877   --
2878   -- NOTES
2879   --
2880   -- MODIFICATION HISTORY
2881   --
2882   --   14-DEC-2004    Arnold Ng          Created.
2883   --
2884 
2885   PROCEDURE save_person_info(
2886     p_language_obj               IN OUT NOCOPY HZ_PERSON_LANG_OBJ_TBL,
2887     p_education_obj              IN OUT NOCOPY HZ_EDUCATION_OBJ_TBL,
2888     p_citizenship_obj            IN OUT NOCOPY HZ_CITIZENSHIP_OBJ_TBL,
2889     p_employ_hist_obj            IN OUT NOCOPY HZ_EMPLOY_HIST_BO_TBL,
2890     p_interest_obj               IN OUT NOCOPY HZ_PERSON_INTEREST_OBJ_TBL,
2891     p_person_id                  IN         NUMBER,
2892     x_return_status              OUT NOCOPY VARCHAR2,
2893     x_msg_count                  OUT NOCOPY NUMBER,
2894     x_msg_data                   OUT NOCOPY VARCHAR2
2895   )IS
2896     l_debug_prefix        VARCHAR2(30);
2897     l_person_lang_rec     HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE;
2898     l_education_rec       HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE;
2899     l_citizenship_rec     HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE;
2900     l_employ_hist_rec     HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE;
2901     l_work_class_rec      HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE;
2902     l_interest_rec        HZ_PERSON_INFO_V2PUB.PERSON_INTEREST_REC_TYPE;
2903     l_dummy_id            NUMBER;
2904     l_ovn                 NUMBER := NULL;
2905   BEGIN
2906     -- Standard start of API savepoint
2907     SAVEPOINT save_person_info_pub;
2908 
2909     -- initialize API return status to success.
2910     x_return_status := FND_API.G_RET_STS_SUCCESS;
2911 
2912     -- Debug info.
2913     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2914         hz_utility_v2pub.debug(p_message=>'save_person_info(+)',
2915                                p_prefix=>l_debug_prefix,
2916                                p_msg_level=>fnd_log.level_procedure);
2917     END IF;
2918 
2919     --------------------------------
2920     -- Create/Update person language
2921     --------------------------------
2922     IF(p_language_obj IS NOT NULL) THEN
2923     FOR i IN 1..p_language_obj.COUNT LOOP
2924       assign_person_lang_rec(
2925         p_person_lang_obj           => p_language_obj(i),
2926         p_party_id                  => p_person_id,
2927         px_person_lang_rec          => l_person_lang_rec
2928       );
2929 
2930       hz_registry_validate_bo_pvt.check_language_op(
2931         p_party_id              => p_person_id,
2932         px_language_use_ref_id  => l_person_lang_rec.language_use_reference_id,
2933         p_language_name         => l_person_lang_rec.language_name,
2934         x_object_version_number => l_ovn
2935       );
2936 
2937       IF(l_ovn = -1) THEN
2938         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2939           hz_utility_v2pub.debug(p_message=>'Save Person Language - Error occurred at hz_person_bo_pub.check_language_op, person id: '||p_person_id||' '||' ovn:'||l_ovn,
2940                                  p_prefix=>l_debug_prefix,
2941                                  p_msg_level=>fnd_log.level_procedure);
2942         END IF;
2943         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2944         FND_MSG_PUB.ADD;
2945         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2946         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_LANGUAGE');
2947         FND_MSG_PUB.ADD;
2948         RAISE FND_API.G_EXC_ERROR;
2949       END IF;
2950 
2951       IF(l_ovn IS NULL) THEN
2952         HZ_PERSON_INFO_V2PUB.create_person_language(
2953           p_person_language_rec       => l_person_lang_rec,
2954           x_language_use_reference_id => l_dummy_id,
2955           x_return_status             => x_return_status,
2956           x_msg_count                 => x_msg_count,
2957           x_msg_data                  => x_msg_data
2958         );
2959 
2960         -- assign person language_use_reference_id
2961         p_language_obj(i).language_use_reference_id := l_dummy_id;
2962       ELSE
2963         -- clean up created_by_module for update
2964         l_person_lang_rec.created_by_module := NULL;
2965         HZ_PERSON_INFO_V2PUB.update_person_language(
2966           p_person_language_rec       => l_person_lang_rec,
2967           p_object_version_number     => l_ovn,
2968           x_return_status             => x_return_status,
2969           x_msg_count                 => x_msg_count,
2970           x_msg_data                  => x_msg_data
2971         );
2972 
2973         -- assign person language_use_reference_id
2974         p_language_obj(i).language_use_reference_id := l_person_lang_rec.language_use_reference_id;
2975       END IF;
2976       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2977         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2978           hz_utility_v2pub.debug(p_message=>'Save Person Language - Error occurred at hz_person_bo_pub.save_person_info, person id: '||p_person_id||' '||' ovn:'||l_ovn,
2979                                  p_prefix=>l_debug_prefix,
2980                                  p_msg_level=>fnd_log.level_procedure);
2981         END IF;
2982         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2983         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_LANGUAGE');
2984         FND_MSG_PUB.ADD;
2985         RAISE FND_API.G_EXC_ERROR;
2986       END IF;
2987     END LOOP;
2988     END IF;
2989 
2990     --------------------------
2991     -- Create/Update education
2992     --------------------------
2993     IF(p_education_obj IS NOT NULL) THEN
2994     FOR i IN 1..p_education_obj.COUNT LOOP
2995       assign_education_rec(
2996         p_education_obj             => p_education_obj(i),
2997         p_party_id                  => p_person_id,
2998         px_education_rec            => l_education_rec
2999       );
3000 
3001       hz_registry_validate_bo_pvt.check_education_op(
3002         p_party_id             => p_person_id,
3003         px_education_id        => l_education_rec.education_id,
3004         p_course_major         => l_education_rec.course_major,
3005         p_school_attended_name => l_education_rec.school_attended_name,
3006         p_degree_received      => l_education_rec.degree_received,
3007         x_object_version_number => l_ovn
3008       );
3009 
3010       IF(l_ovn = -1) THEN
3011         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3012           hz_utility_v2pub.debug(p_message=>'Save Education - Error occurred at hz_person_bo_pub.check_education_op, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3013                                  p_prefix=>l_debug_prefix,
3014                                  p_msg_level=>fnd_log.level_procedure);
3015         END IF;
3016         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
3017         FND_MSG_PUB.ADD;
3018         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3019         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_EDUCATION');
3020         FND_MSG_PUB.ADD;
3021         RAISE FND_API.G_EXC_ERROR;
3022       END IF;
3023 
3024       IF(l_ovn IS NULL) THEN
3025         HZ_PERSON_INFO_V2PUB.create_education(
3026           p_education_rec             => l_education_rec,
3027           x_education_id              => l_dummy_id,
3028           x_return_status             => x_return_status,
3029           x_msg_count                 => x_msg_count,
3030           x_msg_data                  => x_msg_data
3031         );
3032 
3033         -- assign education_id
3034         p_education_obj(i).education_id := l_dummy_id;
3035       ELSE
3036         -- clean up created_by_module for update
3037         l_education_rec.created_by_module := NULL;
3038         HZ_PERSON_INFO_V2PUB.update_education(
3039           p_education_rec             => l_education_rec,
3040           p_object_version_number     => l_ovn,
3041           x_return_status             => x_return_status,
3042           x_msg_count                 => x_msg_count,
3043           x_msg_data                  => x_msg_data
3044         );
3045 
3046         -- assign education_id
3047         p_education_obj(i).education_id := l_education_rec.education_id;
3048       END IF;
3049       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3050         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3051           hz_utility_v2pub.debug(p_message=>'Save Education - Error occurred at hz_person_bo_pub.save_person_info, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3052                                  p_prefix=>l_debug_prefix,
3053                                  p_msg_level=>fnd_log.level_procedure);
3054         END IF;
3055         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3056         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_EDUCATION');
3057         FND_MSG_PUB.ADD;
3058         RAISE FND_API.G_EXC_ERROR;
3059       END IF;
3060     END LOOP;
3061     END IF;
3062 
3063     ----------------------------
3064     -- Create/Update citizenship
3065     ----------------------------
3066     IF(p_citizenship_obj IS NOT NULL) THEN
3067     FOR i IN 1..p_citizenship_obj.COUNT LOOP
3068       assign_citizenship_rec(
3069         p_citizenship_obj           => p_citizenship_obj(i),
3070         p_party_id                  => p_person_id,
3071         px_citizenship_rec          => l_citizenship_rec
3072       );
3073 
3074       hz_registry_validate_bo_pvt.check_citizenship_op(
3075         p_party_id             => p_person_id,
3076         px_citizenship_id      => l_citizenship_rec.citizenship_id,
3077         p_country_code         => l_citizenship_rec.country_code,
3078         x_object_version_number => l_ovn
3079       );
3080 
3081       IF(l_ovn = -1) THEN
3082         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3083           hz_utility_v2pub.debug(p_message=>'Save Citizenship - Error occurred at hz_person_bo_pub.check_citizenship_op, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3084                                  p_prefix=>l_debug_prefix,
3085                                  p_msg_level=>fnd_log.level_procedure);
3086         END IF;
3087         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
3088         FND_MSG_PUB.ADD;
3089         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3090         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CITIZENSHIP');
3091         FND_MSG_PUB.ADD;
3092         RAISE FND_API.G_EXC_ERROR;
3093       END IF;
3094 
3095       IF(l_ovn IS NULL) THEN
3096         HZ_PERSON_INFO_V2PUB.create_citizenship(
3097           p_citizenship_rec           => l_citizenship_rec,
3098           x_citizenship_id            => l_dummy_id,
3099           x_return_status             => x_return_status,
3100           x_msg_count                 => x_msg_count,
3101           x_msg_data                  => x_msg_data
3102         );
3103 
3104         -- assign citizenship_id
3105         p_citizenship_obj(i).citizenship_id := l_dummy_id;
3106       ELSE
3107         -- clean up created_by_module for update
3108         l_citizenship_rec.created_by_module := NULL;
3109         HZ_PERSON_INFO_V2PUB.update_citizenship(
3110           p_citizenship_rec           => l_citizenship_rec,
3111           p_object_version_number     => l_ovn,
3112           x_return_status             => x_return_status,
3113           x_msg_count                 => x_msg_count,
3114           x_msg_data                  => x_msg_data
3115         );
3116 
3117         -- assign citizenship_id
3118         p_citizenship_obj(i).citizenship_id := l_citizenship_rec.citizenship_id;
3119       END IF;
3120       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3121         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3122           hz_utility_v2pub.debug(p_message=>'Save Citizenship - Error occurred at hz_person_bo_pub.save_person_info, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3123                                  p_prefix=>l_debug_prefix,
3124                                  p_msg_level=>fnd_log.level_procedure);
3125         END IF;
3126         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3127         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CITIZENSHIP');
3128         FND_MSG_PUB.ADD;
3129         RAISE FND_API.G_EXC_ERROR;
3130       END IF;
3131     END LOOP;
3132     END IF;
3133 
3134     -----------------------------------
3135     -- Create/Update employment history
3136     -----------------------------------
3137     IF(p_employ_hist_obj IS NOT NULL) THEN
3138     FOR i IN 1..p_employ_hist_obj.COUNT LOOP
3139       assign_employ_hist_rec(
3140         p_employ_hist_obj           => p_employ_hist_obj(i),
3141         p_party_id                  => p_person_id,
3142         px_employ_hist_rec          => l_employ_hist_rec
3143       );
3144 
3145       hz_registry_validate_bo_pvt.check_employ_hist_op(
3146         p_party_id             => p_person_id,
3147         px_emp_hist_id         => l_employ_hist_rec.employment_history_id,
3148         p_employed_by_name_company  => l_employ_hist_rec.employed_by_name_company,
3149         p_employed_as_title    => l_employ_hist_rec.employed_as_title,
3150         p_begin_date           => l_employ_hist_rec.begin_date,
3151         x_object_version_number => l_ovn
3152       );
3153 
3154       IF(l_ovn = -1) THEN
3155         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3156           hz_utility_v2pub.debug(p_message=>'Save Employment History - Error occurred at hz_person_bo_pub.check_employ_hist_op, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3157                                  p_prefix=>l_debug_prefix,
3158                                  p_msg_level=>fnd_log.level_procedure);
3159         END IF;
3160         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
3161         FND_MSG_PUB.ADD;
3162         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
3163         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'HZ_EMPLOYMENT_HISTORY');
3164         FND_MSG_PUB.ADD;
3165         RAISE FND_API.G_EXC_ERROR;
3166       END IF;
3167 
3168       IF(l_ovn IS NULL) THEN
3169         HZ_PERSON_INFO_V2PUB.create_employment_history(
3170           p_employment_history_rec    => l_employ_hist_rec,
3171           x_employment_history_id     => l_dummy_id,
3172           x_return_status             => x_return_status,
3173           x_msg_count                 => x_msg_count,
3174           x_msg_data                  => x_msg_data
3175         );
3176 
3177         -- assign employment_history_id
3178         p_employ_hist_obj(i).employment_history_id := l_dummy_id;
3179       ELSE
3180         -- clean up created_by_module for update
3181         l_employ_hist_rec.created_by_module := NULL;
3182         HZ_PERSON_INFO_V2PUB.update_employment_history(
3183           p_employment_history_rec    => l_employ_hist_rec,
3184           p_object_version_number     => l_ovn,
3185           x_return_status             => x_return_status,
3186           x_msg_count                 => x_msg_count,
3187           x_msg_data                  => x_msg_data
3188         );
3189         l_dummy_id := l_employ_hist_rec.employment_history_id;
3190 
3191         -- assign employment_history_id
3192         p_employ_hist_obj(i).employment_history_id := l_dummy_id;
3193       END IF;
3194       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3195         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3196           hz_utility_v2pub.debug(p_message=>'Save Employment History - Error occurred at hz_person_bo_pub.save_person_info, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3197                                  p_prefix=>l_debug_prefix,
3198                                  p_msg_level=>fnd_log.level_procedure);
3199         END IF;
3200         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
3201         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'HZ_EMPLOYMENT_HISTORY');
3202         FND_MSG_PUB.ADD;
3203         RAISE FND_API.G_EXC_ERROR;
3204       ELSE
3205         ---------------------------
3206         -- Create/Update work class
3207         ---------------------------
3208         IF(p_employ_hist_obj(i).work_class_objs IS NOT NULL) THEN
3209         FOR j IN 1..p_employ_hist_obj(i).work_class_objs.COUNT LOOP
3210           assign_work_class_rec(
3211             p_work_class_obj            => p_employ_hist_obj(i).work_class_objs(j),
3212             p_employ_hist_id            => l_dummy_id,
3213             px_work_class_rec           => l_work_class_rec
3214           );
3215 
3216           hz_registry_validate_bo_pvt.check_work_class_op(
3217             p_employ_hist_id      => l_dummy_id,
3218             px_work_class_id      => l_work_class_rec.work_class_id,
3219             p_work_class_name     => l_work_class_rec.work_class_name,
3220             x_object_version_number => l_ovn
3221           );
3222 
3223           IF(l_ovn = -1) THEN
3224             IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3225               hz_utility_v2pub.debug(p_message=>'Save Work Class - Error occurred at hz_person_bo_pub.check_work_class_op, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3226                                      p_prefix=>l_debug_prefix,
3227                                      p_msg_level=>fnd_log.level_procedure);
3228             END IF;
3229             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
3230             FND_MSG_PUB.ADD;
3231             FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3232             FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_WORK_CLASS');
3233             FND_MSG_PUB.ADD;
3234             RAISE FND_API.G_EXC_ERROR;
3235           END IF;
3236 
3237           IF(l_ovn IS NULL) THEN
3238             HZ_PERSON_INFO_V2PUB.create_work_class(
3239               p_work_class_rec            => l_work_class_rec,
3240               x_work_class_id             => l_dummy_id,
3241               x_return_status             => x_return_status,
3242               x_msg_count                 => x_msg_count,
3243               x_msg_data                  => x_msg_data
3244             );
3245 
3246             -- assign work_class_id
3247             p_employ_hist_obj(i).work_class_objs(j).work_class_id := l_dummy_id;
3248           ELSE
3249             -- clean up created_by_module for update
3250             l_work_class_rec.created_by_module := NULL;
3251             HZ_PERSON_INFO_V2PUB.update_work_class(
3252               p_work_class_rec            => l_work_class_rec,
3253               p_object_version_number     => l_ovn,
3254               x_return_status             => x_return_status,
3255               x_msg_count                 => x_msg_count,
3256               x_msg_data                  => x_msg_data
3257             );
3258 
3259            -- assign work_class_id
3260             p_employ_hist_obj(i).work_class_objs(j).work_class_id := l_work_class_rec.work_class_id;
3261           END IF;
3262           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3263             IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3264               hz_utility_v2pub.debug(p_message=>'Save Work Class - Error occurred at hz_person_bo_pub.save_person_info, employ_hist_id: '||l_dummy_id||' '||' ovn:'||l_ovn,
3265                                      p_prefix=>l_debug_prefix,
3266                                      p_msg_level=>fnd_log.level_procedure);
3267             END IF;
3268             FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3269             FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_WORK_CLASS');
3270             FND_MSG_PUB.ADD;
3271             RAISE FND_API.G_EXC_ERROR;
3272           END IF;
3273         END LOOP;
3274         END IF;
3275       END IF;
3276     END LOOP;
3277     END IF;
3278 
3279     -------------------------
3280     -- Create/Update interest
3281     -------------------------
3282     IF(p_interest_obj IS NOT NULL) THEN
3283     FOR i IN 1..p_interest_obj.COUNT LOOP
3284       assign_interest_rec(
3285         p_person_interest_obj       => p_interest_obj(i),
3286         p_party_id                  => p_person_id,
3287         px_person_interest_rec      => l_interest_rec
3288       );
3289 
3290       hz_registry_validate_bo_pvt.check_interest_op(
3291         p_party_id            => p_person_id,
3292         px_interest_id        => l_interest_rec.person_interest_id,
3293         p_interest_type_code  => l_interest_rec.interest_type_code,
3294         p_sub_interest_type_code  => l_interest_rec.sub_interest_type_code,
3295         p_interest_name       => l_interest_rec.interest_name,
3296         x_object_version_number => l_ovn
3297       );
3298 
3299       IF(l_ovn = -1) THEN
3300         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3301           hz_utility_v2pub.debug(p_message=>'Save Person Interest - Error occurred at hz_person_bo_pub.check_interest_op, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3302                                  p_prefix=>l_debug_prefix,
3303                                  p_msg_level=>fnd_log.level_procedure);
3304         END IF;
3305         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
3306         FND_MSG_PUB.ADD;
3307         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3308         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_INTEREST');
3309         FND_MSG_PUB.ADD;
3310         RAISE FND_API.G_EXC_ERROR;
3311       END IF;
3312 
3313       IF(l_ovn IS NULL) THEN
3314         HZ_PERSON_INFO_V2PUB.create_person_interest(
3315           p_person_interest_rec       => l_interest_rec,
3316           x_person_interest_id        => l_dummy_id,
3317           x_return_status             => x_return_status,
3318           x_msg_count                 => x_msg_count,
3319           x_msg_data                  => x_msg_data
3320         );
3321 
3322         -- assign person_interest_id
3323         p_interest_obj(i).person_interest_id := l_dummy_id;
3324       ELSE
3325         -- clean up created_by_module for update
3326         l_interest_rec.created_by_module := NULL;
3327         HZ_PERSON_INFO_V2PUB.update_person_interest(
3328           p_person_interest_rec       => l_interest_rec,
3329           p_object_version_number     => l_ovn,
3330           x_return_status             => x_return_status,
3331           x_msg_count                 => x_msg_count,
3332           x_msg_data                  => x_msg_data
3333         );
3334 
3335         -- assign person_interest_id
3336         p_interest_obj(i).person_interest_id := l_interest_rec.person_interest_id;
3337       END IF;
3338       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3339         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3340           hz_utility_v2pub.debug(p_message=>'Save Person Interest - Error occurred at hz_person_bo_pub.save_person_info, person id: '||p_person_id||' '||' ovn:'||l_ovn,
3341                                  p_prefix=>l_debug_prefix,
3342                                  p_msg_level=>fnd_log.level_procedure);
3343         END IF;
3344         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
3345         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_INTEREST');
3346         FND_MSG_PUB.ADD;
3347         RAISE FND_API.G_EXC_ERROR;
3348       END IF;
3349     END LOOP;
3350     END IF;
3351 
3352     -- Debug info.
3353     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3354          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3355                                p_msg_data=>x_msg_data,
3356                                p_msg_type=>'WARNING',
3357                                p_msg_level=>fnd_log.level_exception);
3358     END IF;
3359     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3360         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
3361                                p_prefix=>l_debug_prefix,
3362                                p_msg_level=>fnd_log.level_procedure);
3363     END IF;
3364   EXCEPTION
3365     WHEN fnd_api.g_exc_error THEN
3366       ROLLBACK TO save_person_info_pub;
3367       x_return_status := fnd_api.g_ret_sts_error;
3368 
3369       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3370                                 p_count => x_msg_count,
3371                                 p_data  => x_msg_data);
3372 
3373       -- Debug info.
3374       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3375         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3376                                p_msg_data=>x_msg_data,
3377                                p_msg_type=>'ERROR',
3378                                p_msg_level=>fnd_log.level_error);
3379       END IF;
3380       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3381         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
3382                                p_prefix=>l_debug_prefix,
3383                                p_msg_level=>fnd_log.level_procedure);
3384       END IF;
3385     WHEN fnd_api.g_exc_unexpected_error THEN
3386       ROLLBACK TO save_person_info_pub;
3387       x_return_status := fnd_api.g_ret_sts_unexp_error;
3388 
3389       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3390                                 p_count => x_msg_count,
3391                                 p_data  => x_msg_data);
3392 
3393       -- Debug info.
3394       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3395         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3396                                p_msg_data=>x_msg_data,
3397                                p_msg_type=>'UNEXPECTED ERROR',
3398                                p_msg_level=>fnd_log.level_error);
3399       END IF;
3400       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3401         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
3402                                p_prefix=>l_debug_prefix,
3403                                p_msg_level=>fnd_log.level_procedure);
3404       END IF;
3405 
3406     WHEN OTHERS THEN
3407       ROLLBACK TO save_person_info_pub;
3408       x_return_status := fnd_api.g_ret_sts_unexp_error;
3409 
3410       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3411       fnd_message.set_token('ERROR' ,SQLERRM);
3412       fnd_msg_pub.add;
3413 
3414       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3415                                 p_count => x_msg_count,
3416                                 p_data  => x_msg_data);
3417 
3418       -- Debug info.
3419       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3420         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3421                                p_msg_data=>x_msg_data,
3422                                p_msg_type=>'SQL ERROR',
3423                                p_msg_level=>fnd_log.level_error);
3424       END IF;
3425       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3426         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
3427                                p_prefix=>l_debug_prefix,
3428                                p_msg_level=>fnd_log.level_procedure);
3429       END IF;
3430   END save_person_info;
3431 
3432   --------------------------------------
3433   --
3434   -- PROCEDURE get_person_bo
3435   --
3436   -- DESCRIPTION
3437   --     Get a logical person.
3438   --
3439   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3440   --
3441   -- ARGUMENTS
3442   --   IN:
3443   --     p_init_msg_list      Initialize message stack if it is set to  FND_API.G_TRUE. Default is FND_API.G_FALSE.
3444   --     p_person_id          Person ID.
3445   --     p_person_os          Person orig system.
3446   --     p_person_osr         Person orig system reference.
3447   --   OUT:
3448   --     x_person_obj         Logical person record.
3449   --     x_return_status      Return status after the call. The status can
3450   --                          be fnd_api.g_ret_sts_success (success),
3451   --                          fnd_api.g_ret_sts_error (error),
3452   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3453   --     x_msg_count          Number of messages in message stack.
3454   --     x_msg_data           Message text if x_msg_count is 1.
3455   --
3456   -- NOTES
3457   --
3458   -- MODIFICATION HISTORY
3459   --
3460   --
3461   --   10-JUN-2005   AWU                Created.
3462   --
3463 
3464 /*
3465 The Get Person API Procedure is a retrieval service that returns a full Person business object.
3466 The user identifies a particular Person business object using the TCA identifier and/or
3467 the object Source System information. Upon proper validation of the object,
3468 the full Person business object is returned. The object consists of all data included within
3469 the Person business object, at all embedded levels. This includes the set of all data stored
3470 in the TCA tables for each embedded entity.
3471 
3472 To retrieve the appropriate embedded business objects within the Person business object,
3473 the Get procedure calls the equivalent procedure for the following embedded objects:
3474 
3475 Embedded BO	    Mandatory	Multiple Logical API Procedure		Comments
3476 Party Site		N	Y		get_party_site_bo
3477 Phone			N	Y		get_phone_bo
3478 Email			N	Y		get_email_bo
3479 Web			N	Y		get_web_bo
3480 SMS			N	Y		get_sms_bo
3481 Employment History	N	Y	Business Structure. Included entities:HZ_EMPLOYMENT_HISTORY, HZ_WORK_CLASS
3482 
3483 
3484 To retrieve the appropriate embedded entities within the Person business object,
3485 the Get procedure returns all records for the particular person from these TCA entity tables:
3486 
3487 Embedded TCA Entity	Mandatory	Multiple	TCA Table Entities
3488 
3489 Party,Person Profile	Y		N	HZ_PARTIES, HZ_PERSON_PROFILES
3490 Person Preference	N		Y	HZ_PARTY_PREFERENCES
3491 Relationship		N		Y	HZ_RELATIONSHIPS
3492 Classification		N		Y	HZ_CODE_ASSIGNMENTS
3493 Language		N		Y	HZ_PERSON_LANGUAGE
3494 Education		N		Y	HZ_EDUCATION
3495 Citizenship		N		Y	HZ_CITIZENSHIP
3496 Interest		N		Y	HZ_PERSON_INTEREST
3497 Certification		N		Y	HZ_CERTIFICATIONS
3498 Financial Profile	N		Y	HZ_FINANCIAL_PROFILE
3499 */
3500 
3501 PROCEDURE get_person_bo (
3502 	p_init_msg_list		IN	VARCHAR2 := FND_API.G_FALSE,
3503 	p_person_id		IN	NUMBER,
3504 	p_person_os		IN	VARCHAR2,
3505 	p_person_osr		IN	VARCHAR2,
3506 	x_person_obj	  	OUT NOCOPY	HZ_PERSON_BO,
3507 	x_return_status		OUT NOCOPY	VARCHAR2,
3508 	x_msg_count		OUT NOCOPY	NUMBER,
3509 	x_msg_data		OUT NOCOPY	VARCHAR2
3510 ) is
3511  l_debug_prefix              VARCHAR2(30) := '';
3512 
3513   l_person_id  number;
3514   l_person_os  varchar2(30);
3515   l_person_osr varchar2(255);
3516 BEGIN
3517 
3518 	-- initialize API return status to success.
3519     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3520 
3521     	-- Initialize message list if p_init_msg_list is set to TRUE
3522     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3523       		FND_MSG_PUB.initialize;
3524     	END IF;
3525 
3526 
3527 	-- Debug info.
3528         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3529         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo(+)',
3530                                p_prefix=>l_debug_prefix,
3531                                p_msg_level=>fnd_log.level_procedure);
3532     	END IF;
3533 
3534     	-- check if pass in contact_point_id and/or os+osr
3535     	-- extraction validation logic is same as update
3536 
3537     	l_person_id := p_person_id;
3538     	l_person_os := p_person_os;
3539     	l_person_osr := p_person_osr;
3540 
3541     	HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
3542       		px_id              => l_person_id,
3543       		px_os              => l_person_os,
3544       		px_osr             => l_person_osr,
3545       		p_obj_type         => 'PERSON',
3546       		x_return_status    => x_return_status,
3547       		x_msg_count        => x_msg_count,
3548       		x_msg_data         => x_msg_data);
3549 
3550     	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3551       		RAISE fnd_api.g_exc_error;
3552    	 END IF;
3553 
3554 	HZ_EXTRACT_PERSON_BO_PVT.get_person_bo(
3555     		p_init_msg_list   => fnd_api.g_false,
3556     		p_person_id => l_person_id,
3557     		p_action_type	  => NULL,
3558     		x_person_obj => x_person_obj,
3559 		x_return_status => x_return_status,
3560 		x_msg_count => x_msg_count,
3561 		x_msg_data => x_msg_data);
3562 
3563 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3564       		RAISE FND_API.G_EXC_ERROR;
3565     	END IF;
3566 
3567 
3568 	-- Debug info.
3569     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3570          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3571                                p_msg_data=>x_msg_data,
3572                                p_msg_type=>'WARNING',
3573                                p_msg_level=>fnd_log.level_exception);
3574     	END IF;
3575 
3576     	-- Debug info.
3577         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3578         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3579                                p_prefix=>l_debug_prefix,
3580                                p_msg_level=>fnd_log.level_procedure);
3581     	END IF;
3582 
3583 
3584  EXCEPTION
3585 
3586   WHEN fnd_api.g_exc_error THEN
3587       x_return_status := fnd_api.g_ret_sts_error;
3588 
3589       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3590                                 p_count => x_msg_count,
3591                                 p_data  => x_msg_data);
3592 
3593       -- Debug info.
3594       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3595         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3596                                p_msg_data=>x_msg_data,
3597                                p_msg_type=>'ERROR',
3598                                p_msg_level=>fnd_log.level_error);
3599       END IF;
3600       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3601         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3602                                p_prefix=>l_debug_prefix,
3603                                p_msg_level=>fnd_log.level_procedure);
3604       END IF;
3605     WHEN fnd_api.g_exc_unexpected_error THEN
3606       x_return_status := fnd_api.g_ret_sts_unexp_error;
3607 
3608       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3609                                 p_count => x_msg_count,
3610                                 p_data  => x_msg_data);
3611 
3612       -- Debug info.
3613       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3614         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3615                                p_msg_data=>x_msg_data,
3616                                p_msg_type=>'UNEXPECTED ERROR',
3617                                p_msg_level=>fnd_log.level_error);
3618       END IF;
3619       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3620         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3621                                p_prefix=>l_debug_prefix,
3622                                p_msg_level=>fnd_log.level_procedure);
3623       END IF;
3624     WHEN OTHERS THEN
3625       x_return_status := fnd_api.g_ret_sts_unexp_error;
3626 
3627       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3628       fnd_message.set_token('ERROR' ,SQLERRM);
3629       fnd_msg_pub.add;
3630 
3631       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3632                                 p_count => x_msg_count,
3633                                 p_data  => x_msg_data);
3634 
3635       -- Debug info.
3636       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3637         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3638                                p_msg_data=>x_msg_data,
3639                                p_msg_type=>'SQL ERROR',
3640                                p_msg_level=>fnd_log.level_error);
3641       END IF;
3642       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3643         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3644                                p_prefix=>l_debug_prefix,
3645                                p_msg_level=>fnd_log.level_procedure);
3646       END IF;
3647 
3648 end;
3649 
3650   PROCEDURE get_person_bo (
3651     p_person_id         IN      NUMBER,
3652     p_person_os         IN      VARCHAR2,
3653     p_person_osr        IN      VARCHAR2,
3654     x_person_obj        OUT NOCOPY      HZ_PERSON_BO,
3655     x_return_status     OUT NOCOPY      VARCHAR2,
3656     x_messages          OUT NOCOPY      HZ_MESSAGE_OBJ_TBL
3657   ) is
3658     l_msg_count       NUMBER;
3659     l_msg_data        VARCHAR2(2000);
3660   BEGIN
3661     get_person_bo(
3662       p_init_msg_list      => FND_API.G_TRUE,
3663       p_person_id          => p_person_id,
3664       p_person_os          => p_person_os,
3665       p_person_osr         => p_person_osr,
3666       x_person_obj         => x_person_obj,
3667       x_return_status      => x_return_status,
3668       x_msg_count          => l_msg_count,
3669       x_msg_data           => l_msg_data
3670     );
3671     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3672                     x_return_status   => x_return_status,
3673                     x_msg_count       => l_msg_count,
3674                     x_msg_data        => l_msg_data);
3675   END get_person_bo;
3676 
3677  --------------------------------------
3678   --
3679   -- PROCEDURE get_persons_created
3680   --
3681   -- DESCRIPTION
3682   --The caller provides an identifier for the Persons created business event and
3683   --the procedure returns database objects of the type HZ_PERSON_BO for all of
3684   --the Person business objects from the business event.
3685 
3686   --
3687   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3688   --
3689   -- ARGUMENTS
3690   --   IN:
3691   --     p_init_msg_list      Initialize message stack if it is set to
3692   --     p_event_id           BES Event identifier.
3693   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
3694   --   OUT:
3695   --     x_person_obj        One or more created logical person.
3696   --     x_return_status      Return status after the call. The status can
3697   --                          be fnd_api.g_ret_sts_success (success),
3698   --                          fnd_api.g_ret_sts_error (error),
3699   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3700   --     x_msg_count          Number of messages in message stack.
3701   --     x_msg_data           Message text if x_msg_count is 1.
3702   --
3703   -- NOTES
3704   --
3705   -- MODIFICATION HISTORY
3706   --
3707   --   10-JUN-2005    AWU                Created.
3708   --
3709 
3710 
3711 
3712 /*
3713 The Get Persons Created procedure is a service to retrieve all of the Person business objects
3714 whose creations have been captured by a logical business event. Each Persons Created
3715 business event signifies that one or more Person business objects have been created.
3716 The caller provides an identifier for the Persons Created business event and the procedure
3717 returns all of the Person business objects from the business event. For each business object
3718 creation captured in the business event, the procedure calls the generic Get operation:
3719 HZ_PERSON_BO_PVT.get_person_bo
3720 
3721 Gathering all of the returned business objects from those API calls, the procedure packages
3722 them in a table structure and returns them to the caller.
3723 */
3724 
3725 
3726 PROCEDURE get_persons_created(
3727     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
3728     p_event_id            IN           	NUMBER,
3729     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3730     x_return_status       OUT NOCOPY    VARCHAR2,
3731     x_msg_count           OUT NOCOPY    NUMBER,
3732     x_msg_data            OUT NOCOPY    VARCHAR2
3733   ) is
3734 l_debug_prefix              VARCHAR2(30) := '';
3735 begin
3736 
3737 	-- initialize API return status to success.
3738     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3739 
3740     	-- Initialize message list if p_init_msg_list is set to TRUE
3741     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3742       		FND_MSG_PUB.initialize;
3743     	END IF;
3744 
3745 
3746 	-- Debug info.
3747         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3748         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(+)',
3749                                p_prefix=>l_debug_prefix,
3750                                p_msg_level=>fnd_log.level_procedure);
3751     	END IF;
3752 
3753 
3754 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
3755 			    p_party_id => null,
3756 			    p_event_type => 'C',
3757 			    p_bo_code => 'PERSON',
3758 			    x_return_status => x_return_status);
3759 
3760 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3761       		RAISE FND_API.G_EXC_ERROR;
3762     	END IF;
3763 
3764 	HZ_EXTRACT_PERSON_BO_PVT.get_persons_created(
3765     		p_init_msg_list => fnd_api.g_false,
3766 		p_event_id => p_event_id,
3767     		x_person_objs  => x_person_objs,
3768 		x_return_status => x_return_status,
3769 		x_msg_count => x_msg_count,
3770 		x_msg_data => x_msg_data);
3771 
3772 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3773       		RAISE FND_API.G_EXC_ERROR;
3774     	END IF;
3775 
3776 
3777 
3778 	-- Debug info.
3779     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3780          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3781                                p_msg_data=>x_msg_data,
3782                                p_msg_type=>'WARNING',
3783                                p_msg_level=>fnd_log.level_exception);
3784     	END IF;
3785 
3786     	-- Debug info.
3787         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3788         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created (-)',
3789                                p_prefix=>l_debug_prefix,
3790                                p_msg_level=>fnd_log.level_procedure);
3791     	END IF;
3792 
3793 
3794  EXCEPTION
3795 
3796   WHEN fnd_api.g_exc_error THEN
3797       x_return_status := fnd_api.g_ret_sts_error;
3798 
3799       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3800                                 p_count => x_msg_count,
3801                                 p_data  => x_msg_data);
3802 
3803       -- Debug info.
3804       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3805         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3806                                p_msg_data=>x_msg_data,
3807                                p_msg_type=>'ERROR',
3808                                p_msg_level=>fnd_log.level_error);
3809       END IF;
3810       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3811         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(-)',
3812                                p_prefix=>l_debug_prefix,
3813                                p_msg_level=>fnd_log.level_procedure);
3814       END IF;
3815     WHEN fnd_api.g_exc_unexpected_error THEN
3816       x_return_status := fnd_api.g_ret_sts_unexp_error;
3817 
3818       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3819                                 p_count => x_msg_count,
3820                                 p_data  => x_msg_data);
3821 
3822       -- Debug info.
3823       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3824         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3825                                p_msg_data=>x_msg_data,
3826                                p_msg_type=>'UNEXPECTED ERROR',
3827                                p_msg_level=>fnd_log.level_error);
3828       END IF;
3829       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3830         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(-)',
3831                                p_prefix=>l_debug_prefix,
3832                                p_msg_level=>fnd_log.level_procedure);
3833       END IF;
3834     WHEN OTHERS THEN
3835       x_return_status := fnd_api.g_ret_sts_unexp_error;
3836 
3837       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3838       fnd_message.set_token('ERROR' ,SQLERRM);
3839       fnd_msg_pub.add;
3840 
3841       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3842                                 p_count => x_msg_count,
3843                                 p_data  => x_msg_data);
3844 
3845       -- Debug info.
3846       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3847         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3848                                p_msg_data=>x_msg_data,
3849                                p_msg_type=>'SQL ERROR',
3850                                p_msg_level=>fnd_log.level_error);
3851       END IF;
3852       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3853         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(-)',
3854                                p_prefix=>l_debug_prefix,
3855                                p_msg_level=>fnd_log.level_procedure);
3856       END IF;
3857 
3858 end;
3859 
3860   PROCEDURE get_persons_created(
3861     p_event_id            IN            NUMBER,
3862     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3863     x_return_status       OUT NOCOPY    VARCHAR2,
3864     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
3865   ) IS
3866     l_msg_count       NUMBER;
3867     l_msg_data        VARCHAR2(2000);
3868   BEGIN
3869     get_persons_created(
3870       p_init_msg_list      => FND_API.G_TRUE,
3871       p_event_id           => p_event_id,
3872       x_person_objs        => x_person_objs,
3873       x_return_status      => x_return_status,
3874       x_msg_count          => l_msg_count,
3875       x_msg_data           => l_msg_data
3876     );
3877     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3878                     x_return_status   => x_return_status,
3879                     x_msg_count       => l_msg_count,
3880                     x_msg_data        => l_msg_data);
3881   END get_persons_created;
3882 
3883 --------------------------------------
3884   --
3885   -- PROCEDURE get_persons_updated
3886   --
3887   -- DESCRIPTION
3888   --The caller provides an identifier for the Persons update business event and
3889   --the procedure returns database objects of the type HZ_PERSON_BO for all of
3890   --the Person business objects from the business event.
3891 
3892   --
3893   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3894   --
3895   -- ARGUMENTS
3896   --   IN:
3897   --     p_init_msg_list      Initialize message stack if it is set to
3898   --     p_event_id           BES Event identifier.
3899   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
3900   --   OUT:
3901   --     x_person_objs        One or more created logical person.
3902   --     x_return_status      Return status after the call. The status can
3903   --                          be fnd_api.g_ret_sts_success (success),
3904   --                          fnd_api.g_ret_sts_error (error),
3905   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3906   --     x_msg_count          Number of messages in message stack.
3907   --     x_msg_data           Message text if x_msg_count is 1.
3908   --
3909   -- NOTES
3910   --
3911   -- MODIFICATION HISTORY
3912   --
3913   --   10-JUN-2005     AWU                Created.
3914   --
3915 
3916 
3917 
3918 /*
3919 The Get Persons Updated procedure is a service to retrieve all of the Person business objects whose updates have been
3920 captured by the logical business event. Each Persons Updated business event signifies that one or more Person business
3921 objects have been updated.
3922 The caller provides an identifier for the Persons Update business event and the procedure returns database objects of the
3923 type HZ_PERSON_BO for all of the Person business objects from the business event.
3924 Gathering all of the returned database objects from those API calls, the procedure packages them in a table structure and
3925 returns them to the caller.
3926 */
3927 
3928  PROCEDURE get_persons_updated(
3929     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
3930     p_event_id            IN           	NUMBER,
3931     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3932     x_return_status       OUT NOCOPY    VARCHAR2,
3933     x_msg_count           OUT NOCOPY    NUMBER,
3934     x_msg_data            OUT NOCOPY    VARCHAR2
3935   ) is
3936 
3937 l_debug_prefix              VARCHAR2(30) := '';
3938 begin
3939 
3940 	-- initialize API return status to success.
3941     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3942 
3943     	-- Initialize message list if p_init_msg_list is set to TRUE
3944     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3945       		FND_MSG_PUB.initialize;
3946     	END IF;
3947 
3948 
3949 	-- Debug info.
3950         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3951         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(+)',
3952                                p_prefix=>l_debug_prefix,
3953                                p_msg_level=>fnd_log.level_procedure);
3954     	END IF;
3955 
3956 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
3957 			    p_party_id => null,
3958 			    p_event_type => 'U',
3959 			    p_bo_code => 'PERSON',
3960 			    x_return_status => x_return_status);
3961 
3962 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3963       		RAISE FND_API.G_EXC_ERROR;
3964     	END IF;
3965 
3966 	HZ_EXTRACT_PERSON_BO_PVT.get_persons_updated(
3967     		p_init_msg_list => fnd_api.g_false,
3968 		p_event_id => p_event_id,
3969     		x_person_objs  => x_person_objs,
3970 		x_return_status => x_return_status,
3971 		x_msg_count => x_msg_count,
3972 		x_msg_data => x_msg_data);
3973 
3974 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3975       		RAISE FND_API.G_EXC_ERROR;
3976     	END IF;
3977 
3978 
3979 
3980 	-- Debug info.
3981     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3982          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3983                                p_msg_data=>x_msg_data,
3984                                p_msg_type=>'WARNING',
3985                                p_msg_level=>fnd_log.level_exception);
3986     	END IF;
3987 
3988     	-- Debug info.
3989         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3990         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated (-)',
3991                                p_prefix=>l_debug_prefix,
3992                                p_msg_level=>fnd_log.level_procedure);
3993     	END IF;
3994 
3995 
3996  EXCEPTION
3997 
3998   WHEN fnd_api.g_exc_error THEN
3999       x_return_status := fnd_api.g_ret_sts_error;
4000 
4001       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4002                                 p_count => x_msg_count,
4003                                 p_data  => x_msg_data);
4004 
4005       -- Debug info.
4006       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4007         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4008                                p_msg_data=>x_msg_data,
4009                                p_msg_type=>'ERROR',
4010                                p_msg_level=>fnd_log.level_error);
4011       END IF;
4012       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4013         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(-)',
4014                                p_prefix=>l_debug_prefix,
4015                                p_msg_level=>fnd_log.level_procedure);
4016       END IF;
4017     WHEN fnd_api.g_exc_unexpected_error THEN
4018       x_return_status := fnd_api.g_ret_sts_unexp_error;
4019 
4020       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4021                                 p_count => x_msg_count,
4022                                 p_data  => x_msg_data);
4023 
4024       -- Debug info.
4025       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4026         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4027                                p_msg_data=>x_msg_data,
4028                                p_msg_type=>'UNEXPECTED ERROR',
4029                                p_msg_level=>fnd_log.level_error);
4030       END IF;
4031       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4032         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(-)',
4033                                p_prefix=>l_debug_prefix,
4034                                p_msg_level=>fnd_log.level_procedure);
4035       END IF;
4036     WHEN OTHERS THEN
4037       x_return_status := fnd_api.g_ret_sts_unexp_error;
4038 
4039       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
4040       fnd_message.set_token('ERROR' ,SQLERRM);
4041       fnd_msg_pub.add;
4042 
4043       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4044                                 p_count => x_msg_count,
4045                                 p_data  => x_msg_data);
4046 
4047       -- Debug info.
4048       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4049         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4050                                p_msg_data=>x_msg_data,
4051                                p_msg_type=>'SQL ERROR',
4052                                p_msg_level=>fnd_log.level_error);
4053       END IF;
4054       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4055         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(-)',
4056                                p_prefix=>l_debug_prefix,
4057                                p_msg_level=>fnd_log.level_procedure);
4058       END IF;
4059 
4060 end;
4061 
4062   PROCEDURE get_persons_updated(
4063     p_event_id            IN            NUMBER,
4064     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
4065     x_return_status       OUT NOCOPY    VARCHAR2,
4066     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
4067   ) IS
4068     l_msg_count       NUMBER;
4069     l_msg_data        VARCHAR2(2000);
4070   BEGIN
4071     get_persons_updated(
4072       p_init_msg_list      => FND_API.G_TRUE,
4073       p_event_id           => p_event_id,
4074       x_person_objs        => x_person_objs,
4075       x_return_status      => x_return_status,
4076       x_msg_count          => l_msg_count,
4077       x_msg_data           => l_msg_data
4078     );
4079     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
4080                     x_return_status   => x_return_status,
4081                     x_msg_count       => l_msg_count,
4082                     x_msg_data        => l_msg_data);
4083   END get_persons_updated;
4084 
4085 --------------------------------------
4086   --
4087   -- PROCEDURE get_person_updated
4088   --
4089   -- DESCRIPTION
4090   --The caller provides an identifier for the Persons update business event and person_id
4091   --the procedure returns one database object of the type HZ_PERSON_BO
4092 
4093   --
4094   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
4095   --
4096   -- ARGUMENTS
4097   --   IN:
4098   --     p_init_msg_list      Initialize message stack if it is set to
4099   --     p_event_id           BES Event identifier.
4100   --     p_person_id          Person identifier.
4101   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
4102   --   OUT:
4103   --     x_person_objs        One or more created logical person.
4104   --     x_return_status      Return status after the call. The status can
4105   --                          be fnd_api.g_ret_sts_success (success),
4106   --                          fnd_api.g_ret_sts_error (error),
4107   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
4108   --     x_msg_count          Number of messages in message stack.
4109   --     x_msg_data           Message text if x_msg_count is 1.
4110   --
4111   -- NOTES
4112   --
4113   -- MODIFICATION HISTORY
4114   --
4115   --   10-JUN-2005     AWU                Created.
4116   --
4117 
4118 
4119 
4120 -- Get only one person object based on p_person_id and event_id
4121 
4122 PROCEDURE get_person_updated(
4123     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
4124     p_event_id            IN           	NUMBER,
4125     p_person_id           IN           NUMBER,
4126     x_person_obj          OUT NOCOPY    HZ_PERSON_BO,
4127     x_return_status       OUT NOCOPY    VARCHAR2,
4128     x_msg_count           OUT NOCOPY    NUMBER,
4129     x_msg_data            OUT NOCOPY    VARCHAR2
4130   ) is
4131 l_debug_prefix              VARCHAR2(30) := '';
4132 begin
4133 
4134 	-- initialize API return status to success.
4135     	x_return_status := FND_API.G_RET_STS_SUCCESS;
4136 
4137     	-- Initialize message list if p_init_msg_list is set to TRUE
4138     	IF FND_API.to_Boolean(p_init_msg_list) THEN
4139       		FND_MSG_PUB.initialize;
4140     	END IF;
4141 
4142 
4143 	-- Debug info.
4144         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4145         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(+)',
4146                                p_prefix=>l_debug_prefix,
4147                                p_msg_level=>fnd_log.level_procedure);
4148     	END IF;
4149 
4150 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
4151 			    p_party_id => p_person_id,
4152 			    p_event_type => 'U',
4153 			    p_bo_code => 'PERSON',
4154 			    x_return_status => x_return_status);
4155 
4156 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4157       		RAISE FND_API.G_EXC_ERROR;
4158     	END IF;
4159 
4160 
4161 	HZ_EXTRACT_PERSON_BO_PVT.get_person_updated(
4162     		p_init_msg_list => fnd_api.g_false,
4163 		p_event_id => p_event_id,
4164 		p_person_id  => p_person_id,
4165     		x_person_obj  => x_person_obj,
4166 		x_return_status => x_return_status,
4167 		x_msg_count => x_msg_count,
4168 		x_msg_data => x_msg_data);
4169 
4170 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4171       		RAISE FND_API.G_EXC_ERROR;
4172     	END IF;
4173 
4174 
4175 
4176 	-- Debug info.
4177     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
4178          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4179                                p_msg_data=>x_msg_data,
4180                                p_msg_type=>'WARNING',
4181                                p_msg_level=>fnd_log.level_exception);
4182     	END IF;
4183 
4184     	-- Debug info.
4185         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4186         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated (-)',
4187                                p_prefix=>l_debug_prefix,
4188                                p_msg_level=>fnd_log.level_procedure);
4189     	END IF;
4190 
4191 
4192  EXCEPTION
4193 
4194   WHEN fnd_api.g_exc_error THEN
4195       x_return_status := fnd_api.g_ret_sts_error;
4196 
4197       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4198                                 p_count => x_msg_count,
4199                                 p_data  => x_msg_data);
4200 
4201       -- Debug info.
4202       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4203         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4204                                p_msg_data=>x_msg_data,
4205                                p_msg_type=>'ERROR',
4206                                p_msg_level=>fnd_log.level_error);
4207       END IF;
4208       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4209         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(-)',
4210                                p_prefix=>l_debug_prefix,
4211                                p_msg_level=>fnd_log.level_procedure);
4212       END IF;
4213     WHEN fnd_api.g_exc_unexpected_error THEN
4214       x_return_status := fnd_api.g_ret_sts_unexp_error;
4215 
4216       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4217                                 p_count => x_msg_count,
4218                                 p_data  => x_msg_data);
4219 
4220       -- Debug info.
4221       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4222         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4223                                p_msg_data=>x_msg_data,
4224                                p_msg_type=>'UNEXPECTED ERROR',
4225                                p_msg_level=>fnd_log.level_error);
4226       END IF;
4227       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4228         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(-)',
4229                                p_prefix=>l_debug_prefix,
4230                                p_msg_level=>fnd_log.level_procedure);
4231       END IF;
4232     WHEN OTHERS THEN
4233       x_return_status := fnd_api.g_ret_sts_unexp_error;
4234 
4235       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
4236       fnd_message.set_token('ERROR' ,SQLERRM);
4237       fnd_msg_pub.add;
4238 
4239       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4240                                 p_count => x_msg_count,
4241                                 p_data  => x_msg_data);
4242 
4243       -- Debug info.
4244       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4245         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4246                                p_msg_data=>x_msg_data,
4247                                p_msg_type=>'SQL ERROR',
4248                                p_msg_level=>fnd_log.level_error);
4249       END IF;
4250       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4251         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(-)',
4252                                p_prefix=>l_debug_prefix,
4253                                p_msg_level=>fnd_log.level_procedure);
4254       END IF;
4255 
4256 end;
4257 
4258   PROCEDURE get_person_updated(
4259     p_event_id            IN            NUMBER,
4260     p_person_id           IN           NUMBER,
4261     x_person_obj          OUT NOCOPY    HZ_PERSON_BO,
4262     x_return_status       OUT NOCOPY    VARCHAR2,
4263     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
4264   ) IS
4265     l_msg_count           NUMBER;
4266     l_msg_data            VARCHAR2(2000);
4267   BEGIN
4268     get_person_updated(
4269       p_init_msg_list      => FND_API.G_TRUE,
4270       p_event_id           => p_event_id,
4271       p_person_id          => p_person_id,
4272       x_person_obj         => x_person_obj,
4273       x_return_status      => x_return_status,
4274       x_msg_count          => l_msg_count,
4275       x_msg_data           => l_msg_data
4276     );
4277     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
4278                     x_return_status   => x_return_status,
4279                     x_msg_count       => l_msg_count,
4280                     x_msg_data        => l_msg_data);
4281   END get_person_updated;
4282 
4283 -- get TCA identifiers for create event
4284 PROCEDURE get_ids_persons_created (
4285 	p_init_msg_list		IN	VARCHAR2 := fnd_api.g_false,
4286 	p_event_id		IN	NUMBER,
4287 	x_person_ids		OUT NOCOPY	HZ_EXTRACT_BO_UTIL_PVT.BO_ID_TBL,
4288 	x_return_status       OUT NOCOPY    VARCHAR2,
4289 	x_msg_count		OUT NOCOPY	NUMBER,
4290 	x_msg_data		OUT NOCOPY	VARCHAR2
4291 
4292 ) is
4293 l_debug_prefix              VARCHAR2(30) := '';
4294 
4295 begin
4296 	-- initialize API return status to success.
4297     	x_return_status := FND_API.G_RET_STS_SUCCESS;
4298 
4299     	-- Initialize message list if p_init_msg_list is set to TRUE
4300     	IF FND_API.to_Boolean(p_init_msg_list) THEN
4301       		FND_MSG_PUB.initialize;
4302     	END IF;
4303 
4304 
4305 	-- Debug info.
4306         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4307         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(+)',
4308                                p_prefix=>l_debug_prefix,
4309                                p_msg_level=>fnd_log.level_procedure);
4310     	END IF;
4311 
4312 
4313 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
4314 			    p_party_id => null,
4315 			    p_event_type => 'C',
4316 			    p_bo_code => 'PERSON',
4317 			    x_return_status => x_return_status);
4318 
4319 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4320       		RAISE FND_API.G_EXC_ERROR;
4321     	END IF;
4322 
4323 	HZ_EXTRACT_BO_UTIL_PVT.get_bo_root_ids(
4324     	p_init_msg_list       => fnd_api.g_false,
4325     	p_event_id            => p_event_id,
4326     	x_obj_root_ids        => x_person_ids,
4327    	x_return_status => x_return_status,
4328 	x_msg_count => x_msg_count,
4329 	x_msg_data => x_msg_data);
4330 
4331 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4332       		RAISE FND_API.G_EXC_ERROR;
4333     	END IF;
4334 
4335 
4336 	-- Debug info.
4337     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
4338          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4339                                p_msg_data=>x_msg_data,
4340                                p_msg_type=>'WARNING',
4341                                p_msg_level=>fnd_log.level_exception);
4342     	END IF;
4343 
4344     	-- Debug info.
4345         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4346         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_created (-)',
4347                                p_prefix=>l_debug_prefix,
4348                                p_msg_level=>fnd_log.level_procedure);
4349     	END IF;
4350 
4351 
4352  EXCEPTION
4353 
4354   WHEN fnd_api.g_exc_error THEN
4355       x_return_status := fnd_api.g_ret_sts_error;
4356 
4357       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4358                                 p_count => x_msg_count,
4359                                 p_data  => x_msg_data);
4360 
4361       -- Debug info.
4362       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4363         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4364                                p_msg_data=>x_msg_data,
4365                                p_msg_type=>'ERROR',
4366                                p_msg_level=>fnd_log.level_error);
4367       END IF;
4368       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4369         hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(-)',
4370                                p_prefix=>l_debug_prefix,
4371                                p_msg_level=>fnd_log.level_procedure);
4372       END IF;
4373     WHEN fnd_api.g_exc_unexpected_error THEN
4374       x_return_status := fnd_api.g_ret_sts_unexp_error;
4375 
4376       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4377                                 p_count => x_msg_count,
4378                                 p_data  => x_msg_data);
4379 
4380       -- Debug info.
4381       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4382         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4383                                p_msg_data=>x_msg_data,
4384                                p_msg_type=>'UNEXPECTED ERROR',
4385                                p_msg_level=>fnd_log.level_error);
4386       END IF;
4387       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4388         hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(-)',
4389                                p_prefix=>l_debug_prefix,
4390                                p_msg_level=>fnd_log.level_procedure);
4391       END IF;
4392     WHEN OTHERS THEN
4393       x_return_status := fnd_api.g_ret_sts_unexp_error;
4394 
4395       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
4396       fnd_message.set_token('ERROR' ,SQLERRM);
4397       fnd_msg_pub.add;
4398 
4399       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4400                                 p_count => x_msg_count,
4401                                 p_data  => x_msg_data);
4402 
4403       -- Debug info.
4404       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4405         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4406                                p_msg_data=>x_msg_data,
4407                                p_msg_type=>'SQL ERROR',
4408                                p_msg_level=>fnd_log.level_error);
4409       END IF;
4410       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4411         hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(-)',
4412                                p_prefix=>l_debug_prefix,
4413                                p_msg_level=>fnd_log.level_procedure);
4414       END IF;
4415 
4416 end;
4417 
4418 
4419 -- get TCA identifiers for update event
4420 PROCEDURE get_ids_persons_updated (
4421 	p_init_msg_list		IN	VARCHAR2 := fnd_api.g_false,
4422 	p_event_id		IN	NUMBER,
4423 	x_person_ids		OUT NOCOPY	HZ_EXTRACT_BO_UTIL_PVT.BO_ID_TBL,
4424 	x_return_status       OUT NOCOPY    VARCHAR2,
4425 	x_msg_count		OUT NOCOPY	NUMBER,
4426 	x_msg_data		OUT NOCOPY	VARCHAR2
4427 ) is
4428 l_debug_prefix              VARCHAR2(30) := '';
4429 
4430 begin
4431 	-- initialize API return status to success.
4432     	x_return_status := FND_API.G_RET_STS_SUCCESS;
4433 
4434     	-- Initialize message list if p_init_msg_list is set to TRUE
4435     	IF FND_API.to_Boolean(p_init_msg_list) THEN
4436       		FND_MSG_PUB.initialize;
4437     	END IF;
4438 
4439 
4440 	-- Debug info.
4441         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4442         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(+)',
4443                                p_prefix=>l_debug_prefix,
4444                                p_msg_level=>fnd_log.level_procedure);
4445     	END IF;
4446 
4447 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
4448 			    p_party_id => null,
4449 			    p_event_type => 'U',
4450 			    p_bo_code => 'PERSON',
4451 			    x_return_status => x_return_status);
4452 
4453 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4454       		RAISE FND_API.G_EXC_ERROR;
4455     	END IF;
4456 
4457 	HZ_EXTRACT_BO_UTIL_PVT.get_bo_root_ids(
4458     	p_init_msg_list       => fnd_api.g_false,
4459     	p_event_id            => p_event_id,
4460     	x_obj_root_ids        => x_person_ids,
4461    	x_return_status => x_return_status,
4462 	x_msg_count => x_msg_count,
4463 	x_msg_data => x_msg_data);
4464 
4465 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4466       		RAISE FND_API.G_EXC_ERROR;
4467     	END IF;
4468 
4469 
4470 	-- Debug info.
4471     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
4472          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4473                                p_msg_data=>x_msg_data,
4474                                p_msg_type=>'WARNING',
4475                                p_msg_level=>fnd_log.level_exception);
4476     	END IF;
4477 
4478     	-- Debug info.
4479         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4480         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated (-)',
4481                                p_prefix=>l_debug_prefix,
4482                                p_msg_level=>fnd_log.level_procedure);
4483     	END IF;
4484 
4485 
4486  EXCEPTION
4487 
4488   WHEN fnd_api.g_exc_error THEN
4489       x_return_status := fnd_api.g_ret_sts_error;
4490 
4491       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4492                                 p_count => x_msg_count,
4493                                 p_data  => x_msg_data);
4494 
4495       -- Debug info.
4496       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4497         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4498                                p_msg_data=>x_msg_data,
4499                                p_msg_type=>'ERROR',
4500                                p_msg_level=>fnd_log.level_error);
4501       END IF;
4502       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4503         hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(-)',
4504                                p_prefix=>l_debug_prefix,
4505                                p_msg_level=>fnd_log.level_procedure);
4506       END IF;
4507     WHEN fnd_api.g_exc_unexpected_error THEN
4508       x_return_status := fnd_api.g_ret_sts_unexp_error;
4509 
4510       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4511                                 p_count => x_msg_count,
4512                                 p_data  => x_msg_data);
4513 
4514       -- Debug info.
4515       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4516         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4517                                p_msg_data=>x_msg_data,
4518                                p_msg_type=>'UNEXPECTED ERROR',
4519                                p_msg_level=>fnd_log.level_error);
4520       END IF;
4521       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4522         hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(-)',
4523                                p_prefix=>l_debug_prefix,
4524                                p_msg_level=>fnd_log.level_procedure);
4525       END IF;
4526     WHEN OTHERS THEN
4527       x_return_status := fnd_api.g_ret_sts_unexp_error;
4528 
4529       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
4530       fnd_message.set_token('ERROR' ,SQLERRM);
4531       fnd_msg_pub.add;
4532 
4533       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4534                                 p_count => x_msg_count,
4535                                 p_data  => x_msg_data);
4536 
4537       -- Debug info.
4538       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4539         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4540                                p_msg_data=>x_msg_data,
4541                                p_msg_type=>'SQL ERROR',
4542                                p_msg_level=>fnd_log.level_error);
4543       END IF;
4544       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4545         hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(-)',
4546                                p_prefix=>l_debug_prefix,
4547                                p_msg_level=>fnd_log.level_procedure);
4548       END IF;
4549 
4550 end;
4551 
4552 END hz_person_bo_pub;