This commit is contained in:
2023-03-22 15:46:32 +01:00
parent 60c739833f
commit 9a9fe72b4f
13 changed files with 1818 additions and 396 deletions

View File

@@ -4,6 +4,10 @@ Imports DevExpress.XtraTreeList.Nodes.Operations
Imports DevExpress.XtraTreeList.Nodes
Imports DevExpress.XtraSplashScreen
Imports System.Threading
Imports DevExpress.Utils
Imports DevExpress.XtraScheduler
Imports DevExpress.Data
Imports DD_Record_Organizer.frmConstructor_Main
Public Class frmNodeNavigation
Dim DTNODES As DataTable
@@ -14,30 +18,85 @@ Public Class frmNodeNavigation
Private RunningTaskToken = RunningTaskTokenSource.Token
Private oEntityID As Int16
Private oConstructID As Int16
Private CONSTRUCTORID As Integer
Private CONSTRUCTOR_DETAIL_ID As Int16
Private oFilterActive As Boolean = False
Public CtrlBuilder As ClassControlBuilder
Public CtrlCommandUI As ClassControlCommandsUI
Public Sub New(pEntityID As Int16, oConstructID As Int16)
Private RECORD_ID As Integer
Private DT_CONTROLS_ENTITY As DataTable
Private DT_WINDREAM_COLUMNS_GRID As DataTable
Private DT_DOCRESULT_DROPDOWN_ITEMS As DataTable
Private DT_RESULTLIST_OPTIONS As DataTable
Private DT_RESULTLIST_VARIABLE_VALUE As DataTable
Private DT_ENTITY_DATA As DataTable
Private DT_TBPMO_FORM_VIEW As DataTable
Private DT_CONSTRUCT_VIEW As DataTable
Private COUNT_RO_CONTROLS As Integer = 0
Private SELECTED_RECORD_ID As Integer
Private GRID_TYPE_ID As Integer = 1
Private ENTITY_RECORD_COUNT As Integer = 0
Private act_FormViewID As Integer
Private FORMVIEW_ID As Integer
Private FORM_LOADED As Boolean = False
Private ENTITY_LOADING_PROCESS As Boolean = False
Private RECORD_ENABLED As Boolean = False
Private BACKGROUND_HELPER As ClassBackgroundHelper
Private Node_AfterSelect As Boolean = False
Public Sub New(pEntityID As Int16, pConstructID As Int16)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
oEntityID = pEntityID
oConstructID = oConstructID
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
oEntityID = pEntityID
oConstructID = pConstructID
End Sub
Private Sub frmNodeNavigation_Load(sender As Object, e As EventArgs) Handles Me.Load
CONSTRUCTORID = CURRENT_CONSTRUCTOR_ID
Dim Sql = String.Format("SELECT *, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " &
"FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {2} AND CONSTRUCT_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, CURRENT_SCREEN_ID, oConstructID)
DT_VWPMO_CONSTRUCTOR_FORMS = ClassDatabase.Return_Datatable(Sql, True)
CURRENT_DT_TBPMO_ENTITY_RIGHT_CONTROLS = ClassDatabase.Return_Datatable(String.Format("SELECT T.* FROM TBPMO_ENTITY_RIGHT_CONTROLS T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID where T1.CONSTRUCT_ID = {0}", CONSTRUCTORID), False)
' Hintergrund Bild initialisieren
BACKGROUND_HELPER = New ClassBackgroundHelper(GridViewDoc_Search, My.Resources.windream_Logo_transparent_klein) '
ClassWindowLocation.LoadFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN")
Try
DT_CONSTRUCT_VIEW = ClassDatabase.Return_Datatable("SELECT * FROM TBPMO_FORM_CONSTRUCTOR WHERE GUID = " & CONSTRUCTORID)
Dim SEL1 = String.Format("SELECT * FROM TBPMO_FORM WHERE GUID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {0} AND CONSTRUCT_ID = {1})", CURRENT_SCREEN_ID, CONSTRUCTORID)
DT_ENTITY_DATA = ClassDatabase.Return_Datatable(SEL1, True)
SEL1 = String.Format("SELECT *, dbo.FNPMO_GET_CONTROL_CAPTION ('{0}', 1, CONTROL_ID) AS 'CAPTION' FROM VWPMO_CONTROL_SCREEN", USER_LANGUAGE)
DT_VWPMO_CONTROL_SCREEN = ClassDatabase.Return_Datatable(SEL1, True)
'DT_CONTROL_SCREEN_SHOW_COL_0 = ClassHelper.FILTER_DATATABLE(DT_VWPMO_CONTROL_SCREEN, "CONTROL_SHOW_COLUMN = 0", "") 'ClassDatabase.Return_Datatable("SELECT FORM_ID, CONTROL_ID, CONTROL_COL_NAME, CONTROL_SHOW_COLUMN FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_SHOW_COLUMN = 0", True)
If DT_CONSTRUCT_VIEW.Rows.Count = 1 Then
'Load Input Grid
Me.Text = DT_CONSTRUCT_VIEW.Rows(0).Item("FORM_TITLE")
'Die Standards ein/ausblenden
End If
'Dim sql_ResultList = "select T1.ENTITY_ID,T.GUID,T.TITLE,T.MANUALLY,T.CREATE_ON_REC_CREATE,T.CREATE_ON_FOLL_UP " &
' "FROM TBPMO_WORKFLOW T,TBPMO_WORKFLOW_ENTITY_STATE T1 " &
' "WHERE T.GUID = T1.WF_ID " &
' "GROUP BY T1.ENTITY_ID,T.GUID,T.TITLE,T.MANUALLY,T.CREATE_ON_REC_CREATE,T.CREATE_ON_FOLL_UP"
'DT_WORKFLOWS_MANUAL = ClassDatabase.Return_Datatable(sql_ResultList)
Load_Datafor_Entity()
FORM_LOADED = True
Catch ex As System.Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Loading Form part 4")
End Try
Load_nodes()
End Sub
Async Function Load_nodes() As Threading.Tasks.Task
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
Load_Datafor_Entity()
Dim oToken = RunningTaskTokenSource.Token
Dim Sql = String.Format("select T.GUID,T.RECORD_ID, T.NODE_CONFIG_ID,T.NODE_CAPTION,T.ID1, T.BACK_COLOR,T.PARENT_GUID from VWPMO_STRUCTURE_NODES T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T1.CONSTRUCT_ID = {0}", 1)
DTNODES = ClassDatabase.Return_Datatable(Sql, True)
@@ -133,15 +192,107 @@ Public Class frmNodeNavigation
End Class
Private Sub TreeListDevexpress_FocusedNodeChanged(sender As Object, e As FocusedNodeChangedEventArgs) Handles TreeListDevexpress.FocusedNodeChanged
If oFilterActive Then
Exit Sub
End If
For Each treeListNode As DevExpress.XtraTreeList.Nodes.TreeListNode In TreeListDevexpress.Selection
Dim oID = treeListNode.Id
Dim PID = treeListNode.ParentNode
Dim Column_RecID As DevExpress.XtraTreeList.Columns.TreeListColumn = TreeListDevexpress.Columns("RECORD_ID")
Dim RecID = e.Node.GetDisplayText(Column_RecID)
Dim Column_pRecord As DevExpress.XtraTreeList.Columns.TreeListColumn = TreeListDevexpress.Columns("RECORD_ID")
Dim pRecord = e.Node.GetDisplayText(Column_pRecord)
Console.WriteLine(oID)
If oID > 0 Then
Update_Status_Label(True, oID)
Else
Exit Sub
End If
Dim oNodeInfo = $"NodeGUID {oID}"
If pRecord.Length > 0 Then
oNodeInfo += $" - RecordID {pRecord}"
Node_AfterSelect = True
'Dim sw As New SW("TreeViewMain_AfterSelect1")
' Dim swAll As New SW("TreeViewMain_AfterSelect")
DisableEditMode()
Dim fl = FORM_LOADED
Dim firstORFOLLWOWIN = False
' ClassNodeNavigation.Check_NODE_CONFIG_ID(oEntityID, SelectedNode)
CURRENT_RECORD_ID = pRecord
CURRENT_SEARCH_TYPE = "RECORD"
DisableEditMode()
' muss vor show selected record data kommen,
' sodass die datasource für die angehakten werte existiert (checked list box)
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesListWithPlaceholders(oEntityID, CURRENT_RECORD_ID, 0, CtrlBuilder.AllControls, oEntityID)
CtrlBuilder.WatchRecordChanges = True
Show_Selected_Record_Data(CURRENT_RECORD_ID)
ClassRightManagement.Check_Set_Rights(CURRENT_RECORD_ID, oEntityID)
CONTROL_HANDLING()
If CURRENT_RECORD_ID > 0 Then
If RIGHT_RECORD_AND_FILE_READ_ONLY = False And CtrlCommandUI.IsInsert = False Then
If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then
'tsButtonEdit.Enabled = False
'tsButtonSave.Enabled = False
'tsButtonDelete.Enabled = False
Else
' tsButtonEdit.Enabled = True
End If
End If
'If RIGHT_RECORD_AND_FILE_READ_ONLY = True Or NODE_NAVIGATION = True Then
' bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
'Else
' bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
'End If
End If
'Liste der geänderten Control Values leeren
CtrlBuilder.ControlsChanged.Clear()
'Load_DocGrid_Layout()
'Load_Grid_Layout()
'Load_Variants_Grid_Layout()
'swAll.Done()
Node_AfterSelect = False
End If
Update_Status_Label(True, oNodeInfo, EditState.None)
Next
End Sub
Public Sub Update_Status_Label(visible As Boolean, Optional text As String = "", Optional state As EditState = EditState.None)
bsiInfo.Caption = text
If visible = True Then
bsiInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
Else
bsiInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End If
Select Case state
Case EditState.Insert
bsiInfo.ItemAppearance.Normal.BackColor = Color.Yellow
Case EditState.Update
bsiInfo.ItemAppearance.Normal.BackColor = Color.LightBlue
Case Else
bsiInfo.ItemAppearance.Normal.BackColor = Color.LightGray
End Select
End Sub
Private Sub TreeListDevexpress_GetStateImage(sender As Object, e As GetStateImageEventArgs) Handles TreeListDevexpress.GetStateImage
Dim Column_Config_ID As DevExpress.XtraTreeList.Columns.TreeListColumn = TreeListDevexpress.Columns("NODE_CONFIG_ID")
Dim configid = e.Node.GetDisplayText(Column_Config_ID)
@@ -205,7 +356,9 @@ Public Class frmNodeNavigation
FAU_AD_SERVER = ""
FAU_AD_USER = ""
FAU_AD_USER_PW = ""
If IsNothing(DT_ADDING_USERS) Then
Load_Adding_users()
End If
If DT_ADDING_USERS.Rows.Count > 0 Then
'Überprüfen ob für diese Entität ein spezifischer windream-User verwendet wird, wenn Dateien abgelegt werden?
Dim query1 = From _user In DT_ADDING_USERS.AsEnumerable()
@@ -228,11 +381,636 @@ Public Class frmNodeNavigation
Next
End If
sw.Done()
' Load_Entity_Data_CONTROLS_RECORDS()
Load_Entity_Data_CONTROLS_RECORDS()
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Load_Datafor_Entity: " & ex.StackTrace)
End Try
End Sub
Sub Load_Entity_Data_CONTROLS_RECORDS()
Try
LOGGER.Debug("START Load_Entity_Data")
Dim sw As New SW("Load_Entity_Data")
' Me.Cursor = Cursors.WaitCursor
RECORD_CHANGED = False
RECORD_ID = 0
Dim expression As String
Dim sql
'Dim sql = "SELECT CONTROL_ID, CONTROL_READ_ONLY FROM VWPMO_CONTROL_SCREEN WHERE CTRLTYPE_ID NOT IN (1) AND CONTROL_ENTITY_ID = " & oEntityID
DT_CONTROLS_ENTITY = ClassHelper.FILTER_DATATABLE(DT_VWPMO_CONTROL_SCREEN, "CTRLTYPE_ID NOT IN (1) AND CONTROL_ENTITY_ID = " & oEntityID, "")
'ClassDatabase.Return_Datatable(sql, True)
expression = "CONTROL_READ_ONLY = " & 1
Dim CONTROLS_ROW() As DataRow
CONTROLS_ROW = DT_CONTROLS_ENTITY.Select(expression)
Dim i As Integer
' Count the locked controls
For i = 0 To CONTROLS_ROW.GetUpperBound(0)
COUNT_RO_CONTROLS += 1
Next
If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then
bbtnitmEditRec.Enabled = False
bbtnitmSaveRec.Enabled = False
'tsButtonDelete.Enabled = False
Else
bbtnitmEditRec.Enabled = True
bbtnitmSaveRec.Enabled = True
' tsButtonDelete.Enabled = True
End If
Dim resultDT_VWPMO_CONSTRUCTOR_FORMS = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable()
Select form
Where form.Item("FORM_ID") = oEntityID).Single()
CURRENT_CONSTRUCTOR_DETAIL_ID = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("GUID")
SQL_RECORD_AND_FILE_READ_ONLY = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("SQL_RIGHT_READ_AND_VIEW_ONLY")
SQL_DOC_READ_ONLY = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("SQL_RIGHT_WINDREAM_VIEW")
expression = String.Format("ENTITY_ID = {0} AND LANGUAGE = '{1}'", oEntityID, USER_LANGUAGE)
DT_WINDREAM_COLUMNS_GRID = ClassHelper.FILTER_DATATABLE(CURRENT_RESULTLIST_CONFIG, expression, "SEQUENCE")
expression = String.Format("oEntityID = {0} AND TYPE_ID = 10 AND LANGUAGE = '{1}'", oEntityID, USER_LANGUAGE)
DT_DOCRESULT_DROPDOWN_ITEMS = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_DOCRESULT_DROPDOWN_ITEMS, expression, "SEQUENCE")
DT_RESULTLIST_OPTIONS = ClassHelper.FILTER_DATATABLE(CURRENT_VARIABLE_CONTROLS, "ENTITY_ID = " & oEntityID, "")
expression = String.Format("ENTITY_ID = {0} AND LANGUAGE = '{1}' AND COLUMN_VIEW LIKE 'VALUE%'", oEntityID, USER_LANGUAGE)
DT_RESULTLIST_VARIABLE_VALUE = ClassHelper.FILTER_DATATABLE(CURRENT_RESULTLIST_CONFIG, expression, "SEQUENCE")
Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable()
Select form
Where form.Item("GUID") = oEntityID).Single()
'sql = String.Format("select * from TBPMO_RIGHT_USER WHERE USER_ID = {0} AND oEntityID = {1}", USER_GUID, oEntityID)
DT_RIGHTS_USER = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_RIGHT_USER, "ENTITY_ID = " & oEntityID, "")
expression = String.Format("")
sql = String.Format("SELECT DISTINCT EDIT_REC,ADD_REC,DELETE_REC,ADD_DOC,VIEW_DOC,DELETE_DOC FROM TBPMO_RIGHT_GROUP WHERE ENTITY_ID = {0} AND GROUP_ID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {1})", oEntityID, USER_GUID)
DT_RIGHTS_GROUP = ClassDatabase.Return_Datatable(sql, True)
sql = String.Format("SELECT VIEW_ID FROM TBPMO_USER_CONSTR_VIEW_TYPE WHERE CONSTRUCTOR_DETAIL_ID = {0} AND [ENTITY_ID] = {1} AND USER_ID = {2}", CURRENT_CONSTRUCTOR_DETAIL_ID, oEntityID, USER_GUID)
GRID_TYPE_ID = ClassDatabase.Execute_Scalar(sql, True)
If IsNothing(GRID_TYPE_ID) Then
ClassDatabase.Execute_non_Query("INSERT INTO TBPMO_USER_CONSTR_VIEW_TYPE ([USER_ID],CONSTRUCTOR_DETAIL_ID,[ENTITY_ID]) VALUES (" & USER_GUID & "," & CURRENT_CONSTRUCTOR_DETAIL_ID & "," & oEntityID & ")")
GRID_TYPE_ID = 1
End If
SELECTED_RECORD_ID = 0
' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS
Dim result1 = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable()
Select form
Where form.Item("FORM_ID") = oEntityID).Single()
CURRENT_PARENT_ENTITY_ID = 0
' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS
Dim query = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable()
Select form
Where form.Item("FORM_ID") = oEntityID
Dim QuickViewSQL = query.Single().Item("SQL_QUICK_VIEW")
CURRENT_ENTITYSQL = Get_Grid_Sql_NODE_NAV(CONSTRUCTORID, oEntityID, CURRENT_CONSTRUCTOR_DETAIL_ID, USER_GUID)
' CURRENT_ENTITYSQL = GridSQL
'Anzahl der Datensätze
ENTITY_RECORD_COUNT = ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBPMO_RECORD where PARENT_RECORD = 0 AND FORM_ID = " & oEntityID, True)
ClassDOC_SEARCH.Get_DOC_RESULTTABLE(DT_RESULTLIST_OPTIONS, DT_RESULTLIST_VARIABLE_VALUE, DT_WINDREAM_COLUMNS_GRID, oEntityID, RECORD_ID, True, True)
DT_TBPMO_FORM_VIEW = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_FORM_VIEW, "FORM_ID = " & oEntityID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID, "")
CURRENT_ENTITYSTRING = DT_TBPMO_FORM_VIEW.Rows(0).Item("FORM_TITLE")
FORMVIEW_ID = DT_TBPMO_FORM_VIEW.Rows(0).Item("GUID")
Load_Controls(FORMVIEW_ID)
Try
Dim async As New ClassAsyncSQL(CURRENT_ENTITYSQL)
async.bw.RunWorkerAsync()
While async.bw.IsBusy
Application.DoEvents()
End While
CURRENT_DT_ENTITY_RECORDS = async.dt
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error Async EntitySQL", ex.Message, ex.StackTrace)
End Try
If IsNothing(CURRENT_DT_ENTITY_RECORDS) Then
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in getting Entity-Data - Check logfile")
Else
CURRENT_DT_ENTITY_RECORDS.TableName = "VWPMO_ENTITY_TABLE" & oEntityID
' Dim SQL_AutoValues = "SELECT GUID AS CONTROL_ID, CONNECTION_ID_1 AS CONNECTION_ID, SQL_COMMAND_1 AS SQL_COMMAND FROM TBPMO_CONTROL WHERE CONNECTION_ID_1 <> '' AND SQL_COMMAND_1 <> '' AND FORM_ID = " & oEntityID
Dim DT_AUTOVALUES = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONNECTION_ID_1 > 0 AND SQL_COMMAND_1 <> '' AND FORM_ID = " & oEntityID, "")
'Dim DT_AUTOVALUES As DataTable = ClassDatabase.Return_Datatable(SQL_AutoValues, True)
CURRENT_SQL_AUTO_VALUES_DT = DT_AUTOVALUES
If USER_WAN = True Then
End If
Try
Dim primaryKey(1) As DataColumn
primaryKey(0) = CURRENT_DT_ENTITY_RECORDS.Columns("Record-ID")
CURRENT_DT_ENTITY_RECORDS.PrimaryKey = primaryKey
Catch ex As Exception
LOGGER.Warn("Could not set the primary Key(Record-ID): " & ex.Message)
End Try
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesList(oEntityID, CtrlBuilder.MasterPanel.Controls)
CtrlBuilder.WatchRecordChanges = True
'Zurücksetzen
ENTITY_LOADING_PROCESS = True
Dim RecLoaded As Boolean = False
End If
'Load_Splitter_Layout()
sw.Done()
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Load_Entity_Data", ex.Message, ex.StackTrace)
Finally
'Me.Cursor = Cursors.Default
ENTITY_LOADING_PROCESS = True
End Try
End Sub
Sub Update_Record_Label(RecordId As Integer)
Try
Dim SQL As String = "SELECT ADDED_WHO, CONVERT(VARCHAR(16),ADDED_WHEN,20) AS ADDED_WHEN, COALESCE(CHANGED_WHO,'') AS CHANGED_WHO, COALESCE(CONVERT(VARCHAR(16),CHANGED_WHEN,20),'') AS CHANGED_WHEN FROM TBPMO_RECORD WHERE GUID = " & RecordId
Dim expression = "[Record-ID] = " & RecordId
Dim resultDT As DataTable
If CtrlCommandUI.IsInsert = True Then
resultDT = ClassDatabase.Return_Datatable(SQL)
Else
resultDT = ClassDatabase.Return_Datatable(SQL, True)
End If
If Not IsNothing(resultDT) Then
If resultDT.Rows.Count = 0 Then
Exit Sub
End If
bsitmRecordID.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Dim CreateChangeString = String.Format("Added by '{0}', when: {1}", resultDT.Rows(0).Item(0), resultDT.Rows(0).Item(1))
If CtrlCommandUI.IsInsert = False Then
CreateChangeString = CreateChangeString + String.Format(" - Changed by '{0}', when: {1}", resultDT.Rows(0).Item(2), resultDT.Rows(0).Item(3))
End If
bsitmRecordID.Caption = String.Format("Record ({0}) - {1}", RecordId, CreateChangeString.ToString)
bsitmRecordID.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
End If
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Async Function Show_Selected_Record_Data(Rec_ID As Integer) As Threading.Tasks.Task
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
LOGGER.Debug("Show_Selected_Record_Data: " & Rec_ID.ToString)
Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable()
Select form
Where form.Item("GUID") = oEntityID).Single()
Update_Status_Label(False, "")
LOGGER.Debug("RECORD ID: " & Rec_ID.ToString)
'Me.pnlDetails.Visible = True
SELECTED_RECORD_ID = Rec_ID
RECORD_ID = SELECTED_RECORD_ID
CURRENT_PARENT_RECORD_ID = 0
RIGHT_CONTROL_CHANGED = False
ENTITY_RELOAD_AFT_CONTROL_LOAD = False
CtrlBuilder.WatchRecordChanges = False
If pnlControls.Enabled = False Then pnlControls.Enabled = True
ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, 0, oEntityID, CtrlBuilder.AllControls, oEntityID)
CtrlBuilder.WatchRecordChanges = True
Dim sw As New SW("Show Selected RecordData 2")
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
RECORD_CHANGED = False
'Refresh_Navpane()
Update_Record_Label(SELECTED_RECORD_ID)
RECORD_ID = SELECTED_RECORD_ID
sw.Done()
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in SelectedRecord_ShowData: ", ex.Message)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Function
#Region "Controls"
Sub Load_Controls(frmview_id As Integer)
Dim sw As New SW("Load_Controls")
FORMVIEW_ID = frmview_id
oEntityID = DT_TBPMO_FORM_VIEW.Rows(0).Item("FORM_ID")
CURRENT_ENTITY_ID = oEntityID
CtrlBuilder = New ClassControlBuilder(pnlControls)
CtrlCommandUI = New ClassControlCommandsUI(CtrlBuilder,
ContextMenuDetails,
AddressOf NewEditAppointment)
CtrlCommandUI.LoadControls(oEntityID)
Lock_RecordControls(True)
AddHandler CtrlBuilder.OnRecordChanged, AddressOf OnRecordChanged
' AddHandler CtrlBuilder.OnMouseHover, AddressOf HandleToolTip
sw.Done()
End Sub
Private Sub OnRecordChanged(sender As Object, e As System.EventArgs)
'If ENTITY_LOADING_PROCESS Then
' RECORD_CHANGED = True
'End If
End Sub
'Private Sub HandleToolTip(sender As Object, e As EventArgs)
' Dim control As Windows.Forms.Control = DirectCast(sender, Windows.Forms.Control)
' Dim id As Integer = DirectCast(control.Tag, ClassControlMetadata).Id
' Dim hint = ClassControlValueCache.LoadHint(id)
' If Not IsNothing(hint) Then
' 'show hint
' Console.WriteLine("Showing hint: " & hint)
' ToolTipController.ShowHint(hint.ToString, ToolTipLocation.RightCenter)
' Else
' ToolTipController.HideHint()
' End If
'End Sub
Sub Lock_RecordControls(state As Boolean)
Lock_Record_Controls_Recursive(state, pnlControls.Controls)
End Sub
Sub Lock_Record_Controls_Recursive(state As Boolean, controls As System.Windows.Forms.Control.ControlCollection)
For Each Control As System.Windows.Forms.Control In controls
Dim controlId As Integer = DirectCast(Control.Tag, ClassControlMetadata).Id
Select Case Control.GetType()
Case GetType(System.Windows.Forms.GroupBox)
Lock_Record_Controls_Recursive(state, DirectCast(Control, GroupBox).Controls)
Case GetType(System.Windows.Forms.TextBox)
Dim txt As TextBox = CType(Control, TextBox)
txt.ReadOnly = CHECK_CONTROL_CONFIGURED_RO(controlId, state)
Case Else
Control.Enabled = Not CHECK_CONTROL_CONFIGURED_RO(controlId, state) 'state
End Select
Next
End Sub
Private Function CHECK_CONTROL_CONFIGURED_RO(CONTROL_ID As Integer, state As Boolean)
Try
' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS
Dim result1 = (From form In DT_CONTROLS_ENTITY.AsEnumerable()
Select form
Where form.Item("CONTROL_ID") = CONTROL_ID).Single()
Dim locked = result1.Item("CONTROL_READ_ONLY")
If state = False And locked = True Then
state = True
End If
Return state
Catch ex As Exception
Return state
End Try
End Function
Sub DisableEditMode()
If RECORD_ID = 0 Then Exit Sub
Dim sw As New SW("DisableEditMode")
Dim REC = RECORD_ID
ClassRecordState.UnlockRecord(SELECTED_RECORD_ID)
Dim isinsert As Boolean
If IsNothing(CtrlCommandUI) Then
isinsert = 0
Else
isinsert = CtrlCommandUI.IsInsert
End If
ClassRecordCommands.CHECK_RECORD_FINAL(SELECTED_RECORD_ID, isinsert)
Lock_RecordControls(True)
RECORD_ENABLED = False
CURRENT_RECORD_ENABLED = False
Me.bbtnitmSaveRec.Enabled = False
If RECORD_ENABLED = True Then
ClassControlValues.UnloadControlValuesList(SELECTED_RECORD_ID, RECORD_ID, CtrlBuilder.AllControls)
End If
If Not IsNothing(CtrlCommandUI) Then
'If CtrlCommandUI.IsInsert Then
' CtrlCommandUI.IsInsert = False
'End If
If CtrlCommandUI.IsEdit Then
CtrlCommandUI.IsEdit = False
End If
End If
If RIGHT_READ_ONLY_DOC = False Then
'If ACTIVATE_DOC_SEARCH_ON_EDIT = False Then
' Doc_ReadOnlyHandler(False)
'Else
Doc_ReadOnlyHandler(True)
' End If
End If
sw.Done()
End Sub
Sub CONTROL_HANDLING()
Dim sw As New SW("CONTROL_HANDLING")
bbtnitmSaveRec.Enabled = True
bbtnitmEditRec.Enabled = True
'tsButtonDelete.Enabled = True
'tslblLocked.Visible = False
'tslblFileslocked.Visible = False
'pnlPositions.Enabled = True
If SQL_RECORD_AND_FILE_READ_ONLY <> "" Or SQL_DOC_READ_ONLY <> "" Then
If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
bbtnitmEditRec.Enabled = False
bbtnitmSaveRec.Enabled = False
'tsButtonDelete.Enabled = False
'tslblLocked.Visible = True
'TabFollowUp.PageEnabled = False
'tsmiMassChanges.Enabled = False
End If
If RIGHT_READ_ONLY_DOC = True Then
' tslblFileslocked.Visible = True
Doc_ReadOnlyHandler(False)
End If
Else
If DT_RIGHTS_GROUP.Rows.Count > 0 Or DT_RIGHTS_USER.Rows.Count > 0 Then
'DATENSATZ-RECHTE
If RIGHT_ADD_R = False Then
' tsButtonAdd.Enabled = False
End If
If RIGHT_EDIT_R = False Then
' tslblLocked.Visible = True
bbtnitmEditRec.Enabled = False
bbtnitmSaveRec.Enabled = False
' tsButtonDelete.Enabled = False
' tsmiMassChanges.Enabled = False
If RIGHT_ADD_R = False Then
bbtnitmSaveRec.Enabled = False
End If
End If
If RIGHT_DELETE_R = False Then
' tsButtonDelete.Enabled = False
End If
'DATEI-RECHTE
If RIGHT_READ_ONLY_DOC = True Then
' tslblFileslocked.Visible = True
End If
End If
End If
sw.Done()
End Sub
#End Region
#Region "Appointments"
Sub NewEditAppointment(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Try
Dim ctrl As Windows.Forms.Control = sender
ClassFunctionCommandsUI.NewEditAppointment(ctrl.Name, oEntityID, RECORD_ID, pnlControls.Controls)
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Sub EditAppointment(ByVal sender As Windows.Forms.Control, FormID As Integer)
Try
' Load All appointments first
frmCalendar.TBPMO_RESOURCESTableAdapter.Fill(frmCalendar.DD_DMSDataSetCalendar.TBPMO_RESOURCES)
frmCalendar.TBPMO_APPOINTMENTSTableAdapter.Fill(frmCalendar.DD_DMSDataSetCalendar.TBPMO_APPOINTMENTS)
Dim apt As Appointment = frmCalendar.SchedulerStorage1.Appointments.Items.Find(AddressOf FindAppointment)
If apt IsNot Nothing Then
frmCalendar.SchedulerControl1.ShowEditAppointmentForm(apt)
End If
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Private Function FindAppointment(ByVal apt As Appointment) As Boolean
Return Convert.ToInt32(apt.CustomFields("RecordID")) = SELECTED_RECORD_ID
End Function
#End Region
Sub Doc_ReadOnlyHandler(state As Boolean)
Dim sw As New SW("Doc_ReadOnlyHandler")
If state = False Then
GridControlDocSearch.ContextMenuStrip = cmsResultFilesBasic
'tslblDocViewLocked.Visible = True
ElseIf state = True Then
GridControlDocSearch.ContextMenuStrip = ContextMenuStripResultFiles
' tslblDocViewLocked.Visible = False
End If
sw.Done()
End Sub
Private Sub TreeListDevexpress_ColumnFilterChanged_1(sender As Object, e As EventArgs) Handles TreeListDevexpress.ColumnFilterChanged
'oFilterActive = True
End Sub
Private Sub LoadRecord(pRecord As Integer)
Try
CURRENT_RECORD_ID = pRecord
CURRENT_SEARCH_TYPE = "RECORD"
'Wird jetzt bei BeforeRowChange überprüft
DisableEditMode()
' muss vor show selected record data kommen,
' sodass die datasource für die angehakten werte existiert (checked list box)
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesListWithPlaceholders(CURRENT_ENTITY_ID, CURRENT_RECORD_ID, 0, CtrlBuilder.AllControls, oEntityID)
CtrlBuilder.WatchRecordChanges = True
If CURRENT_RECORD_ID > 0 Then
Show_Selected_Record_Data(CURRENT_RECORD_ID)
End If
ClassRightManagement.Check_Set_Rights(CURRENT_RECORD_ID, oEntityID)
CONTROL_HANDLING()
If CURRENT_RECORD_ID > 0 Then
If RIGHT_RECORD_AND_FILE_READ_ONLY = False And CtrlCommandUI.IsInsert = False Then
If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then
bbtnitmEditRec.Enabled = False
bbtnitmSaveRec.Enabled = False
'tsButtonDelete.Enabled = False
Else
' bbtnitmEditRec.Enabled = True
End If
End If
If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
' bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Else
' bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
End If
'tsButtonAdd.Enabled = False
'MsgBox(SplitContainerFORM.Collapsed)
'MsgBox(SplitContainerMain.Collapsed)
'MsgBox(SplitContainerTop.Collapsed)
End If
'Liste der geänderten Control Values leeren
CtrlBuilder.ControlsChanged.Clear()
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error:", ex.Message & vbNewLine & ex.StackTrace)
End Try
End Sub
Private Sub DateiÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiÖffnenToolStripMenuItem.Click
End Sub
'''' <summary>
'''' Fragt den Benutzer beim Datensatzwechsel, ob Änderungen gespeichert werden sollen. Gibt False zurück, wenn Mussfelder ausgefüllt werden müssen, ansonsten True.
'''' </summary>
'Private Function TrySave_Automatic() As Boolean
' Try
' EDIT_STATE = EditState.None
' 'Update_Status_Label(False)
' If RECORD_CHANGED = True Then
' Dim ShouldSave As DialogResult
' If USER_LANGUAGE = "de-DE" Then
' ShouldSave = MessageBox.Show("Sie haben ungespeicherte Änderungen. Wollen Sie diese speichern?", "Ungespeicherte Änderungen", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
' Else
' ShouldSave = MessageBox.Show("There are unsaved changes. Would You like to save?", "Unsaved changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
' End If
' ' Änderungen sollen gespeichert werden
' If ShouldSave = DialogResult.Yes Then
' If CtrlCommandUI.IsInsert Then
' EDIT_STATE = EditState.None
' End If
' Dim RequiredControlsFilled As Boolean = TrySave_RequiredControlsFilled()
' If RequiredControlsFilled = True Then
' ' Änderungen sollen gespeichert werden,
' ' Muss-Felder sind alle ausgefüllt
' TrySave_DoSave()
' ' Hinzufügen Button wieder aktivieren
' If ADD_RECORDS_CONSTR = False Then
' tsButtonAdd.Enabled = False
' Else
' tsButtonAdd.Enabled = True
' End If
' If CtrlCommandUI.IsInsert Then
' Lock_RecordControls(True)
' End If
' Return True
' Else
' ' Änderungen sollen gespeichert werden,
' ' aber Muss-Felder sind noch nicht ausgefüllt worden
' Return False
' End If
' Else ' Änderungen sollen nicht gespeichert werden
' ' Angelegten Record löschen
' If CtrlCommandUI.IsInsert Then
' If ClassHelper.DeleteRecord(SELECTED_RECORD_ID, "TrySave - UserdecidedNotToSave - ENTITY-ID: " & CURRENT_ENTITY_ID) = True Then
' CtrlCommandUI.IsInsert = False
' INSERT_IN_ACTION = False
' End If
' End If
' ' Änderungen sollen nicht gespeichert werden
' RECORD_CHANGED = False
' tsButtonCancel.Visible = False
' ' Hinzufügen Button wieder aktivieren
' If ADD_RECORDS_CONSTR = False Then
' tsButtonAdd.Enabled = False
' Else
' tsButtonAdd.Enabled = True
' End If
' Return True
' End If
' Else
' ' Datensatz wurde nicht verändert
' Return True
' End If
' Catch ex As Exception
' MessageBox.Show("Error in TrySave_Automatic: " & vbNewLine & ex.Message)
' Return False
' End Try
'End Function
Private Sub frmNodeNavigation_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
'If TrySave_Automatic() = False Then
' e.Cancel = True
'End If
'_FormClosing = True
' Save_Grid_Layout()
ClassWindowLocation.SaveFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN")
CURRENT_OPEN_CONSTRUCTOR_FORMS.Remove(CONSTRUCTORID)
' Verhindert, das noch geöffnete Records für immer gelockt sind
If Not IsNothing(CURRENT_DOCVIEW) Then
Try
CURRENT_DOCVIEW.CloseView(CURRENT_DOCVIEW_PATH, 0)
Catch ex As Exception
End Try
End If
End Sub
End Class