DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_LOCATION_BO_PUB

Source


1 PACKAGE BODY hz_location_bo_pub AS
2 /*$Header: ARHBLCBB.pls 120.5 2006/05/18 22:25:40 acng noship $ */
3 
4   PROCEDURE do_create_location_bo(
5     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
6     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
7     p_location_obj        IN OUT NOCOPY HZ_LOCATION_OBJ,
8     p_created_by_module   IN            VARCHAR2,
9     p_obj_source          IN            VARCHAR2 := null,
10     x_return_status       OUT NOCOPY    VARCHAR2,
11     x_msg_count           OUT NOCOPY    NUMBER,
12     x_msg_data            OUT NOCOPY    VARCHAR2,
13     x_location_id         OUT NOCOPY    NUMBER,
14     x_location_os         OUT NOCOPY    VARCHAR2,
15     x_location_osr        OUT NOCOPY    VARCHAR2
16   );
17 
18   PROCEDURE do_update_location_bo(
19     p_init_msg_list     IN            VARCHAR2 := fnd_api.g_false,
20     p_location_obj      IN OUT NOCOPY HZ_LOCATION_OBJ,
21     p_created_by_module IN            VARCHAR2,
22     p_obj_source        IN            VARCHAR2 := null,
23     x_return_status     OUT NOCOPY    VARCHAR2,
24     x_msg_count         OUT NOCOPY    NUMBER,
25     x_msg_data          OUT NOCOPY    VARCHAR2,
26     x_location_id       OUT NOCOPY    NUMBER,
27     x_location_os       OUT NOCOPY    VARCHAR2,
28     x_location_osr      OUT NOCOPY    VARCHAR2
29   );
30 
31   PROCEDURE do_save_location_bo(
32     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
33     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
34     p_location_obj        IN OUT NOCOPY HZ_LOCATION_OBJ,
35     p_created_by_module   IN            VARCHAR2,
36     p_obj_source          IN            VARCHAR2 := null,
37     x_return_status       OUT NOCOPY    VARCHAR2,
38     x_msg_count           OUT NOCOPY    NUMBER,
39     x_msg_data            OUT NOCOPY    VARCHAR2,
40     x_location_id         OUT NOCOPY    NUMBER,
41     x_location_os         OUT NOCOPY    VARCHAR2,
42     x_location_osr        OUT NOCOPY    VARCHAR2
43   );
44 
45   -- PUBLIC PROCEDURE assign_location_rec
46   --
47   -- DESCRIPTION
48   --     Assign attribute value from location object to plsql record.
49   --
50   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
51   --
52   -- ARGUMENTS
53   --   IN:
54   --     p_location_obj       Location object.
55   --     p_loc_os             Location original system.
56   --     p_loc_osr            Location original system reference.
57   --     p_create_or_update   Create or update flag.
58   --   IN/OUT:
59   --     px_location_rec      Location plsql record.
60   --
61   -- NOTES
62   --
63   -- MODIFICATION HISTORY
64   --
65   --   14-DEC-2004    Arnold Ng          Created.
66   --
67 
68   PROCEDURE assign_location_rec(
69     p_location_obj               IN            HZ_LOCATION_OBJ,
70     p_loc_os                     IN            VARCHAR2,
71     p_loc_osr                    IN            VARCHAR2,
72     p_create_or_update           IN            VARCHAR2 := 'C',
73     px_location_rec              IN OUT NOCOPY HZ_LOCATION_V2PUB.LOCATION_REC_TYPE
74   ) IS
75   BEGIN
76     px_location_rec.location_id:= p_location_obj.location_id;
77     px_location_rec.country:= p_location_obj.country;
78     px_location_rec.address1:= p_location_obj.address1;
79     px_location_rec.address2:= p_location_obj.address2;
80     px_location_rec.address3:= p_location_obj.address3;
81     px_location_rec.address4:= p_location_obj.address4;
82     px_location_rec.city:= p_location_obj.city;
83     px_location_rec.postal_code:= p_location_obj.postal_code;
84     px_location_rec.state:= p_location_obj.state;
85     px_location_rec.province:= p_location_obj.province;
86     px_location_rec.county:= p_location_obj.county;
87     px_location_rec.address_key:= p_location_obj.address_key;
88     px_location_rec.address_style:= p_location_obj.address_style;
89     px_location_rec.validated_flag:= p_location_obj.validated_flag;
90     px_location_rec.address_lines_phonetic:= p_location_obj.address_lines_phonetic;
91     px_location_rec.postal_plus4_code:= p_location_obj.postal_plus4_code;
92     px_location_rec.position:= p_location_obj.position;
93     px_location_rec.location_directions:= p_location_obj.location_directions;
94     px_location_rec.address_effective_date:= p_location_obj.address_effective_date;
95     px_location_rec.address_expiration_date:= p_location_obj.address_expiration_date;
96     px_location_rec.clli_code:= p_location_obj.clli_code;
97     px_location_rec.language:= p_location_obj.language;
98     px_location_rec.short_description:= p_location_obj.short_description;
99     px_location_rec.description:= p_location_obj.description;
100     px_location_rec.geometry:= p_location_obj.geometry;
101     px_location_rec.geometry_status_code:= p_location_obj.geometry_status_code;
102     px_location_rec.loc_hierarchy_id:= p_location_obj.loc_hierarchy_id;
103     px_location_rec.sales_tax_geocode:= p_location_obj.sales_tax_geocode;
104     px_location_rec.sales_tax_inside_city_limits:= p_location_obj.sales_tax_inside_city_limits;
105     px_location_rec.fa_location_id:= p_location_obj.fa_location_id;
106     px_location_rec.attribute_category:= p_location_obj.attribute_category;
107     px_location_rec.attribute1:= p_location_obj.attribute1;
108     px_location_rec.attribute2:= p_location_obj.attribute2;
109     px_location_rec.attribute3:= p_location_obj.attribute3;
110     px_location_rec.attribute4:= p_location_obj.attribute4;
111     px_location_rec.attribute5:= p_location_obj.attribute5;
112     px_location_rec.attribute6:= p_location_obj.attribute6;
113     px_location_rec.attribute7:= p_location_obj.attribute7;
114     px_location_rec.attribute8:= p_location_obj.attribute8;
115     px_location_rec.attribute9:= p_location_obj.attribute9;
116     px_location_rec.attribute10:= p_location_obj.attribute10;
117     px_location_rec.attribute11:= p_location_obj.attribute11;
118     px_location_rec.attribute12:= p_location_obj.attribute12;
119     px_location_rec.attribute13:= p_location_obj.attribute13;
120     px_location_rec.attribute14:= p_location_obj.attribute14;
121     px_location_rec.attribute15:= p_location_obj.attribute15;
122     px_location_rec.attribute16:= p_location_obj.attribute16;
123     px_location_rec.attribute17:= p_location_obj.attribute17;
124     px_location_rec.attribute18:= p_location_obj.attribute18;
125     px_location_rec.attribute19:= p_location_obj.attribute19;
126     px_location_rec.attribute20:= p_location_obj.attribute20;
127     px_location_rec.timezone_id:= p_location_obj.timezone_id;
128     IF(p_create_or_update = 'C') THEN
129       px_location_rec.orig_system:= p_loc_os;
130       px_location_rec.orig_system_reference:= p_loc_osr;
131       px_location_rec.created_by_module:= HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE;
132     END IF;
133     px_location_rec.actual_content_source:= p_location_obj.actual_content_source;
134     px_location_rec.delivery_point_code:= p_location_obj.delivery_point_code;
135   END assign_location_rec;
136 
137   -- PROCEDURE do_create_location_bo
138   --
139   -- DESCRIPTION
140   --     Create a location business object.
141   PROCEDURE do_create_location_bo(
142     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
143     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
144     p_location_obj      IN OUT NOCOPY  HZ_LOCATION_OBJ,
145     p_created_by_module   IN            VARCHAR2,
146     p_obj_source          IN            VARCHAR2 := null,
147     x_return_status       OUT NOCOPY    VARCHAR2,
148     x_msg_count           OUT NOCOPY    NUMBER,
149     x_msg_data            OUT NOCOPY    VARCHAR2,
150     x_location_id       OUT NOCOPY    NUMBER,
151     x_location_os       OUT NOCOPY    VARCHAR2,
152     x_location_osr      OUT NOCOPY    VARCHAR2
153   ) IS
154     l_debug_prefix           VARCHAR2(30);
155     l_location_rec           HZ_LOCATION_V2PUB.LOCATION_REC_TYPE;
156     l_location_id            NUMBER;
157     l_location_id            NUMBER;
158     l_valid_obj              BOOLEAN;
159     l_bus_object             HZ_REGISTRY_VALIDATE_BO_PVT.COMPLETENESS_REC_TYPE;
160     l_errorcode              NUMBER;
161   BEGIN
162     -- Standard start of API savepoint
163     SAVEPOINT do_create_location_bo_pub;
164 
165     -- initialize API return status to success.
166     x_return_status := FND_API.G_RET_STS_SUCCESS;
167 
168     -- Initialize message list of p_init_msg_list is set to TRUE.
169     IF FND_API.to_Boolean(p_init_msg_list) THEN
170       FND_MSG_PUB.initialize;
171     END IF;
172 
173     -- initialize Global variable
174     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
175     IF(p_created_by_module IS NULL) THEN
176       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
177     ELSE
178       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
179     END IF;
180 
181     -- Debug info.
182     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
183         hz_utility_v2pub.debug(p_message=>'do_create_location_bo(+)',
184                                p_prefix=>l_debug_prefix,
185                                p_msg_level=>fnd_log.level_procedure);
186     END IF;
187 
188 /* Currently, business object definition cannot be altered.  The seeded completeness
189    for LOCATION business object has no mandatory embedded objects.  So, comment out
190    this line of code
191     -- Base on p_validate_bo_flag, check the completeness of business objects
192     IF(p_validate_bo_flag = FND_API.G_TRUE) THEN
193       HZ_REGISTRY_VALIDATE_BO_PVT.get_bus_obj_struct(
194         p_bus_object_code         => 'LOCATION',
195         x_bus_object              => l_bus_object
196       );
197 
198       l_valid_obj := HZ_REGISTRY_VALIDATE_BO_PVT.is_loc_bo_comp(
199                        p_ps_objs    => p_location_obj,
200                        p_bus_object => l_bus_object
201                      );
202       IF NOT(l_valid_obj) THEN
203         RAISE fnd_api.g_exc_error;
204       END IF;
205     END IF;
206 */
207     x_location_id := p_location_obj.location_id;
208     x_location_os := p_location_obj.orig_system;
209     x_location_osr := p_location_obj.orig_system_reference;
210 
211     -- check if pass in location_id and os+osr
212     hz_registry_validate_bo_pvt.validate_ssm_id(
213       px_id              => x_location_id,
214       px_os              => x_location_os,
215       px_osr             => x_location_osr,
216       p_obj_type         => 'HZ_LOCATIONS',
217       p_create_or_update => 'C',
218       x_return_status    => x_return_status,
219       x_msg_count        => x_msg_count,
220       x_msg_data         => x_msg_data);
221 
222     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
223       RAISE FND_API.G_EXC_ERROR;
224     END IF;
225 
226     assign_location_rec(
227       p_location_obj  => p_location_obj,
228       p_loc_os        => x_location_os,
229       p_loc_osr       => x_location_osr,
230       px_location_rec => l_location_rec
231     );
232 
233     HZ_LOCATION_V2PUB.create_location(
234       p_location_rec              => l_location_rec,
235       x_location_id               => x_location_id,
236       x_return_status             => x_return_status,
237       x_msg_count                 => x_msg_count,
238       x_msg_data                  => x_msg_data
239     );
240 
241     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
242       RAISE FND_API.G_EXC_ERROR;
243     END IF;
244 
245     -- assign location_id
246     p_location_obj.location_id := x_location_id;
247     ----------------------------
248     -- Create Location Ext Attrs
249     ----------------------------
250     IF((p_location_obj.ext_attributes_objs IS NOT NULL) AND
251        (p_location_obj.ext_attributes_objs.COUNT > 0)) THEN
252       HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
253         p_ext_attr_objs             => p_location_obj.ext_attributes_objs,
254         p_parent_obj_id             => x_location_id,
255         p_parent_obj_type           => 'LOCATION',
256         p_create_or_update          => 'C',
257         x_return_status             => x_return_status,
258         x_errorcode                 => l_errorcode,
259         x_msg_count                 => x_msg_count,
260         x_msg_data                  => x_msg_data
261       );
262 
263       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
264         RAISE FND_API.G_EXC_ERROR;
265       END IF;
266     END IF;
267 
268     -- reset Global variable
269     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
270     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
271 
272     -- Debug info.
273     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
274          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
275                                p_msg_data=>x_msg_data,
276                                p_msg_type=>'WARNING',
277                                p_msg_level=>fnd_log.level_exception);
278     END IF;
279     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
280         hz_utility_v2pub.debug(p_message=>'do_create_location_bo(-)',
281                                p_prefix=>l_debug_prefix,
282                                p_msg_level=>fnd_log.level_procedure);
283     END IF;
284 
285   EXCEPTION
286     WHEN fnd_api.g_exc_error THEN
287       ROLLBACK TO do_create_location_bo_pub;
288 
289       -- reset Global variable
290       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
291       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
292 
293       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
294       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
295       FND_MSG_PUB.ADD;
296 
297       x_return_status := fnd_api.g_ret_sts_error;
298 
299       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
300                                 p_count => x_msg_count,
301                                 p_data  => x_msg_data);
302 
303       -- Debug info.
304       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
305         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
306                                p_msg_data=>x_msg_data,
307                                p_msg_type=>'ERROR',
308                                p_msg_level=>fnd_log.level_error);
309       END IF;
310       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
311         hz_utility_v2pub.debug(p_message=>'do_create_location_bo(-)',
312                                p_prefix=>l_debug_prefix,
313                                p_msg_level=>fnd_log.level_procedure);
314       END IF;
315 
316     WHEN fnd_api.g_exc_unexpected_error THEN
317       ROLLBACK TO do_create_location_bo_pub;
318 
319       -- reset Global variable
320       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
321       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
322 
323       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
324       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
325       FND_MSG_PUB.ADD;
326 
327       x_return_status := fnd_api.g_ret_sts_unexp_error;
328 
329       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
330                                 p_count => x_msg_count,
331                                 p_data  => x_msg_data);
332 
333       -- Debug info.
334       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
335         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
336                                p_msg_data=>x_msg_data,
337                                p_msg_type=>'UNEXPECTED ERROR',
338                                p_msg_level=>fnd_log.level_error);
339       END IF;
340       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
341         hz_utility_v2pub.debug(p_message=>'do_create_location_bo(-)',
342                                p_prefix=>l_debug_prefix,
343                                p_msg_level=>fnd_log.level_procedure);
344       END IF;
345 
346     WHEN OTHERS THEN
347       ROLLBACK TO do_create_location_bo_pub;
348 
349       -- reset Global variable
350       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
351       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
352 
353       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
354       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
355       FND_MSG_PUB.ADD;
356 
357       x_return_status := fnd_api.g_ret_sts_unexp_error;
358 
359       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
360       fnd_message.set_token('ERROR' ,SQLERRM);
361       fnd_msg_pub.add;
362 
363       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
364                                 p_count => x_msg_count,
365                                 p_data  => x_msg_data);
366 
367       -- Debug info.
368       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
369         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
370                                p_msg_data=>x_msg_data,
371                                p_msg_type=>'SQL ERROR',
372                                p_msg_level=>fnd_log.level_error);
373       END IF;
374       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
375         hz_utility_v2pub.debug(p_message=>'do_create_location_bo(-)',
376                                p_prefix=>l_debug_prefix,
377                                p_msg_level=>fnd_log.level_procedure);
378       END IF;
379   END do_create_location_bo;
380 
381   PROCEDURE create_location_bo(
382     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
383     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
384     p_location_obj        IN            HZ_LOCATION_OBJ,
385     p_created_by_module   IN            VARCHAR2,
386     x_return_status       OUT NOCOPY    VARCHAR2,
387     x_msg_count           OUT NOCOPY    NUMBER,
388     x_msg_data            OUT NOCOPY    VARCHAR2,
389     x_location_id       OUT NOCOPY    NUMBER,
390     x_location_os       OUT NOCOPY    VARCHAR2,
391     x_location_osr      OUT NOCOPY    VARCHAR2
392   ) IS
393     l_location_obj          HZ_LOCATION_OBJ;
394   BEGIN
395     l_location_obj := p_location_obj;
396     do_create_location_bo(
397       p_init_msg_list       => p_init_msg_list,
398       p_validate_bo_flag    => p_validate_bo_flag,
399       p_location_obj        => l_location_obj,
400       p_created_by_module   => p_created_by_module,
401       p_obj_source          => null,
402       x_return_status       => x_return_status,
403       x_msg_count           => x_msg_count,
404       x_msg_data            => x_msg_data,
405       x_location_id         => x_location_id,
406       x_location_os         => x_location_os,
407       x_location_osr        => x_location_osr
408     );
409   END create_location_bo;
410 
411   PROCEDURE create_location_bo(
412     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
413     p_location_obj        IN            HZ_LOCATION_OBJ,
414     p_created_by_module   IN            VARCHAR2,
415     p_obj_source          IN            VARCHAR2 := null,
416     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
417     x_return_status       OUT NOCOPY    VARCHAR2,
418     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
419     x_return_obj          OUT NOCOPY    HZ_LOCATION_OBJ,
420     x_location_id         OUT NOCOPY    NUMBER,
421     x_location_os         OUT NOCOPY    VARCHAR2,
422     x_location_osr        OUT NOCOPY    VARCHAR2
423   ) IS
424     l_msg_count           NUMBER;
425     l_msg_data            VARCHAR2(2000);
426     l_location_obj        HZ_LOCATION_OBJ;
427   BEGIN
428     l_location_obj := p_location_obj;
429     do_create_location_bo(
430       p_init_msg_list       => fnd_api.g_true,
431       p_validate_bo_flag    => p_validate_bo_flag,
432       p_location_obj        => l_location_obj,
433       p_created_by_module   => p_created_by_module,
434       p_obj_source          => null,
435       x_return_status       => x_return_status,
436       x_msg_count           => l_msg_count,
437       x_msg_data            => l_msg_data,
438       x_location_id         => x_location_id,
439       x_location_os         => x_location_os,
440       x_location_osr        => x_location_osr
441     );
442     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
443                     x_return_status   => x_return_status,
444                     x_msg_count       => l_msg_count,
445                     x_msg_data        => l_msg_data);
446     IF FND_API.to_Boolean(p_return_obj_flag) THEN
447       x_return_obj := l_location_obj;
448     END IF;
449   END create_location_bo;
450 
451   -- PROCEDURE do_update_location_bo
452   --
453   -- DESCRIPTION
454   --     Update a location business object.
455   PROCEDURE do_update_location_bo(
456     p_init_msg_list     IN            VARCHAR2 := fnd_api.g_false,
457     p_location_obj      IN OUT NOCOPY HZ_LOCATION_OBJ,
458     p_created_by_module IN            VARCHAR2,
459     p_obj_source          IN            VARCHAR2 := null,
460     x_return_status     OUT NOCOPY    VARCHAR2,
461     x_msg_count         OUT NOCOPY    NUMBER,
462     x_msg_data          OUT NOCOPY    VARCHAR2,
463     x_location_id       OUT NOCOPY    NUMBER,
464     x_location_os       OUT NOCOPY    VARCHAR2,
465     x_location_osr      OUT NOCOPY    VARCHAR2
466   )IS
467     l_debug_prefix             VARCHAR2(30);
468     l_location_rec             HZ_LOCATION_V2PUB.LOCATION_REC_TYPE;
469     l_loc_ovn                  NUMBER;
470     l_location_id              NUMBER;
471     l_create_update_flag       VARCHAR2(1);
472     l_errorcode                NUMBER;
473 
474     CURSOR get_ovn(l_loc_id  NUMBER) IS
475     SELECT loc.object_version_number
476     FROM HZ_LOCATIONS loc
477     WHERE loc.location_id = l_loc_id;
478 
479   BEGIN
480     -- Standard start of API savepoint
481     SAVEPOINT do_update_location_bo_pub;
482 
483     -- initialize API return status to success.
484     x_return_status := FND_API.G_RET_STS_SUCCESS;
485 
486     -- Initialize message list of p_init_msg_list is set to TRUE.
487     IF FND_API.to_Boolean(p_init_msg_list) THEN
488       FND_MSG_PUB.initialize;
489     END IF;
490 
491     -- initialize Global variable
492     HZ_UTILITY_V2PUB.G_CALLING_API := 'BO_API';
493     IF(p_created_by_module IS NULL) THEN
494       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := 'BO_API';
495     ELSE
496       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := p_created_by_module;
497     END IF;
498 
499     -- Debug info.
500     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
501         hz_utility_v2pub.debug(p_message=>'do_update_location_bo(+)',
502                                p_prefix=>l_debug_prefix,
503                                p_msg_level=>fnd_log.level_procedure);
504     END IF;
505 
506     x_location_id := p_location_obj.location_id;
507     x_location_os := p_location_obj.orig_system;
508     x_location_osr := p_location_obj.orig_system_reference;
509 
510     -- check if pass in location_id and ssm is
511     -- valid for update
512     hz_registry_validate_bo_pvt.validate_ssm_id(
513       px_id              => x_location_id,
514       px_os              => x_location_os,
515       px_osr             => x_location_osr,
516       p_obj_type         => 'HZ_LOCATIONS',
517       p_create_or_update => 'U',
518       x_return_status    => x_return_status,
519       x_msg_count        => x_msg_count,
520       x_msg_data         => x_msg_data);
521 
522     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
523       RAISE FND_API.G_EXC_ERROR;
524     END IF;
525 
526     OPEN get_ovn(x_location_id);
527     FETCH get_ovn INTO l_loc_ovn;
528     CLOSE get_ovn;
529 
530     ----------------------
531     -- For Location
532     ----------------------
533     assign_location_rec(
534       p_location_obj     => p_location_obj,
535       p_loc_os           => x_location_os,
536       p_loc_osr          => x_location_osr,
537       p_create_or_update => 'U',
538       px_location_rec    => l_location_rec
539     );
540 
541     l_location_rec.location_id := x_location_id;
542 
543     HZ_LOCATION_V2PUB.update_location(
544       p_location_rec              => l_location_rec,
545       p_object_version_number     => l_loc_ovn,
546       x_return_status             => x_return_status,
547       x_msg_count                 => x_msg_count,
548       x_msg_data                  => x_msg_data
549     );
550 
551     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
552       RAISE FND_API.G_EXC_ERROR;
553     END IF;
554 
555     -- assign location_id
556     p_location_obj.location_id := x_location_id;
557     ----------------------------
558     -- Create Location Ext Attrs
559     ----------------------------
560     IF((p_location_obj.ext_attributes_objs IS NOT NULL) AND
561        (p_location_obj.ext_attributes_objs.COUNT > 0)) THEN
562       HZ_EXT_ATTRIBUTE_BO_PVT.save_ext_attributes(
563         p_ext_attr_objs             => p_location_obj.ext_attributes_objs,
564         p_parent_obj_id             => x_location_id,
565         p_parent_obj_type           => 'LOCATION',
566         p_create_or_update          => 'U',
567         x_return_status             => x_return_status,
568         x_errorcode                 => l_errorcode,
569         x_msg_count                 => x_msg_count,
570         x_msg_data                  => x_msg_data
571       );
572 
573       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
574         RAISE FND_API.G_EXC_ERROR;
575       END IF;
576     END IF;
577 
578     -- reset Global variable
579     HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
580     HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
581 
582     -- Debug info.
583     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
584          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
585                                p_msg_data=>x_msg_data,
586                                p_msg_type=>'WARNING',
587                                p_msg_level=>fnd_log.level_exception);
588     END IF;
589     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
590         hz_utility_v2pub.debug(p_message=>'do_update_location_bo(-)',
591                                p_prefix=>l_debug_prefix,
592                                p_msg_level=>fnd_log.level_procedure);
593     END IF;
594 
595   EXCEPTION
596     WHEN fnd_api.g_exc_error THEN
597       ROLLBACK TO do_update_location_bo_pub;
598 
599       -- reset Global variable
600       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
601       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
602 
603       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
604       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
605       FND_MSG_PUB.ADD;
606 
607       x_return_status := fnd_api.g_ret_sts_error;
608 
609       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
610                                 p_count => x_msg_count,
611                                 p_data  => x_msg_data);
612 
613       -- Debug info.
614       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
615         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
616                                p_msg_data=>x_msg_data,
617                                p_msg_type=>'ERROR',
618                                p_msg_level=>fnd_log.level_error);
619       END IF;
620       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
621         hz_utility_v2pub.debug(p_message=>'do_update_location_bo(-)',
622                                p_prefix=>l_debug_prefix,
623                                p_msg_level=>fnd_log.level_procedure);
624       END IF;
625 
626     WHEN fnd_api.g_exc_unexpected_error THEN
627       ROLLBACK TO do_update_location_bo_pub;
628 
629       -- reset Global variable
630       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
631       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
632 
633       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
634       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
635       FND_MSG_PUB.ADD;
636 
637       x_return_status := fnd_api.g_ret_sts_unexp_error;
638 
639       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
640                                 p_count => x_msg_count,
641                                 p_data  => x_msg_data);
642 
643       -- Debug info.
644       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
645         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
646                                p_msg_data=>x_msg_data,
647                                p_msg_type=>'UNEXPECTED ERROR',
648                                p_msg_level=>fnd_log.level_error);
649       END IF;
650       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
651         hz_utility_v2pub.debug(p_message=>'do_update_location_bo(-)',
652                                p_prefix=>l_debug_prefix,
653                                p_msg_level=>fnd_log.level_procedure);
654       END IF;
655 
656     WHEN OTHERS THEN
657       ROLLBACK TO do_update_location_bo_pub;
658 
659       -- reset Global variable
660       HZ_UTILITY_V2PUB.G_CALLING_API := NULL;
661       HZ_UTILITY_V2PUB.G_CREATED_BY_MODULE := NULL;
662 
663       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
664       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
665       FND_MSG_PUB.ADD;
666 
667       x_return_status := fnd_api.g_ret_sts_unexp_error;
668 
669       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
670       fnd_message.set_token('ERROR' ,SQLERRM);
671       fnd_msg_pub.add;
672 
673       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
674                                 p_count => x_msg_count,
675                                 p_data  => x_msg_data);
676 
677       -- Debug info.
678       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
679         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
680                                p_msg_data=>x_msg_data,
681                                p_msg_type=>'SQL ERROR',
682                                p_msg_level=>fnd_log.level_error);
683       END IF;
684       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
685         hz_utility_v2pub.debug(p_message=>'do_update_location_bo(-)',
686                                p_prefix=>l_debug_prefix,
687                                p_msg_level=>fnd_log.level_procedure);
688       END IF;
689   END do_update_location_bo;
690 
691   PROCEDURE update_location_bo(
692     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
693     p_location_obj        IN            HZ_LOCATION_OBJ,
694     p_created_by_module   IN            VARCHAR2,
695     x_return_status       OUT NOCOPY    VARCHAR2,
696     x_msg_count           OUT NOCOPY    NUMBER,
697     x_msg_data            OUT NOCOPY    VARCHAR2,
698     x_location_id         OUT NOCOPY    NUMBER,
699     x_location_os         OUT NOCOPY    VARCHAR2,
700     x_location_osr        OUT NOCOPY    VARCHAR2
701   ) IS
702     l_location_obj        HZ_LOCATION_OBJ;
703   BEGIN
704     l_location_obj := p_location_obj;
705     do_update_location_bo(
706       p_init_msg_list       => p_init_msg_list,
707       p_location_obj        => l_location_obj,
708       p_created_by_module   => p_created_by_module,
709       p_obj_source          => null,
710       x_return_status       => x_return_status,
711       x_msg_count           => x_msg_count,
712       x_msg_data            => x_msg_data,
713       x_location_id         => x_location_id,
714       x_location_os         => x_location_os,
715       x_location_osr        => x_location_osr
716     );
717   END update_location_bo;
718 
719   PROCEDURE update_location_bo(
720     p_location_obj        IN            HZ_LOCATION_OBJ,
721     p_created_by_module   IN            VARCHAR2,
722     p_obj_source          IN            VARCHAR2 := null,
723     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
724     x_return_status       OUT NOCOPY    VARCHAR2,
725     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
726     x_return_obj          OUT NOCOPY    HZ_LOCATION_OBJ,
727     x_location_id         OUT NOCOPY    NUMBER,
728     x_location_os         OUT NOCOPY    VARCHAR2,
729     x_location_osr        OUT NOCOPY    VARCHAR2
730   ) IS
731     l_msg_count           NUMBER;
732     l_msg_data            VARCHAR2(2000);
733     l_location_obj        HZ_LOCATION_OBJ;
734   BEGIN
735     l_location_obj := p_location_obj;
736     do_update_location_bo(
737       p_init_msg_list       => fnd_api.g_true,
738       p_location_obj        => l_location_obj,
739       p_created_by_module   => p_created_by_module,
740       p_obj_source          => p_obj_source,
741       x_return_status       => x_return_status,
742       x_msg_count           => l_msg_count,
743       x_msg_data            => l_msg_data,
744       x_location_id         => x_location_id,
745       x_location_os         => x_location_os,
746       x_location_osr        => x_location_osr
747     );
748     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
749                     x_return_status   => x_return_status,
750                     x_msg_count       => l_msg_count,
751                     x_msg_data        => l_msg_data);
752     IF FND_API.to_Boolean(p_return_obj_flag) THEN
753       x_return_obj := l_location_obj;
754     END IF;
755   END update_location_bo;
756 
757   -- PROCEDURE do_save_location_bo
758   --
759   -- DESCRIPTION
760   --     Create or update a location business object.
761   PROCEDURE do_save_location_bo(
762     p_init_msg_list     IN            VARCHAR2 := fnd_api.g_false,
763     p_validate_bo_flag  IN            VARCHAR2 := fnd_api.g_true,
764     p_location_obj      IN OUT NOCOPY HZ_LOCATION_OBJ,
765     p_created_by_module IN            VARCHAR2,
766     p_obj_source          IN            VARCHAR2 := null,
767     x_return_status     OUT NOCOPY    VARCHAR2,
768     x_msg_count         OUT NOCOPY    NUMBER,
769     x_msg_data          OUT NOCOPY    VARCHAR2,
770     x_location_id       OUT NOCOPY    NUMBER,
771     x_location_os       OUT NOCOPY    VARCHAR2,
772     x_location_osr      OUT NOCOPY    VARCHAR2
773   ) IS
774     l_return_status            VARCHAR2(30);
775     l_msg_count                NUMBER;
776     l_msg_data                 VARCHAR2(2000);
777     l_create_update_flag       VARCHAR2(1);
778     l_debug_prefix             VARCHAR2(30);
779   BEGIN
780     -- initialize API return status to success.
781     x_return_status := FND_API.G_RET_STS_SUCCESS;
782 
783     -- Initialize message list of p_init_msg_list is set to TRUE.
784     IF FND_API.to_Boolean(p_init_msg_list) THEN
785       FND_MSG_PUB.initialize;
786     END IF;
787 
788     -- Debug info.
789     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
790         hz_utility_v2pub.debug(p_message=>'do_save_location_bo(+)',
791                                p_prefix=>l_debug_prefix,
792                                p_msg_level=>fnd_log.level_procedure);
793     END IF;
794 
795     x_location_id := p_location_obj.location_id;
796     x_location_os := p_location_obj.orig_system;
797     x_location_osr := p_location_obj.orig_system_reference;
798 
799     -- check root business object to determine that it should be
800     -- create or update, call HZ_REGISTRY_VALIDATE_BO_PVT
801     l_create_update_flag := HZ_REGISTRY_VALIDATE_BO_PVT.check_bo_op(
802                               p_entity_id       => x_location_id,
803                               p_entity_os       => x_location_os,
804                               p_entity_osr      => x_location_osr,
805                               p_entity_type     => 'HZ_LOCATIONS',
806                               p_parent_id       => NULL,
807                               p_parent_obj_type => NULL);
808 
809     IF(l_create_update_flag = 'E') THEN
810       FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_ID');
811       FND_MSG_PUB.ADD;
812       FND_MESSAGE.SET_NAME('AR', 'HZ_API_PROPAGATE_OBJECT_ERROR');
813       FND_MESSAGE.SET_TOKEN('OBJECT', 'LOCATION');
814       FND_MSG_PUB.ADD;
815       RAISE FND_API.G_EXC_ERROR;
816     END IF;
817 
818     IF(l_create_update_flag = 'C') THEN
819       do_create_location_bo(
820         p_init_msg_list     => fnd_api.g_false,
821         p_validate_bo_flag  => p_validate_bo_flag,
822         p_location_obj      => p_location_obj,
823         p_created_by_module => p_created_by_module,
824         p_obj_source        => p_obj_source,
825         x_return_status     => x_return_status,
826         x_msg_count         => x_msg_count,
827         x_msg_data          => x_msg_data,
828         x_location_id       => x_location_id,
829         x_location_os       => x_location_os,
830         x_location_osr      => x_location_osr);
831     ELSIF(l_create_update_flag = 'U') THEN
832       do_update_location_bo(
833         p_init_msg_list     => fnd_api.g_false,
834         p_location_obj      => p_location_obj,
835         p_created_by_module => p_created_by_module,
836         p_obj_source        => p_obj_source,
837         x_return_status     => x_return_status,
838         x_msg_count         => x_msg_count,
839         x_msg_data          => x_msg_data,
840         x_location_id       => x_location_id,
841         x_location_os       => x_location_os,
842         x_location_osr      => x_location_osr);
843     ELSE
844       RAISE FND_API.G_EXC_ERROR;
845     END IF;
846 
847     -- Debug info.
848     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
849          hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
850                                p_msg_data=>x_msg_data,
851                                p_msg_type=>'WARNING',
852                                p_msg_level=>fnd_log.level_exception);
853     END IF;
854     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
855         hz_utility_v2pub.debug(p_message=>'do_save_location_bo(-)',
856                                p_prefix=>l_debug_prefix,
857                                p_msg_level=>fnd_log.level_procedure);
858     END IF;
859 
860   EXCEPTION
861     WHEN fnd_api.g_exc_error THEN
862       x_return_status := fnd_api.g_ret_sts_error;
863 
864       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
865                                 p_count => x_msg_count,
866                                 p_data  => x_msg_data);
867 
868       -- Debug info.
869       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
870         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
871                                p_msg_data=>x_msg_data,
872                                p_msg_type=>'ERROR',
873                                p_msg_level=>fnd_log.level_error);
874       END IF;
875       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
876         hz_utility_v2pub.debug(p_message=>'do_save_location_bo(-)',
877                                p_prefix=>l_debug_prefix,
878                                p_msg_level=>fnd_log.level_procedure);
879       END IF;
880 
881     WHEN fnd_api.g_exc_unexpected_error THEN
882       x_return_status := fnd_api.g_ret_sts_unexp_error;
883 
884       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
885                                 p_count => x_msg_count,
886                                 p_data  => x_msg_data);
887 
888       -- Debug info.
889       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
890         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
891                                p_msg_data=>x_msg_data,
892                                p_msg_type=>'UNEXPECTED ERROR',
893                                p_msg_level=>fnd_log.level_error);
894       END IF;
895       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
896         hz_utility_v2pub.debug(p_message=>'do_save_location_bo(-)',
897                                p_prefix=>l_debug_prefix,
898                                p_msg_level=>fnd_log.level_procedure);
899       END IF;
900     WHEN OTHERS THEN
901       x_return_status := fnd_api.g_ret_sts_unexp_error;
902 
903       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
904       fnd_message.set_token('ERROR' ,SQLERRM);
905       fnd_msg_pub.add;
906 
907       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
908                                 p_count => x_msg_count,
909                                 p_data  => x_msg_data);
910 
911       -- Debug info.
912       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
913         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
914                                p_msg_data=>x_msg_data,
915                                p_msg_type=>'SQL ERROR',
916                                p_msg_level=>fnd_log.level_error);
917       END IF;
918       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
919         hz_utility_v2pub.debug(p_message=>'do_save_location_bo(-)',
920                                p_prefix=>l_debug_prefix,
921                                p_msg_level=>fnd_log.level_procedure);
922       END IF;
923   END do_save_location_bo;
924 
925   PROCEDURE save_location_bo(
926     p_init_msg_list       IN            VARCHAR2 := fnd_api.g_false,
927     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
928     p_location_obj        IN            HZ_LOCATION_OBJ,
929     p_created_by_module   IN            VARCHAR2,
930     x_return_status       OUT NOCOPY    VARCHAR2,
931     x_msg_count           OUT NOCOPY    NUMBER,
932     x_msg_data            OUT NOCOPY    VARCHAR2,
933     x_location_id         OUT NOCOPY    NUMBER,
934     x_location_os         OUT NOCOPY    VARCHAR2,
935     x_location_osr        OUT NOCOPY    VARCHAR2
936   ) IS
937     l_msg_count           NUMBER;
938     l_msg_data            VARCHAR2(2000);
939     l_location_obj        HZ_LOCATION_OBJ;
940   BEGIN
941     l_location_obj := p_location_obj;
942     do_save_location_bo(
943       p_init_msg_list       => p_init_msg_list,
944       p_validate_bo_flag    => p_validate_bo_flag,
945       p_location_obj        => l_location_obj,
946       p_created_by_module   => p_created_by_module,
947       p_obj_source          => null,
948       x_return_status       => x_return_status,
949       x_msg_count           => x_msg_count,
950       x_msg_data            => x_msg_data,
951       x_location_id         => x_location_id,
952       x_location_os         => x_location_os,
953       x_location_osr        => x_location_osr
954     );
955   END save_location_bo;
956 
957   PROCEDURE save_location_bo(
958     p_validate_bo_flag    IN            VARCHAR2 := fnd_api.g_true,
959     p_location_obj        IN            HZ_LOCATION_OBJ,
960     p_created_by_module   IN            VARCHAR2,
961     p_obj_source          IN            VARCHAR2 := null,
962     p_return_obj_flag     IN            VARCHAR2 := fnd_api.g_true,
963     x_return_status       OUT NOCOPY    VARCHAR2,
964     x_messages            OUT NOCOPY    HZ_MESSAGE_OBJ_TBL,
965     x_return_obj          OUT NOCOPY    HZ_LOCATION_OBJ,
966     x_location_id         OUT NOCOPY    NUMBER,
967     x_location_os         OUT NOCOPY    VARCHAR2,
968     x_location_osr        OUT NOCOPY    VARCHAR2
969   ) IS
970     l_msg_count           NUMBER;
971     l_msg_data            VARCHAR2(2000);
972     l_location_obj        HZ_LOCATION_OBJ;
973   BEGIN
974     l_location_obj := p_location_obj;
975     do_save_location_bo(
976       p_init_msg_list       => fnd_api.g_true,
977       p_validate_bo_flag    => p_validate_bo_flag,
978       p_location_obj        => l_location_obj,
979       p_created_by_module   => p_created_by_module,
980       p_obj_source          => p_obj_source,
981       x_return_status       => x_return_status,
982       x_msg_count           => l_msg_count,
983       x_msg_data            => l_msg_data,
984       x_location_id         => x_location_id,
985       x_location_os         => x_location_os,
986       x_location_osr        => x_location_osr
987     );
988     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
989                     x_return_status   => x_return_status,
990                     x_msg_count       => l_msg_count,
991                     x_msg_data        => l_msg_data);
992     IF FND_API.to_Boolean(p_return_obj_flag) THEN
993       x_return_obj := l_location_obj;
994     END IF;
995   END save_location_bo;
996 
997  --------------------------------------
998   --
999   -- PROCEDURE get_location_bo
1000   --
1001   -- DESCRIPTION
1002   --     Get a logical location.
1003   --
1004   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
1005   --
1006   -- ARGUMENTS
1007   --   IN:
1008   --     p_init_msg_list      Initialize message stack if it is set to  FND_API.G_TRUE. Default is FND_API.G_FALSE.
1009  --       p_party_id          party ID.
1010  --       p_location_id     location ID. If this id is not passed in, multiple site objects will be returned.
1011   --     p_location_os          location orig system.
1012   --     p_location_osr         location orig system reference.
1013   --
1014   --   OUT:
1015   --     x_location_objs         Logical location records.
1016   --     x_return_status      Return status after the call. The status can
1017   --                          be fnd_api.g_ret_sts_success (success),
1018   --                          fnd_api.g_ret_sts_error (error),
1019   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
1020   --     x_msg_count          Number of messages in message stack.
1021   --     x_msg_data           Message text if x_msg_count is 1.
1022   --
1023   -- NOTES
1024   --
1025   -- MODIFICATION HISTORY
1026   --
1027   --
1028   --   1-JUNE-2005   AWU                Created.
1029   --
1030 
1031 /*
1032 The Get location API Procedure is a retrieval service that returns a full location business object.
1033 The user identifies a particular location business object using the TCA identifier and/or
1034 the object Source System information. Upon proper validation of the object,
1035 the full location business object is returned. The object consists of all data included within
1036 the location business object, at all embedded levels. This includes the set of all data stored
1037 in the TCA tables for each embedded entity.
1038 
1039 To retrieve the appropriate embedded business objects within the location business object,
1040 the Get procedure calls the equivalent procedure for the following embedded objects:
1041 
1042 To retrieve the appropriate embedded entities within the location business object,
1043 the Get procedure returns all records for the particular location from these TCA entity tables:
1044 
1045 Embedded TCA Entity	Mandatory	Multiple	TCA Table Entities
1046 
1047 Location		Y		N	HZ_LOCATIONS
1048 */
1049 
1050   PROCEDURE get_location_bo (
1051     p_init_msg_list   IN  VARCHAR2 := FND_API.G_FALSE,
1052     p_location_id     IN  NUMBER,
1053     p_location_os     IN  VARCHAR2,
1054     p_location_osr    IN  VARCHAR2,
1055     x_location_obj    OUT NOCOPY	HZ_LOCATION_OBJ,
1056     x_return_status   OUT NOCOPY	VARCHAR2,
1057     x_msg_count       OUT NOCOPY	NUMBER,
1058     x_msg_data        OUT NOCOPY	VARCHAR2
1059   ) IS
1060     l_debug_prefix    VARCHAR2(30) := '';
1061     l_location_id     NUMBER;
1062     l_location_os     VARCHAR2(30);
1063     l_location_osr    VARCHAR2(255);
1064 
1065     CURSOR c1(l_loc_id NUMBER) IS
1066       SELECT HZ_LOCATION_OBJ(
1067         NULL, --P_ACTION_TYPE,
1068         NULL, --COMMON_OBJ_ID
1069         LOC.LOCATION_ID,
1070         NULL, --ORIG_SYSTEM,
1071         NULL, --ORIG_SYSTEM_REFERENCE,
1072         LOC.COUNTRY,
1073         LOC.ADDRESS1,
1074         LOC.ADDRESS2,
1075         LOC.ADDRESS3,
1076         LOC.ADDRESS4,
1077         LOC.CITY,
1078         LOC.POSTAL_CODE,
1079         LOC.STATE,
1080         LOC.PROVINCE,
1081         LOC.COUNTY,
1082         LOC.ADDRESS_KEY,
1083         LOC.ADDRESS_STYLE,
1084         LOC.VALIDATED_FLAG,
1085         LOC.ADDRESS_LINES_PHONETIC,
1086         LOC.POSTAL_PLUS4_CODE,
1087         LOC.POSITION,
1088         LOC.LOCATION_DIRECTIONS,
1089         LOC.ADDRESS_EFFECTIVE_DATE,
1090         LOC.ADDRESS_EXPIRATION_DATE,
1091         LOC.CLLI_CODE,
1092         LOC.LANGUAGE,
1093         LOC.SHORT_DESCRIPTION,
1094         LOC.DESCRIPTION,
1095         LOC_HIERARCHY_ID,
1096         LOC.SALES_TAX_GEOCODE,
1097         LOC.SALES_TAX_INSIDE_CITY_LIMITS,
1098         LOC.FA_LOCATION_ID,
1099         LOC.TIMEZONE_ID,
1100         LOC.ATTRIBUTE_CATEGORY,
1101         LOC.ATTRIBUTE1, LOC.ATTRIBUTE2, LOC.ATTRIBUTE3, LOC.ATTRIBUTE4,
1102         LOC.ATTRIBUTE5, LOC.ATTRIBUTE6, LOC.ATTRIBUTE7, LOC.ATTRIBUTE8,
1103         LOC.ATTRIBUTE9, LOC.ATTRIBUTE10, LOC.ATTRIBUTE11, LOC.ATTRIBUTE12,
1104         LOC.ATTRIBUTE13, LOC.ATTRIBUTE14, LOC.ATTRIBUTE15, LOC.ATTRIBUTE16,
1105         LOC.ATTRIBUTE17, LOC.ATTRIBUTE18, LOC.ATTRIBUTE19, LOC.ATTRIBUTE20,
1106         LOC.PROGRAM_UPDATE_DATE,
1107         LOC.CREATED_BY_MODULE,
1108         HZ_EXTRACT_BO_UTIL_PVT.GET_USER_NAME(LOC.CREATED_BY),
1109         LOC.CREATION_DATE,
1110         LOC.LAST_UPDATE_DATE,
1111         HZ_EXTRACT_BO_UTIL_PVT.GET_USER_NAME(LOC.LAST_UPDATED_BY),
1112         LOC.ACTUAL_CONTENT_SOURCE,
1113         LOC.DELIVERY_POINT_CODE,
1114         LOC.GEOMETRY_STATUS_CODE,
1115         LOC.GEOMETRY,
1116         HZ_ORIG_SYS_REF_OBJ_TBL(),
1117         HZ_EXT_ATTRIBUTE_OBJ_TBL())
1118       FROM HZ_LOCATIONS LOC
1119       WHERE LOCATION_ID = l_loc_id;
1120 
1121   BEGIN
1122     -- initialize API return status to success.
1123     x_return_status := FND_API.G_RET_STS_SUCCESS;
1124 
1125     -- Initialize message list if p_init_msg_list is set to TRUE
1126     IF FND_API.to_Boolean(p_init_msg_list) THEN
1127       FND_MSG_PUB.initialize;
1128     END IF;
1129 
1130     -- Debug info.
1131     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1132       hz_utility_v2pub.debug(p_message=>'hz_location_bo_pub.get_location_bo(+)',
1133                              p_prefix=>l_debug_prefix,
1134                              p_msg_level=>fnd_log.level_procedure);
1135     END IF;
1136 
1137     -- check if pass in contact_point_id and/or os+osr
1138     -- extraction validation logic is same as update
1139 
1140     l_location_id := p_location_id;
1141     l_location_os := p_location_os;
1142     l_location_osr := p_location_osr;
1143 
1144     HZ_EXTRACT_BO_UTIL_PVT.validate_ssm_id(
1145       px_id              => l_location_id,
1146       px_os              => l_location_os,
1147       px_osr             => l_location_osr,
1148       p_obj_type         => 'HZ_LOCATIONS',
1149       x_return_status    => x_return_status,
1150       x_msg_count        => x_msg_count,
1151       x_msg_data         => x_msg_data);
1152 
1153     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1154       RAISE fnd_api.g_exc_error;
1155     END IF;
1156 
1157     OPEN c1(l_location_id);
1158     FETCH c1 into x_location_obj;
1159     CLOSE c1;
1160 
1161     hz_extract_ext_attri_bo_pvt.get_ext_attribute_bos(
1162       p_init_msg_list      => fnd_api.g_false,
1163       p_ext_object_id      => x_location_obj.location_id,
1164       p_ext_object_name    => 'HZ_LOCATIONS',
1165       p_action_type        => NULL,
1166       x_ext_attribute_objs => x_location_obj.ext_attributes_objs,
1167       x_return_status      => x_return_status,
1168       x_msg_count          => x_msg_count,
1169       x_msg_data           => x_msg_data);
1170 
1171     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1172       RAISE FND_API.G_EXC_ERROR;
1173     END IF;
1174 
1175     -- Debug info.
1176     IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
1177       hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1178                                              p_msg_data=>x_msg_data,
1179                                              p_msg_type=>'WARNING',
1180                                              p_msg_level=>fnd_log.level_exception);
1181     END IF;
1182 
1183     -- Debug info.
1184     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1185       hz_utility_v2pub.debug(p_message=>'hz_location_bo_pub.get_location_bo (-)',
1186                              p_prefix=>l_debug_prefix,
1187                              p_msg_level=>fnd_log.level_procedure);
1188     END IF;
1189   EXCEPTION
1190     WHEN fnd_api.g_exc_error THEN
1191       x_return_status := fnd_api.g_ret_sts_error;
1192       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1193                                 p_count => x_msg_count,
1194                                 p_data  => x_msg_data);
1195 
1196       -- Debug info.
1197       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1198         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1199                                                p_msg_data=>x_msg_data,
1200                                                p_msg_type=>'ERROR',
1201                                                p_msg_level=>fnd_log.level_error);
1202       END IF;
1203       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1204         hz_utility_v2pub.debug(p_message=>'hz_location_bo_pub.get_location_bo (-)',
1205                                p_prefix=>l_debug_prefix,
1206                                p_msg_level=>fnd_log.level_procedure);
1207       END IF;
1208     WHEN fnd_api.g_exc_unexpected_error THEN
1209       x_return_status := fnd_api.g_ret_sts_unexp_error;
1210       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1211                                 p_count => x_msg_count,
1212                                 p_data  => x_msg_data);
1213 
1214       -- Debug info.
1215       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1216         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1217                                                p_msg_data=>x_msg_data,
1218                                                p_msg_type=>'UNEXPECTED ERROR',
1219                                                p_msg_level=>fnd_log.level_error);
1220       END IF;
1221       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1222         hz_utility_v2pub.debug(p_message=>'hz_location_bo_pub.get_location_bo (-)',
1223                                p_prefix=>l_debug_prefix,
1224                                p_msg_level=>fnd_log.level_procedure);
1225       END IF;
1226     WHEN OTHERS THEN
1227       x_return_status := fnd_api.g_ret_sts_unexp_error;
1228       fnd_message.set_name('AR', 'HZ_API_OTHERS_EXCEP');
1229       fnd_message.set_token('ERROR' ,SQLERRM);
1230       fnd_msg_pub.add;
1231 
1232       fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
1233                                 p_count => x_msg_count,
1234                                 p_data  => x_msg_data);
1235 
1236       -- Debug info.
1237       IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
1238         hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
1239                                                p_msg_data=>x_msg_data,
1240                                                p_msg_type=>'SQL ERROR',
1241                                                p_msg_level=>fnd_log.level_error);
1242       END IF;
1243       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1244         hz_utility_v2pub.debug(p_message=>'hz_location_bo_pub.get_location_bo (-)',
1245                                p_prefix=>l_debug_prefix,
1246                                p_msg_level=>fnd_log.level_procedure);
1247       END IF;
1248   END get_location_bo;
1249 
1250   PROCEDURE get_location_bo (
1251         p_location_id           IN      NUMBER,
1252         p_location_os           IN      VARCHAR2,
1253         p_location_osr          IN      VARCHAR2,
1254         x_location_obj          OUT NOCOPY      HZ_LOCATION_OBJ,
1255         x_return_status         OUT NOCOPY      VARCHAR2,
1256         x_messages              OUT NOCOPY      HZ_MESSAGE_OBJ_TBL
1257   ) IS
1258     l_msg_count             NUMBER;
1259     l_msg_data              VARCHAR2(2000);
1260   BEGIN
1261     get_location_bo(
1262       p_init_msg_list   => FND_API.g_true,
1263       p_location_id     => p_location_id,
1264       p_location_os     => p_location_os,
1265       p_location_osr    => p_location_osr,
1266       x_location_obj    => x_location_obj,
1267       x_return_status   => x_return_status,
1268       x_msg_count       => l_msg_count,
1269       x_msg_data        => l_msg_data
1270     );
1271     x_messages := HZ_PARTY_BO_PVT.return_all_messages(
1272                     x_return_status   => x_return_status,
1273                     x_msg_count       => l_msg_count,
1274                     x_msg_data        => l_msg_data);
1275   END get_location_bo;
1276 
1277 END hz_location_bo_pub;