[Home] [Help]
PACKAGE BODY: APPS.FND_OAM_DSCFG_INSTANCES_PKG
Source
1 PACKAGE BODY FND_OAM_DSCFG_INSTANCES_PKG as
2 /* $Header: AFOAMDSCINSTB.pls 120.1 2005/12/19 09:51 ilawler noship $ */
3
4 ----------------------------------------
5 -- Private Body Constants
6 ----------------------------------------
7 PKG_NAME CONSTANT VARCHAR2(20) := 'DSCFG_INSTANCES_PKG.';
8
9 TYPE b_config_instance_cache_type IS RECORD
10 (
11 initialized BOOLEAN := FALSE,
12 config_instance_id NUMBER := NULL,
13 target_dbname VARCHAR2(30) := NULL,
14 config_instance_type VARCHAR2(30) := NULL,
15 last_imported DATE := NULL,
16 import_duration NUMBER := NULL,
17 last_compiled DATE := NULL,
18 compile_duration NUMBER := NULL,
19 source_dbname VARCHAR2(30) := NULL,
20 clone_key VARCHAR2(1040) := NULL,
21 policyset_id NUMBER(15) := NULL
22 );
23 b_config_instance_info b_config_instance_cache_type;
24
25 ----------------------------------------
26 -- Public/Private Procedures/Functions
27 ----------------------------------------
28
29 -- Public
30 FUNCTION IS_INITIALIZED
31 RETURN BOOLEAN
32 IS
33 BEGIN
34 RETURN b_config_instance_info.initialized;
35 END;
36
37 -- Public
38 FUNCTION GET_CURRENT_ID
39 RETURN NUMBER
40 IS
41 BEGIN
42 IF NOT b_config_instance_info.initialized THEN
43 RAISE NO_DATA_FOUND;
44 END IF;
45
46 RETURN b_config_instance_info.config_instance_id;
47 END;
48
49 -- Public
50 FUNCTION GET_CURRENT_TYPE
51 RETURN VARCHAR2
52 IS
53 BEGIN
54 IF NOT b_config_instance_info.initialized THEN
55 RAISE NO_DATA_FOUND;
56 END IF;
57
58 RETURN b_config_instance_info.config_instance_type;
59 END;
60
61 -- Public
62 FUNCTION GET_CURRENT_SOURCE_DBNAME
63 RETURN VARCHAR2
64 IS
65 BEGIN
66 IF NOT b_config_instance_info.initialized THEN
67 RAISE NO_DATA_FOUND;
68 END IF;
69
70 RETURN b_config_instance_info.source_dbname;
71 END;
72
73 -- Public
74 FUNCTION GET_CURRENT_CLONE_KEY
75 RETURN VARCHAR2
76 IS
77 BEGIN
78 IF NOT b_config_instance_info.initialized THEN
79 RAISE NO_DATA_FOUND;
80 END IF;
81
82 RETURN b_config_instance_info.clone_key;
83 END;
84
85 -- Public
86 FUNCTION GET_CURRENT_POLICYSET_ID
87 RETURN NUMBER
88 IS
89 BEGIN
90 IF NOT b_config_instance_info.initialized THEN
91 RAISE NO_DATA_FOUND;
92 END IF;
93
94 RETURN b_config_instance_info.policyset_id;
95 END;
96
97 -- Public
98 PROCEDURE SET_LAST_IMPORTED(p_last_imported IN DATE)
99 IS
100 BEGIN
101 IF NOT b_config_instance_info.initialized THEN
102 RAISE NO_DATA_FOUND;
103 END IF;
104
105 UPDATE fnd_oam_dscfg_instances
106 SET last_imported = p_last_imported
107 WHERE config_instance_id = b_config_instance_info.config_instance_id;
108
109 b_config_instance_info.last_imported := p_last_imported;
110 END;
111
112 -- Public
113 FUNCTION GET_LAST_IMPORTED
114 RETURN DATE
115 IS
116 BEGIN
117 IF NOT b_config_instance_info.initialized THEN
118 RAISE NO_DATA_FOUND;
119 END IF;
120
121 RETURN b_config_instance_info.last_imported;
122 END;
123
124 -- Public
125 PROCEDURE SET_IMPORT_DURATION(p_import_duration IN NUMBER)
126 IS
127 BEGIN
128 IF NOT b_config_instance_info.initialized THEN
129 RAISE NO_DATA_FOUND;
130 END IF;
131
132 UPDATE fnd_oam_dscfg_instances
133 SET import_duration = p_import_duration
134 WHERE config_instance_id = b_config_instance_info.config_instance_id;
135
136 b_config_instance_info.import_duration := p_import_duration;
137 END;
138
139 -- Public
140 FUNCTION GET_IMPORT_DURATION
141 RETURN NUMBER
142 IS
143 BEGIN
144 IF NOT b_config_instance_info.initialized THEN
145 RAISE NO_DATA_FOUND;
146 END IF;
147
148 RETURN b_config_instance_info.import_duration;
149 END;
150
151
152 -- Public
153 PROCEDURE SET_LAST_COMPILED(p_last_compiled IN DATE)
154 IS
155 BEGIN
156 IF NOT b_config_instance_info.initialized THEN
157 RAISE NO_DATA_FOUND;
158 END IF;
159
160 UPDATE fnd_oam_dscfg_instances
161 SET last_compiled = p_last_compiled
162 WHERE config_instance_id = b_config_instance_info.config_instance_id;
163
164 b_config_instance_info.last_compiled := p_last_compiled;
165 END;
166
167 -- Public
168 FUNCTION GET_LAST_COMPILED
169 RETURN DATE
170 IS
171 BEGIN
172 IF NOT b_config_instance_info.initialized THEN
173 RAISE NO_DATA_FOUND;
174 END IF;
175
176 RETURN b_config_instance_info.last_compiled;
177 END;
178
179
180 -- Public
181 PROCEDURE SET_COMPILE_DURATION(p_compile_duration IN NUMBER)
182 IS
183 BEGIN
184 IF NOT b_config_instance_info.initialized THEN
185 RAISE NO_DATA_FOUND;
186 END IF;
187
188 UPDATE fnd_oam_dscfg_instances
189 SET compile_duration = p_compile_duration
190 WHERE config_instance_id = b_config_instance_info.config_instance_id;
191
192 b_config_instance_info.compile_duration := p_compile_duration;
193 END;
194
195 -- Public
196 FUNCTION GET_COMPILE_DURATION
197 RETURN NUMBER
198 IS
199 BEGIN
200 IF NOT b_config_instance_info.initialized THEN
201 RAISE NO_DATA_FOUND;
202 END IF;
203
204 RETURN b_config_instance_info.compile_duration;
205 END;
206
207 -- Public
208 FUNCTION CONFIG_INSTANCE_EXISTS(p_target_dbname IN VARCHAR2,
209 p_config_instance_type IN VARCHAR2,
210 p_clone_key IN VARCHAR2 DEFAULT NULL,
211 p_policyset_id IN NUMBER DEFAULT NULL,
212 x_config_instance_id OUT NOCOPY NUMBER)
213 RETURN BOOLEAN
214 IS
215 l_ctxt VARCHAR2(60) := PKG_NAME||'CONFIG_INSTANCE_EXISTS';
216
217 l_config_instance_id NUMBER;
218 l_found BOOLEAN := FALSE;
219 BEGIN
220 fnd_oam_debug.log(2, l_ctxt, 'ENTER');
221
222 --perform different lookup depending on the config_instance_type
223 CASE p_config_instance_type
224 WHEN FND_OAM_DSCFG_API_PKG.G_CONFTYPE_CLONING THEN
225 SELECT config_instance_id
226 INTO l_config_instance_id
227 FROM fnd_oam_dscfg_instances
228 WHERE config_instance_type = p_config_instance_type
229 AND target_dbname = p_target_dbname
230 AND clone_key = p_clone_key
231 AND ((policyset_id IS NULL) OR (policyset_id = p_policyset_id));
232 --if it wasn't found, an exception was thrown
233 x_config_instance_id := l_config_instance_id;
234 l_found := TRUE;
235 END CASE;
236
237 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
238 RETURN l_found;
239 EXCEPTION
240 WHEN NO_DATA_FOUND THEN
241 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
242 RETURN FALSE;
243 WHEN TOO_MANY_ROWS THEN
244 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
245 RETURN FALSE;
246 WHEN OTHERS THEN
247 fnd_oam_debug.log(6, l_ctxt, 'Unexpected Error: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))');
248 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
249 RETURN FALSE;
250 END;
251
252 -- Private
253 -- Helper to CREATE/USE_CONFIG_INSTANCE to initialize the package state
254 PROCEDURE INIT_STATE(p_config_instance_id IN NUMBER,
255 p_target_dbname IN VARCHAR2,
256 p_config_instance_type IN VARCHAR2,
257 p_last_imported IN DATE DEFAULT NULL,
258 p_import_duration IN NUMBER DEFAULT NULL,
259 p_last_compiled IN DATE DEFAULT NULL,
260 p_compile_duration IN NUMBER DEFAULT NULL,
261 p_source_dbname IN VARCHAR2 DEFAULT NULL,
262 p_clone_key IN VARCHAR2 DEFAULT NULL,
263 p_policyset_id IN NUMBER DEFAULT NULL)
264 IS
265 BEGIN
266 b_config_instance_info.config_instance_id := p_config_instance_id;
267 b_config_instance_info.target_dbname := p_target_dbname;
268 b_config_instance_info.config_instance_type := p_config_instance_type;
269 b_config_instance_info.last_imported := p_last_imported;
270 b_config_instance_info.import_duration := p_import_duration;
271 b_config_instance_info.last_compiled := p_last_compiled;
272 b_config_instance_info.compile_duration := p_compile_duration;
273 b_config_instance_info.source_dbname := p_source_dbname;
274 b_config_instance_info.clone_key := p_clone_key;
275 b_config_instance_info.policyset_id := p_policyset_id;
276 b_config_instance_info.initialized := TRUE;
277 END;
278
279 -- Public
280 PROCEDURE ADD_CONFIG_INSTANCE(p_target_dbname IN VARCHAR2,
281 p_config_instance_type IN VARCHAR2,
282 p_name IN VARCHAR2,
283 p_description IN VARCHAR2,
284 p_language IN VARCHAR2,
285 p_source_dbname IN VARCHAR2,
286 p_clone_key IN VARCHAR2,
287 p_policyset_id IN NUMBER,
288 x_config_instance_id OUT NOCOPY NUMBER)
289 IS
290 l_ctxt VARCHAR2(60) := PKG_NAME||'ADD_CONFIG_INSTANCE';
291
292 l_config_instance_id NUMBER;
293 BEGIN
294 fnd_oam_debug.log(2, l_ctxt, 'ENTER');
295
296 --first check if we're allowed to make config changes
297 IF NOT FND_OAM_DSCFG_API_PKG.ARE_CONFIG_CHANGES_ALLOWED THEN
298 --raise a program error
299 fnd_oam_debug.log(6, l_ctxt, 'Scrambling Configuration changes currently not allowed.');
300 RAISE PROGRAM_ERROR;
301 END IF;
302
303 --do the insert
304 INSERT INTO fnd_oam_dscfg_instances (CONFIG_INSTANCE_ID,
305 TARGET_DBNAME,
306 CONFIG_INSTANCE_TYPE,
307 NAME,
308 DESCRIPTION,
309 LANGUAGE,
310 SOURCE_DBNAME,
311 CLONE_KEY,
312 POLICYSET_ID,
313 CREATED_BY,
314 CREATION_DATE,
315 LAST_UPDATED_BY,
316 LAST_UPDATE_DATE,
317 LAST_UPDATE_LOGIN)
318 VALUES (FND_OAM_DSCFG_INSTANCES_S.NEXTVAL,
319 p_target_dbname,
320 p_config_instance_type,
321 p_name,
322 p_description,
323 NVL(p_language, USERENV('LANG')),
324 p_source_dbname,
325 p_clone_key,
326 p_policyset_id,
327 FND_GLOBAL.USER_ID,
328 SYSDATE,
329 FND_GLOBAL.USER_ID,
330 SYSDATE,
331 FND_GLOBAL.USER_ID)
332 RETURNING CONFIG_INSTANCE_ID INTO l_config_instance_id;
333
334 --success, init the state and commit
335 INIT_STATE(p_config_instance_id => l_config_instance_id,
336 p_target_dbname => p_target_dbname,
337 p_config_instance_type => p_config_instance_type,
338 p_source_dbname => p_source_dbname,
339 p_clone_key => p_clone_key,
340 p_policyset_id => p_policyset_id);
341 x_config_instance_id := l_config_instance_id;
342
343 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
344 EXCEPTION
345 WHEN PROGRAM_ERROR THEN
346 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
347 RAISE;
348 WHEN OTHERS THEN
349 fnd_oam_debug.log(6, l_ctxt, 'Unexpected Error: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))');
350 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
351 RAISE;
352 END;
353
354 -- Public
355 PROCEDURE SET_CURRENT_CONFIG_INSTANCE(p_config_instance_id IN NUMBER)
356 IS
357 l_ctxt VARCHAR2(60) := PKG_NAME||'SET_CURRENT_CONFIG_INSTANCE';
358
359 l_target_dbname VARCHAR2(30);
360 l_config_instance_type VARCHAR2(30);
361 l_last_imported DATE;
362 l_import_duration NUMBER;
363 l_last_compiled DATE;
364 l_compile_duration NUMBER;
365 l_source_dbname VARCHAR2(30);
366 l_clone_key VARCHAR2(1040);
367 l_policyset_id NUMBER;
368 BEGIN
369 fnd_oam_debug.log(2, l_ctxt, 'ENTER');
370
371 --first check if we're allowed to make config changes
372 IF NOT FND_OAM_DSCFG_API_PKG.ARE_CONFIG_CHANGES_ALLOWED THEN
373 --raise a program error
374 fnd_oam_debug.log(6, l_ctxt, 'Scrambling Configuration changes currently not allowed.');
375 RAISE PROGRAM_ERROR;
376 END IF;
377
378 --query out the instance attributes
379 SELECT target_dbname, config_instance_type, last_imported, import_duration, last_compiled, compile_duration, source_dbname, clone_key, policyset_id
380 INTO l_target_dbname, l_config_instance_type, l_last_imported, l_import_duration, l_last_compiled, l_compile_duration, l_source_dbname, l_clone_key, l_policyset_id
381 FROM fnd_oam_dscfg_instances
382 WHERE config_instance_id = p_config_instance_id;
383
384 --set the state
385 INIT_STATE(p_config_instance_id => p_config_instance_id,
386 p_target_dbname => l_target_dbname,
387 p_config_instance_type => l_config_instance_type,
388 p_last_imported => l_last_imported,
389 p_import_duration => l_import_duration,
390 p_last_compiled => l_last_compiled,
391 p_compile_duration => l_compile_duration,
392 p_source_dbname => l_source_dbname,
393 p_clone_key => l_clone_key,
394 p_policyset_id => l_policyset_id);
395
396 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
397 EXCEPTION
398 WHEN PROGRAM_ERROR THEN
399 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
400 RAISE;
401 WHEN NO_DATA_FOUND THEN
402 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
403 RAISE;
404 WHEN OTHERS THEN
405 fnd_oam_debug.log(6, l_ctxt, 'Unexpected Error: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))');
406 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
407 RAISE;
408 END;
409
410 -- Public
411 FUNCTION DELETE_CONFIG_INSTANCE(p_config_instance_id IN NUMBER,
412 p_recurse_config IN VARCHAR2 DEFAULT NULL,
413 p_recurse_engine IN VARCHAR2 DEFAULT NULL)
414 RETURN BOOLEAN
415 IS
416 l_ctxt VARCHAR2(60) := PKG_NAME||'DELETE_CONFIG_INSTANCE';
417
418 l_run_ids DBMS_SQL.NUMBER_TABLE;
419 l_object_ids DBMS_SQL.NUMBER_TABLE;
420
421 k NUMBER;
422 l_failed BOOLEAN := FALSE;
423 BEGIN
424 fnd_oam_debug.log(2, l_ctxt, 'ENTER');
425
426 --first nuke the dscram runs
427 IF p_recurse_engine IS NOT NULL AND p_recurse_engine = FND_API.G_TRUE THEN
428 SELECT run_id
429 BULK COLLECT INTO l_run_ids
430 FROM fnd_oam_dscram_runs_b
431 WHERE config_instance_id = p_config_instance_id;
432
433 fnd_oam_debug.log(1, l_ctxt, 'Deleting '||l_run_ids.COUNT||' engine runs...');
434 k := l_run_ids.FIRST;
435 WHILE k IS NOT NULL LOOP
436 IF NOT FND_OAM_DSCRAM_UTILS_PKG.DELETE_RUN(l_run_ids(k)) THEN
437 l_failed := TRUE;
438 EXIT;
439 END IF;
440 k := l_run_ids.NEXT(k);
441 END LOOP;
442
443 --see if we failed, if so don't delete the instance
444 IF l_failed THEN
445 RETURN FALSE;
446 END IF;
447 END IF;
448
449 --next nuke the objects
450 IF p_recurse_config IS NOT NULL AND p_recurse_config = FND_API.G_TRUE THEN
451 SELECT object_id
452 BULK COLLECT INTO l_object_ids
453 FROM fnd_oam_dscfg_objects
454 WHERE config_instance_id = p_config_instance_id;
455
456 fnd_oam_debug.log(1, l_ctxt, 'Deleting '||l_object_ids.COUNT||' configuration objects...');
457 k := l_object_ids.FIRST;
458 WHILE k IS NOT NULL LOOP
459 IF NOT FND_OAM_DSCFG_OBJECTS_PKG.DELETE_OBJECT(l_object_ids(k),
460 p_recurse_config) THEN
461 l_failed := TRUE;
462 EXIT;
463 END IF;
464 k := l_object_ids.NEXT(k);
465 END LOOP;
466
467 --see if we failed, if so don't delete the instance
468 IF l_failed THEN
469 RETURN FALSE;
470 END IF;
471 END IF;
472
473 --now delete the config instance
474 fnd_oam_debug.log(1, l_ctxt, 'Deleting the instance row');
475 DELETE FROM fnd_oam_dscfg_instances
476 WHERE config_instance_id = p_config_instance_id;
477
478 --success
479 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
480 RETURN TRUE;
481 EXCEPTION
482 WHEN OTHERS THEN
483 fnd_oam_debug.log(6, l_ctxt, 'Unexpected Error: (Code('||SQLCODE||'), Message("'||SQLERRM||'"))');
484 fnd_oam_debug.log(2, l_ctxt, 'EXIT');
485 RETURN FALSE;
486 END;
487
488 END FND_OAM_DSCFG_INSTANCES_PKG;