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