[Home] [Help]
PACKAGE BODY: APPS.OE_PC_CONSTRAINTS_ADMIN_PUB
Source
1 PACKAGE BODY Oe_PC_Constraints_Admin_Pub as
2 /* $Header: OEXPPCAB.pls 120.1 2010/11/22 09:02:59 skurella ship $ */
3
4 -- global variables
5 G_PKG_NAME constant varchar2(30) := 'Oe_PC_Constraints_Admin_Pub';
6
7 -------------------------------------------------------------------
8 PROCEDURE Generate_Constraint_API
9 (
10 p_api_version_number in number,
11 p_application_id in number,
12 p_entity_short_name in varchar2,
13 x_script_file_name out nocopy varchar2,
14
15 x_return_status out nocopy varchar2,
16
17 x_msg_count out nocopy number,
18
19 x_msg_data out nocopy varchar2
20
21 )
22 -------------------------------------------------------------------
23 IS
24 l_fileDir varchar2(255);
25 l_dirSeperator varchar2(1);
26 l_fileNameTag varchar2(255);
27 l_sqlFileName varchar2(255);
28 l_specFileName varchar2(255);
29 l_bodyFileName varchar2(255);
30 l_sqlFileHandle UTL_FILE.FILE_TYPE;
31 l_specFileHandle UTL_FILE.FILE_TYPE;
32 l_bodyFileHandle UTL_FILE.FILE_TYPE;
33 l_pkg_name varchar2(30);
34 l_fileNumber number;
35 l_pkg_spec LONG;
36 l_pkg_body LONG;
37 l_return_status varchar2(1);
38 l_msg_data varchar2(255);
39 l_msg_count number;
40 l_app_short_name OE_PC_ENTITIES_V.APPLICATION_SHORT_NAME%TYPE;
41 l_db_object_name OE_PC_ENTITIES_V.DB_OBJECT_NAME%TYPE;
42 l_entity_id OE_PC_ENTITIES_V.ENTITY_ID%TYPE;
43
44 l_Q varchar2(3) := '''';
45 l_NULL varchar2(10) := l_Q || l_Q;
46 l_DUMMY_COL varchar2(10) := l_Q || '#NULL'|| l_Q;
47
48
49
50
51 CURSOR C_FILENO
52 IS SELECT to_char(OE_PC_FILE_SEQUENCE_S.nextval)
53 FROM DUAL;
54
55 CURSOR C_APP
56 IS SELECT application_short_name, db_object_name, entity_id
57 FROM OE_PC_ENTITIES_V
58 where application_id = p_application_id
59 AND entity_short_name = p_entity_short_name;
60 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
61 BEGIN
62 IF l_debug_level > 0 THEN
63 OE_Debug_PUB.ADD('Generate_Constraint_API: begin ');
64 END IF;
65 OPEN C_APP;
66 Fetch C_APP into l_app_short_name, l_db_object_name, l_entity_id;
67 Close C_APP;
68 IF l_debug_level > 0 THEN
69 OE_Debug_PUB.ADD('Entity ID: '||l_entity_id);
70 END IF;
71
72
73 l_fileDir := ltrim(rtrim(fnd_profile.value('OE_PC_FILE_DIRECTORY')));
74 --------------------------------------------
75 -- ***** Remove this
76 if (l_fileDir IS NULL OR l_fileDir = '' ) then
77 -- l_fileDir := '/oedev/oe/11.8/debug_log';
78 l_fileDir := '/sqlcom/log';
79 end if;
80 --------------------------------------------
81 if (l_fileDir IS NULL OR l_fileDir = '') then
82 -- raise error;
83 fnd_message.set_name('OE', 'OE_PC_FILE_DIRECTORY_MISSING');
84 --
85 IF l_debug_level > 0 THEN
86 OE_Debug_PUB.ADD('couldnt find the log file directory.. profile missing..returning. End');
87 END IF;
88 --
89 -- ** In future, the PCFWK admin may maintain a log file and log the errors in it.
90 return;
91 end if;
92 --
93 IF l_debug_level > 0 THEN
94 OE_Debug_PUB.ADD('log file directory : ' || l_fileDir);
95 END IF;
96 --
97 open C_FILENO;
98 fetch C_FILENO into l_fileNumber;
99 close C_FILENO;
100
101
102 -- file names: example:
103 -- SQL File : OEPC200_OE_HEADER.SQL
104 -- Spec File : OEPC200_OE_HEADER_S.PLS
105 -- Body File : OEPC200_OE_HEADER_B.PLS
106 l_fileNameTag := 'OEPC'|| to_char(l_fileNumber) || '_' ||
107 l_app_short_name ||'_' || p_entity_short_name;
108 l_sqlFileName := l_fileNameTag || '.SQL';
109 l_specFileName := l_fileNameTag || '_S.PLS';
110 l_bodyFileName := l_fileNameTag || '_B.PLS';
111
112 --
113 IF l_debug_level > 0 THEN
114 OE_Debug_PUB.ADD('script (SQL) file name : ' || l_sqlFileName || ' DIR: ' ||l_fileDir);
115 END IF;
116 --
117 l_sqlFileHandle := utl_file.fopen(
118 location => l_fileDir
119 ,filename => l_sqlFileName
120 ,open_mode => 'w'
121 );
122 --
123 IF l_debug_level > 0 THEN
124 OE_Debug_PUB.ADD('Spec file name : ' || l_specFileName || ' DIR: ' ||l_fileDir);
125 END IF;
126 --
127 l_specFileHandle := utl_file.fopen(
128 location => l_fileDir
129 ,filename => l_specFileName
130 ,open_mode => 'w'
131 );
132 --
133 IF l_debug_level > 0 THEN
134 OE_Debug_PUB.ADD('Body file name : ' || l_bodyFileName || ' DIR: ' ||l_fileDir);
135 END IF;
136 --
137 l_bodyFileHandle := utl_file.fopen(
138 location => l_fileDir
139 ,filename => l_bodyFileName
140 ,open_mode => 'w'
141 );
142
143
144 l_pkg_name := l_app_short_name || '_' || p_entity_short_name || '_PCFWK';
145
146 -- generate the package spec and body
147 -- ** enhance the standardization of the code by applying the prevailing coding standards
148 -- ** and by adding more comments
149 -----------------------------------------------------------------------------------------
150 -- generate spec
151 utl_file.put_line(l_specFileHandle, '-- ');
152 utl_file.put_line(l_specFileHandle, '-- Copyright (c) 1996 Oracle Corporation, Redwood Shores, CA, USA ');
153 utl_file.put_line(l_specFileHandle, '-- All rights reserved. ');
154 utl_file.put_line(l_specFileHandle, '-- ');
155 utl_file.put_line(l_specFileHandle, '-- FILENAME ');
156 utl_file.put_line(l_specFileHandle, '-- ');
157 utl_file.put_line(l_specFileHandle, '-- ' || l_specFileName);
158 utl_file.put_line(l_specFileHandle, '-- ');
159 utl_file.put_line(l_specFileHandle, '-- DESCRIPTION ');
160 utl_file.put_line(l_specFileHandle, '-- ');
161 utl_file.put_line(l_specFileHandle, '-- Spec of package ' || l_pkg_name );
162 utl_file.put_line(l_specFileHandle, '-- ');
163 utl_file.put_line(l_specFileHandle, '-- NOTES ');
164 utl_file.put_line(l_specFileHandle, '-- ');
165 utl_file.put_line(l_specFileHandle, 'WHENEVER SQLERROR EXIT FAILURE ROLLBACK; ');
166 utl_file.put_line(l_specFileHandle, ' ');
167 utl_file.put_line(l_specFileHandle, 'CREATE OR REPLACE PACKAGE ' || l_pkg_name);
168 utl_file.put_line(l_specFileHandle, 'AS ');
169 utl_file.put_line(l_specFileHandle, ' ');
170 utl_file.put_line(l_specFileHandle, 'g_record ' || l_db_object_name ||'%ROWTYPE;');
171 utl_file.put_line(l_specFileHandle, '------------------------------------------- ');
172 utl_file.put_line(l_specFileHandle, '-- Start of Comments ');
173 utl_file.put_line(l_specFileHandle, '-- API name Is_Op_Constrained ');
174 utl_file.put_line(l_specFileHandle, '-- Type Public ');
175 utl_file.put_line(l_specFileHandle, '-- Function ');
176 utl_file.put_line(l_specFileHandle, '-- You should use this function to check for constraints ');
177 utl_file.put_line(l_specFileHandle, '-- against operations on ' || p_entity_short_name || ' or its columns ');
178 utl_file.put_line(l_specFileHandle, '-- Pre-reqs ');
179 utl_file.put_line(l_specFileHandle, '-- ');
180 utl_file.put_line(l_specFileHandle, '-- Parameters ');
181 utl_file.put_line(l_specFileHandle, '-- ');
182 utl_file.put_line(l_specFileHandle, '-- Return ');
183 utl_file.put_line(l_specFileHandle, '-- ');
184 utl_file.put_line(l_specFileHandle, '-- Version Current version = 1.0 ');
185 utl_file.put_line(l_specFileHandle, '-- Initial version = 1.0 ');
186 utl_file.put_line(l_specFileHandle, '-- ');
187 utl_file.put_line(l_specFileHandle, '-- Notes ');
188 utl_file.put_line(l_specFileHandle, '-- ');
189 utl_file.put_line(l_specFileHandle, '-- End of Comments ');
190 utl_file.put_line(l_specFileHandle, 'FUNCTION Is_Op_Constrained ');
191 utl_file.put_line(l_specFileHandle, ' ( ');
192 utl_file.put_line(l_specFileHandle, ' p_responsibility_id in number ');
193 utl_file.put_line(l_specFileHandle, ' ,p_application_id in number default NULL'); --added for bug3631547
194 utl_file.put_line(l_specFileHandle, ' ,p_operation in varchar2 ');
195 utl_file.put_line(l_specFileHandle, ' ,p_column_name in varchar2 default NULL');
196 utl_file.put_line(l_specFileHandle, ' ,p_record in '||l_db_object_name || '%ROWTYPE');
197 utl_file.put_line(l_specFileHandle, ' ,p_check_all_cols_constraint in varchar2 default ''Y''');
198 utl_file.put_line(l_specFileHandle, ' ,p_is_caller_defaulting in varchar2 default ''N''');
199 utl_file.put_line(l_specFileHandle, ' ,x_constraint_id out nocopy number');
200
201 utl_file.put_line(l_specFileHandle, ' ,x_constraining_conditions_grp out nocopy number');
202
203 utl_file.put_line(l_specFileHandle, ' ,x_on_operation_action out nocopy number');
204
205 utl_file.put_line(l_specFileHandle, ' ) ');
206 utl_file.put_line(l_specFileHandle, ' RETURN NUMBER; ');
207 utl_file.put_line(l_specFileHandle, ' ');
208 utl_file.put_line(l_specFileHandle, '------------------------------------------- ');
209 utl_file.put_line(l_specFileHandle, 'END ' || l_pkg_name || ';');
210 utl_file.put_line(l_specFileHandle , '/');
211 utl_file.put_line(l_specFileHandle , 'COMMIT;');
212 --utl_file.put_line(l_specFileHandle , 'EXIT;');
213 utl_file.fclose(l_specFileHandle);
214 IF l_debug_level > 0 THEN
215 OE_Debug_PUB.ADD('generate body');
216 END IF;
217
218 --generate body
219 utl_file.put_line(l_bodyFileHandle, '-- ');
220 utl_file.put_line(l_bodyFileHandle, '-- Copyright (c) 1996 Oracle Corporation, Redwood Shores, CA, USA ');
221 utl_file.put_line(l_bodyFileHandle, '-- All rights reserved. ');
222 utl_file.put_line(l_bodyFileHandle, '-- ');
223 utl_file.put_line(l_bodyFileHandle, '-- FILENAME ');
224 utl_file.put_line(l_bodyFileHandle, '-- ');
225 utl_file.put_line(l_bodyFileHandle, '-- ' || l_bodyFileName);
226 utl_file.put_line(l_bodyFileHandle, '-- ');
227 utl_file.put_line(l_bodyFileHandle, '-- DESCRIPTION ');
228 utl_file.put_line(l_bodyFileHandle, '-- ');
229 utl_file.put_line(l_bodyFileHandle, '-- Body of package ' || l_pkg_name );
230 utl_file.put_line(l_bodyFileHandle, '-- ');
231 utl_file.put_line(l_bodyFileHandle, '-- NOTES ');
232 utl_file.put_line(l_bodyFileHandle, '-- ');
233 utl_file.put_line(l_bodyFileHandle, 'WHENEVER SQLERROR EXIT FAILURE ROLLBACK; ');
234 utl_file.put_line(l_bodyFileHandle, ' ');
235
236 utl_file.put_line(l_bodyFileHandle , 'CREATE OR REPLACE PACKAGE BODY ' || l_pkg_name);
237 utl_file.put_line(l_bodyFileHandle , 'AS ');
238 utl_file.put_line(l_bodyFileHandle , ' ');
239
240 utl_file.put_line(l_bodyFileHandle , '-- Globals ');
241 utl_file.put_line(l_bodyFileHandle , '------------------------------------------- ');
242 utl_file.put_line(l_bodyFileHandle , ' g_application_id constant number := ' || to_char(p_application_id) || ';');
243 utl_file.put_line(l_bodyFileHandle , ' g_entity_id constant number := ' || to_char(l_entity_id) || ';');
244 utl_file.put_line(l_bodyFileHandle , ' g_entity_short_name constant varchar2(15) := ' || '''' ||p_entity_short_name || '''' || ';');
245 IF l_debug_level > 0 THEN
246 OE_Debug_PUB.ADD('generateValidate_Constraint ');
247 END IF;
248
249 utl_file.put_line(l_bodyFileHandle , '------------------------------------------- ');
250 utl_file.put_line(l_bodyFileHandle , 'PROCEDURE Validate_Constraint ');
251 utl_file.put_line(l_bodyFileHandle , ' ( ');
252 utl_file.put_line(l_bodyFileHandle , ' p_constraint_id in number');
253 utl_file.put_line(l_bodyFileHandle , ' ,x_condition_count out nocopy number');
254
255 utl_file.put_line(l_bodyFileHandle , ' ,x_valid_condition_group out nocopy number');
256
257 utl_file.put_line(l_bodyFileHandle , ' ,x_result out nocopy number');
258
259 utl_file.put_line(l_bodyFileHandle , ' ) ');
260 utl_file.put_line(l_bodyFileHandle , ' IS ');
261 utl_file.put_line(l_bodyFileHandle , ' ');
262 utl_file.put_line(l_bodyFileHandle , ' --Cursors');
263 utl_file.put_line(l_bodyFileHandle , ' CURSOR C_R ');
264 utl_file.put_line(l_bodyFileHandle , ' IS SELECT ');
265 utl_file.put_line(l_bodyFileHandle , ' condition_id,');
266 utl_file.put_line(l_bodyFileHandle , ' group_number, ');
267 utl_file.put_line(l_bodyFileHandle , ' modifier_flag, ');
268 utl_file.put_line(l_bodyFileHandle , ' validation_application_id,');
269 utl_file.put_line(l_bodyFileHandle , ' validation_entity_short_name,');
270 utl_file.put_line(l_bodyFileHandle , ' validation_tmplt_short_name,');
271 utl_file.put_line(l_bodyFileHandle , ' record_set_short_name,');
272 utl_file.put_line(l_bodyFileHandle , ' scope_op,');
273 utl_file.put_line(l_bodyFileHandle , ' validation_pkg,');
274 utl_file.put_line(l_bodyFileHandle , ' validation_proc');
275 utl_file.put_line(l_bodyFileHandle , ' FROM oe_pc_conditions_v');
276 utl_file.put_line(l_bodyFileHandle , ' WHERE constraint_id = p_constraint_id');
277 utl_file.put_line(l_bodyFileHandle , ' ORDER BY group_number;');
278 utl_file.put_line(l_bodyFileHandle , ' ');
279 utl_file.put_line(l_bodyFileHandle , ' ');
280 utl_file.put_line(l_bodyFileHandle , ' TYPE ConstraintRule_Rec_Type IS RECORD');
281 utl_file.put_line(l_bodyFileHandle , ' ( ');
282 utl_file.put_line(l_bodyFileHandle , ' condition_id number,');
283 utl_file.put_line(l_bodyFileHandle , ' group_number number,');
284 utl_file.put_line(l_bodyFileHandle , ' modifier_flag varchar2(1),');
285 utl_file.put_line(l_bodyFileHandle , ' validation_application_id number,');
286 utl_file.put_line(l_bodyFileHandle , ' validation_entity_short_name varchar2(15),');
287 utl_file.put_line(l_bodyFileHandle , ' validation_tmplt_short_name varchar2(8),');
288 utl_file.put_line(l_bodyFileHandle , ' record_set_short_name varchar2(8),');
289 utl_file.put_line(l_bodyFileHandle , ' scope_op varchar2(3),');
290 utl_file.put_line(l_bodyFileHandle , ' validation_pkg varchar2(30),');
291 utl_file.put_line(l_bodyFileHandle , ' validation_proc varchar2(30)');
292 utl_file.put_line(l_bodyFileHandle , ' );');
293 utl_file.put_line(l_bodyFileHandle , ' ');
294 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec ConstraintRule_Rec_Type;');
295 utl_file.put_line(l_bodyFileHandle , ' l_dsqlCursor integer;');
296 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString varchar2(2000);');
297 utl_file.put_line(l_bodyFileHandle , ' l_rule_count number;');
298 utl_file.put_line(l_bodyFileHandle , ' l_ConstrainedStatus number;');
299 utl_file.put_line(l_bodyFileHandle , ' l_dummy integer;');
300 utl_file.put_line(l_bodyFileHandle , ' i number;');
301 utl_file.put_line(l_bodyFileHandle , ' l_tempResult boolean;');
302 utl_file.put_line(l_bodyFileHandle , ' l_result_01 number;');
303 utl_file.put_line(l_bodyFileHandle , ' l_currGrpNumber number;');
304 utl_file.put_line(l_bodyFileHandle , ' l_currGrpResult boolean;');
305 utl_file.put_line(l_bodyFileHandle , 'BEGIN ');
306 utl_file.put_line(l_bodyFileHandle , ' ');
307 utl_file.put_line(l_bodyFileHandle , ' l_ConstrainedStatus := OE_PC_GLOBALS.NO;');
308 utl_file.put_line(l_bodyFileHandle , ' l_rule_count := 0;');
309 utl_file.put_line(l_bodyFileHandle , ' i := 0;');
310 utl_file.put_line(l_bodyFileHandle , ' l_currGrpNumber := -1;');
311 utl_file.put_line(l_bodyFileHandle , ' l_currGrpResult := FALSE;');
312 utl_file.put_line(l_bodyFileHandle , ' ');
313 utl_file.put_line(l_bodyFileHandle , ' OPEN C_R;');
314 utl_file.put_line(l_bodyFileHandle , ' LOOP -- validatate constraining conditions');
315 utl_file.put_line(l_bodyFileHandle , ' -- fetch all the validation procedure_names assigned to the constraint and ');
316 utl_file.put_line(l_bodyFileHandle , ' -- build the dynamic sql string ');
317 utl_file.put_line(l_bodyFileHandle , ' FETCH C_R into ');
318 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.condition_id,');
319 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.group_number,');
320 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.modifier_flag,');
321 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.validation_application_id,');
322 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.validation_entity_short_name,');
323 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.validation_tmplt_short_name,');
324 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.record_set_short_name,');
325 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.scope_op,');
326 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.validation_pkg,');
327 utl_file.put_line(l_bodyFileHandle , ' l_constraintRuleRec.validation_proc;');
328 utl_file.put_line(l_bodyFileHandle , ' ');
329 utl_file.put_line(l_bodyFileHandle , ' -- EXIT from loop ');
330 utl_file.put_line(l_bodyFileHandle , ' IF (C_R%NOTFOUND) THEN');
331 utl_file.put_line(l_bodyFileHandle , ' IF (l_currGrpNumber != -1 AND l_currGrpResult = TRUE) THEN');
332 utl_file.put_line(l_bodyFileHandle , ' l_ConstrainedStatus := OE_PC_GLOBALS.YES;');
333 utl_file.put_line(l_bodyFileHandle , ' END IF;');
334 utl_file.put_line(l_bodyFileHandle , ' EXIT; -- exit the loop');
335 utl_file.put_line(l_bodyFileHandle , ' END IF;');
336 utl_file.put_line(l_bodyFileHandle , ' ');
337 utl_file.put_line(l_bodyFileHandle , ' IF (l_currGrpNumber != l_constraintRuleRec.group_number) THEN');
338 utl_file.put_line(l_bodyFileHandle , ' ');
339 utl_file.put_line(l_bodyFileHandle , ' -- we are entering the new group of conditions.. ');
340 utl_file.put_line(l_bodyFileHandle , ' -- groups are ORd together, so if the previous group was evaluated');
341 utl_file.put_line(l_bodyFileHandle , ' -- to TRUE (OE_PC_GLOBALS.YES) then no need to evaluvate this group.');
342 utl_file.put_line(l_bodyFileHandle , ' IF (l_currGrpResult = TRUE) THEN');
343 utl_file.put_line(l_bodyFileHandle , ' l_ConstrainedStatus := OE_PC_GLOBALS.YES;');
344 utl_file.put_line(l_bodyFileHandle , ' EXIT; -- exit the loop');
345 utl_file.put_line(l_bodyFileHandle , ' END IF;');
346 utl_file.put_line(l_bodyFileHandle , ' ');
347 utl_file.put_line(l_bodyFileHandle , ' -- previous group did not evaluvate to TRUE, so lets pursue this new group');
348 utl_file.put_line(l_bodyFileHandle , ' l_currGrpNumber := l_constraintRuleRec.group_number;');
349 utl_file.put_line(l_bodyFileHandle , ' l_currGrpResult := FALSE;');
350 utl_file.put_line(l_bodyFileHandle , ' i := 0;');
351 utl_file.put_line(l_bodyFileHandle , ' END IF;');
352 utl_file.put_line(l_bodyFileHandle , ' -- we have a got a record, increment the count by 1');
353 utl_file.put_line(l_bodyFileHandle , ' l_rule_count := l_rule_count+1;');
354 utl_file.put_line(l_bodyFileHandle , ' ');
355 utl_file.put_line(l_bodyFileHandle , ' -- pkg.function(p1, p2, ...)');
356 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := '' begin '';');
357 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || l_constraintRuleRec.validation_pkg ||''.'';');
358 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || l_constraintRuleRec.validation_proc;');
359 utl_file.put_line(l_bodyFileHandle , ' ');
360 utl_file.put_line(l_bodyFileHandle , ' -- IN Parameters');
361 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || ''( '';');
362 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_application_id, '';');
363 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_entity_short_name, '';');
364 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_validation_entity_short_name, '';');
365 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_validation_tmplt_short_name, '';');
366 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_record_set_short_name, '';');
367 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_scope, '';');
368
369 utl_file.put_line(l_bodyFileHandle , ' ');
370 utl_file.put_line(l_bodyFileHandle , ' -- OUT Parameters ');
371 utl_file.put_line(l_bodyFileHandle , ' -- OUT Parameters ');
372 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '':t_result );'';');
373 utl_file.put_line(l_bodyFileHandle , ' l_dynamicSqlString := l_dynamicSqlString || '' end; '';');
374 utl_file.put_line(l_bodyFileHandle , ' -- open the dynamic sql cursor');
375 utl_file.put_line(l_bodyFileHandle , ' l_dsqlCursor := dbms_sql.open_cursor;');
376 utl_file.put_line(l_bodyFileHandle , ' ');
377 utl_file.put_line(l_bodyFileHandle , ' -- parse the validator sql');
378 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.parse(l_dsqlCursor, l_dynamicSqlString, DBMS_SQL.NATIVE);');
379 utl_file.put_line(l_bodyFileHandle , ' -- give the bind variables');
380 utl_file.put_line(l_bodyFileHandle , ' -- variables for IN parameters');
381 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_application_id'', g_application_id);');
382 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_entity_short_name'', g_entity_short_name);');
383 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_validation_entity_short_name'', l_constraintRuleRec.validation_entity_short_name);');
384 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_validation_tmplt_short_name'', l_constraintRuleRec.validation_tmplt_short_name);');
385 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_record_set_short_name'', l_constraintRuleRec.record_set_short_name);');
386 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_scope'', l_constraintRuleRec.scope_op);');
387 utl_file.put_line(l_bodyFileHandle , ' ');
388 utl_file.put_line(l_bodyFileHandle , ' -- variables for OUT parameters');
389 utl_file.put_line(l_bodyFileHandle , ' -- variables for OUT parameters');
390 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.bind_variable(l_dsqlCursor, '':t_result'', l_result_01);');
391 utl_file.put_line(l_bodyFileHandle , ' -- execute the validator pfunction');
392 utl_file.put_line(l_bodyFileHandle , ' l_dummy := dbms_sql.execute(l_dsqlCursor);');
393 utl_file.put_line(l_bodyFileHandle , ' ');
394 utl_file.put_line(l_bodyFileHandle , ' -- retrieve the values of the OUT variables');
395 utl_file.put_line(l_bodyFileHandle , ' -- retrieve the values of the OUT variables');
396 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.variable_value(l_dsqlCursor, '':t_result'', l_result_01);');
397 utl_file.put_line(l_bodyFileHandle , ' IF (l_result_01 = 0) THEN');
398 utl_file.put_line(l_bodyFileHandle , ' l_tempResult := FALSE;');
399 utl_file.put_line(l_bodyFileHandle , ' ELSE');
400 utl_file.put_line(l_bodyFileHandle , ' l_tempResult := TRUE;');
401 utl_file.put_line(l_bodyFileHandle , ' END IF;');
402 utl_file.put_line(l_bodyFileHandle , ' -- apply the modifier on the result');
403 utl_file.put_line(l_bodyFileHandle , ' if(l_constraintRuleRec.modifier_flag = OE_PC_GLOBALS.YES_FLAG) then');
404 utl_file.put_line(l_bodyFileHandle , ' l_tempResult := NOT(l_tempResult);');
405 utl_file.put_line(l_bodyFileHandle , ' end if;');
406 utl_file.put_line(l_bodyFileHandle , ' ');
407 utl_file.put_line(l_bodyFileHandle , ' IF (i = 0) THEN');
408 utl_file.put_line(l_bodyFileHandle , ' l_currGrpResult := l_tempResult;');
409 utl_file.put_line(l_bodyFileHandle , ' ELSE');
410 utl_file.put_line(l_bodyFileHandle , ' l_currGrpResult := l_currGrpResult AND l_tempResult;');
411 utl_file.put_line(l_bodyFileHandle , ' END IF;');
412 utl_file.put_line(l_bodyFileHandle , ' -- close the cursor');
413 utl_file.put_line(l_bodyFileHandle , ' dbms_sql.close_cursor(l_dsqlCursor); ');
414 utl_file.put_line(l_bodyFileHandle , ' ');
415 utl_file.put_line(l_bodyFileHandle , ' -- increment the index');
416 utl_file.put_line(l_bodyFileHandle , ' i := i+1;');
417 utl_file.put_line(l_bodyFileHandle , ' END LOOP; -- end validatate validators');
418 utl_file.put_line(l_bodyFileHandle , ' CLOSE C_R;');
419 utl_file.put_line(l_bodyFileHandle , ' -- did we validate any constraint rules?. if there is none then the ');
420 utl_file.put_line(l_bodyFileHandle , ' -- constraint is valid and we will return YES ');
421 utl_file.put_line(l_bodyFileHandle , ' IF (l_rule_count = 0) THEN');
422 utl_file.put_line(l_bodyFileHandle , ' x_condition_count := 0;');
423 utl_file.put_line(l_bodyFileHandle , ' x_valid_condition_group := -1;');
424 utl_file.put_line(l_bodyFileHandle , ' x_result := OE_PC_GLOBALS.YES;');
425 utl_file.put_line(l_bodyFileHandle , ' ELSE ');
426 utl_file.put_line(l_bodyFileHandle , ' x_condition_count := l_rule_count;');
427 utl_file.put_line(l_bodyFileHandle , ' x_valid_condition_group := l_currGrpNumber;');
428 utl_file.put_line(l_bodyFileHandle , ' x_result := l_ConstrainedStatus;');
429 utl_file.put_line(l_bodyFileHandle , ' END IF;');
430 utl_file.put_line(l_bodyFileHandle , ' -------------------------------------------');
431 utl_file.put_line(l_bodyFileHandle , ' EXCEPTION ');
432 utl_file.put_line(l_bodyFileHandle , ' WHEN OTHERS THEN ');
433 utl_file.put_line(l_bodyFileHandle , ' x_result := OE_PC_GLOBALS.ERROR; ');
434 utl_file.put_line(l_bodyFileHandle , 'END Validate_Constraint; ');
435 utl_file.put_line(l_bodyFileHandle , '------------------------------------------- ');
436 IF l_debug_level > 0 THEN
437 OE_Debug_PUB.ADD(' generate Is_Op_Constrained ');
438 END IF;
439
440 utl_file.put_line(l_bodyFileHandle , '------------------------------------------- ');
441 utl_file.put_line(l_bodyFileHandle , 'FUNCTION Is_Op_Constrained ');
442 utl_file.put_line(l_bodyFileHandle , ' ( ');
443 utl_file.put_line(l_bodyFileHandle , ' p_responsibility_id in number ');
444 utl_file.put_line(l_bodyFileHandle , ' ,p_application_id in number '); --added for bug3631547
445 utl_file.put_line(l_bodyFileHandle , ' ,p_operation in varchar2 ');
446 utl_file.put_line(l_bodyFileHandle , ' ,p_column_name in varchar2 default NULL');
447 utl_file.put_line(l_bodyFileHandle , ' ,p_record in '||l_db_object_name || '%ROWTYPE');
448 utl_file.put_line(l_bodyFileHandle, ' ,p_check_all_cols_constraint in varchar2 default ''Y''');
449 utl_file.put_line(l_bodyFileHandle, ' ,p_is_caller_defaulting in varchar2 default ''N''');
450 utl_file.put_line(l_bodyFileHandle , ' ,x_constraint_id out nocopy number');
451
452 utl_file.put_line(l_bodyFileHandle , ' ,x_constraining_conditions_grp out nocopy number');
453
454 utl_file.put_line(l_bodyFileHandle , ' ,x_on_operation_action out nocopy number');
455
456 utl_file.put_line(l_bodyFileHandle , ' ) ');
457 utl_file.put_line(l_bodyFileHandle , ' RETURN NUMBER ');
458 utl_file.put_line(l_bodyFileHandle , ' ');
459 utl_file.put_line(l_bodyFileHandle , ' IS ');
460 utl_file.put_line(l_bodyFileHandle , ' ');
461 utl_file.put_line(l_bodyFileHandle , ' --Cursors');
462 utl_file.put_line(l_bodyFileHandle , ' -------------------------------------------');
463 utl_file.put_line(l_bodyFileHandle , ' CURSOR C_C ');
464 utl_file.put_line(l_bodyFileHandle , ' IS ');
465 utl_file.put_line(l_bodyFileHandle , ' SELECT DISTINCT');
466 utl_file.put_line(l_bodyFileHandle , ' c.constraint_id, c.entity_id');
467 utl_file.put_line(l_bodyFileHandle , ' ,c.on_operation_action');
468 --utl_file.put_line(l_bodyFileHandle , ' ,c.message_name');
469 utl_file.put_line(l_bodyFileHandle , ' FROM oe_pc_constraints c,');
470 utl_file.put_line(l_bodyFileHandle , ' oe_pc_assignments a');
471 utl_file.put_line(l_bodyFileHandle , ' WHERE (a.responsibility_id = p_responsibility_id OR a.responsibility_id IS NULL)');
472 -- utl_file.put_line(l_bodyFileHandle , ' AND sysdate BETWEEN nvl(a.start_date_active, sysdate) AND nvl(a.end_date_active, sysdate)');
473 utl_file.put_line(l_bodyFileHandle , ' AND a.constraint_id = c.constraint_id');
474 utl_file.put_line(l_bodyFileHandle , ' AND c.entity_id = G_ENTITY_ID');
475 utl_file.put_line(l_bodyFileHandle , ' AND c.constrained_operation = p_operation');
476 utl_file.put_line(l_bodyFileHandle , ' AND a.application_id = p_application_id OR a.application_id IS NULL'); --bug3631547
477 utl_file.put_line(l_bodyFileHandle , ' -- if caller is defaulting then DO NOT CHECK those constraints');
478 utl_file.put_line(l_bodyFileHandle , ' -- that have honored_by_def_flag = ''N''');
479 utl_file.put_line(l_bodyFileHandle , ' AND decode(honored_by_def_flag,''N'',decode(p_is_caller_defaulting,''Y'',''N'',''Y''),');
480 utl_file.put_line(l_bodyFileHandle , ' nvl(honored_by_def_flag,''Y'')) = ''Y''');
481 utl_file.put_line(l_bodyFileHandle , ' AND decode(c.column_name, ' || l_NULL || ',decode(p_check_all_cols_constraint,''Y'',');
482 utl_file.put_line(l_bodyFileHandle, ' nvl(p_column_name,'||l_DUMMY_COL||'),'||l_DUMMY_COL||'),c.column_name) = nvl(p_column_name,'||l_DUMMY_COL||')');
483 utl_file.put_line(l_bodyFileHandle , ' AND NOT EXISTS (');
484 utl_file.put_line(l_bodyFileHandle , ' SELECT ' || l_Q || 'EXISTS' || l_Q);
485 utl_file.put_line(l_bodyFileHandle , ' FROM OE_PC_EXCLUSIONS e');
486 utl_file.put_line(l_bodyFileHandle , ' WHERE e.responsibility_id = p_responsibility_id');
487 utl_file.put_line(l_bodyFileHandle , ' AND e.assignment_id = a.assignment_id');
488 utl_file.put_line(l_bodyFileHandle , ' AND e.application_id = p_application_id OR e.application_id IS NULL'); --bug3631547
489 -- utl_file.put_line(l_bodyFileHandle , ' AND sysdate BETWEEN nvl(e.start_date_active, sysdate)');
490 -- utl_file.put_line(l_bodyFileHandle , ' AND nvl(e.end_date_active, sysdate)');
491 utl_file.put_line(l_bodyFileHandle , ' );');
492 utl_file.put_line(l_bodyFileHandle , '-- Cursor to select all update constraints that are applicable to insert');
493 utl_file.put_line(l_bodyFileHandle , '-- operations as well.');
494
495 utl_file.put_line(l_bodyFileHandle , ' CURSOR C_CHECK_ON_INSERT ');
496 utl_file.put_line(l_bodyFileHandle , ' IS ');
497 utl_file.put_line(l_bodyFileHandle , ' SELECT DISTINCT');
498 utl_file.put_line(l_bodyFileHandle , ' c.constraint_id, c.entity_id');
499 utl_file.put_line(l_bodyFileHandle , ' ,c.on_operation_action');
500 --utl_file.put_line(l_bodyFileHandle , ' ,c.message_name');
501 utl_file.put_line(l_bodyFileHandle , ' FROM oe_pc_constraints c,');
502 utl_file.put_line(l_bodyFileHandle , ' oe_pc_assignments a');
503 utl_file.put_line(l_bodyFileHandle , ' WHERE (a.responsibility_id = p_responsibility_id OR a.responsibility_id IS NULL)');
504 utl_file.put_line(l_bodyFileHandle , ' AND a.application_id = p_application_id OR a.application_id IS NULL'); --bug3631547
505 -- utl_file.put_line(l_bodyFileHandle , ' AND sysdate BETWEEN nvl(a.start_date_active, sysdate) AND nvl(a.end_date_active, sysdate)');
506 utl_file.put_line(l_bodyFileHandle , ' AND a.constraint_id = c.constraint_id');
507 utl_file.put_line(l_bodyFileHandle , ' AND c.entity_id = G_ENTITY_ID');
508 utl_file.put_line(l_bodyFileHandle , ' AND c.constrained_operation = OE_PC_GLOBALS.UPDATE_OP');
509 utl_file.put_line(l_bodyFileHandle , ' AND c.check_on_insert_flag = ''Y''');
510 utl_file.put_line(l_bodyFileHandle , ' AND nvl(c.column_name, ' || l_DUMMY_COL || ') = p_column_name');
511 utl_file.put_line(l_bodyFileHandle , ' -- if caller is defaulting then DO NOT CHECK those constraints');
512 utl_file.put_line(l_bodyFileHandle , ' -- that have honored_by_def_flag = ''N''');
513 utl_file.put_line(l_bodyFileHandle , ' AND decode(honored_by_def_flag,''N'',decode(p_is_caller_defaulting,''Y'',''N'',''Y''),');
514 utl_file.put_line(l_bodyFileHandle , ' nvl(honored_by_def_flag,''Y'')) = ''Y''');
515 utl_file.put_line(l_bodyFileHandle , ' AND NOT EXISTS (');
516 utl_file.put_line(l_bodyFileHandle , ' SELECT ' || l_Q || 'EXISTS' || l_Q);
517 utl_file.put_line(l_bodyFileHandle , ' FROM OE_PC_EXCLUSIONS e');
518 utl_file.put_line(l_bodyFileHandle , ' WHERE e.responsibility_id = p_responsibility_id');
519 utl_file.put_line(l_bodyFileHandle , ' AND e.assignment_id = a.assignment_id');
520 utl_file.put_line(l_bodyFileHandle , ' AND e.application_id = p_application_id OR e.application_id IS NULL'); --bug3631547
521 -- utl_file.put_line(l_bodyFileHandle , ' AND sysdate BETWEEN nvl(e.start_date_active, sysdate)');
522 -- utl_file.put_line(l_bodyFileHandle , ' AND nvl(e.end_date_active, sysdate)');
523 utl_file.put_line(l_bodyFileHandle , ' );');
524 utl_file.put_line(l_bodyFileHandle , ' --Local Variables');
525 utl_file.put_line(l_bodyFileHandle , ' -------------------------------------------');
526 utl_file.put_line(l_bodyFileHandle , ' l_validation_result number;');
527 utl_file.put_line(l_bodyFileHandle , ' l_condition_count number;');
528 utl_file.put_line(l_bodyFileHandle , ' l_valid_condition_group number;');
529 utl_file.put_line(l_bodyFileHandle , ' BEGIN ');
530 utl_file.put_line(l_bodyFileHandle , ' g_record := p_record; ');
531 utl_file.put_line(l_bodyFileHandle , ' l_validation_result := OE_PC_GLOBALS.NO; ');
532 utl_file.put_line(l_bodyFileHandle , ' FOR c_rec in C_C LOOP ');
533 utl_file.put_line(l_bodyFileHandle , ' Validate_Constraint ( ');
534 utl_file.put_line(l_bodyFileHandle , ' p_constraint_id => c_rec.constraint_id');
535 utl_file.put_line(l_bodyFileHandle , ' ,x_condition_count => l_condition_count');
536 utl_file.put_line(l_bodyFileHandle , ' ,x_valid_condition_group => l_valid_condition_group');
537 utl_file.put_line(l_bodyFileHandle , ' ,x_result => l_validation_result');
538 utl_file.put_line(l_bodyFileHandle , ' );');
539 utl_file.put_line(l_bodyFileHandle , ' IF (l_condition_count = 0 OR l_validation_result = OE_PC_GLOBALS.YES) then');
540 utl_file.put_line(l_bodyFileHandle , ' x_constraint_id := c_rec.constraint_id;');
541 utl_file.put_line(l_bodyFileHandle , ' x_on_operation_action := c_rec.on_operation_action;');
542 --utl_file.put_line(l_bodyFileHandle , ' x_message_name := c_rec.message_name;');
543 utl_file.put_line(l_bodyFileHandle , ' x_constraining_conditions_grp := l_valid_condition_group;');
544 utl_file.put_line(l_bodyFileHandle , ' EXIT;');
545 utl_file.put_line(l_bodyFileHandle , ' END IF;');
546 utl_file.put_line(l_bodyFileHandle , ' END LOOP;');
547 utl_file.put_line(l_bodyFileHandle , ' IF ( p_operation = OE_PC_GLOBALS.CREATE_OP');
548 utl_file.put_line(l_bodyFileHandle , ' AND l_validation_result = OE_PC_GLOBALS.NO');
549 utl_file.put_line(l_bodyFileHandle , ' AND p_column_name IS NOT NULL) THEN');
550 utl_file.put_line(l_bodyFileHandle , ' FOR c_rec in C_CHECK_ON_INSERT LOOP');
551 utl_file.put_line(l_bodyFileHandle , ' Validate_Constraint ( ');
552 utl_file.put_line(l_bodyFileHandle , ' p_constraint_id => c_rec.constraint_id');
553 utl_file.put_line(l_bodyFileHandle , ' ,x_condition_count => l_condition_count');
554 utl_file.put_line(l_bodyFileHandle , ' ,x_valid_condition_group => l_valid_condition_group');
555 utl_file.put_line(l_bodyFileHandle , ' ,x_result => l_validation_result');
556 utl_file.put_line(l_bodyFileHandle , ' );');
557 utl_file.put_line(l_bodyFileHandle , ' IF (l_condition_count = 0 OR l_validation_result = OE_PC_GLOBALS.YES) then');
558 utl_file.put_line(l_bodyFileHandle , ' x_constraint_id := c_rec.constraint_id;');
559 utl_file.put_line(l_bodyFileHandle , ' x_on_operation_action := c_rec.on_operation_action;');
560 --utl_file.put_line(l_bodyFileHandle , ' x_message_name := c_rec.message_name;');
561 utl_file.put_line(l_bodyFileHandle , ' x_constraining_conditions_grp := l_valid_condition_group;');
562 utl_file.put_line(l_bodyFileHandle , ' EXIT;');
563 utl_file.put_line(l_bodyFileHandle , ' END IF;');
564 utl_file.put_line(l_bodyFileHandle , ' END LOOP;');
565 utl_file.put_line(l_bodyFileHandle , ' END IF;');
566 utl_file.put_line(l_bodyFileHandle , ' return l_validation_result;');
567 utl_file.put_line(l_bodyFileHandle , ' EXCEPTION ');
568 utl_file.put_line(l_bodyFileHandle , ' WHEN OTHERS THEN ');
569 utl_file.put_line(l_bodyFileHandle , ' RETURN OE_PC_GLOBALS.ERROR; ');
570 utl_file.put_line(l_bodyFileHandle , 'END Is_Op_Constrained; ');
571 utl_file.put_line(l_bodyFileHandle , '------------------------------------------- ');
572 utl_file.put_line(l_bodyFileHandle , 'END ' || l_pkg_name || ';');
573 utl_file.put_line(l_bodyFileHandle , '/');
574 utl_file.put_line(l_bodyFileHandle , 'COMMIT;');
575 -- utl_file.put_line(l_bodyFileHandle , 'EXIT;');
576 utl_file.fclose(l_bodyFileHandle);
577
578 -- write the script to compile the spec and body
579 utl_file.put_line(l_sqlFileHandle , '-- compile the spec');
580 utl_file.put_line(l_sqlFileHandle , '@' || l_specFileName);
581 utl_file.put_line(l_sqlFileHandle , '-- compile the body');
582 utl_file.put_line(l_sqlFileHandle , '@' || l_bodyFileName );
583 utl_file.put_line(l_sqlFileHandle , 'EXIT;');
584 utl_file.fclose(l_sqlFileHandle);
585
586 EXCEPTION
587
588 when others then
589 IF l_debug_level > 0 THEN
590 OE_Debug_PUB.ADD('Oe_PC_Constraints_Admin_Pub.Generate_Constraint_API: EXCEPTION');
591 END IF;
592 END Generate_Constraint_API;
593 ----------------------------------------------------------------------
594
595
596 -- FUNCTION Get_Authorized_WF_Roles:
597 -- Returns the list of WF Roles that are NOT constrained
598 -- by the conditions for a given constraint (p_constraint_id).
599 -- The list contains two elements:
600 -- Name: WF_ROLES.NAME
601 -- Display_Name: WF_ROLES.DISPLAY_NAME
602 -- Returns a NULL list if no auth. resps. are found.
603
604 -- NOTE: This does not mean that these roles can perform the
605 -- constrained operation. There may be other constraints for
606 -- the same operation on this entity that are applicable to this role.
607
608 -----------------------------------------------------
609 FUNCTION Get_Authorized_WF_Roles
610 (
611 p_constraint_id IN NUMBER
612 , x_return_status OUT NOCOPY VARCHAR2
613
614 )
615 RETURN OE_PC_GLOBALS.Authorized_WF_Roles_TBL
616 -----------------------------------------------------
617 IS
618
619 CURSOR C_ASSIGNED_RESP IS
620 SELECT 'FND_RESP'||R.application_id||':'||R.responsibility_id role_name
621 , R.responsibility_name role_display_name
622 FROM FND_RESPONSIBILITY_VL R
623 WHERE R.responsibility_id NOT IN (SELECT NVL(responsibility_id,R.responsibility_id)
624 FROM OE_PC_ASSIGNMENTS
625 WHERE CONSTRAINT_ID = p_constraint_id
626 )
627 ORDER BY role_display_name;
628
629 CURSOR C_EXCLUDED_RESP IS
630 SELECT 'FND_RESP'||R.application_id||':'||R.responsibility_id role_name
631 , R.responsibility_name role_display_name
632 FROM FND_RESPONSIBILITY_VL R
633 , OE_PC_EXCLUSIONS E
634 WHERE E.assignment_id = (SELECT assignment_id
635 FROM oe_pc_assignments
636 WHERE constraint_id = p_constraint_id
637 AND responsibility_id IS NULL)
638 AND E.responsibility_id = R.responsibility_id
639 AND E.application_id = R.application_id --added for bug3631547
640 ORDER BY role_display_name;
641
642 I NUMBER := 1;
643
644 x_WF_Roles_TBL OE_PC_GLOBALS.Authorized_WF_Roles_TBL;
645 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
646 BEGIN
647
648 x_return_status := FND_API.G_RET_STS_SUCCESS;
649
650 -- If the constraint is applicable to ALL EXCEPT some responsibilities
651 -- then select from the EXCEPT list.
652
653 FOR C1 IN C_EXCLUDED_RESP LOOP
654
655 x_WF_Roles_TBL(I).Name := C1.Role_Name;
656 x_WF_Roles_TBL(I).Display_Name := C1.Role_Display_Name;
657
658 I := I+1;
659
660 END LOOP;
661
662 -- If there were NO responsibilities in the ALL EXCEPT list, then
663 -- return all resps. except those that are constrained (OR
664 -- ASSIGNED to this constraint.)
665
666 IF (I = 1) THEN
667
668 FOR C2 IN C_ASSIGNED_RESP LOOP
669
670 x_WF_Roles_TBL(I).Name := C2.Role_Name;
671 x_WF_Roles_TBL(I).Display_Name := C2.Role_Display_Name;
672
673 I := I+1;
674
675 END LOOP;
676
677 END IF;
678
679 RETURN x_WF_Roles_TBL;
680
681 EXCEPTION
682
683 WHEN OTHERS THEN
684
685 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
686
687 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
688 THEN
689 OE_MSG_PUB.Add_Exc_Msg
690 ( G_PKG_NAME
691 , 'Get_Authorized_WF_Roles'
692 );
693 END IF;
694
695 END Get_Authorized_WF_Roles;
696
697 -- Local procedure that should be called only from add_constraint_message
698 -- procedure
699 -- This sets the correct message on the stack based on the operation
700 -- and also sets the tokens for OBJECT and ATTRIBUTE where needed.
701 -- This does NOT set the REASON token which is added in the
702 -- add_constraint_message procedure itself
703 PROCEDURE Set_Message
704 ( p_operation IN VARCHAR2
705 , p_group_number IN VARCHAR2
706 , p_attribute_name IN VARCHAR2
707 , p_object_name IN VARCHAR2
708 )
709 IS
710 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
711 BEGIN
712
713 IF p_operation = OE_PC_GLOBALS.UPDATE_OP THEN
714 IF p_attribute_name IS NOT NULL THEN
715 IF nvl(p_group_number,-1) = -1 THEN
716 FND_MESSAGE.SET_NAME('ONT','OE_PC_UPDATE_FIELD_NO_CONDN');
717 ELSE
718 FND_MESSAGE.SET_NAME('ONT','OE_PC_UPDATE_FIELD_VIOLATION');
719 END IF;
720 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',p_attribute_name);
721 ELSE
722 IF nvl(p_group_number,-1) = -1 THEN
723 FND_MESSAGE.SET_NAME('ONT','OE_PC_UPDATE_NO_CONDN');
724 ELSE
725 FND_MESSAGE.SET_NAME('ONT','OE_PC_UPDATE_VIOLATION');
726 END IF;
727 FND_MESSAGE.SET_TOKEN('OBJECT',p_object_name);
728 END IF;
729 ELSIF p_operation = OE_PC_GLOBALS.CREATE_OP THEN
730 IF nvl(p_group_number,-1) = -1 THEN
731 FND_MESSAGE.SET_NAME('ONT','OE_PC_CREATE_NO_CONDN');
732 ELSE
733 FND_MESSAGE.SET_NAME('ONT','OE_PC_CREATE_VIOLATION');
734 END IF;
735 FND_MESSAGE.SET_TOKEN('OBJECT',p_object_name);
736 ELSIF p_operation = OE_PC_GLOBALS.DELETE_OP THEN
737 IF nvl(p_group_number,-1) = -1 THEN
738 FND_MESSAGE.SET_NAME('ONT','OE_PC_DELETE_NO_CONDN');
739 ELSE
740 FND_MESSAGE.SET_NAME('ONT','OE_PC_DELETE_VIOLATION');
741 END IF;
742 FND_MESSAGE.SET_TOKEN('OBJECT',p_object_name);
743 ELSIF p_operation = OE_PC_GLOBALS.CANCEL_OP THEN
744 IF nvl(p_group_number,-1) = -1 THEN
745 FND_MESSAGE.SET_NAME('ONT','OE_PC_CANCEL_NO_CONDN');
746 ELSE
747 FND_MESSAGE.SET_NAME('ONT','OE_PC_CANCEL_VIOLATION');
748 END IF;
749 FND_MESSAGE.SET_TOKEN('OBJECT',p_object_name);
750 ELSIF p_operation = OE_PC_GLOBALS.SPLIT_OP THEN
751 IF nvl(p_group_number,-1) = -1 THEN
752 FND_MESSAGE.SET_NAME('ONT','OE_PC_SPLIT_NO_CONDN');
753 ELSE
754 FND_MESSAGE.SET_NAME('ONT','OE_PC_SPLIT_VIOLATION');
755 END IF;
756 FND_MESSAGE.SET_TOKEN('OBJECT',p_object_name);
757 END IF;
758
759 END Set_Message;
760
761 ---------------------------------------
762 PROCEDURE Add_Constraint_Message
763 ( p_application_id IN NUMBER
764 ,p_database_object_name IN VARCHAR2
765 ,p_column_name IN VARCHAR2
766 ,p_operation IN VARCHAR2
767 ,p_constraint_id IN NUMBER
768 ,p_on_operation_action IN NUMBER
769 ,p_group_number IN NUMBER
770 )
771 -----------------------------------------------------
772 IS
773 -- Fix bug#1349549:
774 -- Increased l_attribute_name length to 240 as length
775 -- of column - NAME on AK_OBJECT_ATTRIBUTES_VL was increased
776 l_attribute_name VARCHAR2(240);
777 l_reason VARCHAR2(2000);
778 i NUMBER := 0;
779 l_entity_code VARCHAR2(30);
780 l_object_name VARCHAR2(30);
781 l_reason_length NUMBER;
782 l_operation VARCHAR2(30);
783 l_column_name VARCHAR2(30);
784 CURSOR CONDN IS
785 SELECT USER_MESSAGE msg
786 FROM OE_PC_CONDITIONS_VL
787 WHERE CONSTRAINT_ID = p_constraint_id
788 AND GROUP_NUMBER = p_group_number
789 AND ENABLED_FLAG = 'Y'; --for bug 9967228;
790 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
791 BEGIN
792
793 l_operation := p_operation;
794
795 -- NOTE: This procedure currently adds a message to the stack
796 -- ONLY IF operation IS NOT ALLOWED (i.e. on_operation_action = 0)
797 -- For other user actions, this procedure will have to be extended
798 -- For the initial release, the only other supported user action
799 -- is REQUIRE REASON (on_operation_action = 1) but this is also
800 -- limited to CANCEL and Ordered Quantity UPDATE operations. Messages
801 -- for this will be added in the cancellations code. (OEXUCANB.pls)
802
803 -- if operation is NOT allowed then set the constraint ID
804 -- on the message context
805 IF p_on_operation_action = 0 THEN
806
807 select o.entity_code, a.name
808 into l_entity_code, l_object_name
809 from oe_ak_objects_ext o, ak_objects_vl a
810 where o.database_object_name = p_database_object_name
811 and o.application_id = p_application_id
812 and a.database_object_name = o.database_object_name
813 and a.application_id = o.application_id;
814
815 IF l_operation = OE_PC_GLOBALS.CREATE_OP
816 OR l_operation = OE_PC_GLOBALS.UPDATE_OP
817 THEN
818
819 SELECT c.constrained_operation, c.column_name
820 INTO l_operation, l_column_name
821 FROM oe_pc_constraints c
822 WHERE c.constraint_id = p_constraint_id;
823
824 IF l_column_name IS NOT NULL THEN
825 -- Bug 2721841, attribute_label_long is the translated
826 -- column and not the name column.
827 SELECT a.attribute_label_long
828 INTO l_attribute_name
829 FROM ak_object_attributes_vl a
830 WHERE column_name = l_column_name
831 AND database_object_name = p_database_object_name
832 AND attribute_application_id = p_application_id;
833 END IF;
834
835 END IF;
836
837 OE_MSG_PUB.Update_Msg_Context
838 ( p_entity_code => l_entity_code
839 , p_constraint_id => p_constraint_id );
840
841 -- Set the attribute name, object name tokens.
842 -- And set the message on the message stack
843 -- appropriately based on the operation
844 -- This procedure does NOT set the reason token
845 Set_Message(p_operation => l_operation
846 ,p_group_number => p_group_number
847 ,p_attribute_name => l_attribute_name
848 ,p_object_name => l_object_name
849 );
850
851 -- Set the REASON token if a group of conditions (group_number exists)
852 -- resulted in this constraint violation
853 IF nvl(p_group_number,-1) <> -1 THEN
854
855 -- Fix for bug1162361:
856 -- Message length can be at the maximum 2000 chars
857 -- therefore, estimate the maximum length for the reason
858 -- token by reducing the length of the message string
859 -- without the reason token
860 l_reason_length := 2000 - length(FND_MESSAGE.GET);
861
862 -- Re-set the message , attribute name and object name tokens
863 -- on the stack as the previous call to FND_MESSAGE.GET would
864 -- have deleted the message from the stack.
865 Set_Message(p_operation => l_operation
866 ,p_group_number => p_group_number
867 ,p_attribute_name => l_attribute_name
868 ,p_object_name => l_object_name
869 );
870
871 -- construct the reason token based on the user message associated
872 -- with the constraining conditions
873 -- e.g. 'order booked
874 -- at least one line shipped '
875 FOR l_condn IN CONDN LOOP
876 IF i = 0 THEN
877 l_reason := substr(l_condn.msg,1,l_reason_length);
878 ELSE
879 l_reason := substr(l_reason||OE_PC_GLOBALS.NEWLINE||l_condn.msg,1,l_reason_length);
880 END IF;
881 i := i+1;
882 END LOOP;
883 FND_MESSAGE.SET_TOKEN('REASON',l_reason);
884
885 END IF; -- Add REASON token Only if group_number(set of conditions exists)
886
887 OE_MSG_PUB.ADD;
888
889 -- set constraint ID to null on the message context.
890 OE_MSG_PUB.Update_Msg_Context
891 ( p_entity_code => l_entity_code
892 , p_constraint_id => null );
893
894
895 END IF;
896
897 EXCEPTION
898 WHEN OTHERS THEN
899 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
900 THEN
901 OE_MSG_PUB.Add_Exc_Msg
902 ( G_PKG_NAME
903 , 'Add_Constraint_Message'
904 );
905 END IF;
906 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
907 END Add_Constraint_Message;
908
909 END Oe_PC_Constraints_Admin_Pub;