DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_BES_BO_DEFINITION_PVT

Source


1 PACKAGE BODY HZ_BES_BO_DEFINITION_PVT AS
2 /* $Header: ARHBODVB.pls 120.2 2006/05/01 18:54:58 smattegu noship $ */
3 
4 /**
5  * PROCEDURE update_bod
6  *
7  * DESCRIPTION
8  *   Update Business Object Definition
9  *
10  * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11  *
12  * ARGUMENTS
13  *   IN:
14  *     p_init_msg_list                Initialize message stack if it is set to
15  *                                    FND_API.G_TRUE. Default is FND_API.G_FALSE.
16  *     p_business_object_code         Business Object Code.
17  *     p_child_bo_code                Child BO Code.
18  *     p_entity_name                  Entity Name.
19  *     p_user_mandated_flag           User Mandated Flag.
20  *   OUT:
21  *     x_return_status                Return status after the call. The status can
22  *                                    be FND_API.G_RET_STS_SUCCESS (success),
23  *                                    FND_API.G_RET_STS_ERROR (error),
24  *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
25  *     x_msg_count                    Number of messages in message stack.
26  *     x_msg_data                     Message text if x_msg_count is 1.
27  *
28  */
29 
30 PROCEDURE update_bod (
31   p_init_msg_list             IN  VARCHAR2 := FND_API.G_FALSE,
32   p_business_object_code      IN  VARCHAR2,
33   p_child_bo_code             IN  VARCHAR2,
34   p_entity_name               IN  VARCHAR2,
35   p_user_mandated_flag        IN  VARCHAR2,
36   p_object_version_number     IN OUT NOCOPY  NUMBER,
37   x_return_status             OUT NOCOPY     VARCHAR2,
38   x_msg_count                 OUT NOCOPY     NUMBER,
39   x_msg_data                  OUT NOCOPY     VARCHAR2
40 ) IS
41   l_debug_prefix              VARCHAR2(30) := '';
42   l_tmf                       VARCHAR2(1);
43   l_umf                       VARCHAR2(1);
44   l_ovn                       NUMBER;
45   l_bvn                       NUMBER;
46   l_bo_found                  BOOLEAN;
47   l_count                     NUMBER;
48   l_top_bo                    VARCHAR2(30);
49   l_req_id                    NUMBER;
50 BEGIN
51   --Standard start of API savepoint
52   SAVEPOINT update_bod_pvt;
53 
54   -- Debug info.
55   IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
56     hz_utility_v2pub.debug(p_message=>'update_bod (+)',
57                            p_prefix=>l_debug_prefix,
58                            p_msg_level=>fnd_log.level_procedure);
59   END IF;
60 
61   --Initialize message list if p_init_msg_list is set to TRUE.
62   IF FND_API.to_Boolean(p_init_msg_list) THEN
63     FND_MSG_PUB.initialize;
64   END IF;
65 
66   --Initialize API return status to success.
67   x_return_status := FND_API.G_RET_STS_SUCCESS;
68 
69   -- check whether record has been updated by another user. If not, lock it.
70   BEGIN
71     SELECT OBJECT_VERSION_NUMBER,
72            USER_MANDATED_FLAG,
73            TCA_MANDATED_FLAG
74     INTO   l_ovn, l_umf, l_tmf
75     FROM   HZ_BUS_OBJ_DEFINITIONS
76     WHERE  business_object_code = p_business_object_code
77     AND    entity_name = p_entity_name
78     AND    nvl(child_bo_code, 'X') = nvl(p_child_bo_code, 'X')
79     FOR UPDATE NOWAIT;
80 
81     IF NOT((p_object_version_number IS NULL AND l_ovn IS NULL) OR
82            (p_object_version_number IS NOT NULL AND l_ovn IS NOT NULL AND
83             p_object_version_number = l_ovn)) THEN
84       FND_MESSAGE.SET_NAME('AR', 'HZ_API_RECORD_CHANGED');
85       FND_MESSAGE.SET_TOKEN('TABLE', 'HZ_BUS_OBJ_DEFINITIONS');
86       FND_MSG_PUB.ADD;
87       RAISE FND_API.G_EXC_ERROR;
88     END IF;
89   EXCEPTION
90     WHEN NO_DATA_FOUND THEN
91       FND_MESSAGE.SET_NAME('AR', 'HZ_API_NO_RECORD');
92       FND_MESSAGE.SET_TOKEN('RECORD', 'business object definition');
93       FND_MESSAGE.SET_TOKEN('VALUE', 'Business Object Code: '||p_business_object_code||' Entity Name: '||p_entity_name||' Child BO Code: '||p_child_bo_code);
94       FND_MSG_PUB.ADD;
95       RAISE FND_API.G_EXC_ERROR;
96   END;
97 
98   p_object_version_number := nvl(l_ovn, 1) + 1;
99 
100   IF(l_tmf = 'Y') THEN
101     IF(p_child_bo_code IS NULL) THEN
102       FND_MESSAGE.SET_NAME('AR', 'HZ_BES_BO_BOD_MAND_ENT_ERROR');
103       FND_MESSAGE.SET_TOKEN('ENTITY_NAME', p_entity_name);
104     ELSE
105       FND_MESSAGE.SET_NAME('AR', 'HZ_BES_BO_BOD_MAND_OBJ_ERROR');
106       FND_MESSAGE.SET_TOKEN('CHILD_BO_CODE', p_child_bo_code);
107     END IF;
108     FND_MESSAGE.SET_TOKEN('BO_CODE', p_business_object_code);
109     FND_MSG_PUB.ADD;
110     RAISE FND_API.G_EXC_ERROR;
111   END IF;
112 
113   -- Not doing any update if the existing flag setting is same as
114   -- user pass in
115   IF NOT(l_umf = p_user_mandated_flag) THEN
116     UPDATE HZ_BUS_OBJ_DEFINITIONS
117     SET object_version_number = p_object_version_number,
118         user_mandated_flag = p_user_mandated_flag,
119         last_update_date = HZ_UTILITY_V2PUB.last_update_date,
120         last_updated_by = HZ_UTILITY_V2PUB.last_updated_by,
121         last_update_login = HZ_UTILITY_V2PUB.last_update_login
122     WHERE business_object_code = p_business_object_code
123     AND entity_name = p_entity_name
124     AND nvl(child_bo_code, 'X') = nvl(p_child_bo_code, 'X');
125 
126     -- Update bo version number
127     FOR l_count in 1..4 LOOP
128       CASE
129         WHEN l_count = 1 THEN l_top_bo := 'ORG';
130         WHEN l_count = 2 THEN l_top_bo := 'PERSON';
131         WHEN l_count = 3 THEN l_top_bo := 'ORG_CUST';
132         WHEN l_count = 4 THEN l_top_bo := 'PERSON_CUST';
133       END CASE;
134 
135       HZ_BES_BO_UTIL_PKG.entity_in_bo(
136         p_bo_code       => l_top_bo,
137         p_ebo_code       =>p_business_object_code,
138         p_child_bo_code => p_child_bo_code,
139         p_entity_name   => p_entity_name,
140         x_return_status => l_bo_found );
141 
142       IF(l_bo_found) THEN
143         UPDATE HZ_BUS_OBJ_DEFINITIONS
144         SET bo_version_number = nvl(bo_version_number,1) + 1,
145             last_update_date = HZ_UTILITY_V2PUB.last_update_date,
146             last_updated_by = HZ_UTILITY_V2PUB.last_updated_by,
147             last_update_login = HZ_UTILITY_V2PUB.last_update_login
148         WHERE business_object_code = l_top_bo
149         AND root_node_flag = 'Y'
150         AND child_bo_code IS NULL;
151       END IF;
152     END LOOP;
153 
154     --Run Concurrent Request
155     --TCA Business Object Events: Generate Infrastructure Packages Program
156     l_req_id := FND_REQUEST.SUBMIT_REQUEST(
157                   'AR', 'ARHBOGEN', 'TCA BES - Generate Infrastructure',
158                   sysdate, FALSE);
159 
160     IF(l_req_id IS NULL or l_req_id = 0) THEN
161       FND_MESSAGE.SET_NAME('AR', 'AR_CUST_CONC_ERROR');
162       FND_MSG_PUB.ADD;
163       RAISE FND_API.G_EXC_ERROR;
164     END IF;
165   END IF;
166 
167   --Standard call to get message count and if count is 1, get message info.
168   FND_MSG_PUB.Count_And_Get(
169       p_encoded => FND_API.G_FALSE,
170       p_count => x_msg_count,
171       p_data  => x_msg_data);
172 
173   -- Debug info.
174   IF fnd_log.level_exception>=fnd_log.g_current_runtime_level THEN
175     hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
176                                            p_msg_data=>x_msg_data,
177                                            p_msg_type=>'WARNING',
178                                            p_msg_level=>fnd_log.level_exception);
179   END IF;
180 
181   IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
182     hz_utility_v2pub.debug(p_message=>'update_bod (-)',
183                            p_prefix=>l_debug_prefix,
184                            p_msg_level=>fnd_log.level_procedure);
185   END IF;
186 
187 EXCEPTION
188   WHEN FND_API.G_EXC_ERROR THEN
189     ROLLBACK TO update_bod_pvt;
190     x_return_status := FND_API.G_RET_STS_ERROR;
191 
192     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
193                               p_count => x_msg_count,
194                               p_data  => x_msg_data);
195 
196     -- Debug info.
197     IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
198       hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
199                                              p_msg_data=>x_msg_data,
200                                              p_msg_type=>'ERROR',
201                                              p_msg_level=>fnd_log.level_error);
202     END IF;
203 
204     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
205       hz_utility_v2pub.debug(p_message=>'update_bod (-)',
206                              p_prefix=>l_debug_prefix,
207                              p_msg_level=>fnd_log.level_procedure);
208     END IF;
209 
210   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
211     ROLLBACK TO update_bod_pvt;
212     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
213 
214     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
215                               p_count => x_msg_count,
216                               p_data  => x_msg_data);
217 
218     -- Debug info.
219     IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
220       hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
221                                              p_msg_data=>x_msg_data,
222                                              p_msg_type=>'UNEXPECTED ERROR',
223                                              p_msg_level=>fnd_log.level_error);
224     END IF;
225 
226     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
227       hz_utility_v2pub.debug(p_message=>'update_bod (-)',
228                              p_prefix=>l_debug_prefix,
229                              p_msg_level=>fnd_log.level_procedure);
230     END IF;
231 
232   WHEN OTHERS THEN
233     ROLLBACK TO update_bod_pvt;
234     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
235     FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
236     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
237     FND_MSG_PUB.ADD;
238 
239     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
240                               p_count => x_msg_count,
241                               p_data  => x_msg_data);
242 
243     -- Debug info.
244     IF fnd_log.level_error>=fnd_log.g_current_runtime_level THEN
245       hz_utility_v2pub.debug_return_messages(p_msg_count=>x_msg_count,
246                                              p_msg_data=>x_msg_data,
247                                              p_msg_type=>'SQL ERROR',
248                                              p_msg_level=>fnd_log.level_error);
249     END IF;
250 
251     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
252       hz_utility_v2pub.debug(p_message=>'update_bod (-)',
253                              p_prefix=>l_debug_prefix,
254                              p_msg_level=>fnd_log.level_procedure);
255     END IF;
256 END update_bod;
257 
258 END HZ_BES_BO_DEFINITION_PVT;