DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_AUTO_SYNC_PKG

Source


1 PACKAGE BODY CSM_AUTO_SYNC_PKG AS
2 /* $Header: csmuasb.pls 120.6 2009/08/06 06:32:45 hbeeram noship $ */
3 
4   /*
5    * The function is to upload csm_auto_sync table to base table
6    */
7 
8 --
9 -- MODIFICATION HISTORY
10 -- Person      Date                 Comments
11 -- HBEERAM     29-APR-2009          Created
12 --
13 -- ---------   -------------------  ------------------------------------------
14     -- Enter procedure, function bodies as shown below
15 
16 /*** Globals ***/
17 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_AUTO_SYNC_PKG';  -- package name
18 g_pub_name     CONSTANT VARCHAR2(30) := 'CSM_AUTO_SYNC';  -- publication item name
19 g_debug_level           NUMBER; -- debug level
20 
21 g_auto_sync_acc_table_name        CONSTANT VARCHAR2(30) := 'CSM_AUTO_SYNC_ACC';
22 g_auto_sync_table_name            CONSTANT VARCHAR2(30) := 'CSM_AUTO_SYNC';
23 g_auto_sync_seq_name              CONSTANT VARCHAR2(30) := 'CSM_AUTO_SYNC_ACC_S';
24 g_auto_sync_pk1_name              CONSTANT VARCHAR2(30) := 'ID';
25 g_auto_sync_pk2_name              CONSTANT VARCHAR2(30) := 'AUTO_SYNC_NUM';
26 g_auto_sync_pubi_name             CONSTANT CSM_ACC_PKG.t_publication_item_list :=
27   CSM_ACC_PKG.t_publication_item_list('CSM_AUTO_SYNC');
28 
29 
30 CURSOR c_auto_sync_inq( b_user_name VARCHAR2, b_tranid NUMBER) IS
31   SELECT *
32   FROM  csm_auto_sync_inq
33   WHERE tranid$$ = b_tranid
34   AND   clid$$cs = b_user_name;
35 
36 
37 PROCEDURE INSERT_AUTO_SYNC_ACC (p_id NUMBER, p_user_id   IN fnd_user.user_id%TYPE,p_auto_sync_num NUMBER)
38 IS
39   l_sysdate 	DATE;
40   l_count NUMBER;
41 BEGIN
42     CSM_ACC_PKG.Insert_Acc
43     ( P_PUBLICATION_ITEM_NAMES => g_auto_sync_pubi_name
44      ,P_ACC_TABLE_NAME         => g_auto_sync_acc_table_name
45      ,P_SEQ_NAME               => g_auto_sync_seq_name
46      ,P_PK1_NAME               => g_auto_sync_pk1_name
47      ,P_PK1_NUM_VALUE          => p_id
48      ,P_USER_ID                => p_user_id
49      ,P_PK2_NAME               => g_auto_sync_pk2_name
50      ,P_PK2_NUM_VALUE          => p_auto_sync_num
51     );
52 EXCEPTION WHEN OTHERS THEN
53   CSM_UTIL_PKG.LOG( 'Exception occurred in ' || g_object_name || '.INSERT_AUTO_SYNC_ACC: '
54 || SQLERRM,' for PK ' || to_char(p_id) || g_object_name || '.INSERT_AUTO_SYNC_ACC',FND_LOG.LEVEL_EXCEPTION);
55 
56   RAISE;
57 END INSERT_AUTO_SYNC_ACC;-- end INSERT_AUTO_SYNC_ACC
58 
59 /******************************************************************************************************************/
60 PROCEDURE AUTO_SYNC_ACC_PROCESSOR(p_user_id IN fnd_user.user_id%TYPE)
61 IS
62 l_sqlerrno VARCHAR2(20);
63 l_sqlerrmsg VARCHAR2(4000);
64 l_error_msg VARCHAR2(4000);
65 l_return_status VARCHAR2(2000);
66 
67 -- get all notifications in which user is a recipient
68 CURSOR c_id(b_user_id fnd_user.user_id%TYPE) IS
69  SELECT id, auto_sync_num
70  FROM   csm_auto_sync;
71 
72 BEGIN
73    CSM_UTIL_PKG.LOG('Entering AUTO_SYNC_ACC_PROCESSOR for user_id: ' || p_user_id,
74                                    g_object_name || '.AUTO_SYNC_ACC_PROCESSOR',FND_LOG.LEVEL_PROCEDURE);
75 
76 
77   -- get all notifications in which user is a recipient
78   FOR l_rec IN c_id(p_user_id)
79   LOOP
80    INSERT_AUTO_SYNC_ACC (l_rec.id, p_user_id,l_rec.auto_sync_num);
81   END LOOP;
82 
83 
84     CSM_UTIL_PKG.LOG('Leaving AUTO_SYNC_ACC_PROCESSOR for user_id: ' || p_user_id,
85                                    g_object_name || '.AUTO_SYNC_ACC_PROCESSOR',FND_LOG.LEVEL_PROCEDURE);
86 EXCEPTION
87   	WHEN OTHERS THEN
88         l_sqlerrno := to_char(SQLCODE);
89         l_sqlerrmsg := substr(SQLERRM, 1,2000);
90         l_error_msg := ' Exception in  AUTO_SYNC_ACC_PROCESSOR for for user_id: ' || p_user_id
91                        || ':' || l_sqlerrno || ':' || l_sqlerrmsg;
92         CSM_UTIL_PKG.LOG(l_error_msg, 'CSM_AUTO_SYNC_PKG.AUTO_SYNC_ACC_PROCESSOR',FND_LOG.LEVEL_EXCEPTION);
93         RAISE;
94 
95 END AUTO_SYNC_ACC_PROCESSOR;
96 /******************************************************************************************************************/
97 
98 -------
99 
100 /***
101   This procedure is called by APPLY_CRECORD when
102   an inserted record is to be processed.
103 ***/
104 PROCEDURE APPLY_INSERT
105          (
106            p_record        IN c_auto_sync_inq%ROWTYPE,
107            p_error_msg     OUT NOCOPY    VARCHAR2,
108            x_return_status IN OUT NOCOPY VARCHAR2,
109            x_reject_row    OUT NOCOPY BOOLEAN
110          ) IS
111 
112 
113   l_id    csm_auto_sync.id%TYPE  ;
114   l_flag  csm_auto_sync.flag%TYPE;
115   l_rowid ROWID;
116 
117  CURSOR c_record_exists
118   (b_id NUMBER
119   )IS SELECT ROWID
120       FROM   CSM_AUTO_SYNC
121       WHERE  id = b_id;
122 
123 
124 
125 BEGIN
126 
127 
128 CSM_UTIL_PKG.log( 'Entering ' || g_object_name || '.APPLY_INSERT:'
129                || ' for PK ' || p_record.id,
130                'CSM_AUTO_SYNC.APPLY_INSERT',
131                FND_LOG.LEVEL_PROCEDURE );
132 
133 /***************************************************************************
134   ** Initialize API return status to success
135   ***************************************************************************/
136   x_return_status := FND_API.G_RET_STS_SUCCESS;
137 
138 /*
139 insert into csm_auto_sync(ID,FLAG,AUTO_SYNC_NUM,DOWNLOAD_ONLY,CREATION_DATE ,CREATED_BY,LAST_UPDATE_DATE,LAST_UPDATED_BY)
140  values (p_record.id,p_record.flag,p_record.auto_sync_num,p_record.download_only,p_record.creation_date ,p_record.created_by,p_record.last_update_date,p_record.last_updated_by)
141 RETURNING ID INTO l_id;
142 */
143 /***************************************************************************
144   ** Check whether the insert was succesfull
145   ***************************************************************************/
146   IF (c_record_exists%ISOPEN)THEN
147     CLOSE c_record_exists;
148   END IF;
149 
150   OPEN c_record_exists(l_id);
151   FETCH c_record_exists INTO l_rowid;
152   IF (c_record_exists%NOTFOUND)THEN
153     IF (c_record_exists%ISOPEN)
154     THEN
155       CLOSE c_record_exists;
156     END IF;
157     RAISE no_data_found;
158   END IF;
159 
160   IF (c_record_exists%ISOPEN) THEN
161     CLOSE c_record_exists;
162   END IF;
163 
164 
165 
166   IF x_return_status <> FND_API.G_RET_STS_SUCCESS
167   THEN
168     x_return_status := FND_API.G_RET_STS_ERROR;
169 
170     CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
171       || ' ROOT ERROR: create statement'
172       || ' for PK ' || p_record.ID,
173       g_object_name || '.APPLY_INSERT',
174       FND_LOG.LEVEL_ERROR );
175     RETURN ;
176   END IF;
177 
178   -- success
179   x_return_status := FND_API.G_RET_STS_SUCCESS;
180 
181 EXCEPTION
182   WHEN others THEN
183      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT:'
184        || ' for PK ' || p_record.id,
185        g_object_name || '.APPLY_INSERT',
186        FND_LOG.LEVEL_EXCEPTION );
187 
188      x_return_status := FND_API.G_RET_STS_ERROR;
189 
190 END APPLY_INSERT;
191 
192 
193 /***
194   This procedure is called by APPLY_CRECORD when
195   an updated record is to be processed.
196   For CSM 11583, we support updates on the DFF columns
197 ***/
198 PROCEDURE APPLY_UPDATE
199          (
200            p_record        IN c_auto_sync_inq%ROWTYPE,
201            p_error_msg     OUT NOCOPY    VARCHAR2,
202            x_return_status IN OUT NOCOPY VARCHAR2
203          )
204 IS
205 --variable declarations
206 
207   l_id    csm_auto_sync.id%TYPE  ;
208   l_auto_sync_num csm_auto_sync.auto_sync_num%TYPE;
209   l_user_id asg_user.user_id%TYPE;
210 
211   l_rowid ROWID;
212 
213 BEGIN
214 
215 
216 CSM_UTIL_PKG.log( 'Entering ' || g_object_name || '.APPLY_UPDATE:'
217                || ' for PK ' || p_record.id,
218                'CSM_AUTO_SYNC.APPLY_UPDATE',
219                FND_LOG.LEVEL_PROCEDURE );
220   /***************************************************************************
221   ** Initialize API return status to success
222   ***************************************************************************/
223   x_return_status := FND_API.G_RET_STS_SUCCESS;
224 
225 l_user_id := asg_base.get_user_id(p_record.clid$$cs);
226 l_auto_sync_num := p_record.auto_sync_num;
227 l_id := p_record.id;
228 
229 /***************************************************************************
230   ** Update the record
231   ***************************************************************************/
232 
233 UPDATE csm_auto_sync_acc
234 SET AUTO_SYNC_NUM = l_auto_sync_num,
235 LAST_UPDATE_DATE = sysdate,
236 LAST_UPDATED_BY	= l_user_id
237 where ID=l_id
238 and USER_ID = l_user_id;
239 
240 
241 
242  /***************************************************************************
243   ** Check if the update was succesful
244   ***************************************************************************/
245 
246   IF (SQL%NOTFOUND)
247   THEN
248     RAISE NO_DATA_FOUND;
249   END IF;
250 
251   -- success
252   x_return_status := FND_API.G_RET_STS_SUCCESS;
253 
254 EXCEPTION
255 
256     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
257     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
258 
259   WHEN others THEN
260      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_UPDATE:'
261        || ' for PK ' || p_record.id,
262        g_object_name || '.APPLY_UPDATE',
263        FND_LOG.LEVEL_EXCEPTION );
264 
265      x_return_status := FND_API.G_RET_STS_ERROR;
266 
267 END APPLY_UPDATE;
268 
269 
270 
271 /*****************************************************************************************/
272 
273 
274 
275 PROCEDURE APPLY_RECORD
276          (
277            p_record        IN     c_auto_sync_inq%ROWTYPE,
278            p_error_msg     OUT NOCOPY    VARCHAR2,
279            x_return_status IN OUT NOCOPY VARCHAR2,
280            x_reject_row    OUT NOCOPY BOOLEAN
281          ) IS
282 BEGIN
283 
284   /*** initialize return status and message list ***/
285   x_return_status := FND_API.G_RET_STS_SUCCESS;
286 
287   FND_MSG_PUB.INITIALIZE;
288 
289 
290   IF p_record.dmltype$$='I' THEN
291     -- Process insert
292     APPLY_INSERT
293       (
294         p_record,
295         p_error_msg,
296         x_return_status,
297         x_reject_row         --Bug 5288413
298       );
299   ELSIF p_record.dmltype$$='U' THEN -- YLIAO: for 11583, we do support UPDATE
300     -- Process update
301     APPLY_UPDATE
302       (
303         p_record,
304         p_error_msg,
305         x_return_status
306       );
307   ELSE
308     -- Process delete and insert;
309     -- Not supported for this entity
310     CSM_UTIL_PKG.LOG
311       ( 'Delete and Update is not supported for this entity'
312         || ' for PK ' || p_record.id ,
313         g_object_name || '.APPLY_RECORD',
314         FND_LOG.LEVEL_ERROR);
315 
316     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
317       (
318         p_message        => 'CSM_DML_OPERATION'
319       , p_token_name1    => 'DML'
320       , p_token_value1   => p_record.dmltype$$
321       );
322 
323     x_return_status := FND_API.G_RET_STS_ERROR;
324   END IF;
325 
326 EXCEPTION
327 WHEN OTHERS THEN
328   /*** defer record when any process exception occurs ***/
329   CSM_UTIL_PKG.LOG
330     ( 'Exception occurred in ' || g_object_name || '.APPLY_RECORD:' || ' ' || SQLERRM
331       || ' for PK ' || p_record.id ,
332       g_object_name || '.APPLY_RECORD',
333       FND_LOG.LEVEL_EXCEPTION);
334   -- temp -- find more detail --remove comment
335   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', SQLERRM);
336   p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
337     (
338       p_api_error      => TRUE
339     );
340 
341   x_return_status := FND_API.G_RET_STS_ERROR;
342 
343 END APPLY_RECORD;
344 ----------------------------------------------------------------------------------------------------------------------
345 
346 /***
347   APPLY_CLIENT_CHANGE procedure is called by CSM_SERVICEP_WRAPPER_PKG, for upward sync of
348   publication item CSM_AUTO_SYNC
349 ***/
350 PROCEDURE APPLY_CLIENT_CHANGES
351          (
352            p_user_name     IN VARCHAR2,
353            p_tranid        IN NUMBER,
354            p_debug_level   IN NUMBER,
355            x_return_status IN OUT NOCOPY VARCHAR2
356          )
357   IS
358   l_process_status VARCHAR2(1);
359   l_return_status  VARCHAR2(1);
360   l_error_msg      VARCHAR2(4000);
361   l_reject_row     boolean;
362 BEGIN
363   csm_util_pkg.log ( g_object_name || '.APPLY_CLIENT_CHANGES entered',
364     FND_LOG.LEVEL_PROCEDURE);
365   g_debug_level := p_debug_level;
366   x_return_status := FND_API.G_RET_STS_SUCCESS;
367 
368   /*** loop through records in inqueue ***/
369   FOR r_auto_sync IN c_auto_sync_inq( p_user_name, p_tranid) LOOP
370 
371     SAVEPOINT save_rec;
372 /**--------------------------------------------**/
373     /*** apply record ***/
374     APPLY_RECORD
375       (
376         r_auto_sync
377       , l_error_msg
378       , l_process_status
379       , l_reject_row
380       );
381 /***--------------------------------------------------------------**/
382     /*** was record processed successfully? ***/
383     IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
384       /*** If Yes -> delete record from inqueue ***/
385       IF l_reject_row THEN
386        CSM_UTIL_PKG.REJECT_RECORD
387         (
388           p_user_name,
389           p_tranid,
390           r_auto_sync.seqno$$,
391           r_auto_sync.id,
392           g_object_name,
393           g_pub_name,
394           l_error_msg,
395           l_return_status
396         );
397       ELSE
398        CSM_UTIL_PKG.DELETE_RECORD
399         (
400           p_user_name,
401           p_tranid,
402           r_auto_sync.seqno$$,
403           r_auto_sync.id,
404           g_object_name,
405           g_pub_name,
406           l_error_msg,
407           l_return_status --Introduced new variable l_return_status since Defer
408         );                --process doesn't depend on this delete_record API
409       END IF;
410 
411       /*** was delete/reject successful? ***/
412       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
413         /*** If No -> rollback ***/
414         CSM_UTIL_PKG.LOG
415         ( 'Deleting from inqueue failed, rolling back to savepoint'
416           || ' for PK ' || r_auto_sync.id ,
417           g_object_name || '.APPLY_CLIENT_CHANGES',
418           FND_LOG.LEVEL_ERROR); -- put PK column here
419         ROLLBACK TO save_rec;
420         x_return_status := FND_API.G_RET_STS_ERROR;
421       END IF;
422     END IF; /*** end of IF l_process_status = FND_API.G_RET_STS_SUCCESS  ***/
423 
424     IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
425       /*** Record was not processed successfully or delete failed
426       -> defer and reject record ***/
427       CSM_UTIL_PKG.LOG
428       ( 'Record not processed successfully, deferring and rejecting record'
429         || ' for PK ' || r_auto_sync.id ,
430         g_object_name || '.APPLY_CLIENT_CHANGES',
431         FND_LOG.LEVEL_ERROR); -- put PK column here
432 
433       CSM_UTIL_PKG.DEFER_RECORD
434        ( p_user_name
435        , p_tranid
436        , r_auto_sync.seqno$$
437        , r_auto_sync.id
438        , g_object_name
439        , g_pub_name
440        , l_error_msg
441        , l_process_status
442        , r_auto_sync.dmltype$$
443        );
444 
445       /*** Was defer successful? ***/
446       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
447         /*** no -> rollback ***/
448         CSM_UTIL_PKG.LOG
449         ( 'Defer record failed, rolling back to savepoint'
450           || ' for PK ' || r_auto_sync.id ,
451           g_object_name || '.APPLY_CLIENT_CHANGES',
452           FND_LOG.LEVEL_ERROR); -- put PK column here
453         ROLLBACK TO save_rec;
454         x_return_status := FND_API.G_RET_STS_ERROR;
455       END IF;
456     END IF;
457 
458   END LOOP;
459 
460 EXCEPTION WHEN OTHERS THEN
461   /*** catch and log exceptions ***/
462   CSM_UTIL_PKG.LOG
463   ( 'Exception occurred in ' || g_object_name || '.APPLY_CLIENT_CHANGES:' || ' ' || SQLERRM,
464     g_object_name || '.APPLY_CLIENT_CHANGES',
465     FND_LOG.LEVEL_EXCEPTION);
466   x_return_status := FND_API.G_RET_STS_ERROR;
467 
468 END APPLY_CLIENT_CHANGES;
469 
470 
471 END CSM_AUTO_SYNC_PKG;