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