This commit is contained in:
JenneJ 2016-04-25 16:16:37 +02:00
parent 944dcd330a
commit 0b6da26fd8
6 changed files with 98 additions and 6 deletions

View File

@ -25,6 +25,9 @@ Public Class ClassControlBuilder
End Property End Property
' +++ RecordChanged Event +++ ' +++ RecordChanged Event +++
Public WatchRecordChanges As Boolean = True
Public Custom Event OnRecordChanged As EventHandler Public Custom Event OnRecordChanged As EventHandler
AddHandler(value As EventHandler) AddHandler(value As EventHandler)
Me.Events.AddHandler(_onRecordChangedName, value) Me.Events.AddHandler(_onRecordChangedName, value)
@ -59,7 +62,7 @@ Public Class ClassControlBuilder
Public Sub RecordChanged(sender As Object, ByVal e As EventArgs) Public Sub RecordChanged(sender As Object, ByVal e As EventArgs)
Dim onRecordChangedHandler As EventHandler = CType(Me.Events(_onRecordChangedName), EventHandler) Dim onRecordChangedHandler As EventHandler = CType(Me.Events(_onRecordChangedName), EventHandler)
If (onRecordChangedHandler IsNot Nothing) Then If (onRecordChangedHandler IsNot Nothing And WatchRecordChanges) Then
Console.WriteLine("RecordChanged") Console.WriteLine("RecordChanged")
onRecordChangedHandler.Invoke(sender, e) onRecordChangedHandler.Invoke(sender, e)
End If End If

View File

@ -489,6 +489,7 @@ Public Class ClassControlCommandsUI
Private Sub UpdateAllControls(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection) Private Sub UpdateAllControls(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection)
Try Try
For Each ctrl As Control In controls For Each ctrl As Control In controls
Console.WriteLine("Updating Control " + ctrl.Name)
Dim CONTROL_ID As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id 'GetControlID_for_RecordID(ctrl.Name, RecordID) Dim CONTROL_ID As Integer = DirectCast(ctrl.Tag, ClassControlMetadata).Id 'GetControlID_for_RecordID(ctrl.Name, RecordID)
If LogErrorsOnly = False Then ClassLogger.Add(" >> CONTROL_ID: " & CONTROL_ID, False) If LogErrorsOnly = False Then ClassLogger.Add(" >> CONTROL_ID: " & CONTROL_ID, False)
@ -521,13 +522,14 @@ Public Class ClassControlCommandsUI
Dim ValueExists = ClassDatabase.Execute_Scalar(String.Format("SELECT RECORD_ID FROM VWPMO_VALUES WHERE RECORD_ID = {0} AND CONTROL_ID = {1}", RecordID, CONTROL_ID)) Dim ValueExists = ClassDatabase.Execute_Scalar(String.Format("SELECT RECORD_ID FROM VWPMO_VALUES WHERE RECORD_ID = {0} AND CONTROL_ID = {1}", RecordID, CONTROL_ID))
If IsNothing(ValueExists) Then ' Neues Control If IsNothing(ValueExists) Then ' Neues Control
If CONTROL_ID = 995 Or CONTROL_ID = 996 Or CONTROL_ID = 997 Or CONTROL_ID = 810 Then 'If CONTROL_ID = 995 Or CONTROL_ID = 996 Or CONTROL_ID = 997 Or CONTROL_ID = 810 Then
Console.WriteLine("sdasd") ' Console.WriteLine("sdasd")
End If 'End If
If LogErrorsOnly = False Then ClassLogger.Add(" >> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False) If LogErrorsOnly = False Then ClassLogger.Add(" >> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False)
If Not IsNothing(CONTROL_VALUE) Then If Not IsNothing(CONTROL_VALUE) Then
If TypeOf ctrl Is CustomComboBox And CONTROL_VALUE = "" Then If TypeOf ctrl Is CustomComboBox And CONTROL_VALUE = "" Then
Exit Sub 'Exit Sub - Zuviel des guten
Continue For
End If End If
InsertControlValue(CONTROL_ID, RecordID, CONTROL_VALUE) InsertControlValue(CONTROL_ID, RecordID, CONTROL_VALUE)
End If End If

View File

