DBA Data[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,
27   l_msg_data  VARCHAR2(240);
24            x_return_status IN OUT NOCOPY VARCHAR2
25          ) IS
26   l_msg_count NUMBER;
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
162   END IF;
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);
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
289   END IF;
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);
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;