[Home] [Help]
PACKAGE BODY: APPS.CSL_TASKS_PKG
Source
1 PACKAGE BODY CSL_TASKS_PKG AS
2 /* $Header: cslvtskb.pls 115.32 2003/11/18 10:01:52 vekrishn ship $ */
3
4 error EXCEPTION;
5
6 /*** Globals ***/
7 g_object_name CONSTANT VARCHAR2(30) := 'CSL_TASKS_PKG';
8 g_pub_name CONSTANT VARCHAR2(30) := 'CSL_JTF_TASKS_VL';
9 g_debug_level NUMBER; -- debug level
10
11 CURSOR c_task( b_user_name VARCHAR2, b_tranid NUMBER) is
12 SELECT *
13 FROM csl_jtf_tasks_vl_inq
14 WHERE tranid$$ = b_tranid
15 AND clid$$cs = b_user_name;
16
17 /***
18 This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
19 ***/
20 PROCEDURE APPLY_INSERT
21 (
22 p_record IN c_task%ROWTYPE,
23 p_error_msg OUT NOCOPY VARCHAR2,
24 x_return_status IN OUT NOCOPY VARCHAR2
25 ) IS
26 l_msg_count NUMBER;
27 l_msg_data VARCHAR2(240);
28 l_task_id jtf_tasks_b.task_id%type;
29 BEGIN
30 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
31 jtm_message_log_pkg.Log_Msg
32 ( v_object_id => p_record.task_id
33 , v_object_name => g_object_name
34 , v_message => 'Entering CSL_TASKS_PKG.APPLY_INSERT'
35 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
36 END IF;
37
38 JTF_TASKS_PUB.create_task (
39 p_api_version => 1.0,
40 p_init_msg_list => FND_API.g_true,
41 p_commit => fnd_api.g_false,
42 p_task_id => p_record.TASK_ID,
43 p_task_name => p_record.TASK_NAME,
44 p_task_type_id => p_record.TASK_TYPE_ID,
45 p_description => p_record.DESCRIPTION,
46 p_task_status_id => p_record.TASK_STATUS_ID,
47 p_task_priority_id => p_record.TASK_PRIORITY_ID,
48 p_owner_type_code => 'RS_EMPLOYEE',
49 p_owner_id => JTM_HOOK_UTIL_PKG.get_resource_id( p_record.clid$$cs ),
50 p_customer_id => p_record.CUSTOMER_ID,
51 p_planned_start_date => p_record.PLANNED_START_DATE,
52 p_planned_end_date => p_record.PLANNED_END_DATE,
53 p_scheduled_start_date => p_record.SCHEDULED_START_DATE,
54 p_scheduled_end_date => p_record.SCHEDULED_END_DATE,
55 p_source_object_type_code => p_record.SOURCE_OBJECT_TYPE_CODE,
56 p_source_object_id => p_record.SOURCE_OBJECT_ID,
57 p_source_object_name => p_record.SOURCE_OBJECT_NAME,
58 p_planned_effort => p_record.PLANNED_EFFORT,
59 p_planned_effort_uom => p_record.PLANNED_EFFORT_UOM,
60 p_private_flag => p_record.PRIVATE_FLAG,
61 p_attribute1 => p_record.attribute1,
62 p_attribute2 => p_record.attribute2,
63 p_attribute3 => p_record.attribute3,
64 p_attribute4 => p_record.attribute4,
65 p_attribute5 => p_record.attribute5,
66 p_attribute6 => p_record.attribute6,
67 p_attribute7 => p_record.attribute7,
68 p_attribute8 => p_record.attribute8,
69 p_attribute9 => p_record.attribute9,
70 p_attribute10 => p_record.attribute10,
71 p_attribute11 => p_record.attribute11,
72 p_attribute12 => p_record.attribute12,
73 p_attribute13 => p_record.attribute13,
74 p_attribute14 => p_record.attribute14,
75 p_attribute15 => p_record.attribute15,
76 p_attribute_category => p_record.attribute_category ,
77 x_return_status => x_return_status,
78 x_msg_count => l_msg_count,
79 x_msg_data => l_msg_data,
80 x_task_id => l_task_id
81 );
82
83 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
84 /*** exception occurred in API -> return errmsg ***/
85 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
86 (
87 p_api_error => TRUE
88 );
89 END IF;
90
91 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
92 jtm_message_log_pkg.Log_Msg
93 ( v_object_id => p_record.task_id
94 , v_object_name => g_object_name
95 , v_message => 'Leaving CSL_TASKS_PKG.APPLY_INSERT'
96 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
97 END IF;
98
99 EXCEPTION WHEN OTHERS THEN
100 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
101 jtm_message_log_pkg.Log_Msg
102 ( v_object_id => p_record.task_id
103 , v_object_name => g_object_name
104 , v_message => 'Exception occurred in APPLY_INSERT:' || fnd_global.local_chr(10) || sqlerrm
105 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
106 END IF;
107
108 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', sqlerrm);
109 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
110 (
111 p_api_error => TRUE
112 );
113
114 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
115 jtm_message_log_pkg.Log_Msg
116 ( v_object_id => p_record.task_id
117 , v_object_name => g_object_name
118 , v_message => 'Leaving CSL_TASKS_PKG.APPLY_INSERT'
119 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
120 END IF;
121
122 x_return_status := FND_API.G_RET_STS_ERROR;
123 END APPLY_INSERT;
124
125 /***
126 This procedure is called by APPLY_CLIENT_CHANGES when an updated record is to be processed.
127 ***/
128 PROCEDURE APPLY_UPDATE
129 (
130 p_record IN c_task%ROWTYPE,
131 p_error_msg OUT NOCOPY VARCHAR2,
132 x_return_status IN OUT NOCOPY VARCHAR2
133 ) IS
134 l_msg_count NUMBER;
135 l_msg_data VARCHAR2(240);
136
137 CURSOR c_task ( b_task_id NUMBER ) IS
138 SELECT object_version_number
139 FROM jtf_tasks_b
140 WHERE task_id = b_task_id;
141 r_task c_task%ROWTYPE;
142
143 cursor c_last_update_date
144 ( b_task_id NUMBER
145 )
146 is
147 SELECT LAST_UPDATE_DATE
148 from jtf_tasks_b
149 where task_id = b_task_id;
150
151 r_last_update_date c_last_update_date%ROWTYPE;
152
153 l_profile_value VARCHAR2(240);
154
155 BEGIN
156 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
157 jtm_message_log_pkg.Log_Msg
158 ( v_object_id => p_record.task_id
159 , v_object_name => g_object_name
160 , v_message => 'Entering CSL_TASKS_PKG.APPLY_UPDATE'
161 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
162 END IF;
163
164 -- Check for Stale data
165 l_profile_value := fnd_profile.value('JTM_APPL_CONFLICT_RULE');
166 if l_profile_value = 'SERVER_WINS' AND
167 ASG_DEFER.IS_DEFERRED(p_record.clid$$cs, p_record.tranid$$,g_object_name, p_record.seqno$$) <> FND_API.G_TRUE then
168 open c_last_update_date(b_task_id => p_record.task_id);
169 fetch c_last_update_date into r_last_update_date;
170 if c_last_update_date%found then
171 if r_last_update_date.last_update_date <> p_record.last_update_date then
172 close c_last_update_date;
173 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
174 jtm_message_log_pkg.Log_Msg
175 ( v_object_id => p_record.task_id
176 , v_object_name => g_object_name
177 , v_message => 'Record has stale data'
178 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
179 END IF;
180 fnd_message.set_name
181 ( 'JTM'
182 , 'JTM_STALE_DATA'
183 );
184 fnd_msg_pub.add;
185 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
186 jtm_message_log_pkg.Log_Msg
187 ( v_object_id => p_record.task_id
188 , v_object_name => g_object_name
189 , v_message => 'Leaving ' || g_object_name || '.APPLY_UPDATE'
190 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
191 END IF;
192
193 x_return_status := FND_API.G_RET_STS_SUCCESS;
194 return;
195 end if;
196 else
197 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
198 jtm_message_log_pkg.Log_Msg
199 ( v_object_id => p_record.task_id
200 , v_object_name => g_object_name
201 , v_message => 'No record found in Apps Database.'
202 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
203 END IF;
204 end if;
205 close c_last_update_date;
206 end if;
207
208 -- get object version from task record so client updates succeed even when record was updated
209 -- on server side (CLIENT_WINS)
210 OPEN c_task( p_record.task_id );
211 FETCH c_task INTO r_task;
212 CLOSE c_task;
213
214 -- Update the task.
215 JTF_TASKS_PUB.Update_Task (
216 p_api_version => 1.0,
217 p_init_msg_list => FND_API.G_TRUE,
218 p_commit => FND_API.G_FALSE,
219 p_task_id => p_record.TASK_ID,
220 p_object_version_number => r_task.object_version_number,
221 p_planned_start_date => p_record.PLANNED_START_DATE,
222 p_planned_end_date => p_record.PLANNED_END_DATE,
223 p_scheduled_start_date => p_record.SCHEDULED_START_DATE,
224 p_scheduled_end_date => p_record.SCHEDULED_END_DATE,
225 p_task_priority_id =>
226 NVL(p_record.TASK_PRIORITY_ID,FND_API.G_MISS_NUM),
227 p_planned_effort => p_record.PLANNED_EFFORT,
228 p_planned_effort_uom => p_record.PLANNED_EFFORT_UOM,
229 p_attribute1 => p_record.attribute1,
230 p_attribute2 => p_record.attribute2,
231 p_attribute3 => p_record.attribute3,
232 p_attribute4 => p_record.attribute4,
233 p_attribute5 => p_record.attribute5,
234 p_attribute6 => p_record.attribute6,
235 p_attribute7 => p_record.attribute7,
236 p_attribute8 => p_record.attribute8,
237 p_attribute9 => p_record.attribute9,
238 p_attribute10 => p_record.attribute10,
239 p_attribute11 => p_record.attribute11,
240 p_attribute12 => p_record.attribute12,
241 p_attribute13 => p_record.attribute13,
242 p_attribute14 => p_record.attribute14,
243 p_attribute15 => p_record.attribute15,
244 p_attribute_category => p_record.attribute_category ,
245 -- ER 3211017
246 p_task_type_id => p_record.TASK_TYPE_ID,
247 x_return_status => x_return_status,
248 x_msg_count => l_msg_count,
249 x_msg_data => l_msg_data
250 );
251
252 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
253 /*** exception occurred in API -> return errmsg ***/
254 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
255 (
256 p_api_error => TRUE
257 );
258 END IF;
259
260 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
261 jtm_message_log_pkg.Log_Msg
262 ( v_object_id => p_record.task_id
263 , v_object_name => g_object_name
264 , v_message => 'Leaving CSL_TASKS_PKG.APPLY_UPDATE'
265 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
266 END IF;
267
268 EXCEPTION WHEN OTHERS THEN
269 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
270 jtm_message_log_pkg.Log_Msg
271 ( v_object_id => p_record.task_id
272 , v_object_name => g_object_name
273 , v_message => 'Exception occurred in APPLY_UPDATE:' || fnd_global.local_chr(10) || sqlerrm
274 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
275 END IF;
276
277 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_UPDATE', sqlerrm);
278 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
279 (
280 p_api_error => TRUE
281 );
282
283 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
284 jtm_message_log_pkg.Log_Msg
285 ( v_object_id => p_record.task_id
286 , v_object_name => g_object_name
287 , v_message => 'Leaving CSL_TASKS_PKG.APPLY_UPDATE'
288 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
289 END IF;
290
291 x_return_status := FND_API.G_RET_STS_ERROR;
292 END APPLY_UPDATE;
293
294 /***
295 This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
296 ***/
297 PROCEDURE APPLY_RECORD
298 (
299 p_record IN c_task%ROWTYPE,
300 p_error_msg OUT NOCOPY VARCHAR2,
301 x_return_status IN OUT NOCOPY VARCHAR2
302 ) IS
303 l_rc BOOLEAN;
304 l_access_id NUMBER;
305 BEGIN
306 /*** initialize return status and message list ***/
307 x_return_status := FND_API.G_RET_STS_SUCCESS;
308 FND_MSG_PUB.INITIALIZE;
309
310 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
311 jtm_message_log_pkg.Log_Msg
312 ( v_object_id => p_record.task_id
313 , v_object_name => g_object_name
314 , v_message => 'Entering CSL_TASKS_PKG.APPLY_RECORD'
315 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
316 END IF;
317
318 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
319 jtm_message_log_pkg.Log_Msg
320 ( v_object_id => p_record.task_id
321 , v_object_name => g_object_name
322 , v_message => 'Processing task_id = ' || p_record.task_id || fnd_global.local_chr(10) ||
323 'DMLTYPE = ' || p_record.dmltype$$
324 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
325 END IF;
326
327 IF p_record.dmltype$$='I' THEN
328 -- Process insert
329 APPLY_INSERT
330 (
331 p_record,
332 p_error_msg,
333 x_return_status
334 );
335 ELSIF p_record.dmltype$$='U' THEN
336 -- Process update
337 APPLY_UPDATE
338 (
339 p_record,
340 p_error_msg,
341 x_return_status
342 );
343 ELSIF p_record.dmltype$$='D' THEN
344 -- Process delete; not supported for this entity
345 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
346 jtm_message_log_pkg.Log_Msg
347 ( v_object_id => p_record.task_id
348 , v_object_name => g_object_name
349 , v_message => 'Delete is not supported for this entity'
350 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
351 END IF;
352
353 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
354 (
355 p_message => 'CSL_DML_OPERATION'
356 , p_token_name1 => 'DML'
357 , p_token_value1 => p_record.dmltype$$
358 );
359
360 x_return_status := FND_API.G_RET_STS_ERROR;
361 ELSE
362 -- invalid dml type
363 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
364 jtm_message_log_pkg.Log_Msg
365 ( v_object_id => p_record.task_id
366 , v_object_name => g_object_name
367 , v_message => 'Invalid DML type: ' || p_record.dmltype$$
368 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
369 END IF;
370
371 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
372 (
373 p_message => 'CSL_DML_OPERATION'
374 , p_token_name1 => 'DML'
375 , p_token_value1 => p_record.dmltype$$
376 );
377
378 x_return_status := FND_API.G_RET_STS_ERROR;
379 END IF;
380
381 IF p_record.dmltype$$ = 'U' AND x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
382 l_access_id := jtm_hook_util_pkg.get_acc_id(
383 p_acc_table_name => 'CSL_JTF_TASKS_ACC',
384 p_resource_id => JTM_HOOK_UTIL_PKG.get_resource_id( p_record.clid$$cs ),
385 p_pk1_name => 'TASK_ID',
386 p_pk1_num_value => p_record.TASK_ID
387 );
388 l_rc := CSL_SERVICEL_WRAPPER_PKG.AUTONOMOUS_MARK_DIRTY(
389 P_PUB_ITEM => g_pub_name,
390 P_ACCESSID => l_access_id,
391 P_RESOURCEID => JTM_HOOK_UTIL_PKG.get_resource_id( p_record.clid$$cs ),
392 P_DML => 'U',
393 P_TIMESTAMP => sysdate
394 );
395 END IF;
396
397 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
398 jtm_message_log_pkg.Log_Msg
399 ( v_object_id => p_record.task_id
400 , v_object_name => g_object_name
401 , v_message => 'Leaving CSL_TASKS_PKG.APPLY_RECORD'
402 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
403 END IF;
404 EXCEPTION WHEN OTHERS THEN
405 /*** defer record when any process exception occurs ***/
406 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
407 jtm_message_log_pkg.Log_Msg
408 ( v_object_id => p_record.task_id
409 , v_object_name => g_object_name
410 , v_message => 'Exception occurred in APPLY_RECORD:' || fnd_global.local_chr(10) || sqlerrm
411 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
412 END IF;
413
414 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', sqlerrm);
415 p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
416 (
417 p_api_error => TRUE
418 );
419
420 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
421 jtm_message_log_pkg.Log_Msg
422 ( v_object_id => p_record.task_id
423 , v_object_name => g_object_name
424 , v_message => 'Leaving CSL_TASKS_PKG.APPLY_RECORD'
425 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
426 END IF;
427
428 x_return_status := FND_API.G_RET_STS_ERROR;
429 END APPLY_RECORD;
430
431 /***
432 This procedure is called by CSL_SERVICEL_WRAPPER_PKG when publication item CSL_JTF_TASKS_VL
433 is dirty. This happens when a mobile field service device executed DML on an updatable table and did
434 a fast sync. This procedure will insert the data that came from mobile into the backend tables using
435 public APIs.
436 ***/
437 PROCEDURE APPLY_CLIENT_CHANGES
438 (
439 p_user_name IN VARCHAR2,
440 p_tranid IN NUMBER,
441 p_debug_level IN NUMBER,
442 x_return_status IN OUT NOCOPY VARCHAR2
443 ) IS
444
445 l_process_status VARCHAR2(1);
446 l_error_msg VARCHAR2(4000);
447 BEGIN
448 g_debug_level := p_debug_level;
449 x_return_status := FND_API.G_RET_STS_SUCCESS;
450
451 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
452 jtm_message_log_pkg.Log_Msg
453 ( v_object_id => null
454 , v_object_name => g_object_name
455 , v_message => 'Entering CSL_TASKS_PKG.Apply_Client_Changes'
456 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
457 END IF;
458
459 /*** loop through task records in inqueue ***/
460 FOR r_task IN c_task( p_user_name, p_tranid) LOOP
461
462 SAVEPOINT save_rec;
463
464 /*** apply record ***/
465 APPLY_RECORD
466 (
467 r_task
468 , l_error_msg
469 , l_process_status
470 );
471
472 /*** was record processed successfully? ***/
473 IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
474 /*** Yes -> delete record from inqueue ***/
475 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
476 jtm_message_log_pkg.Log_Msg
477 ( v_object_id => r_task.task_id
478 , v_object_name => g_object_name
479 , v_message => 'Record successfully processed, deleting from inqueue'
480 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
481 END IF;
482
483 CSL_SERVICEL_WRAPPER_PKG.DELETE_RECORD
484 (
485 p_user_name,
486 p_tranid,
487 r_task.seqno$$,
488 r_task.task_id,
489 g_object_name,
490 g_pub_name,
491 l_error_msg,
492 l_process_status
493 );
494
495 /*** was delete successful? ***/
496 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
497 /*** no -> rollback ***/
498 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
499 jtm_message_log_pkg.Log_Msg
500 ( v_object_id => r_task.task_id
501 , v_object_name => g_object_name
502 , v_message => 'Deleting from inqueue failed, rolling back to savepoint'
503 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
504 END IF;
505 ROLLBACK TO save_rec;
506 END IF;
507 END IF;
508
509 IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
510 /*** Record was not processed successfully or delete failed -> defer and reject record ***/
511 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
512 jtm_message_log_pkg.Log_Msg
513 ( v_object_id => r_task.task_id
514 , v_object_name => g_object_name
515 , v_message => 'Record not processed successfully, deferring and rejecting record'
516 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
517 END IF;
518
519 CSL_SERVICEL_WRAPPER_PKG.DEFER_RECORD
520 (
521 p_user_name
522 , p_tranid
523 , r_task.seqno$$
524 , r_task.task_id
525 , g_object_name
526 , g_pub_name
527 , l_error_msg
528 , l_process_status
529 , r_task.dmltype$$
530 );
531
532 /*** Was defer successful? ***/
533 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
534 /*** no -> rollback ***/
535 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
536 jtm_message_log_pkg.Log_Msg
537 ( v_object_id => r_task.task_id
538 , v_object_name => g_object_name
539 , v_message => 'Defer record failed, rolling back to savepoint'
540 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
541 END IF;
542 ROLLBACK TO save_rec;
543 END IF;
544 END IF;
545
546 END LOOP;
547
548 IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
549 jtm_message_log_pkg.Log_Msg
550 ( v_object_id => null
551 , v_object_name => g_object_name
552 , v_message => 'Leaving CSL_TASKS_PKG.Apply_Client_Changes'
553 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
554 END IF;
555
556 EXCEPTION WHEN OTHERS THEN
557 /*** catch and log exceptions ***/
558 IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
559 jtm_message_log_pkg.Log_Msg
560 ( v_object_id => null
561 , v_object_name => g_object_name
562 , v_message => 'Exception occurred in APPLY_CLIENT_CHANGES:' || fnd_global.local_chr(10) || sqlerrm
563 , v_level_id => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
564 END IF;
565 x_return_status := FND_API.G_RET_STS_ERROR;
566 END APPLY_CLIENT_CHANGES;
567
568 END CSL_TASKS_PKG;