[Home] [Help]
PACKAGE BODY: APPS.JTA_SYNC_TASK
Source
1 PACKAGE BODY jta_sync_task AS
2 /* $Header: jtavstsb.pls 115.75 2002/12/12 19:08:05 cjang ship $ */
3 /*=======================================================================+
4 | Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA|
5 | All rights reserved. |
6 +=======================================================================+
7 | FILENAME |
8 | jtavstsb.pls |
9 | |
10 | DESCRIPTION |
11 | - This package is for Task Business Logic. |
12 | |
13 | NOTES |
14 | |
15 | Date Developer Change |
16 | ------ --------------- -------------------------------------- |
17 | 20-Jan-2002 mmarovic/arpatel Created. |
18 | 21-Jan-2002 rdespoto modified. |
19 | 25-Jan-2002 arpatel cleaned up for jtadev5 compilation |
20 | 28-Jan-2002 arpatel/chanik Added get_list_appt(), |
21 | get_list_task(), |
22 | get_count_appt(), |
23 | get_count_task() |
24 | 29-Jan-2002 arpatel/chanik Added a cursor to find date_selected |
25 | 30-Jan-2002 arpatel/chanik Added p_event in get_list_xxxx() |
26 | 01-Feb-2002 arpatel/chanik Removed object_type_code clause from |
27 | get_list_appt cursor |
28 | 04-Feb-2002 akaran/sachoudh Added function get_event_type() |
29 | 05-Feb-2002 arpatel Added nvl for flags |
30 | 12-Feb-2002 cjang Added group calendar functionality |
31 | 20-Feb-2002 cjang The followings are not synced |
32 | 1) Change from Task to Appt |
33 | 2) Change from Appt to Task |
34 | Removed event_type and object |
35 | from cursor c_task |
36 | 22-Feb-2002 cjang Refactoring |
37 | 27-Feb-2002 cjang Added a function to check the update |
38 | privilege |
39 | 27-Feb-2002 arpatel Changed update_data to handle updates |
40 | of descriptions for repeating apmts |
41 | 27-Feb-2002 cjang Added separate loop for repeating task |
42 | 28-Feb-2002 cjang Integrate with invitee function |
43 | 01-Mar-2002 cjang Refactoring and Bug Fix |
44 | 06-Mar-2002 cjang Modularize UPDATE_DATA() |
45 | GET_ALL_DATA() |
46 | 11-Mar-2002 cjang Modified delete_data |
47 | 11-Mar-2002 sanjeev Changed methods for exclusions |
48 | 24-Apr-2002 cjang When jta_sync_task_common.get_all_nonrepeat_tasks
49 | is called, pass p_record_index with NVL(x_data.count,0)
50 | 26-Apr-2002 cjang Commented out debug statements |
51 | 30-Apr-2002 cjang Added if condition to check if subject |
52 | is null. |
53 | We're not accepting NULL task name |
54 | 23-May-2002 cjang Modified delete_data() |
55 | to fix bug 2382927 |
56 | 28-May-2002 cjang Modified create_ids() |
57 | Fix Bug# 2387015 |
58 | to avoid using contacts sequence number|
59 | 04-Jun-2002 cjang Modified delete_data() |
60 | to fix bug 2382927 |
61 | For the invalid syncid, new sync anchor|
62 | must be assigned |
63 +======================================================================*/
64
65 -------------------------------
66 -- Private Method
67 -------------------------------
68 PROCEDURE get_all_data (
69 p_request_type IN VARCHAR2,
70 p_syncanchor IN DATE,
71 p_get_data IN BOOLEAN,
72 x_totalnew OUT NOCOPY NUMBER,
73 x_totalmodified OUT NOCOPY NUMBER,
74 x_totaldeleted OUT NOCOPY NUMBER,
75 x_data OUT NOCOPY jta_sync_task.task_tbl,
76 x_exclusion_data OUT NOCOPY Jta_Sync_Task.exclusion_tbl
77 )
78 IS
79 -- Added a group calendar feature
80 -- Used to store the list of group resource ids for the current resource
81 l_resources jta_sync_task_common.resource_list_tbl;
82 i NUMBER := 0;
83 l_operation VARCHAR2(240);
84 l_syncanchor DATE ;
85 l_source_object_type VARCHAR2(60) := RTRIM(p_request_type,'S');
86 l_task_rec jta_sync_task.task_rec;
87 l_resource_id NUMBER;
88 l_resource_type VARCHAR2(30);
89 l_new_syncanchor date ;
90
91 BEGIN
92 x_totalnew := 0;
93 x_totalmodified := 0;
94 x_totaldeleted := 0;
95
96 jta_sync_task_common.get_resource_details (g_login_resource_id, l_resource_type);
97
98 l_syncanchor := jta_sync_task_common.convert_gmt_to_server (p_syncanchor);
99 --JTA_SYNC_DEBUG_PKG.DEBUG('l_syncanchor = '||to_char(l_syncanchor,'DD-MON-YYYY HH24:MI:SS'));
100
101 -----------------------------------------------------
102 -- Get group ids including current resource id
103 -----------------------------------------------------
104 jta_sync_task_common.get_group_resource (
105 p_request_type => p_request_type,
106 p_resource_id => g_login_resource_id,
107 p_resource_type => l_resource_type,
108 x_resources => l_resources
109 );
110
111 -----------------------------------------------------
112 -- Loop with current resource id and group ids
113 -----------------------------------------------------
114 --l_new_syncanchor := sysdate;
115
116 FOR j IN l_resources.FIRST .. l_resources.LAST
117 LOOP
118 -------------------------------------------------
119 -- Process non repeat tasks
120 -------------------------------------------------
121 jta_sync_task_common.get_all_nonrepeat_tasks(
122 p_request_type => p_request_type,
123 p_syncanchor => l_syncanchor,
124 p_recordindex => NVL(x_data.count,0),
125 p_resource_id => l_resources(j).resource_id,
126 p_resource_type => l_resources(j).resource_type,
127 p_source_object_type => l_source_object_type,
128 p_get_data => p_get_data,
129 x_totalnew => x_totalnew,
130 x_totalmodified => x_totalmodified,
131 --x_totaldeleted => x_totaldeleted,
132 --p_new_syncanchor => l_new_syncanchor,
133 x_data => x_data
134 );
135
136 -------------------------------------------------
137 -- Process repeating tasks
138 -------------------------------------------------
139 IF l_source_object_type = 'APPOINTMENT'
140 THEN
141 jta_sync_task_common.get_all_repeat_tasks(
142 p_request_type => p_request_type,
143 p_syncanchor => l_syncanchor,
144 p_recordindex => nvl(x_data.count,0) + 1,
145 p_resource_id => l_resources(j).resource_id,
146 p_resource_type => l_resources(j).resource_type,
147 p_source_object_type => l_source_object_type,
148 p_get_data => p_get_data,
149 x_totalnew => x_totalnew,
150 x_totalmodified => x_totalmodified,
151 --x_totaldeleted => x_totaldeleted,
152 --p_new_syncanchor => l_new_syncanchor,
153 x_data => x_data,
154 x_exclusion_data => x_exclusion_data
155 );
156 END IF;
157
158 ----------------------------------
159 -- processing all deleted records
160 ----------------------------------
161 jta_sync_task_common.get_all_deleted_tasks(
162 p_request_type => p_request_type,
163 p_syncanchor => l_syncanchor,
164 p_recordindex => nvl(x_data.count,0) + 1,
165 p_resource_id => l_resources(j).resource_id,
166 p_resource_type => l_resources(j).resource_type,
167 p_source_object_type => l_source_object_type,
168 p_get_data => p_get_data,
169 --p_new_syncanchor => l_new_syncanchor,
170 x_totaldeleted => x_totaldeleted,
171 x_data => x_data
172 );
173 END LOOP;
174
175 END get_all_data;
176
177 -------------------------------
178 -- Public Method
179 -------------------------------
180 PROCEDURE get_count (
181 p_request_type IN VARCHAR2,
182 p_syncanchor IN DATE,
183 x_total OUT NOCOPY NUMBER,
184 x_totalnew OUT NOCOPY NUMBER,
185 x_totalmodified OUT NOCOPY NUMBER,
186 x_totaldeleted OUT NOCOPY NUMBER
187 )
188 IS
189 l_syncanchor DATE;
190 l_data jta_sync_task.task_tbl;
191 l_exclusion_data jta_sync_task.exclusion_tbl;
192 BEGIN
193 x_total := 0;
194 x_totalnew := 0;
195 x_totalmodified := 0;
196 x_totaldeleted := 0;
197
198 -- Call the private api to get the data.
199 get_all_data (
200 p_request_type => p_request_type,
201 p_syncanchor => p_syncanchor,
202 p_get_data => FALSE,
203 x_totalnew => x_totalnew,
204 x_totalmodified => x_totalmodified,
205 x_totaldeleted => x_totaldeleted,
206 x_data => l_data,
207 x_exclusion_data => l_exclusion_data
208 );
209 x_total := x_totalnew + x_totalmodified + x_totaldeleted;
210
211 END get_count;
212
213 PROCEDURE get_list (
214 p_request_type IN VARCHAR2,
215 p_syncanchor IN DATE,
216 x_data OUT NOCOPY jta_sync_task.task_tbl,
217 x_exclusion_data OUT NOCOPY Jta_Sync_Task.exclusion_tbl
218 )
219 IS
220 l_totalnew NUMBER;
221 l_totalmodified NUMBER;
222 l_totaldeleted NUMBER;
223 l_data jta_sync_task.task_tbl;
224 l_resource_id NUMBER;
225 l_resource_type VARCHAR2(30);
226 BEGIN
227 get_all_data (
228 p_request_type => p_request_type,
229 p_syncanchor => p_syncanchor,
230 p_get_data => TRUE,
231 x_totalnew => l_totalnew,
232 x_totalmodified => l_totalmodified,
233 x_totaldeleted => l_totaldeleted,
234 x_data => l_data,
235 x_exclusion_data => x_exclusion_data
236 );
237 x_data := l_data;
238 END get_list;
239
240 PROCEDURE create_ids (
241 p_num_req IN NUMBER,
242 x_results IN OUT NOCOPY jta_sync_task.task_tbl
243 )
244 IS
245 BEGIN
246 FOR i IN 1 .. NVL (p_num_req, 0)
247 LOOP
248 -- Fix Bug# 2387015 to avoid using contacts sequence number
249 SELECT jta_sync_task_mapping_s.nextval
250 INTO x_results (i).syncid
251 FROM DUAL;
252 x_results (i).resultid := jta_sync_task_common.g_sync_success; --success, no message will be displayed to user
253 END LOOP;
254 END create_ids;
255
256 PROCEDURE update_data (p_tasks IN OUT NOCOPY jta_sync_task.task_tbl
257 ,p_exclusions IN jta_sync_task.exclusion_tbl)
258 IS
259 l_resource_id NUMBER;
260 l_resource_type VARCHAR2(100);
261 l_is_this_new_task BOOLEAN;
262 BEGIN
263 jta_sync_task_common.get_resource_details (l_resource_id, l_resource_type);
264
265 g_login_resource_id := l_resource_id;
266
267 FOR i IN 1 .. NVL (p_tasks.LAST, 0)
268 LOOP
269 l_is_this_new_task := jta_sync_task_common.is_this_new_task(p_tasks(i).syncid);
270
271 IF p_tasks(i).subject IS NOT NULL AND
272 ( ( l_is_this_new_task AND p_tasks(i).subject <> FND_API.G_MISS_CHAR) OR
273 (NOT l_is_this_new_task)
274 )
275 THEN
276 IF p_tasks(i).category <> FND_API.G_MISS_CHAR OR
277 p_tasks(i).category IS NOT NULL
278 THEN
279 jta_sync_task_category.create_category(p_category_name => p_tasks(i).category,
280 p_resource_id => l_resource_id );
281 END IF;
282
283 IF l_is_this_new_task
284 THEN -- This is a new task
285 jta_sync_task_common.create_new_data( p_task_rec => p_tasks(i)
286 , p_exclusion_tbl => p_exclusions
287 , p_resource_id => l_resource_id
288 , p_resource_type => l_resource_type);
289 ELSE -- This is an existing task
290 jta_sync_task_common.update_existing_data( p_task_rec => p_tasks(i)
291 , p_exclusion_tbl => p_exclusions
292 , p_resource_id => l_resource_id
293 , p_resource_type => l_resource_type);
294 END IF;
295 ELSE
296 jta_sync_common.put_messages_to_result (
297 p_tasks(i),
298 p_status => 2,
299 p_user_message => 'JTA_SYNC_NULL_TASKNAME'
300 );
301 END IF;
302
306
303 p_tasks(i).recordIndex := i ;
304 END LOOP; -- for loop of p_tasks
305 END update_data;
307 PROCEDURE delete_data (
308 p_tasks IN OUT NOCOPY jta_sync_task.task_tbl
309 )
310 IS
311 l_task_id NUMBER;
312 l_delete_flag VARCHAR2(1);
313 l_resource_id NUMBER;
314 l_resource_type VARCHAR2(30);
315 l_status_id NUMBER;
316 l_sync_id NUMBER;
317 l_source_object_type_code VARCHAR2(60);
318 BEGIN
319 jta_sync_task_common.get_resource_details (l_resource_id, l_resource_type);
320 g_login_resource_id := l_resource_id;
321
322 FOR i IN 1 .. NVL (p_tasks.LAST, 0)
323 LOOP
324 IF jta_sync_task_common.validate_syncid(p_syncid => p_tasks(i).syncid) -- Fix Bug 2382927
325 THEN
326 fnd_msg_pub.initialize;
327
328 l_sync_id := p_tasks (i).syncid;
329 l_task_id := jta_sync_task_common.get_task_id (p_sync_id => l_sync_id);
330 l_source_object_type_code := jta_sync_task_common.get_source_object_type(p_task_id => l_task_id);
331
332 jta_sync_task_common.check_delete_data(
333 p_task_id => l_task_id,
334 p_resource_id => l_resource_id,
335 p_objectcode => l_source_object_type_code,
336 x_status_id => l_status_id,
337 x_delete_flag => l_delete_flag);
338
339 IF l_delete_flag = 'D'
340 THEN
341
342 jta_sync_task_common.delete_task_data(p_task_rec => p_tasks(i));
343
344 ELSIF l_delete_flag = 'U'
345
346 THEN
347 jta_sync_task_common.reject_task_data(p_task_rec => p_tasks(i));
348
349 ELSE -- l_delete_flag = 'X'
350
351 p_tasks (i).syncanchor := jta_sync_task_common.convert_server_to_gmt (SYSDATE);
352 jta_sync_common.put_messages_to_result (p_tasks (i),
353 p_status => jta_sync_task_common.g_sync_success,
354 p_user_message => 'JTA_SYNC_SUCCESS');
355
356 END IF; -- l_delete_flag
357 --------------------------------------------------------------
358 -- Fix Bug 2382927 :
359 -- When Intellisync sends a sync id which has not been synced,
360 -- the record is ignored and returned as success.
361 --------------------------------------------------------------
362 ELSE -- Cannot found sync id in mapping table
363 p_tasks (i).syncanchor := jta_sync_task_common.convert_server_to_gmt (SYSDATE); -- Newly added on 04-Jun-2002 to fix bug 2382927
364 jta_sync_common.put_messages_to_result (
365 p_tasks(i),
366 p_status => jta_sync_task_common.g_sync_success,
367 p_user_message => 'JTA_SYNC_SUCCESS'
368 );
369 END IF; -- jta_sync_task_common.validate_syncid(p_syncid => p_tasks(i).syncid)
370 END LOOP; -- FOR i IN 1 .. NVL (p_tasks.LAST, 0)
371
372 END delete_data;
373
374 END jta_sync_task;