DBA Data[Home] [Help]

PACKAGE BODY: APPS.WF_ACTIVITY

Source


1 package body WF_ACTIVITY as
2 /* $Header: wfengb.pls 120.38.12020000.3 2012/11/13 19:42:45 alsosa ship $ */
3 
4 
5 c_actid pls_integer;
6 c_actdate date;
7 c_type varchar2(8);
8 c_rerun varchar2(8);
9 c_cost number;
10 c_error_type varchar2(8);
11 c_error_process varchar2(30);
12 c_message varchar2(30);
13 c_msgtype varchar2(8);
14 c_expand_role varchar(1);
15 c_function varchar2(240);
16 c_function_type varchar2(30);
17 c_prole varchar2(320);
18 c_prole_type varchar2(8);
19 c_start_end varchar2(8);
20 c_event_name varchar2(240);
21 c_direction varchar2(8);
22 
23 --
24 -- ClearCache
25 --   Clear runtime cache
26 --
27 procedure ClearCache
28 is
29 begin
30   wf_activity.c_actid := '';
31   wf_activity.c_actdate := to_date(NULL);
32   wf_activity.c_type := '';
33   wf_activity.c_rerun := '';
34   wf_activity.c_cost := '';
35   wf_activity.c_error_type := '';
36   wf_activity.c_error_process := '';
37   wf_activity.c_message := '';
38   wf_activity.c_msgtype := '';
39   wf_activity.c_expand_role := '';
40   wf_activity.c_function := '';
41   wf_activity.c_function_type := '';
42   wf_activity.c_prole := '';
43   wf_activity.c_prole_type := '';
44   wf_activity.c_start_end := '';
45   wf_activity.c_event_name := '';
46   wf_activity.c_direction := '';
47 exception
48   when others then
49     Wf_Core.Context('Wf_Activity', 'ClearCache');
50     raise;
51 end ClearCache;
52 
53 --
54 -- InitCache (PRIVATE)
55 --   Initialize package cache
56 -- IN
57 --   actid - activity instance id
58 --   actdate - active date
59 --
60 procedure InitCache(
61   actid in number,
62   actdate in date)
63 is
64 
65   waIND   NUMBER;
66   status  PLS_INTEGER;
67 
68 begin
69   -- Check for refresh
70   if ((actid = wf_activity.c_actid) and
71       (actdate = wf_activity.c_actdate)) then
72     return;
73   end if;
74 
75   -- Checking global cache.
76   WF_CACHE.GetProcessActivityInfo(actid, actdate, status, waIND);
77 
78   if (status <> WF_CACHE.task_SUCCESS) then
79     waIND := 0;
80 
81     select WA.ITEM_TYPE, WA.NAME, WA.VERSION, WA.TYPE, WA.RERUN,
82            WA.EXPAND_ROLE, WA.COST, WA.ERROR_ITEM_TYPE, WA.ERROR_PROCESS,
83            WA.FUNCTION, WA.FUNCTION_TYPE, WA.MESSAGE, WA.BEGIN_DATE,
84            WA.END_DATE, WA.DIRECTION, WPA.PROCESS_ITEM_TYPE,
85            WPA.PROCESS_NAME, WPA.PROCESS_VERSION, WPA.ACTIVITY_ITEM_TYPE,
86            WPA.ACTIVITY_NAME, WPA.INSTANCE_ID, WPA.INSTANCE_LABEL,
87            WPA.PERFORM_ROLE, WPA.PERFORM_ROLE_TYPE, WPA.START_END,
88            WPA.DEFAULT_RESULT
89 
90     into   WF_CACHE.Activities(waIND).ITEM_TYPE,
91            WF_CACHE.Activities(waIND).NAME,
92            WF_CACHE.Activities(waIND).VERSION,
93            WF_CACHE.Activities(waIND).TYPE,
94            WF_CACHE.Activities(waIND).RERUN,
95            WF_CACHE.Activities(waIND).EXPAND_ROLE,
96            WF_CACHE.Activities(waIND).COST,
97            WF_CACHE.Activities(waIND).ERROR_ITEM_TYPE,
98            WF_CACHE.Activities(waIND).ERROR_PROCESS,
99            WF_CACHE.Activities(waIND).FUNCTION,
100            WF_CACHE.Activities(waIND).FUNCTION_TYPE,
101            WF_CACHE.Activities(waIND).MESSAGE,
102            WF_CACHE.Activities(waIND).BEGIN_DATE,
103            WF_CACHE.Activities(waIND).END_DATE,
104            WF_CACHE.Activities(waIND).DIRECTION,
105            WF_CACHE.ProcessActivities(actid).PROCESS_ITEM_TYPE,
106            WF_CACHE.ProcessActivities(actid).PROCESS_NAME,
107            WF_CACHE.ProcessActivities(actid).PROCESS_VERSION,
108            WF_CACHE.ProcessActivities(actid).ACTIVITY_ITEM_TYPE,
109            WF_CACHE.ProcessActivities(actid).ACTIVITY_NAME,
110            WF_CACHE.ProcessActivities(actid).INSTANCE_ID,
111            WF_CACHE.ProcessActivities(actid).INSTANCE_LABEL,
112            WF_CACHE.ProcessActivities(actid).PERFORM_ROLE,
113            WF_CACHE.ProcessActivities(actid).PERFORM_ROLE_TYPE,
114            WF_CACHE.ProcessActivities(actid).START_END,
115            WF_CACHE.ProcessActivities(actid).DEFAULT_RESULT
116 
117     from   WF_PROCESS_ACTIVITIES WPA, WF_ACTIVITIES WA
118 
119     where  WPA.INSTANCE_ID = actid
120     and    WA.ITEM_TYPE = WPA.ACTIVITY_ITEM_TYPE
121     and    WA.NAME = WPA.ACTIVITY_NAME
122     and    actdate >= WA.BEGIN_DATE
123     and    actdate < NVL(WA.END_DATE, actdate+1);
124 
125     waIND :=
126      WF_CACHE.HashKey(WF_CACHE.ProcessActivities(actid).ACTIVITY_ITEM_TYPE ||
127      WF_CACHE.ProcessActivities(actid).ACTIVITY_NAME);
128 
129     WF_CACHE.Activities(waIND) := WF_CACHE.Activities(0);
130 
131   end if;
132 
133   wf_activity.c_type          := WF_CACHE.Activities(waIND).TYPE;
134   wf_activity.c_rerun         := WF_CACHE.Activities(waIND).RERUN;
135   wf_activity.c_cost          := WF_CACHE.Activities(waIND).COST;
136   wf_activity.c_error_type    := WF_CACHE.Activities(waIND).ERROR_ITEM_TYPE;
137   wf_activity.c_error_process := WF_CACHE.Activities(waIND).ERROR_PROCESS;
138   wf_activity.c_expand_role   := WF_CACHE.Activities(waIND).EXPAND_ROLE;
139   wf_activity.c_function      := WF_CACHE.Activities(waIND).FUNCTION;
140   wf_activity.c_function_type := nvl(WF_CACHE.Activities(waIND).FUNCTION_TYPE,
141                                      'PL/SQL');
142   wf_activity.c_message       := WF_CACHE.Activities(waIND).MESSAGE;
143   wf_activity.c_msgtype       := WF_CACHE.Activities(waIND).ITEM_TYPE;
144   wf_activity.c_event_name    := WF_CACHE.Activities(waIND).EVENT_NAME;
145   wf_activity.c_direction     := WF_CACHE.Activities(waIND).DIRECTION;
146   wf_activity.c_prole         := WF_CACHE.ProcessActivities(actid).PERFORM_ROLE;
147   wf_activity.c_prole_type    := WF_CACHE.ProcessActivities(actid).PERFORM_ROLE_TYPE;
148   wf_activity.c_start_end     := WF_CACHE.ProcessActivities(actid).START_END;
149 
150   -- Save cache key values
151   wf_activity.c_actid := actid;
152   wf_activity.c_actdate := actdate;
153 
154 exception
155   when others then
156     Wf_Core.Context('Wf_Activity', 'InitCache', to_char(actid),
157                     to_char(actdate));
158     raise;
159 end InitCache;
160 
161 --
162 -- Instance_Type (PRIVATE)
163 --   Returns the activity type by given the process activity (instance id).
164 --   If no data found, raise WF_INVALID_PROCESS_ACTIVITY.(Basically this means
165 --   the given process activity(actid) is bad.
166 -- IN
167 --   actid - Process activity(instance id).
168 --   actdate - Active date
169 --
170 function Instance_Type(actid in number,
171                        actdate in date)
172 return varchar2
173 is
174 begin
175 
176   Wf_Activity.InitCache(actid, actdate);
177   return(wf_activity.c_type);
178 
179 exception
180   when NO_DATA_FOUND then
181     Wf_Core.Context('Wf_Activity', 'Instance_Type', to_char(actid),
182                     to_char(actdate));
183     Wf_Core.Token('ACTID', to_char(actid));
184     Wf_Core.Token('DATE', to_char(actdate));
185     Wf_Core.Raise('WFENG_ACTID');
186   when OTHERS then
187     Wf_Core.Context('Wf_Activity', 'Instance_Type', to_char(actid),
188                     to_char(actdate));
189     raise;
190 end Instance_Type;
191 
192 --
193 -- Type (PRIVATE)
194 --   Returns the activity type by given the activity name and item type.
195 --   If no data found, return null.
196 -- IN
197 --   itemtype - Activity item type
198 --   activity - Activity name
199 --   actdate - Active date
200 --
201 function Type(itemtype in varchar2,
202               activity in varchar2,
203               actdate in date)
204 return varchar2
205 is
206   waIND  NUMBER;
207   status PLS_INTEGER;
208 
209 begin
210   WF_CACHE.GetActivity(itemtype, activity, actdate, status, waIND);
211 
212   if (status <> WF_CACHE.task_SUCCESS) then
213 
214     select WA.ITEM_TYPE, WA.NAME, WA.VERSION, WA.TYPE, WA.RERUN,
215            WA.EXPAND_ROLE, WA.COST, WA.ERROR_ITEM_TYPE,
216            WA.ERROR_PROCESS, WA.FUNCTION, WA.FUNCTION_TYPE,  WA.EVENT_NAME,
217            WA.MESSAGE, WA.BEGIN_DATE, WA.END_DATE, WA.DIRECTION
218 
219     into   WF_CACHE.Activities(waIND).ITEM_TYPE,
220            WF_CACHE.Activities(waIND).NAME,
221            WF_CACHE.Activities(waIND).VERSION,
222            WF_CACHE.Activities(waIND).TYPE,
223            WF_CACHE.Activities(waIND).RERUN,
224            WF_CACHE.Activities(waIND).EXPAND_ROLE,
225            WF_CACHE.Activities(waIND).COST,
226            WF_CACHE.Activities(waIND).ERROR_ITEM_TYPE,
227            WF_CACHE.Activities(waIND).ERROR_PROCESS,
228            WF_CACHE.Activities(waIND).FUNCTION,
229            WF_CACHE.Activities(waIND).FUNCTION_TYPE,
230            WF_CACHE.Activities(waIND).EVENT_NAME,
231            WF_CACHE.Activities(waIND).MESSAGE,
232            WF_CACHE.Activities(waIND).BEGIN_DATE,
233            WF_CACHE.Activities(waIND).END_DATE,
234            WF_CACHE.Activities(waIND).DIRECTION
235 
236     from   WF_ACTIVITIES WA
237     where  WA.ITEM_TYPE = itemtype
238     and    WA.NAME = activity
239     and    actdate >= WA.BEGIN_DATE
240     and    actdate < nvl(WA.END_DATE, actdate+1);
241 
242   end if;
243 
244   return (WF_CACHE.Activities(waIND).TYPE);
245 
246 exception
247   when NO_DATA_FOUND then
248     return '';
249   when OTHERS then
250     Wf_Core.Context('Wf_Activity', 'Type', itemtype, activity,
251                     to_char(actdate));
252     raise;
253 end Type;
254 
255 --
256 -- Info (PRIVATE)
257 --   Returns specific information for a given activity.
258 --   If no data found, raise WF_INVALID_PROCESS_ACTIVITY.(Basically this means
259 --   the given process activity(actid) is bad.
260 -- IN
261 --   actid - Process activity(instance id).
262 --   actdate - Active date
263 -- OUT
264 --   rerun - Rerun/Ignore
265 --   type  - Activity type
266 --   cost  - Activity cost
267 --   function_type - Activity function type
268 procedure Info(actid in number,
269                actdate in date,
270                rerun out NOCOPY varchar2,
271                type  out NOCOPY varchar2,
272                cost  out NOCOPY number,
273                function_type out NOCOPY varchar2)
274 is
275 begin
276 
277   Wf_Activity.InitCache(actid, actdate);
278   rerun := wf_activity.c_rerun;
279   type := wf_activity.c_type;
280   cost := wf_activity.c_cost;
281   function_type := wf_activity.c_function_type;
282 
283 
284 exception
285   when NO_DATA_FOUND then
286     Wf_Core.Context('Wf_Activity', 'Info', to_char(actid), to_char(actdate));
287     Wf_Core.Token('ACTID', to_char(actid));
288     Wf_Core.Token('DATE', to_char(actdate));
289     Wf_Core.Raise('WFENG_ACTID');
290   when OTHERS then
291     Wf_Core.Context('Wf_Activity', 'Info', to_char(actid), to_char(actdate));
292     raise;
293 end Info;
294 
295 --
296 -- Ending (PRIVATE)
297 --   Check if activity is an END activity (end process)
298 -- IN
299 --   actid - Process activity(instance id).
300 --   actdate - Active date
301 --
302 function Ending(actid in number,
303                 actdate in date)
304 return boolean
305 is
306 begin
307 
308   Wf_Activity.InitCache(actid, actdate);
309   if (wf_activity.c_start_end = wf_engine.eng_end) then
310     return(TRUE);
311   else
312     return(FALSE);
313   end if;
314 
315 exception
316   when NO_DATA_FOUND then
317     Wf_Core.Context('Wf_Activity', 'Ending', to_char(actid), to_char(actdate));
318     Wf_Core.Token('ACTID', to_char(actid));
319     Wf_Core.Token('DATE', to_char(actdate));
320     Wf_Core.Raise('WFENG_ACTID');
321   when OTHERS then
322     Wf_Core.Context('Wf_Activity', 'Ending', to_char(actid), to_char(actdate));
323     raise;
324 end Ending;
325 
326 --
327 -- Error_Process (PRIVATE)
328 --   Returns the error item type and process name for a given activity.
329 --   If no data found, raise WF_INVALID_PROCESS_ACTIVITY.(Basically this means
330 --   the given process activity(actid) is bad.
331 -- IN
332 --   actid - Process activity(instance id).
333 --   actdate - Active date
334 -- OUT
335 --   errortype - the item type containing errorprocess
336 --   errorprocess - the process to run for an error
337 
338 procedure Error_Process(actid in number,
339                         actdate in date,
340                         errortype in out NOCOPY varchar2,
341                         errorprocess in out NOCOPY varchar2)
342 is
343 begin
344 
345   Wf_Activity.InitCache(actid, actdate);
346   errortype:=wf_activity.c_error_type;
347   errorprocess:=wf_activity.c_error_process;
348 
349   -- for backward compatability, ensure error type is set
350   -- this is not necessary for 2.5 onwards.
351   if errorprocess is not null and errortype is null then
352      errortype:=wf_engine.eng_wferror;
353   end if;
354 
355 exception
356   when NO_DATA_FOUND then
357     Wf_Core.Context('Wf_Activity', 'Error_Process', to_char(actid),
358                     to_char(actdate));
359     Wf_Core.Token('ACTID', to_char(actid));
360     Wf_Core.Token('DATE', to_char(actdate));
361     Wf_Core.Raise('WFENG_ACTID');
362   when OTHERS then
363     Wf_Core.Context('Wf_Activity', 'Error_Process', to_char(actid),
364                     to_char(actdate));
365     raise;
366 end Error_Process;
367 
368 --
369 -- Activity_Function (PRIVATE)
370 --   returns the activity function name.
371 -- IN
372 --   itemtype  - A valid item type
373 --   itemkey   - Item key
374 --   actid     - The activity instance id.
375 --
376 function Activity_Function(itemtype in varchar2,
377                            itemkey in varchar2,
378                            actid in number)
379 return varchar2
380 is
381   actdate date;
382 begin
383   actdate := Wf_Item.Active_Date(itemtype, itemkey);
384   Wf_Activity.InitCache(actid, actdate);
385   return(wf_activity.c_function);
386 exception
387   when others then
388     Wf_Core.Context('Wf_Activity', 'Activity_Function', itemtype, itemkey,
389                     to_char(actid));
390     raise;
391 end Activity_Function;
392 
393 --
394 -- Activity_Function (PRIVATE)
395 --   returns the activity function name.
396 -- IN
397 --   itemtype  - A valid item type
398 --   itemkey   - Item key
399 --   actid     - The activity instance id.
400 --
401 function Activity_Function_Type(itemtype in varchar2,
402                            itemkey in varchar2,
403                            actid in number)
404 return varchar2
405 is
406   actdate date;
407 begin
408   actdate := Wf_Item.Active_Date(itemtype, itemkey);
409   Wf_Activity.InitCache(actid, actdate);
410   return(wf_activity.c_function_type);
411 exception
412   when others then
413     Wf_Core.Context('Wf_Activity', 'Activity_Function_Type', itemtype, itemkey,
414                     to_char(actid));
415     raise;
416 end Activity_Function_type;
417 
418 --
419 -- Notification_Info (PRIVATE)
420 --   Returns notification-related info about an activity.
421 --   If no data found, raise WF_INVALID_PROCESS_ACTIVITY.(Basically this means
425 --   itemkey - Item key
422 --   the given process activity(actid) is bad.
423 -- IN
424 --   itemtype - Item type
426 --   actid - Process activity (notification activity instance id).
427 -- OUT
428 --   message - Message sent by notification
429 --   msgtype - Message type
430 --   expand_role - Flag to expand recipient list
431 --
432 procedure Notification_Info(itemtype in varchar2,
433                             itemkey in varchar2,
434                             actid in number,
435                             message out NOCOPY varchar2,
436                             msgtype out NOCOPY varchar2,
437                             expand_role out NOCOPY varchar2)
438 is
439   actdate date;
440 begin
441 
442   actdate := Wf_Item.Active_Date(itemtype, itemkey);
443   Wf_Activity.InitCache(actid, actdate);
444   message := wf_activity.c_message;
445   msgtype := wf_activity.c_msgtype;
446   expand_role := wf_activity.c_expand_role;
447 
448 exception
449   when no_data_found then
450     Wf_Core.Context('Wf_Activity', 'Notification_Info', itemtype, itemkey,
451                     to_char(actid));
452     Wf_Core.Token('TYPE', itemtype);
453     Wf_Core.Token('KEY', itemkey);
454     Wf_Core.Token('ACTID', to_char(actid));
455     Wf_Core.Raise('WFENG_ITEM_ACTIVITY_STATUS');
456   when others then
457     Wf_Core.Context('Wf_Activity', 'Notification_Info', itemtype, itemkey,
458                     to_char(actid));
459     raise;
460 end Notification_Info;
461 
462 --
463 -- Event_Info (PRIVATE)
464 --   Returns event-related info about an activity.
465 -- IN
466 --   itemtype - Item type
467 --   itemkey - Item key
468 --   actid - Process activity
469 -- OUT
470 --   event_name - Event name filter
471 --   direction - Event direction (RECEIVE/RAISE/SEND)
472 --
473 procedure Event_Info(
474   itemtype in varchar2,
475   itemkey in varchar2,
476   actid in number,
477   event_name out NOCOPY varchar2,
478   direction out NOCOPY varchar2)
479 is
480   actdate date;
481 begin
482 
483   actdate := Wf_Item.Active_Date(itemtype, itemkey);
484   Wf_Activity.InitCache(actid, actdate);
485   event_name := wf_activity.c_event_name;
486   direction := wf_activity.c_direction;
487 
488 exception
489   when no_data_found then
490     Wf_Core.Context('Wf_Activity', 'Event_Info', itemtype, itemkey,
491                     to_char(actid));
492     Wf_Core.Token('TYPE', itemtype);
493     Wf_Core.Token('KEY', itemkey);
494     Wf_Core.Token('ACTID', to_char(actid));
495     Wf_Core.Raise('WFENG_ITEM_ACTIVITY_STATUS');
496   when others then
497     Wf_Core.Context('Wf_Activity', 'Event_Info', itemtype, itemkey,
498                     to_char(actid));
499     raise;
500 end Event_Info;
501 
502 --
503 -- Perform_Role (PRIVATE)
504 --   Get performer assigned to a notification
505 -- IN
506 --   itemtype - Item type
507 --   itemkey - Item key
508 --   actid - Process activity (notification activity instance id).
509 -- RETURNS
510 --   performrole - Role notification sent to
511 --
512 function Perform_Role(
513   itemtype in varchar2,
514   itemkey in varchar2,
515   actid in number)
516 return varchar2
517 is
518   actdate date;
519   assuser varchar2(320);
520   performrole varchar2(320);
521 begin
522 
523   -- Initialize cache for design-time data
524   actdate := Wf_Item.Active_Date(itemtype, itemkey);
525   Wf_Activity.InitCache(actid, actdate);
526 
527   -- Query WIAS for any runtime assigned_user changes
528   select
529     WIAS.ASSIGNED_USER
530   into assuser
531   from WF_ITEM_ACTIVITY_STATUSES WIAS
532   where WIAS.ITEM_TYPE = itemtype
533   and WIAS.ITEM_KEY = itemkey
534   and WIAS.PROCESS_ACTIVITY = actid;
535 
536   --
537   -- Decode the performrole as:
538   -- 1. If WIAS.assigned_user not null, use that
539   -- 2. If WPA.proletype = 'CONSTANT', then use WPA.prole.
540   -- 3. If WPA.proletype = 'ITEMATTR', then WPA.prole is an item attr ref.
541   if (assuser is not null) then
542     performrole := assuser;
543   elsif (wf_activity.c_prole_type = 'CONSTANT') then
544     performrole := wf_activity.c_prole;
545   else -- (must be proletype = 'ITEMATTR')
546     -- Let the unknown_attribute exception propagate up if raised.
547     -- The substr is to prevent value errors if the attr value is too
548     -- long.
549     performrole := substrb(Wf_Engine.GetItemAttrText(itemtype, itemkey,
550                            wf_activity.c_prole), 1, 320);
551   end if;
552 
553   return(performrole);
554 exception
555   when no_data_found then
556     Wf_Core.Context('Wf_Activity', 'Perform_Role', itemtype, itemkey,
557                     to_char(actid));
558     Wf_Core.Token('TYPE', itemtype);
559     Wf_Core.Token('KEY', itemkey);
560     Wf_Core.Token('ACTID', to_char(actid));
561     Wf_Core.Raise('WFENG_ITEM_ACTIVITY_STATUS');
562   when others then
563     Wf_Core.Context('Wf_Activity', 'Perform_Role', itemtype, itemkey,
564                     to_char(actid));
565     raise;
566 end Perform_Role;
567 
568 --
569 -- Version (PRIVATE)
570 --   Get the version of an activity in use on the given date.
571 -- IN:
572 --   itemtype
573 --   activity - Activity name
574 --   actdate - Active date
575 -- RETURNS:
576 --   Version of activity in use on given date
577 --
578 function Version(itemtype in varchar2,
579                  activity in varchar2,
580                  actdate in date)
581 return number
582 is
583 
584   waIND  NUMBER;
585   status PLS_INTEGER;
589 
586 
587 begin
588   WF_CACHE.GetActivity(itemtype, activity, actdate, status, waIND);
590   if (status <> WF_CACHE.task_SUCCESS) then
591 
592     select WA.ITEM_TYPE, WA.NAME, WA.VERSION, WA.TYPE, WA.RERUN, WA.EXPAND_ROLE,
593            WA.COST, WA.ERROR_ITEM_TYPE, WA.ERROR_PROCESS, WA.FUNCTION,
594            WA.FUNCTION_TYPE, WA.EVENT_NAME, WA.MESSAGE, WA.BEGIN_DATE,
595            WA.END_DATE, WA.DIRECTION
596 
597     into   WF_CACHE.Activities(waIND).ITEM_TYPE,
598            WF_CACHE.Activities(waIND).NAME,
599            WF_CACHE.Activities(waIND).VERSION,
600            WF_CACHE.Activities(waIND).TYPE,
601            WF_CACHE.Activities(waIND).RERUN,
602            WF_CACHE.Activities(waIND).EXPAND_ROLE,
603            WF_CACHE.Activities(waIND).COST,
604            WF_CACHE.Activities(waIND).ERROR_ITEM_TYPE,
605            WF_CACHE.Activities(waIND).ERROR_PROCESS,
606            WF_CACHE.Activities(waIND).FUNCTION,
607            WF_CACHE.Activities(waIND).FUNCTION_TYPE,
608            WF_CACHE.Activities(waIND).EVENT_NAME,
609            WF_CACHE.Activities(waIND).MESSAGE,
610            WF_CACHE.Activities(waIND).BEGIN_DATE,
611            WF_CACHE.Activities(waIND).END_DATE,
612            WF_CACHE.Activities(waIND).DIRECTION
613 
614     from   WF_ACTIVITIES WA
615     where  WA.ITEM_TYPE = itemtype
616     and    WA.NAME = activity
617     and    actdate >= WA.BEGIN_DATE
618     and    actdate < nvl(WA.END_DATE, actdate+1);
619 
620   end if;
621 
622   return (WF_CACHE.Activities(waIND).VERSION);
623 
624 exception
625   when NO_DATA_FOUND then
626     Wf_Core.Context('Wf_Activity', 'Version', itemtype, activity,
627                     to_char(actdate));
628     Wf_Core.Token('TYPE', itemtype);
629     Wf_Core.Token('NAME', activity);
630     Wf_Core.Token('DATE', to_char(actdate));
631     Wf_Core.Raise('WFENG_ACTIVITY');
632   when OTHERS then
633     Wf_Core.Context('Wf_Activity', 'Version', itemtype, activity,
634                     to_char(actdate));
635     raise;
636 end Version;
637 
638 end WF_ACTIVITY;