Hide Table of Contents

Using Basic Search Syntax Example (VB.NET)

This example shows how to search the vault for file and folder card variables using CreateSearch2 search syntax.

NOTE: If using the primary interop assembly provided with SOLIDWORKS PDM Professional, see Using .NET Framework 4.0 in Stand-alone Applications.

'----------------------------------------------------------------------------
' Preconditions:
' 1. Start Microsoft Visual Studio.
'    a. Click File > New > Project > Visual Basic > Console Application.
'    b. Type Search_VBNET in Name.
'    c. Click Browse and navigate to the folder where to create the project.
'    d. Click OK.
'    e. Click Show All Files in the Solution Explorer toolbar and expand
'       Module1.vb in the Solution Explorer.
'    f. Replace all the code for Module1.vb with this code.
' 2. Add EPDM.Interop.epdm.dll as a reference (right-click the project
'    name in the Solution Explorer, click Add Reference, click
'    Assemblies > Framework in the left-side panel, browse to the top folder of
'    your SOLIDWORKS PDM Professional installation, locate and select
'    EPDM.Interop.epdm.dll, click Open, click Add, and click Close).
' 3. Change the vault name and the vault view path in the code.
' 4. Make sure your vault contains a text file data card with a Document Number data card variable,
'    and checked-in files with data card values exactly as described in the code.

' 5. Click Debug > Start Debugging or press F5.

'
' Postconditions: Press a key when prompted in the console.
'---------------------------------------------------------------------------

'Module1.vb

Imports System

Imports System.Collections.Generic

Imports System.Linq

Imports System.Text

Imports System.Threading.Tasks

Imports EPDM.Interop.epdm

