DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_SERVICEP_WRAPPER_PKG

Source


1 PACKAGE BODY CSM_SERVICEP_WRAPPER_PKG AS
2 /* $Header: csmuspwb.pls 120.6 2006/06/08 09:54:09 utekumal noship $ */
3 
4 -- MODIFICATION HISTORY
5 -- Anurag     06/09/02    Created
6 -- ---------   ------  ------------------------------------------
7    -- Enter procedure, function bodies as shown below
8 
9 /*** Globals ***/
10 g_debug_level           NUMBER; -- debug level
11 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_SERVICEP_WRAPPER_PKG';
12 --bug4233613
13 g_olite_schema CONSTANT VARCHAR2(15) := 'MOBILEADMIN';
14 
15 
16 PROCEDURE GET_ALL_DEFERRED_PUB_ITEMS(p_username IN VARCHAR2,
17                                     p_tranid   IN NUMBER,
18                                     p_pubname IN VARCHAR2,
19                                     x_pubitems_tbl OUT NOCOPY asg_apply.vc2_tbl_type,
20                                     x_return_status OUT NOCOPY VARCHAR2)
21 IS
22 l_defer_count pls_integer;
23 l_all_pubitems_tbl asg_apply.vc2_tbl_type;
24 l_null_pubitems_tbl asg_apply.vc2_tbl_type;
25 l_return_status varchar2(1);
26 l_dummy number;
27 
28 CURSOR c_isdeferred(p_user_name VARCHAR2, p_tran_id NUMBER, p_pubitem VARCHAR2)
29 IS
30 SELECT 1
31 FROM asg_deferred_traninfo
32 WHERE device_user_name = p_user_name
33 AND  deferred_tran_id = p_tranid
34 AND  object_name = p_pubitem
35 ;
36 
37 BEGIN
38   x_return_status := FND_API.G_RET_STS_ERROR;
39 
40   /** initialize tables **/
41   l_all_pubitems_tbl := l_null_pubitems_tbl;
42   x_pubitems_tbl := l_null_pubitems_tbl;
43 
44   /*** retrieve names of deferred dirty SERVICEP publication items ***/
45   asg_apply.get_all_pub_items(p_username,
46                               p_tranid,
47                               'SERVICEP',
48                               l_all_pubitems_tbl,
49                               l_return_status);
50 
51   /*** successfully retrieved item names? ***/
52   IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_all_pubitems_tbl.COUNT = 0 THEN
53     NULL;
54   ELSE
55      l_defer_count := 0;
56      FOR i IN 1..l_all_pubitems_tbl.count LOOP
57         OPEN c_isdeferred(p_username,p_tranid, l_all_pubitems_tbl(i));
58         FETCH c_isdeferred INTO l_dummy;
59         IF c_isdeferred%FOUND THEN
60            l_defer_count := l_defer_count + 1;
61            x_pubitems_tbl(l_defer_count) :=  l_all_pubitems_tbl(i);
62         END IF;
63         CLOSE c_isdeferred;
64      END LOOP;
65   END IF;
66 
67   x_return_status := FND_API.G_RET_STS_SUCCESS;
68 
69 END GET_ALL_DEFERRED_PUB_ITEMS;
70 
71 
72 /***
73   This function accepts a list of publication items and a publication item name and
74   returns whether the item name was found within the item list.
75   When the item name was found, it will be removed from the list.
76 ***/
77 FUNCTION ITEM_EXISTS
78         (
79           p_pubitems_tbl IN OUT nocopy asg_apply.vc2_tbl_type,
80           p_item_name    IN     VARCHAR2
81         )
82 RETURN BOOLEAN IS
83   l_index BINARY_INTEGER;
84 BEGIN
85 
86 
87   IF p_pubitems_tbl.COUNT <= 0 THEN
88     /*** no items in list -> item name not found ***/
89     RETURN FALSE;
90   END IF;
91   FOR l_index IN p_pubitems_tbl.FIRST..p_pubitems_tbl.LAST LOOP
92     IF p_pubitems_tbl.EXISTS(l_index) THEN
93       IF p_pubitems_tbl( l_index ) = p_item_name THEN
94         /*** found item -> delete from array and return TRUE ***/
95         p_pubitems_tbl.DELETE( l_index );
96 
97         RETURN TRUE;
98       END IF;
99     END IF;
100   END LOOP;
101   /*** item name not found ***/
102 
103   RETURN FALSE;
104 EXCEPTION WHEN OTHERS THEN
105   CSM_UTIL_PKG.log( 'Exception occurred in CSM_SERVICEP_WRAPPER_PKG.ITEM_EXISTS:' || fnd_global.local_chr(10) || SQLERRM,
106                    'CSM_SERVICEP_WRAPPER_PKG.ITEM_EXISTS',FND_LOG.LEVEL_EXCEPTION);
107 
108   RETURN FALSE;
109 END ITEM_EXISTS;
110 
111 /***
112   This procedure is called by ASG_APPLY.APPLY_CLIENT_CHANGES if a list of dirty publication items
113   has been retrieved for a user/tranid combination. This procedure gets called for both
114   deferred and non-deferred publication items.
115 ***/
116 PROCEDURE APPLY_DIRTY_PUBITEMS
117          (
118            p_user_name     IN     VARCHAR2,
119            p_tranid        IN     NUMBER,
120            p_pubitems_tbl  IN OUT nocopy asg_apply.vc2_tbl_type,
121            x_return_status IN OUT nocopy VARCHAR2
122          ) IS
123   l_index BINARY_INTEGER;
124 BEGIN
125 
126   x_return_status := FND_API.G_RET_STS_SUCCESS;
127 
128   /*** call appropriate wrapper ***/
129 
130   /*** call incident wrapper
131     We should process 'CSM_INCIDENTS_ALL' before CSM_TASKS because
132     CSM_TASKS might be refering to locally created INCIDENT_ID.
133   ***/
134   IF ITEM_EXISTS( p_pubitems_tbl, 'CSM_INCIDENTS_ALL') THEN
135       CSM_SERVICE_REQUESTS_PKG.APPLY_CLIENT_CHANGES
136          (
137            p_user_name,
138            p_tranid,
139            g_debug_level,
140            x_return_status
141          );
142   END IF;
143 
144   IF ITEM_EXISTS( p_pubitems_tbl, 'CSM_TASKS') THEN
145       CSM_TASKS_PKG.APPLY_CLIENT_CHANGES
146          (
147            p_user_name,
148            p_tranid,
149            g_debug_level,
150            x_return_status
151          );
152   END IF;
153 
154 
155   IF ITEM_EXISTS( p_pubitems_tbl, 'CSM_TASK_ASSIGNMENTS') THEN
156 
157       CSM_TASK_ASSIGNMENTS_PKG.APPLY_CLIENT_CHANGES
158          (
159            p_user_name,
160            p_tranid,
161            g_debug_level,
162            x_return_status
163          );
164   END IF;
165 
166   IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_COUNTER_VALUES') THEN
167 
168       CSM_COUNTER_VALUES_PKG.APPLY_CLIENT_CHANGES
169          (
170            p_user_name,
171            p_tranid,
172            g_debug_level,
173            x_return_status
174          );
175   END IF;
176 
177   IF ITEM_EXISTS( p_pubitems_tbl, 'CSM_DEBRIEF_HEADERS') THEN
178 
179       CSM_DEBRIEF_HEADERS_PKG.APPLY_CLIENT_CHANGES
180          (
181            p_user_name,
182            p_tranid,
183            g_debug_level,
184            x_return_status
185          );
186   END IF;
187 
188   IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_DEBRIEF_EXPENSES') THEN
189 
190       CSM_DEBRIEF_EXPENSES_PKG.APPLY_CLIENT_CHANGES
191          (
192            p_user_name,
193            p_tranid,
194            g_debug_level,
195            x_return_status
196          );
197   END IF;
198 
199   IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_DEBRIEF_LABOR') THEN
200 
201       CSM_DEBRIEF_LABOR_PKG.APPLY_CLIENT_CHANGES
202          (
203            p_user_name,
204            p_tranid,
205            g_debug_level,
206            x_return_status
207          );
208    END IF ;
209 
210    IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_DEBRIEF_PARTS') THEN
211 
212       CSM_DEBRIEF_PARTS_PKG.APPLY_CLIENT_CHANGES
213          (
214            p_user_name,
215            p_tranid,
216            g_debug_level,
217            x_return_status
218          );
219    END IF;
220 
221   IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_NOTES') THEN
222       CSM_NOTES_PKG.APPLY_CLIENT_CHANGES
223          (
224            p_user_name,
225            p_tranid,
226            g_debug_level,
227            x_return_status
228          );
229   END IF;
230 
231    IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_LOBS') THEN
232 
233       CSM_LOBS_PKG.APPLY_CLIENT_CHANGES
234          (
235            p_user_name,
236            p_tranid,
237            g_debug_level,
238            x_return_status
239          );
240   END IF;
241 
242    IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_MAIL_MESSAGES') THEN
243       CSM_MAIL_MESSAGES_PKG.APPLY_CLIENT_CHANGES
244          (
245            p_user_name,
246            p_tranid,
247            g_debug_level,
248            x_return_status
249          );
250   END IF;
251 
252    IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_MAIL_RECIPIENTS') THEN
253       CSM_MAIL_RECIPIENTS_PKG.APPLY_CLIENT_CHANGES
254          (
255            p_user_name,
256            p_tranid,
257            g_debug_level,
258            x_return_status
259          );
260   END IF;
261 
262   /*** call requirements wrapper ***/
263    IF ITEM_EXISTS( p_pubitems_tbl, 'CSM_REQ_LINES') THEN
264       CSM_REQUIREMENTS_PKG.APPLY_CLIENT_CHANGES
265          (
266            p_user_name,
267            p_tranid,
268            g_debug_level,
269            x_return_status
270          );
271   END IF;
272 
273   /*** call requirements wrapper ***/
274    IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_INVENTORY') THEN
275       CSM_INVENTORY_PKG.APPLY_CLIENT_CHANGES
276          (
277            p_user_name,
278            p_tranid,
279            g_debug_level,
280            x_return_status
281          );
282   END IF;
283 
284    IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_M_USER') THEN
285       CSM_USER_PKG.APPLY_CLIENT_CHANGES
286          (
287            p_user_name,
288            p_tranid,
289            g_debug_level,
290            x_return_status
291          );
292   END IF;
293 
294   --Support for Parts Transfer
295   IF ITEM_EXISTS( p_pubitems_tbl, 'CSM_MTL_MATERIAL_TXNS') THEN
296       CSM_MATERIAL_TRANSACTION_PKG.APPLY_CLIENT_CHANGES
297          (
298            p_user_name,
299            p_tranid,
300            g_debug_level,
301            x_return_status
302          );
303   END IF;
304 
305   --TODO: call other wrappers for other updatable PIs
306 
307 
308 EXCEPTION WHEN OTHERS THEN
309   CSM_UTIL_PKG.log('Exception occurred in CSM_SERVICEP_WRAPPER_PKG.APPLY_DIRTY_PUBITEMS:' || fnd_global.local_chr(10) || SQLERRM,
310                     'CSM_SERVICEP_WRAPPER_PKG.APPLY_DIRTY_PUBITEMS',FND_LOG.LEVEL_EXCEPTION  );
311 
312 END APPLY_DIRTY_PUBITEMS;
313 
314 /***
315   This procedure is called by ASG_APPLY.PROCESS_UPLOAD when a publication item for publication SERVICEL
316   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
317   a fast sync. This procedure will detect which publication items got dirty and will execute the wrapper
318   procedures which will insert the data that came from mobile into the backend tables using public APIs.
319 ***/
320 PROCEDURE APPLY_CLIENT_CHANGES
321          (
322            p_user_name IN VARCHAR2,
323            p_tranid    IN NUMBER
324          ) IS
325   l_pubitems_tbl  asg_apply.vc2_tbl_type;
326   l_return_status VARCHAR2(1);
327 BEGIN
328 
329   /*** retrieve names of all dirty SERVICEP publication items ***/
330 /*** get_all_dirty and get_all_defered_pub_items is replaced by get_all_pub_items ***/
331   asg_apply.get_all_pub_items(p_user_name,
332     p_tranid,
333     'SERVICEP',
334     l_pubitems_tbl,
335     l_return_status);
336 
337   FOR i IN 1..l_pubitems_tbl.count LOOP
338 
339   csm_util_pkg.log('Dirty Pub items for tranid: ' || p_tranid || ' : ' || l_pubitems_tbl(i),'CSM_SERVICEP_WRAPPER_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_PROCEDURE);
340 --  logm('Dirty Pub items for tranid: ' || p_tranid || ' : ' || l_pubitems_tbl(i));
341   END LOOP;
342 
343   /*** successfully retrieved item names? ***/
344   IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_pubitems_tbl.COUNT = 0 THEN
345     NULL;
346   ELSE
347     /*** yes -> process them ***/
348 
349     APPLY_DIRTY_PUBITEMS
350          ( p_user_name
351          , p_tranid
352          , l_pubitems_tbl
353          , l_return_status
354          );
355   END IF;
356 
357   /*** retrieve names of deferred dirty SERVICEP publication items ***/
358   /*
359   get_all_deferred_pub_items(p_user_name,
360                              p_tranid,
361                              'SERVICEP',
362                              l_pubitems_tbl,
363                              l_return_status);
364 
365 
366 
367   IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_pubitems_tbl.COUNT = 0 THEN
368     NULL;
369   ELSE
370 
371 
372     APPLY_DIRTY_PUBITEMS
373          ( p_user_name
374          , p_tranid
375          , l_pubitems_tbl
376          , l_return_status
377          );
378   END IF;
379 */
380 
381 EXCEPTION WHEN OTHERS THEN
382   /*** catch and log exceptions ***/
383   CSM_UTIL_PKG.log('Exception occurred in CSM_SERVICEP_WRAPPER_PKG.Apply_Client_Changes: ' || sqlerrm
384                || ' for User: ' || p_user_name ,'CSM_SERVICEP_WRAPPER_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
385 
386 
387 END APPLY_CLIENT_CHANGES;
388 
389 
390 
391 
392 /**
393  *  POPULATE_ACCESS_RECORDS
394  *  is the bootstrap procedure called by MDG upon CSM user creation
395  *  we need to iterate over the responsibilities assigned to this CSM user
396  *  and call the CSM_WF_PKG.User_Resp_Post_Ins(user_id, resp_id)
397  */
398 PROCEDURE POPULATE_ACCESS_RECORDS ( p_userid IN NUMBER)
399 IS
400   CURSOR l_resp_csr(b_userid NUMBER) IS
401     SELECT DISTINCT aupr.RESPONSIBILITY_ID AS RESPONSIBILITY_ID
402     FROM   ASG_USER au
403 	,      asg_user_pub_resps aupr
404     WHERE  au.USER_ID 		  	  = b_userid
405 	AND    aupr.pub_name 		  = 'SERVICEP'
406 	AND    au.user_name  		  = aupr.user_name;
407 
408   l_resp_rec  l_resp_csr%ROWTYPE;
409 
410 BEGIN
411    csm_util_pkg.log('insert called','CSM_SERVICEP_WRAPPER_PKG.POPULATE_ACCESS_RECORDS',FND_LOG.LEVEL_PROCEDURE);
412 
413    csm_util_pkg.pvt_log('insert called' || 'CSM_SERVICEP_WRAPPER_PKG.POPULATE_ACCESS_RECORDS');
414   FOR l_resp_rec IN l_resp_csr(p_userid) LOOP
415     csm_util_pkg.pvt_log('POPULATE_ACCESS_RECORDS: USER_ID = ' || p_userid || ' RESP_ID = ' || l_resp_rec.RESPONSIBILITY_ID);
416     csm_util_pkg.log('POPULATE_ACCESS_RECORDS: USER_ID = ' || p_userid || ' RESP_ID = ' || l_resp_rec.RESPONSIBILITY_ID
417                      ,FND_LOG.LEVEL_STATEMENT  );
418     CSM_WF_PKG.User_Resp_Post_Ins(p_user_id => p_userid,
419                                   p_responsibility_id => l_resp_rec.RESPONSIBILITY_ID );
420   END LOOP;
421 END POPULATE_ACCESS_RECORDS;  -- end POPULATE_ACCESS_RECORDS
422 
423 /**
424  *  DELETE_ACCESS_RECORDS
425  *  is the bootstrap procedure called by MDG upon CSM user deletion
426  *  we need to iterate over the responsibilities assigned to this CSM user
427  *  and call the CSM_WF_PKG.User_Resp_Post_Ins(user_id, resp_id)
428  */
429 PROCEDURE DELETE_ACCESS_RECORDS ( p_userid in number)
430 IS
431 BEGIN
432     csm_util_pkg.log('delete called','CSM_SERVICEP_WRAPPER_PKG.DELETE_ACCESS_RECORDS',FND_LOG.LEVEL_PROCEDURE);
433     CSM_WF_PKG.User_Del(p_user_id => p_userid);
434 END DELETE_ACCESS_RECORDS;  -- end DELETE_ACCESS_RECORDS
435 
436 /*
437   Call back function for ASG. used for create synonyms / grant accesses in mobileadmin schema
438   before running installation manager
439  */
440 FUNCTION CHECK_OLITE_SCHEMA RETURN VARCHAR2  IS
441   l_count NUMBER;
442 BEGIN
443   SELECT count(1) INTO l_count
444   FROM all_synonyms
445   WHERE owner = g_olite_schema AND SYNONYM_NAME = 'FND_GLOBAL';
446   IF l_count = 0 THEN
447     -- csm_util_pkg.log(' synonym mobileadmin.FND_GLOBAL does not exist');
448     --EXECUTE IMMEDIATE 'create synonym mobileadmin.FND_GLOBAL for FND_GLOBAL';
449     EXECUTE IMMEDIATE 'create synonym '
450                         ||g_olite_schema||'.FND_GLOBAL for FND_GLOBAL';
451   END IF;
452   SELECT count(1) INTO l_count
453   FROM all_synonyms
454   WHERE owner = g_olite_schema AND SYNONYM_NAME = 'CSM_PROFILE_PKG';
455   IF l_count = 0 THEN
456     -- csm_util_pkg.log(' synonym mobileadmin.csm_profile_pkg does not exist');
457     --EXECUTE IMMEDIATE 'create synonym mobileadmin.csm_profile_pkg for csm_profile_pkg';
458 
459     EXECUTE IMMEDIATE 'create synonym '
460                       ||g_olite_schema||'.csm_profile_pkg for csm_profile_pkg';
461   END IF;
462   SELECT count(1) INTO l_count
463   FROM all_synonyms
464   WHERE owner = g_olite_schema AND SYNONYM_NAME = 'CSM_UTIL_PKG';
465   IF l_count = 0 THEN
466     -- csm_util_pkg.log(' synonym mobileadmin.csm_profile_pkg does not exist');
467     --EXECUTE IMMEDIATE 'create synonym mobileadmin.csm_util_pkg for csm_util_pkg';
468 
469     EXECUTE IMMEDIATE 'create synonym '
470                        ||g_olite_schema||'.csm_util_pkg for csm_util_pkg';
471   END IF;
472 
473   RETURN 'Y';
474 
475 EXCEPTION
476   WHEN OTHERS THEN
477      RETURN 'N';
478 END  CHECK_OLITE_SCHEMA;
479 
480 FUNCTION detect_conflict(p_user_name IN VARCHAR2) RETURN VARCHAR2 IS
481 BEGIN
482   CSM_UTIL_PKG.LOG('Entering CSM_SERVICEP_WRAPPER_PKG.DETECT_CONFLICT for user ' || p_user_name ,
483                          'CSM_SERVICEP_WRAPPER_PKG.DETECT_CONFLICT',FND_LOG.LEVEL_PROCEDURE);
484 
485       RETURN 'Y' ;
486 EXCEPTION
487   WHEN OTHERS THEN
488      RETURN 'Y';
489 END ;
490 
491 FUNCTION CONFLICT_RESOLUTION_METHOD (p_user_name IN VARCHAR2,
492                                      p_tran_id IN NUMBER,
493                                      p_sequence IN NUMBER)
494 RETURN VARCHAR2 IS
495 l_profile_value VARCHAR2(30) ;
496 BEGIN
497   CSM_UTIL_PKG.LOG('Entering CSM_SERVICEP_WRAPPER_PKG.CONFLICT_RESOLUTION_METHOD for user ' || p_user_name ,
498                          'CSM_SERVICEP_WRAPPER_PKG.CONFLICT_RESOLUTION_METHOD',FND_LOG.LEVEL_PROCEDURE);
499  l_profile_value := fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE);
500 
501   if l_profile_value = 'SERVER_WINS' then
502       RETURN 'S' ;
503   else
504       RETURN 'C' ;
505   END IF ;
506 EXCEPTION
507   WHEN OTHERS THEN
508      RETURN 'C';
509 END ;
510 
511 
512 
513 END CSM_SERVICEP_WRAPPER_PKG;