/// <summary> /// Parses Excel file resulted with input for processing /// </summary> /// <param name="definition"></param> /// <returns></returns> public ImportContent ParseFile(SpreadSheetRangeDefinition definition) { ImportContent content = new ImportContent() { Users = new List <User>() }; List <Role> roleList = new List <Role>(); List <FieldSecurityProfile> profiles = new List <FieldSecurityProfile>(); var worksheet = _fileContent.Tables[definition.WorksheetName]; // read roles for (int i = definition.SecurityRoles.ToTuple().Item2; i <= definition.SecurityRoles.ToTuple().Item3; i++) { roleList.Add(new Role() { Name = worksheet.Rows[definition.SecurityRoles.ToTuple().Item1][i].ToString() }); } // read security profiles for (int i = definition.FieldSecurityProfile.ToTuple().Item2; i <= definition.FieldSecurityProfile.ToTuple().Item3; i++) { profiles.Add(new FieldSecurityProfile() { Name = worksheet.Rows[definition.FieldSecurityProfile.ToTuple().Item1][i].ToString() }); } //parse user rows var startRow = definition.UserName.ToTuple().Item1 + 1; var endRow = worksheet.Rows.Count; if (!definition.AllRows) { startRow = definition.RowsToLoad.ToTuple().Item1; endRow = definition.RowsToLoad.ToTuple().Item2; if (endRow == 0) { endRow = startRow + 1; } } if (startRow > worksheet.Rows.Count) { throw new InvalidOperationException($"Invalid row #{startRow+1} for processing. Possible row# {worksheet.Rows.Count}"); } for (int i = startRow; i < endRow; i++) { User user = new User(); for (int colCounter = definition.UserName.ToTuple().Item2; colCounter < worksheet.Columns.Count; colCounter++) { // user name if (colCounter == definition.UserName.ToTuple().Item2) { user.Name = worksheet.Rows[i][colCounter].ToString(); LogProgress($"Parsing user {user.Name}", i); } // manager if (colCounter == definition.Manager.ToTuple().Item2) { user.Manager = new User { Name = worksheet.Rows[i][colCounter].ToString() }; user.IsManagerIncluded = true; } // position if (colCounter == definition.Position.ToTuple().Item2) { user.Position = new Position { Name = worksheet.Rows[i][colCounter].ToString() }; user.IsPositionIncluded = true; } // site if (colCounter == definition.Site.ToTuple().Item2) { user.Site = new Site { Name = worksheet.Rows[i][colCounter].ToString() }; user.IsSiteIncluded = true; } // territory if (colCounter == definition.Territory.ToTuple().Item2) { user.Territory = new Territory { Name = worksheet.Rows[i][colCounter].ToString() }; user.IsTerritoryIncluded = true; } // bu if (colCounter == definition.BusinessUnit.ToTuple().Item2) { user.BusinessUnit = new BusinessUnit { Name = worksheet.Rows[i][colCounter].ToString() }; } // security roles if (colCounter >= definition.SecurityRoles.ToTuple().Item2&& colCounter <= definition.SecurityRoles.ToTuple().Item3) { content.RoleMemberships.Add(new RoleMembership() { User = user, Role = GetRole(roleList[colCounter - definition.SecurityRoles.ToTuple().Item2], user.BusinessUnit), Assign = Helper.ParseBoolean(worksheet.Rows[i][colCounter].ToString()) }); } // field security profiles if (colCounter >= definition.FieldSecurityProfile.ToTuple().Item2&& colCounter <= definition.FieldSecurityProfile.ToTuple().Item3) { content.ProfileMemberships.Add(new ProfileMembership() { User = user, FieldSecurityProfile = profiles[colCounter - definition.FieldSecurityProfile.ToTuple().Item2], Assign = Helper.ParseBoolean(worksheet.Rows[i][colCounter].ToString()) }); } } content.Users.Add(user); } return(content); }
/// <summary> /// Performs import /// </summary> private void ImportData() { btnLoad.Enabled = false; MainLoader manager = new MainLoader(Service, _fileContent); manager.OnWarning += Manager_OnWarning; WorkAsync(new WorkAsyncInfo { Message = $"Parsing worksheet {this.lstWorksheetName.SelectedItem}...", Work = (mainWorker, mainArgs) => { SpreadSheetRangeDefinition definition = new SpreadSheetRangeDefinition { WorksheetName = this.lstWorksheetName.SelectedItem.ToString(), UserName = this.txtUserName.Text, Manager = this.txtManager.Text, Position = this.txtOccupancy.Text, Site = this.txtSite.Text, Territory = this.txtTerritory.Text, BusinessUnit = this.txtBu.Text, SecurityRoles = this.txtSecurityRole.Text, FieldSecurityProfile = this.txtProfile.Text, AllRows = this.chkAllRows.Checked, RowsToLoad = this.txtRowsToImport.Text }; mySettings.SpreadSheetRangeDefinition = definition; mainArgs.Result = manager.ParseFile(definition); }, PostWorkCallBack = (mainArgs) => { if (mainArgs.Error != null) { MessageBox.Show(mainArgs.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var result = mainArgs.Result as ImportContent; if (result != null) { WorkAsync(new WorkAsyncInfo { ProgressChanged = e => { SetWorkingMessage(e.UserState.ToString()); }, Message = "Fetching system users, security roles and field security profiles from your Organization...", Work = (worker, args) => { args.Result = manager.FetchData(result); var content = args.Result as ImportContent; if (content != null) { int count = content.Users.Count(); worker.ReportProgress(-1, $"{count} Users to process."); } }, PostWorkCallBack = (args) => { if (args.Error != null) { MessageBox.Show(args.Error.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } var res = args.Result as ImportContent; if (res != null) { WorkAsync(new WorkAsyncInfo { ProgressChanged = e => { SetWorkingMessage(e.UserState.ToString()); }, Message = "Please wait... Processing users.", Work = (worker, nargs) => { var counter = 1; foreach (var user in res.Users) { worker.ReportProgress(counter, $"Updating user { user.Name }."); try { manager.UpdateUser(user); } catch (Exception e) { LogError(e.Message); //ShowErrorNotification(e.Message, null); } finally { worker.ReportProgress(counter, $"User { user.Name } has been updated."); } } foreach (var membership in res.RoleMemberships) { worker.ReportProgress(counter, $"Processing user { membership.User.Name } and role { membership.Role.Name } memberships."); try { manager.EnsureSystemUserRoleMembership(membership); } catch (Exception e) { LogError(e.Message); //ShowErrorNotification(e.Message, null); } finally { worker.ReportProgress(counter, $"Processed user { membership.User.Name } and role { membership.Role.Name } memberships completed."); } } foreach (var profile in res.ProfileMemberships) { worker.ReportProgress(counter, $"Processing user { profile.User.Name } and security profile { profile.FieldSecurityProfile.Name } memberships."); try { manager.EnsureSystemUserProfileMembership(profile); } catch (Exception e) { LogError(e.Message); //ShowErrorNotification(e.Message, null); } finally { worker.ReportProgress(counter, $"Processed user { profile.User.Name } and security profile { profile.FieldSecurityProfile.Name } memberships completed."); } } }, PostWorkCallBack = (nargs) => { if (args.Error != null) { MessageBox.Show(args.Error.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } this.btnLoad.Enabled = true; this.lstWorksheetName.SelectedIndex = -1; if (MessageBox.Show("Import System Users along with their Security roles and Field Security Profiles memberships has been completed. Do you want to review a log file?", "Import", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { OpenLogFile(); } } }); } } }); } } }); }