DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_TA_AUDIT_PKG

Source


1 PACKAGE BODY CSM_TA_AUDIT_PKG AS
2 /* $Header: csmutaab.pls 120.3.12020000.2 2013/04/09 11:06:40 saradhak ship $ */
3 
4 error EXCEPTION;
5 
6 
7 /*** Globals ***/
8 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_TA_AUDIT_PKG';
9 g_pub_name     CONSTANT VARCHAR2(30) := 'CSM_TASK_ASSIGNMENTS_AUDIT';
10 g_debug_level           NUMBER; -- debug level
11 
12 /* Select all inq records */
13 CURSOR c_ta_audit( b_user_name VARCHAR2, b_tranid NUMBER, b_assignment_id NUMBER) is
14   SELECT *
15   FROM  CSM_TASK_ASSIGNMENTS_AUDIT_INQ
16   WHERE tranid$$ = b_tranid
17   AND   clid$$cs = b_user_name
18   AND   assignment_id = b_assignment_id;
19 
20 
21 PROCEDURE DO_TASK_AUDIT(p_record IN c_ta_audit%ROWTYPE,x_return_status OUT NOCOPY VARCHAR2)
22 IS
23 l_t_id NUMBER;
24 l_r_id ROWID;
25 l_ovn NUMBER;
26 BEGIN
27 
28 SELECT JTF_TASK_AUDITS_S.nextval INTO l_t_id FROM DUAL;
29 
30 CSM_UTIL_PKG.LOG('Entered CSM_TA_AUDIT_PKG.DO_TASK_AUDIT for audit Id:'||l_t_id||' for Task ID ' || p_record.TASK_ID ,
31                          'CSM_TA_AUDIT_PKG.DO_TASK_AUDIT',FND_LOG.LEVEL_PROCEDURE);
32 
33 SELECT OBJECT_VERSION_NUMBER INTO l_ovn FROM JTF_TASKS_B WHERE TASK_ID=p_record.TASK_ID;
34 
35 
36 
37 JTF_TASK_AUDITS_PVT.INSERT_ROW(
38   X_ROWID => l_r_id,
39   X_TASK_AUDIT_ID =>l_t_id,
40   X_TASK_ID =>p_record.TASK_ID,
41   X_CREATION_DATE =>p_record.CREATION_DATE,
42   X_CREATED_BY =>p_record.CREATED_BY,
43   X_LAST_UPDATE_DATE =>p_record.LAST_UPDATE_DATE,
44   X_LAST_UPDATED_BY =>p_record.LAST_UPDATED_BY,
45   X_LAST_UPDATE_LOGIN =>p_record.LAST_UPDATE_LOGIN,
46   X_OBJECT_VERSION_NUMBER =>l_ovn,
47   X_OLD_TASK_STATUS_ID =>p_record.OLD_ASSIGNMENT_STATUS_ID,
48   X_NEW_TASK_STATUS_ID =>p_record.NEW_ASSIGNMENT_STATUS_ID,
49   X_NEW_NOTIFICATION_PERIOD => NULL,  X_OLD_NOTIFICATION_PERIOD_UOM => NULL,  X_NEW_NOTIFICATION_PERIOD_UOM => NULL,
50   X_OLD_PARENT_TASK_ID => NULL,  X_NEW_PARENT_TASK_ID => NULL,
51   X_OLD_RECURRENCE_RULE_ID => NULL,  X_NEW_RECURRENCE_RULE_ID => NULL,
52   X_PALM_CHANGED_FLAG => NULL,  X_WINCE_CHANGED_FLAG => NULL,  X_LAPTOP_CHANGED_FLAG => NULL,
53   X_DEVICE1_CHANGED_FLAG => NULL,  X_DEVICE2_CHANGED_FLAG => NULL,  X_DEVICE3_CHANGED_FLAG => NULL,
57   X_OLD_TASK_PRIORITY_ID => NULL,  X_NEW_TASK_PRIORITY_ID => NULL,
54   X_OLD_CURRENCY_CODE => NULL,  X_NEW_CURRENCY_CODE => NULL,
55   X_OLD_COSTS => NULL,  X_NEW_COSTS => NULL,
56   X_OLD_TASK_TYPE_ID => NULL,  X_NEW_TASK_TYPE_ID => NULL,
58   X_OLD_OWNER_ID => NULL,  X_NEW_OWNER_ID => NULL,
59   X_OLD_OWNER_TYPE_CODE => NULL,  X_NEW_OWNER_TYPE_CODE => NULL,
60   X_OLD_ASSIGNED_BY_ID => NULL,  X_NEW_ASSIGNED_BY_ID => NULL,
61   X_OLD_CUST_ACCOUNT_ID => NULL,  X_NEW_CUST_ACCOUNT_ID => NULL,
62   X_OLD_CUSTOMER_ID => NULL,  X_NEW_CUSTOMER_ID => NULL,
63   X_OLD_ADDRESS_ID => NULL,  X_NEW_ADDRESS_ID => NULL,
64   X_OLD_PLANNED_START_DATE => NULL,  X_NEW_PLANNED_START_DATE => NULL,
65   X_OLD_PLANNED_END_DATE => NULL,  X_NEW_PLANNED_END_DATE => NULL,
66   X_OLD_SCHEDULED_START_DATE => NULL,  X_NEW_SCHEDULED_START_DATE => NULL,
67   X_OLD_SCHEDULED_END_DATE => NULL,  X_NEW_SCHEDULED_END_DATE => NULL,
68   X_OLD_ACTUAL_START_DATE => NULL,  X_NEW_ACTUAL_START_DATE => NULL,
69   X_OLD_ACTUAL_END_DATE => NULL,  X_NEW_ACTUAL_END_DATE => NULL,
70   X_OLD_SOURCE_OBJECT_TYPE_CODE => NULL,  X_NEW_SOURCE_OBJECT_TYPE_CODE => NULL,
71   X_OLD_TIMEZONE_ID => NULL,  X_NEW_TIMEZONE_ID => NULL,
72   X_OLD_SOURCE_OBJECT_ID => NULL,  X_NEW_SOURCE_OBJECT_ID => NULL,
73   X_OLD_SOURCE_OBJECT_NAME => NULL,  X_NEW_SOURCE_OBJECT_NAME => NULL,
74   X_OLD_DURATION => NULL,  X_NEW_DURATION => NULL,
75   X_OLD_DURATION_UOM => NULL,  X_NEW_DURATION_UOM => NULL,
76   X_OLD_PLANNED_EFFORT => NULL,  X_NEW_PLANNED_EFFORT => NULL,
77   X_OLD_PLANNED_EFFORT_UOM => NULL,  X_NEW_PLANNED_EFFORT_UOM => NULL,
78   X_OLD_ACTUAL_EFFORT => NULL,  X_NEW_ACTUAL_EFFORT => NULL,
79   X_OLD_ACTUAL_EFFORT_UOM => NULL,  X_NEW_ACTUAL_EFFORT_UOM => NULL,
80   X_OLD_PERCENTAGE_COMPLETE => NULL,  X_NEW_PERCENTAGE_COMPLETE => NULL,
81   X_OLD_REASON_CODE => NULL,  X_NEW_REASON_CODE => NULL,
82   X_PRIVATE_CHANGED_FLAG => NULL,  X_PUBLISH_CHANGED_FLAG => NULL,
83   X_RESTRICT_CLOSURE_CHANGE_FLAG => NULL,  X_MULTI_BOOKED_CHANGED_FLAG => NULL,
84   X_MILESTONE_CHANGED_FLAG => NULL,  X_HOLIDAY_CHANGED_FLAG => NULL,
85   X_BILLABLE_CHANGED_FLAG => NULL,  X_OLD_BOUND_MODE_CODE => NULL,
86   X_NEW_BOUND_MODE_CODE => NULL,  X_SOFT_BOUND_CHANGED_FLAG => NULL,
87   X_OLD_WORKFLOW_PROCESS_ID => NULL,  X_NEW_WORKFLOW_PROCESS_ID => NULL,
88   X_NOTIFICATION_CHANGED_FLAG => NULL,  X_OLD_NOTIFICATION_PERIOD => NULL,
89   X_OLD_TASK_NAME => NULL,  X_NEW_TASK_NAME => NULL,
90   X_OLD_DESCRIPTION => NULL,  X_NEW_DESCRIPTION => NULL,
91   X_OLD_OWNER_TERRITORY_ID => NULL,  X_NEW_OWNER_TERRITORY_ID => NULL,
92   X_NEW_ESCALATION_LEVEL => NULL,  X_OLD_ESCALATION_LEVEL => NULL,
93   X_OLD_DATE_SELECTED => NULL,  X_NEW_DATE_SELECTED => NULL,
94   X_OLD_LOCATION_ID => NULL,  X_NEW_LOCATION_ID => NULL);
95 
96    x_return_status := FND_API.G_RET_STS_SUCCESS;
97 
98 EXCEPTION WHEN OTHERS THEN
99   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'DO_TASK_AUDIT', sqlerrm);
100   CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.DO_TASK_AUDIT: ' || sqlerrm
101                || ' for Task ID ' || p_record.TASK_ID ,'CSM_TA_AUDIT_PKG.DO_TASK_AUDIT',FND_LOG.LEVEL_EXCEPTION);
102    x_return_status := FND_API.G_RET_STS_ERROR;
103 END DO_TASK_AUDIT;
104 
105 
106 /***
107   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
108 ***/
109 PROCEDURE APPLY_INSERT
110          (
111            p_record        IN c_ta_audit%ROWTYPE,
112            p_error_msg     out nocopy    VARCHAR2,
113            x_return_status IN out nocopy VARCHAR2
114          ) IS
115 
116 --Variable Declarations
117 l_object_version_number  NUMBER := 1;
118 l_msg_count          NUMBER;
119 l_msg_data           VARCHAR2(4000);
120 l_t_id NUMBER;
121 BEGIN
122 
123    x_return_status := FND_API.G_RET_STS_SUCCESS;
124    CSM_UTIL_PKG.LOG('Entering CSM_TA_AUDIT_PKG.APPLY_INSERT for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,
125                          'CSM_TA_AUDIT_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
126 
127    SELECT JTF_TASK_ASSIGNMENTS_AUDIT_S.nextval INTO l_t_id FROM DUAL;
128 
129    CSM_UTIL_PKG.LOG('Before calling JTF_TASK_ASSIGNMENT_AUDIT_PKG.INSERT_ROW for Task Assignment Audit ID ' || l_t_id ,
130                          'CSM_TA_AUDIT_PKG.APPLY_INSERT',FND_LOG.LEVEL_EVENT);
131     --We are calling this API as they do not support old values
132     --in create_task_assignment_audit procedure
133     JTF_TASK_ASSIGNMENT_AUDIT_PKG.INSERT_ROW(
134         X_ASSIGNMENT_AUDIT_ID         => l_t_id,
135         X_ASSIGNMENT_ID               => p_record.ASSIGNMENT_ID,
136         X_TASK_ID                     => p_record.TASK_ID,
137         X_CREATION_DATE               => p_record.CREATION_DATE,
138         X_CREATED_BY                  => p_record.CREATED_BY,
139         X_LAST_UPDATE_DATE            => p_record.LAST_UPDATE_DATE,
140         X_LAST_UPDATED_BY             => p_record.LAST_UPDATED_BY,
141         X_LAST_UPDATE_LOGIN           => p_record.LAST_UPDATE_LOGIN,
142         X_OLD_RESOURCE_TYPE_CODE      => p_record.OLD_RESOURCE_TYPE_CODE,
143         X_NEW_RESOURCE_TYPE_CODE      => p_record.NEW_RESOURCE_TYPE_CODE,
144         X_OLD_RESOURCE_ID             => p_record.OLD_RESOURCE_ID,
145         X_NEW_RESOURCE_ID             => p_record.NEW_RESOURCE_ID,
146         X_OLD_ASSIGNMENT_STATUS_ID    => p_record.OLD_ASSIGNMENT_STATUS_ID,
147         X_NEW_ASSIGNMENT_STATUS_ID    => p_record.NEW_ASSIGNMENT_STATUS_ID,
148         X_OLD_ACTUAL_EFFORT           => NULL,
149         X_NEW_ACTUAL_EFFORT           => NULL,
150         X_OLD_ACTUAL_EFFORT_UOM       => NULL,
151         X_NEW_ACTUAL_EFFORT_UOM       => NULL,
152         X_OLD_RES_TERRITORY_ID        => NULL,
153         X_NEW_RES_TERRITORY_ID        => NULL,
154         X_OLD_ASSIGNEE_ROLE           => NULL,
155         X_NEW_ASSIGNEE_ROLE           => NULL,
156         X_OLD_ALARM_TYPE              => NULL,
160         X_OLD_CATEGORY_ID             => NULL,
157         X_NEW_ALARM_TYPE              => NULL,
158         X_OLD_ALARM_CONTACT           => NULL,
159         X_NEW_ALARM_CONTACT           => NULL,
161         X_NEW_CATEGORY_ID             => NULL,
162         X_OLD_BOOKING_START_DATE      => NULL,
163         X_NEW_BOOKING_START_DATE      => NULL,
164         X_OLD_BOOKING_END_DATE        => NULL,
165         X_NEW_BOOKING_END_DATE        => NULL,
166         X_OLD_ACTUAL_TRAVEL_DISTANCE  => p_record.OLD_ACTUAL_TRAVEL_DISTANCE,
167         X_NEW_ACTUAL_TRAVEL_DISTANCE  => p_record.NEW_ACTUAL_TRAVEL_DISTANCE,
168         X_OLD_ACTUAL_TRAVEL_DURATION  => p_record.OLD_ACTUAL_TRAVEL_DURATION,
169         X_NEW_ACTUAL_TRAVEL_DURATION  => p_record.NEW_ACTUAL_TRAVEL_DURATION,
170         X_OLD_ACTUAL_TRAVEL_DUR_UOM   => p_record.OLD_ACTUAL_TRAVEL_DURATION_UOM,
171         X_NEW_ACTUAL_TRAVEL_DUR_UOM   => p_record.NEW_ACTUAL_TRAVEL_DURATION_UOM,
172         X_OLD_SCHED_TRAVEL_DISTANCE   => p_record.OLD_SCHED_TRAVEL_DISTANCE,
173         X_NEW_SCHED_TRAVEL_DISTANCE   => p_record.NEW_SCHED_TRAVEL_DISTANCE,
174         X_OLD_SCHED_TRAVEL_DURATION   => p_record.OLD_SCHED_TRAVEL_DURATION,
175         X_NEW_SCHED_TRAVEL_DURATION   => p_record.NEW_SCHED_TRAVEL_DURATION,
176         X_OLD_SCHED_TRAVEL_DUR_UOM    => p_record.OLD_SCHED_TRAVEL_DURATION_UOM,
177         X_NEW_SCHED_TRAVEL_DUR_UOM    => p_record.NEW_SCHED_TRAVEL_DURATION_UOM,
178         X_OLD_ACTUAL_START_DATE       => p_record.OLD_ACTUAL_START_DATE,
179         X_NEW_ACTUAL_START_DATE       => p_record.NEW_ACTUAL_START_DATE,
180         X_OLD_ACTUAL_END_DATE         => p_record.OLD_ACTUAL_END_DATE,
181         X_NEW_ACTUAL_END_DATE         => p_record.NEW_ACTUAL_END_DATE,
182         X_FREE_BUSY_TYPE_CHANGED      => NULL,
183         X_UPDATE_STATUS_FLAG_CHANGED  => NULL,
184         X_SHOW_ON_CALENDAR_CHANGED    => NULL,
185         X_SCHEDULED_FLAG_CHANGED      => NULL
186       );
187 
188   CSM_UTIL_PKG.LOG('Leaving CSM_TA_AUDIT_PKG.APPLY_INSERT for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,
189                          'CSM_TA_AUDIT_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
190 
191   DO_TASK_AUDIT(p_record,x_return_status);
192 
193   x_return_status := FND_API.G_RET_STS_SUCCESS;
194 EXCEPTION WHEN OTHERS THEN
195   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', sqlerrm);
196      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
197      (
198        p_api_error      => TRUE
199      );
200      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT: ' || sqlerrm
201                || ' for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.APPLY_INSERT',FND_LOG.LEVEL_EXCEPTION);
202 
203     x_return_status := FND_API.G_RET_STS_SUCCESS;
204 END APPLY_INSERT;
205 
206 
207 /***
208   This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
209 ***/
210 PROCEDURE APPLY_RECORD
211          (
212            p_record        IN     c_ta_audit%ROWTYPE,
213            p_error_msg     out nocopy    VARCHAR2,
214            x_return_status IN out nocopy VARCHAR2
215          ) IS
216   l_rc                    BOOLEAN;
217   l_access_id             NUMBER;
218 BEGIN
219   /*** initialize return status and message list ***/
220   x_return_status := FND_API.G_RET_STS_SUCCESS;
221   FND_MSG_PUB.INITIALIZE;
222 
223   CSM_UTIL_PKG.LOG('Entering CSM_TA_AUDIT_PKG.APPLY_RECORD for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,
224                          'CSM_TA_AUDIT_PKG.APPLY_RECORD',FND_LOG.LEVEL_PROCEDURE);
225 
226   IF p_record.dmltype$$='I' THEN
227     -- Process insert
228     APPLY_INSERT
229       (
230         p_record,
231         p_error_msg,
232         x_return_status
233       );
234   ELSE --Delete and update is not supported for this PI
235     -- invalid dml type
236       CSM_UTIL_PKG.LOG
237         ( 'Invalid DML type: ' || p_record.dmltype$$ || ' is not supported for this entity'
238       || ' for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.APPLY_RECORD',FND_LOG.LEVEL_ERROR);
239 
240     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
241       (
242         p_message        => 'CSM_DML_OPERATION'
243       , p_token_name1    => 'DML'
244       , p_token_value1   => p_record.dmltype$$
245       );
246 
247     x_return_status := FND_API.G_RET_STS_ERROR;
248   END IF;
249 
250   CSM_UTIL_PKG.LOG('Leaving CSM_TA_AUDIT_PKG.APPLY_RECORD for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,
251                          'CSM_TA_AUDIT_PKG.APPLY_RECORD',FND_LOG.LEVEL_PROCEDURE);
252 EXCEPTION WHEN OTHERS THEN
253      fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', sqlerrm);
254      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
255      (
256        p_api_error      => TRUE
257      );
258      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_RECORD: ' || sqlerrm
259                || ' for Task Assignment Audit ID ' || p_record.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.APPLY_RECORD',FND_LOG.LEVEL_EXCEPTION);
260 
261   x_return_status := FND_API.G_RET_STS_ERROR;
262 
263 END APPLY_RECORD;
264 
265 /***
266   This procedure is called by CSM_SERVICEP_WRAPPER_PKG when publication item CSM_TASK_ASSIGNMENT_AUDIT
267   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
268   a fast sync. This procedure will insert the data that came from mobile into the backend tables using
269   public APIs.
270 ***/
271 PROCEDURE APPLY_CLIENT_CHANGES
272          (
273            p_user_name     IN VARCHAR2,
274            p_tranid        IN NUMBER,
278          ) IS
275            p_assignment_id IN NUMBER,
276            p_debug_level   IN NUMBER,
277            x_return_status IN out nocopy VARCHAR2
279 
280   l_process_status VARCHAR2(1);
281   l_error_msg      VARCHAR2(4000);
282 
283 BEGIN
284 CSM_UTIL_PKG.LOG('Entering CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES ',
285                          'CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
286   g_debug_level := p_debug_level;
287   x_return_status := FND_API.G_RET_STS_SUCCESS;
288 
289   /*** loop through all the  records in inqueue ***/
290   FOR r_ta_audit_rec IN c_ta_audit( p_user_name, p_tranid, p_assignment_id) LOOP
291     --SAVEPOINT save_rec ;
292     /*** apply record ***/
293     APPLY_RECORD
294       (
295         r_ta_audit_rec
296       , l_error_msg
297       , l_process_status
298       );
299 
300     /*** was record processed successfully? ***/
301     IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
302       /*** Yes -> Reject record from inqueue ***/
303       CSM_UTIL_PKG.DELETE_RECORD
304         (
305           p_user_name,
306           p_tranid,
307           r_ta_audit_rec.seqno$$,
308           r_ta_audit_rec.ASSIGNMENT_AUDIT_ID,
309           g_object_name,
310           g_pub_name,
311           l_error_msg,
312           l_process_status
313         );
314       /*** was delete successful? ***/
315       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
316        /*** no -> rollback ***/
317           CSM_UTIL_PKG.LOG
318           ( 'Deleting from inqueue failed, No rolling back to savepoint'
319       || ' for Task Assignment Audit ID ' || r_ta_audit_rec.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
320         x_return_status := FND_API.G_RET_STS_SUCCESS;
321       END IF;
322     ELSIF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
323       /*** Record was not applied successfully -> defer and reject records ***/
324       csm_util_pkg.log( 'Record not processed successfully, deferring and rejecting record'
325       || ' for PK ' || r_ta_audit_rec.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
326 
327       CSM_UTIL_PKG.REJECT_RECORD
328        (
329          p_user_name
330        , p_tranid
331        , r_ta_audit_rec.seqno$$
332        , r_ta_audit_rec.ASSIGNMENT_AUDIT_ID
333        , g_object_name
334        , g_pub_name
335        , l_error_msg
336        , l_process_status
337        );
338 
339       /*** Was defer successful? ***/
340       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
341         /*** no -> rollback ***/
342           CSM_UTIL_PKG.LOG
343           ( 'Reject record failed, No rolling back to savepoint'
344           || ' for PK ' || r_ta_audit_rec.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
345         --ROLLBACK TO save_rec;
346         x_return_status := FND_API.G_RET_STS_ERROR;
347       END IF;
348     END IF;
349 
350   END LOOP;
351 
352   CSM_UTIL_PKG.LOG('Leaving CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',
353                          'CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
354 
355 EXCEPTION WHEN OTHERS THEN
356   /*** catch and log exceptions ***/
357      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_CLIENT_CHANGES: ' || sqlerrm
358                ,'CSM_TA_AUDIT_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
359 
360   x_return_status := FND_API.G_RET_STS_ERROR;
361 
362 END APPLY_CLIENT_CHANGES;
363 
364 /***
365   This procedure is called by CSM_TASK_ASSIGNMENTS_PKG when publication item CSM_TASK_ASSIGNMENTS/CSM_TASK_ASSIGNMENT_AUDIT
366   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
367   a fast sync. This procedure will insert the data that came from mobile into the backend tables using
368   public APIs.
369 ***/
370 PROCEDURE DEFER_CLIENT_CHANGES
371          (
372            p_user_name     IN VARCHAR2,
373            p_tranid        IN NUMBER,
374            p_assignment_id IN NUMBER,
375            p_debug_level   IN NUMBER,
376            x_return_status IN out nocopy VARCHAR2
377          ) IS
378 
379 l_process_status VARCHAR2(10);
380 l_error_msg      VARCHAR2(4000);
381 
382 BEGIN
383 CSM_UTIL_PKG.LOG('Entering CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES ',
384                          'CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
385   g_debug_level := p_debug_level;
386   x_return_status := FND_API.G_RET_STS_SUCCESS;
387 
388   /*** loop through all the  records in inqueue to Defer ***/
389   FOR r_ta_audit_rec IN c_ta_audit( p_user_name, p_tranid, p_assignment_id) LOOP
390 
391     /*** Parent Task Assignment Defered and hence Defer the TA Audit records ***/
392       csm_util_pkg.log( 'Record not processed successfully, deferring and rejecting record'
393       || ' for PK ' || r_ta_audit_rec.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
394 
395       CSM_UTIL_PKG.DEFER_RECORD
396        (
397          p_user_name
398        , p_tranid
399        , r_ta_audit_rec.seqno$$
400        , r_ta_audit_rec.ASSIGNMENT_AUDIT_ID
401        , g_object_name
402        , g_pub_name
403        , l_error_msg
404        , l_process_status
405        , r_ta_audit_rec.dmltype$$
406        );
407 
408       /*** Was defer successful? ***/
409       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
410         /*** no -> rollback ***/
411           CSM_UTIL_PKG.LOG
412           ( 'Defer record failed, No rolling back to savepoint'
413           || ' for PK ' || r_ta_audit_rec.ASSIGNMENT_AUDIT_ID ,'CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
414         --ROLLBACK TO save_rec;
415         x_return_status := FND_API.G_RET_STS_ERROR;
416         EXIT;
417        END IF;
418   END LOOP;
419   CSM_UTIL_PKG.LOG('Leaving CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES',
420                          'CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
421   RETURN;
422 EXCEPTION WHEN OTHERS THEN
423   /*** catch and log exceptions ***/
424      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.DEFER_CLIENT_CHANGES: ' || sqlerrm
425                ,'CSM_TA_AUDIT_PKG.DEFER_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
426 
427   x_return_status := FND_API.G_RET_STS_ERROR;
428 
429 END DEFER_CLIENT_CHANGES;
430 
431 END CSM_TA_AUDIT_PKG;