43:
44: /* ----------------------------------------------------------------------- */
45: /* The following functions are called only from triggers on */
46: /* FND_FLEX_VALIDATION_RULES and FND_FLEX_VALIDATION_RULE_LINES. */
47: /* The trigger should use FND_MESSAGE.raise_exception if any of */
48: /* these functions returns error. */
49: /* ----------------------------------------------------------------------- */
50:
51: /* ----------------------------------------------------------------------- */
60: /* even if there were no new rules or lines. This is so that the */
61: /* last update for each flex structure can be set when a rule or line */
62: /* is updated. This is useful for keeping track of when to outdate */
63: /* entries in the cross-validation rules cache. */
64: /* Returns TRUE on success or FALSE and sets FND_MESSAGE if error. */
65: /* ----------------------------------------------------------------------- */
66: FUNCTION update_cvr_stats(appid IN NUMBER,
67: flex_code IN VARCHAR2,
68: flex_num IN NUMBER,
114: return(TRUE);
115:
116: EXCEPTION
117: WHEN OTHERS then
118: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
119: FND_MESSAGE.set_token('MSG', 'update_cvr_stats() exception: '||SQLERRM);
120: return(FALSE);
121:
122: END update_cvr_stats;
115:
116: EXCEPTION
117: WHEN OTHERS then
118: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
119: FND_MESSAGE.set_token('MSG', 'update_cvr_stats() exception: '||SQLERRM);
120: return(FALSE);
121:
122: END update_cvr_stats;
123:
124: /* ----------------------------------------------------------------------- */
125: /* Inserts separated segments of new rule line into */
126: /* the include or exclude lines table. Then updates the line count */
127: /* in the statistics table. */
128: /* Returns TRUE on success or FALSE and sets FND_MESSAGE if error. */
129: /* ----------------------------------------------------------------------- */
130: FUNCTION insert_rule_line(ruleline_id IN NUMBER,
131: appid IN NUMBER,
132: flex_code IN VARCHAR2,
230: new_include_lines, new_exclude_lines));
231:
232: EXCEPTION
233: WHEN OTHERS then
234: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
235: FND_MESSAGE.set_token('MSG', 'insert_rule_line() exception: '||SQLERRM);
236: return(FALSE);
237:
238: END insert_rule_line;
231:
232: EXCEPTION
233: WHEN OTHERS then
234: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
235: FND_MESSAGE.set_token('MSG', 'insert_rule_line() exception: '||SQLERRM);
236: return(FALSE);
237:
238: END insert_rule_line;
239:
240: /* ----------------------------------------------------------------------- */
241: /* Deletes rule line by rule_line_id from either */
242: /* the include or exclude lines table. Then updates the line count */
243: /* in the statistics table. */
244: /* Returns TRUE on success or FALSE and sets FND_MESSAGE if error. */
245: /* ----------------------------------------------------------------------- */
246: FUNCTION delete_rule_line(ruleline_id IN NUMBER,
247: appid IN NUMBER,
248: flex_code IN VARCHAR2,
269: new_include_lines, new_exclude_lines));
270:
271: EXCEPTION
272: WHEN OTHERS then
273: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
274: FND_MESSAGE.set_token('MSG', 'delete_rule_line() exception: '||SQLERRM);
275: return(FALSE);
276:
277: END delete_rule_line;
270:
271: EXCEPTION
272: WHEN OTHERS then
273: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
274: FND_MESSAGE.set_token('MSG', 'delete_rule_line() exception: '||SQLERRM);
275: return(FALSE);
276:
277: END delete_rule_line;
278:
279: /* ----------------------------------------------------------------------- */
280: /* Updates rule line specified by ruleline_id in either */
281: /* the include or exclude lines table. Then updates the line count */
282: /* in the statistics table (actually just updates last_update_date). */
283: /* Returns TRUE on success or FALSE and sets FND_MESSAGE if error. */
284: /* ----------------------------------------------------------------------- */
285: FUNCTION update_rule_line(ruleline_id IN NUMBER,
286: appid IN NUMBER,
287: flex_code IN VARCHAR2,
429: return(update_cvr_stats(appid, flex_code, flex_num, 0, 0, 0));
430:
431: EXCEPTION
432: WHEN OTHERS then
433: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
434: FND_MESSAGE.set_token('MSG', 'update_rule_line() exception: '||SQLERRM);
435: return(FALSE);
436:
437: END update_rule_line;
430:
431: EXCEPTION
432: WHEN OTHERS then
433: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
434: FND_MESSAGE.set_token('MSG', 'update_rule_line() exception: '||SQLERRM);
435: return(FALSE);
436:
437: END update_rule_line;
438:
437: END update_rule_line;
438:
439: /* ----------------------------------------------------------------------- */
440: /* Gets the segment delimiter for the given flexfield structure. */
441: /* Returns TRUE on success, or FALSE and sets FND_MESSAGE if error. */
442: /* ----------------------------------------------------------------------- */
443: FUNCTION get_segdelim(appid IN NUMBER,
444: flex_code IN VARCHAR2,
445: flex_num IN NUMBER,
451: return(TRUE);
452:
453: EXCEPTION
454: WHEN NO_DATA_FOUND then
455: FND_MESSAGE.set_name('FND', 'FLEX-CANNOT FIND STRUCT DEF');
456: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
457: FND_MESSAGE.set_token('APPL', to_char(appid));
458: FND_MESSAGE.set_token('CODE', flex_code);
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
452:
453: EXCEPTION
454: WHEN NO_DATA_FOUND then
455: FND_MESSAGE.set_name('FND', 'FLEX-CANNOT FIND STRUCT DEF');
456: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
457: FND_MESSAGE.set_token('APPL', to_char(appid));
458: FND_MESSAGE.set_token('CODE', flex_code);
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
460: return(FALSE);
453: EXCEPTION
454: WHEN NO_DATA_FOUND then
455: FND_MESSAGE.set_name('FND', 'FLEX-CANNOT FIND STRUCT DEF');
456: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
457: FND_MESSAGE.set_token('APPL', to_char(appid));
458: FND_MESSAGE.set_token('CODE', flex_code);
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
460: return(FALSE);
461: WHEN TOO_MANY_ROWS then
454: WHEN NO_DATA_FOUND then
455: FND_MESSAGE.set_name('FND', 'FLEX-CANNOT FIND STRUCT DEF');
456: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
457: FND_MESSAGE.set_token('APPL', to_char(appid));
458: FND_MESSAGE.set_token('CODE', flex_code);
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
460: return(FALSE);
461: WHEN TOO_MANY_ROWS then
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
455: FND_MESSAGE.set_name('FND', 'FLEX-CANNOT FIND STRUCT DEF');
456: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
457: FND_MESSAGE.set_token('APPL', to_char(appid));
458: FND_MESSAGE.set_token('CODE', flex_code);
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
460: return(FALSE);
461: WHEN TOO_MANY_ROWS then
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
463: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
458: FND_MESSAGE.set_token('CODE', flex_code);
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
460: return(FALSE);
461: WHEN TOO_MANY_ROWS then
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
463: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
464: FND_MESSAGE.set_token('APPL', to_char(appid));
465: FND_MESSAGE.set_token('CODE', flex_code);
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
459: FND_MESSAGE.set_token('NUM', to_char(flex_num));
460: return(FALSE);
461: WHEN TOO_MANY_ROWS then
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
463: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
464: FND_MESSAGE.set_token('APPL', to_char(appid));
465: FND_MESSAGE.set_token('CODE', flex_code);
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
467: return(FALSE);
460: return(FALSE);
461: WHEN TOO_MANY_ROWS then
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
463: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
464: FND_MESSAGE.set_token('APPL', to_char(appid));
465: FND_MESSAGE.set_token('CODE', flex_code);
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
467: return(FALSE);
468: WHEN OTHERS then
461: WHEN TOO_MANY_ROWS then
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
463: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
464: FND_MESSAGE.set_token('APPL', to_char(appid));
465: FND_MESSAGE.set_token('CODE', flex_code);
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
467: return(FALSE);
468: WHEN OTHERS then
469: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
462: FND_MESSAGE.set_name('FND', 'FLEX-DUPLICATE STRUCT DEF');
463: FND_MESSAGE.set_token('ROUTINE', 'FND_FLEX_SERVER.GET_SEGDELIM');
464: FND_MESSAGE.set_token('APPL', to_char(appid));
465: FND_MESSAGE.set_token('CODE', flex_code);
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
467: return(FALSE);
468: WHEN OTHERS then
469: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
470: FND_MESSAGE.set_token('MSG', 'get_segdelim() exception: ' || SQLERRM);
465: FND_MESSAGE.set_token('CODE', flex_code);
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
467: return(FALSE);
468: WHEN OTHERS then
469: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
470: FND_MESSAGE.set_token('MSG', 'get_segdelim() exception: ' || SQLERRM);
471: return(FALSE);
472: END get_segdelim;
473:
466: FND_MESSAGE.set_token('NUM', to_char(flex_num));
467: return(FALSE);
468: WHEN OTHERS then
469: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
470: FND_MESSAGE.set_token('MSG', 'get_segdelim() exception: ' || SQLERRM);
471: return(FALSE);
472: END get_segdelim;
473:
474: /* ----------------------------------------------------------------------- */
472: END get_segdelim;
473:
474: /* ----------------------------------------------------------------------- */
475: /* Gets the number of enabled segments for the given flexfield. */
476: /* Returns TRUE on success, or FALSE and sets FND_MESSAGE if error. */
477: /* ----------------------------------------------------------------------- */
478: FUNCTION get_segcount(appid IN NUMBER,
479: flex_code IN VARCHAR2,
480: flex_num IN NUMBER,
486: AND id_flex_num = flex_num AND enabled_flag = 'Y';
487: return(TRUE);
488: EXCEPTION
489: WHEN OTHERS then
490: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
491: FND_MESSAGE.set_token('MSG', 'get_segcount() exception: ' || SQLERRM);
492: return(FALSE);
493: END get_segcount;
494:
487: return(TRUE);
488: EXCEPTION
489: WHEN OTHERS then
490: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
491: FND_MESSAGE.set_token('MSG', 'get_segcount() exception: ' || SQLERRM);
492: return(FALSE);
493: END get_segcount;
494:
495: /* ----------------------------------------------------------------------- */
496: /* Uses the segment delimiter to break up segments into array of */
497: /* exactly 30 segments, some of which are null. */
498: /* Assumes segment delimiter has not been substituted by a newline */
499: /* if only one segment is expected. */
500: /* Returns TRUE on success, or FALSE and sets FND_MESSAGE if error. */
501: /* ----------------------------------------------------------------------- */
502: FUNCTION break_segs(catsegs IN VARCHAR2,
503: sepchar IN VARCHAR2,
504: nexpect IN NUMBER,
520: end loop;
521: return(TRUE);
522: EXCEPTION
523: WHEN OTHERS then
524: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
525: FND_MESSAGE.set_token('MSG', 'break_segs() exception: ' || SQLERRM);
526: return(FALSE);
527: END break_segs;
528:
521: return(TRUE);
522: EXCEPTION
523: WHEN OTHERS then
524: FND_MESSAGE.set_name('FND', 'FLEX-SSV EXCEPTION');
525: FND_MESSAGE.set_token('MSG', 'break_segs() exception: ' || SQLERRM);
526: return(FALSE);
527: END break_segs;
528:
529: /* ----------------------------------------------------------------------- */