Перейти к публикации

TCComponentTcFile.getFile() возвращает старую версию файла


alexeytur

Рекомендованные сообщения

Добрый день.

Дано: плагин для TeamCenter на Java, в нём у ревизии CAM-проекта получаю дочерний узел MENCProgram, а у него - узел CAM dataset, содержащий управляющую программу. Эту управляющую программу извлекаю в файловую систему.

Проблема: мой код почему-то извлекает старую версию УП - если перед этим сохранить prt  в NX, то будет извлечена УП из предыдущего сохранения, отстающего на несколько минут. Но если встать на CAM dataset и вручную извлечь через именованные ссылки, то сохранится актуальная версия. В отладке смотрю, всё правильно до метода TCComponentTcFile.getFile(), он почему-то сохраняет файл, отстающий на несколько минут. В чем может быть ошибка?

			if (comp.getTypeComponent().toString().contains("MENCProgram")) 
			{
				try 
				{
					String itemRevId = "error", itemId = "error";
					AIFComponentContext[] compUsed = comp.whereReferenced(); //где используется компонент MENCProgram
					for (AIFComponentContext compU : compUsed) 
					{
						InterfaceAIFComponent compI = compU.getComponent();
						TCComponent compTC = (TCComponent)compI; //преобразование в TCComponent compTC
						if (compTC.getTypeComponent().toString().contains("MEActivity")) 
						{
							AIFComponentContext[] compTCUsed = compTC.whereReferenced(); //где используется компонент TCComponent compTC
							for (AIFComponentContext compTCU : compTCUsed) 
							{
								InterfaceAIFComponent compTCI = compTCU.getComponent();
								TCComponent compTC2 = (TCComponent)compTCI; //преобразование в TCComponent compTC2
								TCComponentItemRevision itemRev = (TCComponentItemRevision)compTC2; //преобразование в TCComponentItemRevision itemRev
								if (compTC2.getTypeComponent().toString().contains("RH5_CAMProjectRevision")) 
								{
									itemRevId = itemRev.getProperty("item_revision_id"); //получение item_revision_id
									TCComponentItem item = itemRev.getItem(); //получение самого item
									itemId = item.getProperty("item_id"); //получение item_id
								}
							}
						}
					}
					String sFirstPartPath = "D:\\Siemens\\NCF_Projects\\";
					String sPath = sFirstPartPath + itemId + "\\" + itemRevId + "\\UP";
					path = Paths.get(sPath);
					if (!Files.exists(path)) 
					{
						File dir = new File(sPath);
					    dir.mkdirs();
					}
					/* else 
					{
						File dir = new File(sPath);
						ClearLocalFolder.recursiveDelete(dir);
						Thread.sleep(1000);
						dir.mkdirs();
					}*/
					DownloadUPo(comp, sPath);
				} 
				catch (TCException e/* | InterruptedException e*/) 
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

	protected void DownloadUPo(TCComponent activityComp, String folder) 
	{
		try 
		{
			TCComponent[] achPrComps = activityComp.getRelatedComponents();		 //все объекты в отношениях с TCComponent activityComp
			for (TCComponent achPrComp : achPrComps) 
			{
				if (achPrComp.getTypeComponent().toString().contains("UGCAMPTP")) 
				{ //если объект нужного типа
					TCComponentDataset cam_dataset = (TCComponentDataset)achPrComp;
					TCComponentTcFile tc_files[] = cam_dataset.getTcFiles(); //получаем файлы TCComponentDataset cam_dataset
					for (TCComponentTcFile tc_file : tc_files)
					{
						SaveTcFile(tc_file, folder);
					}
				}
			}
		} 
		catch (TCException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();//
		}
	}
	
	// Сохраняет объект tc_file в папку
	protected void SaveTcFile(TCComponentTcFile tc_file, String folder)
	{
		try
		{
			String file_path = folder + "\\"+ tc_file.toString();
			File file = new File(file_path);
			Path fp = Paths.get(file_path);
			if (Files.exists(fp)) 
			{
				boolean answer_rewrite = MessageDialog.openQuestion(window.getShell(),"Файл уже существует", "Перезаписать файл\n\n" + file_path + "\n\n?");
				if (answer_rewrite) 
				{ 
					file.delete();
					tc_file.getFile(folder);
					file.setLastModified(System.currentTimeMillis());
				}
			}
			else 
			{
				tc_file.getFile(folder);											
				file.setLastModified(System.currentTimeMillis());
			}	
		}
		catch (TCException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

img.jpg

Ссылка на сообщение
Поделиться на других сайтах


@koner

Я сделал

TCComponentDataset cam_dataset = (TCComponentDataset)achPrComp;
cam_dataset.clearCache();

Вроде работает. Это правильное решение?

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...