[Home] [Help]
PACKAGE BODY: APPS.CSM_HZ_LOCATION_PKG
Source
1 PACKAGE BODY CSM_HZ_LOCATION_PKG AS
2 /* $Header: csmuhzlb.pls 120.2.12020000.4 2013/04/09 11:26:02 saradhak ship $ */
3
4 error EXCEPTION;
5
6
7 /*** Globals ***/
8 g_object_name CONSTANT VARCHAR2(30) := 'CSM_HZ_LOCATION_PKG';
9 g_pub_name CONSTANT VARCHAR2(30) := 'CSM_HZ_LOCATIONS';
10 g_debug_level NUMBER; -- debug level
11
12 /* Select all inq records */
13 CURSOR c_hz_location( b_user_name VARCHAR2, b_tranid NUMBER) is
14 SELECT *
15 FROM CSM_HZ_LOCATIONS_INQ
16 WHERE tranid$$ = b_tranid
17 AND clid$$cs = b_user_name;
18
19 procedure create_ship_to_address(p_user_name IN VARCHAR2,l_ta_id IN NUMBER,l_adrs_line_1 IN VARCHAR2
20 ,l_adrs_line_2 IN VARCHAR2,l_adrs_line_3 IN VARCHAR2,l_region_1 IN VARCHAR2,l_region_2 IN VARCHAR2
21 ,l_region_3 IN VARCHAR2
22 ,l_city IN VARCHAR2,l_country IN VARCHAR2,l_pincode IN VARCHAR2
23 ,l_phone1 IN VARCHAR2, l_phone2 IN VARCHAR2, l_phone3 IN VARCHAR2
24 ,x_loc_id IN OUT NUMBER,x_cust_id OUT NOCOPY NUMBER, x_ovn IN OUT NUMBER
25 ,l_ret OUT NOCOPY VARCHAR2 ,l_msg_cnt OUT NOCOPY NUMBER ,l_msg_data OUT NOCOPY VARCHAR2)
26 Is
27
28 l_rs_type VARCHAR2(100):='RS_EMPLOYEE';
29 l_rs_id NUMBER;
30 l_user_id NUMBER;
31 l_resp_id NUMBER;
32 l_app_id NUMBER;
33 l_org_id NUMBER;
34
35 l_style VARCHAR2(200):='GENERIC';
36
37 CURSOR c_style IS
38 select address_style from fnd_territories_vl where address_style is not null
39 and TERRITORY_CODE=l_country
40 UNION ALL SELECT 'GENERIC' FROM DUAL;
41
42 BEGIN
43
44 SELECT user_id,responsibility_id, app_id ,org_id,resource_id
45 INTO l_user_id,l_resp_id,l_app_id,l_org_id,l_rs_id
46 FROM asg_user WHERE user_name=p_user_name;
47
48 fnd_global.apps_initialize(l_user_id, l_resp_id, l_app_id);
49 --mo_global.set_policy_context('S',l_org_id); also done by CSP api ..so leave it to them
50 MO_GLOBAL.INIT ('CSM');
51
52 CSP_SHIP_TO_ADDRESS_PVT.ship_to_address_handler(p_task_assignment_id=> l_ta_id,p_resource_type=>l_rs_type,
53 p_resource_id => l_rs_id, p_customer_id => x_cust_id,p_location_id => x_loc_id
54 ,p_style => l_style,p_address_line_1 =>l_adrs_line_1,p_address_line_2 =>l_adrs_line_2 ,p_address_line_3 =>l_adrs_line_3
55 ,p_country =>l_country , p_postal_code => l_pincode, p_town_or_city => l_city
56 ,p_telephone_number_1 =>l_phone1 ,p_telephone_number_2 =>l_phone2 ,p_telephone_number_3 =>l_phone3
57 ,p_tax_name =>null,p_region_1=>l_region_1,p_region_2=>l_region_2,p_region_3=>null
58 ,p_loc_information13 => null ,p_loc_information14 => null ,p_loc_information15 => null ,p_loc_information16 => null
59 ,p_loc_information17 => null ,p_loc_information18 => null,p_loc_information19 => null
60 ,p_loc_information20 => null ,p_timezone => null ,p_primary_flag=> null ,p_status => null
61 ,p_api_version_number => 1.0,p_init_msg_list => FND_API.G_TRUE , p_commit => FND_API.G_TRUE
62 ,p_attribute_category => null ,p_attribute1 => null ,p_attribute2 => null
63 ,p_attribute3 => null ,p_attribute4 => null ,p_attribute5 => null
64 ,p_attribute6 => null,p_attribute7 => null ,p_attribute8 => null
65 ,p_attribute9 => null,p_attribute10 => null ,p_attribute11 => null
66 ,p_attribute12 => null,p_attribute13 => null ,p_attribute14 => null
67 ,p_attribute15 => null,p_attribute16 => null ,p_attribute17 => null
68 ,p_attribute18 => null,p_attribute19 => null ,p_attribute20 => null
69 ,p_object_version_number => x_ovn ,x_return_status => l_ret ,x_msg_count => l_msg_cnt ,x_msg_data => l_msg_data
70 );
71
72 END create_ship_to_address;
73
74 /***
75 This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
76 ***/
77 PROCEDURE APPLY_INSERT
78 (
79 p_record IN c_hz_location%ROWTYPE,
80 p_error_msg out nocopy VARCHAR2,
81 x_return_status IN out nocopy VARCHAR2
82 ) IS
83
84 --Variable Declarations
85 x_ovn NUMBER := 1;
86 l_msg_count NUMBER;
87 l_msg_data VARCHAR2(4000);
88 l_location_rec hz_location_v2pub.location_rec_type;
89 l_party_site_rec hz_party_site_v2pub.party_site_rec_type;
90 l_location_id NUMBER := NULL;
91 l_person_party_id NUMBER;
92 l_user_id NUMBER;
93 l_party_site_id NUMBER := NULL;
94 l_party_site_number VARCHAR2(30);
95
96 x_loc_id NUMBER;
97 x_cust_id NUMBER;
98
99 CURSOR c_get_party_site (c_location_id NUMBER)
100 IS
101 SELECT PARTY_SITE_ID FROM HZ_PARTY_SITES
102 WHERE LOCATION_ID = c_location_id;
103
104 CURSOR c_get_party_id (c_user VARCHAR2)
105 IS
106 SELECT PERSON_PARTY_ID
107 FROM ASG_USER asg,
108 FND_USER fnd
109 WHERE asg.USER_NAME = c_user
110 AND fnd.USER_ID = asg.USER_ID;
111
112 CURSOR c_req_hdr(b_uid VARCHAR2,tid number,lid number)
113 IS
117
114 SELECT TASK_ASSIGNMENT_ID FROM CSM_REQ_HEADERS_INQ
115 WHERE tranid$$ = tid AND clid$$cs = b_uid
116 AND SHIP_TO_LOCATION_ID = lid AND ADDRESS_TYPE='S';
118 l_ta_id NUMBER:=NULL;
119 BEGIN
120
121 x_return_status := FND_API.G_RET_STS_SUCCESS;
122 CSM_UTIL_PKG.LOG('Entering CSM_HZ_LOCATION_PKG.APPLY_INSERT for Special Location Id ' || p_record.LOCATION_ID ,
123 'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
124
125
126 OPEN c_get_party_site (p_record.location_id);
127 FETCH c_get_party_site INTO l_party_site_id;
128 CLOSE c_get_party_site ;
129
130
131 IF l_party_site_id IS NULL THEN
132
133 OPEN c_req_hdr( p_record.CLID$$CS,p_record.tranid$$,p_record.location_id );
134 FETCH c_req_hdr INTO l_ta_id;
135 CLOSE c_req_hdr ;
136
137 IF l_ta_id IS NULL THEN --Personal Task
138
139 l_location_rec.location_id := p_record.location_id;
140 l_location_rec.country := p_record.country;
141 l_location_rec.address1 := p_record.address1;
142 l_location_rec.address2 := p_record.address2;
143 l_location_rec.address3 := p_record.address3;
144 l_location_rec.address4 := p_record.address4;
145 l_location_rec.city := p_record.city;
146 l_location_rec.postal_code := p_record.postal_code;
147 l_location_rec.state := p_record.state;
148 l_location_rec.province := p_record.province;
149 l_location_rec.county := p_record.county;
150 l_location_rec.address_lines_phonetic := p_record.address_lines_phonetic;
151 l_location_rec.created_by_module := 'CSFDEAR';
152
153 CSM_UTIL_PKG.LOG('Before calling hz_location_v2pub.create_location for Location ID ' || p_record.LOCATION_ID ,
154 'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_EVENT);
155
156 --Call the location API to create a new location record.
157 hz_location_v2pub.create_location (
158 p_init_msg_list => FND_API.G_TRUE,
159 p_location_rec => l_location_rec,
160 x_location_id => l_location_id,
161 x_return_status => x_return_status,
162 x_msg_count => l_msg_count,
163 x_msg_data => l_msg_data
164 );
165
166 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
167 /*** exception occurred in API -> return errmsg ***/
168 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
169 (
170 p_api_error => TRUE
171 );
172 CSM_UTIL_PKG.log( 'Error in hz_location_v2pub.create_location ' || p_error_msg
173 || ' for Location ID ' || p_record.LOCATION_ID,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
174 x_return_status := FND_API.G_RET_STS_ERROR;
175 RETURN;
176 END IF;
177
178 --Get the person party id for the user from fnd user.
179 OPEN c_get_party_id (p_record.CLID$$CS);
180 FETCH c_get_party_id INTO l_person_party_id;
181 CLOSE c_get_party_id ;
182
183 l_party_site_rec.location_id := l_location_id;
184 l_party_site_rec.party_id := l_person_party_id;
185 l_party_site_rec.created_by_module := 'CSFDEAR'; -- Calling Module 'CSF: Departure Arrival'
186
187 -- If the profile "Generate Party Number" is No, then
188 -- TCA expects the caller to pass the party number.
189 IF fnd_profile.VALUE('HZ_GENERATE_PARTY_SITE_NUMBER') = 'N' THEN
190 SELECT hz_party_site_number_s.NEXTVAL INTO l_party_site_rec.party_site_number
191 FROM dual;
192 END IF;
193
194 hz_party_site_v2pub.create_party_site(
195 p_init_msg_list => fnd_api.g_false
196 , p_party_site_rec => l_party_site_rec
197 , x_return_status => x_return_status
198 , x_msg_count => l_msg_count
199 , x_msg_data => l_msg_data
200 , x_party_site_id => l_party_site_id
201 , x_party_site_number => l_party_site_number
202 );
203
204 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
205 /*** exception occurred in API -> return errmsg ***/
206 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
207 (
208 p_api_error => TRUE
209 );
210 CSM_UTIL_PKG.log( 'Error in hz_party_site_v2pub.create_party_site ' || p_error_msg||' for location id ' || p_record.LOCATION_ID,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
211 x_return_status := FND_API.G_RET_STS_ERROR;
212 RETURN;
213 END IF;
214
215 CSM_UTIL_PKG.log( 'New Party Site_id: ' ||l_party_site_id ,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
216
217 --Update the Task when the Party site id
218 --This has to be done for all cases as Client is providing only Location id
219 UPDATE CSM_TASKS_INQ
220 SET LOCATION_ID = l_party_site_id
221 WHERE tranid$$ = p_record.tranid$$
222 AND clid$$cs = p_record.CLID$$CS
223 AND location_id = p_record.location_id;
224
225 ELSE
226 CSM_UTIL_PKG.LOG('Before calling csp create_ship_to_address for Location ID ' || p_record.LOCATION_ID ,
227 'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_EVENT);
228
229 create_ship_to_address(p_record.CLID$$CS,l_ta_id,p_record.address1,p_record.address2,p_record.address3,
230 p_record.county,p_record.state ,p_record.province,p_record.city ,p_record.country,p_record.postal_code,
231 null, null, null,
232 x_loc_id ,x_cust_id , x_ovn,x_return_status ,l_msg_count,l_msg_data );
233
234 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
235 /*** exception occurred in API -> return errmsg ***/
236 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
237 (
238 p_api_error => TRUE
239 );
240 CSM_UTIL_PKG.log( 'Error in csp create_ship_to_address ' || p_error_msg||' for location id ' || p_record.LOCATION_ID,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
241 x_return_status := FND_API.G_RET_STS_ERROR;
242 RETURN;
243 END IF;
244
245 CSM_UTIL_PKG.log( 'New HR Location_id: ' ||x_loc_id ,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR);
246
247 UPDATE CSM_REQ_HEADERS_INQ --support for special address
248 SET SHIP_TO_LOCATION_ID = x_loc_id,
249 SHIP_TO_LOC_SRC='HR'
250 WHERE tranid$$ = p_record.tranid$$
251 AND clid$$cs = p_record.CLID$$CS
252 AND SHIP_TO_LOCATION_ID = p_record.location_id
253 AND ADDRESS_TYPE='S';
254 END IF;
255 END IF;
256
257 CSM_UTIL_PKG.LOG('Leaving CSM_HZ_LOCATION_PKG.APPLY_INSERT for Location ID ' || p_record.LOCATION_ID ,
258 'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
259 x_return_status := FND_API.G_RET_STS_SUCCESS;
260
261 EXCEPTION WHEN OTHERS THEN
262 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', substr(sqlerrm,1,2000));
263 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
264 (
265 p_api_error => TRUE
266 );
267 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT: ' || substr(sqlerrm,1,2000)
268 || ' for location_id ' || p_record.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_INSERT',FND_LOG.LEVEL_EXCEPTION);
269
270 x_return_status := FND_API.G_RET_STS_ERROR;
271 END APPLY_INSERT;
272
273
274 /***
275 This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
276 ***/
277 PROCEDURE APPLY_RECORD
278 (
279 p_record IN c_hz_location%ROWTYPE,
280 p_error_msg out nocopy VARCHAR2,
281 x_return_status IN out nocopy VARCHAR2
282 ) IS
283 l_rc BOOLEAN;
284 l_access_id NUMBER;
285 BEGIN
286 /*** initialize return status and message list ***/
287 x_return_status := FND_API.G_RET_STS_SUCCESS;
288 FND_MSG_PUB.INITIALIZE;
289
290 CSM_UTIL_PKG.LOG('Entering CSM_HZ_LOCATION_PKG.APPLY_RECORD for Special Location Id ' || p_record.LOCATION_ID ,
291 'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_PROCEDURE);
292
293 IF p_record.dmltype$$='I' THEN
294 -- Process insert
295 APPLY_INSERT
296 (
297 p_record,
298 p_error_msg,
299 x_return_status
300 );
301 ELSE --Delete and update is not supported for this PI
302 -- invalid dml type
303 CSM_UTIL_PKG.LOG
304 ( 'Invalid DML type: ' || p_record.dmltype$$ || ' is not supported for this entity'
305 || ' for Locaton ID ' || p_record.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_ERROR);
306
307 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
308 (
309 p_message => 'CSM_DML_OPERATION'
310 , p_token_name1 => 'DML'
311 , p_token_value1 => p_record.dmltype$$
312 );
313
314 x_return_status := FND_API.G_RET_STS_ERROR;
315 END IF;
316
320 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', substr(sqlerrm,1,2000));
317 CSM_UTIL_PKG.LOG('Leaving CSM_HZ_LOCATION_PKG.APPLY_RECORD for Locaton ID ' || p_record.LOCATION_ID ,
318 'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_PROCEDURE);
319 EXCEPTION WHEN OTHERS THEN
321 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
322 (
323 p_api_error => TRUE
324 );
325 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_RECORD: ' || substr(sqlerrm,1,2000)
326 || ' for Locaton ID ' || p_record.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_RECORD',FND_LOG.LEVEL_EXCEPTION);
327
328 x_return_status := FND_API.G_RET_STS_ERROR;
329
330 END APPLY_RECORD;
331
332 PROCEDURE DEFER_DEPENDENT_RECORDS(p_user_name IN VARCHAR2, p_tranid IN NUMBER,p_loc_id IN NUMBER,p_err_msg IN VARCHAR2)
333 IS
334 l_ret_status varchar2(1);
335 BEGIN
336 CSM_UTIL_PKG.log( 'Deferring dependent records for Locaton ID ' || p_loc_id ,'CSM_HZ_LOCATION_PKG.DEFER_DEPENDENT_RECORDS',FND_LOG.LEVEL_PROCEDURE);
337
338 --PERSONAL Tasks
339 FOR rec in (SELECT TASK_ID ,SEQNO$$,DMLTYPE$$
340 FROM CSM_TASKS_INQ
341 WHERE tranid$$ = p_tranid
342 AND clid$$cs = p_user_name
343 AND location_id = p_loc_id)
344 LOOP
345 CSM_UTIL_PKG.DEFER_RECORD
346 ( p_user_name , p_tranid , rec.seqno$$
347 , rec.TASK_ID , g_object_name , 'CSM_TASKS'
348 , 'Creation of new Location failed :'||p_err_msg , l_ret_status , rec.dmltype$$
349 );
350 END LOOP;
351
352 --Requirement lines/headers with special address
353 FOR rec in (SELECT REQUIREMENT_HEADER_ID ,SEQNO$$,DMLTYPE$$
354 FROM CSM_REQ_HEADERS_INQ
355 WHERE tranid$$ = p_tranid
356 AND clid$$cs = p_user_name
357 AND SHIP_TO_LOCATION_ID = p_loc_id
358 AND ADDRESS_TYPE='S')
359 LOOP
360
361 CSM_UTIL_PKG.DEFER_RECORD
362 ( p_user_name , p_tranid , rec.seqno$$
363 , rec.REQUIREMENT_HEADER_ID , g_object_name , 'CSM_REQ_HEADERS'
364 , 'Creation of Special Ship To Location failed :'||p_err_msg , l_ret_status , rec.dmltype$$
365 );
366
367 FOR rec2 IN (SELECT REQUIREMENT_LINE_ID ,SEQNO$$,DMLTYPE$$
368 FROM CSM_REQ_LINES_INQ
369 WHERE tranid$$ = p_tranid
370 AND clid$$cs = p_user_name
371 AND REQUIREMENT_HEADER_ID=rec.REQUIREMENT_HEADER_ID)
372 LOOP
373 CSM_UTIL_PKG.DEFER_RECORD
374 ( p_user_name , p_tranid , rec2.seqno$$
375 , rec2.REQUIREMENT_LINE_ID , g_object_name , 'CSM_REQ_LINES'
376 , 'Header failed on creation of special address :'||p_err_msg , l_ret_status , rec2.dmltype$$
377 );
378 END LOOP;
379 END LOOP;
380
381
382 END DEFER_DEPENDENT_RECORDS;
383
384 /***
385 This procedure is called by CSM_SERVICEP_WRAPPER_PKG when publication item CSM_HZ_LOCATION
386 is dirty. This happens when a mobile field service device executed DML on an updatable table and did
387 a fast sync. This procedure will insert the data that came from mobile into the backend tables using
388 public APIs.
389 ***/
390 PROCEDURE APPLY_CLIENT_CHANGES
391 (
392 p_user_name IN VARCHAR2,
393 p_tranid IN NUMBER,
394 p_debug_level IN NUMBER,
395 x_return_status IN OUT NOCOPY VARCHAR2
396 ) IS
397
398 l_process_status VARCHAR2(1);
399 l_error_msg VARCHAR2(4000);
400
401 BEGIN
402 CSM_UTIL_PKG.LOG('Entering CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES ',
403 'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
404 g_debug_level := p_debug_level;
405 x_return_status := FND_API.G_RET_STS_SUCCESS;
406
407 /*** loop through all the records in inqueue ***/
408 FOR r_hz_location_rec IN c_hz_location( p_user_name, p_tranid) LOOP
409 SAVEPOINT save_rec ;
410 /*** apply record ***/
411 APPLY_RECORD
412 (
413 r_hz_location_rec
414 , l_error_msg
415 , l_process_status
416 );
417
418 /*** was record processed successfully? ***/
419 IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
420 /*** Yes -> Reject record from inqueue ***/
421 CSM_UTIL_PKG.DELETE_RECORD
422 (
423 p_user_name,
424 p_tranid,
425 r_hz_location_rec.seqno$$,
426 r_hz_location_rec.LOCATION_ID,
427 g_object_name,
428 g_pub_name,
429 l_error_msg,
430 l_process_status
431 );
432 /*** was delete successful? ***/
433 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
434 /*** no -> rollback ***/
435 CSM_UTIL_PKG.LOG
436 ( 'Deleting from inqueue failed, rolling back to savepoint'
437 || ' for Location ID ' || r_hz_location_rec.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
438 ROLLBACK TO save_rec;
439 x_return_status := FND_API.G_RET_STS_ERROR;
440 END IF;
441 ELSIF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
442 /*** Record was not applied successfully -> defer and reject records ***/
443 csm_util_pkg.log( 'Record not processed successfully, deferring and rejecting record'
444 || ' for PK ' || r_hz_location_rec.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
445
446 CSM_UTIL_PKG.DEFER_RECORD
447 (
448 p_user_name
449 , p_tranid
450 , r_hz_location_rec.seqno$$
451 , r_hz_location_rec.LOCATION_ID
452 , g_object_name
453 , g_pub_name
454 , l_error_msg
455 , l_process_status
456 , r_hz_location_rec.dmltype$$
457 );
458
459 DEFER_DEPENDENT_RECORDS(p_user_name,p_tranid,r_hz_location_rec.LOCATION_ID,l_error_msg);
460
461 /*** Was defer successful? ***/
462 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
463 /*** no -> rollback ***/
464 CSM_UTIL_PKG.LOG
465 ( 'Defer record failed, rolling back to savepoint'
466 || ' for PK ' || r_hz_location_rec.LOCATION_ID ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
467 ROLLBACK TO save_rec;
468 x_return_status := FND_API.G_RET_STS_ERROR;
469 END IF;
470 END IF;
471
472 END LOOP;
473
474 CSM_UTIL_PKG.LOG('Leaving CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',
475 'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
476
477 EXCEPTION WHEN OTHERS THEN
478 /*** catch and log exceptions ***/
479 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_CLIENT_CHANGES: ' || substr(sqlerrm,1,2000)
480 ,'CSM_HZ_LOCATION_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
481
482 x_return_status := FND_API.G_RET_STS_ERROR;
483
484 END APPLY_CLIENT_CHANGES;
485
486 END CSM_HZ_LOCATION_PKG;