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 2006/07/22 00:20:35 acng noship $ */
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   BEGIN
699     -- Standard start of API savepoint
700     SAVEPOINT do_create_person_bo_pub;
701 
702     -- initialize API return status to success.
703     x_return_status := FND_API.G_RET_STS_SUCCESS;
704 
705     -- Initialize message list if p_init_msg_list is set to TRUE.
706     IF FND_API.to_Boolean(p_init_msg_list) THEN
707       FND_MSG_PUB.initialize;
708     END IF;
709 
710     -- initialize Global variable
711     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
712     IF(p_created_by_module IS NULL) THEN
713       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
714     ELSE
715       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
716     END IF;
717 
718     -- Debug info.
719     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
720         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(+)',
721                                p_prefix=>l_debug_prefix,
722                                p_msg_level=>fnd_log.level_procedure);
723     END IF;
724 
725     -- Base on p_validate_bo_flag, check the completeness of business objects
726     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
727       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
728         p_bus_object_code         => 'PERSON',
729         x_bus_object              => l_bus_object
730       );
731 
732       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_person_bo_comp(
733                        p_person_obj => p_person_obj,
734                        p_bus_object => l_bus_object
735                      );
736       IF NOT(l_valid_obj) THEN
737         RAISE fnd_api.g_exc_error;
738       END IF;
739 
740       -- find out if raise event at the end
741       l_raise_event := HZ_PARTY_BO_PVT.is_raising_create_event(
742                          p_obj_complete_flag => l_valid_obj);
743 
744       IF(l_raise_event) THEN
745         -- get event_id and set global variable to event_id for
746         -- BOT populate function
747         SELECT HZ_BUS_OBJ_TRACKING_S.nextval
748         INTO l_event_id
749         FROM DUAL;
750       END IF;
751     ELSE
752       l_raise_event := FALSE;
753     END IF;
754 
755     x_person_id := p_person_obj.person_id;
756     x_person_os := p_person_obj.orig_system;
757     x_person_osr:= p_person_obj.orig_system_reference;
758 
759     -- check input person party id and os+osr
760     hz_registry_validate_bo_pvt.validate_ssm_id(
761       px_id              => x_person_id,
762       px_os              => x_person_os,
763       px_osr             => x_person_osr,
764       p_obj_type         => 'PERSON',
765       p_create_or_update => 'C',
766       x_return_status    => x_return_status,
767       x_msg_count        => x_msg_count,
768       x_msg_data         => x_msg_data);
769 
770     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
771       RAISE FND_API.G_EXC_ERROR;
772     END IF;
773 
774     ---------------------------------
775     -- Assign person and party record
776     ---------------------------------
777     assign_person_rec(
778       p_person_obj  => p_person_obj,
779       p_person_id   => x_person_id,
780       p_person_os   => x_person_os,
781       p_person_osr  => x_person_osr,
782       px_person_rec => l_person_rec
783     );
784 
785     HZ_PARTY_V2PUB.create_person(
786       p_person_rec                => l_person_rec,
787       x_party_id                  => x_person_id,
788       x_party_number              => l_party_number,
789       x_profile_id                => l_profile_id,
790       x_return_status             => x_return_status,
791       x_msg_count                 => x_msg_count,
792       x_msg_data                  => x_msg_data
793     );
794 
795     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
796       RAISE FND_API.G_EXC_ERROR;
797     END IF;
798 
799     -- assign person party_id
800     p_person_obj.person_id := x_person_id;
801     p_person_obj.party_number := l_party_number;
802     --------------------------
803     -- Create Person Ext Attrs
804     --------------------------
805     IF((p_person_obj.ext_attributes_objs IS NOT NULL) AND
806        (p_person_obj.ext_attributes_objs.COUNT > 0)) THEN
807       HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
808         p_ext_attr_objs             => p_person_obj.ext_attributes_objs,
809         p_parent_obj_id             => l_profile_id,
810         p_parent_obj_type           => 'PERSON',
811         p_create_or_update          => 'C',
812         x_return_status             => x_return_status,
813         x_errorcode                 => l_errorcode,
814         x_msg_count                 => x_msg_count,
815         x_msg_data                  => x_msg_data
816       );
817 
818       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
819         RAISE FND_API.G_EXC_ERROR;
820       END IF;
821     END IF;
822 
823     ----------------------------
824     -- Call party info v2pub api
825     ----------------------------
826     IF(((p_person_obj.language_objs IS NOT NULL) AND (p_person_obj.language_objs.COUNT > 0)) OR
827        ((p_person_obj.education_objs IS NOT NULL) AND (p_person_obj.education_objs.COUNT > 0)) OR
828        ((p_person_obj.citizenship_objs IS NOT NULL) AND (p_person_obj.citizenship_objs.COUNT > 0)) OR
829        ((p_person_obj.employ_hist_objs IS NOT NULL) AND (p_person_obj.employ_hist_objs.COUNT > 0)) OR
830        ((p_person_obj.interest_objs IS NOT NULL) AND (p_person_obj.interest_objs.COUNT > 0))) THEN
831       create_person_info(
832         p_language_obj              => p_person_obj.language_objs,
833         p_education_obj             => p_person_obj.education_objs,
834         p_citizenship_obj           => p_person_obj.citizenship_objs,
835         p_employ_hist_obj           => p_person_obj.employ_hist_objs,
836         p_interest_obj              => p_person_obj.interest_objs,
837         p_person_id                 => x_person_id,
838         x_return_status             => x_return_status,
839         x_msg_count                 => x_msg_count,
840         x_msg_data                  => x_msg_data
841       );
842 
843       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
844         RAISE FND_API.G_EXC_ERROR;
845       END IF;
846     END IF;
847 
848     ----------------------------
849     -- Party Preferences
850     ----------------------------
851     IF((p_person_obj.preference_objs IS NOT NULL) AND
852        (p_person_obj.preference_objs.COUNT > 0)) THEN
853       HZ_PARTY_BO_PVT.save_party_preferences(
854         p_party_pref_objs           => p_person_obj.preference_objs,
855         p_party_id                  => x_person_id,
856         x_return_status             => x_return_status,
857         x_msg_count                 => x_msg_count,
858         x_msg_data                  => x_msg_data
859       );
860 
861       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
862         RAISE FND_API.G_EXC_ERROR;
863       END IF;
864     END IF;
865 
866     ----------------------------
867     -- Contact Preferences
868     ----------------------------
869     IF((p_person_obj.contact_pref_objs IS NOT NULL) AND
870        (p_person_obj.contact_pref_objs.COUNT > 0)) THEN
871       HZ_CONTACT_PREFERENCE_BO_PVT.create_contact_preferences(
872         p_cp_pref_objs           => p_person_obj.contact_pref_objs,
873         p_contact_level_table_id => x_person_id,
874         p_contact_level_table    => 'HZ_PARTIES',
875         x_return_status          => x_return_status,
876         x_msg_count              => x_msg_count,
877         x_msg_data               => x_msg_data
878       );
879 
880       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
881         RAISE FND_API.G_EXC_ERROR;
882       END IF;
883     END IF;
884 
885     ----------------------------
886     -- Relationship api
887     ----------------------------
888     IF((p_person_obj.relationship_objs IS NOT NULL) AND
889        (p_person_obj.relationship_objs.COUNT > 0)) THEN
890       HZ_PARTY_BO_PVT.create_relationships(
891         p_rel_objs                  => p_person_obj.relationship_objs,
892         p_subject_id                => x_person_id,
893         p_subject_type              => 'PERSON',
894         x_return_status             => x_return_status,
895         x_msg_count                 => x_msg_count,
896         x_msg_data                  => x_msg_data
897       );
898 
899       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
900         RAISE FND_API.G_EXC_ERROR;
901       END IF;
902     END IF;
903 
904     ----------------------------
905     -- Classification api
906     ----------------------------
907     IF((p_person_obj.class_objs IS NOT NULL) AND
908        (p_person_obj.class_objs.COUNT > 0)) THEN
909       HZ_PARTY_BO_PVT.create_classifications(
910         p_code_assign_objs          => p_person_obj.class_objs,
911         p_owner_table_name          => 'HZ_PARTIES',
912         p_owner_table_id            => x_person_id,
913         x_return_status             => x_return_status,
914         x_msg_count                 => x_msg_count,
915         x_msg_data                  => x_msg_data
916       );
917 
918       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
919         RAISE FND_API.G_EXC_ERROR;
920       END IF;
921     END IF;
922 
923     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
924 
925     ----------------------------
926     -- Create logical party site
927     ----------------------------
928     IF((p_person_obj.party_site_objs IS NOT NULL) AND
929        (p_person_obj.party_site_objs.COUNT > 0)) THEN
930       HZ_PARTY_SITE_BO_PVT.save_party_sites(
931         p_ps_objs            => p_person_obj.party_site_objs,
932         p_create_update_flag => 'C',
933         p_obj_source         => p_obj_source,
934         x_return_status      => x_return_status,
935         x_msg_count          => x_msg_count,
936         x_msg_data           => x_msg_data,
937         p_parent_id          => x_person_id,
938         p_parent_os          => x_person_os,
939         p_parent_osr         => x_person_osr,
940         p_parent_obj_type    => 'PERSON'
941       );
942 
943       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
944         RAISE FND_API.G_EXC_ERROR;
945       END IF;
946     END IF;
947 
948     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
949 
950     ------------------------
951     -- Create contact points
952     ------------------------
953     IF(((p_person_obj.phone_objs IS NOT NULL) AND (p_person_obj.phone_objs.COUNT > 0)) OR
954        ((p_person_obj.email_objs IS NOT NULL) AND (p_person_obj.email_objs.COUNT > 0)) OR
955        ((p_person_obj.web_objs IS NOT NULL) AND (p_person_obj.web_objs.COUNT > 0)) OR
956        ((p_person_obj.sms_objs IS NOT NULL) AND (p_person_obj.sms_objs.COUNT > 0))) THEN
957       HZ_CONTACT_POINT_BO_PVT.save_contact_points(
958         p_phone_objs         => p_person_obj.phone_objs,
959         p_telex_objs         => l_telex_objs,
960         p_email_objs         => p_person_obj.email_objs,
961         p_web_objs           => p_person_obj.web_objs,
962         p_edi_objs           => l_edi_objs,
963         p_eft_objs           => l_eft_objs,
964         p_sms_objs           => p_person_obj.sms_objs,
965         p_owner_table_id     => x_person_id,
966         p_owner_table_os     => x_person_os,
967         p_owner_table_osr    => x_person_osr,
968         p_parent_obj_type    => 'PERSON',
969         p_create_update_flag => 'C',
970         p_obj_source         => p_obj_source,
971         x_return_status      => x_return_status,
972         x_msg_count          => x_msg_count,
973         x_msg_data           => x_msg_data
974       );
975 
976       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
977         RAISE FND_API.G_EXC_ERROR;
978       END IF;
979     END IF;
980 
981     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
982 
983     ----------------------------
984     -- Certifications
985     ----------------------------
986     IF((p_person_obj.certification_objs IS NOT NULL) AND
987        (p_person_obj.certification_objs.COUNT > 0)) THEN
988       HZ_PARTY_BO_PVT.create_certifications(
989         p_cert_objs                 => p_person_obj.certification_objs,
990         p_party_id                  => x_person_id,
991         x_return_status             => x_return_status,
992         x_msg_count                 => x_msg_count,
993         x_msg_data                  => x_msg_data
994       );
995 
996       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
997         RAISE FND_API.G_EXC_ERROR;
998       END IF;
999     END IF;
1000 
1001     ----------------------------
1002     -- Financial Profiles
1003     ----------------------------
1004     IF((p_person_obj.financial_prof_objs IS NOT NULL) AND
1005        (p_person_obj.financial_prof_objs.COUNT > 0)) THEN
1006       HZ_PARTY_BO_PVT.create_financial_profiles(
1007         p_fin_prof_objs             => p_person_obj.financial_prof_objs,
1008         p_party_id                  => x_person_id,
1009         x_return_status             => x_return_status,
1010         x_msg_count                 => x_msg_count,
1011         x_msg_data                  => x_msg_data
1012       );
1013 
1014       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1015         RAISE FND_API.G_EXC_ERROR;
1016       END IF;
1017     END IF;
1018 
1019   ----------------------------------
1020   --  Party Usages -------
1021   ----------------------------------
1022    IF ((p_person_obj.party_usage_objs IS NOT NULL) AND
1023       (p_person_obj.party_usage_objs.COUNT > 0 )) THEN
1024        HZ_PARTY_BO_PVT.create_party_usage_assgmnt(
1025 	   p_party_usg_objs				=> p_person_obj.party_usage_objs,
1026 	   p_party_id					=> x_person_id,
1027 	   x_return_status				=> x_return_status,
1028 	   x_msg_count					=> x_msg_count,
1029 	   x_msg_data					=> x_msg_data
1030 	   );
1031         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1032         RAISE FND_API.G_EXC_ERROR;
1033       END IF;
1034     END IF;
1035 
1036 
1037     -- raise event
1038     IF(l_raise_event) THEN
1039       HZ_PARTY_BO_PVT.call_bes(
1040         p_party_id         => x_person_id,
1041         p_bo_code          => 'PERSON',
1042         p_create_or_update => 'C',
1043         p_obj_source       => p_obj_source,
1044         p_event_id         => l_event_id
1045       );
1046     END IF;
1047 
1048     -- reset Global variable
1049     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1050     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1051 
1052     -- Debug info.
1053     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1054          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1055                                p_msg_data=>x_msg_data,
1056                                p_msg_type=>'WARNING',
1057                                p_msg_level=>fnd_log.level_exception);
1058     END IF;
1059     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1060         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1061                                p_prefix=>l_debug_prefix,
1062                                p_msg_level=>fnd_log.level_procedure);
1063     END IF;
1064 
1065   EXCEPTION
1066     WHEN fnd_api.g_exc_error THEN
1067       ROLLBACK TO do_create_person_bo_pub;
1068 
1069       -- reset Global variable
1070       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1071       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1072 
1073       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1074       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1075       FND_MSG_PUB.ADD;
1076 
1077       x_return_status := fnd_api.g_ret_sts_error;
1078 
1079       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1080                                 p_count => x_msg_count,
1081                                 p_data  => x_msg_data);
1082 
1083       -- Debug info.
1084       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1085         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1086                                p_msg_data=>x_msg_data,
1087                                p_msg_type=>'ERROR',
1088                                p_msg_level=>fnd_log.level_error);
1089       END IF;
1090       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1091         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1092                                p_prefix=>l_debug_prefix,
1093                                p_msg_level=>fnd_log.level_procedure);
1094       END IF;
1095 
1096     WHEN fnd_api.g_exc_unexpected_error THEN
1097       ROLLBACK TO do_create_person_bo_pub;
1098 
1099       -- reset Global variable
1100       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1101       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1102 
1103       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1104       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1105       FND_MSG_PUB.ADD;
1106 
1107       x_return_status := fnd_api.g_ret_sts_unexp_error;
1108 
1109       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1110                                 p_count => x_msg_count,
1111                                 p_data  => x_msg_data);
1112 
1113       -- Debug info.
1114       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1115         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1116                                p_msg_data=>x_msg_data,
1117                                p_msg_type=>'UNEXPECTED ERROR',
1118                                p_msg_level=>fnd_log.level_error);
1119       END IF;
1120       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1121         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1122                                p_prefix=>l_debug_prefix,
1123                                p_msg_level=>fnd_log.level_procedure);
1124       END IF;
1125 
1126     WHEN OTHERS THEN
1127       ROLLBACK TO do_create_person_bo_pub;
1128 
1129       -- reset Global variable
1130       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1131       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1132 
1133       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1134       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1135       FND_MSG_PUB.ADD;
1136 
1137       x_return_status := fnd_api.g_ret_sts_unexp_error;
1138 
1139       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1140       fnd_message.set_token('ERROR' ,SQLERRM);
1141       fnd_msg_pub.add;
1142 
1143       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1144                                 p_count => x_msg_count,
1145                                 p_data  => x_msg_data);
1146 
1147       -- Debug info.
1148       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1149         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1150                                p_msg_data=>x_msg_data,
1151                                p_msg_type=>'SQL ERROR',
1152                                p_msg_level=>fnd_log.level_error);
1153       END IF;
1154       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1155         hz_utility_v2pub.debug(p_message=>'do_create_person_bo(-)',
1156                                p_prefix=>l_debug_prefix,
1157                                p_msg_level=>fnd_log.level_procedure);
1158       END IF;
1159   END do_create_person_bo;
1160 
1161   PROCEDURE create_person_bo(
1162     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1163     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1164     p_person_obj          IN            HZ_PERSON_BO,
1165     p_created_by_module   IN            VARCHAR2,
1166     x_return_status       OUT NOCOPY    VARCHAR2,
1167     x_msg_count           OUT NOCOPY    NUMBER,
1168     x_msg_data            OUT NOCOPY    VARCHAR2,
1169     x_person_id           OUT NOCOPY    NUMBER,
1170     x_person_os           OUT NOCOPY    VARCHAR2,
1171     x_person_osr          OUT NOCOPY    VARCHAR2
1172   ) IS
1173     l_per_obj             HZ_PERSON_BO;
1174   BEGIN
1175     l_per_obj := p_person_obj;
1176     do_create_person_bo(
1177       p_init_msg_list      => p_init_msg_list,
1178       p_validate_bo_flag   => p_validate_bo_flag,
1179       p_person_obj         => l_per_obj,
1180       p_created_by_module  => p_created_by_module,
1181       p_obj_source         => null,
1182       x_return_status      => x_return_status,
1183       x_msg_count          => x_msg_count,
1184       x_msg_data           => x_msg_data,
1185       x_person_id          => x_person_id,
1186       x_person_os          => x_person_os,
1187       x_person_osr         => x_person_osr
1188     );
1189   END create_person_bo;
1190 
1191   PROCEDURE create_person_bo(
1192     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1193     p_person_obj          IN            HZ_PERSON_BO,
1194     p_created_by_module   IN            VARCHAR2,
1195     p_obj_source          IN            VARCHAR2 := NULL,
1196     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
1197     x_return_status       OUT NOCOPY    VARCHAR2,
1198     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
1199     x_return_obj          OUT NOCOPY    HZ_PERSON_BO,
1200     x_person_id           OUT NOCOPY    NUMBER,
1201     x_person_os           OUT NOCOPY    VARCHAR2,
1202     x_person_osr          OUT NOCOPY    VARCHAR2
1203   ) IS
1204     l_msg_count           NUMBER;
1205     l_msg_data            VARCHAR2(2000);
1206     l_per_obj             HZ_PERSON_BO;
1207   BEGIN
1208     l_per_obj := p_person_obj;
1209     do_create_person_bo(
1210       p_init_msg_list      => FND_API.G_TRUE,
1211       p_validate_bo_flag   => p_validate_bo_flag,
1212       p_person_obj         => l_per_obj,
1213       p_created_by_module  => p_created_by_module,
1214       p_obj_source         => p_obj_source,
1215       x_return_status      => x_return_status,
1216       x_msg_count          => l_msg_count,
1217       x_msg_data           => l_msg_data,
1218       x_person_id          => x_person_id,
1219       x_person_os          => x_person_os,
1220       x_person_osr         => x_person_osr
1221     );
1222     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1223                     x_return_status   => x_return_status,
1224                     x_msg_count       => l_msg_count,
1225                     x_msg_data        => l_msg_data);
1226     IF FND_API.to_Boolean(p_return_obj_flag) THEN
1227       x_return_obj := l_per_obj;
1228     END IF;
1229   END create_person_bo;
1230 
1231   -- PROCEDURE do_update_person_bo
1232   --
1233   -- DESCRIPTION
1234   --     Update a person business object.
1235   PROCEDURE do_update_person_bo(
1236     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1237     p_person_obj          IN OUT NOCOPY HZ_PERSON_BO,
1238     p_created_by_module   IN            VARCHAR2,
1239     p_obj_source          IN            VARCHAR2 := NULL,
1240     x_return_status       OUT NOCOPY    VARCHAR2,
1241     x_msg_count           OUT NOCOPY    NUMBER,
1242     x_msg_data            OUT NOCOPY    VARCHAR2,
1243     x_person_id           OUT NOCOPY    NUMBER,
1244     x_person_os           OUT NOCOPY    VARCHAR2,
1245     x_person_osr          OUT NOCOPY    VARCHAR2
1246   )IS
1247     l_debug_prefix             VARCHAR2(30);
1248     l_person_rec               HZ_PARTY_V2PUB.PERSON_REC_TYPE;
1249     l_create_update_flag       VARCHAR2(1);
1250     l_ovn                      NUMBER;
1251     l_dummy_id                 NUMBER;
1252     l_profile_id               NUMBER;
1253     l_errorcode                NUMBER;
1254     l_per_raise_event          BOOLEAN := FALSE;
1255     l_pc_raise_event           BOOLEAN := FALSE;
1256     l_cbm                      VARCHAR2(30);
1257     l_per_event_id             NUMBER;
1258     l_pc_event_id              NUMBER;
1259     l_telex_objs               HZ_TELEX_CP_BO_TBL;
1260     l_edi_objs                 HZ_EDI_CP_BO_TBL;
1261     l_eft_objs                 HZ_EFT_CP_BO_TBL;
1262     l_party_number             VARCHAR2(30);
1263 
1264     CURSOR get_ovn(l_party_id  NUMBER) IS
1265     SELECT p.object_version_number, p.party_number
1266     FROM HZ_PARTIES p
1267     WHERE p.party_id = l_party_id
1268     AND p.party_type = 'PERSON'
1269     AND p.status in ('A','I');
1270 
1271   BEGIN
1272     -- Standard start of API savepoint
1273     SAVEPOINT do_update_person_bo_pub;
1274 
1275     -- initialize API return status to success.
1276     x_return_status := FND_API.G_RET_STS_SUCCESS;
1277 
1278     -- Initialize message list if p_init_msg_list is set to TRUE.
1279     IF FND_API.to_Boolean(p_init_msg_list) THEN
1280       FND_MSG_PUB.initialize;
1281     END IF;
1282 
1283     -- initialize Global variable
1284     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
1285     IF(p_created_by_module IS NULL) THEN
1286       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
1287     ELSE
1288       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
1289     END IF;
1290 
1291     -- Debug info.
1292     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1293         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(+)',
1294                                p_prefix=>l_debug_prefix,
1295                                p_msg_level=>fnd_log.level_procedure);
1296     END IF;
1297 
1298     x_person_id := p_person_obj.person_id;
1299     x_person_os := p_person_obj.orig_system;
1300     x_person_osr:= p_person_obj.orig_system_reference;
1301 
1302     -- check input party_id and os+osr
1303     hz_registry_validate_bo_pvt.validate_ssm_id(
1304       px_id              => x_person_id,
1305       px_os              => x_person_os,
1306       px_osr             => x_person_osr,
1307       p_obj_type         => 'PERSON',
1308       p_create_or_update => 'U',
1309       x_return_status    => x_return_status,
1310       x_msg_count        => x_msg_count,
1311       x_msg_data         => x_msg_data);
1312 
1313     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1314       RAISE FND_API.G_EXC_ERROR;
1315     END IF;
1316 
1317     -- must check after calling validate_ssm_id because
1318     -- if user pass os+osr and no id, validate_ssm_id will
1319     -- populate x_person_id based on os+osr
1320     -- find out if raise event at the end
1321 
1322     -- if this procedure is called from person cust bo, set l_raise_event to false
1323     -- otherwise, call is_raising_update_event
1324     IF(HZ_PARTY_BO_PVT.G_CALL_UPDATE_CUST_BO IS NOT NULL) THEN
1325       l_per_raise_event := FALSE;
1326       l_pc_raise_event := FALSE;
1327     ELSE
1328       l_per_raise_event := HZ_PARTY_BO_PVT.is_raising_update_event(
1329                              p_party_id          => x_person_id,
1330                              p_bo_code           => 'PERSON'
1331                            );
1332 
1333       l_pc_raise_event := HZ_PARTY_BO_PVT.is_raising_update_event(
1334                             p_party_id          => x_person_id,
1335                             p_bo_code           => 'PERSON_CUST'
1336                           );
1337 
1338       IF(l_per_raise_event) THEN
1339         -- Get event_id for person
1340         SELECT HZ_BUS_OBJ_TRACKING_S.nextval
1341         INTO l_per_event_id
1342         FROM DUAL;
1343       END IF;
1344 
1345       IF(l_pc_raise_event) THEN
1346         -- Get event_id for person customer
1347         SELECT HZ_BUS_OBJ_TRACKING_S.nextval
1348         INTO l_pc_event_id
1349         FROM DUAL;
1350       END IF;
1351     END IF;
1352 
1353     OPEN get_ovn(x_person_id);
1354     FETCH get_ovn INTO l_ovn, l_party_number;
1355     CLOSE get_ovn;
1356 
1357     --------------------
1358     -- For Update Person
1359     --------------------
1360     -- Assign person record
1361     assign_person_rec(
1362       p_person_obj       => p_person_obj,
1363       p_person_id        => x_person_id,
1364       p_person_os        => x_person_os,
1365       p_person_osr       => x_person_osr,
1366       p_create_or_update => 'U',
1367       px_person_rec      => l_person_rec
1368     );
1369 
1370     HZ_PARTY_V2PUB.update_person(
1371       p_person_rec                => l_person_rec,
1372       p_party_object_version_number  => l_ovn,
1373       x_profile_id                => l_profile_id,
1374       x_return_status             => x_return_status,
1375       x_msg_count                 => x_msg_count,
1376       x_msg_data                  => x_msg_data
1377     );
1378 
1379     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1380       RAISE FND_API.G_EXC_ERROR;
1381     END IF;
1382 
1383     -- assign person party_id
1384     p_person_obj.person_id := x_person_id;
1385     p_person_obj.party_number := l_party_number;
1386     --------------------------
1387     -- Create Person Ext Attrs
1388     --------------------------
1389     IF((p_person_obj.ext_attributes_objs IS NOT NULL) AND
1390        (p_person_obj.ext_attributes_objs.COUNT > 0)) THEN
1391       HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
1392         p_ext_attr_objs             => p_person_obj.ext_attributes_objs,
1393         p_parent_obj_id             => l_profile_id,
1394         p_parent_obj_type           => 'PERSON',
1395         p_create_or_update          => 'U',
1396         x_return_status             => x_return_status,
1397         x_errorcode                 => l_errorcode,
1398         x_msg_count                 => x_msg_count,
1399         x_msg_data                  => x_msg_data
1400       );
1401 
1402       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1403         RAISE FND_API.G_EXC_ERROR;
1404       END IF;
1405     END IF;
1406 
1407     ------------------
1408     -- For Person Info
1409     ------------------
1410     IF(((p_person_obj.language_objs IS NOT NULL) AND (p_person_obj.language_objs.COUNT > 0)) OR
1411        ((p_person_obj.education_objs IS NOT NULL) AND (p_person_obj.education_objs.COUNT > 0)) OR
1412        ((p_person_obj.citizenship_objs IS NOT NULL) AND (p_person_obj.citizenship_objs.COUNT > 0)) OR
1413        ((p_person_obj.employ_hist_objs IS NOT NULL) AND (p_person_obj.employ_hist_objs.COUNT > 0)) OR
1414        ((p_person_obj.interest_objs IS NOT NULL) AND (p_person_obj.interest_objs.COUNT > 0))) THEN
1415       save_person_info(
1416         p_language_obj       => p_person_obj.language_objs,
1417         p_education_obj      => p_person_obj.education_objs,
1418         p_citizenship_obj    => p_person_obj.citizenship_objs,
1419         p_employ_hist_obj    => p_person_obj.employ_hist_objs,
1420         p_interest_obj       => p_person_obj.interest_objs,
1421         p_person_id          => x_person_id,
1422         x_return_status      => x_return_status,
1423         x_msg_count          => x_msg_count,
1424         x_msg_data           => x_msg_data
1425       );
1426 
1427       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1428         RAISE FND_API.G_EXC_ERROR;
1429       END IF;
1430     END IF;
1431 
1432     ----------------------------
1433     -- Party Preferences
1434     ----------------------------
1435     IF((p_person_obj.preference_objs IS NOT NULL) AND
1436        (p_person_obj.preference_objs.COUNT > 0)) THEN
1437       HZ_PARTY_BO_PVT.save_party_preferences(
1438         p_party_pref_objs           => p_person_obj.preference_objs,
1439         p_party_id                  => x_person_id,
1440         x_return_status             => x_return_status,
1441         x_msg_count                 => x_msg_count,
1442         x_msg_data                  => x_msg_data
1443       );
1444 
1445       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1446         RAISE FND_API.G_EXC_ERROR;
1447       END IF;
1448     END IF;
1449 
1450     ----------------------------
1451     -- Contact Preferences
1452     ----------------------------
1453     IF((p_person_obj.contact_pref_objs IS NOT NULL) AND
1454        (p_person_obj.contact_pref_objs.COUNT > 0)) THEN
1455       HZ_CONTACT_PREFERENCE_BO_PVT.save_contact_preferences(
1456         p_cp_pref_objs           => p_person_obj.contact_pref_objs,
1457         p_contact_level_table_id => x_person_id,
1458         p_contact_level_table    => 'HZ_PARTIES',
1459         x_return_status          => x_return_status,
1460         x_msg_count              => x_msg_count,
1461         x_msg_data               => x_msg_data
1462       );
1463 
1464       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1465         RAISE FND_API.G_EXC_ERROR;
1466       END IF;
1467     END IF;
1468 
1469     ----------------------------
1470     -- Relationship api
1471     ----------------------------
1472     IF((p_person_obj.relationship_objs IS NOT NULL) AND
1473        (p_person_obj.relationship_objs.COUNT > 0)) THEN
1474       HZ_PARTY_BO_PVT.save_relationships(
1475         p_rel_objs                  => p_person_obj.relationship_objs,
1476         p_subject_id                => x_person_id,
1477         p_subject_type              => 'PERSON',
1478         x_return_status             => x_return_status,
1479         x_msg_count                 => x_msg_count,
1480         x_msg_data                  => x_msg_data
1481       );
1482 
1483       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1484         RAISE FND_API.G_EXC_ERROR;
1485       END IF;
1486     END IF;
1487 
1488     ----------------------------
1489     -- Classification api
1490     ----------------------------
1491     IF((p_person_obj.class_objs IS NOT NULL) AND
1492        (p_person_obj.class_objs.COUNT > 0)) THEN
1493       HZ_PARTY_BO_PVT.save_classifications(
1494         p_code_assign_objs          => p_person_obj.class_objs,
1495         p_owner_table_name          => 'HZ_PARTIES',
1496         p_owner_table_id            => x_person_id,
1497         x_return_status             => x_return_status,
1498         x_msg_count                 => x_msg_count,
1499         x_msg_data                  => x_msg_data
1500       );
1501 
1502       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1503         RAISE FND_API.G_EXC_ERROR;
1504       END IF;
1505     END IF;
1506 
1507     l_cbm := HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
1508 
1509     -----------------
1510     -- For Party Site
1511     -----------------
1512     IF((p_person_obj.party_site_objs IS NOT NULL) AND
1513        (p_person_obj.party_site_objs.COUNT > 0)) THEN
1514       HZ_PARTY_SITE_BO_PVT.save_party_sites(
1515         p_ps_objs            => p_person_obj.party_site_objs,
1516         p_create_update_flag => 'U',
1517         p_obj_source         => p_obj_source,
1518         x_return_status      => x_return_status,
1519         x_msg_count          => x_msg_count,
1520         x_msg_data           => x_msg_data,
1521         p_parent_id          => x_person_id,
1522         p_parent_os          => x_person_os,
1523         p_parent_osr         => x_person_osr,
1524         p_parent_obj_type    => 'PERSON'
1525       );
1526 
1527       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1528         RAISE FND_API.G_EXC_ERROR;
1529       END IF;
1530     END IF;
1531 
1532     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1533 
1534     ---------------------
1535     -- For Contact Points
1536     ---------------------
1537     IF(((p_person_obj.phone_objs IS NOT NULL) AND (p_person_obj.phone_objs.COUNT > 0)) OR
1538        ((p_person_obj.email_objs IS NOT NULL) AND (p_person_obj.email_objs.COUNT > 0)) OR
1539        ((p_person_obj.web_objs IS NOT NULL) AND (p_person_obj.web_objs.COUNT > 0)) OR
1540        ((p_person_obj.sms_objs IS NOT NULL) AND (p_person_obj.sms_objs.COUNT > 0))) THEN
1541       HZ_CONTACT_POINT_BO_PVT.save_contact_points(
1542         p_phone_objs         => p_person_obj.phone_objs,
1543         p_telex_objs         => l_telex_objs,
1544         p_email_objs         => p_person_obj.email_objs,
1545         p_web_objs           => p_person_obj.web_objs,
1546         p_edi_objs           => l_edi_objs,
1547         p_eft_objs           => l_eft_objs,
1548         p_sms_objs           => p_person_obj.sms_objs,
1549         p_owner_table_id     => x_person_id,
1550         p_owner_table_os     => x_person_os,
1551         p_owner_table_osr    => x_person_osr,
1552         p_parent_obj_type    => 'PERSON',
1553         p_create_update_flag => 'U',
1554         p_obj_source         => p_obj_source,
1555         x_return_status      => x_return_status,
1556         x_msg_count          => x_msg_count,
1557         x_msg_data           => x_msg_data
1558       );
1559 
1560       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1561         RAISE FND_API.G_EXC_ERROR;
1562       END IF;
1563     END IF;
1564 
1565     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := l_cbm;
1566 
1567     ---------------------
1568     -- Certifications
1569     ---------------------
1570     IF((p_person_obj.certification_objs IS NOT NULL) AND
1571        (p_person_obj.certification_objs.COUNT > 0)) THEN
1572       HZ_PARTY_BO_PVT.save_certifications(
1573         p_cert_objs          => p_person_obj.certification_objs,
1574         p_party_id           => x_person_id,
1575         x_return_status      => x_return_status,
1576         x_msg_count          => x_msg_count,
1577         x_msg_data           => x_msg_data
1578       );
1579 
1580       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1581         RAISE FND_API.G_EXC_ERROR;
1582       END IF;
1583     END IF;
1584 
1585     ---------------------
1586     -- Financial Profiles
1587     ---------------------
1588     IF((p_person_obj.financial_prof_objs IS NOT NULL) AND
1589        (p_person_obj.financial_prof_objs.COUNT > 0)) THEN
1590       HZ_PARTY_BO_PVT.save_financial_profiles(
1591         p_fin_prof_objs      => p_person_obj.financial_prof_objs,
1592         p_party_id           => x_person_id,
1593         x_return_status      => x_return_status,
1594         x_msg_count          => x_msg_count,
1595         x_msg_data           => x_msg_data
1596       );
1597 
1598       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1599         RAISE FND_API.G_EXC_ERROR;
1600       END IF;
1601     END IF;
1602 
1603     ----------------------------------
1604   --  Party Usages -------
1605   ----------------------------------
1606    IF ((p_person_obj.party_usage_objs IS NOT NULL) AND
1607       (p_person_obj.party_usage_objs.COUNT > 0 )) THEN
1608        HZ_PARTY_BO_PVT.save_party_usage_assgmnt(
1609 	   p_party_usg_objs				=> p_person_obj.party_usage_objs,
1610 	   p_party_id					=> x_person_id,
1611 	   x_return_status				=> x_return_status,
1612 	   x_msg_count					=> x_msg_count,
1613 	   x_msg_data					=> x_msg_data
1614 	   );
1615         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1616         RAISE FND_API.G_EXC_ERROR;
1617       END IF;
1618     END IF;
1619 
1620 
1621     -- raise update person event
1622     IF(l_per_raise_event) THEN
1623       HZ_PARTY_BO_PVT.call_bes(
1624         p_party_id         => x_person_id,
1625         p_bo_code          => 'PERSON',
1626         p_create_or_update => 'U',
1627         p_obj_source       => p_obj_source,
1628         p_event_id         => l_per_event_id
1629       );
1630     END IF;
1631 
1632     IF(l_pc_raise_event) THEN
1633       HZ_PARTY_BO_PVT.call_bes(
1634         p_party_id         => x_person_id,
1635         p_bo_code          => 'PERSON_CUST',
1636         p_create_or_update => 'U',
1637         p_obj_source       => p_obj_source,
1638         p_event_id         => l_pc_event_id
1639       );
1640     END IF;
1641 
1642     -- reset Global variable
1643     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1644     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1645 
1646     -- Debug info.
1647     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1648          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1649                                p_msg_data=>x_msg_data,
1650                                p_msg_type=>'WARNING',
1651                                p_msg_level=>fnd_log.level_exception);
1652     END IF;
1653     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1654         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
1655                                p_prefix=>l_debug_prefix,
1656                                p_msg_level=>fnd_log.level_procedure);
1657     END IF;
1658   EXCEPTION
1659     WHEN fnd_api.g_exc_error THEN
1660       ROLLBACK TO do_update_person_bo_pub;
1661 
1662       -- reset Global variable
1663       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1664       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1665 
1666       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1667       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1668       FND_MSG_PUB.ADD;
1669 
1670       x_return_status := fnd_api.g_ret_sts_error;
1671 
1672       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1673                                 p_count => x_msg_count,
1674                                 p_data  => x_msg_data);
1675 
1676       -- Debug info.
1677       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1678         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1679                                p_msg_data=>x_msg_data,
1680                                p_msg_type=>'ERROR',
1681                                p_msg_level=>fnd_log.level_error);
1682       END IF;
1683       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1684         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
1685                                p_prefix=>l_debug_prefix,
1686                                p_msg_level=>fnd_log.level_procedure);
1687       END IF;
1688 
1689 
1690     WHEN fnd_api.g_exc_unexpected_error THEN
1691       ROLLBACK TO do_update_person_bo_pub;
1692 
1693       -- reset Global variable
1694       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1695       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1696 
1697       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1698       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1699       FND_MSG_PUB.ADD;
1700 
1701       x_return_status := fnd_api.g_ret_sts_unexp_error;
1702 
1703       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1704                                 p_count => x_msg_count,
1705                                 p_data  => x_msg_data);
1706 
1707       -- Debug info.
1708       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1709         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1710                                p_msg_data=>x_msg_data,
1711                                p_msg_type=>'UNEXPECTED ERROR',
1712                                p_msg_level=>fnd_log.level_error);
1713       END IF;
1714       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1715         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
1716                                p_prefix=>l_debug_prefix,
1717                                p_msg_level=>fnd_log.level_procedure);
1718       END IF;
1719     WHEN OTHERS THEN
1720       ROLLBACK TO do_update_person_bo_pub;
1721 
1722       -- reset Global variable
1723       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
1724       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
1725 
1726       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1727       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1728       FND_MSG_PUB.ADD;
1729 
1730       x_return_status := fnd_api.g_ret_sts_unexp_error;
1731 
1732       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1733       fnd_message.set_token('ERROR' ,SQLERRM);
1734       fnd_msg_pub.add;
1735 
1736       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1737                                 p_count => x_msg_count,
1738                                 p_data  => x_msg_data);
1739 
1740       -- Debug info.
1741       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1742         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1743                                p_msg_data=>x_msg_data,
1744                                p_msg_type=>'SQL ERROR',
1745                                p_msg_level=>fnd_log.level_error);
1746       END IF;
1747       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1748         hz_utility_v2pub.debug(p_message=>'do_update_person_bo(-)',
1749                                p_prefix=>l_debug_prefix,
1750                                p_msg_level=>fnd_log.level_procedure);
1751       END IF;
1752   END do_update_person_bo;
1753 
1754   PROCEDURE update_person_bo(
1755     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1756     p_person_obj          IN            HZ_PERSON_BO,
1757     p_created_by_module   IN            VARCHAR2,
1758     x_return_status       OUT NOCOPY    VARCHAR2,
1759     x_msg_count           OUT NOCOPY    NUMBER,
1760     x_msg_data            OUT NOCOPY    VARCHAR2,
1761     x_person_id           OUT NOCOPY    NUMBER,
1762     x_person_os           OUT NOCOPY    VARCHAR2,
1763     x_person_osr          OUT NOCOPY    VARCHAR2
1764   ) IS
1765     l_per_obj             HZ_PERSON_BO;
1766   BEGIN
1767     l_per_obj := p_person_obj;
1768     do_update_person_bo(
1769       p_init_msg_list      => p_init_msg_list,
1770       p_person_obj         => l_per_obj,
1771       p_created_by_module  => p_created_by_module,
1772       p_obj_source         => NULL,
1773       x_return_status      => x_return_status,
1774       x_msg_count          => x_msg_count,
1775       x_msg_data           => x_msg_data,
1776       x_person_id          => x_person_id,
1777       x_person_os          => x_person_os,
1778       x_person_osr         => x_person_osr
1779     );
1780   END update_person_bo;
1781 
1782   PROCEDURE update_person_bo(
1783     p_person_obj          IN            HZ_PERSON_BO,
1784     p_created_by_module   IN            VARCHAR2,
1785     p_obj_source          IN            VARCHAR2 := null,
1786     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
1787     x_return_status       OUT NOCOPY    VARCHAR2,
1788     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
1789     x_return_obj          OUT NOCOPY    HZ_PERSON_BO,
1790     x_person_id           OUT NOCOPY    NUMBER,
1791     x_person_os           OUT NOCOPY    VARCHAR2,
1792     x_person_osr          OUT NOCOPY    VARCHAR2
1793   )IS
1794     l_msg_count       NUMBER;
1795     l_msg_data        VARCHAR2(2000);
1796     l_per_obj         HZ_PERSON_BO;
1797   BEGIN
1798     l_per_obj := p_person_obj;
1799     do_update_person_bo(
1800       p_init_msg_list      => FND_API.G_TRUE,
1801       p_person_obj         => l_per_obj,
1802       p_created_by_module  => p_created_by_module,
1803       p_obj_source         => p_obj_source,
1804       x_return_status      => x_return_status,
1805       x_msg_count          => l_msg_count,
1806       x_msg_data           => l_msg_data,
1807       x_person_id          => x_person_id,
1808       x_person_os          => x_person_os,
1809       x_person_osr         => x_person_osr
1810     );
1811     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1812                     x_return_status   => x_return_status,
1813                     x_msg_count       => l_msg_count,
1814                     x_msg_data        => l_msg_data);
1815     IF FND_API.to_Boolean(p_return_obj_flag) THEN
1816       x_return_obj := l_per_obj;
1817     END IF;
1818   END update_person_bo;
1819 
1820   -- PROCEDURE do_save_person_bo
1821   --
1822   -- DESCRIPTION
1823   --     Create or update a person business object.
1824   PROCEDURE do_save_person_bo(
1825     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1826     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1827     p_person_obj          IN OUT NOCOPY HZ_PERSON_BO,
1828     p_created_by_module   IN            VARCHAR2,
1829     p_obj_source          IN            VARCHAR2 := null,
1830     x_return_status       OUT NOCOPY    VARCHAR2,
1831     x_msg_count           OUT NOCOPY    NUMBER,
1832     x_msg_data            OUT NOCOPY    VARCHAR2,
1833     x_person_id           OUT NOCOPY    NUMBER,
1834     x_person_os           OUT NOCOPY    VARCHAR2,
1835     x_person_osr          OUT NOCOPY    VARCHAR2
1836   ) IS
1837     l_return_status            VARCHAR2(30);
1838     l_msg_count                NUMBER;
1839     l_msg_data                 VARCHAR2(2000);
1840     l_create_update_flag       VARCHAR2(1);
1841     l_debug_prefix             VARCHAR2(30);
1842   BEGIN
1843     -- initialize API return status to success.
1844     x_return_status := FND_API.G_RET_STS_SUCCESS;
1845 
1846     -- Initialize message list if p_init_msg_list is set to TRUE.
1847     IF FND_API.to_Boolean(p_init_msg_list) THEN
1848       FND_MSG_PUB.initialize;
1849     END IF;
1850 
1851     -- Debug info.
1852     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1853         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(+)',
1854                                p_prefix=>l_debug_prefix,
1855                                p_msg_level=>fnd_log.level_procedure);
1856     END IF;
1857 
1858     x_person_id := p_person_obj.person_id;
1859     x_person_os := p_person_obj.orig_system;
1860     x_person_osr:= p_person_obj.orig_system_reference;
1861 
1862     -- check root business object to determine that it should be
1863     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
1864     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
1865                               p_entity_id      => x_person_id,
1866                               p_entity_os      => x_person_os,
1867                               p_entity_osr     => x_person_osr,
1868                               p_entity_type    => 'HZ_PARTIES',
1869                               p_parent_id      => NULL,
1870                               p_parent_obj_type=> NULL);
1871 
1872     IF(l_create_update_flag = 'E') THEN
1873       FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
1874       FND_MSG_PUB.ADD;
1875       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
1876       FND_MESSAGE.SET_TOKEN('OBJECT', 'PERSON');
1877       FND_MSG_PUB.ADD;
1878       RAISE FND_API.G_EXC_ERROR;
1879     END IF;
1880 
1881     IF(l_create_update_flag = 'C') THEN
1882       do_create_person_bo(
1883         p_init_msg_list      => fnd_api.g_false,
1884         p_validate_bo_flag   => p_validate_bo_flag,
1885         p_person_obj         => p_person_obj,
1886         p_created_by_module  => p_created_by_module,
1887         p_obj_source         => p_obj_source,
1888         x_return_status      => x_return_status,
1889         x_msg_count          => x_msg_count,
1890         x_msg_data           => x_msg_data,
1891         x_person_id          => x_person_id,
1892         x_person_os          => x_person_os,
1893         x_person_osr         => x_person_osr
1894       );
1895     ELSIF(l_create_update_flag = 'U') THEN
1896       do_update_person_bo(
1897         p_init_msg_list      => fnd_api.g_false,
1898         p_person_obj         => p_person_obj,
1899         p_created_by_module  => p_created_by_module,
1900         p_obj_source         => p_obj_source,
1901         x_return_status      => x_return_status,
1902         x_msg_count          => x_msg_count,
1903         x_msg_data           => x_msg_data,
1904         x_person_id          => x_person_id,
1905         x_person_os          => x_person_os,
1906         x_person_osr         => x_person_osr
1907       );
1908     ELSE
1909       RAISE FND_API.G_EXC_ERROR;
1910     END IF;
1911 
1912     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1913       RAISE FND_API.G_EXC_ERROR;
1914     END IF;
1915 
1916     -- Debug info.
1917     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1918          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1919                                p_msg_data=>x_msg_data,
1920                                p_msg_type=>'WARNING',
1921                                p_msg_level=>fnd_log.level_exception);
1922     END IF;
1923     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1924         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
1925                                p_prefix=>l_debug_prefix,
1926                                p_msg_level=>fnd_log.level_procedure);
1927     END IF;
1928   EXCEPTION
1929     WHEN fnd_api.g_exc_error THEN
1930       x_return_status := fnd_api.g_ret_sts_error;
1931 
1932       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1933                                 p_count => x_msg_count,
1934                                 p_data  => x_msg_data);
1935 
1936       -- Debug info.
1937       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1938         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1939                                p_msg_data=>x_msg_data,
1940                                p_msg_type=>'ERROR',
1941                                p_msg_level=>fnd_log.level_error);
1942       END IF;
1943       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1944         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
1945                                p_prefix=>l_debug_prefix,
1946                                p_msg_level=>fnd_log.level_procedure);
1947       END IF;
1948 
1949     WHEN fnd_api.g_exc_unexpected_error THEN
1950       x_return_status := fnd_api.g_ret_sts_unexp_error;
1951 
1952       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1953                                 p_count => x_msg_count,
1954                                 p_data  => x_msg_data);
1955 
1956       -- Debug info.
1957       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1958         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1959                                p_msg_data=>x_msg_data,
1960                                p_msg_type=>'UNEXPECTED ERROR',
1961                                p_msg_level=>fnd_log.level_error);
1962       END IF;
1963       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1964         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
1965                                p_prefix=>l_debug_prefix,
1966                                p_msg_level=>fnd_log.level_procedure);
1967       END IF;
1968     WHEN OTHERS THEN
1969       x_return_status := fnd_api.g_ret_sts_unexp_error;
1970 
1971       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1972       fnd_message.set_token('ERROR' ,SQLERRM);
1973       fnd_msg_pub.add;
1974 
1975       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1976                                 p_count => x_msg_count,
1977                                 p_data  => x_msg_data);
1978 
1979       -- Debug info.
1980       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1981         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1982                                p_msg_data=>x_msg_data,
1983                                p_msg_type=>'SQL ERROR',
1984                                p_msg_level=>fnd_log.level_error);
1985       END IF;
1986       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1987         hz_utility_v2pub.debug(p_message=>'do_save_person_bo(-)',
1988                                p_prefix=>l_debug_prefix,
1989                                p_msg_level=>fnd_log.level_procedure);
1990       END IF;
1991   END do_save_person_bo;
1992 
1993   PROCEDURE save_person_bo(
1994     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
1995     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
1996     p_person_obj          IN            HZ_PERSON_BO,
1997     p_created_by_module   IN            VARCHAR2,
1998     x_return_status       OUT NOCOPY    VARCHAR2,
1999     x_msg_count           OUT NOCOPY    NUMBER,
2000     x_msg_data            OUT NOCOPY    VARCHAR2,
2001     x_person_id           OUT NOCOPY    NUMBER,
2002     x_person_os           OUT NOCOPY    VARCHAR2,
2003     x_person_osr          OUT NOCOPY    VARCHAR2
2004   ) IS
2005     l_per_obj             HZ_PERSON_BO;
2006   BEGIN
2007     l_per_obj := p_person_obj;
2008     do_save_person_bo(
2009       p_init_msg_list      => p_init_msg_list,
2010       p_validate_bo_flag   => p_validate_bo_flag,
2011       p_person_obj         => l_per_obj,
2012       p_created_by_module  => p_created_by_module,
2013       p_obj_source         => NULL,
2014       x_return_status      => x_return_status,
2015       x_msg_count          => x_msg_count,
2016       x_msg_data           => x_msg_data,
2017       x_person_id          => x_person_id,
2018       x_person_os          => x_person_os,
2019       x_person_osr         => x_person_osr
2020     );
2021   END save_person_bo;
2022 
2023   PROCEDURE save_person_bo(
2024     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
2025     p_person_obj          IN            HZ_PERSON_BO,
2026     p_created_by_module   IN            VARCHAR2,
2027     p_obj_source          IN            VARCHAR2 := NULL,
2028     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
2029     x_return_status       OUT NOCOPY    VARCHAR2,
2030     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
2031     x_return_obj          OUT NOCOPY    HZ_PERSON_BO,
2032     x_person_id           OUT NOCOPY    NUMBER,
2033     x_person_os           OUT NOCOPY    VARCHAR2,
2034     x_person_osr          OUT NOCOPY    VARCHAR2
2035   ) IS
2036     l_msg_count           NUMBER;
2037     l_msg_data            VARCHAR2(2000);
2038     l_per_obj             HZ_PERSON_BO;
2039   BEGIN
2040     l_per_obj := p_person_obj;
2041     do_save_person_bo(
2042       p_init_msg_list      => FND_API.G_TRUE,
2043       p_validate_bo_flag   => p_validate_bo_flag,
2044       p_person_obj         => l_per_obj,
2045       p_created_by_module  => p_created_by_module,
2046       p_obj_source         => p_obj_source,
2047       x_return_status      => x_return_status,
2048       x_msg_count          => l_msg_count,
2049       x_msg_data           => l_msg_data,
2050       x_person_id          => x_person_id,
2051       x_person_os          => x_person_os,
2052       x_person_osr         => x_person_osr
2053     );
2054     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
2055                     x_return_status   => x_return_status,
2056                     x_msg_count       => l_msg_count,
2057                     x_msg_data        => l_msg_data);
2058     IF FND_API.to_Boolean(p_return_obj_flag) THEN
2059       x_return_obj := l_per_obj;
2060     END IF;
2061   END save_person_bo;
2062 
2063   -- PRIVATE PROCEDURE create_person_info
2064   --
2065   -- DESCRIPTION
2066   --     Create person information, such as language, education, citizenship,
2067   --     employment history and interest
2068   --
2069   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2070   --
2071   -- ARGUMENTS
2072   --   IN:
2073   --     p_language_obj       Person language object.
2074   --     p_education_obj      Education object.
2075   --     p_citizenship_obj    Citizenship object.
2076   --     p_employ_hist_obj    Employment history object.
2077   --     p_interest_obj       Person interest object.
2078   --     p_party_id           Party ID.
2079   --   OUT:
2080   --     x_return_status      Return status after the call. The status can
2081   --                          be fnd_api.g_ret_sts_success (success),
2082   --                          fnd_api.g_ret_sts_error (error),
2083   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2084   --     x_msg_count          Number of messages in message stack.
2085   --     x_msg_data           Message text if x_msg_count is 1.
2086   --
2087   -- NOTES
2088   --
2089   -- MODIFICATION HISTORY
2090   --
2091   --   14-DEC-2004    Arnold Ng          Created.
2092   --
2093 
2094   PROCEDURE create_person_info(
2095     p_language_obj               IN OUT NOCOPY HZ_PERSON_LANG_OBJ_TBL,
2096     p_education_obj              IN OUT NOCOPY HZ_EDUCATION_OBJ_TBL,
2097     p_citizenship_obj            IN OUT NOCOPY HZ_CITIZENSHIP_OBJ_TBL,
2098     p_employ_hist_obj            IN OUT NOCOPY HZ_EMPLOY_HIST_BO_TBL,
2099     p_interest_obj               IN OUT NOCOPY HZ_PERSON_INTEREST_OBJ_TBL,
2100     p_person_id                  IN         NUMBER,
2101     x_return_status              OUT NOCOPY VARCHAR2,
2102     x_msg_count                  OUT NOCOPY NUMBER,
2103     x_msg_data                   OUT NOCOPY VARCHAR2
2104   )IS
2105     l_debug_prefix        VARCHAR2(30);
2106     l_person_lang_rec     HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE;
2107     l_education_rec       HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE;
2108     l_citizenship_rec     HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE;
2109     l_employ_hist_rec     HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE;
2110     l_work_class_rec      HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE;
2111     l_interest_rec        HZ_PERSON_INFO_V2PUB.PERSON_INTEREST_REC_TYPE;
2112     l_dummy_id            NUMBER;
2113   BEGIN
2114     -- Standard start of API savepoint
2115     SAVEPOINT create_person_info_pub;
2116 
2117     -- initialize API return status to success.
2118     x_return_status := FND_API.G_RET_STS_SUCCESS;
2119 
2120     -- Debug info.
2121     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2122         hz_utility_v2pub.debug(p_message=>'create_person_info(+)',
2123                                p_prefix=>l_debug_prefix,
2124                                p_msg_level=>fnd_log.level_procedure);
2125     END IF;
2126 
2127     --------------------------------
2128     -- Assign person language record
2129     --------------------------------
2130     IF(p_language_obj IS NOT NULL) THEN
2131     FOR i IN 1..p_language_obj.COUNT LOOP
2132       assign_person_lang_rec(
2133         p_person_lang_obj           => p_language_obj(i),
2134         p_party_id                  => p_person_id,
2135         px_person_lang_rec          => l_person_lang_rec
2136       );
2137 
2138       HZ_PERSON_INFO_V2PUB.create_person_language(
2139         p_person_language_rec       => l_person_lang_rec,
2140         x_language_use_reference_id => l_dummy_id,
2141         x_return_status             => x_return_status,
2142         x_msg_count                 => x_msg_count,
2143         x_msg_data                  => x_msg_data
2144       );
2145 
2146       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2147         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2148           hz_utility_v2pub.debug(p_message=>'Create Person Language - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2149                                  p_prefix=>l_debug_prefix,
2150                                  p_msg_level=>fnd_log.level_procedure);
2151         END IF;
2152         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2153         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_LANGUAGE');
2154         FND_MSG_PUB.ADD;
2155         RAISE FND_API.G_EXC_ERROR;
2156       END IF;
2157 
2158       -- assign person language_use_reference_id
2159       p_language_obj(i).language_use_reference_id := l_dummy_id;
2160     END LOOP;
2161     END IF;
2162 
2163     --------------------------
2164     -- Assign education record
2165     --------------------------
2166     IF(p_education_obj IS NOT NULL) THEN
2167     FOR i IN 1..p_education_obj.COUNT LOOP
2168       assign_education_rec(
2169         p_education_obj             => p_education_obj(i),
2170         p_party_id                  => p_person_id,
2171         px_education_rec            => l_education_rec
2172       );
2173 
2174       HZ_PERSON_INFO_V2PUB.create_education(
2175         p_education_rec             => l_education_rec,
2176         x_education_id              => l_dummy_id,
2177         x_return_status             => x_return_status,
2178         x_msg_count                 => x_msg_count,
2179         x_msg_data                  => x_msg_data
2180       );
2181 
2182       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2183         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2184           hz_utility_v2pub.debug(p_message=>'Create Education - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2185                                  p_prefix=>l_debug_prefix,
2186                                  p_msg_level=>fnd_log.level_procedure);
2187         END IF;
2188         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2189         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_EDUCATION');
2190         FND_MSG_PUB.ADD;
2191         RAISE FND_API.G_EXC_ERROR;
2192       END IF;
2193 
2194       -- assign education_id
2195       p_education_obj(i).education_id := l_dummy_id;
2196     END LOOP;
2197     END IF;
2198 
2199     ----------------------------
2200     -- Assign citizenship record
2201     ----------------------------
2202     IF(p_citizenship_obj IS NOT NULL) THEN
2203     FOR i IN 1..p_citizenship_obj.COUNT LOOP
2204       assign_citizenship_rec(
2205         p_citizenship_obj           => p_citizenship_obj(i),
2206         p_party_id                  => p_person_id,
2207         px_citizenship_rec          => l_citizenship_rec
2208       );
2209 
2210       HZ_PERSON_INFO_V2PUB.create_citizenship(
2211         p_citizenship_rec           => l_citizenship_rec,
2212         x_citizenship_id            => l_dummy_id,
2213         x_return_status             => x_return_status,
2214         x_msg_count                 => x_msg_count,
2215         x_msg_data                  => x_msg_data
2216       );
2217 
2218       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2219         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2220           hz_utility_v2pub.debug(p_message=>'Create Citizenship - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2221                                  p_prefix=>l_debug_prefix,
2222                                  p_msg_level=>fnd_log.level_procedure);
2223         END IF;
2224         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2225         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CITIZENSHIP');
2226         FND_MSG_PUB.ADD;
2227         RAISE FND_API.G_EXC_ERROR;
2228       END IF;
2229 
2230       -- assign citizenship_id
2231       p_citizenship_obj(i).citizenship_id := l_dummy_id;
2232     END LOOP;
2233     END IF;
2234 
2235     -----------------------------------
2236     -- Assign employment history record
2237     -----------------------------------
2238     IF(p_employ_hist_obj IS NOT NULL) THEN
2239     FOR i IN 1..p_employ_hist_obj.COUNT LOOP
2240       assign_employ_hist_rec(
2241         p_employ_hist_obj           => p_employ_hist_obj(i),
2242         p_party_id                  => p_person_id,
2243         px_employ_hist_rec          => l_employ_hist_rec
2244       );
2245 
2246       HZ_PERSON_INFO_V2PUB.create_employment_history(
2247         p_employment_history_rec    => l_employ_hist_rec,
2248         x_employment_history_id     => l_dummy_id,
2249         x_return_status             => x_return_status,
2250         x_msg_count                 => x_msg_count,
2251         x_msg_data                  => x_msg_data
2252       );
2253 
2254       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2255         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2256           hz_utility_v2pub.debug(p_message=>'Create Employment History - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2257                                  p_prefix=>l_debug_prefix,
2258                                  p_msg_level=>fnd_log.level_procedure);
2259         END IF;
2260         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
2261         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'HZ_EMPLOYMENT_HISTORY');
2262         FND_MSG_PUB.ADD;
2263         RAISE FND_API.G_EXC_ERROR;
2264       ELSE
2265 
2266         -- assign employment_history_id
2267         p_employ_hist_obj(i).employment_history_id := l_dummy_id;
2268 
2269         -- Call work class v2api if employment history record is created successfully
2270         -------------------------------------------------
2271         -- Assign work class of employment history record
2272         -------------------------------------------------
2273         IF(p_employ_hist_obj(i).work_class_objs IS NOT NULL) THEN
2274         FOR j IN 1..p_employ_hist_obj(i).work_class_objs.COUNT LOOP
2275           assign_work_class_rec(
2276             p_work_class_obj            => p_employ_hist_obj(i).work_class_objs(j),
2277             p_employ_hist_id            => l_dummy_id,
2278             px_work_class_rec           => l_work_class_rec
2279           );
2280 
2281           HZ_PERSON_INFO_V2PUB.create_work_class(
2282             p_work_class_rec            => l_work_class_rec,
2283             x_work_class_id             => l_dummy_id,
2284             x_return_status             => x_return_status,
2285             x_msg_count                 => x_msg_count,
2286             x_msg_data                  => x_msg_data
2287           );
2288 
2289           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2290             IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2291               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,
2292                                      p_prefix=>l_debug_prefix,
2293                                      p_msg_level=>fnd_log.level_procedure);
2294             END IF;
2295             FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2296             FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_WORK_CLASS');
2297             FND_MSG_PUB.ADD;
2298             RAISE FND_API.G_EXC_ERROR;
2299           END IF;
2300 
2301           -- assign work_class_id
2302           p_employ_hist_obj(i).work_class_objs(j).work_class_id := l_dummy_id;
2303         END LOOP;
2304         END IF;
2305       END IF;
2306     END LOOP;
2307     END IF;
2308 
2309     --------------------------------
2310     -- Assign person interest record
2311     --------------------------------
2312     IF(p_interest_obj IS NOT NULL) THEN
2313     FOR i IN 1..p_interest_obj.COUNT LOOP
2314       assign_interest_rec(
2315         p_person_interest_obj       => p_interest_obj(i),
2316         p_party_id                  => p_person_id,
2317         px_person_interest_rec      => l_interest_rec
2318       );
2319 
2320       HZ_PERSON_INFO_V2PUB.create_person_interest(
2321         p_person_interest_rec       => l_interest_rec,
2322         x_person_interest_id        => l_dummy_id,
2323         x_return_status             => x_return_status,
2324         x_msg_count                 => x_msg_count,
2325         x_msg_data                  => x_msg_data
2326       );
2327 
2328       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2329         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2330           hz_utility_v2pub.debug(p_message=>'Create Person Interest - Error occurred at hz_person_bo_pub.create_person_info, person id: '||p_person_id,
2331                                  p_prefix=>l_debug_prefix,
2332                                  p_msg_level=>fnd_log.level_procedure);
2333         END IF;
2334         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2335         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_INTEREST');
2336         FND_MSG_PUB.ADD;
2337         RAISE FND_API.G_EXC_ERROR;
2338       END IF;
2339 
2340       -- assign person_interest_id
2341       p_interest_obj(i).person_interest_id := l_dummy_id;
2342     END LOOP;
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=>'create_person_info(-)',
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       ROLLBACK TO create_person_info_pub;
2360       x_return_status := fnd_api.g_ret_sts_error;
2361 
2362       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2363                                 p_count => x_msg_count,
2364                                 p_data  => x_msg_data);
2365 
2366       -- Debug info.
2367       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2368         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2369                                p_msg_data=>x_msg_data,
2370                                p_msg_type=>'ERROR',
2371                                p_msg_level=>fnd_log.level_error);
2372       END IF;
2373       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2374         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2375                                p_prefix=>l_debug_prefix,
2376                                p_msg_level=>fnd_log.level_procedure);
2377       END IF;
2378     WHEN fnd_api.g_exc_unexpected_error THEN
2379       ROLLBACK TO create_person_info_pub;
2380       x_return_status := fnd_api.g_ret_sts_unexp_error;
2381 
2382       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2383                                 p_count => x_msg_count,
2384                                 p_data  => x_msg_data);
2385 
2386       -- Debug info.
2387       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2388         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2389                                p_msg_data=>x_msg_data,
2390                                p_msg_type=>'UNEXPECTED ERROR',
2391                                p_msg_level=>fnd_log.level_error);
2392       END IF;
2393       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2394         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2395                                p_prefix=>l_debug_prefix,
2396                                p_msg_level=>fnd_log.level_procedure);
2397       END IF;
2398 
2399     WHEN OTHERS THEN
2400       ROLLBACK TO create_person_info_pub;
2401       x_return_status := fnd_api.g_ret_sts_unexp_error;
2402 
2403       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2404       fnd_message.set_token('ERROR' ,SQLERRM);
2405       fnd_msg_pub.add;
2406 
2407       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2408                                 p_count => x_msg_count,
2409                                 p_data  => x_msg_data);
2410 
2411       -- Debug info.
2412       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2413         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2414                                p_msg_data=>x_msg_data,
2415                                p_msg_type=>'SQL ERROR',
2416                                p_msg_level=>fnd_log.level_error);
2417       END IF;
2418       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2419         hz_utility_v2pub.debug(p_message=>'create_person_info(-)',
2420                                p_prefix=>l_debug_prefix,
2421                                p_msg_level=>fnd_log.level_procedure);
2422       END IF;
2423   END create_person_info;
2424 
2425   -- PRIVATE PROCEDURE save_person_info
2426   --
2427   -- DESCRIPTION
2428   --     Create or update person information, such as language, education, citizenship,
2429   --     employment history and interest
2430   --
2431   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
2432   --
2433   -- ARGUMENTS
2434   --   IN:
2435   --     p_language_obj       Person language object.
2436   --     p_education_obj      Education object.
2437   --     p_citizenship_obj    Citizenship object.
2438   --     p_employ_hist_obj    Employment history object.
2439   --     p_interest_obj       Person interest object.
2440   --     p_party_id           Party ID.
2441   --   OUT:
2442   --     x_return_status      Return status after the call. The status can
2443   --                          be fnd_api.g_ret_sts_success (success),
2444   --                          fnd_api.g_ret_sts_error (error),
2445   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
2446   --     x_msg_count          Number of messages in message stack.
2447   --     x_msg_data           Message text if x_msg_count is 1.
2448   --
2449   -- NOTES
2450   --
2451   -- MODIFICATION HISTORY
2452   --
2453   --   14-DEC-2004    Arnold Ng          Created.
2454   --
2455 
2456   PROCEDURE save_person_info(
2457     p_language_obj               IN OUT NOCOPY HZ_PERSON_LANG_OBJ_TBL,
2458     p_education_obj              IN OUT NOCOPY HZ_EDUCATION_OBJ_TBL,
2459     p_citizenship_obj            IN OUT NOCOPY HZ_CITIZENSHIP_OBJ_TBL,
2460     p_employ_hist_obj            IN OUT NOCOPY HZ_EMPLOY_HIST_BO_TBL,
2461     p_interest_obj               IN OUT NOCOPY HZ_PERSON_INTEREST_OBJ_TBL,
2462     p_person_id                  IN         NUMBER,
2463     x_return_status              OUT NOCOPY VARCHAR2,
2464     x_msg_count                  OUT NOCOPY NUMBER,
2465     x_msg_data                   OUT NOCOPY VARCHAR2
2466   )IS
2467     l_debug_prefix        VARCHAR2(30);
2468     l_person_lang_rec     HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE;
2469     l_education_rec       HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE;
2470     l_citizenship_rec     HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE;
2471     l_employ_hist_rec     HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE;
2472     l_work_class_rec      HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE;
2473     l_interest_rec        HZ_PERSON_INFO_V2PUB.PERSON_INTEREST_REC_TYPE;
2474     l_dummy_id            NUMBER;
2475     l_ovn                 NUMBER := NULL;
2476   BEGIN
2477     -- Standard start of API savepoint
2478     SAVEPOINT save_person_info_pub;
2479 
2480     -- initialize API return status to success.
2481     x_return_status := FND_API.G_RET_STS_SUCCESS;
2482 
2483     -- Debug info.
2484     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2485         hz_utility_v2pub.debug(p_message=>'save_person_info(+)',
2486                                p_prefix=>l_debug_prefix,
2487                                p_msg_level=>fnd_log.level_procedure);
2488     END IF;
2489 
2490     --------------------------------
2491     -- Create/Update person language
2492     --------------------------------
2493     IF(p_language_obj IS NOT NULL) THEN
2494     FOR i IN 1..p_language_obj.COUNT LOOP
2495       assign_person_lang_rec(
2496         p_person_lang_obj           => p_language_obj(i),
2497         p_party_id                  => p_person_id,
2498         px_person_lang_rec          => l_person_lang_rec
2499       );
2500 
2501       hz_registry_validate_bo_pvt.check_language_op(
2502         p_party_id              => p_person_id,
2503         px_language_use_ref_id  => l_person_lang_rec.language_use_reference_id,
2504         p_language_name         => l_person_lang_rec.language_name,
2505         x_object_version_number => l_ovn
2506       );
2507 
2508       IF(l_ovn = -1) THEN
2509         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2510           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,
2511                                  p_prefix=>l_debug_prefix,
2512                                  p_msg_level=>fnd_log.level_procedure);
2513         END IF;
2514         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2515         FND_MSG_PUB.ADD;
2516         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2517         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_LANGUAGE');
2518         FND_MSG_PUB.ADD;
2519         RAISE FND_API.G_EXC_ERROR;
2520       END IF;
2521 
2522       IF(l_ovn IS NULL) THEN
2523         HZ_PERSON_INFO_V2PUB.create_person_language(
2524           p_person_language_rec       => l_person_lang_rec,
2525           x_language_use_reference_id => l_dummy_id,
2526           x_return_status             => x_return_status,
2527           x_msg_count                 => x_msg_count,
2528           x_msg_data                  => x_msg_data
2529         );
2530 
2531         -- assign person language_use_reference_id
2532         p_language_obj(i).language_use_reference_id := l_dummy_id;
2533       ELSE
2534         -- clean up created_by_module for update
2535         l_person_lang_rec.created_by_module := NULL;
2536         HZ_PERSON_INFO_V2PUB.update_person_language(
2537           p_person_language_rec       => l_person_lang_rec,
2538           p_object_version_number     => l_ovn,
2539           x_return_status             => x_return_status,
2540           x_msg_count                 => x_msg_count,
2541           x_msg_data                  => x_msg_data
2542         );
2543 
2544         -- assign person language_use_reference_id
2545         p_language_obj(i).language_use_reference_id := l_person_lang_rec.language_use_reference_id;
2546       END IF;
2547       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2548         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2549           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,
2550                                  p_prefix=>l_debug_prefix,
2551                                  p_msg_level=>fnd_log.level_procedure);
2552         END IF;
2553         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2554         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_LANGUAGE');
2555         FND_MSG_PUB.ADD;
2556         RAISE FND_API.G_EXC_ERROR;
2557       END IF;
2558     END LOOP;
2559     END IF;
2560 
2561     --------------------------
2562     -- Create/Update education
2563     --------------------------
2564     IF(p_education_obj IS NOT NULL) THEN
2565     FOR i IN 1..p_education_obj.COUNT LOOP
2566       assign_education_rec(
2567         p_education_obj             => p_education_obj(i),
2568         p_party_id                  => p_person_id,
2569         px_education_rec            => l_education_rec
2570       );
2571 
2572       hz_registry_validate_bo_pvt.check_education_op(
2573         p_party_id             => p_person_id,
2574         px_education_id        => l_education_rec.education_id,
2575         p_course_major         => l_education_rec.course_major,
2576         p_school_attended_name => l_education_rec.school_attended_name,
2577         p_degree_received      => l_education_rec.degree_received,
2578         x_object_version_number => l_ovn
2579       );
2580 
2581       IF(l_ovn = -1) THEN
2582         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2583           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,
2584                                  p_prefix=>l_debug_prefix,
2585                                  p_msg_level=>fnd_log.level_procedure);
2586         END IF;
2587         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2588         FND_MSG_PUB.ADD;
2589         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2590         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_EDUCATION');
2591         FND_MSG_PUB.ADD;
2592         RAISE FND_API.G_EXC_ERROR;
2593       END IF;
2594 
2595       IF(l_ovn IS NULL) THEN
2596         HZ_PERSON_INFO_V2PUB.create_education(
2597           p_education_rec             => l_education_rec,
2598           x_education_id              => l_dummy_id,
2599           x_return_status             => x_return_status,
2600           x_msg_count                 => x_msg_count,
2601           x_msg_data                  => x_msg_data
2602         );
2603 
2604         -- assign education_id
2605         p_education_obj(i).education_id := l_dummy_id;
2606       ELSE
2607         -- clean up created_by_module for update
2608         l_education_rec.created_by_module := NULL;
2609         HZ_PERSON_INFO_V2PUB.update_education(
2610           p_education_rec             => l_education_rec,
2611           p_object_version_number     => l_ovn,
2612           x_return_status             => x_return_status,
2613           x_msg_count                 => x_msg_count,
2614           x_msg_data                  => x_msg_data
2615         );
2616 
2617         -- assign education_id
2618         p_education_obj(i).education_id := l_education_rec.education_id;
2619       END IF;
2620       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2621         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2622           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,
2623                                  p_prefix=>l_debug_prefix,
2624                                  p_msg_level=>fnd_log.level_procedure);
2625         END IF;
2626         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2627         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_EDUCATION');
2628         FND_MSG_PUB.ADD;
2629         RAISE FND_API.G_EXC_ERROR;
2630       END IF;
2631     END LOOP;
2632     END IF;
2633 
2634     ----------------------------
2635     -- Create/Update citizenship
2636     ----------------------------
2637     IF(p_citizenship_obj IS NOT NULL) THEN
2638     FOR i IN 1..p_citizenship_obj.COUNT LOOP
2639       assign_citizenship_rec(
2640         p_citizenship_obj           => p_citizenship_obj(i),
2641         p_party_id                  => p_person_id,
2642         px_citizenship_rec          => l_citizenship_rec
2643       );
2644 
2645       hz_registry_validate_bo_pvt.check_citizenship_op(
2646         p_party_id             => p_person_id,
2647         px_citizenship_id      => l_citizenship_rec.citizenship_id,
2648         p_country_code         => l_citizenship_rec.country_code,
2649         x_object_version_number => l_ovn
2650       );
2651 
2652       IF(l_ovn = -1) THEN
2653         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2654           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,
2655                                  p_prefix=>l_debug_prefix,
2656                                  p_msg_level=>fnd_log.level_procedure);
2657         END IF;
2658         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2659         FND_MSG_PUB.ADD;
2660         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2661         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CITIZENSHIP');
2662         FND_MSG_PUB.ADD;
2663         RAISE FND_API.G_EXC_ERROR;
2664       END IF;
2665 
2666       IF(l_ovn IS NULL) THEN
2667         HZ_PERSON_INFO_V2PUB.create_citizenship(
2668           p_citizenship_rec           => l_citizenship_rec,
2669           x_citizenship_id            => l_dummy_id,
2670           x_return_status             => x_return_status,
2671           x_msg_count                 => x_msg_count,
2672           x_msg_data                  => x_msg_data
2673         );
2674 
2675         -- assign citizenship_id
2676         p_citizenship_obj(i).citizenship_id := l_dummy_id;
2677       ELSE
2678         -- clean up created_by_module for update
2679         l_citizenship_rec.created_by_module := NULL;
2680         HZ_PERSON_INFO_V2PUB.update_citizenship(
2681           p_citizenship_rec           => l_citizenship_rec,
2682           p_object_version_number     => l_ovn,
2683           x_return_status             => x_return_status,
2684           x_msg_count                 => x_msg_count,
2685           x_msg_data                  => x_msg_data
2686         );
2687 
2688         -- assign citizenship_id
2689         p_citizenship_obj(i).citizenship_id := l_citizenship_rec.citizenship_id;
2690       END IF;
2691       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2692         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2693           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,
2694                                  p_prefix=>l_debug_prefix,
2695                                  p_msg_level=>fnd_log.level_procedure);
2696         END IF;
2697         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2698         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_CITIZENSHIP');
2699         FND_MSG_PUB.ADD;
2700         RAISE FND_API.G_EXC_ERROR;
2701       END IF;
2702     END LOOP;
2703     END IF;
2704 
2705     -----------------------------------
2706     -- Create/Update employment history
2707     -----------------------------------
2708     IF(p_employ_hist_obj IS NOT NULL) THEN
2709     FOR i IN 1..p_employ_hist_obj.COUNT LOOP
2710       assign_employ_hist_rec(
2711         p_employ_hist_obj           => p_employ_hist_obj(i),
2712         p_party_id                  => p_person_id,
2713         px_employ_hist_rec          => l_employ_hist_rec
2714       );
2715 
2716       hz_registry_validate_bo_pvt.check_employ_hist_op(
2717         p_party_id             => p_person_id,
2718         px_emp_hist_id         => l_employ_hist_rec.employment_history_id,
2719         p_employed_by_name_company  => l_employ_hist_rec.employed_by_name_company,
2720         p_employed_as_title    => l_employ_hist_rec.employed_as_title,
2721         p_begin_date           => l_employ_hist_rec.begin_date,
2722         x_object_version_number => l_ovn
2723       );
2724 
2725       IF(l_ovn = -1) THEN
2726         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2727           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,
2728                                  p_prefix=>l_debug_prefix,
2729                                  p_msg_level=>fnd_log.level_procedure);
2730         END IF;
2731         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2732         FND_MSG_PUB.ADD;
2733         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
2734         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'HZ_EMPLOYMENT_HISTORY');
2735         FND_MSG_PUB.ADD;
2736         RAISE FND_API.G_EXC_ERROR;
2737       END IF;
2738 
2739       IF(l_ovn IS NULL) THEN
2740         HZ_PERSON_INFO_V2PUB.create_employment_history(
2741           p_employment_history_rec    => l_employ_hist_rec,
2742           x_employment_history_id     => l_dummy_id,
2743           x_return_status             => x_return_status,
2744           x_msg_count                 => x_msg_count,
2745           x_msg_data                  => x_msg_data
2746         );
2747 
2748         -- assign employment_history_id
2749         p_employ_hist_obj(i).employment_history_id := l_dummy_id;
2750       ELSE
2751         -- clean up created_by_module for update
2752         l_employ_hist_rec.created_by_module := NULL;
2753         HZ_PERSON_INFO_V2PUB.update_employment_history(
2754           p_employment_history_rec    => l_employ_hist_rec,
2755           p_object_version_number     => l_ovn,
2756           x_return_status             => x_return_status,
2757           x_msg_count                 => x_msg_count,
2758           x_msg_data                  => x_msg_data
2759         );
2760         l_dummy_id := l_employ_hist_rec.employment_history_id;
2761 
2762         -- assign employment_history_id
2763         p_employ_hist_obj(i).employment_history_id := l_dummy_id;
2764       END IF;
2765       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2766         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2767           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,
2768                                  p_prefix=>l_debug_prefix,
2769                                  p_msg_level=>fnd_log.level_procedure);
2770         END IF;
2771         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_STRUCT_ERROR');
2772         FND_MESSAGE.SET_TOKEN('STRUCTURE', 'HZ_EMPLOYMENT_HISTORY');
2773         FND_MSG_PUB.ADD;
2774         RAISE FND_API.G_EXC_ERROR;
2775       ELSE
2776         ---------------------------
2777         -- Create/Update work class
2778         ---------------------------
2779         IF(p_employ_hist_obj(i).work_class_objs IS NOT NULL) THEN
2780         FOR j IN 1..p_employ_hist_obj(i).work_class_objs.COUNT LOOP
2781           assign_work_class_rec(
2782             p_work_class_obj            => p_employ_hist_obj(i).work_class_objs(j),
2783             p_employ_hist_id            => l_dummy_id,
2784             px_work_class_rec           => l_work_class_rec
2785           );
2786 
2787           hz_registry_validate_bo_pvt.check_work_class_op(
2788             p_employ_hist_id      => l_dummy_id,
2789             px_work_class_id      => l_work_class_rec.work_class_id,
2790             p_work_class_name     => l_work_class_rec.work_class_name,
2791             x_object_version_number => l_ovn
2792           );
2793 
2794           IF(l_ovn = -1) THEN
2795             IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2796               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,
2797                                      p_prefix=>l_debug_prefix,
2798                                      p_msg_level=>fnd_log.level_procedure);
2799             END IF;
2800             FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2801             FND_MSG_PUB.ADD;
2802             FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2803             FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_WORK_CLASS');
2804             FND_MSG_PUB.ADD;
2805             RAISE FND_API.G_EXC_ERROR;
2806           END IF;
2807 
2808           IF(l_ovn IS NULL) THEN
2809             HZ_PERSON_INFO_V2PUB.create_work_class(
2810               p_work_class_rec            => l_work_class_rec,
2811               x_work_class_id             => l_dummy_id,
2812               x_return_status             => x_return_status,
2813               x_msg_count                 => x_msg_count,
2814               x_msg_data                  => x_msg_data
2815             );
2816 
2817             -- assign work_class_id
2818             p_employ_hist_obj(i).work_class_objs(j).work_class_id := l_dummy_id;
2819           ELSE
2820             -- clean up created_by_module for update
2821             l_work_class_rec.created_by_module := NULL;
2822             HZ_PERSON_INFO_V2PUB.update_work_class(
2823               p_work_class_rec            => l_work_class_rec,
2824               p_object_version_number     => l_ovn,
2825               x_return_status             => x_return_status,
2826               x_msg_count                 => x_msg_count,
2827               x_msg_data                  => x_msg_data
2828             );
2829 
2830            -- assign work_class_id
2831             p_employ_hist_obj(i).work_class_objs(j).work_class_id := l_work_class_rec.work_class_id;
2832           END IF;
2833           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2834             IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2835               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,
2836                                      p_prefix=>l_debug_prefix,
2837                                      p_msg_level=>fnd_log.level_procedure);
2838             END IF;
2839             FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2840             FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_WORK_CLASS');
2841             FND_MSG_PUB.ADD;
2842             RAISE FND_API.G_EXC_ERROR;
2843           END IF;
2844         END LOOP;
2845         END IF;
2846       END IF;
2847     END LOOP;
2848     END IF;
2849 
2850     -------------------------
2851     -- Create/Update interest
2852     -------------------------
2853     IF(p_interest_obj IS NOT NULL) THEN
2854     FOR i IN 1..p_interest_obj.COUNT LOOP
2855       assign_interest_rec(
2856         p_person_interest_obj       => p_interest_obj(i),
2857         p_party_id                  => p_person_id,
2858         px_person_interest_rec      => l_interest_rec
2859       );
2860 
2861       hz_registry_validate_bo_pvt.check_interest_op(
2862         p_party_id            => p_person_id,
2863         px_interest_id        => l_interest_rec.person_interest_id,
2864         p_interest_type_code  => l_interest_rec.interest_type_code,
2865         p_sub_interest_type_code  => l_interest_rec.sub_interest_type_code,
2866         p_interest_name       => l_interest_rec.interest_name,
2867         x_object_version_number => l_ovn
2868       );
2869 
2870       IF(l_ovn = -1) THEN
2871         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2872           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,
2873                                  p_prefix=>l_debug_prefix,
2874                                  p_msg_level=>fnd_log.level_procedure);
2875         END IF;
2876         FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
2877         FND_MSG_PUB.ADD;
2878         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2879         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_INTEREST');
2880         FND_MSG_PUB.ADD;
2881         RAISE FND_API.G_EXC_ERROR;
2882       END IF;
2883 
2884       IF(l_ovn IS NULL) THEN
2885         HZ_PERSON_INFO_V2PUB.create_person_interest(
2886           p_person_interest_rec       => l_interest_rec,
2887           x_person_interest_id        => l_dummy_id,
2888           x_return_status             => x_return_status,
2889           x_msg_count                 => x_msg_count,
2890           x_msg_data                  => x_msg_data
2891         );
2892 
2893         -- assign person_interest_id
2894         p_interest_obj(i).person_interest_id := l_dummy_id;
2895       ELSE
2896         -- clean up created_by_module for update
2897         l_interest_rec.created_by_module := NULL;
2898         HZ_PERSON_INFO_V2PUB.update_person_interest(
2899           p_person_interest_rec       => l_interest_rec,
2900           p_object_version_number     => l_ovn,
2901           x_return_status             => x_return_status,
2902           x_msg_count                 => x_msg_count,
2903           x_msg_data                  => x_msg_data
2904         );
2905 
2906         -- assign person_interest_id
2907         p_interest_obj(i).person_interest_id := l_interest_rec.person_interest_id;
2908       END IF;
2909       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2910         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2911           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,
2912                                  p_prefix=>l_debug_prefix,
2913                                  p_msg_level=>fnd_log.level_procedure);
2914         END IF;
2915         FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_ENTITY_ERROR');
2916         FND_MESSAGE.SET_TOKEN('ENTITY', 'HZ_PERSON_INTEREST');
2917         FND_MSG_PUB.ADD;
2918         RAISE FND_API.G_EXC_ERROR;
2919       END IF;
2920     END LOOP;
2921     END IF;
2922 
2923     -- Debug info.
2924     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
2925          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2926                                p_msg_data=>x_msg_data,
2927                                p_msg_type=>'WARNING',
2928                                p_msg_level=>fnd_log.level_exception);
2929     END IF;
2930     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2931         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
2932                                p_prefix=>l_debug_prefix,
2933                                p_msg_level=>fnd_log.level_procedure);
2934     END IF;
2935   EXCEPTION
2936     WHEN fnd_api.g_exc_error THEN
2937       ROLLBACK TO save_person_info_pub;
2938       x_return_status := fnd_api.g_ret_sts_error;
2939 
2940       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2941                                 p_count => x_msg_count,
2942                                 p_data  => x_msg_data);
2943 
2944       -- Debug info.
2945       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2946         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2947                                p_msg_data=>x_msg_data,
2948                                p_msg_type=>'ERROR',
2949                                p_msg_level=>fnd_log.level_error);
2950       END IF;
2951       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2952         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
2953                                p_prefix=>l_debug_prefix,
2954                                p_msg_level=>fnd_log.level_procedure);
2955       END IF;
2956     WHEN fnd_api.g_exc_unexpected_error THEN
2957       ROLLBACK TO save_person_info_pub;
2958       x_return_status := fnd_api.g_ret_sts_unexp_error;
2959 
2960       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2961                                 p_count => x_msg_count,
2962                                 p_data  => x_msg_data);
2963 
2964       -- Debug info.
2965       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2966         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2967                                p_msg_data=>x_msg_data,
2968                                p_msg_type=>'UNEXPECTED ERROR',
2969                                p_msg_level=>fnd_log.level_error);
2970       END IF;
2971       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2972         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
2973                                p_prefix=>l_debug_prefix,
2974                                p_msg_level=>fnd_log.level_procedure);
2975       END IF;
2976 
2977     WHEN OTHERS THEN
2978       ROLLBACK TO save_person_info_pub;
2979       x_return_status := fnd_api.g_ret_sts_unexp_error;
2980 
2981       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
2982       fnd_message.set_token('ERROR' ,SQLERRM);
2983       fnd_msg_pub.add;
2984 
2985       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
2986                                 p_count => x_msg_count,
2987                                 p_data  => x_msg_data);
2988 
2989       -- Debug info.
2990       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
2991         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
2992                                p_msg_data=>x_msg_data,
2993                                p_msg_type=>'SQL ERROR',
2994                                p_msg_level=>fnd_log.level_error);
2995       END IF;
2996       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
2997         hz_utility_v2pub.debug(p_message=>'save_person_info(-)',
2998                                p_prefix=>l_debug_prefix,
2999                                p_msg_level=>fnd_log.level_procedure);
3000       END IF;
3001   END save_person_info;
3002 
3003   --------------------------------------
3004   --
3005   -- PROCEDURE get_person_bo
3006   --
3007   -- DESCRIPTION
3008   --     Get a logical person.
3009   --
3010   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3011   --
3012   -- ARGUMENTS
3013   --   IN:
3014   --     p_init_msg_list      Initialize message stack if it is set to  FND_API.G_TRUE. Default is FND_API.G_FALSE.
3015   --     p_person_id          Person ID.
3016   --     p_person_os          Person orig system.
3017   --     p_person_osr         Person orig system reference.
3018   --   OUT:
3019   --     x_person_obj         Logical person record.
3020   --     x_return_status      Return status after the call. The status can
3021   --                          be fnd_api.g_ret_sts_success (success),
3022   --                          fnd_api.g_ret_sts_error (error),
3023   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3024   --     x_msg_count          Number of messages in message stack.
3025   --     x_msg_data           Message text if x_msg_count is 1.
3026   --
3027   -- NOTES
3028   --
3029   -- MODIFICATION HISTORY
3030   --
3031   --
3032   --   10-JUN-2005   AWU                Created.
3033   --
3034 
3035 /*
3036 The Get Person API Procedure is a retrieval service that returns a full Person business object.
3037 The user identifies a particular Person business object using the TCA identifier and/or
3038 the object Source System information. Upon proper validation of the object,
3039 the full Person business object is returned. The object consists of all data included within
3040 the Person business object, at all embedded levels. This includes the set of all data stored
3041 in the TCA tables for each embedded entity.
3042 
3043 To retrieve the appropriate embedded business objects within the Person business object,
3044 the Get procedure calls the equivalent procedure for the following embedded objects:
3045 
3046 Embedded BO	    Mandatory	Multiple Logical API Procedure		Comments
3047 Party Site		N	Y		get_party_site_bo
3048 Phone			N	Y		get_phone_bo
3049 Email			N	Y		get_email_bo
3050 Web			N	Y		get_web_bo
3051 SMS			N	Y		get_sms_bo
3052 Employment History	N	Y	Business Structure. Included entities:HZ_EMPLOYMENT_HISTORY, HZ_WORK_CLASS
3053 
3054 
3055 To retrieve the appropriate embedded entities within the Person business object,
3056 the Get procedure returns all records for the particular person from these TCA entity tables:
3057 
3058 Embedded TCA Entity	Mandatory	Multiple	TCA Table Entities
3059 
3060 Party,Person Profile	Y		N	HZ_PARTIES, HZ_PERSON_PROFILES
3061 Person Preference	N		Y	HZ_PARTY_PREFERENCES
3062 Relationship		N		Y	HZ_RELATIONSHIPS
3063 Classification		N		Y	HZ_CODE_ASSIGNMENTS
3064 Language		N		Y	HZ_PERSON_LANGUAGE
3065 Education		N		Y	HZ_EDUCATION
3066 Citizenship		N		Y	HZ_CITIZENSHIP
3067 Interest		N		Y	HZ_PERSON_INTEREST
3068 Certification		N		Y	HZ_CERTIFICATIONS
3069 Financial Profile	N		Y	HZ_FINANCIAL_PROFILE
3070 */
3071 
3072 PROCEDURE get_person_bo (
3073 	p_init_msg_list		IN	VARCHAR2 := FND_API.G_FALSE,
3074 	p_person_id		IN	NUMBER,
3075 	p_person_os		IN	VARCHAR2,
3076 	p_person_osr		IN	VARCHAR2,
3077 	x_person_obj	  	OUT NOCOPY	HZ_PERSON_BO,
3078 	x_return_status		OUT NOCOPY	VARCHAR2,
3079 	x_msg_count		OUT NOCOPY	NUMBER,
3080 	x_msg_data		OUT NOCOPY	VARCHAR2
3081 ) is
3082  l_debug_prefix              VARCHAR2(30) := '';
3083 
3084   l_person_id  number;
3085   l_person_os  varchar2(30);
3086   l_person_osr varchar2(255);
3087 BEGIN
3088 
3089 	-- initialize API return status to success.
3090     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3091 
3092     	-- Initialize message list if p_init_msg_list is set to TRUE
3093     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3094       		FND_MSG_PUB.initialize;
3095     	END IF;
3096 
3097 
3098 	-- Debug info.
3099         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3100         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo(+)',
3101                                p_prefix=>l_debug_prefix,
3102                                p_msg_level=>fnd_log.level_procedure);
3103     	END IF;
3104 
3105     	-- check if pass in contact_point_id and/or os+osr
3106     	-- extraction validation logic is same as update
3107 
3108     	l_person_id := p_person_id;
3109     	l_person_os := p_person_os;
3110     	l_person_osr := p_person_osr;
3111 
3112     	HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
3113       		px_id              => l_person_id,
3114       		px_os              => l_person_os,
3115       		px_osr             => l_person_osr,
3116       		p_obj_type         => 'PERSON',
3117       		x_return_status    => x_return_status,
3118       		x_msg_count        => x_msg_count,
3119       		x_msg_data         => x_msg_data);
3120 
3121     	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3122       		RAISE fnd_api.g_exc_error;
3123    	 END IF;
3124 
3125 	HZ_EXTRACT_PERSON_BO_PVT.get_person_bo(
3126     		p_init_msg_list   => fnd_api.g_false,
3127     		p_person_id => l_person_id,
3128     		p_action_type	  => NULL,
3129     		x_person_obj => x_person_obj,
3130 		x_return_status => x_return_status,
3131 		x_msg_count => x_msg_count,
3132 		x_msg_data => x_msg_data);
3133 
3134 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3135       		RAISE FND_API.G_EXC_ERROR;
3136     	END IF;
3137 
3138 
3139 	-- Debug info.
3140     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3141          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3142                                p_msg_data=>x_msg_data,
3143                                p_msg_type=>'WARNING',
3144                                p_msg_level=>fnd_log.level_exception);
3145     	END IF;
3146 
3147     	-- Debug info.
3148         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3149         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3150                                p_prefix=>l_debug_prefix,
3151                                p_msg_level=>fnd_log.level_procedure);
3152     	END IF;
3153 
3154 
3155  EXCEPTION
3156 
3157   WHEN fnd_api.g_exc_error THEN
3158       x_return_status := fnd_api.g_ret_sts_error;
3159 
3160       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3161                                 p_count => x_msg_count,
3162                                 p_data  => x_msg_data);
3163 
3164       -- Debug info.
3165       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3166         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3167                                p_msg_data=>x_msg_data,
3168                                p_msg_type=>'ERROR',
3169                                p_msg_level=>fnd_log.level_error);
3170       END IF;
3171       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3172         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3173                                p_prefix=>l_debug_prefix,
3174                                p_msg_level=>fnd_log.level_procedure);
3175       END IF;
3176     WHEN fnd_api.g_exc_unexpected_error THEN
3177       x_return_status := fnd_api.g_ret_sts_unexp_error;
3178 
3179       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3180                                 p_count => x_msg_count,
3181                                 p_data  => x_msg_data);
3182 
3183       -- Debug info.
3184       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3185         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3186                                p_msg_data=>x_msg_data,
3187                                p_msg_type=>'UNEXPECTED ERROR',
3188                                p_msg_level=>fnd_log.level_error);
3189       END IF;
3190       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3191         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3192                                p_prefix=>l_debug_prefix,
3193                                p_msg_level=>fnd_log.level_procedure);
3194       END IF;
3195     WHEN OTHERS THEN
3196       x_return_status := fnd_api.g_ret_sts_unexp_error;
3197 
3198       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3199       fnd_message.set_token('ERROR' ,SQLERRM);
3200       fnd_msg_pub.add;
3201 
3202       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3203                                 p_count => x_msg_count,
3204                                 p_data  => x_msg_data);
3205 
3206       -- Debug info.
3207       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3208         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3209                                p_msg_data=>x_msg_data,
3210                                p_msg_type=>'SQL ERROR',
3211                                p_msg_level=>fnd_log.level_error);
3212       END IF;
3213       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3214         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_bo (-)',
3215                                p_prefix=>l_debug_prefix,
3216                                p_msg_level=>fnd_log.level_procedure);
3217       END IF;
3218 
3219 end;
3220 
3221   PROCEDURE get_person_bo (
3222     p_person_id         IN      NUMBER,
3223     p_person_os         IN      VARCHAR2,
3224     p_person_osr        IN      VARCHAR2,
3225     x_person_obj        OUT NOCOPY      HZ_PERSON_BO,
3226     x_return_status     OUT NOCOPY      VARCHAR2,
3227     x_messages          OUT NOCOPY      HZ_MESSAGE_OBJ_TBL
3228   ) is
3229     l_msg_count       NUMBER;
3230     l_msg_data        VARCHAR2(2000);
3231   BEGIN
3232     get_person_bo(
3233       p_init_msg_list      => FND_API.G_TRUE,
3234       p_person_id          => p_person_id,
3235       p_person_os          => p_person_os,
3236       p_person_osr         => p_person_osr,
3237       x_person_obj         => x_person_obj,
3238       x_return_status      => x_return_status,
3239       x_msg_count          => l_msg_count,
3240       x_msg_data           => l_msg_data
3241     );
3242     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3243                     x_return_status   => x_return_status,
3244                     x_msg_count       => l_msg_count,
3245                     x_msg_data        => l_msg_data);
3246   END get_person_bo;
3247 
3248  --------------------------------------
3249   --
3250   -- PROCEDURE get_persons_created
3251   --
3252   -- DESCRIPTION
3253   --The caller provides an identifier for the Persons created business event and
3254   --the procedure returns database objects of the type HZ_PERSON_BO for all of
3255   --the Person business objects from the business event.
3256 
3257   --
3258   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3259   --
3260   -- ARGUMENTS
3261   --   IN:
3262   --     p_init_msg_list      Initialize message stack if it is set to
3263   --     p_event_id           BES Event identifier.
3264   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
3265   --   OUT:
3266   --     x_person_obj        One or more created logical person.
3267   --     x_return_status      Return status after the call. The status can
3268   --                          be fnd_api.g_ret_sts_success (success),
3269   --                          fnd_api.g_ret_sts_error (error),
3270   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3271   --     x_msg_count          Number of messages in message stack.
3272   --     x_msg_data           Message text if x_msg_count is 1.
3273   --
3274   -- NOTES
3275   --
3276   -- MODIFICATION HISTORY
3277   --
3278   --   10-JUN-2005    AWU                Created.
3279   --
3280 
3281 
3282 
3283 /*
3284 The Get Persons Created procedure is a service to retrieve all of the Person business objects
3285 whose creations have been captured by a logical business event. Each Persons Created
3286 business event signifies that one or more Person business objects have been created.
3287 The caller provides an identifier for the Persons Created business event and the procedure
3288 returns all of the Person business objects from the business event. For each business object
3289 creation captured in the business event, the procedure calls the generic Get operation:
3290 HZ_PERSON_BO_PVT.get_person_bo
3291 
3292 Gathering all of the returned business objects from those API calls, the procedure packages
3293 them in a table structure and returns them to the caller.
3294 */
3295 
3296 
3297 PROCEDURE get_persons_created(
3298     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
3299     p_event_id            IN           	NUMBER,
3300     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3301     x_return_status       OUT NOCOPY    VARCHAR2,
3302     x_msg_count           OUT NOCOPY    NUMBER,
3303     x_msg_data            OUT NOCOPY    VARCHAR2
3304   ) is
3305 l_debug_prefix              VARCHAR2(30) := '';
3306 begin
3307 
3308 	-- initialize API return status to success.
3309     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3310 
3311     	-- Initialize message list if p_init_msg_list is set to TRUE
3312     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3313       		FND_MSG_PUB.initialize;
3314     	END IF;
3315 
3316 
3317 	-- Debug info.
3318         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3319         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(+)',
3320                                p_prefix=>l_debug_prefix,
3321                                p_msg_level=>fnd_log.level_procedure);
3322     	END IF;
3323 
3324 
3325 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
3326 			    p_party_id => null,
3327 			    p_event_type => 'C',
3328 			    p_bo_code => 'PERSON',
3329 			    x_return_status => x_return_status);
3330 
3331 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3332       		RAISE FND_API.G_EXC_ERROR;
3333     	END IF;
3334 
3335 	HZ_EXTRACT_PERSON_BO_PVT.get_persons_created(
3336     		p_init_msg_list => fnd_api.g_false,
3337 		p_event_id => p_event_id,
3338     		x_person_objs  => x_person_objs,
3339 		x_return_status => x_return_status,
3340 		x_msg_count => x_msg_count,
3341 		x_msg_data => x_msg_data);
3342 
3343 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3344       		RAISE FND_API.G_EXC_ERROR;
3345     	END IF;
3346 
3347 
3348 
3349 	-- Debug info.
3350     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3351          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3352                                p_msg_data=>x_msg_data,
3353                                p_msg_type=>'WARNING',
3354                                p_msg_level=>fnd_log.level_exception);
3355     	END IF;
3356 
3357     	-- Debug info.
3358         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3359         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created (-)',
3360                                p_prefix=>l_debug_prefix,
3361                                p_msg_level=>fnd_log.level_procedure);
3362     	END IF;
3363 
3364 
3365  EXCEPTION
3366 
3367   WHEN fnd_api.g_exc_error THEN
3368       x_return_status := fnd_api.g_ret_sts_error;
3369 
3370       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3371                                 p_count => x_msg_count,
3372                                 p_data  => x_msg_data);
3373 
3374       -- Debug info.
3375       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3376         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3377                                p_msg_data=>x_msg_data,
3378                                p_msg_type=>'ERROR',
3379                                p_msg_level=>fnd_log.level_error);
3380       END IF;
3381       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3382         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(-)',
3383                                p_prefix=>l_debug_prefix,
3384                                p_msg_level=>fnd_log.level_procedure);
3385       END IF;
3386     WHEN fnd_api.g_exc_unexpected_error THEN
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=>'hz_person_bo_pub.get_persons_created(-)',
3402                                p_prefix=>l_debug_prefix,
3403                                p_msg_level=>fnd_log.level_procedure);
3404       END IF;
3405     WHEN OTHERS THEN
3406       x_return_status := fnd_api.g_ret_sts_unexp_error;
3407 
3408       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3409       fnd_message.set_token('ERROR' ,SQLERRM);
3410       fnd_msg_pub.add;
3411 
3412       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3413                                 p_count => x_msg_count,
3414                                 p_data  => x_msg_data);
3415 
3416       -- Debug info.
3417       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3418         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3419                                p_msg_data=>x_msg_data,
3420                                p_msg_type=>'SQL ERROR',
3421                                p_msg_level=>fnd_log.level_error);
3422       END IF;
3423       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3424         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_created(-)',
3425                                p_prefix=>l_debug_prefix,
3426                                p_msg_level=>fnd_log.level_procedure);
3427       END IF;
3428 
3429 end;
3430 
3431   PROCEDURE get_persons_created(
3432     p_event_id            IN            NUMBER,
3433     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3434     x_return_status       OUT NOCOPY    VARCHAR2,
3435     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
3436   ) IS
3437     l_msg_count       NUMBER;
3438     l_msg_data        VARCHAR2(2000);
3439   BEGIN
3440     get_persons_created(
3441       p_init_msg_list      => FND_API.G_TRUE,
3442       p_event_id           => p_event_id,
3443       x_person_objs        => x_person_objs,
3444       x_return_status      => x_return_status,
3445       x_msg_count          => l_msg_count,
3446       x_msg_data           => l_msg_data
3447     );
3448     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3449                     x_return_status   => x_return_status,
3450                     x_msg_count       => l_msg_count,
3451                     x_msg_data        => l_msg_data);
3452   END get_persons_created;
3453 
3454 --------------------------------------
3455   --
3456   -- PROCEDURE get_persons_updated
3457   --
3458   -- DESCRIPTION
3459   --The caller provides an identifier for the Persons update business event and
3460   --the procedure returns database objects of the type HZ_PERSON_BO for all of
3461   --the Person business objects from the business event.
3462 
3463   --
3464   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3465   --
3466   -- ARGUMENTS
3467   --   IN:
3468   --     p_init_msg_list      Initialize message stack if it is set to
3469   --     p_event_id           BES Event identifier.
3470   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
3471   --   OUT:
3472   --     x_person_objs        One or more created logical person.
3473   --     x_return_status      Return status after the call. The status can
3474   --                          be fnd_api.g_ret_sts_success (success),
3475   --                          fnd_api.g_ret_sts_error (error),
3476   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3477   --     x_msg_count          Number of messages in message stack.
3478   --     x_msg_data           Message text if x_msg_count is 1.
3479   --
3480   -- NOTES
3481   --
3482   -- MODIFICATION HISTORY
3483   --
3484   --   10-JUN-2005     AWU                Created.
3485   --
3486 
3487 
3488 
3489 /*
3490 The Get Persons Updated procedure is a service to retrieve all of the Person business objects whose updates have been
3491 captured by the logical business event. Each Persons Updated business event signifies that one or more Person business
3492 objects have been updated.
3493 The caller provides an identifier for the Persons Update business event and the procedure returns database objects of the
3494 type HZ_PERSON_BO for all of the Person business objects from the business event.
3495 Gathering all of the returned database objects from those API calls, the procedure packages them in a table structure and
3496 returns them to the caller.
3497 */
3498 
3499  PROCEDURE get_persons_updated(
3500     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
3501     p_event_id            IN           	NUMBER,
3502     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3503     x_return_status       OUT NOCOPY    VARCHAR2,
3504     x_msg_count           OUT NOCOPY    NUMBER,
3505     x_msg_data            OUT NOCOPY    VARCHAR2
3506   ) is
3507 
3508 l_debug_prefix              VARCHAR2(30) := '';
3509 begin
3510 
3511 	-- initialize API return status to success.
3512     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3513 
3514     	-- Initialize message list if p_init_msg_list is set to TRUE
3515     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3516       		FND_MSG_PUB.initialize;
3517     	END IF;
3518 
3519 
3520 	-- Debug info.
3521         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3522         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(+)',
3523                                p_prefix=>l_debug_prefix,
3524                                p_msg_level=>fnd_log.level_procedure);
3525     	END IF;
3526 
3527 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
3528 			    p_party_id => null,
3529 			    p_event_type => 'U',
3530 			    p_bo_code => 'PERSON',
3531 			    x_return_status => x_return_status);
3532 
3533 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3534       		RAISE FND_API.G_EXC_ERROR;
3535     	END IF;
3536 
3537 	HZ_EXTRACT_PERSON_BO_PVT.get_persons_updated(
3538     		p_init_msg_list => fnd_api.g_false,
3539 		p_event_id => p_event_id,
3540     		x_person_objs  => x_person_objs,
3541 		x_return_status => x_return_status,
3542 		x_msg_count => x_msg_count,
3543 		x_msg_data => x_msg_data);
3544 
3545 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3546       		RAISE FND_API.G_EXC_ERROR;
3547     	END IF;
3548 
3549 
3550 
3551 	-- Debug info.
3552     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3553          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3554                                p_msg_data=>x_msg_data,
3555                                p_msg_type=>'WARNING',
3556                                p_msg_level=>fnd_log.level_exception);
3557     	END IF;
3558 
3559     	-- Debug info.
3560         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3561         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated (-)',
3562                                p_prefix=>l_debug_prefix,
3563                                p_msg_level=>fnd_log.level_procedure);
3564     	END IF;
3565 
3566 
3567  EXCEPTION
3568 
3569   WHEN fnd_api.g_exc_error THEN
3570       x_return_status := fnd_api.g_ret_sts_error;
3571 
3572       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3573                                 p_count => x_msg_count,
3574                                 p_data  => x_msg_data);
3575 
3576       -- Debug info.
3577       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3578         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3579                                p_msg_data=>x_msg_data,
3580                                p_msg_type=>'ERROR',
3581                                p_msg_level=>fnd_log.level_error);
3582       END IF;
3583       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3584         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(-)',
3585                                p_prefix=>l_debug_prefix,
3586                                p_msg_level=>fnd_log.level_procedure);
3587       END IF;
3588     WHEN fnd_api.g_exc_unexpected_error THEN
3589       x_return_status := fnd_api.g_ret_sts_unexp_error;
3590 
3591       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3592                                 p_count => x_msg_count,
3593                                 p_data  => x_msg_data);
3594 
3595       -- Debug info.
3596       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3597         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3598                                p_msg_data=>x_msg_data,
3599                                p_msg_type=>'UNEXPECTED ERROR',
3600                                p_msg_level=>fnd_log.level_error);
3601       END IF;
3602       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3603         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(-)',
3604                                p_prefix=>l_debug_prefix,
3605                                p_msg_level=>fnd_log.level_procedure);
3606       END IF;
3607     WHEN OTHERS THEN
3608       x_return_status := fnd_api.g_ret_sts_unexp_error;
3609 
3610       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3611       fnd_message.set_token('ERROR' ,SQLERRM);
3612       fnd_msg_pub.add;
3613 
3614       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3615                                 p_count => x_msg_count,
3616                                 p_data  => x_msg_data);
3617 
3618       -- Debug info.
3619       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3620         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3621                                p_msg_data=>x_msg_data,
3622                                p_msg_type=>'SQL ERROR',
3623                                p_msg_level=>fnd_log.level_error);
3624       END IF;
3625       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3626         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_persons_updated(-)',
3627                                p_prefix=>l_debug_prefix,
3628                                p_msg_level=>fnd_log.level_procedure);
3629       END IF;
3630 
3631 end;
3632 
3633   PROCEDURE get_persons_updated(
3634     p_event_id            IN            NUMBER,
3635     x_person_objs         OUT NOCOPY    HZ_PERSON_BO_TBL,
3636     x_return_status       OUT NOCOPY    VARCHAR2,
3637     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
3638   ) IS
3639     l_msg_count       NUMBER;
3640     l_msg_data        VARCHAR2(2000);
3641   BEGIN
3642     get_persons_updated(
3643       p_init_msg_list      => FND_API.G_TRUE,
3644       p_event_id           => p_event_id,
3645       x_person_objs        => x_person_objs,
3646       x_return_status      => x_return_status,
3647       x_msg_count          => l_msg_count,
3648       x_msg_data           => l_msg_data
3649     );
3650     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3651                     x_return_status   => x_return_status,
3652                     x_msg_count       => l_msg_count,
3653                     x_msg_data        => l_msg_data);
3654   END get_persons_updated;
3655 
3656 --------------------------------------
3657   --
3658   -- PROCEDURE get_person_updated
3659   --
3660   -- DESCRIPTION
3661   --The caller provides an identifier for the Persons update business event and person_id
3662   --the procedure returns one database object of the type HZ_PERSON_BO
3663 
3664   --
3665   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
3666   --
3667   -- ARGUMENTS
3668   --   IN:
3669   --     p_init_msg_list      Initialize message stack if it is set to
3670   --     p_event_id           BES Event identifier.
3671   --     p_person_id          Person identifier.
3672   --                          FND_API.G_TRUE. Default is FND_API.G_FALSE.
3673   --   OUT:
3674   --     x_person_objs        One or more created logical person.
3675   --     x_return_status      Return status after the call. The status can
3676   --                          be fnd_api.g_ret_sts_success (success),
3677   --                          fnd_api.g_ret_sts_error (error),
3678   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
3679   --     x_msg_count          Number of messages in message stack.
3680   --     x_msg_data           Message text if x_msg_count is 1.
3681   --
3682   -- NOTES
3683   --
3684   -- MODIFICATION HISTORY
3685   --
3686   --   10-JUN-2005     AWU                Created.
3687   --
3688 
3689 
3690 
3691 -- Get only one person object based on p_person_id and event_id
3692 
3693 PROCEDURE get_person_updated(
3694     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
3695     p_event_id            IN           	NUMBER,
3696     p_person_id           IN           NUMBER,
3697     x_person_obj          OUT NOCOPY    HZ_PERSON_BO,
3698     x_return_status       OUT NOCOPY    VARCHAR2,
3699     x_msg_count           OUT NOCOPY    NUMBER,
3700     x_msg_data            OUT NOCOPY    VARCHAR2
3701   ) is
3702 l_debug_prefix              VARCHAR2(30) := '';
3703 begin
3704 
3705 	-- initialize API return status to success.
3706     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3707 
3708     	-- Initialize message list if p_init_msg_list is set to TRUE
3709     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3710       		FND_MSG_PUB.initialize;
3711     	END IF;
3712 
3713 
3714 	-- Debug info.
3715         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3716         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(+)',
3717                                p_prefix=>l_debug_prefix,
3718                                p_msg_level=>fnd_log.level_procedure);
3719     	END IF;
3720 
3721 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
3722 			    p_party_id => p_person_id,
3723 			    p_event_type => 'U',
3724 			    p_bo_code => 'PERSON',
3725 			    x_return_status => x_return_status);
3726 
3727 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3728       		RAISE FND_API.G_EXC_ERROR;
3729     	END IF;
3730 
3731 
3732 	HZ_EXTRACT_PERSON_BO_PVT.get_person_updated(
3733     		p_init_msg_list => fnd_api.g_false,
3734 		p_event_id => p_event_id,
3735 		p_person_id  => p_person_id,
3736     		x_person_obj  => x_person_obj,
3737 		x_return_status => x_return_status,
3738 		x_msg_count => x_msg_count,
3739 		x_msg_data => x_msg_data);
3740 
3741 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3742       		RAISE FND_API.G_EXC_ERROR;
3743     	END IF;
3744 
3745 
3746 
3747 	-- Debug info.
3748     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3749          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3750                                p_msg_data=>x_msg_data,
3751                                p_msg_type=>'WARNING',
3752                                p_msg_level=>fnd_log.level_exception);
3753     	END IF;
3754 
3755     	-- Debug info.
3756         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3757         	hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated (-)',
3758                                p_prefix=>l_debug_prefix,
3759                                p_msg_level=>fnd_log.level_procedure);
3760     	END IF;
3761 
3762 
3763  EXCEPTION
3764 
3765   WHEN fnd_api.g_exc_error THEN
3766       x_return_status := fnd_api.g_ret_sts_error;
3767 
3768       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3769                                 p_count => x_msg_count,
3770                                 p_data  => x_msg_data);
3771 
3772       -- Debug info.
3773       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3774         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3775                                p_msg_data=>x_msg_data,
3776                                p_msg_type=>'ERROR',
3777                                p_msg_level=>fnd_log.level_error);
3778       END IF;
3779       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3780         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(-)',
3781                                p_prefix=>l_debug_prefix,
3782                                p_msg_level=>fnd_log.level_procedure);
3783       END IF;
3784     WHEN fnd_api.g_exc_unexpected_error THEN
3785       x_return_status := fnd_api.g_ret_sts_unexp_error;
3786 
3787       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3788                                 p_count => x_msg_count,
3789                                 p_data  => x_msg_data);
3790 
3791       -- Debug info.
3792       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3793         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3794                                p_msg_data=>x_msg_data,
3795                                p_msg_type=>'UNEXPECTED ERROR',
3796                                p_msg_level=>fnd_log.level_error);
3797       END IF;
3798       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3799         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(-)',
3800                                p_prefix=>l_debug_prefix,
3801                                p_msg_level=>fnd_log.level_procedure);
3802       END IF;
3803     WHEN OTHERS THEN
3804       x_return_status := fnd_api.g_ret_sts_unexp_error;
3805 
3806       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3807       fnd_message.set_token('ERROR' ,SQLERRM);
3808       fnd_msg_pub.add;
3809 
3810       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3811                                 p_count => x_msg_count,
3812                                 p_data  => x_msg_data);
3813 
3814       -- Debug info.
3815       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3816         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3817                                p_msg_data=>x_msg_data,
3818                                p_msg_type=>'SQL ERROR',
3819                                p_msg_level=>fnd_log.level_error);
3820       END IF;
3821       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3822         hz_utility_v2pub.debug(p_message=>'hz_person_bo_pub.get_person_updated(-)',
3823                                p_prefix=>l_debug_prefix,
3824                                p_msg_level=>fnd_log.level_procedure);
3825       END IF;
3826 
3827 end;
3828 
3829   PROCEDURE get_person_updated(
3830     p_event_id            IN            NUMBER,
3831     p_person_id           IN           NUMBER,
3832     x_person_obj          OUT NOCOPY    HZ_PERSON_BO,
3833     x_return_status       OUT NOCOPY    VARCHAR2,
3834     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL
3835   ) IS
3836     l_msg_count           NUMBER;
3837     l_msg_data            VARCHAR2(2000);
3838   BEGIN
3839     get_person_updated(
3840       p_init_msg_list      => FND_API.G_TRUE,
3841       p_event_id           => p_event_id,
3842       p_person_id          => p_person_id,
3843       x_person_obj         => x_person_obj,
3844       x_return_status      => x_return_status,
3845       x_msg_count          => l_msg_count,
3846       x_msg_data           => l_msg_data
3847     );
3848     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
3849                     x_return_status   => x_return_status,
3850                     x_msg_count       => l_msg_count,
3851                     x_msg_data        => l_msg_data);
3852   END get_person_updated;
3853 
3854 -- get TCA identifiers for create event
3855 PROCEDURE get_ids_persons_created (
3856 	p_init_msg_list		IN	VARCHAR2 := fnd_api.g_false,
3857 	p_event_id		IN	NUMBER,
3858 	x_person_ids		OUT NOCOPY	HZ_EXTRACT_BO_UTIL_PVT.BO_ID_TBL,
3859 	x_return_status       OUT NOCOPY    VARCHAR2,
3860 	x_msg_count		OUT NOCOPY	NUMBER,
3861 	x_msg_data		OUT NOCOPY	VARCHAR2
3862 
3863 ) is
3864 l_debug_prefix              VARCHAR2(30) := '';
3865 
3866 begin
3867 	-- initialize API return status to success.
3868     	x_return_status := FND_API.G_RET_STS_SUCCESS;
3869 
3870     	-- Initialize message list if p_init_msg_list is set to TRUE
3871     	IF FND_API.to_Boolean(p_init_msg_list) THEN
3872       		FND_MSG_PUB.initialize;
3873     	END IF;
3874 
3875 
3876 	-- Debug info.
3877         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3878         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(+)',
3879                                p_prefix=>l_debug_prefix,
3880                                p_msg_level=>fnd_log.level_procedure);
3881     	END IF;
3882 
3883 
3884 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
3885 			    p_party_id => null,
3886 			    p_event_type => 'C',
3887 			    p_bo_code => 'PERSON',
3888 			    x_return_status => x_return_status);
3889 
3890 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3891       		RAISE FND_API.G_EXC_ERROR;
3892     	END IF;
3893 
3894 	HZ_EXTRACT_BO_UTIL_PVT.get_bo_root_ids(
3895     	p_init_msg_list       => fnd_api.g_false,
3896     	p_event_id            => p_event_id,
3897     	x_obj_root_ids        => x_person_ids,
3898    	x_return_status => x_return_status,
3899 	x_msg_count => x_msg_count,
3900 	x_msg_data => x_msg_data);
3901 
3902 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3903       		RAISE FND_API.G_EXC_ERROR;
3904     	END IF;
3905 
3906 
3907 	-- Debug info.
3908     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
3909          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3910                                p_msg_data=>x_msg_data,
3911                                p_msg_type=>'WARNING',
3912                                p_msg_level=>fnd_log.level_exception);
3913     	END IF;
3914 
3915     	-- Debug info.
3916         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3917         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_created (-)',
3918                                p_prefix=>l_debug_prefix,
3919                                p_msg_level=>fnd_log.level_procedure);
3920     	END IF;
3921 
3922 
3923  EXCEPTION
3924 
3925   WHEN fnd_api.g_exc_error THEN
3926       x_return_status := fnd_api.g_ret_sts_error;
3927 
3928       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3929                                 p_count => x_msg_count,
3930                                 p_data  => x_msg_data);
3931 
3932       -- Debug info.
3933       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3934         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3935                                p_msg_data=>x_msg_data,
3936                                p_msg_type=>'ERROR',
3937                                p_msg_level=>fnd_log.level_error);
3938       END IF;
3939       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3940         hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(-)',
3941                                p_prefix=>l_debug_prefix,
3942                                p_msg_level=>fnd_log.level_procedure);
3943       END IF;
3944     WHEN fnd_api.g_exc_unexpected_error THEN
3945       x_return_status := fnd_api.g_ret_sts_unexp_error;
3946 
3947       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3948                                 p_count => x_msg_count,
3949                                 p_data  => x_msg_data);
3950 
3951       -- Debug info.
3952       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3953         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3954                                p_msg_data=>x_msg_data,
3955                                p_msg_type=>'UNEXPECTED ERROR',
3956                                p_msg_level=>fnd_log.level_error);
3957       END IF;
3958       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3959         hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(-)',
3960                                p_prefix=>l_debug_prefix,
3961                                p_msg_level=>fnd_log.level_procedure);
3962       END IF;
3963     WHEN OTHERS THEN
3964       x_return_status := fnd_api.g_ret_sts_unexp_error;
3965 
3966       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
3967       fnd_message.set_token('ERROR' ,SQLERRM);
3968       fnd_msg_pub.add;
3969 
3970       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
3971                                 p_count => x_msg_count,
3972                                 p_data  => x_msg_data);
3973 
3974       -- Debug info.
3975       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
3976         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
3977                                p_msg_data=>x_msg_data,
3978                                p_msg_type=>'SQL ERROR',
3979                                p_msg_level=>fnd_log.level_error);
3980       END IF;
3981       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3982         hz_utility_v2pub.debug(p_message=>'get_ids_persons_created(-)',
3983                                p_prefix=>l_debug_prefix,
3984                                p_msg_level=>fnd_log.level_procedure);
3985       END IF;
3986 
3987 end;
3988 
3989 
3990 -- get TCA identifiers for update event
3991 PROCEDURE get_ids_persons_updated (
3992 	p_init_msg_list		IN	VARCHAR2 := fnd_api.g_false,
3993 	p_event_id		IN	NUMBER,
3994 	x_person_ids		OUT NOCOPY	HZ_EXTRACT_BO_UTIL_PVT.BO_ID_TBL,
3995 	x_return_status       OUT NOCOPY    VARCHAR2,
3996 	x_msg_count		OUT NOCOPY	NUMBER,
3997 	x_msg_data		OUT NOCOPY	VARCHAR2
3998 ) is
3999 l_debug_prefix              VARCHAR2(30) := '';
4000 
4001 begin
4002 	-- initialize API return status to success.
4003     	x_return_status := FND_API.G_RET_STS_SUCCESS;
4004 
4005     	-- Initialize message list if p_init_msg_list is set to TRUE
4006     	IF FND_API.to_Boolean(p_init_msg_list) THEN
4007       		FND_MSG_PUB.initialize;
4008     	END IF;
4009 
4010 
4011 	-- Debug info.
4012         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4013         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(+)',
4014                                p_prefix=>l_debug_prefix,
4015                                p_msg_level=>fnd_log.level_procedure);
4016     	END IF;
4017 
4018 	HZ_EXTRACT_BO_UTIL_PVT.validate_event_id(p_event_id => p_event_id,
4019 			    p_party_id => null,
4020 			    p_event_type => 'U',
4021 			    p_bo_code => 'PERSON',
4022 			    x_return_status => x_return_status);
4023 
4024 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4025       		RAISE FND_API.G_EXC_ERROR;
4026     	END IF;
4027 
4028 	HZ_EXTRACT_BO_UTIL_PVT.get_bo_root_ids(
4029     	p_init_msg_list       => fnd_api.g_false,
4030     	p_event_id            => p_event_id,
4031     	x_obj_root_ids        => x_person_ids,
4032    	x_return_status => x_return_status,
4033 	x_msg_count => x_msg_count,
4034 	x_msg_data => x_msg_data);
4035 
4036 	IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4037       		RAISE FND_API.G_EXC_ERROR;
4038     	END IF;
4039 
4040 
4041 	-- Debug info.
4042     	IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
4043          	hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4044                                p_msg_data=>x_msg_data,
4045                                p_msg_type=>'WARNING',
4046                                p_msg_level=>fnd_log.level_exception);
4047     	END IF;
4048 
4049     	-- Debug info.
4050         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4051         	hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated (-)',
4052                                p_prefix=>l_debug_prefix,
4053                                p_msg_level=>fnd_log.level_procedure);
4054     	END IF;
4055 
4056 
4057  EXCEPTION
4058 
4059   WHEN fnd_api.g_exc_error THEN
4060       x_return_status := fnd_api.g_ret_sts_error;
4061 
4062       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4063                                 p_count => x_msg_count,
4064                                 p_data  => x_msg_data);
4065 
4066       -- Debug info.
4067       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4068         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4069                                p_msg_data=>x_msg_data,
4070                                p_msg_type=>'ERROR',
4071                                p_msg_level=>fnd_log.level_error);
4072       END IF;
4073       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4074         hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(-)',
4075                                p_prefix=>l_debug_prefix,
4076                                p_msg_level=>fnd_log.level_procedure);
4077       END IF;
4078     WHEN fnd_api.g_exc_unexpected_error THEN
4079       x_return_status := fnd_api.g_ret_sts_unexp_error;
4080 
4081       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4082                                 p_count => x_msg_count,
4083                                 p_data  => x_msg_data);
4084 
4085       -- Debug info.
4086       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4087         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4088                                p_msg_data=>x_msg_data,
4089                                p_msg_type=>'UNEXPECTED ERROR',
4090                                p_msg_level=>fnd_log.level_error);
4091       END IF;
4092       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4093         hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(-)',
4094                                p_prefix=>l_debug_prefix,
4095                                p_msg_level=>fnd_log.level_procedure);
4096       END IF;
4097     WHEN OTHERS THEN
4098       x_return_status := fnd_api.g_ret_sts_unexp_error;
4099 
4100       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
4101       fnd_message.set_token('ERROR' ,SQLERRM);
4102       fnd_msg_pub.add;
4103 
4104       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
4105                                 p_count => x_msg_count,
4106                                 p_data  => x_msg_data);
4107 
4108       -- Debug info.
4109       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
4110         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
4111                                p_msg_data=>x_msg_data,
4112                                p_msg_type=>'SQL ERROR',
4113                                p_msg_level=>fnd_log.level_error);
4114       END IF;
4115       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4116         hz_utility_v2pub.debug(p_message=>'get_ids_persons_updated(-)',
4117                                p_prefix=>l_debug_prefix,
4118                                p_msg_level=>fnd_log.level_procedure);
4119       END IF;
4120 
4121 end;
4122 
4123 END hz_person_bo_pub;