DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSM_MAIL_MESSAGES_PKG

Source


1 PACKAGE BODY CSM_MAIL_MESSAGES_PKG AS
2 /* $Header: csmummsb.pls 120.5.12020000.2 2012/08/10 09:43:57 pramosin ship $ */
3 
4 -- MODIFICATION HISTORY
5 -- Person      Date    Comments
6 -- Anurag     06/10/02 Created
7 -- ---------   ------  ------------------------------------------
8    -- Enter procedure, function bodies as shown below
9 
10 
11 /*** Globals ***/
12 g_object_name  CONSTANT VARCHAR2(30) := 'CSM_MAIL_MESSAGES_PKG';  -- package name
13 g_pub_name     CONSTANT VARCHAR2(30) := 'CSF_M_MAIL_MESSAGES';  -- publication item name
14 g_pub_name2     CONSTANT VARCHAR2(30) := 'CSF_M_MAIL_RECIPIENTS';  -- publication item name
15 g_debug_level           NUMBER; -- debug level
16 
17 CURSOR c_mail_messages( b_user_name VARCHAR2, b_tranid NUMBER) is
18   SELECT *
19   FROM  csf_m_mail_messages_inq
20   WHERE tranid$$ = b_tranid
21   AND   clid$$cs = b_user_name;
22 
23 /***
24   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
25 ***/
26 PROCEDURE APPLY_INSERT
27          (
28            p_record        IN c_mail_messages%ROWTYPE,
29            p_error_msg     OUT NOCOPY    VARCHAR2,
30            x_return_status IN OUT NOCOPY VARCHAR2
31          ) IS
32 
33 cursor c_user_name
34        ( b_user_name varchar2
35        )
36 is
37 select fur.user_name
38 ,      fur.start_date
39 ,      fur.end_date
40 from   fnd_user fur
41 where  fur.user_name = b_user_name;
42 
43 r_user_name        c_user_name%rowtype;
44 
45 CURSOR l_sender_full_name_csr(p_username IN varchar2)
46 IS
47 SELECT source_name
48 FROM jtf_rs_resource_extns jtrs
49 WHERE jtrs.user_name = p_username
50 AND SYSDATE BETWEEN start_date_active AND nvl(end_date_active, sysdate);
51 
52 CURSOR c_group(b_group_id NUMBER)
53 IS
54 SELECT 'y'
55 FROM JTF_RS_GROUPS_B
56 WHERE GROUP_ID=b_group_id;
57 
58 l_return_status VARCHAR2(80);
59 l_notification_id  number;
60 l_valid_receiver   boolean;
61 l_group_id varchar2(100);
62 l_prefix varchar2(100);
63 l_valid_group boolean :=false;
64 l_num_grp number;
65 l_sender VARCHAR2(200);
66 
67 l_wf_param wf_event_t;
68 
69 BEGIN
70 
71 --USMC changes
72 IF p_record.message_type='b' THEN
73 
74  l_prefix:=substr(p_record.receiver,1,instr(p_record.receiver,':')-1);
75  l_group_id:=substr(p_record.receiver,instr(p_record.receiver,':')+1);
76  BEGIN
77   l_num_grp:=to_number(l_group_id);
78  EXCEPTION
79   WHEN Others THEN
80   l_num_grp:=-1;
81  END;
82 
83  IF l_num_grp IS NOT NULL AND l_num_grp<>-1 AND l_prefix='JRES_GRP' THEN
84   OPEN c_group(l_num_grp);
85   FETCH c_group INTO l_group_id;
86   IF c_group%found THEN
87    l_valid_group := true;
88   END IF;
89   CLOSE c_group;
90  END IF;
91 
92 END IF;
93 
94 -- This API has no support for failing.
95 -- Therefore it is imperative to check if the receiver is correct.
96 -- The only information available for this receiver is that it must
97 -- correspond to user_name in fnd_user. The case in fnd_user is upper.
98 -- The mobile application ensures that the receiver (either chosen or
99 -- typed in manually) is always in uppercase. Thus, for comparision no
100 -- case changes is necessary.
101 
102 open c_user_name
103      ( p_record.receiver
104      );
105 fetch c_user_name into r_user_name;
106 -- Note that this is only a check if the user_name exists as given.
107 -- No retrieval of additional information is necessary.
108 if c_user_name%found OR (p_record.message_type='b' AND l_valid_group)
109 then
110    l_valid_receiver := true;
111 else
112    l_valid_receiver := false;
113    x_return_status := FND_API.G_RET_STS_ERROR;
114    p_error_msg := 'The receiver '||p_record.receiver ||' of your message does not exist.';
115 
116 /*
117    p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
118       (
119         p_message        => 'CSL_MAIL_RECEIVER_UNKNOWN'
120       , p_token_name1    => 'MAIL_RECEIVER'
121       , p_token_value1   => p_record.receiver
122       );*/
123 end if;
124 close c_user_name;
125 
126 -- Send the intended message to the receiver if the receiver is valid.
127 if l_valid_receiver
128 THEN
129 
130    l_sender := NVL(p_record.sender,p_record.clid$$cs);
131 
132    wf_event_t.initialize(l_wf_param);
133    l_wf_param.AddParameterToList('TEMPLATE','FYI_MESSAGE');
134    l_wf_param.AddParameterToList('SUBJECT',p_record.subject);
135    l_wf_param.AddParameterToList('MESSAGE_BODY',p_record.message);
136    l_wf_param.AddParameterToList('#FROM_ROLE',l_sender);
137 
138    l_notification_id:=  CSM_NOTIFICATION_EVENT_PKG.invoke_WF_NotifyProcess(p_record.receiver,l_wf_param);
139 
140    IF(l_notification_id = -1) THEN
141      RAISE_APPLICATION_ERROR(-20989, 'Unable to invoke CSM_MSGS- FYI_MESSAGE Workflow Process');
142    END IF;
143 
144    CSM_NOTIFICATION_EVENT_PKG.DOWNLOAD_NOTIFICATION(l_notification_id,l_return_status);  --return_status doesn't matter here
145 
146    BEGIN  -- since FROM_ROLE column is filled only when mailer parses it.
147     SELECT 1 INTO l_num_grp FROM CSM_NOTIFICATIONS_ACC WHERE NOTIFICATION_ID=l_notification_id AND USER_ID=asg_base.get_user_id(l_sender);
148    EXCEPTION
149    WHEN OTHERS THEN
150      CSM_NOTIFICATION_EVENT_PKG.INSERT_NOTIFICATIONS_ACC(l_notification_id,asg_base.get_user_id(l_sender));
151    END;
152 
153    x_return_status := FND_API.G_RET_STS_SUCCESS;
154 end if;
155 
156 exception
157   when others then
158      fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', sqlerrm);
159      p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
160      (
161        p_api_error      => TRUE
162      );
163      CSM_UTIL_PKG.log( 'Exception in ' || g_object_name || '.APPLY_INSERT:'
164                || ' for PK ' || p_record.NOTIFICATION_ID ,'CSM_MAIL_MESSAGES_PKG.APPLY_INSERT',FND_LOG.LEVEL_EXCEPTION);
165      x_return_status := FND_API.G_RET_STS_ERROR;
166 END APPLY_INSERT;
167 
168 
169 /***
170   This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
171 ***/
172 PROCEDURE APPLY_RECORD
173          (
174            p_record        IN     c_mail_messages%ROWTYPE,
175            p_error_msg     OUT NOCOPY    VARCHAR2,
176            x_return_status IN OUT NOCOPY VARCHAR2
177          )
178 IS
179  BEGIN
180   /*** initialize return status and message list ***/
181   x_return_status := FND_API.G_RET_STS_SUCCESS;
182   FND_MSG_PUB.INITIALIZE;
183 
184   IF p_record.dmltype$$='I' THEN
185     -- Process insert
186     APPLY_INSERT
187       (
188         p_record,
189         p_error_msg,
190         x_return_status
191       );
192   ELSE
193     -- Process delete and update; not supported for this entity
194       CSM_UTIL_PKG.LOG
195         ( 'This Operation is not supported for this entity'
196       || ' for PK ' || p_record.notification_id ,'CSM_MAIL_MESSAGES_PKG.APPLY_RECORD',FND_LOG.LEVEL_ERROR);
197 
198     p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
199       (
200         p_message        => 'CSM_DML_OPERATION'
201       , p_token_name1    => 'DML'
202       , p_token_value1   => p_record.dmltype$$
203       );
204 
205     x_return_status := FND_API.G_RET_STS_ERROR;
206   END IF;
207 
208 EXCEPTION WHEN OTHERS THEN
209   /*** defer record when any process exception occurs ***/
210     CSM_UTIL_PKG.LOG
211     ( 'Exception occurred in CSM_mail_messages_PKG.APPLY_RECORD:' || ' ' || sqlerrm
212       || ' for PK ' || p_record.notification_id,'CSM_MAIL_MESSAGES_PKG.APPLY_RECORD',FND_LOG.LEVEL_EXCEPTION );
213 
214   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', sqlerrm);
215   p_error_msg := CSM_UTIL_PKG.GET_ERROR_MESSAGE_TEXT
216     (
217       p_api_error      => TRUE
218     );
219 
220   x_return_status := FND_API.G_RET_STS_ERROR;
221 END APPLY_RECORD;
222 
223 /***
224   This procedure is called by CSM_UTIL_PKG when publication item <replace>
225   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
226   a fast sync. This procedure will insert the data that came from mobile into the backend tables using
227   public APIs.
228 ***/
229 PROCEDURE APPLY_CLIENT_CHANGES
230          (
231            p_user_name     IN VARCHAR2,
232            p_tranid        IN NUMBER,
233            p_debug_level   IN NUMBER,
234            x_return_status IN OUT NOCOPY VARCHAR2
235          ) IS
236 
237   l_process_status VARCHAR2(1);
238   l_error_msg      VARCHAR2(4000);
239 
240 BEGIN
241   g_debug_level := p_debug_level;
242   x_return_status := FND_API.G_RET_STS_SUCCESS;
243 
244 
245 
246   /*** loop through debrief labor records in inqueue ***/
247   FOR r_mail_messages IN c_mail_messages( p_user_name, p_tranid) LOOP
248 
249    SAVEPOINT save_rec;
250 
251     /*** apply record ***/
252     APPLY_RECORD
253       (
254         r_mail_messages
255       , l_error_msg
256       , l_process_status
257       );
258 
259     /*** was record processed successfully? ***/
260     IF l_process_status = FND_API.G_RET_STS_SUCCESS  THEN
261 
262        IF r_mail_messages.dmltype$$='I' THEN
263           /*** Yes -> reject record because of changed pk ***/
264           CSM_UTIL_PKG.LOG ( 'Record successfully processed, rejecting record ' || ' for PK '
265                 || r_mail_messages.notification_id
266                 ,'CSM_MAIL_MESSAGES_PKG.APPLY_CLIENT_CHANGES'
267                 ,FND_LOG.LEVEL_PROCEDURE); -- put PK column here
268 
269             CSM_UTIL_PKG.REJECT_RECORD
270               (
271                 p_user_name,
272                 p_tranid,
273                 r_mail_messages.seqno$$,
274                 r_mail_messages.notification_id,
275                 g_object_name,
276                 g_pub_name,
277                 l_error_msg,
278                 l_process_status
279               );
280        END IF;  --if r_mail_messages.dmltype$$='I'
281 
282 	   --if deferred and reapplied - reject won't delete applied record from inq
283 	   IF (r_mail_messages.dmltype$$<>'I') OR ( ASG_DEFER.is_deferred(p_user_name,p_tranid,g_pub_name,r_mail_messages.seqno$$)=FND_API.G_TRUE) THEN
284 			  /*** Yes -> delete record from inqueue ***/
285 
286 			  CSM_UTIL_PKG.DELETE_RECORD
287 				(
288 				  p_user_name,
289 				  p_tranid,
290 				  r_mail_messages.seqno$$,
291 				  r_mail_messages.notification_id,
292 				  g_object_name,
293 				  g_pub_name,
294 				  l_error_msg,
295 				  l_process_status
296 				);
297 			  /*** was delete successful? ***/
298 			  IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
299 				/*** no -> rollback ***/
300 				  CSM_UTIL_PKG.LOG
301 				  ( 'Deleting from inqueue failed, rolling back to savepoint'
302 			  || ' for PK ' || r_mail_messages.notification_id ,'CSM_MAIL_MESSAGES_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
303 				ROLLBACK TO save_rec;
304 				x_return_status := FND_API.G_RET_STS_ERROR;
305 			  END IF;
306        END IF;  --dmltype <> 'I' or deferred
307     ELSE -- l_process_Status <> FND_API.G_RET_STS_SUCCESS
308       /*** Record was not processed successfully or delete failed -> defer and reject record ***/
309         CSM_UTIL_PKG.LOG
310         ( 'Record not processed successfully, deferring and rejecting record'
311       || ' for PK ' || r_mail_messages.notification_id ,'CSM_MAIL_MESSAGES_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR); -- put PK column here
312 
313       CSM_UTIL_PKG.DEFER_RECORD
314        (
315          p_user_name
316        , p_tranid
317        , r_mail_messages.seqno$$
318        , r_mail_messages.notification_id
319        , g_object_name
320        , g_pub_name
321        , l_error_msg
322        , l_process_status
323        , r_mail_messages.dmltype$$
324        );
325 
326       /*** Was defer successful? ***/
327       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
328         /*** no -> rollback ***/
329           CSM_UTIL_PKG.LOG
330           ( 'Defer record failed, rolling back to savepoint'
331       || ' for PK ' || r_mail_messages.notification_id,'CSM_MAIL_MESSAGES_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_ERROR ); -- put PK column here
332         ROLLBACK TO save_rec;
333         x_return_status := FND_API.G_RET_STS_ERROR;
334       END IF;
335     END IF;
336 
337   END LOOP;
338 
339 EXCEPTION WHEN OTHERS THEN
340   /*** catch and log exceptions ***/
341     CSM_UTIL_PKG.LOG
342     ( 'Exception occurred in APPLY_CLIENT_CHANGES:' || ' ' || sqlerrm
343     ,'CSM_MAIL_MESSAGES_PKG.APPLY_CLIENT_CHANGES',FND_LOG.LEVEL_EXCEPTION);
344   x_return_status := FND_API.G_RET_STS_ERROR;
345 END APPLY_CLIENT_CHANGES;
346 
347 END CSM_MAIL_MESSAGES_PKG;