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

View File

@ -489,6 +489,7 @@ Public Class ClassControlCommandsUI
Private Sub UpdateAllControls(FormID As Integer, RecordID As Integer, controls As Control.ControlCollection)
Try
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)
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))
If IsNothing(ValueExists) Then ' Neues Control
If CONTROL_ID = 995 Or CONTROL_ID = 996 Or CONTROL_ID = 997 Or CONTROL_ID = 810 Then
Console.WriteLine("sdasd")
End If
'If CONTROL_ID = 995 Or CONTROL_ID = 996 Or CONTROL_ID = 997 Or CONTROL_ID = 810 Then
' Console.WriteLine("sdasd")
'End If
If LogErrorsOnly = False Then ClassLogger.Add(" >> InsertControlValue: " & CONTROL_ID & "|" & RecordID & "|" & CONTROL_VALUE, False)
If Not IsNothing(CONTROL_VALUE) Then
If TypeOf ctrl Is CustomComboBox And CONTROL_VALUE = "" Then
Exit Sub
'Exit Sub - Zuviel des guten
Continue For
End If
InsertControlValue(CONTROL_ID, RecordID, CONTROL_VALUE)
End If

View File

@ -488,7 +488,6 @@ Public Class ClassControlValues
dgv.DataSource = Nothing
dgv.Refresh()
End If
Console.WriteLine("Clearing DataGridView")
End Select
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="ClassJumpRecord.vb" />
<Compile Include="ClassLicence.vb" />
<Compile Include="ClassRecordState.vb" />
<Compile Include="frmRight_Management.Designer.vb">
<DependentUpon>frmRight_Management.vb</DependentUpon>
</Compile>

View File

@ -132,6 +132,9 @@ Public Class frmConstructor_Main
Save_Grid_Layout()
Save_Splitter_Layout()
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
@ -1372,8 +1375,27 @@ Public Class frmConstructor_Main
End If
End Sub
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)
Me.tsButtonDelete.Enabled = True
Me.tsButtonAdd.Enabled = True
@ -1388,7 +1410,9 @@ Public Class frmConstructor_Main
CURRENT_RECORD_ID = RECORD_ID
' Abhängige Listen laden
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, RECORD_ID, PARENT_ID, CtrlBuilder.AllControls, ENTITY_ID)
CtrlBuilder.WatchRecordChanges = True
RECORD_ENABLED = True
CURRENT_RECORD_ENABLED = True
@ -1399,6 +1423,8 @@ Public Class frmConstructor_Main
End Sub
Sub DisableEditMode()
ClassRecordState.UnlockRecord(SELECTED_RECORD_ID)
Lock_RecordControls(True)
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)
'End If
' Hinfällig, da hier die Record-ID nicht gebraucht wird
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesList(ENTITY_ID, CtrlBuilder.MasterPanel.Controls)
CtrlBuilder.WatchRecordChanges = True
'Zurücksetzen
ENTITY_LOADED = True
@ -1855,7 +1883,9 @@ Public Class frmConstructor_Main
ENTITY_RELOAD_AFT_CONTROL_LOAD = False
'Daten zu Record in jedem Fall laden
'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)
CtrlBuilder.WatchRecordChanges = True
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
RECORD_CHANGED = False
Update_Record_Label(Grid_RecordID)
@ -2369,7 +2399,9 @@ Public Class frmConstructor_Main
Dim sw1 As New Stopwatch
sw1.Start()
ENTITY_RELOAD_AFT_CONTROL_LOAD = False
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID)
CtrlBuilder.WatchRecordChanges = True
Dim elapsed1 As Double
elapsed1 = sw1.Elapsed.TotalSeconds
sw1.Stop()