You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
7.6 KiB
186 lines
7.6 KiB
using System.IO;
|
|
|
|
using Teamcenter.ClientX;
|
|
using Teamcenter.Services.Loose.Core._2006_03.FileManagement;
|
|
using Teamcenter.Services.Strong.Core;
|
|
using Teamcenter.Services.Strong.Core._2006_03.DataManagement;
|
|
using Teamcenter.Services.Strong.Core._2008_06.DataManagement;
|
|
using Teamcenter.Soa.Client;
|
|
using Teamcenter.Soa.Client.Model;
|
|
using Teamcenter.Soa.Exceptions;
|
|
|
|
namespace Teamcenter.FMS
|
|
{
|
|
/**
|
|
* Use the FileManagementService to transfer files
|
|
*/
|
|
public class FileManagement
|
|
{
|
|
/** The number of datasets to upload in the multiple file example. */
|
|
static int NUMBER_OF_DATASETS = 120;
|
|
|
|
/** The number of files per dataset to upload in the multiple file example. */
|
|
static int NUMBER_OF_FILES_PER_DATASET = 3;
|
|
|
|
/** Upload some files using the FileManagement utilities. */
|
|
public void uploadFiles()
|
|
{
|
|
FileManagementUtility fmsFileManagement = new FileManagementUtility(Session.getConnection());
|
|
DataManagementService dmService = DataManagementService.getService(Session.getConnection());
|
|
try
|
|
{
|
|
uploadSingleFile(fmsFileManagement, dmService);
|
|
uploadMultipleFiles(fmsFileManagement, dmService);
|
|
}
|
|
finally
|
|
{
|
|
// Close FMS connection when done
|
|
fmsFileManagement.Term();
|
|
}
|
|
}
|
|
|
|
/** Uploads a single file using the FileManagement utilities. */
|
|
public void uploadSingleFile(FileManagementUtility fmsFileManagement, DataManagementService dmService)
|
|
{
|
|
GetDatasetWriteTicketsInputData[] inputs = { getSingleGetDatasetWriteTicketsInputData(dmService) };
|
|
ServiceData response = fmsFileManagement.PutFiles(inputs);
|
|
|
|
if (response.sizeOfPartialErrors() > 0)
|
|
System.Console.Out.WriteLine("FileManagementService single upload returned partial errrors: " + response.sizeOfPartialErrors());
|
|
|
|
// Delete all objects created
|
|
ModelObject[] datasets = { inputs[0].Dataset };
|
|
dmService.DeleteObjects(datasets);
|
|
}
|
|
|
|
/** Uploads multiple files using the FileManagement utilities. */
|
|
public void uploadMultipleFiles(FileManagementUtility fMSFileManagement, DataManagementService dmService)
|
|
{
|
|
GetDatasetWriteTicketsInputData[] inputs = getMultipleGetDatasetWriteTicketsInputData(dmService);
|
|
ServiceData response = fMSFileManagement.PutFiles(inputs);
|
|
|
|
if (response.sizeOfPartialErrors() > 0)
|
|
System.Console.Out.WriteLine("FileManagementService multiple upload returned partial errrors: " + response.sizeOfPartialErrors());
|
|
|
|
// Delete all objects created
|
|
ModelObject[] datasets = new ModelObject[inputs.Length];
|
|
for (int i = 0; i < inputs.Length; ++i)
|
|
{
|
|
datasets[i] = inputs[i].Dataset;
|
|
}
|
|
dmService.DeleteObjects(datasets);
|
|
}
|
|
|
|
/** @return A single GetDatasetWriteTicketsInputData for uploading ReadMe.txt. */
|
|
private GetDatasetWriteTicketsInputData getSingleGetDatasetWriteTicketsInputData(DataManagementService dmService)
|
|
{
|
|
// Create a Dataset
|
|
DatasetProperties2 props = new DatasetProperties2();
|
|
props.ClientId = "datasetWriteTixTestClientId";
|
|
props.Type = "Text";
|
|
props.Name = "Sample-FMS-Upload";
|
|
props.Description = "Testing put File";
|
|
DatasetProperties2[] currProps = { props };
|
|
|
|
CreateDatasetsResponse resp = dmService.CreateDatasets2(currProps);
|
|
|
|
// Assume this file is in current dir
|
|
FileInfo file1 = new FileInfo("ReadMe.txt");
|
|
|
|
// Create a file to associate with dataset
|
|
DatasetFileInfo fileInfo = new DatasetFileInfo();
|
|
fileInfo.ClientId = "file_1";
|
|
fileInfo.FileName = file1.FullName;
|
|
fileInfo.NamedReferencedName = "Text";
|
|
fileInfo.IsText = true;
|
|
fileInfo.AllowReplace = false;
|
|
DatasetFileInfo[] fileInfos = { fileInfo };
|
|
|
|
GetDatasetWriteTicketsInputData inputData = new GetDatasetWriteTicketsInputData();
|
|
inputData.Dataset = resp.Output[0].Dataset;
|
|
inputData.CreateNewVersion = false;
|
|
inputData.DatasetFileInfos = fileInfos;
|
|
|
|
return inputData;
|
|
}
|
|
|
|
/**
|
|
* @return An array of NUMBER_OF_DATASETS GetDatasetWriteTicketsInputData objects
|
|
* for uploading NUMBER_OF_FILES_PER_DATASET copies of ReadMe.txt to each Dataset.
|
|
*/
|
|
private GetDatasetWriteTicketsInputData[] getMultipleGetDatasetWriteTicketsInputData(DataManagementService dmService)
|
|
{
|
|
GetDatasetWriteTicketsInputData[] inputs = new GetDatasetWriteTicketsInputData[NUMBER_OF_DATASETS];
|
|
DatasetProperties2[] currProps = new DatasetProperties2[inputs.Length];
|
|
|
|
// Create a bunch of Datasets
|
|
for (int i = 0; i < inputs.Length; ++i)
|
|
{
|
|
DatasetProperties2 props = new DatasetProperties2();
|
|
props.ClientId = "datasetWriteTixTestClientId " + i;
|
|
props.Type = "Text";
|
|
props.Name = "Sample-FMS-Upload-" + i;
|
|
props.Description = "Testing Multiple put File";
|
|
currProps[i] = props;
|
|
}
|
|
|
|
CreateDatasetsResponse resp = dmService.CreateDatasets2(currProps);
|
|
|
|
// Create files to associate with each Dataset
|
|
for (int i = 0; i < inputs.Length; ++i)
|
|
{
|
|
DatasetFileInfo[] fileInfos = new DatasetFileInfo[NUMBER_OF_FILES_PER_DATASET];
|
|
for (int j = 0; j < fileInfos.Length; ++j)
|
|
{
|
|
DatasetFileInfo fileInfo = new DatasetFileInfo();
|
|
|
|
// Create different filenames to be uploaded into the same dataset
|
|
// Create or use this file in current dir
|
|
FileInfo file1 = new FileInfo("ReadMeCopy" + j + ".txt");
|
|
assureFileCreated(file1);
|
|
|
|
fileInfo.ClientId = "Dataset " + i + " File " + j;
|
|
fileInfo.FileName = file1.FullName;
|
|
fileInfo.NamedReferencedName = "Text";
|
|
fileInfo.IsText = true;
|
|
fileInfo.AllowReplace = false;
|
|
fileInfos[j] = fileInfo;
|
|
}
|
|
|
|
GetDatasetWriteTicketsInputData inputData = new GetDatasetWriteTicketsInputData();
|
|
inputData.Dataset = resp.Output[i].Dataset;
|
|
inputData.CreateNewVersion = false;
|
|
inputData.DatasetFileInfos = fileInfos;
|
|
|
|
inputs[i] = inputData;
|
|
}
|
|
return inputs;
|
|
}
|
|
|
|
/**
|
|
* Assures that the file exists on the file system.
|
|
* If not, this method copies "ReadMe.txt" to create the file.
|
|
* @param file1 (FileInfo) The file to be created if it does not already exist.
|
|
*/
|
|
private void assureFileCreated(FileInfo file1)
|
|
{
|
|
if (file1.Exists)
|
|
{
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
// Assume this file is in current dir
|
|
// and that we can copy it in the current dir
|
|
File.Copy("ReadMe.txt", file1.Name);
|
|
}
|
|
catch(IOException ex)
|
|
{
|
|
System.Console.Out.WriteLine("Could not copy 'ReadMe.txt' to " + file1.Name
|
|
+ "-" + ex.Message );
|
|
}
|
|
}
|
|
}
|
|
}
|