Table of Contents

RUNSWMACRO Command Documentation

DESCRIPTION:

The RunSWMacro command allows you to execute a SOLIDWORKS macro on a specific file or on multiple files found via search in the PDM vault. This is useful for automating repetitive tasks or applying custom logic to many files.

SYNTAX:

runswmacro -filePath -search -recursive -list -skip -count -timeout

PARAMETERS:

The command requires the following parameters:

  • filePath: Path to the SOLIDWORKS macro file (.swp or .dll). This is required and the file needs to cached in PDM.
  • search: Search query to find files to run the macro on.
  • recursive: If set, search will include subfolders.
  • list: csv file path of filepaths without a column header.
  • skip: Skips the specified number of items. Only valid with list.
  • count: Only processes the specified number of items. Only valid with list.
  • timeout: Macro timeout in milliseconds

What version of SOLIDWORKS will PDMShell use?

PDMShell will use the latest SOLIDWORKS version installed on your system by checking the Windows Registry at:

HKEY_LOCAL_MACHINE\SOFTWARE\SolidWorks
Note

If you have multiple SOLIDWORKS versions installed, PDMShell will automatically select the most recent version found in the registry.

List Example

C:\TestVault\part1.sldprt
C:\TestVault\assembly2.sldasm
C:\TestVault\drawing3.slddrw
C:\TestVault\bracket4.sldprt

SWP Macro

Warning

Please read the remarks below to properly call your macro.

  • The macro procedure name must be called main.
  • The macro module name must be called the file name of the macro appended by 1. Example: If the macro called print.swp the module name must be called print1.

DLL Macro

Warning

Please read the requirements below to properly create your DLL macro.

Requirements

  • The macro class must implement the IPDMShellSOLIDWORKSMacro interface
  • The class must be decorated with the PDMShellMacro attribute
  • The interface can be found in the NuGet package BlueByte.PDMShell.SOLIDWORKSMacro on nuget.org

Required NuGet Package Versions

Important

Your project must use these specific versions of the NuGet packages:

<PackageReference Include="BlueByte.PDMShell.SOLIDWORKSMacro" Version="1.0.0" />
<PackageReference Include="BlueByte.SOLIDWORKS.Interops" Version="2019.0.0" />
<PackageReference Include="BlueByte.SOLIDWORKS.PDMProfessional.Interops" Version="2024.5.50" />

Install using Package Manager Console:

Install-Package BlueByte.PDMShell.SOLIDWORKSMacro -Version 1.0.0
Install-Package BlueByte.SOLIDWORKS.Interops -Version 2019.0.0
Install-Package BlueByte.SOLIDWORKS.PDMProfessional.Interops -Version 2024.5.50
Note

Using different versions may result in compatibility issues or runtime errors. These specific versions are tested and guaranteed to work with PDMShell.

Example Implementation

using PDMShellSOLIDWORKSMacro;
using SolidWorks.Interop.sldworks;
using EPDM.Interop.epdm;

[PDMShellMacro]
public class MyMacro : IPDMShellSOLIDWORKSMacro
{
    public bool Execute(
        SldWorks swApp, 
        IEdmFile5 pdmFileObject, 
        IEdmFolder5 pdmFolderObject, 
        int handle, 
        string progress, 
        IPDMCmdLineCallback callback, 
        out string error)
    {
        error = string.Empty;
        // Update progress using the callback
        callback.AppendMessage("Starting macro execution...");
        
        // Your macro implementation here
        callback.AppendMessage($"Processing file: {pdmFileObject.Name}");
        
        // Report completion
        callback.AppendMessage("Macro execution completed successfully");

        return true;
    }
}
Note

Use the callback.AppendMessage() method to provide progress updates and status messages during macro execution. These messages will be displayed in the PDMShell output.

Running the Macro

# Run the DLL macro on all parts in the current directory
runswmacro -filePath "Macros/MyMacro.dll" -search "%.sldprt" -timeout 12000
Note

The DLL must be built against .NET Framework 4.7.2 or higher

EXAMPLE:

# run batch export macro on all part in the current directory
 runswmacro -filePath "Macros/BatchExport.swp" -search "%.sldprt"