[Home] [Help]
PACKAGE BODY: APPS.CSM_DEBRIEF_LABOR_PKG
Source
1 PACKAGE BODY CSM_DEBRIEF_LABOR_PKG AS
2 /* $Header: csmudblb.pls 120.4 2008/03/24 08:59:20 ptomar ship $ */
3
4 -- MODIFICATION HISTORY
5 -- Person Date Comments
6 -- Anurag 06/10/02 Created
7 -- --------- ------ ------------------------------------------
8 -- Enter procedure, function bodies as shown below
9
10
11 /*** Globals ***/
12 g_object_name CONSTANT VARCHAR2(30) := 'CSM_DEBRIEF_LABOR_PKG'; -- package name
13 g_pub_name CONSTANT VARCHAR2(30) := 'CSF_M_DEBRIEF_LABOR'; -- publication item name
14 g_debug_level NUMBER; -- debug level
15
16 CURSOR c_debrief_labor( b_user_name VARCHAR2, b_tranid NUMBER) is
17 SELECT *
18 FROM csf_m_debrief_labor_inq
19 WHERE tranid$$ = b_tranid
20 AND clid$$cs = b_user_name;
21
22
23 /***
24 This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
25 ***/
26 PROCEDURE APPLY_INSERT
27 (
28 p_record IN c_debrief_labor%ROWTYPE,
29 p_error_msg OUT NOCOPY VARCHAR2,
30 x_return_status IN OUT NOCOPY VARCHAR2
31 ) IS
32
33 cursor c_deb_head
34 ( b_task_assignment_id number
35 )
36 is
37 select debrief_header_id
38 , task_assignment_id
39 from csf_debrief_headers
40 where task_assignment_id = b_task_assignment_id;
41
42 cursor c_task_obj_code
43 ( b_task_assignment_id number
44 )
45 is
46 select source_object_type_code
47 from jtf_tasks_b jtb
48 , jtf_task_assignments jta
49 where jtb.task_id = jta.task_id
50 and jta.task_assignment_id = b_task_assignment_id;
51
52 r_deb_head c_deb_head%rowtype;
53 r_task_obj_code c_task_obj_code%rowtype;
54
55 -- Cursor to check if the Assignment Status is either of the
56 -- following rejected, on_hold, cancelled, closed or completed
57 CURSOR c_chk_task_status
58 ( p_debrief_header_id CSF_DEBRIEF_HEADERS.DEBRIEF_HEADER_ID%TYPE
59 ) IS
60 SELECT tst.rejected_flag, tst.on_hold_flag, tst.cancelled_flag,
61 tst.closed_flag, tst.completed_flag
62 FROM csf_debrief_headers dh, jtf_task_assignments tas,
63 jtf_task_statuses_b tst
64 WHERE dh.task_assignment_id = tas.task_assignment_id
65 AND tas.assignment_status_id = tst.task_status_id
66 AND dh.debrief_header_id = p_debrief_header_id;
67
68 l_rejected_flag VARCHAR2(1);
69 l_on_hold_flag VARCHAR2(1);
70 l_cancelled_flag VARCHAR2(1);
71 l_closed_flag VARCHAR2(1);
72 l_completed_flag VARCHAR2(1);
73
74 l_deb_rec csf_debrief_pub.debrief_rec_type;
75
76 l_line_rec csf_debrief_pub.debrief_line_rec_type;
77 l_line_tbl csf_debrief_pub.debrief_line_tbl_type;
78
79
80 l_debrief_header_id number;
81 l_date date := sysdate;
82
83 l_issuing_inventory_org_id csf_debrief_lines.issuing_inventory_org_id%TYPE;
84 l_receiving_inventory_org_id csf_debrief_lines.receiving_inventory_org_id%TYPE;
85
86 l_msg_data varchar2(1024);
87 l_msg_count number;
88
89 BEGIN
90
91 x_return_status := FND_API.G_RET_STS_SUCCESS;
92
93 -- Start with some initialization.
94 -- We need to know if a debrief header record has been made
95 -- form this task_assignment_id. In that case we have to
96 -- reuse it instead of creating one.
97 -- Prerequisite: at most one record exist with the
98 -- task_assignment_id we're looking for.
99 open c_deb_head
100 ( p_record.task_assignment_id
101 );
102 fetch c_deb_head into r_deb_head;
103 if c_deb_head%found
104 then
105 l_debrief_header_id := r_deb_head.debrief_header_id;
106 else
107 l_debrief_header_id := null;
108 end if;
109 close c_deb_head;
110
111
112
113 -- Create a debrief header record.
114 l_deb_rec.debrief_date := l_date;
115 --l_deb_rec.debrief_number := To_Char( l_debrief_header_id );
116
117 l_deb_rec.task_assignment_id := p_record.task_assignment_id;
118 l_deb_rec.debrief_header_id := l_debrief_header_id;
119 l_deb_rec.debrief_status_id := NULL;
120 l_deb_rec.last_update_date := l_date;
121 l_deb_rec.last_updated_by := NVL(p_record.last_updated_by,FND_GLOBAL.USER_ID); --12.1
122 l_deb_rec.creation_date := l_date;
123 l_deb_rec.created_by := NVL(p_record.created_by,FND_GLOBAL.USER_ID); --12.1
124 l_deb_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
125
126
127 if l_debrief_header_id is null
128 then
129 -- Create a debrief header.
130 l_deb_rec.debrief_number := null ;
131
132 csf_debrief_pub.create_debrief
133 ( p_api_version_number => 1.0
134 , p_init_msg_list => FND_API.G_TRUE
135 , p_commit => FND_API.G_FALSE
136 , p_debrief_rec => l_deb_rec
137 , p_debrief_line_tbl => l_line_tbl
138 , x_debrief_header_id => l_debrief_header_id
139 , x_return_status => x_return_status
140 , x_msg_count => l_msg_count
141 , x_msg_data => l_msg_data
142 );
143 -- This could have failed, so we need to check.
144 if x_return_status <> FND_API.G_RET_STS_SUCCESS
145 then
146 /*** exception occurred in API -> return errmsg ***/
147 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
148 (
149 p_api_error => TRUE
150 );
151 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
152 || ' ROOT ERROR: csf_debrief_pub.create_debrief'
153 || ' for PK ' || p_record.DEBRIEF_LINE_ID, 'CSM_DEBRIEF_LABOR_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR );
154 x_return_status := FND_API.G_RET_STS_ERROR;
155 return;
156 end if;
157 end if;
158
159 -- Make the debrief line.
160
161 -- Retrieve the issuing organization id.
162 -- We may have to replace this with another master_organization_id.
163
164
165 l_line_rec.debrief_line_id := p_record.debrief_line_id;
166 l_line_rec.debrief_header_id := l_debrief_header_id;
167
168 l_line_rec.issuing_inventory_org_id := l_issuing_inventory_org_id;
169 l_line_rec.receiving_inventory_org_id := l_receiving_inventory_org_id;
170 l_line_rec.last_update_date := l_date;
171 l_line_rec.last_updated_by := NVL(p_record.last_updated_by,FND_GLOBAL.USER_ID); --12.1
172 l_line_rec.creation_date := l_date;
173 l_line_rec.created_by := NVL(p_record.created_by,FND_GLOBAL.USER_ID); --12.1
174 l_line_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
175 l_line_rec.inventory_item_id := p_record.inventory_item_id;
176 l_line_rec.txn_billing_type_id := p_record.txn_billing_type_id;
177 l_line_rec.service_date := p_record.service_date;
178 --l_line_rec.debrief_line_number := To_Char( p_record.debrief_line_id );
179 l_line_rec.labor_start_date := p_record.labor_start_date;
180 l_line_rec.labor_end_date := p_record.labor_end_date;
181 l_line_rec.business_process_id := p_record.business_process_id;
182 l_line_rec.channel_code := 'CSF_MFS';
183 l_line_rec.transaction_type_id := p_record.transaction_type_id;
184 l_line_rec.uom_code := p_record.uom_code;
185 l_line_rec.quantity := p_record.quantity;
186 l_line_rec.labor_reason_code := p_record.labor_reason_code;
187 l_line_rec.attribute1 := p_record.attribute1;
188 l_line_rec.attribute2 := p_record.attribute2;
189 l_line_rec.attribute3 := p_record.attribute3;
190 l_line_rec.attribute4 := p_record.attribute4;
191 l_line_rec.attribute5 := p_record.attribute5;
192 l_line_rec.attribute6 := p_record.attribute6;
193 l_line_rec.attribute7 := p_record.attribute7;
194 l_line_rec.attribute8 := p_record.attribute8;
195 l_line_rec.attribute9 := p_record.attribute9;
196 l_line_rec.attribute10 := p_record.attribute10;
197 l_line_rec.attribute11 := p_record.attribute11;
198 l_line_rec.attribute12 := p_record.attribute12;
199 l_line_rec.attribute13 := p_record.attribute13;
200 l_line_rec.attribute14 := p_record.attribute14;
201 l_line_rec.attribute15 := p_record.attribute15;
202 l_line_rec.attribute_category := p_record.attribute_category;
203
204 l_line_tbl(1) := l_line_rec;
205
206 -- Fetch SOURCE_OBJECT_TYPE_CODE from task record
207 open c_task_obj_code
208 ( p_record.task_assignment_id
209 );
210 fetch c_task_obj_code into r_task_obj_code;
211 close c_task_obj_code;
212
213 csf_debrief_pub.create_debrief_lines
214 ( p_api_version_number => 1.0
215 , p_init_msg_list => FND_API.G_TRUE
216 , p_commit => FND_API.G_FALSE
217 , x_return_status => x_return_status
218 , x_msg_count => l_msg_count
219 , x_msg_data => l_msg_data
220 , p_debrief_header_id => l_debrief_header_id
221 , p_debrief_line_tbl => l_line_tbl
222 , p_source_object_type_code => r_task_obj_code.source_object_type_code
223 );
224 if x_return_status <> FND_API.G_RET_STS_SUCCESS
225 then
226 /*** exception occurred in API -> return errmsg ***/
227 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
228 (
229 p_api_error => TRUE
230 );
231 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
232 || ' ROOT ERROR: csf_debrief_pub.create_debrief_lines'
233 || ' for PK ' || p_record.DEBRIEF_LINE_ID ,'CSM_DEBRIEF_LABOR_PKG.APPLY_INSERT',FND_LOG.LEVEL_ERROR );
234 x_return_status := FND_API.G_RET_STS_ERROR;
235 return;
236 end if;
237
238 -- For a given debrief header check the task Assignment status.
239 -- If it is one of the following -
240 -- rejected, on_hold, cancelled, closed or completed then call the api
241 -- csf_debrief_update_pkg.form_Call for processing charges
242
243 OPEN c_chk_task_status ( l_debrief_header_id );
244 FETCH c_chk_task_status INTO l_rejected_flag, l_on_hold_flag,
245 l_cancelled_flag, l_closed_flag, l_completed_flag;
246
247 IF c_chk_task_status%FOUND THEN
248 IF ( (l_rejected_flag='Y') OR (l_on_hold_flag='Y') OR (l_cancelled_flag='Y')
249 OR (l_closed_flag='Y') OR (l_completed_flag='Y') ) THEN
250 csf_debrief_update_pkg.form_Call (1.0, l_debrief_header_id );
251 END IF;
252 END IF;
253
254 CLOSE c_chk_task_status;
255
256 exception
257 when others then
258 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT:'
259 || ' for PK ' || p_record.DEBRIEF_LINE_ID ,'CSM_DEBRIEF_LABOR_PKG.APPLY_INSERT',FND_LOG.LEVEL_EXCEPTION);
260
261 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', sqlerrm);
262 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
263 (
264 p_api_error => TRUE
265 );
266
267 x_return_status := FND_API.G_RET_STS_ERROR;
268 END APPLY_INSERT;
269
270 /***
271 This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
272 ***/
273 PROCEDURE APPLY_UPDATE
274 (
275 p_record IN c_debrief_labor%ROWTYPE,
276 p_error_msg OUT NOCOPY VARCHAR2,
277 x_return_status IN OUT NOCOPY VARCHAR2
278 ) IS
279
280 CURSOR c_cdl
281 ( b_debrief_line_id csf_debrief_lines.debrief_line_id%TYPE
282 )
283 IS
284 SELECT cdl.debrief_header_id
285 , cdl.debrief_line_id
286 , cdl.last_update_date
287 , cdl.issuing_inventory_org_id
288 FROM csf_debrief_lines cdl
289 WHERE cdl.debrief_line_id = b_debrief_line_id;
290
291 r_cdl c_cdl%ROWTYPE;
292
293 l_line_rec csf_debrief_pub.debrief_line_rec_type;
294
295 l_debrief_header_id number;
296 l_date date := sysdate;
297
298 l_msg_data varchar2(1024);
299 l_msg_count number;
300
301
302 BEGIN
303
304 x_return_status := FND_API.G_RET_STS_SUCCESS;
305
306 -- Lookup the debrief_header id. It must be there as this is an update
307 -- of a line.
308 OPEN c_cdl
309 (b_debrief_line_id => p_record.debrief_line_id
310 );
311 FETCH c_cdl
312 INTO r_cdl;
313 IF c_cdl%found
314 THEN
315 l_debrief_header_id := r_cdl.debrief_header_id;
316 ELSE
317 -- Let the API complain about it.
318 l_debrief_header_id := NULL;
319 END IF;
320 CLOSE c_cdl;
321
322 -- Make the debrief line.
323 l_line_rec.issuing_inventory_org_id := r_cdl.issuing_inventory_org_id;
324 l_line_rec.debrief_line_id := p_record.debrief_line_id;
325 l_line_rec.debrief_header_id := l_debrief_header_id;
326 l_line_rec.last_update_date := l_date;
327 l_line_rec.last_updated_by := NVL(p_record.last_updated_by,FND_GLOBAL.USER_ID); --12.1
328 l_line_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
329 l_line_rec.inventory_item_id := p_record.inventory_item_id;
330 l_line_rec.txn_billing_type_id := p_record.txn_billing_type_id;
331 l_line_rec.service_date := p_record.service_date;
332 --l_line_rec.debrief_line_number := To_Char( p_record.debrief_line_id );
333 l_line_rec.labor_start_date := p_record.labor_start_date;
334 l_line_rec.labor_end_date := p_record.labor_end_date;
335 l_line_rec.business_process_id := p_record.business_process_id;
336 l_line_rec.channel_code := 'CSF_MFS';
337 l_line_rec.transaction_type_id := p_record.transaction_type_id;
338 l_line_rec.quantity := p_record.quantity;
339 l_line_rec.uom_code := p_record.uom_code;
340 l_line_rec.labor_reason_code := p_record.labor_reason_code;
341 l_line_rec.attribute1 := p_record.attribute1;
342 l_line_rec.attribute2 := p_record.attribute2;
343 l_line_rec.attribute3 := p_record.attribute3;
344 l_line_rec.attribute4 := p_record.attribute4;
345 l_line_rec.attribute5 := p_record.attribute5;
346 l_line_rec.attribute6 := p_record.attribute6;
347 l_line_rec.attribute7 := p_record.attribute7;
348 l_line_rec.attribute8 := p_record.attribute8;
349 l_line_rec.attribute9 := p_record.attribute9;
350 l_line_rec.attribute10 := p_record.attribute10;
351 l_line_rec.attribute11 := p_record.attribute11;
352 l_line_rec.attribute12 := p_record.attribute12;
353 l_line_rec.attribute13 := p_record.attribute13;
354 l_line_rec.attribute14 := p_record.attribute14;
355 l_line_rec.attribute15 := p_record.attribute15;
356 l_line_rec.attribute_category := p_record.attribute_category;
357
358 --check for the stale data
359 -- SERVER_WINS profile value
360 if(fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE)
361 = csm_profile_pkg.g_SERVER_WINS) then
362 if(r_cdl.last_update_date <> p_record.server_last_update_date) then
363 x_return_status := FND_API.G_RET_STS_ERROR;
364 p_error_msg :=
365 'UPWARD SYNC CONFLICT: CLIENT LOST: CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE: P_KEY = '
366 || p_record.debrief_line_id;
367 csm_util_pkg.log(p_error_msg,'CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE',FND_LOG.LEVEL_ERROR);
368 return;
369 end if;
370 end if;
371
372 --CLIENT_WINS (or client is allowd to update the record)
373
374 -- Update the debrief line
375 csf_debrief_pub.update_debrief_line
376 ( p_api_version_number => 1.0
377 , p_init_msg_list => FND_API.G_TRUE
378 , p_commit => FND_API.G_FALSE
379 , x_return_status => x_return_status
380 , x_msg_count => l_msg_count
381 , x_msg_data => l_msg_data
382 , p_debrief_line_rec => l_line_rec
383 );
384 if x_return_status <> FND_API.G_RET_STS_SUCCESS
385 then
386 /*** exception occurred in API -> return errmsg ***/
387 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
388 (
389 p_api_error => TRUE
390 );
391 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_UPDATE:'
392 || ' ROOT ERROR: csf_debrief_pub.update_debrief_lines'
393 || ' for PK ' || p_record.DEBRIEF_LINE_ID,'CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE',FND_LOG.LEVEL_ERROR );
394 x_return_status := FND_API.G_RET_STS_ERROR;
395 return;
396 end if;
397
398 exception
399 when others then
400 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_UPDATE', sqlerrm);
401 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
402 (
403 p_api_error => TRUE
404 );
405
406 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_UPDATE:'
407 || ' for PK ' || p_record.DEBRIEF_LINE_ID,'CSM_DEBRIEF_LABOR_PKG.APPLY_UPDATE',FND_LOG.LEVEL_EXCEPTION );
408
409 x_return_status := FND_API.G_RET_STS_ERROR;
410 END APPLY_UPDATE;
411
412
413 /***
414 This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
415 ***/
416 PROCEDURE APPLY_RECORD
417 (
418 p_record IN c_debrief_labor%ROWTYPE,
419 p_error_msg OUT NOCOPY VARCHAR2,
420 x_return_status IN OUT NOCOPY VARCHAR2
421 ) IS
422 BEGIN
423 /*** initialize return status and message list ***/
424 x_return_status := FND_API.G_RET_STS_SUCCESS;
425 FND_MSG_PUB.INITIALIZE;
426
427 IF p_record.dmltype$$='I' THEN
428 -- Process insert
429 APPLY_INSERT
430 (
431 p_record,
432 p_error_msg,
433 x_return_status
434 );
435 ELSIF p_record.dmltype$$='U' THEN
436 -- Process update
437 APPLY_UPDATE
438 (
439 p_record,
440 p_error_msg,
441 x_return_status
442 );
443 ELSE
444 -- Process delete; not supported for this entity
445 CSM_UTIL_PKG.LOG
446 ( 'Delete is not supported for this entity'
447 || ' for PK ' || p_record.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_RECORD',FND_LOG.LEVEL_ERROR);
448
449 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
450 (
451 p_message => 'CSM_DML_OPERATION'
452 , p_token_name1 => 'DML'
453 , p_token_value1 => p_record.dmltype$$
454 );
455
456 x_return_status := FND_API.G_RET_STS_ERROR;
457 END IF;
458
459 EXCEPTION WHEN OTHERS THEN
460 /*** defer record when any process exception occurs ***/
461 CSM_UTIL_PKG.LOG
462 ( 'Exception occurred in CSM_DEBRIEF_labor_PKG.APPLY_RECORD:' || ' ' || sqlerrm
463 || ' for PK ' || p_record.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_RECORD',FND_LOG.LEVEL_EXCEPTION);
464
465 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', sqlerrm);
466 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
467 (
468 p_api_error => TRUE
469 );
470
471 x_return_status := FND_API.G_RET_STS_ERROR;
472 END APPLY_RECORD;
473
474 /***
475 This procedure is called by CSM_UTIL_PKG when publication item <replace>
476 is dirty. This happens when a mobile field service device executed DML on an updatable table and did
477 a fast sync. This procedure will insert the data that came from mobile into the backend tables using
478 public APIs.
479 ***/
480 PROCEDURE APPLY_CLIENT_CHANGES
481 (
482 p_user_name IN VARCHAR2,
483 p_tranid IN NUMBER,
484 p_debug_level IN NUMBER,
485 x_return_status IN OUT NOCOPY VARCHAR2
486 ) IS
487
488 l_process_status VARCHAR2(1);
489 l_error_msg VARCHAR2(4000);
490 BEGIN
491 csm_util_pkg.log('csm_debrief_labor_pkg.apply_client_changes entered','CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR);
492 g_debug_level := p_debug_level;
493 x_return_status := FND_API.G_RET_STS_SUCCESS;
494
495 /*** loop through debrief labor records in inqueue ***/
496 FOR r_debrief_labor IN c_debrief_labor( p_user_name, p_tranid) LOOP
497
498 SAVEPOINT save_rec;
499
500 /*** apply record ***/
501 APPLY_RECORD
502 (
503 r_debrief_labor
504 , l_error_msg
505 , l_process_status
506 );
507
508 /*** was record processed successfully? ***/
509 IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
510 /*** Yes -> delete record from inqueue ***/
511
512 CSM_UTIL_PKG.DELETE_RECORD
513 (
514 p_user_name,
515 p_tranid,
516 r_debrief_labor.seqno$$,
517 r_debrief_labor.debrief_line_id,
518 g_object_name,
519 g_pub_name,
520 l_error_msg,
521 l_process_status
522 );
523
524 /*** was delete successful? ***/
525 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
526 /*** no -> rollback ***/
527 CSM_UTIL_PKG.LOG
528 ( 'Deleting from inqueue failed, rolling back to savepoint'
529 || ' for PK ' || r_debrief_labor.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
530 ROLLBACK TO save_rec;
531 x_return_status := FND_API.G_RET_STS_ERROR;
532 END IF;
533 END IF;
534
535 IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
536 /*** Record was not processed successfully or delete failed -> defer and reject record ***/
537 CSM_UTIL_PKG.LOG
538 ( 'Record not processed successfully, deferring and rejecting record'
539 || ' for PK ' || r_debrief_labor.debrief_line_id ,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
540
541 CSM_UTIL_PKG.DEFER_RECORD
542 (
543 p_user_name
544 , p_tranid
545 , r_debrief_labor.seqno$$
546 , r_debrief_labor.debrief_line_id
547 , g_object_name
548 , g_pub_name
549 , l_error_msg
550 , l_process_status
551 , r_debrief_labor.dmltype$$
552 );
553
554 /*** Was defer successful? ***/
555 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
556 /*** no -> rollback ***/
557 CSM_UTIL_PKG.LOG
558 ( 'Defer record failed, rolling back to savepoint'
559 || ' for PK ' || r_debrief_labor.debrief_line_id,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR ); -- put PK column here
560 ROLLBACK TO save_rec;
561 x_return_status := FND_API.G_RET_STS_ERROR;
562 END IF;
563 END IF;
564
565 END LOOP;
566
567 EXCEPTION WHEN OTHERS THEN
568 /*** catch and log exceptions ***/
569 CSM_UTIL_PKG.LOG
570 ( 'Exception occurred in APPLY_CLIENT_CHANGES:' || ' ' || SQLERRM,'CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
571 x_return_status := FND_API.G_RET_STS_ERROR;
572 END APPLY_CLIENT_CHANGES;
573
574 END CSM_DEBRIEF_LABOR_PKG;