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