DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_PB_SYNC

Source


1 PACKAGE BODY cz_pb_sync AS
2 /*  $Header: czpbsynb.pls 120.4.12010000.3 2008/10/29 19:50:29 lamrute ship $  */
3 
4 --------package variable declaration
5 TYPE  t_ref IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
6 TYPE  t_name IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
7 
8 m_msg_tbl      cz_pb_sync_util.message_list;
9 m_err_message  VARCHAR2(2000);
10 
11 SRC_SERVER_FLAG   cz_servers.source_server_flag%TYPE := '1';
12 
13 OBJECT_TYPE_PROJECT  CONSTANT  cz_model_publications.object_type%TYPE := 'PRJ';
14 OBJECT_TYPE_UITEMPL  CONSTANT  cz_model_publications.object_type%TYPE := 'UIT';
15 GLOBAL_UI_DEF_PUB    CONSTANT  NUMBER := 1;
16 GLOBAL_UI_DEF_SRC    CONSTANT  NUMBER := 0;
17 
18 ---------------------------------------
19 ----procedure that logs err messages to m_msg_tbl
20 
21 PROCEDURE error_msg_populate(p_msg 		VARCHAR2,
22 				     p_caller	VARCHAR2,
23 				     p_code 	NUMBER
24 				    )
25 AS
26 record_count	PLS_INTEGER := 0;
27 BEGIN
28 	record_count := m_msg_tbl.COUNT + 1;
29 	m_msg_tbl(record_count).msg_text := LTRIM(RTRIM(substr(p_msg,1,2000)));
30 	m_msg_tbl(record_count).called_proc := p_caller;
31 	m_msg_tbl(record_count).SQL_CODE := p_code;
32 EXCEPTION
33 WHEN OTHERS THEN
34 	RAISE;
35 END error_msg_populate;
36 
37 ------------------------------------------------------
38 -----verifies source server entry on the target instance
39 FUNCTION verify_src_server_entry( p_link_name     cz_servers.fndnam_link_name%TYPE
40 					   ,p_source_server cz_servers.local_name%TYPE)
41 RETURN BOOLEAN
42 IS
43 
44 gl_ref_cursor	    REF_CURSOR;
45 l_source_server_flag  cz_servers.source_server_flag%TYPE;
46 
47 BEGIN
48 	OPEN gl_ref_cursor FOR 'SELECT source_server_flag
49 				   	FROM   cz_servers'||p_link_name||'  t
50 				   	WHERE  UPPER(t.local_name) = UPPER(:1)' USING p_source_server;
51 	LOOP
52 		FETCH gl_ref_cursor INTO l_source_server_flag;
53 		EXIT WHEN gl_ref_cursor%NOTFOUND;
54 	END LOOP;
55 	CLOSE gl_ref_cursor ;
56 
57 	IF ( (l_source_server_flag IS NULL)
58 		OR (l_source_server_flag <> SRC_SERVER_FLAG) ) THEN
59 		RETURN FALSE;
60 	ELSE
61 		RETURN TRUE;
62 	END IF;
63 EXCEPTION
64 WHEN OTHERS THEN
65 	CLOSE gl_ref_cursor;
66 	RETURN FALSE;
67 END verify_src_server_entry;
68 
69 ---------------------------------------------------------
70 -----procedure that verifies that the clone proc is executed on the source db
71 FUNCTION verify_source_instance(p_target_instance IN VARCHAR2)
72 RETURN BOOLEAN
73 IS
74 
75 v_flag  		 BOOLEAN := TRUE;
76 x_src_verification NUMBER  := 0;
77 gl_ref_cursor	 REF_CURSOR;
78 
79 l_hostname		 cz_servers.hostname%TYPE;
80 l_instance_name    cz_servers.instance_name%TYPE;
81 l_src_server_flg   cz_servers.source_server_flag%TYPE;
82 l_src_count		 NUMBER;
83 
84 v_target_server_id	NUMBER := 0;
85 v_link_name 		cz_servers.fndnam_link_name%TYPE;
86 
87 CURSOR src_server_info IS SELECT hostname, instance_name, source_server_flag
88 				  FROM   cz_servers
89 				  WHERE  UPPER(local_name) = 'LOCAL';
90 
91 BEGIN
92       --------compare instance information
93 	OPEN src_server_info;
94 	LOOP
95 		FETCH src_server_info INTO l_hostname,l_instance_name,l_src_server_flg;
96 		EXIT WHEN src_server_info%NOTFOUND;
97 	END LOOP;
98 	CLOSE src_server_info;
99 
100 	SELECT COUNT(*)
101       INTO   l_src_count
102       FROM   cz_servers
103 	WHERE  cz_servers.source_server_flag = SRC_SERVER_FLAG;
104 
105 	IF (l_src_count <> 0) THEN
106 		m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NOT_SRC_INSTANCE', 'INSTANCE', l_instance_name);
107 		error_msg_populate(m_err_message ,'CZ_PB_SYNC.VERIFYSRCINST',21061);
108 		RETURN FALSE;
109 	END IF;
110 
111 	SELECT COUNT(*)
112 	INTO   x_src_verification
113 	FROM   v$instance
114 	WHERE  UPPER(host_name) = UPPER(l_hostname)
115 	AND    UPPER(instance_name) = UPPER(l_instance_name);
116 
117 	IF (x_src_verification = 0) THEN
118 		m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NOT_SRC_INSTANCE','SRCINSTANCE',l_instance_name);
119 		error_msg_populate(m_err_message ,'CZ_PB_SYNC.VERIFYSRCINST',21061);
120 		RETURN FALSE;
121 	END IF;
122 
123 	v_target_server_id := cz_pb_sync_util.get_target_instance_id(p_target_instance);
124 	v_link_name := cz_pb_sync_util.retrieve_link_name(v_target_server_id);
125 	IF (NOT verify_src_server_entry(v_link_name,l_instance_name) ) THEN
126 		m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NOT_TGT_INSTANCE',
127 								 'TGTINSTANCE', p_target_instance,
128 								 'SRCINSTANCE', l_instance_name);
129 		error_msg_populate(m_err_message ,'CZ_PB_SYNC.VERIFYSRCENTRY',21061);
130 		RETURN FALSE;
131 	END IF;
132 
133 	RETURN v_flag;
134 EXCEPTION
135 WHEN OTHERS THEN
136 	RETURN FALSE;
137 END verify_source_instance;
138 
139 -------------------------------------------------------------
140 -----function that checks if the target instance is a clone
141 FUNCTION check_target_instance(p_link_name IN cz_servers.fndnam_link_name%TYPE)
142 RETURN BOOLEAN
143 IS
144 
145 gl_ref_cursor	REF_CURSOR;
146 l_instance_name	cz_servers.instance_name%TYPE;
147 l_host_name		cz_servers.hostname%TYPE;
148 v_instance_name	cz_servers.instance_name%TYPE;
149 v_host_name		cz_servers.hostname%TYPE;
150 v_notes		VARCHAR2(2000);
151 v_return_flg	BOOLEAN := FALSE;
152 
153 BEGIN
154 	OPEN gl_ref_cursor FOR 'SELECT instance_name,host_name
155 					FROM   v$instance'||p_link_name;
156 	LOOP
157 		FETCH gl_ref_cursor INTO l_instance_name,l_host_name;
158 		EXIT WHEN gl_ref_cursor%NOTFOUND;
159 	END LOOP;
160 	CLOSE gl_ref_cursor;
161 
162 	OPEN gl_ref_cursor FOR 'SELECT instance_name,hostname,notes
163 					FROM   cz_servers'||p_link_name||'  t
164 					WHERE  UPPER(local_name) = ''LOCAL'' ';
165 	LOOP
166 		FETCH gl_ref_cursor INTO v_instance_name,v_host_name,v_notes;
167 		EXIT WHEN gl_ref_cursor%NOTFOUND;
168 	END LOOP;
169 	CLOSE gl_ref_cursor;
170 
171 	IF ( (UPPER(l_instance_name) <> UPPER(v_instance_name))
172 		OR (UPPER(l_host_name) <> UPPER(v_host_name)) ) THEN
173 		v_return_flg := FALSE;
174 	ELSE
175 		IF (v_notes IS NULL) THEN
176 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NOT_A_CLONE', 'INSTANCENAME',v_instance_name);
177 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.GETLINKNAME',21011);
178 			v_return_flg := TRUE;
179 		ELSE
180 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_ALREADY_SYNCED','INSTANCENAME',v_instance_name, 'SYNCDATE',v_notes);
181 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.GETLINKNAME',21011);
182 			v_return_flg := TRUE;
183 		END IF;
184 	END IF;
185 	RETURN v_return_flg;
186 EXCEPTION
187 WHEN OTHERS THEN
188 	CLOSE gl_ref_cursor;
189 	RETURN TRUE;
190 END check_target_instance;
191 
192 -------------------------------------------------
193 -----function that returns the server id of the cloned instance
194 FUNCTION get_tgt_server_id(p_link_name cz_servers.fndnam_link_name%TYPE)
195 RETURN NUMBER
196 IS
197 
198 gl_ref_cursor	REF_CURSOR;
199 v_tgt_server_id	cz_servers.server_local_id%TYPE := 0;
200 
201 BEGIN
202 	OPEN gl_ref_cursor FOR 'SELECT distinct server_id
203 				   FROM   cz_model_publications'||p_link_name||'  t
204 				   WHERE  t.source_target_flag = ''T''
205 				   AND    t.deleted_flag = ''0'' ';
206 	LOOP
207 		FETCH gl_ref_cursor INTO v_tgt_server_id;
208 		EXIT WHEN gl_ref_cursor%NOTFOUND;
209 	END LOOP;
210 	CLOSE gl_ref_cursor ;
211 	RETURN v_tgt_server_id;
212 EXCEPTION
213 WHEN OTHERS THEN
214 	CLOSE gl_ref_cursor;
215 	RETURN v_tgt_server_id;
216 END get_tgt_server_id;
217 
218 ---------------------------------------------------
219 ------function that verifies that the source and target server ids match
220 FUNCTION verify_src_tgt_instances(p_link_name IN cz_servers.fndnam_link_name%TYPE)
221 RETURN BOOLEAN
222 IS
223 
224 v_tgt_pb_server_id  	cz_servers.server_local_id%TYPE;
225 v_validate_flag		BOOLEAN := TRUE;
226 v_src_server_count  	NUMBER := 0;
227 
228 NO_TGT_ID			EXCEPTION;
229 
230 BEGIN
231 	v_src_server_count  := 0;
232 	v_tgt_pb_server_id  := get_tgt_server_id(p_link_name);
233 	IF (v_tgt_pb_server_id  = 0) THEN
234 		RAISE NO_TGT_ID;
235 	END IF;
236 
237 	----compare source and target publications
238 	----check not required
239 	IF (v_tgt_pb_server_id <> 0) THEN
240 		SELECT 1
241 		INTO   v_src_server_count
242 		FROM   cz_model_publications
243 		WHERE  cz_model_publications.server_id = v_tgt_pb_server_id
244 		AND    cz_model_publications.deleted_flag = '0'
245 		AND	 ROWNUM < 2;
246 	END IF;
247 
248 	IF (v_src_server_count <> 1) THEN
249 		v_validate_flag := FALSE;
250 	END IF;
251 
252  	RETURN v_validate_flag ;
253 EXCEPTION
254 WHEN NO_TGT_ID THEN
255 	v_validate_flag := FALSE;
256 	RETURN v_validate_flag ;
257 WHEN OTHERS THEN
258 	v_validate_flag := FALSE;
259 	RETURN v_validate_flag ;
260 END verify_src_tgt_instances;
261 
262 -------------------------------------------------------
263 ------function that verifies if model ids on source and target instances are the same
264 FUNCTION verify_src_tgt_models(p_link_name IN cz_servers.fndnam_link_name%TYPE)
265 RETURN BOOLEAN
266 IS
267 
268 gl_ref_cursor	     REF_CURSOR;
269 v_validate_model_count NUMBER := 0;
270 v_validate_flag        BOOLEAN := TRUE;
271 
272 BEGIN
273 	----compare model persistent ids on of source and target models
274 	OPEN gl_ref_cursor FOR 'SELECT COUNT(*) FROM cz_model_publications'||p_link_name||'  t
275 					WHERE t.deleted_flag = ''0''
276 					AND   t.model_persistent_id IN (SELECT model_persistent_id
277 										  FROM   cz_model_publications x
278 										  WHERE  x.deleted_flag = ''0''
279 										  AND    x.source_target_flag = ''S'')';
280 	LOOP
281 		FETCH gl_ref_cursor INTO v_validate_model_count;
282 		EXIT WHEN gl_ref_cursor%NOTFOUND;
283 	END LOOP;
284 	CLOSE gl_ref_cursor;
285 
286 	IF (v_validate_model_count = 0) THEN
287 		v_validate_flag := FALSE;
288 	END IF;
289 	RETURN v_validate_flag;
290 EXCEPTION
291 WHEN OTHERS THEN
292 	CLOSE gl_ref_cursor;
293 	v_validate_flag := FALSE;
294 	RETURN v_validate_flag;
295 END verify_src_tgt_models;
296 
297 ---------------------------------------------------
298 ---------function that validates publication ids on the tgt instance
299 FUNCTION verify_src_tgt_pb_ids(p_link_name IN cz_servers.fndnam_link_name%TYPE)
300 RETURN BOOLEAN
301 IS
302 
303 gl_ref_cursor	REF_CURSOR;
304 v_validate_flg    BOOLEAN := TRUE;
305 v_rem_pb_count    NUMBER  := 0;
306 
307 BEGIN
308 
309 	 ----verify that the remote publication ids on the source exist on the target
310 	OPEN gl_ref_cursor FOR 'SELECT COUNT(*) FROM cz_model_publications'||p_link_name||'  t
311 					WHERE t.deleted_flag  = ''0''
312 					AND   t.export_status = ''OK''
313 					AND   t.source_target_flag = ''T''
314 					AND   t.publication_id IN (SELECT remote_publication_id
315 									   FROM   cz_model_publications x
316 									   WHERE  x.export_status = ''OK''
317 									    AND   x.deleted_flag = ''0'')';
318 	LOOP
319 		FETCH gl_ref_cursor INTO v_rem_pb_count;
320 		EXIT WHEN gl_ref_cursor%NOTFOUND;
321 	END LOOP;
322 	CLOSE gl_ref_cursor;
323 
324 	IF (v_rem_pb_count = 0) THEN
325 		v_validate_flg := FALSE;
326 	END IF;
327 	RETURN v_validate_flg;
328 EXCEPTION
329 WHEN OTHERS THEN
330 	CLOSE gl_ref_cursor;
331 	v_validate_flg := FALSE;
332 	RETURN v_validate_flg;
333 END verify_src_tgt_pb_ids;
334 
335 ----------------------------------------------------
336 -----procedure that checks if the target instance has to be synchronized
337 -----x_sync_flag : TRUE if it has to be synced
338 FUNCTION has_to_be_synced(p_tgt_server_id IN cz_servers.server_local_id%TYPE)
339 RETURN BOOLEAN
340 IS
341 
342 v_link_name 	cz_servers.fndnam_link_name%TYPE;
343 v_sync_flag 	BOOLEAN := TRUE;
344 
345 BEGIN
346 	FOR I IN 1..1
347 	LOOP
348 		------get db link name for tgt instance
349 		v_link_name := cz_pb_sync_util.retrieve_link_name(p_tgt_server_id);
350 		IF ( NOT cz_pb_sync_util.check_db_link(v_link_name) ) THEN
351 			v_sync_flag := FALSE;
352 			EXIT;
353 		END IF;
354 
355 		------verify that server ids on the source and target are the same
356 		v_sync_flag  := verify_src_tgt_instances(v_link_name);
357 		IF (NOT v_sync_flag) THEN
358 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NO_TGT_ID_FOUND', 'INSTANCENAME',v_link_name);
359 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.NOTGTIDFOUND',21011);
360 			EXIT;
361 		END IF;
362 
363 		----verify persistent model ids on source and target instances
364 		v_sync_flag  := verify_src_tgt_models(v_link_name);
365 		IF (NOT v_sync_flag) THEN
366 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_MODELS_ERR');
367 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.SRCTGTMODELS',21009);
368 			v_sync_flag := FALSE;
369 			EXIT;
370 		END IF;
371 
372 		----verify remote publication ids
373 		v_sync_flag  := verify_src_tgt_pb_ids(v_link_name);
374 		IF (NOT v_sync_flag) THEN
375 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_REM_PB_ID_ERR', 'TGTINSTANCE',v_link_name );
376 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.VERIFYSRCTGTPBIDS',21010);
377 			v_sync_flag := FALSE;
378 			EXIT;
379 		END IF;
380 	END LOOP;
381 	RETURN v_sync_flag;
382 EXCEPTION
383 WHEN OTHERS THEN
384 	v_sync_flag := FALSE;
385 	RETURN v_sync_flag;
386 END has_to_be_synced;
387 
388 ----------------------------------------------------
389 ---procedure that deletes the publication (on the source instance) record pointing to the cloned database
390 PROCEDURE clear_source_pb_record(p_publication_id IN cz_model_publications.publication_id%TYPE)
391 IS
392 
393 BEGIN
394 	UPDATE cz_model_publications
395 	SET deleted_flag = '1'
396       WHERE publication_id = p_publication_id;
397 
398 	/* DELETE FROM cz_model_publications
399 	WHERE publication_id = p_publication_id; */
400 EXCEPTION
401 WHEN OTHERS THEN
402 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_DEL_PB_REC_ERR', 'PUBID', p_publication_id, 'SQLERRM', SQLERRM);
403 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.CLRSRCPBRECORD',SQLCODE);
404 	RAISE;
405 END clear_source_pb_record;
406 
407 ----------------------------------------------------
408 ---procedure that deletes data from cz_pb_client_apps for a given publication
409 PROCEDURE clear_pb_clients(p_publication_id IN cz_model_publications.publication_id%TYPE)
410 IS
411 
412 BEGIN
413 	DELETE FROM cz_pb_client_apps
414 	WHERE publication_id = p_publication_id;
415 EXCEPTION
416 WHEN OTHERS THEN
417 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_DEL_PB_CLIENT_ERR', 'PUBID',p_publication_id, 'SQLERRM', SQLERRM);
418 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.CLRPBCLIENTS',SQLCODE);
419 	RAISE;
420 END clear_pb_clients;
421 
422 -----------------------------------------------------
423 ---procedure that deletes data from cz_pb_languages for a given publication
424 PROCEDURE clear_pb_lang(p_publication_id IN cz_model_publications.publication_id%TYPE)
425 IS
426 
427 BEGIN
428 	DELETE FROM cz_pb_languages
429 	WHERE publication_id = p_publication_id;
430 EXCEPTION
431 WHEN OTHERS THEN
432 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_DEL_LANG_ERR','PUBID',p_publication_id, 'SQLERRM', SQLERRM);
433 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.CLRPBCLIENTS',SQLCODE);
434 	RAISE;
438 ---procedure that deletes data from cz_pb_client_apps for a given publication
435 END clear_pb_lang;
436 
437 -----------------------------------------------------
439 PROCEDURE clear_pb_usages(p_publication_id IN cz_model_publications.publication_id%TYPE)
440 IS
441 
442 BEGIN
443 	DELETE FROM cz_publication_usages
444 	WHERE publication_id = p_publication_id;
445 EXCEPTION
446 WHEN OTHERS THEN
447 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_DEL_PB_USAGE_ERR','PUBID',p_publication_id, 'SQLERRM', SQLERRM);
448 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.CLRPBUSAGES',SQLCODE);
449 	RAISE;
450 END clear_pb_usages;
451 
452 --------------------------------------------------------
453 ----procedure that truncates publication history
454 PROCEDURE clear_pb_exports
455 IS
456 
457 BEGIN
458 	delete from cz_pb_model_exports;
459 EXCEPTION
460 WHEN OTHERS THEN
461 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_DEL_PB_EXPORTS_ERR', 'SQLERRM', SQLERRM);
462 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.CLRPBEXPORTS',SQLCODE);
463 	RAISE;
464 END clear_pb_exports;
465 
466 ---------------------------------------------------------
467 -----procedure that updates the server_id of the target publication record
468 PROCEDURE update_tgt_server_id(p_target_server_id IN cz_servers.server_local_id%TYPE,
469 				       p_link_name In cz_servers.fndnam_link_name%TYPE)
470 IS
471 
472 BEGIN
473 	EXECUTE IMMEDIATE
474 	'UPDATE cz_model_publications'||p_link_name||'  t SET t.server_id = '||p_target_server_id||' WHERE t.deleted_flag = ''0'' ';
475 EXCEPTION
476 WHEN OTHERS THEN
477 	RAISE;
478 END update_tgt_server_id;
479 
480 ------------------------------------------------------
481 --jhanda
482 -- procedure that returns the product_id and organisation_id in the target corresponding
483 -- to the product_id and organisation_id in the source for a given source publication
484 PROCEDURE get_local_ids(p_publication_id IN cz_model_publications.publication_id%TYPE,
485 			p_sync_tgt_link_name IN cz_servers.fndnam_link_name%TYPE,
486 			p_import_link_name IN cz_servers.fndnam_link_name%TYPE,
487 			p_item_id IN OUT NOCOPY cz_item_masters.item_id%TYPE,
488 			p_org_id IN OUT NOCOPY cz_model_publications.organization_id%TYPE,
489 			p_product_key IN OUT NOCOPY cz_model_publications.product_key%TYPE
490 			)
491 IS
492 l_concatenated_segments MTL_SYSTEM_ITEMS_VL.concatenated_segments%TYPE;
493 l_remote_item_cursor ref_cursor;
494 c_local_item_id ref_cursor;
495 l_org_id cz_model_publications.organization_id%TYPE;
496 
497 BEGIN
498 
499 
500   IF  p_product_key IS NULL THEN
501      p_item_id:=NULL;
502      p_org_id:=NULL;
503      RETURN;
504   ELSIF instr(p_product_key,   ':')=0 THEN -- product key not in BOM Format then exit
505      p_item_id:=NULL;
506      p_org_id:=NULL;
507      RETURN;
508   END IF;
509 
510   l_org_id:=p_org_id;
511 
512   BEGIN
513 	-- Product key is propogated for Non BOM parent
514 	  IF p_org_id IS NULL
515 	   AND p_product_key IS NOT NULL THEN
516 	    p_org_id := SUBSTR(p_product_key,   1,   instr(p_product_key,   ':') -1);
517 	  END IF;
518 
519 	-- Extract item id
520 
521 	  IF p_item_id IS NULL
522 	   AND p_product_key IS NOT NULL THEN
523 		  p_item_id:=SUBSTR(p_product_key,  instr(p_product_key,   ':') +1);
524 	  END IF;
525 
526 	  EXCEPTION WHEN OTHERS THEN
527 	--   This will happen if product key has non numeric components
528 	     p_item_id:=NULL;
529 	     p_org_id:=NULL;
530 	     RETURN;
531   END;
532 
533 
534 -- Transform Organization ID
535   BEGIN
536   EXECUTE IMMEDIATE 'SELECT organization_id FROM org_organization_definitions'||p_import_link_name||
537                       ' WHERE UPPER(organization_name) = ' ||
538                       '  (SELECT UPPER(organization_name) FROM org_organization_definitions' || p_sync_tgt_link_name ||
539                       '    WHERE organization_id = :1)'
540   INTO p_org_id USING l_org_id;
541 
542   EXCEPTION WHEN NO_DATA_FOUND THEN
543 	m_err_message := 'Unable to find organization definition in import source';
544 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.GETLOCALIDS',SQLCODE);
545 	RAISE;
546   END;
547 
548 -- Transform Item ID
549 
550 
551   OPEN l_remote_item_cursor FOR ' SELECT  concatenated_segments  FROM  MTL_SYSTEM_ITEMS_VL'
552                          || p_sync_tgt_link_name || '  t ' || ' WHERE t.inventory_item_id = ' || p_item_id
553 			 || ' AND organization_id = '||l_org_id;
554   LOOP
555     FETCH l_remote_item_cursor
556     INTO l_concatenated_segments;
557     EXIT
558   WHEN l_remote_item_cursor%NOTFOUND;
559   END LOOP;
560 
561   CLOSE l_remote_item_cursor;
562 
563 
564   -- here if p_import_link_name is NULL then we are effectively querying the local BOM data
565 
566   BEGIN
567   OPEN c_local_item_id FOR ' SELECT inventory_item_id FROM MTL_SYSTEM_ITEMS_VL'
568 			   || p_import_link_name||' WHERE concatenated_segments = '''||l_concatenated_segments||''' AND organization_id = '||p_org_id;
569   FETCH c_local_item_id
570   INTO p_item_id;
571   CLOSE c_local_item_id;
572 
573   EXCEPTION WHEN NO_DATA_FOUND THEN
574 	m_err_message := 'Unable to find item definition in import source .';
578         END IF;
575 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.GETLOCALIDS',SQLCODE);
576 	IF c_local_item_id%ISOPEN THEN
577 	  CLOSE c_local_item_id;
579 	RAISE;
580   END;
581 
582   IF p_org_id IS NOT NULL AND p_item_id IS NOT NULL THEN
583     p_product_key:=p_org_id||':'||p_item_id;
584   END IF;
585 
586 
587 EXCEPTION WHEN OTHERS THEN
588   IF (c_local_item_id%ISOPEN)
589   THEN
590      CLOSE c_local_item_id;
591   END IF;
592 
593   IF (l_remote_item_cursor%ISOPEN)
594   THEN
595      CLOSE l_remote_item_cursor;
596   END IF;
597   RAISE;
598 END get_local_ids;
599 
600 
601 ------------------------------------------------------
602 ------procedure that creates a single publication record on the source for a
603 ------target publication.  This proc is called from create_src_pb_records.
604 PROCEDURE create_src_publication(p_publication_id  IN cz_model_publications.publication_id%TYPE,
605                                  p_link_name       IN cz_servers.fndnam_link_name%TYPE,
606                                  p_tgt_server_id   IN cz_servers.server_local_id%TYPE,
607                                  p_src_object_id   IN cz_model_publications.object_id%TYPE,
608                                  -- p_src_object_type IN cz_model_publications.object_type%TYPE,
609                                  p_src_ui_def_id   IN cz_model_publications.ui_def_id%TYPE)
610 IS
611 l_new_pb_id cz_model_publications.publication_id%TYPE;
612 l_ui_def_id     VARCHAR2(100);
613 pub_cursor ref_cursor;
614 l_pub_cursor cz_model_publications%rowtype;
615 v_item_id cz_item_masters.item_id%TYPE;
616 v_org_id cz_model_publications.organization_id%TYPE;
617 v_product_key cz_model_publications.product_key%TYPE;
618 
619 linkName      cz_servers.fndnam_link_name%TYPE;
620 
621 BEGIN
622   ----get new publication id
623   SELECT cz_model_publications_s.nextval
624   INTO   l_new_pb_id
625   FROM   dual;
626 
627   IF (p_src_ui_def_id IS NULL) THEN
628     l_ui_def_id := 'NULL';
629   ELSE
630     l_ui_def_id := to_char(p_src_ui_def_id);
631   END IF;
632 
633   -- Get Import Server link name
634   SELECT fndnam_link_name INTO linkName
635            FROM cz_servers
636   WHERE import_enabled='1';
637 
638 
639   IF(linkName IS NOT NULL)THEN
640        linkName := '@' || linkName;
641   END IF;
642 
643   -- model_id, source_model_id, source_ui_def_id are null
644    OPEN pub_cursor for
645       '  SELECT *'||
646       ' FROM  cz_model_publications'||p_link_name||'  t ' ||
647       ' WHERE t.publication_id = '||p_publication_id ;
648 
649      LOOP
650       FETCH pub_cursor
651       INTO  l_pub_cursor;
652        EXIT WHEN pub_cursor % NOTFOUND;
653        v_item_id:=l_pub_cursor.top_item_id;
654        v_org_id:=l_pub_cursor.organization_id;
655        v_product_key:=l_pub_cursor.product_key;
656       IF p_link_name <> linkName THEN
657 	      get_local_ids(l_pub_cursor.PUBLICATION_ID,p_link_name,linkName ,v_item_id,v_org_id,v_product_key);
658       END IF;
659 
660       INSERT INTO cz_model_publications(
661        PUBLICATION_ID
662       ,OBJECT_ID
663       ,OBJECT_TYPE
664       ,SERVER_ID
665       ,ORGANIZATION_ID
666       ,TOP_ITEM_ID
667       ,PRODUCT_KEY
668       ,PUBLICATION_MODE
669       ,UI_DEF_ID
670       ,UI_STYLE
671       ,APPLICABLE_FROM
672       ,APPLICABLE_UNTIL
673       ,EXPORT_STATUS
674       ,DELETED_FLAG
675       ,MODEL_LAST_STRUCT_UPDATE
676       ,MODEL_LAST_LOGIC_UPDATE
677       ,MODEL_LAST_UPDATED
678       ,CREATED_BY
679       ,CREATION_DATE
680       ,LAST_UPDATED_BY
681       ,LAST_UPDATE_DATE
682       ,USER_STR01
683       ,USER_STR02
684       ,USER_STR03
685       ,USER_STR04
686       ,USER_NUM01
687       ,USER_NUM02
688       ,USER_NUM03
689       ,USER_NUM04
690       ,MODEL_PERSISTENT_ID
691       ,SOURCE_TARGET_FLAG
692       ,REMOTE_PUBLICATION_ID
693       ,PAGE_LAYOUT
694       ,CONTAINER
695       ,DISABLED_FLAG
696       ,PUBLISHED
697       ) VALUES
698       (
699         l_new_pb_id
700 	 ,p_src_object_id
701 	 ,l_pub_cursor.OBJECT_TYPE
702 	 ,p_tgt_server_id
703 	 ,DECODE(l_pub_cursor.ORGANIZATION_ID,NULL,NULL, v_org_id)
704 	 ,DECODE(l_pub_cursor.TOP_ITEM_ID ,NULL, NULL, v_item_id)
705 	 ,DECODE(l_pub_cursor.PRODUCT_KEY , NULL,NULL, v_product_key )
706 	 ,l_pub_cursor.PUBLICATION_MODE
707 	 ,l_ui_def_id
708 	 ,l_pub_cursor.UI_STYLE
709 	 ,l_pub_cursor.APPLICABLE_FROM
710 	 ,l_pub_cursor.APPLICABLE_UNTIL
711 	 ,l_pub_cursor.EXPORT_STATUS
712 	 ,l_pub_cursor.DELETED_FLAG
713 	 ,l_pub_cursor.MODEL_LAST_STRUCT_UPDATE
714 	 ,l_pub_cursor.MODEL_LAST_LOGIC_UPDATE
715 	 ,l_pub_cursor.MODEL_LAST_UPDATED
716 	 ,l_pub_cursor.CREATED_BY
717 	 ,l_pub_cursor.CREATION_DATE
718 	 ,l_pub_cursor.LAST_UPDATED_BY
719 	 ,l_pub_cursor.LAST_UPDATE_DATE
720 	 ,l_pub_cursor.USER_STR01
721 	 ,l_pub_cursor.USER_STR02
722 	 ,l_pub_cursor.USER_STR03
723 	 ,l_pub_cursor.USER_STR04
724 	 ,l_pub_cursor.USER_NUM01
725 	 ,l_pub_cursor.USER_NUM02
726 	 ,l_pub_cursor.USER_NUM03
727 	 ,l_pub_cursor.USER_NUM04
728 	 ,l_pub_cursor.MODEL_PERSISTENT_ID
729 	 ,'S'
733 	 ,l_pub_cursor.DISABLED_FLAG
730 	 ,p_publication_id
731 	 ,l_pub_cursor.PAGE_LAYOUT
732 	 ,l_pub_cursor.CONTAINER
734 	 ,l_pub_cursor.PUBLISHED
735     );
736   END LOOP;
737   CLOSE pub_cursor;
738 
739   ----update remote publication id on the clone instance
740   EXECUTE IMMEDIATE
741     'UPDATE cz_model_publications'||p_link_name||'  t ' ||
742     ' SET t.remote_publication_id = '||l_new_pb_id||
743     ' WHERE t.publication_id = '||p_publication_id ;
744 
745   ----insert into cz_pb_client_apps
746   EXECUTE IMMEDIATE
747     'INSERT INTO cz_pb_client_apps(publication_id,fnd_application_id,application_short_name,notes)' ||
748     ' SELECT '||l_new_pb_id||',' ||
749     '        s.application_id,' ||
750     '        x.application_short_name,' ||
751     '        x.notes' ||
752     ' FROM  cz_pb_client_apps'||p_link_name||'  x,  fnd_applications  s' ||
753     ' WHERE x.publication_id = '||p_publication_id ||
754     ' AND x.application_short_name = s.application_short_name' ;
755 
756   ----insert into cz_publication_usages
757   EXECUTE IMMEDIATE
758     'INSERT INTO cz_publication_usages(publication_id,usage_id)' ||
759     ' SELECT '||l_new_pb_id||',usage_id' ||
760     ' FROM  cz_publication_usages'||p_link_name||'  z' ||
761     ' WHERE z.publication_id = '||p_publication_id ;
762 
763   ----insert into cz_pb_languages
764   EXECUTE IMMEDIATE
765     'INSERT INTO cz_pb_languages(publication_id,language)' ||
766     ' SELECT '||l_new_pb_id||', language' ||
767     ' FROM cz_pb_languages'||p_link_name||'  y' ||
768     ' WHERE y.publication_id = '||p_publication_id;
769 
770   m_err_message  := 'source pb: '||l_new_pb_id||' created for target pb: '||p_publication_id;
771   error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
772 EXCEPTION
773   WHEN OTHERS THEN
774     IF pub_cursor%ISOPEN THEN
775       CLOSE pub_cursor;
776     END IF;
777     ROLLBACK;
778     RAISE;
779 END create_src_publication;
780 
781 --------------------------------------------------------
782 ----procedure that deletes a publication record on the target
783 ----instance
784 PROCEDURE delete_tgt_publication(p_publication_id IN cz_model_publications.publication_id%TYPE,
785 					   p_link_name IN cz_servers.fndnam_link_name%TYPE)
786 IS
787 
788 BEGIN
789 	EXECUTE IMMEDIATE
790 	'delete from cz_model_publications'||p_link_name||' t' ||
791 	' where  t.publication_id = '||p_publication_id ;
792 EXCEPTION
793 WHEN OTHERS THEN
794 	RAISE;
795 END;
796 
797 ---------------------------------------------------------
798 ------procedure that retrieves the src and tgt information
799 PROCEDURE get_src_tgt_info(p_tgt_server_id IN cz_servers.server_local_id%TYPE,
800 				   x_src_instance OUT NOCOPY cz_servers.local_name%TYPE,
801 				   x_tgt_instance OUT NOCOPY cz_servers.local_name%TYPE)
802 IS
803 
804 BEGIN
805 	SELECT instance_name
806 	INTO   x_src_instance
807 	FROM   cz_servers
808 	WHERE  cz_servers.server_local_id = 0;
809 
810 	SELECT instance_name
811 	INTO   x_tgt_instance
812 	FROM   cz_servers
813 	WHERE  cz_servers.server_local_id = p_tgt_server_id ;
814 EXCEPTION
815 WHEN OTHERS THEN
816 	RAISE;
817 END;
818 -------------------------------------------------------
819 PROCEDURE clear_publication_data(p_target_server_id IN cz_model_publications.server_id%TYPE)
820 IS
821 
822 l_src_pub_tbl  t_ref;
823 
824 BEGIN
825 	SELECT publication_id
826 	BULK
827 	COLLECT
828 	INTO   l_src_pub_tbl
829 	FROM   cz_model_publications
830 	WHERE  server_id = p_target_server_id ;
831 
832 	IF (l_src_pub_tbl.COUNT > 0) THEN
833 		FOR I IN l_src_pub_tbl.FIRST..l_src_pub_tbl.LAST
834 		LOOP
835 			----clear source pb record of the tgt clone
836 			clear_source_pb_record(l_src_pub_tbl(i));
837 
838 			---clear pb clients
839 			clear_pb_clients(l_src_pub_tbl(i));
840 
841 			----clear pb usages
842 			clear_pb_usages(l_src_pub_tbl(i));
843 
844 			----clear pb lang
845 			clear_pb_lang(l_src_pub_tbl(i));
846 		END LOOP;
847 	END IF;
848 EXCEPTION
849 WHEN NO_DATA_FOUND THEN
850 	----do nothing
851 	NULL;
852 WHEN OTHERS THEN
853    RAISE;
854 END;
855 
856 ----------------------------------------------------------
857 ----procedure that creates the source publication records for each valid publication
858 ----on the clone
859 PROCEDURE create_src_pb_records(p_tgt_server_id IN cz_servers.server_local_id%TYPE)
860 IS
861 
862   TYPE object_type_tbl_type IS TABLE OF cz_model_publications.object_type%TYPE
863     INDEX BY BINARY_INTEGER;
864 
865   l_ref_cursor    REF_CURSOR;
866   l_model_cursor  REF_CURSOR;
867   l_templ_cursor  REF_CURSOR;
868   l_ui_cursor     REF_CURSOR;
869 
870   l_publication_id   cz_model_publications.publication_id%TYPE;
871   l_src_pb_id        cz_model_publications.publication_id%TYPE;
872   l_rem_pb_id        cz_model_publications.publication_id%TYPE;
873   l_src_object_id    cz_model_publications.object_id%TYPE;
874   l_tgt_object_id    cz_model_publications.object_id%TYPE;
878   l_src_ui_def_id    cz_model_publications.ui_def_id%TYPE;
875   l_src_object_type  cz_model_publications.object_type%TYPE;
876   l_tgt_object_type  cz_model_publications.object_type%TYPE;
877   l_src_model_id     cz_model_publications.model_id%TYPE;
879   l_src_object_name  cz_devl_projects.name%TYPE;
880   l_tgt_object_name  cz_devl_projects.name%TYPE;
881 
882   l_link_name        cz_servers.fndnam_link_name%TYPE;
883 
884   l_tgt_src_pub_tbl      t_ref;
885   l_tgt_rem_pub_tbl      t_ref;
886   l_tgt_object_id_tbl    t_ref;
887   l_tgt_object_type_tbl  object_type_tbl_type;
888   l_tgt_src_model_tbl    t_ref;
889   l_tgt_src_ui_def_tbl   t_ref;
890   l_tgt_object_name_tbl  t_name;
891   l_tgt_pb_count         NUMBER;
892 
893   l_src_instance    cz_servers.local_name%TYPE;
894   l_tgt_instance    cz_servers.local_name%TYPE;
895   l_tgt_ui_def_id   cz_ui_defs.ui_def_id%TYPE;
896 
897   OBJ_TYPE_MISMATCH_ERR  EXCEPTION;
898   MODEL_MISMATCH_ERR     EXCEPTION;
899   UI_MISMATCH_ERR        EXCEPTION;
900   MODELNAME_MISMATCH_ERR EXCEPTION;
901   TEMPLNAME_MISMATCH_ERR EXCEPTION;
902   OBJ_TYPE_ERR           EXCEPTION;
903 
904 BEGIN
905   clear_publication_data(p_tgt_server_id);
906   l_link_name := cz_pb_sync_util.retrieve_link_name(p_tgt_server_id);
907 
908   l_tgt_src_pub_tbl.DELETE;
909   l_tgt_rem_pub_tbl.DELETE;
910   l_tgt_object_id_tbl.DELETE;
911   l_tgt_object_type_tbl.DELETE;
912   l_tgt_src_model_tbl.DELETE;
913   l_tgt_src_ui_def_tbl.DELETE;
914   l_tgt_object_name_tbl.DELETE;
915 
916   l_tgt_pb_count := 1;
917   OPEN l_ref_cursor FOR
918          'SELECT publication_id,
919                  remote_publication_id,
920                  object_id,
921                  object_type,
922                  source_model_id,
923                  source_ui_def_id
924           FROM cz_model_publications'||l_link_name||'  t
925           WHERE t.deleted_flag = ''0''
926           AND   t.source_target_flag = ''T''
927           AND   t.export_status = ''OK'' ';
928   LOOP
929     FETCH l_ref_cursor INTO l_publication_id,
930                             l_rem_pb_id,
931                             l_tgt_object_id,
932                             l_tgt_object_type,
933                             l_src_model_id,
934                             l_src_ui_def_id;
935     EXIT WHEN l_ref_cursor%NOTFOUND;
936     l_tgt_src_pub_tbl(l_tgt_pb_count)     := l_publication_id;
937     l_tgt_rem_pub_tbl(l_tgt_pb_count)     := l_rem_pb_id;
938     l_tgt_object_id_tbl(l_tgt_pb_count)   := l_tgt_object_id;
939     l_tgt_object_type_tbl(l_tgt_pb_count) := l_tgt_object_type;
940     l_tgt_src_model_tbl(l_tgt_pb_count)   := nvl(l_src_model_id,0);
941     l_tgt_src_ui_def_tbl(l_tgt_pb_count)  := nvl(l_src_ui_def_id,0);
942     l_tgt_pb_count := l_tgt_pb_count + 1;
943   END LOOP;
944   CLOSE l_ref_cursor;
945 
946   IF (l_tgt_object_id_tbl.COUNT > 0) THEN
947     FOR i IN l_tgt_object_id_tbl.FIRST..l_tgt_object_id_tbl.LAST
948     LOOP
949       l_tgt_object_id := l_tgt_object_id_tbl(i);
950       IF l_tgt_object_type_tbl(i) = OBJECT_TYPE_PROJECT THEN
951         OPEN l_model_cursor FOR
952           'SELECT name
953            FROM cz_devl_projects'||l_link_name||'  t
954            WHERE t.devl_project_id = '||l_tgt_object_id||'
955            AND   t.deleted_flag = ''0'' ';
956         LOOP
957           FETCH l_model_cursor INTO l_tgt_object_name;
958           EXIT WHEN l_model_cursor%NOTFOUND;
959           l_tgt_object_name_tbl(i) := l_tgt_object_name;
960         END LOOP;
961         CLOSE l_model_cursor;
962       ELSE
963         OPEN l_templ_cursor FOR
964           'SELECT template_name
965            FROM cz_ui_templates'||l_link_name||'  t
966            WHERE t.template_id = '||l_tgt_object_id||'
967            AND   t.ui_def_id = '||GLOBAL_UI_DEF_PUB||'
968            AND   t.deleted_flag = ''0'' ';
969         LOOP
970           FETCH l_templ_cursor INTO l_tgt_object_name;
971           EXIT WHEN l_templ_cursor%NOTFOUND;
972           l_tgt_object_name_tbl(i) := l_tgt_object_name;
973         END LOOP;
974         CLOSE l_templ_cursor;
975       END IF;
976     END LOOP;
977   END IF;
978 
979   IF (l_tgt_rem_pub_tbl.COUNT > 0) THEN
980     FOR I IN 1..l_tgt_rem_pub_tbl.COUNT
981     LOOP
982       l_src_pb_id := 0;
983       l_src_object_id  := 0;
984       l_src_ui_def_id := 0;
985       BEGIN
986         SELECT publication_id,object_id,object_type,ui_def_id
987         INTO   l_src_pb_id,l_src_object_id,l_src_object_type,l_src_ui_def_id
988         FROM   cz_model_publications
989         WHERE  cz_model_publications.publication_id = l_tgt_rem_pub_tbl(i);
990       EXCEPTION
991         WHEN NO_DATA_FOUND THEN
992           ----delete tgt_publication
993           m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_DEL_TGT_PB',
994               'TGTPBID',l_tgt_rem_pub_tbl(i));
995           error_msg_populate(m_err_message ,'CZ_PB_MGR.DELTGTPBID',SQLCODE);
996           delete_tgt_publication(l_tgt_src_pub_tbl(i),l_link_name);
997         WHEN OTHERS THEN
998           RAISE;
999       END;
1000 
1001       IF (l_src_object_id > 0) THEN
1002         IF UPPER(l_src_object_type) <> UPPER(l_tgt_object_type_tbl(i)) THEN
1006         END IF;
1003           l_publication_id := l_tgt_src_pub_tbl(i);
1004           l_tgt_object_type := l_tgt_object_type_tbl(i);
1005           RAISE OBJ_TYPE_MISMATCH_ERR;
1007 
1008         IF l_src_object_type = OBJECT_TYPE_PROJECT THEN
1009           -----match models on the source and the target
1010           IF (l_tgt_src_model_tbl(i) <> 0) THEN
1011             IF (l_src_object_id <> l_tgt_src_model_tbl(i)) THEN
1012               l_tgt_object_id := l_tgt_src_model_tbl(i);
1013               RAISE MODEL_MISMATCH_ERR;
1014             END IF;
1015           END IF;
1016 
1017           IF (l_tgt_src_ui_def_tbl(i) <> 0) THEN
1018             IF ( (l_src_ui_def_id IS NOT NULL) AND
1019                  (l_src_ui_def_id <> l_tgt_src_ui_def_tbl(i)) ) THEN
1020               l_tgt_ui_def_id := l_tgt_src_ui_def_tbl(i);
1021               RAISE UI_MISMATCH_ERR;
1022             END IF;
1023           END IF;
1024 
1025           SELECT name INTO l_src_object_name
1026           FROM   cz_devl_projects
1027           WHERE  cz_devl_projects.devl_project_id = l_src_object_id;
1028 
1029           IF (l_src_object_name <> l_tgt_object_name_tbl(i)) THEN
1030             l_tgt_object_name  := l_tgt_object_name_tbl(i);
1031             RAISE MODELNAME_MISMATCH_ERR;
1032           END IF;
1033         ELSIF l_src_object_type = OBJECT_TYPE_UITEMPL THEN
1034           SELECT template_name INTO l_src_object_name
1035           FROM cz_ui_templates
1036           WHERE template_id = l_src_object_id AND ui_def_id = GLOBAL_UI_DEF_SRC;
1037 
1038           IF l_src_object_name <> l_tgt_object_name_tbl(i) THEN
1039             l_tgt_object_name  := l_tgt_object_name_tbl(i);
1040             RAISE TEMPLNAME_MISMATCH_ERR;
1041           END IF;
1042         ELSE
1043           RAISE OBJ_TYPE_ERR;
1044         END IF;
1045 
1046         ----publication data on the source is created for each publication id
1047         ----if error occurs during an insert, the whole sync is terminated
1048         create_src_publication(l_tgt_src_pub_tbl(i),
1049                                l_link_name,
1050                                p_tgt_server_id,
1051                                l_src_object_id,
1052                                -- l_src_object_type,
1053                                l_src_ui_def_id);
1054       END IF;
1055     END LOOP;
1056   END IF;
1057 EXCEPTION
1058   WHEN MODEL_MISMATCH_ERR THEN
1059     ----get source and target info
1060     get_src_tgt_info(p_tgt_server_id, l_src_instance,l_tgt_instance);
1061     m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_MODELS_ERR',
1062                                         'SRCMODEL',l_src_object_id,
1063                                         'SRCINSTANCE',l_src_instance,
1064                                         'TGTMODEL',l_tgt_object_id,
1065                                         'TGTINSTANCE',l_tgt_instance);
1066     error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
1067     IF (l_ref_cursor%ISOPEN) THEN
1068       CLOSE l_ref_cursor;
1069     END IF;
1070 
1071     IF (l_model_cursor%ISOPEN) THEN
1072       CLOSE l_model_cursor;
1073     END IF;
1074     IF (l_templ_cursor%ISOPEN) THEN
1075       CLOSE l_templ_cursor;
1076     END IF;
1077     RAISE;
1078   WHEN UI_MISMATCH_ERR THEN
1079     ----get source and target info
1080     get_src_tgt_info(p_tgt_server_id, l_src_instance,l_tgt_instance);
1081     m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_UIS_ERR',
1082                                         'SRCUIDEF',l_src_ui_def_id,
1083                                         'SRCINSTANCE',l_src_instance,
1084                                         'TGTUIDEF',l_tgt_ui_def_id,
1085                                         'TGTINSTANCE',l_tgt_instance);
1086     error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
1087     IF (l_ref_cursor%ISOPEN) THEN
1088       CLOSE l_ref_cursor;
1089     END IF;
1090     IF (l_model_cursor%ISOPEN) THEN
1091       CLOSE l_model_cursor;
1092     END IF;
1093     IF (l_templ_cursor%ISOPEN) THEN
1094       CLOSE l_templ_cursor;
1095     END IF;
1096     RAISE;
1097   WHEN MODELNAME_MISMATCH_ERR  THEN
1098     ----get source and target info
1099     get_src_tgt_info(p_tgt_server_id, l_src_instance,l_tgt_instance);
1100     m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_MODELNAME_ERR',
1101                                         'SRCMODEL',l_src_object_name,
1102                                         'SRCINSTANCE',l_src_instance,
1103                                         'TGTMODEL',l_tgt_object_name,
1104                                         'TGTINSTANCE',l_tgt_instance);
1105     error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
1106     IF (l_ref_cursor%ISOPEN) THEN
1107       CLOSE l_ref_cursor;
1108     END IF;
1109     IF (l_model_cursor%ISOPEN) THEN
1110       CLOSE l_model_cursor;
1111     END IF;
1112     IF (l_templ_cursor%ISOPEN) THEN
1113       CLOSE l_templ_cursor;
1114     END IF;
1115     RAISE;
1116   WHEN TEMPLNAME_MISMATCH_ERR  THEN
1117     ----get source and target info
1118     get_src_tgt_info(p_tgt_server_id, l_src_instance,l_tgt_instance);
1119     m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_TEMPLNAME_ERR',
1120                                         'SRCTEMPL',l_src_object_name,
1121                                         'SRCINSTANCE',l_src_instance,
1125     IF (l_ref_cursor%ISOPEN) THEN
1122                                         'TGTTEMPL',l_tgt_object_name,
1123                                         'TGTINSTANCE',l_tgt_instance);
1124     error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
1126       CLOSE l_ref_cursor;
1127     END IF;
1128 
1129     IF (l_templ_cursor%ISOPEN) THEN
1130       CLOSE l_templ_cursor;
1131     END IF;
1132 
1133     IF (l_model_cursor%ISOPEN) THEN
1134       CLOSE l_model_cursor;
1135     END IF;
1136     RAISE;
1137   WHEN OBJ_TYPE_MISMATCH_ERR THEN
1138     ----get source and target info
1139     get_src_tgt_info(p_tgt_server_id, l_src_instance,l_tgt_instance);
1140     m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_TYPE_ERR',
1141                                         'TGTTYPE', l_tgt_object_type,
1142                                         'TGTPUBID',l_publication_id,
1143                                         'TGTINSTANCE',l_tgt_instance,
1144                                         'SRCTYPE', l_src_object_type,
1145                                         'SRCPUBID',l_src_pb_id,
1146                                         'SRCINSTANCE',l_src_instance);
1147     error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
1148     IF (l_ref_cursor%ISOPEN) THEN
1149       CLOSE l_ref_cursor;
1150     END IF;
1151 
1152     IF (l_model_cursor%ISOPEN) THEN
1153       CLOSE l_model_cursor;
1154     END IF;
1155     RAISE;
1156 
1157     IF (l_templ_cursor%ISOPEN) THEN
1158       CLOSE l_templ_cursor;
1159     END IF;
1160     RAISE;
1161 
1162   WHEN OBJ_TYPE_ERR THEN
1163     ----get source and target info
1164     get_src_tgt_info(p_tgt_server_id, l_src_instance,l_tgt_instance);
1165     m_err_message := 'The object_type ' || l_src_object_type || ' of publication ' ||
1166            l_src_pb_id || ' on instance ' || l_src_instance || ' is invalid';
1167     error_msg_populate(m_err_message ,'CZ_PB_MGR.CREATESRCPBRECORDS',SQLCODE);
1168     IF (l_ref_cursor%ISOPEN) THEN
1169       CLOSE l_ref_cursor;
1170     END IF;
1171 
1172     IF (l_model_cursor%ISOPEN) THEN
1173       CLOSE l_model_cursor;
1174     END IF;
1175     RAISE;
1176 
1177     IF (l_templ_cursor%ISOPEN) THEN
1178       CLOSE l_templ_cursor;
1179     END IF;
1180     RAISE;
1181 
1182   WHEN OTHERS THEN
1183     IF (l_ref_cursor%ISOPEN) THEN
1184       CLOSE l_ref_cursor;
1185     END IF;
1186 
1187     IF (l_model_cursor%ISOPEN) THEN
1188       CLOSE l_model_cursor;
1189     END IF;
1190     IF (l_templ_cursor%ISOPEN) THEN
1191       CLOSE l_templ_cursor;
1192     END IF;
1193     RAISE;
1194 END create_src_pb_records;
1195 
1196 ------------------------------------------------------
1197 -----function that validates input parameters
1198 FUNCTION verify_input_parameters(p_target_instance IN VARCHAR2)
1199 RETURN BOOLEAN
1200 IS
1201 
1202 l_instance_name	cz_servers.instance_name%TYPE;
1203 l_host_name		cz_servers.hostname%TYPE;
1204 l_listener_port	cz_servers.db_listener_port%TYPE;
1205 l_fndnam_link_name cz_servers.fndnam_link_name%TYPE;
1206 v_ret_flag		 BOOLEAN := TRUE;
1207 
1208 BEGIN
1209 	IF (p_target_instance IS NULL) THEN
1210 		m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_INPUT_INST_NULL');
1211 		error_msg_populate(m_err_message ,'CZ_PB_SYNC.INPUTPARAMS',21004);
1212 		v_ret_flag := FALSE;
1213 	ELSE
1214 		SELECT instance_name,hostname,db_listener_port,fndnam_link_name
1215 		INTO   l_instance_name,l_host_name,l_listener_port,l_fndnam_link_name
1216 		FROM   cz_servers
1217 		WHERE  UPPER(cz_servers.local_name) = UPPER(p_target_instance);
1218 
1219 		IF (l_instance_name IS NULL) THEN
1220 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_INSTANCE_IS_NULL', 'TGTINSTANCE',p_target_instance);
1221 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.INPUTPARAMS',21004);
1222 			v_ret_flag := FALSE;
1223 		END IF;
1224 
1225 		IF (l_host_name IS NULL) THEN
1226 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_HOST_IS_NULL','TGTINSTANCE',p_target_instance);
1227 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.INPUTPARAMS',21004);
1228 			v_ret_flag := FALSE;
1229 		END IF;
1230 
1231 		IF (l_listener_port IS NULL) THEN
1232 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_PORT_IS_NULL','TGTINSTANCE',p_target_instance);
1233 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.INPUTPARAMS',21004);
1234 			v_ret_flag := FALSE;
1235 		END IF;
1236 
1237 		IF (l_fndnam_link_name IS NULL) THEN
1238 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_LINK_IS_NULL','TGTINSTANCE',p_target_instance);
1239 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.INPUTPARAMS',21004);
1240 			v_ret_flag := FALSE;
1241 		END IF;
1242 	END IF;
1243 
1244 	RETURN v_ret_flag;
1245 EXCEPTION
1246 WHEN NO_DATA_FOUND THEN
1247 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NO_SVR_ENTRY','TGTINSTANCE',p_target_instance);
1248 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.INPUTPARAMS',21004);
1249 	v_ret_flag := FALSE;
1250 	RETURN v_ret_flag;
1251 WHEN OTHERS THEN
1252 	v_ret_flag := FALSE;
1253 	RETURN v_ret_flag;
1254 END verify_input_parameters;
1255 
1256 -------------------------------------------------------
1257 -----procedure that updates server information on the target
1261 
1258 PROCEDURE update_server_info(p_target_server_id IN cz_servers.server_local_id%TYPE,
1259 				     p_link_name 		IN cz_servers.fndnam_link_name%TYPE)
1260 IS
1262 l_instance_name	cz_servers.instance_name%TYPE;
1263 l_host_name		cz_servers.hostname%TYPE;
1264 l_listener_port	cz_servers.db_listener_port%TYPE;
1265 l_sync_date		VARCHAR2(50);
1266 
1267 BEGIN
1268 	l_sync_date	:= TO_CHAR(sysdate, 'mm-dd-yyyy hh24:mi:ss');
1269 
1270 	SELECT instance_name,hostname,db_listener_port
1271 	INTO   l_instance_name,l_host_name,l_listener_port
1272 	FROM   cz_servers
1273 	WHERE  cz_servers.server_local_id = p_target_server_id;
1274 
1275 	EXECUTE IMMEDIATE
1276 		'UPDATE cz_servers'||p_link_name||'  t ' ||
1277 	 	' SET t.instance_name = '''||l_instance_name||''',  ' ||
1278 		'     t.hostname = '''||l_host_name||''', ' ||
1279 		'     t.db_listener_port = '||l_listener_port||', ' ||
1280 		'     t.notes		= '''||l_sync_date||'''   ' ||
1281 		' WHERE UPPER(t.local_name) = ''LOCAL'' ';
1282 EXCEPTION
1283 WHEN NO_DATA_FOUND THEN
1284 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_UPD_SVR_ERR','SERVERID',p_target_server_id, 'SQLERRM',SQLERRM);
1285 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.GETTGTINSTANCE',21004);
1286 	RAISE;
1287 WHEN OTHERS THEN
1288 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_UPD_SVR_ERR','SERVERID',p_target_server_id, 'SQLERRM',SQLERRM);
1289 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.GETTGTINSTANCE',21004);
1290 	RAISE;
1291 END;
1292 
1293 --------------------------------------------------------
1294 -----procedure that syncs publication data on the source
1295 -----and target servers
1296 ------@p_target_server_id --- server id of the target server
1297 ------@x_pb_clone_flg     --- TRUE if sync was successful
1298 
1299 PROCEDURE sync_publication_clone(p_target_server_id IN cz_servers.server_local_id%TYPE,
1300 					   x_pb_clone_flg OUT NOCOPY BOOLEAN)
1301 IS
1302 
1303 v_link_name      cz_servers.fndnam_link_name%TYPE;
1304 
1305 BEGIN
1306 	x_pb_clone_flg := TRUE;
1307 
1308  	----for each tgt publication record create source publication record
1309 	create_src_pb_records(p_target_server_id);
1310 
1311 	----clear pb exports
1312 	clear_pb_exports;
1313 
1314 	----update server id in tgt publication record
1315 	v_link_name := cz_pb_sync_util.retrieve_link_name(p_target_server_id);
1316 	update_tgt_server_id(p_target_server_id,v_link_name);
1317 
1318 	----update target server information
1319 	update_server_info(p_target_server_id,v_link_name);
1320 
1321 EXCEPTION
1322 WHEN OTHERS THEN
1323 	m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_INSERT_ERR', 'SQLERRM', SQLERRM);
1324 	error_msg_populate(m_err_message ,'CZ_PB_SYNC.SYNCPBCLONE',21015);
1325 	x_pb_clone_flg := FALSE;
1326 END sync_publication_clone;
1327 
1328 -----------------------------------------------------
1329 --- procedure that synchronizes the publication data on the source and
1330 --- target servers
1331 PROCEDURE sync_cloned_tgt_pub_data(p_target_instance IN VARCHAR2,
1332                                    x_run_id OUT NOCOPY NUMBER,
1333                                    x_status OUT NOCOPY VARCHAR2)
1334 IS
1335 
1336   l_src_verification   BOOLEAN;
1337   l_target_server_id  NUMBER := 0;
1338   l_validate_flg     BOOLEAN := TRUE;
1339   l_has_to_be_synced_flg  BOOLEAN := TRUE;
1340   l_pb_clone_flg    BOOLEAN ;
1341   l_run_id          NUMBER := 0;
1342   l_link_name     cz_servers.fndnam_link_name%TYPE;
1343   l_proc_name     v$session.module%TYPE;
1344 
1345 BEGIN
1346 
1347   ----initialize OUT NOCOPY variables
1348   x_status := FND_API.G_RET_STS_SUCCESS;
1349   m_msg_tbl.DELETE;
1350 
1351   FOR I IN 1..1
1352   LOOP
1353     ----get run id
1354     l_run_id := cz_pb_sync_util.get_run_id;
1355     x_run_id := l_run_id;
1356 
1357     IF (l_run_id = 0) THEN
1358       m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SEQ_XFR');
1359       error_msg_populate(m_err_message ,'CZ_PB_SYNC.XFRINFO',21001);
1360       x_status := FND_API.G_RET_STS_ERROR;
1361       EXIT;
1362     END IF;
1363 
1364     ----check if another sync is in progress
1365     l_proc_name := cz_pb_sync_util.check_process;
1366     IF l_proc_name IS NOT NULL THEN
1367       m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_PROCESS_EXISTS');
1368       error_msg_populate(m_err_message ,'CZ_PB_SYNC.CHKPROCESS',21001);
1369       x_status := FND_API.G_RET_STS_ERROR;
1370       EXIT;
1371     ELSE
1372       ----register application
1373       cz_pb_sync_util.set_dbms_info('CZ_PB_SYNC');
1374     END IF;
1375 
1376     ----validate input parameters
1377     IF (NOT verify_input_parameters(p_target_instance) ) THEN
1378       x_status := FND_API.G_RET_STS_ERROR;
1379       EXIT;
1380     END IF;
1381 
1382     ---verify schema versions on the source and target instances
1383     l_target_server_id := cz_pb_sync_util.get_target_instance_id(p_target_instance);
1384 
1385     ------check for active links
1386     l_link_name := cz_pb_sync_util.retrieve_link_name(l_target_server_id);
1387     IF ( NOT cz_pb_sync_util.check_db_link(l_link_name) ) THEN
1388       m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NO_LINK_EXISTS','LINKNAME',l_link_name);
1389       error_msg_populate(m_err_message ,'CHECKDBLINK',21025);
1393 
1390       x_status := FND_API.G_RET_STS_ERROR;
1391       EXIT;
1392     END IF;
1394     ---verify that the above proc is called from the source
1395     l_src_verification := verify_source_instance(p_target_instance);
1396     IF (NOT l_src_verification) THEN
1397       x_status := FND_API.G_RET_STS_ERROR;
1398       EXIT;
1399     END IF;
1400 
1401     l_validate_flg := cz_pb_sync_util.validate_schema(l_target_server_id);
1402     IF (NOT l_validate_flg ) THEN
1403       m_err_message :=  CZ_UTILS.GET_TEXT('CZ_PB_SCHEMA_COMPAT_ERR');
1404       error_msg_populate(m_err_message ,'VALIDATESCHEMA',21005);
1405       x_status := FND_API.G_RET_STS_ERROR;
1406       EXIT;
1407     END IF;
1408 
1409     -----verify that the target instance is a clone
1410     IF (check_target_instance(l_link_name) ) THEN
1411       x_status := FND_API.G_RET_STS_ERROR;
1412       EXIT;
1413     END IF;
1414 
1415 
1416     ----check if the pb data has to be synchronized
1417     l_has_to_be_synced_flg  := has_to_be_synced(l_target_server_id);
1418     IF (NOT l_has_to_be_synced_flg) THEN
1419       x_status := FND_API.G_RET_STS_ERROR;
1420       EXIT;
1421     ELSE
1422       ---sync publication data for a single publication
1423       sync_publication_clone(l_target_server_id,l_pb_clone_flg);
1424 
1425       IF (NOT l_pb_clone_flg) THEN
1426         x_status := FND_API.G_RET_STS_ERROR;
1427         ROLLBACK;
1428         EXIT;
1429       ELSE
1430         COMMIT;
1431       END IF;
1432     END IF;
1433   END LOOP;
1434 
1435   ---log errors to cz_db_logs
1436   IF (x_status = FND_API.G_RET_STS_ERROR) THEN
1437     m_err_message :=  CZ_UTILS.GET_TEXT('CZ_PB_SYNC_FAILURE', 'INSTANCENAME',p_target_instance);
1438     error_msg_populate(m_err_message ,'SYNCCLOTGTPBDATA',21014);
1439   END IF;
1440   cz_pb_sync_util.log_pb_sync_errors(m_msg_tbl,l_run_id);
1441 
1442   -----unregister application
1443   cz_pb_sync_util.reset_dbms_info;
1444 EXCEPTION
1445   WHEN OTHERS THEN
1446     x_status := FND_API.G_RET_STS_UNEXP_ERROR;
1447 END sync_cloned_tgt_pub_data;
1448 
1449 ------------------------------------------------------------
1450 -----concurrent manager program for cloned tgt instance
1451 PROCEDURE sync_cloned_tgt_pub_data_cp(Errbuf  IN OUT NOCOPY  VARCHAR2,
1452 				  		  Retcode IN OUT NOCOPY  PLS_INTEGER,
1453 						  p_target_instance IN VARCHAR2)
1454 
1455 IS
1456 
1457 v_run_id      NUMBER := 0.0;
1458 v_sync_status VARCHAR2(1);
1459 
1460 BEGIN
1461    Retcode:=0;
1462    sync_cloned_tgt_pub_data(p_target_instance,v_run_id,v_sync_status);
1463 
1464    Errbuf := NULL;
1465    IF (v_sync_status = FND_API.G_RET_STS_ERROR) THEN
1466       Errbuf := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_FAILURE', 'INSTANCENAME',p_target_instance);
1467 	Retcode:= 2;
1468    END IF;
1469 
1470 EXCEPTION
1471 WHEN OTHERS THEN
1472     Retcode := 2;
1473     Errbuf := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_FAILURE', 'TGTINSTANCE',p_target_instance);
1474 END sync_cloned_tgt_pub_data_cp;
1475 
1476 ---------------------------------------------------------
1477 ----get local server information
1478 PROCEDURE get_local_server_info (x_hostname OUT NOCOPY cz_servers.hostname%TYPE,
1479 					   x_instance_name  OUT NOCOPY cz_servers.instance_name%TYPE)
1480 IS
1481 
1482 BEGIN
1483 	SELECT host_name,instance_name
1484 	INTO   x_hostname,x_instance_name
1485 	FROM   v$instance;
1486 EXCEPTION
1487 WHEN OTHERS THEN
1488 	RAISE;
1489 END get_local_server_info;
1490 
1491 --------------------------------------------------------
1492 PROCEDURE modify_target_server(p_link_name IN VARCHAR2,
1493 					 p_hostname IN  cz_servers.hostname%TYPE,
1494 					 p_instance_name IN cz_servers.instance_name%TYPE,
1495 					 p_local_name IN cz_servers.local_name%TYPE)
1496 IS
1497 
1498 v_str VARCHAR2(2000);
1499 
1500 BEGIN
1501 	v_str := ' UPDATE cz_servers'||p_link_name||'  SET hostname = '''||p_hostname||''', ' ||
1502 		 ' instance_name = '''||p_instance_name||''',   ' ||
1503 		 ' local_name = :1 ' ||
1504 	 	 ' WHERE source_server_flag = ''1'' ';
1505 
1506 	EXECUTE IMMEDIATE v_str USING p_local_name ;
1507 COMMIT;
1508 EXCEPTION
1509 WHEN OTHERS THEN
1510 	RAISE;
1511 END;
1512 
1513 -----procedure that retrieves the link name
1514 FUNCTION get_link_name(p_local_name IN cz_servers.local_name%TYPE)
1515 RETURN VARCHAR2
1516 IS
1517 
1518 l_link_name	cz_servers.fndnam_link_name%TYPE := NULL;
1519 
1520 BEGIN
1521 	SELECT fndnam_link_name
1522 	INTO   l_link_name
1523 	FROM   cz_servers
1524 	WHERE  UPPER(local_name) = UPPER(p_local_name);
1525 
1526 	RETURN l_link_name;
1527 EXCEPTION
1528 WHEN OTHERS THEN
1529 	RETURN l_link_name;
1530 END get_link_name;
1531 ----------------------------------------------------------
1532 --- procedure that synchronizes the publication data on the source and
1533 --- target servers after the source server has been cloned
1534  PROCEDURE sync_cloned_src_pub_data(p_decomm_flag IN VARCHAR2,
1535 					     x_run_id OUT NOCOPY NUMBER,
1536 					     x_status OUT NOCOPY VARCHAR2)
1537 IS
1538 
1539 v_src_verification 	BOOLEAN;
1540 v_target_server_id	NUMBER := 0;
1541 v_validate_flg 		BOOLEAN := TRUE;
1542 v_has_to_be_synced_flg  BOOLEAN := TRUE;
1543 v_pb_clone_flg		BOOLEAN ;
1544 v_run_id		      NUMBER := 0;
1545 v_link_name 		cz_servers.fndnam_link_name%TYPE;
1546 
1547 l_hostname			cz_servers.hostname%TYPE;
1548 l_instance_name		cz_servers.instance_name%TYPE;
1549 l_local_name_tbl		t_name ;
1550 l_message			VARCHAr2(2000);
1551 l_proc_name   v$session.module%TYPE;
1552 
1553 BEGIN
1554 
1555 	----initialize OUT NOCOPY variables
1556 	x_status := FND_API.G_RET_STS_SUCCESS;
1557 	m_msg_tbl.DELETE;
1558 
1559 	FOR I IN 1..1
1560 	LOOP
1561 		----get run id for message
1562 		v_run_id := cz_pb_sync_util.get_run_id;
1563 		x_run_id := v_run_id;
1564 
1565 		IF (v_run_id = 0) THEN
1566 			m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SEQ_XFR');
1567 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.XFRINFO',21001);
1568 			x_status := FND_API.G_RET_STS_ERROR;
1569 			EXIT;
1570 		END IF;
1571 
1572 		----check if another sync is in progress
1573                 l_proc_name := cz_pb_sync_util.check_process;
1574                 IF l_proc_name IS NOT NULL THEN
1575 			m_err_message  := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_PROCESS_EXISTS');
1576 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.CHKPROCESS',21001);
1577 			x_status := FND_API.G_RET_STS_ERROR;
1578 			EXIT;
1579 		ELSE
1580 			----register application
1581 			cz_pb_sync_util.set_dbms_info('CZ_PB_SYNC');
1582 		END IF;
1583 
1584 		----validate input parameter
1585 		IF (UPPER(p_decomm_flag) NOT IN ('YES','NO') ) THEN
1586 			m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_INPUT_FLG_INVALID', 'FLAG', p_decomm_flag);
1587 			error_msg_populate(m_err_message ,'CZ_PB_SYNC.DECOMMFLG',21004);
1588 			x_status := FND_API.G_RET_STS_ERROR;
1589 			EXIT;
1590 		END IF;
1591 
1592 		-----update local server entry
1593 		get_local_server_info (l_hostname,l_instance_name);
1594 
1595 		UPDATE cz_servers
1596 		set    hostname = l_hostname,
1597 			 instance_name = l_instance_name
1598 		WHERE  UPPER(cz_servers.local_name) = 'LOCAL';
1599 
1600 		-----recreate database links
1601 		BEGIN
1602 			SELECT local_name
1603 			BULK
1604 			COLLECT
1605 			INTO   l_local_name_tbl
1606 			FROM   cz_servers
1607 			WHERE  UPPER(cz_servers.local_name) <> 'LOCAL';
1608 		EXCEPTION
1609 		WHEN NO_DATA_FOUND THEN
1610 			-----do not care
1611 			NULL;
1612 		END;
1613 
1614 
1615 		IF (l_local_name_tbl.COUNT > 0) THEN
1616 			FOR localName IN l_local_name_tbl.FIRST..l_local_name_tbl.LAST
1617 			LOOP
1618 				v_link_name := get_link_name(l_local_name_tbl(localName));
1619 				IF (v_link_name IS NOT NULL)  THEN
1620 					v_link_name := '@'||v_link_name;
1621 					IF ( NOT cz_pb_sync_util.check_db_link(v_link_name) ) THEN
1622 						m_err_message := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_NO_LINK_EXISTS','LINKNAME',v_link_name);
1623 						error_msg_populate(m_err_message ,'CHECKDBLINK',21025);
1624 						x_status := FND_API.G_RET_STS_ERROR;
1625 						EXIT;
1626 					END IF;
1627 				END IF;
1628 
1629 				IF (UPPER(p_decomm_flag) = 'YES') THEN
1630 					modify_target_server(v_link_name,l_hostname,l_instance_name,l_instance_name);
1631 				ELSE
1632 					UPDATE cz_model_publications set deleted_flag = '1';
1633 					COMMIT;
1634 				END IF;
1635 			END LOOP;
1636 		END IF;
1637 	END LOOP;
1638 
1639 	---log errors to cz_db_logs
1640       IF (x_status = FND_API.G_RET_STS_ERROR) THEN
1641 		m_err_message :=  CZ_UTILS.GET_TEXT('CZ_PB_SYNC_FAILURE', 'SRCINSTANCE',l_instance_name);
1642 		error_msg_populate(m_err_message ,'SYNCCLOTGTPBDATA',21014);
1643 		x_status := FND_API.G_RET_STS_ERROR;
1644 	END IF;
1645 	cz_pb_sync_util.log_pb_sync_errors(m_msg_tbl,v_run_id);
1646 
1647 	-----unregister application
1648 	cz_pb_sync_util.reset_dbms_info;
1649 COMMIT;
1650 EXCEPTION
1651 WHEN OTHERS THEN
1652 	x_status := FND_API.G_RET_STS_UNEXP_ERROR;
1653 END sync_cloned_src_pub_data;
1654 
1655 -------------------------------------------------------------------
1656 -----concurrent manager program for cloned src instance
1657 PROCEDURE sync_cloned_src_pub_data_cp(Errbuf  IN OUT NOCOPY  VARCHAR2,
1658 				  		  Retcode IN OUT NOCOPY  PLS_INTEGER,
1659 						  p_decomm_flag IN VARCHAR2)
1660 
1661 IS
1662 
1663 v_run_id       NUMBER := 0.0;
1664 v_sync_status  VARCHAR2(1);
1665 l_src_instance cz_servers.instance_name%TYPE;
1666 
1667 BEGIN
1668    Retcode:=0;
1669    Errbuf := NULL;
1670 
1671    SELECT name INTO l_src_instance from v$database;
1672    sync_cloned_src_pub_data(p_decomm_flag,v_run_id,v_sync_status);
1673    IF (v_sync_status = FND_API.G_RET_STS_ERROR) THEN
1674       Errbuf := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_FAILURE', 'INSTANCENAME',l_src_instance );
1675 	Retcode:= 2;
1676    END IF;
1677 EXCEPTION
1678 WHEN OTHERS THEN
1679     Retcode := 2;
1680     Errbuf := CZ_UTILS.GET_TEXT('CZ_PB_SYNC_FAILURE', 'TGTINSTANCE',l_src_instance );
1681 END sync_cloned_src_pub_data_cp;
1682 
1683 
1684 ---------------------------------------------------------------------
1685 
1686 END cz_pb_sync; /* end of package */