6: --
7:
8: TYPE ValattRqst IS RECORD
9: (nrqstd NUMBER,
10: fq_names FND_FLEX_SERVER1.QualNameArray,
11: sq_names FND_FLEX_SERVER1.QualNameArray);
12:
13: TYPE DerivedRqst IS RECORD
14: (nrqstd NUMBER,
7:
8: TYPE ValattRqst IS RECORD
9: (nrqstd NUMBER,
10: fq_names FND_FLEX_SERVER1.QualNameArray,
11: sq_names FND_FLEX_SERVER1.QualNameArray);
12:
13: TYPE DerivedRqst IS RECORD
14: (nrqstd NUMBER,
15: sq_names FND_FLEX_SERVER1.QualNameArray);
11: sq_names FND_FLEX_SERVER1.QualNameArray);
12:
13: TYPE DerivedRqst IS RECORD
14: (nrqstd NUMBER,
15: sq_names FND_FLEX_SERVER1.QualNameArray);
16:
17:
18: -- ======================================================================
19: -- Caching.
102: DATE_TEST_FMT CONSTANT VARCHAR2(11) := 'DD-MON-YYYY';
103: DATE_DEBUG_FMT CONSTANT VARCHAR2(9) := 'DD-MON-RR';
104: MAX_ARG_LEN CONSTANT NUMBER := 1950;
105: MAX_CATSEG_LEN CONSTANT NUMBER := 700;
106: BLANKS VARCHAR2(4); -- := FND_FLEX_SERVER1.WHITESPACE;
107: -------------
108: -- EXCEPTIONS
109: --
110:
133:
134: /* -------------------------------------------------------------------- */
135: /* Private definitions */
136: /* -------------------------------------------------------------------- */
137: FUNCTION insert_combination(fstruct IN FND_FLEX_SERVER1.FlexStructId,
138: structnum IN NUMBER,
139: maintmode IN BOOLEAN,
140: v_date IN DATE,
141: seg_delim IN VARCHAR2,
139: maintmode IN BOOLEAN,
140: v_date IN DATE,
141: seg_delim IN VARCHAR2,
142: ccid_inp IN NUMBER,
143: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
144: combcols IN FND_FLEX_SERVER1.TabColArray,
145: combtypes IN FND_FLEX_SERVER1.CharArray,
146: user_id IN NUMBER,
147: nsegs IN NUMBER,
140: v_date IN DATE,
141: seg_delim IN VARCHAR2,
142: ccid_inp IN NUMBER,
143: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
144: combcols IN FND_FLEX_SERVER1.TabColArray,
145: combtypes IN FND_FLEX_SERVER1.CharArray,
146: user_id IN NUMBER,
147: nsegs IN NUMBER,
148: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
141: seg_delim IN VARCHAR2,
142: ccid_inp IN NUMBER,
143: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
144: combcols IN FND_FLEX_SERVER1.TabColArray,
145: combtypes IN FND_FLEX_SERVER1.CharArray,
146: user_id IN NUMBER,
147: nsegs IN NUMBER,
148: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
149: segfmts IN FND_FLEX_SERVER1.SegFormats,
144: combcols IN FND_FLEX_SERVER1.TabColArray,
145: combtypes IN FND_FLEX_SERVER1.CharArray,
146: user_id IN NUMBER,
147: nsegs IN NUMBER,
148: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
149: segfmts IN FND_FLEX_SERVER1.SegFormats,
150: dvalues IN FND_FLEX_SERVER1.DerivedVals,
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
145: combtypes IN FND_FLEX_SERVER1.CharArray,
146: user_id IN NUMBER,
147: nsegs IN NUMBER,
148: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
149: segfmts IN FND_FLEX_SERVER1.SegFormats,
150: dvalues IN FND_FLEX_SERVER1.DerivedVals,
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
146: user_id IN NUMBER,
147: nsegs IN NUMBER,
148: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
149: segfmts IN FND_FLEX_SERVER1.SegFormats,
150: dvalues IN FND_FLEX_SERVER1.DerivedVals,
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
154: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
147: nsegs IN NUMBER,
148: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
149: segfmts IN FND_FLEX_SERVER1.SegFormats,
150: dvalues IN FND_FLEX_SERVER1.DerivedVals,
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
154: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
155: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
149: segfmts IN FND_FLEX_SERVER1.SegFormats,
150: dvalues IN FND_FLEX_SERVER1.DerivedVals,
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
154: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
155: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
156: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
157: newcomb OUT nocopy BOOLEAN,
150: dvalues IN FND_FLEX_SERVER1.DerivedVals,
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
154: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
155: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
156: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
157: newcomb OUT nocopy BOOLEAN,
158: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN;
151: dquals IN FND_FLEX_SERVER1.Qualifiers,
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
154: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
155: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
156: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
157: newcomb OUT nocopy BOOLEAN,
158: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN;
159:
152: nxcols IN NUMBER,
153: xcolnames IN FND_FLEX_SERVER1.StringArray,
154: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
155: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
156: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
157: newcomb OUT nocopy BOOLEAN,
158: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN;
159:
160: FUNCTION hash_segs(n IN NUMBER,
157: newcomb OUT nocopy BOOLEAN,
158: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN;
159:
160: FUNCTION hash_segs(n IN NUMBER,
161: segs IN FND_FLEX_SERVER1.ValueIdArray) RETURN NUMBER;
162:
163:
164: FUNCTION call_userval(fstruct IN FND_FLEX_SERVER1.FlexStructId,
165: vdate IN DATE,
160: FUNCTION hash_segs(n IN NUMBER,
161: segs IN FND_FLEX_SERVER1.ValueIdArray) RETURN NUMBER;
162:
163:
164: FUNCTION call_userval(fstruct IN FND_FLEX_SERVER1.FlexStructId,
165: vdate IN DATE,
166: nids IN NUMBER,
167: delim IN VARCHAR2,
168: segids IN FND_FLEX_SERVER1.ValueIdArray)
164: FUNCTION call_userval(fstruct IN FND_FLEX_SERVER1.FlexStructId,
165: vdate IN DATE,
166: nids IN NUMBER,
167: delim IN VARCHAR2,
168: segids IN FND_FLEX_SERVER1.ValueIdArray)
169: RETURN BOOLEAN;
170:
171: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
172: t_quals IN FND_FLEX_SERVER1.Qualifiers,
167: delim IN VARCHAR2,
168: segids IN FND_FLEX_SERVER1.ValueIdArray)
169: RETURN BOOLEAN;
170:
171: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
172: t_quals IN FND_FLEX_SERVER1.Qualifiers,
173: v_rules IN FND_FLEX_SERVER1.Vrules,
174: v_date IN DATE,
175: check_effective IN BOOLEAN) RETURN NUMBER;
168: segids IN FND_FLEX_SERVER1.ValueIdArray)
169: RETURN BOOLEAN;
170:
171: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
172: t_quals IN FND_FLEX_SERVER1.Qualifiers,
173: v_rules IN FND_FLEX_SERVER1.Vrules,
174: v_date IN DATE,
175: check_effective IN BOOLEAN) RETURN NUMBER;
176:
169: RETURN BOOLEAN;
170:
171: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
172: t_quals IN FND_FLEX_SERVER1.Qualifiers,
173: v_rules IN FND_FLEX_SERVER1.Vrules,
174: v_date IN DATE,
175: check_effective IN BOOLEAN) RETURN NUMBER;
176:
177:
174: v_date IN DATE,
175: check_effective IN BOOLEAN) RETURN NUMBER;
176:
177:
178: FUNCTION find_column_index(column_list IN FND_FLEX_SERVER1.TabColArray,
179: column_count IN NUMBER,
180: colname IN VARCHAR2) RETURN NUMBER;
181:
182: FUNCTION concatenate_fulldescs(ndescs IN NUMBER,
179: column_count IN NUMBER,
180: colname IN VARCHAR2) RETURN NUMBER;
181:
182: FUNCTION concatenate_fulldescs(ndescs IN NUMBER,
183: descs IN FND_FLEX_SERVER1.ValueDescArray,
184: displ IN FND_FLEX_SERVER1.DisplayedSegs,
185: delimiter IN VARCHAR2) RETURN VARCHAR2;
186:
187: FUNCTION concatenate_segment_formats(segfmts IN FND_FLEX_SERVER1.SegFormats)
180: colname IN VARCHAR2) RETURN NUMBER;
181:
182: FUNCTION concatenate_fulldescs(ndescs IN NUMBER,
183: descs IN FND_FLEX_SERVER1.ValueDescArray,
184: displ IN FND_FLEX_SERVER1.DisplayedSegs,
185: delimiter IN VARCHAR2) RETURN VARCHAR2;
186:
187: FUNCTION concatenate_segment_formats(segfmts IN FND_FLEX_SERVER1.SegFormats)
188: RETURN VARCHAR2;
183: descs IN FND_FLEX_SERVER1.ValueDescArray,
184: displ IN FND_FLEX_SERVER1.DisplayedSegs,
185: delimiter IN VARCHAR2) RETURN VARCHAR2;
186:
187: FUNCTION concatenate_segment_formats(segfmts IN FND_FLEX_SERVER1.SegFormats)
188: RETURN VARCHAR2;
189:
190: FUNCTION ret_derived(d_quals IN FND_FLEX_SERVER1.Qualifiers,
191: drv IN FND_FLEX_SERVER1.DerivedVals,
186:
187: FUNCTION concatenate_segment_formats(segfmts IN FND_FLEX_SERVER1.SegFormats)
188: RETURN VARCHAR2;
189:
190: FUNCTION ret_derived(d_quals IN FND_FLEX_SERVER1.Qualifiers,
191: drv IN FND_FLEX_SERVER1.DerivedVals,
192: d_rqst IN DerivedRqst) RETURN VARCHAR2;
193:
194: FUNCTION ret_valatts(d_quals IN FND_FLEX_SERVER1.Qualifiers,
187: FUNCTION concatenate_segment_formats(segfmts IN FND_FLEX_SERVER1.SegFormats)
188: RETURN VARCHAR2;
189:
190: FUNCTION ret_derived(d_quals IN FND_FLEX_SERVER1.Qualifiers,
191: drv IN FND_FLEX_SERVER1.DerivedVals,
192: d_rqst IN DerivedRqst) RETURN VARCHAR2;
193:
194: FUNCTION ret_valatts(d_quals IN FND_FLEX_SERVER1.Qualifiers,
195: drv IN FND_FLEX_SERVER1.DerivedVals,
190: FUNCTION ret_derived(d_quals IN FND_FLEX_SERVER1.Qualifiers,
191: drv IN FND_FLEX_SERVER1.DerivedVals,
192: d_rqst IN DerivedRqst) RETURN VARCHAR2;
193:
194: FUNCTION ret_valatts(d_quals IN FND_FLEX_SERVER1.Qualifiers,
195: drv IN FND_FLEX_SERVER1.DerivedVals,
196: v_rqst IN ValattRqst) RETURN VARCHAR2;
197:
198: FUNCTION parse_va_rqst(s IN VARCHAR2, var OUT nocopy ValattRqst) RETURN NUMBER;
191: drv IN FND_FLEX_SERVER1.DerivedVals,
192: d_rqst IN DerivedRqst) RETURN VARCHAR2;
193:
194: FUNCTION ret_valatts(d_quals IN FND_FLEX_SERVER1.Qualifiers,
195: drv IN FND_FLEX_SERVER1.DerivedVals,
196: v_rqst IN ValattRqst) RETURN VARCHAR2;
197:
198: FUNCTION parse_va_rqst(s IN VARCHAR2, var OUT nocopy ValattRqst) RETURN NUMBER;
199:
199:
200: FUNCTION parse_drv_rqst(s IN VARCHAR2, dr OUT nocopy DerivedRqst) RETURN NUMBER;
201:
202: FUNCTION parse_vrules(s IN VARCHAR2,
203: vr OUT nocopy FND_FLEX_SERVER1.Vrules) RETURN NUMBER;
204:
205: FUNCTION parse_set_msg(p_msg IN VARCHAR2) RETURN BOOLEAN;
206:
207: FUNCTION evaluate_token(token_str IN VARCHAR2,
205: FUNCTION parse_set_msg(p_msg IN VARCHAR2) RETURN BOOLEAN;
206:
207: FUNCTION evaluate_token(token_str IN VARCHAR2,
208: n_segs IN NUMBER,
209: fq_tab IN FND_FLEX_SERVER1.FlexQualTable,
210: token_map OUT nocopy FND_FLEX_SERVER1.BooleanArray)
211: RETURN BOOLEAN;
212:
213: FUNCTION call_fdfgli(ccid IN NUMBER) RETURN BOOLEAN;
206:
207: FUNCTION evaluate_token(token_str IN VARCHAR2,
208: n_segs IN NUMBER,
209: fq_tab IN FND_FLEX_SERVER1.FlexQualTable,
210: token_map OUT nocopy FND_FLEX_SERVER1.BooleanArray)
211: RETURN BOOLEAN;
212:
213: FUNCTION call_fdfgli(ccid IN NUMBER) RETURN BOOLEAN;
214:
527: deadlock EXCEPTION;
528: nsegs NUMBER;
529: hash_num NUMBER;
530: hash_number NUMBER;
531: idsegs FND_FLEX_SERVER1.StringArray;
532: segids FND_FLEX_SERVER1.ValueIdArray;
533: kff_id FND_FLEX_SERVER1.FlexStructId;
534: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
535:
528: nsegs NUMBER;
529: hash_num NUMBER;
530: hash_number NUMBER;
531: idsegs FND_FLEX_SERVER1.StringArray;
532: segids FND_FLEX_SERVER1.ValueIdArray;
533: kff_id FND_FLEX_SERVER1.FlexStructId;
534: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
535:
536: PRAGMA EXCEPTION_INIT(deadlock, -60);
529: hash_num NUMBER;
530: hash_number NUMBER;
531: idsegs FND_FLEX_SERVER1.StringArray;
532: segids FND_FLEX_SERVER1.ValueIdArray;
533: kff_id FND_FLEX_SERVER1.FlexStructId;
534: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
535:
536: PRAGMA EXCEPTION_INIT(deadlock, -60);
537:
530: hash_number NUMBER;
531: idsegs FND_FLEX_SERVER1.StringArray;
532: segids FND_FLEX_SERVER1.ValueIdArray;
533: kff_id FND_FLEX_SERVER1.FlexStructId;
534: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
535:
536: PRAGMA EXCEPTION_INIT(deadlock, -60);
537:
538: BEGIN
666: v_date DATE;
667: rq_dqual DerivedRqst;
668: rq_valat ValattRqst;
669: nvalidated NUMBER;
670: value_dvals FND_FLEX_SERVER1.ValueArray;
671: value_vals FND_FLEX_SERVER1.ValueArray;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
667: rq_dqual DerivedRqst;
668: rq_valat ValattRqst;
669: nvalidated NUMBER;
670: value_dvals FND_FLEX_SERVER1.ValueArray;
671: value_vals FND_FLEX_SERVER1.ValueArray;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
668: rq_valat ValattRqst;
669: nvalidated NUMBER;
670: value_dvals FND_FLEX_SERVER1.ValueArray;
671: value_vals FND_FLEX_SERVER1.ValueArray;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
669: nvalidated NUMBER;
670: value_dvals FND_FLEX_SERVER1.ValueArray;
671: value_vals FND_FLEX_SERVER1.ValueArray;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
670: value_dvals FND_FLEX_SERVER1.ValueArray;
671: value_vals FND_FLEX_SERVER1.ValueArray;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
671: value_vals FND_FLEX_SERVER1.ValueArray;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
672: value_ids FND_FLEX_SERVER1.ValueIdArray;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
673: value_descs FND_FLEX_SERVER1.ValueDescArray;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
674: value_desclens FND_FLEX_SERVER1.NumberArray;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
682: tbl_quals FND_FLEX_SERVER1.Qualifiers;
675: cc_cols FND_FLEX_SERVER1.TabColArray;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
682: tbl_quals FND_FLEX_SERVER1.Qualifiers;
683: n_xcol_vals NUMBER;
676: cc_coltypes FND_FLEX_SERVER1.CharArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
682: tbl_quals FND_FLEX_SERVER1.Qualifiers;
683: n_xcol_vals NUMBER;
684: xcol_vals FND_FLEX_SERVER1.StringArray;
677: segtypes FND_FLEX_SERVER1.SegFormats;
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
682: tbl_quals FND_FLEX_SERVER1.Qualifiers;
683: n_xcol_vals NUMBER;
684: xcol_vals FND_FLEX_SERVER1.StringArray;
685: delim VARCHAR2(1);
678: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
679: derv FND_FLEX_SERVER1.DerivedVals;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
682: tbl_quals FND_FLEX_SERVER1.Qualifiers;
683: n_xcol_vals NUMBER;
684: xcol_vals FND_FLEX_SERVER1.StringArray;
685: delim VARCHAR2(1);
686: new_comb BOOLEAN;
680: tbl_derv FND_FLEX_SERVER1.DerivedVals;
681: drv_quals FND_FLEX_SERVER1.Qualifiers;
682: tbl_quals FND_FLEX_SERVER1.Qualifiers;
683: n_xcol_vals NUMBER;
684: xcol_vals FND_FLEX_SERVER1.StringArray;
685: delim VARCHAR2(1);
686: new_comb BOOLEAN;
687: BEGIN
688: fnd_flex_server1.set_debugging(server_debug_mode);
684: xcol_vals FND_FLEX_SERVER1.StringArray;
685: delim VARCHAR2(1);
686: new_comb BOOLEAN;
687: BEGIN
688: fnd_flex_server1.set_debugging(server_debug_mode);
689:
690: IF (fnd_flex_server1.g_debug_level > 0) THEN
691: fnd_flex_server1.add_debug('BEGIN SSV.validate_combination()');
692: END IF;
686: new_comb BOOLEAN;
687: BEGIN
688: fnd_flex_server1.set_debugging(server_debug_mode);
689:
690: IF (fnd_flex_server1.g_debug_level > 0) THEN
691: fnd_flex_server1.add_debug('BEGIN SSV.validate_combination()');
692: END IF;
693:
694: -- Initialize globals, parse qualifier requests.
687: BEGIN
688: fnd_flex_server1.set_debugging(server_debug_mode);
689:
690: IF (fnd_flex_server1.g_debug_level > 0) THEN
691: fnd_flex_server1.add_debug('BEGIN SSV.validate_combination()');
692: END IF;
693:
694: -- Initialize globals, parse qualifier requests.
695: -- If ok, then validate and return results.
695: -- If ok, then validate and return results.
696: -- Otherwise return error and message.
697: --
698:
699: if((FND_FLEX_SERVER1.init_globals) and
700: (parse_drv_rqst(get_derived, rq_dqual) >= 0) and
701: (parse_va_rqst(get_valatts, rq_valat) >= 0)) then
702:
703: -- Client passes in julian date of 0 to mean null vdate
722: segcodes, error_seg);
723:
724: -- Return requested outputs as concatenated strings.
725: --
726: IF (vstatus <> FND_FLEX_SERVER1.vv_error) THEN
727: concat_vals_out := concatenate_values(nvalidated, value_dvals,
728: disp_segs, delim);
729: concat_ids_out := concatenate_ids(nvalidated, value_ids, delim);
730: concat_desc := concatenate_fulldescs(nvalidated, value_descs,
730: concat_desc := concatenate_fulldescs(nvalidated, value_descs,
731: disp_segs, delim);
732: derived_vals := ret_derived(drv_quals, derv, rq_dqual);
733: valatts := ret_valatts(drv_quals, derv, rq_valat);
734: extra_cols := FND_FLEX_SERVER1.from_stringarray2
735: (n_xcol_vals, xcol_vals,
736: FND_FLEX_SERVER1.TERMINATOR);
737: start_date := to_char(derv.start_valid, DATE_PASS_FORMAT);
738: end_date := to_char(derv.end_valid, DATE_PASS_FORMAT);
732: derived_vals := ret_derived(drv_quals, derv, rq_dqual);
733: valatts := ret_valatts(drv_quals, derv, rq_valat);
734: extra_cols := FND_FLEX_SERVER1.from_stringarray2
735: (n_xcol_vals, xcol_vals,
736: FND_FLEX_SERVER1.TERMINATOR);
737: start_date := to_char(derv.start_valid, DATE_PASS_FORMAT);
738: end_date := to_char(derv.end_valid, DATE_PASS_FORMAT);
739: enabled_flag := derv.enabled_flag;
740: summary_flag := derv.summary_flag;
754: END IF;
755: GOTO goto_return;
756: end if;
757:
758: vstatus := FND_FLEX_SERVER1.VV_ERROR;
759:
760: <
761:
762: message := FND_MESSAGE.get_encoded;
759:
760: <
761:
762: message := FND_MESSAGE.get_encoded;
763: IF (fnd_flex_server1.g_debug_level > 0) THEN
764: fnd_flex_server1.add_debug('END SSV.validate_combination()');
765: END IF;
766: return;
767:
760: <
761:
762: message := FND_MESSAGE.get_encoded;
763: IF (fnd_flex_server1.g_debug_level > 0) THEN
764: fnd_flex_server1.add_debug('END SSV.validate_combination()');
765: END IF;
766: return;
767:
768: EXCEPTION
769: WHEN OTHERS then
770: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
771: FND_MESSAGE.set_token('MSG','SV1.validate_combination() exception: '||SQLERRM);
772: message := FND_MESSAGE.get_encoded;
773: vstatus := FND_FLEX_SERVER1.VV_ERROR;
774: IF (fnd_flex_server1.g_debug_level > 0) THEN
775: fnd_flex_server1.add_debug
776: ('EXCEPTION others SSV.validate_combination()');
777: END IF;
770: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
771: FND_MESSAGE.set_token('MSG','SV1.validate_combination() exception: '||SQLERRM);
772: message := FND_MESSAGE.get_encoded;
773: vstatus := FND_FLEX_SERVER1.VV_ERROR;
774: IF (fnd_flex_server1.g_debug_level > 0) THEN
775: fnd_flex_server1.add_debug
776: ('EXCEPTION others SSV.validate_combination()');
777: END IF;
778: return;
771: FND_MESSAGE.set_token('MSG','SV1.validate_combination() exception: '||SQLERRM);
772: message := FND_MESSAGE.get_encoded;
773: vstatus := FND_FLEX_SERVER1.VV_ERROR;
774: IF (fnd_flex_server1.g_debug_level > 0) THEN
775: fnd_flex_server1.add_debug
776: ('EXCEPTION others SSV.validate_combination()');
777: END IF;
778: return;
779: END validate_combination;
809:
810: v_date DATE;
811: rowid_in ROWID;
812: nvalidated NUMBER;
813: value_dvals FND_FLEX_SERVER1.ValueArray;
814: value_vals FND_FLEX_SERVER1.ValueArray;
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
810: v_date DATE;
811: rowid_in ROWID;
812: nvalidated NUMBER;
813: value_dvals FND_FLEX_SERVER1.ValueArray;
814: value_vals FND_FLEX_SERVER1.ValueArray;
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
811: rowid_in ROWID;
812: nvalidated NUMBER;
813: value_dvals FND_FLEX_SERVER1.ValueArray;
814: value_vals FND_FLEX_SERVER1.ValueArray;
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
812: nvalidated NUMBER;
813: value_dvals FND_FLEX_SERVER1.ValueArray;
814: value_vals FND_FLEX_SERVER1.ValueArray;
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
820: segtypes FND_FLEX_SERVER1.SegFormats;
813: value_dvals FND_FLEX_SERVER1.ValueArray;
814: value_vals FND_FLEX_SERVER1.ValueArray;
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
820: segtypes FND_FLEX_SERVER1.SegFormats;
821: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
814: value_vals FND_FLEX_SERVER1.ValueArray;
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
820: segtypes FND_FLEX_SERVER1.SegFormats;
821: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
822: delim VARCHAR2(1);
815: value_ids FND_FLEX_SERVER1.ValueIdArray;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
820: segtypes FND_FLEX_SERVER1.SegFormats;
821: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
822: delim VARCHAR2(1);
823: omit_activation BOOLEAN;
816: value_descs FND_FLEX_SERVER1.ValueDescArray;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
820: segtypes FND_FLEX_SERVER1.SegFormats;
821: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
822: delim VARCHAR2(1);
823: omit_activation BOOLEAN;
824: dummy_coldef FND_FLEX_SERVER1.ColumnDefinitions;
817: value_desclens FND_FLEX_SERVER1.NumberArray;
818: cc_cols FND_FLEX_SERVER1.TabColArray;
819: cc_coltypes FND_FLEX_SERVER1.CharArray;
820: segtypes FND_FLEX_SERVER1.SegFormats;
821: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
822: delim VARCHAR2(1);
823: omit_activation BOOLEAN;
824: dummy_coldef FND_FLEX_SERVER1.ColumnDefinitions;
825:
820: segtypes FND_FLEX_SERVER1.SegFormats;
821: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
822: delim VARCHAR2(1);
823: omit_activation BOOLEAN;
824: dummy_coldef FND_FLEX_SERVER1.ColumnDefinitions;
825:
826: BEGIN
827:
828: -- Initialize globals.
828: -- Initialize globals.
829: -- If ok, then validate and return results.
830: -- Otherwise return error and message.
831: --
832: if(FND_FLEX_SERVER1.init_globals) then
833:
834: -- Client passes in julian date of 0 to mean null vdate
835: --
836: if(vdate = '0') then
876: return;
877: end if;
878:
879: message := FND_MESSAGE.get_encoded;
880: vstatus := FND_FLEX_SERVER1.VV_ERROR;
881: return;
882:
883: EXCEPTION
884: WHEN OTHERS then
884: WHEN OTHERS then
885: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
886: FND_MESSAGE.set_token('MSG','validate_descflex() exception: '||SQLERRM);
887: message := FND_MESSAGE.get_encoded;
888: vstatus := FND_FLEX_SERVER1.VV_ERROR;
889: return;
890: END validate_descflex;
891:
892: /* ------------------------------------------------------------------------ */
927: message OUT nocopy VARCHAR2) IS
928:
929: nsegs NUMBER;
930: nvals NUMBER;
931: segs FND_FLEX_SERVER1.StringArray;
932: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
933: errsegnum NUMBER;
934: errcode NUMBER;
935: val_date DATE;
928:
929: nsegs NUMBER;
930: nvals NUMBER;
931: segs FND_FLEX_SERVER1.StringArray;
932: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
933: errsegnum NUMBER;
934: errcode NUMBER;
935: val_date DATE;
936: segtypes FND_FLEX_SERVER1.SegFormats;
932: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
933: errsegnum NUMBER;
934: errcode NUMBER;
935: val_date DATE;
936: segtypes FND_FLEX_SERVER1.SegFormats;
937: segcodes VARCHAR2(30);
938: kff_cc FND_FLEX_SERVER1.CombTblInfo;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
934: errcode NUMBER;
935: val_date DATE;
936: segtypes FND_FLEX_SERVER1.SegFormats;
937: segcodes VARCHAR2(30);
938: kff_cc FND_FLEX_SERVER1.CombTblInfo;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
935: val_date DATE;
936: segtypes FND_FLEX_SERVER1.SegFormats;
937: segcodes VARCHAR2(30);
938: kff_cc FND_FLEX_SERVER1.CombTblInfo;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
936: segtypes FND_FLEX_SERVER1.SegFormats;
937: segcodes VARCHAR2(30);
938: kff_cc FND_FLEX_SERVER1.CombTblInfo;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
937: segcodes VARCHAR2(30);
938: kff_cc FND_FLEX_SERVER1.CombTblInfo;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
938: kff_cc FND_FLEX_SERVER1.CombTblInfo;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
939: kff_id FND_FLEX_SERVER1.FlexStructId;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
940: kff_info FND_FLEX_SERVER1.FlexStructInfo;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
941: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
942: value_dvals FND_FLEX_SERVER1.ValueArray;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
950: drv_quals FND_FLEX_SERVER1.Qualifiers;
943: value_vals FND_FLEX_SERVER1.ValueArray;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
950: drv_quals FND_FLEX_SERVER1.Qualifiers;
951: v_rules FND_FLEX_SERVER1.Vrules;
944: value_ids FND_FLEX_SERVER1.ValueIdArray;
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
950: drv_quals FND_FLEX_SERVER1.Qualifiers;
951: v_rules FND_FLEX_SERVER1.Vrules;
952:
945: value_descs FND_FLEX_SERVER1.ValueDescArray;
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
950: drv_quals FND_FLEX_SERVER1.Qualifiers;
951: v_rules FND_FLEX_SERVER1.Vrules;
952:
953: BEGIN
946: desc_lens FND_FLEX_SERVER1.NumberArray;
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
950: drv_quals FND_FLEX_SERVER1.Qualifiers;
951: v_rules FND_FLEX_SERVER1.Vrules;
952:
953: BEGIN
954:
947: cc_cols FND_FLEX_SERVER1.TabColArray;
948: cc_coltypes FND_FLEX_SERVER1.CharArray;
949: derv FND_FLEX_SERVER1.DerivedVals;
950: drv_quals FND_FLEX_SERVER1.Qualifiers;
951: v_rules FND_FLEX_SERVER1.Vrules;
952:
953: BEGIN
954:
955: -- Initialize messages, debugging, and number of sql strings
953: BEGIN
954:
955: -- Initialize messages, debugging, and number of sql strings
956: --
957: if(FND_FLEX_SERVER1.init_globals = FALSE) then
958: goto return_error;
959: end if;
960:
961: -- Convert the validation date to date format. Client may pass 0 to mean null.
1003: end if;
1004:
1005: -- Set up some debug information to return
1006: --
1007: IF (fnd_flex_server1.g_debug_level > 0) THEN
1008: FND_FLEX_SERVER1.add_debug('Entering pre_window(). ');
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1004:
1005: -- Set up some debug information to return
1006: --
1007: IF (fnd_flex_server1.g_debug_level > 0) THEN
1008: FND_FLEX_SERVER1.add_debug('Entering pre_window(). ');
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1012: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1005: -- Set up some debug information to return
1006: --
1007: IF (fnd_flex_server1.g_debug_level > 0) THEN
1008: FND_FLEX_SERVER1.add_debug('Entering pre_window(). ');
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1012: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1013: FND_FLEX_SERVER1.add_debug(', display_segs = ' || display_segs);
1006: --
1007: IF (fnd_flex_server1.g_debug_level > 0) THEN
1008: FND_FLEX_SERVER1.add_debug('Entering pre_window(). ');
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1012: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1013: FND_FLEX_SERVER1.add_debug(', display_segs = ' || display_segs);
1014: END IF;
1007: IF (fnd_flex_server1.g_debug_level > 0) THEN
1008: FND_FLEX_SERVER1.add_debug('Entering pre_window(). ');
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1012: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1013: FND_FLEX_SERVER1.add_debug(', display_segs = ' || display_segs);
1014: END IF;
1015:
1008: FND_FLEX_SERVER1.add_debug('Entering pre_window(). ');
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1012: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1013: FND_FLEX_SERVER1.add_debug(', display_segs = ' || display_segs);
1014: END IF;
1015:
1016: -- Convert concatenated segments to array and check there are not too many
1009: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1010: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1011: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1012: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1013: FND_FLEX_SERVER1.add_debug(', display_segs = ' || display_segs);
1014: END IF;
1015:
1016: -- Convert concatenated segments to array and check there are not too many
1017: --
1022: end if;
1023:
1024: -- Look up the descriptions and ids.
1025: --
1026: errcode := FND_FLEX_SERVER1.validate_struct(kff_id,
1027: kff_cc.table_application_id, kff_cc.combination_table_id,
1028: nsegs, segs, disp_segs, vv_flags, val_date, v_rules, user_apid,
1029: user_resp, nvals, segtypes, segcodes, cc_cols, cc_coltypes,
1030: value_dvals, value_vals, value_ids, value_descs, desc_lens,
1029: user_resp, nvals, segtypes, segcodes, cc_cols, cc_coltypes,
1030: value_dvals, value_vals, value_ids, value_descs, desc_lens,
1031: derv, drv_quals, errsegnum);
1032:
1033: IF (fnd_flex_server1.g_debug_level > 0) THEN
1034: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ');
1035: FND_FLEX_SERVER1.add_debug(to_char(errcode) ||' and '|| to_char(nvals));
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1030: value_dvals, value_vals, value_ids, value_descs, desc_lens,
1031: derv, drv_quals, errsegnum);
1032:
1033: IF (fnd_flex_server1.g_debug_level > 0) THEN
1034: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ');
1035: FND_FLEX_SERVER1.add_debug(to_char(errcode) ||' and '|| to_char(nvals));
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1031: derv, drv_quals, errsegnum);
1032:
1033: IF (fnd_flex_server1.g_debug_level > 0) THEN
1034: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ');
1035: FND_FLEX_SERVER1.add_debug(to_char(errcode) ||' and '|| to_char(nvals));
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1032:
1033: IF (fnd_flex_server1.g_debug_level > 0) THEN
1034: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ');
1035: FND_FLEX_SERVER1.add_debug(to_char(errcode) ||' and '|| to_char(nvals));
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1033: IF (fnd_flex_server1.g_debug_level > 0) THEN
1034: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ');
1035: FND_FLEX_SERVER1.add_debug(to_char(errcode) ||' and '|| to_char(nvals));
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1034: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ');
1035: FND_FLEX_SERVER1.add_debug(to_char(errcode) ||' and '|| to_char(nvals));
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1042: FND_FLEX_SERVER1.add_debug('*' || value_dvals(i) || '*');
1036: FND_FLEX_SERVER1.add_debug(' values. SegCodes: ' || segcodes);
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1042: FND_FLEX_SERVER1.add_debug('*' || value_dvals(i) || '*');
1043: FND_FLEX_SERVER1.add_debug(cc_cols(i) || '" ');
1044: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||'" ');
1037: FND_FLEX_SERVER1.add_debug(' ErrSeg: ' || to_char(errsegnum));
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1042: FND_FLEX_SERVER1.add_debug('*' || value_dvals(i) || '*');
1043: FND_FLEX_SERVER1.add_debug(cc_cols(i) || '" ');
1044: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||'" ');
1045: end loop;
1038: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1042: FND_FLEX_SERVER1.add_debug('*' || value_dvals(i) || '*');
1043: FND_FLEX_SERVER1.add_debug(cc_cols(i) || '" ');
1044: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||'" ');
1045: end loop;
1046: END IF;
1039: for i in 1..nvals loop
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1042: FND_FLEX_SERVER1.add_debug('*' || value_dvals(i) || '*');
1043: FND_FLEX_SERVER1.add_debug(cc_cols(i) || '" ');
1044: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||'" ');
1045: end loop;
1046: END IF;
1047:
1040: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i));
1041: FND_FLEX_SERVER1.add_debug(to_char(segtypes.vs_maxsize(i), 'S099'));
1042: FND_FLEX_SERVER1.add_debug('*' || value_dvals(i) || '*');
1043: FND_FLEX_SERVER1.add_debug(cc_cols(i) || '" ');
1044: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||'" ');
1045: end loop;
1046: END IF;
1047:
1048: concat_vals_out := concatenate_values(nvals, value_dvals, disp_segs,
1061: return;
1062:
1063: <
1064: message := FND_MESSAGE.get_encoded;
1065: v_status := FND_FLEX_SERVER1.VV_ERROR;
1066: return;
1067:
1068: EXCEPTION
1069: WHEN OTHERS then
1095: n_segments OUT nocopy NUMBER,
1096: message OUT nocopy VARCHAR2) IS
1097:
1098: n_segs NUMBER;
1099: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1100: kff_id FND_FLEX_SERVER1.FlexStructId;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1096: message OUT nocopy VARCHAR2) IS
1097:
1098: n_segs NUMBER;
1099: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1100: kff_id FND_FLEX_SERVER1.FlexStructId;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1097:
1098: n_segs NUMBER;
1099: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1100: kff_id FND_FLEX_SERVER1.FlexStructId;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1098: n_segs NUMBER;
1099: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1100: kff_id FND_FLEX_SERVER1.FlexStructId;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1099: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1100: kff_id FND_FLEX_SERVER1.FlexStructId;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1107: s_updatable FND_FLEX_SERVER1.BooleanArray;
1100: kff_id FND_FLEX_SERVER1.FlexStructId;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1107: s_updatable FND_FLEX_SERVER1.BooleanArray;
1108: s_displayed FND_FLEX_SERVER1.BooleanArray;
1101: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1107: s_updatable FND_FLEX_SERVER1.BooleanArray;
1108: s_displayed FND_FLEX_SERVER1.BooleanArray;
1109: ins_map VARCHAR2(30);
1102: fq_table FND_FLEX_SERVER1.FlexQualTable;
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1107: s_updatable FND_FLEX_SERVER1.BooleanArray;
1108: s_displayed FND_FLEX_SERVER1.BooleanArray;
1109: ins_map VARCHAR2(30);
1110: upd_map VARCHAR2(30);
1103: seg_disp FND_FLEX_SERVER1.CharArray;
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1107: s_updatable FND_FLEX_SERVER1.BooleanArray;
1108: s_displayed FND_FLEX_SERVER1.BooleanArray;
1109: ins_map VARCHAR2(30);
1110: upd_map VARCHAR2(30);
1111: disp_map VARCHAR2(30);
1104: seg_rqd FND_FLEX_SERVER1.CharArray;
1105: s_required FND_FLEX_SERVER1.BooleanArray;
1106: s_insertable FND_FLEX_SERVER1.BooleanArray;
1107: s_updatable FND_FLEX_SERVER1.BooleanArray;
1108: s_displayed FND_FLEX_SERVER1.BooleanArray;
1109: ins_map VARCHAR2(30);
1110: upd_map VARCHAR2(30);
1111: disp_map VARCHAR2(30);
1112: rqd_map VARCHAR2(30);
1114: BEGIN
1115:
1116: -- Initialize messages, debugging, and number of sql strings
1117: --
1118: if(FND_FLEX_SERVER1.init_globals = FALSE) then
1119: goto return_error;
1120: end if;
1121:
1122: -- Get all required info about the desired flexfield structure.
1128: end if;
1129:
1130: -- Set up some debug information to return
1131: --
1132: IF (fnd_flex_server1.g_debug_level > 0) THEN
1133: FND_FLEX_SERVER1.add_debug('Starting segment_maps() ');
1134: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1135: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1136: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1129:
1130: -- Set up some debug information to return
1131: --
1132: IF (fnd_flex_server1.g_debug_level > 0) THEN
1133: FND_FLEX_SERVER1.add_debug('Starting segment_maps() ');
1134: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1135: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1136: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1137: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1130: -- Set up some debug information to return
1131: --
1132: IF (fnd_flex_server1.g_debug_level > 0) THEN
1133: FND_FLEX_SERVER1.add_debug('Starting segment_maps() ');
1134: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1135: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1136: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1137: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1138: END IF;
1131: --
1132: IF (fnd_flex_server1.g_debug_level > 0) THEN
1133: FND_FLEX_SERVER1.add_debug('Starting segment_maps() ');
1134: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1135: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1136: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1137: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1138: END IF;
1139: if(FND_FLEX_SERVER2.get_qualsegs(kff_id, n_segs, seg_disp,
1132: IF (fnd_flex_server1.g_debug_level > 0) THEN
1133: FND_FLEX_SERVER1.add_debug('Starting segment_maps() ');
1134: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1135: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1136: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1137: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1138: END IF;
1139: if(FND_FLEX_SERVER2.get_qualsegs(kff_id, n_segs, seg_disp,
1140: seg_rqd, fq_table) = FALSE) then
1133: FND_FLEX_SERVER1.add_debug('Starting segment_maps() ');
1134: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1135: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1136: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1137: FND_FLEX_SERVER1.add_debug(', Structure Number = '||to_char(flex_num));
1138: END IF;
1139: if(FND_FLEX_SERVER2.get_qualsegs(kff_id, n_segs, seg_disp,
1140: seg_rqd, fq_table) = FALSE) then
1141: goto return_error;
1223: message OUT nocopy VARCHAR2) IS
1224:
1225: secseg NUMBER;
1226: nsegs NUMBER;
1227: segs FND_FLEX_SERVER1.StringArray;
1228: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1229: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1230: kff_id FND_FLEX_SERVER1.FlexStructId;
1231: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1224:
1225: secseg NUMBER;
1226: nsegs NUMBER;
1227: segs FND_FLEX_SERVER1.StringArray;
1228: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1229: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1230: kff_id FND_FLEX_SERVER1.FlexStructId;
1231: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1232:
1225: secseg NUMBER;
1226: nsegs NUMBER;
1227: segs FND_FLEX_SERVER1.StringArray;
1228: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1229: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1230: kff_id FND_FLEX_SERVER1.FlexStructId;
1231: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1232:
1233: BEGIN
1226: nsegs NUMBER;
1227: segs FND_FLEX_SERVER1.StringArray;
1228: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1229: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1230: kff_id FND_FLEX_SERVER1.FlexStructId;
1231: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1232:
1233: BEGIN
1234:
1227: segs FND_FLEX_SERVER1.StringArray;
1228: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1229: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1230: kff_id FND_FLEX_SERVER1.FlexStructId;
1231: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1232:
1233: BEGIN
1234:
1235: -- Check for null segments
1240: end if;
1241:
1242: -- Initialize messages, debugging, and number of sql strings
1243: --
1244: if(FND_FLEX_SERVER1.init_globals = FALSE) then
1245: goto return_error;
1246: end if;
1247:
1248: -- Get all required info about the desired flexfield structure.
1254: end if;
1255:
1256: -- Set up some debug information to return
1257: --
1258: IF (fnd_flex_server1.g_debug_level > 0) THEN
1259: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1260: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1261: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1262: FND_FLEX_SERVER1.add_debug(', Structure Number = '|| to_char(flex_num));
1255:
1256: -- Set up some debug information to return
1257: --
1258: IF (fnd_flex_server1.g_debug_level > 0) THEN
1259: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1260: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1261: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1262: FND_FLEX_SERVER1.add_debug(', Structure Number = '|| to_char(flex_num));
1263: END IF;
1256: -- Set up some debug information to return
1257: --
1258: IF (fnd_flex_server1.g_debug_level > 0) THEN
1259: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1260: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1261: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1262: FND_FLEX_SERVER1.add_debug(', Structure Number = '|| to_char(flex_num));
1263: END IF;
1264: if(parse_displayed(kff_id, display_segs, disp_segs) = FALSE) then
1257: --
1258: IF (fnd_flex_server1.g_debug_level > 0) THEN
1259: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1260: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1261: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1262: FND_FLEX_SERVER1.add_debug(', Structure Number = '|| to_char(flex_num));
1263: END IF;
1264: if(parse_displayed(kff_id, display_segs, disp_segs) = FALSE) then
1265: goto return_error;
1258: IF (fnd_flex_server1.g_debug_level > 0) THEN
1259: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ');
1260: FND_FLEX_SERVER1.add_debug(to_char(kff_id.application_id));
1261: FND_FLEX_SERVER1.add_debug(', Flex Code = ' || flex_code);
1262: FND_FLEX_SERVER1.add_debug(', Structure Number = '|| to_char(flex_num));
1263: END IF;
1264: if(parse_displayed(kff_id, display_segs, disp_segs) = FALSE) then
1265: goto return_error;
1266: end if;
1274: end if;
1275:
1276: -- See if any segment values are secured.
1277: --
1278: secseg := FND_FLEX_SERVER1.vals_secured(kff_id, nsegs, segs, disp_segs,
1279: resp_apid, resp_id);
1280: segnum := secseg;
1281: if(secseg = 0) then
1282: FND_MESSAGE.clear;
1303: -- Autonomous Transaction Version of Insert Combination.
1304: -- copied from insert_combination().
1305: --
1306: FUNCTION insert_combination_at
1307: (fstruct IN FND_FLEX_SERVER1.FlexStructId,
1308: structnum IN NUMBER,
1309: maintmode IN BOOLEAN,
1310: v_date IN DATE,
1311: seg_delim IN VARCHAR2,
1309: maintmode IN BOOLEAN,
1310: v_date IN DATE,
1311: seg_delim IN VARCHAR2,
1312: ccid_inp IN NUMBER,
1313: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
1314: combcols IN FND_FLEX_SERVER1.TabColArray,
1315: combtypes IN FND_FLEX_SERVER1.CharArray,
1316: user_id IN NUMBER,
1317: nsegs IN NUMBER,
1310: v_date IN DATE,
1311: seg_delim IN VARCHAR2,
1312: ccid_inp IN NUMBER,
1313: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
1314: combcols IN FND_FLEX_SERVER1.TabColArray,
1315: combtypes IN FND_FLEX_SERVER1.CharArray,
1316: user_id IN NUMBER,
1317: nsegs IN NUMBER,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1311: seg_delim IN VARCHAR2,
1312: ccid_inp IN NUMBER,
1313: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
1314: combcols IN FND_FLEX_SERVER1.TabColArray,
1315: combtypes IN FND_FLEX_SERVER1.CharArray,
1316: user_id IN NUMBER,
1317: nsegs IN NUMBER,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1319: segvals_in IN FND_FLEX_SERVER1.valuearray,
1314: combcols IN FND_FLEX_SERVER1.TabColArray,
1315: combtypes IN FND_FLEX_SERVER1.CharArray,
1316: user_id IN NUMBER,
1317: nsegs IN NUMBER,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1319: segvals_in IN FND_FLEX_SERVER1.valuearray,
1320: segfmts IN FND_FLEX_SERVER1.SegFormats,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1315: combtypes IN FND_FLEX_SERVER1.CharArray,
1316: user_id IN NUMBER,
1317: nsegs IN NUMBER,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1319: segvals_in IN FND_FLEX_SERVER1.valuearray,
1320: segfmts IN FND_FLEX_SERVER1.SegFormats,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1316: user_id IN NUMBER,
1317: nsegs IN NUMBER,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1319: segvals_in IN FND_FLEX_SERVER1.valuearray,
1320: segfmts IN FND_FLEX_SERVER1.SegFormats,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1317: nsegs IN NUMBER,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1319: segvals_in IN FND_FLEX_SERVER1.valuearray,
1320: segfmts IN FND_FLEX_SERVER1.SegFormats,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1325: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
1318: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
1319: segvals_in IN FND_FLEX_SERVER1.valuearray,
1320: segfmts IN FND_FLEX_SERVER1.SegFormats,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1325: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
1326: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
1320: segfmts IN FND_FLEX_SERVER1.SegFormats,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1325: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
1326: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
1327: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1328: newcomb OUT nocopy BOOLEAN,
1321: dvalues IN FND_FLEX_SERVER1.DerivedVals,
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1325: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
1326: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
1327: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1328: newcomb OUT nocopy BOOLEAN,
1329: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN
1322: dquals IN FND_FLEX_SERVER1.Qualifiers,
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1325: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
1326: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
1327: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1328: newcomb OUT nocopy BOOLEAN,
1329: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN
1330: IS
1323: nxcols IN NUMBER,
1324: xcolnames IN FND_FLEX_SERVER1.StringArray,
1325: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
1326: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
1327: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1328: newcomb OUT nocopy BOOLEAN,
1329: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN
1330: IS
1331: PRAGMA AUTONOMOUS_TRANSACTION;
1334: nfound NUMBER;
1335: hash_num NUMBER;
1336: hash_number NUMBER;
1337: ccid_string VARCHAR2(50);
1338: segids FND_FLEX_SERVER1.ValueIdArray;
1339:
1340: PRAGMA EXCEPTION_INIT(deadlock, -60);
1341:
1342: BEGIN
1343: SAVEPOINT pre_insert_comb_at;
1344:
1345: -- For debugging...
1346: --
1347: IF (fnd_flex_server1.g_debug_level > 0) THEN
1348: FND_FLEX_SERVER1.add_debug(to_char(nsegs) ||
1349: ' segs passed to insert_combination().');
1350: END IF;
1351:
1344:
1345: -- For debugging...
1346: --
1347: IF (fnd_flex_server1.g_debug_level > 0) THEN
1348: FND_FLEX_SERVER1.add_debug(to_char(nsegs) ||
1349: ' segs passed to insert_combination().');
1350: END IF;
1351:
1352: -- First lock this combination and prevent other users from inserting.
1362: sqls := sqls || ' in row share mode';
1363:
1364: fnd_dsql.init;
1365: fnd_dsql.add_text(sqls);
1366: if(FND_FLEX_SERVER1.x_dsql_execute < 0) THEN
1367: GOTO return_false;
1368: end if;
1369:
1370: -- Next compute the hash number that is to be locked.
1373: if(hash_number < 0) THEN
1374: GOTO return_false;
1375: end if;
1376:
1377: IF (fnd_flex_server1.g_debug_level > 0) THEN
1378: FND_FLEX_SERVER1.add_debug('Hash value = '||to_char(hash_number)||'.');
1379: END IF;
1380: SELECT hash_value INTO hash_num FROM fnd_flex_hash
1381: WHERE hash_value = hash_number FOR UPDATE;
1374: GOTO return_false;
1375: end if;
1376:
1377: IF (fnd_flex_server1.g_debug_level > 0) THEN
1378: FND_FLEX_SERVER1.add_debug('Hash value = '||to_char(hash_number)||'.');
1379: END IF;
1380: SELECT hash_value INTO hash_num FROM fnd_flex_hash
1381: WHERE hash_value = hash_number FOR UPDATE;
1382:
1410: sqls := 'select to_char(' || combtbl.application_table_name;
1411: sqls := sqls || '_S.NEXTVAL) from dual';
1412: fnd_dsql.init;
1413: fnd_dsql.add_text(sqls);
1414: if(FND_FLEX_SERVER1.x_dsql_select_one(ccid_string) <> 1) THEN
1415: GOTO return_false;
1416: end if;
1417: ccid := to_number(ccid_string);
1418: if(ccid > MAX_CCID) then
1491: fnd_dsql.add_text(',');
1492: --
1493: -- This will call fnd_dsql.add_bind
1494: --
1495: fnd_flex_server1.x_compare_clause
1496: (combtypes(i),
1497: combcols(i), segids(i), FND_FLEX_SERVER1.VC_ID,
1498: segfmts.vs_format(i), segfmts.vs_maxsize(i));
1499: end if;
1493: -- This will call fnd_dsql.add_bind
1494: --
1495: fnd_flex_server1.x_compare_clause
1496: (combtypes(i),
1497: combcols(i), segids(i), FND_FLEX_SERVER1.VC_ID,
1498: segfmts.vs_format(i), segfmts.vs_maxsize(i));
1499: end if;
1500: end loop;
1501: fnd_dsql.add_text(')');
1502:
1503: --
1504: -- Finally do the insert
1505: --
1506: if(FND_FLEX_SERVER1.x_dsql_execute < 0) then
1507: GOTO return_false;
1508: end if;
1509: if((fstruct.application_id = 101) and (fstruct.id_flex_code ='GL#')) then
1510: if(call_fdfgli(ccid) = FALSE) THEN
1515:
1516: -- Return all out variables. If comb was found in table these were set
1517: -- above.
1518: --
1519: IF (fnd_flex_server1.g_debug_level > 0) THEN
1520: FND_FLEX_SERVER1.add_debug(' Returning ccid = '||to_char(ccid)|| '. ');
1521: END IF;
1522: ccid_out := ccid;
1523: newcomb := TRUE;
1516: -- Return all out variables. If comb was found in table these were set
1517: -- above.
1518: --
1519: IF (fnd_flex_server1.g_debug_level > 0) THEN
1520: FND_FLEX_SERVER1.add_debug(' Returning ccid = '||to_char(ccid)|| '. ');
1521: END IF;
1522: ccid_out := ccid;
1523: newcomb := TRUE;
1524: tblderv := dvalues;
1608: /* Many error conditions return no array information at all. This */
1609: /* condition is indicated by setting the array counts to 0 for all */
1610: /* empty arrays. */
1611: /* */
1612: /* NOTE: Make sure to call FND_FLEX_SERVER1.init_globals before */
1613: /* calling this function, to initialize debugging and messages. */
1614: /* ------------------------------------------------------------------------ */
1615:
1616: PROCEDURE
1638: where_clause_msg IN VARCHAR2,
1639: get_extra_cols IN VARCHAR2,
1640: ccid_in IN NUMBER,
1641: nvalidated OUT nocopy NUMBER,
1642: displayed_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1643: stored_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1639: get_extra_cols IN VARCHAR2,
1640: ccid_in IN NUMBER,
1641: nvalidated OUT nocopy NUMBER,
1642: displayed_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1643: stored_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1640: ccid_in IN NUMBER,
1641: nvalidated OUT nocopy NUMBER,
1642: displayed_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1643: stored_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1641: nvalidated OUT nocopy NUMBER,
1642: displayed_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1643: stored_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1642: displayed_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1643: stored_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1643: stored_vals OUT nocopy FND_FLEX_SERVER1.ValueArray,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1644: segment_ids OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1645: descriptions OUT nocopy FND_FLEX_SERVER1.ValueDescArray,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1646: desc_lengths OUT nocopy FND_FLEX_SERVER1.NumberArray,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1654: table_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1647: seg_colnames OUT nocopy FND_FLEX_SERVER1.TabColArray,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1654: table_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1655: n_column_vals OUT nocopy NUMBER,
1648: seg_coltypes OUT nocopy FND_FLEX_SERVER1.CharArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1654: table_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1655: n_column_vals OUT nocopy NUMBER,
1656: column_vals OUT nocopy FND_FLEX_SERVER1.StringArray,
1649: segment_types OUT nocopy FND_FLEX_SERVER1.SegFormats,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1654: table_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1655: n_column_vals OUT nocopy NUMBER,
1656: column_vals OUT nocopy FND_FLEX_SERVER1.StringArray,
1657: seg_delimiter OUT nocopy VARCHAR2,
1650: displayed_segs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs,
1651: derived_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1654: table_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1655: n_column_vals OUT nocopy NUMBER,
1656: column_vals OUT nocopy FND_FLEX_SERVER1.StringArray,
1657: seg_delimiter OUT nocopy VARCHAR2,
1658: ccid_out OUT nocopy NUMBER,
1652: table_eff OUT nocopy FND_FLEX_SERVER1.DerivedVals,
1653: derived_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1654: table_quals OUT nocopy FND_FLEX_SERVER1.Qualifiers,
1655: n_column_vals OUT nocopy NUMBER,
1656: column_vals OUT nocopy FND_FLEX_SERVER1.StringArray,
1657: seg_delimiter OUT nocopy VARCHAR2,
1658: ccid_out OUT nocopy NUMBER,
1659: new_combination OUT nocopy BOOLEAN,
1660: v_status OUT nocopy NUMBER,
1662: err_segnum OUT nocopy NUMBER) IS
1663:
1664: big_arg VARCHAR2(40);
1665: catsegs VARCHAR2(2000);
1666: segtypes FND_FLEX_SERVER1.SegFormats;
1667: segcodes VARCHAR2(30);
1668: error_col VARCHAR2(30);
1669: nfound NUMBER;
1670: comb_id NUMBER;
1674: for_insert BOOLEAN;
1675: dynam_insrt BOOLEAN;
1676: defer_insrt BOOLEAN;
1677: new_comb BOOLEAN;
1678: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1679: kff_id FND_FLEX_SERVER1.FlexStructId;
1680: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1681: nvals NUMBER;
1682: nsegs NUMBER;
1675: dynam_insrt BOOLEAN;
1676: defer_insrt BOOLEAN;
1677: new_comb BOOLEAN;
1678: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1679: kff_id FND_FLEX_SERVER1.FlexStructId;
1680: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1681: nvals NUMBER;
1682: nsegs NUMBER;
1683: segs FND_FLEX_SERVER1.StringArray;
1676: defer_insrt BOOLEAN;
1677: new_comb BOOLEAN;
1678: kff_cc FND_FLEX_SERVER1.CombTblInfo;
1679: kff_id FND_FLEX_SERVER1.FlexStructId;
1680: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1681: nvals NUMBER;
1682: nsegs NUMBER;
1683: segs FND_FLEX_SERVER1.StringArray;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1679: kff_id FND_FLEX_SERVER1.FlexStructId;
1680: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1681: nvals NUMBER;
1682: nsegs NUMBER;
1683: segs FND_FLEX_SERVER1.StringArray;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1680: kff_info FND_FLEX_SERVER1.FlexStructInfo;
1681: nvals NUMBER;
1682: nsegs NUMBER;
1683: segs FND_FLEX_SERVER1.StringArray;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1681: nvals NUMBER;
1682: nsegs NUMBER;
1683: segs FND_FLEX_SERVER1.StringArray;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1682: nsegs NUMBER;
1683: segs FND_FLEX_SERVER1.StringArray;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1683: segs FND_FLEX_SERVER1.StringArray;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1684: value_dvals FND_FLEX_SERVER1.ValueArray;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1685: value_vals FND_FLEX_SERVER1.ValueArray;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1686: value_ids FND_FLEX_SERVER1.ValueIdArray;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1687: value_descs FND_FLEX_SERVER1.ValueDescArray;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1688: cc_cols FND_FLEX_SERVER1.TabColArray;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1689: cc_coltypes FND_FLEX_SERVER1.CharArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1690: desc_lens FND_FLEX_SERVER1.NumberArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1698: xcol_vals FND_FLEX_SERVER1.StringArray;
1691: derv FND_FLEX_SERVER1.DerivedVals;
1692: tbl_derv FND_FLEX_SERVER1.DerivedVals;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1698: xcol_vals FND_FLEX_SERVER1.StringArray;
1699: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1693: drv_quals FND_FLEX_SERVER1.Qualifiers;
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1698: xcol_vals FND_FLEX_SERVER1.StringArray;
1699: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1700: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
1701: entered VARCHAR2(1);
1694: tbl_quals FND_FLEX_SERVER1.Qualifiers;
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1698: xcol_vals FND_FLEX_SERVER1.StringArray;
1699: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1700: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
1701: entered VARCHAR2(1);
1702: nice_where_cl VARCHAR2(2000);
1695: v_rules FND_FLEX_SERVER1.Vrules;
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1698: xcol_vals FND_FLEX_SERVER1.StringArray;
1699: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1700: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
1701: entered VARCHAR2(1);
1702: nice_where_cl VARCHAR2(2000);
1703: l_dinsert VARCHAR2(10);
1696: n_xcols NUMBER;
1697: rq_xcols FND_FLEX_SERVER1.StringArray;
1698: xcol_vals FND_FLEX_SERVER1.StringArray;
1699: disp_segs FND_FLEX_SERVER1.DisplayedSegs;
1700: vv_flags FND_FLEX_SERVER1.ValueValidationFlags;
1701: entered VARCHAR2(1);
1702: nice_where_cl VARCHAR2(2000);
1703: l_dinsert VARCHAR2(10);
1704: no_at BOOLEAN := FALSE;
1706: invoking_mode_l VARCHAR2(1);
1707: userid_l NUMBER;
1708: BEGIN
1709: l_dinsert := Nvl(dinsert, 'N');
1710: IF (fnd_flex_server1.g_debug_level > 0) THEN
1711: fnd_flex_server1.add_debug('BEGIN SSV.validation_engine()');
1712: END IF;
1713:
1714: -- Initialize all output variables so that returning from any point
1707: userid_l NUMBER;
1708: BEGIN
1709: l_dinsert := Nvl(dinsert, 'N');
1710: IF (fnd_flex_server1.g_debug_level > 0) THEN
1711: fnd_flex_server1.add_debug('BEGIN SSV.validation_engine()');
1712: END IF;
1713:
1714: -- Initialize all output variables so that returning from any point
1715: -- results in a valid state.
1720: derived_quals.nquals := 0;
1721: table_quals.nquals := 0;
1722: n_column_vals := 0;
1723: new_combination := FALSE;
1724: v_status := FND_FLEX_SERVER1.VV_ERROR;
1725:
1726: -- Initialize everything which affects returned information. This way we
1727: -- can process all returned information before returning when exiting from
1728: -- any point in this code even if there is an error.
1735: drv_quals.nquals := 0;
1736: tbl_quals.nquals := 0;
1737: n_xcols := 0;
1738: new_comb := FALSE;
1739: errcode := FND_FLEX_SERVER1.VV_ERROR;
1740: userid_l := userid;
1741:
1742: if((concat_segs is null) and (ccid_in is null)) then
1743: entered := 'N';
1866: goto return_error;
1867: end if;
1868:
1869: IF (get_extra_cols IS NOT NULL) THEN
1870: n_xcols := FND_FLEX_SERVER1.to_stringarray2(get_extra_cols,
1871: FND_FLEX_SERVER1.TERMINATOR, rq_xcols);
1872: ELSE
1873: n_xcols := 0;
1874: END IF;
1867: end if;
1868:
1869: IF (get_extra_cols IS NOT NULL) THEN
1870: n_xcols := FND_FLEX_SERVER1.to_stringarray2(get_extra_cols,
1871: FND_FLEX_SERVER1.TERMINATOR, rq_xcols);
1872: ELSE
1873: n_xcols := 0;
1874: END IF;
1875:
1881: end loop;
1882:
1883: -- List the parsed v-rules if any
1884: --
1885: IF (fnd_flex_server1.g_debug_level > 0) THEN
1886: if(v_rules.nvrules > 0) then
1887: FND_FLEX_SERVER1.add_debug(to_char(v_rules.nvrules) || '{Vrules: ');
1888: for i in 1..v_rules.nvrules loop
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1883: -- List the parsed v-rules if any
1884: --
1885: IF (fnd_flex_server1.g_debug_level > 0) THEN
1886: if(v_rules.nvrules > 0) then
1887: FND_FLEX_SERVER1.add_debug(to_char(v_rules.nvrules) || '{Vrules: ');
1888: for i in 1..v_rules.nvrules loop
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1885: IF (fnd_flex_server1.g_debug_level > 0) THEN
1886: if(v_rules.nvrules > 0) then
1887: FND_FLEX_SERVER1.add_debug(to_char(v_rules.nvrules) || '{Vrules: ');
1888: for i in 1..v_rules.nvrules loop
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1886: if(v_rules.nvrules > 0) then
1887: FND_FLEX_SERVER1.add_debug(to_char(v_rules.nvrules) || '{Vrules: ');
1888: for i in 1..v_rules.nvrules loop
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1894: FND_FLEX_SERVER1.add_debug(v_rules.err_names(i) || ') ');
1887: FND_FLEX_SERVER1.add_debug(to_char(v_rules.nvrules) || '{Vrules: ');
1888: for i in 1..v_rules.nvrules loop
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1894: FND_FLEX_SERVER1.add_debug(v_rules.err_names(i) || ') ');
1895: end loop;
1888: for i in 1..v_rules.nvrules loop
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1894: FND_FLEX_SERVER1.add_debug(v_rules.err_names(i) || ') ');
1895: end loop;
1896: FND_FLEX_SERVER1.add_debug('} ');
1889: FND_FLEX_SERVER1.add_debug('(' || v_rules.fq_names(i) || ', ');
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1894: FND_FLEX_SERVER1.add_debug(v_rules.err_names(i) || ') ');
1895: end loop;
1896: FND_FLEX_SERVER1.add_debug('} ');
1897: end if;
1890: FND_FLEX_SERVER1.add_debug(v_rules.sq_names(i) || ', ');
1891: FND_FLEX_SERVER1.add_debug(v_rules.ie_flags(i) || ', ');
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1894: FND_FLEX_SERVER1.add_debug(v_rules.err_names(i) || ') ');
1895: end loop;
1896: FND_FLEX_SERVER1.add_debug('} ');
1897: end if;
1898:
1892: FND_FLEX_SERVER1.add_debug(v_rules.cat_vals(i) || ', ');
1893: FND_FLEX_SERVER1.add_debug(v_rules.app_names(i) || ', ');
1894: FND_FLEX_SERVER1.add_debug(v_rules.err_names(i) || ') ');
1895: end loop;
1896: FND_FLEX_SERVER1.add_debug('} ');
1897: end if;
1898:
1899: -- Set up some debug information to return
1900: --
1897: end if;
1898:
1899: -- Set up some debug information to return
1900: --
1901: FND_FLEX_SERVER1.add_debug('User AppId = ' || to_char(user_apid) ||
1902: ', User Resp = ' || to_char(user_resp) ||
1903: ', User Id = ' || to_char(userid_l));
1904: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ' || kff_id.application_id ||
1905: ', Flex Code = ' || flex_code ||
1900: --
1901: FND_FLEX_SERVER1.add_debug('User AppId = ' || to_char(user_apid) ||
1902: ', User Resp = ' || to_char(user_resp) ||
1903: ', User Id = ' || to_char(userid_l));
1904: FND_FLEX_SERVER1.add_debug('Flex Appl Id = ' || kff_id.application_id ||
1905: ', Flex Code = ' || flex_code ||
1906: ', Structure Number = '|| flex_num ||
1907: ', Dinsert = ' || l_dinsert || '. ');
1908: END IF;
1947: vv_flags.values_not_ids, disp_segs, nsegs, segs) = FALSE) then
1948: goto return_error;
1949: end if;
1950:
1951: IF (fnd_flex_server1.g_debug_level > 0) THEN
1952: IF (nsegs > 0) THEN
1953: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
1954: ELSE
1955: catsegs := '';
1949: end if;
1950:
1951: IF (fnd_flex_server1.g_debug_level > 0) THEN
1952: IF (nsegs > 0) THEN
1953: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
1954: ELSE
1955: catsegs := '';
1956: END IF;
1957: FND_FLEX_SERVER1.add_debug(catsegs);
1953: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
1954: ELSE
1955: catsegs := '';
1956: END IF;
1957: FND_FLEX_SERVER1.add_debug(catsegs);
1958: END IF;
1959:
1960: else
1961:
1974: kff_cc.combination_table_id, nsegs, cc_cols,
1975: cc_coltypes, segtypes) = FALSE) then
1976: goto return_error;
1977: end if;
1978: IF (fnd_flex_server1.g_debug_level > 0) THEN
1979: FND_FLEX_SERVER1.add_debug(' LOADID() found segment mapping: [');
1980: for i in 1..nsegs loop
1981: FND_FLEX_SERVER1.add_debug(cc_cols(i) || ' ');
1982: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||' ');
1975: cc_coltypes, segtypes) = FALSE) then
1976: goto return_error;
1977: end if;
1978: IF (fnd_flex_server1.g_debug_level > 0) THEN
1979: FND_FLEX_SERVER1.add_debug(' LOADID() found segment mapping: [');
1980: for i in 1..nsegs loop
1981: FND_FLEX_SERVER1.add_debug(cc_cols(i) || ' ');
1982: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||' ');
1983: end loop;
1977: end if;
1978: IF (fnd_flex_server1.g_debug_level > 0) THEN
1979: FND_FLEX_SERVER1.add_debug(' LOADID() found segment mapping: [');
1980: for i in 1..nsegs loop
1981: FND_FLEX_SERVER1.add_debug(cc_cols(i) || ' ');
1982: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||' ');
1983: end loop;
1984: FND_FLEX_SERVER1.add_debug('] ');
1985: END IF;
1978: IF (fnd_flex_server1.g_debug_level > 0) THEN
1979: FND_FLEX_SERVER1.add_debug(' LOADID() found segment mapping: [');
1980: for i in 1..nsegs loop
1981: FND_FLEX_SERVER1.add_debug(cc_cols(i) || ' ');
1982: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||' ');
1983: end loop;
1984: FND_FLEX_SERVER1.add_debug('] ');
1985: END IF;
1986:
1980: for i in 1..nsegs loop
1981: FND_FLEX_SERVER1.add_debug(cc_cols(i) || ' ');
1982: --FND_FLEX_SERVER1.add_debug(cc_cols(i)||':'||cc_coltypes(i)||' ');
1983: end loop;
1984: FND_FLEX_SERVER1.add_debug('] ');
1985: END IF;
1986:
1987: -- In LOADID() we have to look up the qualifier names, columns, and
1988: -- default values prior to looking for the combination. Therefore we
1994: if(FND_FLEX_SERVER2.get_all_segquals(kff_id, tbl_quals) = FALSE) then
1995: goto return_error;
1996: end if;
1997:
1998: IF (fnd_flex_server1.g_debug_level > 0) THEN
1999: FND_FLEX_SERVER1.add_debug(' LOADID() found qualifier cols: [');
2000: for i in 1..tbl_quals.nquals loop
2001: FND_FLEX_SERVER1.add_debug(tbl_quals.derived_cols(i) || ' ');
2002: end loop;
1995: goto return_error;
1996: end if;
1997:
1998: IF (fnd_flex_server1.g_debug_level > 0) THEN
1999: FND_FLEX_SERVER1.add_debug(' LOADID() found qualifier cols: [');
2000: for i in 1..tbl_quals.nquals loop
2001: FND_FLEX_SERVER1.add_debug(tbl_quals.derived_cols(i) || ' ');
2002: end loop;
2003: FND_FLEX_SERVER1.add_debug('] ');
1997:
1998: IF (fnd_flex_server1.g_debug_level > 0) THEN
1999: FND_FLEX_SERVER1.add_debug(' LOADID() found qualifier cols: [');
2000: for i in 1..tbl_quals.nquals loop
2001: FND_FLEX_SERVER1.add_debug(tbl_quals.derived_cols(i) || ' ');
2002: end loop;
2003: FND_FLEX_SERVER1.add_debug('] ');
2004: END IF;
2005:
1999: FND_FLEX_SERVER1.add_debug(' LOADID() found qualifier cols: [');
2000: for i in 1..tbl_quals.nquals loop
2001: FND_FLEX_SERVER1.add_debug(tbl_quals.derived_cols(i) || ' ');
2002: end loop;
2003: FND_FLEX_SERVER1.add_debug('] ');
2004: END IF;
2005:
2006: -- Next find combination by CCID
2007: --
2028: for i in 1..nsegs loop
2029: segs(i) := value_ids(i);
2030: end loop;
2031:
2032: IF (fnd_flex_server1.g_debug_level > 0) THEN
2033: FND_FLEX_SERVER1.add_debug(' LOADID() found combination. Segids: ');
2034: IF (nsegs > 0) THEN
2035: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
2036: ELSE
2029: segs(i) := value_ids(i);
2030: end loop;
2031:
2032: IF (fnd_flex_server1.g_debug_level > 0) THEN
2033: FND_FLEX_SERVER1.add_debug(' LOADID() found combination. Segids: ');
2034: IF (nsegs > 0) THEN
2035: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
2036: ELSE
2037: catsegs := '';
2031:
2032: IF (fnd_flex_server1.g_debug_level > 0) THEN
2033: FND_FLEX_SERVER1.add_debug(' LOADID() found combination. Segids: ');
2034: IF (nsegs > 0) THEN
2035: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
2036: ELSE
2037: catsegs := '';
2038: END IF;
2039: FND_FLEX_SERVER1.add_debug(catsegs);
2035: catsegs := FND_FLEX_SERVER1.from_stringarray(nsegs, segs, '*');
2036: ELSE
2037: catsegs := '';
2038: END IF;
2039: FND_FLEX_SERVER1.add_debug(catsegs);
2040: END IF;
2041:
2042: -- Next check qualifiers in the table against the vrules.
2043: -- This is done to mimic client behavior, but I think LOADID() shouldnt care.
2043: -- This is done to mimic client behavior, but I think LOADID() shouldnt care.
2044: --
2045: /* bug872437. No vrule check in loadid().
2046: errcode := check_table_comb(tbl_derv,tbl_quals,v_rules,val_date,FALSE);
2047: if(errcode <> FND_FLEX_SERVER1.VV_VALID) then
2048: goto return_outvars;
2049: end if;
2050: */
2051: -- Finally, look up all the displayed values and descriptions and
2060: -- POPID() and VALID() require full value validation.
2061: -- Side effect is to fill cc_cols array with the names of the columns into
2062: -- which the segments will be inserted.
2063: --
2064: errcode := FND_FLEX_SERVER1.validate_struct(kff_id,
2065: kff_cc.table_application_id, kff_cc.combination_table_id,
2066: nsegs, segs, disp_segs, vv_flags, val_date, v_rules, user_apid,
2067: user_resp, nvals, segtypes, segcodes, cc_cols, cc_coltypes,
2068: value_dvals, value_vals, value_ids, value_descs, desc_lens,
2067: user_resp, nvals, segtypes, segcodes, cc_cols, cc_coltypes,
2068: value_dvals, value_vals, value_ids, value_descs, desc_lens,
2069: derv, drv_quals, errsegnum);
2070:
2071: IF (fnd_flex_server1.g_debug_level > 0) THEN
2072: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ' ||
2073: to_char(errcode) ||' and '|| to_char(nvals) ||
2074: ' values. SegCodes: ' || segcodes || '.' ||
2075: ' ErrSeg: ' || to_char(errsegnum));
2068: value_dvals, value_vals, value_ids, value_descs, desc_lens,
2069: derv, drv_quals, errsegnum);
2070:
2071: IF (fnd_flex_server1.g_debug_level > 0) THEN
2072: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ' ||
2073: to_char(errcode) ||' and '|| to_char(nvals) ||
2074: ' values. SegCodes: ' || segcodes || '.' ||
2075: ' ErrSeg: ' || to_char(errsegnum));
2076: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
2072: FND_FLEX_SERVER1.add_debug('SV1.validate_struct() returns errcode ' ||
2073: to_char(errcode) ||' and '|| to_char(nvals) ||
2074: ' values. SegCodes: ' || segcodes || '.' ||
2075: ' ErrSeg: ' || to_char(errsegnum));
2076: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
2077: for i in 1..nvals loop
2078: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i) ||
2079: to_char(segtypes.vs_maxsize(i), 'S099') ||
2080: '*' || value_dvals(i) || '*' ||
2074: ' values. SegCodes: ' || segcodes || '.' ||
2075: ' ErrSeg: ' || to_char(errsegnum));
2076: FND_FLEX_SERVER1.add_debug(' Returned arrays:');
2077: for i in 1..nvals loop
2078: FND_FLEX_SERVER1.add_debug('"' || segtypes.vs_format(i) ||
2079: to_char(segtypes.vs_maxsize(i), 'S099') ||
2080: '*' || value_dvals(i) || '*' ||
2081: cc_cols(i) || ':' || cc_coltypes(i) ||'" ');
2082: end loop;
2079: to_char(segtypes.vs_maxsize(i), 'S099') ||
2080: '*' || value_dvals(i) || '*' ||
2081: cc_cols(i) || ':' || cc_coltypes(i) ||'" ');
2082: end loop;
2083: FND_FLEX_SERVER1.add_debug('Derived values: Start Date:' ||
2084: to_char(derv.start_valid, DATE_DEBUG_FMT) ||
2085: ' End Date:' ||
2086: to_char(derv.end_valid, DATE_DEBUG_FMT) ||
2087: ' Enabled=' || derv.enabled_flag ||
2088: ' Summary=' || derv.summary_flag || '.');
2089:
2090: -- Print derived qualifiers to debug string
2091: --
2092: FND_FLEX_SERVER1.add_debug('Derived Qualifiers=');
2093: for i in 1..drv_quals.nquals LOOP
2094: FND_FLEX_SERVER1.add_debug('(' || drv_quals.fq_names(i) || ', '||
2095: drv_quals.sq_names(i) || ', ' ||
2096: drv_quals.sq_values(i) || ', ' ||
2090: -- Print derived qualifiers to debug string
2091: --
2092: FND_FLEX_SERVER1.add_debug('Derived Qualifiers=');
2093: for i in 1..drv_quals.nquals LOOP
2094: FND_FLEX_SERVER1.add_debug('(' || drv_quals.fq_names(i) || ', '||
2095: drv_quals.sq_names(i) || ', ' ||
2096: drv_quals.sq_values(i) || ', ' ||
2097: drv_quals.derived_cols(i) || ')');
2098: end loop;
2109: -- or if any errors whatsoever.
2110:
2111: if((invoking_mode_l = 'L') or
2112: (validate_mode in ('PARTIAL', 'PARTIAL_IF_POSSIBLE')) or
2113: (errcode <> FND_FLEX_SERVER1.VV_VALID)) then
2114: goto return_outvars;
2115: end if;
2116:
2117:
2137: -- before using it.
2138: -- Keep nice_where_cl null if in for insert mode.
2139: --
2140: if(not for_insert) then
2141: errcode:=FND_FLEX_SERVER1.parse_where_token(where_clause,nice_where_cl);
2142: if(errcode <> FND_FLEX_SERVER1.VV_VALID) then
2143: goto return_outvars;
2144: end if;
2145: end if;
2138: -- Keep nice_where_cl null if in for insert mode.
2139: --
2140: if(not for_insert) then
2141: errcode:=FND_FLEX_SERVER1.parse_where_token(where_clause,nice_where_cl);
2142: if(errcode <> FND_FLEX_SERVER1.VV_VALID) then
2143: goto return_outvars;
2144: end if;
2145: end if;
2146:
2167: -- If combination does not exist continue on.
2168: --
2169: if((nfound = 1) and (ccid_in is not null) and (ccid_in <> 0) and
2170: (ccid_in <> -1) and (comb_id = ccid_in)) then
2171: errcode := FND_FLEX_SERVER1.VV_VALID;
2172: goto return_outvars;
2173: elsif(nfound >= 1) then
2174: FND_MESSAGE.set_name('FND', 'FLEX-COMB. ALREADY EXISTS');
2175: errcode := FND_FLEX_SERVER1.VV_COMBEXISTS;
2171: errcode := FND_FLEX_SERVER1.VV_VALID;
2172: goto return_outvars;
2173: elsif(nfound >= 1) then
2174: FND_MESSAGE.set_name('FND', 'FLEX-COMB. ALREADY EXISTS');
2175: errcode := FND_FLEX_SERVER1.VV_COMBEXISTS;
2176: goto return_outvars;
2177: else
2178: if(nfound <> 0) then
2179: goto return_error;
2183: else
2184:
2185: if(nfound > 0) then
2186: new_comb := FALSE;
2187: IF (fnd_flex_server1.g_debug_level > 0) THEN
2188: FND_FLEX_SERVER1.add_debug(' Combination already exists. CCID = ');
2189: FND_FLEX_SERVER1.add_debug(to_char(comb_id));
2190: END IF;
2191: end if;
2184:
2185: if(nfound > 0) then
2186: new_comb := FALSE;
2187: IF (fnd_flex_server1.g_debug_level > 0) THEN
2188: FND_FLEX_SERVER1.add_debug(' Combination already exists. CCID = ');
2189: FND_FLEX_SERVER1.add_debug(to_char(comb_id));
2190: END IF;
2191: end if;
2192:
2185: if(nfound > 0) then
2186: new_comb := FALSE;
2187: IF (fnd_flex_server1.g_debug_level > 0) THEN
2188: FND_FLEX_SERVER1.add_debug(' Combination already exists. CCID = ');
2189: FND_FLEX_SERVER1.add_debug(to_char(comb_id));
2190: END IF;
2191: end if;
2192:
2193: -- If found, Check qualifiers in the table against the vrules and return.
2221: IF (NOT parse_set_msg(where_clause_msg)) THEN
2222: FND_MESSAGE.set_name('FND', 'FLEX-WHERE CLAUSE FAILURE');
2223: FND_MESSAGE.set_token('WHERE', where_clause);
2224: END IF;
2225: errcode := FND_FLEX_SERVER1.VV_WHEREFAILURE;
2226: goto return_outvars;
2227: elsif((nfound > 1) or (nfound < 0)) then
2228: goto return_error;
2229: else
2239: if(not dynam_insrt) THEN
2240: IF (NOT parse_set_msg(no_combmsg)) THEN
2241: FND_MESSAGE.set_name('FND', 'FLEX-NO DYNAMIC INSERTS');
2242: END IF;
2243: errcode := FND_FLEX_SERVER1.VV_COMBNOTFOUND;
2244: goto return_outvars;
2245: end if;
2246:
2247:
2249: --
2250: if(kff_info.cross_segment_validation_flag = 'Y' AND NOT validate_off) then
2251: errcode := FND_FLEX_SERVER2.cross_validate(nvals, value_vals, segtypes,
2252: val_date, kff_id, error_col);
2253: if(errcode <> FND_FLEX_SERVER1.VV_VALID) then
2254: errsegnum := find_column_index(cc_cols, nvals, error_col);
2255: IF (fnd_flex_server1.g_debug_level > 0) THEN
2256: FND_FLEX_SERVER1.add_debug(' CROSS-VALIDATION-INVALID ON SEG ' ||
2257: to_char(errsegnum) || '. ');
2251: errcode := FND_FLEX_SERVER2.cross_validate(nvals, value_vals, segtypes,
2252: val_date, kff_id, error_col);
2253: if(errcode <> FND_FLEX_SERVER1.VV_VALID) then
2254: errsegnum := find_column_index(cc_cols, nvals, error_col);
2255: IF (fnd_flex_server1.g_debug_level > 0) THEN
2256: FND_FLEX_SERVER1.add_debug(' CROSS-VALIDATION-INVALID ON SEG ' ||
2257: to_char(errsegnum) || '. ');
2258: END IF;
2259: goto return_outvars;
2252: val_date, kff_id, error_col);
2253: if(errcode <> FND_FLEX_SERVER1.VV_VALID) then
2254: errsegnum := find_column_index(cc_cols, nvals, error_col);
2255: IF (fnd_flex_server1.g_debug_level > 0) THEN
2256: FND_FLEX_SERVER1.add_debug(' CROSS-VALIDATION-INVALID ON SEG ' ||
2257: to_char(errsegnum) || '. ');
2258: END IF;
2259: goto return_outvars;
2260: end if;
2280: -- We will not do the real insert, we will just lock the
2281: -- hash number, and let Maintenenace Form do the insert.
2282: -- So no need to call AutoTrans function.
2283: --
2284: IF (fnd_flex_server1.g_debug_level > 0) THEN
2285: fnd_flex_server1.add_debug('FOR_INSERT:Maintenance Form');
2286: END IF;
2287: SAVEPOINT pre_insert_comb;
2288:
2281: -- hash number, and let Maintenenace Form do the insert.
2282: -- So no need to call AutoTrans function.
2283: --
2284: IF (fnd_flex_server1.g_debug_level > 0) THEN
2285: fnd_flex_server1.add_debug('FOR_INSERT:Maintenance Form');
2286: END IF;
2287: SAVEPOINT pre_insert_comb;
2288:
2289:
2311: ROLLBACK TO SAVEPOINT pre_insert_comb;
2312: goto return_error;
2313: end if;
2314: end if;
2315: errcode := FND_FLEX_SERVER1.VV_VALID;
2316: else
2317: ROLLBACK TO SAVEPOINT pre_insert_comb;
2318: if(for_insert and ((ccid_in is null) or (ccid_in = 0) or
2319: (ccid_in = -1) or (comb_id <> ccid_in))) then
2317: ROLLBACK TO SAVEPOINT pre_insert_comb;
2318: if(for_insert and ((ccid_in is null) or (ccid_in = 0) or
2319: (ccid_in = -1) or (comb_id <> ccid_in))) then
2320: FND_MESSAGE.set_name('FND', 'FLEX-COMB. ALREADY EXISTS');
2321: errcode := FND_FLEX_SERVER1.VV_COMBEXISTS;
2322: goto return_error;
2323: end if;
2324: errcode:=check_table_comb(tbl_derv,tbl_quals,v_rules,
2325: val_date,TRUE);
2329: --
2330: -- We are called from a foreign key form.
2331: -- In this case use the AutoTrans.
2332: --
2333: IF (fnd_flex_server1.g_debug_level > 0) THEN
2334: fnd_flex_server1.add_debug('Autonomous Transaction');
2335: END IF;
2336: if(insert_combination_at
2337: (kff_id, cc_struct, for_insert, val_date,
2330: -- We are called from a foreign key form.
2331: -- In this case use the AutoTrans.
2332: --
2333: IF (fnd_flex_server1.g_debug_level > 0) THEN
2334: fnd_flex_server1.add_debug('Autonomous Transaction');
2335: END IF;
2336: if(insert_combination_at
2337: (kff_id, cc_struct, for_insert, val_date,
2338: kff_info.concatenated_segment_delimiter,
2343: comb_id) = FALSE) then
2344: goto return_error;
2345: end if;
2346: IF (new_comb) THEN
2347: errcode := FND_FLEX_SERVER1.VV_VALID;
2348: ELSE
2349: if(for_insert and ((ccid_in is null) or (ccid_in = 0) or
2350: (ccid_in = -1) or (comb_id <> ccid_in))) then
2351: FND_MESSAGE.set_name('FND', 'FLEX-COMB. ALREADY EXISTS');
2348: ELSE
2349: if(for_insert and ((ccid_in is null) or (ccid_in = 0) or
2350: (ccid_in = -1) or (comb_id <> ccid_in))) then
2351: FND_MESSAGE.set_name('FND', 'FLEX-COMB. ALREADY EXISTS');
2352: errcode := FND_FLEX_SERVER1.VV_COMBEXISTS;
2353: goto return_error;
2354: end if;
2355: errcode:=check_table_comb(tbl_derv,tbl_quals,v_rules,
2356: val_date,TRUE);
2360: comb_id := ccid_in;
2361: else
2362: comb_id := -1;
2363: end if;
2364: errcode := FND_FLEX_SERVER1.VV_VALID;
2365: elsif((invoking_mode_l = 'V') and (defer_insrt = TRUE)) then
2366: comb_id := -1;
2367: errcode := FND_FLEX_SERVER1.VV_VALID;
2368: else
2363: end if;
2364: errcode := FND_FLEX_SERVER1.VV_VALID;
2365: elsif((invoking_mode_l = 'V') and (defer_insrt = TRUE)) then
2366: comb_id := -1;
2367: errcode := FND_FLEX_SERVER1.VV_VALID;
2368: else
2369: errcode := FND_FLEX_SERVER1.VV_ERROR;
2370: end if;
2371:
2365: elsif((invoking_mode_l = 'V') and (defer_insrt = TRUE)) then
2366: comb_id := -1;
2367: errcode := FND_FLEX_SERVER1.VV_VALID;
2368: else
2369: errcode := FND_FLEX_SERVER1.VV_ERROR;
2370: end if;
2371:
2372: <
2373: displayed_vals := value_dvals;
2394: v_status := errcode;
2395: GOTO goto_return;
2396:
2397: <
2398: v_status := FND_FLEX_SERVER1.VV_ERROR;
2399: GOTO goto_return;
2400:
2401: <
2402: IF (fnd_flex_server1.g_debug_level > 0) THEN
2398: v_status := FND_FLEX_SERVER1.VV_ERROR;
2399: GOTO goto_return;
2400:
2401: <
2402: IF (fnd_flex_server1.g_debug_level > 0) THEN
2403: fnd_flex_server1.add_debug('END SSV.validation_engine()');
2404: END IF;
2405: RETURN;
2406:
2399: GOTO goto_return;
2400:
2401: <
2402: IF (fnd_flex_server1.g_debug_level > 0) THEN
2403: fnd_flex_server1.add_debug('END SSV.validation_engine()');
2404: END IF;
2405: RETURN;
2406:
2407: EXCEPTION
2407: EXCEPTION
2408: WHEN OTHERS then
2409: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
2410: FND_MESSAGE.set_token('MSG','SSV.validation_engine() exception: '||SQLERRM);
2411: v_status := FND_FLEX_SERVER1.VV_ERROR;
2412: IF (fnd_flex_server1.g_debug_level > 0) THEN
2413: fnd_flex_server1.add_debug('EXCEPTION others SSV.validation_engine()');
2414: END IF;
2415: return;
2408: WHEN OTHERS then
2409: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
2410: FND_MESSAGE.set_token('MSG','SSV.validation_engine() exception: '||SQLERRM);
2411: v_status := FND_FLEX_SERVER1.VV_ERROR;
2412: IF (fnd_flex_server1.g_debug_level > 0) THEN
2413: fnd_flex_server1.add_debug('EXCEPTION others SSV.validation_engine()');
2414: END IF;
2415: return;
2416: END validation_engine;
2409: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
2410: FND_MESSAGE.set_token('MSG','SSV.validation_engine() exception: '||SQLERRM);
2411: v_status := FND_FLEX_SERVER1.VV_ERROR;
2412: IF (fnd_flex_server1.g_debug_level > 0) THEN
2413: fnd_flex_server1.add_debug('EXCEPTION others SSV.validation_engine()');
2414: END IF;
2415: return;
2416: END validation_engine;
2417:
2488: /* Returns number of combinations found or < 0 if error. */
2489: /* If combination not found, all output variables are null. */
2490: /* ----------------------------------------------------------------------- */
2491: FUNCTION find_combination(structnum IN NUMBER,
2492: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2493: nsegs IN NUMBER,
2494: combcols IN FND_FLEX_SERVER1.TabColArray,
2495: combtypes IN FND_FLEX_SERVER1.CharArray,
2496: segfmts IN FND_FLEX_SERVER1.SegFormats,
2490: /* ----------------------------------------------------------------------- */
2491: FUNCTION find_combination(structnum IN NUMBER,
2492: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2493: nsegs IN NUMBER,
2494: combcols IN FND_FLEX_SERVER1.TabColArray,
2495: combtypes IN FND_FLEX_SERVER1.CharArray,
2496: segfmts IN FND_FLEX_SERVER1.SegFormats,
2497: nquals IN NUMBER,
2498: qualcols IN FND_FLEX_SERVER1.TabColArray,
2491: FUNCTION find_combination(structnum IN NUMBER,
2492: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2493: nsegs IN NUMBER,
2494: combcols IN FND_FLEX_SERVER1.TabColArray,
2495: combtypes IN FND_FLEX_SERVER1.CharArray,
2496: segfmts IN FND_FLEX_SERVER1.SegFormats,
2497: nquals IN NUMBER,
2498: qualcols IN FND_FLEX_SERVER1.TabColArray,
2499: nxcols IN NUMBER,
2492: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2493: nsegs IN NUMBER,
2494: combcols IN FND_FLEX_SERVER1.TabColArray,
2495: combtypes IN FND_FLEX_SERVER1.CharArray,
2496: segfmts IN FND_FLEX_SERVER1.SegFormats,
2497: nquals IN NUMBER,
2498: qualcols IN FND_FLEX_SERVER1.TabColArray,
2499: nxcols IN NUMBER,
2500: xcolnames IN FND_FLEX_SERVER1.StringArray,
2494: combcols IN FND_FLEX_SERVER1.TabColArray,
2495: combtypes IN FND_FLEX_SERVER1.CharArray,
2496: segfmts IN FND_FLEX_SERVER1.SegFormats,
2497: nquals IN NUMBER,
2498: qualcols IN FND_FLEX_SERVER1.TabColArray,
2499: nxcols IN NUMBER,
2500: xcolnames IN FND_FLEX_SERVER1.StringArray,
2501: where_cl IN VARCHAR2,
2502: ccid IN OUT nocopy NUMBER,
2496: segfmts IN FND_FLEX_SERVER1.SegFormats,
2497: nquals IN NUMBER,
2498: qualcols IN FND_FLEX_SERVER1.TabColArray,
2499: nxcols IN NUMBER,
2500: xcolnames IN FND_FLEX_SERVER1.StringArray,
2501: where_cl IN VARCHAR2,
2502: ccid IN OUT nocopy NUMBER,
2503: segids IN OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
2504: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2499: nxcols IN NUMBER,
2500: xcolnames IN FND_FLEX_SERVER1.StringArray,
2501: where_cl IN VARCHAR2,
2502: ccid IN OUT nocopy NUMBER,
2503: segids IN OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
2504: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2505: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2506: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray)
2507: RETURN NUMBER IS
2500: xcolnames IN FND_FLEX_SERVER1.StringArray,
2501: where_cl IN VARCHAR2,
2502: ccid IN OUT nocopy NUMBER,
2503: segids IN OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
2504: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2505: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2506: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray)
2507: RETURN NUMBER IS
2508: offset BINARY_INTEGER;
2501: where_cl IN VARCHAR2,
2502: ccid IN OUT nocopy NUMBER,
2503: segids IN OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
2504: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2505: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2506: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray)
2507: RETURN NUMBER IS
2508: offset BINARY_INTEGER;
2509: nrecords NUMBER;
2502: ccid IN OUT nocopy NUMBER,
2503: segids IN OUT nocopy FND_FLEX_SERVER1.ValueIdArray,
2504: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2505: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2506: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray)
2507: RETURN NUMBER IS
2508: offset BINARY_INTEGER;
2509: nrecords NUMBER;
2510: colvals FND_FLEX_SERVER1.StringArray;
2506: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray)
2507: RETURN NUMBER IS
2508: offset BINARY_INTEGER;
2509: nrecords NUMBER;
2510: colvals FND_FLEX_SERVER1.StringArray;
2511: l_vc2 VARCHAR2(100);
2512:
2513: BEGIN
2514:
2522:
2523: sqls := 'select to_char(' || combtbl.unique_id_column_name || '), ';
2524: sqls := sqls || 'nvl(ENABLED_FLAG, ''Y''), nvl(SUMMARY_FLAG, ''N''), ';
2525: sqls := sqls || 'to_char(START_DATE_ACTIVE, ''' ||
2526: FND_FLEX_SERVER1.DATETIME_FMT || '''), ';
2527: sqls := sqls || 'to_char(END_DATE_ACTIVE, ''' ||
2528: FND_FLEX_SERVER1.DATETIME_FMT || ''')';
2529: for i in 1..nsegs loop
2530: sqls := sqls || ', ' || FND_FLEX_SERVER1.select_clause(combcols(i),
2524: sqls := sqls || 'nvl(ENABLED_FLAG, ''Y''), nvl(SUMMARY_FLAG, ''N''), ';
2525: sqls := sqls || 'to_char(START_DATE_ACTIVE, ''' ||
2526: FND_FLEX_SERVER1.DATETIME_FMT || '''), ';
2527: sqls := sqls || 'to_char(END_DATE_ACTIVE, ''' ||
2528: FND_FLEX_SERVER1.DATETIME_FMT || ''')';
2529: for i in 1..nsegs loop
2530: sqls := sqls || ', ' || FND_FLEX_SERVER1.select_clause(combcols(i),
2531: combtypes(i), FND_FLEX_SERVER1.VC_ID,
2532: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2526: FND_FLEX_SERVER1.DATETIME_FMT || '''), ';
2527: sqls := sqls || 'to_char(END_DATE_ACTIVE, ''' ||
2528: FND_FLEX_SERVER1.DATETIME_FMT || ''')';
2529: for i in 1..nsegs loop
2530: sqls := sqls || ', ' || FND_FLEX_SERVER1.select_clause(combcols(i),
2531: combtypes(i), FND_FLEX_SERVER1.VC_ID,
2532: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2533: end loop;
2534: for i in 1..nquals loop
2527: sqls := sqls || 'to_char(END_DATE_ACTIVE, ''' ||
2528: FND_FLEX_SERVER1.DATETIME_FMT || ''')';
2529: for i in 1..nsegs loop
2530: sqls := sqls || ', ' || FND_FLEX_SERVER1.select_clause(combcols(i),
2531: combtypes(i), FND_FLEX_SERVER1.VC_ID,
2532: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2533: end loop;
2534: for i in 1..nquals loop
2535: sqls := sqls || ', ' || qualcols(i);
2565: fnd_dsql.add_text(' = ');
2566: --
2567: -- This will call fnd_dsql.add_bind
2568: --
2569: fnd_flex_server1.x_compare_clause
2570: (combtypes(i),
2571: combcols(i), segids(i), FND_FLEX_SERVER1.VC_ID,
2572: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2573:
2567: -- This will call fnd_dsql.add_bind
2568: --
2569: fnd_flex_server1.x_compare_clause
2570: (combtypes(i),
2571: combcols(i), segids(i), FND_FLEX_SERVER1.VC_ID,
2572: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2573:
2574: fnd_dsql.add_text(')');
2575: end if;
2589:
2590: --
2591: -- This will use the sql string stored in fnd_dsql package.
2592: --
2593: nrecords := fnd_flex_server1.x_dsql_select(nsegs + nquals + nxcols + 5,
2594: colvals);
2595:
2596: -- Return output information.
2597: --
2601: --
2602: ccid := to_number(colvals(1));
2603: tblderv.enabled_flag := colvals(2);
2604: tblderv.summary_flag := colvals(3);
2605: tblderv.start_valid := to_date(colvals(4),FND_FLEX_SERVER1.DATETIME_FMT);
2606: tblderv.end_valid := to_date(colvals(5), FND_FLEX_SERVER1.DATETIME_FMT);
2607:
2608: -- Copy segment column values to output
2609: --
2602: ccid := to_number(colvals(1));
2603: tblderv.enabled_flag := colvals(2);
2604: tblderv.summary_flag := colvals(3);
2605: tblderv.start_valid := to_date(colvals(4),FND_FLEX_SERVER1.DATETIME_FMT);
2606: tblderv.end_valid := to_date(colvals(5), FND_FLEX_SERVER1.DATETIME_FMT);
2607:
2608: -- Copy segment column values to output
2609: --
2610: offset := 5;
2698: /* of if it returns new_comb = FALSE to unlock the hash number. */
2699: /* */
2700: /* Returns TRUE on success or FALSE and sets message on error. */
2701: /* ----------------------------------------------------------------------- */
2702: FUNCTION insert_combination(fstruct IN FND_FLEX_SERVER1.FlexStructId,
2703: structnum IN NUMBER,
2704: maintmode IN BOOLEAN,
2705: v_date IN DATE,
2706: seg_delim IN VARCHAR2,
2704: maintmode IN BOOLEAN,
2705: v_date IN DATE,
2706: seg_delim IN VARCHAR2,
2707: ccid_inp IN NUMBER,
2708: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2709: combcols IN FND_FLEX_SERVER1.TabColArray,
2710: combtypes IN FND_FLEX_SERVER1.CharArray,
2711: user_id IN NUMBER,
2712: nsegs IN NUMBER,
2705: v_date IN DATE,
2706: seg_delim IN VARCHAR2,
2707: ccid_inp IN NUMBER,
2708: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2709: combcols IN FND_FLEX_SERVER1.TabColArray,
2710: combtypes IN FND_FLEX_SERVER1.CharArray,
2711: user_id IN NUMBER,
2712: nsegs IN NUMBER,
2713: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
2706: seg_delim IN VARCHAR2,
2707: ccid_inp IN NUMBER,
2708: combtbl IN FND_FLEX_SERVER1.CombTblInfo,
2709: combcols IN FND_FLEX_SERVER1.TabColArray,
2710: combtypes IN FND_FLEX_SERVER1.CharArray,
2711: user_id IN NUMBER,
2712: nsegs IN NUMBER,
2713: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
2714: segfmts IN FND_FLEX_SERVER1.SegFormats,
2709: combcols IN FND_FLEX_SERVER1.TabColArray,
2710: combtypes IN FND_FLEX_SERVER1.CharArray,
2711: user_id IN NUMBER,
2712: nsegs IN NUMBER,
2713: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
2714: segfmts IN FND_FLEX_SERVER1.SegFormats,
2715: dvalues IN FND_FLEX_SERVER1.DerivedVals,
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2710: combtypes IN FND_FLEX_SERVER1.CharArray,
2711: user_id IN NUMBER,
2712: nsegs IN NUMBER,
2713: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
2714: segfmts IN FND_FLEX_SERVER1.SegFormats,
2715: dvalues IN FND_FLEX_SERVER1.DerivedVals,
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2711: user_id IN NUMBER,
2712: nsegs IN NUMBER,
2713: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
2714: segfmts IN FND_FLEX_SERVER1.SegFormats,
2715: dvalues IN FND_FLEX_SERVER1.DerivedVals,
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2719: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
2712: nsegs IN NUMBER,
2713: segids_in IN FND_FLEX_SERVER1.ValueIdArray,
2714: segfmts IN FND_FLEX_SERVER1.SegFormats,
2715: dvalues IN FND_FLEX_SERVER1.DerivedVals,
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2719: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
2720: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2714: segfmts IN FND_FLEX_SERVER1.SegFormats,
2715: dvalues IN FND_FLEX_SERVER1.DerivedVals,
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2719: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
2720: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2721: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2722: newcomb OUT nocopy BOOLEAN,
2715: dvalues IN FND_FLEX_SERVER1.DerivedVals,
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2719: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
2720: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2721: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2722: newcomb OUT nocopy BOOLEAN,
2723: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN IS
2716: dquals IN FND_FLEX_SERVER1.Qualifiers,
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2719: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
2720: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2721: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2722: newcomb OUT nocopy BOOLEAN,
2723: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN IS
2724:
2717: nxcols IN NUMBER,
2718: xcolnames IN FND_FLEX_SERVER1.StringArray,
2719: xcolvals OUT nocopy FND_FLEX_SERVER1.StringArray,
2720: qualvals OUT nocopy FND_FLEX_SERVER1.ValAttribArray,
2721: tblderv OUT nocopy FND_FLEX_SERVER1.DerivedVals,
2722: newcomb OUT nocopy BOOLEAN,
2723: ccid_out OUT nocopy NUMBER) RETURN BOOLEAN IS
2724:
2725: deadlock EXCEPTION;
2727: nfound NUMBER;
2728: hash_num NUMBER;
2729: hash_number NUMBER;
2730: ccid_string VARCHAR2(50);
2731: segids FND_FLEX_SERVER1.ValueIdArray;
2732:
2733: PRAGMA EXCEPTION_INIT(deadlock, -60);
2734:
2735: BEGIN
2736:
2737: -- For debugging...
2738: --
2739:
2740: IF (fnd_flex_server1.g_debug_level > 0) THEN
2741: FND_FLEX_SERVER1.add_debug(to_char(nsegs) ||
2742: ' segs passed to insert_combination().');
2743: END IF;
2744:
2737: -- For debugging...
2738: --
2739:
2740: IF (fnd_flex_server1.g_debug_level > 0) THEN
2741: FND_FLEX_SERVER1.add_debug(to_char(nsegs) ||
2742: ' segs passed to insert_combination().');
2743: END IF;
2744:
2745: -- First lock this combination and prevent other users from inserting.
2755: sqls := sqls || ' in row share mode';
2756:
2757: fnd_dsql.init;
2758: fnd_dsql.add_text(sqls);
2759: if(FND_FLEX_SERVER1.x_dsql_execute < 0) then
2760: return(FALSE);
2761: end if;
2762:
2763: -- Next compute the hash number that is to be locked.
2766: if(hash_number < 0) then
2767: return(FALSE);
2768: end if;
2769:
2770: IF (fnd_flex_server1.g_debug_level > 0) THEN
2771: FND_FLEX_SERVER1.add_debug('Hash value = '||to_char(hash_number)||'.');
2772: END IF;
2773: SELECT hash_value INTO hash_num FROM fnd_flex_hash
2774: WHERE hash_value = hash_number FOR UPDATE;
2767: return(FALSE);
2768: end if;
2769:
2770: IF (fnd_flex_server1.g_debug_level > 0) THEN
2771: FND_FLEX_SERVER1.add_debug('Hash value = '||to_char(hash_number)||'.');
2772: END IF;
2773: SELECT hash_value INTO hash_num FROM fnd_flex_hash
2774: WHERE hash_value = hash_number FOR UPDATE;
2775:
2801: sqls := 'select to_char(' || combtbl.application_table_name;
2802: sqls := sqls || '_S.NEXTVAL) from dual';
2803: fnd_dsql.init;
2804: fnd_dsql.add_text(sqls);
2805: if(FND_FLEX_SERVER1.x_dsql_select_one(ccid_string) <> 1) then
2806: return(FALSE);
2807: end if;
2808: ccid := to_number(ccid_string);
2809: if(ccid > MAX_CCID) then
2882: fnd_dsql.add_text(',');
2883: --
2884: -- This will call fnd_dsql.add_bind
2885: --
2886: fnd_flex_server1.x_compare_clause
2887: (combtypes(i),
2888: combcols(i), segids(i), FND_FLEX_SERVER1.VC_ID,
2889: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2890: end if;
2884: -- This will call fnd_dsql.add_bind
2885: --
2886: fnd_flex_server1.x_compare_clause
2887: (combtypes(i),
2888: combcols(i), segids(i), FND_FLEX_SERVER1.VC_ID,
2889: segfmts.vs_format(i), segfmts.vs_maxsize(i));
2890: end if;
2891: end loop;
2892: fnd_dsql.add_text(')');
2893:
2894: --
2895: -- Finally do the insert
2896: --
2897: if(FND_FLEX_SERVER1.x_dsql_execute < 0) then
2898: return(FALSE);
2899: end if;
2900: end if;
2901:
2901:
2902: -- Return all out variables. If comb was found in table these were set
2903: -- above.
2904: --
2905: IF (fnd_flex_server1.g_debug_level > 0) THEN
2906: FND_FLEX_SERVER1.add_debug(' Returning ccid = '||to_char(ccid) || '. ');
2907: END IF;
2908: ccid_out := ccid;
2909: newcomb := TRUE;
2902: -- Return all out variables. If comb was found in table these were set
2903: -- above.
2904: --
2905: IF (fnd_flex_server1.g_debug_level > 0) THEN
2906: FND_FLEX_SERVER1.add_debug(' Returning ccid = '||to_char(ccid) || '. ');
2907: END IF;
2908: ccid_out := ccid;
2909: newcomb := TRUE;
2910: tblderv := dvalues;
2947: /* up to 64K for multi-byte characters. Multiply code for each char */
2948: /* by the characters position to make non-commutative */
2949: /* ----------------------------------------------------------------------- */
2950:
2951: FUNCTION hash_segs(n IN NUMBER, segs IN FND_FLEX_SERVER1.ValueIdArray)
2952: RETURN NUMBER IS
2953:
2954: hval NUMBER;
2955: cval NUMBER;
2988: /* flags if check_effective flag is TRUE. */
2989: /* Error code indicating result of validation. VV_VALID means all ok */
2990: /* ----------------------------------------------------------------------- */
2991:
2992: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
2993: t_quals IN FND_FLEX_SERVER1.Qualifiers,
2994: v_rules IN FND_FLEX_SERVER1.Vrules,
2995: v_date IN DATE,
2996: check_effective IN BOOLEAN) RETURN NUMBER IS
2989: /* Error code indicating result of validation. VV_VALID means all ok */
2990: /* ----------------------------------------------------------------------- */
2991:
2992: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
2993: t_quals IN FND_FLEX_SERVER1.Qualifiers,
2994: v_rules IN FND_FLEX_SERVER1.Vrules,
2995: v_date IN DATE,
2996: check_effective IN BOOLEAN) RETURN NUMBER IS
2997: BEGIN
2990: /* ----------------------------------------------------------------------- */
2991:
2992: FUNCTION check_table_comb(t_dval IN FND_FLEX_SERVER1.DerivedVals,
2993: t_quals IN FND_FLEX_SERVER1.Qualifiers,
2994: v_rules IN FND_FLEX_SERVER1.Vrules,
2995: v_date IN DATE,
2996: check_effective IN BOOLEAN) RETURN NUMBER IS
2997: BEGIN
2998:
2997: BEGIN
2998:
2999: -- Print table segments, qualifiers, extra columns and effectivity info.
3000: --
3001: IF (fnd_flex_server1.g_debug_level > 0) THEN
3002: FND_FLEX_SERVER1.add_debug('Check expiration/vrules on table quals.');
3003:
3004: FND_FLEX_SERVER1.add_debug('Qualifiers: ');
3005: for i in 1..t_quals.nquals loop
2998:
2999: -- Print table segments, qualifiers, extra columns and effectivity info.
3000: --
3001: IF (fnd_flex_server1.g_debug_level > 0) THEN
3002: FND_FLEX_SERVER1.add_debug('Check expiration/vrules on table quals.');
3003:
3004: FND_FLEX_SERVER1.add_debug('Qualifiers: ');
3005: for i in 1..t_quals.nquals loop
3006: FND_FLEX_SERVER1.add_debug('(' || t_quals.sq_names(i) || ' = ');
3000: --
3001: IF (fnd_flex_server1.g_debug_level > 0) THEN
3002: FND_FLEX_SERVER1.add_debug('Check expiration/vrules on table quals.');
3003:
3004: FND_FLEX_SERVER1.add_debug('Qualifiers: ');
3005: for i in 1..t_quals.nquals loop
3006: FND_FLEX_SERVER1.add_debug('(' || t_quals.sq_names(i) || ' = ');
3007: FND_FLEX_SERVER1.add_debug(t_quals.sq_values(i) || ') ');
3008: end loop;
3002: FND_FLEX_SERVER1.add_debug('Check expiration/vrules on table quals.');
3003:
3004: FND_FLEX_SERVER1.add_debug('Qualifiers: ');
3005: for i in 1..t_quals.nquals loop
3006: FND_FLEX_SERVER1.add_debug('(' || t_quals.sq_names(i) || ' = ');
3007: FND_FLEX_SERVER1.add_debug(t_quals.sq_values(i) || ') ');
3008: end loop;
3009:
3010: FND_FLEX_SERVER1.add_debug('Enabled: ' || t_dval.enabled_flag);
3003:
3004: FND_FLEX_SERVER1.add_debug('Qualifiers: ');
3005: for i in 1..t_quals.nquals loop
3006: FND_FLEX_SERVER1.add_debug('(' || t_quals.sq_names(i) || ' = ');
3007: FND_FLEX_SERVER1.add_debug(t_quals.sq_values(i) || ') ');
3008: end loop;
3009:
3010: FND_FLEX_SERVER1.add_debug('Enabled: ' || t_dval.enabled_flag);
3011: FND_FLEX_SERVER1.add_debug
3006: FND_FLEX_SERVER1.add_debug('(' || t_quals.sq_names(i) || ' = ');
3007: FND_FLEX_SERVER1.add_debug(t_quals.sq_values(i) || ') ');
3008: end loop;
3009:
3010: FND_FLEX_SERVER1.add_debug('Enabled: ' || t_dval.enabled_flag);
3011: FND_FLEX_SERVER1.add_debug
3012: (' Starts: ' || to_char(t_dval.start_valid,
3013: FND_FLEX_SERVER1.DATETIME_FMT));
3014: FND_FLEX_SERVER1.add_debug
3007: FND_FLEX_SERVER1.add_debug(t_quals.sq_values(i) || ') ');
3008: end loop;
3009:
3010: FND_FLEX_SERVER1.add_debug('Enabled: ' || t_dval.enabled_flag);
3011: FND_FLEX_SERVER1.add_debug
3012: (' Starts: ' || to_char(t_dval.start_valid,
3013: FND_FLEX_SERVER1.DATETIME_FMT));
3014: FND_FLEX_SERVER1.add_debug
3015: (' Ends: ' || to_char(t_dval.end_valid,
3009:
3010: FND_FLEX_SERVER1.add_debug('Enabled: ' || t_dval.enabled_flag);
3011: FND_FLEX_SERVER1.add_debug
3012: (' Starts: ' || to_char(t_dval.start_valid,
3013: FND_FLEX_SERVER1.DATETIME_FMT));
3014: FND_FLEX_SERVER1.add_debug
3015: (' Ends: ' || to_char(t_dval.end_valid,
3016: FND_FLEX_SERVER1.DATETIME_FMT));
3017: FND_FLEX_SERVER1.add_debug(' Summary Flag: ' || t_dval.summary_flag);
3010: FND_FLEX_SERVER1.add_debug('Enabled: ' || t_dval.enabled_flag);
3011: FND_FLEX_SERVER1.add_debug
3012: (' Starts: ' || to_char(t_dval.start_valid,
3013: FND_FLEX_SERVER1.DATETIME_FMT));
3014: FND_FLEX_SERVER1.add_debug
3015: (' Ends: ' || to_char(t_dval.end_valid,
3016: FND_FLEX_SERVER1.DATETIME_FMT));
3017: FND_FLEX_SERVER1.add_debug(' Summary Flag: ' || t_dval.summary_flag);
3018: END IF;
3012: (' Starts: ' || to_char(t_dval.start_valid,
3013: FND_FLEX_SERVER1.DATETIME_FMT));
3014: FND_FLEX_SERVER1.add_debug
3015: (' Ends: ' || to_char(t_dval.end_valid,
3016: FND_FLEX_SERVER1.DATETIME_FMT));
3017: FND_FLEX_SERVER1.add_debug(' Summary Flag: ' || t_dval.summary_flag);
3018: END IF;
3019: -- Check if combination turned on
3020: --
3013: FND_FLEX_SERVER1.DATETIME_FMT));
3014: FND_FLEX_SERVER1.add_debug
3015: (' Ends: ' || to_char(t_dval.end_valid,
3016: FND_FLEX_SERVER1.DATETIME_FMT));
3017: FND_FLEX_SERVER1.add_debug(' Summary Flag: ' || t_dval.summary_flag);
3018: END IF;
3019: -- Check if combination turned on
3020: --
3021: if(check_effective) then
3020: --
3021: if(check_effective) then
3022: if(t_dval.enabled_flag <> 'Y') then
3023: FND_MESSAGE.set_name('FND', 'FLEX-COMBINATION DISABLED');
3024: return(FND_FLEX_SERVER1.VV_VALUES);
3025: end if;
3026: if((v_date is not null) and
3027: ((Trunc(v_date) < Trunc(nvl(t_dval.start_valid, v_date))) or
3028: (Trunc(v_date) > Trunc(nvl(t_dval.end_valid, v_date))))) then
3026: if((v_date is not null) and
3027: ((Trunc(v_date) < Trunc(nvl(t_dval.start_valid, v_date))) or
3028: (Trunc(v_date) > Trunc(nvl(t_dval.end_valid, v_date))))) then
3029: FND_MESSAGE.set_name('FND', 'FLEX-COMBINATION HAS EXPIRED');
3030: return(FND_FLEX_SERVER1.VV_VALUES);
3031: end if;
3032: end if;
3033:
3034: -- Check vrules.
3032: end if;
3033:
3034: -- Check vrules.
3035: --
3036: return(FND_FLEX_SERVER1.check_comb_vrules(v_rules, t_quals,
3037: t_dval.summary_flag));
3038: EXCEPTION
3039: WHEN OTHERS then
3040: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
3038: EXCEPTION
3039: WHEN OTHERS then
3040: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
3041: FND_MESSAGE.set_token('MSG','check_table_comb() exception: '||SQLERRM);
3042: return(FND_FLEX_SERVER1.VV_ERROR);
3043:
3044: END check_table_comb;
3045:
3046: /* ----------------------------------------------------------------------- */
3047: /* Determines the segment number of the given column name. */
3048: /* Returns null without erroring if the name is not on the list. */
3049: /* ----------------------------------------------------------------------- */
3050:
3051: FUNCTION find_column_index(column_list IN FND_FLEX_SERVER1.TabColArray,
3052: column_count IN NUMBER,
3053: colname IN VARCHAR2) RETURN NUMBER IS
3054: colnum NUMBER;
3055:
3072: /* Concatenates only displayed values. */
3073: /* ----------------------------------------------------------------------- */
3074:
3075: FUNCTION concatenate_values(nvals IN NUMBER,
3076: vals IN FND_FLEX_SERVER1.ValueArray,
3077: displ FND_FLEX_SERVER1.DisplayedSegs,
3078: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3079: n_displayed NUMBER;
3080: str FND_FLEX_SERVER1.StringArray;
3073: /* ----------------------------------------------------------------------- */
3074:
3075: FUNCTION concatenate_values(nvals IN NUMBER,
3076: vals IN FND_FLEX_SERVER1.ValueArray,
3077: displ FND_FLEX_SERVER1.DisplayedSegs,
3078: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3079: n_displayed NUMBER;
3080: str FND_FLEX_SERVER1.StringArray;
3081: BEGIN
3076: vals IN FND_FLEX_SERVER1.ValueArray,
3077: displ FND_FLEX_SERVER1.DisplayedSegs,
3078: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3079: n_displayed NUMBER;
3080: str FND_FLEX_SERVER1.StringArray;
3081: BEGIN
3082: IF (fnd_flex_server1.g_debug_level > 0) THEN
3083: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_values()');
3084: END IF;
3078: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3079: n_displayed NUMBER;
3080: str FND_FLEX_SERVER1.StringArray;
3081: BEGIN
3082: IF (fnd_flex_server1.g_debug_level > 0) THEN
3083: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_values()');
3084: END IF;
3085: n_displayed := 0;
3086: for i in 1..nvals loop
3079: n_displayed NUMBER;
3080: str FND_FLEX_SERVER1.StringArray;
3081: BEGIN
3082: IF (fnd_flex_server1.g_debug_level > 0) THEN
3083: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_values()');
3084: END IF;
3085: n_displayed := 0;
3086: for i in 1..nvals loop
3087: if((i <= displ.n_segflags) and displ.segflags(i)) then
3090: end if;
3091: end loop;
3092:
3093: IF (n_displayed > 1) THEN
3094: return(FND_FLEX_SERVER1.from_stringarray(n_displayed, str, delimiter));
3095: ELSIF (n_displayed = 1) then
3096: return(str(1));
3097: ELSE
3098: RETURN (NULL);
3105: /* Concatenates all ids whether or not their segments are displayed. */
3106: /* ----------------------------------------------------------------------- */
3107:
3108: FUNCTION concatenate_ids(nids IN NUMBER,
3109: ids IN FND_FLEX_SERVER1.ValueIdArray,
3110: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3111: str FND_FLEX_SERVER1.StringArray;
3112: BEGIN
3113: IF (fnd_flex_server1.g_debug_level > 0) THEN
3107:
3108: FUNCTION concatenate_ids(nids IN NUMBER,
3109: ids IN FND_FLEX_SERVER1.ValueIdArray,
3110: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3111: str FND_FLEX_SERVER1.StringArray;
3112: BEGIN
3113: IF (fnd_flex_server1.g_debug_level > 0) THEN
3114: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_ids()');
3115: END IF;
3109: ids IN FND_FLEX_SERVER1.ValueIdArray,
3110: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3111: str FND_FLEX_SERVER1.StringArray;
3112: BEGIN
3113: IF (fnd_flex_server1.g_debug_level > 0) THEN
3114: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_ids()');
3115: END IF;
3116: if(nids = 1) then
3117: return(ids(1));
3110: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3111: str FND_FLEX_SERVER1.StringArray;
3112: BEGIN
3113: IF (fnd_flex_server1.g_debug_level > 0) THEN
3114: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_ids()');
3115: END IF;
3116: if(nids = 1) then
3117: return(ids(1));
3118: else
3119: for i in 1..nids loop
3120: str(i) := ids(i);
3121: end loop;
3122: IF (nids > 1) THEN
3123: return(FND_FLEX_SERVER1.from_stringarray(nids, str, delimiter));
3124: ELSIF (nids = 1) THEN
3125: RETURN(str(1));
3126: ELSE
3127: RETURN NULL;
3137: /* If only one value displayed does not substitute CR for delimiter. */
3138: /* ----------------------------------------------------------------------- */
3139:
3140: FUNCTION concatenate_descriptions(ndescs IN NUMBER,
3141: descs IN FND_FLEX_SERVER1.ValueDescArray,
3142: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3143: lengths IN FND_FLEX_SERVER1.NumberArray,
3144: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3145: n_displayed NUMBER;
3138: /* ----------------------------------------------------------------------- */
3139:
3140: FUNCTION concatenate_descriptions(ndescs IN NUMBER,
3141: descs IN FND_FLEX_SERVER1.ValueDescArray,
3142: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3143: lengths IN FND_FLEX_SERVER1.NumberArray,
3144: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3145: n_displayed NUMBER;
3146: str FND_FLEX_SERVER1.StringArray;
3139:
3140: FUNCTION concatenate_descriptions(ndescs IN NUMBER,
3141: descs IN FND_FLEX_SERVER1.ValueDescArray,
3142: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3143: lengths IN FND_FLEX_SERVER1.NumberArray,
3144: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3145: n_displayed NUMBER;
3146: str FND_FLEX_SERVER1.StringArray;
3147: BEGIN
3142: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3143: lengths IN FND_FLEX_SERVER1.NumberArray,
3144: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3145: n_displayed NUMBER;
3146: str FND_FLEX_SERVER1.StringArray;
3147: BEGIN
3148: IF (fnd_flex_server1.g_debug_level > 0) THEN
3149: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_descriptions()');
3150: END IF;
3144: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3145: n_displayed NUMBER;
3146: str FND_FLEX_SERVER1.StringArray;
3147: BEGIN
3148: IF (fnd_flex_server1.g_debug_level > 0) THEN
3149: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_descriptions()');
3150: END IF;
3151: n_displayed := 0;
3152: for i in 1..ndescs loop
3145: n_displayed NUMBER;
3146: str FND_FLEX_SERVER1.StringArray;
3147: BEGIN
3148: IF (fnd_flex_server1.g_debug_level > 0) THEN
3149: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_descriptions()');
3150: END IF;
3151: n_displayed := 0;
3152: for i in 1..ndescs loop
3153: if((i <= displ.n_segflags) and displ.segflags(i)) then
3156: end if;
3157: end loop;
3158:
3159: IF (n_displayed > 1) THEN
3160: return(FND_FLEX_SERVER1.from_stringarray(n_displayed, str, delimiter));
3161: ELSIF (n_displayed = 1) then
3162: return(str(1));
3163: ELSE
3164: RETURN (NULL);
3172: /* If only one value displayed does not substitute CR for delimiter. */
3173: /* ----------------------------------------------------------------------- */
3174:
3175: FUNCTION concatenate_fulldescs(ndescs IN NUMBER,
3176: descs IN FND_FLEX_SERVER1.ValueDescArray,
3177: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3178: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3179: n_displayed NUMBER;
3180: str FND_FLEX_SERVER1.StringArray;
3173: /* ----------------------------------------------------------------------- */
3174:
3175: FUNCTION concatenate_fulldescs(ndescs IN NUMBER,
3176: descs IN FND_FLEX_SERVER1.ValueDescArray,
3177: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3178: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3179: n_displayed NUMBER;
3180: str FND_FLEX_SERVER1.StringArray;
3181: BEGIN
3176: descs IN FND_FLEX_SERVER1.ValueDescArray,
3177: displ IN FND_FLEX_SERVER1.DisplayedSegs,
3178: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3179: n_displayed NUMBER;
3180: str FND_FLEX_SERVER1.StringArray;
3181: BEGIN
3182: IF (fnd_flex_server1.g_debug_level > 0) THEN
3183: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_fulldesc()');
3184: END IF;
3178: delimiter IN VARCHAR2) RETURN VARCHAR2 IS
3179: n_displayed NUMBER;
3180: str FND_FLEX_SERVER1.StringArray;
3181: BEGIN
3182: IF (fnd_flex_server1.g_debug_level > 0) THEN
3183: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_fulldesc()');
3184: END IF;
3185: n_displayed := 0;
3186: for i in 1..ndescs loop
3179: n_displayed NUMBER;
3180: str FND_FLEX_SERVER1.StringArray;
3181: BEGIN
3182: IF (fnd_flex_server1.g_debug_level > 0) THEN
3183: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_fulldesc()');
3184: END IF;
3185: n_displayed := 0;
3186: for i in 1..ndescs loop
3187: if((i <= displ.n_segflags) and displ.segflags(i)) then
3190: end if;
3191: end loop;
3192:
3193: IF (n_displayed > 1) THEN
3194: return(FND_FLEX_SERVER1.from_stringarray(n_displayed, str, delimiter));
3195: ELSIF (n_displayed = 1) then
3196: return(str(1));
3197: ELSE
3198: RETURN (NULL);
3202: /* ----------------------------------------------------------------------- */
3203: /* Concatenate segment formats to string for return to the client. */
3204: /* ----------------------------------------------------------------------- */
3205:
3206: FUNCTION concatenate_segment_formats(segfmts IN FND_FLEX_SERVER1.SegFormats)
3207: RETURN VARCHAR2 IS
3208: catfmts VARCHAR2(200);
3209:
3210: BEGIN
3224: /* will result in a NULL being returned in the appropriate place. */
3225: /* Return string has qualifier values separated by TERMINATOR. */
3226: /* ----------------------------------------------------------------------- */
3227:
3228: FUNCTION ret_derived(d_quals IN FND_FLEX_SERVER1.Qualifiers,
3229: drv IN FND_FLEX_SERVER1.DerivedVals,
3230: d_rqst IN DerivedRqst) RETURN VARCHAR2 IS
3231:
3232: str VARCHAR2(2000);
3225: /* Return string has qualifier values separated by TERMINATOR. */
3226: /* ----------------------------------------------------------------------- */
3227:
3228: FUNCTION ret_derived(d_quals IN FND_FLEX_SERVER1.Qualifiers,
3229: drv IN FND_FLEX_SERVER1.DerivedVals,
3230: d_rqst IN DerivedRqst) RETURN VARCHAR2 IS
3231:
3232: str VARCHAR2(2000);
3233:
3248: exit;
3249: end if;
3250: end loop;
3251: end if;
3252: str := str || FND_FLEX_SERVER1.TERMINATOR;
3253: end loop;
3254: if(str is not null) then
3255: str := SUBSTR(str, 1, LENGTH(str) - LENGTH(FND_FLEX_SERVER1.TERMINATOR));
3256: end if;
3251: end if;
3252: str := str || FND_FLEX_SERVER1.TERMINATOR;
3253: end loop;
3254: if(str is not null) then
3255: str := SUBSTR(str, 1, LENGTH(str) - LENGTH(FND_FLEX_SERVER1.TERMINATOR));
3256: end if;
3257: return(str);
3258:
3259: END ret_derived;
3268: /* Any qualifiers not found in the list of derived qualifiers */
3269: /* will result in a NULL being returned in the appropriate place. */
3270: /* Return string has qualifier values separated by TERMINATOR. */
3271: /* ----------------------------------------------------------------------- */
3272: FUNCTION ret_valatts(d_quals IN FND_FLEX_SERVER1.Qualifiers,
3273: drv IN FND_FLEX_SERVER1.DerivedVals,
3274: v_rqst IN ValattRqst) RETURN VARCHAR2 IS
3275:
3276: str VARCHAR2(2000);
3269: /* will result in a NULL being returned in the appropriate place. */
3270: /* Return string has qualifier values separated by TERMINATOR. */
3271: /* ----------------------------------------------------------------------- */
3272: FUNCTION ret_valatts(d_quals IN FND_FLEX_SERVER1.Qualifiers,
3273: drv IN FND_FLEX_SERVER1.DerivedVals,
3274: v_rqst IN ValattRqst) RETURN VARCHAR2 IS
3275:
3276: str VARCHAR2(2000);
3277:
3295: exit;
3296: end if;
3297: end loop;
3298: end if;
3299: str := str || FND_FLEX_SERVER1.TERMINATOR;
3300: end loop;
3301: if(str is not null) then
3302: str := SUBSTR(str, 1, LENGTH(str) - LENGTH(FND_FLEX_SERVER1.TERMINATOR));
3303: end if;
3298: end if;
3299: str := str || FND_FLEX_SERVER1.TERMINATOR;
3300: end loop;
3301: if(str is not null) then
3302: str := SUBSTR(str, 1, LENGTH(str) - LENGTH(FND_FLEX_SERVER1.TERMINATOR));
3303: end if;
3304: return(str);
3305:
3306: END ret_valatts;
3315: FUNCTION parse_va_rqst(s IN VARCHAR2, var OUT nocopy ValattRqst) RETURN NUMBER IS
3316:
3317: nsegs NUMBER;
3318: fqname_end NUMBER;
3319: fqsq_names FND_FLEX_SERVER1.StringArray;
3320: sq_name VARCHAR2(30);
3321:
3322: BEGIN
3323:
3330: return(-6);
3331: end if;
3332:
3333: IF (s IS NOT NULL) THEN
3334: nsegs := FND_FLEX_SERVER1.to_stringarray2(s, FND_FLEX_SERVER1.TERMINATOR,
3335: fqsq_names);
3336: ELSE
3337: nsegs := 0;
3338: END IF;
3338: END IF;
3339:
3340: for i in 1..nsegs loop
3341: if(fqsq_names(i) is not null) then
3342: fqname_end := INSTR(fqsq_names(i), FND_FLEX_SERVER1.SEPARATOR);
3343: if(fqname_end <= 0) then
3344: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VALATT NOSEP');
3345: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3346: FND_MESSAGE.set_token('NAME', fqsq_names(i));
3341: if(fqsq_names(i) is not null) then
3342: fqname_end := INSTR(fqsq_names(i), FND_FLEX_SERVER1.SEPARATOR);
3343: if(fqname_end <= 0) then
3344: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VALATT NOSEP');
3345: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3346: FND_MESSAGE.set_token('NAME', fqsq_names(i));
3347: return(-1);
3348: elsif(fqname_end > 31) then
3349: FND_MESSAGE.set_name('FND', 'FLEX-QUALIFIER TOO LONG');
3352: return(-2);
3353: else
3354: var.fq_names(i) := UPPER(SUBSTR(fqsq_names(i), 1, fqname_end - 1));
3355: sq_name := UPPER(SUBSTR(fqsq_names(i),
3356: fqname_end + LENGTH(FND_FLEX_SERVER1.SEPARATOR), 30));
3357: if(sq_name is null) then
3358: FND_MESSAGE.set_name('FND', 'FLEX-MISSING SQNAME');
3359: FND_MESSAGE.set_token('TOKNAME', 'VALATT');
3360: return(-3);
3386: /* ----------------------------------------------------------------------- */
3387: FUNCTION parse_drv_rqst(s IN VARCHAR2, dr OUT nocopy DerivedRqst) RETURN NUMBER IS
3388:
3389: nsegs NUMBER;
3390: sqnames FND_FLEX_SERVER1.StringArray;
3391:
3392: BEGIN
3393:
3394: -- Make sure it is not too big
3400: return(-6);
3401: end if;
3402:
3403: IF (s IS NOT NULL) THEN
3404: nsegs := FND_FLEX_SERVER1.to_stringarray2(s, FND_FLEX_SERVER1.TERMINATOR,
3405: sqnames);
3406: ELSE
3407: nsegs := 0;
3408: END IF;
3446: /* Eliminates whitespace from around component names. */
3447: /* Limits vrule string length to < MAX_VRULE_LEN bytes. */
3448: /* ----------------------------------------------------------------------- */
3449: FUNCTION parse_vrules(s IN VARCHAR2,
3450: vr OUT nocopy FND_FLEX_SERVER1.Vrules) RETURN NUMBER IS
3451:
3452: n NUMBER;
3453: bgn NUMBER;
3454: endp NUMBER;
3472: return(0);
3473: end if;
3474:
3475: vrulstr_len := LENGTH(s);
3476: seplen := LENGTH(FND_FLEX_SERVER1.SEPARATOR);
3477:
3478: while (bgn <= vrulstr_len) loop
3479: n := n + 1;
3480:
3479: n := n + 1;
3480:
3481: -- Flexfield qualifier name
3482: --
3483: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3484: if(endp <= 0) then
3485: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3486: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3487: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3483: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3484: if(endp <= 0) then
3485: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3486: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3487: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3488: return(-1);
3489: else
3490: tokn := UPPER(LTRIM(RTRIM(SUBSTR(s, bgn, endp-bgn), BLANKS), BLANKS));
3491: if((tokn is not null) and (LENGTHB(tokn) > 30)) then
3499: end if;
3500:
3501: -- Segment qualifier name
3502: --
3503: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3504: if(endp <= 0) then
3505: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3506: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3507: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3503: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3504: if(endp <= 0) then
3505: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3506: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3507: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3508: return(-1);
3509: else
3510: tokn := UPPER(LTRIM(RTRIM(SUBSTR(s, bgn, endp-bgn), BLANKS), BLANKS));
3511: if(tokn is null) then
3525: end if;
3526:
3527: -- Include/Exclude indicator
3528: --
3529: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3530: if(endp <= 0) then
3531: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3532: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3533: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3529: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3530: if(endp <= 0) then
3531: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3532: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3533: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3534: return(-1);
3535: end if;
3536: tokn := LTRIM(RTRIM(SUBSTR(s, bgn, endp-bgn), BLANKS), BLANKS);
3537: if(tokn is null) then
3549: bgn := endp + seplen;
3550:
3551: -- Error Message and Application short name
3552: --
3553: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3554: if(endp <= 0) then
3555: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3556: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3557: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3553: endp := INSTR(s, FND_FLEX_SERVER1.SEPARATOR, bgn);
3554: if(endp <= 0) then
3555: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN VRULE NOSEP');
3556: FND_MESSAGE.set_token('TOKNUM', to_char(n));
3557: FND_MESSAGE.set_token('SEP', FND_FLEX_SERVER1.SEPARATOR);
3558: return(-1);
3559: end if;
3560: tokn := LTRIM(RTRIM(SUBSTR(s, bgn, endp-bgn), BLANKS), BLANKS);
3561: if(tokn is null) then
3600: -- Values to include or exclude.
3601: -- Parsed into format where each value is surrounded by the SEPARATOR.
3602: -- First put everything to the terminator into tokn, then parse tokn.
3603: --
3604: endp := INSTR(s, FND_FLEX_SERVER1.TERMINATOR, bgn);
3605: if(endp <= 0) then
3606: endp := vrulstr_len + 1;
3607: end if;
3608: tokn := LTRIM(RTRIM(SUBSTR(s, bgn, endp-bgn), BLANKS), BLANKS);
3616: FND_MESSAGE.set_token('NAME', sq_name);
3617: return(-1);
3618: end if;
3619: bgn := 1;
3620: ieval := FND_FLEX_SERVER1.SEPARATOR;
3621: tokn_len := LENGTH(tokn);
3622: while(bgn <= tokn_len) loop
3623: endtok := INSTR(tokn, FND_FLEX_SERVER1.SEPARATOR, bgn);
3624: if(endtok <= 0) then
3619: bgn := 1;
3620: ieval := FND_FLEX_SERVER1.SEPARATOR;
3621: tokn_len := LENGTH(tokn);
3622: while(bgn <= tokn_len) loop
3623: endtok := INSTR(tokn, FND_FLEX_SERVER1.SEPARATOR, bgn);
3624: if(endtok <= 0) then
3625: endtok := tokn_len + 1;
3626: end if;
3627: ieval := ieval || LTRIM(RTRIM(SUBSTR(tokn, bgn, endtok-bgn),
3625: endtok := tokn_len + 1;
3626: end if;
3627: ieval := ieval || LTRIM(RTRIM(SUBSTR(tokn, bgn, endtok-bgn),
3628: BLANKS), BLANKS);
3629: ieval := ieval || FND_FLEX_SERVER1.SEPARATOR;
3630: bgn := endtok + seplen;
3631: end loop;
3632: vr.cat_vals(n) := ieval;
3633: bgn := endp + seplen;
3726: /* segments at once. This requires the fewest possible database rows */
3727: /* retrieved and only a single select statement. */
3728: /* ----------------------------------------------------------------------- */
3729:
3730: FUNCTION parse_displayed(fstruct IN FND_FLEX_SERVER1.FlexStructId,
3731: token_str IN VARCHAR2,
3732: dispsegs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs)
3733: RETURN BOOLEAN IS
3734:
3728: /* ----------------------------------------------------------------------- */
3729:
3730: FUNCTION parse_displayed(fstruct IN FND_FLEX_SERVER1.FlexStructId,
3731: token_str IN VARCHAR2,
3732: dispsegs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs)
3733: RETURN BOOLEAN IS
3734:
3735: n_segs NUMBER;
3736: fq_table FND_FLEX_SERVER1.FlexQualTable;
3732: dispsegs OUT nocopy FND_FLEX_SERVER1.DisplayedSegs)
3733: RETURN BOOLEAN IS
3734:
3735: n_segs NUMBER;
3736: fq_table FND_FLEX_SERVER1.FlexQualTable;
3737: seg_disp FND_FLEX_SERVER1.CharArray;
3738: seg_rqd FND_FLEX_SERVER1.CharArray;
3739: tokenmap FND_FLEX_SERVER1.BooleanArray;
3740:
3733: RETURN BOOLEAN IS
3734:
3735: n_segs NUMBER;
3736: fq_table FND_FLEX_SERVER1.FlexQualTable;
3737: seg_disp FND_FLEX_SERVER1.CharArray;
3738: seg_rqd FND_FLEX_SERVER1.CharArray;
3739: tokenmap FND_FLEX_SERVER1.BooleanArray;
3740:
3741: BEGIN
3734:
3735: n_segs NUMBER;
3736: fq_table FND_FLEX_SERVER1.FlexQualTable;
3737: seg_disp FND_FLEX_SERVER1.CharArray;
3738: seg_rqd FND_FLEX_SERVER1.CharArray;
3739: tokenmap FND_FLEX_SERVER1.BooleanArray;
3740:
3741: BEGIN
3742:
3735: n_segs NUMBER;
3736: fq_table FND_FLEX_SERVER1.FlexQualTable;
3737: seg_disp FND_FLEX_SERVER1.CharArray;
3738: seg_rqd FND_FLEX_SERVER1.CharArray;
3739: tokenmap FND_FLEX_SERVER1.BooleanArray;
3740:
3741: BEGIN
3742:
3743: -- Initialize returned segment display map.
3759: -- Still need to merge the displayed map obtained from the DISPLAYED token
3760: -- alone (n_tokappl) with the display map from the flex structure and
3761: -- return the completed map.
3762: --
3763: IF (fnd_flex_server1.g_debug_level > 0) THEN
3764: g_debug_text := 'Displayed Map=';
3765: END IF;
3766: for i in 1..n_segs loop
3767: if((seg_disp(i) = 'Y') and tokenmap(i)) then
3765: END IF;
3766: for i in 1..n_segs loop
3767: if((seg_disp(i) = 'Y') and tokenmap(i)) then
3768: dispsegs.segflags(i) := TRUE;
3769: IF (fnd_flex_server1.g_debug_level > 0) THEN
3770: g_debug_text := g_debug_text || 'Y';
3771: END IF;
3772: else
3773: dispsegs.segflags(i) := FALSE;
3770: g_debug_text := g_debug_text || 'Y';
3771: END IF;
3772: else
3773: dispsegs.segflags(i) := FALSE;
3774: IF (fnd_flex_server1.g_debug_level > 0) THEN
3775: g_debug_text := g_debug_text || 'N';
3776: END IF;
3777: end if;
3778: end loop;
3775: g_debug_text := g_debug_text || 'N';
3776: END IF;
3777: end if;
3778: end loop;
3779: IF (fnd_flex_server1.g_debug_level > 0) THEN
3780: FND_FLEX_SERVER1.add_debug(g_debug_text || '.');
3781: END IF;
3782: dispsegs.n_segflags := n_segs;
3783: return(TRUE);
3776: END IF;
3777: end if;
3778: end loop;
3779: IF (fnd_flex_server1.g_debug_level > 0) THEN
3780: FND_FLEX_SERVER1.add_debug(g_debug_text || '.');
3781: END IF;
3782: dispsegs.n_segflags := n_segs;
3783: return(TRUE);
3784:
3801: /* ------------------------------------------------------------------------- */
3802:
3803: FUNCTION evaluate_token(token_str IN VARCHAR2,
3804: n_segs IN NUMBER,
3805: fq_tab IN FND_FLEX_SERVER1.FlexQualTable,
3806: token_map OUT nocopy FND_FLEX_SERVER1.BooleanArray)
3807: RETURN BOOLEAN IS
3808:
3809: n_toks NUMBER;
3802:
3803: FUNCTION evaluate_token(token_str IN VARCHAR2,
3804: n_segs IN NUMBER,
3805: fq_tab IN FND_FLEX_SERVER1.FlexQualTable,
3806: token_map OUT nocopy FND_FLEX_SERVER1.BooleanArray)
3807: RETURN BOOLEAN IS
3808:
3809: n_toks NUMBER;
3810: segindex NUMBER;
3807: RETURN BOOLEAN IS
3808:
3809: n_toks NUMBER;
3810: segindex NUMBER;
3811: toks FND_FLEX_SERVER1.StringArray;
3812: s_ntokappl FND_FLEX_SERVER1.NumberArray;
3813:
3814: BEGIN
3815:
3808:
3809: n_toks NUMBER;
3810: segindex NUMBER;
3811: toks FND_FLEX_SERVER1.StringArray;
3812: s_ntokappl FND_FLEX_SERVER1.NumberArray;
3813:
3814: BEGIN
3815:
3816: -- Break up token into individual components
3815:
3816: -- Break up token into individual components
3817: --
3818: IF (token_str IS NOT NULL) THEN
3819: n_toks := FND_FLEX_SERVER1.to_stringarray2(token_str,
3820: FND_FLEX_SERVER1.TERMINATOR, toks);
3821: ELSE
3822: n_toks := 0;
3823: END IF;
3816: -- Break up token into individual components
3817: --
3818: IF (token_str IS NOT NULL) THEN
3819: n_toks := FND_FLEX_SERVER1.to_stringarray2(token_str,
3820: FND_FLEX_SERVER1.TERMINATOR, toks);
3821: ELSE
3822: n_toks := 0;
3823: END IF;
3824:
3823: END IF;
3824:
3825: -- Save some debug info
3826: --
3827: IF (fnd_flex_server1.g_debug_level > 0) THEN
3828: g_debug_text := 'Tokens:';
3829: for i in 1..n_toks loop
3830: g_debug_text := g_debug_text || toks(i) || ' ';
3831: end loop;
3828: g_debug_text := 'Tokens:';
3829: for i in 1..n_toks loop
3830: g_debug_text := g_debug_text || toks(i) || ' ';
3831: end loop;
3832: FND_FLEX_SERVER1.add_debug(g_debug_text);
3833: END IF;
3834:
3835: -- Initialize number of applicable tokens for each segment to 0.
3836: --
3837: for i in 1..n_segs loop
3838: s_ntokappl(i) := 0;
3839: end loop;
3840:
3841: IF (fnd_flex_server1.g_debug_level > 0) THEN
3842: FND_FLEX_SERVER1.add_debug('Init ' || to_char(n_segs) || ' segs. ');
3843: END IF;
3844:
3845: -- Now interpret each token to create the displayed map.
3838: s_ntokappl(i) := 0;
3839: end loop;
3840:
3841: IF (fnd_flex_server1.g_debug_level > 0) THEN
3842: FND_FLEX_SERVER1.add_debug('Init ' || to_char(n_segs) || ' segs. ');
3843: END IF;
3844:
3845: -- Now interpret each token to create the displayed map.
3846: -- If token is 'ALL' then just toggle the displayed bit for all segments.
3856: if(toks(i) = 'ALL') then
3857: for j in 1..n_segs loop
3858: s_ntokappl(j) := s_ntokappl(j) + 1;
3859: end loop;
3860: elsif(FND_FLEX_SERVER1.isa_number(toks(i), segindex)) then
3861: if((segindex < 1) or (segindex > n_segs)) then
3862: FND_MESSAGE.set_name('FND', 'FLEX-TOKEN DUI BAD SEGNUM');
3863: FND_MESSAGE.set_token('SEGNUM', to_char(segindex));
3864: return(FALSE);
3939: i_industry VARCHAR2(1);
3940:
3941: BEGIN
3942:
3943: IF (fnd_flex_server1.g_debug_level > 0) THEN
3944: FND_FLEX_SERVER1.add_debug('Entering call_fdfgli() ');
3945: END IF;
3946:
3947: if(fdfgli_on) then
3940:
3941: BEGIN
3942:
3943: IF (fnd_flex_server1.g_debug_level > 0) THEN
3944: FND_FLEX_SERVER1.add_debug('Entering call_fdfgli() ');
3945: END IF;
3946:
3947: if(fdfgli_on) then
3948:
3957: end if;
3958:
3959: sqlstr := 'BEGIN if(gl_flex_insert_pkg.fdfgli(:n)) then :r := ''Y'';';
3960: sqlstr := sqlstr || ' else :r := ''N''; end if; END;';
3961: IF (fnd_flex_server1.g_debug_level > 0) THEN
3962: FND_FLEX_SERVER1.add_debug(sqlstr);
3963: END IF;
3964: cursornum := dbms_sql.open_cursor;
3965: dbms_sql.parse(cursornum, sqlstr, dbms_sql.v7);
3958:
3959: sqlstr := 'BEGIN if(gl_flex_insert_pkg.fdfgli(:n)) then :r := ''Y'';';
3960: sqlstr := sqlstr || ' else :r := ''N''; end if; END;';
3961: IF (fnd_flex_server1.g_debug_level > 0) THEN
3962: FND_FLEX_SERVER1.add_debug(sqlstr);
3963: END IF;
3964: cursornum := dbms_sql.open_cursor;
3965: dbms_sql.parse(cursornum, sqlstr, dbms_sql.v7);
3966: dbms_sql.bind_variable(cursornum, ':n', ccid);
3966: dbms_sql.bind_variable(cursornum, ':n', ccid);
3967: dbms_sql.bind_variable(cursornum, ':r', yes_or_no, 1);
3968: nprocessed := dbms_sql.execute(cursornum);
3969: dbms_sql.variable_value(cursornum, ':r', yes_or_no);
3970: IF (fnd_flex_server1.g_debug_level > 0) THEN
3971: FND_FLEX_SERVER1.add_debug('Dynamic SQL called FDFGLI and returned '||
3972: yes_or_no || '. ');
3973: END IF;
3974: dbms_sql.close_cursor(cursornum);
3967: dbms_sql.bind_variable(cursornum, ':r', yes_or_no, 1);
3968: nprocessed := dbms_sql.execute(cursornum);
3969: dbms_sql.variable_value(cursornum, ':r', yes_or_no);
3970: IF (fnd_flex_server1.g_debug_level > 0) THEN
3971: FND_FLEX_SERVER1.add_debug('Dynamic SQL called FDFGLI and returned '||
3972: yes_or_no || '. ');
3973: END IF;
3974: dbms_sql.close_cursor(cursornum);
3975: return(yes_or_no = 'Y');
4003: /* defined validation rules, or FALSE on error or if it does not */
4004: /* pass user-defined validation. */
4005: /* Saves args input to user validation in uvdbg string. */
4006: /* ----------------------------------------------------------------------- */
4007: FUNCTION call_userval(fstruct IN FND_FLEX_SERVER1.FlexStructId,
4008: vdate IN DATE,
4009: nids IN NUMBER,
4010: delim IN VARCHAR2,
4011: segids IN FND_FLEX_SERVER1.ValueIdArray)
4007: FUNCTION call_userval(fstruct IN FND_FLEX_SERVER1.FlexStructId,
4008: vdate IN DATE,
4009: nids IN NUMBER,
4010: delim IN VARCHAR2,
4011: segids IN FND_FLEX_SERVER1.ValueIdArray)
4012: RETURN BOOLEAN IS
4013: errmsg VARCHAR2(2000);
4014: catids VARCHAR2(2000);
4015: ids FND_FLEX_SERVER1.ValueIdArray;
4011: segids IN FND_FLEX_SERVER1.ValueIdArray)
4012: RETURN BOOLEAN IS
4013: errmsg VARCHAR2(2000);
4014: catids VARCHAR2(2000);
4015: ids FND_FLEX_SERVER1.ValueIdArray;
4016:
4017: BEGIN
4018:
4019: -- Only do this for key flexfields
4041: errmsg := ' Calling FND_FLEX_PLSQL.validate(';
4042: errmsg := errmsg || to_char(fstruct.application_id) || ', ';
4043: errmsg := errmsg || fstruct.id_flex_code || ', ';
4044: errmsg := errmsg || to_char(fstruct.id_flex_num) || ', ';
4045: errmsg := errmsg || to_char(vdate, FND_FLEX_SERVER1.DATETIME_FMT) || ', ';
4046: errmsg := errmsg || delim || ', ';
4047:
4048: IF (fnd_flex_server1.g_debug_level > 0) THEN
4049: FND_FLEX_SERVER1.add_debug(errmsg);
4044: errmsg := errmsg || to_char(fstruct.id_flex_num) || ', ';
4045: errmsg := errmsg || to_char(vdate, FND_FLEX_SERVER1.DATETIME_FMT) || ', ';
4046: errmsg := errmsg || delim || ', ';
4047:
4048: IF (fnd_flex_server1.g_debug_level > 0) THEN
4049: FND_FLEX_SERVER1.add_debug(errmsg);
4050: FND_FLEX_SERVER1.add_debug(catids);
4051: FND_FLEX_SERVER1.add_debug(') ');
4052: END IF;
4045: errmsg := errmsg || to_char(vdate, FND_FLEX_SERVER1.DATETIME_FMT) || ', ';
4046: errmsg := errmsg || delim || ', ';
4047:
4048: IF (fnd_flex_server1.g_debug_level > 0) THEN
4049: FND_FLEX_SERVER1.add_debug(errmsg);
4050: FND_FLEX_SERVER1.add_debug(catids);
4051: FND_FLEX_SERVER1.add_debug(') ');
4052: END IF;
4053: errmsg := NULL;
4046: errmsg := errmsg || delim || ', ';
4047:
4048: IF (fnd_flex_server1.g_debug_level > 0) THEN
4049: FND_FLEX_SERVER1.add_debug(errmsg);
4050: FND_FLEX_SERVER1.add_debug(catids);
4051: FND_FLEX_SERVER1.add_debug(') ');
4052: END IF;
4053: errmsg := NULL;
4054:
4047:
4048: IF (fnd_flex_server1.g_debug_level > 0) THEN
4049: FND_FLEX_SERVER1.add_debug(errmsg);
4050: FND_FLEX_SERVER1.add_debug(catids);
4051: FND_FLEX_SERVER1.add_debug(') ');
4052: END IF;
4053: errmsg := NULL;
4054:
4055: -- Now call the function
4080: /* to validate(). Use in conjunction with get_sql(). */
4081: /* ----------------------------------------------------------------------- */
4082: FUNCTION get_nsql RETURN NUMBER IS
4083: BEGIN
4084: return(FND_FLEX_SERVER1.get_nsql_internal);
4085: END get_nsql;
4086:
4087: /* ----------------------------------------------------------------------- */
4088: /* Returns SQL statements created during last call */
4090: /* ----------------------------------------------------------------------- */
4091: FUNCTION get_sql(statement_num IN NUMBER,
4092: statement_piece IN NUMBER DEFAULT 1) RETURN VARCHAR2 IS
4093: BEGIN
4094: return(FND_FLEX_SERVER1.get_sql_internal(statement_num, statement_piece));
4095: EXCEPTION
4096: WHEN OTHERS then
4097: return('get_sql() exception: ' || SQLERRM);
4098: END get_sql;
4101: /* Returns the debug string. */
4102: /* ----------------------------------------------------------------------- */
4103: FUNCTION get_debug(stringnum IN NUMBER) RETURN VARCHAR2 IS
4104: BEGIN
4105: return(FND_FLEX_SERVER1.get_debug_internal(stringnum));
4106: EXCEPTION
4107: WHEN OTHERS then
4108: return('get_debug() exception: ' || SQLERRM);
4109: END get_debug;
4167: IS
4168: PRAGMA AUTONOMOUS_TRANSACTION;
4169:
4170: l_func_name VARCHAR2(100);
4171: l_ff_structure FND_FLEX_SERVER1.flexstructid;
4172: l_bind_count NUMBER;
4173: l_binds fnd_flex_server1.valuearray;
4174: l_newline VARCHAR2(10);
4175: l_ccid NUMBER;
4169:
4170: l_func_name VARCHAR2(100);
4171: l_ff_structure FND_FLEX_SERVER1.flexstructid;
4172: l_bind_count NUMBER;
4173: l_binds fnd_flex_server1.valuearray;
4174: l_newline VARCHAR2(10);
4175: l_ccid NUMBER;
4176: l_cursor NUMBER;
4177: l_hash_value NUMBER;
4174: l_newline VARCHAR2(10);
4175: l_ccid NUMBER;
4176: l_cursor NUMBER;
4177: l_hash_value NUMBER;
4178: l_segment_ids fnd_flex_server1.valueidarray;
4179:
4180: --
4181: -- Temporary number and varchar2 buffers.
4182: --
4746: px_security_status => l_x_security_status,
4747: px_error_message => l_x_error_message);
4748:
4749: IF (l_vsc_code = fnd_plsql_cache.CACHE_FOUND) THEN
4750: IF (fnd_flex_server1.g_debug_level > 0) THEN
4751: fnd_flex_server1.add_debug('Found in SSV.VSC.');
4752: END IF;
4753: GOTO goto_return;
4754: END IF;
4747: px_error_message => l_x_error_message);
4748:
4749: IF (l_vsc_code = fnd_plsql_cache.CACHE_FOUND) THEN
4750: IF (fnd_flex_server1.g_debug_level > 0) THEN
4751: fnd_flex_server1.add_debug('Found in SSV.VSC.');
4752: END IF;
4753: GOTO goto_return;
4754: END IF;
4755:
5056: -- ==================================================
5057: PROCEDURE parse_flex_values(p_concatenated_flex_values IN VARCHAR2,
5058: p_delimiter IN VARCHAR2,
5059: p_numof_flex_values IN NUMBER DEFAULT NULL,
5060: x_flex_values OUT nocopy fnd_flex_server1.stringarray,
5061: x_numof_flex_values OUT nocopy NUMBER)
5062: IS
5063: BEGIN
5064: --
5069: x_numof_flex_values := 1;
5070: x_flex_values(1) := p_concatenated_flex_values;
5071: ELSE
5072: x_numof_flex_values :=
5073: fnd_flex_server1.to_stringarray(p_concatenated_flex_values,
5074: p_delimiter,
5075: x_flex_values);
5076: END IF;
5077: EXCEPTION
5081:
5082: -- ==================================================
5083: -- PROCEDURE : concatenate_flex_values
5084: -- ==================================================
5085: PROCEDURE concatenate_flex_values(p_flex_values IN fnd_flex_server1.stringarray,
5086: p_numof_flex_values IN NUMBER,
5087: p_delimiter IN VARCHAR2,
5088: x_concatenated_flex_values OUT nocopy VARCHAR2)
5089: IS
5087: p_delimiter IN VARCHAR2,
5088: x_concatenated_flex_values OUT nocopy VARCHAR2)
5089: IS
5090: BEGIN
5091: IF (fnd_flex_server1.g_debug_level > 0) THEN
5092: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_flex_values()');
5093: END IF;
5094: IF (p_numof_flex_values > 0) THEN
5095: x_concatenated_flex_values :=
5088: x_concatenated_flex_values OUT nocopy VARCHAR2)
5089: IS
5090: BEGIN
5091: IF (fnd_flex_server1.g_debug_level > 0) THEN
5092: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_flex_values()');
5093: END IF;
5094: IF (p_numof_flex_values > 0) THEN
5095: x_concatenated_flex_values :=
5096: fnd_flex_server1.from_stringarray(p_numof_flex_values,
5092: fnd_flex_server1.add_debug('BEGIN SSV.concatenate_flex_values()');
5093: END IF;
5094: IF (p_numof_flex_values > 0) THEN
5095: x_concatenated_flex_values :=
5096: fnd_flex_server1.from_stringarray(p_numof_flex_values,
5097: p_flex_values,
5098: p_delimiter);
5099: ELSE
5100: x_concatenated_flex_values := '';
5138: p_segment29 IN VARCHAR2 DEFAULT NULL,
5139: p_segment30 IN VARCHAR2 DEFAULT NULL)
5140: RETURN VARCHAR2
5141: IS
5142: l_flex_values fnd_flex_server1.stringarray;
5143: l_concatenated_value VARCHAR2(32000);
5144: BEGIN
5145: l_flex_values(1) := p_segment1;
5146: l_flex_values(2) := p_segment2;