@ -488,7 +488,6 @@ Public Class ClassControlValues
dgv.DataSource = Nothing dgv.DataSource = Nothing
dgv.Refresh() dgv.Refresh()
End If End If
Console.WriteLine("Clearing DataGridView")
End Select End Select
End Sub End Sub

View File

@ -0,0 +1,55 @@
Public Class ClassRecordState
Public Shared Sub LockRecord(RecordId As Integer)
Try
Dim Username As String = Environment.UserName
Dim SQL As String = String.Format("UPDATE TBPMO_RECORD SET IN_WORK = 1, IN_WORK_WHO = '{0}' WHERE GUID = {1}", Username, RecordId)
ClassDatabase.Execute_non_Query(SQL)
Console.WriteLine("Record " & RecordId & " locked")
Catch ex As Exception
MsgBox("Error in LockRecord: " & vbNewLine & ex.Message,MsgBoxStyle.Critical)
End Try
End Sub
Public Shared Sub UnlockRecord(RecordId As Integer)
Try
Dim SQL As String = String.Format("UPDATE TBPMO_RECORD SET IN_WORK = 0, IN_WORK_WHO = NULL WHERE GUID = {0}", RecordId)
ClassDatabase.Execute_non_Query(SQL)
Console.WriteLine("Record " & RecordId & " UNlocked")
Catch ex As Exception
MsgBox("Error in UnlockRecord: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Public Shared Function IsRecordLocked(RecordId As Integer) As String
Try
Dim SQL As String = String.Format("SELECT IN_WORK, IN_WORK_WHO FROM TBPMO_RECORD WHERE GUID = {0}", RecordId)
Dim dt As DataTable = ClassDatabase.Return_Datatable(SQL)
If dt.Rows.Count = 1 Then
Dim IN_WORK As Boolean = dt.Rows(0).Item("IN_WORK")
Dim IN_WORK_WHO As String = dt.Rows(0).Item("IN_WORK_WHO").ToString
If IN_WORK = True Then
' Record ist in Arbeit, benutzer zurückgeben
Return IN_WORK_WHO
ElseIf IN_WORK = False Then
' Record ist nicht in Arbeit, nothing zurück geben
Return Nothing
End If
ElseIf dt.Rows.Count = 0 Then
Throw New Exception("Record " & RecordId & " does not exist")
Else
Throw New Exception("Record" & RecordId & " is not unique")
End If
Catch ex As Exception
MsgBox("Error in IsRecordInWork: " + vbNewLine + ex.Message, MsgBoxStyle.Critical)
Return Nothing
End Try
End Function
End Class

View File

@ -251,6 +251,7 @@
<Compile Include="ClassFolderWatcher.vb" /> <Compile Include="ClassFolderWatcher.vb" />
<Compile Include="ClassJumpRecord.vb" /> <Compile Include="ClassJumpRecord.vb" />
<Compile Include="ClassLicence.vb" /> <Compile Include="ClassLicence.vb" />
<Compile Include="ClassRecordState.vb" />
<Compile Include="frmRight_Management.Designer.vb"> <Compile Include="frmRight_Management.Designer.vb">
<DependentUpon>frmRight_Management.vb</DependentUpon> <DependentUpon>frmRight_Management.vb</DependentUpon>
</Compile> </Compile>

View File

@ -132,6 +132,9 @@ Public Class frmConstructor_Main
Save_Grid_Layout() Save_Grid_Layout()
Save_Splitter_Layout() Save_Splitter_Layout()
ClassWindowLocation.SaveFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN") ClassWindowLocation.SaveFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN")
' Verhindert, das noch geöffnete Records für immer gelockt sind
ClassRecordState.UnlockRecord(SELECTED_RECORD_ID)
End Sub End Sub
@ -1372,8 +1375,27 @@ Public Class frmConstructor_Main
End If End If
End Sub End Sub
Sub EnableEditMode() Sub EnableEditMode()
Dim EditingUser = ClassRecordState.IsRecordLocked(SELECTED_RECORD_ID)
' Überprüfen, ob der Record gerade bearbeitet wird
If Not IsNothing(EditingUser) Then
If USER_LANGUAGE = "de-DE" Then
MsgBox(String.Format("Dieser Datensatz wird gerade vom Benutzer {0} bearbeitet und kann nur lesend abgerufen werden.", EditingUser), MsgBoxStyle.Exclamation)
Else
MsgBox(String.Format("This Record is currently being edited by User {0} and only available in Read-Only mode.", EditingUser), MsgBoxStyle.Exclamation)
End If
' Wenn Record bearbeitet wird, EnableEditMode abbrechen!
Exit Sub
Else
'Wenn Record bearbeitet werden kann, IN_WORK auf 1 setzen, um Bearbeitung durch andere zu verhindern!
ClassRecordState.LockRecord(SELECTED_RECORD_ID)
End If
Lock_RecordControls(False) Lock_RecordControls(False)
Me.tsButtonDelete.Enabled = True Me.tsButtonDelete.Enabled = True
Me.tsButtonAdd.Enabled = True Me.tsButtonAdd.Enabled = True
@ -1388,7 +1410,9 @@ Public Class frmConstructor_Main
CURRENT_RECORD_ID = RECORD_ID CURRENT_RECORD_ID = RECORD_ID
' Abhängige Listen laden ' Abhängige Listen laden
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, RECORD_ID, PARENT_ID, CtrlBuilder.AllControls, ENTITY_ID) ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, RECORD_ID, PARENT_ID, CtrlBuilder.AllControls, ENTITY_ID)
CtrlBuilder.WatchRecordChanges = True
RECORD_ENABLED = True RECORD_ENABLED = True
CURRENT_RECORD_ENABLED = True CURRENT_RECORD_ENABLED = True
@ -1399,6 +1423,8 @@ Public Class frmConstructor_Main
End Sub End Sub
Sub DisableEditMode() Sub DisableEditMode()
ClassRecordState.UnlockRecord(SELECTED_RECORD_ID)
Lock_RecordControls(True) Lock_RecordControls(True)
RECORD_ENABLED = False RECORD_ENABLED = False
CURRENT_RECORD_ENABLED = False CURRENT_RECORD_ENABLED = False
@ -1817,7 +1843,9 @@ Public Class frmConstructor_Main
' ClassControlValues.LoadControlValuesList(firstRecordId, PARENT_ID, ENTITY_ID, CtrlBuilder.MasterPanel.Controls) ' ClassControlValues.LoadControlValuesList(firstRecordId, PARENT_ID, ENTITY_ID, CtrlBuilder.MasterPanel.Controls)
'End If 'End If
' Hinfällig, da hier die Record-ID nicht gebraucht wird ' Hinfällig, da hier die Record-ID nicht gebraucht wird
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesList(ENTITY_ID, CtrlBuilder.MasterPanel.Controls) ClassControlValues.LoadControlValuesList(ENTITY_ID, CtrlBuilder.MasterPanel.Controls)
CtrlBuilder.WatchRecordChanges = True
'Zurücksetzen 'Zurücksetzen
ENTITY_LOADED = True ENTITY_LOADED = True
@ -1855,7 +1883,9 @@ Public Class frmConstructor_Main
ENTITY_RELOAD_AFT_CONTROL_LOAD = False ENTITY_RELOAD_AFT_CONTROL_LOAD = False
'Daten zu Record in jedem Fall laden 'Daten zu Record in jedem Fall laden
'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls) 'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID) ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID)
CtrlBuilder.WatchRecordChanges = True
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden! ' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
RECORD_CHANGED = False RECORD_CHANGED = False
Update_Record_Label(Grid_RecordID) Update_Record_Label(Grid_RecordID)
@ -2369,7 +2399,9 @@ Public Class frmConstructor_Main
Dim sw1 As New Stopwatch Dim sw1 As New Stopwatch
sw1.Start() sw1.Start()
ENTITY_RELOAD_AFT_CONTROL_LOAD = False ENTITY_RELOAD_AFT_CONTROL_LOAD = False
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID) ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID)
CtrlBuilder.WatchRecordChanges = True
Dim elapsed1 As Double Dim elapsed1 As Double
elapsed1 = sw1.Elapsed.TotalSeconds elapsed1 = sw1.Elapsed.TotalSeconds
sw1.Stop() sw1.Stop()