Imports DD_Rights Imports System.ComponentModel Public Class frmReworkUsers Private DT_FILES As DataTable Private _error As Boolean = False Private GUID_WORKING As Integer = 0 Private COUNT_ENTITIES As Integer = 0 Private ENTITIES_WORKED As Integer = 0 Private CURR_ENTITY As Integer = 0 Private countfiles As Integer = 0 Private WorkingFiles As Integer = 0 Private Sub frmCheckRightsEntity_Load(sender As Object, e As EventArgs) Handles Me.Load lblstate.Visible = False Refresh_Combo() End Sub Sub Refresh_Combo() Try cmbUser.DataSource = Nothing cmbUser.DataSource = DT_WORK_USER_RIGHTS cmbUser.ValueMember = DT_WORK_USER_RIGHTS.Columns(0).ColumnName cmbUser.DisplayMember = DT_WORK_USER_RIGHTS.Columns(2).ColumnName If DT_WORK_USER_RIGHTS.Rows.Count = 0 Then MsgBox("No more Users to rework. Form will be closed!", MsgBoxStyle.Information) Me.Close() End If Catch ex As Exception MsgBox("Unexpected error in load Users List: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub btnCheckRights_Click(sender As Object, e As EventArgs) Handles btnCheckRights.Click Dim ECM_USER_ID As Integer If cmbUser.SelectedIndex <> -1 Then GUID_WORKING = 0 Try Dim USER_ID As Integer Dim expression As String expression = "TYPE_NODE = 0" Dim foundRowsLevel0() As DataRow ' Use the Select method to find all rows matching the filter. foundRowsLevel0 = DT_WORK_USER_RIGHTS.Select(expression) Dim i As Integer ' For each row For i = 0 To foundRowsLevel0.GetUpperBound(0) USER_ID = foundRowsLevel0(i)("USER_ID") Next ENTITIES_WORKED = 0 Try ECM_USER_ID = clsDatabase.Execute_Scalar(String.Format("SELECT USERID_FK_INT_ECM FROM TBDD_USER WHERE GUID = (SELECT USER_ID FROM TBPMO_USER_RIGHTS_JOBS WHERE GUID = {0} )", cmbUser.SelectedValue)) Catch ex As Exception MsgBox("No User ECM-ID found for selected User. Please inform Digital Data.", MsgBoxStyle.Exclamation) Exit Sub End Try Dim sql = String.Format("SELECT ENTITY_ID FROM VWPMO_WD_DOC_SEARCH where DocID in (SELECT [dwObjectID] FROM VWPMO_WD_OBJECT_RIGHTS WHERE dwUserOrGroupID = {0}) GROUP BY ENTITY_ID", ECM_USER_ID) Dim DT_ENTITY As DataTable = clsDatabase.Return_Datatable(sql) COUNT_ENTITIES = DT_ENTITY.Rows.Count If DT_ENTITY.Rows.Count = 0 Then MsgBox("No files found for User. Job will be terminated!") Finish_Job() Exit Sub End If For Each row As DataRow In DT_ENTITY.Rows CURR_ENTITY = row.Item("ENTITY_ID") sql = String.Format("SELECT * FROM VWPMO_WD_DOC_SEARCH where DocID in (SELECT [dwObjectID] FROM VWPMO_WD_OBJECT_RIGHTS WHERE dwUserOrGroupID = {0}) AND ENTITY_ID = {1}", ECM_USER_ID, row.Item("ENTITY_ID")) DT_FILES = clsDatabase.Return_Datatable(sql) If DT_FILES.Rows.Count = 0 Then MsgBox("No files found for User. Job will be terminated!") Finish_Job() Exit Sub End If If DD_Rights.ClassRights.Init(row.Item("ENTITY_ID"), chklogging.Checked, DT_FILES.Rows.Count) = False Then MsgBox("Could not init rights management. " & vbNewLine & "Check logfile", MsgBoxStyle.Critical) Exit Sub End If 'BackgroundWorker erstellen ... BW_RightsEntity = New BackgroundWorker BW_RightsEntity.WorkerReportsProgress = True ProgressBar1.Maximum = DT_FILES.Rows.Count countfiles = DT_FILES.Rows.Count WorkingFiles = 0 lblstate.Visible = True lblstate.Text = "Starting Background Worker...." Me.ProgressBar1.Visible = True GUID_WORKING = cmbUser.SelectedValue AddHandler BW_RightsEntity.DoWork, AddressOf bw_DoWork ENTITIES_WORKED += 1 '.. und starten BW_RightsEntity.RunWorkerAsync() Next Catch ex As Exception MsgBox("Unexpected error in starting backgroundworker: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) Me.ProgressBar1.Visible = False End Try End If End Sub Private Sub BW_RightsEntity_ProgressChanged(sender As Object, e As ProgressChangedEventArgs) Handles BW_RightsEntity.ProgressChanged Dim state = "Working on file '" & WorkingFiles.ToString & "' of '" & countfiles.ToString & "'" lblstate.Text = state Me.ProgressBar1.Value = e.ProgressPercentage End Sub Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Dim worker As BackgroundWorker = CType(sender, BackgroundWorker) _error = False Dim i As Integer = 1 'Jede Datei einzeln verarbeiten For Each row As DataRow In DT_FILES.Rows If BW_RightsEntity.CancellationPending = True Then e.Cancel = True Exit For Else If DD_Rights.ClassRights.Collect_Users(row.Item("RECORD_ID"), row.Item("ENTITY_ID")) = True Then WorkingFiles += 1 If DD_Rights.ClassRights.File_DeleteAndSetRight(row.Item("DocID"), row.Item("FULL_FILENAME"), True) Then If DD_Rights.ClassRights.MSG_RESULT <> "" Then MsgBox("Unexpected Errors in setting rights: " & vbNewLine & DD_Rights.ClassRights.MSG_RESULT, MsgBoxStyle.Exclamation) _error = True Else End If Else clsLogger.Add(">> Unexpected Error in ClassRights.File_DeleteAndSetRight. Check Log.") _error = True End If Else _error = True End If If BW_RightsEntity.CancellationPending = False And BW_RightsEntity.IsBusy Then BW_RightsEntity.ReportProgress(i) End If i += 1 End If Next DD_Rights.ClassRights.Finalize_SettingRights() End Sub Private Sub btncancel_Click(sender As Object, e As EventArgs) Handles btncancel.Click ENTITIES_WORKED -= 1 ' Cancel the asynchronous operation. Me.BW_RightsEntity.CancelAsync() End Sub Private Sub BW_RightsEntity_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BW_RightsEntity.RunWorkerCompleted Try btncancel.Visible = False ProgressBar1.Visible = False lblstate.Visible = False If _error = False Then If ENTITIES_WORKED = COUNT_ENTITIES Then Finish_Job() MsgBox("All rights of files belonging to entity/User were checked and refreshed successfully!", MsgBoxStyle.Information) End If Else MsgBox("Some errors occured while checking and setting the rights...please check the log!" & vbNewLine & "Current Entity: " & CURR_ENTITY.ToString, MsgBoxStyle.Exclamation) End If Catch ex As Exception End Try End Sub Private Sub Finish_Job() Dim upd = String.Format("UPDATE TBPMO_USER_RIGHTS_JOBS SET WORKED = 1, CHANGED_WHO = 'JOB-RIGHTS FINISHER' WHERE GUID = {0}", GUID_WORKING) If clsDatabase.Execute_non_Query(upd) = True Then 'Überprüfen ob es User gibt die aktualisiert werden müssen Dim Sql = SQL_USER_RIGHTS_CHANGED DT_WORK_USER_RIGHTS = clsDatabase.Return_Datatable(Sql) Refresh_Combo() End If End Sub End Class