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