RecordOrganizer/app/DD-Record-Organiser/frmConstructor_Main.vb
2016-03-03 16:50:38 +01:00

3620 lines
161 KiB
VB.net

Imports DevExpress.Utils
Imports DevExpress.XtraBars.Navigation
Imports DevExpress.XtraEditors
Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraGrid.Views.Tile
Imports DevExpress.XtraScheduler
Imports System.Text
Imports WINDREAMLib
Imports System.IO
Imports DevExpress.XtraGrid
Public Class frmConstructor_Main
#Region "Laufzeitvariablen & Konstanten"
Private CONSTRUCTORID As Integer
Private CONSTRUCTOR_DETAIL_ID As Integer
Private DT_CONSTRUCT_VIEW As DataTable
Private EBENE2_PARENT_ID As Integer
Private EBENE3_PARENT_ID As Integer
Private ACT_EBENE As Integer
Private ACT_EBENE_STRING As String
Private SELECTED_RECORD_ID As Integer
Private PARENT_RECORDID As Integer
Private POS_ENTITY As Integer = 0
Private POS_SQL As String = ""
Private POS_RECORD_ID
Dim IsTopFirstRow As Boolean = True
Private RightMouse_Clicked = False
Private VIEW_ID
Private VIEW_ID_RUNTIME As Integer = -1
Public RECORD_ENABLED As Boolean = False
Private ENTITY_RECORD_COUNT As Integer = 0
Private EBENE1_ENTITY
Private EBENE2_ENTITY
Private EBENE3_ENTITY
Private EBENE1_COLUMNNAME
Private EBENE2_COLUMNNAME
Private EBENE3_COLUMNNAME
Private EBENE1_RECID
Private EBENE2_RECID
Private EBENE3_RECID
Private EBENE1_GRID_RESULT
Private EBENE2_GRID_RESULT
Private EBENE3_GRID_RESULT
Private act_FormViewID
Private DT_SELECTION As DataTable
Private EDIT_STATE As EditState = EditState.None
Private GRID_TYPE As GridType = GridType.Tiles
Private GRID_TYPE_ID As Integer = 1
Private FORM_LOADED As Boolean = False
Private RECORD_CHANGED As Boolean = False
Private SAVE_ROUTINE_ACTIVE As Boolean = False
Private SP1 As String
Private SP2 As String
Private SP3 As String
Private SP4 As String
Private SP5 As String
Private windream_Docshow As Boolean = False
Private _windream As New ClassWindream
Private WD_Suche As String
Private DocView
Private DocViewString As String
Private OpenedFileString As String
Private _FormClosing As Boolean = False
Private ENTITY_LOADED As Boolean = False
Private LinkParentID As Integer
Private FOLLOW_UPisActive As Boolean = False
Private DT_FU_Record As DataTable
Private DT_FU_ENTITY As DataTable
Private FOLL_UP_RECORD_DEFINED As Boolean = False
Private FOLL_UP_DATE_CTRL_ID As Integer
Private FOLL_UP_DONE_CTRL_ID As Integer
Private FOLL_UP_ID As Integer
Private LOAD_DIRECT As Boolean = False
Private IS_SINGLE_RECORD As Boolean = False
Private RECORD_ID As Integer
Private PARENT_ID As Integer
Private FORM_TYPE As Integer
Private ENTITY_ID As Integer
Private FORMVIEW_ID As Integer
Private _ENTITYSQL As String
Private _ENTITYSTRING As String
Public Enum EditState
None
Insert
Update
Delete
End Enum
Public Enum GridType
Grid
Carousel
Tiles
End Enum
#End Region
Private Sub frmForm_Constructor_Main_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
_FormClosing = True
' Check_Record_Changed()
CloseWDDocview()
Save_Grid_Layout()
Save_Splitter_Layout()
ClassWindowLocation.SaveFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN")
End Sub
Private Sub frmForm_Constructor_Main_Load(sender As Object, e As EventArgs) Handles Me.Load
tsslblRecord.Text = ""
tsslblStatus.Text = ""
_FormClosing = False
CONSTRUCTORID = CURRENT_CONSTRUCTOR_ID
Me.Cursor = Cursors.WaitCursor
Init_Grid_Control()
' Bestimme Dinge ausblenden wenn kein admin
If USER_IS_ADMIN = True Then
FormDesignerToolStripMenuItem.Visible = True
Else
FormDesignerToolStripMenuItem.Visible = False
End If
Try
'SplitCont_Details.Collapsed = True
CONSTRUCTORID = CURRENT_CONSTRUCTOR_ID
ClassWindowLocation.LoadFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN")
VWPMO_WF_USER_ACTIVETableAdapter.Connection.ConnectionString = MyConnectionString
Me.TBPMO_FILES_USERTableAdapter.Connection.ConnectionString = MyConnectionString
Me.VWPMO_WF_ACTIVETableAdapter.Connection.ConnectionString = MyConnectionString
DT_CONSTRUCT_VIEW = ClassDatabase.Return_Datatable("SELECT * FROM TBPMO_FORM_CONSTRUCTOR WHERE GUID = " & CONSTRUCTORID)
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
Load_Tree_View(CONSTRUCTORID)
FORM_LOADED = True
Catch ex As System.Exception
MsgBox("Error while Loading Form" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
Me.Cursor = Cursors.Default
End Sub
#Region "Layout"
Sub Save_POSGrid_Layout()
Try
Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)")
Dim EntityName As String = EntityRegex.Replace(ACT_EBENE_STRING & "_POS", "")
Dim Filename As String = String.Format("{0}-{1}-{2}-UserLayout.xml", grvwGridPos.Name, EntityName, CONSTRUCTORID)
Dim XMLPath = System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
grvwGridPos.SaveLayoutToXml(XMLPath)
Catch ex As Exception
MsgBox("Error in Save_POSGrid_Layout:" & vbNewLine & ex.Message)
End Try
End Sub
Sub Load_POSGrid_Layout()
Try
Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)")
Dim EntityName As String = EntityRegex.Replace(ACT_EBENE_STRING & "_POS", "")
Dim Filename As String = String.Format("{0}-{1}-{2}-UserLayout.xml", grvwGridPos.Name, EntityName, CONSTRUCTORID)
Dim XMLPath = System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
If File.Exists(XMLPath) Then
grvwGridPos.RestoreLayoutFromXml(XMLPath)
'grvwGrid.ClearGrouping()
grvwGridPos.ClearSelection()
grvwGridPos.OptionsView.ShowPreview = False
End If
Catch ex As Exception
MsgBox("Error in Load_POSGrid_Layout:" & vbNewLine & ex.Message)
End Try
End Sub
Sub Save_Grid_Layout()
Try
If ACT_EBENE_STRING Is Nothing Then
Exit Sub
End If
Dim XMLPath = Get_Grid_Layout_Filename()
grvwGrid.SaveLayoutToXml(XMLPath)
' Update_Status_Label(True, "Grid Layout Loaded")
Catch ex As Exception
MsgBox("Error in Save_Grid_Layout:" & vbNewLine & ex.Message)
End Try
End Sub
Sub Load_Grid_Layout()
Try
Dim XMLPath = Get_Grid_Layout_Filename()
If File.Exists(XMLPath) And GRID_TYPE = GridType.Grid Then
grvwGrid.RestoreLayoutFromXml(XMLPath)
'grvwGrid.ClearGrouping()
' grvwGrid.ClearSelection()
'grvwGrid.OptionsView.ShowPreview = False
'Update_Status_Label(True, "Grid Layout Loaded")
End If
Catch ex As Exception
MsgBox("Error in Load_Grid_Layout: " & vbNewLine & ex.Message)
End Try
End Sub
Sub Load_Splitter_Layout()
Try
Dim XMLPath As String = Get_Splitter_Layout_Filename()
Dim layout As New ClassLayout(XMLPath)
Dim settings As System.Collections.Generic.List(Of ClassSetting)
settings = layout.Load()
If settings.Count = 0 Then
settings.Add(New ClassSetting("SplitViewTopSplitterPosition", SplitContainerTop.SplitterPosition))
settings.Add(New ClassSetting("SplitViewMainSplitterPosition", SplitContainerMain.SplitterPosition))
layout.Save(settings)
End If
For Each setting As ClassSetting In settings
Select Case setting._name
Case "SplitViewTopSplitterPosition"
SplitContainerTop.SplitterPosition = Integer.Parse(setting._value)
Case "SplitViewMainSplitterPosition"
SplitContainerMain.SplitterPosition = Integer.Parse(setting._value)
End Select
Next
Catch ex As Exception
MsgBox("Fehler in Load_Splitter_Layout:" & vbNewLine & ex.Message)
End Try
End Sub
Sub Save_Splitter_Layout()
Try
Dim XMLPath = Get_Splitter_Layout_Filename()
Dim layout As New ClassLayout(XMLPath)
Dim settings As New System.Collections.Generic.List(Of ClassSetting)
settings.Add(New ClassSetting("SplitViewTopSplitterPosition", SplitContainerTop.SplitterPosition))
settings.Add(New ClassSetting("SplitViewMainSplitterPosition", SplitContainerMain.SplitterPosition))
layout.Save(settings)
Catch ex As Exception
MsgBox("Error in Save_Splitter_Layout:" & vbNewLine & ex.Message)
End Try
End Sub
Function GetSafeFilename(filename As String)
Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars()))
End Function
Private Function Get_Splitter_Layout_Filename()
Dim Filename As String = String.Format("{0}-SplitterLayout.xml", CONSTRUCTORID)
Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
End Function
Private Function Get_POSGrid_Layout_Filename()
Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)")
Dim EntityName As String = EntityRegex.Replace(ACT_EBENE_STRING, "")
Dim Filename As String = String.Format("{0}-{1}-{2}-UserLayout.xml", grvwGrid.Name, GetSafeFilename(EntityName), CONSTRUCTORID)
Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
End Function
Private Function Get_Grid_Layout_Filename()
Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)")
Dim EntityName As String = EntityRegex.Replace(ACT_EBENE_STRING, "")
Dim Filename As String = String.Format("{0}-{1}-{2}-UserLayout.xml", grvwGrid.Name, GetSafeFilename(EntityName), CONSTRUCTORID)
Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
End Function
#End Region
#Region "NavPane"
Sub Refresh_Navpane()
'Die aktuelle Ebene überprüfen und das NAvpane aktualisieren
Select Case ACT_EBENE
Case 1
If Not EBENE1_COLUMNNAME Is Nothing Then
EBENE1_GRID_RESULT = Get_GridResult(EBENE1_COLUMNNAME)
Dim cat As TileNavCategory = LoadLevel1Nav()
NavPane.Categories.Clear()
NavPane.Categories.Add(cat)
End If
Case 2
If Not EBENE2_COLUMNNAME Is Nothing Then
EBENE2_GRID_RESULT = Get_GridResult(EBENE2_COLUMNNAME)
Dim cat As TileNavCategory = LoadLevel1Nav()
NavPane.Categories.Clear()
NavPane.Categories.Add(cat)
Dim item As TileNavItem = LoadLevel2Nav()
cat.Items.Add(item)
End If
Case 3
EBENE3_RECID = SELECTED_RECORD_ID
If Not EBENE3_COLUMNNAME Is Nothing Then
EBENE3_GRID_RESULT = Get_GridResult(EBENE3_COLUMNNAME)
Dim cat As TileNavCategory = LoadLevel1Nav()
NavPane.Categories.Clear()
NavPane.Categories.Add(cat)
Dim item As TileNavItem = LoadLevel2Nav()
cat.Items.Add(item)
Dim subitem As TileNavSubItem = LoadLevel3Nav()
item.SubItems.Add(subitem)
End If
End Select
End Sub
Private Function FindNode(tncoll As TreeNodeCollection, strText As [String]) As TreeNode
Dim tnFound As TreeNode
For Each tnCurr As TreeNode In tncoll
If tnCurr.Text.StartsWith(strText) Then
Return tnCurr
End If
tnFound = FindNode(tnCurr.Nodes, strText)
If tnFound IsNot Nothing Then
Return tnFound
End If
Next
Return Nothing
End Function
Private Sub NavPane_MouseUp(sender As Object, e As MouseEventArgs) Handles NavPane.MouseUp
Dim pane As TileNavPane = TryCast(sender, TileNavPane)
Dim hitInfo As TileNavPaneHitInfo = pane.ViewInfo.CalcHitInfo(e.Location)
If hitInfo.InButton Then
Dim element = hitInfo.ButtonInfo.Element
NavPane.HideDropDownWindow()
Save_Grid_Layout()
If TypeOf element Is NavButton Then
Dim btn As NavButton = TryCast(element, NavButton)
If btn.IsMain Then
ResetNav()
ElseIf btn.Name = "NavButtonRefresh" Then
Load_Tree_View_Data()
End If
Else
Dim Entity As String = element.Tag
Dim Node = FindNode(TreeViewMain.Nodes, Entity)
If Node IsNot Nothing Then
TreeViewMain.SelectedNode = Node
Load_Tree_View_Data()
End If
End If
End If
End Sub
Private Function LoadLevel1Nav()
Dim cat As New TileNavCategory()
cat.Caption = EBENE1_GRID_RESULT
cat.Name = EBENE1_GRID_RESULT
cat.TileText = EBENE1_GRID_RESULT
cat.Tag = EBENE1_ENTITY
NavPane.SelectedElement = cat
Return cat
End Function
Private Function LoadLevel2Nav()
Dim item As New TileNavItem()
item.Caption = EBENE2_GRID_RESULT
item.Name = EBENE2_GRID_RESULT
item.TileText = EBENE2_GRID_RESULT
item.Tag = EBENE2_ENTITY
NavPane.SelectedElement = item
Return item
End Function
Private Function LoadLevel3Nav()
Dim subitem As New TileNavSubItem()
subitem.Caption = EBENE3_GRID_RESULT
subitem.Name = EBENE3_GRID_RESULT
subitem.TileText = EBENE3_GRID_RESULT
subitem.Tag = EBENE3_ENTITY
NavPane.SelectedElement = subitem
Return subitem
End Function
Private Sub ResetNav()
'Grid zurücksetzen
Clear_Grid_View()
ACT_EBENE = 0
ACT_EBENE_STRING = ""
EBENE1_ENTITY = ""
EBENE1_RECID = 0
EBENE2_ENTITY = ""
EBENE2_RECID = 0
EBENE3_ENTITY = ""
EBENE3_RECID = 0
'Navigation zurücksetzen
NavPane.Categories.Clear()
'TreeView zurücksetzen
'Load_Tree_View(CONSTRUCTORID)
TreeViewMain.SelectedNode = Nothing
SetSelectedNodeStyle(TreeViewMain.Nodes)
Load_Tree_View(CONSTRUCTORID)
End Sub
#End Region
#Region "GridControl"
Public Sub Init_Grid_Control()
GRID_TYPE = GridType.Tiles
GRID_TYPE_ID = 1
GridControlMain.MainView = grvwTiles
End Sub
Public Sub Hide_Grid_Columns()
Dim DefaultHiddenColumns As New List(Of String) From {"Record-ID", "Form-ID"}
Dim QuickHiddenColumns As New List(Of String) From {"AddedWho", "AddedWhen", "ChangedWho", "ChangedWhen"}
If GRID_TYPE = GridType.Carousel Or GRID_TYPE = GridType.Tiles Then
DefaultHiddenColumns.AddRange(QuickHiddenColumns)
End If
For Each colname As String In DefaultHiddenColumns
Dim col = grvwTiles.Columns.Item(colname)
If col IsNot Nothing Then
col.Visible = False
End If
Next
End Sub
'Public Function Get_Grid_Sql(ConstructorId As Integer, FormId As Integer)
' If GRID_TYPE = GridType.Grid Then
' _ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T"
' Else 'Tiles und Carousel bekommen Quick View
' _ENTITYSQL = String.Format("SELECT SQL_QUICK_VIEW FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0} AND FORM_ID = {1}", ConstructorId, FormId)
' _ENTITYSQL = ClassDatabase.Execute_Scalar(_ENTITYSQL, True)
' If _ENTITYSQL = String.Empty Then
' _ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T"
' If IS_SINGLE_RECORD = True Or FORM_TYPE = 5 Then
' Else
' GRID_TYPE = GridType.Grid
' GridControlMain.MainView = grvwGrid
' VIEW_ID = 3
' End If
' GridControlMain.MainView = grvwGrid
' End If
' End If
'End Function
Public Function Get_Grid_Sql(ConstructorId As Integer, FormId As Integer)
Try
If GRID_TYPE = GridType.Grid Then
If LogErrorsOnly = False Then ClassLogger.Add(" >> GridType = Grid", False)
_ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T"
Else 'Tiles und Carousel bekommen Quick View
_ENTITYSQL = String.Format("SELECT SQL_QUICK_VIEW FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0} AND FORM_ID = {1} AND SCREEN_ID = {2}", ConstructorId, FormId, CURRENT_SCREEN_ID)
_ENTITYSQL = ClassDatabase.Execute_Scalar(_ENTITYSQL, True)
If _ENTITYSQL = String.Empty Then
If LogErrorsOnly = False Then ClassLogger.Add(" >> No Quick-View Configured", False)
_ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T"
If IS_SINGLE_RECORD = True Or FORM_TYPE = 5 Then
Else
GRID_TYPE = GridType.Grid
GridControlMain.MainView = grvwGrid
VIEW_ID = 3
End If
' GridControlMain.MainView = grvwGrid
Else
If LogErrorsOnly = False Then ClassLogger.Add(" >> Quick-View is configured", False)
End If
End If
Catch ex As Exception
ClassLogger.Add("Error in Get_Grid_Sql: " & vbNewLine & ex.Message, True)
MsgBox("Error in Get_Grid_Sql: " & vbNewLine & ex.Message)
End Try
End Function
Public Function Get_Pos_SQL(FormId As Integer)
POS_SQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @PARENT_ID"
End Function
Public Sub Clear_Grid_View()
GridControlMain.DataSource = Nothing
If GRID_TYPE = GridType.Grid Then
If grvwGrid.Columns.Count > 0 Then
grvwGrid.Columns.Clear()
End If
ElseIf GRID_TYPE = GridType.Tiles Then
grvwTiles.Columns.Clear()
Else
grvwCarousel.Columns.Clear()
End If
End Sub
Public Sub Clear_GridPos_View()
BindingNavigatorPOS.BindingSource = Nothing
GridControlPos.DataSource = Nothing
grvwGridPos.Columns.Clear()
POS_RECORD_ID = 0
End Sub
Public Function Get_Grid_Row_Count() As Integer
If GRID_TYPE = GridType.Grid Then
Return grvwGrid.RowCount
ElseIf GRID_TYPE = GridType.Tiles Then
Return grvwTiles.RowCount
Else
Return grvwCarousel.RowCount
End If
End Function
Public Function Get_Grid_Row_Handle(value As String)
Try
Dim rowHandle As Integer = DT_SELECTION.Rows.IndexOf(DT_SELECTION.Rows.Find(value))
If rowHandle > 0 Then
If GRID_TYPE = GridType.Grid Then
grvwGrid.FocusedRowHandle = rowHandle
ElseIf GRID_TYPE = GridType.Tiles Then
grvwTiles.FocusedRowHandle = rowHandle
Else
grvwCarousel.FocusedRowHandle = rowHandle
End If
End If
Catch ex As Exception
ClassLogger.Add("Error in Search_RowHandle: " & ex.Message, False)
End Try
End Function
Public Function Get_Grid_Column_Count() As Integer
If GRID_TYPE = GridType.Grid Then
Return grvwGrid.Columns.Count
ElseIf GRID_TYPE = GridType.Tiles Then
Return grvwTiles.Columns.Count
Else
Return grvwCarousel.Columns.Count
End If
End Function
Public Function Get_Focused_Row_Cell_Value(columnName As String)
If GRID_TYPE = GridType.Grid Then
Return grvwGrid.GetFocusedRowCellValue(grvwGrid.Columns(columnName))
ElseIf GRID_TYPE = GridType.Tiles Then
Return grvwTiles.GetFocusedRowCellValue(grvwTiles.Columns(columnName))
Else
Return grvwCarousel.GetFocusedRowCellValue(grvwCarousel.Columns(columnName))
End If
End Function
Public Function Get_Focused_Row_Cell_Value_pos(columnName As String)
Return grvwGridPos.GetFocusedRowCellValue(grvwGrid.Columns(columnName))
End Function
Private Sub grvwGrid_FocusedColumnChanged(sender As Object, e As FocusedColumnChangedEventArgs) Handles grvwGrid.FocusedColumnChanged
Me.Cursor = Cursors.WaitCursor
Column_Row_Handler()
Me.Cursor = Cursors.Default
End Sub
Private Sub GridView_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles grvwGrid.FocusedRowChanged, grvwTiles.FocusedRowChanged, grvwCarousel.FocusedRowChanged
Me.Cursor = Cursors.WaitCursor
Column_Row_Handler()
Me.Cursor = Cursors.Default
'If dataloaded = True Then
' If LogErrorsOnly = False Then ClassLogger.Add(">> grvwSelection_FocusedRowChanged - EditState: " & EDIT_STATE, False)
' Dim selRecID = GetSelected_RecordID()
' If Not selRecID Is Nothing And selRecID <> SelectedRecordID Or EDIT_STATE = "insert" Then
' Focused_Row_Column_Changed()
' Else
' 'Console.WriteLine("SelRecordID identisch")
' End If
'End If
End Sub
Private Sub gridView1_CustomDrawRowIndicator(sender As Object, e As DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs)
If IsTopFirstRow Then
e.Info.ImageIndex = -1
End If
End Sub
Sub Column_Row_Handler()
If _FormClosing = True Then 'Or SaveRoutine_Active = True
Exit Sub
End If
'Aussteigen, wenng erade die Entität gewechselt wird
If ENTITY_LOADED = False Then
Exit Sub
End If
If RightMouse_Clicked Then
Exit Sub
End If
Dim Grid_RecordID = Get_Focused_Row_Cell_Value("Record-ID")
If IsNothing(Grid_RecordID) Then
Console.WriteLine("No Record ID selectable")
Else
If Grid_RecordID = 0 Then
Console.WriteLine("Grid_RecordID = 0")
Else
If Grid_RecordID = RECORD_ID And ENTITY_RECORD_COUNT > 1 Then
Exit Sub
End If
If LogErrorsOnly = False Then ClassLogger.Add(">> RowHandler: RID: " & Grid_RecordID.ToString & " - " & Now, False)
'Hier jetzt erst das Anzeigen für einen selektierten Datensatz
If GRID_TYPE = GridType.Grid Then
If IsTopFirstRow Then
IsTopFirstRow = False
'grvwGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus
'grvwGrid.OptionsBehavior.Editable = Not IsTopFirstRow
'grvwGrid.OptionsSelection.EnableAppearanceFocusedCell = Not IsTopFirstRow
'grvwGrid.OptionsSelection.EnableAppearanceFocusedRow = Not IsTopFirstRow
'grvwGrid.OptionsSelection.EnableAppearanceHideSelection = Not IsTopFirstRow
End If
ElseIf GRID_TYPE = GridType.Carousel Then
If IsTopFirstRow Then
IsTopFirstRow = False
grvwCarousel.OptionsBehavior.Editable = Not IsTopFirstRow
End If
ElseIf GRID_TYPE = GridType.Tiles Then
If IsTopFirstRow Then
IsTopFirstRow = False
grvwTiles.OptionsBehavior.Editable = Not IsTopFirstRow
End If
End If
Check_Record_Changed()
DisableEditMode()
VerknüpfungenAnzeigenToolStripMenuItem.Enabled = True
Show_Selected_Record_Data(Grid_RecordID, False)
If LogErrorsOnly = False Then ClassLogger.Add(">> After Show_Selected_Record_Data - " & Now, False)
If TabPos.PageVisible = True And TCDetails.SelectedTabPage.Text.StartsWith("Posi") Then
Clear_GridPos_View()
Dim POS_GRID_RECORD = Get_Focused_Row_Cell_Value_pos("Record-ID")
'If Not IsNothing(POS_GRID_RECORD) Then
' If POS_GRID_RECORD <> POS_RECORD_ID Then
' End If
'Else
' Load_Pos_Data()
' Load_POSGrid_Layout()
'End If
Load_Pos_Data()
Load_POSGrid_Layout()
End If
If RECORD_ID > 0 Then
tsButtonEditMode.Enabled = True
Get_RecordCounts_Nodes()
End If
End If
End If
End Sub
#End Region
#Region "TreeView"
Public Sub SetSelectedNodeStyle(tncoll As TreeNodeCollection)
For Each node As TreeNode In tncoll
If node.IsSelected Then
node.NodeFont = New Font(TreeViewMain.Font.FontFamily, TreeViewMain.Font.Size, FontStyle.Bold)
node.Text = node.Text
Else
node.NodeFont = New Font(TreeViewMain.Font.FontFamily, TreeViewMain.Font.Size, FontStyle.Regular)
End If
If node.Nodes.Count > 0 Then
SetSelectedNodeStyle(node.Nodes)
End If
Next
TreeViewMain.Refresh()
End Sub
Private Sub TreeViewMain_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeViewMain.AfterSelect
DisableEditMode()
SetSelectedNodeStyle(TreeViewMain.Nodes)
Load_Tree_View_Data()
End Sub
Private Sub TreeViewMain_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles TreeViewMain.BeforeSelect
If grvwGrid.Columns.Count > 0 Then
Save_Grid_Layout()
End If
End Sub
Sub Load_Tree_View(ConstructorId As Integer)
TreeViewMain.Nodes.Clear()
Dim SQL As String
Dim DT, DT2, DT3 As DataTable
' Daten für Level1 Nodes Laden
SQL = String.Format("SELECT *, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " & _
"from VWPMO_CONSTRUCTOR_FORMS WHERE PARENT_ID = 0 AND CONSTRUCT_ID = {2} AND SCREEN_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, ConstructorId, CURRENT_SCREEN_ID)
DT = ClassDatabase.Return_Datatable(SQL)
If DT Is Nothing Then
Exit Sub
End If
If DT.Rows.Count >= 1 Then
For Each Row1 As DataRow In DT.Rows
Dim LEVEL1_NODE As TreeNode
Dim LEVEL2_NODE As TreeNode
Dim LEVEL3_NODE As TreeNode
Dim LEVEL1_TITLE = Row1.Item("CAPTION").ToString
Dim LEVEL1_ID = Row1.Item("FORM_ID").ToString
' Rootnode erstellen und taggen
LEVEL1_NODE = New TreeNode(LEVEL1_TITLE)
LEVEL1_NODE.Tag = LEVEL1_ID
' TreeView Rootnode einfügen
TreeViewMain.Nodes.Add(LEVEL1_NODE)
' Daten für Level2 Nodes Laden
SQL = String.Format("SELECT *, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " & _
"FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {2} AND PARENT_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, ConstructorId, LEVEL1_ID)
DT2 = ClassDatabase.Return_Datatable(SQL)
If DT2 Is Nothing Or DT2.Rows.Count = 0 Then
Else
For Each row As DataRow In DT2.Rows
Dim LEVEL2_TITLE As String = row.Item("CAPTION").ToString
Dim LEVEL2_ID As Integer = row.Item("FORM_ID")
Dim LEVEL2_PARENT_ID As Integer = row.Item("PARENT_ID")
' Node erstellen..
LEVEL2_NODE = New TreeNode(LEVEL2_TITLE)
LEVEL2_NODE.Tag = LEVEL2_ID
' ..und einfügen
LEVEL1_NODE.Nodes.Add(LEVEL2_NODE)
' Daten für Level3 Nodes laden
SQL = String.Format("SELECT *, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " & _
"FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {2} AND PARENT_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, ConstructorId, LEVEL2_ID)
DT3 = ClassDatabase.Return_Datatable(SQL)
If DT3 Is Nothing Or DT3.Rows.Count = 0 Then
Exit Sub
End If
For Each subrow As DataRow In DT3.Rows
Dim LEVEL3_TITLE As String = subrow.Item("CAPTION")
Dim LEVEL3_ID As Integer = subrow.Item("FORM_ID")
' Node erstellen..
LEVEL3_NODE = New TreeNode(LEVEL3_TITLE)
LEVEL3_NODE.Tag = LEVEL3_ID
' ..und einfügen
LEVEL2_NODE.Nodes.Add(LEVEL3_NODE)
Next
Next
End If
Next
TreeViewMain.ExpandAll()
TreeViewMain.Nodes(0).EnsureVisible()
End If
End Sub
Sub Load_Tree_View_Data()
Dim SelectedNode As TreeNode = TryCast(TreeViewMain.SelectedNode, TreeNode)
If SelectedNode IsNot Nothing Then
ENTITY_LOADED = False
Dim FormId As Integer = SelectedNode.Tag
Dim parentNode As TreeNode = TryCast(SelectedNode.Parent, TreeNode)
ACT_EBENE = 2
If parentNode IsNot Nothing Then
Dim grandParentNode As TreeNode = TryCast(parentNode.Parent, TreeNode)
If grandParentNode IsNot Nothing Then
ACT_EBENE = 3
End If
Else
ACT_EBENE = 1
End If
ENTITY_ID = FormId
Dim Sql = "SELECT GUID from VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID
CONSTRUCTOR_DETAIL_ID = ClassDatabase.Execute_Scalar(Sql, True)
Get_RecordCounts_Nodes()
Load_Entity_Data(ACT_EBENE)
End If
End Sub
Sub Get_RecordCounts_Nodes()
Try
Dim selnode As TreeNode = TreeViewMain.SelectedNode
Dim a As Integer = 0
For Each childNodeLevel1 As TreeNode In selnode.Nodes
Dim PARENT_ID As Integer
Dim TYPE_ID As Integer
If a = 0 Then
Dim sql As String = "SELECT PARENT_ID, FORM_TYPE_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & childNodeLevel1.Tag & " AND SCREEN_ID = " & CURRENT_SCREEN_ID
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, "ShowNodeAmounts")
PARENT_ID = DT.Rows(0).Item(0)
TYPE_ID = DT.Rows(0).Item(1)
End If
If TYPE_ID <> 5 Then
If childNodeLevel1.Text = "Allgemein" Then
Console.WriteLine("Allgemein-Reiter")
End If
Dim result As Integer = ReturnAmountofRecords(childNodeLevel1.Tag, PARENT_ID)
If result <> 99999999 Then
Dim origtext As String = childNodeLevel1.Text
If origtext.Contains(" (") Then
Dim existingstring = origtext.Substring(0, origtext.IndexOf("(") - 1)
childNodeLevel1.Text = existingstring & " (" & result.ToString & ")"
Else
childNodeLevel1.Text = childNodeLevel1.Text & " (" & result.ToString & ")"
End If
End If
For Each childNodeLevel2 As TreeNode In childNodeLevel1.Nodes
Dim origtext As String = childNodeLevel2.Text
If origtext.Contains(" (") Then
Dim existingstring = origtext.Substring(0, origtext.IndexOf("(") - 1)
childNodeLevel2.Text = existingstring
End If
For Each childNodeLevel3 As TreeNode In childNodeLevel2.Nodes
Dim origtext1 As String = childNodeLevel3.Text
If origtext1.Contains(" (") Then
Dim existingstring = origtext1.Substring(0, origtext1.IndexOf("(") - 1)
childNodeLevel1.Text = existingstring
End If
Next
Next
a += 1
End If
Next
Catch ex As Exception
MsgBox("Error in Get_RecordCounts_Nodes:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Function ReturnAmountofRecords(EntityID As Integer, PARENT_ID As Integer)
' Statt eine Table zurückzugeben, können wir die anzahl der Zeilen auch in der Datenbank berechnen,
' dadurch wird die Abfrage um einiges schneller
Dim SQL As String = "SELECT COUNT(*) FROM ( SELECT T.* FROM VWTEMP_PMO_FORM" & EntityID & " AS T,TBPMO_RECORD_CONNECT T1 WHERE T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @RecordID ) x"
'Abhängig von der Entität dieAnzahl der Datensätze laden
Select Case ACT_EBENE
Case 1
If EBENE1_RECID = 0 Then
Return 99999999
End If
'_sql = _sql.Replace("@RecordID", EBENE1_RECID)
SQL = SQL.Replace("@RecordID", EBENE1_RECID)
Case 2
If EBENE2_RECID = 0 Then
Return 99999999
End If
If EBENE1_RECID = 0 Then
End If
'_sql = _sql.Replace("@RecordID", EBENE2_RECID)
SQL = SQL.Replace("@RecordID", EBENE2_RECID)
Case 3
If EBENE3_RECID = 0 Then
Return 99999999
End If
'_sql = _sql.Replace("@RecordID", EBENE2_RECID)
SQL = SQL.Replace("@RecordID", EBENE2_RECID)
End Select
'Dim DT2 As DataTable = ClassDatabase.Return_Datatable(_sql, "ReturnAmountofRecords 1")
Dim count As Integer = ClassDatabase.Execute_Scalar(SQL)
Return count
End Function
#End Region
#Region "Status Bar"
Public Sub Update_Status_Label(visible As Boolean, Optional text As String = "", Optional state As EditState = EditState.None)
tsslblStatus.Text = text
tsslblStatus.Visible = visible
Select Case state
Case EditState.Insert
tsslblStatus.BackColor = Color.Yellow
Case EditState.Update
tsslblStatus.BackColor = Color.LightBlue
Case Else
tsslblStatus.BackColor = Color.LightGray
End Select
End Sub
Public Sub Update_Record_Label(RecordId As Integer)
Dim SQL As String = "SELECT 'Added by ' + ADDED_WHO + ' when ' + CONVERT(VARCHAR(16),ADDED_WHEN,20) + ', Changed by ' + COALESCE(CHANGED_WHO,'') + ' when ' + COALESCE(CONVERT(VARCHAR(16),CHANGED_WHEN,20),'') FROM TBPMO_RECORD WHERE GUID = " & RecordId
Dim result = ClassDatabase.Execute_Scalar(SQL)
If IsDBNull(result) Or IsNothing(result) Then
tsslblRecord.Visible = False
Else
If FORM_TYPE = 5 Then
tsslblRecord.Text = String.Format("Group-Record ({0}) - {1}", RecordId, result.ToString)
Else
If IS_SINGLE_RECORD = True Then
tsslblRecord.Text = String.Format("Single-Record ({0}) - {1}", RecordId, result.ToString)
Else
tsslblRecord.Text = String.Format("Record ({0}) - {1}", RecordId, result.ToString)
End If
End If
tsslblRecord.Text = tsslblRecord.Text.Replace(", Changed by when ", "")
tsslblRecord.Visible = True
End If
End Sub
#End Region
#Region "Controls"
Sub Load_Controls(frmview_id As Integer)
FORMVIEW_ID = frmview_id
ENTITY_ID = ClassDatabase.Execute_Scalar("SELECT FORM_ID FROM TBPMO_FORM_VIEW WHERE GUID = " & frmview_id)
CtrlBuilder = New ClassControlBuilder(pnlDetails, ttToolTip)
'LoadControls(thisFormId)
CtrlCommandUI = New ClassControlCommandsUI(CtrlBuilder,
ContextMenuDetails,
AddressOf NewEditAppointment,
AddressOf OpenFormData)
CtrlCommandUI.LoadControls(ENTITY_ID)
Lock_RecordControls(True)
' pnlDetails.Enabled = False
AddHandler CtrlBuilder.OnRecordChanged, AddressOf OnRecordChanged
End Sub
Private Sub OnRecordChanged(sender As Object, e As System.EventArgs)
If ENTITY_LOADED Then
RECORD_CHANGED = True
End If
End Sub
Sub OpenFormData(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Try
Dim Control As Control = sender
Dim ControlName As String = Control.Name
Dim ControlId As Integer = DirectCast(Control.Tag, ClassControlMetadata).Id ' GetControlID_for_Name(ControlName, FORM_ID)
Dim dr As DataRow = ClassFunctionCommands.LoadFunction(ControlId)
If IsDBNull(dr.Item("INTEGER1")) OrElse dr.Item("INTEGER1") = 0 Then
MsgBox("FormId ist nicht definiert für " & ControlName)
Exit Sub
End If
If IsDBNull(dr.Item("INTEGER2")) OrElse dr.Item("INTEGER2") = 0 Then
MsgBox("ScreenId ist nicht definiert für " & ControlName)
Exit Sub
End If
Dim FormId As Integer = dr.Item("INTEGER1")
Dim ScreenId As Integer = dr.Item("INTEGER2")
Cursor = Cursors.WaitCursor
OpenFormInputFor(FormId, ScreenId)
Cursor = Cursors.Default
Catch ex As Exception
MsgBox("Error in OpenFormData:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
#End Region
#Region "DetailView - Toolstrip"
Private Sub tsButtonAdd_Click(sender As Object, e As EventArgs) Handles tsButtonAdd.Click
If CtrlCommandUI.IsInsert Then
Exit Sub
End If
Me.Cursor = Cursors.WaitCursor
Try
If TCDetails.SelectedTabPage.Text.StartsWith("Pos") = False Then
Lock_RecordControls(False)
tsButtonShowWorkflowTasks.Enabled = True
CURRENT_PARENT_ID = PARENT_ID
ClassControlValues.LoadDefaultValues(ENTITY_ID, SELECTED_RECORD_ID, pnlDetails.Controls)
' Im gegensatz zu EnableEditMode muss hier nur der save button enabled werden
tsButtonSave.Enabled = True
EDIT_STATE = EditState.Insert
RECORD_CHANGED = True
End If
Catch ex As Exception
MsgBox("Unexpected Error in Insert: " & ex.Message)
Finally
Me.Cursor = Cursors.Default
CtrlCommandUI.IsInsert = True
End Try
End Sub
Private Sub tsButtonSave_Click(sender As Object, e As EventArgs) Handles tsButtonSave.Click
Try
Me.Cursor = Cursors.WaitCursor
SAVE_ROUTINE_ACTIVE = True
Save_Grid_Layout()
If CtrlCommandUI.IsInsert Then
EDIT_STATE = EditState.Insert
Else
EDIT_STATE = EditState.Update
NEW_RECORD_ID = 0
If Not RECORD_CHANGED Then
Update_Status_Label(True, "KEINE Änderungen an Datensatz.")
Me.Cursor = Cursors.Default
Exit Sub
End If
End If
'Update aller Control-Werte
Dim ResultMessage
' Wenn MussFelder nicht ausgefüllt werden, wird eine exception geworfen und abgefangen
Try
ResultMessage = Update_Record_OnChange()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Fehler beim Speichern des Datensatzes")
Me.Cursor = Cursors.Default
Exit Sub
End Try
Dim recid As Integer
Update_Status_Label(True, ResultMessage, EDIT_STATE)
If EDIT_STATE = EditState.Update Then
recid = RECORD_ID
Else
recid = NEW_RECORD_ID
End If
SELECTED_RECORD_ID = recid
RECORD_ID = recid
CURRENT_RECORD_ID = RECORD_ID
If RECORD_ID = 0 Then
MsgBox("Attention: no current record Selected!", MsgBoxStyle.Exclamation)
Me.Cursor = Cursors.Default
Exit Sub
End If
If EDIT_STATE = EditState.Insert Then
Select Case ACT_EBENE
Case 1
EBENE1_RECID = recid
For Each row As DataRow In DT_SELECTION.Rows
If row.Item("Record-ID") = SELECTED_RECORD_ID Then
EBENE1_GRID_RESULT = row.Item(EBENE1_COLUMNNAME)
End If
Next
Case 2
EBENE2_RECID = recid
For Each row As DataRow In DT_SELECTION.Rows
If row.Item("Record-ID") = SELECTED_RECORD_ID Then
EBENE2_GRID_RESULT = row.Item(EBENE2_COLUMNNAME)
End If
Next
If EBENE1_RECID = 0 Then
'Bis jetzt konnte noch keine Parent-ID angelegt werden!
MsgBox("Achtung: Es wurde noch keine Parent-Verknüpfung angelegt!", MsgBoxStyle.Exclamation)
'Show_Verknuepfungen()
End If
End Select
ElseIf EDIT_STATE = EditState.Update Then
'Weil es ein Insert war müssen noch die Daten gespeichert/erneuert werden
Select Case ACT_EBENE
Case 1
EBENE1_RECID = recid
For Each row As DataRow In DT_SELECTION.Rows
If row.Item("Record-ID") = SELECTED_RECORD_ID Then
If EBENE1_COLUMNNAME = "" Then
EBENE1_GRID_RESULT = "No Column configured"
Else
EBENE1_GRID_RESULT = Get_GridResult(EBENE1_COLUMNNAME)
' EBENE1_GRID_RESULT = row.Item(EBENE1_COLUMNNAME)
End If
End If
Next
Case 2
EBENE2_RECID = recid
For Each row As DataRow In DT_SELECTION.Rows
If row.Item("Record-ID") = SELECTED_RECORD_ID Then
If EBENE2_COLUMNNAME = "" Then
EBENE2_GRID_RESULT = "No Column configured"
Else
EBENE2_GRID_RESULT = row.Item(EBENE2_COLUMNNAME)
End If
End If
Next
End Select
End If
'Jetzt den Record nochmal laden
' Show_Selected_Record_Data(SELECTED_RECORD_ID)
Update_Status_Label(True, "Record gespeichert - " & Now, EditState.Update)
Update_Record_Label(SELECTED_RECORD_ID)
Dim FORM_TYPE = ClassDatabase.Execute_Scalar("SELECT FORM_TYPE_ID FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID)
Dim IS_SINGLE_RECORD = ClassDatabase.Execute_Scalar("SELECT SINGLE_RECORD FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID)
If IS_SINGLE_RECORD = False Then
If FORM_TYPE <> 5 Then
If EDIT_STATE = EditState.Insert Then
'Die Daten neu laden
Load_Entity_Data_Only()
Get_Grid_Row_Handle(NEW_RECORD_ID)
Else
'Die Daten neu laden
Load_Entity_Data_Only()
'Get_Grid_Row_Handle(RECORD_ID)
LocateRecordById(RECORD_ID)
'Die Daten auf dem Panel laden
'ClassControlValues.LoadControlValues(RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
RECORD_CHANGED = False
End If
End If
End If
Catch ex As Exception
MsgBox("Error in Save Data:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
If CtrlCommandUI.IsInsert Then
tsButtonSave.Enabled = False
Else
' DisableEditMode()
End If
CtrlCommandUI.IsInsert = False
EDIT_STATE = EditState.None
RECORD_CHANGED = False
SAVE_ROUTINE_ACTIVE = False
Me.Cursor = Cursors.Default
End Sub
Private Sub tsButtonDelete_Click(sender As Object, e As EventArgs) Handles tsButtonDelete.Click
Dim result As MsgBoxResult
result = MessageBox.Show("Möchten Sie den Datensatz wirklich löschen?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
EDIT_STATE = EditState.Delete
If CtrlCommandUI.DeleteRecord(SELECTED_RECORD_ID) = True Then
Update_Status_Label(True, "Der Datensatz '" & SELECTED_RECORD_ID & "' wurde erfolgreich gelöscht - " & Now, EditState.Update)
Update_Record_Label(SELECTED_RECORD_ID)
Load_Tree_View_Data()
' Nach dem löschen muss die aktuelle Ansicht neugeladen werden
Load_Entity_Data(ACT_EBENE)
DisableEditMode()
End If
End If
EDIT_STATE = EditState.None
End Sub
Private Sub tsButtonEditMode_Click(sender As Object, e As EventArgs) Handles tsButtonEditMode.Click
ToggleEditMode()
End Sub
Sub ToggleEditMode()
If RECORD_ENABLED = False Then
EnableEditMode()
Else
DisableEditMode()
End If
End Sub
Sub EnableEditMode()
Lock_RecordControls(False)
Me.tsButtonDelete.Enabled = True
Me.tsButtonAdd.Enabled = True
Me.tsButtonSave.Enabled = True
Me.tsButtonEditMode.Text = "Bearbeiten beenden"
' Abhängige Listen laden
ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, RECORD_ID, PARENT_ID, CtrlBuilder.AllControls)
RECORD_ENABLED = True
pnlDetails.Focus()
'If RECORD_ENABLED = False Then
' ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
'End If
End Sub
Sub DisableEditMode()
Lock_RecordControls(True)
RECORD_ENABLED = False
' Me.pnlDetails.Enabled = False
Me.tsButtonDelete.Enabled = False
'Me.tsButtonAdd.Enabled = False
Me.tsButtonSave.Enabled = False
Me.tsButtonEditMode.Text = "Bearbeiten"
'Funktion nur zum load der Inhalte
If RECORD_ENABLED = True Then
ClassControlValues.UnloadControlValuesList(SELECTED_RECORD_ID, RECORD_ID, CtrlBuilder.AllControls)
End If
End Sub
#End Region
#Region "Appointments"
Sub NewEditAppointment(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Try
Dim ctrl As Control = sender
ClassFunctionCommandsUI.NewEditAppointment(ctrl.Name, ENTITY_ID, RECORD_ID, pnlDetails.Controls)
Catch ex As Exception
MsgBox("Error in OpenEditAppointment:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub EditAppointment(ByVal sender As 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
MsgBox("Error in EditAppointment:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
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 Load_Entity_Data(ClickedLevel As Integer)
Try
Me.Cursor = Cursors.WaitCursor
RECORD_CHANGED = False
RECORD_ID = 0
VerknüpfungenAnzeigenToolStripMenuItem.Enabled = True
'VerknüpfungenToolStripMenuItem.Enabled = False
FORM_TYPE = ClassDatabase.Execute_Scalar("SELECT FORM_TYPE_ID FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID)
IS_SINGLE_RECORD = ClassDatabase.Execute_Scalar("SELECT SINGLE_RECORD FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID)
LOAD_DIRECT = ClassDatabase.Execute_Scalar("SELECT LOAD_DIRECT FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND ENTITY_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID)
CURRENT_CONSTRUCTOR_DETAIL_ID = ClassDatabase.Execute_Scalar("SELECT GUID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID)
POS_ENTITY = ClassDatabase.Execute_Scalar("SELECT POS_ENTITY FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID)
If VIEW_ID_RUNTIME <> -1 Then
GRID_TYPE_ID = VIEW_ID_RUNTIME
Else
Dim VIEW_ID = ClassDatabase.Execute_Scalar(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, ENTITY_ID, USER_GUID), True)
If IsNothing(VIEW_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 & "," & ENTITY_ID & ")", True)
VIEW_ID = 1
End If
GRID_TYPE_ID = VIEW_ID
End If
' Den GridType setzen: 1=TileView,2=Carousel,3=GridView
Select Case GRID_TYPE_ID
Case 1
GRID_TYPE = GridType.Tiles
GridControlMain.MainView = grvwTiles
Case 2
GRID_TYPE = GridType.Carousel
GridControlMain.MainView = grvwCarousel
Case 3
GRID_TYPE = GridType.Grid
GridControlMain.MainView = grvwGrid
End Select
SELECTED_RECORD_ID = 0
Dim DT As DataTable
Dim sql As String = "SELECT PARENT_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID
Dim PARENT_ID = ClassDatabase.Execute_Scalar(sql)
If PARENT_ID Is Nothing Then
MsgBox("Error in GetParentID for selectedNode - Check Logfile", MsgBoxStyle.Exclamation)
Exit Sub
End If
'Abhängig von der Entität die Selektierungs-Daten laden
Get_Grid_Sql(CONSTRUCTORID, ENTITY_ID)
'Anzahl der Datensätze
ENTITY_RECORD_COUNT = ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBPMO_RECORD where FORM_ID = " & ENTITY_ID, True)
Select Case ClickedLevel
Case 1
EBENE1_ENTITY = ""
EBENE1_RECID = 0
EBENE2_ENTITY = ""
EBENE2_RECID = 0
EBENE3_ENTITY = ""
EBENE3_RECID = 0
PARENT_RECORDID = 0
PARENT_ID = 0
EBENE1_ENTITY = TreeViewMain.SelectedNode.Text
ACT_EBENE_STRING = EBENE1_ENTITY
If LogErrorsOnly = False Then ClassLogger.Add(">> Ebene 1 in TreeView selektiert", False)
'tslblEntity2.Visible = False
'tslblEntity3.Visible = False
EBENE1_COLUMNNAME = ClassDatabase.Execute_Scalar("SELECT COLUMN_NAME1 FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID)
EBENE2_COLUMNNAME = ""
EBENE3_COLUMNNAME = ""
EBENE2_GRID_RESULT = Nothing
EBENE3_GRID_RESULT = Nothing
'_sql = ClassDatabase.Execute_Scalar("SELECT SQL_QUICK_VIEW FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID)
Case 2
'Dim Level1Select = ClassDatabase.Execute_Scalar(Get_Grid_Sql(CONSTRUCTORID, ENTITY_ID)) 'ClassDatabase.Execute_Scalar("SELECT LEVEL1_SELECT FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND ENTITY_ID = " & ENTITY_ID)
'If CBool(Level1Select) = False And FORM_TYPE <> 5 And EBENE1_RECID = 0 Then
' MsgBox("Entität '" & TreeViewLevelSelect.SelectedNode.Text & "' kann nicht ohne Auswahl eines Ebene 1 Datensatzes gewählt werden!", MsgBoxStyle.Exclamation)
' TreeViewLevelSelect.SelectedNode = TreeViewLevelSelect.SelectedNode.Parent
' Exit Sub
'End If
EBENE2_ENTITY = TreeViewMain.SelectedNode.Text
ACT_EBENE_STRING = EBENE2_ENTITY
If LogErrorsOnly = False Then ClassLogger.Add(">> Ebene 2 in TreeView selektiert", False)
EBENE3_ENTITY = ""
'Wenn bereits ein Record für Ebene 1 gewählt wurde dann einschränken
If EBENE1_RECID > 0 Then
PARENT_RECORDID = EBENE1_RECID
PARENT_ID = EBENE1_RECID
If GRID_TYPE = GridType.Grid Then
_ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_ID
Else
_ENTITYSQL = _ENTITYSQL.Replace("@RecordID", EBENE2_RECID)
_ENTITYSQL = _ENTITYSQL.ToString.Replace("TBPMO_FORM T1", "TBPMO_FORM T1 ,TBPMO_RECORD_CONNECT T2")
_ENTITYSQL = _ENTITYSQL & " AND T.GUID = T2.RECORD2_ID AND T2.RECORD1_ID = @T2.RECORD1_ID"
_ENTITYSQL = _ENTITYSQL.ToString.Replace("@T2.RECORD1_ID", PARENT_RECORDID)
End If
Else
Console.WriteLine("Ebene 1 wurde nicht ausgewählt")
SELECTED_RECORD_ID = 0
PARENT_ID = 0
PARENT_RECORDID = 0
NavPane.Categories.Clear()
tsslblRecord.Text = ""
Update_Status_Label(True, "Entität 1 übersprungen - Alle Datensätze geladen", EditState.Update)
End If
'tslblEntity3.Visible = False
'Select Case FORM_TYPE
' Case 5
' If GET_GROUP_OR_SINGLE_RECORD(PARENT_RECORDID) = True Then
' EBENE2_RECID = RECORD_ID
' End If
'End Select
EBENE2_COLUMNNAME = ClassDatabase.Execute_Scalar("SELECT COLUMN_NAME1 FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID)
EBENE3_COLUMNNAME = ""
EBENE2_GRID_RESULT = Nothing
EBENE3_GRID_RESULT = Nothing
Case 3
EBENE3_ENTITY = TreeViewMain.SelectedNode.Text
ACT_EBENE_STRING = EBENE3_ENTITY
If LogErrorsOnly = False Then ClassLogger.Add(">> Ebene 3 in TreeView selektiert", False)
EBENE3_COLUMNNAME = ClassDatabase.Execute_Scalar("SELECT COLUMN_NAME1 FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID)
'Wenn bereits ein Record für Ebene 1 gewählt wurde dann eisnchränken
If EBENE2_RECID > 0 Then
'Parent-ID setzen
PARENT_RECORDID = EBENE2_RECID
PARENT_ID = EBENE2_RECID
Try
If GRID_TYPE = GridType.Grid Then
_ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_ID
Else
_ENTITYSQL = _ENTITYSQL.Replace("@RecordID", EBENE2_RECID)
_ENTITYSQL = _ENTITYSQL.ToString.Replace("TBPMO_FORM T1", "TBPMO_FORM T1 ,TBPMO_RECORD_CONNECT T2")
_ENTITYSQL = _ENTITYSQL & " AND T.GUID = T2.RECORD2_ID AND T2.RECORD1_ID = @T2.RECORD1_ID"
_ENTITYSQL = _ENTITYSQL.ToString.Replace("@T2.RECORD1_ID", PARENT_RECORDID)
End If
Catch ex As Exception
End Try
Else
Console.WriteLine("Ebene 2 wurde nicht ausgewählt")
SELECTED_RECORD_ID = 0
PARENT_ID = 0
PARENT_RECORDID = 0
NavPane.Categories.Clear()
Update_Status_Label(True, "Entität 2 übersprungen - Alle Datensätze geladen", EditState.Update)
tsslblRecord.Text = ""
End If
'Select Case FORM_TYPE
' Case 5
' If GET_GROUP_OR_SINGLE_RECORD(PARENT_RECORDID) = True Then
' EBENE3_RECID = RECORD_ID
' End If
'End Select
EBENE3_GRID_RESULT = Nothing
End Select
_ENTITYSTRING = ACT_EBENE_STRING
PARENT_ID = PARENT_RECORDID
act_FormViewID = ClassDatabase.Execute_Scalar("SELECT GUID FROM TBPMO_FORM_VIEW where FORM_ID = " & ENTITY_ID)
If EDIT_STATE = EditState.None Then
'Die Controls der Entität laden
Load_Controls(act_FormViewID)
tsButtonAdd.Enabled = True
'set_pnlsize()
End If
'Überprüfen ob windream Dos angezeigt werden sollen?
Check_windream_Show(act_FormViewID)
If windream_Docshow = True Then
Clear_Windream_ResultList()
If WD_ShowEnitityDocs = True Then
RUN_WD_SEARCH("", "ENTITY")
End If
End If
If FORM_TYPE = 5 Or IS_SINGLE_RECORD = True Then
If GET_GROUP_OR_SINGLE_RECORD(PARENT_RECORDID, True) = True Then
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
If IS_SINGLE_RECORD Then
Show_Selected_Record_Data(RECORD_ID, True)
Else
Refresh_Navpane()
Update_Record_Label(SELECTED_RECORD_ID)
End If
Get_RecordCounts_Nodes()
End If
' Hide_Grid_Columns()
If FORM_TYPE = 5 Then
TabDetails.PageVisible = False
Else
TabDetails.PageVisible = True
End If
Else
TabDetails.PageVisible = True
GridControlMain.Visible = True
Dim DTEntity As DataTable = ClassDatabase.Return_Datatable(_ENTITYSQL, "LoadEntityData - Get DTEntity")
If IsNothing(DTEntity) Then
MsgBox("Unexpected Error in getting Entity-Data - Check Logfile", MsgBoxStyle.Critical)
Else
Dim primaryKey(1) As DataColumn
primaryKey(0) = DTEntity.Columns("Record-ID")
DTEntity.PrimaryKey = primaryKey
DT_SELECTION = DTEntity
LoadGrid_Selection()
If GRID_TYPE = GridType.Grid Then
grvwGrid.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.None
grvwGrid.OptionsBehavior.Editable = False
grvwGrid.OptionsSelection.EnableAppearanceFocusedCell = False
grvwGrid.OptionsSelection.EnableAppearanceFocusedRow = False
grvwGrid.OptionsSelection.EnableAppearanceHideSelection = False
ElseIf GRID_TYPE = GridType.Carousel Then
grvwCarousel.OptionsBehavior.Editable = False
ElseIf GRID_TYPE = GridType.Tiles Then
grvwTiles.FocusedRowHandle = -1
grvwTiles.OptionsBehavior.Editable = False
grvwTiles.FocusedRowHandle = -1
grvwTiles.OptionsTiles.HighlightFocusedTileOnGridLoad = False
End If
If LOAD_DIRECT = True Then
Load_Record_Direct()
End If
If ENTITY_RECORD_COUNT = 1 Then
Load_Record_Direct()
End If
' Dim sql1 = _ENTITYSQL
' sql1.Replace("T.*", "TOP 1 [Record-ID]")
' Dim id = ClassDatabase.Execute_Scalar(sql1, True)
' If Not id Is Nothing Then
' If LogErrorsOnly = False Then ClassLogger.Add(">> Load Record directly - RecordID: " & RECORD_ID, False)
' Load_Record_Data()
' End If
'End If
'Überprüfen ob es für diese Entität Wiedervorlagen gibt?
Check_FOLLOWUP_IsConfigured(ENTITY_ID)
Load_Grid_Layout()
Load_Splitter_Layout()
End If
If POS_ENTITY > 0 Then
TabDetails.Text = "Kopfdaten"
TabPos.PageVisible = True
Else
TabDetails.Text = "Detailansicht"
TabPos.PageVisible = False
End If
Load_Templates()
'For Each column As DevExpress.XtraGrid.Columns.GridColumn In grvwGrid.Columns
' column.MinWidth = 100
'Next
' Wenn rows existieren, erste row laden und recordid auslesen
'Dim firstRow As System.Data.DataRowView = GridControlMain.MainView.GetRow(0)
'If Not IsNothing(firstRow) Then
' Dim firstRecordId As Integer = firstRow.Row.Item("Record-ID")
' ClassControlValues.LoadControlValuesList(firstRecordId, PARENT_ID, ENTITY_ID, CtrlBuilder.MasterPanel.Controls)
'End If
' Hinfällig, da hier die Record-ID nicht gebraucht wird
ClassControlValues.LoadControlValuesList(ENTITY_ID, CtrlBuilder.MasterPanel.Controls)
'Zurücksetzen
ENTITY_LOADED = True
End If
Catch ex As Exception
MsgBox("Error in Load_Entity_Data:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
Finally
Me.Cursor = Cursors.Default
ENTITY_LOADED = True
End Try
End Sub
Sub Load_Record_Direct()
Try
Dim Grid_RecordID = Get_Focused_Row_Cell_Value("Record-ID")
If Not IsNothing(Grid_RecordID) Then
Select Case ACT_EBENE
Case 1
PARENT_RECORDID = Grid_RecordID
PARENT_ID = PARENT_RECORDID
SELECTED_RECORD_ID = Grid_RecordID
RECORD_ID = Grid_RecordID
'Daten zu Record in jedem Fall laden
'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls)
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
RECORD_CHANGED = False
Update_Record_Label(Grid_RecordID)
End Select
End If
Catch ex As Exception
MsgBox("Error in Load_Record_Direct:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Sub Load_Entity_Data_Only()
Try
ENTITY_LOADED = False
Dim DTEntity As DataTable = ClassDatabase.Return_Datatable(_ENTITYSQL, "Load_Entity_Data_Only")
Dim primaryKey(1) As DataColumn
primaryKey(0) = DTEntity.Columns("Record-ID")
DTEntity.PrimaryKey = primaryKey
DT_SELECTION = DTEntity
LoadGrid_Selection()
Load_Grid_Layout()
Catch ex As Exception
MsgBox("Error in Load_Entity_Data_Only:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
End Try
ENTITY_LOADED = True
End Sub
Sub CreateTile()
Try
Dim ImageIndex As Integer = -1
Dim i As Integer = 0
Dim j As Integer = 0
Dim DT As DataTable = DirectCast(DT_SELECTION, DataTable)
If DT Is Nothing Then
MsgBox("Daten können nicht geladen werden - Datatable SELECTION is empty", MsgBoxStyle.Critical)
Exit Sub
End If
Dim PrimaryFont As New Font("Segoe UI", 12, FontStyle.Bold)
Dim SecondaryFont As New Font("Segoe UI", 10)
Dim WhiteBackground As Color = System.Drawing.Color.FromArgb(230, Color.White)
' Datatable laden
GridControlMain.DataSource = DT
grvwTiles.TileTemplate.Clear()
For Each Column As DataColumn In DT.Columns
Dim index As Integer = DT.Columns.IndexOf(Column)
Dim RECORDID_Column As TileViewItemElement
Dim ImageColumn As TileViewItemElement
Dim HeadlineColumn As TileViewItemElement
Dim TextColumn As TileViewItemElement
Dim TextHeaderColumn As TileViewItemElement
Select Case index
'Case 0
' ' RecordId
' RECORDID_Column = New TileViewItemElement()
' With RECORDID_Column
' .Column = grvwTiles.Columns(0)
' .Column.OptionsFilter.AllowFilter = True
' .TextAlignment = TileItemContentAlignment.TopLeft
' End With
' grvwTiles.TileTemplate.Add(RECORDID_Column)
Case 1
' Index 1 ist das Bild
If Column.DataType.ToString.Contains("Byte") Then
ImageColumn = New TileViewItemElement()
With ImageColumn
.Image = My.Resources.keinbild
.Column = grvwTiles.Columns(1)
'.ImageSize = New Size(186, 90)
.ImageSize = New Size(186, 118)
.ImageScaleMode = TileItemImageScaleMode.ZoomInside
.ImageAlignment = TileItemContentAlignment.Manual
.ImageLocation = New Point(-10, -10)
End With
grvwTiles.TileTemplate.Add(ImageColumn)
End If
Case 2
' Index 2 ist die Headline
HeadlineColumn = New TileViewItemElement()
With HeadlineColumn
.Column = grvwTiles.Columns(2)
.TextAlignment = TileItemContentAlignment.TopRight
.Appearance.Normal.Font = PrimaryFont
.Appearance.Normal.ForeColor = Color.DodgerBlue
.Column.OptionsFilter.AllowFilter = True
End With
grvwTiles.TileTemplate.Add(HeadlineColumn)
Case 3 To 4
' Indexe 3 und 4 sind normale Textzeilen
TextColumn = New TileViewItemElement()
TextHeaderColumn = New TileViewItemElement()
Dim OffsetIndex = index - 3
With TextHeaderColumn
.Text = Column.ColumnName
.TextAlignment = TileItemContentAlignment.Manual
.TextLocation = New Point(120, 20 + (OffsetIndex * 40))
.Appearance.Normal.Font = SecondaryFont
.Appearance.Normal.ForeColor = Color.DarkGray
.Appearance.Normal.BackColor = WhiteBackground
End With
With TextColumn
.Column = grvwTiles.Columns(index)
.TextAlignment = TileItemContentAlignment.Manual
.TextLocation = New Point(120, 20 + 18 + (OffsetIndex * 40))
.Appearance.Normal.Font = SecondaryFont
.Appearance.Normal.ForeColor = Color.Black
.Appearance.Normal.BackColor = WhiteBackground
End With
grvwTiles.TileTemplate.Add(TextHeaderColumn)
grvwTiles.TileTemplate.Add(TextColumn)
End Select
Next
Catch ex As Exception
MsgBox("Error in LoadGrid_Selection:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub Lock_RecordControls(state As Boolean)
Lock_Record_Controls_Recursive(state, pnlDetails.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
Select Case Control.GetType()
Case GetType(Windows.Forms.GroupBox)
Lock_Record_Controls_Recursive(state, DirectCast(Control, GroupBox).Controls)
Case GetType(Windows.Forms.TextBox)
Dim txt As TextBox = CType(Control, TextBox)
txt.ReadOnly = state
Case GetType(Windows.Forms.CheckBox)
Dim chk As CheckBox = CType(Control, CheckBox)
If state = True Then
chk.Enabled = False
Else
chk.Enabled = True
End If
Case GetType(Windows.Forms.RadioButton)
Dim rb As RadioButton = CType(Control, RadioButton)
If state = True Then
rb.Enabled = False
Else
rb.Enabled = True
End If
Case GetType(Windows.Forms.ComboBox)
Dim cbobx As System.Windows.Forms.ComboBox = CType(Control, System.Windows.Forms.ComboBox)
If state = True Then
cbobx.Enabled = False
Else
cbobx.Enabled = True
End If
Case GetType(DevExpress.XtraEditors.DateEdit)
Dim dtp As DevExpress.XtraEditors.DateEdit = CType(Control, DevExpress.XtraEditors.DateEdit)
If state = True Then
dtp.Enabled = False
Else
dtp.Enabled = True
End If
Case GetType(DevExpress.XtraEditors.CheckedListBoxControl)
Dim chlb As DevExpress.XtraEditors.CheckedListBoxControl = CType(Control, DevExpress.XtraEditors.CheckedListBoxControl)
If state = True Then
chlb.Enabled = False
Else
chlb.Enabled = True
End If
Case GetType(DevExpress.XtraEditors.ListBoxControl)
Dim lb As DevExpress.XtraEditors.ListBoxControl = CType(Control, DevExpress.XtraEditors.ListBoxControl)
If state = True Then
lb.Enabled = False
Else
lb.Enabled = True
End If
Case GetType(Windows.Forms.Button)
Dim btn As Button = CType(Control, Button)
If state = True Then
btn.Enabled = False
Else
btn.Enabled = True
End If
End Select
Next
End Sub
Private Sub Check_Record_Changed()
If EDIT_STATE <> EditState.None Then
Update_Status_Label(False, "")
EDIT_STATE = EditState.None
End If
If RECORD_CHANGED = True Then
Dim result As DialogResult = MessageBox.Show("Sie haben ungespeicherte Änderungen. Wollen Sie diese speichern?", "Ungespeicherte Änderungen", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = Windows.Forms.DialogResult.Yes Then
If CtrlCommandUI.IsInsert = True Then
EDIT_STATE = EditState.None
Lock_RecordControls(True)
'Me.pnlDetails.Enabled = False
'CtrlCommandUI.IsInsert = False
End If
Try
Update_Record_OnChange()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Fehler beim Speichern des Datensatzes")
End Try
End If
CtrlCommandUI.IsInsert = False
RECORD_CHANGED = False
End If
End Sub
Private Function GET_GROUP_OR_SINGLE_RECORD(PARENT_RECORD_ID As Integer, Entityload As Boolean)
'Dim sqlRecord As String = String.Format("SELECT T.RECORD2_ID FROM TBPMO_RECORD_CONNECT T, TBPMO_RECORD T1 WHERE T.RECORD2_ID = T1.GUID AND T.RECORD1_ID = {0} AND T1.ENTITY_ID = (SELECT PARENT_ID FROM TBPMO_FORM WHERE GUID = {1})", LINKED_RECORD, ENTITY_ID)
Dim sql As String = String.Format("SELECT T.RECORD2_ID FROM TBPMO_RECORD_CONNECT T, TBPMO_RECORD T1 WHERE T.RECORD2_ID = T1.GUID AND T.RECORD1_ID = {0} and T1.FORM_ID = {1}", PARENT_RECORD_ID, ENTITY_ID)
Dim GRP_SINGLE_REC = ClassDatabase.Execute_Scalar(sql, True)
If IsNothing(GRP_SINGLE_REC) Then
If ClassControlCommandsUI.CreateRecord(ENTITY_ID) = True Then
GRP_SINGLE_REC = ClassControlCommandsUI.GetLastRecord
If Not IsNothing(GRP_SINGLE_REC) Then
'Die neue Record-ID setzen
RECORD_ID = GRP_SINGLE_REC
SELECTED_RECORD_ID = RECORD_ID
If ClassControlCommandsUI.ConnectRecord(PARENT_RECORD_ID, RECORD_ID, "PARENT_LINK (Group/Single-Record) for Entity " & ENTITY_ID.ToString) = False Then
MsgBox("Unexpected Error in Connecting Record. Check log", MsgBoxStyle.Critical)
Return False
End If
Else
Return False
End If
Else
Return False
End If
Else
Try
RECORD_ID = CInt(GRP_SINGLE_REC)
SELECTED_RECORD_ID = RECORD_ID
Catch ex As Exception
MsgBox("Error while getting CURRENT_RECORDID FOR PARENT_ID: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
End If
Select Case ACT_EBENE '#### Hier muss nun der Parent-Record gesetzt werden ####
Case 1
EBENE1_RECID = RECORD_ID
Case 2
EBENE2_RECID = RECORD_ID
Case 3
EBENE3_RECID = RECORD_ID
End Select
Return True
End Function
Private Function GET_LINKED_RECORD(RECORDID As Integer, ENTITY_ID As Integer)
Try
'Je nach der Ebene muss evtl die übergeordnete Entität ausgelesen werden
Select Case ACT_EBENE
Case 2
Dim sql As String = String.Format("SELECT T.RECORD2_ID FROM TBPMO_RECORD_CONNECT T, TBPMO_RECORD T1 WHERE T.RECORD2_ID = T1.GUID AND T.RECORD1_ID = {0} and T1.FORM_ID = {1}", RECORDID, ENTITY_ID)
Dim PARENT_RECORD1 = ClassDatabase.Execute_Scalar(sql, True)
If IsNothing(PARENT_RECORD1) Then
Dim New_Record = ClassControlCommandsUI.GetLastRecord
If Not IsNothing(New_Record) Then
If LogErrorsOnly = False Then ClassLogger.Add(">> Parent-Record Ebene 1 wird neu angelegt...", False)
'Die neue Record-ID setzen
ClassControlCommandsUI.ConnectRecord(New_Record, RECORDID, "PARENT-LINK FOR ENTITY " & ENTITY_ID & "")
Return New_Record
Else
Return 0
End If
Else
Return PARENT_RECORD1
End If
Case 3
Dim sqlp = "SELECT PARENT_ID FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID
Dim Parent_EntityID = ClassDatabase.Execute_Scalar(sqlp, True)
Dim sql As String = String.Format("SELECT T.RECORD2_ID FROM TBPMO_RECORD_CONNECT T, TBPMO_RECORD T1 WHERE T.RECORD2_ID = T1.GUID AND T.RECORD1_ID = (SELECT T.RECORD2_ID FROM TBPMO_RECORD_CONNECT T, TBPMO_RECORD T1 WHERE " & _
"T.RECORD2_ID = T1.GUID AND T.RECORD1_ID = {0} and T1.FORM_ID = {1}) and T1.FORM_ID = {2}", RECORDID, Parent_EntityID, ENTITY_ID)
Dim PARENT_RECORD2 = ClassDatabase.Execute_Scalar(sql, True)
If IsNothing(PARENT_RECORD2) Then
Dim New_Record = ClassControlCommandsUI.GetLastRecord
If Not IsNothing(New_Record) Then
If LogErrorsOnly = False Then ClassLogger.Add(">> Parent-Record Ebene 1 wird neu angelegt...", False)
'Die neue Record-ID setzen
ClassControlCommandsUI.ConnectRecord(New_Record, RECORDID, "PARENT-LINK FOR ENTITY " & ENTITY_ID & "")
Return New_Record
Else
Return 0
End If
Else
Return PARENT_RECORD2
End If
End Select
Catch ex As Exception
MsgBox("Error in GET_LINKED_RECORD: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return 0
End Try
End Function
Private Function LoadGrid_Selection()
Try
If GRID_TYPE = GridType.Tiles Then
CreateTile()
Else
' Alle Checkboxen für aktuelle Ansicht heraussuchen
Dim sqlcheck As String = "SELECT CONTROL_COLUMN FROM VWPMO_VALUES WHERE CONTROL_TYPE_ID in (10,11) AND FORM_ID = " & ENTITY_ID
Dim dtcheck As DataTable = ClassDatabase.Return_Datatable(sqlcheck)
Dim listcheck As New List(Of String)
'Liste von allen Spaltentiteln mit Checkbox erstellen
If dtcheck.Rows.Count > 0 Then
For Each row As DataRow In dtcheck.Rows
listcheck.Add(row.Item(0))
Next
End If
'Duplikate entfernen
' listcheck = listcheck.Distinct().ToList()
'Grid leeren
Clear_Grid_View()
'Databinding Neu
BindingSource_Entity.DataSource = DT_SELECTION
GridControlMain.DataSource = BindingSource_Entity
' Den Editor Initialisieren und Optionen setzen
Dim CheckBoxEditorForDisplay = New RepositoryItemCheckEdit()
CheckBoxEditorForDisplay.ValueChecked = 1
CheckBoxEditorForDisplay.ValueUnchecked = 0
' Alle Checkbox Spalten durchgehen und CheckBoxEditor zuweisen
For Each col As String In listcheck
grvwGrid.GridControl.RepositoryItems.Add(CheckBoxEditorForDisplay)
If Not IsNothing(grvwGrid.Columns(col)) Then
grvwGrid.Columns(col).ColumnEdit = CheckBoxEditorForDisplay
End If
Next
'grvwGrid.Columns("Record-ID").OptionsColumn.AllowShowHide = False
End If
HideColumns()
Dim selnode As TreeNode = TreeViewMain.SelectedNode
Dim origtext As String = selnode.Text
If origtext.Contains(" (") Then
Dim existingstring = origtext.Substring(0, origtext.IndexOf("(") - 1)
selnode.Text = String.Format("{0} ({1})", existingstring, Get_Grid_Row_Count())
Else
selnode.Text = String.Format("{0} ({1})", selnode.Text, Get_Grid_Row_Count())
End If
Catch ex As Exception
MsgBox("Error in LoadGrid_Selection:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
Return True
End Function
Sub HideColumns()
Try
Dim SQL As String = "SELECT CONTROL_ID, CONTROL_COL_NAME, CONTROL_SHOW_COLUMN FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_SHOW_COLUMN = 0 AND FORM_ID = " & ENTITY_ID
Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL)
If GRID_TYPE = GridType.Grid Then
Dim cols As DevExpress.XtraGrid.Columns.GridColumnCollection = grvwGrid.Columns
If DT.Rows.Count <> 0 Then
' Alle Spalten, die ausgeblendet werden sollten durchgehen und Visible = False
For Each row As DataRow In DT.Rows
Dim colname As String = row.Item("CONTROL_COL_NAME")
Dim col As DevExpress.XtraGrid.Columns.GridColumn = grvwGrid.Columns.Item(colname)
If Not IsNothing(col) Then
col.Visible = False
End If
Next
End If
' FormID und RecordID immer ausblenden
grvwGrid.Columns.Item("Record-ID").Visible = False
grvwGrid.Columns.Item("Form-ID").Visible = False
End If
Catch ex As Exception
MsgBox("Error in HideColumns:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub HideColumns_Pos(EntityID As Integer)
Try
Dim SQL As String = "SELECT CONTROL_ID, CONTROL_COL_NAME, CONTROL_SHOW_COLUMN FROM VWPMO_CONTROL_SCREEN WHERE CONTROL_SHOW_COLUMN = 0 AND FORM_ID = " & EntityID
Dim DT As DataTable = ClassDatabase.Return_Datatable(SQL)
Dim cols As DevExpress.XtraGrid.Columns.GridColumnCollection = grvwGridPos.Columns
If DT.Rows.Count <> 0 Then
' Alle Spalten, die ausgeblendet werden sollten durchgehen und Visible = False
For Each row As DataRow In DT.Rows
Dim colname As String = row.Item("CONTROL_COL_NAME")
Dim col As DevExpress.XtraGrid.Columns.GridColumn = grvwGridPos.Columns.Item(colname)
If Not IsNothing(col) Then
col.Visible = False
End If
Next
End If
' FormID und RecordID immer ausblenden
grvwGridPos.Columns.Item("Record-ID").Visible = False
grvwGridPos.Columns.Item("Form-ID").Visible = False
Catch ex As Exception
MsgBox("Error in HideColumns_Pos:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub Show_Selected_Record_Data(Rec_ID As Integer, EntityLoad As Boolean)
Try
Update_Status_Label(False, "")
If LogErrorsOnly = False Then ClassLogger.Add(">> GRID_RECORD ID: " & Rec_ID.ToString, False)
'Me.pnlDetails.Visible = True
ZeigeRecordLogsToolStripMenuItem.Enabled = False
If FORM_TYPE = 5 And EntityLoad = False Or IS_SINGLE_RECORD = True And EntityLoad = False Then '#### Es sind untergeordnete Entitäten geöffnet####
Dim linkedRecord
' Dim pID As Integer
Select Case ACT_EBENE '#### Hier muss nun der Parent-Record gewählt werden ####
Case 3
linkedRecord = GET_LINKED_RECORD(Rec_ID, ENTITY_ID)
If linkedRecord > 0 Then
Dim sqlp = "SELECT PARENT_ID FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID
Dim Parent_EntityID = ClassDatabase.Execute_Scalar(sqlp, True)
Dim sql As String = String.Format("SELECT T.RECORD2_ID FROM TBPMO_RECORD_CONNECT T, TBPMO_RECORD T1 WHERE T.RECORD2_ID = T1.GUID AND T.RECORD1_ID = {0} and T1.FORM_ID = {1}", RECORD_ID, Parent_EntityID)
Dim PARENT_RECORD1 = ClassDatabase.Execute_Scalar(sql, True)
EBENE2_RECID = PARENT_RECORD1
PARENT_RECORDID = PARENT_RECORD1
PARENT_ID = PARENT_RECORD1
End If
Case 2
linkedRecord = GET_LINKED_RECORD(Rec_ID, ENTITY_ID)
If linkedRecord > 0 Then
EBENE1_RECID = Rec_ID
PARENT_RECORDID = EBENE1_RECID
PARENT_ID = PARENT_RECORDID
End If
Case 1
PARENT_RECORDID = Rec_ID
EBENE1_RECID = PARENT_RECORDID
PARENT_ID = PARENT_RECORDID
End Select
RECORD_ID = CInt(linkedRecord)
SELECTED_RECORD_ID = RECORD_ID
'#### Den Group or Single_Record holen/anlegen
' GET_GROUP_OR_SINGLE_RECORD(pID, False)
Else '#### Datensatz wird normal geladen ####
SELECTED_RECORD_ID = Rec_ID
RECORD_ID = SELECTED_RECORD_ID
'Die aktuelle Ebene überprüfen und den Datensatz übergeben, ebenso den PARENT-Record setzen
Select Case ACT_EBENE
Case 1
PARENT_RECORDID = RECORD_ID
EBENE1_RECID = PARENT_RECORDID
PARENT_ID = EBENE1_RECID
If Not EBENE1_COLUMNNAME Is Nothing Then
EBENE1_GRID_RESULT = Get_GridResult(EBENE1_COLUMNNAME)
End If
Case 2
EBENE2_RECID = SELECTED_RECORD_ID
If Not EBENE2_COLUMNNAME Is Nothing Then
EBENE2_GRID_RESULT = Get_GridResult(EBENE2_COLUMNNAME)
End If
If EBENE1_RECID > 0 Then
PARENT_RECORDID = EBENE1_RECID
PARENT_ID = EBENE1_RECID
Else
PARENT_ID = EBENE2_RECID
End If
Case 3
EBENE3_RECID = SELECTED_RECORD_ID
If Not EBENE3_COLUMNNAME Is Nothing Then
EBENE3_GRID_RESULT = Get_GridResult(EBENE3_COLUMNNAME)
End If
If EBENE2_RECID > 0 Then
PARENT_RECORDID = EBENE2_RECID
PARENT_ID = EBENE2_RECID
End If
End Select
End If
If TCDetails.SelectedTabPage.Text.ToLower.StartsWith("windr") Then
If RECORD_ID = 0 Then
RUN_WD_SEARCH(WD_Suche, "ENTITY")
Else
RUN_WD_SEARCH(WD_Suche, "RECORD")
End If
End If
If TCDetails.SelectedTabPage.Text.StartsWith("Detail") Or TCDetails.SelectedTabPage.Text.StartsWith("Kopf") Then
'Daten zu Record in jedem Fall laden
'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_ID, ENTITY_ID, CtrlBuilder.AllControls)
End If
If TCDetails.SelectedTabPage.Text.ToLower.StartsWith("wieder") Then
tsButtonEditMode.Enabled = False
Refresh_FollowUps()
dtpFollowUp.Enabled = False
lblWiedervorlage_Control.Text = "<< Waiting for Selection:"
'ListBoxUser2Profile.Items.Clear()
grpbxFU_Profile.Enabled = False
End If
' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden!
RECORD_CHANGED = False
Dim Record_Changes As String = "SELECT count(GUID) FROM VWPMO_RECORD_CHANGES WHERE RECORD_ID = " & RECORD_ID
Dim RC = ClassDatabase.Execute_Scalar(Record_Changes, True)
If Not RC Is Nothing Then
If RC > 0 Then
ZeigeRecordLogsToolStripMenuItem.Enabled = True
End If
End If
Refresh_Navpane()
Update_Record_Label(SELECTED_RECORD_ID)
Me.tsButtonShowWorkflowTasks.Enabled = True
Me.tsButtonShowTaskOverview.Enabled = True
RECORD_ID = SELECTED_RECORD_ID
'tsstatus_Detail_show(False, "")
Catch ex As Exception
MsgBox("Error in SelectedRecord_ShowData:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub Create_Grid_Editor(formId As Integer)
Try
Dim SQL As String = "SELECT CONTROL_COL_NAME,CONTROL_SQLCOMMAND_1,CONTROL_STATIC_LIST FROM VWPMO_CONTROL_SCREEN WHERE CTRLTYPE_ID = 3 AND FORM_ID = " & formId
Dim ComboColumns As DataTable = ClassDatabase.Return_Datatable(SQL)
' Alle Checkboxen für aktuelle Ansicht heraussuchen
Dim sqlcheck As String = "SELECT CONTROL_COLUMN FROM VWPMO_VALUES WHERE CONTROL_TYPE_ID in (10,11) AND FORM_ID = " & formId
Dim dtcheck As DataTable = ClassDatabase.Return_Datatable(sqlcheck)
Dim listcheck As New List(Of String)
'Liste von allen Spaltentiteln mit Checkbox erstellen
If dtcheck.Rows.Count > 0 Then
For Each row As DataRow In dtcheck.Rows
listcheck.Add(row.Item(0))
Next
End If
' Den Editor Initialisieren und Optionen setzen
Dim CheckBoxEditorForDisplay = New RepositoryItemCheckEdit()
CheckBoxEditorForDisplay.ValueChecked = 1
CheckBoxEditorForDisplay.ValueUnchecked = 0
' Alle Checkbox Spalten durchgehen und CheckBoxEditor zuweisen
For Each col As String In listcheck
grvwGridPos.GridControl.RepositoryItems.Add(CheckBoxEditorForDisplay)
If Not IsNothing(grvwGridPos.Columns(col)) Then
grvwGridPos.Columns(col).ColumnEdit = CheckBoxEditorForDisplay
End If
Next
For Each col As DataRow In ComboColumns.Rows
Dim colName As String = col.Item(0)
Dim hasSqlCommand = col.Item(1).ToString() <> ""
Dim hasStaticList = col.Item(2).ToString() <> ""
If hasStaticList = True Then
Dim comboEdit1 As New RepositoryItemComboBox()
Dim comboItems1 As ComboBoxItemCollection = comboEdit1.Items
Dim staticListItems = col.Item(2).ToString.Split(";")
comboItems1.BeginUpdate()
Try
For Each item In staticListItems
comboItems1.Add(item)
Next
Finally
comboItems1.EndUpdate()
End Try
GridControlPos.RepositoryItems.Add(comboEdit1)
If Not IsNothing(grvwGridPos.Columns(colName)) Then
grvwGridPos.Columns(colName).ColumnEdit = comboEdit1
End If
ElseIf hasSqlCommand = True Then
SQL = col.Item(1).ToString()
Dim dt As DataTable = ClassDatabase.Return_Datatable(SQL, "Load_Pos_Data")
Dim comboEdit2 As New RepositoryItemComboBox()
Dim comboItems2 As ComboBoxItemCollection = comboEdit2.Items
For Each row As DataRow In dt.Rows
Dim value = row.Item(0)
comboItems2.BeginUpdate()
Try
comboItems2.Add(value)
Finally
comboItems2.EndUpdate()
End Try
Next
GridControlPos.RepositoryItems.Add(comboEdit2)
If Not IsNothing(grvwGridPos.Columns(colName)) Then
grvwGridPos.Columns(colName).ColumnEdit = comboEdit2
End If
End If
Next
Catch ex As Exception
MsgBox("Error in Create_Grid_Editor:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub Load_Pos_Data()
Try
If POS_ENTITY > 0 Then
Get_Pos_SQL(POS_ENTITY)
POS_SQL = POS_SQL.Replace("@PARENT_ID", PARENT_RECORDID)
Dim DT_POS As DataTable = ClassDatabase.Return_Datatable(POS_SQL, "Load POSData")
Clear_GridPos_View()
If Not IsNothing(DT_POS) Then
GridControlPos.DataSource = DT_POS
Dim bs As New BindingSource
bs.DataSource = DT_POS
BindingNavigatorPOS.BindingSource = bs
' --- Editoren laden für Combobox ---
Create_Grid_Editor(POS_ENTITY)
HideColumns_Pos(PARENT_RECORDID)
End If
End If
Catch ex As Exception
MsgBox("Error in Load_Pos_Data:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Function Get_GridResult(Columnname As String)
Dim result = Get_Focused_Row_Cell_Value(Columnname)
If IsDBNull(result) OrElse result = "" Then
Return "No Column configured"
Else
Return result
End If
End Function
Function GetSelected_RecordID()
Try
If Get_Grid_Column_Count() = 0 Then
Lock_RecordControls(True)
' Me.pnlDetails.Enabled = False
'Me.tsbtnshowWorkflowtasks.Enabled = False
'tsstatus_Detail_show(True, "Keine Columns in Grid")
Return Nothing
End If
'Überhaupt Rows in Grid?
If Get_Grid_Row_Count() > 0 Then
Dim Grid_RecordID = Get_Focused_Row_Cell_Value("Record-ID")
If Grid_RecordID Is Nothing = False Then
Return Grid_RecordID
Else
'tsstatus_Detail_show(True, "Grid_RecordID konnte nicht gewählt werden!")
'ClassLogger.Add(">> Grid_RecordID konnte nicht gewählt werden - SelectedRecord_ShowData", True)
Return Nothing
End If
Else
Return Nothing
End If
Catch ex As Exception
End Try
End Function
'Sub Get_Selected_Record()
' Select Case EDIT_STATE
' Case EditState.None
' 'Ganz normalerDatensatzwechsel Wechsel
' Show_Selected_Record_Data("Record-ID")
' 'Refresh_Treeview_SelectedData()
' Update_Status_Label(False)
' 'tslblStatusMain_show(False, "")
' Case EditState.Insert
' 'Refresh_Treeview_SelectedData()
' Case EditState.Update
' ' Refresh_Treeview_SelectedData()
' End Select
' Select Case TCDetails.SelectedTabPageIndex
' Case 0
' 'Die Values in die Controls laden
' If EDIT_STATE = EditState.None Then
' 'TabPageDetails.Text = "Detaileingabe zu '" & ACT_EBENE_STRING & "' - Record(" & SelectedRecordID & ")"
' 'Die Daten auf dem Panel laden
' ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, FORM_ID, CtrlBuilder.AllControls)
' 'Load_Control_Values(CtrlBuilder.AllControls)
' 'Refresh_Treeview_SelectedData()
' RECORD_CHANGED = False
' End If
' Case 1
' RUN_WD_SEARCH(WD_Suche, "RECORD")
' Case 2
' 'If FOLLOW_UPisActive = True Then Refresh_FollowUps()
' End Select
' 'DT_FU_Record = Nothing
' 'VerknüpfungenToolStripMenuItem.Enabled = True
' Update_Record_Label(SELECTED_RECORD_ID)
' If FOLLOW_UPisActive = True Then Refresh_FollowUp_TabHeader()
' Show_act_WFTask()
' Get_RecordCounts_Nodes()
' pnlDetails.Enabled = False
' Refresh_TaskOverview()
'End Sub
Private Sub Refresh_FollowUp_TabHeader()
Try
DT_FU_Record = ClassDatabase.Return_Datatable("select * from VWPMO_FOLLOW_UP_EMAIL_ENTITY_RECORD where Record_ID = " & RECORD_ID, "Refresh FollowUp TabHeader")
If IsNothing(DT_FU_Record) Then
TabFollowUp.Text = "Wiedervorlage (Nicht Abrufbar)"
Exit Sub
End If
If DT_FU_Record.Rows.Count = 0 Then
TabFollowUp.Text = "Wiedervorlage (Nicht aktiviert)"
Else
TabFollowUp.Text = "Wiedervorlage (Aktive Profile)"
End If
Catch ex As Exception
MsgBox("Error in Refresh_FollowUp_TabHeader:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Function Update_Record_OnChange() As String
' Überprüfen, ob alle "Required Felder ausgefüllt wurden"
Dim missingControlValues As List(Of String) = ClassControlValues.CheckRequiredControlValues(CtrlBuilder.MasterPanel.Controls)
If missingControlValues.Count > 0 Then
Dim nameString As String = String.Join(vbNewLine, missingControlValues)
Dim errorMessage As String = String.Format("Die folgenden Steuerelemente müssen ausgefüllt sein: {0}{1}", vbNewLine, nameString)
Throw New Exception(errorMessage)
End If
' Record Speichern
Dim ResultMessage = CtrlCommandUI.SaveRecord(SELECTED_RECORD_ID, ENTITY_ID, PARENT_RECORDID)
'Jetzt die für die Entität notwendigen Prroceduren ausführen
Customer_Run_Procedures()
RECORD_CHANGED = False
Return ResultMessage
End Function
Private Sub Customer_Run_Procedures()
Try
Dim DT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBPMO_RUN_PROCEDURES WHERE FORM_ID = " & ENTITY_ID)
If Not DT Is Nothing Then
For Each row As DataRow In DT.Rows
Dim prsql As String = row.Item("EXECUTE_COMMAND")
prsql = prsql.ToUpper.Replace("@FORM_ID", ENTITY_ID)
prsql = prsql.ToUpper.Replace("@RECORD_ID", RECORD_ID)
ClassDatabase.Execute_non_Query(prsql, True)
Next
End If
Catch ex As Exception
MsgBox("Error in Customer_Run_Procedures:" & vbNewLine & ex.Message)
End Try
End Sub
#Region "WindreamSuche"
Private Function Check_windream_Show(FORM_VIEW_ID As Integer)
Try
Dim sql = "SELECT * FROM TBPMO_FORM_VIEW WHERE WINDREAM_SEARCH <> '' AND GUID = " & FORM_VIEW_ID
Dim DTWD As DataTable = ClassDatabase.Return_Datatable(sql)
If DTWD.Rows.Count = 1 Then
TabWindream.PageVisible = True
If IsDBNull(DTWD.Rows(0).Item(0)) Then
windream_Docshow = False
WindreamsucheNeuLadenToolStripMenuItem.Visible = False
Exit Function
End If
WindreamsucheNeuLadenToolStripMenuItem.Visible = True
windream_Docshow = True
Else
windream_Docshow = False
TabWindream.PageVisible = False
WindreamsucheNeuLadenToolStripMenuItem.Visible = False
End If
Catch ex As Exception
MsgBox("Error in Check windream show:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
windream_Docshow = False
End Try
End Function
Private Sub RUN_WD_SEARCH(BaseSearch As String, Type As String)
Try
Dim windream_temp_search
If Not windream_Docshow = True Or Sett_LoadWD_Docs = False Or TCDetails.SelectedTabPageIndex <> 1 Then
Exit Sub
End If
Cursor = Cursors.WaitCursor
Dim DTWD As DataTable
If Type = "ENTITY" Then
Dim _sql = "SELECT WINDREAM_SEARCH,SEARCH_PATTERN1,SEARCH_PATTERN2,SEARCH_PATTERN3,SEARCH_PATTERN4,SEARCH_PATTERN5 FROM TBPMO_FORM_CONSTRUCTOR_DETAIL WHERE WINDREAM_SEARCH <> '' AND FORM_ID = " & ENTITY_ID
DTWD = ClassDatabase.Return_Datatable(_sql)
If DTWD.Rows.Count = 1 Then
If IsDBNull(DTWD.Rows(0).Item(0)) Then
Clear_Windream_ResultList()
Exit Sub
End If
tslblWindreamView.Text = "Windream-Dokumente für Entität: " & ACT_EBENE_STRING
Else
Clear_Windream_ResultList()
Exit Sub
End If
Else
Dim sql = "SELECT WINDREAM_SEARCH,SEARCH_PATTERN1,SEARCH_PATTERN2,SEARCH_PATTERN3,SEARCH_PATTERN4,SEARCH_PATTERN5 FROM TBPMO_FORM_VIEW WHERE WINDREAM_SEARCH <> '' AND FORM_ID = " & ENTITY_ID
DTWD = ClassDatabase.Return_Datatable(sql)
If DTWD.Rows.Count = 1 Then
If IsDBNull(DTWD.Rows(0).Item(0)) Then
Clear_Windream_ResultList()
Exit Sub
End If
tslblWindreamView.Text = "Windream-Dokumente für Record: " & RECORD_ID
Else
Clear_Windream_ResultList()
Exit Sub
End If
End If
'Die SearchPatterns durchlaufen und zwischenspeichern
If IsDBNull(DTWD.Rows(0).Item(0)) Then
Clear_Windream_ResultList()
Exit Sub
End If
BaseSearch = DTWD.Rows(0).Item(0)
SP1 = DTWD.Rows(0).Item(1)
If IsDBNull(DTWD.Rows(0).Item(2)) Then
SP2 = ""
Else
SP2 = DTWD.Rows(0).Item(2)
End If
If IsDBNull(DTWD.Rows(0).Item(3)) Then
SP3 = ""
Else
SP3 = DTWD.Rows(0).Item(3)
End If
If IsDBNull(DTWD.Rows(0).Item(4)) Then
SP4 = ""
Else
SP4 = DTWD.Rows(0).Item(4)
End If
If IsDBNull(DTWD.Rows(0).Item(5)) Then
SP5 = ""
Else
SP5 = DTWD.Rows(0).Item(5)
End If
'Eine tempfile generieren
Dim tempFilename1 = My.Computer.FileSystem.GetTempFileName()
'Nur den Filenamen ohne Erweiterung
Dim tempName = Path.GetFileNameWithoutExtension(tempFilename1)
'tempfile lsöchen
If My.Computer.FileSystem.FileExists(tempFilename1) Then
My.Computer.FileSystem.DeleteFile(tempFilename1)
End If
Try
Dim temppath = Path.GetTempPath
Dim EncodingFormat As Encoding
Dim WDUnicode = ClassDatabase.Execute_Scalar("SELECT WD_UNICODE FROM TBPMO_KONFIGURATION WHERE GUID = 1")
If WDUnicode = True Then
EncodingFormat = Encoding.GetEncoding(1252) '1252
If LogErrorsOnly = False Then ClassLogger.Add(">> Unicode is used (Encoding.GetEncoding(1252))", False)
Else
If LogErrorsOnly = False Then ClassLogger.Add(">> UTF8 (Encoding.GetEncoding(65001))", False)
EncodingFormat = Encoding.GetEncoding(65001)
End If
Dim fileContents As String
If LogErrorsOnly = False Then ClassLogger.Add(">> ReadAlltext: " & windream_temp_search, False)
fileContents = My.Computer.FileSystem.ReadAllText(BaseSearch, EncodingFormat) ', System.Text.Encoding.Unicode
If LogErrorsOnly = False Then ClassLogger.Add(">> fileContents geladen", False)
fileContents = fileContents.Replace("Í", "Ö")
Dim _sp1 = SP1
Dim _sp2 = SP2
Dim _sp3 = SP3
Dim _sp4 = SP4
Dim _sp5 = SP5
If _sp1.ToString <> String.Empty Then
_sp1 = Return_SearchPattern(_sp1.ToString)
fileContents = fileContents.Replace("%pattern1%", _sp1)
fileContents = fileContents.Replace("471101", _sp1)
End If
If _sp2.ToString <> String.Empty Then
_sp2 = Return_SearchPattern(_sp2.ToString)
If _sp2 = 0 Then
_sp2 = ""
End If
fileContents = fileContents.Replace("%pattern2%", _sp2)
fileContents = fileContents.Replace("471102", _sp2)
End If
If _sp3.ToString <> String.Empty Then
_sp3 = Return_SearchPattern(_sp3.ToString)
If _sp3 = 0 Then
_sp3 = ""
End If
fileContents = fileContents.Replace("%pattern3%", _sp3)
fileContents = fileContents.Replace("471103", _sp3)
End If
If _sp4.ToString <> String.Empty Then
_sp4 = Return_SearchPattern(_sp4.ToString)
If _sp4 = 0 Then
_sp4 = ""
End If
fileContents = fileContents.Replace("%pattern4%", _sp4)
fileContents = fileContents.Replace("471104", _sp4)
End If
If _sp5.ToString <> String.Empty Then
_sp5 = Return_SearchPattern(_sp5.ToString)
If _sp5 = 0 Then
_sp5 = ""
End If
fileContents = fileContents.Replace("%pattern5%", _sp5)
fileContents = fileContents.Replace("471105", _sp5)
End If
'Die windream File zusammensetzen
windream_temp_search = temppath & tempName & ".wdf"
TEMP_FILES.Add(windream_temp_search)
'Die File schreiben
My.Computer.FileSystem.WriteAllText(windream_temp_search, fileContents, False, EncodingFormat)
My.Computer.FileSystem.WriteAllText(temppath & "SEARCH_COPY.wdf", fileContents, False, EncodingFormat)
' XML-Datei öffnen und laden
Dim Stream As New IO.StreamReader(CStr(windream_temp_search), EncodingFormat)
Dim Reader As New System.Xml.XmlTextReader(Stream)
' XML-Datei initialisieren
Dim xml As New System.Xml.XmlDocument()
' XML-Datei öffnen und laden
xml.Load(Reader)
Reader.Close()
xml.Save(windream_temp_search)
If LogErrorsOnly = False Then ClassLogger.Add(">> Xml Generiert: " & windream_temp_search, False)
Dim windreamSucheErgebnisse As WMObjects
Try
windreamSucheErgebnisse = Me._windream.GetSearchDocuments(windream_temp_search)
Catch ex As Exception
MsgBox("Error in windreamSucheErgebnisse:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
If windreamSucheErgebnisse.Count > 0 Then
TabWindream.Text = "windream-Dateien (" & windreamSucheErgebnisse.Count & ")"
AxObjectListControl.SetIconMode(True)
AxObjectListControl.RemoveAllColumnHeader()
Me.AxObjectListControl.SetSession(ClassWindream.oSession, "", "")
'Change the status icon
'ICON STATES:
Me.AxObjectListControl.SetStatusIcon(0)
'Change the icon
Me.AxObjectListControl.SetStatusIcon(2)
Try
Dim sql_ResultList = "select * from TBPMO_WINDREAM_RESULTLIST_CONFIG where guid = 1"
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql_ResultList, "GET RESULTLIST KONFIG")
If Not DT Is Nothing And DT.Rows.Count = 1 Then
Dim anzparam As Integer = 1
For Each Column As DataColumn In DT.Columns
If Column.ColumnName.StartsWith("COLUMN") And Column.ColumnName.EndsWith("WIDTH") = False Then
Dim sql = String.Format("select {0} from TBPMO_WINDREAM_RESULTLIST_CONFIG Where GUID = 1", Column.ColumnName)
Dim ColumnName = ClassDatabase.Execute_Scalar(sql, True)
If Not IsDBNull(ColumnName) Then
If Not IsDBNull(ColumnName) Or IsNothing(ColumnName) Or ColumnName <> "" Or ColumnName <> "{}" Then
'Jetzt die Spalten aus Array hinzufügen und Breite konfigurieren
sql = String.Format("select COLUMN{0}_WIDTH from TBPMO_WINDREAM_RESULTLIST_CONFIG Where GUID = 1", anzparam)
Dim Width = ClassDatabase.Execute_Scalar(sql, True)
If IsNothing(Width) Or IsDBNull(Width) Then
Width = 200
End If
'You need to use the column name here
'Please note that some attributes or indices will not be displayed
'Try not to add the same header twice, it will throw cause problems if you do that
Me.AxObjectListControl.AddColumnHeader(ColumnName, Width)
anzparam += 1
End If
End If
End If
Next
Else
Dim param As New List(Of String)
'The file name
param.Add("szLongName")
'The document-Type
param.Add("szText37")
'Versionsnummer
param.Add("dwVersionNumber")
'Datumsangaben
param.Add("dwCreationDate")
param.Add("dwCreation_Time")
'Add all search params
For Each spar As String In param
Dim width As Integer = 200
Select Case spar
Case "szLongName"
'Dateiname
width = 300
Case "szText37"
'Dokumentart
width = 160
Case "dwCreationDate"
'Erstelldatum
width = 90
Case "dwCreation_Time"
'Erstell-Zeit
width = 120
End Select
'You need to use the column name here
'Please note that some attributes or indices will not be displayed
'Try not to add the same header twice, it will throw cause problems if you do that
Me.AxObjectListControl.AddColumnHeader(spar, width)
Next
End If
Catch ex As Exception
MsgBox("Unexpected Error in Construct windreamResultList: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
If LogErrorsOnly = False Then ClassLogger.Add(">> AxObjectListControl geladen ", False)
'Execute the search
Dim results As WMObjects = windreamSucheErgebnisse
If LogErrorsOnly = False Then ClassLogger.Add(">> results geladen ", False)
'Set the contents without displaying them
AxObjectListControl.SetContentsEx(results)
'Change the icon
AxObjectListControl.SetStatusIcon(5)
'Display the results...
'The Previous Object Count
Dim poc As Integer = 0
'Display new objects, as long as the objectcount changes after displaying the objects
Do Until (poc <> AxObjectListControl.GetObjectCount)
poc = AxObjectListControl.GetObjectCount
'If you want, you can display more items at a timeRefresh_FollowUp_TabHeader
'But do not display to many at a time or the user interface could freeze
'Maybe try 50
AxObjectListControl.DisplayResults(WDResultListCount)
Loop
AxObjectListControl.SetStatusIcon(3)
Else
tslblWindreamView.Text = "Windream-Dokumente für Record: " & RECORD_ID & " - Keine Dateien gefunden"
Clear_Windream_ResultList()
End If
Catch ex As Exception
MsgBox("Error in execute-windreamSearch:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
Cursor = Cursors.Default
Catch ex As Exception
MsgBox("Error in RUN_WD_SEARCH:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Cursor = Cursors.Default
End Try
End Sub
Private Function Return_SearchPattern(ByVal content As String)
Select Case content.ToUpper
Case "@Record-ID".ToUpper
Return RECORD_ID
Case "@EntityID".ToUpper
Return ENTITY_ID
Case "@ParentID".ToUpper
Return PARENT_RECORDID
Case Else
MsgBox("Undefinierter Pattern '" & content & "' in der Windream-SuchKonfiguration. Bitte den Administrator verständigen", MsgBoxStyle.Exclamation)
ClassLogger.Add(" >> Undefinierter Such-Pattern: " & content, True)
End Select
End Function
Private Sub AxObjectListControl_ItemClicked(sender As Object, e As EventArgs) Handles AxObjectListControl.ItemClicked
CheckDocView()
End Sub
Sub Clear_Windream_ResultList()
AxObjectListControl.RemoveAllColumnHeader()
Me.AxObjectListControl.ClearResultList()
TabWindream.Text = "windream-Dateien"
End Sub
Sub CheckDocView()
Dim _index = AxObjectListControl.GetFirstSelectedObject
Dim path As String = AxObjectListControl.GetObjectPath(_index)
path = path.Replace("?", vWLaufwerk)
DocViewString = path
If WD_ShowDocs = True Then
CloseWDDocview()
ShowDocView()
End If
End Sub
Sub ShowDocView()
Try
CloseWDDocview()
DocView = Nothing
DocView = CreateObject("WMPViewXNG.Viewer")
' open the viewer
DocView.ViewFile(DocViewString)
OpenedFileString = DocViewString
Catch ex As Exception
MsgBox("Error in ShowDocView:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Sub CloseWDDocview()
Try
If DocView Is Nothing = False Then
DocView.CloseView(OpenedFileString, 0)
End If
Catch ex As Exception
ClassLogger.Add(" ### Error in CloseDocView")
ClassLogger.Add("### " & ex.Message & " ###")
End Try
End Sub
#End Region
#Region "GridViews"
Private Sub ButtonQuickViewCarousel_Click(sender As Object, e As EventArgs) Handles ButtonQuickViewCarousel.Click
GRID_TYPE = GridType.Carousel
VIEW_ID_RUNTIME = 2
GRID_TYPE_ID = 2
grvwCarousel.OptionsView.ViewMode = DevExpress.XtraGrid.Views.Layout.LayoutViewMode.Carousel
GridControlMain.MainView = grvwCarousel
Load_Tree_View_Data()
End Sub
Private Sub ButtonQuickViewTiles_Click(sender As Object, e As EventArgs) Handles ButtonQuickViewTiles.Click
GRID_TYPE = GridType.Tiles
VIEW_ID_RUNTIME = 1
GRID_TYPE_ID = 1
GridControlMain.MainView = grvwTiles
Load_Tree_View_Data()
End Sub
Private Sub ButtonDetailView_Click(sender As Object, e As EventArgs) Handles ButtonDetailView.Click
GRID_TYPE = GridType.Grid
VIEW_ID_RUNTIME = 3
GRID_TYPE_ID = 3
GridControlMain.MainView = grvwGrid
Load_Tree_View_Data()
End Sub
Private Sub ButtonSetViewAsDefault_Click(sender As Object, e As EventArgs) Handles ButtonSetViewAsDefault.Click
Dim VIEWTYPE_ID As Integer
Select Case GRID_TYPE
Case GridType.Tiles
VIEWTYPE_ID = 1
Case GridType.Carousel
VIEWTYPE_ID = 2
Case GridType.Grid
VIEWTYPE_ID = 3
End Select
Dim upd = String.Format("UPDATE TBPMO_USER_CONSTR_VIEW_TYPE SET VIEW_ID = {0} WHERE CONSTRUCTOR_DETAIL_ID = {1} AND [ENTITY_ID] = {2} AND USER_ID = {3}", VIEWTYPE_ID, CURRENT_CONSTRUCTOR_DETAIL_ID, ENTITY_ID, USER_GUID)
If ClassDatabase.Execute_non_Query(upd, True) = True Then
' VIEW_ID Override zurücksetzen!!
VIEW_ID_RUNTIME = -1
MsgBox("Stanard-View was saved successfully!", MsgBoxStyle.Information)
End If
End Sub
Private Sub ButtonResetView_Click(sender As Object, e As EventArgs) Handles ButtonResetView.Click
' TODO: Ansicht zurücksetzen
Try
Dim XMLPath = Get_Grid_Layout_Filename()
If File.Exists(XMLPath) And GRID_TYPE = GridType.Grid Then
File.Delete(XMLPath)
Load_Entity_Data(ACT_EBENE)
End If
Catch ex As Exception
MsgBox("Error in Reset Layout Grid: " & vbNewLine & ex.Message)
End Try
End Sub
#End Region
Private Sub TCDetails_DragDrop(sender As Object, e As DragEventArgs) Handles TCDetails.DragDrop
Drag_Drop(e)
End Sub
Private Sub TCDetails_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles TCDetails.SelectedPageChanged
Update_Status_Label(False, "")
tsButtonEditMode.Enabled = True
If TCDetails.SelectedTabPage.Text.ToLower.StartsWith("pos") Then
tsButtonEditMode.Enabled = False
Load_Pos_Data()
Load_POSGrid_Layout()
End If
If TCDetails.SelectedTabPage.Text.ToLower.StartsWith("windr") Then
tsButtonEditMode.Enabled = False
If RECORD_ID = 0 Then
RUN_WD_SEARCH(WD_Suche, "ENTITY")
Else
RUN_WD_SEARCH(WD_Suche, "RECORD")
End If
End If
If TCDetails.SelectedTabPage.Text.ToLower.StartsWith("wieder") Then
tsButtonEditMode.Enabled = False
Refresh_FollowUps()
dtpFollowUp.Enabled = False
lblWiedervorlage_Control.Text = "<< Waiting for Selection:"
'Check_FOLLOWUP_IsConfigured(ENTITY_ID)
End If
Select Case TCDetails.SelectedTabPageIndex
Case 0
'If RECORD_NEEDS_REFRESH = True Then
' ClassControlValues.LoadControlValues(RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
' ' UpdRECORD_NEEDS_REFRESH(False)
'End If
'Refresh_CreatedChangedRecordByID(RECORD_ID)
' RECORD_CHANGED = False
Case 1 'windream-Dokumente
Case 2
'Refresh_FollowUps()
End Select
End Sub
Private Sub Refresh_FollowUps()
Try
If DT_FU_ENTITY.Rows.Count > 0 Then
grpbxFU_Profile.Enabled = True
End If
Catch ex As Exception
MsgBox("Error in Refresh_FollowUps:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
#Region "Dropping Files"
Sub Drag_Enter(e As DragEventArgs)
If act_FormViewID <> 0 Then
ClassDragDrop.Drag_enter(e)
End If
End Sub
Sub Drag_Drop(e As DragEventArgs)
If act_FormViewID <> 0 Then
Dim sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORMVIEW_ID = " & FORMVIEW_ID
If ClassDatabase.Execute_Scalar(sql, True) = 0 Then
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation)
Exit Sub
End If
If e.Data.GetDataPresent(DataFormats.StringFormat) Then
Dim Wert As String = CType(e.Data.GetData(DataFormats.StringFormat), Object)
Console.WriteLine(Wert)
If Wert.Contains("SCAN") Then
Dim split() = Wert.Split(";")
If IsNumeric(split(1)) Then
CURRENT_FILEID = split(1)
CURRENT_PARENT_ID = PARENT_ID
CURRENT_RECORD_ID = RECORD_ID
CURRENT_FORMVIEW_ID = FORMVIEW_ID
frmWD_Index_Dokart.ShowDialog()
RUN_WD_SEARCH(WD_Suche, "RECORD")
End If
End If
Else
CURRENT_RECORD_ID = RECORD_ID
ClassDragDrop.Drop_File(e)
Check_Dropped_Files()
End If
End If
End Sub
Sub Check_Dropped_Files()
Try
If RECORD_ID = 0 Then
MsgBox("Bitte wählen Sie einen Datensatz aus!", MsgBoxStyle.Information)
Exit Sub
End If
For Each Str As Object In ClassDragDrop.files_dropped
If Not IsNothing(Str) Then
Dim DropType = Str.Substring(0, Str.LastIndexOf("@") + 1)
If DropType.ToString.Contains("SCAN") = False Then
ClassLogger.Add(">> Check_Dropped_Files:" & Str.ToString, False)
Dim CURRENT_WORKFILE = Str.Substring(Str.LastIndexOf("@") + 1)
TBPMO_FILES_USERTableAdapter.cmdInsert(CURRENT_WORKFILE, Environment.UserName, DropType)
End If
End If
Next
Dim sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORMVIEW_ID = " & FORMVIEW_ID
If ClassDatabase.Execute_Scalar(sql, True) >= 1 Then
Dim sql1 = String.Format("SELECT GUID, FILENAME2WORK, USER_WORK, HANDLE_TYPE, WORKED, ADDED_WHEN FROM TBPMO_FILES_USER WHERE (UPPER(USER_WORK) = UPPER('{0}')) AND WORKED = 0", Environment.UserName)
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql1)
If Not IsNothing(DT) Then
If DT.Rows.Count > 0 Then
For Each Filerow As DataRow In DT.Rows
'Dim datei = Str.ToString.Replace("@DROPFROMFSYSTEM@", "")
CURRENT_FILEID = Filerow.Item(0)
CURRENT_PARENT_ID = PARENT_ID
CURRENT_RECORD_ID = RECORD_ID
CURRENT_FORM_ID = ENTITY_ID
CURRENT_FORMVIEW_ID = FORMVIEW_ID
frmWD_Index_Dokart.ShowDialog()
RUN_WD_SEARCH(WD_Suche, "RECORD")
Next
End If
End If
Else
MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Catch ex As Exception
MsgBox("Check_Dropped_Files: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub GridControlMain_DragEnter(sender As Object, e As DragEventArgs) Handles GridControlMain.DragEnter
Drag_Enter(e)
End Sub
Private Sub pnlDetails_DragEnter(sender As Object, e As DragEventArgs) Handles pnlDetails.DragEnter
Drag_Enter(e)
End Sub
Private Sub GridControlMain_DragDrop(sender As Object, e As DragEventArgs) Handles GridControlMain.DragDrop
Drag_Drop(e)
End Sub
Private Sub pnlDetails_DragDrop(sender As Object, e As DragEventArgs) Handles pnlDetails.DragDrop
Drag_Drop(e)
End Sub
Private Sub TCDetails_DragEnter(sender As Object, e As DragEventArgs) Handles TCDetails.DragEnter
Drag_Enter(e)
End Sub
#End Region
#Region "Follow Up"
Private Sub ListViewFollowUps_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListViewFollowUps.SelectedIndexChanged
If Me.ListViewFollowUps.SelectedItems.Count > 0 Then
dtpFollowUp.Enabled = False
FOLL_UP_ID = ListViewFollowUps.SelectedItems(0).Text
lblFollowUp_save.Visible = False
For Each DR As DataRow In DT_FU_ENTITY.Rows
If FOLL_UP_ID = DR.Item("GUID") Then
grpbxFU_Profile.Enabled = True
FOLL_UP_DATE_CTRL_ID = DR.Item("DEPENDENT_DATE_CTRL_ID")
Dim datevalue = ClassControlValues.Get_Control_Value_for_ID(DR.Item("DEPENDENT_DATE_CTRL_ID"), RECORD_ID)
If Not IsNothing(datevalue) Then
dtpFollowUp.Enabled = True
If datevalue = "00:00:00" Then
dtpFollowUp.Value = CDate(Now)
End If
FOLL_UP_RECORD_DEFINED = True
Try
dtpFollowUp.Value = CDate(datevalue)
Catch ex As Exception
dtpFollowUp.Value = CDate(Now)
End Try
Else
dtpFollowUp.Value = CDate(Now)
FOLL_UP_RECORD_DEFINED = False
End If
Dim caption = ClassDatabase.Execute_Scalar("SELECT COL_NAME FROM TBPMO_CONTROL WHERE GUID = " & DR.Item("DEPENDENT_DATE_CTRL_ID"), True)
If Not IsNothing(caption) Then
lblWiedervorlage_Control.Text = CStr(caption)
Else
lblWiedervorlage_Control.Text = "Wiedervorlage:"
End If
FOLL_UP_DONE_CTRL_ID = DR.Item("DEPENDENT_DONE_CTRL_ID")
Dim checkvalue = ClassControlValues.Get_Control_Value_for_ID(DR.Item("DEPENDENT_DONE_CTRL_ID"), RECORD_ID)
If Not IsNothing(checkvalue) Then
chkFollowUp.Checked = CBool(checkvalue)
Else
chkFollowUp.Checked = False
End If
Dim SQL = String.Format("SELECT GUID FROM TBPMO_CONTROL_SCREEN WHERE CONTROL_ID = {0} AND SCREEN_ID = {1}", DR.Item("DEPENDENT_DONE_CTRL_ID"), CURRENT_SCREEN_ID)
Dim ctrl_screen_id = ClassDatabase.Execute_Scalar(SQL, True)
If ctrl_screen_id > 0 Then
SQL = String.Format("SELECT CAPTION FROM TBPMO_CONTROL_LANGUAGE WHERE CONTROL_SCREEN_ID = {0} AND LANGUAGE_TYPE = '{2}'", ctrl_screen_id, USER_LANGUAGE)
Dim captionCheck = ClassDatabase.Execute_Scalar(SQL, True)
If Not IsNothing(captionCheck) Then
chkFollowUp.Text = CStr(captionCheck)
End If
End If
Load_FUUser(FOLL_UP_ID)
End If
Next
End If
End Sub
Sub Load_FUUser(ID As Integer)
Try
Dim sql = "SELECT T.GUID, T1.USERNAME FROM TBPMO_FOLLUPEMAIL_RECORD T, TBDD_USER T1 WHERE T.USER_ID = T1.GUID AND T.FOLLOW_UP_ID = " & ID & " AND T.RECORD_ID = " & RECORD_ID & " ORDER BY T1.USERNAME"
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, "Load_FollowUpUser")
ListBoxUser2Profile.DataSource = DT
ListBoxUser2Profile.DisplayMember = DT.Columns(1).ColumnName
ListBoxUser2Profile.ValueMember = DT.Columns(0).ColumnName
Catch ex As Exception
MsgBox("Fehler bei Load_FUUser:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub dtpWV_ValueChanged(sender As Object, e As EventArgs) Handles dtpFollowUp.ValueChanged
If ENTITY_LOADED = False = False Then
Exit Sub
End If
If ClassControlCommandsUI.UpdateControlValue(FOLL_UP_DATE_CTRL_ID, RECORD_ID, dtpFollowUp.Value) = True Then
lblFollowUp_save.Text = "Follow Up saved - " & Now.ToString
lblFollowUp_save.Visible = True
'UpdRECORD_NEEDS_REFRESH(True)
Else
lblFollowUp_save.Visible = False
'UpdRECORD_NEEDS_REFRESH(False)
End If
End Sub
Private Sub chkFollowUp_CheckedChanged(sender As Object, e As EventArgs) Handles chkFollowUp.CheckedChanged
If ENTITY_LOADED = False Then
Exit Sub
End If
If ClassControlCommandsUI.UpdateControlValue(FOLL_UP_DONE_CTRL_ID, RECORD_ID, chkFollowUp.Checked.ToString) = True Then
lblFollowUp_save.Text = "Follow Up saved - " & Now.ToString
lblFollowUp_save.Visible = True
' UpdRECORD_NEEDS_REFRESH(True)
Else
lblFollowUp_save.Visible = False
'UpdRECORD_NEEDS_REFRESH(False)
End If
End Sub
Private Function Check_FOLLOWUP_IsConfigured(ENTITY_ID As Integer)
Try
Dim sql = "select * from TBPMO_FOLLOW_UP_EMAIL t where t.ACTIVE = 1 and t.DEPENDENT_DATE_CTRL_ID in (select guid from TBPMO_CONTROL where CONTROL_TYPE_ID = 4 and form_id = " & ENTITY_ID & ")"
DT_FU_ENTITY = ClassDatabase.Return_Datatable(sql)
If DT_FU_ENTITY.Rows.Count > 0 Then
'Die Userauswahl füllen
Dim DTUser As DataTable = ClassDatabase.Return_Datatable("select guid, username from TBDD_USER t where T.EMAIL IS NOT NULL AND MODULE_RECORD_ORG = 1 order by USERNAME")
cmbFollowUpUser.DataSource = DTUser
cmbFollowUpUser.DisplayMember = DTUser.Columns(1).ColumnName
cmbFollowUpUser.ValueMember = DTUser.Columns(0).ColumnName
TabFollowUp.PageVisible = True
FOLLOW_UPisActive = True
'Die Wiedervorlageprofile in den Listview laden
ListViewFollowUps.Items.Clear()
Dim anz As Integer = 0
For Each DR As DataRow In DT_FU_ENTITY.Rows
Dim name = DR.Item("NAME")
ListViewFollowUps.Items.Add(DR.Item("GUID"))
ListViewFollowUps.Items(anz).SubItems.Add(name)
anz += 1
Next
Else
FOLLOW_UPisActive = False
TabFollowUp.PageVisible = False
End If
Catch ex As Exception
MsgBox("Error in Check Follow Up:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
windream_Docshow = False
End Try
End Function
#End Region
#Region "Tasks"
Private Sub tsButtonShowWorkflowTasks_Click(sender As Object, e As EventArgs) Handles tsButtonShowWorkflowTasks.Click
If RECORD_ID > 0 Then
CURRENT_RECORD_ID = RECORD_ID
CURRENT_FORM_ID = ENTITY_ID
frmTask_Editor.ShowDialog()
Show_act_WFTask()
Refresh_TaskOverview()
End If
End Sub
Private Sub tsButtonShowTaskOverview_Click(sender As Object, e As EventArgs) Handles tsButtonShowTaskOverview.Click
frmTask_Overview.Show()
End Sub
Sub Refresh_TaskOverview()
Dim frmCollection As New FormCollection()
frmCollection = Application.OpenForms()
If frmTask_Overview.IsHandleCreated Then
If Sett_TaskOverviewKeepInFront = True Then
frmTask_Overview.Refresh()
End If
'Else
' Console.WriteLine("frmTaskOverview NICHT geladen")
End If
End Sub
Sub Show_act_WFTask()
Try
Me.VWPMO_WF_ACTIVETableAdapter.FillByRecord(Me.DD_DMSDataSet.VWPMO_WF_ACTIVE, RECORD_ID, Environment.UserName)
tsslblWorkflowstate.BackColor = Color.Black
If DD_DMSDataSet.VWPMO_WF_ACTIVE.Rows.Count > 0 Then
CURRENT_TASK_ID = Me.DD_DMSDataSet.VWPMO_WF_ACTIVE.Rows(0).Item("WF_TASK_ID")
Dim text = "Task: " & Me.DD_DMSDataSet.VWPMO_WF_ACTIVE.Rows(0).Item("TITLE")
text += " - " & Me.DD_DMSDataSet.VWPMO_WF_ACTIVE.Rows(0).Item("STATE_DESC")
text += " - " & Me.DD_DMSDataSet.VWPMO_WF_ACTIVE.Rows(0).Item("DUE_DATE")
tsslblWorkflowstate.Text = text
tsslblWorkflowstate.Visible = True
tsButtonShowWorkflowTasks.Visible = True
tsButtonShowWorkflowTasks.Enabled = True
Dim Colorstring = Me.DD_DMSDataSet.VWPMO_WF_ACTIVE.Rows(0).Item("COLOR")
If IsDBNull(Colorstring) Then
Exit Sub
End If
If Colorstring <> "" Then
'grvwSelection.Appearance.FocusedRow.BackColor = ColorTranslator.FromWin32(CInt(Colorstring))
'grvwSelection.Appearance.FocusedRow.ForeColor = Color.Yellow
tsslblWorkflowstate.BackColor = ColorTranslator.FromWin32(CInt(Colorstring))
Select Case tsslblWorkflowstate.BackColor
Case Color.Red
tsslblWorkflowstate.ForeColor = Color.White
End Select
End If
Else
tsslblWorkflowstate.Visible = False
tsButtonShowWorkflowTasks.Visible = False
' grvwSelection.Appearance.FocusedRow.BackColor = Color.Fuchsia
End If
Dim sql1 As String = "SELECT COUNT(*) FROM TBPMO_WORKFLOW_FORM where FORM_ID = @FORM_ID"
sql1 = sql1.Replace("@FORM_ID", ENTITY_ID)
Dim result As Integer = ClassDatabase.Execute_Scalar(sql1)
If result > 0 Then
tsButtonShowWorkflowTasks.Visible = True
tsButtonShowWorkflowTasks.Enabled = True
End If
Catch ex As Exception
MsgBox("Error in Show act WFTask: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
#End Region
Private Sub ResetEbenenAuswahlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ResetEbenenAuswahlToolStripMenuItem.Click
ACT_EBENE = 0
ACT_EBENE_STRING = ""
EBENE1_ENTITY = ""
EBENE1_RECID = 0
EBENE2_ENTITY = ""
EBENE2_RECID = 0
EBENE3_ENTITY = ""
EBENE3_RECID = 0
NavPane.Categories.Clear()
Load_Tree_View(CONSTRUCTORID)
End Sub
Private Sub DateiimportEntitätToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiimportEntitätToolStripMenuItem.Click
If PARENT_ID = 0 Then
Exit Sub
End If
CURRENT_ENTITYSTRING = _ENTITYSTRING
CURRENT_FORM_ID = ENTITY_ID
frmWD_EntityImport.ShowDialog()
End Sub
Private Sub WindreamsucheNeuLadenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WindreamsucheNeuLadenToolStripMenuItem.Click
RUN_WD_SEARCH(WD_Suche, "RECORD")
End Sub
Private Sub WorkflowTasksNeuErstellenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WorkflowTasksNeuErstellenToolStripMenuItem.Click
Dim result As MsgBoxResult
Dim stg As String
If USER_LANGUAGE = "de-DE" Then
stg = "Wollen Sie die Workflowtasks für diesen record neu erzeugen? Die alten werden gelöscht?"
Else
stg = "Do You really want to create the workflowtasks new?"
End If
result = MessageBox.Show(stg, "Confirmation needed:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
Try
CURRENT_FORM_ID = ENTITY_ID
Dim sql = "EXEC PRPMO_CREATE_WF_TASKS " & CURRENT_FORM_ID & " " & RECORD_ID
If ClassDatabase.Execute_non_Query(sql) Then
Show_act_WFTask()
End If
Catch ex As Exception
MsgBox("Unexpected Error in Create Workflowtasks Record: " & ex.Message, MsgBoxStyle.Critical)
End Try
End If
End Sub
Private Sub ZeigeRecordLogsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZeigeRecordLogsToolStripMenuItem.Click
CURRENT_RECORD_ID = RECORD_ID
frmRecord_Changes.ShowDialog()
End Sub
Private Sub FormDesignerToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles FormDesignerToolStripMenuItem.Click
Try
Dim SelectedNode As TreeNode = TryCast(TreeViewMain.SelectedNode, TreeNode)
If SelectedNode IsNot Nothing Then
Dim FormId As Integer = SelectedNode.Tag
If FormId > 0 Then
CURRENT_FORM_ID = FormId
OpenFormLevelDesigner()
End If
End If
Catch ex As Exception
MsgBox("Unexpected Error in Open Designer: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub ButtonExportToExcel_Click(sender As Object, e As EventArgs) Handles ButtonExportToExcel.Click
Dim saveFileDialog1 As New SaveFileDialog
saveFileDialog1.Filter = "Excel File|*.xlsx"
saveFileDialog1.Title = "Export to Excel:"
saveFileDialog1.ShowDialog()
If saveFileDialog1.FileName <> "" Then
Cursor = Cursors.WaitCursor
GridControlMain.MainView.ExportToXlsx(saveFileDialog1.FileName)
Dim result As MsgBoxResult
result = MessageBox.Show("Datei wurde erstellt! Wollen Sie diese nun öffnen?", "Erfolgsmeldung:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
Process.Start(saveFileDialog1.FileName)
End If
End If
Cursor = Cursors.Default
End Sub
Private Sub frmForm_Constructor_Main_Shown(sender As Object, e As EventArgs) Handles Me.Shown
Me.BringToFront()
' LoadLayouts()
Load_Level1()
Jump_Record()
End Sub
Sub Jump_Record()
Try
If JUMP_RECORD_ID > 0 Then
Dim sql = String.Format("SELECT FORM_ID FROM TBPMO_RECORD WHERE GUID = {0}", JUMP_RECORD_ID)
Dim FormID = ClassDatabase.Execute_Scalar(sql, True)
If FormID > 0 Then
Dim n As TreeNode
For Each n In TreeViewMain.Nodes
CheckNode(n, FormID)
Next
End If
End If
Catch ex As Exception
MsgBox("Unexpected error in jump-Record: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub CheckNode(ByVal n As TreeNode, FormID As Integer)
Dim aNode As TreeNode
For Each aNode In n.Nodes
If aNode.Tag = FormID Then
'Gefunden also selektieren
TreeViewMain.SelectedNode = aNode
TreeViewMain.SelectedNode.EnsureVisible()
TreeViewMain.Select()
'Für Grid filtern wir die Aktuelle Ansicht nach der Record-ID,
'für Carousel und Tiles markieren wir den Record
LocateRecordById(JUMP_RECORD_ID)
' Jump Record-ID wieder zurücksetzen
JUMP_RECORD_ID = 0
Exit For
Exit Sub
End If
CheckNode(aNode, FormID)
Next
End Sub
Public Sub LocateRecordById(RecordId As Integer)
If GRID_TYPE = GridType.Grid Then
Dim rowHandle = grvwGrid.LocateByValue(0, grvwGrid.Columns("Record-ID"), RecordId)
grvwGrid.FocusedRowHandle = rowHandle
ElseIf GRID_TYPE = GridType.Carousel Then
Dim rowHandle = grvwCarousel.LocateByValue(0, grvwCarousel.Columns("Record-ID"), RecordId)
grvwCarousel.FocusedRowHandle = rowHandle
ElseIf GRID_TYPE = GridType.Tiles Then
Dim rowHandle = grvwTiles.LocateByValue(0, grvwTiles.Columns("Record-ID"), RecordId)
grvwTiles.FocusedRowHandle = rowHandle
End If
End Sub
Sub Load_Templates()
Try
Dim sql As String = "SELECT * FROM VWPMO_TEMPLATE_ENTITY WHERE ENTITY_ID = " & ENTITY_ID & " ORDER BY TEMPLATE_NAME"
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, "Load_Templates")
If Not IsNothing(DT) Then
If DT.Rows.Count > 0 Then
OfficeVorlagenToolStripMenuItem.Enabled = True
OfficeVorlagenToolStripMenuItem.DropDownItems.Clear()
For Each row As DataRow In DT.Rows
Dim item As ToolStripMenuItem = OfficeVorlagenToolStripMenuItem
Dim newItem As ToolStripMenuItem = New ToolStripMenuItem(row.Item("TEMPLATE_NAME").ToString, Nothing, AddressOf TemplateItem_Click)
newItem.Tag = row.Item("TEMPLATE_ID")
item.DropDownItems.Add(newItem) ' subitem.DropDownItems.Add(newItem)
Next
Else
OfficeVorlagenToolStripMenuItem.Enabled = False
End If
End If
Catch ex As Exception
MsgBox("Error in Load_Templates:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub TemplateItem_Click(sender As Object, e As EventArgs)
Dim item As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
Dim TemplateID As Integer = Integer.Parse(item.Tag)
If RECORD_ID > 0 Then
Dim SOLLENTITY_ID = ClassDatabase.Execute_Scalar("SELECT ENTITY_ID FROM VWPMO_TEMPLATE_ENTITY WHERE TEMPLATE_ID = " & TemplateID)
Dim REC_ENTITY_ID = ClassDatabase.Execute_Scalar("SELECT FORM_ID FROM TBPMO_RECORD WHERE GUID = " & RECORD_ID)
If Not IsNothing(SOLLENTITY_ID) Then
If CInt(SOLLENTITY_ID) = REC_ENTITY_ID Then
Cursor = Cursors.WaitCursor
If ClassOfficeTemplate.Open_Word_Template(TemplateID, RECORD_ID) = True Then
RUN_WD_SEARCH(WD_Suche, "RECORD")
Update_Status_Label(True, "Vorlagen-Datei erfolgreich nach windream importiert!", EditState.Insert)
End If
Cursor = Cursors.Default
Else
MsgBox("Bitte wählen Sie nochmal einen Datensatz aus!", MsgBoxStyle.Exclamation)
End If
End If
Else
MsgBox("Bitte wählen Sie zuerst einen Datensatz aus.", MsgBoxStyle.Exclamation)
End If
End Sub
Sub Load_Level1()
Try
Dim sql As String = "SELECT * from VWPMO_CONSTRUCTOR_FORMS WHERE PARENT_ID = 0 AND CONSTRUCT_ID = " & CONSTRUCTORID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID & " ORDER BY SEQUENCE"
Dim dt As DataTable = ClassDatabase.Return_Datatable(sql)
If Not IsNothing(dt) Then
If dt.Rows.Count >= 1 Then
Dim tn As TreeNode = TreeViewMain.Nodes(0)
TreeViewMain.SelectedNode = tn
TreeViewMain.Select()
End If
End If
Catch ex As Exception
MsgBox("Error in Load_Level1:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
' Call the procedure using the top nodes of the treeview.
Private Sub CallRecursive(ByVal aTreeView As TreeView)
End Sub
Private Sub grvwGridPos_CellValueChanged(sender As Object, e As CellValueChangedEventArgs) Handles grvwGridPos.CellValueChanged
Try
Dim column = e.Column.FieldName
Dim sql = String.Format("select guid from TBPMO_CONTROL where COL_NAME = '{0}' and FORM_ID = {1}", column, POS_ENTITY)
Dim controlid = ClassDatabase.Execute_Scalar(sql, True)
If Not IsNothing(controlid) Then
'Überprüfen ob schon value vorhanden
sql = String.Format("SELECT CONTROL_ID FROM VWPMO_VALUES WHERE CONTROL_ID = {0} AND FORM_ID = {1} AND CONTROL_COLUMN = '{2}' AND RECORD_ID = {3}", controlid, POS_ENTITY, column, POS_RECORD_ID)
Dim cId As Integer = ClassDatabase.Execute_Scalar(sql)
If IsNothing(POS_RECORD_ID) Or IsDBNull(POS_RECORD_ID) Then
If ClassControlCommandsUI.CreateRecord(POS_ENTITY) = True Then
Dim recid = ClassControlCommandsUI.GetLastRecord
If Not IsNothing(recid) Then
'Die neue Record-ID setzen
POS_RECORD_ID = recid
ClassControlCommandsUI.ConnectRecord(PARENT_ID, POS_RECORD_ID, "POS_LINK for Entity " & POS_ENTITY.ToString)
Else
MsgBox("Unexpected Error in Creating POS", MsgBoxStyle.Exclamation)
End If
End If
End If
' Wenn cId = 0, existiert noch kein wert für diese controlId/FormId Kombination
If cId = 0 Then
ClassControlCommandsUI.InsertControlValue(controlid, POS_RECORD_ID, e.Value)
Update_Status_Label(True, "Datensatz wurde eingefügt", EditState.Insert)
Else
ClassControlCommandsUI.UpdateControlValue(controlid, POS_RECORD_ID, e.Value)
Update_Status_Label(True, "Datensatz wurde aktualisiert", EditState.Update)
End If
Else
Update_Status_Label(False)
End If
Catch ex As Exception
MsgBox("Error in grvwGridPos_CellValueChanged:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub grvwGridPos_FocusedRowChanged(sender As Object, e As FocusedRowChangedEventArgs) Handles grvwGridPos.FocusedRowChanged
Try
If TCDetails.SelectedTabPage.Text.StartsWith("Pos") Then
Dim Grid_RecordID = Get_Focused_Row_Cell_Value_pos("Record-ID")
If Not IsNothing(Grid_RecordID) Then
POS_RECORD_ID = Grid_RecordID
'SELECTED_RECORD_ID = POS_RECORD_ID
'RECORD_ID = POS_RECORD_ID
'Update_Record_Label(SELECTED_RECORD_ID)
End If
End If
Catch ex As Exception
MsgBox("Error in grvwGridPos_FocusedRowChanged:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub grvwGridPos_RowUpdated(sender As Object, e As RowObjectEventArgs) Handles grvwGridPos.RowUpdated
End Sub
Private Sub GridControlPos_Leave(sender As Object, e As EventArgs) Handles GridControlPos.Leave
Save_POSGrid_Layout()
End Sub
Private Sub grvwGridPos_RowStyle(sender As Object, e As DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs) Handles grvwGridPos.RowStyle
If e.RowHandle = DevExpress.XtraGrid.GridControl.AutoFilterRowHandle Then
e.Appearance.BackColor = Color.Orange 'LemonChiffon
End If
End Sub
Private Sub grvwGrid_RowStyle(sender As Object, e As DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs) Handles grvwGrid.RowStyle
If e.RowHandle = DevExpress.XtraGrid.GridControl.AutoFilterRowHandle Then
e.Appearance.BackColor = Color.Orange
End If
End Sub
Private Sub grvwGrid_SelectionChanged(sender As Object, e As DevExpress.Data.SelectionChangedEventArgs) Handles grvwGrid.SelectionChanged
End Sub
Private Sub grvwGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles grvwGrid.MouseDown, grvwTiles.MouseDown, grvwCarousel.MouseDown
If e.Button = Windows.Forms.MouseButtons.Right Then
RightMouse_Clicked = True
Else
RightMouse_Clicked = False
End If
End Sub
Private Sub btnAddUser_FollowUp_Click(sender As Object, e As EventArgs) Handles btnAddUser_FollowUp.Click
If cmbFollowUpUser.SelectedIndex <> -1 And FOLL_UP_ID > 0 Then
Try
Dim ins = "INSERT INTO TBPMO_FOLLUPEMAIL_RECORD (FOLLOW_UP_ID,USER_ID,RECORD_ID,ADDED_WHO) VALUES (" & FOLL_UP_ID & ", " & cmbFollowUpUser.SelectedValue & ", " & RECORD_ID & ", '" & Environment.UserName & "')"
If ClassDatabase.Execute_non_Query(ins, True) = True Then
Load_FUUser(FOLL_UP_ID)
Update_Status_Label(True, "User added to Follow Up", EditState.Insert)
End If
Catch ex As Exception
MsgBox("Error in Add User2FollowUp_Record:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End If
End Sub
Private Sub btnRemoveUser_FollowUp_Click(sender As Object, e As EventArgs) Handles btnRemoveUser_FollowUp.Click
If ListBoxUser2Profile.SelectedIndex <> -1 Then
Try
Dim del = "DELETE FROM TBPMO_FOLLUPEMAIL_RECORD WHERE GUID = " & ListBoxUser2Profile.SelectedValue
If ClassDatabase.Execute_non_Query(del, True) = True Then
Update_Status_Label(True, "User removed from Follow Up", EditState.Update)
Load_FUUser(FOLL_UP_ID)
End If
Catch ex As Exception
MsgBox("Error in Delete Userlink FollowUp:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End If
End Sub
Private Sub VerknüpfungenAnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VerknüpfungenAnzeigenToolStripMenuItem.Click
Show_Verknuepfungen()
End Sub
Sub Show_Verknuepfungen()
If SplitContainerBottom.Collapsed = True Then
VerknüpfungenAnzeigenToolStripMenuItem.Text = "Verknüfungen ausblenden"
Load_ParentConnections()
TCDetails.SelectedTabPageIndex = 0
SplitContainerBottom.Collapsed = False
Else
VerknüpfungenAnzeigenToolStripMenuItem.Text = "Verknüfungen einblenden"
SplitContainerBottom.Collapsed = True
'Save_GridViewParentEntityLayout()
My.Settings.Save()
End If
End Sub
Sub Load_ParentConnections()
Try
' SELECT COLUMN_NAME1 FROM VWTEMP_cPMO_FORM
Dim sql = String.Format("SELECT TOP 1 PARENT_ID, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'FORM_TITLE' " & _
"from VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {2} AND SCREEN_ID = {3} AND FORM_ID = {4}", USER_LANGUAGE, CURRENT_SCREEN_ID, CONSTRUCTORID, CURRENT_SCREEN_ID, ENTITY_ID)
Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, "Parent-Data")
Dim Parent_ID = DT.Rows(0).Item(0)
Dim Title = DT.Rows(0).Item(1)
Dim Colname = "[" & ClassDatabase.Execute_Scalar("SELECT TOP 1 COLUMN_NAME1 from VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = " & CONSTRUCTORID & " AND FORM_ID = " & Parent_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID, True) & "]"
'Load_GridViewParentEntity_Layout()
If Not IsNothing(Parent_ID) And Not IsNothing(Colname) Then
sql = "select [Record-ID], " & Colname & " from VWTEMP_PMO_FORM" & Parent_ID.ToString
Dim DTGrid As DataTable = ClassDatabase.Return_Datatable(sql, "VariableSelect ParentEntity")
GridControlParent.DataSource = Nothing
GridViewParent.Columns.Clear()
'Databinding Neu
GridControlParent.DataSource = DTGrid
'TabPageParentEntity.Text = "Aktuelle Parent-Entity: " & Title
GridViewParent.Columns.Item("Record-ID").Visible = False
End If
Catch ex As Exception
MsgBox("Fehler bei Load_ParentConnections:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub GridViewParent_FocusedRowChanged(sender As Object, e As FocusedRowChangedEventArgs) Handles GridViewParent.FocusedRowChanged
Try
If GridViewParent.RowCount > 0 Then
Dim Grid_RecordID = GridViewParent.GetFocusedRowCellValue(GridViewParent.Columns("Record-ID"))
If Grid_RecordID Is Nothing = False Then
LinkParentID = Grid_RecordID
'lblParentID.Text = Grid_RecordID.ToString & " - " & GridViewParentEntity.GetFocusedRowCellValue(GridViewParent.Columns(1))
btnRelinkParentID.BackColor = Color.DarkOrange
btnRelinkParentID.FlatAppearance.BorderColor = Color.DarkOrange
btnRelinkParentID.Enabled = True
Else
btnRelinkParentID.Enabled = False
btnRelinkParentID.BackColor = Color.WhiteSmoke
btnRelinkParentID.FlatAppearance.BorderColor = Color.WhiteSmoke
ClassLogger.Add(">> Grid_RecordID konnte nicht gewählt werden - GetFocusedParentID", True)
' lblParentID.Text = "keine Auswahl möglich"
End If
Else
btnRelinkParentID.Enabled = False
btnRelinkParentID.BackColor = Color.WhiteSmoke
btnRelinkParentID.FlatAppearance.BorderColor = Color.WhiteSmoke
'lblParentID.Text = "keine Rows gefunden"
End If
Catch ex As Exception
MsgBox("Fehler bei GetFocusedParentID:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub btnRelinkParentID_Click(sender As Object, e As EventArgs) Handles btnRelinkParentID.Click
If PARENT_ID > 0 Then
Dim result As MsgBoxResult
result = MessageBox.Show("Möchten Sie den Parent-Datensatz für den aktuellen Datensatz wirklich aktualisieren?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result <> MsgBoxResult.Yes Then
Exit Sub
Else
If ClassDatabase.Execute_non_Query("DELETE FROM TBPMO_RECORD_CONNECT WHERE RECORD2_ID = " & RECORD_ID & " AND RECORD1_ID = (SELECT PARENT_ID FROM TBPMO_FORM WHERE GUID = " & ENTITY_ID & ")", True) = False Then
Exit Sub
End If
End If
End If
If ClassControlCommandsUI.ConnectRecord(LinkParentID, RECORD_ID, "ReLInk ENTITY " & ENTITY_ID.ToString) = True Then
'Save_GridViewParentEntityLayout()
MsgBox("Die Parent-Entität wurde erfolgreich aktualisiert!", MsgBoxStyle.Information)
Check_Record_Changed()
'Load_Data_for_TreeView()
btnRelinkParentID.BackColor = Color.Lime
btnRelinkParentID.FlatAppearance.BorderColor = Color.Lime
Load_Entity_Data_Only()
'Show_Verknuepfungen()
End If
End Sub
Private Sub RecordKopierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RecordKopierenToolStripMenuItem.Click
Dim result As MsgBoxResult
result = MessageBox.Show("Möchten Sie den Datensatz wirklich kopieren?", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
Dim SQL = String.Format("EXEC PRDD_COPY_RECORD {0}, '{1}'", RECORD_ID, Environment.UserName)
If ClassDatabase.Execute_non_Query(SQL, True) = True Then
Load_Entity_Data(ACT_EBENE)
End If
End If
End Sub
Private Sub DatenNeuLadenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DatenNeuLadenToolStripMenuItem.Click
DisableEditMode()
Load_Entity_Data(ACT_EBENE)
RECORD_CHANGED = False
End Sub
Private Sub AnwendungscacheFreigebenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AnwendungscacheFreigebenToolStripMenuItem.Click
Dim result As MsgBoxResult
result = MessageBox.Show("Möchten Sie den Anwendungscache wirklich leeren?" & vbNewLine & "Die Entität wird dann automatisch neugeladen!", "Bestätigung erforderlich:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = MsgBoxResult.Yes Then
Try
Cursor = Cursors.WaitCursor
CURRENT_FORM_ID = ENTITY_ID
ClassControlValueCache.ClearCache()
DisableEditMode()
Load_Entity_Data(ACT_EBENE)
RECORD_CHANGED = False
Catch ex As Exception
MsgBox("Unexpected Error in Clear Cache:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Finally
Cursor = Cursors.Default
End Try
End If
End Sub
Private Sub grvwGrid_ColumnFilterChanged(sender As Object, e As EventArgs) Handles grvwGrid.ColumnFilterChanged
Console.WriteLine("Filter changed: " & Now)
End Sub
Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs)
MsgBox(grvwGrid.ActiveFilterString)
End Sub
End Class