DBA Data[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;