public void BrowseButton_Click(System.Object sender, System.EventArgs e) { try { //Set the initial directory in the Select a file dialog OpenFileDialog1.InitialDirectory = vault1.RootFolderPath; //Show the Select a file dialog System.Windows.Forms.DialogResult DialogResult; DialogResult = OpenFileDialog1.ShowDialog(); if (!(DialogResult == System.Windows.Forms.DialogResult.OK)) { // Do nothing } else { // Browse for a file whose serial number to set // File's data card must have a Part Number associated // with a serial number generator and must be checked out string fileName = OpenFileDialog1.FileName; FileListBox.Items.Add(fileName); IEdmFolder5 retFolder = default(IEdmFolder5); aFile = vault1.GetFileFromPath(fileName, out retFolder); } } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
//Display the card of the selected file private void ShowCard(IEdmFolder5 folder, int fileID) { try { if (vault1 == null) { vault1 = new EdmVault5(); } if (!vault1.IsLoggedIn) { vault1.LoginAuto(VaultsComboBox.Text, this.Handle.ToInt32()); } IEdmVault10 vault = (IEdmVault10)vault1; EdmCardViewParams @params = default(EdmCardViewParams); @params.mlFileID = fileID; @params.mlFolderID = folder.ID; @params.mlCardID = 0; @params.mlX = 40; @params.mlY = 300; @params.mhParentWindow = this.Handle.ToInt32(); @params.mlEdmCardViewFlags = (int)EdmCardViewFlag.EdmCvf_Normal; //Create the card view interface view = vault.CreateCardViewEx2(@params, this); if (view == null) { Interaction.MsgBox("The file does not have a card."); return; } //Set input focus to the first control in the card view.SetFocus(0); //Enable all controls in the card view.Update(EdmCardViewUpdateType.EdmCvut_EnableCtrl); //Get the size needed to display the card int width = 0; int height = 0; view.GetCardSize(out width, out height); //Resize the form window to make room for the card this.Width = (width + 100); this.Height = (height + 400); view.ShowWindow(true); SaveCard.Enabled = false; } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void OnCmd(ref EdmCmd poCmd, ref System.Array ppoData) { //public void OnCmd(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) //{ EdmVault5 vault = (EdmVault5)poCmd.mpoVault; if (poCmd.meCmdType == EdmCmdType.EdmCmd_Menu) { if (poCmd.mlCmdID == 1) { if (ppoData.Length < 0) { System.Windows.Forms.MessageBox.Show("请选择一个文件"); return; } if (ppoData.Length > 1) { System.Windows.Forms.MessageBox.Show("只能选择一个文件"); return; } int fileId = 0; int parentFolderId = 0; foreach (EdmCmdData AffectedFile in ppoData) { fileId = AffectedFile.mlObjectID1; parentFolderId = AffectedFile.mlObjectID3; } if (fileId == 0) { System.Windows.Forms.MessageBox.Show("请选择一个文件"); return; } ExportExcelForm form = new ExportExcelForm(); IEdmFile5 file = (IEdmFile5)vault.GetObject(EdmObjectType.EdmObject_File, fileId); IEdmFolder5 folder = (IEdmFolder5)vault.GetObject(EdmObjectType.EdmObject_Folder, parentFolderId); string filePath = folder.LocalPath + "\\" + file.Name; form.selectFile = filePath; if (form.ShowDialog() == DialogResult.OK) { string outFile = form.saveFilePath; FormStatusBar statusBar = new FormStatusBar("明细表导出", "正在导出,请稍后...."); statusBar.UserCustomEvent += (obj) => { exportExcel(vault, form.selectFile, form.saveFilePath); }; statusBar.ShowDialog(); } GC.Collect(); } } }
private static bool GetReferencedFiles(IEdmVault5 vault, IEdmReference10 reference, string filePath, string projectName, ref List <string> refFiles) { try { bool bTop = false; if (reference == null) { bTop = true; SWFileType type = GetSWFileType(filePath); if (type != SWFileType.UNKNOWN) { refFiles.Add(filePath); IEdmFile5 edmFile; IEdmFolder5 edmFolder = null; if (!GetFileFromPath(vault, filePath, out edmFile, out edmFolder)) { return(false); } reference = (IEdmReference10)edmFile.GetReferenceTree(edmFolder.ID); if (type == SWFileType.ASSEMBLY) //装配体递归 { GetReferencedFiles(vault, reference, "", projectName, ref refFiles); } } } else { IEdmPos5 pos = default(IEdmPos5); pos = reference.GetFirstChildPosition3(projectName, bTop, true, (int)EdmRefFlags.EdmRef_File, "", 0); while ((!pos.IsNull)) { IEdmReference10 @ref = (IEdmReference10)reference.GetNextChild(pos); SWFileType type = GetSWFileType(@ref.FoundPath); if (type != SWFileType.UNKNOWN) { if (!refFiles.Contains(@ref.FoundPath)) { refFiles.Add(@ref.FoundPath); if (type == SWFileType.ASSEMBLY) //装配体递归 { GetReferencedFiles(vault, @ref, "", projectName, ref refFiles); } } } } } return(true); } catch (Exception ex) { return(false); } }
public static void UnLock(IEdmVault7 vault, List <Files.Info> files) { Logger.Add($"Начало регистрации {files?.Count} файлов."); try { ppoSelection = new EdmSelItem[files.Count]; batchUnlocker = (IEdmBatchUnlock)vault.CreateUtility(EdmUtility.EdmUtil_BatchUnlock); var i = 0; foreach (var file in files) { try { var filePath = file.FolderPath + "\\" + file.ConvertFile; fileNameErr = filePath; IEdmFolder5 folder = default(IEdmFolder5); aFile = vault.GetFileFromPath(filePath, out folder); aPos = aFile.GetFirstFolderPosition(); aFolder = aFile.GetNextFolder(aPos); ppoSelection[i] = new EdmSelItem(); ppoSelection[i].mlDocID = aFile.ID; ppoSelection[i].mlProjID = aFolder.ID; i = i + 1; } catch (Exception ex) { Logger.Add($"Ошибка при добавлении файла на регистрацию: {ex.Message} Path: {file.FullFilePath} IdPDM: {file.IdPDM} FolderID: {file.FolderID} Version: {file.CurrentVersion}"); } } // Add selections to the batch of files to check in batchUnlocker.AddSelection((EdmVault5)vault, ppoSelection); if ((batchUnlocker != null)) { batchUnlocker.CreateTree(0, (int)EdmUnlockBuildTreeFlags.Eubtf_ShowCloseAfterCheckinOption + (int)EdmUnlockBuildTreeFlags.Eubtf_MayUnlock); fileList = (IEdmSelectionList6)batchUnlocker.GetFileList((int)EdmUnlockFileListFlag.Euflf_GetUnlocked + (int)EdmUnlockFileListFlag.Euflf_GetUndoLocked + (int)EdmUnlockFileListFlag.Euflf_GetUnprocessed); batchUnlocker.UnlockFiles(0, null); } } catch (COMException ex) { Logger.Add("ERROR BatchUnLock файл: '" + fileNameErr + "', " + ex.StackTrace + " " + ex.Message); } catch (Exception ex) { Logger.Add("ERROR BatchUnLock: '" + fileNameErr + "', " + ex.StackTrace + " " + ex.Message); } Logger.Add($"Завершена регистрации {files?.Count} файлов."); }
private static bool TryLockFile(IEdmFile5 file, IEdmFolder5 parentFolder, out int?edmResultCode) { try { file.LockFile(parentFolder.ID, 0, (int)EdmLockFlag.EdmLock_Simple); edmResultCode = null; return(true); } catch (System.Runtime.InteropServices.COMException ex) { edmResultCode = ex.ErrorCode; return(false); } }
public void ShowReferences(EdmVault5 vault, string filePath) { // ERROR: Not supported in C#: OnErrorStatement string projName = null; IEdmFile5 file = default(IEdmFile5); IEdmFolder5 folder = default(IEdmFolder5); file = vault.GetFileFromPath(filePath, out folder); IEdmReference5 @ref = default(IEdmReference5); @ref = file.GetReferenceTree(folder.ID, 0); AddReferences(@ref, 0, ref projName); }
public void GetReferencedFiles(IEdmReference10 Reference, string FilePath, int Level, string ProjectName, ref Dictionary <string, string> RefFilesDictionary) { try { bool Top = false; if (Reference == null) { //This is the first time this function is called for this //reference tree; i.e., this is the root Top = true; //Add the top-level file path to the dictionary RefFilesDictionary.Add(FilePath, Level.ToString()); IEdmFile5 File = null; IEdmFolder5 ParentFolder = null; File = vault1.GetFileFromPath(FilePath, out ParentFolder); //Get the reference tree for this file Reference = (IEdmReference10)File.GetReferenceTree(ParentFolder.ID); GetReferencedFiles(Reference, "", Level + 1, ProjectName, ref RefFilesDictionary); } else { //Execute this code when this function is called recursively; //i.e., this is not the top-level IEdmReference in the tree //Recursively traverse the references IEdmPos5 pos = default(IEdmPos5); IEdmReference10 Reference2 = (IEdmReference10)Reference; pos = Reference2.GetFirstChildPosition3(ProjectName, Top, true, (int)EdmRefFlags.EdmRef_File, "", 0); IEdmReference10 @ref = default(IEdmReference10); while ((!pos.IsNull)) { @ref = (IEdmReference10)Reference.GetNextChild(pos); RefFilesDictionary.Add(@ref.FoundPath, Level.ToString()); GetReferencedFiles(@ref, "", Level + 1, ProjectName, ref RefFilesDictionary); } } } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
internal IEdmFile5 GetEdmFile5(string path, out IEdmFolder5 folder) { folder = null; try { IEdmFolder5 oFolder; var edmFile5 = PdmExemplar.GetFileFromPath(path, out oFolder); edmFile5.GetFileCopy(0, 0, oFolder.ID, (int)EdmGetFlag.EdmGet_RefsVerLatest); folder = oFolder; return(edmFile5); } catch (Exception exception) { //Логгер.Ошибка($"Message - {exception.ToString()}\nPath - {path}\nStackTrace - {exception.StackTrace}", null, "GetEdmFile5", "SwEpdm"); throw exception; } }
internal static IEdmFile5 GetEdmFile5(string path, out IEdmFolder5 folder) { folder = null; try { IEdmFolder5 oFolder; var edmFile5 = edmVault5.GetFileFromPath(path, out oFolder); edmFile5.GetFileCopy(0, 0, oFolder.ID, (int)EdmGetFlag.EdmGet_RefsVerLatest); folder = oFolder; return(edmFile5); } catch (Exception exception) { Логгер.Ошибка($"Message - {exception.Message}\nPath - {path}\nStackTrace - {exception.StackTrace}", null, "GetEdmFile5", "SwEpdm"); //MessageBox.Show(exception.Message + "\n" + exception.StackTrace + "\n" + path); return(null); } }
private static bool RecursivelyAddFolder(IEdmVault5 vault, IEdmFolder5 rootFolder, string[] subFolders, out IEdmFolder9 outFolder) { outFolder = null; if (vault == null || rootFolder == null) { return(false); } if (subFolders.Length == 0) { return(true); } IEdmFolder5 tempFolder = rootFolder; try { for (int i = 0; i < subFolders.Length; ++i) { IEdmFolder5 subFolder; string folderPath = Path.Combine(tempFolder.LocalPath, subFolders[i]); subFolder = vault.GetFolderFromPath(folderPath); if (subFolder == null) { subFolder = tempFolder.AddFolder(0, subFolders[i]); if (subFolder == null) { return(false); } } tempFolder = subFolder; } outFolder = tempFolder as IEdmFolder9; return(outFolder != null); } catch (Exception ex) { return(false); } }
/// <summary> /// 【10】获取文件版本 /// </summary> /// <param name="path">文件在PDM中路径</param> /// <returns></returns> public static int GetDrawVersion(string path) { if (vault == null) { vault = new EdmVault5(); } if (!vault.IsLoggedIn) { vault.LoginAuto(VaultName, new Control().Handle.ToInt32()); } IEdmFolder5 retFolder = default(IEdmFolder5); //aFile = vault1.GetFileFromPath(FileName, out retFolder); IEdmFile5 file = null; file = vault.GetFileFromPath(path, out retFolder); IEdmEnumeratorVersion5 enumVersion; enumVersion = (IEdmEnumeratorVersion5)file; return(enumVersion.VersionCount); }
private void OnTaskRun(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { IEdmTaskInstance inst = default(IEdmTaskInstance); inst = (IEdmTaskInstance)poCmd.mpoExtra; IEdmVault5 vault = new EdmVault5(); try { for (int i = 0; i < ppoData.Length; i++) { if (((EdmCmdData)ppoData.GetValue(0)).mlObjectID1 != 0) { vault = (IEdmVault5)poCmd.mpoVault; IEdmObject5 folderObject = vault.GetObject(EdmObjectType.EdmObject_Folder, ((EdmCmdData)ppoData.GetValue(i)).mlObjectID2); IEdmFolder5 ef = (IEdmFolder5)folderObject; IEdmObject5 fileObject = vault.GetObject(EdmObjectType.EdmObject_File, ((EdmCmdData)ppoData.GetValue(i)).mlObjectID1); string fullpath = ef.LocalPath + "\\" + fileObject.Name; DxfLoad dxfl = new DxfLoad(); var sp = dxfl.GetSpecification(fullpath, ""); dxfl.UpLoadDxf(sp); XmlFile xf = new XmlFile(); xf.DownloadXml(fullpath); } SolidWorksPdmAdapter.Instance.KillProcsses("SLDWORKS"); MessageObserver.Instance.SetMessage("End upload.\n"); } } catch (System.Runtime.InteropServices.COMException ex) { inst.SetStatus(EdmTaskStatus.EdmTaskStat_DoneFailed, ex.ErrorCode, "The test task failed!"); } catch (Exception ex) { MessageObserver.Instance.SetMessage(ex.Message); } }
private void OnMenu(ref EdmCmd poCmd, ref EdmCmdData[] ppoData) { try { Logger.Instance.RootDirectory = tempAppFolder; MessageObserver.Instance.ReceivedMessage += Program.Instance_ReceivedMessage; for (int i = 0; i < ppoData.Length; i++) { if (((EdmCmdData)ppoData.GetValue(0)).mlObjectID1 != 0) { IEdmVault5 vault = new EdmVault5(); vault = (IEdmVault5)poCmd.mpoVault; IEdmObject5 folderObject = vault.GetObject(EdmObjectType.EdmObject_Folder, ((EdmCmdData)ppoData.GetValue(i)).mlObjectID3); IEdmFolder5 ef = (IEdmFolder5)folderObject; IEdmObject5 fileObject = vault.GetObject(EdmObjectType.EdmObject_File, ((EdmCmdData)ppoData.GetValue(i)).mlObjectID1); string fullpath = ef.LocalPath + "\\" + fileObject.Name; DxfLoad dxfl = new DxfLoad(); var sp = dxfl.GetSpecification(fullpath, ""); dxfl.UpLoadDxf(sp); //XmlFile xf = new XmlFile(); //xf.DownloadXml(fullpath); } SolidWorksPdmAdapter.Instance.KillProcsses("SLDWORKS"); //MessageObserver.Instance.SetMessage("End upload.\n"); } } catch (Exception ex) { MessageObserver.Instance.SetMessage(ex.Message); throw; } }
///// <summary> ///// Download file in to local directory. ///// </summary> ///// <param name="dataModel"></param> //public string GetPathAndDownLoadFile(DataModel dataModel, string directoryPath) //{ // this.PDMInitialize(); // IEdmFolder5 srcFolder = null; // IEdmFile5 file = edmVault5.GetFileFromPath(dataModel.Path,out srcFolder); // IEdmVault7 vault2 = (IEdmVault7)this.edmVault5; // IEdmFolder5 edmFolder5 = vault2.GetFolderFromPath(directoryPath); // IEdmFolder8 edmFolder8 = (IEdmFolder8)edmFolder5; // int copyFileStatus; // edmFolder8.CopyFile2(file.ID, srcFolder.ID, 0, out copyFileStatus, "", (int)EdmCopyFlag.EdmCpy_Simple); // //var batchGetter = (IEdmBatchGet)(edmVault5 as IEdmVault7).CreateUtility(EdmUtility.EdmUtil_BatchGet); // // batchGetter.AddSelectionEx((EdmVault5)edmVault5, dataModel.Id, dataModel.FolderId, 0); // // if ((batchGetter != null)) // // { // // batchGetter.CreateTree(0, (int)EdmGetCmdFlags.Egcf_SkipUnlockedWritable); // // batchGetter.GetFiles(0, null); // // } // return null; //} /// <summary> /// Reference in to the components of assembly. /// </summary> /// <param name="file"></param> /// <param name="indent"></param> /// <param name="projName"></param> /// <returns></returns> private string AddReferences(IEdmReference5 file, long indent, ref string projName) { string filename = null; filename = filename + file.Name; const bool isTop = false; IEdmVault7 vault2 = null; if (edmVault5 == null) { edmVault5 = new EdmVault5(); } vault2 = (IEdmVault7)edmVault5; if (!edmVault5.IsLoggedIn) { edmVault5.LoginAuto(vaultname, 0); } IEdmPos5 pos = file.GetFirstChildPosition(projName, isTop, true, 0); IEdmFolder5 oFolder = null; while (!(pos.IsNull)) { IEdmReference5 @ref = file.GetNextChild(pos); var oFile = (IEdmFile5)edmVault5.GetFileFromPath(@ref.FoundPath, out oFolder); filename = filename + AddReferences(@ref, indent, ref projName); //MessageBox.Show(filename); // Последняя копия перечня в сборке oFile.GetFileCopy(0, "", @ref.FoundPath); } return(filename); }
/// <summary> /// 【6】pdm库内复制文件,返回pdm中文件全路径(包含文件名) /// </summary> /// <param name="oldFile">旧文件位置</param> /// <param name="newFolder">新文件夹位置</param> public static string CopyFile(string oldFile, string newFolder) { IEdmVault5 vault1 = new EdmVault5(); vault1.Login(LogName, PWD, VaultName); IEdmVault7 vault2 = null; vault2 = (IEdmVault7)vault1; IEdmFile10 file = default(IEdmFile10); IEdmFolder5 ppoRetParentFolder; file = (IEdmFile11)vault2.GetFileFromPath(oldFile, out ppoRetParentFolder); IEdmFolder5 destFolder1 = default(IEdmFolder5); destFolder1 = vault2.GetFolderFromPath(newFolder);//新文件夹位置 IEdmFolder8 destFolder = (IEdmFolder8)destFolder1; int FileID = 0; int copyFileStatus; FileID = destFolder.CopyFile2(file.ID, ppoRetParentFolder.ID, new Control().Handle.ToInt32(), out copyFileStatus, "", (int)EdmCopyFlag.EdmCpy_Simple); return(destFolder1.LocalPath + "\\" + file.Name.Substring(file.Name.LastIndexOf('\\') + 1)); }
/// <summary> /// Traverses an argument vault folder object recursively and returns a <see cref="Folder"/> instance /// representing the complete hierarchical tree structure of the vault folder in question. /// This method could be VERY SLOW depending on the size and depth of the folder structure being traversed. /// </summary> /// <param name="folder"></param> /// <returns></returns> public static Folder GetFolderTree(IEdmFolder5 folder) { Folder folderOut = new Folder() { Id = folder.ID, ParentFolderId = folder.ParentFolder == null ? null : new int?(folder.ParentFolder.ID), // This guards against a potential NullReferenceException only for the vault root folder because it will have a null ParentFolder value. Name = folder.Name, Path = folder.LocalPath, }; IEdmPos5 pos = folder.GetFirstFilePosition(); while (!pos.IsNull) { IEdmFile5 edmFile = folder.GetNextFile(pos); var file = new File() { Id = edmFile.ID, Name = edmFile.Name, Path = edmFile.GetLocalPath(folder.ID) // TODO: AcmePartNo = .... }; folderOut.Files.Add(file); } pos = folder.GetFirstSubFolderPosition(); while (!pos.IsNull) { IEdmFolder5 subFolder = folder.GetNextSubFolder(pos); folderOut.Subfolders.Add( GetFolderTree(subFolder)); } return(folderOut); }
/// <summary> /// 【3】将文件添加到库中指定位置——导入,并返回pdm中文件全路径(包含文件名) /// </summary> /// <param name="FullName">要复制库外文件路径和名称</param> /// <param name="path">库中根目录下具体位置,如“\\03标准规范\\05技术通知单”</param> /// <returns></returns> public static string AddFile(string FullName, string path) { IEdmVault5 vault1 = new EdmVault5(); IEdmVault7 vault2 = (IEdmVault7)vault1; vault1.Login(LogName, PWD, VaultName);//使用管理员登录每个用户不同 // Add selected file to the root folder of the vault IEdmFolder5 Folder = default(IEdmFolder8); Folder = (IEdmFolder8)vault2.RootFolder; Folder = vault2.GetFolderFromPath(Folder.LocalPath + path); string name = FullName.Substring(FullName.LastIndexOf("\\") + 1); if (File.Exists(Folder.LocalPath + "\\" + name)) { MessageBox.Show("文件已经存在,请更改文件名称!", "提示信息"); return(""); } else { Folder.AddFile(new System.Windows.Forms.Control().Handle.ToInt32(), FullName, "", 0); } return(Folder.LocalPath + "\\" + name); }
/// <summary> /// 【7】将文件复制到指定路径(硬盘)——导出 /// </summary> /// <param name="PathInVault">库文件夹根目录下相对路径</param> /// <param name="PathOutVault">本地具体路径</param> public static void CheckoutAndCopy(string PathInVault, string PathOutVault) { try { EdmVault5 vault = new EdmVault5(); vault.Login(LogName, PWD, VaultName); IEdmFile5 file = default(IEdmFile5); IEdmFolder5 folder = null; file = vault.GetFileFromPath(vault.RootFolderPath + PathInVault, out folder);//读取指定文件的位置,PathInVault库文件夹根目录下相对路径 file.LockFile(folder.ID, new System.Windows.Forms.Control().Handle.ToInt32()); file.UndoLockFile(new System.Windows.Forms.Control().Handle.ToInt32(), true); //Copy the file IEdmEnumeratorVersion5 verEnum = default(IEdmEnumeratorVersion5); verEnum = (IEdmEnumeratorVersion5)file; int Version = 0; Version = file.GetLocalVersionNo(folder.ID); IEdmVersion5 ver = default(IEdmVersion5); ver = verEnum.GetVersion(Version); ver.GetFileCopy(new System.Windows.Forms.Control().Handle.ToInt32(), PathOutVault);//PathOutVault本地具体路径 } catch (System.Runtime.InteropServices.COMException ex) { if (ex.ErrorCode.ToString() == "-2147220949") { MessageBox.Show("The selected file is not located in a file vault."); } else { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
internal static IEdmFile5 GetEdmFile5(string path, out IEdmFolder5 folder) { folder = null; try { IEdmFolder5 oFolder; var edmFile5 = edmVault5.GetFileFromPath(path, out oFolder); edmFile5.GetFileCopy(0, 0, oFolder.ID, (int)EdmGetFlag.EdmGet_RefsVerLatest); folder = oFolder; return edmFile5; } catch (Exception exception) { Логгер.Ошибка($"Message - {exception.Message}\nPath - {path}\nStackTrace - {exception.StackTrace}", null, "GetEdmFile5", "SwEpdm"); //MessageBox.Show(exception.Message + "\n" + exception.StackTrace + "\n" + path); return null; } }
public int Add(string fileName, string fFilter, string vName) { int exitCode = 0; IEdmVault5 vault = (IEdmVault5)Activator.CreateInstance(System.Type.GetTypeFromProgID("Conisiolib.EdmVault")); LogIn(ref exitCode, ref vault, vName); if (exitCode != 0) { return(exitCode); } string refFileName = string.Empty; GetFileName(ref refFileName, vault.RootFolderPath, fFilter, 0); if (refFileName == string.Empty) { exitCode = 11; return(exitCode); } if (refFileName.ToLower() == fileName.ToLower()) { exitCode = 12; return(exitCode); } IEdmEnumeratorCustomReference6 addCustRefs = default(IEdmEnumeratorCustomReference6); IEdmFolder5 rFolder = default(IEdmFolder5); IEdmFile5 rFile = default(IEdmFile5); IEdmFolder5 zFolder = default(IEdmFolder5); IEdmFile5 file = default(IEdmFile5); try { rFile = vault.GetFileFromPath(refFileName, out rFolder); file = vault.GetFileFromPath(fileName, out zFolder); if (rFile == null | file == null) { exitCode = 13; return(exitCode); } if (!file.IsLocked) { exitCode = 14; return(exitCode); } addCustRefs = (IEdmEnumeratorCustomReference6)file; try { addCustRefs.AddReference2(rFile.ID, rFolder.ID, 1); } catch (COMException e) { exitCode = 15; return(exitCode); } } catch (COMException e) { exitCode = 16; return(exitCode); } finally { if (rFolder != null) { Marshal.FinalReleaseComObject(rFolder); rFolder = null; } if (rFile != null) { Marshal.FinalReleaseComObject(rFile); rFile = null; } if (zFolder != null) { Marshal.FinalReleaseComObject(zFolder); zFolder = null; } if (file != null) { Marshal.FinalReleaseComObject(file); file = null; } if (addCustRefs != null) { Marshal.FinalReleaseComObject(addCustRefs); addCustRefs = null; } if (vault != null) { Marshal.FinalReleaseComObject(vault); vault = null; } } return(exitCode); }
public bool exportExcel(IEdmVault5 poVault, string selectFile, string saveFile) { WiseUtil wiseUtil = new WiseUtil(); IEdmFolder5 templateExcelFolder = null; string finalFilePath = poVault.RootFolderPath + WiseUtil.templateExcelFilePath; IEdmFile5 templateExcelFile = poVault.GetFileFromPath(finalFilePath, out templateExcelFolder); if (templateExcelFile == null) { System.Windows.Forms.MessageBox.Show("在PDM中找不到模板EXCEL:\n" + finalFilePath); return(false); } //string installLocation = wiseUtil.GetLocalMachineRegistryValue("SOFTWARE\\solidworks\\Applications\\PDMWorks Enterprise\\", "Location"); //System.Console.WriteLine(installLocation); //if (installLocation == "") //{ // installLocation = "C:\\"; //} //string excelTemplate = installLocation + "ExportTemplate\\template-list.xlsx"; Workbook templateWb = null; try { templateWb = wiseUtil.OpenExcel(finalFilePath); } catch (Exception e) { System.Windows.Forms.MessageBox.Show("打开模板表格失败,请查看位置" + templateExcelFile + "的文件状态"); return(false); } if (templateWb == null) { System.Windows.Forms.MessageBox.Show("打开模板表格失败"); return(false); } SldWorks.SldWorks swApp = new SldWorks.SldWorks(); int longstatus = 0; int longwarnings = 0; ModelDoc2 modelDoc = swApp.OpenDoc6(selectFile, (int)swDocumentTypes_e.swDocDRAWING, (int)(swOpenDocOptions_e.swOpenDocOptions_ReadOnly | swOpenDocOptions_e.swOpenDocOptions_Silent), "", ref longstatus, ref longwarnings); if (modelDoc == null || longstatus > 0) { System.Windows.Forms.MessageBox.Show("打开二维图失败"); swApp.ExitApp(); templateWb.Close(); return(false); } BomTableAnnotation bomTableAnno = null; string configName = ""; string topFileName = ""; try { wiseUtil.GetDrawingDocBOMTable(modelDoc, out bomTableAnno, out configName, out topFileName); } catch (Exception e) { System.Windows.Forms.MessageBox.Show("获取明细表信息出错" + e.StackTrace); } if (bomTableAnno == null) { System.Windows.Forms.MessageBox.Show("未找到明细表信息"); swApp.ExitApp(); templateWb.Close(); return(false); } //modelDoc.Close(); SldAsm asmPrd = wiseUtil.GetAsmIndoFromFile(poVault, topFileName);// new SldAsm(); if (asmPrd == null) { System.Windows.Forms.MessageBox.Show("获取材料明细表关联产品失败"); swApp.ExitApp(); templateWb.Close(); return(false); } //asmPrd.bzr = "hou"; //asmPrd.bzsj = "2016/1/1"; try { wiseUtil.ProcessTableAnn(poVault, bomTableAnno, configName, asmPrd); } catch (Exception e) { System.Windows.Forms.MessageBox.Show("解析明细表信息出错" + e.StackTrace); } //if (WiseUtil.errors > 0) //{ // System.Windows.Forms.MessageBox.Show("解析明细表信息出错" + WiseUtil.errorStr); //} wiseUtil.SaveBuyToWorkbook(templateWb, asmPrd); wiseUtil.SaveStdToWorkbook(templateWb, asmPrd); wiseUtil.SavePrtToWorkbook(templateWb, asmPrd); wiseUtil.SaveBspToWorkbook(templateWb, asmPrd); templateWb.SaveAs(saveFile); templateWb.Close(); swApp.ExitApp(); swApp = null; return(true); }
private void SearchFiles(IEdmVault5 vault, object Val1) { try { IEdmSearch5 search = null; IEdmFolder5 folder = null; folder = vault.GetFolderFromPath(@"C:\CDI Controlled Documents\drawings\part drawings- controlled"); search = vault.CreateSearch(); search.FileName = "%.%d%w%"; search.StartFolderID = folder.ID; object Var1 = "Part Numbers"; object State = "Approved for Production"; search.AddVariable(Var1, Val1); search.set_State(State); search.FindHistoricStates = false; search.Recursive = true; String message = string.Empty; List <IEdmSearchResult5> results = new List <IEdmSearchResult5>(); IEdmSearchResult5 result = search.GetFirstResult(); while (result != null) { results.Add(result); result = search.GetNextResult(); } results = results.Distinct(new SearchResultComparer()).ToList(); if (results.Count < 1) { search.Clear(); search.FileName = Val1 + ".%d%w%"; search.StartFolderID = folder.ID; State = "Approved for Production"; search.set_State(State); search.FindHistoricStates = false; search.Recursive = true; result = search.GetFirstResult(); while (result != null) { results.Add(result); result = search.GetNextResult(); } results = results.Distinct(new SearchResultComparer()).ToList(); } foreach (IEdmSearchResult5 item in results) { //get latest version IEdmFile5 file = null; IEdmFolder5 retFolder = default(IEdmFolder5); file = vault.GetFileFromPath(item.Path, out retFolder); file.GetFileCopy(0); //System.Diagnostics.Process.Start(item.Path, @"C:\Program Files\SOLIDWORKS Corp\eDrawings\eDrawings.exe"); //OpenEdwg(item.Path); OpenSaveSldrwPdf(item.Path); message = message + "Filename: " + item.Name + ", Rev: " + file.CurrentRevision + "; \n"; } MessageBox.Show(message); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private static bool GetFileFromPath(IEdmVault5 vault, string filePath, out IEdmFile5 file, out IEdmFolder5 parentFolder) { file = null; parentFolder = null; if (vault == null) { return(false); } try { file = vault.GetFileFromPath(filePath, out parentFolder); return(file != null && parentFolder != null); } catch (Exception ex) { return(false); } }
public void GetVars_Click(System.Object sender, System.EventArgs e) { try { IEdmVault7 vault2 = null; if (vault1 == null) { vault1 = new EdmVault5(); } vault2 = (IEdmVault7)vault1; if (!vault1.IsLoggedIn) { //Log into selected vault as the current user vault1.LoginAuto(VaultsComboBox.Text, this.Handle.ToInt32()); } IEdmFile5 aFile = default(IEdmFile5); IEdmFolder5 ppoRetParentFolder = null; aFile = vault2.GetFileFromPath(ListBox.Items[0].ToString(), out ppoRetParentFolder); //Get card variables only from a file checked into the vault if (!aFile.IsLocked) { aFile.LockFile(vault2.RootFolderID, this.Handle.ToInt32(), (int)EdmLockFlag.EdmLock_Simple); IEdmEnumeratorVariable5 varEnum = default(IEdmEnumeratorVariable5); varEnum = aFile.GetEnumeratorVariable(); object[] valueList = null; varEnum.GetUpdateVars(aFile.LockedInFolderID, out valueList); int idx = 0; idx = Information.LBound(valueList); int upper = 0; upper = Information.UBound(valueList); string msg = null; msg = "Card variables for " + aFile.Name + " in configuration, @:" + Constants.vbLf + Constants.vbLf; IEdmVariableMgr5 varMgr = default(IEdmVariableMgr5); varMgr = (IEdmVariableMgr5)aFile.Vault; IEdmVariable5 var = default(IEdmVariable5); IEdmVariableValue6 value = default(IEdmVariableValue6); while (idx <= upper) { value = (IEdmVariableValue6)valueList[idx]; idx = idx + 1; var = varMgr.GetVariable(value.VariableID); msg = msg + value.VariableName + " = > " + value.GetValue("@").ToString() + Constants.vbLf; msg = msg + "EdmVariableFlags: " + var.Flags + ", EdmVariableType: " + var.VariableType + Constants.vbLf + Constants.vbLf; //msg = msg & "EdmVariableFlags: " & value.VariableFlags & ", EdmVariableType: " & value.VariableType & vbLf & vbLf } MessageBox.Show(msg); aFile.UndoLockFile(this.Handle.ToInt32()); } else { //User selected a checked-out file MessageBox.Show("Please select a checked-in file."); } } catch (System.Runtime.InteropServices.COMException ex) { MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void OnCmd(ref EdmCmd poCmd, ref Array ppoData) { try { //// TODO: This is useful for showing child windows properly //poCmd.mlParentWnd; switch (poCmd.meCmdType) { case EdmCmdType.EdmCmd_Menu: if (poCmd.mlCmdID == 1) { //// TODO: Only supporting single selection for now. //foreach(EdmCmdData d in ppoData) //{ // d.mbsStrData1 = //} var fileData = (EdmCmdData)ppoData.GetValue(0); string fileName = fileData.mbsStrData1; int fileId = fileData.mlObjectID1; int folderId = fileData.mlObjectID3; IEdmVault16 vault = (IEdmVault16)poCmd.mpoVault; IEdmFile5 file = (IEdmFile5)vault.GetObject(EdmObjectType.EdmObject_File, fileId); IEdmFolder5 parentFolder = (IEdmFolder5)vault.GetObject(EdmObjectType.EdmObject_Folder, folderId); string parentFilePath = file.GetLocalPath(parentFolder.ID); var fileVars = (IEdmEnumeratorVariable10)file.GetEnumeratorVariable(); // get the variable object oVal; bool success = fileVars.GetVar2(VARIABLE_NAME, "@", parentFolder.ID, out oVal); if (file.IsLocked) { MessageBox.Show("The file must be checked in."); } else if (oVal == null) { MessageBox.Show($"The variable '{VARIABLE_NAME}' has no value."); } else { var window = new AAFileRefsWindow(); // do search and gret results... var search = new VaultSearch(vault); AAFileRef[] results = search.SearchForFileRefs(oVal.ToString()); var vm = new AAFileRefsViewModel(parentFilePath, results, () => window.Close()); window.DataContext = vm; window.ShowDialog(); if (vm.OkWasClicked) { var fileRefsSvc = new CustomRefsService(vault); string[] chilPaths = vm.Results .Where(x => x.IsIncluded) .Select(x => x.Path).ToArray(); fileRefsSvc.AddCustomReferences(file.ID, chilPaths); } } } break; case EdmCmdType.EdmCmd_PostAdd: break; default: break; } } catch (Exception ex) { #if Debug MessageBox.Show(ex.ToString()); #else MessageBox.Show(ex.Message); #endif } }
public void BatchDelete(List<TaskParam> listType) { var batchDeleter = (IEdmBatchDelete2)HostingForm.Vault2.CreateUtility(EdmUtility.EdmUtil_BatchDelete); IEdmFolder5 ppoRetParentFolder; foreach (var fileName in listType) { if (fileName.Revision == "") continue; aFile = HostingForm.Vault1.GetFileFromPath(fileName.FullFilePath, out ppoRetParentFolder); aPos = aFile.GetFirstFolderPosition(); aFolder = aFile.GetNextFolder(aPos); // Add selected file to the batch batchDeleter.AddFileByPath(fileName.FullFilePath); } // Move files and folder to the Recycle Bin batchDeleter.ComputePermissions(true, null); batchDeleter.CommitDelete(0, null); }
public void BatchSetVariable(List<TaskParam> listType) { RootFolder = HostingForm.Vault1.RootFolderPath; Program.HostForm.richTextBoxLog.Invoke(new Action(() => Program.HostForm.richTextBoxLog.SelectedText += ("Файлы добавлены:\r\n"))); foreach (var fileVar in listType) { var filePath = RootFolder + fileVar.FolderPath + fileVar.FileName; aFolder = default(IEdmFolder5); if (HostingForm.Vault1.GetFileFromPath(filePath, out aFolder) == null) continue; Program.HostForm.richTextBoxLog.Invoke(new Action(() => Program.HostForm.richTextBoxLog.SelectedText += (filePath + "\r\n"))); //if (HostingForm.Vault1.GetFileFromPath(filePath, out aFolder) == null) //{ // MessageBox.Show("false"); //} //else //{ // MessageBox.Show("true"); //} IEdmFile5 edmFile = HostingForm.Vault1.GetFileFromPath(filePath, out aFolder); var pEnumVar = (IEdmEnumeratorVariable8)edmFile.GetEnumeratorVariable(); ; pEnumVar.SetVar("Revision", "", fileVar.CurrentVersion); } }
public List<TaskParam> BatchGetVariable(List<TaskParam> listType) { var listStr = new List<TaskParam>(); foreach (var fileVar in listType) { aFolder = default(IEdmFolder5); IEdmFile5 edmFile = HostingForm.Vault1.GetFileFromPath(fileVar.FullFilePath, out aFolder); object oVarRevision; var revision = ""; if (edmFile == null) { revision = ""; } else { var pEnumVar = (IEdmEnumeratorVariable8)edmFile.GetEnumeratorVariable(); pEnumVar.GetVar("Revision", "", out oVarRevision); if (oVarRevision == null) { revision = "0"; } else { revision = oVarRevision.ToString(); } } listStr.Add(new TaskParam { Revision = revision, CurrentVersion = fileVar.CurrentVersion, FileName = fileVar.FileName, FolderPath = fileVar.FolderPath, FullFilePath = fileVar.FullFilePath, TaskType = fileVar.TaskType }); } return listStr; }
public void BatchUnLock(List<TaskParam> listType) { ppoSelection = new EdmSelItem[listType.Count]; batchUnlocker = (IEdmBatchUnlock)HostingForm.Vault2.CreateUtility(EdmUtility.EdmUtil_BatchUnlock); RootFolder = HostingForm.Vault1.RootFolderPath; var i = 0; foreach (var fileName in listType) { var filePath = RootFolder + fileName.FolderPath + fileName.FileName; if (HostingForm.Vault1.GetFileFromPath(filePath, out ppoRetParentFolder) == null) continue; aFile = HostingForm.Vault1.GetFileFromPath(filePath, out ppoRetParentFolder); aPos = aFile.GetFirstFolderPosition(); aFolder = aFile.GetNextFolder(aPos); ppoSelection[i] = new EdmSelItem(); ppoSelection[i].mlDocID = aFile.ID; ppoSelection[i].mlProjID = aFolder.ID; i = i + 1; } // Add selections to the batch of files to check in batchUnlocker.AddSelection((EdmVault5)HostingForm.Vault1, ppoSelection); if ((batchUnlocker != null)) { batchUnlocker.CreateTree(0, (int)EdmUnlockBuildTreeFlags.Eubtf_ShowCloseAfterCheckinOption + (int)EdmUnlockBuildTreeFlags.Eubtf_MayUnlock); fileList = (IEdmSelectionList6)batchUnlocker.GetFileList((int)EdmUnlockFileListFlag.Euflf_GetUnlocked + (int)EdmUnlockFileListFlag.Euflf_GetUndoLocked + (int)EdmUnlockFileListFlag.Euflf_GetUnprocessed); aPos = fileList.GetHeadPosition(); while (!(aPos.IsNull)) { fileList.GetNext2(aPos, out poSel); } //retVal = batchUnlocker.ShowDlg(this.Handle.ToInt32()); batchUnlocker.UnlockFiles(0, null); } }
//TODO: BatchGet public void BatchGet(List<TaskParam> listType) { batchGetter = (IEdmBatchGet)HostingForm.Vault2.CreateUtility(EdmUtility.EdmUtil_BatchGet); var i = 0; foreach (var taskVar in listType) { aFile = HostingForm.Vault1.GetFileFromPath(taskVar.FullFilePath, out ppoRetParentFolder); aPos = aFile.GetFirstFolderPosition(); aFolder = aFile.GetNextFolder(aPos); batchGetter.AddSelectionEx((EdmVault5)HostingForm.Vault1, aFile.ID, aFolder.ID, taskVar.CurrentVersion); } //batchUnlocker.AddSelection((EdmVault5)vault, ppoSelection); if ((batchGetter != null)) { batchGetter.CreateTree(0, (int)EdmGetCmdFlags.Egcf_Nothing); ////fileCount = batchGetter.FileCount; //fileList = (IEdmSelectionList6)batchGetter.GetFileList((int)EdmGetFileListFlag.Egflf_GetLocked + (int)EdmGetFileListFlag.Egflf_GetFailed + (int)EdmGetFileListFlag.Egflf_GetRetrieved + (int)EdmGetFileListFlag.Egflf_GetUnprocessed); //aPos = fileList.GetHeadPosition(); ////str = "Getting " + fileCount + " files: "; //while (!(aPos.IsNull)) //{ // fileList.GetNext2(aPos, out poSel); // //str = str + Constants.vbLf + poSel.mbsPath; //} //MsgBox(str) //var retVal = batchGetter.ShowDlg(this.Handle.ToInt32()); // No dialog if checking out only one file //if ((retVal)) //{ batchGetter.GetFiles(0, null); //} } }