Creating Add-in Hooks (C#)
This topic shows how to program
an add-in to have SOLIDWORKS Enterprise PDM notify your add-in
whenever a file is added, checked out, or checked in to a vault.
NOTE:
Because SOLIDWORKS Enterprise PDM cannot force a reload of
add-ins if they are written in .NET, all client machines must be restarted to ensure that the latest version of the add-in is used.
- Follow
Creating Menu Commands (C#) to create a basic add-in.
- In your add-in's
IEdmAddIn5::GetAddInInfo implementation, call
IEdmCmdMgr5::AddHook
for each SOLIDWORKS Enterprise PDM activity that you want your add-in to be
notified about. Implement IEdmAddIn5::GetAddInInfo as follows:
public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
{
//Specify information to display
in the add-in's Properties dialog box
poInfo.mbsAddInName = "My first add-in";
poInfo.mbsCompany = "The name of my company";
poInfo.mbsDescription = "This is a very nice add-in.";
poInfo.mlAddInVersion = 1;
//Specify the
minimum required version of SolidWorks Enterprise PDM
poInfo.mlRequiredVersionMajor = 5;
poInfo.mlRequiredVersionMinor = 2;
//Register hooks
//Notify the add-in when a file has been added
poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostAdd);
//Notify the add-in when a file has been checked out
poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostLock);
//Notify the add-in when a file is about to be checked in
poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreUnlock);
//Notify the add-in when a file has been checked in
poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostUnlock);
}
-
Implement
IEdmAddIn5::OnCmd as follows:
public void OnCmd(ref EdmCmd poCmd, ref Array ppoData)
{
//Handle the hook
string name = null;
switch (poCmd.meCmdType)
{
case EdmCmdType.EdmCmd_PostAdd:
name = "PostAdd";
break;
case EdmCmdType.EdmCmd_PostLock:
name = "PostLock";
break;
case EdmCmdType.EdmCmd_PreUnlock:
name = "PreUnlock";
break;
case EdmCmdType.EdmCmd_PostUnlock:
name = "PostUnlock";
break;
default:
name = "?";
break;
}
//Check the upper and lower bounds of the array
string message = null;
message = "";
int index = 0;
index = Information.LBound(ppoData);
int last = 0;
last = Information.UBound(ppoData);
//Append the paths of all files to a message
string
while (index <= last)
{
message = message + ((EdmCmdData)(ppoData.GetValue(index))).mbsStrData1 + Constants.vbLf;
index = index + 1;
}
//Display a message to the user
message = "The following files were affected by a " + name + " hook:" + Constants.vbLf + message;
EdmVault5 vault = default(EdmVault5);
vault = (EdmVault5)poCmd.mpoVault;
vault.MsgBox(poCmd.mlParentWnd, message);
}
SOLIDWORKS Enterprise PDM calls OnCmd whenever one of the
hooks registered in GetAddInInfo triggers an event. You can tell which hook
triggered the call by inspecting
EdmCmd.meCmdType
that is returned in OnCmd's poCmd argument. meCmdType contains an
EdmCmdType constant
that indicates which hook triggered the call.
The second argument to OnCmd,
ppoData, contains an array of
EdmCmdData structures.
The array contains one structure for each file that is affected by the hook. The
contents of the structure members vary, depending on the hook. See EdmCmdData for a complete list
of members and their descriptions.
-
Click Build > Build
Solution to build the add-in.
-
Install
the add-in through the SOLIDWORKS Enterprise PDM
Administration tool:
- Open the SOLIDWORKS
Enterprise PDM Administration tool.
- Expand the vault where
you want to install this add-in and log in as Admin.
- Right-click Add-ins and click New
Add-in.
- Browse to
project_path\project_name\project_name\bin\Debug,
click project_name.dll and Interop.EdmLib.dll.
- Click Open.
- Click OK.
- Click OK.
-
Add, check out, or check in
one or more vault files. A message box displays with the files
added, checked out, or checked in.
NOTE:
OnCmd is not called during check-in if the
file is not modified. During check-in of unmodified
files, SOLIDWORKS Enterprise PDM triggers an "undo check-out" event. To handle
this "undo check-out" event, register EdmCmdType.EdmCmd_PreUndoLock and
EdmCmdType.EdmCmd_PostUndoLock
hooks in your add-in's implementation of IEdmAddIn5::GetAddInInfo.