[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;