[Home] [Help]
PACKAGE BODY: APPS.WF_EVENT_FUNCTIONS_PKG
Source
1 package body WF_EVENT_FUNCTIONS_PKG as
2 /* $Header: WFEVFNCB.pls 120.6 2005/11/28 00:53:49 nravindr ship $ */
3
4 ------------------------------------------------------------------------------
5 /*
6 ** PRIVATE global variable
7 */
8 local_system_guid raw(16) := hextoraw(wf_core.translate('WF_SYSTEM_GUID'));
9 ------------------------------------------------------------------------------
10 /*
11 ** GENERATE - Wrapper around event system packages generate procedure
12 ** to make compliant with generic generate message api
13 */
14 function GENERATE (
15 P_EVENT_NAME in varchar2,
16 P_EVENT_KEY in varchar2
17 ) return clob is
18
19 msg clob;
20 dtd varchar2(32000);
21 l_parameters t_parameters;
22
23 begin
24
25 l_parameters := t_parameters(1,2);
26
27 dbms_lob.createtemporary(msg, FALSE, DBMS_LOB.CALL);
28
29 if p_event_name = 'oracle.apps.wf.event.system.create' then
30 dtd := wf_systems_pkg.generate(p_event_key);
31 elsif p_event_name = 'oracle.apps.wf.event.system.delete' then
32 dtd := wf_systems_pkg.generate(p_event_key);
33 elsif p_event_name = 'oracle.apps.wf.event.system.update' then
34 dtd := wf_systems_pkg.generate(p_event_key);
35 elsif p_event_name = 'oracle.apps.wf.event.agent.create' then
36 dtd := wf_agents_pkg.generate(p_event_key);
37 elsif p_event_name = 'oracle.apps.wf.event.agent.delete' then
38 dtd := wf_agents_pkg.generate(p_event_key);
39 elsif p_event_name = 'oracle.apps.wf.event.agent.update' then
40 dtd := wf_agents_pkg.generate(p_event_key);
41 elsif p_event_name = 'oracle.apps.wf.event.agentgroup.create' then
42 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
43 2,'/');
44 dtd := wf_agent_groups_pkg.generate(l_parameters(1), l_parameters(2));
45 elsif p_event_name = 'oracle.apps.wf.event.agentgroup.delete' then
46 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
47 2,'/');
48 dtd := wf_agent_groups_pkg.generate(l_parameters(1), l_parameters(2));
49 elsif p_event_name = 'oracle.apps.wf.event.agentgroup.update' then
50 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
51 2,'/');
52 dtd := wf_agent_groups_pkg.generate1(l_parameters(1), l_parameters(2));
53 elsif p_event_name = 'oracle.apps.wf.event.event.create' then
54 dtd := wf_events_pkg.generate(p_event_key);
55 elsif p_event_name = 'oracle.apps.wf.event.event.delete' then
56 dtd := wf_events_pkg.generate(p_event_key);
57 elsif p_event_name = 'oracle.apps.wf.event.event.update' then
58 dtd := wf_events_pkg.generate(p_event_key);
59 elsif p_event_name = 'oracle.apps.wf.event.group.create' then
60 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
61 2,'/');
62 dtd := wf_event_groups_pkg.generate(l_parameters(1), l_parameters(2));
63 elsif p_event_name = 'oracle.apps.wf.event.group.delete' then
64 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
65 2,'/');
66 dtd := wf_event_groups_pkg.generate(l_parameters(1), l_parameters(2));
67 elsif p_event_name = 'oracle.apps.wf.event.group.update' then
68 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
69 2,'/');
70 dtd := wf_event_groups_pkg.generate2(l_parameters(1), l_parameters(2));
71 elsif p_event_name = 'oracle.apps.wf.event.subscription.create' then
72 dtd := wf_event_subscriptions_pkg.generate(p_event_key);
73 elsif p_event_name = 'oracle.apps.wf.event.subscription.delete' then
74 dtd := wf_event_subscriptions_pkg.generate(p_event_key);
75 elsif p_event_name = 'oracle.apps.wf.event.subscription.update' then
76 dtd := wf_event_subscriptions_pkg.generate(p_event_key);
77 /** Start of Bug 2398759 to support Agent Groups **/
78 elsif p_event_name = 'oracle.apps.wf.agent.group.create' then
79 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
80 2,'/');
81 dtd := wf_agent_groups_pkg.generate(l_parameters(1), l_parameters(2));
82 elsif p_event_name = 'oracle.apps.wf.agent.group.delete' then
83 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
84 2,'/');
85 dtd := wf_agent_groups_pkg.generate(l_parameters(1), l_parameters(2));
86 elsif p_event_name = 'oracle.apps.wf.agent.group.update' then
87 l_parameters := wf_event_functions_pkg.parameters(p_event_key,
88 2,'/');
89 dtd := wf_agent_groups_pkg.generate(l_parameters(1), l_parameters(2));
90 /** End of Bug 2398759 **/
91 elsif p_event_name = 'oracle.apps.wf.event.all.sync' then
92 wf_event_synchronize_pkg.CreateSyncClob(p_eventdata=>msg);
93 --dbms_lob.append(msg, wf_event_synchronize_pkg.CreateSyncClob);
94 else
95 null;
96 end if;
97
98 IF dtd IS NOT NULL THEN
99 dbms_lob.write(msg, length(dtd), 1, dtd);
100 END IF;
101
102 return (msg);
103
104 exception
105 when others then
106 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'GENERATE', p_event_name,
107 p_event_key,
108 substr(dtd,1,100));
109 raise;
110 end;
111 ------------------------------------------------------------------------------
112 /*
113 ** GENERATE - calls the GENERATE function, ignoring the WF_PARAMETER_LIST_T
114 */
115 function GENERATE (
116 P_EVENT_NAME in varchar2,
117 P_EVENT_KEY in varchar2,
118 P_PARAMETER_LIST in wf_parameter_list_t
119 ) return clob is
120 begin
121 return generate(p_event_name,
122 p_event_key);
123 end;
124 ------------------------------------------------------------------------------
125 function RECEIVE (
126 P_SUBSCRIPTION_GUID in raw,
127 P_EVENT in out nocopy wf_event_t
128 ) return varchar2 is
129 /*
130 ** RECEIVE - Wrapper around event system packages receive procedure
131 ** to make compliant with generic receive api
132 */
133
134 x_message varchar2(32000);
135 l_eventname varchar2(240) := p_event.getEventName();
136 l_eventkey varchar2(240) := p_event.getEventKey();
137 l_eventdata clob := p_event.getEventData();
138 l_length integer;
139 l_start number := 1;
140 l_end number := 1;
141 l_result varchar2(10);
142 l_parameters t_parameters;
143
144 begin
145
146 l_parameters := t_parameters(1,2);
147
148 if (l_eventname <> 'oracle.apps.wf.event.all.sync'
149 and l_eventname <> 'oracle.apps.wf.event.system.signup') then
150
151 l_length := dbms_lob.getlength(l_eventdata);
152
153 dbms_lob.read(l_eventdata, l_length,1,x_message);
154
155 if l_eventname = 'oracle.apps.wf.event.system.create' then
156 wf_systems_pkg.receive(x_message);
157 elsif l_eventname = 'oracle.apps.wf.event.system.delete' then
158 wf_systems_pkg.delete_row(l_eventkey);
159 elsif l_eventname = 'oracle.apps.wf.event.system.update' then
160 wf_systems_pkg.receive(x_message);
161 elsif l_eventname = 'oracle.apps.wf.event.agent.create' then
162 wf_agents_pkg.receive(x_message);
163 elsif l_eventname = 'oracle.apps.wf.event.agent.delete' then
164 wf_agents_pkg.delete_row(l_eventkey);
165 elsif l_eventname = 'oracle.apps.wf.event.agent.update' then
166 wf_agents_pkg.receive(x_message);
167 elsif l_eventname = 'oracle.apps.wf.agent.group.create' then
168 wf_agent_groups_pkg.receive(x_message);
169 elsif l_eventname = 'oracle.apps.wf.agent.group.delete' then
170 l_parameters := wf_event_functions_pkg.parameters(l_eventkey,
171 2,'/');
172 wf_agent_groups_pkg.delete_row(l_parameters(1), l_parameters(2));
173 elsif l_eventname = 'oracle.apps.wf.agent.group.update' then
174 wf_agent_groups_pkg.receive(x_message);
175 elsif l_eventname = 'oracle.apps.wf.event.event.create' then
176 wf_events_pkg.receive(x_message);
177 elsif l_eventname = 'oracle.apps.wf.event.event.delete' then
178 wf_events_pkg.delete_row(l_eventkey);
179 elsif l_eventname = 'oracle.apps.wf.event.event.update' then
180 wf_events_pkg.receive(x_message);
181 elsif l_eventname = 'oracle.apps.wf.event.group.create' then
182 wf_event_groups_pkg.receive(x_message);
183 elsif l_eventname = 'oracle.apps.wf.event.group.delete' then
184 l_parameters := wf_event_functions_pkg.parameters(l_eventkey,
185 2,'/');
186 wf_event_groups_pkg.delete_row(l_parameters(1), l_parameters(2));
187 elsif l_eventname = 'oracle.apps.wf.event.group.update' then
188 wf_event_groups_pkg.receive(x_message);
189 elsif l_eventname = 'oracle.apps.wf.event.subscription.create' then
190 wf_event_subscriptions_pkg.receive(x_message);
191 elsif l_eventname = 'oracle.apps.wf.event.subscription.delete' then
192 wf_event_subscriptions_pkg.delete_row(l_eventkey);
193 elsif l_eventname = 'oracle.apps.wf.event.subscription.update' then
194 wf_event_subscriptions_pkg.receive(x_message);
195 else
196 return('ERROR');
197 end if;
198 elsif l_eventname = 'oracle.apps.wf.event.all.sync' then
199 wf_event_synchronize_pkg.uploadsyncclob(l_eventdata);
200 elsif l_eventname = 'oracle.apps.wf.event.system.signup' then
201 wf_event_synchronize_pkg.uploadsyncclob(l_eventdata);
202 end if;
203
204 l_result := wf_rule.default_rule(p_subscription_guid, p_event);
205
206 return(l_result);
207
208 exception
209 when others then
210 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'RECEIVE', p_event.event_name,
211 p_subscription_guid);
212 wf_event.setErrorInfo(p_event,'ERROR');
213 return('ERROR');
214 end;
215 ------------------------------------------------------------------------------
216 procedure SEND (
217 P_EVENTNAME in varchar2,
218 P_EVENTKEY in varchar2,
219 P_EVENTDATA in clob,
220 P_TOAGENT in varchar2,
221 P_TOSYSTEM in varchar2,
222 P_PRIORITY in number,
223 P_SENDDATE in date
224 ) is
225 /*
226 ** SEND - Packages up parameters in wf_event_t and then calls
227 ** wf_event.send()
228 */
229
230 l_agent_t wf_agent_t;
231 l_event_t wf_event_t;
232
233 begin
234
235 wf_event_t.initialize(l_event_t);
236
237 if (wf_log_pkg.level_procedure >= fnd_log.g_current_runtime_level) then
238 WF_LOG_PKG.STRING(wf_log_pkg.level_procedure,
239 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.SEND.Begin',
240 'Parameters:'||p_EventName||'*'|| p_EventKey||'*'||p_ToAgent||'*'||p_ToSystem);
241 end if;
242
243 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
244 WF_LOG_PKG.STRING(wf_log_pkg.level_statement,
245 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.SEND.Agent',
246 'Populating Agent...');
247 end if;
248
249 -- Populate the Agent
250 l_agent_t := wf_agent_t (p_ToAgent, p_ToSystem);
251
252 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
253 WF_LOG_PKG.STRING(wf_log_pkg.level_statement,
254 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.SEND.Address',
255 'Populating Address...');
256 end if;
257
258 -- Populate the Address
259 l_event_t.Address( pOutAgent => null,
260 pToAgent => l_agent_t,
261 pPriority => 0,
262 pSendDate => sysdate);
263
264 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
265 WF_LOG_PKG.STRING(wf_log_pkg.level_statement,
266 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.SEND.Content',
267 'Populating Content');
268 end if;
269
270 -- Populate the Content
271 l_event_t.Content( pName => p_EventName,
272 pKey => p_EventKey,
273 pData => p_EventData);
274 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
275 WF_LOG_PKG.STRING(wf_log_pkg.level_statement,
276 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.SEND.Hardwire',
277 'Hardwired Send');
278 end if;
279
280 -- Release the hounds, hardwired send
281 wf_event.send(l_event_t);
282
283 if (wf_log_pkg.level_procedure >= fnd_log.g_current_runtime_level) then
284 WF_LOG_PKG.STRING(wf_log_pkg.level_procedure,
285 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.SEND.End',
286 'Completed Send');
287 end if;
288
289 exception
290 when others then
291 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'SEND', p_EventName,
292 p_EventKey,
293 'ERROR'); raise;
294 end;
295 ------------------------------------------------------------------------------
296 function PARAMETERS (
297 P_STRING in varchar2,
298 P_NUMVALUES in number,
299 P_SEPARATOR in varchar2)
300 return t_parameters is
301 /*
302 ** PARAMETERS - splices up a string and returns nested table
303 */
304 l_parameters t_parameters;
305 l_counter integer;
306 l_endposition integer;
307 l_startposition integer;
308 l_amounttoread integer;
309
310 begin
311
312 l_parameters := t_parameters(1);
313 l_counter := 0;
314 l_endposition := 0;
315 l_startposition := 0;
316 l_amounttoread := 0;
317
318 LOOP
319 l_counter := l_counter + 1;
320
321 EXIT when l_counter > p_numvalues;
322
323 l_startposition := l_endposition + 1;
324 l_endposition := instr(p_string, p_separator, 1, l_counter);
325
326 IF l_endposition = 0 THEN
327 l_endposition := length(p_string) + 1;
328 END IF;
329
330 l_amounttoread := l_endposition - l_startposition;
331
332 l_parameters.extend(1);
333 l_parameters(l_counter) := substr(p_string, l_startposition, l_amounttoread);
334
335 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
336 wf_log_pkg.string(wf_log_pkg.level_statement,
337 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.PARAMETERS.get_pos',
338 'String:'||p_string||' Start:'||l_startposition||
339 ' End:'||l_endposition);
340 end if;
341
342 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
343 wf_log_pkg.string(wf_log_pkg.level_statement,
344 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.PARAMETERS.get_param',
345 'Parameter('||l_counter||') is '||l_parameters(l_counter));
346 end if;
347
348 END LOOP;
349
350 return(l_parameters);
351
352 exception
353 when others then
354 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'Parameters', substr(p_string,1,100),
355 p_numvalues,p_separator,
356 'ERROR'); raise;
357 end;
358 ------------------------------------------------------------------------------
359 function ADDCORRELATION (
360 P_SUBSCRIPTION_GUID in raw,
361 P_EVENT in out nocopy wf_event_t
362 ) return varchar2 is
363 /*
364 ** ADDCORRELATION - This function adds a correlation id to the event object
365 */
366
367 l_itemkey varchar2(240);
368 l_result varchar2(10);
369 l_parameters varchar2(32000);
370 l_function varchar2(240);
371 l_sqlstmt varchar2(240);
372
373 CURSOR c_parameters IS
374 SELECT parameters
375 FROM wf_event_subscriptions
376 WHERE guid = p_subscription_guid;
377
378 begin
379
380 OPEN c_parameters;
381 FETCH c_parameters INTO l_parameters;
382 IF c_parameters%FOUND THEN
383 --
384 -- This is where we will do some logic to determine if there is a parameter
385 -- set which tells us which sequence to nextval to get the itemkey
386 --
387 l_function := wf_event_functions_pkg.SubscriptionParameters(l_parameters,
388 'ITEMKEY');
389
390 if (wf_log_pkg.level_procedure >= fnd_log.g_current_runtime_level) then
391 wf_log_pkg.string(wf_log_pkg.level_procedure,
392 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.ADDCORRELATION.Begin',
393 'Item Key function is '||l_function);
394 end if;
395
396 IF l_function IS NOT NULL THEN
397 l_sqlstmt := 'begin :v1 := '||l_function||'; end;';
398 EXECUTE IMMEDIATE l_sqlstmt USING in out l_itemkey;
399 END IF;
400 END IF;
401
402 --
403 -- If nothing found then just pass back date
404 --
405 IF l_itemkey IS NULL THEN
406 l_itemkey := to_char(sysdate, 'YYYYMMDDHH24MISS');
407 END IF;
408
409 if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
410 wf_log_pkg.string(wf_log_pkg.level_statement,
411 'wf.plsql.WF_EVENT_FUNCTIONS_PKG.ADDCORRELATION.Set',
412 'Item Key is '||l_itemkey);
413 end if;
414
415 p_event.SetCorrelationId(l_itemkey);
416
417 return ('SUCCESS');
418
419 exception
420 when others then
421 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'ADDCORRELATION', p_event.event_name,
422 p_event.event_key,
423 'ERROR'); raise;
424 return('ERROR');
425 end;
426 ------------------------------------------------------------------------------
427 function SUBSCRIPTIONPARAMETERS (
428 P_STRING in out nocopy varchar2,
429 P_KEY in varchar2,
430 P_GUID in raw default NULL
431 ) return varchar2 is
432 /*
433 ** SUBSCRIPTIONPARAMETERS - Reads through NAME=VALUE pairs looking for NAME
434 ** to return VALUE
435 */
436
437 l_string varchar2(32000);
438 l_key varchar2(32000);
439 l_start integer := 0;
440 l_end integer := 0;
441 l_value varchar2(32000);
442
443 /* Bug 2015055 */
444 --cursor to fetch subscription parameters
445
446 CURSOR c_parameters (c_guid raw) IS
447 SELECT parameters
448 FROM wf_event_subscriptions
449 WHERE guid = c_guid;
450
451 begin
452
453 /* Bug 2015055 */
454 -- if p_guid is not null, event subscription parameters
455 -- is retrieved and based on the key the value is fetched
456 -- and returned.
457
458 if p_guid is not NULL then
459 OPEN c_parameters (p_guid);
460 FETCH c_parameters INTO p_string;
461 if c_parameters%NOTFOUND then
462 p_string := NULL;
463 end if;
464 end if;
465
466 /* Bug 2167813 */
467 l_string := ' ' || p_string || ' ';
468 l_key := ' ' || p_key || '=';
469 l_start := instr(l_string,l_key);
470 if l_start = 0 then
471 return NULL;
472 end if;
473 l_start := l_start + length(l_key);
474
475 l_end := instr(l_string,' ',l_start);
476 l_value := substr(l_string,l_start,l_end-l_start);
477
478 return (l_value);
479
480 exception
481 when others then
482 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'SUBSCRIPTIONPARAMETERS',
483 'ERROR'); raise;
484
485 end;
486
487 ------------------------------------------------------------------------------
488 function SubParamInEvent(p_guid in raw,
489 p_event in out NOCOPY wf_event_t,
490 p_match in varchar2) return boolean
491
492 is
493
494 eqPOS pls_integer;
495
496 l_subParams varchar2(32000);
497 l_subParam varchar2(4000);
498 l_NumSubParams pls_integer;
499 l_NumEvtParams pls_integer;
500 l_EvtParamsIND pls_integer;
501 l_SubParamsIND pls_integer;
502 l_parameters t_parameters;
503
504 l_evtParam varchar2(4000);
505 found_match boolean;
506
507
508 unitialized_collection exception;
509 PRAGMA exception_init(unitialized_collection, -06531);
510
511 begin
512
513 if (p_event is NULL) then
514 return false;
515 end if;
516
517 l_parameters := t_parameters(NULL);
518 eqPOS := 1;
519 l_NumSubParams := 0;
520 l_NumEvtParams := 0;
521
522 select parameters into l_subParams
523 from wf_event_subscriptions
524 where guid = p_guid;
525
526 -- Get a count on the subscription parameters.
527 while (eqPOS <> 0) loop
528
529 eqPOS := instr(l_subParams, '=', eqPOS);
530
531 if (eqPOS <> 0) then
532 l_NumSubParams := l_NumSubParams + 1;
533
534 eqPOS := eqPOS + 1;
535
536 end if;
537
538 end loop;
539
540
541 -- First a broad check to see if the event and subscription both have or do
542 -- not have any parameters.
543
544 if (l_NumSubParams < 1) then
545 -- If the subscription does not have any parameters, then we do not need to
546 -- check the event, we will return TRUE.
547 return TRUE;
548
549 end if;
550
551 -- If we made it here, the subscription does have parameters, we will now
552 -- check the event.
553 begin
554 l_NumEvtParams := p_event.parameter_list.COUNT;
555
556 exception
557 when unitialized_collection then
558 l_NumEvtParams := 0;
559
560 when others then
561 raise;
562
563 end;
564
565 if ((l_NumEvtParams < 1) and (l_NumSubParams > 0)) then
566 -- If the event does not have any parameters, but the subscription does, we
567 -- do not need to proceed further, we can go ahead and return FALSE.
568 return FALSE;
569
570 end if;
571
572 -- If we made it here, both the event and subscription have parameters, so
573 -- we need to start checking them.
574
575 --Bug 3845922
576 -- Clear cache that we uses to remove duplicate and other optimization
577 -- within the loops below.
578 WF_EVENT.sub_param_index.DELETE;
579 WF_EVENT.evt_param_index.DELETE;
580
581 l_parameters := Parameters(l_SubParams, l_NumSubParams, ' ');
582
583
584 while (l_NumSubParams > 0) loop <<subscrLoop>> -- We will loop through the
585 -- subscription parameters.
586
587 -- We will hash the subscription parameter and cache it
588
589 l_SubParam := l_parameters(l_NumSubParams);
590 l_subParamsIND := WF_CORE.HashKey(l_SubParam);
591 l_NumSubParams := l_NumSubParams - 1;
592
593 -- Here we check to see if we have already seen this subscription
594 -- parameter. If so, skip to the next. If not, cache it and check
595 -- the event parameters for a match. This will eliminate processing
596 -- duplicate subscription parameters.
597
598 if (NOT (WF_EVENT.sub_param_index.EXISTS(l_subParamsIND)) or
599 WF_EVENT.sub_param_index(l_subParamsIND) <> l_subParam) then
600
601 -- Cache the subscription parameter since it is not in the cache.
602 wf_event.sub_param_index(l_subParamsIND) := l_subParam;
603
604 -- reset count of event parameters and found_match for next sub
605 l_NumEvtParams := p_event.parameter_list.COUNT;
606 found_match := FALSE;
607
608
609 -- Sub loop through the event parameters
610 while (l_NumEvtParams > 0) loop <<evtLoop>>
611
612 -- Get the name value pair of the event parameter
613 l_evtParam := p_event.parameter_list(l_NumEvtParams).getName||
614 '=' ||p_event.parameter_list(l_NumEvtParams).getValue;
615
616 -- Hash value for the event name value pair
617 l_evtParamsIND := WF_CORE.HashKey(l_evtParam);
618
619 l_NumEvtParams := l_NumEvtParams-1;
620
621 -- Check to see if the event parameter has already been cached.
622 -- If not, check for a match. This will eliminate already
623 -- matched event parameters.
624
625 if (NOT (WF_EVENT.evt_param_index.EXISTS(l_evtParamsIND)) or
626 WF_EVENT.evt_param_index(l_evtParamsIND) <> l_evtParam) then
627
628 if (l_evtParamsIND = l_subParamsIND and
629 l_subParam = l_evtParam) then -- Found match
630
631 if (p_match = 'ANY') then
632 return TRUE;
633 else
634 found_match := TRUE;
635
636 -- Cache event parameter
637 WF_EVENT.evt_param_index(l_evtParamsIND) := l_evtParam;
638
639 -- ALL must match so continue to next subParam
640 exit;
641 end if;
642
643 end if;
644
645 end if;
646
647 end loop evtLoop;
648
649 if ((p_match='ALL') and not(found_match)) then
650 return FALSE;
651 end if;
652
653 end if;
654
655 end loop subscrLoop;
656
657
658 -- We've looped through all the subscription parameters and since
659 -- we haven't failed to find a match then return true for ALL.
660 -- For ANY if we haven't returned TRUE then a match hasn't been found.
661 if (p_match = 'ANY') then
662 return false;
663 else
664 return true;
665 end if;
666
667 exception
668 when others then
669 wf_core.context('WF_EVENT_FUNCTIONS_PKG', 'SubParamInEvent',
670 p_event.event_name);
671 raise;
672
673 end;
674
675
676
677 ------------------------------------------------------------------------------
678 Procedure UpdateLicenseStatus (p_OwnerTag in varchar2, p_Status in varchar2)
679 is
680 l_LicenseFlag varchar2(1);
681 begin
682 if p_Status in ('I','S') then
683 l_LicenseFlag := 'Y';
684 else
685 l_LicenseFlag := 'N';
686 end if;
687
688 -- Update all events and subscriptions with owner tag to product code
689 update wf_events
690 set licensed_flag = l_LicenseFlag
691 where owner_tag = p_OwnerTag;
692
693 update wf_event_subscriptions
694 set licensed_flag = l_LicenseFlag
695 where owner_tag = p_OwnerTag;
696
697 end UpdateLicenseStatus;
698
699
700 end WF_EVENT_FUNCTIONS_PKG;