1 PACKAGE BODY fnd_attached_documents2_pkg as
2 /* $Header: AFAKATDB.pls 120.12 2011/11/17 18:46:42 ctilley ship $ */
3
4
5
6 -- API to delete attachments for a given entity
7 PROCEDURE delete_attachments(X_entity_name IN VARCHAR2,
8 X_pk1_value IN VARCHAR2,
9 X_pk2_value IN VARCHAR2 DEFAULT NULL,
10 X_pk3_value IN VARCHAR2 DEFAULT NULL,
11 X_pk4_value IN VARCHAR2 DEFAULT NULL,
12 X_pk5_value IN VARCHAR2 DEFAULT NULL,
13 X_delete_document_flag IN VARCHAR2,
14 X_automatically_added_flag IN VARCHAR2 DEFAULT NULL) IS
15 l_delete_document_flag varchar2(1);
16
17 BEGIN
18 l_delete_document_flag := X_delete_document_flag;
19 IF l_delete_document_flag IS NULL THEN
20 l_delete_document_flag := 'N';
21 END IF;
22 -- Check that entity_name and pk1_value have values
23 IF (X_entity_name IS NULL
24 OR X_pk1_value IS NULL) THEN
25 RETURN;
26 END IF;
27
28 -- If X_delete_doc_flag is Y, then need to delete
29 -- document records too
30 IF X_pk2_value IS NULL THEN -- performance change IF.
31
32 IF (l_delete_document_flag = 'Y') THEN
33 -- need to delete from each sub-table holding the data
34 -- doing this in a loop to reduce amount of code
35 DELETE FROM fnd_documents_short_text
36 WHERE media_id IN
37 (SELECT fd.media_id
38 FROM fnd_documents_tl fdtl,
39 fnd_documents fd,
40 fnd_attached_documents fad
41 WHERE fdtl.document_id = fd.document_id
42 AND fd.document_id = fad.document_id
43 AND fd.usage_type = 'O'
44 AND fd.datatype_id = 1
45 AND fad.entity_name = X_entity_name
46 AND fad.pk1_value = X_pk1_value);
47
48
49 DELETE FROM fnd_documents_long_text
50 WHERE media_id IN
51 (SELECT fd.media_id
52 FROM fnd_documents_tl fdtl,
53 fnd_documents fd,
54 fnd_attached_documents fad
55 WHERE fdtl.document_id = fd.document_id
56 AND fd.document_id = fad.document_id
57 AND fd.usage_type = 'O'
58 AND fd.datatype_id = 2
59 AND fad.entity_name = X_entity_name
60 AND fad.pk1_value = X_pk1_value);
61
62 DELETE FROM fnd_documents_long_raw
63 WHERE media_id IN
64 (SELECT fd.media_id
65 FROM fnd_documents_tl fdtl,
66 fnd_documents fd,
67 fnd_attached_documents fad
68 WHERE fdtl.document_id = fd.document_id
69 AND fd.document_id = fad.document_id
70 AND fd.usage_type = 'O'
71 AND fd.datatype_id IN (3,4)
72 AND fad.entity_name = X_entity_name
73 AND fad.pk1_value = X_pk1_value);
74
75 DELETE FROM fnd_lobs
76 WHERE file_id IN
77 (SELECT fd.media_id
78 FROM fnd_documents_tl fdtl,
79 fnd_documents fd,
80 fnd_attached_documents fad
81 WHERE fdtl.document_id = fd.document_id
82 AND fd.document_id = fad.document_id
83 AND fd.usage_type = 'O'
84 AND fd.datatype_id = 6
85 AND fad.entity_name = X_entity_name
86 AND fad.pk1_value = X_pk1_value);
87
88 -- Delete from FND_DOCUMENTS_TL table
89 DELETE FROM fnd_documents_tl
90 WHERE document_id IN
91 (SELECT fad.document_id
92 FROM fnd_attached_documents fad, fnd_documents fd
93 WHERE fad.document_id = fd.document_id
94 AND fd.usage_type = 'O'
95 AND fad.entity_name = X_entity_name
96 AND fad.pk1_value = X_pk1_value);
97
98 -- Delete from FND_DOCUMENTS table
99 DELETE FROM fnd_documents
100 WHERE usage_type = 'O'
101 AND document_id IN
102 (SELECT document_id
103 FROM fnd_attached_documents fad
104 WHERE fad.entity_name = X_entity_name
105 AND fad.pk1_value = X_pk1_value);
106 END IF; -- end of if l_delete_document_flag is Y
107
108 -- delete from FND_ATTACHED_DOCUMENTS table
109 DELETE FROM fnd_attached_documents fad
110 WHERE fad.entity_name = X_entity_name
111 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
112 AND fad.pk1_value = X_pk1_value;
113
114 ELSIF X_pk3_value IS NULL THEN -- performance change IF
115 IF (l_delete_document_flag = 'Y') THEN
116 -- need to delete from each sub-table holding the data
117 -- doing this in a loop to reduce amount of code
118 DELETE FROM fnd_documents_short_text
119 WHERE media_id IN
120 (SELECT fd.media_id
121 FROM fnd_documents_tl fdtl,
122 fnd_documents fd,
123 fnd_attached_documents fad
124 WHERE fdtl.document_id = fd.document_id
125 AND fd.document_id = fad.document_id
126 AND fd.usage_type = 'O'
127 AND fd.datatype_id = 1
128 AND fad.entity_name = X_entity_name
129 AND fad.pk1_value = X_pk1_value
130 AND fad.pk2_value = X_pk2_value);
131
132
133 DELETE FROM fnd_documents_long_text
134 WHERE media_id IN
135 (SELECT fd.media_id
136 FROM fnd_documents_tl fdtl,
137 fnd_documents fd,
138 fnd_attached_documents fad
139 WHERE fdtl.document_id = fd.document_id
140 AND fd.document_id = fad.document_id
141 AND fd.usage_type = 'O'
142 AND fd.datatype_id = 2
143 AND fad.entity_name = X_entity_name
144 AND fad.pk1_value = X_pk1_value
145 AND fad.pk2_value = X_pk2_value);
146
147 DELETE FROM fnd_documents_long_raw
148 WHERE media_id IN
149 (SELECT fd.media_id
150 FROM fnd_documents_tl fdtl,
151 fnd_documents fd,
152 fnd_attached_documents fad
153 WHERE fdtl.document_id = fd.document_id
154 AND fd.document_id = fad.document_id
155 AND fd.usage_type = 'O'
156 AND fd.datatype_id IN (3,4)
157 AND fad.entity_name = X_entity_name
158 AND fad.pk1_value = X_pk1_value
159 AND fad.pk2_value = X_pk2_value);
160
161 DELETE FROM fnd_lobs
162 WHERE file_id IN
163 (SELECT fd.media_id
164 FROM fnd_documents_tl fdtl,
165 fnd_documents fd,
166 fnd_attached_documents fad
167 WHERE fdtl.document_id = fd.document_id
168 AND fd.document_id = fad.document_id
169 AND fd.usage_type = 'O'
170 AND fd.datatype_id = 6
171 AND fad.entity_name = X_entity_name
172 AND fad.pk1_value = X_pk1_value
173 AND fad.pk2_value = X_pk2_value);
174
175 -- Delete from FND_DOCUMENTS_TL table
176 DELETE FROM fnd_documents_tl
177 WHERE document_id IN
178 (SELECT fad.document_id
179 FROM fnd_attached_documents fad, fnd_documents fd
180 WHERE fad.document_id = fd.document_id
181 AND fd.usage_type = 'O'
182 AND fad.entity_name = X_entity_name
183 AND fad.pk1_value = X_pk1_value
184 AND fad.pk2_value = X_pk2_value);
185
186 -- Delete from FND_DOCUMENTS table
187 DELETE FROM fnd_documents
188 WHERE usage_type = 'O'
189 AND document_id IN
190 (SELECT document_id
191 FROM fnd_attached_documents fad
192 WHERE fad.entity_name = X_entity_name
193 AND fad.pk1_value = X_pk1_value
194 AND fad.pk2_value = X_pk2_value);
195 END IF; -- end of if l_delete_document_flag is Y
196
197 -- delete from FND_ATTACHED_DOCUMENTS table
198 DELETE FROM fnd_attached_documents fad
199 WHERE fad.entity_name = X_entity_name
200 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
201 AND fad.pk1_value = X_pk1_value
202 AND fad.pk2_value = X_pk2_value;
203
204 ELSIF X_pk4_value IS NULL THEN -- performance change if
205 IF (l_delete_document_flag = 'Y') THEN
206 -- need to delete from each sub-table holding the data
207 -- doing this in a loop to reduce amount of code
208 DELETE FROM fnd_documents_short_text
209 WHERE media_id IN
210 (SELECT fd.media_id
211 FROM fnd_documents_tl fdtl,
212 fnd_documents fd,
213 fnd_attached_documents fad
214 WHERE fdtl.document_id = fd.document_id
215 AND fd.document_id = fad.document_id
216 AND fd.usage_type = 'O'
217 AND fd.datatype_id = 1
218 AND fad.entity_name = X_entity_name
219 AND fad.pk1_value = X_pk1_value
220 AND fad.pk2_value = X_pk2_value
221 AND fad.pk3_value = X_pk3_value);
222
223
224 DELETE FROM fnd_documents_long_text
225 WHERE media_id IN
226 (SELECT fd.media_id
227 FROM fnd_documents_tl fdtl,
228 fnd_documents fd,
229 fnd_attached_documents fad
230 WHERE fdtl.document_id = fd.document_id
231 AND fd.document_id = fad.document_id
232 AND fd.usage_type = 'O'
233 AND fd.datatype_id = 2
234 AND fad.entity_name = X_entity_name
235 AND fad.pk1_value = X_pk1_value
236 AND fad.pk2_value = X_pk2_value
237 AND fad.pk3_value = X_pk3_value);
238
239 DELETE FROM fnd_documents_long_raw
240 WHERE media_id IN
241 (SELECT fd.media_id
242 FROM fnd_documents_tl fdtl,
243 fnd_documents fd,
244 fnd_attached_documents fad
245 WHERE fdtl.document_id = fd.document_id
246 AND fd.document_id = fad.document_id
247 AND fd.usage_type = 'O'
248 AND fd.datatype_id IN (3,4)
249 AND fad.entity_name = X_entity_name
250 AND fad.pk1_value = X_pk1_value
251 AND fad.pk2_value = X_pk2_value
252 AND fad.pk3_value = X_pk3_value);
253
254 DELETE FROM fnd_lobs
255 WHERE file_id IN
256 (SELECT fd.media_id
257 FROM fnd_documents_tl fdtl,
258 fnd_documents fd,
259 fnd_attached_documents fad
260 WHERE fdtl.document_id = fd.document_id
261 AND fd.document_id = fad.document_id
262 AND fd.usage_type = 'O'
263 AND fd.datatype_id = 6
264 AND fad.entity_name = X_entity_name
265 AND fad.pk1_value = X_pk1_value
266 AND fad.pk2_value = X_pk2_value
267 AND fad.pk3_value = X_pk3_value);
268
269 -- Delete from FND_DOCUMENTS_TL table
270 DELETE FROM fnd_documents_tl
271 WHERE document_id IN
272 (SELECT fad.document_id
273 FROM fnd_attached_documents fad, fnd_documents fd
274 WHERE fad.document_id = fd.document_id
275 AND fd.usage_type = 'O'
276 AND fad.entity_name = X_entity_name
277 AND fad.pk1_value = X_pk1_value
278 AND fad.pk2_value = X_pk2_value
279 AND fad.pk3_value = X_pk3_value);
280
281 -- Delete from FND_DOCUMENTS table
282 DELETE FROM fnd_documents
283 WHERE usage_type = 'O'
284 AND document_id IN
285 (SELECT document_id
286 FROM fnd_attached_documents fad
287 WHERE fad.entity_name = X_entity_name
288 AND fad.pk1_value = X_pk1_value
289 AND fad.pk2_value = X_pk2_value
290 AND fad.pk3_value = X_pk3_value);
291 END IF; -- end of if l_delete_document_flag is Y
292
293 -- delete from FND_ATTACHED_DOCUMENTS table
294 DELETE FROM fnd_attached_documents fad
295 WHERE fad.entity_name = X_entity_name
296 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
297 AND fad.pk1_value = X_pk1_value
298 AND fad.pk2_value = X_pk2_value
299 AND fad.pk3_value = X_pk3_value;
300
301 ELSE -- performance change if
302 IF (l_delete_document_flag = 'Y') THEN
303 -- need to delete from each sub-table holding the data
304 -- doing this in a loop to reduce amount of code
305 DELETE FROM fnd_documents_short_text
306 WHERE media_id IN
307 (SELECT fd.media_id
308 FROM fnd_documents_tl fdtl,
309 fnd_documents fd,
310 fnd_attached_documents fad
311 WHERE fdtl.document_id = fd.document_id
312 AND fd.document_id = fad.document_id
313 AND fd.usage_type = 'O'
314 AND fd.datatype_id = 1
315 AND fad.entity_name = X_entity_name
316 AND fad.pk1_value = X_pk1_value
317 AND fad.pk2_value = X_pk2_value
318 AND fad.pk3_value = X_pk3_value
319 AND fad.pk4_value = X_pk4_value
320 AND (X_pk5_value IS NULL
321 OR fad.pk5_value = X_pk5_value));
322
323
324 DELETE FROM fnd_documents_long_text
325 WHERE media_id IN
326 (SELECT fd.media_id
327 FROM fnd_documents_tl fdtl,
328 fnd_documents fd,
329 fnd_attached_documents fad
330 WHERE fdtl.document_id = fd.document_id
331 AND fd.document_id = fad.document_id
332 AND fd.usage_type = 'O'
333 AND fd.datatype_id = 2
334 AND fad.entity_name = X_entity_name
335 AND fad.pk1_value = X_pk1_value
336 AND fad.pk2_value = X_pk2_value
337 AND fad.pk3_value = X_pk3_value
338 AND fad.pk4_value = X_pk4_value
339 AND (X_pk5_value IS NULL
340 OR fad.pk5_value = X_pk5_value));
341
342 DELETE FROM fnd_documents_long_raw
343 WHERE media_id IN
344 (SELECT fd.media_id
345 FROM fnd_documents_tl fdtl,
346 fnd_documents fd,
347 fnd_attached_documents fad
348 WHERE fdtl.document_id = fd.document_id
349 AND fd.document_id = fad.document_id
350 AND fd.usage_type = 'O'
351 AND fd.datatype_id IN (3,4)
352 AND fad.entity_name = X_entity_name
353 AND fad.pk1_value = X_pk1_value
354 AND fad.pk2_value = X_pk2_value
355 AND fad.pk3_value = X_pk3_value
356 AND fad.pk4_value = X_pk4_value
357 AND (X_pk5_value IS NULL
358 OR fad.pk5_value = X_pk5_value));
359
360 DELETE FROM fnd_lobs
361 WHERE file_id IN
362 (SELECT fd.media_id
363 FROM fnd_documents_tl fdtl,
364 fnd_documents fd,
365 fnd_attached_documents fad
366 WHERE fdtl.document_id = fd.document_id
367 AND fd.document_id = fad.document_id
368 AND fd.usage_type = 'O'
369 AND fd.datatype_id = 6
370 AND fad.entity_name = X_entity_name
371 AND fad.pk1_value = X_pk1_value
372 AND fad.pk2_value = X_pk2_value
373 AND fad.pk3_value = X_pk3_value
374 AND fad.pk4_value = X_pk4_value
375 AND (X_pk5_value IS NULL
376 OR fad.pk5_value = X_pk5_value));
377
378 -- Delete from FND_DOCUMENTS_TL table
379 -- BUG#5060588 added Parens around OR's.
380 DELETE FROM fnd_documents_tl
381 WHERE document_id IN
382 (SELECT fad.document_id
383 FROM fnd_attached_documents fad, fnd_documents fd
384 WHERE fad.document_id = fd.document_id
385 AND fd.usage_type = 'O'
386 AND fad.entity_name = X_entity_name
387 AND fad.pk1_value = X_pk1_value
388 AND fad.pk2_value = X_pk2_value
389 AND fad.pk3_value = X_pk3_value
390 AND fad.pk4_value = X_pk4_value
391 ANd (X_pk5_value IS NULL
392 OR fad.pk5_value = X_pk5_value));
393
394 -- Delete from FND_DOCUMENTS table
395 -- BUG#5060588 added Parens around OR's.
396 DELETE FROM fnd_documents
397 WHERE usage_type = 'O'
398 AND document_id IN
399 (SELECT document_id
400 FROM fnd_attached_documents fad
401 WHERE fad.entity_name = X_entity_name
402 AND fad.pk1_value = X_pk1_value
403 AND fad.pk2_value = X_pk2_value
404 AND fad.pk3_value = X_pk3_value
405 AND fad.pk4_value = X_pk4_value
406 AND (X_pk5_value IS NULL
407 OR fad.pk5_value = X_pk5_value));
408 END IF; -- end of if l_delete_document_flag is Y
409
410 -- delete from FND_ATTACHED_DOCUMENTS table
411 -- BUG#5060588 added Parens around OR's.
412 DELETE FROM fnd_attached_documents fad
413 WHERE fad.entity_name = X_entity_name
414 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
415 AND fad.pk1_value = X_pk1_value
416 AND fad.pk2_value = X_pk2_value
417 AND fad.pk3_value = X_pk3_value
418 AND fad.pk4_value = X_pk4_value
419 AND (X_pk5_value IS NULL
420 OR fad.pk5_value = X_pk5_value);
421
422 END IF; -- performance change IF
423
424 END delete_attachments;
425
429 X_from_pk1_value IN VARCHAR2,
426 -- API to copy attachments from one record to another
427 -- BUG#2790775
428 PROCEDURE copy_attachments(X_from_entity_name IN VARCHAR2,
430 X_from_pk2_value IN VARCHAR2 DEFAULT NULL,
431 X_from_pk3_value IN VARCHAR2 DEFAULT NULL,
432 X_from_pk4_value IN VARCHAR2 DEFAULT NULL,
433 X_from_pk5_value IN VARCHAR2 DEFAULT NULL,
434 X_to_entity_name IN VARCHAR2,
435 X_to_pk1_value IN VARCHAR2,
436 X_to_pk2_value IN VARCHAR2 DEFAULT NULL,
437 X_to_pk3_value IN VARCHAR2 DEFAULT NULL,
438 X_to_pk4_value IN VARCHAR2 DEFAULT NULL,
439 X_to_pk5_value IN VARCHAR2 DEFAULT NULL,
440 X_created_by IN NUMBER DEFAULT NULL,
441 X_last_update_login IN NUMBER DEFAULT NULL,
442 X_program_application_id IN NUMBER DEFAULT NULL,
443 X_program_id IN NUMBER DEFAULT NULL,
444 X_request_id IN NUMBER DEFAULT NULL,
445 X_automatically_added_flag IN VARCHAR2 DEFAULT NULL,
446 X_from_category_id IN NUMBER DEFAULT NULL,
447 X_to_category_id IN NUMBER DEFAULT NULL) IS
448
449 BEGIN
450
451 copy_attachments(X_from_entity_name => X_from_entity_name,
452 X_from_pk1_value => X_from_pk1_value,
453 X_from_pk2_value => X_from_pk2_value,
454 X_from_pk3_value => X_from_pk3_value,
455 X_from_pk4_value => X_from_pk4_value,
456 X_from_pk5_value => X_from_pk5_value,
457 X_to_entity_name => X_to_entity_name,
458 X_to_pk1_value => X_to_pk1_value,
459 X_to_pk2_value => X_to_pk2_value,
460 X_to_pk3_value => X_to_pk3_value,
461 X_to_pk4_value => X_to_pk4_value,
462 X_to_pk5_value => X_to_pk5_value,
463 X_created_by => X_created_by,
464 X_last_update_login => X_last_update_login,
465 X_program_application_id => X_program_application_id,
466 X_program_id =>X_program_id,
467 X_request_id => X_request_id,
468 X_automatically_added_flag => X_automatically_added_flag,
469 X_from_category_id => X_from_category_id,
470 X_to_category_id => X_to_category_id,
471 X_orig_attach_doc_id => NULL);
472
473 END copy_attachments;
474
475
476 -- API to copy attachments from one record to another storing
477 -- the originating attachment and document ids
478 -- BUG#12910292
479 PROCEDURE copy_attachments(X_from_entity_name IN VARCHAR2,
480 X_from_pk1_value IN VARCHAR2,
481 X_from_pk2_value IN VARCHAR2 DEFAULT NULL,
482 X_from_pk3_value IN VARCHAR2 DEFAULT NULL,
483 X_from_pk4_value IN VARCHAR2 DEFAULT NULL,
484 X_from_pk5_value IN VARCHAR2 DEFAULT NULL,
485 X_to_entity_name IN VARCHAR2,
486 X_to_pk1_value IN VARCHAR2,
487 X_to_pk2_value IN VARCHAR2 DEFAULT NULL,
488 X_to_pk3_value IN VARCHAR2 DEFAULT NULL,
489 X_to_pk4_value IN VARCHAR2 DEFAULT NULL,
490 X_to_pk5_value IN VARCHAR2 DEFAULT NULL,
491 X_created_by IN NUMBER DEFAULT NULL,
492 X_last_update_login IN NUMBER DEFAULT NULL,
493 X_program_application_id IN NUMBER DEFAULT NULL,
494 X_program_id IN NUMBER DEFAULT NULL,
495 X_request_id IN NUMBER DEFAULT NULL,
496 X_automatically_added_flag IN VARCHAR2 DEFAULT NULL,
497 X_from_category_id IN NUMBER DEFAULT NULL,
498 X_to_category_id IN NUMBER DEFAULT NULL,
499 X_orig_attach_doc_id IN NUMBER) IS
500 CURSOR docpk1 IS
501 SELECT fad.seq_num, fad.document_id, fad.attached_document_id,
502 fad.attribute_category, fad.attribute1, fad.attribute2,
503 fad.attribute3, fad.attribute4, fad.attribute5,
504 fad.attribute6, fad.attribute7, fad.attribute8,
505 fad.attribute9, fad.attribute10, fad.attribute11,
506 fad.attribute12, fad.attribute13, fad.attribute14,
507 fad.attribute15, fad.column1, fad.automatically_added_flag,
508 fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
509 fad.pk4_value, fad.pk5_value,
510 fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
511 fd.publish_flag, fd.image_type, fd.storage_type,
512 fd.usage_type, fd.start_date_active, fd.end_date_active,
513 fdtl.language, fdtl.description, fd.file_name,
514 fd.media_id, fdtl.doc_attribute_category dattr_cat,
515 fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
516 fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
517 fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
518 fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
519 fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
520 fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
521 fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
522 fdtl.doc_attribute15 dattr15, fd.url, fdtl.title, fd.dm_node,
523 fd.dm_folder_path,fd.dm_type, fd.dm_document_id,fd.dm_version_number
524 FROM fnd_attached_documents fad,
525 fnd_documents fd,
526 fnd_documents_tl fdtl
527 WHERE fad.document_id = fd.document_id
531 AND fad.pk1_value = X_from_pk1_value
528 AND fd.document_id = fdtl.document_id
529 AND fdtl.language = userenv('LANG')
530 AND fad.entity_name = X_from_entity_name
532 AND (X_from_category_id IS NULL
533 OR (fad.category_id = X_from_category_id
534 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
535 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
536 AND (X_orig_attach_doc_id is NULL OR fad.attached_document_id = X_orig_attach_doc_id);
537
538
539 CURSOR docpk2 IS
540 SELECT fad.seq_num, fad.document_id, fad.attached_document_id,
541 fad.attribute_category, fad.attribute1, fad.attribute2,
542 fad.attribute3, fad.attribute4, fad.attribute5,
543 fad.attribute6, fad.attribute7, fad.attribute8,
544 fad.attribute9, fad.attribute10, fad.attribute11,
545 fad.attribute12, fad.attribute13, fad.attribute14,
546 fad.attribute15, fad.column1, fad.automatically_added_flag,
547 fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
548 fad.pk4_value, fad.pk5_value,
549 fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
550 fd.publish_flag, fd.image_type, fd.storage_type,
551 fd.usage_type, fd.start_date_active, fd.end_date_active,
552 fdtl.language, fdtl.description, fd.file_name,
553 fd.media_id, fdtl.doc_attribute_category dattr_cat,
554 fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
555 fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
556 fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
557 fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
558 fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
559 fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
560 fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
561 fdtl.doc_attribute15 dattr15, fd.url, fdtl.title, fd.dm_node,
562 fd.dm_folder_path,fd.dm_type, fd.dm_document_id, fd.dm_version_number
563 FROM fnd_attached_documents fad,
564 fnd_documents fd,
565 fnd_documents_tl fdtl
566 WHERE fad.document_id = fd.document_id
567 AND fd.document_id = fdtl.document_id
568 AND fdtl.language = userenv('LANG')
569 AND fad.entity_name = X_from_entity_name
570 AND fad.pk1_value = X_from_pk1_value
571 AND fad.pk2_value = X_from_pk2_value
572 AND (X_from_category_id IS NULL
573 OR (fad.category_id = X_from_category_id
574 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
575 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
576 AND (X_orig_attach_doc_id is NULL OR fad.attached_document_id = X_orig_attach_doc_id);
577
578
579
580
581 CURSOR docpk3 IS
582 SELECT fad.seq_num, fad.document_id, fad.attached_document_id,
583 fad.attribute_category, fad.attribute1, fad.attribute2,
584 fad.attribute3, fad.attribute4, fad.attribute5,
585 fad.attribute6, fad.attribute7, fad.attribute8,
586 fad.attribute9, fad.attribute10, fad.attribute11,
587 fad.attribute12, fad.attribute13, fad.attribute14,
588 fad.attribute15, fad.column1, fad.automatically_added_flag,
589 fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
590 fad.pk4_value, fad.pk5_value,
591 fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
592 fd.publish_flag, fd.image_type, fd.storage_type,
593 fd.usage_type, fd.start_date_active, fd.end_date_active,
594 fdtl.language, fdtl.description, fd.file_name,
595 fd.media_id, fdtl.doc_attribute_category dattr_cat,
596 fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
597 fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
598 fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
599 fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
600 fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
601 fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
602 fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
603 fdtl.doc_attribute15 dattr15, fd.url, fdtl.title, fd.dm_node,
604 fd.dm_folder_path,fd.dm_type, fd.dm_document_id, fd.dm_version_number
605 FROM fnd_attached_documents fad,
606 fnd_documents fd,
607 fnd_documents_tl fdtl
608 WHERE fad.document_id = fd.document_id
609 AND fd.document_id = fdtl.document_id
610 AND fdtl.language = userenv('LANG')
611 AND fad.entity_name = X_from_entity_name
612 AND fad.pk1_value = X_from_pk1_value
613 AND fad.pk2_value = X_from_pk2_value
614 AND fad.pk3_value = X_from_pk3_value
615 AND (X_from_category_id IS NULL
616 OR (fad.category_id = X_from_category_id
617 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
618 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
619 AND (X_orig_attach_doc_id is NULL OR fad.attached_document_id = X_orig_attach_doc_id);
620
621
622
623
624 CURSOR doclist IS
625 SELECT fad.seq_num, fad.document_id, fad.attached_document_id,
626 fad.attribute_category, fad.attribute1, fad.attribute2,
627 fad.attribute3, fad.attribute4, fad.attribute5,
628 fad.attribute6, fad.attribute7, fad.attribute8,
629 fad.attribute9, fad.attribute10, fad.attribute11,
630 fad.attribute12, fad.attribute13, fad.attribute14,
631 fad.attribute15, fad.column1, fad.automatically_added_flag,
635 fd.publish_flag, fd.image_type, fd.storage_type,
632 fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
633 fad.pk4_value, fad.pk5_value,
634 fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
636 fd.usage_type, fd.start_date_active, fd.end_date_active,
637 fdtl.language, fdtl.description, fd.file_name,
638 fd.media_id, fdtl.doc_attribute_category dattr_cat,
639 fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
640 fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
641 fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
642 fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
643 fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
644 fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
645 fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
646 fdtl.doc_attribute15 dattr15, fd.url, fdtl.title, fd.dm_node,
647 fd.dm_folder_path,fd.dm_type, fd.dm_document_id, fd.dm_version_number
648 FROM fnd_attached_documents fad,
649 fnd_documents fd,
650 fnd_documents_tl fdtl
651 WHERE fad.document_id = fd.document_id
652 AND fd.document_id = fdtl.document_id
653 AND fdtl.language = userenv('LANG')
654 AND fad.entity_name = X_from_entity_name
655 AND fad.pk1_value = X_from_pk1_value
656 AND (X_from_pk2_value IS NULL
657 OR fad.pk2_value = X_from_pk2_value)
658 AND (X_from_pk3_value IS NULL
659 OR fad.pk3_value = X_from_pk3_value)
660 AND (X_from_pk4_value IS NULL
661 OR fad.pk4_value = X_from_pk4_value)
662 AND (X_from_pk5_value IS NULL
663 OR fad.pk5_value = X_from_pk5_value)
664 AND (X_from_category_id IS NULL
665 OR (fad.category_id = X_from_category_id
666 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
667 AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
668 AND (X_orig_attach_doc_id is NULL OR fad.attached_document_id = X_orig_attach_doc_id);
669
670
671
672 CURSOR shorttext (mid NUMBER) IS
673 SELECT short_text
674 FROM fnd_documents_short_text
675 WHERE media_id = mid;
676
677 CURSOR longtext (mid NUMBER) IS
678 SELECT long_text
679 FROM fnd_documents_long_text
680 WHERE media_id = mid;
681
682 CURSOR fnd_lobs_cur (mid NUMBER) IS
683 SELECT file_id,
684 file_name,
685 file_content_type,
686 upload_date,
687 expiration_date,
688 program_name,
689 program_tag,
690 file_data,
691 language,
692 oracle_charset,
693 file_format
694 FROM fnd_lobs
695 WHERE file_id = mid;
696
697 media_id_tmp NUMBER;
698 document_id_tmp NUMBER;
699 row_id_tmp VARCHAR2(30);
700 short_text_tmp VARCHAR2(4000);
701 --long_text_tmp VARCHAR2(32767);
702 long_text_tmp fnd_documents_long_text.long_text%TYPE;
703 docrec doclist%ROWTYPE;
704 fnd_lobs_rec fnd_lobs_cur%ROWTYPE;
705 BEGIN
706 -- Use cursor loop to get all attachments associated with
707 -- the from_entity
708 IF (X_from_entity_name IS NULL OR X_from_pk1_value IS NULL) THEN
709 RETURN;
710 END IF;
711
712 IF X_from_pk2_value IS NULL THEN -- performance change IF
713 OPEN docpk1;
714 ELSIF X_from_pk3_value IS NULL THEN
715 OPEN docpk2;
716 ELSIF X_from_pk4_value IS NULL THEN
717 OPEN docpk3;
718 ELSE
719 OPEN doclist;
720 END IF;
721
722 <<pkloop>>
723 LOOP
724
725 IF X_from_pk2_value IS NULL THEN -- performance change IF
726 FETCH docpk1 INTO docrec;
727 --EXIT
728 IF (docpk1%notfound) then
729 EXIT pkloop;
730 END IF;
731 ELSIF X_from_pk3_value IS NULL THEN
732 FETCH docpk2 INTO docrec;
733 IF (docpk2%notfound) then
734 EXIT pkloop;
735 END IF;
736 ELSIF X_from_pk4_value IS NULL THEN
737 FETCH docpk3 INTO docrec;
738 IF (docpk3%notfound) then
739 EXIT pkloop;
740 END IF;
741 ELSE
742 FETCH doclist INTO docrec;
743 IF (doclist%notfound) then
744 EXIT pkloop;
745 END IF;
746 END IF;
747
748 --FOR docrec IN doclist LOOP
749 -- One-Time docs that Short Text or Long Text will have
750 -- to be copied into a new document (Long Text will be
751 -- truncated to 32K). Create the new document records
752 -- before creating the attachment record
753 --
754 IF (docrec.usage_type = 'O'
755 AND docrec.datatype_id IN (1,2,5,6) ) THEN
756 -- Create Documents records
757 FND_DOCUMENTS_PKG.Insert_Row(row_id_tmp,
758 document_id_tmp,
759 SYSDATE,
760 NVL(X_created_by,0),
761 SYSDATE,
762 NVL(X_created_by,0),
763 X_last_update_login,
764 docrec.datatype_id,
765 NVL(X_to_category_id, docrec.category_id),
766 docrec.security_type,
770 docrec.storage_type,
767 docrec.security_id,
768 docrec.publish_flag,
769 docrec.image_type,
771 docrec.usage_type,
772 docrec.start_date_active,
773 docrec.end_date_active,
774 X_request_id,
775 X_program_application_id,
776 X_program_id,
777 SYSDATE,
778 docrec.language,
779 docrec.description,
780 docrec.file_name,
781 media_id_tmp,
782 docrec.dattr_cat, docrec.dattr1,
783 docrec.dattr2, docrec.dattr3,
784 docrec.dattr4, docrec.dattr5,
785 docrec.dattr6, docrec.dattr7,
786 docrec.dattr8, docrec.dattr9,
787 docrec.dattr10, docrec.dattr11,
788 docrec.dattr12, docrec.dattr13,
789 docrec.dattr14, docrec.dattr15,
790 'N',docrec.url, docrec.title,
791 docrec.dm_node, docrec.dm_folder_path,
792 docrec.dm_type, docrec.dm_document_id,
793 docrec.dm_version_number,
794 docrec.document_id);
795
796 -- overwrite document_id from original
797 -- cursor for later insert into
798 -- fnd_attached_documents
799 docrec.document_id := document_id_tmp;
800
801 -- Duplicate short or long text
802 IF (docrec.datatype_id = 1) THEN
803 -- Handle short Text
804 -- get original data
805 OPEN shorttext(docrec.media_id);
806 FETCH shorttext INTO short_text_tmp;
807 CLOSE shorttext;
808
809 INSERT INTO fnd_documents_short_text (
810 media_id,
811 short_text)
812 VALUES (
813 media_id_tmp,
814 short_text_tmp);
815 media_id_tmp := '';
816
817 ELSIF (docrec.datatype_id = 2) THEN
818 -- Handle long text
819 -- get original data
820 OPEN longtext(docrec.media_id);
821 FETCH longtext INTO long_text_tmp;
822 CLOSE longtext;
823
824 INSERT INTO fnd_documents_long_text (
825 media_id,
826 long_text)
827 VALUES (
828 media_id_tmp,
829 long_text_tmp);
830 media_id_tmp := '';
831
832 ELSIF (docrec.datatype_id=6) THEN
833
834 OPEN fnd_lobs_cur(docrec.media_id);
835 FETCH fnd_lobs_cur
836 INTO fnd_lobs_rec.file_id,
837 fnd_lobs_rec.file_name,
838 fnd_lobs_rec.file_content_type,
839 fnd_lobs_rec.upload_date,
840 fnd_lobs_rec.expiration_date,
841 fnd_lobs_rec.program_name,
842 fnd_lobs_rec.program_tag,
843 fnd_lobs_rec.file_data,
844 fnd_lobs_rec.language,
845 fnd_lobs_rec.oracle_charset,
846 fnd_lobs_rec.file_format;
847 CLOSE fnd_lobs_cur;
848
849 INSERT INTO fnd_lobs (
850 file_id,
851 file_name,
852 file_content_type,
853 upload_date,
854 expiration_date,
855 program_name,
856 program_tag,
857 file_data,
858 language,
859 oracle_charset,
860 file_format)
861 VALUES (
862 media_id_tmp,
863 fnd_lobs_rec.file_name,
864 fnd_lobs_rec.file_content_type,
865 fnd_lobs_rec.upload_date,
866 fnd_lobs_rec.expiration_date,
867 fnd_lobs_rec.program_name,
868 fnd_lobs_rec.program_tag,
869 fnd_lobs_rec.file_data,
870 fnd_lobs_rec.language,
871 fnd_lobs_rec.oracle_charset,
872 fnd_lobs_rec.file_format);
873
874 media_id_tmp := '';
875
876 END IF; -- end of duplicating text
877
878
879 END IF; -- end if usage_type = 'O' and datatype in (1,2,6)
880
881 -- Create attachment record
882 INSERT INTO fnd_attached_documents
883 (attached_document_id,
884 document_id,
885 creation_date,
886 created_by,
887 last_update_date,
888 last_updated_by,
889 last_update_login,
890 seq_num,
891 entity_name,
892 pk1_value, pk2_value, pk3_value,
893 pk4_value, pk5_value,
894 automatically_added_flag,
895 program_application_id, program_id,
896 program_update_date, request_id,
897 attribute_category, attribute1,
898 attribute2, attribute3, attribute4,
899 attribute5, attribute6, attribute7,
900 attribute8, attribute9, attribute10,
901 attribute11, attribute12, attribute13,
902 attribute14, attribute15, column1, category_id, orig_attach_doc_id) VALUES
903 (fnd_attached_documents_s.nextval,
904 docrec.document_id,
905 sysdate,
906 NVL(X_created_by,0),
907 sysdate,
908 NVL(X_created_by,0),
909 X_last_update_login,
910 docrec.seq_num,
911 X_to_entity_name,
912 X_to_pk1_value,
913 X_to_pk2_value,
914 X_to_pk3_value,
915 X_to_pk4_value,
916 X_to_pk5_value,
917 docrec.automatically_added_flag,
918 X_program_application_id, X_program_id,
919 sysdate, X_request_id,
920 docrec.attribute_category, docrec.attribute1,
921 docrec.attribute2, docrec.attribute3,
922 docrec.attribute4, docrec.attribute5,
923 docrec.attribute6, docrec.attribute7,
924 docrec.attribute8, docrec.attribute9,
925 docrec.attribute10, docrec.attribute11,
926 docrec.attribute12, docrec.attribute13,
927 docrec.attribute14, docrec.attribute15,
928 docrec.column1,
929 NVL(X_to_category_id, NVL(docrec.att_cat, docrec.category_id)),
930 docrec.attached_document_id);
931
932 -- Update the document to be a std document if it
933 -- was an ole or image that wasn't already a std doc
934 -- (images should be created as Std, but just in case)
935 IF (docrec.datatype_id IN (3,4)
936 AND docrec.usage_type <> 'S') THEN
937 UPDATE fnd_documents
938 SET usage_type = 'S'
939 WHERE document_id = docrec.document_id;
940 END IF;
941
942 END LOOP; -- end of working through all attachments
943 -- close cursors.
944 IF X_from_pk2_value IS NULL THEN -- performance change IF
945 CLOSE docpk1;
946 ELSIF X_from_pk3_value IS NULL THEN
947 CLOSE docpk2;
948 ELSIF X_from_pk4_value IS NULL THEN
949 CLOSE docpk3;
950 ELSE
951 CLOSE doclist;
952 END IF;
953
954 EXCEPTION WHEN OTHERS THEN
955 -- need to close all cursors
956 CLOSE docpk1;
957 CLOSE docpk2;
958 CLOSE docpk3;
959 CLOSE doclist;
960 CLOSE shorttext;
961 CLOSE longtext;
962 CLOSE fnd_lobs_cur;
963
964 END copy_attachments;
965
966
967 END fnd_attached_documents2_pkg;