[Home] [Help]
PACKAGE BODY: APPS.MWA_NOTIFICATION_API
Source
1 PACKAGE BODY MWA_NOTIFICATION_API as
2 /* $Header: MWANOTB.pls 120.1 2005/06/10 11:38:55 appldev $ */
3
4 -- Global constant holding package name
5 g_pkg_name constant varchar2(50) := 'MWA_NOTIFICATION_API';
6
7 procedure replaceChars(url IN OUT nocopy varchar2) as
8 begin
9 for v_counter in 1..NUM_RECORDS loop
10 url := REPLACE(url,
11 escapeRecord(v_counter).replace_char,
12 escapeRecord(v_counter).replacement_char);
13 end loop;
14 end replaceChars;
15
16 function calculateLength (str IN varchar2) return varchar2 as
17 len number;
18 counter number;
19 encoded_length varchar2(8);
20 padding varchar2(1);
21 begin
22 padding := chr(0);
23 len := length(str);
24 if len <= 127 then
25 encoded_length := fnd_global.local_chr(len);
26 else
27 encoded_length := fnd_global.local_chr(127);
28 end if;
29 counter := 7;
30 len := len - 127;
31 if len > 0 then
32 loop
33 counter := counter -1;
34 if len <= 127 then
35 encoded_length := encoded_length || fnd_global.local_chr(len);
36 exit;
37 else
38 encoded_length := encoded_length || fnd_global.local_chr(127);
39 len := len - 127;
40 end if;
41 end loop;
42 end if;
43 encoded_length := rpad(encoded_length, 8, padding);
44 return encoded_length;
45 end calculateLength;
46
47 function decodedLength (str in varchar2) return number as
48 counter number;
49 loopcounter number;
50 onechar varchar2(1);
51 begin
52 counter := 0;
53 loopcounter := 1;
54 loop
55 onechar := substr (str,loopcounter, 1);
56 if ascii(onechar) = 0 then
57 exit;
58 else
59 counter := counter + ascii(onechar);
60 end if;
61 loopcounter := loopcounter + 1;
62 if loopcounter = 9 then
63 exit;
64 end if;
65 end loop;
66 return counter;
67 end decodedLength;
68
69 procedure fireNotification(subject IN varchar2,
70 username IN varchar2,
71 type IN varchar2,
72 content IN varchar2) as
73 returnval varchar(2000);
74 url varchar(500);
75 temp_number number;
76 encodedcontent varchar(500);
77 encodedsubject varchar(500);
78 servername varchar2(100);
79
80 begin
81
82 encodedcontent := content;
83 replaceChars (encodedcontent);
84 encodedsubject := subject;
85 replaceChars (encodedsubject);
86
87 fnd_profile.get('MWA_NOTIFICATION_SERVER', servername);
88 url := 'http://' || servername || ':9040/ptg/not?req=notification' || fnd_global.local_chr(38)
89 || 'subject=' || encodedsubject || fnd_global.local_chr(38) || 'content=' || encodedcontent
90 || fnd_global.local_chr(38) || 'username=' || username || fnd_global.local_chr(38) || 'type=' || type;
91
92 returnval := utl_http.request(url);
93
94
95 end fireNotification;
96
97 function mwaNotify (p_subscription_guid IN raw,
98 p_event IN OUT nocopy WF_EVENT_T) return varchar2 as
99
100
101 eventData clob;
102
103 failedRequest exception;
104
105 -- these will be extracted out of the clob from the event data
106 subject varchar2(30);
107 username varchar2(50);
108 content varchar2(500);
109
110 subject_size number;
111 username_size number;
112 content_size number;
113
114 temp_string varchar2(8);
115
116 temp_number number;
117 begin
118
119 eventData := WF_EVENT_T.getEventData(p_event);
120
121 temp_number := 8;
122 dbms_lob.read (eventData, temp_number, 1 ,temp_string);
123 username_size := decodedLength(temp_string);
124
125 temp_number := 8;
126 dbms_lob.read (eventData, temp_number, 9 ,temp_string);
127 subject_size := decodedLength(temp_string);
128
129 temp_number := 8;
130 dbms_lob.read (eventData, temp_number, 17 ,temp_string);
131 content_size := decodedLength(temp_string);
132
133 dbms_lob.read (eventData, username_size, 25, username);
134 dbms_lob.read (eventData, subject_size, 25 + username_size, subject);
135 dbms_lob.read (eventData, content_size, 25 + username_size + subject_size,
136 content);
137
138 --finally fire the notification
139 fireNotification(subject, username, 'EMAIL', content);
140
141
142 return 'SUCCESS';
143
144
145 exception
146 when others then
147 wf_core.context('mwa_notification_api', 'mwaNotify', p_event.getEventName(),
148 p_subscription_guid);
149 wf_event.setErrorInfo(p_event, 'ERROR');
150 return 'ERROR';
151
152 --when utl_http.request_failed,utl_http.init_failed
153
154
155 end mwaNotify;
156
157 procedure raiseNotification (username IN varchar2,
158 subject IN varchar2,
159 content IN varchar2) as
160 eventData clob;
161 username_size number;
162 subject_size number;
163 content_size number;
164 username_encoded varchar2(8);
165 subject_encoded varchar2(8);
166 content_encoded varchar2(8);
167
168 -- error info
169 errorCode number;
170 errorText varchar2(600);
171 mesg varchar2(15);
172
173 begin
174
175 dbms_lob.createTemporary(eventData, FALSE, DBMS_LOB.CALL);
176
177 username_size := length (username);
178 subject_size := length (subject);
179 content_size := length (content);
180
181 username_encoded := calculateLength (username);
182 subject_encoded := calculateLength (subject);
183 content_encoded := calculateLength (content);
184
185 dbms_lob.write (eventData, 8 , 1, username_encoded);
186 dbms_lob.write (eventData, 8 , 9, subject_encoded);
187 dbms_lob.write (eventData, 8 , 17, content_encoded);
188
189 dbms_lob.write (eventData, username_size , 25, username);
190 dbms_lob.write (eventData, subject_size , 25 + username_size, subject);
191 dbms_lob.write (eventData, content_size , 25 + username_size + subject_size,
192 content);
193
194
195 WF_EVENT.Raise('oracle.apps.mwa.notification', 'notification', eventData );
196
197 EXCEPTION
198 when others then
199 errorCode := SQLCODE;
200 errorText := SQLERRM;
201
202 end raiseNotification;
203
204
205
206 -- initializtion of the char escape table
207 BEGIN
208 escapeRecord(1).replace_char := '%';
209 escapeRecord(1).replacement_char := '%25';
210 escapeRecord(2).replace_char := ' ';
211 escapeRecord(2).replacement_char := '+';
212 escapeRecord(3).replace_char := '!';
213 escapeRecord(3).replacement_char := '%21';
214 escapeRecord(4).replace_char := '"';
215 escapeRecord(4).replacement_char := '%22';
216 escapeRecord(5).replace_char := '#';
217 escapeRecord(5).replacement_char := '%23';
218 escapeRecord(6).replace_char := '$';
219 escapeRecord(6).replacement_char := '%24';
220 escapeRecord(7).replace_char := '&';
221 escapeRecord(7).replacement_char := '%26';
222 escapeRecord(8).replace_char := fnd_global.local_chr(39);
223 escapeRecord(8).replacement_char := '%27';
224 escapeRecord(9).replace_char := '(';
225 escapeRecord(9).replacement_char := '%28';
226 escapeRecord(10).replace_char := ')';
227 escapeRecord(10).replacement_char := '%29';
228 escapeRecord(11).replace_char := '*';
229 escapeRecord(11).replacement_char := '*';
230 escapeRecord(12).replace_char := '+';
231 escapeRecord(12).replacement_char := '%2B';
232 escapeRecord(13).replace_char := ',';
233 escapeRecord(13).replacement_char := '%2C';
234 escapeRecord(14).replace_char := '-';
235 escapeRecord(14).replacement_char := '-';
236 escapeRecord(15).replace_char := '.';
237 escapeRecord(15).replacement_char := '.';
238 escapeRecord(16).replace_char := '/';
239 escapeRecord(16).replacement_char := '%2F';
240 escapeRecord(17).replace_char := ':';
241 escapeRecord(17).replacement_char := '%3A';
242 escapeRecord(18).replace_char := ';';
243 escapeRecord(18).replacement_char := '%3B';
244 escapeRecord(19).replace_char := '<';
245 escapeRecord(19).replacement_char := '%3C';
246 escapeRecord(20).replace_char := '=';
247 escapeRecord(20).replacement_char := '%3D';
248 escapeRecord(21).replace_char := '>';
249 escapeRecord(21).replacement_char := '%3E';
250 escapeRecord(22).replace_char := '?';
251 escapeRecord(22).replacement_char := '%3F';
252 escapeRecord(23).replace_char := '@';
253 escapeRecord(23).replacement_char := '%40';
254 escapeRecord(24).replace_char := '[';
255 escapeRecord(24).replacement_char := '%5B';
256 escapeRecord(25).replace_char := '\';
257 escapeRecord(25).replacement_char := '%5C';
258 escapeRecord(26).replace_char := ']';
259 escapeRecord(26).replacement_char := '%5D';
260 escapeRecord(27).replace_char := '^';
261 escapeRecord(27).replacement_char := '%5E';
262 escapeRecord(28).replace_char := '_';
263 escapeRecord(28).replacement_char := '_';
264 escapeRecord(29).replace_char := '`';
265 escapeRecord(29).replacement_char := '%60';
266 escapeRecord(30).replace_char := '{';
267 escapeRecord(30).replacement_char := '%7B';
268 escapeRecord(31).replace_char := '|';
269 escapeRecord(31).replacement_char := '%7C';
270 escapeRecord(32).replace_char := '}';
271 escapeRecord(32).replacement_char := '%7D';
272 escapeRecord(33).replace_char := '~';
273 escapeRecord(33).replacement_char := '%7E';
274
275 END MWA_NOTIFICATION_API;