[Home] [Help]
PACKAGE BODY: APPS.JTF_DELIVERABLE_GRP
Source
1 PACKAGE BODY JTF_Deliverable_GRP AS
2 /* $Header: JTFGDLVB.pls 115.17 2004/07/09 18:49:38 applrt ship $ */
3 g_amv_api_version CONSTANT NUMBER := 1.0;
4
5 TYPE DlvCurTyp IS REF CURSOR;
6
7 g_view_name CONSTANT VARCHAR2(48) := 'jtf_dsp_amv_items_v';
8
9 PROCEDURE list_deliverable (
10 p_api_version IN NUMBER,
11 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
12 x_return_status OUT VARCHAR2,
13 x_msg_count OUT NUMBER,
14 x_msg_data OUT VARCHAR2,
15 p_item_type IN VARCHAR2,
16 p_item_applicable_to IN VARCHAR2,
17 p_search_type IN VARCHAR2,
18 p_search_value IN VARCHAR2,
19 p_start_id IN NUMBER,
20 p_batch_size IN NUMBER,
21 x_row_count OUT NUMBER,
22 x_dlv_id_tbl OUT NUMBER_TABLE,
23 x_acc_name_tbl OUT VARCHAR2_TABLE_100,
24 x_dsp_name_tbl OUT VARCHAR2_TABLE_300,
25 x_item_type_tbl OUT VARCHAR2_TABLE_100,
26 x_appl_to_tbl OUT VARCHAR2_TABLE_100,
27 x_keyword_tbl OUT VARCHAR2_TABLE_300,
28 x_desc_tbl OUT VARCHAR2_TABLE_2000,
29 x_version_tbl OUT NUMBER_TABLE,
30 x_file_name_tbl OUT VARCHAR2_TABLE_300,
31
32 --added by G. Zhang 05/17/01 5:42PM
33 x_file_id_tbl OUT NUMBER_TABLE ) IS
34
35 BEGIN
36
37 list_deliverable(
38 p_api_version,
39 p_init_msg_list,
40 x_return_status,
41 x_msg_count,
42 x_msg_data,
43 NULL,
44 p_item_type,
45 p_item_applicable_to,
46 p_search_type,
47 p_search_value,
48 p_start_id,
49 p_batch_size,
50 x_row_count,
51 x_dlv_id_tbl,
52 x_acc_name_tbl,
53 x_dsp_name_tbl,
54 x_item_type_tbl,
55 x_appl_to_tbl,
56 x_keyword_tbl,
57 x_desc_tbl,
58 x_version_tbl,
59 x_file_name_tbl,
60
61 --added by G. Zhang 05/17/01 5:42PM
62 x_file_id_tbl
63 );
64
65 END list_deliverable;
66
67
68 PROCEDURE list_deliverable (
69 p_api_version IN NUMBER,
70 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
71 x_return_status OUT VARCHAR2,
72 x_msg_count OUT NUMBER,
73 x_msg_data OUT VARCHAR2,
74 p_category_id IN NUMBER,
75 p_item_type IN VARCHAR2,
76 p_item_applicable_to IN VARCHAR2,
77 p_search_type IN VARCHAR2,
78 p_search_value IN VARCHAR2,
79 p_start_id IN NUMBER,
80 p_batch_size IN NUMBER,
81 x_row_count OUT NUMBER,
82 x_dlv_id_tbl OUT NUMBER_TABLE,
83 x_acc_name_tbl OUT VARCHAR2_TABLE_100,
84 x_dsp_name_tbl OUT VARCHAR2_TABLE_300,
85 x_item_type_tbl OUT VARCHAR2_TABLE_100,
86 x_appl_to_tbl OUT VARCHAR2_TABLE_100,
87 x_keyword_tbl OUT VARCHAR2_TABLE_300,
88 x_desc_tbl OUT VARCHAR2_TABLE_2000,
89 x_version_tbl OUT NUMBER_TABLE,
90 x_file_name_tbl OUT VARCHAR2_TABLE_300,
91
92 --added by G. Zhang 05/17/01 5:42PM
93 x_file_id_tbl OUT NUMBER_TABLE ) IS
94
95 l_api_name CONSTANT VARCHAR2(30) := 'list_deliverable';
96 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
97
98 l_return_status VARCHAR2(1);
99
100 l_dlv_cv DlvCurTyp;
101 l_flag NUMBER := 0;
102 l_search_value VARCHAR2(240);
103 sql_cond VARCHAR2(480) := 'FROM ' || g_view_name
104 || ' WHERE application_id = :appl_id ';
105 sql_stmt VARCHAR2(960);
106
107 start_pnt NUMBER;
108 end_pnt NUMBER;
109
110 l_dlv_id_tbl JTF_NUMBER_TABLE;
111 l_acc_name_tbl JTF_VARCHAR2_TABLE_100;
112 l_dsp_name_tbl JTF_VARCHAR2_TABLE_300;
113 l_item_type_tbl JTF_VARCHAR2_TABLE_100;
114 l_appl_to_tbl JTF_VARCHAR2_TABLE_100;
115 l_keyword_tbl JTF_VARCHAR2_TABLE_300;
116 l_desc_tbl JTF_VARCHAR2_TABLE_2000;
117 l_version_tbl JTF_NUMBER_TABLE;
118 l_file_name_tbl JTF_VARCHAR2_TABLE_300;
119
120 --added by G. Zhang 05/17/01 5:42PM
121 l_file_id_tbl JTF_NUMBER_TABLE;
122
123 l_index NUMBER;
124 l_count NUMBER;
125
126 l_appl_id NUMBER;
127
128 BEGIN
129
130 -- Standard call to check for call compatibility
131 IF NOT FND_API.compatible_api_call(
132 g_api_version,
133 p_api_version,
134 l_api_name,
135 g_pkg_name
136 ) THEN
137 RAISE FND_API.g_exc_unexpected_error;
138 END IF;
139
140 -- Initialize message list if p_init_msg_list is set to TRUE
141 IF FND_API.to_boolean(p_init_msg_list) THEN
142 FND_MSG_PUB.initialize;
143 END IF;
144
145 -- Initialize API rturn status to success
146 x_return_status := FND_API.g_ret_sts_success;
147
148 -- API body
149
150 IF p_start_id < -1 OR p_batch_size < 0
151 OR (p_start_id = -1 AND p_batch_size = 0) THEN
152 FND_MESSAGE.set_name('JTF', 'JTF_DSP_QUERY_INVLD');
153 FND_MESSAGE.set_token('0', TO_CHAR(p_start_id));
154 FND_MESSAGE.set_token('1', TO_CHAR(p_batch_size));
155 FND_MSG_PUB.add;
156 RAISE FND_API.g_exc_unexpected_error;
157 END IF;
158
159 IF p_category_id IS NOT NULL
160 AND TRIM(p_item_applicable_to) <> 'CATEGORY' THEN
161 FND_MESSAGE.set_name('JTF', 'JTF_DSP_AVAIL_INVLD');
162 FND_MESSAGE.set_token('0', TO_CHAR(p_category_id));
163 FND_MESSAGE.set_token('1', p_item_applicable_to);
164 FND_MSG_PUB.add;
165 RAISE FND_API.g_exc_unexpected_error;
166 END IF;
167
168 IF TRIM(p_item_type) IS NOT NULL THEN
169 l_flag := 1;
170 sql_cond := sql_cond || 'AND deliverable_type_code = :item_type ';
171 END IF;
172
173 IF TRIM(p_item_applicable_to) IS NOT NULL THEN
174 l_flag := l_flag + 10;
175 sql_cond := sql_cond || 'AND applicable_to_code = :appl_to ';
176 END IF;
177
178 IF TRIM(p_search_type) IS NOT NULL AND TRIM(p_search_value) IS NOT NULL THEN
179 l_flag := l_flag + 100;
180 l_search_value := '%' || LOWER(TRIM(p_search_value)) || '%';
181 sql_cond := sql_cond || 'AND LOWER(' || p_search_type || ') LIKE :value ';
182 END IF;
183
184 IF p_category_id IS NOT NULL THEN
185 l_flag := l_flag + 1000;
186 sql_cond := sql_cond
187 || 'AND item_id NOT IN (SELECT item_id FROM jtf_dsp_tpl_ctg '
188 || 'WHERE category_id = :ctg_id) ';
189 END IF;
190
191 -- dbms_output.put_line('resp_appl_id=' || FND_GLOBAL.resp_appl_id);
192
193 -- fnd_global.apps_initialize(fnd_global.user_id, fnd_global.resp_id, 671);
194 -- l_appl_id := FND_GLOBAL.resp_appl_id;
195 l_appl_id := 671;
196
197 -- Get Total Row Number
198 sql_stmt := 'SELECT COUNT(*) ' || sql_cond;
199 IF l_flag = 1111 THEN
200 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
201 p_item_type, p_item_applicable_to, l_search_value, p_category_id;
202 ELSIF l_flag = 1110 THEN
203 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
204 p_item_applicable_to, l_search_value, p_category_id;
205 ELSIF l_flag = 1101 THEN
206 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
207 p_item_type, l_search_value, p_category_id;
208 ELSIF l_flag = 1100 THEN
209 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
210 l_search_value, p_category_id;
211 ELSIF l_flag = 1011 THEN
212 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
213 p_item_type, p_item_applicable_to, p_category_id;
214 ELSIF l_flag = 1010 THEN
215 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
216 p_item_applicable_to, p_category_id;
217 ELSIF l_flag = 1001 THEN
218 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
219 p_item_type, p_category_id;
220 ELSIF l_flag = 1000 THEN
221 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
222 p_category_id;
223 ELSIF l_flag = 111 THEN
224 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
225 p_item_type, p_item_applicable_to, l_search_value;
226 ELSIF l_flag = 110 THEN
227 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
228 p_item_applicable_to, l_search_value;
229 ELSIF l_flag = 101 THEN
230 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
231 p_item_type, l_search_value;
232 ELSIF l_flag = 100 THEN
233 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
234 l_search_value;
235 ELSIF l_flag = 11 THEN
236 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
237 p_item_type, p_item_applicable_to;
238 ELSIF l_flag = 10 THEN
239 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
240 p_item_applicable_to;
241 ELSIF l_flag = 1 THEN
242 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id,
243 p_item_type;
244 ELSE
245 OPEN l_dlv_cv FOR sql_stmt USING l_appl_id;
246 END IF;
247
248 FETCH l_dlv_cv INTO x_row_count;
249 CLOSE l_dlv_cv;
250
251 IF x_row_count = 0 THEN
252 FND_MSG_PUB.count_and_get(
253 p_encoded => FND_API.g_false,
254 p_count => x_msg_count,
255 p_data => x_msg_data
256 );
257 RETURN;
258 END IF;
259
260 x_dlv_id_tbl := NULL;
261 x_acc_name_tbl := NULL;
262 x_dsp_name_tbl := NULL;
263 x_item_type_tbl := NULL;
264 x_appl_to_tbl := NULL;
265 x_desc_tbl := NULL;
266 x_keyword_tbl := NULL;
267 x_file_name_tbl := NULL;
268
269 --added by G. Zhang 05/17/01 5:42PM
270 x_file_id_tbl :=NULL;
271
272 x_version_tbl := NULL;
273
274 -- Get matched rows
275 IF p_start_id > -1 THEN
276 IF p_start_id >= x_row_count THEN
277 FND_MSG_PUB.count_and_get(
278 p_encoded => FND_API.g_false,
279 p_count => x_msg_count,
280 p_data => x_msg_data
281 );
282 RETURN;
283 END IF;
284
285 start_pnt := p_start_id + 1;
286 IF p_batch_size > 0 THEN
287 end_pnt := p_start_id + p_batch_size;
288 ELSE
289 end_pnt := x_row_count;
290 END IF;
291 ELSE
292 end_pnt := x_row_count;
293 start_pnt := end_pnt - p_batch_size + 1;
294 IF start_pnt < 1 THEN
295 start_pnt := 1;
296 END IF;
297 END IF;
298
299 sql_stmt := 'BEGIN '
300 || 'SELECT item_id, access_name, item_name, deliverable_type_code, '
301
302 --modified by G. Zhang 05/17/01 5:42PM
303 || 'applicable_to_code, description, keyword, file_name, file_id, '
304
305 || 'object_version_number '
306 || 'BULK COLLECT INTO :id_tbl, :acc_tbl, :dsp_tbl, :type_tbl, '
307
308 --modified by G. Zhang 05/17/01 5:42PM
309 || ':appl_tbl, :desc_tbl, :key_tbl, :file_tbl, :file_id_tbl, :version_tbl '
310
311 || 'FROM (SELECT * '
312 || sql_cond
313 || 'ORDER BY item_name ) '
314 || 'WHERE ROWNUM <= :row_num '
315 || '; END;';
316
317 -- dbms_output.put_line('sql_cond=' || sql_cond);
318 -- dbms_output.put_line('row_num=' || end_pnt);
319 -- dbms_output.put_line('sql_stmt=' || sql_stmt);
320
321 IF l_flag = 1111 THEN
322 EXECUTE IMMEDIATE sql_stmt USING
323 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
324 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
325
326 --modified by G. Zhang 05/17/01 5:42PM
327 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
328
329 l_appl_id,
330 p_item_type, p_item_applicable_to, l_search_value,
331 p_category_id,
332 end_pnt;
333 ELSIF l_flag = 1110 THEN
334 EXECUTE IMMEDIATE sql_stmt USING
335 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
336 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
337
338 --modified by G. Zhang 05/17/01 5:42PM
339 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
340
341 l_appl_id,
342 p_item_applicable_to, l_search_value,
343 p_category_id,
344 end_pnt;
345 ELSIF l_flag = 1101 THEN
346 EXECUTE IMMEDIATE sql_stmt USING
347 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
348 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
349
350 --modified by G. Zhang 05/17/01 5:42PM
351 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
352
353 l_appl_id,
354 p_item_type, l_search_value,
355 p_category_id,
356 end_pnt;
357 ELSIF l_flag = 1100 THEN
358 EXECUTE IMMEDIATE sql_stmt USING
359 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
360 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
361
362 --modified by G. Zhang 05/17/01 5:42PM
363 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
364
365 l_appl_id,
366 l_search_value,
367 p_category_id,
368 end_pnt;
369 ELSIF l_flag = 1011 THEN
370 EXECUTE IMMEDIATE sql_stmt USING
371 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
372 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
373
374 --modified by G. 3
375 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
376
377 l_appl_id,
378 p_item_type, p_item_applicable_to,
379 p_category_id,
380 end_pnt;
381 ELSIF l_flag = 1010 THEN
382 EXECUTE IMMEDIATE sql_stmt USING
383 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
384 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
385
386 --modified by G. Zhang 05/17/01 5:42PM
387 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
388
389 l_appl_id,
390 p_item_applicable_to,
391 p_category_id,
392 end_pnt;
393 ELSIF l_flag = 1001 THEN
394 EXECUTE IMMEDIATE sql_stmt USING
395 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
396 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
397
398 --added by G. Zhang 05/17/01 5:42PM
399 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
400
401 l_appl_id,
402 p_item_type,
403 p_category_id,
404 end_pnt;
405 ELSIF l_flag = 1000 THEN
406 EXECUTE IMMEDIATE sql_stmt USING
407 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
408 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
409
410 --modified by G. Zhang 05/17/01 5:42PM
411 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
412
413 l_appl_id,
414 p_category_id,
415 end_pnt;
416 ELSIF l_flag = 111 THEN
417 EXECUTE IMMEDIATE sql_stmt USING
418 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
419 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
420
421 --modified by G. Zhang 05/17/01 5:42PM
422 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
423
424 l_appl_id,
425 p_item_type, p_item_applicable_to, l_search_value, end_pnt;
426 ELSIF l_flag = 110 THEN
427 EXECUTE IMMEDIATE sql_stmt USING
428 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
429 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
430
431 --modified by G. Zhang 05/17/01 5:42PM
432 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
433
434 l_appl_id,
435 p_item_applicable_to, l_search_value, end_pnt;
436 ELSIF l_flag = 101 THEN
437 EXECUTE IMMEDIATE sql_stmt USING
438 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
439 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
440
441 --modified by G. Zhang 05/17/01 5:42PM
442 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
443
444 l_appl_id,
445 p_item_type, l_search_value, end_pnt;
446 ELSIF l_flag = 100 THEN
447 EXECUTE IMMEDIATE sql_stmt USING
448 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
449 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
450
451 --modified by G. Zhang 05/17/01 5:42PM
452 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
453
454 l_appl_id,
455 l_search_value, end_pnt;
456 ELSIF l_flag = 11 THEN
457 EXECUTE IMMEDIATE sql_stmt USING
458 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
459 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
460
461 --modified by G. Zhang 05/17/01 5:42PM
462 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
463
464 l_appl_id,
465 p_item_type, p_item_applicable_to, end_pnt;
466 ELSIF l_flag = 10 THEN
467 EXECUTE IMMEDIATE sql_stmt USING
468 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
469 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
470
471 --modified by G. Zhang 05/17/01 5:42PM
472 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
473
474 l_appl_id,
475 p_item_applicable_to, end_pnt;
476 ELSIF l_flag = 1 THEN
477 EXECUTE IMMEDIATE sql_stmt USING
478 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
479 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
480
481 --modified by G. Zhang 05/17/01 5:42PM
482 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
483
484 l_appl_id,
485 p_item_type, end_pnt;
486 ELSE
487 EXECUTE IMMEDIATE sql_stmt USING
488 OUT l_dlv_id_tbl, OUT l_acc_name_tbl, OUT l_dsp_name_tbl,
489 OUT l_item_type_tbl, OUT l_appl_to_tbl, OUT l_desc_tbl,
490
491 --modified by G. Zhang 05/17/01 5:42PM
492 OUT l_keyword_tbl, OUT l_file_name_tbl, OUT l_file_id_tbl, OUT l_version_tbl,
493
494 l_appl_id,
495 end_pnt;
496 END IF;
497
498 -- dbms_output.put_line('executed');
499
500 IF l_dlv_id_tbl IS NOT NULL AND start_pnt <= l_dlv_id_tbl.COUNT THEN
501 x_dlv_id_tbl := NUMBER_TABLE(l_dlv_id_tbl(start_pnt));
502 x_acc_name_tbl := VARCHAR2_TABLE_100(l_acc_name_tbl(start_pnt));
503 x_dsp_name_tbl := VARCHAR2_TABLE_300(l_dsp_name_tbl(start_pnt));
504 x_item_type_tbl := VARCHAR2_TABLE_100(l_item_type_tbl(start_pnt));
505 x_appl_to_tbl := VARCHAR2_TABLE_100(l_appl_to_tbl(start_pnt));
506 x_desc_tbl := VARCHAR2_TABLE_2000(l_desc_tbl(start_pnt));
507 x_keyword_tbl := VARCHAR2_TABLE_300(l_keyword_tbl(start_pnt));
508 x_file_name_tbl := VARCHAR2_TABLE_300(l_file_name_tbl(start_pnt));
509
510 --added by G. Zhang 05/17/01 5:42PM
511 x_file_id_tbl := NUMBER_TABLE(l_file_id_tbl(start_pnt));
512
513 x_version_tbl := NUMBER_TABLE(l_version_tbl(start_pnt));
514
515 l_count := 1;
516 FOR l_index IN start_pnt+1..l_dlv_id_tbl.COUNT LOOP
517 IF l_index > end_pnt THEN
518 EXIT;
519 END IF;
520 x_dlv_id_tbl.EXTEND;
521 x_acc_name_tbl.EXTEND;
522 x_dsp_name_tbl.EXTEND;
523 x_item_type_tbl.EXTEND;
524 x_appl_to_tbl.EXTEND;
525 x_desc_tbl.EXTEND;
526 x_keyword_tbl.EXTEND;
527 x_file_name_tbl.EXTEND;
528
529 --added by G. Zhang 05/17/01 5:42PM
530 x_file_id_tbl.EXTEND;
531
532 x_version_tbl.EXTEND;
533
534 l_count := l_count + 1;
535 x_dlv_id_tbl(l_count) := l_dlv_id_tbl(l_index);
536 x_acc_name_tbl(l_count) := l_acc_name_tbl(l_index);
537 x_dsp_name_tbl(l_count) := l_dsp_name_tbl(l_index);
538 x_item_type_tbl(l_count) := l_item_type_tbl(l_index);
539 x_appl_to_tbl(l_count) := l_appl_to_tbl(l_index);
540 x_desc_tbl(l_count) := l_desc_tbl(l_index);
541 x_keyword_tbl(l_count) := l_keyword_tbl(l_index);
542 x_file_name_tbl(l_count) := l_file_name_tbl(l_index);
543
544 --added by G. Zhang 05/17/01 5:42PM
545 x_file_id_tbl(l_count) := l_file_id_tbl(l_index);
546
547 x_version_tbl(l_count) := l_version_tbl(l_index);
548 END LOOP;
549 END IF;
550
551 /*
552 -- Get matchined rows
553 IF p_start_id > -1 THEN
554 IF p_start_id >= x_row_count THEN
555 RETURN;
556 END IF;
557
558 start_pnt := p_start_id;
559 IF p_batch_size > 0 THEN
560 end_pnt := p_start_id + p_batch_size;
561 ELSE
562 end_pnt := x_row_count;
563 END IF;
564 ELSE
565 end_pnt := x_row_count;
566 start_pnt := end_pnt - p_batch_size;
567 IF start_pnt < 0 THEN
568 start_pnt := 0;
569 END IF;
570 END IF;
571
572 IF l_flag = 111 THEN
573 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
574 p_item_type, p_item_applicable_to, l_search_value, end_pnt;
575 ELSIF l_flag = 110 THEN
576 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
577 p_item_applicable_to, l_search_value, end_pnt;
578 ELSIF l_flag = 101 THEN
579 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
580 p_item_type, l_search_value, end_pnt;
581 ELSIF l_flag = 100 THEN
582 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
583 l_search_value, end_pnt;
584 ELSIF l_flag = 11 THEN
585 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
586 p_item_type, p_item_applicable_to, end_pnt;
587 ELSIF l_flag = 10 THEN
588 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
589 p_item_applicable_to, end_pnt;
590 ELSIF l_flag = 1 THEN
591 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id,
592 p_item_type, end_pnt;
593 ELSE
594 OPEN l_dlv_cv FOR sql_stmt USING FND_GLOBAL.resp_appl_id, end_pnt;
595 END IF;
596
597 IF start_pnt > 0 THEN
598 FETCH l_dlv_cv BULK COLLECT INTO l_dlv_id_tbl, l_acc_name_tbl,
599 l_dsp_name_tbl, l_item_type_tbl, l_appl_to_tbl, l_desc_tbl,
600 l_keyword_tbl, l_file_name_tbl, l_version_tbl LIMIT start_pnt;
601 IF l_dlv_cv%NOTFOUND THEN
602 CLOSE l_dlv_cv;
603 RETURN;
604 END IF;
605 END IF;
606
607 FETCH l_dlv_cv BULK COLLECT INTO x_dlv_id_tbl, x_acc_name_tbl,
608 x_dsp_name_tbl, x_item_type_tbl, x_appl_to_tbl, x_desc_tbl,
609 x_keyword_tbl, x_file_name_tbl, x_version_tbl;
610 CLOSE l_dlv_cv;
611 */
612
613 -- Standard call to get message count and if count is 1, get message info
614 FND_MSG_PUB.count_and_get(
615 p_encoded => FND_API.g_false,
616 p_count => x_msg_count,
617 p_data => x_msg_data
618 );
619
620 EXCEPTION
621
622 WHEN FND_API.g_exc_unexpected_error THEN
623 x_return_status := FND_API.g_ret_sts_unexp_error ;
624 FND_MSG_PUB.count_and_get(
625 p_encoded => FND_API.g_false,
626 p_count => x_msg_count,
627 p_data => x_msg_data
628 );
629
630 WHEN OTHERS THEN
631 x_return_status := FND_API.g_ret_sts_unexp_error ;
632
633 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
634 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
635 END IF;
636
637 FND_MSG_PUB.count_and_get(
638 p_encoded => FND_API.g_false,
639 p_count => x_msg_count,
640 p_data => x_msg_data
641 );
642
643 END list_deliverable;
644
645
646 ---------------------------------------------------------------------
647 -- PROCEDURE
648 -- save_deliverable
649 --
650 -- PURPOSE
651 -- Save a logical deliverable
652 --
653 -- PARAMETERS
654 -- p_deliverable_rec: The logical deliverables to be saved
655 --
656 -- NOTES
657 -- 1. Insert a new deliverable if deliverable_id is null; update otherwise
658 -- 2. Raise an exception if access_name or display_name is missing;
659 -- or access_name is not unique
660 -- 3. Raise an exception if item_type or item_applicable_to is missing
661 -- or invalid (create)
662 -- 4. Raise an exception if the deliverable doesn't exist; or the version
663 -- doesn't match (update)
664 -- 5. Raise an exception for any other errors
665
666 ---------------------------------------------------------------------
667 PROCEDURE save_deliverable (
668 p_api_version IN NUMBER,
669 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
670 p_commit IN VARCHAR2 := FND_API.g_false,
671 x_return_status OUT VARCHAR2,
672 x_msg_count OUT NUMBER,
673 x_msg_data OUT VARCHAR2,
674 p_deliverable_rec IN OUT DELIVERABLE_REC_TYPE ) IS
675
676 l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
677 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
678
679 l_operation_type VARCHAR2(10) := 'INSERT';
680
681 l_deliverable_id NUMBER;
682 l_item_rec JTF_AMV_ITEM_PUB.ITEM_REC_TYPE;
683 l_return_status VARCHAR2(1);
684
685 l_appl_id NUMBER;
686
687 BEGIN
688
689 -- Standard start of API savepoint
690 SAVEPOINT save_deliverable_grp;
691
692 -- Standard call to check for call compatibility
693 IF NOT FND_API.compatible_api_call(
694 g_api_version,
695 p_api_version,
696 l_api_name,
697 g_pkg_name
698 ) THEN
699 RAISE FND_API.g_exc_unexpected_error;
700 END IF;
701
702 -- Initialize message list if p_init_msg_list is set to TRUE
703 IF FND_API.to_boolean(p_init_msg_list) THEN
704 FND_MSG_PUB.initialize;
705 END IF;
706
707 -- Initialize API rturn status to success
708 x_return_status := FND_API.g_ret_sts_success;
709
710 -- API body
711
712 l_item_rec.external_access_flag := NULL;
713 l_item_rec.text_string := NULL;
714 l_item_rec.language_code := NULL;
715 l_item_rec.status_code := NULL;
716 l_item_rec.effective_start_date := NULL;
717 l_item_rec.EXPIRATION_DATE := NULL;
718 l_item_rec.ITEM_TYPE := NULL;
719 l_item_rec.URL_STRING := NULL;
720 l_item_rec.PUBLICATION_DATE := NULL;
721 l_item_rec.PRIORITY := NULL;
722 l_item_rec.CONTENT_TYPE_ID := NULL;
723 l_item_rec.OWNER_ID := NULL;
724 l_item_rec.DEFAULT_APPROVER_ID := NULL;
725 l_item_rec.ITEM_DESTINATION_TYPE := NULL;
726
727 l_item_rec.creation_date := NULL;
728 l_item_rec.created_by := NULL;
729 l_item_rec.last_update_date := NULL;
730 l_item_rec.last_updated_by := NULL;
731 l_item_rec.last_update_login := NULL;
732
733 -- fnd_global.apps_initialize(fnd_global.user_id, fnd_global.resp_id, 671);
734 -- l_appl_id := FND_GLOBAL.resp_appl_id;
735 l_appl_id := 671;
736
737 l_item_rec.application_id := l_appl_id;
738
739 /*
740 p_deliverable_rec.x_action_status
741 := FND_API.g_ret_sts_error;
742 */
743
744 l_item_rec.item_id
745 := p_deliverable_rec.deliverable_id;
746 l_item_rec.item_name
747 := TRIM(p_deliverable_rec.display_name);
748 l_item_rec.access_name
749 := TRIM(p_deliverable_rec.access_name);
750 l_item_rec.description := p_deliverable_rec.description;
751 l_item_rec.object_version_number
752 := p_deliverable_rec.object_version_number;
753
754 IF NOT JTF_DSPMGRVALIDATION_GRP.check_deliverable_accessname(
755 l_item_rec.item_id, l_item_rec.access_name) THEN
756 RAISE FND_API.g_exc_error;
757 END IF;
758
759 IF l_item_rec.item_id IS NOT NULL THEN
760 -- Update an existing deliverable
761 l_operation_type := 'UPDATE';
762 END IF;
763
764 IF (l_operation_type = 'INSERT') THEN
765 l_item_rec.deliverable_type_code
766 := TRIM(p_deliverable_rec.item_type);
767 l_item_rec.applicable_to_code
768 := TRIM(p_deliverable_rec.item_applicable_to);
769
770 JTF_AMV_ITEM_PUB.create_item(
771 p_api_version => g_amv_api_version,
772 x_return_status => l_return_status,
773 x_msg_count => x_msg_count,
774 x_msg_data => x_msg_data,
775 p_item_rec => l_item_rec,
776 x_item_id => l_deliverable_id
777 );
778
779 IF l_return_status = FND_API.g_ret_sts_error THEN
780 RAISE FND_API.g_exc_error;
781 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
782 RAISE FND_API.g_exc_unexpected_error;
783 END IF;
784
785 IF TRIM(p_deliverable_rec.keywords) IS NOT NULL THEN
786 JTF_AMV_ITEM_PUB.add_itemkeyword(
787 p_api_version => g_amv_api_version,
788 x_return_status => l_return_status,
789 x_msg_count => x_msg_count,
790 x_msg_data => x_msg_data,
791 p_item_id => l_deliverable_id,
792 p_keyword => p_deliverable_rec.keywords
793 );
794
795 IF l_return_status = FND_API.g_ret_sts_error THEN
796 RAISE FND_API.g_exc_error;
797 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
798 RAISE FND_API.g_exc_unexpected_error;
799 END IF;
800 END IF;
801
802 p_deliverable_rec.deliverable_id := l_deliverable_id;
803 p_deliverable_rec.object_version_number := 1;
804
805 ELSE
806
807 l_item_rec.deliverable_type_code := FND_API.g_miss_char;
808 l_item_rec.applicable_to_code := FND_API.g_miss_char;
809
810 JTF_AMV_ITEM_PUB.update_item(
811 p_api_version => g_amv_api_version,
812 x_return_status => l_return_status,
813 x_msg_count => x_msg_count,
814 x_msg_data => x_msg_data,
815 p_item_rec => l_item_rec
816 );
817
818 IF l_return_status = FND_API.g_ret_sts_error THEN
819 RAISE FND_API.g_exc_error;
820 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
821 RAISE FND_API.g_exc_unexpected_error;
822 END IF;
823
824 -- Delete existing keywords
825 JTF_AMV_ITEM_PUB.delete_itemkeyword(
826 p_api_version => g_amv_api_version,
827 x_return_status => l_return_status,
828 x_msg_count => x_msg_count,
829 x_msg_data => x_msg_data,
830 p_item_id => p_deliverable_rec.deliverable_id,
831 p_keyword_tab => NULL
832 );
833
834 IF l_return_status = FND_API.g_ret_sts_error THEN
835 RAISE FND_API.g_exc_error;
836 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
837 RAISE FND_API.g_exc_unexpected_error;
838 END IF;
839
840 IF TRIM(p_deliverable_rec.keywords) IS NOT NULL THEN
841 JTF_AMV_ITEM_PUB.add_itemkeyword(
842 p_api_version => g_amv_api_version,
843 x_return_status => l_return_status,
844 x_msg_count => x_msg_count,
845 x_msg_data => x_msg_data,
846 p_item_id => p_deliverable_rec.deliverable_id,
847 p_keyword => p_deliverable_rec.keywords
848 );
849
850 IF l_return_status = FND_API.g_ret_sts_error THEN
851 RAISE FND_API.g_exc_error;
852 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
853 RAISE FND_API.g_exc_unexpected_error;
854 END IF;
855 END IF;
856
857 -- update the object_version_number
858 p_deliverable_rec.object_version_number :=
859 p_deliverable_rec.object_version_number + 1;
860
861 END IF;
862
863 p_deliverable_rec.x_action_status
864 := FND_API.g_ret_sts_success;
865
866 -- Check if the caller requested to commit ,
867 -- If p_commit set to true, commit the transaction
868 IF FND_API.to_boolean(p_commit) THEN
869 COMMIT;
870 END IF;
871
872 -- Standard call to get message count and if count is 1, get message info
873 FND_MSG_PUB.count_and_get(
874 p_encoded => FND_API.g_false,
875 p_count => x_msg_count,
876 p_data => x_msg_data
877 );
878
879 EXCEPTION
880
881 WHEN FND_API.g_exc_error THEN
882 ROLLBACK TO save_deliverable_grp;
883 x_return_status := FND_API.g_ret_sts_error;
884 p_deliverable_rec.x_action_status := FND_API.g_ret_sts_error;
885 FND_MSG_PUB.count_and_get(
886 p_encoded => FND_API.g_false,
887 p_count => x_msg_count,
888 p_data => x_msg_data
889 );
890
891 WHEN FND_API.g_exc_unexpected_error THEN
892 ROLLBACK TO save_deliverable_grp;
893 x_return_status := FND_API.g_ret_sts_unexp_error;
894 p_deliverable_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
895 FND_MSG_PUB.count_and_get(
896 p_encoded => FND_API.g_false,
897 p_count => x_msg_count,
898 p_data => x_msg_data
899 );
900
901 WHEN OTHERS THEN
902 ROLLBACK TO save_deliverable_grp;
903 x_return_status := FND_API.g_ret_sts_unexp_error;
904 p_deliverable_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
905
906 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
907 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
908 END IF;
909
910 FND_MSG_PUB.count_and_get(
911 p_encoded => FND_API.g_false,
912 p_count => x_msg_count,
913 p_data => x_msg_data
914 );
915
916 END save_deliverable;
917
918
919 ---------------------------------------------------------------------
920 -- PROCEDURE
921 -- save_deliverable
922 --
923 -- PURPOSE
924 -- Save a collection of logical deliverables
925 --
926 -- PARAMETERS
927 -- p_deliverable_tbl: A collection of the logical deliverables to be saved
928 --
929 -- NOTES
930 -- 1. Insert a new deliverable if deliverable_id is null; update otherwise
931 -- 2. Raise an exception if access_name or display_name is missing;
932 -- or access_name is not unique
933 -- 3. Raise an exception if item_type or item_applicable_to is missing
934 -- or invalid (create)
935 -- 4. Raise an exception if the deliverable doesn't exist; or the version
936 -- doesn't match (update)
937 -- 5. Raise an exception for any other errors
938
939 ---------------------------------------------------------------------
940 PROCEDURE save_deliverable (
941 p_api_version IN NUMBER,
942 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
943 p_commit IN VARCHAR2 := FND_API.g_false,
944 x_return_status OUT VARCHAR2,
945 x_msg_count OUT NUMBER,
946 x_msg_data OUT VARCHAR2,
947 p_deliverable_tbl IN OUT DELIVERABLE_TBL_TYPE ) IS
948
949 l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
950 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
951
952 l_return_status VARCHAR2(1);
953
954 l_index NUMBER;
955
956 BEGIN
957
958 -- Standard start of API savepoint
959 SAVEPOINT save_deliverable_grp;
960
961 -- Standard call to check for call compatibility
962 IF NOT FND_API.compatible_api_call(
963 g_api_version,
964 p_api_version,
965 l_api_name,
966 g_pkg_name
967 ) THEN
968 RAISE FND_API.g_exc_unexpected_error;
969 END IF;
970
971 -- Initialize message list if p_init_msg_list is set to TRUE
972 IF FND_API.to_boolean(p_init_msg_list) THEN
973 FND_MSG_PUB.initialize;
974 END IF;
975
976 -- Initialize API rturn status to success
977 x_return_status := FND_API.g_ret_sts_success;
978
979 -- API body
980
981 IF p_deliverable_tbl IS NOT NULL THEN
982 FOR l_index IN 1..p_deliverable_tbl.COUNT LOOP
983
984 save_deliverable(
985 p_api_version => p_api_version,
986 x_return_status => l_return_status,
987 x_msg_count => x_msg_count,
988 x_msg_data => x_msg_data,
989 p_deliverable_rec => p_deliverable_tbl(l_index)
990 );
991
992 IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
993 x_return_status := FND_API.g_ret_sts_unexp_error;
994 ELSIF l_return_status = FND_API.g_ret_sts_error
995 AND x_return_status <> FND_API.g_ret_sts_unexp_error THEN
996 x_return_status := FND_API.g_ret_sts_error;
997 END IF;
998
999 END LOOP;
1000 END IF;
1001
1002 -- Check if the caller requested to commit ,
1003 -- If p_commit set to true, commit the transaction
1004 IF FND_API.to_boolean(p_commit) THEN
1005 COMMIT;
1006 END IF;
1007
1008 -- Standard call to get message count and if count is 1, get message info
1009 FND_MSG_PUB.count_and_get(
1010 p_encoded => FND_API.g_false,
1011 p_count => x_msg_count,
1012 p_data => x_msg_data
1013 );
1014
1015
1016 EXCEPTION
1017
1018 WHEN FND_API.g_exc_error THEN
1019 ROLLBACK TO save_deliverable_grp;
1020 x_return_status := FND_API.g_ret_sts_error;
1021 FND_MSG_PUB.count_and_get(
1022 p_encoded => FND_API.g_false,
1023 p_count => x_msg_count,
1024 p_data => x_msg_data
1025 );
1026
1027 WHEN FND_API.g_exc_unexpected_error THEN
1028 ROLLBACK TO save_deliverable_grp;
1029 x_return_status := FND_API.g_ret_sts_unexp_error ;
1030 FND_MSG_PUB.count_and_get(
1031 p_encoded => FND_API.g_false,
1032 p_count => x_msg_count,
1033 p_data => x_msg_data
1034 );
1035
1036
1037 WHEN OTHERS THEN
1038 ROLLBACK TO save_deliverable_grp;
1039 x_return_status := FND_API.g_ret_sts_unexp_error ;
1040
1041 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1042 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1043 END IF;
1044
1045 FND_MSG_PUB.count_and_get(
1046 p_encoded => FND_API.g_false,
1047 p_count => x_msg_count,
1048 p_data => x_msg_data
1049 );
1050
1051 END save_deliverable;
1052
1053
1054 ---------------------------------------------------------------------
1055 -- PROCEDURE
1056 -- save_deliverable
1057 --
1058 -- PURPOSE
1059 -- Save a logical deliverable with the default attachment for all-site
1060 -- and all-language
1061 --
1062 -- PARAMETERS
1063 -- p_dlv_ath_rec: A logical deliverable with the default attachment
1064 -- for all-site and all-language to be saved
1065 --
1066 -- NOTES
1067 -- 1. Insert a new deliverable if deliverable_id is null; update otherwise
1068 -- 2. Raise an exception if access_name or display_name is missing;
1069 -- or access_name is not unique
1070 -- 3. Raise an exception if item_type or item_applicable_to is missing
1071 -- or invalid (create)
1072 -- 4. Raise an exception if the deliverable doesn't exist; or the version
1073 -- doesn't match (update)
1074 -- 5. If creating/updating deliverable succeeds, update the default
1075 -- attachment for all-site and all-language
1076 -- 6. Raise an exception if fails to create an attachment, or all-site
1077 -- and all-language mappings. Only undo the changes made to attachment
1078 -- physicalmap tables
1079 -- 7. Raise an exception if chosen default attachment is invalid, e.g.,
1080 -- it's not associated with the given deliverable.
1081 -- 8. Raise an exception for any other errors
1082
1083 ---------------------------------------------------------------------
1084 PROCEDURE save_deliverable (
1085 p_api_version IN NUMBER,
1086 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
1087 p_commit IN VARCHAR2 := FND_API.g_false,
1088 x_return_status OUT VARCHAR2,
1089 x_msg_count OUT NUMBER,
1090 x_msg_data OUT VARCHAR2,
1091 p_dlv_ath_rec IN OUT DLV_ATH_REC_TYPE ) IS
1092
1093 l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
1094 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1095
1096 l_operation_type VARCHAR2(10) := 'INSERT';
1097 l_create_attachment VARCHAR2(1) := FND_API.g_false;
1098 l_delete_mapping VARCHAR2(1) := FND_API.g_false;
1099 l_create_mapping VARCHAR2(1) := FND_API.g_false;
1100 l_attachment_id NUMBER;
1101
1102 l_deliverable_rec DELIVERABLE_REC_TYPE;
1103 l_attachment_rec JTF_Attachment_GRP.ATTACHMENT_REC_TYPE;
1104 l_language_code_tbl JTF_PhysicalMap_GRP.LANGUAGE_CODE_TBL_TYPE
1105 := JTF_PhysicalMap_GRP.LANGUAGE_CODE_TBL_TYPE(NULL);
1106
1107 l_return_status VARCHAR2(1);
1108
1109 BEGIN
1110
1111 -- Standard start of API savepoint
1112 SAVEPOINT save_deliverable_grp;
1113
1114 -- Standard call to check for call compatibility
1115 IF NOT FND_API.compatible_api_call(
1116 g_api_version,
1117 p_api_version,
1118 l_api_name,
1119 g_pkg_name
1120 ) THEN
1121 RAISE FND_API.g_exc_unexpected_error;
1122 END IF;
1123
1124 -- Initialize message list if p_init_msg_list is set to TRUE
1125 IF FND_API.to_boolean(p_init_msg_list) THEN
1126 FND_MSG_PUB.initialize;
1127 END IF;
1128
1129 -- Initialize API rturn status to success
1130 x_return_status := FND_API.g_ret_sts_success;
1131
1132 -- API body
1133
1134 IF p_dlv_ath_rec.deliverable_id IS NOT NULL THEN
1135 -- Update an existing deliverable
1136 l_operation_type := 'UPDATE';
1137 END IF;
1138
1139 l_deliverable_rec.deliverable_id := p_dlv_ath_rec.deliverable_id;
1140 l_deliverable_rec.access_name := p_dlv_ath_rec.access_name;
1141 l_deliverable_rec.display_name := p_dlv_ath_rec.display_name;
1142 l_deliverable_rec.item_type := p_dlv_ath_rec.item_type;
1143 l_deliverable_rec.item_applicable_to := p_dlv_ath_rec.item_applicable_to;
1144 l_deliverable_rec.keywords := p_dlv_ath_rec.keywords;
1145 l_deliverable_rec.description := p_dlv_ath_rec.description;
1146 l_deliverable_rec.object_version_number := p_dlv_ath_rec.object_version_number;
1147 l_deliverable_rec.x_action_status := NULL;
1148
1149 save_deliverable(
1150 p_api_version => p_api_version,
1151 x_return_status => l_return_status,
1152 x_msg_count => x_msg_count,
1153 x_msg_data => x_msg_data,
1154 p_deliverable_rec => l_deliverable_rec
1155 );
1156
1157 p_dlv_ath_rec.deliverable_id := l_deliverable_rec.deliverable_id;
1158 p_dlv_ath_rec.object_version_number := l_deliverable_rec.object_version_number;
1159 p_dlv_ath_rec.x_action_status := l_deliverable_rec.x_action_status;
1160
1161 IF l_return_status = FND_API.g_ret_sts_error THEN
1162 RAISE FND_API.g_exc_error;
1163 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1164 RAISE FND_API.g_exc_unexpected_error;
1165 END IF;
1166
1167 -- Update/Create default attachment for all-site and all-language
1168
1169 BEGIN
1170
1171 SAVEPOINT save_one_attachment_grp;
1172
1173 IF l_operation_type = 'INSERT' THEN
1174
1175 -- Create an attachment for all-site and all-language if any
1176 IF TRIM(p_dlv_ath_rec.ath_file_name) IS NOT NULL THEN
1177 l_create_attachment := FND_API.g_true;
1178 l_create_mapping := FND_API.g_true;
1179
1180 END IF;
1181
1182 ELSE
1183
1184 -- Update the default attachment for the existing deliverable
1185
1186 IF TRIM(p_dlv_ath_rec.ath_file_name) IS NULL THEN
1187 l_delete_mapping := FND_API.g_true;
1188
1189 ELSE
1190
1191 -- Check if it's an existing attachment
1192 -- If so, validate it! Update all-site and all-lang mappings
1193 -- if it's the new default
1194 -- If not, delete all-site and all-lang mappings if any
1195 -- and create the new attachment with all-site and all-lang
1196 -- mappings
1197
1198 --modified by G. Zhang 05/23/01 10:57AM
1199 l_attachment_id := JTF_DSPMGRVALIDATION_GRP.check_attachment_exists(
1200 p_dlv_ath_rec.deliverable_id,p_dlv_ath_rec.ath_file_id,p_dlv_ath_rec.ath_file_name);
1201
1202 IF l_attachment_id IS NOT NULL THEN
1203 -- existing attachment
1204 -- validate it!
1205 --modified by G. Zhang 05/23/01 10:57AM
1206 --IF NOT JTF_DSPMGRVALIDATION_GRP.check_attachment_deliverable(
1207 -- l_attachment_id, p_dlv_ath_rec.deliverable_id) THEN
1208 -- -- invalid attachment for the given deliverable
1209 -- RAISE FND_API.g_exc_error;
1210 --END IF;
1211
1212 IF NOT JTF_DSPMGRVALIDATION_GRP.check_default_attachment(
1213 l_attachment_id) THEN
1214 l_delete_mapping := FND_API.g_true;
1215 l_create_mapping := FND_API.g_true;
1216 END IF;
1217
1218 ELSE
1219 -- new attachment
1220 l_create_attachment := FND_API.g_true;
1221 l_delete_mapping := FND_API.g_true;
1222 l_create_mapping := FND_API.g_true;
1223 END IF;
1224
1225 END IF;
1226
1227 END IF;
1228
1229 IF l_create_attachment = FND_API.g_true THEN
1230 l_attachment_rec.attachment_id := NULL;
1231 l_attachment_rec.deliverable_id := p_dlv_ath_rec.deliverable_id;
1232 l_attachment_rec.file_name := p_dlv_ath_rec.ath_file_name;
1233
1234 --added by G. Zhang 05/17/01 5:42PM
1235 l_attachment_rec.file_id := p_dlv_ath_rec.ath_file_id;
1236
1237 l_attachment_rec.object_version_number := NULL;
1238 l_attachment_rec.x_action_status := NULL;
1239 JTF_Attachment_GRP.save_attachment(
1240
1241 p_api_version => p_api_version,
1242 x_return_status => l_return_status,
1243 x_msg_count => x_msg_count,
1244 x_msg_data => x_msg_data,
1245 p_attachment_rec => l_attachment_rec
1246 );
1247
1248 IF l_return_status = FND_API.g_ret_sts_error THEN
1249 RAISE FND_API.g_exc_error;
1250 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1251 RAISE FND_API.g_exc_unexpected_error;
1252 END IF;
1253
1254 l_attachment_id := l_attachment_rec.attachment_id;
1255 END IF;
1256
1257 IF l_delete_mapping = FND_API.g_true THEN
1258 -- Delete all-site and all-lang mapping for this deliverable
1259 JTF_PhysicalMap_GRP.delete_dlv_all_all(
1260 p_deliverable_id => p_dlv_ath_rec.deliverable_id
1261 );
1262 END IF;
1263
1264 IF l_create_mapping = FND_API.g_true THEN
1265 -- Create all-site and all-lang mapping for this default attachment
1266 JTF_PhysicalMap_GRP.save_physicalmap(
1267 p_api_version => p_api_version,
1268 x_return_status => l_return_status,
1269 x_msg_count => x_msg_count,
1270 x_msg_data => x_msg_data,
1271 p_attachment_id => l_attachment_id,
1272 p_msite_id => NULL,
1273 p_language_code_tbl => l_language_code_tbl
1274 );
1275
1276 IF l_return_status = FND_API.g_ret_sts_error THEN
1277 RAISE FND_API.g_exc_error;
1278 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1279 RAISE FND_API.g_exc_unexpected_error;
1280 END IF;
1281 END IF;
1282
1283 p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_success;
1284
1285 EXCEPTION
1286
1287 WHEN FND_API.g_exc_error THEN
1288 ROLLBACK TO save_one_attachment_grp;
1289 p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_error;
1290 x_return_status := FND_API.g_ret_sts_error;
1291
1292 WHEN FND_API.g_exc_unexpected_error THEN
1293 ROLLBACK TO save_one_attachment_grp;
1294 p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_unexp_error;
1295 x_return_status := FND_API.g_ret_sts_unexp_error;
1296
1297 WHEN OTHERS THEN
1298 ROLLBACK TO save_one_attachment_grp;
1299 p_dlv_ath_rec.x_ath_action_status := FND_API.g_ret_sts_unexp_error;
1300 x_return_status := FND_API.g_ret_sts_unexp_error ;
1301
1302 IF FND_MSG_PUB.check_msg_level(
1303 FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1304 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1305 END IF;
1306 END;
1307
1308 -- Check if the caller requested to commit ,
1309 -- If p_commit set to true, commit the transaction
1310 IF FND_API.to_boolean(p_commit) THEN
1311 COMMIT;
1312 END IF;
1313
1314 -- Standard call to get message count and if count is 1, get message info
1315 FND_MSG_PUB.count_and_get(
1316 p_encoded => FND_API.g_false,
1317 p_count => x_msg_count,
1318 p_data => x_msg_data
1319 );
1320
1321 EXCEPTION
1322
1323 WHEN FND_API.g_exc_error THEN
1324 ROLLBACK TO save_deliverable_grp;
1325 x_return_status := FND_API.g_ret_sts_error;
1326 p_dlv_ath_rec.x_action_status := FND_API.g_ret_sts_error;
1327 FND_MSG_PUB.count_and_get(
1328 p_encoded => FND_API.g_false,
1329 p_count => x_msg_count,
1330 p_data => x_msg_data
1331 );
1332
1333 WHEN FND_API.g_exc_unexpected_error THEN
1334 ROLLBACK TO save_deliverable_grp;
1335 x_return_status := FND_API.g_ret_sts_unexp_error ;
1336 p_dlv_ath_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
1337 FND_MSG_PUB.count_and_get(
1338 p_encoded => FND_API.g_false,
1339 p_count => x_msg_count,
1340 p_data => x_msg_data
1341 );
1342
1343 WHEN OTHERS THEN
1344 ROLLBACK TO save_deliverable_grp;
1345 x_return_status := FND_API.g_ret_sts_unexp_error ;
1346 p_dlv_ath_rec.x_action_status := FND_API.g_ret_sts_unexp_error;
1347
1348 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1349 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1350 END IF;
1351
1352 FND_MSG_PUB.count_and_get(
1353 p_encoded => FND_API.g_false,
1354 p_count => x_msg_count,
1355 p_data => x_msg_data
1356 );
1357
1358 END save_deliverable;
1359
1360
1361 ---------------------------------------------------------------------
1362 -- PROCEDURE
1363 -- save_deliverable
1364 --
1365 -- PURPOSE
1366 -- Save a collection of logical deliverables with the default attachments
1367 -- for all-site and all-language
1368 --
1369 -- PARAMETERS
1370 -- p_dlv_ath_tbl: A collection of logical deliverables with the default
1371 -- attachments for all-site and all-language to be saved
1372 --
1373 -- NOTES
1374 -- 1. Insert a new deliverable if deliverable_id is null; update otherwise
1375 -- 2. Raise an exception if access_name or display_name is missing;
1376 -- or access_name is not unique
1377 -- 3. Raise an exception if item_type or item_applicable_to is missing
1378 -- or invalid (create)
1379 -- 4. Raise an exception if the deliverable doesn't exist; or the version
1380 -- doesn't match (update)
1381 -- 5. If creating/updating deliverable succeeds, update the default
1382 -- attachment for all-site and all-language
1383 -- 6. Raise an exception if fails to create an attachment, or all-site
1384 -- and all-language mappings. Only undo the changes made to attachment
1385 -- physicalmap tables
1386 -- 7. Raise an exception if chosen default attachment is invalid, e.g.,
1387 -- it's not associated with the given deliverable.
1388 -- 8. Raise an exception for any other errors
1389
1390 ---------------------------------------------------------------------
1391 PROCEDURE save_deliverable (
1392 p_api_version IN NUMBER,
1393 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
1394 p_commit IN VARCHAR2 := FND_API.g_false,
1395 x_return_status OUT VARCHAR2,
1396 x_msg_count OUT NUMBER,
1397 x_msg_data OUT VARCHAR2,
1398 p_dlv_ath_tbl IN OUT DLV_ATH_TBL_TYPE ) IS
1399
1400 l_api_name CONSTANT VARCHAR2(30) := 'save_deliverable';
1401 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1402
1403 l_return_status VARCHAR2(1);
1404
1405 BEGIN
1406
1407 -- Standard start of API savepoint
1408 SAVEPOINT save_deliverable_grp;
1409
1410 -- Standard call to check for call compatibility
1411 IF NOT FND_API.compatible_api_call(
1412 g_api_version,
1413 p_api_version,
1414 l_api_name,
1415 g_pkg_name
1416 ) THEN
1417 RAISE FND_API.g_exc_unexpected_error;
1418 END IF;
1419
1420 -- Initialize message list if p_init_msg_list is set to TRUE
1421 IF FND_API.to_boolean(p_init_msg_list) THEN
1422 FND_MSG_PUB.initialize;
1423 END IF;
1424
1425 -- Initialize API rturn status to success
1426 x_return_status := FND_API.g_ret_sts_success;
1427
1428 -- API body
1429
1430 IF p_dlv_ath_tbl IS NOT NULL THEN
1431 FOR l_index IN 1..p_dlv_ath_tbl.COUNT LOOP
1432
1433 save_deliverable(
1434 p_api_version => p_api_version,
1435 x_return_status => l_return_status,
1436 x_msg_count => x_msg_count,
1437 x_msg_data => x_msg_data,
1438 p_dlv_ath_rec => p_dlv_ath_tbl(l_index)
1439 );
1440
1441 IF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1442 x_return_status := FND_API.g_ret_sts_unexp_error;
1443 ELSIF l_return_status = FND_API.g_ret_sts_error
1444 AND x_return_status <> FND_API.g_ret_sts_unexp_error THEN
1445 x_return_status := FND_API.g_ret_sts_error;
1446 END IF;
1447
1448 END LOOP;
1449 END IF;
1450
1451 -- Check if the caller requested to commit ,
1452 -- If p_commit set to true, commit the transaction
1453 IF FND_API.to_boolean(p_commit) THEN
1454 COMMIT;
1455 END IF;
1456
1457 -- Standard call to get message count and if count is 1, get message info
1458 FND_MSG_PUB.count_and_get(
1459 p_encoded => FND_API.g_false,
1460 p_count => x_msg_count,
1461 p_data => x_msg_data
1462 );
1463
1464 EXCEPTION
1465
1466 WHEN FND_API.g_exc_error THEN
1467 ROLLBACK TO save_deliverable_grp;
1468 x_return_status := FND_API.g_ret_sts_error;
1469 FND_MSG_PUB.count_and_get(
1470 p_encoded => FND_API.g_false,
1471 p_count => x_msg_count,
1472 p_data => x_msg_data
1473 );
1474
1475 WHEN FND_API.g_exc_unexpected_error THEN
1476 ROLLBACK TO save_deliverable_grp;
1477 x_return_status := FND_API.g_ret_sts_unexp_error ;
1478 FND_MSG_PUB.count_and_get(
1479 p_encoded => FND_API.g_false,
1480 p_count => x_msg_count,
1481 p_data => x_msg_data
1482 );
1483
1484 WHEN OTHERS THEN
1485 ROLLBACK TO save_deliverable_grp;
1486 x_return_status := FND_API.g_ret_sts_unexp_error ;
1487
1488 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1489 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1490 END IF;
1491
1492 FND_MSG_PUB.count_and_get(
1493 p_encoded => FND_API.g_false,
1494 p_count => x_msg_count,
1495 p_data => x_msg_data
1496 );
1497
1498 END save_deliverable;
1499
1500
1501 ---------------------------------------------------------------------
1502 -- PROCEDURE
1503 -- delete_deliverable
1504 --
1505 -- PURPOSE
1506 -- Delete a collection of logical deliverables
1507 --
1508 -- PARAMETERS
1509 -- p_dlv_id_ver_tbl: A collection of IDs and versions of the logical
1510 -- deliverables to be deleted
1511 --
1512 -- NOTES
1513 -- 1. Delete all the deliverables and associated physical attachments along
1514 -- with all the associations
1515 -- 2. Raise an exception if the deliverable doesn't exist; or the version
1516 -- doesn't match
1517 -- 3. A logical deliverable is not allowed to be deleted if it's currently
1518 -- in use unless the caller has the right privilege
1519 -- 4. Raise an exception for any other errors
1520 ---------------------------------------------------------------------
1521 PROCEDURE delete_deliverable (
1522 p_api_version IN NUMBER,
1523 p_init_msg_list IN VARCHAR2 := FND_API.g_false,
1524 p_commit IN VARCHAR2 := FND_API.g_false,
1525 x_return_status OUT VARCHAR2,
1526 x_msg_count OUT NUMBER,
1527 x_msg_data OUT VARCHAR2,
1528 p_dlv_id_ver_tbl IN OUT DLV_ID_VER_TBL_TYPE ) IS
1529
1530 l_api_name CONSTANT VARCHAR2(30) := 'delete_deliverable';
1531 l_full_name CONSTANT VARCHAR2(60) := g_pkg_name ||'.'|| l_api_name;
1532
1533 l_index NUMBER;
1534
1535 l_return_status VARCHAR2(1);
1536
1537 BEGIN
1538
1539 -- Standard start of API savepoint
1540 SAVEPOINT delete_deliverable_grp;
1541
1542 -- Standard call to check for call compatibility
1543 IF NOT FND_API.compatible_api_call(
1544 g_api_version,
1545 p_api_version,
1546 l_api_name,
1547 g_pkg_name
1548 ) THEN
1549 RAISE FND_API.g_exc_unexpected_error;
1550 END IF;
1551
1552 -- Initialize message list if p_init_msg_list is set to TRUE
1553 IF FND_API.to_boolean(p_init_msg_list) THEN
1554 FND_MSG_PUB.initialize;
1555 END IF;
1556
1557 -- Initialize API rturn status to success
1558 x_return_status := FND_API.g_ret_sts_success;
1559
1560 -- API body
1561
1562 -- Check if the deliverable exists
1563 IF p_dlv_id_ver_tbl IS NOT NULL THEN
1564 FOR l_index IN 1..p_dlv_id_ver_tbl.COUNT LOOP
1565 BEGIN
1566
1567 -- Standard start of API savepoint
1568 SAVEPOINT delete_one_deliverable_grp;
1569
1570 IF NOT JTF_DSPMGRVALIDATION_GRP.check_deliverable_exists(
1571 p_dlv_id_ver_tbl(l_index).deliverable_id,
1572 p_dlv_id_ver_tbl(l_index).object_version_number) THEN
1573 RAISE FND_API.g_exc_error;
1574 END IF;
1575
1576 -- Delete from the section tables
1577 JTF_DSP_SECTION_GRP.update_deliverable_to_null(
1578 p_api_version => p_api_version,
1579 p_deliverable_id => p_dlv_id_ver_tbl(l_index).deliverable_id,
1580 x_return_status => l_return_status,
1581 x_msg_count => x_msg_count,
1582 x_msg_data => x_msg_data
1583 );
1584
1585 IF l_return_status = FND_API.g_ret_sts_error THEN
1586 RAISE FND_API.g_exc_error;
1587 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1588 RAISE FND_API.g_exc_unexpected_error;
1589 END IF;
1590
1591 -- Delete all the associated display contexts
1592 JTF_DisplayContext_GRP.delete_deliverable(
1593 p_dlv_id_ver_tbl(l_index).deliverable_id
1594 );
1595
1596 -- Delete all the associated template categories
1597 JTF_TplCategory_GRP.delete_deliverable(
1598 p_dlv_id_ver_tbl(l_index).deliverable_id
1599 );
1600
1601 -- Delete all the associated logical contents
1602 JTF_LogicalContent_GRP.delete_deliverable(
1603 p_dlv_id_ver_tbl(l_index).deliverable_id
1604 );
1605
1606 -- Delete all the associated physical_site_language mappings
1607 JTF_PhysicalMap_GRP.delete_deliverable(
1608 p_dlv_id_ver_tbl(l_index).deliverable_id
1609 );
1610
1611 -- Delete the item
1612 JTF_AMV_ITEM_PUB.delete_item(
1613 p_api_version => g_amv_api_version,
1614 x_return_status => l_return_status,
1615 x_msg_count => x_msg_count,
1616 x_msg_data => x_msg_data,
1617 p_item_id => p_dlv_id_ver_tbl(l_index).deliverable_id
1618 );
1619
1620 IF l_return_status = FND_API.g_ret_sts_error THEN
1621 RAISE FND_API.g_exc_error;
1622 ELSIF l_return_status = FND_API.g_ret_sts_unexp_error THEN
1623 RAISE FND_API.g_exc_unexpected_error;
1624 END IF;
1625
1626 p_dlv_id_ver_tbl(l_index).x_action_status
1627 := FND_API.g_ret_sts_success;
1628
1629 EXCEPTION
1630
1631 WHEN FND_API.g_exc_error THEN
1632 ROLLBACK TO delete_one_deliverable_grp;
1633 IF x_return_status <> FND_API.g_ret_sts_unexp_error THEN
1634 x_return_status := FND_API.g_ret_sts_error;
1635 END IF;
1636 p_dlv_id_ver_tbl(l_index).x_action_status
1637 := FND_API.g_ret_sts_error;
1638
1639 WHEN FND_API.g_exc_unexpected_error THEN
1640 ROLLBACK TO delete_one_deliverable_grp;
1641 x_return_status := FND_API.g_ret_sts_unexp_error;
1642 p_dlv_id_ver_tbl(l_index).x_action_status
1643 := FND_API.g_ret_sts_unexp_error;
1644
1645 WHEN OTHERS THEN
1646 ROLLBACK TO delete_one_deliverable_grp;
1647 x_return_status := FND_API.g_ret_sts_unexp_error ;
1648 p_dlv_id_ver_tbl(l_index).x_action_status
1649 := FND_API.g_ret_sts_unexp_error;
1650
1651 IF FND_MSG_PUB.check_msg_level(
1652 FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1653 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1654 END IF;
1655
1656 END;
1657 END LOOP;
1658 END IF;
1659
1660 -- Check if the caller requested to commit ,
1661 -- If p_commit set to true, commit the transaction
1662 IF FND_API.to_boolean(p_commit) THEN
1663 COMMIT;
1664 END IF;
1665
1666 -- Standard call to get message count and if count is 1, get message info
1667 FND_MSG_PUB.count_and_get(
1668 p_encoded => FND_API.g_false,
1669 p_count => x_msg_count,
1670 p_data => x_msg_data
1671 );
1672
1673 EXCEPTION
1674
1675 WHEN FND_API.g_exc_error THEN
1676 ROLLBACK TO delete_deliverable_grp;
1677 x_return_status := FND_API.g_ret_sts_error;
1678 FND_MSG_PUB.count_and_get(
1679 p_encoded => FND_API.g_false,
1680 p_count => x_msg_count,
1681 p_data => x_msg_data
1682 );
1683
1684 WHEN FND_API.g_exc_unexpected_error THEN
1685 ROLLBACK TO delete_deliverable_grp;
1686 x_return_status := FND_API.g_ret_sts_unexp_error ;
1687 FND_MSG_PUB.count_and_get(
1688 p_encoded => FND_API.g_false,
1689 p_count => x_msg_count,
1690 p_data => x_msg_data
1691 );
1692
1693 WHEN OTHERS THEN
1694 ROLLBACK TO delete_deliverable_grp;
1695 x_return_status := FND_API.g_ret_sts_unexp_error ;
1696
1697 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
1698 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
1699 END IF;
1700
1701 FND_MSG_PUB.count_and_get(
1702 p_encoded => FND_API.g_false,
1703 p_count => x_msg_count,
1704 p_data => x_msg_data
1705 );
1706
1707 END delete_deliverable;
1708
1709
1710 END JTF_Deliverable_GRP;