[Home] [Help]
PACKAGE BODY: APPS.OE_HEADER_SCREDIT_PCFWK
Source
1 PACKAGE BODY OE_HEADER_SCREDIT_PCFWK AS
2 /* $Header: OEXKHSCB.pls 120.0 2005/06/01 00:16:47 appldev noship $ */
3
4 -- Globals
5 -------------------------------------------
6 g_application_id constant number := 660;
7 g_entity_id constant number := 5;
8 g_entity_short_name constant varchar2(15) := 'HEADER_SCREDIT';
9 -------------------------------------------
10 PROCEDURE Validate_Constraint
11 (
12 p_constraint_id in number
13 ,x_condition_count out nocopy number
14
15 ,x_valid_condition_group out nocopy number
16
17 ,x_result out nocopy number
18
19 )
20 IS
21
22 --Cursors
23 CURSOR C_R
24 IS SELECT
25 condition_id,
26 group_number,
27 modifier_flag,
28 validation_application_id,
29 validation_entity_short_name,
30 validation_tmplt_short_name,
31 record_set_short_name,
32 scope_op,
33 validation_pkg,
34 validation_proc
35 FROM oe_pc_conditions_v
36 WHERE constraint_id = p_constraint_id
37 ORDER BY group_number;
38
39
40 TYPE ConstraintRule_Rec_Type IS RECORD
41 (
42 condition_id number,
43 group_number number,
44 modifier_flag varchar2(1),
45 validation_application_id number,
46 validation_entity_short_name varchar2(15),
47 validation_tmplt_short_name varchar2(8),
48 record_set_short_name varchar2(8),
49 scope_op varchar2(3),
50 validation_pkg varchar2(30),
51 validation_proc varchar2(30)
52 );
53
54 l_constraintRuleRec ConstraintRule_Rec_Type;
55 l_dsqlCursor integer;
56 l_dynamicSqlString varchar2(2000);
57 l_rule_count number;
58 l_ConstrainedStatus number;
59 l_dummy integer;
60 i number;
61 l_tempResult boolean;
62 l_result_01 number;
63 l_currGrpNumber number;
64 l_currGrpResult boolean;
65 BEGIN
66
67 l_ConstrainedStatus := OE_PC_GLOBALS.NO;
68 l_rule_count := 0;
69 i := 0;
70 l_currGrpNumber := -1;
71 l_currGrpResult := FALSE;
72
73 OPEN C_R;
74 LOOP -- validatate constraining conditions
75 -- fetch all the validation procedure_names assigned to the constraint and
76 -- build the dynamic sql string
77 FETCH C_R into
78 l_constraintRuleRec.condition_id,
79 l_constraintRuleRec.group_number,
80 l_constraintRuleRec.modifier_flag,
81 l_constraintRuleRec.validation_application_id,
82 l_constraintRuleRec.validation_entity_short_name,
83 l_constraintRuleRec.validation_tmplt_short_name,
84 l_constraintRuleRec.record_set_short_name,
85 l_constraintRuleRec.scope_op,
86 l_constraintRuleRec.validation_pkg,
87 l_constraintRuleRec.validation_proc;
88
89 -- EXIT from loop
90 IF (C_R%NOTFOUND) THEN
91 IF (l_currGrpNumber <> -1 AND l_currGrpResult = TRUE) THEN
92 l_ConstrainedStatus := OE_PC_GLOBALS.YES;
93 END IF;
94 EXIT; -- exit the loop
95 END IF;
96
97 IF (l_currGrpNumber <> l_constraintRuleRec.group_number) THEN
98
99 -- we are entering the new group of conditions..
100 -- groups are ORd together, so if the previous group was evaluated
101 -- to TRUE (OE_PC_GLOBALS.YES) then no need to evaluvate this group.
102 IF (l_currGrpResult = TRUE) THEN
103 l_ConstrainedStatus := OE_PC_GLOBALS.YES;
104 EXIT; -- exit the loop
105 END IF;
106
107 -- previous group did not evaluvate to TRUE, so lets pursue this new group
108 l_currGrpNumber := l_constraintRuleRec.group_number;
109 l_currGrpResult := FALSE;
110 i := 0;
111 END IF;
112 -- we have a got a record, increment the count by 1
113 l_rule_count := l_rule_count+1;
114
115 -- pkg.function(p1, p2, ...)
116 l_dynamicSqlString := ' begin ';
117 l_dynamicSqlString := l_dynamicSqlString || l_constraintRuleRec.validation_pkg ||'.';
118 l_dynamicSqlString := l_dynamicSqlString || l_constraintRuleRec.validation_proc;
119
120 -- IN Parameters
121 l_dynamicSqlString := l_dynamicSqlString || '( ';
122 l_dynamicSqlString := l_dynamicSqlString || ':t_application_id, ';
123 l_dynamicSqlString := l_dynamicSqlString || ':t_entity_short_name, ';
124 l_dynamicSqlString := l_dynamicSqlString || ':t_validation_entity_short_name, ';
125 l_dynamicSqlString := l_dynamicSqlString || ':t_validation_tmplt_short_name, ';
126 l_dynamicSqlString := l_dynamicSqlString || ':t_record_set_short_name, ';
127 l_dynamicSqlString := l_dynamicSqlString || ':t_scope, ';
128
129 -- OUT Parameters
130 l_dynamicSqlString := l_dynamicSqlString || ':t_result );';
131 l_dynamicSqlString := l_dynamicSqlString || ' end; ';
132
133 -- EXECUTE THE DYNAMIC SQL
134 EXECUTE IMMEDIATE l_dynamicSqlString USING IN g_application_id,
135 IN g_entity_short_name,
136 IN l_constraintRuleRec.validation_entity_short_name,
137 IN l_constraintRuleRec.validation_tmplt_short_name,
138 IN l_constraintRuleRec.record_set_short_name,
139 IN l_constraintRuleRec.scope_op,
140 OUT l_result_01;
141
142
143 IF (l_result_01 = 0) THEN
144 l_tempResult := FALSE;
145 ELSE
146 l_tempResult := TRUE;
147 END IF;
148 -- apply the modifier on the result
149 if(l_constraintRuleRec.modifier_flag = OE_PC_GLOBALS.YES_FLAG) then
150 l_tempResult := NOT(l_tempResult);
151 end if;
152
153 IF (i = 0) THEN
154 l_currGrpResult := l_tempResult;
155 ELSE
156 l_currGrpResult := l_currGrpResult AND l_tempResult;
157 END IF;
158
159 -- increment the index
160 i := i+1;
161 END LOOP; -- end validatate validators
162 CLOSE C_R;
163 -- did we validate any constraint rules?. if there is none then the
164 -- constraint is valid and we will return YES
165 IF (l_rule_count = 0) THEN
166 x_condition_count := 0;
167 x_valid_condition_group := -1;
168 x_result := OE_PC_GLOBALS.YES;
169 ELSE
170 x_condition_count := l_rule_count;
171 x_valid_condition_group := l_currGrpNumber;
172 x_result := l_ConstrainedStatus;
173 END IF;
174 -------------------------------------------
175 EXCEPTION
176 WHEN OTHERS THEN
177 x_result := OE_PC_GLOBALS.ERROR;
178 END Validate_Constraint;
179 -------------------------------------------
180 -------------------------------------------
181 FUNCTION Is_Op_Constrained
182 (
183 p_responsibility_id in number
184 ,p_operation in varchar2
185 ,p_column_name in varchar2 default NULL
186 ,p_record in OE_AK_HEADER_SCREDITS_V%ROWTYPE
187 ,p_check_all_cols_constraint in varchar2 default 'Y'
188 ,p_is_caller_defaulting in varchar2 default 'N'
189 ,x_constraint_id out nocopy number
190
191 ,x_constraining_conditions_grp out nocopy number
192
193 ,x_on_operation_action out nocopy number
194
195 )
196 RETURN NUMBER
197
198 IS
199
200 --Cursors
201 -------------------------------------------
202 CURSOR C_C
203 IS
204 SELECT DISTINCT
205 c.constraint_id, c.entity_id
206 ,c.on_operation_action
207 FROM oe_pc_constraints c,
208 oe_pc_assignments a
209 WHERE (a.responsibility_id = p_responsibility_id OR a.responsibility_id IS NULL)
210 AND a.constraint_id = c.constraint_id
211 AND c.entity_id = G_ENTITY_ID
212 AND c.constrained_operation = p_operation
213 -- if caller is defaulting then DO NOT CHECK those constraints
214 -- that have honored_by_def_flag = 'N'
215 AND decode(honored_by_def_flag,'N',decode(p_is_caller_defaulting,'Y','N','Y'),
216 nvl(honored_by_def_flag,'Y')) = 'Y'
217 AND decode(c.column_name, '',decode(p_check_all_cols_constraint,'Y',
218 nvl(p_column_name,'#NULL'),'#NULL'),c.column_name) = nvl(p_column_name,'#NULL')
219 AND NOT EXISTS (
220 SELECT 'EXISTS'
221 FROM OE_PC_EXCLUSIONS e
222 WHERE e.responsibility_id = p_responsibility_id
223 AND e.assignment_id = a.assignment_id
224 );
225 -- Cursor to select all update constraints that are applicable to insert
226 -- operations as well.
227 CURSOR C_CREATE_OP
228 IS
229 SELECT DISTINCT
230 c.constraint_id, c.entity_id
231 ,c.on_operation_action
232 FROM oe_pc_constraints c,
233 oe_pc_assignments a
234 WHERE (a.responsibility_id = p_responsibility_id OR a.responsibility_id IS NULL)
235 AND a.constraint_id = c.constraint_id
236 AND c.entity_id = G_ENTITY_ID
237 AND ( ( c.constrained_operation = OE_PC_GLOBALS.CREATE_OP
238 AND p_column_name IS NULL )
239 OR ( c.constrained_operation = OE_PC_GLOBALS.UPDATE_OP
240 AND c.check_on_insert_flag = 'Y'
241 AND nvl(c.column_name, '#NULL') = NVL(p_column_name,'#NULL') )
242 )
243 -- if caller is defaulting then DO NOT CHECK those constraints
244 -- that have honored_by_def_flag = 'N'
245 AND decode(honored_by_def_flag,'N',decode(p_is_caller_defaulting,'Y','N','Y'),
246 nvl(honored_by_def_flag,'Y')) = 'Y'
247 AND NOT EXISTS (
248 SELECT 'EXISTS'
249 FROM OE_PC_EXCLUSIONS e
250 WHERE e.responsibility_id = p_responsibility_id
251 AND e.assignment_id = a.assignment_id
252 );
253
254 --Local Variables
255 -------------------------------------------
256 l_validation_result number;
257 l_condition_count number;
258 l_valid_condition_group number;
259 BEGIN
260
261 g_record := p_record;
262 l_validation_result := OE_PC_GLOBALS.NO;
263
264 IF p_operation = OE_PC_GLOBALS.CREATE_OP THEN
265
266 FOR c_rec in C_CREATE_OP LOOP
267 Validate_Constraint (
268 p_constraint_id => c_rec.constraint_id
269 ,x_condition_count => l_condition_count
270 ,x_valid_condition_group => l_valid_condition_group
271 ,x_result => l_validation_result
272 );
273 IF (l_condition_count = 0
274 OR l_validation_result = OE_PC_GLOBALS.YES) then
275 x_constraint_id := c_rec.constraint_id;
276 x_on_operation_action := c_rec.on_operation_action;
277 x_constraining_conditions_grp := l_valid_condition_group;
278 EXIT;
279 END IF;
280 END LOOP;
281
282 ELSE
283
284 FOR c_rec in C_C LOOP
285 Validate_Constraint (
286 p_constraint_id => c_rec.constraint_id
287 ,x_condition_count => l_condition_count
288 ,x_valid_condition_group => l_valid_condition_group
289 ,x_result => l_validation_result
290 );
291 IF (l_condition_count = 0
292 OR l_validation_result = OE_PC_GLOBALS.YES) then
293 x_constraint_id := c_rec.constraint_id;
294 x_on_operation_action := c_rec.on_operation_action;
295 x_constraining_conditions_grp := l_valid_condition_group;
296 EXIT;
297 END IF;
298 END LOOP;
299
300 END IF;
301
302 return l_validation_result;
303
304 EXCEPTION
305 WHEN OTHERS THEN
306 RETURN OE_PC_GLOBALS.ERROR;
307 END Is_Op_Constrained;
308
309 END OE_HEADER_SCREDIT_PCFWK;