DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSL_SERVICEL_WRAPPER_PKG

Source


1 PACKAGE BODY CSL_SERVICEL_WRAPPER_PKG AS
2 /* $Header: csllwrpb.pls 115.22 2003/08/27 07:34:13 vekrishn ship $ */
3 
4 /*** Globals ***/
5 g_debug_level           NUMBER; -- debug level
6 g_object_name  CONSTANT VARCHAR2(30) := 'CSL_SERVICEL_WRAPPER_PKG';
7 
8 /***
9   This function accepts a list of publication items and a publication item name and
10   returns whether the item name was found within the item list.
11   When the item name was found, it will be removed from the list.
12 ***/
13 FUNCTION ITEM_EXISTS
14         (
15           p_pubitems_tbl IN OUT NOCOPY asg_apply.vc2_tbl_type,
16           p_item_name    IN     VARCHAR2
17         )
18 RETURN BOOLEAN IS
19   l_index BINARY_INTEGER;
20 BEGIN
21 
22   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
23     jtm_message_log_pkg.Log_Msg
24     ( v_object_id   => null
25     , v_object_name => g_object_name
26     , v_message     => 'Entering CSL_SERVICEL_WRAPPER_PKG.ITEM_EXISTS'
27     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
28   END IF;
29 
30   IF p_pubitems_tbl.COUNT <= 0 THEN
31     /*** no items in list -> item name not found ***/
32     RETURN FALSE;
33   END IF;
34   FOR l_index IN p_pubitems_tbl.FIRST..p_pubitems_tbl.LAST LOOP
35     IF p_pubitems_tbl.EXISTS( l_index ) THEN
36       IF p_pubitems_tbl( l_index ) = p_item_name THEN
37         /*** found item -> delete from array and return TRUE ***/
38         p_pubitems_tbl.DELETE( l_index );
39 
40         IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
41           jtm_message_log_pkg.Log_Msg
42           ( v_object_id   => null
43           , v_object_name => g_object_name
44           , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.ITEM_EXISTS'
45           , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
46         END IF;
47         RETURN TRUE;
48       END IF;
49     END IF;
50   END LOOP;
51   /*** item name not found ***/
52 
53   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
54     jtm_message_log_pkg.Log_Msg
55     ( v_object_id   => null
56     , v_object_name => g_object_name
57     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.ITEM_EXISTS'
58     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
59   END IF;
60 
61   RETURN FALSE;
62 EXCEPTION WHEN OTHERS THEN
63   /*** catch and log exceptions ***/
64   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
65     jtm_message_log_pkg.Log_Msg
66     ( v_object_id   => null
67     , v_object_name => g_object_name
68     , v_message     => 'Exception occurred in CSL_SERVICEL_WRAPPER_PKG.ITEM_EXISTS:' || fnd_global.local_chr(10) || sqlerrm
69     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
70   END IF;
71 
72   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
73     jtm_message_log_pkg.Log_Msg
74     ( v_object_id   => null
75     , v_object_name => g_object_name
76     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.ITEM_EXISTS'
77     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
78   END IF;
79 
80   RETURN FALSE;
81 END ITEM_EXISTS;
82 
83 /***
84   This procedure is called by ASG_APPLY.APPLY_CLIENT_CHANGES if a list of dirty publication items
85   has been retrieved for a user/tranid combination. This procedure gets called for both
86   deferred and non-deferred publication items.
87 ***/
88 PROCEDURE APPLY_DIRTY_PUBITEMS
89          (
90            p_user_name     IN     VARCHAR2,
91            p_tranid        IN     NUMBER,
92            p_pubitems_tbl  IN OUT NOCOPY asg_apply.vc2_tbl_type,
93            x_return_status IN OUT NOCOPY VARCHAR2
94          ) IS
95   l_index BINARY_INTEGER;
96 BEGIN
97   x_return_status := FND_API.G_RET_STS_SUCCESS;
98 
99   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
100     jtm_message_log_pkg.Log_Msg
101     ( v_object_id   => null
102     , v_object_name => g_object_name
103     , v_message     => 'Entering CSL_SERVICEL_WRAPPER_PKG.APPLY_DIRTY_PUBITEMS'
104     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
105   END IF;
106 
107   /*** call incident wrapper ***/
108   IF ITEM_EXISTS( p_pubitems_tbl, 'CSL_CS_INCIDENTS_ALL_VL') THEN
109     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
110       jtm_message_log_pkg.Log_Msg
111       ( v_object_id   => 'CSL_CS_INCIDENTS_ALL_VL'
112       , v_object_name => g_object_name
113       , v_message     => 'Calling wrapper for publication item CSL_CS_INCIDENTS_ALL_VL'
114       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
115     END IF;
116 
117       CSL_SERVICE_REQUESTS_PKG.APPLY_CLIENT_CHANGES
118          (
119            p_user_name,
120            p_tranid,
121            g_debug_level,
122            x_return_status
123          );
124   END IF;
125 
126   /*** call task wrapper ***/
127   IF ITEM_EXISTS( p_pubitems_tbl, 'CSL_JTF_TASKS_VL') THEN
128     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
129       jtm_message_log_pkg.Log_Msg
130       ( v_object_id   => 'CSL_JTF_TASKS_VL'
131       , v_object_name => g_object_name
132       , v_message     => 'Calling wrapper for publication item CSL_JTF_TASKS_VL'
133       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
134     END IF;
135 
136       CSL_TASKS_PKG.APPLY_CLIENT_CHANGES
137          (
138            p_user_name,
139            p_tranid,
140            g_debug_level,
141            x_return_status
142          );
143   END IF;
144 
145   /*** call task assignment wrapper ***/
146   IF ITEM_EXISTS( p_pubitems_tbl, 'CSL_JTF_TASK_ASSIGNMENTS') THEN
147     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
148       jtm_message_log_pkg.Log_Msg
149       ( v_object_id   => 'CSL_JTF_TASK_ASSIGNMENTS'
150       , v_object_name => g_object_name
151       , v_message     => 'Calling wrapper for publication item CSL_JTF_TASK_ASSIGNMENTS'
152       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
153     END IF;
154 
155       CSL_TASK_ASSIGNMENTS_PKG.APPLY_CLIENT_CHANGES
156          (
157            p_user_name,
158            p_tranid,
159            g_debug_level,
160            x_return_status
161          );
162   END IF;
163 
164   /*** call debrief header wrapper ***/
165   IF ITEM_EXISTS( p_pubitems_tbl, 'CSF_DEBRIEF_LINES')
166      OR ITEM_EXISTS( p_pubitems_tbl, 'CSF_DEBRIEF_HEADERS')
167   THEN
168     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
169       jtm_message_log_pkg.Log_Msg
170       ( v_object_id   => 'CSF_DEBRIEF_LINES'
171       , v_object_name => g_object_name
172       , v_message     => 'Calling wrapper for publication item CSF_DEBRIEF_LINES'
173       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
174     END IF;
175 
176       CSL_DEBRIEF_PKG.APPLY_CLIENT_CHANGES
177          (
178            p_user_name,
179            p_tranid,
180            g_debug_level,
181            x_return_status
182          );
183   END IF;
184 
185   /*** call notes wrapper ***/
186   IF ITEM_EXISTS( p_pubitems_tbl, 'JTF_NOTES_VL') THEN
187     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
188       jtm_message_log_pkg.Log_Msg
189       ( v_object_id   => 'JTF_NOTES_VL'
190       , v_object_name => g_object_name
191       , v_message     => 'Calling wrapper for publication item JTF_NOTES_VL'
192       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
193     END IF;
194 
195       CSL_NOTES_PKG.APPLY_CLIENT_CHANGES
196          (
197            p_user_name,
198            p_tranid,
199            g_debug_level,
200            x_return_status
201          );
202   END IF;
203 
204   /*** call notifications wrapper ***/
205   IF ITEM_EXISTS( p_pubitems_tbl, 'WF_NOTIFICATIONS') THEN
206     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
207       jtm_message_log_pkg.Log_Msg
208       ( v_object_id   => 'WF_NOTIFICATIONS'
209       , v_object_name => g_object_name
210       , v_message     => 'Calling wrapper for publication item WF_NOTIFICATIONS'
211       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
212     END IF;
213 
214       CSL_NOTIFICATIONS_PKG.APPLY_CLIENT_CHANGES
215          (
216            p_user_name,
217            p_tranid,
218            g_debug_level,
219            x_return_status
220          );
221   END IF;
222 
223 
224   /*** call lobs wrapper ***/
225   IF ITEM_EXISTS( p_pubitems_tbl, 'CSL_LOBS') THEN
226     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
227       jtm_message_log_pkg.Log_Msg
228       ( v_object_id   => 'CSL_LOBS'
229       , v_object_name => g_object_name
230       , v_message     => 'Calling wrapper for publication item CSL_LOBS'
231       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
232     END IF;
233 
234       CSL_LOBS_PKG.APPLY_CLIENT_CHANGES
235          (
236            p_user_name,
237            p_tranid,
238            g_debug_level,
239            x_return_status
240          );
241   END IF;
242 
243 
244   /*** call notification attributes wrapper ***/
245   IF ITEM_EXISTS( p_pubitems_tbl, 'WF_NOTIFICATION_ATTR') THEN
246     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
247       jtm_message_log_pkg.Log_Msg
248       ( v_object_id   => 'WF_NOTIFICATION_ATTR'
249       , v_object_name => g_object_name
250       , v_message     => 'Calling wrapper for publication item WF_NOTIFICATION_ATTR'
251       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
252     END IF;
253 
254       CSL_NOTIFICATION_ATTR_PKG.APPLY_CLIENT_CHANGES
255          (
256            p_user_name,
257            p_tranid,
258            g_debug_level,
259            x_return_status
260          );
261   END IF;
262 
263   /*** call requirements wrapper ***/
264   IF ITEM_EXISTS( p_pubitems_tbl, 'CSP_REQUIREMENT_LINES') THEN
265     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
266       jtm_message_log_pkg.Log_Msg
267       ( v_object_id   => 'CSP_REQUIREMENT_LINES'
268       , v_object_name => g_object_name
269       , v_message     => 'Calling wrapper for publication item CSP_REQUIREMENT_LINES'
270       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
271     END IF;
272 
273       CSL_REQUIREMENTS_PKG.APPLY_CLIENT_CHANGES
274          (
275            p_user_name,
276            p_tranid,
277            g_debug_level,
278            x_return_status
279          );
280   END IF;
281 
282   /*** call counter wrapper ***/
283   IF ITEM_EXISTS( p_pubitems_tbl, 'CS_COUNTER_VALUES') THEN
284     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
285       jtm_message_log_pkg.Log_Msg
286       ( v_object_id   => 'CS_COUNTER_VALUES'
287       , v_object_name => g_object_name
288       , v_message     => 'Calling wrapper for publication item CS_COUNTER_VALUES'
289       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
290     END IF;
291 
292       CSL_COUNTER_VALUES_PKG.APPLY_CLIENT_CHANGES
293          (
294            p_user_name,
295            p_tranid,
296            g_debug_level,
297            x_return_status
298          );
299   END IF;
300 
301   /*** call counter properties wrapper ***/
302   IF ITEM_EXISTS( p_pubitems_tbl, 'CS_COUNTER_PROP_VALS') THEN
303     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
304       jtm_message_log_pkg.Log_Msg
305       ( v_object_id   => 'CS_COUNTER_PROP_VALS'
306       , v_object_name => g_object_name
307       , v_message     => 'Calling wrapper for publication item CS_COUNTER_PROP_VALS'
308       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
309     END IF;
310 
311       CSL_COUNTER_PROP_VALUES_PKG.APPLY_CLIENT_CHANGES
312          (
313            p_user_name,
314            p_tranid,
315            g_debug_level,
316            x_return_status
317          );
318   END IF;
319 
320   /*** call material transaction wrapper ***/
321   IF ITEM_EXISTS( p_pubitems_tbl, 'MTL_MAT_TRANSACTIONS') THEN
322     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
323       jtm_message_log_pkg.Log_Msg
324       ( v_object_id   => 'MTL_MAT_TRANSACTIONS'
325       , v_object_name => g_object_name
326       , v_message     => 'Calling wrapper for publication item MTL_MAT_TRANSACTIONS'
327       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
328     END IF;
329 
330       CSL_MATERIAL_TRANSACTION_PKG.APPLY_CLIENT_CHANGES
331          (
332            p_user_name,
333            p_tranid,
334            g_debug_level,
335            x_return_status
336          );
337   END IF;
338 
339   /*** check if all dirty items got processed ***/
340   IF p_pubitems_tbl.COUNT > 0 THEN
341     /*** no -> print publication item names that are still dirty ***/
342     FOR l_index IN p_pubitems_tbl.FIRST..p_pubitems_tbl.LAST LOOP
343       IF p_pubitems_tbl.EXISTS( l_index) THEN
344         IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
345             jtm_message_log_pkg.Log_Msg
346             ( v_object_id   => p_pubitems_tbl(l_index)
347             , v_object_name => g_object_name
348             , v_message     => 'No wrapper available for dirty publication item ' || p_pubitems_tbl(l_index)
349             , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
350         END IF;
351       END IF;
352     END LOOP;
353   END IF;
354 
355   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
356     jtm_message_log_pkg.Log_Msg
357     ( v_object_id   => null
358     , v_object_name => g_object_name
359     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.APPLY_DIRTY_PUBITEMS'
360     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
361   END IF;
362 
363 EXCEPTION WHEN OTHERS THEN
364   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
365     jtm_message_log_pkg.Log_Msg
366     ( v_object_id   => null
367     , v_object_name => g_object_name
368     , v_message     => 'Exception occurred in CSL_SERVICEL_WRAPPER_PKG.APPLY_DIRTY_PUBITEMS:' || fnd_global.local_chr(10) || sqlerrm
369     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
370   END IF;
371 
372   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
373     jtm_message_log_pkg.Log_Msg
374     ( v_object_id   => null
375     , v_object_name => g_object_name
376     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.APPLY_DIRTY_PUBITEMS'
377     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
378   END IF;
379   x_return_status := FND_API.G_RET_STS_ERROR;
380 END APPLY_DIRTY_PUBITEMS;
381 
382 /***
383   This procedure is called by ASG_APPLY.PROCESS_UPLOAD when a publication item for publication SERVICEL
384   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
385   a fast sync. This procedure will detect which publication items got dirty and will execute the wrapper
386   procedures which will insert the data that came from mobile into the backend tables using public APIs.
387 ***/
388 PROCEDURE APPLY_CLIENT_CHANGES
389          (
390            p_user_name IN VARCHAR2,
391            p_tranid    IN NUMBER
392          ) IS
393   l_pubitems_tbl  asg_apply.vc2_tbl_type;
394   l_return_status VARCHAR2(1);
395 BEGIN
396   g_debug_level := JTM_HOOK_UTIL_PKG.Get_Debug_Level;
397 
398   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
399     jtm_message_log_pkg.Log_Msg
400     ( v_object_id   => null
401     , v_object_name => g_object_name
402     , v_message     => 'Entering CSL_SERVICEL_WRAPPER_PKG.Apply_Client_Changes'
403     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
404   END IF;
405 
406   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
407     jtm_message_log_pkg.Log_Msg
408     ( v_object_id   => null
409     , v_object_name => g_object_name
410     , v_message     => 'Applying changes for user ' || p_user_name ||
411                        ', tranid = ' || TO_CHAR( p_tranid )
412     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
413   END IF;
414 
415   /*** retrieve names of non-deferred dirty SERVICEL publication items ***/
416 /*** get_all_dirty and get_all_defered_pub_items is replaced by get_all_pub_items ***/
417   asg_apply.get_all_pub_items(p_user_name,
418     p_tranid,
419     'SERVICEL',
420     l_pubitems_tbl,
421     l_return_status);
422 
423   /*** successfully retrieved item names? ***/
424   IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_pubitems_tbl.COUNT = 0 THEN
425     /*** No -> log that no items were retrieved ***/
426     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
427       jtm_message_log_pkg.Log_Msg
428       ( v_object_id   => null
429       , v_object_name => g_object_name
430       , v_message     => 'asg_apply.get_all_dirty_pub_items didn''t return any records'
431       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
432     END IF;
433   ELSE
434     /*** yes -> process them ***/
435     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
436       jtm_message_log_pkg.Log_Msg
437       ( v_object_id   => null
438       , v_object_name => g_object_name
439       , v_message     => 'Found ' || l_pubitems_tbl.COUNT || ' dirty non-deferred publication item(s)'
440       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
441     END IF;
442 
443     APPLY_DIRTY_PUBITEMS
444          ( p_user_name
445          , p_tranid
446          , l_pubitems_tbl
447          , l_return_status
448          );
449   END IF;
450 
451   /*** retrieve names of deferred dirty SERVICEL publication items ***/
452 /*  asg_apply.get_all_deferred_pub_items(p_user_name,
453                                        p_tranid,
454                                        'SERVICEL',
455                                        l_pubitems_tbl,
456                                        l_return_status);
457 */
458 
459   /*** successfully retrieved item names? ***/
460   IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_pubitems_tbl.COUNT = 0 THEN
461     /*** No -> log that no items were retrieved ***/
462     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
463       jtm_message_log_pkg.Log_Msg
464       ( v_object_id   => null
465       , v_object_name => g_object_name
466       , v_message     => 'asg_apply.get_all_deferred_pub_items didn''t return any records'
467       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
468     END IF;
469   ELSE
470     /*** yes -> process them ***/
471     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
472       jtm_message_log_pkg.Log_Msg
473       ( v_object_id   => null
474       , v_object_name => g_object_name
475       , v_message     => 'Found ' || l_pubitems_tbl.COUNT || ' dirty deferred publication item(s)'
476       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
477     END IF;
478 
479     APPLY_DIRTY_PUBITEMS
480          ( p_user_name
481          , p_tranid
482          , l_pubitems_tbl
483          , l_return_status
484          );
485   END IF;
486 
487   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
488    jtm_message_log_pkg.Log_Msg
489     ( v_object_id   => null
490     , v_object_name => g_object_name
491     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.Apply_Client_Changes'
492     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
493   END IF;
494 
495 EXCEPTION WHEN OTHERS THEN
496   /*** catch and log exceptions ***/
497   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
498     jtm_message_log_pkg.Log_Msg
499     ( v_object_id   => null
500     , v_object_name => g_object_name
501     , v_message     => 'Exception occurred in CSL_SERVICEL_WRAPPER_PKG.Apply_Client_Changes:' || fnd_global.local_chr(10) || sqlerrm
502     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
503   END IF;
504 
505   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
506     jtm_message_log_pkg.Log_Msg
507     ( v_object_id   => null
508     , v_object_name => g_object_name
509     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.Apply_Client_Changes'
510     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
511   END IF;
512 END APPLY_CLIENT_CHANGES;
513 
514 /***
515   This function returns a translated error message string. If p_api_error is FALSE, it gets
516   message with MESSAGE_NAME = p_message from FND_NEW_MESSAGES and replaces any tokens with
517   the supplied token values. If p_api_error is TRUE, it just returns the api error in the
518   FND_MSG_PUB message stack.
519 ***/
520 FUNCTION GET_ERROR_MESSAGE_TEXT
521          (
522            p_api_error      IN BOOLEAN  --DEFAULT FALSE
523          , p_message        IN FND_NEW_MESSAGES.MESSAGE_NAME%TYPE --DEFAULT NULL
524          , p_token_name1    IN VARCHAR2 --DEFAULT NULL
525          , p_token_value1   IN VARCHAR2 --DEFAULT NULL
526          , p_token_name2    IN VARCHAR2 --DEFAULT NULL
527          , p_token_value2   IN VARCHAR2 --DEFAULT NULL
528          , p_token_name3    IN VARCHAR2 --DEFAULT NULL
529          , p_token_value3   IN VARCHAR2 --DEFAULT NULL
530          )
531 RETURN VARCHAR2 IS
532   l_fnd_message VARCHAR2(4000);
533   l_counter     NUMBER;
534   l_msg_data    VARCHAR2(4000);
535   l_msg_dummy   NUMBER;
536 BEGIN
537   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
538     jtm_message_log_pkg.Log_Msg
539     ( v_object_id   => null
540     , v_object_name => g_object_name
541     , v_message     => 'Entering CSL_SERVICEL_WRAPPER_PKG.Get_error_message_text'
542     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
543   END IF;
544 
545   /*** Is this an API error? ***/
546   IF NOT p_api_error THEN
547     /*** no -> retrieve error message p_message and replace tokens ***/
548     FND_MESSAGE.Set_Name
549       ( application => 'CSL'
550       , name        => p_message
551       );
552     IF p_token_name1 IS NOT NULL
553     THEN
554      FND_MESSAGE.Set_Token
555        ( token => p_token_name1
556        , value => p_token_value1
557        );
558     END IF;
559     IF p_token_name2 IS NOT NULL
560     THEN
561       FND_MESSAGE.Set_Token
562         ( token => p_token_name2
563         , value => p_token_value2
564         );
565     END IF;
566     IF p_token_name3 IS NOT NULL
567     THEN
568      FND_MESSAGE.Set_Token
569        ( token => p_token_name3
570        , value => p_token_value3
571        );
572     END IF;
573 
574     l_fnd_message := FND_MESSAGE.Get;
575   ELSE
576     /*** API error -> retrieve error from message stack ***/
577     IF FND_MSG_PUB.Count_Msg > 0 THEN
578       FND_MSG_PUB.Get
579         ( p_msg_index     => 1
580         , p_encoded       => FND_API.G_FALSE
581         , p_data          => l_msg_data
582         , p_msg_index_out => l_msg_dummy
583         );
584       l_fnd_message := l_msg_data;
585       FOR l_counter
586       IN 2 .. FND_MSG_PUB.Count_Msg
587       LOOP
588         FND_MSG_PUB.Get
589           ( p_msg_index     => l_counter
590           , p_encoded       => FND_API.G_FALSE
591           , p_data          => l_msg_data
592           , p_msg_index_out => l_msg_dummy
593           );
594         l_fnd_message := l_fnd_message || FND_GLOBAL.Newline || l_msg_data;
595       END LOOP;
596     END IF;
597   END IF;
598 
599   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
600     jtm_message_log_pkg.Log_Msg
601     ( v_object_id   => null
602     , v_object_name => g_object_name
603     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.Get_error_message_text'
604     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
605   END IF;
606   RETURN l_fnd_message;
607 EXCEPTION WHEN OTHERS THEN
608 
609   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
610     jtm_message_log_pkg.Log_Msg
611     ( v_object_id   => null
612     , v_object_name => g_object_name
613     , v_message     => 'Exception occurred in CSL_SERVICEL_WRAPPER_PKG.Get_error_message_text:' || fnd_global.local_chr(10) || sqlerrm
614     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
615   END IF;
616 
617   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
618     jtm_message_log_pkg.Log_Msg
619     ( v_object_id   => null
620     , v_object_name => g_object_name
621     , v_message     => 'Leaving CSL_SERVICEL_WRAPPER_PKG.Get_error_message_text'
622     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
623   END IF;
624 
625   RETURN l_fnd_message;
626 END GET_ERROR_MESSAGE_TEXT;
627 
628 /***
629   This procedure is called by APPLY_CLIENT_CHANGES wrapper procedure when a record was successfully
630   applied and needs to be deleted from the in-queue.
631 ***/
632 PROCEDURE DELETE_RECORD
633          (
634            p_user_name     IN VARCHAR2,
635            p_tranid        IN NUMBER,
636            p_seqno         IN NUMBER,
637            p_pk            IN VARCHAR2,
638            p_object_name   IN VARCHAR2,
639            p_pub_name      IN VARCHAR2,
640            p_error_msg     OUT NOCOPY VARCHAR2,
641            x_return_status IN OUT NOCOPY VARCHAR2
642          ) IS
643 BEGIN
644   x_return_status := FND_API.G_RET_STS_SUCCESS;
645 
646   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
647     jtm_message_log_pkg.Log_Msg
648     ( v_object_id   => p_pk
649     , v_object_name => p_object_name
650     , v_message     => 'Entering ' || g_object_name || '.DELETE_RECORD'
651     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
652   END IF;
653 
654   asg_apply.delete_row(p_user_name,
655                        p_tranid,
656                        p_pub_name,
657                        p_seqno,
658                        x_return_status);
659 
660   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
661     /*** error occurred ***/
662     fnd_msg_pub.Add_Exc_Msg( g_object_name, 'DELETE_RECORD', 'Unknown error');
663     p_error_msg := GET_ERROR_MESSAGE_TEXT
664       (
665         p_api_error      => TRUE
666       );
667   END IF;
668 
669   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
670     jtm_message_log_pkg.Log_Msg
671     ( v_object_id   => p_pk
672     , v_object_name => p_object_name
673     , v_message     => 'Leaving ' || g_object_name || '.DELETE_RECORD'
674     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
675   END IF;
676 
677 EXCEPTION WHEN OTHERS THEN
678   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
679     jtm_message_log_pkg.Log_Msg
680     ( v_object_id   => p_pk
681     , v_object_name => p_object_name
682     , v_message     => 'Exception occurred in DELETE_RECORD:' || fnd_global.local_chr(10) || sqlerrm
683     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
684   END IF;
685 
686   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'DELETE_RECORD', sqlerrm);
687   p_error_msg := GET_ERROR_MESSAGE_TEXT
688     (
689       p_api_error      => TRUE
690     );
691 
692   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
693     jtm_message_log_pkg.Log_Msg
694     ( v_object_id   => p_pk
695     , v_object_name => p_object_name
696     , v_message     => 'Leaving ' || g_object_name || '.DELETE_RECORD'
697     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
698   END IF;
699   x_return_status := FND_API.G_RET_STS_ERROR;
700 END DELETE_RECORD;
701 
702 /***
703   This procedure is called by APPLY_CLIENT_CHANGES wrapper procedure
704   when a record failed to be processed and needs to be deferred and rejected from mobile.
705 ***/
706 PROCEDURE DEFER_RECORD
707          (
708            p_user_name     IN VARCHAR2,
709            p_tranid        IN NUMBER,
710            p_seqno         IN NUMBER,
711            p_pk            IN VARCHAR2,
712            p_object_name   IN VARCHAR2,
713            p_pub_name      IN VARCHAR2,
714            p_error_msg     IN VARCHAR2,
715 	   x_return_status IN OUT NOCOPY VARCHAR2,
716            p_dml_type      IN VARCHAR2 --DEFAULT 'I'
717          ) IS
718 BEGIN
719   x_return_status := FND_API.G_RET_STS_SUCCESS;
720 
721   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
722     jtm_message_log_pkg.Log_Msg
723     ( v_object_id   => p_pk
724     , v_object_name => p_object_name
725     , v_message     => 'Entering ' || g_object_name || '.DEFER_RECORD'
726     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
727   END IF;
728 
729   asg_defer.defer_row(p_user_name,
730                       p_tranid,
731                       p_pub_name,
732                       p_seqno,
733                       p_error_msg,
734                       x_return_status);
735   /*** check if defer was successfull ***/
736   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
737     /*** no -> log and return error  ***/
738     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
739       jtm_message_log_pkg.Log_Msg
740       ( v_object_id   => p_pk
741       , v_object_name => p_object_name
742       , v_message     => 'asg_defer.defer_row failed:' || fnd_global.local_chr(10) || p_error_msg
743       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
744     END IF;
745 
746     IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
747       jtm_message_log_pkg.Log_Msg
748       ( v_object_id   => p_pk
749       , v_object_name => p_object_name
750       , v_message     => 'Leaving ' || g_object_name || '.DEFER_RECORD'
751       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
752     END IF;
753     RETURN;
754   END IF;
755 
756   /*** defer successful -> reject record except for updates ***/
757   IF p_dml_type = 'I' THEN
758     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
759       jtm_message_log_pkg.Log_Msg
760       ( v_object_id   => p_pk
761       , v_object_name => p_object_name
762       , v_message     => 'Rejecting record'
763       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
764     END IF;
765 
766     asg_defer.reject_row(p_user_name,
767                          p_tranid,
768                          p_pub_name,
769                          p_seqno,
770                          p_error_msg,
771                          x_return_status);
772     /*** check if reject was successfull ***/
773     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
774       /*** no -> log error  ***/
775       IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
776         jtm_message_log_pkg.Log_Msg
777         ( v_object_id   => p_pk
778         , v_object_name => p_object_name
779         , v_message     => 'asg_defer.reject_row failed:' || fnd_global.local_chr(10) || p_error_msg
780         , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
781       END IF;
782     END IF;
783   END IF;
784 
785   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
786     jtm_message_log_pkg.Log_Msg
787     ( v_object_id   => p_pk
788     , v_object_name => p_object_name
789     , v_message     => 'Leaving ' || g_object_name || '.DEFER_RECORD'
790     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
791   END IF;
792 
793 EXCEPTION WHEN OTHERS THEN
794   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
795     jtm_message_log_pkg.Log_Msg
796     ( v_object_id   => p_pk
797     , v_object_name => p_object_name
798     , v_message     => 'Exception occurred in ' || g_object_name || '.DEFER_RECORD:' || fnd_global.local_chr(10) || sqlerrm
799     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
800   END IF;
801 
802   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
803     jtm_message_log_pkg.Log_Msg
804     ( v_object_id   => p_pk
805     , v_object_name => p_object_name
806     , v_message     => 'Leaving ' || g_object_name || '.DEFER_RECORD'
807     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
808   END IF;
809 
810   x_return_status := FND_API.G_RET_STS_ERROR;
811 END DEFER_RECORD;
812 
813 /***
814  This procedure gets called when a record needs to be rejected when e.g. the api provides its own pk
815 ***/
816 PROCEDURE REJECT_RECORD
817          (
818            p_user_name     IN VARCHAR2,
819            p_tranid        IN NUMBER,
820            p_seqno         IN NUMBER,
821            p_pk            IN VARCHAR2,
822            p_object_name   IN VARCHAR2,
823            p_pub_name      IN VARCHAR2,
824            p_error_msg     IN VARCHAR2,
825            x_return_status IN OUT NOCOPY VARCHAR2
826          )IS
827 BEGIN
828   x_return_status := FND_API.G_RET_STS_SUCCESS;
829 
830   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
831     jtm_message_log_pkg.Log_Msg
832     ( v_object_id   => p_pk
833     , v_object_name => p_object_name
834     , v_message     => 'Entering ' || g_object_name || '.REJECT_RECORD'
835     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
836   END IF;
837 
838 
839   asg_defer.reject_row(p_user_name,
840                        p_tranid,
841                        p_pub_name,
842                        p_seqno,
843                        p_error_msg,
844                        x_return_status);
845 
846   /*** check if reject was successfull ***/
847   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
848     /*** no -> log error  ***/
849     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
850       jtm_message_log_pkg.Log_Msg
851       ( v_object_id   => p_pk
852       , v_object_name => p_object_name
853       , v_message     => 'asg_defer.reject_row failed:' || fnd_global.local_chr(10) || p_error_msg
854       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
855     END IF;
856   END IF;
857 
858   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
859     jtm_message_log_pkg.Log_Msg
860     ( v_object_id   => p_pk
861     , v_object_name => p_object_name
862     , v_message     => 'Leaving ' || g_object_name || '.REJECT_RECORD'
863     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
864   END IF;
865 EXCEPTION WHEN OTHERS THEN
866   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
867     jtm_message_log_pkg.Log_Msg
868     ( v_object_id   => p_pk
869     , v_object_name => p_object_name
870     , v_message     => 'Exception occurred in ' || g_object_name || '.REJECT_RECORD:' || fnd_global.local_chr(10) || sqlerrm
871     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
872   END IF;
873 
874   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
875     jtm_message_log_pkg.Log_Msg
876     ( v_object_id   => p_pk
877     , v_object_name => p_object_name
878     , v_message     => 'Leaving ' || g_object_name || '.REJECT_RECORD'
879     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
880   END IF;
881 
882   x_return_status := FND_API.G_RET_STS_ERROR;
883 END REJECT_RECORD;
884 
885 /***
886  This procedure gets called when a user gets created
887 ***/
888 PROCEDURE POPULATE_ACCESS_RECORDS ( P_USER_ID IN NUMBER )
889 IS
890 PRAGMA AUTONOMOUS_TRANSACTION;
891  CURSOR c_user( b_user_id NUMBER ) IS
892   SELECT RESOURCE_ID
893   FROM ASG_USER
894   WHERE USER_ID = b_user_id;
895  r_user c_user%ROWTYPE;
896  x_status VARCHAR2(30);
897 BEGIN
898  OPEN c_user( P_USER_ID );
899  FETCH c_user INTO r_user;
900  IF c_user%FOUND THEN
901   CSL_USER_PKG.CREATE_USER( P_RESOURCE_ID   => r_user.RESOURCE_ID
902                           , X_RETURN_STATUS => x_status);
903 
904  END IF;
905  CLOSE c_user;
906 
907  /*** if create_user returned error then raise exception ***/
908  IF x_status <> FND_API.G_RET_STS_SUCCESS THEN
909    ROLLBACK;
910    RAISE FND_API.G_EXC_ERROR;
911  END IF;
912 
913  COMMIT;
914 END POPULATE_ACCESS_RECORDS;
915 
916 /***
917  This procedure gets called when a user gets deleted
918 ***/
919 PROCEDURE DELETE_ACCESS_RECORDS ( P_USER_ID IN NUMBER )
920 IS
921 PRAGMA AUTONOMOUS_TRANSACTION;
922  CURSOR c_user( b_user_id NUMBER ) IS
923   SELECT RESOURCE_ID
924   FROM ASG_USER
925   WHERE USER_ID = b_user_id;
926  r_user c_user%ROWTYPE;
927  x_status VARCHAR2(30);
928 BEGIN
929  OPEN c_user( P_USER_ID );
930  FETCH c_user INTO r_user;
931  IF c_user%FOUND THEN
932   CSL_USER_PKG.DELETE_USER( P_RESOURCE_ID   => r_user.RESOURCE_ID
933                           , X_RETURN_STATUS => x_status);
934 
935  END IF;
936  CLOSE c_user;
937 
938  /*** if delete user returned error then raise exception ***/
939  IF x_status <> FND_API.G_RET_STS_SUCCESS THEN
940    ROLLBACK;
941    RAISE FND_API.G_EXC_ERROR;
942  END IF;
943 
944  COMMIT;
945 END DELETE_ACCESS_RECORDS;
946 
947 FUNCTION AUTONOMOUS_MARK_DIRTY
948                        (
949                         p_pub_item     IN VARCHAR2,
950                         p_accessid     IN NUMBER,
951                         p_resourceid   IN NUMBER,
952                         p_dml          IN CHAR,
953                         p_timestamp    IN DATE
954                        )
955 RETURN BOOLEAN IS
956   PRAGMA AUTONOMOUS_TRANSACTION;
957   l_rc BOOLEAN;
958 BEGIN
959   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
960     jtm_message_log_pkg.Log_Msg
961     ( v_object_id   => null
962     , v_object_name => g_object_name
963     , v_message     => 'Entering ' || g_object_name || '.AUTONOMOUS_MARK_DIRTY'
964     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
965   END IF;
966   l_rc := asg_download.markDirty(
967                                  P_PUB_ITEM     => p_pub_item,
968                                  P_ACCESSID     => p_accessid,
969                                  P_RESOURCEID   => p_resourceid,
970                                  P_DML          => p_dml,
971                                  P_TIMESTAMP    => p_timestamp
972                                  );
973   COMMIT;
974 
975   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
976     jtm_message_log_pkg.Log_Msg
977     ( v_object_id   => null
978     , v_object_name => g_object_name
979     , v_message     => 'Leaving ' || g_object_name || '.AUTONOMOUS_MARK_DIRTY'
980     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
981   END IF;
982 
983   RETURN l_rc;
984 EXCEPTION WHEN OTHERS THEN
985   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
986     jtm_message_log_pkg.Log_Msg
987     ( v_object_id   => null
988     , v_object_name => g_object_name
989     , v_message     => 'Exception occurred in AUTONOMOUS_MARK_DIRTY.'
990     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
991   END IF;
992   COMMIT;
993   RETURN FALSE;
994 END AUTONOMOUS_MARK_DIRTY;
995 
996 
997  FUNCTION detect_conflict(p_user_name IN VARCHAR2) RETURN VARCHAR2 IS
998  BEGIN
999 
1000    jtm_message_log_pkg.Log_Msg
1001    ( v_object_id   => null
1002      , v_object_name => g_object_name
1003      , v_message     => 'Entering DETECT_CONFLICT : User '||p_user_name
1004      , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL
1005    );
1006 
1007    RETURN 'Y' ;
1008 
1009  EXCEPTION
1010    WHEN OTHERS THEN
1011      RETURN 'Y';
1012  END;
1013 
1014 
1015  FUNCTION CONFLICT_RESOLUTION_HANDLER (
1016        p_user_name IN VARCHAR2,
1017        p_tran_id IN NUMBER,
1018        p_sequence IN NUMBER) RETURN VARCHAR2 IS
1019 
1020    l_profile_value VARCHAR2(30) ;
1021 
1022  BEGIN
1023 
1024    jtm_message_log_pkg.Log_Msg
1025     ( v_object_id     => null
1026       , v_object_name => g_object_name
1027       , v_message     => 'Entering CONFLICT_RESOLUTION_HANDLER : User '
1028                          ||p_user_name
1029       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
1030 
1031    l_profile_value := fnd_profile.value('JTM_APPL_CONFLICT_RULE');
1032    IF l_profile_value = 'SERVER_WINS' THEN
1033       RETURN 'S' ;
1034    ELSE
1035       RETURN 'C' ;
1036    END IF ;
1037 
1038  EXCEPTION
1039    WHEN OTHERS THEN
1040      RETURN 'C';
1041  END ;
1042 
1043 END CSL_SERVICEL_WRAPPER_PKG;