Here’s an example of adding and removing users and groups from a vault using the SolidWorks EPDM API. The example does the following:
- Creates an example group
- Creates an example user
- Add the user to the group
- Removes the user from the group
- Removes the user
- Removes the group
If the user or group exists the existing group and or user is targeted.
The solution is available for download at the bottom of the post.
using System; using EdmLib; namespace EPDMAddUserExample { class Program { static void Main(string[] args) { IEdmVault12 vault = new EdmVault5Class() as IEdmVault12; vault.Login("admin", "password", "vaultname"); if (vault.IsLoggedIn) { UserAndGroupExample ex = new UserAndGroupExample(vault); IEdmUserGroup8 group = ex.CreateExampleGroup(); if (group != null) { IEdmUser9 user = ex.CreateExampleUser(); if (user != null) { int[] userids = new int[1] { user.ID }; group.AddMembers(userids); Console.WriteLine(String.Format("Added user {0} to group {1}.", user.Name, group.Name)); Console.WriteLine("-----------------------"); Console.WriteLine("Have a look in the admininstation tool and you'll\r\nnotice the created user and group.\r\nPress any key to continue."); Console.WriteLine("-----------------------"); Console.ReadLine(); // Odd way of removing members... // FolderID 1 is the root folder. Array memberFolders = Array.CreateInstance(typeof(EdmMemberFolder), 1); EdmMemberFolder memberFolder = new EdmMemberFolder(); memberFolder.mlUserID = user.ID; memberFolder.mlFolderID = 1; memberFolders.SetValue(memberFolder, 0); group.RemoveMembers(memberFolders); Console.WriteLine("Removed user from group"); Console.WriteLine("-----------------------"); Console.WriteLine("Would you like to DELETE the existing USER? (Y/N)"); if (Console.ReadLine().ToLower() == "y") { ex.DeleteExampleUser(user.ID); } Console.WriteLine("Would you like to DELETE the existing GROUP? (Y/N)"); if (Console.ReadLine().ToLower() == "y") { ex.DeleteExampleGroup(group.ID); } Console.WriteLine("-----------------------"); Console.WriteLine("Press any key to exit..."); Console.ReadLine(); } } } } } internal class UserAndGroupExample { internal IEdmVault12 Vault { get; set; } private IEdmUserMgr8 userMgr; internal UserAndGroupExample(IEdmVault12 vault) { this.Vault = vault; userMgr = vault.CreateUtility(EdmUtility.EdmUtil_UserMgr) as IEdmUserMgr8; } internal IEdmUser9 CreateExampleUser() { EdmUserData2 userData = new EdmUserData2(); userData.mbsUserName = "ExampleUser"; userData.mbsInitials = "EU"; userData.mbsEmail = "example@example.com"; userData.mbsPassword = "example"; userData.mbsCompleteName = "Example User III"; userData.mlFlags = (int)EdmUserDataFlags.Edmudf_GetInterface; Array userArray = Array.CreateInstance(typeof(EdmUserData2), 1); userArray.SetValue(userData, 0); userMgr.AddUsers2(ref userArray); userData = (EdmUserData2)userArray.GetValue(0); // Check the status of the user we just added. int userStatus = userData.mhStatus; if (userStatus != 0) { Console.WriteLine("Error creating user '" + userData.mbsUserName + "' - " + this.Vault.GetErrorMessage(userStatus)); // User already exists if (userStatus == -2147220854) { Console.WriteLine("User already exists. Would you like to use the existing user? (Y/N)"); if (Console.ReadLine().ToLower() == "y") { return GetExistingUser(userData.mbsUserName); } } } else { Console.WriteLine("Created user '" + userData.mpoUser.Name + "' successfully. User ID =" + userData.mpoUser.ID.ToString()); } return (IEdmUser9)userData.mpoUser; } private IEdmUser9 GetExistingUser(string userName) { IEdmPos5 pos = userMgr.GetFirstUserPosition(); while (!pos.IsNull) { IEdmUser5 user = userMgr.GetNextUser(pos); if (user.Name == userName) { return (IEdmUser9)user; } } return null; } internal void DeleteExampleUser(int userID) { int[] userids = new int[1] { userID }; userMgr.RemoveUsers(userids); Console.WriteLine("Deleted example user."); } internal IEdmUserGroup8 CreateExampleGroup() { // Create an example group to add the user to EdmGroupData2 groupData = new EdmGroupData2(); groupData.mbAutoAdd = 0; groupData.mbsDescription = "Example group created via API"; groupData.mbsName = "Example Group"; groupData.mlFlags = (int)EdmGroupDataFlags.Edmgdf_GetInterface; Array groupArray = Array.CreateInstance(typeof(EdmGroupData2), 1); groupArray.SetValue(groupData, 0); userMgr.AddGroups2(ref groupArray); groupData = (EdmGroupData2)groupArray.GetValue(0); // Check the status of the group we just added. int groupStatus = groupData.mhStatus; if (groupStatus != 0) { Console.WriteLine("Error creating group '" + groupData.mbsName + "' - " + this.Vault.GetErrorMessage(groupStatus)); // Group already exists if (groupStatus == -2147220841) { Console.WriteLine("Group already exists. Would you like to use the existing group? (Y/N)"); if (Console.ReadLine().ToLower() == "y") { return GetExistingGroup(groupData.mbsName); } } } else { Console.WriteLine("Created group '" + groupData.mpoGroup.Name + "' successfully. Group ID =" + groupData.mpoGroup.ID.ToString()); } return (IEdmUserGroup8)groupData.mpoGroup; } private IEdmUserGroup8 GetExistingGroup(string groupName) { IEdmPos5 pos = userMgr.GetFirstUserGroupPosition(); while (!pos.IsNull) { IEdmUserGroup5 group = userMgr.GetNextUserGroup(pos); if (group.Name == groupName) { return (IEdmUserGroup8)group; } } return null; } internal void DeleteExampleGroup(int groupID) { int[] groupids = new int[1] { groupID }; userMgr.RemoveGroups(groupids); Console.WriteLine("Deleted example group."); } } }