[Home] [Help]
PACKAGE BODY: APPS.CSM_TASK_ASSIGNMENTS_PKG
Source
1 PACKAGE BODY CSM_TASK_ASSIGNMENTS_PKG AS
2 /* $Header: csmutab.pls 120.6 2008/03/24 09:01:14 ptomar ship $ */
3
4 /*
5 * The function to be called by CSM_SERVICEP_WRAPPER_PKG, for upward sync of
6 * publication item CSM_TASK_ASSIGNMENTS
7 */
8
9 -- Purpose: Update Task Assignments changes on Handheld to Enterprise database
10 --
11 -- MODIFICATION HISTORY
12 -- Person Date Comments
13 -- DBhagat 11th September 2002 Created
14 --
15 -- --------- ------------------- ------------------------------------------
16 -- Enter package declarations as shown below
17
18 /*** Globals ***/
19 g_object_name CONSTANT VARCHAR2(30) := 'CSM_TASK_ASSIGNMENTS_PKG'; -- package name
20 g_pub_name CONSTANT VARCHAR2(30) := 'CSM_TASK_ASSIGNMENTS'; -- publication item name
21 g_debug_level NUMBER; -- debug level
22
23 CURSOR c_task_assignments_inq( b_user_name VARCHAR2, b_tranid NUMBER) IS
24 SELECT *
25 FROM csm_task_assignments_inq
26 WHERE tranid$$ = b_tranid
27 AND clid$$cs = b_user_name;
28
29 /***
30 This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
31 ***/
32 PROCEDURE APPLY_INSERT
33 (
34 p_record IN c_task_assignments_inq%ROWTYPE,
35 p_error_msg OUT NOCOPY VARCHAR2,
36 x_return_status IN OUT NOCOPY VARCHAR2
37 ) IS
38
39 l_task_assignment_id NUMBER;
40 l_msg_count NUMBER;
41 l_msg_data VARCHAR2(4000);
42
43 CURSOR c_task_assignment
44 ( b_task_assignment_id number
45 )
46 IS
47 SELECT jta.object_version_number
48 FROM jtf_task_assignments jta
49 WHERE jta.task_assignment_id = b_task_assignment_id;
50
51 l_ovn NUMBER;
52 l_task_object_version_number number;
53 l_task_status_id number;
54 l_task_status_name varchar2(240);
55 l_task_type_id number;
56
57 BEGIN
58 CSM_UTIL_PKG.LOG('Entering CSM_TASK_ASSIGNMENTS_PKG.APPLY_INSERT for task_assignment_id ' || p_record.task_assignment_id ,
59 'CSM_TASK_ASSIGNMENTS_PKG.APPLY_INSERT',FND_LOG.LEVEL_PROCEDURE);
60
61 -- Create a Task Assignment
62 JTF_TASK_ASSIGNMENTS_PUB.create_task_assignment (
63 p_api_version => 1.0,
64 p_init_msg_list => FND_API.G_TRUE,
65 p_commit => FND_API.G_FALSE,
66 p_task_assignment_id => p_record.TASK_ASSIGNMENT_ID,
67 p_task_id => p_record.TASK_ID,
68 p_resource_type_code => 'RS_EMPLOYEE',
69 p_resource_id => p_record.resource_id,
70 p_assignment_status_id => p_record.ASSIGNMENT_STATUS_ID,
71 p_attribute1 => p_record.attribute1,
72 p_attribute2 => p_record.attribute2,
73 p_attribute3 => p_record.attribute3,
74 p_attribute4 => p_record.attribute4,
75 p_attribute5 => p_record.attribute5,
76 p_attribute6 => p_record.attribute6,
77 p_attribute7 => p_record.attribute7,
78 p_attribute8 => p_record.attribute8,
79 p_attribute9 => p_record.attribute9,
80 p_attribute10 => p_record.attribute10,
81 p_attribute11 => p_record.attribute11,
82 p_attribute12 => p_record.attribute12,
83 p_attribute13 => p_record.attribute13,
84 p_attribute14 => p_record.attribute14,
85 p_attribute15 => p_record.attribute15,
86 --Bug 5182470
87 p_attribute_category => p_record.attribute_category,
88 x_return_status => x_return_status,
89 x_msg_count => l_msg_count,
90 x_msg_data => l_msg_data,
91 x_task_assignment_id => l_task_assignment_id
92 );
93 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
94 THEN
95
96 x_return_status := FND_API.G_RET_STS_ERROR;
97 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
98 || ' ROOT ERROR: JTF_TASK_ASSIGNMENTS_PUB.create_task_assignment'
99 || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
100 g_object_name || '.APPLY_INSERT',FND_LOG.LEVEL_ERROR );
101 RETURN ;
102 END IF;
103
104 -- Ask for the task. It must exist. Exceptions will abort.
105 OPEN c_task_assignment
106 ( b_task_assignment_id => p_record.task_assignment_id
107 );
108 FETCH c_task_assignment INTO l_ovn;
109 CLOSE c_task_assignment;
110
111 -- Synchronize Task Assignment and Task statuses
112 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
113
114 csf_task_assignments_pub.update_assignment_status
115 ( p_api_version => 1.0
116 , p_init_msg_list => FND_API.G_TRUE
117 , p_commit => FND_API.G_FALSE
118 , p_validation_level => FND_API.G_VALID_LEVEL_NONE
119 , x_return_status => x_return_status
120 , x_msg_count => l_msg_count
121 , x_msg_data => l_msg_data
122 , p_task_assignment_id => p_record.task_assignment_id
123 , p_assignment_status_id => p_record.assignment_status_id
124 , p_object_version_number => l_ovn
125 , p_update_task => 'T'
126 , x_task_object_version_number => l_task_object_version_number
127 , x_task_status_id => l_task_status_id
128 );
129 END IF;
130 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
131 THEN
132
133 x_return_status := FND_API.G_RET_STS_ERROR;
134 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_INSERT:'
135 || ' ROOT ERROR: csf_tasks_pub.update_assignment_status'
136 || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
137 g_object_name || '.APPLY_UPDATE',FND_LOG.LEVEL_ERROR );
138 RETURN ;
139 END IF;
140
141
142 -- success
143 x_return_status := FND_API.G_RET_STS_SUCCESS;
144
145 EXCEPTION WHEN OTHERS THEN
146 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT:' ||g_object_name || '.APPLY_INSERT',
147 FND_LOG.LEVEL_EXCEPTION );
148
149 x_return_status := FND_API.G_RET_STS_ERROR;
150 END APPLY_INSERT;
151
152 /***
153 This procedure is called by APPLY_CRECORD when
154 an updated record is to be processed.
155 ***/
156 PROCEDURE APPLY_UPDATE
157 (
158 p_record IN c_task_assignments_inq%ROWTYPE,
159 p_error_msg OUT NOCOPY VARCHAR2,
160 x_return_status IN OUT NOCOPY VARCHAR2
161 ) IS
162
163 CURSOR c_task_assignment
164 ( b_task_assignment_id number
165 )
166 IS
167 SELECT jta.task_id
168 , jta.object_version_number
169 , jta.last_update_date
170 , jta.last_updated_by
171 FROM jtf_task_assignments jta
172 WHERE jta.task_assignment_id = b_task_assignment_id;
173
174 r_task_assignment c_task_assignment%ROWTYPE;
175 l_ovn NUMBER;
176 l_profile_value varchar2(240);
177
178 -- Declare OUT parameters
179 l_msg_count NUMBER;
180 l_msg_data VARCHAR2(4000);
181 l_task_object_version_number number;
182 l_task_status_id number;
183 l_task_status_name varchar2(240);
184 l_task_type_id number;
185
186 BEGIN
187
188 -- Ask for the task. It must exist. Exceptions will abort.
189 OPEN c_task_assignment
190 ( b_task_assignment_id => p_record.task_assignment_id
191 );
192 FETCH c_task_assignment INTO r_task_assignment;
193 l_ovn := r_task_assignment.object_version_number;
194 CLOSE c_task_assignment;
195
196 --check for the stale data
197 l_profile_value := fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE);
198 -- SERVER_WINS profile value
199 IF(l_profile_value = csm_profile_pkg.g_SERVER_WINS AND
200 ASG_DEFER.IS_DEFERRED(p_record.clid$$cs, p_record.tranid$$,g_pub_name, p_record.seqno$$) <> FND_API.G_TRUE)
201 THEN
202 IF(r_task_assignment.last_update_date <> p_record.server_last_update_date AND r_task_assignment.last_updated_by <> asg_base.get_user_id(p_record.clid$$cs)) THEN
203 p_error_msg := 'UPWARD SYNC CONFLICT: CLIENT LOST For JTF_TASK_ASSIGNMENTS: CSM_TASK_ASSIGNMENTS_PKG.APPLY_UPDATE: P_KEY = '
204 || p_record.task_assignment_id;
205 x_return_status := FND_API.G_RET_STS_ERROR;
206 csm_util_pkg.log(p_error_msg,
207 g_object_name || '.APPLY_UPDATE',
208 FND_LOG.LEVEL_ERROR);
209 RETURN;
210 END IF;
211 END IF;
212
213 -- The column assignment_status_id is the status of the task_assignment_id.
214 -- The column task_assignment_id is task_assignment_id.
215 -- Validation is not a good thing for this particular API-call: as
216 -- the palm application does the check for state changes, it is not
217 -- necessary to redo them here. Even worse, a state change in two steps
218 -- A -> B and B -> C may be OK for palm application, but if the intermediate
219 -- step is not sent to CRM, the API will see A -> C and refuse it.
220 -- To allow for A -> C no validation is done.
221 csf_task_assignments_pub.update_assignment_status
222 ( p_api_version => 1.0
223 , p_init_msg_list => FND_API.G_TRUE
224 , p_commit => FND_API.G_FALSE
225 , p_validation_level => FND_API.G_VALID_LEVEL_NONE
226 , x_return_status => x_return_status
227 , x_msg_count => l_msg_count
228 , x_msg_data => l_msg_data
229 , p_task_assignment_id => p_record.task_assignment_id
230 , p_assignment_status_id => p_record.assignment_status_id
231 , p_object_version_number => l_ovn
232 , p_update_task => 'T'
233 , x_task_object_version_number => l_task_object_version_number
234 , x_task_status_id => l_task_status_id
235 );
236 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
237 THEN
238
239 x_return_status := FND_API.G_RET_STS_ERROR;
240 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_UPDATE:'
241 || ' ROOT ERROR: csf_tasks_pub.update_assignment_status'
242 || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
243 g_object_name || '.APPLY_UPDATE',FND_LOG.LEVEL_ERROR );
244 RETURN ;
245 END IF;
246
247 -- Also need to update the actual times of the task assignment update
248 -- use a different procedure for this because the csf_tasks_pub.update_assignment_status
249 -- doesn't support the actual times and the csf_tasks_pub.Update_Task_Assignment doen't
250 -- support the validation level set to none.
251 csf_task_assignments_pub.Update_Task_Assignment
252 ( p_api_version => 1.0
253 , p_init_msg_list => FND_API.G_TRUE
254 , p_commit => FND_API.G_FALSE
255 , p_task_assignment_id => p_record.task_assignment_id
256 , p_object_version_number => l_ovn
257 , p_task_id => p_record.task_id
258 , p_resource_type_code => FND_API.G_MISS_CHAR
259 , p_resource_id => FND_API.G_MISS_NUM --p_record.resource_id
260 , p_resource_territory_id => FND_API.G_MISS_NUM
261 , p_assignment_status_id => FND_API.G_MISS_NUM
262 , p_actual_start_date => p_record.actual_start_date
263 , p_actual_end_date => p_record.actual_end_date
264 , p_sched_travel_distance => FND_API.G_MISS_NUM
265 , p_sched_travel_duration => FND_API.G_MISS_NUM
266 , p_sched_travel_duration_uom => FND_API.G_MISS_CHAR
267 , p_shift_construct_id => FND_API.G_MISS_NUM
268 , p_object_capacity_id => FND_API.G_MISS_NUM
269 , p_attribute1 => p_record.attribute1
270 , p_attribute2 => p_record.attribute2
271 , p_attribute3 => p_record.attribute3
272 , p_attribute4 => p_record.attribute4
273 , p_attribute5 => p_record.attribute5
274 , p_attribute6 => p_record.attribute6
275 , p_attribute7 => p_record.attribute7
276 , p_attribute8 => p_record.attribute8
277 , p_attribute9 => p_record.attribute9
278 , p_attribute10 => p_record.attribute10
279 , p_attribute11 => p_record.attribute11
280 , p_attribute12 => p_record.attribute12
281 , p_attribute13 => p_record.attribute13
282 , p_attribute14 => p_record.attribute14
283 , p_attribute15 => p_record.attribute15
284 --Bug 5182470
285 , p_attribute_category => p_record.attribute_category
286 , x_return_status => x_return_status
287 , x_msg_count => l_msg_count
288 , x_msg_data => l_msg_data
289 , x_task_object_version_number => l_task_object_version_number
290 , x_task_status_id => l_task_status_id
291 );
292
293 IF x_return_status <> FND_API.G_RET_STS_SUCCESS
294 THEN
295 x_return_status := FND_API.G_RET_STS_ERROR;
296
297 CSM_UTIL_PKG.log( 'Error in ' || g_object_name || '.APPLY_UPDATE:'
298 || ' ROOT ERROR: csf_tasks_pub.Update_Task_Assignment'
299 || ' for PK ' || p_record.TASK_ASSIGNMENT_ID,
300 g_object_name || '.APPLY_UPDATE',
301 FND_LOG.LEVEL_ERROR );
302 RETURN ;
303 END IF;
304
305 -- success
306 x_return_status := FND_API.G_RET_STS_SUCCESS;
307
308 EXCEPTION
309 WHEN others THEN
310 CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_UPDATE:'
311 || ' for PK ' || p_record.task_assignment_id,
312 g_object_name || '.APPLY_UPDATE',
313 FND_LOG.LEVEL_EXCEPTION );
314
315 x_return_status := FND_API.G_RET_STS_ERROR;
316
317 END APPLY_UPDATE;
318
319
320 /***
321 This procedure is called by APPLY_CLIENT_CHANGES when a record
322 is to be processed.
323 ***/
324 PROCEDURE APPLY_RECORD
325 (
326 p_record IN c_task_assignments_inq%ROWTYPE,
327 p_error_msg OUT NOCOPY VARCHAR2,
328 x_return_status IN OUT NOCOPY VARCHAR2
329 ) IS
330 BEGIN
331
332 /*** initialize return status and message list ***/
333 x_return_status := FND_API.G_RET_STS_SUCCESS;
334 FND_MSG_PUB.INITIALIZE;
335
336
337 IF p_record.dmltype$$='I' THEN
338 -- Process insert
339 APPLY_INSERT
340 (
341 p_record,
342 p_error_msg,
343 x_return_status
344 );
345 ELSIF p_record.dmltype$$='U' THEN
346 -- Process update
347 APPLY_UPDATE
348 (
349 p_record,
350 p_error_msg,
351 x_return_status
352 );
353 ELSE
354 -- Process delete and insert;
355 -- Not supported for this entity
356 CSM_UTIL_PKG.LOG
357 ( 'Delete and Insert is not supported for this entity'
358 || ' for PK ' || p_record.task_assignment_id ,
359 g_object_name || '.APPLY_RECORD',
360 FND_LOG.LEVEL_ERROR);
361
362 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
363 (
364 p_message => 'CSM_DML_OPERATION'
365 , p_token_name1 => 'DML'
366 , p_token_value1 => p_record.dmltype$$
367 );
368
369 x_return_status := FND_API.G_RET_STS_ERROR;
370 END IF;
371
372 EXCEPTION WHEN OTHERS THEN
373 /*** defer record when any process exception occurs ***/
374 CSM_UTIL_PKG.LOG
375 ( 'Exception occurred in ' || g_object_name || '.APPLY_RECORD:' || ' ' || SQLERRM
376 || ' for PK ' || p_record.task_assignment_id ,
377 g_object_name || '.APPLY_RECORD',
378 FND_LOG.LEVEL_EXCEPTION);
379 fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', SQLERRM);
380 p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
381 (
382 p_api_error => TRUE
383 );
384
385 x_return_status := FND_API.G_RET_STS_ERROR;
386
387 END APPLY_RECORD;
388
389
390 /***
391 APPLY_CLIENT_CHANGE procedure is called by SM_SERVICEP_WRAPPER_PKG, for upward sync of
392 publication item CSM_TASK_ASSIGNMENTS
393 ***/
394 PROCEDURE APPLY_CLIENT_CHANGES
395 (
396 p_user_name IN VARCHAR2,
397 p_tranid IN NUMBER,
398 p_debug_level IN NUMBER,
399 x_return_status IN OUT NOCOPY VARCHAR2
400 )
401 IS
402 l_process_status VARCHAR2(1);
403 l_error_msg VARCHAR2(4000);
404
405 -- ER 3079918
406 CURSOR c_chk_task_status
407 ( p_task_assignment_id NUMBER
408 )
409 IS
410 SELECT dh.debrief_header_id, tst.rejected_flag, tst.on_hold_flag,
411 tst.cancelled_flag, tst.closed_flag, tst.completed_flag
412 FROM csf_debrief_headers dh, jtf_task_assignments tas,
413 jtf_task_statuses_b tst
414 WHERE dh.task_assignment_id = tas.task_assignment_id
415 AND tas.assignment_status_id = tst.task_status_id
416 AND tas.task_assignment_id = p_task_assignment_id;
417
418 l_rejected_flag VARCHAR2(1);
419 l_on_hold_flag VARCHAR2(1);
420 l_cancelled_flag VARCHAR2(1);
421 l_closed_flag VARCHAR2(1);
422 l_completed_flag VARCHAR2(1);
423 l_dbl_count NUMBER := NULL;
424 l_header_id NUMBER := NULL;
425
426 BEGIN
427 csm_util_pkg.log
428 ( g_object_name || '.APPLY_CLIENT_CHANGES entered',
429 g_object_name || '.APPLY_CLIENT_CHANGES',
430 FND_LOG.LEVEL_PROCEDURE);
431 g_debug_level := p_debug_level;
432 x_return_status := FND_API.G_RET_STS_SUCCESS;
433
434 /*** loop through task assignments records in inqueue ***/
435 FOR r_task_assignments IN c_task_assignments_inq( p_user_name, p_tranid) LOOP
436
437 SAVEPOINT save_rec;
438
439 /*** apply record ***/
440 APPLY_RECORD
441 (
442 r_task_assignments
443 , l_error_msg
444 , l_process_status
445 );
446
447 /*** was record processed successfully? ***/
448 IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
449 -- if update to charges fail, then do not defer the record
450 BEGIN
451 OPEN c_chk_task_status (r_task_assignments.task_assignment_id);
452 FETCH c_chk_task_status INTO l_header_id, l_rejected_flag,
453 l_on_hold_flag, l_cancelled_flag, l_closed_flag, l_completed_flag;
454
455 IF c_chk_task_status%FOUND THEN
456 IF ( (l_rejected_flag='Y') OR (l_on_hold_flag='Y')
457 OR (l_cancelled_flag='Y') OR (l_closed_flag='Y')
458 OR (l_completed_flag='Y') ) THEN
459
460 csf_debrief_update_pkg.form_Call (1.0, l_header_id);
461 END IF;
462 END IF;
463
464 CLOSE c_chk_task_status;
465 EXCEPTION
466 WHEN others THEN
467 NULL;
468 END;
469
470 /*** If Yes -> delete record from inqueue ***/
471 CSM_UTIL_PKG.DELETE_RECORD
472 (
473 p_user_name,
474 p_tranid,
475 r_task_assignments.seqno$$,
476 r_task_assignments.task_assignment_id,
477 g_object_name,
478 g_pub_name,
479 l_error_msg,
480 l_process_status
481 );
482
483 /*** was delete successful? ***/
484 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
485 /*** If No -> rollback ***/
486 CSM_UTIL_PKG.LOG
487 ( 'Deleting from inqueue failed, rolling back to savepoint'
488 || ' for PK ' || r_task_assignments.task_assignment_id ,
489 g_object_name || '.APPLY_CLIENT_CHANGES',
490 FND_LOG.LEVEL_ERROR); -- put PK column here
491 ROLLBACK TO save_rec;
492 x_return_status := FND_API.G_RET_STS_ERROR;
493 END IF;
494 END IF;
495
496 IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
497 /*** Record was not processed successfully or delete failed
498 -> defer and reject record ***/
499 CSM_UTIL_PKG.LOG
500 ( 'Record not processed successfully, deferring and rejecting record'
501 || ' for PK ' || r_task_assignments.task_assignment_id ,
502 g_object_name || '.APPLY_CLIENT_CHANGES',
503 FND_LOG.LEVEL_ERROR); -- put PK column here
504
505 CSM_UTIL_PKG.DEFER_RECORD
506 ( p_user_name
507 , p_tranid
508 , r_task_assignments.seqno$$
509 , r_task_assignments.task_assignment_id
510 , g_object_name
511 , g_pub_name
512 , l_error_msg
513 , l_process_status
514 , 'U'
515 );
516
517 /*** Was defer successful? ***/
518 IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
519 /*** no -> rollback ***/
520 CSM_UTIL_PKG.LOG
521 ( 'Defer record failed, rolling back to savepoint'
522 || ' for PK ' || r_task_assignments.task_assignment_id ,
523 g_object_name || '.APPLY_CLIENT_CHANGES',
524 FND_LOG.LEVEL_ERROR); -- put PK column here
525 ROLLBACK TO save_rec;
526 x_return_status := FND_API.G_RET_STS_ERROR;
527 END IF;
528 END IF;
529
530 END LOOP;
531
532 EXCEPTION WHEN OTHERS THEN
533 IF c_chk_task_status%ISOPEN THEN
534 CLOSE c_chk_task_status;
535 END IF;
536
537 /*** catch and log exceptions ***/
538 CSM_UTIL_PKG.LOG
539 ( 'Exception occurred in ' || g_object_name || '.APPLY_CLIENT_CHANGES:' || ' ' || SQLERRM,
540 g_object_name || '.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
541 x_return_status := FND_API.G_RET_STS_ERROR;
542
543 END APPLY_CLIENT_CHANGES;
544
545 FUNCTION CONFLICT_RESOLUTION_METHOD (p_user_name IN VARCHAR2,
546 p_tran_id IN NUMBER,
547 p_sequence IN NUMBER)
548 RETURN VARCHAR2 IS
549 l_profile_value VARCHAR2(30) ;
550 l_user_id NUMBER ;
551 cursor get_user_id(l_tran_id in number,
552 l_user_name in varchar2,
553 l_sequence in number)
554 IS
555 SELECT b.last_updated_by
556 FROM JTF_TASK_ASSIGNMENTS b,
557 CSM_TASK_ASSIGNMENTS_INQ a
558 WHERE a.clid$$cs = l_user_name
559 AND tranid$$ = l_tran_id
560 AND seqno$$ = l_sequence
561 AND a.task_assignment_id = b.task_assignment_id ;
562
563 BEGIN
564 CSM_UTIL_PKG.LOG('Entering CSM_TASK_ASSIGNMENTS_PKG.CONFLICT_RESOLUTION_METHOD for user ' || p_user_name ,'CSM_TASK_ASSIGNMENTS_PKG.CONFLICT_RESOLUTION_METHOD',FND_LOG.LEVEL_PROCEDURE);
565 l_profile_value := fnd_profile.value(csm_profile_pkg.g_JTM_APPL_CONFLICT_RULE);
566 OPEN get_user_id(p_tran_id, p_user_name, p_sequence) ;
567 FETCH get_user_id
568 INTO l_user_id ;
569 CLOSE get_user_id ;
570
571 if l_profile_value = 'SERVER_WINS' AND l_user_id <> asg_base.get_user_id(p_user_name) then
572 RETURN 'S' ;
573 else
574 RETURN 'C' ;
575 END IF ;
576
577 EXCEPTION
578 WHEN OTHERS THEN
579 RETURN 'C';
580 END CONFLICT_RESOLUTION_METHOD;
581
582 END CSM_TASK_ASSIGNMENTS_PKG; -- Package spec