DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_SELF_SERVICE_DFLEX_PUB

Source


1 PACKAGE BODY PA_SELF_SERVICE_DFLEX_PUB AS
2 /* $Header: PAXPDFFB.pls 120.1 2005/08/11 12:27:58 eyefimov noship $ */
3 
4 C_strDFlexColNamePrefix CONSTANT VARCHAR2(20) := 'ATTRIBUTE';
5 C_iNumMaxAttribute      CONSTANT INTEGER := 10;
6 C_iNumMaxDFlexSeg       CONSTANT INTEGER := 10;
7 
8 /*
9 Written By   :  AANDRA
10 Purpose      :  To append current procedure/function name to
11 		a string to simulate a call stack
12 Input        :  Module Name
13 Output       :
14 Input Output :  Call Stack - for debug purposes
15 Assumption   :
16 */
17 -----------------------------------------------------------------------------
18 PROCEDURE UpdateCallingSequence(
19 		p_sCall_stack 		IN OUT NOCOPY VARCHAR2,
20 		p_procedure_name 	IN     VARCHAR2) IS
21 -----------------------------------------------------------------------------
22 BEGIN
23 
24   p_sCall_stack := p_sCall_stack || ' -->
25  ' || p_procedure_name;
26 
27 END UpdateCallingSequence;
28 
29 ------------------------------------------------------------------------------
30 PROCEDURE IsDFlexUsed(
31         p_recDFlexR             IN FND_DFLEX.DFLEX_R,
32 	    p_recContextsDR  	    IN FND_DFLEX.CONTEXTS_DR,
33         p_sErrorStack           IN VARCHAR2,
34         x_bResult               OUT NOCOPY BOOLEAN,
35         x_sErrorType            OUT NOCOPY VARCHAR2,
36         x_sErrorStack           OUT NOCOPY VARCHAR2,
37         x_sErrorStage           OUT NOCOPY VARCHAR2,
38         x_sErrorMessage         OUT NOCOPY VARCHAR2)
39 ------------------------------------------------------------------------------
40 IS
41 
42   l_recContextR     FND_DFLEX.CONTEXT_R;
43   l_recSegmentsDR   FND_DFLEX.SEGMENTS_DR;
44   l_sModuleName     VARCHAR2(200)  := 'PA_SELF_SERVICE_DFLEX_PVT.IsDFlexUsed';
45 
46   l_sErrorStack         VARCHAR2(2000);
50 
47   l_sErrorStage         VARCHAR2(2000);
48 
49 BEGIN
51   -- Set the calling context
52   l_sErrorStage := 'Update calling sequence';
53   l_sErrorStack := p_sErrorStack;
54   UpdateCallingSequence(l_sErrorStack, l_sModuleName);
55 
56   -- Initialize result
57   x_bResult := FALSE;
58 
59   l_sErrorStage := 'Loop through all contexts and count number of segments';
60   FOR I in 1 .. p_recContextsDR.ncontexts LOOP
61 
62     -- Generate context if not the global and is enabled
63     IF (p_recContextsDR.is_enabled(I)) THEN
64 
65       -- Get context information
66       l_recContextR.flexfield := p_recDFlexR;
67       l_recContextR.context_code :=  p_recContextsDR.context_code(I);
68       FND_DFLEX.Get_Segments(l_recContextR, l_recSegmentsDR, TRUE);
69       IF (l_recSegmentsDR.nsegments > 0) THEN
70         x_bResult := TRUE;
71         EXIT;
72       END IF;
73     END IF;
74   END LOOP;
75 
76 EXCEPTION
77 
78   WHEN OTHERS THEN
79     -- Unexpected error
80     x_sErrorType := 'U';
81     x_sErrorStack := l_sErrorStack;
82     x_sErrorStage := l_sErrorStage;
83     x_sErrorMessage := SUBSTRB(SQLERRM,1,2000);
84     x_bResult := FALSE;
85 
86 END IsDFlexUsed;
87 
88 ------------------------------------------------------------------------------
89 PROCEDURE GetDFlexReferenceField(
90         p_recDFlexDR            IN FND_DFLEX.DFLEX_DR,
91         p_sErrorStack           IN VARCHAR2,
92 	    x_strReferenceField  	OUT NOCOPY VARCHAR2,
93         x_sErrorType            OUT NOCOPY VARCHAR2,
94         x_sErrorStack           OUT NOCOPY VARCHAR2,
95         x_sErrorStage           OUT NOCOPY VARCHAR2,
96         x_sErrorMessage         OUT NOCOPY VARCHAR2)
97 ------------------------------------------------------------------------------
98 IS
99   l_sModuleName     VARCHAR2(200)  := 'PA_SELF_SERVICE_DFLEX_PUB.GetDFlexReferenceField';
100 
101   l_sErrorStack         VARCHAR2(2000);
102   l_sErrorStage         VARCHAR2(2000);
103 
104 BEGIN
105 
106   -- Set the calling context
107   l_sErrorStage := 'Update calling sequence';
108   l_sErrorStack := p_sErrorStack;
109   UpdateCallingSequence(l_sErrorStack,
110                         l_sModuleName);
111 
112   -- Get the reference field
113   x_strReferenceField := p_recDFlexDR.default_context_field;
114 
115   -- Set error type
116   x_sErrorType := NULL;
117 
118 EXCEPTION
119 
120   WHEN OTHERS THEN
121     -- Unexpected error
122     x_sErrorType := 'U';
123     x_sErrorStack := l_sErrorStack;
124     x_sErrorStage := l_sErrorStage;
125     x_sErrorMessage := SUBSTRB(SQLERRM,1,2000);
126     x_strReferenceField := Null;
127 
128 END GetDFlexReferenceField;
129 
130 ------------------------------------------------------------------------------
131 PROCEDURE InitDFlex(
132         p_strProductName        IN VARCHAR2,
133 	    p_strDFlexName	      	IN VARCHAR2,
134         p_sErrorStack           IN VARCHAR2,
135         x_recDFlexR             OUT NOCOPY FND_DFLEX.DFLEX_R,           /*2672653*/
136         x_recDFlexDR            OUT NOCOPY FND_DFLEX.DFLEX_DR,          /*2672653*/
137 	    x_recContextsDR  	    OUT NOCOPY FND_DFLEX.CONTEXTS_DR,       /*2672653*/
138         x_sErrorType            OUT NOCOPY VARCHAR2,
139         x_sErrorStack           OUT NOCOPY VARCHAR2,
140         x_sErrorStage           OUT NOCOPY VARCHAR2,
141         x_sErrorMessage         OUT NOCOPY VARCHAR2)
142 ------------------------------------------------------------------------------
143 IS
144   l_sModuleName             VARCHAR2(200)  := 'PA_SELF_SERVICE_DFLEX_PVT.InitDflex';
145 
146   l_sErrorStack         VARCHAR2(2000);
147   l_sErrorStage         VARCHAR2(2000);
148 
149 BEGIN
150 
151   -- Set the calling context
152   l_sErrorStage := 'Update calling sequence';
153   l_sErrorStack := p_sErrorStack;
154   UpdateCallingSequence(l_sErrorStack, l_sModuleName);
155 
156   l_sErrorStage := 'Get flexfield info';
157   FND_DFLEX.Get_Flexfield(p_strProductName, p_strDFlexName,
158                           x_recDFlexR, x_recDFlexDR);
159 
160   l_sErrorStage := 'Get context info';
161   FND_DFLEX.Get_Contexts(x_recDFlexR, x_recContextsDR);
162 
163   -- No errors encountered;
164   x_sErrorType := NULL;
165 
166 EXCEPTION
167 
168   WHEN OTHERS THEN
169     -- Unexpected error
170     x_sErrorType := 'U';
171     x_sErrorStack := l_sErrorStack;
172     x_sErrorStage := l_sErrorStage;
173     x_sErrorMessage := SUBSTRB(SQLERRM,1,2000);
174 
175 END InitDFlex;
176 
177 ------------------------------------------------------------------------------
178 PROCEDURE ValidateDFlex(
179         p_strProductName        IN VARCHAR2,
180 	    p_strDFlexName	      	IN VARCHAR2,
181 	    p_recContextsDR  	    IN FND_DFLEX.CONTEXTS_DR,
182 	    p_strContextName      	IN VARCHAR2,
183 	    p_arrDFlex              IN DFlex_Array,
184         p_sErrorStack           IN VARCHAR2,
185         x_sErrorType            OUT NOCOPY VARCHAR2,
186         x_sErrorStack           OUT NOCOPY VARCHAR2,
187         x_sErrorStage           OUT NOCOPY VARCHAR2,
188         x_sErrorMessage         OUT NOCOPY VARCHAR2)
189 ------------------------------------------------------------------------------
190 IS
191 
195   l_sModuleName         VARCHAR2(200)  := 'PA_SELF_SERVICE_DFLEX_PVT.ValidateDflex';
192   l_iContextIndex       BINARY_INTEGER;
193   l_sColName            VARCHAR2(20);
194   l_iMaxIndex           INTEGER;
196 
197   l_sErrorStack         VARCHAR2(2000);
198   l_sErrorStage         VARCHAR2(2000);
199 
200 BEGIN
201 
202   -- Set the calling context
203   l_sErrorStage := 'Update calling sequence';
204   l_sErrorStack := p_sErrorStack;
205   UpdateCallingSequence(l_sErrorStack, l_sModuleName);
206 
207   l_sErrorStage := 'Get the context index';
208   l_iContextIndex := NULL;
209   FOR i IN 1 .. p_recContextsDR.nContexts LOOP
210     IF ((p_recContextsDR.is_enabled(I)) AND
211         (p_recContextsDR.context_name(i) = p_strContextName)) THEN
212       l_iContextIndex := i;
213     END IF;
214   END LOOP;
215 
216   -- Set the context value to prepare for FND_FLEX_DESCVAL.Validate_DescCols
217   -- In case where only have globals then pass null
218   l_sErrorStage := 'Set the context value';
219   IF (l_iContextIndex IS NULL) THEN
220     FND_FLEX_DESCVAL.Set_Context_Value(null);
221   ELSE
222     FND_FLEX_DESCVAL.Set_Context_Value(
223      p_recContextsDR.context_code(l_iContextIndex));
224   END IF;
225 
226   -- Iterate only up to p_arrDFlex.Count number of times
227   l_iMaxIndex := p_arrDFlex.COUNT;
228   IF (l_iMaxIndex > C_iNumMaxAttribute) THEN
229     l_iMaxIndex := C_iNumMaxAttribute;
230   END IF;
231 
232   l_sErrorStage := 'Set the values for the columns for non null fields';
233   FOR I in 1 .. p_arrDFlex.COUNT LOOP
234     l_sColName := C_strDFlexColNamePrefix || I;
235     FND_FLEX_DESCVAL.Set_Column_Value(l_sColName, p_arrDFlex(I));
236   END LOOP;
237 
238   l_sErrorStage := 'Calling FND Validate_Desccols';
239   IF (NOT FND_FLEX_DESCVAL.Validate_Desccols(
240                                      appl_short_name => p_strProductName,
241   				     desc_flex_name => p_strDFlexName)) THEN
242 
243     -- Descriptive flexfields are not valid
244     x_sErrorType := 'E';
245     x_sErrorStack := l_sErrorStack;
246     x_sErrorStage := l_sErrorStage;
247     x_sErrorMessage := FND_FLEX_DESCVAL.error_message;
248 
249   ELSE
250 
251     -- Successful validation
252     x_sErrorType := NULL;
253 
254   END IF;
255 
256 EXCEPTION
257 
258   WHEN OTHERS THEN
259     -- Unexpected error
260     x_sErrorType := 'U';
261     x_sErrorStack := l_sErrorStack;
262     x_sErrorStage := l_sErrorStage;
263     x_sErrorMessage := SUBSTRB(SQLERRM,1,2000);
264 
265 END ValidateDFlex;
266 
267 PROCEDURE InitDFlex(p_arrDFlex OUT NOCOPY DFlex_Array)               /*2672653*/
268 IS
269 BEGIN
270   FOR I IN 1 .. C_iNumMaxDFlexSeg LOOP
271     p_arrDFlex(I) := NULL;
272   END LOOP;
273 END InitDFlex;
274 
275 
276 FUNCTION IsDFlexArrayEmpty(p_arrDFlex IN DFlex_Array)
277 RETURN BOOLEAN
278 IS
279 BEGIN
280   FOR I IN 1 .. p_arrDFlex.COUNT LOOP
281     IF p_arrDFlex(I) IS NOT NULL THEN
282       RETURN FALSE;
283     END IF;
284   END LOOP;
285   RETURN TRUE;
286 END IsDFlexArrayEmpty;
287 
288 END PA_SELF_SERVICE_DFLEX_PUB;