solidWorks EPDM 二次开发入门篇 (二)

今天做了个读取文件信息的小例子,发上来给大家看看,有什么不对的提醒我一下啊。

首先添加个VB的类库

Imports EdmLib
Namespace FilesInfo
    Public Class FilesInfo
        Dim vault As IEdmVault7
        Dim lst As IEdmBatchListing2
        Dim cols() As EdmListCol
        Dim folder As IEdmFolder5
        ''' <summary>
        ''' 构造函数
        ''' </summary>
        ''' <param name="path">需要读取的文件目录名</param>
        ''' <param name="mvault">电子仓库</param>
        ''' <remarks>只读取已SLd为扩展名开头的文件</remarks>
        Public Sub New(ByVal path As String, ByVal mvault As IEdmVault7)
            vault = mvault    '为vault赋值
            lst = vault.CreateUtility(EdmUtility.EdmUtil_BatchList) '创建 IEdmBatchListing2对象

            If path = "" Then  '如果没有添加路径则退出程序
                Exit Sub
            End If
            folder = vault.GetFolderFromPath(path) '获取vault指定的文件夹
            Dim pos As IEdmPos5 = folder.GetFirstFilePosition() '创建pos对象用于遍历文件夹中的文件
            While Not pos.IsNull
                Dim file As IEdmFile5 = folder.GetNextFile(pos) '创建file对象并赋值
                AddFile(file.GetLocalPath(folder.ID), 1)
            End While
        End Sub
        ''' <summary>
        ''' 向IEdmBatchListing2加入文件
        ''' </summary>
        ''' <param name="filename">文件名</param>
        ''' <param name="lparam">通常为1</param>
        ''' <remarks></remarks>
        Public Sub AddFile(ByVal filename As String, Optional ByVal lparam As Integer = 1)
            Dim ft As Date
            Try
                ft = FileSystem.FileDateTime(filename)      '取得文件夹中文件的日期
            Catch
                MsgBox(vault.GetErrorMessaage(Err.Number))
            Finally
                lst.AddFile(filename, ft, lparam)           '向IEdmBatchListing2加入文件
            End Try
        End Sub
        ''' <summary>
        ''' 获取零件信息
        ''' </summary>
        ''' <param name="SetName">Bom条目名</param>
        ''' <returns>List(Of Dictionary(Of String, String))</returns>
        ''' <remarks></remarks>
        Function GetFilesInfo(ByVal SetName As String) As List(Of Dictionary(Of String, String))
            Dim infolst As List(Of Dictionary(Of String, String)) = New List(Of Dictionary(Of String, String))() '定义一个泛型数组
            Dim files() As EdmListFile = Nothing  ' 定义一个EdmListFile对象并赋空值,如果这里不赋空值有时会出错
            GetFiles(files, SetName)  '获取文件夹中的文件
            For Each efile As EdmListFile In files         '循环添加List中的文件到一维数组infodic中
                Dim infodic As Dictionary(Of String, String) = New Dictionary(Of String, String) '定义一个一维的泛型数组
                infodic.Add("Version", efile.mbsRevisionName)    '添加版本号
                infodic.Add("State", efile.moCurrentState.mbsStateName) '添加状态
                infodic.Add("FileID", efile.mlFileID.ToString())       '添加FileID
                infodic.Add("FolderID", efile.mlFolderID.ToString())   '添加FolderID
                Dim datas() As Object
                datas = efile.moColumnData                      '把一列赋给datas
                Dim idx As Integer = 0
                For Each col As EdmListCol In cols              '循环加列到数组

                    If Not (datas(idx) Is Nothing) Then
                        infodic.Add(col.mbsCaption, datas(idx).ToString())
                    Else
                        infodic.Add(col.mbsCaption, "")
                    End If
                    idx = idx + 1
                Next
                infolst.Add(infodic)
            Next
            GetFilesInfo = infolst                            '返回infolist
        End Function
        ''' <summary>
        ''' 获取文件
        ''' </summary>
        ''' <param name="files">添加后的所有文件</param>
        ''' <param name="SetName">BOM条目名</param>
        ''' <remarks></remarks>
        Public Sub GetFiles(ByRef files() As EdmListFile, ByVal SetName As String)
            lst.CreateListEx(SetName, 0, cols)  '调用IEdmBatchListing2中的方法,添加文件
            lst.GetFiles(files)  '获取files中的所有文件
        End Sub
    End Class
End Namespace
然后把类库编译成dll 再创建一个窗体 在窗体中添加已编译好的dll

在窗体上添加2个按钮,一个文本框,一个listview

文本框赋初值D:\Trainning\Trainning\A390  第一个Trainning是D盘的文件夹,第二个是本地试图的名字。A390是本地试图里面的文件夹

'窗体的主要代码
Imports EdmLib
Imports YTZhaoyang.Trainning.FilesInfo      '自己写的类库文件

Public Class frmTestBatchList
    Dim vault As IEdmVault7
    Dim Finfo As FilesInfo.FilesInfo
    Public Sub New()

        ' 此调用是 Windows 窗体设计器所必需的。
        InitializeComponent()

        ' 在 InitializeComponent() 调用之后添加任何初始化。
        vault = New EdmVault5
    End Sub


    Private Sub btn_InsertFiles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_InsertFiles.Click
        Finfo = New FilesInfo.FilesInfo(filePath.Text, vault)  '创建FilesInfo对象,并读取文件数据
    End Sub

    Private Sub frmTestBatchList_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        vault.LoginAuto("Trainning", Me.Handle.ToInt32)    '登陆PDM

        Dim userMgr As IEdmUserMgr5        '定义UserMgr5类型对象
        userMgr = vault
        Dim pos As IEdmPos5
        pos = userMgr.GetFirstUserPosition
        Dim user As IEdmUser5
        While Not pos.IsNull
            user = userMgr.GetNextUser(pos)
            ComboBox1.Items.Add(user.Name)
        End While
    End Sub

    Private Sub btn_GetInfo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_GetInfo.Click
        Dim lst As List(Of Dictionary(Of String, String)) = Finfo.GetFilesInfo("零件信息")
        For Each dic As Dictionary(Of String, String) In lst
            Dim item As ListViewItem = ListView1.Items.Add(dic("项目类型"))
            For Each key As String In dic.Keys
                item.SubItems.Add(dic(key))
            Next
        Next
    End Sub
End Class
运行结果如图
首先点击读取文件,然后点击获取信息
solidWorks EPDM 二次开发入门篇 (二)_第1张图片
solidWorks EPDM 二次开发入门篇 (二)_第2张图片

你可能感兴趣的:(二次开发)