всё про API в CAD/PLM/PDM
 
Добавить файл к объекту

Добавить файл к объекту

Для того, чтобы добавить файл к объекту, надо сначала получить объект, добавить (если его там нет) атрибут «файл» и после записать туда файл.

using System;
using System.IO;
using Intermech;
using Intermech.Interfaces;

var pathToFile = "D:\1.txt";
var docObject = scriptSession.GetObject(9999);

var objAttrFile = scriptSession.GetObjectAttribute(docObject.ObjectID, MetaDataHelper.GetAttributeTypeID(SystemGUIDs.attributeFile), false, false)
?? docObject.Attributes.AddAttribute(MetaDataHelper.GetAttributeTypeID(SystemGUIDs.attributeFile), false);

var fileNameService = scriptSession.GetCustomService(typeof(IFileNamesService)) as IFileNamesService;
var newFileName = fileNameService.GetUniqueFileName(Path.GetFileName(pathToFile), docObject.ObjectID, scriptSession.SessionGUID);

using (var fs = new FileStream(pathToFile, FileMode.Open, FileAccess.Read))
{
  var bi = new BlobInformation(0, 0, DateTime.Now, newFileName, ArcMethods.ZLibPacked, "Тут будет комент", FileTypes.ftNormal, scriptSession.UserID);
  var bpc = new BlobProcWriter(objAttrFile, 0, bi, fs, null, null);
  bpc.WriteData(scriptSession);
}

Но это, так сказать, низкоуровневое добавление. Если надо из клиента просто добавить/обновить, то можно это сделать вот таким вот методом:

using Intermech;
using Intermech.Files;
using Intermech.Interfaces;
using Intermech.Interfaces.Client;
using Intermech.Files;
using System;
using System.IO;

 var pathToFile = "D:\\1.txt";
 var docObject = scriptSession.GetObject(9999);

 var fileInfo = new FileInfo(pathToFile);
 var uploadState = new FileState(Path.GetFileName(pathToFile), fileInfo.LastWriteTimeUtc, fileInfo.Length);
 var uploadAction = new UploadFileAction(uploadState, pathToFile);
 uploadAction.AllowNewFiles = true;
 uploadAction.FileType = FileTypes.ftNormal;
 FileOperations.BatchUpdateFiles(docObject.ObjectID, new IFileAttributeAction[] { uploadAction });
 new TrackUploadedFileAction(ClientContext.FileVault.WorkArea.FileTracker, docObject.ObjectID, uploadAction).Perform();


При этом, необходимо учесть следующее при таком добавлении:

  • Что документ на своем шаге ЖЦ позволяет добавлять файл.
  • Что файл достаточного размера. Бывали у меня случаи загрузки over 5 гигов файлов и там подход интереснее.