diff --git a/app/DD-Record-Organiser/ClassControlBuilder.vb b/app/DD-Record-Organiser/ClassControlBuilder.vb
index 6d5d515..1637312 100644
--- a/app/DD-Record-Organiser/ClassControlBuilder.vb
+++ b/app/DD-Record-Organiser/ClassControlBuilder.vb
@@ -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
diff --git a/app/DD-Record-Organiser/ClassControlCommandsUI.vb b/app/DD-Record-Organiser/ClassControlCommandsUI.vb
index a122761..a374fc9 100644
--- a/app/DD-Record-Organiser/ClassControlCommandsUI.vb
+++ b/app/DD-Record-Organiser/ClassControlCommandsUI.vb
@@ -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
diff --git a/app/DD-Record-Organiser/ClassControlValues.vb b/app/DD-Record-Organiser/ClassControlValues.vb
index 38cfa49..fa9ac33 100644
--- a/app/DD-Record-Organiser/ClassControlValues.vb
+++ b/app/DD-Record-Organiser/ClassControlValues.vb
@@ -488,7 +488,6 @@ Public Class ClassControlValues
dgv.DataSource = Nothing
dgv.Refresh()
End If
- Console.WriteLine("Clearing DataGridView")
End Select
End Sub
diff --git a/app/DD-Record-Organiser/ClassRecordState.vb b/app/DD-Record-Organiser/ClassRecordState.vb
new file mode 100644
index 0000000..ff3c500
--- /dev/null
+++ b/app/DD-Record-Organiser/ClassRecordState.vb
@@ -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
diff --git a/app/DD-Record-Organiser/DD-Record-Organiser.vbproj b/app/DD-Record-Organiser/DD-Record-Organiser.vbproj
index 7abc640..32e0db4 100644
--- a/app/DD-Record-Organiser/DD-Record-Organiser.vbproj
+++ b/app/DD-Record-Organiser/DD-Record-Organiser.vbproj
@@ -251,6 +251,7 @@
+
frmRight_Management.vb
diff --git a/app/DD-Record-Organiser/frmConstructor_Main.vb b/app/DD-Record-Organiser/frmConstructor_Main.vb
index 587dd31..e2a5e65 100644
--- a/app/DD-Record-Organiser/frmConstructor_Main.vb
+++ b/app/DD-Record-Organiser/frmConstructor_Main.vb
@@ -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()