Module Module1

 

    Sub Main(ByVal args As String())

        Console.WriteLine("Press a key...")

        Console.ReadKey()

        Dim CurrentVault As IEdmVault21 = TryCast(New EdmVault5(), IEdmVault21)

        CurrentVault.LoginAuto("JEB5", 0)

 

        ' The vault contains these files       The file data cards contain these variables And values:

        ' DocNum=five-six-seven Comnt=ijk.txt   @Document Number=567 & @Comment=ijk

        ' DocNum=five-six-seven Comnt=xyz.txt   @Document Number=567 & @Comment=xyz

        ' DocNum=one-two-three Comnt=abc.txt    @Document Number=123 & @Comment=abc

 

        Dim _searchResult As IEdmSearchResult5

        Dim _search As IEdmSearch9 = CType(CurrentVault.CreateSearch2(), IEdmSearch9)

        Dim VarNames0 As String() = {}

        _search.AddMultiVariableCondition(VarNames0, "@:") ' poVariableNames can be Nothing

        _search.GetFirstResult()

        Dim OriginatedFromCreateSearch2 As Boolean = _search.GetSyntaxErrors() IsNot Nothing

        Console.WriteLine("OriginatedFromCreateSearch2  = " & OriginatedFromCreateSearch2)

        Console.WriteLine("Press a key...")

        Console.ReadKey()

 

        For i As Integer = 0 To 7 - 1

            Dim ExceptionEncountered As Boolean = False

            _search.Clear()

            _search.StartFolderID = CurrentVault.GetFolderFromPath("C:\Users\J4M\Desktop\JEB5").ID

 

            Select Case i

                Case 0 ' Single variable search conditions with special criteria and variables

                    Console.WriteLine("")

                    Console.WriteLine("Single variable search conditions with special criteria and variables:")

                    _search.FileName = "(limit | cam) !wheel OR DocNum"

                    _search.AddVariable2("Document Number", "56 & 7")

                    _search.AddVariable2("Comment", "xy | z NOT a")

                    ' Finds DocNum=five-six-seven Comnt=xyz.txt

                Case 1 ' Multi-variable condition with extended search name syntax

                    Console.WriteLine("")

                    Console.WriteLine("Multi-variable condition with extended search name syntax:")

                    ' VarNames array declares that all elements are strings

                    Dim VarNames As String() = {"""Document Number""", "Comment", "51", "_Name"}

                    ' Both xy And z must be in the same card variable - owing to {}

                    ' Text 567 can be in a different card variable

                    ' : turns on multi-value search logic

                    _search.AddMultiVariableCondition(VarNames, ":567 {z xy}")

                    ' Finds DocNum=five-six-seven Comnt=xyz.txt

                Case 2 ' Multi-variable condition searches all the card variables in file/folder name

                    Console.WriteLine("")

                    Console.WriteLine("Multi-variable condition for all the vault variables:")

                    ' Unquoted _Name represents file/folder name

                    ' "" or 0 represents any card variable

                    Dim VarNames As String() = {"""""", "_Name"}

                    _search.AddMultiVariableCondition(VarNames, ":567 xyz | five xy")

                    ' Finds DocNum=five-six-seven Comnt=xyz.txt

                Case 3 ' Extended multi-variable condition with erroneously unquoted card variable names

                    Console.WriteLine("")

                    Console.WriteLine("Multi-variable condition with erroneously unquoted names:")

                    Try

                        Dim VarNames As String() = {"Document Number", "Comment", "Project Name"}

                        _search.AddMultiVariableCondition(VarNames, ":567 xyz | five xy")

                        ' Causes an exception because there are card variable names with spaces that need extra quotation marks

                    Catch ex As System.ArgumentException

                        Console.WriteLine("Wrong variable syntax... HRESULT = 0x" & ex.HResult.ToString("X") & ex.Message)

                        ExceptionEncountered = True

                    End Try

                Case 4  ' Syntax errors are not displayed; no documents returned

                    Console.WriteLine("")

                    Console.WriteLine("Syntax errors, but not displayed:")

                    _search.FileName = "(limit = | cam) !wheel OR AND DocNum"

                    _search.AddVariable2("Document Number", "56 && 7")

                    _search.AddVariable2("Comment", "xy | z() NOT a")

                Case 5 ' Syntax errors displayed (because @: is at the beginning of a condition); no documents returned

                    Console.WriteLine("")

                    Console.WriteLine("Syntax errors:")

                    _search.FileName = "@:(limit = | cam) !wheel OR AND DocNum"

                    _search.AddVariable2("Document Number", "56 && 7")

                    _search.AddVariable2("Comment", "@:xy | z() NOT a")

                Case 6  ' Multi-value syntax with error reporting (because @: is at the beginning of a condition)

                    Console.WriteLine("")

                    Console.WriteLine("Advanced search syntax:")

                    ' The first argument can be Nothing because all the card variables are defined with variable binding specifiers (@) inside the second argument which is the condition

                    ' The second argument uses the advanced specifier which allows variable bindings

                    ' The second argument specifies to look for files that have (Comment = abc and any card variables with xyz) OR (a file name or "Document Number" that contains 123 or ab, but not five)

                    '

                    ' Finds DocNum=one-two-three Comnt=abc.txt

                    _search.AddMultiVariableCondition(VarNames0, "@: @Comment=abc & @""""(xyz) | @(""Document Number"" | _Name)(123 ab & !five)")

 

            End Select

 

            If ExceptionEncountered Then

                _searchResult = Nothing

            Else

                _searchResult = _search.GetFirstResult()

            End If

 

            If _searchResult Is Nothing Then

                Console.WriteLine("Returned null...")

            Else

                Console.WriteLine("Returned a file list...")

            End If

 

            Console.WriteLine("Press a key...")

            Console.ReadKey()

 

            If _searchResult IsNot Nothing Then

 

                While _searchResult IsNot Nothing

                    Console.WriteLine("NAME = " & _searchResult.Name & ", PATH = " + _searchResult.Path)

                    Console.WriteLine("Press a key...")

                    Console.ReadKey()

                    _searchResult = _search.GetNextResult()

                End While

            Else

                Dim SyntaxErrors As String() = _search.GetSyntaxErrors()

 

                If SyntaxErrors IsNot Nothing Then

 

                    For Each s As String In SyntaxErrors

                        Console.WriteLine(s)

                        Console.WriteLine("Press a key...")

                        Console.ReadKey()

                    Next

                End If

            End If

        Next

    End Sub

 

End Module

 

 

 


Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Using Basic Search Syntax Example (VB.NET)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:

x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2021 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.