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