DBA Data[Home] [Help]

PACKAGE: APPS.FND_FLEX_SERVER1

Source


1 PACKAGE fnd_flex_server1 AUTHID CURRENT_USER AS
2 /* $Header: AFFFSV1S.pls 120.1.12010000.1 2008/07/25 14:14:25 appldev ship $ */
3 
4   --------
5   -- PRIVATE INTER-PACKAGE TYPES
6   --
7   --  Segment array is 1-based containing entries for i <= i <= nsegs
8   --
9 
10   TYPE ValueArray IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;
11   TYPE ValueIdArray IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;
12   TYPE ValueDescArray IS TABLE OF VARCHAR2(1000) INDEX BY BINARY_INTEGER;
13 
14   TYPE StringArray IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
15   TYPE CharArray IS TABLE OF CHAR INDEX BY BINARY_INTEGER;
16   TYPE NumberArray IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
17   TYPE BooleanArray IS TABLE OF BOOLEAN INDEX BY BINARY_INTEGER;
18 
19   TYPE ValAttribArray IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
20   TYPE QualNameArray IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
21   TYPE TabColArray IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
22   TYPE ErrMsgArray IS TABLE OF VARCHAR2(100) INDEX BY BINARY_INTEGER;
23   TYPE AppNameArray IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
24 
25   TYPE FlexStructId IS RECORD
26   (isa_key_flexfield BOOLEAN,
27   application_id     FND_ID_FLEX_SEGMENTS.APPLICATION_ID%TYPE,
28   id_flex_code	     FND_ID_FLEX_SEGMENTS.ID_FLEX_CODE%TYPE,
29   id_flex_num        FND_ID_FLEX_SEGMENTS.ID_FLEX_NUM%TYPE,
30   desc_flex_name     FND_DESCR_FLEX_CONTEXTS.DESCRIPTIVE_FLEXFIELD_NAME%TYPE,
31   desc_flex_context  FND_DESCR_FLEX_CONTEXTS.DESCRIPTIVE_FLEX_CONTEXT_CODE%TYPE
32   );
33 
34   TYPE DescFlexInfo IS RECORD
35   (application_id	FND_DESCRIPTIVE_FLEXS.APPLICATION_ID%TYPE,
36    name			FND_DESCRIPTIVE_FLEXS.DESCRIPTIVE_FLEXFIELD_NAME%TYPE,
37    description		FND_DESCRIPTIVE_FLEXS_TL.DESCRIPTION%TYPE,
38    table_appl_id	FND_DESCRIPTIVE_FLEXS.TABLE_APPLICATION_ID%TYPE,
39    table_name		FND_DESCRIPTIVE_FLEXS.APPLICATION_TABLE_NAME%TYPE,
40    table_id		FND_TABLES.TABLE_ID%TYPE,
41    context_required	FND_DESCRIPTIVE_FLEXS.CONTEXT_REQUIRED_FLAG%TYPE,
42    context_column	FND_DESCRIPTIVE_FLEXS.CONTEXT_COLUMN_NAME%TYPE,
43    context_override	FND_DESCRIPTIVE_FLEXS.CONTEXT_USER_OVERRIDE_FLAG%TYPE,
44    segment_delimiter FND_DESCRIPTIVE_FLEXS.CONCATENATED_SEGMENT_DELIMITER%TYPE,
45    protected_flag	FND_DESCRIPTIVE_FLEXS.PROTECTED_FLAG%TYPE,
46    default_context	FND_DESCRIPTIVE_FLEXS.DEFAULT_CONTEXT_VALUE%TYPE,
47    reference_field	FND_DESCRIPTIVE_FLEXS.DEFAULT_CONTEXT_FIELD_NAME%TYPE,
48    context_override_value_set_id  FND_DESCRIPTIVE_FLEXS.context_override_value_set_id%TYPE,
49    context_default_type           FND_DESCRIPTIVE_FLEXS.context_default_type%TYPE,
50    context_default_value          FND_DESCRIPTIVE_FLEXS.context_default_value%TYPE,
51    context_runtime_property_funct FND_DESCRIPTIVE_FLEXS.context_runtime_property_funct%TYPE);
52 
53   TYPE CombTblInfo IS RECORD
54 	(table_application_id		NUMBER,
55 	combination_table_id		NUMBER,
56 	application_table_name		VARCHAR2(30),
57 	select_comb_from                VARCHAR2(30),
58 	application_table_type		VARCHAR2(1),
59 	unique_id_column_name		VARCHAR2(30),
60 	set_defining_column_name	VARCHAR2(30));
61 
62   TYPE FlexStructInfo IS RECORD
63 	(maximum_concatenation_len	NUMBER(15),
64 	concatenation_len_warning	VARCHAR2(240),
65 	enabled_flag			VARCHAR2(1),
66 	concatenated_segment_delimiter	VARCHAR2(1),
67 	cross_segment_validation_flag	VARCHAR2(1),
68 	dynamic_inserts_feasible_flag	VARCHAR2(1),
69 	dynamic_inserts_allowed_flag	VARCHAR2(1));
70 
71   TYPE FlexQualTable IS RECORD
72        (nentries			NUMBER,
73         seg_indexes			NumberArray,
74         fq_names			QualNameArray);
75 
76   TYPE DerivedVals IS RECORD
77        (enabled_flag		  	VARCHAR2(1),
78 	summary_flag			VARCHAR2(1),
79 	start_valid			DATE,
80 	end_valid			DATE);
81 
82   TYPE Qualifiers IS RECORD
83        (nquals				NUMBER,
84         fq_names			QualNameArray,
85         sq_names			QualNameArray,
86         sq_values			ValAttribArray,
87         derived_cols			TabColArray);
88 
89   TYPE Vrules IS RECORD
90        (nvrules				NUMBER,
91         fq_names			QualNameArray,
92         sq_names			QualNameArray,
93         ie_flags			CharArray,
94         cat_vals			ValAttribArray,
95 	app_names			AppNameArray,
96         err_names			ErrMsgArray);
97 
98   TYPE SegFormats IS RECORD
99        (nsegs				NUMBER,
100         vs_format			CharArray,
101         vs_maxsize			NumberArray);
102 
103   TYPE ColumnValues IS RECORD
104        (ncolumns			NUMBER,
105 	column_names			TabColArray,
106 	column_types			CharArray,
107 	column_values			StringArray);
108 
109   TYPE ColumnDefinitions IS RECORD
110        (context_value_set		BOOLEAN,
111 	context_value			VARCHAR2(80),
112 	colvals				ColumnValues);
113 
114 --  Parsed version of the DISPLAYED token.
115 --  If no_segs_displayed is TRUE then no segments are displayed.
116 --  If some segments are displayed, then segflags[] array
117 --  determines whether each segment is displayed.  Segflags has one entry
118 --  for each enabled segment in the order of segment_num.
119 --
120   TYPE DisplayedSegs IS RECORD
121        (n_segflags		NUMBER,
122 	segflags		BooleanArray);
123 
124 --  Explanation of value validation flags:
125 --
126 --  values_not_ids is TRUE if values rather than ids passed to validate_struct()
127 --  Defaults all displayed values which are null if default_all_displayed.
128 --  Defaults all required values which are null if default_all_required.
129 --  Defaults only those required values which are not displayed if
130 --    default_non_displayed.
131 --  If allow_nulls is TRUE then null required segments are valid.
132 --  message_on_null means set value error message if required segment is null.
133 --  If all_orphans_valid is TRUE should consider all possible dependent
134 --    values to be valid if the parent value is null.
135 --  stop_on_value_error means stop segment validation on non-security value
136 --    error.  Validation always stops if error is more serious than
137 --    that the user enterd a bad value.
138 --  stop_on_security means stop segment validation if a security violated.
139 --  message_on_security means set value error message if security violated.
140 --  Does not check value security rules if ignore_security is TRUE
141 --  Does not check if value is disabled or expired if ignore_disabled TRUE.
142 --
143   /* bug872437 : invoking_mode is added. */
144 
145   TYPE ValueValidationFlags IS RECORD
146        (values_not_ids			BOOLEAN,
147 	default_all_displayed		BOOLEAN,
148 	default_all_required		BOOLEAN,
149 	default_non_displayed		BOOLEAN,
150 	allow_nulls			BOOLEAN,
151 	message_on_null			BOOLEAN,
152 	all_orphans_valid		BOOLEAN,
153 	exact_nsegs_required		BOOLEAN,
154 	stop_on_value_error		BOOLEAN,
155 	stop_on_security		BOOLEAN,
156 	message_on_security		BOOLEAN,
157 	ignore_security			BOOLEAN,
158 	ignore_expired			BOOLEAN,
159 	ignore_disabled			BOOLEAN,
160 	invoking_mode                   VARCHAR2(10));
161 
162 
163   ----------------------------------
164   -- PRIVATE INTER-PACKAGE CONSTANTS
165   --
166 
167   --  These are used for TOKEN separator characters in parsing
168   --  and returning VRULES, DERIVED and VALATT.  And they are also
169   --  used to separate multiple messages, and in checking Vrules
170 
171   SEPARATOR		CONSTANT VARCHAR2(4) := '\n';
172   TERMINATOR		CONSTANT VARCHAR2(4) := '\0';
173   DATETIME_FMT		CONSTANT VARCHAR2(21) := 'YYYY/MM/DD HH24:MI:SS';
174 
175   --  Components of a value
176 
177   VC_DISPVAL		CONSTANT BINARY_INTEGER := 1;
178   VC_VALUE		CONSTANT BINARY_INTEGER := 2;
179   VC_ID			CONSTANT BINARY_INTEGER := 3;
180   VC_DESCRIPTION	CONSTANT BINARY_INTEGER := 4;
181 
182 
183   --  Return status for validate_struct() and combination validation
184   --  Everything but UNSUPPORTED and ERROR represent errors in what the
185   --  user typed in as the combination.
186   --
187   --  VALID means everything ok.
188   --  SECURED means one or more values violate security rules, but otherwise
189   --    everything else is ok.
190   --  VALUES means there is one or more non-security value error.
191   --  COMBNOTFOUND means dynamic inserts off and combination does not exist.
192   --    Note that if combination not found by LOADID() this is ERROR.
193   --  WHERECLAUSEFAILURE
194   --    Combination exists but additonal where clause fails.
195   --  CROSSVAL means values violate cross-validation rules.
196   --  UNSUPPORTED means server cannot validate because of :block.field or
197   --    value validation type not supported by server.
198   --  ERROR means inconsistincy in the flex definition or structure.  This is
199   --    not returned merely for errors in what the user typed in.
200 
201    VV_VALID		CONSTANT NUMBER := 0;
202    VV_SECURED		CONSTANT NUMBER := 30;
203    VV_VALUES		CONSTANT NUMBER := 100;
204    VV_COMBNOTFOUND	CONSTANT NUMBER := 200;
205    VV_WHEREFAILURE      CONSTANT NUMBER := 250;
206    VV_CROSSVAL		CONSTANT NUMBER := 300;
207    VV_COMBEXISTS	CONSTANT NUMBER := 400;
208    VV_UNSUPPORTED	CONSTANT NUMBER := 900;
209    VV_ERROR		CONSTANT NUMBER := 1000;
210    VV_CTXTNOSEG         CONSTANT NUMBER := 1100;
211 
212 
213   --  Flexfield value validation status codes
214   --  These codes are used to indicate the status of each segment value.
215 
216  /* Non-value error validating segment */
217   FF_VERROR       CONSTANT VARCHAR2(1) := '*';
218 
219   -- The following codes are compatible with the client definitions.
220   --
221 
222  /* Value is valid */
223   FF_VVALID       CONSTANT VARCHAR2(1) := 'V';
224 
225  /* validated and not in RDBMS */
226   FF_VNOTFOUND    CONSTANT VARCHAR2(1) := 'N';
227 
228  /* valid, but not sdate <= vdate <= edate */
229   FF_VEXPIRED     CONSTANT VARCHAR2(1) := 'E';
230 
231  /* valid, but not enabled  */
232   FF_VDISABLED    CONSTANT VARCHAR2(1) := 'D';
233 
234  /* Valid, but Security violation */
235   FF_VSECURED     CONSTANT VARCHAR2(1) := 'S';
236 
237  /* Indicates we don't know whether or not value is valid. */
238   FF_VUNKNOWN     CONSTANT VARCHAR2(1) := 'U';
239 
240  /* Mandatory segment is null */
241   FF_VREQUIRED    CONSTANT VARCHAR2(1) := 'M';
242 
243  /* Format violation */
244   FF_VFORMAT      CONSTANT VARCHAR2(1) := 'F';
245 
246  /* Segment violates Vrule.  Value Rule - qualifiers */
247   FF_VVRULE       CONSTANT VARCHAR2(1) := 'Q';
248 
249  /* valu out of bounds not BETWEEN min AND max */
250   FF_VBOUNDS      CONSTANT VARCHAR2(1) := 'B';
251 
252  /* Orphaned - parent is null... */
253   FF_VORPHAN      CONSTANT VARCHAR2(1) := 'O';
254 
255  /* Inter segment range.  Range flex min is larger than max.  Not used here. */
256   FF_VSRANGE      CONSTANT VARCHAR2(1) := 'R';
257 
258  /* Key flex column range.  Not used.  */
259   FF_VCRANGE      CONSTANT VARCHAR2(1) := 'r';
260 
261  /* Descr context valid but no segs defined */
262   FF_CTXTNOSEG    CONSTANT VARCHAR2(1) := 'T';
263 
264   --  The following codes indicate errors at the combination level
265 
266  /* Duplicate combination */
267   FF_VDUPLICATE   CONSTANT VARCHAR2(1) := '2';
268 
269  /* New combination, and inserts not allowed */
270   FF_VNOINSERT    CONSTANT VARCHAR2(1) := '0';
271 
272  /* Cross validation failure */
273   FF_VXVAL        CONSTANT VARCHAR2(1) := 'X';
274 
275 
276    --  The following is used at both the segment and the combination level.
277 
278  /* Generic Invalid - used by user-exit.  Not used yet in PLSQL package. */
279   FF_VINVALID     CONSTANT VARCHAR2(1) := 'I';
280 
281   /* This debug level must be changed through set_debugging() procedure. */
282   --  Debugging information
283   g_debug_level NUMBER := 0;
284   --
285   -- 'OFF'       : 0
286   -- 'ERROR'     : 1
287   -- 'EXCEPTION' : 2
288   -- 'EVENT'     : 3
289   -- 'PROCEDURE' : 4
290   -- 'STATEMENT' : 5
291   -- 'ALL'       : 6
292   --
293 
294 /* ------------------------------------------------------------------------  */
295 
296 -- --	Breaks concatenated segments into separate columns
297 -- --	in rule-lines table.
298 -- --
299 -- --	Use ONLY for FND_FLEX_VALIDATION_RULE_LINES_T1 trigger.
300 -- --
301 --
302 --   FUNCTION breakup_segs(appid IN NUMBER,
303 -- 		flex_code IN VARCHAR2, flex_num IN NUMBER,
304 -- 		catsegs IN VARCHAR2, nsegs OUT NUMBER,
305 -- 		seg1  OUT VARCHAR2, seg2  OUT VARCHAR2,
309 -- 		seg9  OUT VARCHAR2, seg10 OUT VARCHAR2,
306 -- 		seg3  OUT VARCHAR2, seg4  OUT VARCHAR2,
307 -- 		seg5  OUT VARCHAR2, seg6  OUT VARCHAR2,
308 -- 		seg7  OUT VARCHAR2, seg8  OUT VARCHAR2,
310 -- 		seg11 OUT VARCHAR2, seg12 OUT VARCHAR2,
311 -- 		seg13 OUT VARCHAR2, seg14 OUT VARCHAR2,
312 -- 		seg15 OUT VARCHAR2, seg16 OUT VARCHAR2,
313 -- 		seg17 OUT VARCHAR2, seg18 OUT VARCHAR2,
314 -- 		seg19 OUT VARCHAR2, seg20 OUT VARCHAR2,
315 -- 		seg21 OUT VARCHAR2, seg22 OUT VARCHAR2,
316 -- 		seg23 OUT VARCHAR2, seg24 OUT VARCHAR2,
317 -- 		seg25 OUT VARCHAR2, seg26 OUT VARCHAR2,
318 -- 		seg27 OUT VARCHAR2, seg28 OUT VARCHAR2,
319 -- 		seg29 OUT VARCHAR2, seg30 OUT VARCHAR2) RETURN NUMBER;
320 
321 /* -------------------------------------------------------------------- */
322 /*    		          Private definitions                       	*/
323 /*									*/
324 /*	The following functions are for use internal only by the 	*/
325 /*	FND_FLEX_SERVER package.  They are externalized only because    */
326 /*	the flexfield validation routines cannot be put into a single	*/
327 /*	package.  They are not supported for any other purpose and	*/
328 /*	will almost certainly change without notice.			*/
329 /* -------------------------------------------------------------------- */
330 
331   FUNCTION parse_where_token(clause_in  IN  VARCHAR2,
332 			     clause_out OUT nocopy VARCHAR2) RETURN NUMBER;
333 
334   FUNCTION check_comb_vrules(vrs    IN  Vrules,
335 			     sqs    IN  Qualifiers,
336 			     sumflg IN  VARCHAR2) RETURN NUMBER;
337 
338   FUNCTION vals_secured(fstruct	IN  FlexStructId,
339     			nsegs	IN  NUMBER,
340 			segs	IN  StringArray,
341 			displ	IN  DisplayedSegs,
342 			uappid  IN  NUMBER,
343 			respid  IN  NUMBER) RETURN NUMBER;
344 
345   FUNCTION validate_struct(fstruct	IN  FlexStructId,
346 			   tbl_apid	IN  NUMBER,
347 			   tbl_id	IN  NUMBER,
348     			   nsegs_in	IN  NUMBER,
349 			   segs		IN  StringArray,
350 			   dispsegs	IN  DisplayedSegs,
351 			   vflags	IN  ValueValidationFlags,
352 		           v_date  	IN  DATE,
353 			   v_ruls	IN  Vrules,
354 			   uappid  	IN  NUMBER,
355 			   respid  	IN  NUMBER,
356 			   nsegs_out	OUT nocopy NUMBER,
357 			   segfmts  	OUT nocopy SegFormats,
358 			   segstats	OUT nocopy VARCHAR2,
359   			   tabcols	OUT nocopy TabColArray,
360 			   tabcoltypes	OUT nocopy CharArray,
361 			   v_dispvals	OUT nocopy ValueArray,
362 			   v_vals	OUT nocopy ValueArray,
363 			   v_ids	OUT nocopy ValueIdArray,
364 			   v_descs	OUT nocopy ValueDescArray,
365 			   desc_lens	OUT nocopy NumberArray,
366 			   dvals	OUT nocopy DerivedVals,
367 			   dquals	OUT nocopy Qualifiers,
368   			   errsegn	OUT nocopy NUMBER) RETURN NUMBER;
369 
370 /* ------------------------------------------------------------------------  */
371 --  General utility functions
372 --
373 
374   FUNCTION to_stringarray(catsegs IN  VARCHAR2,
375 		          sepchar in  VARCHAR2,
376 		          segs    OUT nocopy StringArray) RETURN NUMBER;
377 
378   FUNCTION from_stringarray(nsegs   IN NUMBER,
379 		            segs    IN StringArray,
380 			    sepchar IN VARCHAR2) RETURN VARCHAR2;
381 
382   FUNCTION to_stringarray2(catsegs IN  VARCHAR2,
383 			   sepchar in  VARCHAR2,
384 			   segs    OUT nocopy StringArray) RETURN NUMBER;
385 
386   FUNCTION from_stringarray2(nsegs   IN NUMBER,
387 			     segs    IN StringArray,
388 			     sepchar IN VARCHAR2) RETURN VARCHAR2;
389 
390   PROCEDURE x_inrange_clause(valstr  IN VARCHAR2,
391 			     valtype IN VARCHAR2,
392 			     mincol  IN VARCHAR2,
393 			     maxcol  IN VARCHAR2);
394 
395   FUNCTION select_clause(colname     IN  VARCHAR2,
396 			 coltype     IN  VARCHAR2,
397 			 v_component IN  BINARY_INTEGER,
398 			 vs_fmt      IN  VARCHAR2,
399 			 vs_len      IN  NUMBER) RETURN VARCHAR2;
400 
401   PROCEDURE x_compare_clause(coltype     IN  VARCHAR2,
402 			     colname     IN  VARCHAR2,
403 			     char_val    IN  VARCHAR2,
404 			     v_component IN  BINARY_INTEGER,
405 			     vs_fmt      IN  VARCHAR2,
406 			     vs_len      IN  NUMBER);
407 
408   FUNCTION x_dsql_execute RETURN NUMBER;
409 
410   FUNCTION x_dsql_select_one(returned_column OUT nocopy VARCHAR2) RETURN NUMBER;
411 
412   FUNCTION x_dsql_select(n_selected_cols  IN  NUMBER,
413 			 returned_columns OUT nocopy StringArray) RETURN NUMBER;
414 
415   FUNCTION stored_date_format(flex_data_type IN VARCHAR2,
416 		  	      string_length  IN NUMBER) RETURN VARCHAR2;
417 
418   FUNCTION isa_number(teststr IN VARCHAR2,
419 		       outnum OUT nocopy NUMBER) RETURN BOOLEAN;
420 
421   FUNCTION init_globals RETURN BOOLEAN;
422 
423 
424 /* ------------------------------------------------------------------------  */
425 
426   PROCEDURE add_sql_string(sql_statement IN VARCHAR2);
427 
428 --  For debugging.  Gets sql strings used for dynamic sql statements.
429 --
430   FUNCTION get_nsql_internal RETURN NUMBER;
431 
432   FUNCTION get_sql_internal(statement_number IN NUMBER,
433 	              statement_portion IN NUMBER DEFAULT 1) RETURN VARCHAR2;
434 
435 --  Gets and adds to additional string of debug information.
436 --
437   PROCEDURE add_debug(p_debug_string IN VARCHAR2,
438 		      p_debug_mode   IN VARCHAR2 DEFAULT 'STATEMENT');
439 
440   PROCEDURE set_debugging(p_debug_mode IN VARCHAR2);
441 
442   FUNCTION get_debug_internal(string_n IN NUMBER) RETURN VARCHAR2;
443 
444   /* New client side debug functions */
445   PROCEDURE x_get_nsql(x_nsql OUT nocopy NUMBER);
446 
447   PROCEDURE x_get_sql_npiece(p_sql_num IN NUMBER,
448 			     x_npiece  OUT nocopy NUMBER);
449 
450   PROCEDURE x_get_sql_piece(p_sql_num   IN NUMBER,
454   PROCEDURE x_get_ndebug(x_ndebug OUT nocopy NUMBER);
451 			    p_piece_num IN NUMBER,
452 			    x_sql_piece OUT nocopy VARCHAR2);
453 
455 
456   PROCEDURE x_get_debug(p_debug_num IN NUMBER,
457 			x_debug OUT nocopy VARCHAR2);
458 
459 
460 END fnd_flex_server1;