1 PACKAGE BODY Ibc_Validate_Pvt AS
2 /* $Header: ibcvvldb.pls 120.2 2005/08/24 12:21:17 appldev ship $ */
3
4 /****************************************************
5 -------------PACKAGE VARIABLES -------------------------------------------------------------------------
6 ****************************************************/
7
8
9
10
11 /****************************************************
12 -------------FUNCTIONS--------------------------------------------------------------------------
13 ****************************************************/
14 -- --------------------------------------------------------------
15 -- IS APPROVED
16 --
17 -- Checks to see if content item version is approved
18 --
19 -- --------------------------------------------------------------
20 FUNCTION isApproved(
21 f_citem_ver_id IN NUMBER
22 )
23 RETURN VARCHAR2
24 IS
25 CURSOR c_app IS
26 SELECT
27 citem_version_id
28 FROM
29 ibc_citem_versions_b
30 WHERE
31 citem_version_id = f_citem_ver_id
32 AND
33 citem_version_status = IBC_UTILITIES_PUB.G_STV_APPROVED;
34
35 temp NUMBER;
36 BEGIN
37 open c_app;
38 fetch c_app into temp;
39
40 if (c_app%NOTFOUND) then
41 close c_app;
42 RETURN FND_API.g_false;
43 else
44 close c_app;
45 RETURN FND_API.g_true;
46 end if;
47 END;
48
49
50
51
52 -- --------------------------------------------------------------
53 -- IS APPROVED ITEM
54 --
55 -- Checks to see if content item version is approved
56 --
57 -- --------------------------------------------------------------
58 FUNCTION isApprovedItem(
59 f_citem_id IN NUMBER
60 )
61 RETURN VARCHAR2
62 IS
63 CURSOR c_appi IS
64 SELECT
65 content_item_id
66 FROM
67 ibc_content_items
68 WHERE
69 content_item_id = f_citem_id
70 AND
71 content_item_status = IBC_UTILITIES_PUB.G_STI_APPROVED;
72
73 temp NUMBER;
74 BEGIN
75 open c_appi;
76 fetch c_appi into temp;
77
78 if (c_appi%NOTFOUND) then
79 close c_appi;
80 RETURN FND_API.g_false;
81 else
82 close c_appi;
83 RETURN FND_API.g_true;
84 end if;
85 END;
86
87
88 -- --------------------------------------------------------------
89 -- IS BOOLEAN
90 --
91 -- Used to check if item is boolean
92 --
93 -- --------------------------------------------------------------
94 FUNCTION isBoolean(
95 f_boolean IN VARCHAR2
96 )
97 RETURN VARCHAR2
98 IS
99 BEGIN
100 IF ( (f_boolean = 'F') OR (f_boolean = 'T') ) THEN
101 RETURN FND_API.g_true;
102 ELSE
103 RETURN FND_API.g_false;
104 END IF;
105 END isBoolean;
106
107
108
109
110
111
112
113 -- --------------------------------------------------------------
114 -- IS DATE
115 --
116 -- Used to check if a string is actually a date
117 --
118 -- --------------------------------------------------------------
119 FUNCTION isDate(
120 f_date IN VARCHAR2
121 )
122 RETURN VARCHAR2
123 IS
124 temp DATE;
125 BEGIN
126
127
128 IF (f_date IS NOT NULL) THEN
129 BEGIN
130 temp := TO_DATE(f_date, FND_DATE.user_mask);
131 EXCEPTION
132 WHEN OTHERS THEN
133 BEGIN
134 temp := TO_DATE(f_date, Fnd_Profile.value('ICX_DATE_FORMAT_MASK'));
135 EXCEPTION
136 WHEN OTHERS THEN
137 temp := TO_DATE(f_date,'RRRR-mm-dd');
138 END;
139
140 END;
141 RETURN Fnd_Api.g_true;
142 ELSE
143 RETURN Fnd_Api.g_false;
144 END IF;
145 EXCEPTION
146 WHEN OTHERS THEN
147 RETURN Fnd_Api.g_false;
148 END isDate;
149
150
151
152
153
154 -- --------------------------------------------------------------
155 -- IS NUMBER
156 --
157 -- Used to check if a string is actually a number
158 --
159 -- --------------------------------------------------------------
160 FUNCTION isNumber(
161 f_number IN VARCHAR2
162 )
163 RETURN VARCHAR2
164 IS
165 temp NUMBER;
166 BEGIN
167 if (f_number is not null) then
168 temp := TO_NUMBER(f_number);
169 RETURN FND_API.g_true;
170 else
171 RETURN FND_API.g_false;
172 end if;
173 EXCEPTION
174 WHEN OTHERS THEN
175 RETURN FND_API.g_false;
176 END isNumber;
177
178
179
180
181 -- --------------------------------------------------------------
182 -- IS VALID ASSOCIATION
183 --
184 -- Used to check if the association exists
185 --
186 -- --------------------------------------------------------------
187 FUNCTION isValidAssoc(
188 f_assoc_id IN VARCHAR2
189 )
190 RETURN VARCHAR2
191 IS
192 CURSOR c_assoc IS
193 SELECT
194 association_id
195 FROM
196 ibc_associations
197 WHERE
198 association_id = f_assoc_id;
199
200 temp NUMBER;
201 BEGIN
202 IF (f_assoc_id is not null) THEN
203 OPEN c_assoc;
204 FETCH c_assoc INTO temp;
205
206 IF (c_assoc%NOTFOUND) THEN
207 CLOSE c_assoc;
208 RETURN FND_API.g_false;
209 ELSE
210 CLOSE c_assoc;
211 RETURN FND_API.g_false;
212 END IF;
213 ELSE
214 RETURN FND_API.g_false;
215 END IF;
216 END isValidAssoc;
217
218
219
220
221 -- --------------------------------------------------------------
222 -- IS VALID ATTACHMENT
223 --
224 -- Used to check if the attachment exists
225 --
226 -- --------------------------------------------------------------
227 FUNCTION isValidAttachment(
228 f_attach_id IN VARCHAR2
229 )
230 RETURN VARCHAR2
231 IS
232 CURSOR c_attach IS
233 SELECT
234 file_id
235 FROM
236 fnd_lobs
237 WHERE
238 file_id = f_attach_id;
239
240 temp NUMBER;
241 BEGIN
242 IF (f_attach_id is not null) then
243 OPEN c_attach;
244 FETCH c_attach INTO temp;
245
246 IF (c_attach%NOTFOUND) THEN
247 CLOSE c_attach;
248 RETURN FND_API.g_false;
249 ELSE
250 CLOSE c_attach;
251 RETURN FND_API.g_true;
252 END IF;
253 ELSE
254 RETURN FND_API.g_false;
255 END IF;
256 END isValidAttachment;
257
258
259
260 -- --------------------------------------------------------------
261 -- IS VALID ASSOCIATION TYPE CODE
262 --
263 -- Used to check if the association type code exists
264 --
265 -- --------------------------------------------------------------
266 FUNCTION isValidAssocType(
267 f_assoc_code IN VARCHAR2
268 )
269 RETURN VARCHAR2
270 IS
271 CURSOR c_assoc IS
272 SELECT
273 association_type_code
274 FROM
275 ibc_association_types_b
276 WHERE
277 association_type_code = f_assoc_code;
278
279 temp IBC_ASSOCIATION_TYPES_B.association_type_code%TYPE;
280 BEGIN
281 IF (f_assoc_code IS NOT NULL) THEN
282 open c_assoc;
283 fetch c_assoc into temp;
284
285 if (c_assoc%NOTFOUND) then
286 close c_assoc;
287 RETURN FND_API.g_false;
288 else
289 close c_assoc;
290 RETURN FND_API.g_true;
291 end if;
292 ELSE
293 RETURN FND_API.g_false;
294 END IF;
295 END isValidAssocType;
296
297
298
299
300 -- --------------------------------------------------------------
301 -- IS VALID ATTRIBUTE CODE
302 --
303 -- Used to check if the directory node exists
304 --
305 -- --------------------------------------------------------------
306 FUNCTION isValidAttrCode(
307 f_attr_type_code IN VARCHAR2
308 ,f_ctype_code IN VARCHAR2
309 )
310 RETURN VARCHAR2
311 IS
312 CURSOR c_acode IS
313 SELECT
314 attribute_type_code
315 FROM
316 ibc_attribute_types_b
317 WHERE
318 attribute_type_code = f_attr_type_code
319 AND
320 content_type_code = f_ctype_code;
321
322 temp IBC_ATTRIBUTE_TYPES_B.attribute_type_code%TYPE;
323 BEGIN
324 IF (f_attr_type_code IS NOT NULL) THEN
325 open c_acode;
326 fetch c_acode into temp;
327
328 if (c_acode%NOTFOUND) then
329 CLOSE c_acode;
330 RETURN FND_API.g_false;
331 else
332 CLOSE c_acode;
333 RETURN FND_API.g_true;
334 end if;
335 ELSE
336 RETURN FND_API.g_false;
337 END IF;
338 END isValidAttrCode;
339
340
341
342
343 -- --------------------------------------------------------------
344 -- IS VALID CITEM VERSION
345 --
346 -- Used to check if the content item version exists
347 --
348 -- --------------------------------------------------------------
349 FUNCTION isValidCitemVer(
350 f_citem_ver_id IN VARCHAR2
351 )
352 RETURN VARCHAR2
353 IS
354 CURSOR c_verid IS
355 SELECT
356 citem_version_id
357 FROM
358 ibc_citem_versions_b
359 WHERE
360 citem_version_id = f_citem_ver_id;
361
362 temp NUMBER;
363 BEGIN
364 IF (f_citem_ver_id IS NOT NULL) THEN
365 open c_verid;
366 fetch c_verid into temp;
367
368 if (c_verid%NOTFOUND) then
369 close c_verid;
370 RETURN FND_API.g_false;
371 else
372 close c_verid;
373 RETURN FND_API.g_true;
374 end if;
375 ELSE
376 RETURN FND_API.g_false;
377 END IF;
378 END isValidCitemVer;
379
380
381
382 -- --------------------------------------------------------------
383 -- IS VALID CITEM VERSION FOR CITEM
384 --
385 -- Used to check if the citem version id is valid and belongs to
386 -- a particular content item.
387 --
388 -- --------------------------------------------------------------
389 FUNCTION isValidCitemVerForCitem (
390 f_citem_id IN VARCHAR2
391 ,f_citem_ver_id IN VARCHAR2
392 )
393 RETURN VARCHAR2
394 IS
395 CURSOR c_verid IS
396 SELECT citem_version_id
397 FROM ibc_citem_versions_b
398 WHERE content_item_id = f_citem_id
399 AND citem_version_id = f_citem_ver_id;
400 temp NUMBER;
401 BEGIN
402 IF (f_citem_ver_id IS NOT NULL) THEN
403 open c_verid;
404 fetch c_verid into temp;
405
406 if (c_verid%NOTFOUND) then
407 close c_verid;
408 RETURN FND_API.g_false;
409 else
410 close c_verid;
411 RETURN FND_API.g_true;
412 end if;
413 ELSE
414 RETURN FND_API.g_false;
415 END IF;
416 END isValidCitemVerForCitem;
417
418
419
420 -- --------------------------------------------------------------
421 -- IS VALID CITEM
422 --
423 -- Used to check if the content item exists
424 --
425 -- --------------------------------------------------------------
426 FUNCTION isValidCitem(
427 f_citem_id IN VARCHAR2
428 )
429 RETURN VARCHAR2
430 IS
431 CURSOR c_citem IS
432 SELECT
433 content_item_id
434 FROM
435 ibc_content_items
436 WHERE
437 content_item_id = f_citem_id;
438
439 temp NUMBER;
440 BEGIN
441 IF (f_citem_id IS NOT NULL) THEN
442 open c_citem;
443 fetch c_citem into temp;
444
445 IF (c_citem%NOTFOUND) THEN
446 close c_citem;
447 RETURN FND_API.g_false;
448 ELSE
449 close c_citem;
450 RETURN FND_API.g_true;
451 END IF;
452 ELSE
453 RETURN FND_API.g_false;
454 END IF;
455 END isValidCitem;
456
457
458 -- --------------------------------------------------------------
459 -- IS VALID LANGUAGE
460 --
461 -- Used to check if specified language exists in FND_LANGUAGES
462 --
463 -- --------------------------------------------------------------
464 FUNCTION isValidLanguage(
465 p_language IN VARCHAR2
466 )
467 RETURN VARCHAR2
468 IS
469 CURSOR c_language IS
470 SELECT 'X'
471 FROM fnd_languages
472 WHERE language_code = p_language;
473
474 l_dummy VARCHAR2(1);
475 BEGIN
476 IF (p_language IS NOT NULL) THEN
477 open c_language;
478 fetch c_language into l_dummy;
479
480 IF (c_language%NOTFOUND) THEN
481 close c_language;
482 RETURN FND_API.g_false;
483 ELSE
484 close c_language;
485 RETURN FND_API.g_true;
486 END IF;
487 ELSE
488 RETURN FND_API.g_true;
489 END IF;
490 END isValidLanguage;
491
492
493 -- --------------------------------------------------------------
494 -- IS VALID CTYPE
495 --
496 -- Used to check if the content type code exists
497 --
498 -- --------------------------------------------------------------
499 FUNCTION isValidCType(
500 f_ctype_code IN VARCHAR2
501 )
502 RETURN VARCHAR2
503 IS
504 CURSOR c_ctype IS
505 SELECT
506 content_type_code
507 FROM
508 ibc_content_types_b
509 WHERE
510 content_type_code = f_ctype_code;
511
512 temp IBC_CONTENT_TYPES_B.content_type_code%TYPE;
513 BEGIN
514 IF (f_ctype_code IS NOT NULL) THEN
515 open c_ctype;
516 fetch c_ctype into temp;
517
518 IF(c_ctype%NOTFOUND) THEN
519 CLOSE c_ctype;
520 RETURN FND_API.g_false;
521 ELSE
522 CLOSE c_ctype;
523 RETURN FND_API.g_true;
524 END IF;
525 ELSE
526 RETURN FND_API.g_false;
527 END IF;
528 END isValidCType;
529
530
531
532 -- --------------------------------------------------------------
533 -- IS VALID DIRECTORY NODE
534 --
535 -- Used to check if the directory node exists
536 --
537 -- --------------------------------------------------------------
538 FUNCTION isValidDirNode(
539 f_node_id IN NUMBER
540 )
541 RETURN VARCHAR2
542 IS
543 CURSOR c_dnode IS
544 SELECT
545 directory_node_id
546 FROM
547 ibc_directory_nodes_b
548 WHERE
549 directory_node_id = f_node_id;
550
551 temp NUMBER;
552 BEGIN
553 IF (f_node_id IS NOT NULL) THEN
554 OPEN c_dnode;
555 fetch c_dnode into temp;
556
557 IF(c_dnode%NOTFOUND) THEN
558 CLOSE c_dnode;
559 RETURN FND_API.g_false;
560 ELSE
561 CLOSE c_dnode;
562 RETURN FND_API.g_true;
563 END IF;
564 ELSE
565 RETURN FND_API.g_false;
566 END IF;
567 END isValidDirNode;
568
569
570
571
572
573 -- --------------------------------------------------------------
574 -- IS VALID LOB
575 --
576 -- Used to check if the lob exists in fnd_lobs
577 --
578 -- --------------------------------------------------------------
579 FUNCTION isValidLob(
580 f_lob_id IN NUMBER
581 )
582 RETURN VARCHAR2
583 IS
584 CURSOR c_lob IS
585 SELECT
586 file_id
587 FROM
588 fnd_lobs
589 WHERE
590 file_id = f_lob_id;
591
592 temp NUMBER;
593 BEGIN
594 IF (f_lob_id IS NOT NULL) THEN
595 open c_lob;
596 fetch c_lob into temp;
597
598 IF(c_lob%NOTFOUND) THEN
599 CLOSE c_lob;
600 RETURN FND_API.g_false;
601 ELSE
602 CLOSE c_lob;
603 RETURN FND_API.g_true;
604 END IF;
605 ELSE
606 RETURN FND_API.g_false;
607 END IF;
608 END isValidLob;
609
610
611 -- --------------------------------------------------------------
612 -- IS VALID RESOURCE
613 --
614 -- Used to check if the resource exists
615 --
616 -- --------------------------------------------------------------
617 FUNCTION isValidResource(
618 f_resource_id IN NUMBER
619 ,f_resource_type IN VARCHAR2
620 )
621 RETURN VARCHAR2
622 IS
623 CURSOR c_resource IS
624 SELECT resource_id
625 FROM jtf_rs_all_resources_vl
626 WHERE resource_id = f_resource_id
627 AND resource_type = f_resource_type;
628
629 temp number;
630
631 CURSOR c_user IS
632 SELECT user_id
633 FROM FND_USER
634 WHERE user_id = f_resource_id;
635
636 BEGIN
637
638 if (f_resource_id IS NULL or f_resource_type IS NULL) then
639 RETURN FND_API.g_false;
640 end if;
641
642 if (UPPER(f_resource_type) = 'USER') then
643 open c_user;
644 fetch c_user into temp;
645
646 if (c_user%NOTFOUND) then
647 close c_user;
648 RETURN FND_API.g_false;
649 else
650 close c_user;
651 RETURN FND_API.g_true;
652 end if;
653 else
654 open c_resource;
655 fetch c_resource into temp;
656
657 if (c_resource%NOTFOUND) then
658 close c_resource;
659 RETURN FND_API.g_false;
660 else
661 close c_resource;
662 RETURN FND_API.g_true;
663 end if;
664 end if;
665 END isValidResource;
666
667
668 -- --------------------------------------------------------------
669 -- IS VALID USER
670 --
671 -- Used to check if the user exists in FND_USER
672 --
673 -- --------------------------------------------------------------
674 FUNCTION isValidUser(
675 f_user_id IN NUMBER
676 )
677 RETURN VARCHAR2
678 IS
679 CURSOR c_user IS
680 SELECT user_id
681 FROM FND_USER
682 WHERE user_id = f_user_id;
683 temp number;
684 BEGIN
685 if (f_user_id is not null) then
686 open c_user;
687 fetch c_user into temp;
688
689 if (c_user%NOTFOUND) then
690 close c_user;
691 RETURN FND_API.g_false;
692 else
693 close c_user;
694 RETURN FND_API.g_true;
695 end if;
696 else
697 RETURN FND_API.g_false;
698 end if;
699 END isValidUser;
700
701
702
703 -- --------------------------------------------------------------
704 -- IS VALID STATUS
705 --
706 -- Used to check if the status
707 --
708 -- --------------------------------------------------------------
709 FUNCTION isValidStatus(
710 f_status IN VARCHAR2
711 )
712 RETURN VARCHAR2
713 IS
714 temp VARCHAR2(30);
715 BEGIN
716
717 if ( (f_status = IBC_UTILITIES_PUB.G_STV_SUBMIT_FOR_APPROVAL) or
718 (f_status = IBC_UTILITIES_PUB.G_STV_APPROVED) or
719 (f_status = IBC_UTILITIES_PUB.G_STV_ARCHIVED) or
720 (f_status = IBC_UTILITIES_PUB.G_STV_WORK_IN_PROGRESS) or
721 (f_status = IBC_UTILITIES_PUB.G_STV_REJECTED) ) then
722
723 RETURN FND_API.g_true;
724 else
725 RETURN FND_API.g_false;
726 end if;
727 END isValidStatus;
728
729
730
731 -- --------------------------------------------------------------
732 -- IS VALID LABEL
733 --
734 -- Used to check if the label exists
735 --
736 -- --------------------------------------------------------------
737 FUNCTION isValidLabel(
738 f_label IN VARCHAR2
739 )
740 RETURN VARCHAR2
741 IS
742 CURSOR c_label IS
743 SELECT
744 LABEL_CODE
745 FROM
746 IBC_LABELS_B
747 WHERE
748 LABEL_CODE = f_label;
749
750 temp IBC_LABELS_B.label_code%TYPE;
751 BEGIN
752 IF (f_label IS NOT NULL) THEN
753 open c_label;
754 fetch c_label into temp;
755
756 IF(c_label%NOTFOUND) THEN
757 CLOSE c_label;
758 RETURN FND_API.g_false;
759 ELSE
760 CLOSE c_label;
761 RETURN FND_API.g_true;
762 END IF;
763 ELSE
764 RETURN FND_API.g_false;
765 END IF;
766 END isValidLabel;
767
768
769
770 /****************************************************
771 -------------PROCEDURES--------------------------------------------------------------------------
772 ****************************************************/
773
774
775 PROCEDURE Validate_NotNULL_NUMBER (
776 p_init_msg_list IN VARCHAR2,
777 p_column_name IN VARCHAR2,
778 p_notnull_column IN NUMBER,
779 x_return_status OUT NOCOPY VARCHAR2,
780 x_msg_count OUT NOCOPY NUMBER,
781 x_msg_data OUT NOCOPY VARCHAR2)
782 IS
783 BEGIN
784 -- Initialize message list if p_init_msg_list is set to TRUE.
785 IF FND_API.to_Boolean( p_init_msg_list ) THEN
786 FND_MSG_PUB.initialize;
787 END IF;
788
789 -- Initialize API return status to success
790 x_return_status := FND_API.G_RET_STS_SUCCESS;
791
792 IF (p_notnull_column IS NULL OR p_notnull_column = FND_API.G_MISS_NUM) THEN
793 x_return_status := FND_API.G_RET_STS_ERROR;
794 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
795 FND_MESSAGE.Set_Name('IBC', 'API_MISSING_COLUMN');
796 FND_MESSAGE.Set_Token('COLUMN', p_column_name, FALSE);
797 FND_MSG_PUB.ADD;
798 END IF;
799 END IF;
800
801 FND_MSG_PUB.Count_And_Get(
802 p_count => x_msg_count,
803 p_data => x_msg_data);
804
805 END Validate_NotNULL_NUMBER;
806
807
808 PROCEDURE Validate_NotNULL_VARCHAR2 (
809 p_init_msg_list IN VARCHAR2,
810 p_column_name IN VARCHAR2,
811 p_notnull_column IN VARCHAR2,
812 x_return_status OUT NOCOPY VARCHAR2,
813 x_msg_count OUT NOCOPY NUMBER,
814 x_msg_data OUT NOCOPY VARCHAR2)
815 IS
816 BEGIN
817 -- Initialize message list if p_init_msg_list is set to TRUE.
818 IF FND_API.to_Boolean( p_init_msg_list ) THEN
819 FND_MSG_PUB.initialize;
820 END IF;
821
822 -- Initialize API return status to success
823 x_return_status := FND_API.G_RET_STS_SUCCESS;
824
825 IF (p_notnull_column IS NULL OR p_notnull_column = FND_API.G_MISS_CHAR) THEN
826 x_return_status := FND_API.G_RET_STS_ERROR;
827 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
828 FND_MESSAGE.Set_Name('IBC', 'API_MISSING_COLUMN');
829 FND_MESSAGE.Set_Token('COLUMN', p_column_name, FALSE);
830 FND_MSG_PUB.ADD;
831 END IF;
832 END IF;
833
834 FND_MSG_PUB.Count_And_Get(
835 p_count => x_msg_count,
836 p_data => x_msg_data);
837
838 END Validate_NotNULL_VARCHAR2;
839
840
841 PROCEDURE Validate_Content_Type_Status (
842 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
843 p_Content_Type_Status IN VARCHAR2,
844 X_Return_Status OUT NOCOPY VARCHAR2,
845 X_Msg_Count OUT NOCOPY NUMBER,
846 X_Msg_Data OUT NOCOPY VARCHAR2)
847 IS
848
849 CURSOR C_Content_Type_Status IS
850 SELECT lookup_code
851 FROM ibc_lookups lk
852 WHERE lookup_type = 'IBC_CTYPE_STATUS'
853 AND lookup_code = p_Content_Type_Status;
854
855 l_Content_Type_Status VARCHAR2(30);
856
857 BEGIN
858
859 -- Initialize message list if p_init_msg_list is set to TRUE.
860 IF FND_API.to_Boolean( p_init_msg_list ) THEN
861 FND_MSG_PUB.initialize;
862 END IF;
863
864 -- Initialize API return status to success
865 x_return_status := FND_API.G_RET_STS_SUCCESS;
866
867 IF (p_Content_Type_Status IS NOT NULL AND p_Content_Type_Status <> FND_API.G_MISS_CHAR) THEN
868 OPEN C_Content_Type_Status;
869 FETCH C_Content_Type_Status INTO l_Content_Type_Status;
870 IF (C_Content_Type_Status%NOTFOUND) THEN
871 CLOSE C_Content_Type_Status;
872 x_return_status := FND_API.G_RET_STS_ERROR;
873 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
874 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
875 FND_MESSAGE.Set_Token('COLUMN', 'CONTENT_TYPE_STATUS', FALSE);
876 FND_MSG_PUB.ADD;
877 END IF;
878 ELSE
879 CLOSE C_Content_Type_Status;
880 END IF;
881 END IF;
882
883 END Validate_Content_Type_Status;
884
885 PROCEDURE Validate_appl_short_name (
886 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
887 p_appl_short_name IN VARCHAR2,
888 x_application_id OUT NOCOPY NUMBER,
889 X_Return_Status OUT NOCOPY VARCHAR2,
890 X_Msg_Count OUT NOCOPY NUMBER,
891 X_Msg_Data OUT NOCOPY VARCHAR2)
892 IS
893 CURSOR C_Get_Appl_Id (x_short_name VARCHAR2) IS
894 SELECT application_id
895 FROM fnd_application_vl
896 WHERE application_short_name = x_short_name;
897
898 BEGIN
899
900
901 -- Initialize message list if p_init_msg_list is set to TRUE.
902 IF FND_API.to_Boolean( p_init_msg_list ) THEN
903 FND_MSG_PUB.initialize;
904 END IF;
905
906 -- Initialize API return status to success
907 x_return_status := FND_API.G_RET_STS_SUCCESS;
908
909 IF (p_appl_short_name IS NOT NULL AND p_appl_short_name <> FND_API.G_MISS_CHAR) THEN
910 OPEN C_Get_Appl_Id (p_appl_short_name);
911 FETCH C_Get_Appl_Id INTO x_application_id;
912 IF (C_Get_Appl_Id%NOTFOUND) THEN
913 CLOSE C_Get_Appl_Id;
914 x_return_status := FND_API.G_RET_STS_ERROR;
915 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
916 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
917 FND_MESSAGE.Set_Token('COLUMN', 'APPLICATION SHORT NAME', FALSE);
918 FND_MSG_PUB.ADD;
919 END IF;
920 ELSE
921 CLOSE C_Get_Appl_Id;
922 END IF;
923 END IF;
924
925 END Validate_appl_short_name;
926
927
928 PROCEDURE Validate_application_id (
929 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
930 p_application_id IN NUMBER,
931 X_Return_Status OUT NOCOPY VARCHAR2,
932 X_Msg_Count OUT NOCOPY NUMBER,
933 X_Msg_Data OUT NOCOPY VARCHAR2)
934 IS
935 CURSOR C_Get_Appl_Id IS
936 SELECT application_id
937 FROM fnd_application_vl
938 WHERE application_id = p_application_id;
939
940 l_temp NUMBER;
941
942 BEGIN
943
944
945 -- Initialize message list if p_init_msg_list is set to TRUE.
946 IF FND_API.to_Boolean( p_init_msg_list ) THEN
947 FND_MSG_PUB.initialize;
948 END IF;
949
950 -- Initialize API return status to success
951 x_return_status := FND_API.G_RET_STS_SUCCESS;
952
953 IF (p_application_id IS NOT NULL AND p_application_id <> FND_API.G_MISS_NUM) THEN
954 OPEN C_Get_Appl_Id;
955 FETCH C_Get_Appl_Id INTO l_temp;
956 IF (C_Get_Appl_Id%NOTFOUND) THEN
957 CLOSE C_Get_Appl_Id;
958 x_return_status := FND_API.G_RET_STS_ERROR;
959 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
960 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
961 FND_MESSAGE.Set_Token('COLUMN', 'APPLICATION ID', FALSE);
962 FND_MSG_PUB.ADD;
963 END IF;
964 ELSE
965 CLOSE C_Get_Appl_Id;
966 END IF;
967 END IF;
968
969 END Validate_application_id;
970
971
972 PROCEDURE Validate_Content_Type_Code (
973 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
974 p_Content_type_Code IN VARCHAR2,
975 X_Return_Status OUT NOCOPY VARCHAR2,
976 X_Msg_Count OUT NOCOPY NUMBER,
977 X_Msg_Data OUT NOCOPY VARCHAR2)
978 IS
979 CURSOR C_CType_Code IS
980 SELECT '1'
981 FROM ibc_content_types_vl
982 WHERE content_type_code = p_content_type_code;
983
984 l_temp CHAR(1);
985
986 BEGIN
987
988 -- Initialize message list if p_init_msg_list is set to TRUE.
989 IF FND_API.to_Boolean( p_init_msg_list ) THEN
990 FND_MSG_PUB.initialize;
991 END IF;
992
993 -- Initialize API return status to success
994 x_return_status := FND_API.G_RET_STS_SUCCESS;
995
996 IF (p_Content_type_Code IS NOT NULL AND p_Content_type_Code <> FND_API.G_MISS_CHAR) THEN
997 OPEN C_CType_Code;
998 FETCH C_CType_Code INTO l_temp;
999 IF (C_CType_Code%NOTFOUND) THEN
1000 CLOSE C_CType_Code;
1001 x_return_status := FND_API.G_RET_STS_ERROR;
1002 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1003 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1004 FND_MESSAGE.Set_Token('COLUMN', 'CONTENT TYPE CODE', FALSE);
1005 FND_MSG_PUB.ADD;
1006 END IF;
1007 ELSE
1008 CLOSE C_CType_Code;
1009 END IF;
1010 END IF;
1011
1012 END Validate_Content_Type_Code;
1013
1014
1015 PROCEDURE Validate_Data_Type_Code (
1016 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1017 p_Data_type_Code IN VARCHAR2,
1018 X_Return_Status OUT NOCOPY VARCHAR2,
1019 X_Msg_Count OUT NOCOPY NUMBER,
1020 X_Msg_Data OUT NOCOPY VARCHAR2)
1021 IS
1022 CURSOR C_Data_type_Code IS
1023 SELECT lookup_code
1024 FROM ibc_lookups lk
1025 WHERE lookup_type = 'IBC_ATTRIBUTE_DATA_TYPE'
1026 AND lookup_code = p_Data_type_Code;
1027
1028 l_Data_type_Code VARCHAR2(30);
1029
1030 BEGIN
1031
1032 -- Initialize message list if p_init_msg_list is set to TRUE.
1033 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1034 FND_MSG_PUB.initialize;
1035 END IF;
1036
1037 -- Initialize API return status to success
1038 x_return_status := FND_API.G_RET_STS_SUCCESS;
1039
1040 -- Data Type Code cannot be NULL
1041 IF (p_Data_type_Code IS NOT NULL AND p_Data_type_Code <> FND_API.G_MISS_CHAR) THEN
1042 OPEN C_Data_type_Code;
1043 FETCH C_Data_type_Code INTO l_Data_type_Code;
1044 IF (C_Data_type_Code%NOTFOUND) THEN
1045 CLOSE C_Data_type_Code;
1046 x_return_status := FND_API.G_RET_STS_ERROR;
1047 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1048 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1049 FND_MESSAGE.Set_Token('COLUMN', 'DATA_TYPE_CODE', FALSE);
1050 FND_MSG_PUB.ADD;
1051 END IF;
1052 ELSE
1053 CLOSE C_Data_type_Code;
1054 END IF;
1055 END IF;
1056
1057 END Validate_Data_Type_Code;
1058
1059
1060 PROCEDURE Validate_Default_value (
1061 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1062 p_data_type_code IN VARCHAR2,
1063 p_Default_value IN VARCHAR2,
1064 X_Return_Status OUT NOCOPY VARCHAR2,
1065 X_Msg_Count OUT NOCOPY NUMBER,
1066 X_Msg_Data OUT NOCOPY VARCHAR2)
1067 IS
1068
1069 BEGIN
1070
1071
1072 -- Initialize message list if p_init_msg_list is set to TRUE.
1073 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1074 FND_MSG_PUB.initialize;
1075 END IF;
1076
1077 -- Initialize API return status to success
1078 x_return_status := FND_API.G_RET_STS_SUCCESS;
1079
1080
1081 IF (p_Default_value IS NULL OR p_Default_value = FND_API.G_MISS_CHAR) THEN
1082 RETURN;
1083 END IF;
1084
1085 -- Check for valid Default_value is NOT NULL
1086 IF p_data_type_code = 'string' THEN
1087 NULL;
1088
1089 ELSIF p_data_type_code = 'html' THEN
1090 NULL;
1091
1092 ELSIF p_data_type_code = 'decimal' THEN
1093 NULL;
1094
1095 ELSIF p_data_type_code = 'dateTime' THEN
1096 NULL;
1097
1098 ELSIF p_data_type_code = 'url' THEN
1099 NULL;
1100
1101 ELSIF p_data_type_code = 'boolean' THEN
1102 NULL;
1103
1104 ELSIF p_data_type_code = 'component' THEN
1105 DECLARE
1106 CURSOR C_content_item_id IS
1107 SELECT content_item_id
1108 FROM ibc_content_items
1109 WHERE content_item_id = TO_NUMBER(p_default_value);
1110
1111 l_content_item_id NUMBER;
1112 BEGIN
1113 OPEN C_content_item_id;
1114 FETCH C_content_item_id INTO l_content_item_id;
1115 IF (C_content_item_id%NOTFOUND) THEN
1116 CLOSE C_content_item_id;
1117 x_return_status := FND_API.G_RET_STS_ERROR;
1118 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1119 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1120 FND_MESSAGE.Set_Token('COLUMN', 'DEFAULT VALUE', FALSE);
1121 FND_MSG_PUB.ADD;
1122 END IF;
1123 ELSE
1124 CLOSE C_content_item_id;
1125 END IF;
1126
1127 END;
1128
1129 ELSIF p_data_type_code = 'attachment' THEN
1130 DECLARE
1131 CURSOR C_file_id IS
1132 SELECT file_id
1133 FROM fnd_lobs
1134 WHERE file_id = p_default_value;
1135
1136 l_file_id NUMBER;
1137 BEGIN
1138 OPEN C_file_id;
1139 FETCH C_file_id INTO l_file_id;
1140 IF (C_file_id%NOTFOUND) THEN
1141 CLOSE C_file_id;
1142 x_return_status := FND_API.G_RET_STS_ERROR;
1143 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1144 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1145 FND_MESSAGE.Set_Token('COLUMN', 'DEFAULT VALUE', FALSE);
1146 FND_MSG_PUB.ADD;
1147 END IF;
1148 ELSE
1149 CLOSE C_file_id;
1150 END IF;
1151
1152 END;
1153
1154 END IF;
1155
1156 END Validate_Default_value;
1157
1158 PROCEDURE Validate_Reference_Code (
1159 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1160 p_data_type_code IN VARCHAR2,
1161 p_Reference_Code IN VARCHAR2,
1162 X_Return_Status OUT NOCOPY VARCHAR2,
1163 X_Msg_Count OUT NOCOPY NUMBER,
1164 X_Msg_Data OUT NOCOPY VARCHAR2)
1165 IS
1166 BEGIN
1167 -- Initialize message list if p_init_msg_list is set to TRUE.
1168 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1169 FND_MSG_PUB.initialize;
1170 END IF;
1171
1172 -- Initialize API return status to success
1173 x_return_status := FND_API.G_RET_STS_SUCCESS;
1174
1175 IF p_data_type_code = 'component' THEN
1176
1177 -- For CITEM the reference code must refer to a valid Content Type Code
1178 IF (p_reference_code IS NULL OR p_reference_code = FND_API.G_MISS_CHAR) THEN
1179 x_return_status := FND_API.G_RET_STS_ERROR;
1180 ELSE
1181
1182 Validate_Content_Type_Code (
1183 p_init_msg_list => p_init_msg_list,
1184 p_Content_type_Code => p_reference_code,
1185 X_Return_Status => X_Return_Status,
1186 X_Msg_Count => X_Msg_Count,
1187 X_Msg_Data => X_Msg_Data);
1188 END IF;
1189
1190 ELSE
1191 IF (p_reference_code IS NOT NULL AND p_reference_code <> FND_API.G_MISS_CHAR) THEN
1192 x_return_status := FND_API.G_RET_STS_ERROR;
1193 END IF;
1194
1195 END IF;
1196
1197 IF X_Return_Status <> FND_API.G_RET_STS_SUCCESS THEN
1198 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1199 FND_MESSAGE.Set_Token('COLUMN', 'Reference Code', FALSE);
1200 FND_MSG_PUB.ADD;
1201 END IF;
1202
1203 END Validate_Reference_Code;
1204
1205 PROCEDURE Validate_Min_Max_Instances (
1206 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
1207 p_Max_Instances IN NUMBER,
1208 p_Min_Instances IN NUMBER,
1209 X_Return_Status OUT NOCOPY VARCHAR2,
1210 X_Msg_Count OUT NOCOPY NUMBER,
1211 X_Msg_Data OUT NOCOPY VARCHAR2)
1212 IS
1213 BEGIN
1214
1215 -- Initialize message list if p_init_msg_list is set to TRUE.
1216 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1217 FND_MSG_PUB.initialize;
1218 END IF;
1219
1220 -- Initialize API return status to success
1221 x_return_status := FND_API.G_RET_STS_SUCCESS;
1222
1223 -- Max Instance cannot be greater than Min Instances
1224 IF (p_MAX_Instances < 1 OR p_min_instances < 0 OR NVL(p_Max_Instances,p_Min_Instances+1) < p_Min_Instances ) THEN
1225 x_return_status := FND_API.G_RET_STS_ERROR;
1226 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1227 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1228 FND_MESSAGE.Set_Token('COLUMN','MAX Instances', FALSE);
1229 FND_MSG_PUB.ADD;
1230 END IF;
1231 END IF;
1232
1233 END Validate_Min_Max_Instances;
1234
1235 PROCEDURE Validate_Resource (
1236 p_init_msg_list IN VARCHAR2,
1237 p_resource_id IN NUMBER,
1238 p_resource_type IN VARCHAR2,
1239 x_return_status OUT NOCOPY VARCHAR2,
1240 x_msg_count OUT NOCOPY NUMBER,
1241 x_msg_data OUT NOCOPY VARCHAR2)
1242 IS
1243
1244 -- For performance issues assuming only GROUPS to be valid
1245 -- and not using jtf_rs_all_resources_vl but jtf_rs_groups_vl
1246 CURSOR C_jtf_resources IS
1247 SELECT '1'
1248 FROM JTF_RS_GROUPS_VL
1249 WHERE group_id = p_resource_id;
1250
1251 l_tmp CHAR(1);
1252
1253 BEGIN
1254
1255 -- Initialize message list if p_init_msg_list is set to TRUE.
1256 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1257 FND_MSG_PUB.initialize;
1258 END IF;
1259
1260 -- Initialize API return status to success
1261 x_return_status := FND_API.G_RET_STS_SUCCESS;
1262
1263 IF (p_resource_id IS NOT NULL AND p_resource_id <> FND_API.G_MISS_NUM) THEN
1264 OPEN C_jtf_resources;
1265 FETCH C_jtf_resources INTO l_tmp;
1266 IF (C_jtf_resources%NOTFOUND) THEN
1267 CLOSE C_jtf_resources;
1268 x_return_status := FND_API.G_RET_STS_ERROR;
1269 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1270 FND_MESSAGE.Set_Name('IBC', 'API_INVALID_ID');
1271 FND_MESSAGE.Set_Token('COLUMN', 'RESOURCE_ID', FALSE);
1272 FND_MSG_PUB.ADD;
1273 END IF;
1274 ELSE
1275 CLOSE C_jtf_resources;
1276 END IF;
1277 END IF;
1278
1279 END Validate_Resource;
1280
1281 /****************************************************
1282 -------------FUNCTIONS--------------------------------------------------------------------------
1283 ****************************************************/
1284 -- --------------------------------------------------------------
1285 -- IBC_VALIDATE_PVT.isTranslationApproved
1286 --
1287 -- Checks to see if content item version translation is approved
1288 --
1289 -- --------------------------------------------------------------
1290 FUNCTION isTranslationApproved(f_citem_ver_id IN NUMBER
1291 ,f_language IN VARCHAR2
1292 )
1293 RETURN VARCHAR2
1294 IS
1295 CURSOR c_app IS
1296 SELECT
1297 citem_version_id
1298 FROM
1299 ibc_citem_versions_tl
1300 WHERE
1301 citem_version_id = f_citem_ver_id
1302 AND language = f_language
1303 AND citem_translation_status = IBC_UTILITIES_PUB.G_STV_APPROVED;
1304
1305 temp NUMBER;
1306 BEGIN
1307 open c_app;
1308 fetch c_app into temp;
1309
1310 if (c_app%NOTFOUND) then
1311 close c_app;
1312 RETURN FND_API.g_false;
1313 else
1314 close c_app;
1315 RETURN FND_API.g_true;
1316 end if;
1317 END isTranslationApproved;
1318
1319
1320 -- --------------------------------------------------------------
1321 -- IBC_VALIDATE_PVT.getItemBaseLanguage
1322 --
1323 -- Get the base language for the content item
1324 --
1325 -- --------------------------------------------------------------
1326 FUNCTION getItemBaseLanguage(f_content_item_id IN NUMBER)
1327 RETURN VARCHAR2
1328 IS
1329 CURSOR c_app IS
1330 SELECT
1331 base_language
1332 FROM
1333 ibc_content_items
1334 WHERE
1335 content_item_id = f_content_item_id;
1336
1337 temp VARCHAR2(35);
1338 BEGIN
1339 open c_app;
1340 fetch c_app into temp;
1341
1342 if (c_app%NOTFOUND) then
1343 close c_app;
1344 RETURN 'XXX';
1345 else
1346 close c_app;
1347 RETURN temp;
1348 end if;
1349 END getItemBaseLanguage;
1350
1351
1352 END Ibc_Validate_Pvt;