DBA Data[Home] [Help]

PACKAGE BODY: APPS.ECX_INBOUND_ENGINE_QH

Source


1 package body ECX_INBOUND_ENGINE_QH as
2 -- $Header: ECXIEQHB.pls 120.4 2006/03/25 21:02:59 susaha ship $
3 ------------------------------------------------------------------------------+
4 PROCEDURE Dequeue(p_agent_guid in RAW, p_event out nocopy WF_EVENT_T)
5 is
6   x_queue_name          varchar2(80);
7   x_agent_name          varchar2(30);
8   x_msgid               RAW(16);
9   x_clob		clob;
10   no_messages           exception;
11   pragma exception_init (no_messages, -25228);
12   no_event_name 	exception;
13   inbound_engine_error 	exception;
14   x_sys_guid            RAW(16);
15   x_sys_name            VARCHAR2(30);
16   x_from_agt            wf_agent_t := wf_agent_t(null,null);
17   x_to_agt              wf_agent_t := wf_agent_t(null,null);
18 
19   v_message             system.ecx_inengobj;
20   v_dequeueoptions      dbms_aq.dequeue_options_t;
21   v_messageproperties   dbms_aq.message_properties_t;
22   v_msgid               raw(16);
23   l_module              varchar2(2000);
24   v_log_enabled_appl     varchar2(1);
25   v_log_enabled_site     varchar2(1);
26   v_log_module_appl       varchar2(240);
27   v_log_module_site        varchar2(240);
28 begin
29   l_module := 'ecx.plsql.ecx_inbound_engine_qh';
30   if (wf_log_pkg.level_procedure >= fnd_log.g_current_runtime_level) then
31     wf_log_pkg.string(wf_log_pkg.level_procedure, l_module || '.begin',
32        'in dequeue');
33   end if;
34 
35   select upper(queue_name), upper(name), system_guid
36   into   x_queue_name, x_agent_name, x_sys_guid      -- 20
37   from   wf_agents
38   where  guid = p_agent_guid;
39 
40   select upper(name)
41   into   x_sys_name
42   from   wf_systems
43   where  guid = x_sys_guid;
44 
45   x_from_agt := wf_agent_t(x_agent_name, x_sys_name);
46   x_to_agt := wf_agent_t(x_agent_name, x_sys_name);
47 
48   BEGIN
49     if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
50       wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
51          'p_agent_guid' ||hextoraw(p_agent_guid));
52       wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
53          'System: ' || x_sys_name);
54     end if;
55 
56     v_dequeueoptions.wait := 1;
57 
58     wf_event_t.initialize(p_event);
59     p_event.event_name := 'oracle.apps.ecx.inbound.message.process';
60 
61     savepoint before_dequeue;
62     v_log_enabled_appl := fnd_profile.value_specific(name=>'AFLOG_ENABLED',
63 			                      	     user_id=>0,
64                                                      responsibility_id=>20420,
65 				                     application_id=>174,
66                                                      org_id=>null,
67                              	                     server_id=>null);
68     v_log_module_appl := fnd_profile.value_specific(name=>'AFLOG_MODULE',
69                                                     user_id=>0,
70                                                     responsibility_id=>20420,
71                                                     application_id=>174,
72                                                     org_id=>null,
73                                                     server_id=>null);
74 
75     if ((v_log_enabled_appl='Y' OR v_log_enabled_appl='N') AND (v_log_module_appl like 'ecx%'or v_log_module_appl = '%'))
76 	then
77      fnd_global.apps_initialize(0,20420,174);
78     else
79      v_log_enabled_site := fnd_profile.value_specific(name=>'AFLOG_ENABLED',
80                                                      user_id=>0,
81                                                      responsibility_id=>20420,
82                                                      application_id=>0,
83                                                      org_id=>null,
84                                                      server_id=>null);
85     v_log_module_site := fnd_profile.value_specific(name=>'AFLOG_MODULE',
86                                                     user_id=>0,
87                                                     responsibility_id=>20420,
88                                                     application_id=>0,
89                                                     org_id=>null,
90                                                     server_id=>null);
91     if (v_log_enabled_site='Y' AND (v_log_module_site like 'ecx%'or v_log_module_site = '%')) then                                     fnd_global.apps_initialize(0,20420,0);
92     end if;
93     end if;
94     dbms_aq.dequeue (
95       queue_name => x_queue_name,
96       dequeue_options => v_dequeueoptions,
97       message_properties => v_messageproperties,
98       payload => v_message,
99       msgid => v_msgid
100     );
101 
102     p_event.AddParameterToList('ECX_MSGID', v_message.msgid);
103     p_event.AddParameterToList('ECX_DEBUG_LEVEL', v_message.debug_mode);
104     p_event.AddParameterToList('ECX_PROCESS_ID', v_msgid);
105     p_event.event_key := v_msgid;
106     p_event.from_agent := x_from_agt ;
107     p_event.to_agent := x_to_agt;
108     p_event.send_date := sysdate;
109 
110     if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
111       wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
112          'After Dequeue.  Message Id: ' || x_msgid);
113     end if;
114 
115   EXCEPTION
116     when no_messages then
117       if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
118         wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
119            'No more messages in dequeue.');
120       end if;
121       p_event := NULL;
122       return;
123   END;
124 exception
125   when others then
126      rollback to before_dequeue;
127      if (wf_log_pkg.level_unexpected >= fnd_log.g_current_runtime_level) then
128         wf_log_pkg.string(wf_log_pkg.level_unexpected, l_module,
129            substr(sqlerrm, 1,2000));
130      end if;
131      Wf_Core.Context('Wf_Event_ECXMSG_QH', 'Dequeue', x_queue_name);
132      raise;
133 end Dequeue;
134 
135 
136 PROCEDURE enqueue(p_event              in wf_event_t,
137                   p_out_agent_override in wf_agent_t )
138 is
139   	x_out_agent_name      	varchar2(30);
140   	x_out_system_name     	varchar2(30);
141   	x_to_agent_name       	varchar2(30) := p_event.GetToAgent().GetName();
142   	x_to_system_name      	varchar2(30) := p_event.GetToAgent().GetSystem();
143   	x_out_queue           	varchar2(80);
144   	x_to_queue            	varchar2(80);
145   	x_enqueue_options     	dbms_aq.enqueue_options_t;
146   	x_message_properties  	dbms_aq.message_properties_t;
147   	v_msgid               	RAW(16);
148 	v_message		SYSTEM.ECX_INENGOBJ ;
149         x_trigger_id            number;
150         l_module                varchar2(2000);
151 
152         cursor c_ecx_trigger_id
153         is
154         select ecx_trigger_id_s.NEXTVAL
155         from dual;
156 
157 
158 begin
159   l_module := 'ecx.plsql.ecx_inbound_engine_qh.enqueue';
160   if (wf_log_pkg.level_procedure >= fnd_log.g_current_runtime_level) then
161     wf_log_pkg.string(wf_log_pkg.level_procedure, l_module || '.begin',
162        'in enqueue');
163   end if;
164 
165   -- Determine the out queue
166   if (p_out_agent_override is not null) then
167      x_out_agent_name := p_out_agent_override.GetName();
168      x_out_system_name := p_out_agent_override.GetSystem();
169   else
170      x_out_agent_name := p_event.GetFromAgent().GetName();
171      x_out_system_name := p_event.GetFromAgent().GetSystem();
172   end if;
173 
174   select agt.queue_name into x_out_queue
175   from   wf_agents  agt,
176          wf_systems sys
177   where  agt.name = x_out_agent_name
178   and    sys.name = x_out_system_name
179   and    sys.guid = agt.system_guid;
180 
181   v_message := SYSTEM.ECX_INENGOBJ(null,null);
182 
183   v_message.msgid := p_event.getValueForParameter('ECX_MSGID');
184   v_message.debug_mode := p_event.getValueForParameter('ECX_DEBUG_LEVEL');
185   x_trigger_id := p_event.getValueForParameter('ECX_TRIGGER_ID');
186 
187   if (x_trigger_id is null) then
188      open c_ecx_trigger_id;
189      fetch c_ecx_trigger_id into x_trigger_id;
190      close c_ecx_trigger_id;
191   end if;
192 
193   if (wf_log_pkg.level_statement >= fnd_log.g_current_runtime_level) then
194     wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
195        'Trigger Id: ' || x_trigger_id);
196     wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
197        'Message Id: ' || v_message.msgid);
198     wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
199        'Debug Mode: ' || v_message.debug_mode);
200     wf_log_pkg.string(wf_log_pkg.level_statement, l_module,
201        'Enqueuing on Queue: ' || x_out_queue);
202   end if;
203 
204 	/*
205   	** Set the Priority
206   	*/
207   x_message_properties.priority := p_event.GetPriority();
208 
209   begin
210         DBMS_AQ.ENQUEUE(
211    	queue_name          => x_out_queue,
212    	enqueue_options     => x_enqueue_options,
213    	message_properties  => x_message_properties,
214    	payload             => v_message,
215    	msgid               => v_msgid);             /* OUT*/
216 
217         ecx_debug.setErrorInfo(10,10, 'ECX_REPROCESSING_MESSAGE');
218 
219         ecx_errorlog.inbound_trigger
220                         (
221                            x_trigger_id,
222                            v_message.msgid,
223                            v_msgid,
224                            ecx_utils.i_ret_code,
225                            ecx_utils.i_errbuf
226                         );
227 
228   exception
229     when others then
230          ecx_debug.setErrorInfo(1,30, 'ECX_REPROCESSING_ENQ_ERROR',
231                                 'p_out_queue', x_out_queue);
232 
233          ecx_errorlog.inbound_trigger(
234                       x_trigger_id,
235                       v_message.msgid,
236                       v_msgid,
237                       ecx_utils.i_ret_code,
238                       ecx_utils.i_errbuf,
239                       ecx_utils.i_errparams
240                       );
241 
242   end;
243 
244   if (wf_log_pkg.level_procedure >= fnd_log.g_current_runtime_level) then
245     wf_log_pkg.string(wf_log_pkg.level_procedure, l_module || '.end',
246        'finished calling dbms_aq.enqueue');
247   end if;
248 
249 exception
250   when others then
251 	Wf_Core.Context('ECX_INBOUND_ENGINE_QH', 'Enqueue', x_out_queue,
252                      'SQL err is '||substr(sqlerrm,1,200));
253     	raise;
254 end enqueue;
255 
256 
257 end ECX_INBOUND_ENGINE_QH;