SOA client example to download Named References (ImanFile) Symptom --------------- How do I download Named References (ImanFile) using java SOA? Hardware/Software Configuration Family : TEAMCENTER Application : SOA_FRAMEWORK Function : JAVA_CLIENT Subfunction : ALL Release : V2007.1.3 Solution The developer can easily use the HelloTeamcenter SOA example (soa_client\java\samples\HelloTeamcenter) to run this example code. In the Hello.java after User object is retrieved make the following calls: UploadDownloadFile2 uploaddownload = new UploadDownloadFile2(user); uploaddownload.CreateItemItemRevDataset(); uploaddownload.AddNamedReference(); uploaddownload.DownloadAttachedFile(); ----------------------- UploadDownloadFile2.java ------------------------ package com.teamcenter.hello; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import com.teamcenter.clientx.Session; import com.teamcenter.services.loose.core._2006_03.FileManagement.DatasetFileInfo; import com.teamcenter.services.loose.core._2006_03.FileManagement.GetDatasetWriteTicke tsInputData; import com.teamcenter.services.strong.core.DataManagementService; import com.teamcenter.services.strong.core._2006_03.DataManagement.CreateDatasetsRespo nse; import com.teamcenter.services.strong.core._2006_03.DataManagement.CreateItemsResponse ; import com.teamcenter.services.strong.core._2006_03.DataManagement.DatasetProperties; import com.teamcenter.services.strong.core._2006_03.DataManagement.ItemProperties; import com.teamcenter.soa.client.FileManagementUtility; import com.teamcenter.soa.client.GetFileResponse; import com.teamcenter.soa.client.model.ModelManager; import com.teamcenter.soa.client.model.ModelObject; import com.teamcenter.soa.client.model.Property; import com.teamcenter.soa.client.model.strong.Dataset; import com.teamcenter.soa.client.model.strong.Folder; import com.teamcenter.soa.client.model.strong.ImanFile; import com.teamcenter.soa.client.model.strong.Item; import com.teamcenter.soa.client.model.strong.ItemRevision; import com.teamcenter.soa.client.model.strong.Text; import com.teamcenter.soa.client.model.strong.User; import com.teamcenter.soa.exceptions.NotLoadedException; public class UploadDownloadFile2 { private DataManagementService dservice; private FileManagementUtility fileUtility; private Folder homeFolder; private Item item; private ItemRevision itemRev; private Dataset dataset; private final String fileName = "c:\\temp\\ReadMe.txt"; private final char[] newline = new char[]{'\r', '\n'}; public UploadDownloadFile2(User user) { dservice = DataManagementService.getService(Session.getConnection()); fileUtility = new FileManagementUtility(Session.getConnection()); try { homeFolder = user.get_home_folder(); } catch (NotLoadedException e) { e.printStackTrace(); } } public void CreateItemItemRevDataset() { ItemProperties itemProps[] = new ItemProperties[1]; itemProps[0] = new ItemProperties(); itemProps[0].name = "myItem1"; itemProps[0].description = "My first item"; CreateItemsResponse itemResp = dservice.createItems(itemProps, homeFolder, ""); item = itemResp.output[0].item; itemRev = itemResp.output[0].itemRev; DatasetProperties[] dataProps = new DatasetProperties[] { new DatasetProperties()}; dataProps[0].clientId = "MyID123456789"; dataProps[0].name = "myDataSet1"; dataProps[0].description = "First Dataset"; dataProps[0].relationType = "IMAN_reference"; dataProps[0].type = "Text"; dataProps[0].toolUsed = "TextEditor"; dataProps[0].container = itemRev; CreateDatasetsResponse dataResp = dservice.createDatasets(dataProps); dataset = dataResp.output[0].dataset; } public void AddNamedReference() { GetDatasetWriteTicketsInputData inputData = getGetDatasetWriteTicketsInputData("First line in attached text file.", false); GetDatasetWriteTicketsInputData[] inputs = new GetDatasetWriteTicketsInputData[] { inputData }; fileUtility.putFiles(inputs); } public void DownloadAttachedFile() { ModelObject[] objs = new ModelObject[] { itemRev }; dservice.getProperties(objs, new String[]{ "IMAN_reference" }); // explicitly inflate the IMAN_reference property for get_IMAN_reference() call. try { objs = itemRev.get_IMAN_reference(); // get the dataset, already have it, just and exercise in how. if(objs[0] instanceof Text) { dservice.getProperties(objs, new String[] { "ref_list" }); Property refListProperty = objs[0].getProperty("ref_list"); // get the ImanFiles, also known as "Named References" ModelObject[] refObjs = refListProperty.getModelObjectArrayValue(); if(refObjs[0] instanceof ImanFile) { GetFileResponse fileResp = fileUtility.getFiles(refObjs); File[] files = fileResp.getFiles(); for(File file : files) { String name = System.getenv("HOMEDRIVE") + System.getenv("HOMEPATH") + "\\Desktop\\" + refListProperty.getDisplayValue(); // place the file on the client's desktop. try { File dest = new File(name); if(!dest.isFile()) dest.createNewFile(); FileReader reader = new FileReader(file); FileWriter writer = new FileWriter(dest); char[] array = new char[1024]; for(int more = reader.read(array); more > -1; more = reader.read(array)) writer.write(array); reader.close(); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); return; } } } // fileUtility.term(); } } catch (NotLoadedException e2) { e2.printStackTrace(); } } private GetDatasetWriteTicketsInputData getGetDatasetWriteTicketsInputData(String msg, boolean append) { DatasetFileInfo fileInfo = new DatasetFileInfo(); DatasetFileInfo[] fileInfos = new DatasetFileInfo[1]; File file = new File(fileName); try { FileWriter writer = new FileWriter(file, append); if(append) writer.write(newline); writer.write(msg); writer.flush(); writer.close(); } catch (IOException e) { e.printStackTrace(); } fileInfo.clientId = "file_1"; fileInfo.fileName = file.getAbsolutePath(); fileInfo.namedReferencedName = "Text"; fileInfo.isText = true; fileInfo.allowReplace = false; fileInfos[0] = fileInfo; GetDatasetWriteTicketsInputData inputData = new GetDatasetWriteTicketsInputData(); inputData.dataset = dataset; inputData.createNewVersion = true; inputData.datasetFileInfos = fileInfos; return inputData; } }