DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSC_WS_SCENARIO_MANAGEMENT

Source


1 PACKAGE BODY MSC_WS_SCENARIO_MANAGEMENT AS
2 /* $Header: MSCWSMAB.pls 120.14 2009/12/11 16:45:44 bnaghi ship $ */
3 g_UserId         NUMBER;
4 g_ErrorCode      VARCHAR2(9);
5 
6 -- =============================================================
7 -- Desc: Qurery msc_planning_process table and returns.
8 --       ProcessName
9 --       ProcessFlowId
10 --       CurrRunSequence
11 --
12 -- Input:
13 --        UserId             User ID.
14 --        ResponsibilityId   Responsibility Id.
15 --        ProcessId          Process Id.
16 --
17 -- Output: The possible return statuses are:
18 --          SUCCESS if everything is ok
19 --          NO_DATA_FOUND
20 --          INVALID_FND_USERID
21 --          INVALID_FND_RESPONSIBILITYID
22 -- =============================================================
23 PROCEDURE GET_PROCESS_INFO(
24         Status             OUT NOCOPY VARCHAR2,
25         ProcessName        OUT NOCOPY VARCHAR2,
26         ProcessFlowId      OUT NOCOPY NUMBER,
27         CurrRunSequence    OUT NOCOPY NUMBER,
28         UserId             IN         NUMBER,
29         ResponsibilityId   IN         NUMBER,
30         ProcessId          IN         NUMBER
31         ) AS
32 l_String            VARCHAR2(100);
33 l_Skip              NUMBER;
34 l_Owner             NUMBER;
35 l_ActivityStatus    NUMBER;
36 BEGIN
37     -- check user id and responsibility
38     MSC_WS_COMMON.VALIDATE_USER_RESP(l_String, UserId, ResponsibilityId);
39     IF (l_String <> 'OK') THEN
40         Status := l_String;
41         RETURN;
42     END IF;
43 
44     BEGIN
45         SELECT
46             process_name, process_flow_id, curr_run_sequence
47         INTO
48             ProcessName, ProcessFlowId, CurrRunSequence
49         FROM msc_planning_process
50         WHERE
51             process_id = ProcessId;
52         EXCEPTION
53             WHEN no_data_found THEN
54                 Status := 'NO_DATA_FOUND';
55                 RETURN;
56             WHEN others THEN
57                 Status := 'ERROR_UNEXPECTED_01001';
58                 RETURN;
59     END;
60 
61     Status := 'SUCCESS';
62 END GET_PROCESS_INFO;
63 
64 
65 PROCEDURE GET_PROCESS_INFO_PUBLIC(
66         Status             OUT NOCOPY VARCHAR2,
67         ProcessName        OUT NOCOPY VARCHAR2,
68         ProcessFlowId      OUT NOCOPY NUMBER,
69         CurrRunSequence    OUT NOCOPY NUMBER,
70         UserName               IN VARCHAR2,
71 	RespName     IN VARCHAR2,
72 	RespApplName IN VARCHAR2,
73 	SecurityGroupName      IN VARCHAR2,
74 	Language            IN VARCHAR2,
75         ProcessId          IN         NUMBER
76         ) AS
77 		     userid    number;
78 		     respid    number;
79 		     l_String VARCHAR2(30);
80 		     error_tracking_num number;
81 		     l_SecutirtGroupId  NUMBER;
82 		    BEGIN
83 		      error_tracking_num :=2010;
84 		       MSC_WS_COMMON.GET_PERMISSION_IDS(l_String, userid, respid, l_SecutirtGroupId, UserName, RespName, RespApplName, SecurityGroupName, Language);
85 		       IF (l_String <> 'OK') THEN
86 		           Status := l_String;
87 		           RETURN;
88 		       END IF;
89 
90 		        error_tracking_num :=2030;
91 		        MSC_WS_COMMON.VALIDATE_USER_RESP_FUNC(l_String, userid, respid, 'MSC_SCN_MANAGE_SCENARIOS',l_SecutirtGroupId);
92 		       IF (l_String <> 'OK') THEN
93 		          Status := l_String;
94 		          RETURN;
95 		      END IF;
96 		       error_tracking_num :=2040;
97 
98 		      GET_PROCESS_INFO ( Status,ProcessName, ProcessFlowId, CurrRunSequence, userId , respid, ProcessId );
99 
100 
101 
102 		         EXCEPTION
103 		         WHEN others THEN
104 		            status := 'ERROR_UNEXPECTED_'||error_tracking_num;
105 
106 		            return;
107 END GET_PROCESS_INFO_PUBLIC;
108 
109 -- =============================================================
110 -- Desc: Qurery msc_planning_proc_activities table and returns.
111 --       PlanId
112 --       Skip
113 --       Owner (Name)
114 --       Time_Out
115 --       Alternate_Owner (Name)
116 --       ActivityStatus
117 --       ActivityType.
118 --
119 -- Input:
120 --        UserId             User ID.
121 --        ResponsibilityId   Responsibility Id.
122 --        ProcessId          Process Id.
123 --        RunSequence        Run sequence.
124 --        ProcessScope       Activity name.
125 --
126 -- Output: The possible return statuses are:
127 --          SUCCESS if everything is ok
128 --          NO_DATA_FOUND
129 --          INVALID_FND_USERID
130 --          INVALID_FND_RESPONSIBILITYID
131 --          INVALID_MISSING_OWNER_ID
132 --          INVALID_UNKWON_OWNER_ID
133 --          INVALID_UNKWON_ALTERNATE_OWNER_ID
134 -- =============================================================
135 PROCEDURE GET_ACTIVITY_INST_INFO(
136         Status             OUT NOCOPY VARCHAR2,
137         PlanId             OUT NOCOPY NUMBER,
138         Skip               OUT NOCOPY VARCHAR2,
139         OwnerName          OUT NOCOPY VARCHAR2,
140         TimeOut            OUT NOCOPY NUMBER,
141         AlternateOwnerName OUT NOCOPY VARCHAR2,
142         ActivityStatus     OUT NOCOPY VARCHAR2,
143         ActivityType       OUT NOCOPY NUMBER,
144         UserId             IN         NUMBER,
145         ResponsibilityId   IN         NUMBER,
146         ProcessId          IN         NUMBER,
147         RunSequence        IN         NUMBER,
148         ProcessScope       IN         VARCHAR2
149         ) AS
150 l_String            VARCHAR2(100);
151 l_Skip              NUMBER;
152 l_Owner             NUMBER;
153 l_AltOwner          NUMBER;
154 l_ActivityStatus    NUMBER;
155 BEGIN
156     -- check user id and responsibility
157     --MSC_WS_COMMON.VALIDATE_USER_RESP(l_String, UserId, ResponsibilityId);
158     --IF (l_String <> 'OK') THEN
159      --   Status := l_String;
160     --    RETURN;
161    -- END IF;
162 
163     BEGIN
164         SELECT
165             plan_id, skip, owner,
166             nvl(time_out,1440),
167             alternate_owner,
168             status, activity_type
169         INTO
170             PlanId, l_Skip, l_Owner, TimeOut,
171             l_AltOwner, l_ActivityStatus, ActivityType
172         FROM msc_planning_proc_activities
173         WHERE
174             process_id = ProcessId AND
175             run_sequence = RunSequence AND
176             process_scope = ProcessScope;
177         EXCEPTION
178             WHEN no_data_found THEN
179                 Status := 'NO_DATA_FOUND';
180                 RETURN;
181             WHEN others THEN
182                 Status := 'ERROR_UNEXPECTED_01002';
183                 RETURN;
184     END;
185     -- convert Skip
186     CASE l_Skip
187         WHEN 1 THEN
188             Skip := 'Y';
189         WHEN 2 THEN
190             Skip := 'N';
191         ELSE
192             Status := 'ERROR_UNEXPECTED_01003';
193             RETURN;
194     END CASE;
195 
196     -- convert Owner from ID to name
197     IF l_Owner IS NULL THEN
198         Status := 'INVALID_MISSING_OWNER_ID';
199         RETURN;
200     END IF;
201     BEGIN
202         SELECT user_name
203         INTO   OwnerName
204         FROM   fnd_user
205         where  user_id = l_Owner;
206         EXCEPTION
207             WHEN no_data_found THEN
208                 Status := 'INVALID_UNKWON_OWNER_ID';
209                 RETURN;
210             WHEN others THEN
211                 Status := 'ERROR_UNEXPECTED_01004';
212                 RETURN;
213     END;
214 
215     -- convert EscalateTo from ID to name
216     IF l_AltOwner IS NULL THEN
217         AlternateOwnerName := '-1';
218     ELSE
219         BEGIN
220             SELECT user_name
221             INTO   AlternateOwnerName
222             FROM   fnd_user
223             WHERE  user_id = l_AltOwner;
224             EXCEPTION
225             WHEN no_data_found THEN
226                 Status := 'INVALID_UNKWON_ALTERNATE_OWNER_ID';
227                 RETURN;
228                 WHEN others THEN
229                     Status := 'ERROR_UNEXPECTED_01005';
230                     RETURN;
231         END;
232     END IF;
233 
234     -- convert activity status
235     IF l_ActivityStatus =1 THEN
236         ActivityStatus := 'NOT_START';
237     ELSIF l_ActivityStatus = 2 THEN
238         ActivityStatus := 'IN_PROGRESS';
239     ELSIF l_ActivityStatus = 3 THEN
240         ActivityStatus := 'COMPLETED';
241     ELSIF l_ActivityStatus = 4 THEN
242         ActivityStatus := 'ERROR';
243     ELSIF l_ActivityStatus = 5 THEN
244         ActivityStatus := 'ABORTED';
245     ELSIF l_ActivityStatus = 6 THEN
246         ActivityStatus := 'WARNING';
247     ELSE
248         Status := 'ERROR_UNEXPECTED_01006';
249         RETURN;
250     END IF;
251 
252     Status := 'SUCCESS';
253 END GET_ACTIVITY_INST_INFO;
254 
255 
256 PROCEDURE GET_ACTIVITY_INST_INFO_PUBLIC(
257         Status             OUT NOCOPY VARCHAR2,
258         PlanId             OUT NOCOPY NUMBER,
259         Skip               OUT NOCOPY VARCHAR2,
260         OwnerName          OUT NOCOPY VARCHAR2,
261         TimeOut            OUT NOCOPY NUMBER,
262         AlternateOwnerName OUT NOCOPY VARCHAR2,
263         ActivityStatus     OUT NOCOPY VARCHAR2,
264         ActivityType       OUT NOCOPY NUMBER,
265         UserName               IN VARCHAR2,
266 	RespName     IN VARCHAR2,
267 	RespApplName IN VARCHAR2,
268 	SecurityGroupName      IN VARCHAR2,
269 	Language            IN VARCHAR2,
270         ProcessId          IN         NUMBER,
271         RunSequence        IN         NUMBER,
272         ProcessScope       IN         VARCHAR2
273         )  AS
274 		     userid    number;
275 		     respid    number;
276 		     l_String VARCHAR2(30);
277 		     error_tracking_num number;
278 		     l_SecutirtGroupId  NUMBER;
279 		    BEGIN
280 		      error_tracking_num :=2010;
281 		       MSC_WS_COMMON.GET_PERMISSION_IDS(l_String, userid, respid, l_SecutirtGroupId, UserName, RespName, RespApplName, SecurityGroupName, Language);
282 		       IF (l_String <> 'OK') THEN
283 		           Status := l_String;
284 		           RETURN;
285 		       END IF;
286 
287 		        error_tracking_num :=2030;
288 		        MSC_WS_COMMON.VALIDATE_USER_RESP_FUNC(l_String, userid, respid, 'MSC_SCN_MANAGE_SCENARIOS',l_SecutirtGroupId);
289 		       IF (l_String <> 'OK') THEN
290 		          Status := l_String;
291 		          RETURN;
292 		      END IF;
293 		       error_tracking_num :=2040;
294 
295 		      GET_ACTIVITY_INST_INFO ( Status,
296                                           PlanId,
297                                           Skip,
298                                           OwnerName,
299                                           TimeOut,
300                                           AlternateOwnerName,
301                                           ActivityStatus,
302                                           ActivityType,
303                                           userid,
304                                           respid,
305                                           ProcessId ,
306                                           RunSequence ,
307                                           ProcessScope);
308 
309 
310 
311 		         EXCEPTION
312 		         WHEN others THEN
313 		            status := 'ERROR_UNEXPECTED_'||error_tracking_num;
314 
315 		            return;
316 END GET_ACTIVITY_INST_INFO_PUBLIC;
317 
318 -- =============================================================
319 -- Desc: Qurery current activity status.
320 -- Input:
321 --        ProcessInstanceId  Process instance Id.
322 --        ActivityId         Activity Id.
323 --
324 -- Output: The possible return statuses are:
325 --          OK
326 --          NO_DATA_FOUND
327 -- =============================================================
328 FUNCTION GET_ACTIVITY_STATUS(
329         ActivityStatus     OUT NOCOPY NUMBER,
330         ProcessId          IN         NUMBER,
331         RunSequence        IN         NUMBER,
332         ProcessScope       IN         VARCHAR2
333         ) RETURN VARCHAR2 AS
334 BEGIN
335     BEGIN
336         -- SELECT status
337         SELECT status
338         INTO   ActivityStatus
339         FROM msc_planning_proc_activities
340         WHERE
341             process_id = ProcessId AND
342             run_sequence = RunSequence AND
343             Process_Scope = ProcessScope;
344         EXCEPTION
345             WHEN no_data_found THEN
346                 RETURN 'NO_DATA_FOUND';
347             WHEN others THEN
348                 RETURN 'ERROR_UNEXPECTED_01007';
352 
349     END;
350     RETURN 'OK';
351 END GET_ACTIVITY_STATUS;
353 -- =============================================================
354 -- Desc: verify the input activity status.
355 -- Input:
356 --        ProcessInstanceId  Process instance Id.
357 --        ActivityId         Activity Id.
358 --
359 -- Output: The possible return statuses are:
360 --          OK
361 --          NO_DATA_FOUND
362 -- =============================================================
363 FUNCTION VALIDATE_ACTIVITY_STATUS(
364         ProcessId          IN         NUMBER,
365         RunSequence        IN         NUMBER,
366         ProcessScope       IN         VARCHAR2,
367         ActivityStatus     IN         NUMBER
368         ) RETURN VARCHAR2 AS
369 l_String            VARCHAR2(100);
370 l_ActivityStatus    NUMBER;
371 BEGIN
372     l_String := GET_ACTIVITY_STATUS(l_ActivityStatus, ProcessId, RunSequence, ProcessScope);
373     IF (l_String <> 'OK') THEN
374         RETURN l_String;
375     END IF;
376 
377     -- safety net, Not Start, Aborted and Warning are restricted by xsd.
378     IF ActivityStatus = 1 OR ActivityStatus = 5 OR ActivityStatus = 6 THEN
379         RETURN 'INVALID_STATUS';
380     END IF;
381 
382     -- =======================================
383     -- Activity status can be changed from :-
384     --     Not Start to In Process
385     --     In Process to Error
386     --     In Process to Completed
387     --     In Completed to Completed (special requested by Beatrice)
388     -- =======================================
389     CASE ActivityStatus
390         WHEN 2 THEN -- In Process
391             IF l_ActivityStatus <> 1 THEN
392                 RETURN 'INVALID_STATUS';
393             END IF;
394         WHEN 3 THEN -- Completed
395             -- New behaviour, able to change from process to completed
396             IF l_ActivityStatus <> 2 AND l_ActivityStatus <> 3 THEN
397                 RETURN 'INVALID_STATUS';
398             END IF;
399         WHEN 4 THEN -- Error
400             IF l_ActivityStatus <> 2 THEN
401                 RETURN 'INVALID_STATUS';
402             END IF;
403         ELSE
404             RETURN 'INVALID_STATUS';
405     END CASE;
406 
407     RETURN 'OK';
408 END VALIDATE_ACTIVITY_STATUS;
409 
410 -- =============================================================
411 -- Desc: Update activity_status in msc_planning_proc_activities table.
412 -- Input:
413 --        UserId             User ID.
414 --        ResponsibilityId   Responsibility Id.
415 --        ProcessInstanceId  Process instance Id.
416 --        ProcessId          Process Id.
417 --        RunSequence        Run sequence.
418 --        ProcessScope       Activity name.
419 --        NewStatus          New activity status
420 --
421 -- Output: The possible return statuses are:
422 --          SUCCESS if everything is ok
423 --          NO_DATA_FOUND
424 --          INVALID_FND_USERID
425 --          INVALID_FND_RESPONSIBILITYID
426 --          INVALID_STATUS
427 -- =============================================================
428 PROCEDURE SET_ACTIVITY_INST_STATUS(
429         Status             OUT NOCOPY VARCHAR2,
430         UserId             IN         NUMBER,
431         ResponsibilityId   IN         NUMBER,
432         ProcessId          IN         NUMBER,
433         RunSequence        IN         NUMBER,
434         ProcessScope       IN         VARCHAR2,
435         NewStatus          IN         VARCHAR2
436         ) AS
437 l_String            VARCHAR2(100);
438 l_NewStatus         NUMBER;
439 BEGIN
440     -- check user id and responsibility
441    -- MSC_WS_COMMON.VALIDATE_USER_RESP(l_String, UserId, ResponsibilityId);
442   --  IF (l_String <> 'OK') THEN
443   --      Status := l_String;
444   --      RETURN;
445  --   END IF;
446 
447     -- convert activity status, NOT_START, ABORTED and WARNING are not allowed in xsd
448     IF NewStatus = 'IN_PROGRESS' THEN
449         l_NewStatus := 2;
450     ELSIF NewStatus = 'COMPLETED' THEN
451         l_NewStatus := 3;
452     ELSIF NewStatus = 'ERROR' THEN
453         l_NewStatus := 4;
454     END IF;
455 
456     l_String := VALIDATE_ACTIVITY_STATUS(ProcessId, RunSequence, ProcessScope, l_NewStatus);
457     IF (l_String <> 'OK') THEN
458         Status := l_String;
459         RETURN;
460     END IF;
461 
462     -- update msc_planning_proc_activities
463     BEGIN
464         UPDATE msc_planning_proc_activities
465         SET status = l_NewStatus
466         WHERE
467             process_id = ProcessId AND
468             run_sequence = RunSequence AND
469             Process_Scope = ProcessScope;
470         EXCEPTION
471             WHEN others THEN
472                 Status := 'ERROR_UNEXPECTED_01008';
473                 RETURN;
474     END;
475 
476     -- Just find out from Vijay, we don't need to do this
477        -- update scenario_definitions as well if need
478        -- to do:
479        -- if this is the 1st act and is set to In Progress, set scenario_definitions.process_status to In Progress as well
480        -- if this is the last act and is set to Completed, set scenario_definitions.process_status to Completed as well
481        -- if new status is Error, set scenario_definitions.process_status to Error as well
482 
483     Status := 'SUCCESS';
484 END SET_ACTIVITY_INST_STATUS;
485 
486 PROCEDURE SET_ACTIVITY_INST_ST_PUBLIC(
487         Status             OUT NOCOPY VARCHAR2,
488         UserName               IN VARCHAR2,
489 		   		   RespName     IN VARCHAR2,
490 		   		   RespApplName IN VARCHAR2,
491 		   		   SecurityGroupName      IN VARCHAR2,
492 		   		   Language            IN VARCHAR2,
496         NewStatus          IN         VARCHAR2
493         ProcessId          IN         NUMBER,
494         RunSequence        IN         NUMBER,
495         ProcessScope       IN         VARCHAR2,
497         ) AS
498 		     userid    number;
499 		     respid    number;
500 		     l_String VARCHAR2(30);
501 		     error_tracking_num number;
502 		     l_SecutirtGroupId  NUMBER;
503 		    BEGIN
504 		      error_tracking_num :=2010;
505 		       MSC_WS_COMMON.GET_PERMISSION_IDS(l_String, userid, respid, l_SecutirtGroupId, UserName, RespName, RespApplName, SecurityGroupName, Language);
506 		       IF (l_String <> 'OK') THEN
507 		           Status := l_String;
508 		           RETURN;
509 		       END IF;
510 
511 		      error_tracking_num :=2030;
512 		        MSC_WS_COMMON.VALIDATE_USER_RESP_FUNC(l_String, userid, respid, 'MSC_SCN_MANAGE_SCENARIOS',l_SecutirtGroupId);
513 		       IF (l_String <> 'OK') THEN
514 		          Status := l_String;
515 		          RETURN;
516 		      END IF;
517 		       error_tracking_num :=2040;
518 
519 		      SET_ACTIVITY_INST_STATUS (  status,
520                                                   userid ,
521                                                   respid,
522                                                   ProcessId,
523                                                   RunSequence,
524                                                   ProcessScope,
525                                                   NewStatus);
526 		      --      dbms_output.put_line('USERID=' || userid);
527 
528 
529 		         EXCEPTION
530 		         WHEN others THEN
531 		            status := 'ERROR_UNEXPECTED_'||error_tracking_num;
532 
533 		            return;
534 END SET_ACTIVITY_INST_ST_PUBLIC;
535 
536 -- =============================================================
537 -- Desc: Update msc_planning_process.curr_run_sequence and
538 --       msc_process_instances.actual_start_date.
539 -- Input:
540 --        UserId             User ID.
541 --        ResponsibilityId   Responsibility Id.
542 --        ProcessInstanceId  Process instance Id.
543 --        ProcessId          Process Id.
544 --        RunSequence        Run sequence.
545 --
546 -- Output: The possible return statuses are:
547 --          SUCCESS if everything is ok
548 --          NO_DATA_FOUND
549 --          INVALID_FND_USERID
550 --          INVALID_FND_RESPONSIBILITYID
551 -- =============================================================
552 PROCEDURE UPDATE_PROCESS(
553         Status             OUT NOCOPY VARCHAR2,
554         UserId             IN         NUMBER,
555         ResponsibilityId   IN         NUMBER,
556         ProcessId          IN         NUMBER,
557         RunSequence        IN         NUMBER
558         ) AS
559 l_String            VARCHAR2(100);
560 l_NextActivityId    NUMBER;
561 e_NoDataFound       EXCEPTION;
562 BEGIN
563     -- check user id and responsibility
564    -- MSC_WS_COMMON.VALIDATE_USER_RESP(l_String, UserId, ResponsibilityId);
565   --  IF (l_String <> 'OK') THEN
566   --      Status := l_String;
567  --       RETURN;
568  --   END IF;
569 
570 
571     -- update msc_process_instances.actual_start_date
572     UPDATE msc_process_instances
573     SET actual_start_date = sysdate,
574         last_update_date = sysdate,
575         last_updated_by = userid,
576         last_update_login = userid
577     WHERE
578         process_id = ProcessId AND
579         run_sequence = RunSequence;
580     IF SQL%NOTFOUND THEN
581         raise e_NoDataFound;
582     END IF;
583 
584     COMMIT;
585     Status := 'SUCCESS';
586 
587     EXCEPTION
588         WHEN e_NoDataFound THEN
589             Status := 'NO_DATA_FOUND';
590             RETURN;
591         WHEN others THEN
592             Status := 'ERROR_UNEXPECTED_01009';
593             RETURN;
594 
595 END UPDATE_PROCESS;
596 
597 
598 PROCEDURE UPDATE_PROCESS_PUBLIC(
599         Status             OUT NOCOPY VARCHAR2,
600         UserName               IN VARCHAR2,
601 		   RespName     IN VARCHAR2,
602 		   RespApplName IN VARCHAR2,
603 		   SecurityGroupName      IN VARCHAR2,
604 		   Language            IN VARCHAR2,
605         ProcessId          IN         NUMBER,
606         RunSequence        IN         NUMBER
607         ) AS
608 		     userid    number;
609 		     respid    number;
610 		     l_String VARCHAR2(30);
611 		     error_tracking_num number;
612 		     l_SecutirtGroupId  NUMBER;
613 		    BEGIN
614 		      error_tracking_num :=2010;
615 		       MSC_WS_COMMON.GET_PERMISSION_IDS(l_String, userid, respid, l_SecutirtGroupId, UserName, RespName, RespApplName, SecurityGroupName, Language);
616 		       IF (l_String <> 'OK') THEN
617 		           Status := l_String;
618 		           RETURN;
619 		       END IF;
620 
621 		      error_tracking_num :=2030;
622 		        MSC_WS_COMMON.VALIDATE_USER_RESP_FUNC(l_String, userid, respid, 'MSC_SCN_MANAGE_SCENARIOS',l_SecutirtGroupId);
623 		       IF (l_String <> 'OK') THEN
624 		          Status := l_String;
625 		          RETURN;
626 		      END IF;
627 		       error_tracking_num :=2040;
628 
629 		      UPDATE_PROCESS( status,
630                                       userId ,
631                                     respid,
632                                     ProcessId,
633                                     RunSequence );
634 
635 
636 
637 		         EXCEPTION
638 		         WHEN others THEN
639 		            status := 'ERROR_UNEXPECTED_'||error_tracking_num;
640 
641 		            return;
642 END UPDATE_PROCESS_PUBLIC;
646 --        UserId             User ID.
643 -- =============================================================
644 -- Desc: Get value for all parameters.
645 -- Input:
647 --        ResponsibilityId   Responsibility Id.
648 --        ProcessId          Process Id.
649 --        RunSequence        Run sequence.
650 --        ProcessScope       Activity Name.
651 --
652 -- Output: The possible return statuses are:
653 --          SUCCESS if everything is ok
654 --          NO_DATA_FOUND
655 --          INVALID_FND_USERID
656 --          INVALID_FND_RESPONSIBILITYID
657 -- =============================================================
658 PROCEDURE GET_PARAMETER_VALUE(
659         Status             OUT NOCOPY VARCHAR2,
660         ParameterValues    OUT NOCOPY MscActivityParaTbl,
661         UserId             IN         NUMBER,
662         ResponsibilityId   IN         NUMBER,
663         ProcessId          IN         NUMBER,
664         RunSequence        IN         NUMBER,
665         ProcessScope       IN         VARCHAR2
666         ) AS
667 CURSOR getParameter_c (idProcess NUMBER, seqRun NUMBER, nameActivity VARCHAR2) IS
668     SELECT param_name, param_value
669     FROM   msc_proc_inst_act_params
670     WHERE  process_id = idProcess AND
671            run_sequence = seqRun AND
672            activity_id =
673                ( SELECT activity_id FROM msc_planning_proc_activities
674                  WHERE  process_id = idProcess AND
675                         run_sequence = seqRun AND
676                         process_scope = nameActivity)
677     ORDER BY parameterSequence;
678 l_String            VARCHAR2(100);
679 l_ParameterName     VARCHAR2(50);
680 l_ParameterValue    VARCHAR2(50);
681 l_Dummy             NUMBER;
682 BEGIN
683     BEGIN
684         ParameterValues := MscActivityParaTbl();
685         OPEN getParameter_c(ProcessId, RunSequence, ProcessScope);
686         LOOP
687             FETCH getParameter_c into l_ParameterName, l_ParameterValue;
688             EXIT WHEN getParameter_c%NOTFOUND;
689             ParameterValues.extend;
690             ParameterValues(ParameterValues.count) := MscActivityParaRec(l_ParameterName, l_ParameterValue);
691         END LOOP;
692         CLOSE getParameter_c;
693 
694         IF ParameterValues.count = 0 THEN
695             SELECT count(*) INTO l_Dummy
696             FROM   msc_proc_inst_act_params
697             WHERE  process_id = ProcessId AND
698                    run_sequence = RunSequence AND
699                    activity_id =
700                        ( SELECT activity_id FROM msc_planning_proc_activities
701                          WHERE  process_id = RunSequence AND
702                                 run_sequence = RunSequence AND
703                                 process_scope = ProcessScope);
704             IF l_Dummy = 0 THEN
705                 status := 'NO_DATA_FOUND'; -- wrong Process id / activity name
706                 RETURN;
707             END IF;
708             -- do nothing, this activity has no parameter
709         END IF;
710         Status := 'SUCCESS';
711 
712         EXCEPTION WHEN others THEN
713             status := 'ERROR_UNEXPECTED_01010';
714     END;
715 END GET_PARAMETER_VALUE;
716 
717 
718 PROCEDURE GET_PARAMETER_VALUE_PUBLIC(
719         Status             OUT NOCOPY VARCHAR2,
720         ParameterValues    OUT NOCOPY MscActivityParaTbl,
721         UserName               IN VARCHAR2,
722 		   RespName     IN VARCHAR2,
723 		   RespApplName IN VARCHAR2,
724 		   SecurityGroupName      IN VARCHAR2,
725 		   Language            IN VARCHAR2,
726         ProcessId          IN         NUMBER,
727         RunSequence        IN         NUMBER,
728         ProcessScope       IN         VARCHAR2
729         ) AS
730 		     userid    number;
731 		     respid    number;
732 		     l_String VARCHAR2(30);
733 		     error_tracking_num number;
734 		     l_SecutirtGroupId  NUMBER;
735 		    BEGIN
736 		     ParameterValues := MscActivityParaTbl();
737 		      error_tracking_num :=2010;
738 		       MSC_WS_COMMON.GET_PERMISSION_IDS(l_String, userid, respid, l_SecutirtGroupId, UserName, RespName, RespApplName, SecurityGroupName, Language);
739 		       IF (l_String <> 'OK') THEN
740 		           Status := l_String;
741 		           RETURN;
742 		       END IF;
743 
744 		     error_tracking_num :=2030;
745 		        MSC_WS_COMMON.VALIDATE_USER_RESP_FUNC(l_String, userid, respid, 'MSC_SCN_MANAGE_SCENARIOS',l_SecutirtGroupId);
746 		       IF (l_String <> 'OK') THEN
747 		          Status := l_String;
748 		          RETURN;
749 		      END IF;
750 		       error_tracking_num :=2040;
751 
752 		      GET_PARAMETER_VALUE ( status,
753                                            ParameterValues,
754                                            userid ,
755                                            respid,
756                                            ProcessId ,
757                                             RunSequence,
758                                            ProcessScope);
759 
760 
761 
762 		         EXCEPTION
763 		         WHEN others THEN
764 		            status := 'ERROR_UNEXPECTED_'||error_tracking_num;
765 
766 		            return;
767 END GET_PARAMETER_VALUE_PUBLIC;
768 -- =============================================================
769 -- Desc: This procedure is invoked from web service to launch
770 --       the Archive Scenario concurrent program.  The input
771 --       parameters mirror the parameters for the concurrent program.
772 -- Input:
773 --        UserName          User name.
774 --        RespName          Responsibility name.
775 --        RespAppName       Responsibility application name.
776 --        SecurityGroupName Security group name.
780 -- Output: Procedure returns a status and conc program req id.
777 --        Language          Language.
778 --        ScenarioId        Scenario Id.
779 --
781 --       The possible return statuses are:
782 --          SUCCESS if everything is ok
783 --          ERROR_SUBMIT          failed to submit the concurrent program
784 --          ERROR_UNEXPECTED_#    unexpected error
785 --          INVALID_USER_NAME
786 --          INVALID_LANGUAGE
787 --          INVALID_RESP_NAME
788 --          INVALID_SECUTITY_GROUP_NAME
789 --          INVALID_FND_USERID
790 --          INVALID_FND_RESPONSIBILITYID
791 --          INVALID_SCENARIO_ID   invalid scenario id
792 -- =============================================================
793 PROCEDURE ARCHIVE_SCENARIO_PUBLIC(
794         ProcessId          OUT NOCOPY NUMBER,
795         Status             OUT NOCOPY VARCHAR2,
796         UserName           IN         VARCHAR2,
797         RespName           IN         VARCHAR2,
798         RespAppName        IN         VARCHAR2,
799         SecurityGroupName  IN         VARCHAR2,
800         Language           IN         VARCHAR2,
801         ScenarioId         IN         NUMBER
802         ) IS
803 l_String            VARCHAR2(100);
804 l_ResponsibilityId  NUMBER;
805 l_SecurityGroupId   NUMBER;
806 l_Dummy             NUMBER;
807 l_Number            NUMBER;
808 error_tracking_num  NUMBER;
809 BEGIN
810 -- dbms_output.put_line('Matthew: Init');
811     -- init global variables
812     g_ErrorCode    := '';
813     ProcessId      := -1;
814 
815     -- query user id, responsibility id and security group id
816     MSC_WS_COMMON.GET_PERMISSION_IDS(l_String, g_UserId, l_ResponsibilityId, l_SecurityGroupId, UserName, RespName, RespAppName, SecurityGroupName, Language);
817     IF (l_String <> 'OK') THEN
818         Status := l_String;
819         RETURN;
820     END IF;
821  error_tracking_num :=2030;
822     MSC_WS_COMMON.VALIDATE_USER_RESP_FUNC(l_String, g_UserId, l_ResponsibilityId, 'MSC_SCN_MANAGE_SCENARIOS',l_SecurityGroupId);
823     		       IF (l_String <> 'OK') THEN
824     		          Status := l_String;
825     		          RETURN;
826 	END IF;
827 
828     -- check scenario id
829     BEGIN
830         SELECT 1 INTO l_Dummy
831         FROM msc_scenarios
832         WHERE
833             NVL(valid_from, TRUNC(SYSDATE) - 1) < TRUNC(SYSDATE) AND
834             NVL(valid_to, TRUNC(SYSDATE) + 1) > TRUNC(SYSDATE) AND
835             scenario_id = ScenarioId;
836         EXCEPTION
837             WHEN no_data_found THEN
838                 Status := 'INVALID_SCENARIO_ID';
839                 RETURN;
840             WHEN others THEN
841                 Status := 'ERROR_UNEXPECTED_01011';
842                 RETURN;
843     END;
844 
845     -- Now, submit the conc. program to run
846     l_Number := fnd_request.submit_request(
847                           application => 'MSC',
848                           program => 'MSCSCNAR',
849                           argument1 => ScenarioId
850                           );
851     IF (l_Number = 0) THEN
852         Status := 'ERROR_SUBMIT';
853     ELSE
854         ProcessId := l_Number;
855         Status := 'SUCCESS';
856     END IF;
857 
858     EXCEPTION
859         WHEN others THEN
860             Status := g_ErrorCode;
861 
862 END ARCHIVE_SCENARIO_PUBLIC;
863 
864 END MSC_WS_SCENARIO_MANAGEMENT;
865