[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;