Imports DevExpress.Utils Imports DevExpress.XtraEditors Imports DevExpress.XtraGrid.Views.Base Imports DevExpress.XtraGrid.Views.Tile Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid.Views.Grid.ViewInfo Imports DevExpress.XtraGrid Imports DevExpress.XtraScheduler Imports System.Text Imports System.IO 'Imports WINDREAMLib Imports System.Runtime.InteropServices 'Imports DD_Rights 'Imports DD_LIB_Standards 'Imports DevExpress.LookAndFeel Imports System.ComponentModel Imports System.Threading Imports DevExpress.XtraTreeList Imports DevExpress.XtraTreeList.Columns Imports DevExpress.XtraTreeList.Nodes.Operations Imports DevExpress.XtraTreeList.Nodes Imports DevExpress.XtraPrinting Imports DevExpress.XtraSplashScreen Public Class frmConstructor_Main Public Shared Function ShellExecuteEx(ByRef lpExecInfo As SHELLEXECUTEINFO) As Boolean End Function Public Structure SHELLEXECUTEINFO Public cbSize As Integer Public fMask As Integer Public hwnd As IntPtr Public lpVerb As String Public lpFile As String Public lpParameters As String Public lpDirectory As String Dim nShow As Integer Dim hInstApp As IntPtr Dim lpIDList As IntPtr Public lpClass As String Public hkeyClass As IntPtr Public dwHotKey As Integer Public hIcon As IntPtr Public hProcess As IntPtr End Structure #Region "Laufzeitvariablen & Konstanten" Private ERROR_FORM_LOAD As Boolean = False Private Const SEE_MASK_INVOKEIDLIST = &HC Private Const SEE_MASK_NOCLOSEPROCESS = &H40 Private Const SEE_MASK_FLAG_NO_UI = &H400 Public Const SW_SHOW As Short = 5 Private PARENT_SKIPPED As Boolean = False Public CtrlBuilder As ClassControlBuilder Public CtrlCommandUI As ClassControlCommandsUI Private CONSTRUCTORID As Integer Private CONSTRUCTOR_DETAIL_ID As Integer 'Private CONSTRUCT_EXPAND As Boolean = True Private DT_CONSTRUCT_VIEW As DataTable Private DT_VWPMO_CONSTRUCTOR_FORMS As DataTable Private DT_ENTITY_DATA As DataTable Private DT_TREEVIEW_NODES_ALL As DataTable Private DT_TREEVIEW_NODES_FIRST As DataTable Private DT_TREEVIEW_NODES_DEVEXPRESS As DataTable Private DT_TREEVIEW_CONFIGURATION As DataTable Private DT_CONTROLS_ENTITY As DataTable Private DT_ADDING_USERS As DataTable Private DT_CONTROL_SCREEN_SHOW_COL_0 As DataTable Private TREEVIEW_IMAGELIST As ImageList Private NODE_NAVIGATION As Boolean = False Private NODE_NAVIGATION_LOADED As Boolean = False Private LOCK_CONTROLS_BG_LOAD As Boolean = False 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 Private MyTreeview As TreeView Private Node_AfterSelect As Boolean = False Private taskToken As CancellationTokenSource Private TreeView_perControl As Boolean = False Dim IsTopFirstRow As Boolean = True Dim IsFilterMode As Boolean = False Private GRIDRightMouse_Clicked = False Private GRIDdownHitInfo As GridHitInfo Private VIEW_ID Private VIEW_ID_RUNTIME As Integer = -1 Public RECORD_ENABLED As Boolean = False Public POS_ENABLED As Boolean = False Private windream_inited = 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 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 FORM_SHOWN 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 WD_Suche As String Private DocView Private DocViewString As String Private OpenedFileString As String Private _FormClosing As Boolean = False Private ENTITY_LOADING_PROCESS As Boolean = False Private LinkParentID As Integer Private CONTROL_DOCTYPE_MATCH As Integer = 0 Private FOLLOW_UPisActive As Boolean = False Private DT_FU_Record As DataTable Private DT_FU_ENTITY As DataTable ' Private gridGUID = 2 Private DT_WINDREAM_RESULTLIST_DEF As DataTable Private DT_WINDREAM_COLUMNS_GRID As DataTable Private DT_DOCRESULT_DROPDOWN_ITEMS As DataTable Private DT_RESULTLIST_OPTIONS As DataTable Private DT_RESULTLIST_VARIABLE_VALUE As DataTable Private DT_WORKFLOWS_MANUAL As DataTable Private _MANUAL_WORKFLOW As Boolean = False Private USER_RESULTLIST_CONFIG_GUID As Integer = 0 Private DT_TBPMO_FORM_VIEW 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 LOAD_ENTITY_SEARCH_AT_STARTUP As Boolean = False Private SELECTION_IN_ACTION As Boolean = False Private RECORD_ID As Integer Private PARENT_ENTITYID As Integer Private DOC_SEARCH_TAB1 As Boolean = False Private ACTIVATE_DOC_SEARCH_ON_EDIT As Boolean = False Private ADD_RECORDS_CONSTR As Boolean = True Private FORM_TYPE As Integer Private ENTITY_ID As Integer Private REDUNDANT_FORM As Integer Private COUNT_RO_CONTROLS As Integer Private FORMVIEW_ID As Integer Private _VIEWNAME As String Private _ENTITYSTRING As String 'Private ClassWindreamDocGrid.RESULT_DOC_PATH 'Private ClassWindreamDocGrid.RESULT_OBJECTTYPE 'Private ClassWindreamDocGrid.RESULT_INWORK 'Private ClassWindreamDocGrid.RESULT_DOC_ID 'Private ClassWindreamDocGrid.RESULT_DISPLAYNAME Private IW_USER As String Private IW_COMMENT As String Private INWORK_FILE As Boolean Private BACKGROUND_HELPER As ClassBackgroundHelper Private ROW_READ_ONLY As Boolean = False Private ERROR_WHILE_SAVING As Boolean = False 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 'If RECORD_CHANGED = True Then ' Dim ResultMessage As String ' Try ' ResultMessage = Update_Record_OnChange() ' Catch ex As Exception ' MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error in saving Record") ' Me.Cursor = Cursors.Default ' ' Verhindert den Zeilenwechsel ' e.Cancel = True ' Exit Sub ' End Try 'End If If TrySave_Automatic() = False Then e.Cancel = True End If _FormClosing = True ' Check_Record_Changed() CloseWDDocview() Save_Grid_Layout() If DOC_SEARCH_TAB1 = True Then Save_DocGrid_Layout() End If ClassWindowLocation.SaveFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN") CURRENT_OPEN_CONSTRUCTOR_FORMS.Remove(CONSTRUCTORID) ' Verhindert, das noch geöffnete Records für immer gelockt sind If Not IsNothing(CURRENT_DOCVIEW) Then Try CURRENT_DOCVIEW.CloseView(CURRENT_DOCVIEW_PATH, 0) Catch ex As Exception End Try End If End Sub Private Sub AddRibbonCloseHandler(controls As Windows.Forms.Control.ControlCollection) For Each c As Windows.Forms.Control In controls AddHandler c.MouseClick, Sub() MAIN_FORM.CloseRibbon() End Sub If c.Controls.Count > 0 Then AddRibbonCloseHandler(c.Controls) End If Next End Sub Private Sub Load_Configurable_Nodes() Try Dim oSql = String.Format("SELECT * FROM TBPMO_STRUCTURE_NODES_CONFIGURATION where TYPE_NODE = 1000 AND ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", CONSTRUCTORID) NODE_CONFIGURABLE_NODES_DT = MYDB_ECM.GetDatatable(oSql) Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Load_Configurable_Nodes") End Try End Sub Sub Load_Adding_users() Try Dim oSql = String.Format("SELECT * FROM TBPMO_ENTITY_USERRIGHT_ADDING where ENTITY_ID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE CONSTRUCT_ID = {0})", CONSTRUCTORID) DT_ADDING_USERS = MYDB_ECM.GetDatatable(oSql) Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Load_Adding_users") End Try End Sub Private Sub frmForm_Constructor_Main_Load(sender As Object, e As EventArgs) Handles Me.Load Dim sw As New SW("Form Load") Dim DT_PROXY_ENTITY As DataTable Dim SQL Try BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bsitmLoadEntity.Visibility = DevExpress.XtraBars.BarItemVisibility.Never CURRENT_DT_DOC_ENTITY_SEARCH = Nothing bsitmState.Caption = "" _FormClosing = False CONSTRUCTORID = CURRENT_CONSTRUCTOR_ID Me.Cursor = Cursors.WaitCursor AddRibbonCloseHandler(Controls) Init_Grid_Control() 'Catch ex As Exception ' ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 'End Try ' Hintergrund Bild initialisieren BACKGROUND_HELPER = New ClassBackgroundHelper(GridViewDoc_Search, WM_LOGO) ' ' Bestimme Dinge ausblenden wenn kein admin If USER_IS_ADMIN = True Then FormDesignerToolStripMenuItem.Visible = True Else FormDesignerToolStripMenuItem.Visible = False End If 'If LICENSE_PROXY = True And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then ' SQL = "SELECT * FROM TBPROXY_SYNC_ENTITY" ' DT_PROXY_ENTITY = MYDB_ECM.GetDatatable(SQL) 'End If ClassWindowLocation.LoadFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "CONSTRUCTOR_MAIN") ' VWPMO_WF_USER_ACTIVETableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString ClassWorkflow.Refresh_Workflows_Entity() SQL = String.Format("SELECT *, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " & "FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {2} AND CONSTRUCT_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, CURRENT_SCREEN_ID, CONSTRUCTORID) DT_VWPMO_CONSTRUCTOR_FORMS = MYDB_ECM.GetDatatable(SQL) Catch ex As System.Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Loading Form part 1") End Try Try 'If LICENSE_PROXY = True And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then ' If DT_VWPMO_CONSTRUCTOR_FORMS.Rows.Count = 0 Then ' ClassHelper.MSGBOX_Handler("ERROR", "Missing Proxy-Configuration", String.Format("Attention: You are using Proxy-Server with synchronized data:" & vbNewLine & ' "Actually there is no data for this view synchronized or configured! Please inform Digital Data!" & vbNewLine & ' "View will now be terminated!")) ' ERROR_FORM_LOAD = True ' Exit Sub ' Else ' Dim Entity_Exists As Boolean = False ' Dim Entity_Name As String ' For Each Constr_row As DataRow In DT_VWPMO_CONSTRUCTOR_FORMS.Rows ' Entity_Name = Constr_row.Item("FORM_TITLE") ' Dim Constr_FORM = Constr_row.Item("FORM_ID") ' ENTITY_ID = Constr_row.Item("FORM_ID") ' CURRENT_ENTITY_ID = ENTITY_ID ' Dim expression As String = String.Format("ENTITY_ID = {0}", Constr_FORM) ' Dim matchingRows() As DataRow = DT_PROXY_ENTITY.Select(expression) ' 'Prüfen ob Form in Config Proxy vorhanden ' For Each matchingRow As DataRow In matchingRows ' Entity_Exists = True ' Next ' If Entity_Exists = False Then ' ClassHelper.MSGBOX_Handler("ERROR", "Missing Proxy-Configuration", String.Format("Attention: You are using Proxy-Server with synchronized data:" & ' "The entity '{0}' used in this view is not configured for Your proxy-server! Please inform Digital Data!" & ' "View will now be terminated!", Entity_Name)) ' ERROR_FORM_LOAD = True ' Exit Sub ' End If ' Next ' End If 'End If CURRENT_DT_TBPMO_ENTITY_RIGHT_CONTROLS = MYDB_ECM.GetDatatable(String.Format("SELECT T.* FROM TBPMO_ENTITY_RIGHT_CONTROLS T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID where T1.CONSTRUCT_ID = {0}", CONSTRUCTORID)) Load_Adding_users() Load_Configurable_Nodes() Catch ex As System.Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Loading Form part 2") End Try Try SQL = String.Format("select T.* from VWPMO_STRUCTURE_NODES T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T1.CONSTRUCT_ID = {0}", CONSTRUCTORID) Dim DT As DataTable = MYDB_ECM.GetDatatable(SQL) If DT.Rows.Count >= 1 Then LOGGER.Info($"There are [{DT.Rows.Count}] NODES.....") TreeView_perControl = True DT_TREEVIEW_NODES_ALL = DT DT_TREEVIEW_NODES_DEVEXPRESS = DT_TREEVIEW_NODES_ALL.Copy() Try DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("ID1") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("ID2") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("ID3") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("BOOL1") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("BOOL2") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("ADDED_WHO") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("ADDED_WHEN") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("CHANGED_WHO") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("CHANGED_WHEN") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("CONTROL_ID") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("CREATE_RECORD") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("ENTITY_ID") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("SEQUENCE") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("EXPAND_NODE") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("NAME") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("TYPE_NODE") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("FONT_FAMILY") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("FONT_COLOR") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("FONT_SIZE") DT_TREEVIEW_NODES_DEVEXPRESS.Columns.Remove("FONT_STYLE") DT_TREEVIEW_NODES_DEVEXPRESS.AcceptChanges() Catch ex As Exception End Try DT_TREEVIEW_NODES_FIRST = ClassHelper.FILTER_DATATABLE(DT, "EXPAND_NODE = 1", "") SQL = String.Format("select T.* from TBPMO_STRUCTURE_NODES_CONFIGURATION T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T1.CONSTRUCT_ID = {0}", CONSTRUCTORID) DT_TREEVIEW_CONFIGURATION = MYDB_ECM.GetDatatable(SQL) LOGGER.Debug($"DT_TREEVIEW_CONFIGURATION-Count: {DT_TREEVIEW_CONFIGURATION.Rows.Count}") Try TREEVIEW_IMAGELIST = New ImageList For Each row As DataRow In DT_TREEVIEW_CONFIGURATION.Rows Try Dim bimage = row.Item("NODE_IMAGE") If Not IsDBNull(bimage) Then Dim Node_image = ByteArrayToBitmap(bimage) TREEVIEW_IMAGELIST.Images.Add(row.Item("GUID").ToString, Node_image) 'row.Item("GUID").ToString & "#" & row.Item("ENTITY_ID") End If Catch ex As Exception End Try Next TreeViewMain.ImageList = TREEVIEW_IMAGELIST Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Adding NodeConfigurations to TreeView: ") End Try Me.SplitContainerTop.Panel1.Controls.Remove(Me.TreeViewMain) Me.SplitContainerFORM.Panel1.Controls.Add(Me.TreeViewMain) SplitContainerFORM.Collapsed = False SplitContainerFORM.PanelVisibility = SplitPanelVisibility.Both SplitContainerTop.Collapsed = True SplitContainerTop.PanelVisibility = SplitPanelVisibility.Panel2 SplitContainerMain.Collapsed = True NODE_NAVIGATION = True tsmiNodedownSearch.Visible = True tsmiNodeNew.Visible = True If USER_IS_ADMIN Then tsmiNodeRename.Visible = True Else tsmiNodeRename.Visible = False End If Else LOGGER.Info($"There are now rows for VWPMO_STRUCTURE_NODE [{SQL}]") tsmiNodeNew.Visible = False tsmiNodeRename.Visible = False If DT_VWPMO_CONSTRUCTOR_FORMS.Rows.Count = 1 Then SplitContainerTop.PanelVisibility = SplitPanelVisibility.Both SplitContainerTop.CollapsePanel = SplitCollapsePanel.Panel1 SplitContainerTop.Collapsed = True End If End If Catch ex As System.Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Loading Form part 3") End Try Try DT_CONSTRUCT_VIEW = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_FORM_CONSTRUCTOR WHERE GUID = " & CONSTRUCTORID) Dim SEL1 = String.Format("SELECT * FROM TBPMO_FORM WHERE GUID IN (SELECT FORM_ID FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {0} AND CONSTRUCT_ID = {1})", CURRENT_SCREEN_ID, CONSTRUCTORID) DT_ENTITY_DATA = MYDB_ECM.GetDatatable(SEL1) SEL1 = String.Format("SELECT *, dbo.FNPMO_GET_CONTROL_CAPTION ('{0}', 1, CONTROL_ID) AS 'CAPTION' FROM VWPMO_CONTROL_SCREEN", USER_LANGUAGE) DT_VWPMO_CONTROL_SCREEN = MYDB_ECM.GetDatatable(SEL1) DT_CONTROL_SCREEN_SHOW_COL_0 = ClassHelper.FILTER_DATATABLE(DT_VWPMO_CONTROL_SCREEN, "CONTROL_SHOW_COLUMN = 0", "") If DT_CONSTRUCT_VIEW.Rows.Count = 1 Then 'Load Input Grid Me.Text = DT_CONSTRUCT_VIEW.Rows(0).Item("FORM_TITLE") 'Die Standards ein/ausblenden End If Dim sql_ResultList = "select T1.ENTITY_ID,T.GUID,T.TITLE,T.MANUALLY,T.CREATE_ON_REC_CREATE,T.CREATE_ON_FOLL_UP " & "FROM TBPMO_WORKFLOW T,TBPMO_WORKFLOW_ENTITY_STATE T1 " & "WHERE T.GUID = T1.WF_ID " & "GROUP BY T1.ENTITY_ID,T.GUID,T.TITLE,T.MANUALLY,T.CREATE_ON_REC_CREATE,T.CREATE_ON_FOLL_UP" DT_WORKFLOWS_MANUAL = MYDB_ECM.GetDatatable(sql_ResultList) FORM_LOADED = True sw.Done() Catch ex As System.Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Loading Form part 4") End Try Me.Cursor = Cursors.Default End Sub #Region "Layout" Private Sub GridControl_Leave(sender As Object, e As EventArgs) Handles GridControl1.Leave, GridControlMain.Leave, GridControlPos.Leave, GridControlDocSearch.Leave Save_Grid_Layout() Save_POSGrid_Layout() Save_DocGrid_Layout() Save_Variants_Grid_Layout() End Sub Private Sub Save_Variants_Grid_Layout() Try Dim XMLPath = Get_VariantsGrid_Layout_Filename() GridViewVariants.SaveLayoutToXml(XMLPath) ' Update_Status_Label(True, "Grid Layout Loaded") Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Sub Load_Variants_Grid_Layout() Try Dim XMLPath = Get_VariantsGrid_Layout_Filename() If File.Exists(XMLPath) Then GridViewVariants.RestoreLayoutFromXml(XMLPath) GridViewVariants.GuessAutoFilterRowValuesFromFilter() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Private Function Get_VariantsGrid_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("GridViewDoc_Search_{0}_{1}_UserLayout.xml", GetSafeFilename(EntityName), CONSTRUCTOR_DETAIL_ID) Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename) End Function Private Sub SplitContainer_SplitterMoved(sender As Object, e As EventArgs) Handles SplitContainerTop.SplitterMoved, SplitContainerDetails.SplitterMoved, SplitContainerMain.SplitterMoved, SplitContainerFORM.SplitterMoved Save_Splitter_Layout() End Sub 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, CONSTRUCTOR_DETAIL_ID) Dim XMLPath = System.IO.Path.Combine(Application.UserAppDataPath(), Filename) grvwGridPos.SaveLayoutToXml(XMLPath) Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 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, CONSTRUCTOR_DETAIL_ID) Dim XMLPath = System.IO.Path.Combine(Application.UserAppDataPath(), Filename) If File.Exists(XMLPath) Then grvwGridPos.RestoreLayoutFromXml(XMLPath) grvwGridPos.GuessAutoFilterRowValuesFromFilter() 'grvwGrid.ClearGrouping() ' grvwGridPos.ClearSelection() ' grvwGridPos.OptionsView.ShowPreview = False End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Sub Save_DocGrid_Layout() Try If ACT_EBENE_STRING Is Nothing Then Exit Sub End If Dim XMLPath = Get_DocGrid_Layout_Filename() GridViewDoc_Search.SaveLayoutToXml(XMLPath) ' Update_Status_Label(True, "Grid Layout Loaded") Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Sub Load_DocGrid_Layout() Try If ACT_EBENE_STRING Is Nothing Then Exit Sub End If Dim XMLPath = Get_DocGrid_Layout_Filename() If File.Exists(XMLPath) Then GridViewDoc_Search.RestoreLayoutFromXml(XMLPath) GridViewDoc_Search.GuessAutoFilterRowValuesFromFilter() GridViewDoc_Search.ClearColumnsFilter() GridViewDoc_Search.ClearFindFilter() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 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.GuessAutoFilterRowValuesFromFilter() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 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)) If CONSTRUCTOR_DETAIL_ID > 0 Then settings.Add(New ClassSetting("SplitViewMainSplitterPosition_" & CONSTRUCTOR_DETAIL_ID.ToString, SplitContainerMain.SplitterPosition)) Else settings.Add(New ClassSetting("SplitViewMainSplitterPosition_0", SplitContainerMain.SplitterPosition)) End If settings.Add(New ClassSetting("SplitViewDetailsSplitterPosition_" & CONSTRUCTOR_DETAIL_ID.ToString, SplitContainerDetails.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_" & CONSTRUCTOR_DETAIL_ID.ToString If NODE_NAVIGATION = False Then SplitContainerMain.SplitterPosition = Integer.Parse(setting._value) Else SplitContainerFORM.SplitterPosition = Integer.Parse(setting._value) End If Case "SplitViewDetailsSplitterPosition_" & CONSTRUCTOR_DETAIL_ID.ToString If DOC_SEARCH_TAB1 = True Then SplitContainerDetails.SplitterPosition = Integer.Parse(setting._value) End If End Select Next Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 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) If NODE_NAVIGATION = False Then settings.Add(New ClassSetting("SplitViewTopSplitterPosition", SplitContainerTop.SplitterPosition)) If CONSTRUCTOR_DETAIL_ID > 0 Then settings.Add(New ClassSetting("SplitViewMainSplitterPosition_" & CONSTRUCTOR_DETAIL_ID.ToString, SplitContainerMain.SplitterPosition)) Else settings.Add(New ClassSetting("SplitViewMainSplitterPosition_0", SplitContainerMain.SplitterPosition)) End If Else settings.Add(New ClassSetting("SplitViewTopSplitterPosition", SplitContainerTop.SplitterPosition)) settings.Add(New ClassSetting("SplitViewMainSplitterPosition_" & CONSTRUCTOR_DETAIL_ID.ToString, SplitContainerFORM.SplitterPosition)) End If If DOC_SEARCH_TAB1 = True Then settings.Add(New ClassSetting("SplitViewDetailsSplitterPosition_" & CONSTRUCTOR_DETAIL_ID.ToString, SplitContainerDetails.SplitterPosition)) End If layout.Save(settings) Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) 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}-{1}-SplitterLayout.xml", CONSTRUCTOR_DETAIL_ID, CONSTRUCTOR_DETAIL_ID.ToString) 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), CONSTRUCTOR_DETAIL_ID) Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename) End Function Private Function Get_Grid_Layout_Filename() Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)") If NODE_NAVIGATION = True Then ACT_EBENE_STRING = "NODE_NAVIGATION" End If Dim EntityName As String = EntityRegex.Replace(ACT_EBENE_STRING, "") Dim Filename As String = String.Format("{0}-{1}-{2}-UserLayout.xml", grvwGrid.Name, GetSafeFilename(EntityName), CONSTRUCTOR_DETAIL_ID) Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename) End Function Private Function Get_DocGrid_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("GridViewDoc_Search_{0}_{1}_UserLayout.xml", GetSafeFilename(EntityName), CONSTRUCTOR_DETAIL_ID) LAYOUT_DOC_GRIDVIEW = System.IO.Path.Combine(Application.UserAppDataPath(), Filename) Return LAYOUT_DOC_GRIDVIEW End Function #End Region Sub Refresh_Entity_Data(pManually As Boolean) If TrySave_Automatic() = True Then Save_Grid_Layout() ' Setzt die RECORD_ID auf Null ' damit beim Refresh keine alten Werte ' in die Datenbank geschrieben werden SELECTED_RECORD_ID = 0 RECORD_ID = 0 CURRENT_RECORD_ID = 0 If CtrlCommandUI.IsInsert Then ActivateAllTabs() End If Load_Datafor_Entity(pManually) End If End Sub Dim NodesThatMatch As New List(Of TreeNode) Private Function SearchTheTreeView(ByVal TV As TreeView, ByVal TextToFind As String) As List(Of TreeNode) ' Empty previous NodesThatMatch.Clear() ' Keep calling RecursiveSearch For Each TN As TreeNode In TV.Nodes If TN.Text.Contains(TextToFind) Then NodesThatMatch.Add(TN) End If RecursiveSearch(TN, TextToFind) Next If NodesThatMatch.Count > 0 Then Return NodesThatMatch Else Return Nothing End If End Function Private Sub RecursiveSearch(ByVal treeNode As TreeNode, ByVal TextToFind As String) ' Keep calling the test recursively. For Each TN As TreeNode In treeNode.Nodes If TN.Text.Contains(TextToFind) Then NodesThatMatch.Add(TN) End If RecursiveSearch(TN, TextToFind) Next End Sub '#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) ' 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 ' Refresh_Entity_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_Datafor_Entity() ' 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 ' CURRENT_ACT_LEVEL = 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 Function Get_Pos_SQL(FormId As Integer) POS_SQL = String.Format("Select T.* FROM VWPMO_ENTITY_TABLE{0} T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID And T1.RECORD1_ID = @PARENT_ID", FormId.ToString) 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 ' LOGGER.Warn("Error In Search_RowHandle: " & ex.Message) ' 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_BeforeLeaveRow(sender As Object, e As RowAllowEventArgs) Handles grvwGrid.BeforeLeaveRow If TrySave_Automatic() = False Then e.Allow = False Else If CtrlCommandUI.IsInsert Then ActivateAllTabs() CtrlCommandUI.IsInsert = False End If End If End Sub 'Private Sub grvwGrid_FocusedColumnChanged(sender As Object, e As FocusedColumnChangedEventArgs) Handles grvwGrid.FocusedColumnChanged ' Dim result = SplitContainerMain.Collapsed ' If SplitContainerMain.Collapsed = False Then ' Cursor = Cursors.WaitCursor ' Column_Row_Handler("grvwGrid_FocusedColumnChanged") ' Me.Cursor = Cursors.Default ' End If 'End Sub Private Sub GridView_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles grvwGrid.FocusedRowChanged, grvwTiles.FocusedRowChanged, grvwCarousel.FocusedRowChanged If SplitContainerMain.Collapsed = False Then Me.Cursor = Cursors.WaitCursor Column_Row_Handler("GridView_FocusedRowChanged") Me.Cursor = Cursors.Default 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(Calltype As String, Optional RECID As Integer = 0, Optional _navload As Boolean = False, Optional _refresh As Boolean = False) Try If _FormClosing = True Then 'Or SaveRoutine_Active = True Exit Sub End If 'Aussteigen, wenng erade die Entität gewechselt wird If ENTITY_LOADING_PROCESS = False Then Exit Sub End If If GRIDRightMouse_Clicked Then Exit Sub End If If SELECTION_IN_ACTION = True Then Exit Sub End If Dim sw As New SW("Column_Row_Handler1") If RECID = 0 Then If NODE_NAVIGATION = True Then ' Exit Sub End If ' If NODE_NAVIGATION = False Then 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 RECID = Grid_RecordID End If End If 'End If End If CURRENT_RECORD_ID = RECID CURRENT_SEARCH_TYPE = "RECORD" ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID) If RECID = RECORD_ID And ENTITY_RECORD_COUNT > 1 And _refresh = False And ERROR_WHILE_SAVING = False Then Exit Sub End If LOGGER.Debug("RowHandler: RID: " & RECID.ToString & " - " & Now) '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 'Wird jetzt bei BeforeRowChange überprüft 'Check_Record_Changed() sw.Done() DisableEditMode() sw = New SW("Column_Row_Handler2") ' muss vor show selected record data kommen, ' sodass die datasource für die angehakten werte existiert (checked list box) CtrlBuilder.WatchRecordChanges = False ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, CURRENT_RECORD_ID, PARENT_RECORDID, CtrlBuilder.AllControls, ENTITY_ID) CtrlBuilder.WatchRecordChanges = True If CURRENT_RECORD_ID > 0 Then Show_Selected_Record_Data(CURRENT_RECORD_ID, False) End If sw.Done() ClassRightManagement.Check_Set_Rights(CURRENT_RECORD_ID, ENTITY_ID) CONTROL_HANDLING() If TCDetails.SelectedTabPage Is Nothing Then Exit Sub End If If TabPos.PageVisible = True And TCDetails.SelectedTabPage.Name = "TabPos" Then sw = New SW("POS-Handler in ColumnRowHandler") Clear_GridPos_View() Dim POS_GRID_RECORD = Get_Focused_Row_Cell_Value_pos("Record-ID") Load_Pos_Data() Load_POSGrid_Layout() sw.Done() End If If CURRENT_RECORD_ID > 0 Then If RIGHT_RECORD_AND_FILE_READ_ONLY = False And CtrlCommandUI.IsInsert = False Then If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then tsButtonEdit.Enabled = False tsButtonSave.Enabled = False tsButtonDelete.Enabled = False Else ' tsButtonEdit.Enabled = True End If End If If RIGHT_RECORD_AND_FILE_READ_ONLY = True Or NODE_NAVIGATION = True Then bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Else bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Always End If If NODE_NAVIGATION = False Then Get_RecordCounts_Nodes() Else tsButtonAdd.Enabled = False 'MsgBox(SplitContainerFORM.Collapsed) 'MsgBox(SplitContainerMain.Collapsed) 'MsgBox(SplitContainerTop.Collapsed) If SplitContainerMain.Collapsed = False Then SELECTION_IN_ACTION = True SearchNodeForRecord(TreeViewMain.Nodes, RECORD_ID) End If SELECTION_IN_ACTION = False End If End If 'Liste der geänderten Control Values leeren CtrlBuilder.ControlsChanged.Clear() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error:", ex.Message & vbNewLine & ex.StackTrace) End Try End Sub Sub CONTROL_HANDLING() Dim sw As New SW("CONTROL_HANDLING") tsButtonSave.Enabled = True If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False End If tsButtonEdit.Enabled = True tsButtonDelete.Enabled = True docCM_PropertiesFile.Enabled = True tslblLocked.Visible = False tslblFileslocked.Visible = False TabFollowUp.PageEnabled = True 'pnlPositions.Enabled = True TabWindream.PageEnabled = True If SQL_RECORD_AND_FILE_READ_ONLY <> "" Or SQL_DOC_READ_ONLY <> "" Then If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then tsButtonEdit.Enabled = False tsButtonSave.Enabled = False tsButtonDelete.Enabled = False tslblLocked.Visible = True TabFollowUp.PageEnabled = False tsmiMassChanges.Enabled = False 'pnlPositions.Enabled = False ' tsButtonShowTaskOverview.Enabled = False End If If RIGHT_READ_ONLY_DOC = True Then tslblFileslocked.Visible = True Doc_ReadOnlyHandler(False) End If Else If DT_RIGHTS_GROUP.Rows.Count > 0 Or DT_RIGHTS_USER.Rows.Count > 0 Then 'DATENSATZ-RECHTE If RIGHT_ADD_R = False Then tsButtonAdd.Enabled = False End If If RIGHT_EDIT_R = False Then tslblLocked.Visible = True tsButtonEdit.Enabled = False tsButtonSave.Enabled = False tsButtonDelete.Enabled = False tsmiMassChanges.Enabled = False If RIGHT_ADD_R = False Then tsButtonSave.Enabled = False End If End If If RIGHT_DELETE_R = False Then tsButtonDelete.Enabled = False End If 'DATEI-RECHTE If RIGHT_READ_ONLY_DOC = True Then tslblFileslocked.Visible = True End If End If End If sw.Done() End Sub #End Region #Region "TreeView" Public Sub SetSelectedNodeStyle(tncoll As TreeNodeCollection) If NODE_NAVIGATION = False Then 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 End If TreeViewMain.Refresh() End Sub Private Sub NodeRecursive(ByVal n As TreeNode, searchRecord As Integer) Dim aNode As TreeNode For Each aNode In n.Nodes If Not IsNothing(aNode.Tag) Then If aNode.Tag.ToString.Contains("RECORD-ID") Then Dim Record = ClassNodeNavigation.Return_RECORD_forTag(aNode.Tag) If IsNumeric(Record) And Record <> 0 And searchRecord = Record Then TreeViewMain.SelectedNode = aNode Exit Sub End If End If End If NodeRecursive(aNode, searchRecord) Next End Sub Public Sub SearchNodeForRecord(tncoll As TreeNodeCollection, searchRecord As Integer) Try Dim sw As New SW("SearchNodeForRecord: " & searchRecord.ToString) Dim n As TreeNode For Each n In TreeViewMain.Nodes NodeRecursive(n, searchRecord) Next sw.Done() Catch ex As Exception LOGGER.Warn("Error in SearchNodeForRecord: " & ex.Message) End Try End Sub Private Sub TreeViewMain_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles TreeViewMain.BeforeSelect If e.Node.IsSelected = False Then 'Exit Sub End If If NODE_NAVIGATION = False Then If grvwGrid.Columns.Count > 0 Then Save_Grid_Layout() End If If DOC_SEARCH_TAB1 = True Then Save_DocGrid_Layout() End If Else If Not IsNothing(TreeViewMain.SelectedNode) Then TreeViewMain.SelectedNode.NodeFont = New Font(TreeViewMain.Font.FontFamily, TreeViewMain.Font.Size, FontStyle.Regular) End If End If End Sub Private Sub TreeViewMain_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeViewMain.AfterSelect Node_AfterSelect = True 'Dim sw As New SW("TreeViewMain_AfterSelect1") ' Dim swAll As New SW("TreeViewMain_AfterSelect") DisableEditMode() If NODE_NAVIGATION = False Then SetSelectedNodeStyle(TreeViewMain.Nodes) Else Dim sw1 As New SW("TreeViewSetSelectedNode") ACT_EBENE_STRING = "NODE_NAVIGATION" ' Dim SelectedNode As TreeNode = e.Node 'TryCast(TreeViewMain.SelectedNode, TreeNode) If e.Node IsNot Nothing Then e.Node.NodeFont = New Font(TreeViewMain.Font.FontFamily, TreeViewMain.Font.Size, FontStyle.Bold) End If sw1.Done() End If Dim fl = FORM_LOADED Dim firstORFOLLWOWIN If FORM_SHOWN = False Then firstORFOLLWOWIN = True Else firstORFOLLWOWIN = False End If ' sw.Done() Load_Datafor_Entity(False) 'sw = New SW("TreeViewMain_AfterSelect2") If DOC_SEARCH_TAB1 = True Then tsbtnPanel1Collapse.Visible = True Else tsbtnPanel1Collapse.Visible = False End If If NODE_NAVIGATION = True Then Dim SelectedNode As TreeNode = TryCast(TreeViewMain.SelectedNode, TreeNode) If SelectedNode IsNot Nothing Then Update_Status_Label(True, SelectedNode.Tag) ClassNodeNavigation.Check_NODE_CONFIG_ID(ENTITY_ID, SelectedNode) If SelectedNode.Tag.ToString.Contains("RECORD-ID") Then Dim Record = ClassNodeNavigation.Return_RECORD_forTag(SelectedNode.Tag) If Record <> 0 Then ToolStripEdit.Enabled = True If Record <> CURRENT_RECORD_ID Then Column_Row_Handler("TreeviewAfterSelect", Record, True) SELECTION_IN_ACTION = True If SplitContainerMain.Collapsed = False Then LocateRecordinGridById(RECORD_ID) End If End If End If If pnlDetails.Enabled = False Then pnlDetails.Enabled = True Else If pnlDetails.Enabled = True Then pnlDetails.Enabled = False ToolStripEdit.Enabled = False End If If RIGHT_READ_ONLY_DOC = False Then If ACTIVATE_DOC_SEARCH_ON_EDIT = False Then Doc_ReadOnlyHandler(False) Else Doc_ReadOnlyHandler(True) End If End If End If End If 'sw.Done() 'SW = New SW("TreeViewMain_AfterSelect3") Load_DocGrid_Layout() Load_Grid_Layout() Load_Variants_Grid_Layout() Load_Splitter_Layout() SELECTION_IN_ACTION = False 'swAll.Done() Node_AfterSelect = False End Sub Sub Doc_ReadOnlyHandler(state As Boolean) Dim sw As New SW("Doc_ReadOnlyHandler") If state = False Then GridControlDocSearch.ContextMenuStrip = cmsResultFilesBasic tslblDocViewLocked.Visible = True ElseIf state = True Then GridControlDocSearch.ContextMenuStrip = ContextMenuStripResultFiles tslblDocViewLocked.Visible = False End If sw.Done() End Sub Sub Load_TreeView_Node_Navigation() Try MyTreeview = Nothing 'If DT_TREEVIEW_NODES.Rows.Count > 500 Then ' newTreeview = ClassNodeNavigation.CreateTreeViewNodes(DT_TREEVIEW_NODES, TREEVIEW_IMAGELIST) 'Else Try LOGGER.Debug($"NODES: DT_TREEVIEW_NODES_ALL-Count: {DT_TREEVIEW_NODES_ALL.Rows.Count}") Dim async As New ClassAsyncNodeBuild(DT_TREEVIEW_NODES_ALL, TREEVIEW_IMAGELIST) async.bw.RunWorkerAsync() While async.bw.IsBusy Application.DoEvents() BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bsitmLoadEntity.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bsitmLoadEntity.Caption = "Loading TreeView..." End While BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bsitmLoadEntity.Visibility = DevExpress.XtraBars.BarItemVisibility.Never LOGGER.Debug($"NODES: StructureNodes-Count (asyn.newTreeviewc): {async.newTreeview.Nodes.Count}") MyTreeview = async.newTreeview Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Async NodeBuild", ex.Message & vbNewLine & "orgFLOW will try an alternative method!", ex.StackTrace) MyTreeview = ClassNodeNavigation.CreateTreeViewNodes(DT_TREEVIEW_NODES_ALL, TREEVIEW_IMAGELIST) End Try 'End If Dim sw As New SW("ADD TV to Form") If Not IsNothing(MyTreeview) Then MyTreeview.BeginUpdate() For Each node As TreeNode In MyTreeview.Nodes TreeViewMain.Nodes.Add(node.Clone) Next MyTreeview.EndUpdate() End If sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Load_TreeView_Node_Navigation", ex.Message, ex.StackTrace) End Try 'If CONSTRUCT_EXPAND = True Then ' TreeViewMain.ExpandAll() 'End If End Sub Sub Load_Tree_View() Try TreeViewMain.Nodes.Clear() If NODE_NAVIGATION = True Then Load_TreeView_Node_Navigation() Try For Each row As DataRow In DT_TREEVIEW_CONFIGURATION.Rows Try Dim bimage = row.Item("NODE_IMAGE") If Not IsDBNull(bimage) Then Dim Node_image = ByteArrayToBitmap(bimage) ImageCollection1.AddImage(Node_image, row.Item("GUID")) 'row.Item("GUID").ToString & "#" & row.Item("ENTITY_ID") End If Catch ex As Exception End Try Next Dim sw As New SW("Devexpress TreeView") TreeListDevexpress.DataSource = DT_TREEVIEW_NODES_DEVEXPRESS TreeListDevexpress.KeyFieldName = "GUID" TreeListDevexpress.ParentFieldName = "PARENT_GUID" Try TreeListDevexpress.Columns.ColumnByName("colRECORD_ID").Visible = False Catch ex As Exception End Try Try TreeListDevexpress.Columns.ColumnByName("colNODE_CONFIG_ID").Visible = False Catch ex As Exception End Try Try TreeListDevexpress.Columns.ColumnByName("colBACK_COLOR").Visible = False Catch ex As Exception End Try sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Devexpress TreeView Load", ex.Message, ex.StackTrace) End Try Else Dim sw As New SW("Load_Tree_View") ' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS Dim query1 = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Order By form.Item("SEQUENCE") Where form.Item("PARENT_ID") = 0 Dim Rows1 = query1.ToList() For Each LEVEL1ROW In Rows1 Dim LEVEL0_NODE As TreeNode Dim LEVEL2_NODE As TreeNode '################## LEVEL 1 wird geladen ########################### Dim LEVEL1_TITLE = LEVEL1ROW.Item("CAPTION").ToString Dim NODE1_ENTITY_ID = LEVEL1ROW.Item("FORM_ID").ToString Dim ENTITY_ID = LEVEL1ROW.Item("FORM_ID") ' Rootnode erstellen und taggen LEVEL0_NODE = New TreeNode(LEVEL1_TITLE) LEVEL0_NODE.Tag = NODE1_ENTITY_ID ' TreeView Rootnode einfügen TreeViewMain.Nodes.Add(LEVEL0_NODE) '################## LEVEL 2 wird geladen ######### Dim LEVEL1_NODE As TreeNode Dim query2 = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Order By form.Item("SEQUENCE") Where form.Item("PARENT_ID") = NODE1_ENTITY_ID Dim Rows2 = query2.ToList() For Each Row2 In Rows2 Dim LEVEL2_TITLE As String = Row2.Item("CAPTION").ToString Dim LEVEL2_ID As Integer = Row2.Item("FORM_ID") Dim LEVEL2_PARENT_ID As Integer = Row2.Item("PARENT_ID") ' Node erstellen.. LEVEL1_NODE = New TreeNode(LEVEL2_TITLE) LEVEL1_NODE.Tag = LEVEL2_ID ' ..und einfügen LEVEL0_NODE.Nodes.Add(LEVEL1_NODE) '##### LEVEL 3 wird geladen ######### Dim query3 = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Order By form.Item("SEQUENCE") Where form.Item("PARENT_ID") = LEVEL2_ID Dim Rows3 = query3.ToList() For Each Row3 In Rows3 Dim LEVEL3_TITLE As String = Row3.Item("CAPTION") Dim LEVEL3_ID As Integer = Row3.Item("FORM_ID") ' Node erstellen.. LEVEL2_NODE = New TreeNode(LEVEL3_TITLE) LEVEL2_NODE.Tag = LEVEL3_ID ' ..und einfügen LEVEL1_NODE.Nodes.Add(LEVEL2_NODE) Next Next Next sw.Done() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Private Sub BW_LoadTreeView_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BW_LoadTreeView.RunWorkerCompleted BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never If NODE_NAVIGATION = False Then TreeViewMain.ExpandAll() End If TreeViewMain.Nodes(0).EnsureVisible() End Sub Private Sub BW_Load_EntityData_DoWork(sender As Object, e As DoWorkEventArgs) Handles BW_LoadTreeView.DoWork Load_Tree_View() End Sub Sub Create_variable_node() End Sub Sub Load_Datafor_Entity(pManually As Boolean) 'If ClassProxy.IS_PROXY_BUSY = True Then ' MsgBox("Proxy-Server is actually synchronizing! Please wait until synchronisation is finished!" & vbNewLine & "This might take up to 3 minutes!", MsgBoxStyle.Information) ' Exit Sub 'End If Try Dim SelectedNode As TreeNode = TryCast(TreeViewMain.SelectedNode, TreeNode) If SelectedNode IsNot Nothing Then Dim _TagENT_ID = ClassNodeNavigation.Return_ENTITY_FOR_TAG(SelectedNode.Tag) If (_TagENT_ID <> 0 And _TagENT_ID <> ENTITY_ID) Or _TagENT_ID <> CURRENT_ENTITY_ID Then LOGGER.Info("Entity-Data needs to be reloaded...") ENTITY_ID = _TagENT_ID CURRENT_ENTITY_ID = ENTITY_ID CURRENT_CONSTRUCTOR_ID = CONSTRUCTORID Load_Adding_users() Load_Configurable_Nodes() Else If pManually = False Then Exit Sub End If End If End If 'If NODE_NAVIGATION = True Then ' If NODE_NAVIGATION_LOADED = True Then ' Exit Sub ' Else ' NODE_NAVIGATION_LOADED = True ' End If 'End If Dim sw As New SW("Load_Datafor_Entity") If SelectedNode IsNot Nothing Then ENTITY_LOADING_PROCESS = False 'If NODE_NAVIGATION = True Then ' ENTITY_ID = ClassNodeNavigation.Return_ENTITY_FOR_TAG(SelectedNode.Tag) ' CURRENT_ENTITY_ID = ENTITY_ID 'End If Dim result = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID).Single() CONSTRUCTOR_DETAIL_ID = result.Item("GUID") ' CONSTRUCT_EXPAND = result.Item("EXPAND") Dim FORM_DATE_FORMAT = result.Item("DATE_FORMAT") If FORM_DATE_FORMAT <> USER_DATE_FORMAT Then CURRENT_DATE_FORMAT = USER_DATE_FORMAT Else CURRENT_DATE_FORMAT = FORM_DATE_FORMAT End If LOCK_CONTROLS_BG_LOAD = result.Item("LOCK_CONTROLS_BG_LOAD") If NODE_NAVIGATION = True Then If SelectedNode.Tag.ToString.Contains("RECORD_ID") Then Console.WriteLine("Record beinhaltet") End If Console.WriteLine("CONTROL Navigacion") Else Dim parentNode As TreeNode = TryCast(SelectedNode.Parent, TreeNode) ACT_EBENE = 2 CURRENT_ACT_LEVEL = 2 If parentNode IsNot Nothing Then Dim grandParentNode As TreeNode = TryCast(parentNode.Parent, TreeNode) If grandParentNode IsNot Nothing Then ACT_EBENE = 3 CURRENT_ACT_LEVEL = 3 End If Else ACT_EBENE = 1 CURRENT_ACT_LEVEL = 1 End If End If ' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS Dim query2 = From form In DT_WORKFLOWS_MANUAL.AsEnumerable() Select form Where form.Item("ENTITY_ID") = ENTITY_ID Dim Rows = query2.ToList() _MANUAL_WORKFLOW = False For Each _row In Rows _MANUAL_WORKFLOW = _row.Item("MANUALLY") Next FAU_AD_DOMAIN = "" FAU_AD_SERVER = "" FAU_AD_USER = "" FAU_AD_USER_PW = "" If DT_ADDING_USERS.Rows.Count > 0 Then 'Überprüfen ob für diese Entität ein spezifischer windream-User verwendet wird, wenn Dateien abgelegt werden? Dim query1 = From _user In DT_ADDING_USERS.AsEnumerable() Select _user Where _user.Item("ENTITY_ID") = ENTITY_ID Dim Rows1 = query1.ToList() For Each _row In Rows1 FAU_AD_DOMAIN = _row.Item("AD_DOMAIN").ToString() FAU_AD_SERVER = _row.Item("AD_SERVER").ToString() FAU_AD_USER = _row.Item("AD_USER").ToString() Dim wrapper As New ClassEncryption("!35452didalog=") Dim PWplainText As String ' DecryptData throws if the wrong password is used. Try PWplainText = wrapper.DecryptData(_row.Item("AD_USER_PW").ToString()) Catch ex As Exception LOGGER.Warn("- the Password for FileAddingUser '" & FAU_AD_USER & "' could not be decrypted") PWplainText = "" End Try FAU_AD_USER_PW = PWplainText Next End If If NODE_NAVIGATION = True Then If SelectedNode.Tag.ToString.Contains("RECORD_ID") Then Console.WriteLine("Record beinhaltet") End If Console.WriteLine("CONTROL Navigacion") Else Get_RecordCounts_Nodes() End If sw.Done() Load_Entity_Data_CONTROLS_RECORDS() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Load_Datafor_Entity: " & ex.StackTrace) End Try End Sub Sub Get_RecordCounts_Nodes() Try If NODE_NAVIGATION = True Then Exit Sub End If Dim sw As New SW("Get_RecordCounts_Nodes") Dim selnode As TreeNode = TreeViewMain.SelectedNode Dim a As Integer = 0 For Each childNodeLevel1 As TreeNode In selnode.Nodes Dim PARENT_ID1 As Integer Dim TYPE_ID1 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 = " & ClassNodeNavigation.Return_ENTITY_FOR_TAG(childNodeLevel1.Tag) & " AND SCREEN_ID = " & CURRENT_SCREEN_ID Dim DT As DataTable = MYDB_ECM.GetDatatable(sql) PARENT_ID1 = DT.Rows(0).Item(0) TYPE_ID1 = DT.Rows(0).Item(1) End If If TYPE_ID1 <> 5 Then If childNodeLevel1.Text = "Allgemein" Then Console.WriteLine("Allgemein-Reiter") End If Dim result As Integer = ReturnAmountofRecords(ClassNodeNavigation.Return_ENTITY_FOR_TAG(childNodeLevel1.Tag)) 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 sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Load_Datafor_Entity: " & ex.StackTrace) End Try End Sub Function ReturnAmountofRecords(EntityID 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 = String.Format("SELECT COUNT(T.[Record-ID]) FROM VWPMO_ENTITY_TABLE{0} AS T,TBPMO_RECORD_CONNECT T1 WHERE T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @RecordID", EntityID) '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 count As Integer = MYDB_ECM.GetScalarValue(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) bsitmState.Caption = text If visible = True Then bsitmState.Visibility = DevExpress.XtraBars.BarItemVisibility.Always Else bsitmState.Visibility = DevExpress.XtraBars.BarItemVisibility.Never End If Select Case state Case EditState.Insert bsitmState.ItemAppearance.Normal.BackColor = Color.Yellow Case EditState.Update bsitmState.ItemAppearance.Normal.BackColor = Color.LightBlue Case Else bsitmState.ItemAppearance.Normal.BackColor = Color.LightGray End Select End Sub Public Sub Update_Record_Label(RecordId As Integer) Try Dim SQL As String = "SELECT ADDED_WHO, CONVERT(VARCHAR(16),ADDED_WHEN,20) AS ADDED_WHEN, COALESCE(CHANGED_WHO,'') AS CHANGED_WHO, COALESCE(CONVERT(VARCHAR(16),CHANGED_WHEN,20),'') AS CHANGED_WHEN FROM TBPMO_RECORD WHERE GUID = " & RecordId Dim expression = "[Record-ID] = " & RecordId Dim resultDT As DataTable If CtrlCommandUI.IsInsert = True Then resultDT = MYDB_ECM.GetDatatable(SQL) Else resultDT = MYDB_ECM.GetDatatable(SQL) End If If Not IsNothing(resultDT) Then If resultDT.Rows.Count = 0 Then Exit Sub End If bsitmRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Dim CreateChangeString = String.Format("Added by '{0}', when: {1}", resultDT.Rows(0).Item(0), resultDT.Rows(0).Item(1)) If CtrlCommandUI.IsInsert = False Then CreateChangeString = CreateChangeString + String.Format(" - Changed by '{0}', when: {1}", resultDT.Rows(0).Item(2), resultDT.Rows(0).Item(3)) End If If FORM_TYPE = 5 Then bsitmRecord.Caption = String.Format("Group-Record ({0}) - {1}", RecordId, CreateChangeString.ToString) Else If IS_SINGLE_RECORD = True Then bsitmRecord.Caption = String.Format("Single-Record ({0}) - {1}", RecordId, CreateChangeString.ToString) Else bsitmRecord.Caption = String.Format("Record ({0}) - {1}", RecordId, CreateChangeString.ToString) End If End If bsitmRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Always End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub #End Region #Region "Controls" Sub Load_Controls(frmview_id As Integer) Dim sw As New SW("Load_Controls") FORMVIEW_ID = frmview_id ENTITY_ID = DT_TBPMO_FORM_VIEW.Rows(0).Item("FORM_ID") CURRENT_ENTITY_ID = ENTITY_ID CtrlBuilder = New ClassControlBuilder(pnlDetails) CtrlCommandUI = New ClassControlCommandsUI(CtrlBuilder, ContextMenuDetails, AddressOf NewEditAppointment) CtrlCommandUI.LoadControls(ENTITY_ID) Lock_RecordControls(True) AddHandler CtrlBuilder.OnRecordChanged, AddressOf OnRecordChanged AddHandler CtrlBuilder.OnMouseHover, AddressOf HandleToolTip sw.Done() End Sub Private Sub HandleToolTip(sender As Object, e As EventArgs) Dim control As Windows.Forms.Control = DirectCast(sender, Windows.Forms.Control) Dim id As Integer = DirectCast(control.Tag, ClassControlMetadata).Id Dim hint = ClassControlValueCache.LoadHint(id) If Not IsNothing(hint) Then 'show hint Console.WriteLine("Showing hint: " & hint) ToolTipController.ShowHint(hint.ToString, ToolTipLocation.RightCenter) Else ToolTipController.HideHint() End If End Sub Private Sub OnRecordChanged(sender As Object, e As System.EventArgs) If ENTITY_LOADING_PROCESS Then RECORD_CHANGED = True End If End Sub #End Region #Region "DetailView - Toolstrip" Private Sub tsButtonAdd_Click(sender As Object, e As EventArgs) Handles tsButtonAdd.Click If USER_PERSONIFIED_TEST = True Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "You are using orgFLOW in personified mode! Adding records is not allowed!") Exit Sub End If 'If ClassProxy.IS_PROXY_BUSY = True Then ' MsgBox("Proxy-Server is actually synchronizing! Please wait until synchronisation is finished!" & vbNewLine & "This might take up to 3 minutes!", MsgBoxStyle.Information) ' Exit Sub 'End If ' Vor dem Hinzufügen muss der EditMode auf jeden Fall ausgeschaltet werden!! DisableEditMode() tsButtonEdit.Enabled = False ' IsInsert muss true sein, damit wir wissen ob wir bei ' Abbruch den Record Wieder löschen können CtrlCommandUI.IsInsert = True INSERT_IN_ACTION = True ' Alle Tabs außer Detailansicht deaktivierne ' DeactivateTabs() 'Wenn es eine Parent_ID gibt aber kein PArent_Datensatz ausgewählt wurde muss dies nachgeholt werden If PARENT_ENTITYID > 0 Then If PARENT_SKIPPED = True And PARENT_RECORDID = 0 Then Dim msg = "Achtung es wurde noch kein Parent-Datensatz ausgewählt! Bitte wählen Sie einen Datensatz aus!" If USER_LANGUAGE <> "de-DE" Then msg = "Attention: No parent-record was selected! Please choose a parent record!" End If MsgBox(msg, MsgBoxStyle.Exclamation) Try Dim sql sql = "select * from VWPMO_ENTITY_TABLE" & PARENT_ENTITYID.ToString CURRENT_PARENT_DT = MYDB_ECM.GetDatatable(sql) frmChooseParentRecord.ShowDialog() If CURRENT_PARENT_RECORD_ID = 0 Then MsgBox("No Parent-Record selected. Adding will be terminated.", MsgBoxStyle.Exclamation) Exit Sub End If PARENT_RECORDID = CURRENT_PARENT_RECORD_ID Select Case ACT_EBENE '#### Hier muss nun der Parent-Record gesetzt werden #### Case 1 EBENE1_RECID = CURRENT_PARENT_RECORD_ID Case 2 EBENE1_RECID = CURRENT_PARENT_RECORD_ID Case 3 EBENE2_RECID = CURRENT_PARENT_RECORD_ID End Select Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Adding Record", ex.Message, ex.StackTrace) End Try End If End If Me.Cursor = Cursors.WaitCursor Try If TCDetails.SelectedTabPage.Text.StartsWith("Pos") = False Then SELECTED_RECORD_ID = 0 ' Lock_RecordControls(False) CURRENT_PARENT_ENTITY_ID = PARENT_ENTITYID ' Den Record anlegen, damit wir eine RECORD_ID bekommen Dim recordId = ClassRecordCommands.CreateRecordProcedure(ENTITY_ID) If recordId > 0 Then Lock_RecordControls(False) tsButtonCancel.Visible = True ' Die RECORD_ID auslesen und setzen NEW_RECORD_ID = recordId CURRENT_RECORD_ID = NEW_RECORD_ID RECORD_ID = NEW_RECORD_ID SELECTED_RECORD_ID = NEW_RECORD_ID If PARENT_ENTITYID > 0 And PARENT_RECORDID > 0 Then If ClassRecordCommands.ConnectRecord(PARENT_RECORDID, CURRENT_RECORD_ID, "INSERT RECORD") = False Then ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "In Connecting Record - Check the log!") 'Else ' ClassProxy.PRPROXY_RECORD_CONNECT(PARENT_RECORDID, CURRENT_RECORD_ID) End If End If ClassControlValues.LoadDefaultValues(ENTITY_ID, SELECTED_RECORD_ID, pnlDetails.Controls, CURRENT_PARENT_ENTITY_ID, ENTITY_ID) ClassControlValues.Enable_Depending_Controls(ENTITY_ID, RECORD_ID, PARENT_RECORDID, CtrlBuilder.AllControls, ENTITY_ID) ' Das StatusLabel aktualisieren Update_Record_Label(NEW_RECORD_ID) Doc_ReadOnlyHandler(True) RUN_WDSEARCH_GRID(True) ' Im gegensatz zu EnableEditMode muss hier nur der save button enabled werden tsButtonSave.Enabled = True ' Muss aktiviert werden, sonst funktionieren die Combobox Abhängigkeits Events nicht CURRENT_RECORD_ENABLED = True ' EDIT_STATE muss hier (immer?) Update sein, sonst wird beim Speichern noch ein Datensatz angelegt EDIT_STATE = EditState.Update RECORD_CHANGED = True 'tsslblRecord.Text = "Adding record ......" RIGHT_RECORD_AND_FILE_READ_ONLY = False tslblLocked.Visible = False tslblFileslocked.Visible = False tsButtonAdd.Enabled = False Else Me.Cursor = Cursors.Default MsgBox("Could not create a new record. Please check the log for further informations!", MsgBoxStyle.Critical) End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error tsButtonAdd", ex.Message, ex.StackTrace) Finally Me.Cursor = Cursors.Default End Try End Sub Private Sub tsButtonSave_Click(sender As Object, e As EventArgs) Handles tsButtonSave.Click Save_Record() If ERROR_WHILE_SAVING = True Then Column_Row_Handler("tsButtonSave_Click") End If End Sub Sub Focus_Control(name As String) Dim controls As Windows.Forms.Control.ControlCollection = pnlDetails.Controls For Each c As Windows.Forms.Control In controls Dim tag As Object = c.Tag Dim controlName As String = DirectCast(tag, ClassControlMetadata).Name If controlName = name Then c.Focus() Exit Sub End If Next End Sub Function Save_Record() Try Me.Cursor = Cursors.WaitCursor SAVE_ROUTINE_ACTIVE = True Save_Grid_Layout() Dim RequiredControlsFilled As Boolean = TrySave_RequiredControlsFilled() If RequiredControlsFilled = False Then Return False End If If CtrlCommandUI.IsInsert Then EDIT_STATE = EditState.Insert Else EDIT_STATE = EditState.Update NEW_RECORD_ID = 0 If RECORD_CHANGED = False Then Update_Status_Label(True, "NO CHANGES in Record.") ActivateAllTabs() DisableEditMode() EDIT_STATE = EditState.None Me.Cursor = Cursors.Default Return True End If End If If TrySave_User() = False Then ' Cursor zurücksetzen Me.Cursor = Cursors.Default Return False Else If RECORD_CHANGED = True Then RECORD_CHANGED = False End If If CtrlCommandUI.IsInsert Then ActivateAllTabs() End If 'ClassProxy.PRPROXY_RECORD_UPD_INS(CURRENT_ENTITY_ID, CURRENT_RECORD_ID) End If Dim recid As Integer 'If EDIT_STATE = EditState.Update Then ' recid = RECORD_ID 'Else ' recid = NEW_RECORD_ID 'End If recid = CURRENT_RECORD_ID SELECTED_RECORD_ID = recid RECORD_ID = recid CURRENT_RECORD_ID = RECORD_ID ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID) If RECORD_ID = 0 Then ClassHelper.MSGBOX_Handler("ERROR", "Attention:", "No Current row selected") Me.Cursor = Cursors.Default Return False End If If EDIT_STATE = EditState.Insert Then Select Case ACT_EBENE Case 1 EBENE1_RECID = recid For Each row As DataRow In CURRENT_DT_ENTITY_RECORDS.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 CURRENT_DT_ENTITY_RECORDS.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! ClassHelper.MSGBOX_Handler("INFO", "Attention", "No parent-link created!") '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 CURRENT_DT_ENTITY_RECORDS.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 CURRENT_DT_ENTITY_RECORDS.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 CtrlCommandUI.IsInsert = False CtrlCommandUI.IsEdit = False INSERT_IN_ACTION = False 'Jetzt den Record nochmal laden ' Show_Selected_Record_Data(SELECTED_RECORD_ID) Update_Status_Label(True, "Record saved - " & Now, EditState.Update) Update_Record_Label(SELECTED_RECORD_ID) If IS_SINGLE_RECORD = False Then If FORM_TYPE <> 5 Then Load_Entity_Data_Only() LocateRecordinGridById(RECORD_ID) If EDIT_STATE = EditState.Insert Then 'Die Daten neu laden 'Get_Grid_Row_Handle(NEW_RECORD_ID) Else 'Die Daten neu laden 'Get_Grid_Row_Handle(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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error Saving Record", ex.Message, ex.StackTrace) Return False End Try If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If tsButtonCancel.Visible = False If CtrlCommandUI.IsInsert Then tsButtonSave.Enabled = False tsButtonCancel.Visible = False End If DisableEditMode() CtrlCommandUI.IsInsert = False INSERT_IN_ACTION = False EDIT_STATE = EditState.None RECORD_CHANGED = False SAVE_ROUTINE_ACTIVE = False Me.Cursor = Cursors.Default Return True End Function Sub Delete_Record() RECORD_ID = SELECTED_RECORD_ID If USER_PERSONIFIED_TEST = True Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "You are using orgFLOW in personified mode! Deleting records is not allowed!") Exit Sub End If 'If ClassProxy.IS_PROXY_BUSY = True Then ' MsgBox("Proxy-Server is actually synchronizing! Please wait until synchronisation is finished!" & vbNewLine & "This might take up to 3 minutes!", MsgBoxStyle.Information) ' Exit Sub 'End If Save_Grid_Layout() Dim msg As String If RIGHT_RECORD_AND_FILE_READ_ONLY = False Then msg = "Sind Sie sicher, dass Sie diesen Record/Datensatz '" & SELECTED_RECORD_ID.ToString & "' löschen wollen?" If USER_LANGUAGE <> "de-DE" Then msg = "Are You sure You want to delete the selected record '" & SELECTED_RECORD_ID.ToString & "'?" End If Dim result As MsgBoxResult result = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then RECORD_ID = SELECTED_RECORD_ID ClassRightManagement.Check_Set_Rights(RECORD_ID, ENTITY_ID) CONTROL_HANDLING() Dim sql = String.Format("select TRL.DOC_ID, TDRL.FULL_FILENAME FROM TBPMO_DOC_RECORD_LINK TRL INNER JOIN TBPMO_DOCRESULT_LIST TDRL ON TRL.DOC_ID = TDRL.DocID WHERE TRL.RECORD_ID = {0}", RECORD_ID) Dim DT_DOC_RESULT As DataTable = MYDB_ECM.GetDatatable(sql) If IsNothing(DT_DOC_RESULT) Then LOGGER.Warn("DT_DOC_RESULT is nothing!") End If If ClassHelper.DeleteRecord(SELECTED_RECORD_ID, "DELETE_RECORD - UserDecidedYes") = True Then RECORD_CHANGED = False EDIT_STATE = EditState.None CURRENT_RECORD_ENABLED = False ' Update_Record_Label(SELECTED_RECORD_ID) ClassHelper.InsertEssential_Log(SELECTED_RECORD_ID, "RECORD-ID", "RECORD WAS DELETED MANUALLY by USER: " & USER_USERNAME) msg = "Der Datensatz '" & SELECTED_RECORD_ID & "' und alle Abhängigkeiten wurden erfolgreich gelöscht - " & Now If USER_LANGUAGE <> "de-DE" Then msg = "The record and all dependencies for '" & SELECTED_RECORD_ID & "' were deleted - " & Now End If Update_Status_Label(True, msg, EditState.Update) WD_DELETE_DOCS(DT_DOC_RESULT) SELECTED_RECORD_ID = 0 RECORD_ID = 0 CURRENT_RECORD_ID = 0 RECORD_CHANGED = False 'Den derzeitigen Record Neuladen DisableEditMode() Load_Entity_Data_CONTROLS_RECORDS() RECORD_CHANGED = False End If End If Else msg = "Sie dürfen diesen Datensatz nicht löschen! (Rechtekonzept)!" If USER_LANGUAGE <> "de-DE" Then msg = "Due to right-privileges You are not allowed to delete this record!" End If MessageBox.Show(msg, "Warning:", MessageBoxButtons.OK, MessageBoxIcon.Information) End If End Sub Private Sub tsButtonDelete_Click(sender As Object, e As EventArgs) Handles tsButtonDelete.Click Delete_Record() End Sub Private Sub tsButtonEditMode_Click(sender As Object, e As EventArgs) Handles tsButtonEdit.Click ToggleEditMode() End Sub Sub ToggleEditMode() If RECORD_ENABLED = False Then EnableEditMode() Else If TrySave_Automatic() = True Then DisableEditMode() End If End If End Sub Sub EnableEditMode() Dim rec = RECORD_ID Dim EditingUser = ClassRecordState.IsRecordLocked(SELECTED_RECORD_ID) ' Überprüfen, ob der Record gerade bearbeitet wird If Not IsNothing(EditingUser) And EditingUser <> USER_USERNAME Then If USER_IS_ADMIN = True Then Dim msg = "Record is in work: " & vbNewLine & $"Dieser Datensatz wird gerade vom Benutzer '{EditingUser}' bearbeitet. Wollen Sie diesen entsperren?" Dim msg1 = "Achtung" If USER_LANGUAGE <> "de-DE" Then msg = "Record is in work: " & vbNewLine & $"This Record is currently being edited by User '{EditingUser}'. Do You want to unlock the record?" msg1 = "Attention" End If Dim result As DialogResult = MessageBox.Show(msg, msg1, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = System.Windows.Forms.DialogResult.Yes Then ClassRecordState.UnlockRecord(SELECTED_RECORD_ID) Exit Sub End If Else tslblLocked.Visible = True If USER_LANGUAGE = "de-DE" Then ClassHelper.MSGBOX_Handler("INFO", "Achtung", "Record is in work: " & vbNewLine & String.Format("Dieser Datensatz wird gerade vom Benutzer '{0}' bearbeitet und kann nur lesend abgerufen werden.", EditingUser)) Else ClassHelper.MSGBOX_Handler("INFO", "Attention", "Record is in work: " & vbNewLine & String.Format("This Record is currently being edited by User '{0}' and only available in Read-Only mode.", EditingUser)) End If ' Wenn Record bearbeitet wird, EnableEditMode abbrechen! Exit Sub End If Else 'Wenn Record bearbeitet werden kann, IN_WORK auf 1 setzen, um Bearbeitung durch andere zu verhindern! ClassRecordState.LockRecord(SELECTED_RECORD_ID) End If ' Alle Tabs außer Detailsicht deaktivieren 'DeactivateTabs() CURRENT_CHANGE_STEP += 1 Lock_RecordControls(False) Me.tsButtonAdd.Enabled = False Me.tsButtonSave.Enabled = True tsbtnRedo.Visible = True Dim stg As String If USER_LANGUAGE = "de-DE" Then stg = "Bearbeiten beenden" Else stg = "End Working" End If Me.tsButtonEdit.Text = stg If RIGHT_RECORD_AND_FILE_READ_ONLY = False Then tsButtonDelete.Enabled = True End If CURRENT_RECORD_ID = RECORD_ID ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID) CtrlCommandUI.IsEdit = True ' Abhängige Listen laden CtrlBuilder.WatchRecordChanges = False 'ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, RECORD_ID, PARENT_ID, CtrlBuilder.AllControls, ENTITY_ID) ClassControlValues.Enable_Depending_Controls(ENTITY_ID, RECORD_ID, PARENT_RECORDID, CtrlBuilder.AllControls, ENTITY_ID) CtrlBuilder.WatchRecordChanges = True RECORD_ENABLED = True CURRENT_RECORD_ENABLED = True If RIGHT_READ_ONLY_DOC = False Then Doc_ReadOnlyHandler(True) End If pnlDetails.Focus() 'If RECORD_ENABLED = False Then ' ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls) 'End If End Sub Sub DisableEditMode() If RECORD_ID = 0 Then Exit Sub Dim sw As New SW("DisableEditMode") Dim REC = RECORD_ID ClassRecordState.UnlockRecord(SELECTED_RECORD_ID) Dim isinsert As Boolean If IsNothing(CtrlCommandUI) Then isinsert = 0 Else isinsert = CtrlCommandUI.IsInsert End If ClassRecordCommands.CHECK_RECORD_FINAL(SELECTED_RECORD_ID, isinsert) tsbtnRedo.Visible = False Lock_RecordControls(True) RECORD_ENABLED = False POS_ENABLED = False CURRENT_RECORD_ENABLED = False Me.tsButtonDelete.Enabled = False If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If Me.tsButtonSave.Enabled = False Dim stg As String If USER_LANGUAGE = "de-DE" Then stg = "Bearbeiten" Else stg = "Edit record" End If Me.tsButtonEdit.Text = stg Me.tsButtonEdit.Text = stg If Not IsNothing(CtrlCommandUI) Then ActivateAllTabs() End If If RECORD_ENABLED = True Then ClassControlValues.UnloadControlValuesList(SELECTED_RECORD_ID, RECORD_ID, CtrlBuilder.AllControls) End If If Not IsNothing(CtrlCommandUI) Then 'If CtrlCommandUI.IsInsert Then ' CtrlCommandUI.IsInsert = False 'End If If CtrlCommandUI.IsEdit Then CtrlCommandUI.IsEdit = False End If End If If RIGHT_READ_ONLY_DOC = False Then If ACTIVATE_DOC_SEARCH_ON_EDIT = False Then Doc_ReadOnlyHandler(False) Else Doc_ReadOnlyHandler(True) End If End If sw.Done() End Sub #End Region #Region "Appointments" Sub NewEditAppointment(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Try Dim ctrl As Windows.Forms.Control = sender ClassFunctionCommandsUI.NewEditAppointment(ctrl.Name, ENTITY_ID, RECORD_ID, pnlDetails.Controls) Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Sub EditAppointment(ByVal sender As Windows.Forms.Control, FormID As Integer) Try ' Load All appointments first frmCalendar.TBPMO_RESOURCESTableAdapter.Fill(frmCalendar.DD_DMSDataSetCalendar.TBPMO_RESOURCES) frmCalendar.TBPMO_APPOINTMENTSTableAdapter.Fill(frmCalendar.DD_DMSDataSetCalendar.TBPMO_APPOINTMENTS) Dim apt As Appointment = frmCalendar.SchedulerStorage1.Appointments.Items.Find(AddressOf FindAppointment) If apt IsNot Nothing Then frmCalendar.SchedulerControl1.ShowEditAppointmentForm(apt) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Private Function FindAppointment(ByVal apt As Appointment) As Boolean Return Convert.ToInt32(apt.CustomFields("RecordID")) = SELECTED_RECORD_ID End Function #End Region Sub Load_Entity_Data_CONTROLS_RECORDS() Try LOGGER.Debug("START Load_Entity_Data") Dim sw As New SW("Load_Entity_Data") PARENT_SKIPPED = False ' Me.Cursor = Cursors.WaitCursor RECORD_CHANGED = False RECORD_ID = 0 Dim expression As String Dim sql 'Dim sql = "SELECT CONTROL_ID, CONTROL_READ_ONLY FROM VWPMO_CONTROL_SCREEN WHERE CTRLTYPE_ID NOT IN (1) AND CONTROL_ENTITY_ID = " & ENTITY_ID DT_CONTROLS_ENTITY = ClassHelper.FILTER_DATATABLE(DT_VWPMO_CONTROL_SCREEN, "CTRLTYPE_ID NOT IN (1) AND CONTROL_ENTITY_ID = " & ENTITY_ID, "") 'MYDB_ECM.GetDatatable(sql) COUNT_RO_CONTROLS = 0 expression = "CONTROL_READ_ONLY = " & 1 Dim CONTROLS_ROW() As DataRow CONTROLS_ROW = DT_CONTROLS_ENTITY.Select(expression) Dim i As Integer ' Count the locked controls For i = 0 To CONTROLS_ROW.GetUpperBound(0) COUNT_RO_CONTROLS += 1 Next If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then tsButtonEdit.Enabled = False tsButtonSave.Enabled = False tsButtonDelete.Enabled = False Else tsButtonEdit.Enabled = True tsButtonSave.Enabled = True tsButtonDelete.Enabled = True End If Dim resultDT_VWPMO_CONSTRUCTOR_FORMS = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID).Single() LOAD_DIRECT = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("LOAD_DIRECT") CURRENT_CONSTRUCTOR_DETAIL_ID = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("GUID") CONTROL_DOCTYPE_MATCH = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("CONTROL_DOCTYPE_MATCH") SQL_RECORD_AND_FILE_READ_ONLY = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("SQL_RIGHT_READ_AND_VIEW_ONLY") SQL_DOC_READ_ONLY = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("SQL_RIGHT_WINDREAM_VIEW") DOC_SEARCH_TAB1 = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("DOC_SEARCH_TAB1") If DOC_SEARCH_TAB1 = True Then bsitmDocID.Visibility = DevExpress.XtraBars.BarItemVisibility.Never tslblDocIDTab1.Visible = True Else bsitmDocID.Visibility = DevExpress.XtraBars.BarItemVisibility.Always tslblDocIDTab1.Visible = False End If Dim GEODATA As Boolean = False sql = String.Format("SELECT COUNT(*) FROM TBPMO_RECORD_GEODATA WHERE RECORD_ID IN (SELECT GUID FROM TBPMO_RECORD WHERE PARENT_RECORD = 0 AND FORM_ID = {0})", ENTITY_ID) Dim count = MYDB_ECM.GetScalarValue(sql) If count > 0 Then GEODATA = True Else GEODATA = False End If If GEODATA = True Then bbtniGeodaten.Visibility = DevExpress.XtraBars.BarItemVisibility.Always Else bbtniGeodaten.Visibility = DevExpress.XtraBars.BarItemVisibility.Never End If ACTIVATE_DOC_SEARCH_ON_EDIT = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("ACTIVATE_DOC_SEARCH_ON_EDIT") Try ADD_RECORDS_CONSTR = resultDT_VWPMO_CONSTRUCTOR_FORMS.Item("ADD_RECORDS") Catch ex As Exception LOGGER.Warn(ex.Message) ADD_RECORDS_CONSTR = True End Try If ADD_RECORDS_CONSTR = False Then LOGGER.Warn("ADDING RECORDS IS PROHIBITED FOR ENTITY: " & ENTITY_ID) End If expression = String.Format("ENTITY_ID = {0} AND LANGUAGE = '{1}'", ENTITY_ID, USER_LANGUAGE) DT_WINDREAM_COLUMNS_GRID = ClassHelper.FILTER_DATATABLE(DT_DOCSEARCH_RESULTLIST_CONFIG, expression, "SEQUENCE") expression = String.Format("ENTITY_ID = {0} AND TYPE_ID = 10 AND LANGUAGE = '{1}'", ENTITY_ID, USER_LANGUAGE) DT_DOCRESULT_DROPDOWN_ITEMS = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_DOCRESULT_DROPDOWN_ITEMS, expression, "SEQUENCE") DT_RESULTLIST_OPTIONS = ClassHelper.FILTER_DATATABLE(CURRENT_VARIABLE_CONTROLS, "ENTITY_ID = " & ENTITY_ID, "") expression = String.Format("ENTITY_ID = {0} AND LANGUAGE = '{1}' AND COLUMN_VIEW LIKE 'VALUE%'", ENTITY_ID, USER_LANGUAGE) DT_RESULTLIST_VARIABLE_VALUE = ClassHelper.FILTER_DATATABLE(DT_DOCSEARCH_RESULTLIST_CONFIG, expression, "SEQUENCE") Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable() Select form Where form.Item("GUID") = ENTITY_ID).Single() FORM_TYPE = ENTITY_ROW.Item("FORM_TYPE_ID") IS_SINGLE_RECORD = ENTITY_ROW.Item("SINGLE_RECORD") POS_ENTITY = ENTITY_ROW.Item("POS_ENTITY") REDUNDANT_FORM = ENTITY_ROW.Item("REDUNDANT_ENTITY") LOAD_ENTITY_SEARCH_AT_STARTUP = ENTITY_ROW.Item("LOAD_ENT_SEARCH_AT_SU") If REDUNDANT_FORM <> 0 Then CURRENT_ENTITY_REDUNDANT_ID = REDUNDANT_FORM Else CURRENT_ENTITY_REDUNDANT_ID = 0 End If 'sql = String.Format("select * from TBPMO_RIGHT_USER WHERE USER_ID = {0} AND ENTITY_ID = {1}", USER_GUID, ENTITY_ID) DT_RIGHTS_USER = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_RIGHT_USER, "ENTITY_ID = " & ENTITY_ID, "") expression = String.Format("") sql = String.Format("SELECT DISTINCT EDIT_REC,ADD_REC,DELETE_REC,ADD_DOC,VIEW_DOC,DELETE_DOC FROM TBPMO_RIGHT_GROUP WHERE ENTITY_ID = {0} AND GROUP_ID IN (SELECT GROUP_ID FROM TBDD_GROUPS_USER WHERE USER_ID = {1})", ENTITY_ID, USER_GUID) DT_RIGHTS_GROUP = MYDB_ECM.GetDatatable(sql) If VIEW_ID_RUNTIME <> -1 Then GRID_TYPE_ID = VIEW_ID_RUNTIME Else sql = String.Format("SELECT VIEW_ID FROM TBPMO_USER_CONSTR_VIEW_TYPE WHERE CONSTRUCTOR_DETAIL_ID = {0} AND [ENTITY_ID] = {1} AND USER_ID = {2}", CURRENT_CONSTRUCTOR_DETAIL_ID, ENTITY_ID, USER_GUID) Dim VIEW_ID = MYDB_ECM.GetScalarValue(sql) If IsNothing(VIEW_ID) Then MYDB_ECM.ExecuteNonQuery("INSERT INTO TBPMO_USER_CONSTR_VIEW_TYPE ([USER_ID],CONSTRUCTOR_DETAIL_ID,[ENTITY_ID]) VALUES (" & USER_GUID & "," & CURRENT_CONSTRUCTOR_DETAIL_ID & "," & ENTITY_ID & ")") 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 ' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS Dim result1 = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID).Single() PARENT_ENTITYID = result1.Item("PARENT_ID") CURRENT_PARENT_ENTITY_ID = PARENT_ENTITYID ' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS Dim query = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID Dim QuickViewSQL = query.Single().Item("SQL_QUICK_VIEW") CURRENT_ENTITYSQL = Get_Grid_Sql(CONSTRUCTORID, ENTITY_ID, CURRENT_CONSTRUCTOR_DETAIL_ID, GRID_TYPE, USER_GUID, QuickViewSQL, IS_SINGLE_RECORD, FORM_TYPE, VIEW_ID, GridControlMain, grvwGrid) ' CURRENT_ENTITYSQL = GridSQL 'Anzahl der Datensätze ENTITY_RECORD_COUNT = MYDB_ECM.ExecuteNonQuery("SELECT COUNT(*) FROM TBPMO_RECORD where PARENT_RECORD = 0 AND FORM_ID = " & ENTITY_ID) If CBool(LOAD_ENTITY_SEARCH_AT_STARTUP) = True Then ClassDOC_SEARCH.Get_DOC_RESULTTABLE(DT_RESULTLIST_OPTIONS, DT_RESULTLIST_VARIABLE_VALUE, DT_WINDREAM_COLUMNS_GRID, ENTITY_ID, RECORD_ID, True, True) End If Select Case ACT_EBENE Case 1 EBENE1_ENTITY = "" EBENE1_RECID = 0 EBENE2_ENTITY = "" EBENE2_RECID = 0 EBENE3_ENTITY = "" EBENE3_RECID = 0 PARENT_RECORDID = 0 EBENE1_ENTITY = TreeViewMain.SelectedNode.Text ACT_EBENE_STRING = EBENE1_ENTITY LOGGER.Debug("Level 1 selected in TreeView") 'tslblEntity2.Visible = False 'tslblEntity3.Visible = False Dim result2 = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID).Single() EBENE1_COLUMNNAME = result2.Item("COLUMN_NAME1") EBENE2_COLUMNNAME = "" EBENE3_COLUMNNAME = "" EBENE2_GRID_RESULT = Nothing EBENE3_GRID_RESULT = Nothing Case 2 EBENE2_ENTITY = TreeViewMain.SelectedNode.Text ACT_EBENE_STRING = EBENE2_ENTITY LOGGER.Debug("Level 2 selected in TreeView") 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 If GRID_TYPE = GridType.Grid Then CURRENT_ENTITYSQL = "SELECT T.* FROM VWPMO_ENTITY_TABLE" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_RECORDID Else CURRENT_ENTITYSQL = CURRENT_ENTITYSQL.Replace("@RecordID", EBENE2_RECID) CURRENT_ENTITYSQL = CURRENT_ENTITYSQL.ToString.Replace("TBPMO_FORM T1", "TBPMO_FORM T1 ,TBPMO_RECORD_CONNECT T2") CURRENT_ENTITYSQL = CURRENT_ENTITYSQL & " AND T.GUID = T2.RECORD2_ID AND T2.RECORD1_ID = @T2.RECORD1_ID" CURRENT_ENTITYSQL = CURRENT_ENTITYSQL.ToString.Replace("@T2.RECORD1_ID", PARENT_RECORDID) End If Else SELECTED_RECORD_ID = 0 PARENT_RECORDID = 0 'NavPane.Categories.Clear() bsitmRecord.Caption = "" Update_Status_Label(True, "Entity 1 skipped - All Records loaded", EditState.Update) PARENT_SKIPPED = True End If Dim result3 = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID).Single() EBENE2_COLUMNNAME = result3.Item("COLUMN_NAME1") EBENE3_COLUMNNAME = "" EBENE2_GRID_RESULT = Nothing EBENE3_GRID_RESULT = Nothing Case 3 EBENE3_ENTITY = TreeViewMain.SelectedNode.Text ACT_EBENE_STRING = EBENE3_ENTITY LOGGER.Debug("Level 3 selected in TreeView") Dim result4 = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Where form.Item("FORM_ID") = ENTITY_ID).Single() EBENE3_COLUMNNAME = result4.Item("COLUMN_NAME1") '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 Try If GRID_TYPE = GridType.Grid Then CURRENT_ENTITYSQL = "SELECT T.* FROM VWPMO_ENTITY_TABLE" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_RECORDID Else CURRENT_ENTITYSQL = CURRENT_ENTITYSQL.Replace("@RecordID", EBENE2_RECID) CURRENT_ENTITYSQL = CURRENT_ENTITYSQL.ToString.Replace("TBPMO_FORM T1", "TBPMO_FORM T1 ,TBPMO_RECORD_CONNECT T2") CURRENT_ENTITYSQL = CURRENT_ENTITYSQL & " AND T.GUID = T2.RECORD2_ID AND T2.RECORD1_ID = @T2.RECORD1_ID" CURRENT_ENTITYSQL = CURRENT_ENTITYSQL.ToString.Replace("@T2.RECORD1_ID", PARENT_RECORDID) End If Catch ex As Exception LOGGER.Warn("Error in Replacing patterns in entity_sql: " & ex.Message) End Try Else SELECTED_RECORD_ID = 0 PARENT_RECORDID = 0 'NavPane.Categories.Clear() Update_Status_Label(True, "Entity 2 skipped - All Records loaded", EditState.Update) bsitmRecord.Caption = "" PARENT_SKIPPED = True 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 CURRENT_PARENT_RECORD_ID = PARENT_RECORDID DT_TBPMO_FORM_VIEW = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_FORM_VIEW, "FORM_ID = " & ENTITY_ID & " AND SCREEN_ID = " & CURRENT_SCREEN_ID, "") CURRENT_ENTITYSTRING = DT_TBPMO_FORM_VIEW.Rows(0).Item("FORM_TITLE") act_FormViewID = DT_TBPMO_FORM_VIEW.Rows(0).Item("GUID") If EDIT_STATE = EditState.None Then 'Die Controls der Entität laden Load_Controls(act_FormViewID) If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If 'set_pnlsize() End If 'Überprüfen ob windream Dos angezeigt werden sollen? Check_windream_Show(act_FormViewID) If windream_Docshow = True Then If TCDetails.SelectedTabPage.Name = "TabWindream" Or (TCDetails.SelectedTabPage.Name = "TabDetails" And DOC_SEARCH_TAB1 = True) Then Me.GridControlDocSearch.DataSource = Nothing Clear_Windream_ResultList() GridControlDocSearch.Visible = True 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 BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bsitmLoadEntity.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bsitmLoadEntity.Caption = "Loading record-data..." If LOCK_CONTROLS_BG_LOAD = True Then SplitContainerMain.Panel2.Enabled = False End If Try Dim async As New ClassAsyncSQL(CURRENT_ENTITYSQL) async.bw.RunWorkerAsync() While async.bw.IsBusy Application.DoEvents() End While CURRENT_DT_ENTITY_RECORDS = async.dt Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error Async EntitySQL", ex.Message, ex.StackTrace) End Try If LOCK_CONTROLS_BG_LOAD = True Then SplitContainerMain.Panel2.Enabled = True End If BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bsitmLoadEntity.Visibility = DevExpress.XtraBars.BarItemVisibility.Never If IsNothing(CURRENT_DT_ENTITY_RECORDS) Then ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in getting Entity-Data - Check logfile") Else CURRENT_DT_ENTITY_RECORDS.TableName = "VWPMO_ENTITY_TABLE" & ENTITY_ID ' Dim SQL_AutoValues = "SELECT GUID AS CONTROL_ID, CONNECTION_ID_1 AS CONNECTION_ID, SQL_COMMAND_1 AS SQL_COMMAND FROM TBPMO_CONTROL WHERE CONNECTION_ID_1 <> '' AND SQL_COMMAND_1 <> '' AND FORM_ID = " & ENTITY_ID Dim DT_AUTOVALUES = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONNECTION_ID_1 > 0 AND SQL_COMMAND_1 <> '' AND FORM_ID = " & ENTITY_ID, "") CURRENT_SQL_AUTO_VALUES_DT = DT_AUTOVALUES Try Dim primaryKey(1) As DataColumn primaryKey(0) = CURRENT_DT_ENTITY_RECORDS.Columns("Record-ID") CURRENT_DT_ENTITY_RECORDS.PrimaryKey = primaryKey Catch ex As Exception LOGGER.Warn("Could not set the primary Key(Record-ID): " & ex.Message) End Try LoadGrid_Records() 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 Load_Grid_Layout() HideColumns() 'Überprüfen ob es für diese Entität Wiedervorlagen gibt? Check_FOLLOWUP_IsConfigured(ENTITY_ID) SET_ROWCOUNT_STRING() End If If POS_ENTITY > 0 Then If USER_LANGUAGE <> "de-DE" Then TabDetails.Text = "Head-Data" Else TabDetails.Text = "Kopfdaten" End If TabPos.PageVisible = True Else If USER_LANGUAGE <> "de-DE" Then TabDetails.Text = "Details" Else TabDetails.Text = "Detailansicht" End If TabPos.PageVisible = False End If 'Load_Templates() ' Hinfällig, da hier die Record-ID nicht gebraucht wird CtrlBuilder.WatchRecordChanges = False ClassControlValues.LoadControlValuesList(ENTITY_ID, CtrlBuilder.MasterPanel.Controls) CtrlBuilder.WatchRecordChanges = True 'Zurücksetzen ENTITY_LOADING_PROCESS = True Dim RecLoaded As Boolean = False If LOAD_DIRECT = True Then Load_Record_Direct() RecLoaded = True End If If ENTITY_RECORD_COUNT = 1 Then If RecLoaded = False Then Load_Record_Direct() End If End If If DOC_SEARCH_TAB1 = True Then SplitContainerDetails.Collapsed = False SplitContainerDetails.PanelVisibility = SplitPanelVisibility.Both 'ToolStripDokumente.Dock = DockStyle.None 'pnlDocToolStrip.Controls.Add(ToolStripDokumente) pnlDocFill.Controls.Add(GridControlDocSearch) TabWindream.PageVisible = False Load_DocGrid_Layout() Else SplitContainerDetails.PanelVisibility = SplitPanelVisibility.Panel1 SplitContainerDetails.Collapsed = True 'ToolStripDokumente.Dock = DockStyle.None 'ToolStripDokumente.Dock = DockStyle.Top TabWindream.Controls.Add(GridControlDocSearch) TabWindream.PageVisible = True End If If RIGHT_READ_ONLY_DOC = False Then If ACTIVATE_DOC_SEARCH_ON_EDIT = False Then Doc_ReadOnlyHandler(False) Else Doc_ReadOnlyHandler(True) End If End If End If Load_Splitter_Layout() sw.Done() If ENTITY_RELOAD_AFT_CONTROL_LOAD = True Then Reload_Entity_while_Control_Load() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Load_Entity_Data", ex.Message, ex.StackTrace) Finally 'Me.Cursor = Cursors.Default ENTITY_LOADING_PROCESS = True End Try End Sub Sub Load_Record_Direct() Try grvwGrid.FocusedRowHandle = 0 Dim Grid_RecordID = Get_Focused_Row_Cell_Value("Record-ID") If Not IsNothing(Grid_RecordID) Then Select Case ACT_EBENE Case 1 Column_Row_Handler("Load_Record_Direct") 'PARENT_RECORDID = Grid_RecordID 'CURRENT_RECORD_ID = PARENT_RECORDID 'SELECTED_RECORD_ID = Grid_RecordID 'RECORD_ID = Grid_RecordID 'ENTITY_RELOAD_AFT_CONTROL_LOAD = False ''Daten zu Record in jedem Fall laden ''ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls) 'CtrlBuilder.WatchRecordChanges = False 'ClassControlValues.LoadControlValuesListWithPlaceholders(ENTITY_ID, Grid_RecordID, PARENT_RECORDID, CtrlBuilder.AllControls, ENTITY_ID) 'ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_RECORDID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID) 'CtrlBuilder.WatchRecordChanges = True '' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden! 'RECORD_CHANGED = False 'Update_Record_Label(Grid_RecordID) 'Check_Rights() End Select End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Sub Load_Entity_Data_Only() Try ENTITY_LOADING_PROCESS = False Dim DTEntity As DataTable = MYDB_ECM.GetDatatable(CURRENT_ENTITYSQL) Dim primaryKey(1) As DataColumn primaryKey(0) = DTEntity.Columns("Record-ID") DTEntity.PrimaryKey = primaryKey CURRENT_DT_ENTITY_RECORDS = DTEntity LoadGrid_Records() Load_Grid_Layout() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try ENTITY_LOADING_PROCESS = 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(CURRENT_DT_ENTITY_RECORDS, 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 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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) End Try End Sub Sub Lock_RecordControls(state As Boolean) Lock_Record_Controls_Recursive(state, pnlDetails.Controls) End Sub Private Function CHECK_CONTROL_CONFIGURED_RO(CONTROL_ID As Integer, state As Boolean) Try ' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS Dim result1 = (From form In DT_CONTROLS_ENTITY.AsEnumerable() Select form Where form.Item("CONTROL_ID") = CONTROL_ID).Single() Dim locked = result1.Item("CONTROL_READ_ONLY") If state = False And locked = True Then state = True End If Return state Catch ex As Exception Return state End Try End Function Sub Lock_Record_Controls_Recursive(state As Boolean, controls As System.Windows.Forms.Control.ControlCollection) For Each Control As System.Windows.Forms.Control In controls Dim controlId As Integer = DirectCast(Control.Tag, ClassControlMetadata).Id Select Case Control.GetType() Case GetType(System.Windows.Forms.GroupBox) Lock_Record_Controls_Recursive(state, DirectCast(Control, GroupBox).Controls) Case GetType(System.Windows.Forms.TextBox) Dim txt As TextBox = CType(Control, TextBox) txt.ReadOnly = CHECK_CONTROL_CONFIGURED_RO(controlId, state) Case Else Control.Enabled = Not CHECK_CONTROL_CONFIGURED_RO(controlId, state) 'state End Select Next End Sub Private 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 msg = "Sie haben ungespeicherte Änderungen. Wollen Sie diese speichern?" Dim msg1 = "Ungespeicherte Änderungen" If USER_LANGUAGE <> "de-DE" Then msg = "There are unsaved changes. Would You like to save?" msg1 = "Unsaved changes" End If Dim result As DialogResult = MessageBox.Show(msg, msg1, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = System.Windows.Forms.DialogResult.Yes Then If CtrlCommandUI.IsInsert = True Then EDIT_STATE = EditState.None Lock_RecordControls(True) End If Try Dim ResultMessage = Update_Record_OnChange() If ResultMessage <> "ERROR" Then Update_Status_Label(True, ResultMessage) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Save Record Changes: " & ex.Message, ex.StackTrace) End Try Else If CtrlCommandUI.IsInsert = True Then ' Wenn nicht gespeichert werden soll, den Record wieder löschen ClassHelper.DeleteRecord(SELECTED_RECORD_ID, "USER DECIDED NOT TO SAVE") End If If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If End If CtrlCommandUI.IsEdit = False CtrlCommandUI.IsInsert = False INSERT_IN_ACTION = 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 = MYDB_ECM.GetScalarValue(sql) If IsNothing(GRP_SINGLE_REC) Then Dim recordId = ClassRecordCommands.CreateRecordProcedure(ENTITY_ID) If recordId > 0 Then GRP_SINGLE_REC = recordId If Not IsNothing(GRP_SINGLE_REC) Then 'Die neue Record-ID setzen RECORD_ID = GRP_SINGLE_REC SELECTED_RECORD_ID = RECORD_ID ' ClassProxy.PRPROXY_RECORD_UPD_INS(CURRENT_ENTITY_ID, SELECTED_RECORD_ID) If ClassRecordCommands.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 'Else ' ClassProxy.PRPROXY_RECORD_CONNECT(PARENT_RECORDID, RECORD_ID) 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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in getting CURRENT_RECORDID FOR PARENT_ID: " & ex.Message, ex.StackTrace) 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 Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable() Select form Where form.Item("GUID") = ENTITY_ID).Single() '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 = MYDB_ECM.GetScalarValue(sql) If IsNothing(PARENT_RECORD1) Then Dim New_Record = ClassRecordCommands.GetLastRecord If Not IsNothing(New_Record) Then LOGGER.Debug("Parent-Record Ebene 1 wird neu angelegt...") 'Die neue Record-ID setzen ClassRecordCommands.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 Parent_EntityID = ENTITY_ROW.Item("PARENT_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 = (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 = MYDB_ECM.GetScalarValue(sql) If IsNothing(PARENT_RECORD2) Then Dim New_Record = ClassRecordCommands.GetLastRecord If Not IsNothing(New_Record) Then LOGGER.Debug("Parent-Record Ebene 1 wird neu angelegt...") 'Die neue Record-ID setzen ClassRecordCommands.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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace) Return 0 End Try End Function Private Function LoadGrid_Records() Try If GRID_TYPE = GridType.Tiles Then CreateTile() Else 'Grid leeren Clear_Grid_View() Dim gridFormatter As New ClassGridFormatter.ConstructorView(CURRENT_DT_ENTITY_RECORDS, ENTITY_ID) Dim DT_RESULT As DataTable = gridFormatter.FormatDatatable() GridControlMain.DataSource = DT_RESULT gridFormatter.FormatGridView(grvwGrid) Try grvwGrid.Columns("AddedWhen").DisplayFormat.FormatType = FormatType.DateTime grvwGrid.Columns("AddedWhen").DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" grvwGrid.Columns("ChangedWhen").DisplayFormat.FormatType = FormatType.DateTime grvwGrid.Columns("ChangedWhen").DisplayFormat.FormatString = CURRENT_DATE_FORMAT & " HH:MM:ss" Catch ex As Exception End Try 'Try ' Dim chkRep As New DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit ' grvwGrid.GridControl.RepositoryItems.Add(chkRep) ' grvwGrid.Columns("files?").ColumnEdit = chkRep 'Catch ex As Exception ' LOGGER.Warn("Attention: Column files? not existing in GridView?") 'End Try 'grvwGrid.Columns("Record-ID").OptionsColumn.AllowShowHide = False End If HideColumns() If NODE_NAVIGATION = False Then 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 Dim msg = "Anzahl Datensätze: " If USER_LANGUAGE <> "de-DE" Then msg = "number of records: " End If bStaticItem1.Caption = msg & Get_Grid_Row_Count() End If RibbonPageGroupSuchen.Visible = True Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in LoadGrid_Records", ex.Message, ex.StackTrace) Return False End Try Return True End Function Sub HideColumns() Try ' Presuming the DataTable has a column named FORM_ID Dim expression As String expression = "FORM_ID = " & ENTITY_ID Dim foundRowsLevel0() As DataRow ' Use the Select method to find all rows matching the filter. foundRowsLevel0 = DT_CONTROL_SCREEN_SHOW_COL_0.Select(expression) Dim i As Integer 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 ' For each row create a Node For i = 0 To foundRowsLevel0.GetUpperBound(0) Dim colname As String = foundRowsLevel0(i)("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 ' FormID und RecordID immer ausblenden grvwGrid.Columns.Item("Record-ID").Visible = False Try grvwGrid.Columns.Item("Form-ID").Visible = False Catch ex As Exception End Try grvwGrid.Columns.Item("ROW_COLOR").Visible = False End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in HideColumns: ", ex.Message) 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 = ClassHelper.FILTER_DATATABLE(DT_VWPMO_CONTROL_SCREEN, "CONTROL_SHOW_COLUMN = 0 AND FORM_ID = " & EntityID, "") 'MYDB_ECM.GetDatatable(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 grvwGridPos.Columns.Item("ROW_COLOR").Visible = False Try grvwGridPos.Columns.Item("files?").Visible = False grvwGridPos.Columns.Item("file count").Visible = False Catch ex As Exception End Try Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in HideColumns_Pos: ", ex.Message) End Try End Sub Async Function Show_Selected_Record_Data(Rec_ID As Integer, EntityLoad As Boolean) As Threading.Tasks.Task Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) Try Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable() Select form Where form.Item("GUID") = ENTITY_ID).Single() Update_Status_Label(False, "") LOGGER.Debug("GRID_RECORD ID: " & Rec_ID.ToString) 'Me.pnlDetails.Visible = True 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 Parent_EntityID = ENTITY_ROW.Item("PARENT_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}", RECORD_ID, Parent_EntityID) Dim PARENT_RECORD1 = MYDB_ECM.GetScalarValue(sql) EBENE2_RECID = PARENT_RECORD1 PARENT_RECORDID = PARENT_RECORD1 CURRENT_PARENT_RECORD_ID = PARENT_RECORDID End If Case 2 linkedRecord = GET_LINKED_RECORD(Rec_ID, ENTITY_ID) If linkedRecord > 0 Then EBENE1_RECID = Rec_ID PARENT_RECORDID = EBENE1_RECID CURRENT_PARENT_RECORD_ID = PARENT_RECORDID End If Case 1 PARENT_RECORDID = Rec_ID EBENE1_RECID = PARENT_RECORDID CURRENT_PARENT_RECORD_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 CURRENT_PARENT_RECORD_ID = PARENT_RECORDID 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 CURRENT_PARENT_RECORD_ID = PARENT_RECORDID Else CURRENT_PARENT_RECORD_ID = PARENT_RECORDID 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 CURRENT_PARENT_RECORD_ID = PARENT_RECORDID End If End Select End If RIGHT_CONTROL_CHANGED = False Select Case TCDetails.SelectedTabPage.Name Case "TabDetails" ENTITY_RELOAD_AFT_CONTROL_LOAD = False CtrlBuilder.WatchRecordChanges = False ClassControlValues.LoadControlValues(SELECTED_RECORD_ID, PARENT_RECORDID, ENTITY_ID, CtrlBuilder.AllControls, ENTITY_ID) CtrlBuilder.WatchRecordChanges = True If windream_Docshow = True Then Dim stg As String = "Dateien" If USER_LANGUAGE <> "de-DE" Then stg = "files" End If TabWindream.Text = stg End If Dim sel = String.Format("SELECT * FROM TBPMO_RECORD WHERE RECORD_ENTITY_ID = (SELECT RECORD_ENTITY_ID FROM TBPMO_RECORD WHERE GUID = {0}) AND FORM_ID = {1} AND GUID <> {2} AND DELETED = 0", SELECTED_RECORD_ID, ENTITY_ID, SELECTED_RECORD_ID) Dim DT_VARIANT As DataTable = MYDB_ECM.GetDatatable(sel) If DT_VARIANT.Rows.Count > 0 Then TabPageVariant.PageVisible = True Dim msg = "Vorgängervarianten" If USER_LANGUAGE <> "de-DE" Then msg = "Pre variants" End If TabPageVariant.Text = String.Format(msg & " ({0})", DT_VARIANT.Rows.Count) Else TabPageVariant.PageVisible = False End If If DOC_SEARCH_TAB1 = True Then DocSearch_Decision() End If Case "TabWindream" DocSearch_Decision() Case "TabFollowUp" tsButtonEdit.Enabled = False Refresh_FollowUps() dtpFollowUp.Enabled = False lblWiedervorlage_Control.Text = "<< Waiting for Selection:" 'ListBoxUser2Profile.Items.Clear() grpbxFU_Profile.Enabled = False End Select Dim sw As New SW("Show Selected RecordData 2") ' Laden der Daten bedeutet nicht dass Daten vom Benutzer geändert wurden! RECORD_CHANGED = False 'Refresh_Navpane() Update_Record_Label(SELECTED_RECORD_ID) Show_act_WFTask() RECORD_ID = SELECTED_RECORD_ID sw.Done() If ENTITY_RELOAD_AFT_CONTROL_LOAD = True Then Reload_Entity_while_Control_Load() End If 'tsstatus_Detail_show(False, "") Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in SelectedRecord_ShowData: ", ex.Message) Finally SplashScreenManager.CloseOverlayForm(oHandle) End Try End Function Sub DocSearch_Decision() If RECORD_ID = 0 Then 'RUN_WD_SEARCH(WD_Suche, "ENTITY") RUN_WDSEARCH_GRID(False) Else RUN_WDSEARCH_GRID(False) ' RUN_WD_SEARCH(WD_Suche, "RECORD") End If End Sub Sub Reload_Entity_while_Control_Load() Dim result As MsgBoxResult Dim stg As String If USER_LANGUAGE = "de-DE" Then stg = "Es gab ein unerwartetes Problem beim Laden der Control-Values! Wollen Sie versuchen die Daten erneut zu laden?" & vbNewLine & "'Nein' beendet die Sicht für einen manuellen Neustart!" Else stg = "orgFLOW encountered an unexpected error while loading the control values for the record! Do You want to try to relaod the entity data?" & vbNewLine & "No is terminating the entity-form to restart it manually!" End If result = MessageBox.Show(stg, "Confirmation needed:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Load_Datafor_Entity(False) Else Me.Close() End If 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 = MYDB_ECM.GetDatatable(POS_SQL) 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 --- ClassPosGrid.FormatColumns(grvwGridPos, POS_ENTITY) 'ClassPosGrid.CreateComboEditor(grvwGridPos, POS_ENTITY) 'HideColumns_Pos(PARENT_RECORDID) End If Load_POSGrid_Layout() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Load_Pos_Data: ", ex.Message) End Try End Sub Function Get_GridResult(Columnname As String) Dim result = Get_Focused_Row_Cell_Value(Columnname) Dim str = String.Empty If DT_VWPMO_CONSTRUCTOR_FORMS.Rows.Count >= 3 Then str &= System.Text.RegularExpressions.Regex.Replace(ACT_EBENE_STRING, "\s\(\d+\)", "") str &= " - " End If If IsDBNull(result) OrElse result = "" Then str &= "No Column configured" Else str &= result End If Return str 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!") 'LOGGER.Info("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 Private Sub Refresh_FollowUp_TabHeader() Try DT_FU_Record = MYDB_ECM.GetDatatable("select * from VWPMO_FOLLOW_UP_EMAIL_ENTITY_RECORD where Record_ID = " & RECORD_ID) Dim msg As String = "Wiedervorlage (Nicht Abrufbar)" If USER_LANGUAGE <> "de-DE" Then msg = "Follow Up - (Not accessable)" End If If IsNothing(DT_FU_Record) Then TabFollowUp.Text = msg Exit Sub End If If DT_FU_Record.Rows.Count = 0 Then msg = "Wiedervorlage (Nicht aktiviert)" If USER_LANGUAGE <> "de-DE" Then msg = "Follow Up - (Not activated)" End If TabFollowUp.Text = msg Else msg = "Wiedervorlage (Aktive Profile)" If USER_LANGUAGE <> "de-DE" Then msg = "Follow Up - (active profiles)" End If TabFollowUp.Text = msg End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Refresh_FollowUp_TabHeader: ", ex.Message) 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 msg = String.Format("Die folgenden Steuerelemente müssen ausgefüllt sein: {0}{1}", vbNewLine, nameString) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("the following controls must be filled with values: {0}{1}", vbNewLine, nameString) End If Dim errorMessage As String = msg ' Das erste fehlende Control in den Fokus nehmen Dim firstControlName = missingControlValues.First() Focus_Control(firstControlName) Throw New Exception(errorMessage) End If ' Record Speichern Dim ResultMessage = CtrlCommandUI.SaveRecord(SELECTED_RECORD_ID, ENTITY_ID) '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 = MYDB_ECM.GetDatatable("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("@ENTITY_ID", ENTITY_ID) prsql = prsql.ToUpper.Replace("@RECORD_ID", RECORD_ID) MYDB_ECM.ExecuteNonQuery(prsql) Next End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Customer_Run_Procedures: ", ex.Message) End Try End Sub #Region "WindreamSuche" Private Sub Check_windream_Show(FORM_VIEW_ID As Integer) Try Dim wdsearch = DT_TBPMO_FORM_VIEW.Rows(0).Item("DOCUMENT_VIEW") If CBool(wdsearch) = False Then windream_Docshow = False TabWindream.PageVisible = False BbtnitmDocSearch.Enabled = False tsmiFilesearch.Enabled = False Exit Sub Else TabWindream.PageVisible = True BbtnitmDocSearch.Enabled = True tsmiFilesearch.Enabled = True windream_Docshow = True If windream_inited = False Then Dim sw As New SW("Check_windream_Show") Try If WMMOD.SessionReconnect = True Then windream_inited = True End If Catch ex As Exception windream_inited = False End Try sw.Done() End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Check windream show: ", ex.Message) windream_Docshow = False End Try End Sub Private Sub WD_DELETE_DOCS(DT_RESULT As DataTable) Dim sw As New SW("WD_DELETE_DOCS") ' Dim Basesearch As String Try If Not IsNothing(DT_RESULT) Then If DT_RESULT.Rows.Count > 0 Then 'Es gibt Suchergebnisse Dim msg As String msg = "Wollen Sie die zugehörigen Dateien (" & DT_RESULT.Rows.Count.ToString & ") ebenfalls löschen?" If USER_LANGUAGE <> "de-DE" Then msg = "Do You want to delete the related files (" & DT_RESULT.Rows.Count.ToString & ")?" End If Dim result1 As MsgBoxResult result1 = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result1 = MsgBoxResult.Yes Then For Each row As DataRow In DT_RESULT.Rows Dim DOC_ID = row.Item(0) Dim path Try path = row.Item(1) Catch ex As Exception path = row.Item(1) End Try If Not IsNothing(path) Then Dim Count As Integer = MYDB_ECM.GetScalarValue("SELECT COUNT(GUID) FROM TBPMO_DOC_RECORD_LINK WHERE DOC_ID = " & DOC_ID) If Count > 1 Then msg = "Diese Datei ist noch mit anderen Datensätzen verknüpft! Lediglich die Verknüpfung zum aktuellen Datensatz wird gelöscht!" If USER_LANGUAGE <> "de-DE" Then msg = "This file is also linked to other records! Only the link for this Record will be deleted!" End If MsgBox(msg, MsgBoxStyle.Information) ClassFileResult.Delete_ResultFile(DOC_ID, RECORD_ID, 0) Else If ClassFileResult.Delete_ResultFile(DOC_ID, RECORD_ID, 1) = False Then msg = String.Format("Die Datei {0} konnte nicht gelöscht werden! Prüfen Sie die logfile!", path) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("The file {0} could not be deleted! Check the logfile!", path) End If MsgBox(msg, MsgBoxStyle.Critical, "Attention:") Else If WMMOD.RemoveFile(path) Then ClassHelper.InsertEssential_Log(DOC_ID, "DOC-ID", "FILE DELETED BY USER") End If End If End If End If Next End If End If Else LOGGER.Info("No files 2 delete - after deleting record!") End If Cursor = Cursors.Default Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in WD-Delete Docs: ", ex.Message) End Try sw.Done() Cursor = Cursors.Default End Sub Private Sub RUN_ENTITY_DOC_SEARCH() Dim sw As New SW("RUN_ENTITY_DOC_SEARCH") Try Dim oSQL = $"SELECT ENTITY_DOC_SEARCH FROM TBPMO_FORM WHERE GUID = {ENTITY_ID}" CURRENT_DOCSEARCH_SQL = MYDB_ECM.ExecuteNonQuery(oSQL) If CURRENT_DOCSEARCH_SQL <> String.Empty Then Dim oText = $"Die Sicht-weite Suche wird im Hintergrund ausgeführt und angezeigt sobald sie fertig ist." If USER_LANGUAGE <> "de-De" Then oText = $"The view-wide search will be started in background. The result will be displayed when ready." End If MsgBox(oText, vbOKOnly, "Information") CURRENT_DOCSEARCH_SQL = CURRENT_DOCSEARCH_SQL.Replace("@ENTITY_ID", ENTITY_ID) CURRENT_DOCSEARCH_SQL = CURRENT_DOCSEARCH_SQL.Replace("@USER_LANGUAGE", USER_LANGUAGE) CURRENT_DOCSEARCH_SQL = CURRENT_DOCSEARCH_SQL.Replace("@USER_ECM_ID", USERID_FK_INT_ECM) CURRENT_DOCSEARCH_SQL = CURRENT_DOCSEARCH_SQL.Replace("@USER_ID", USER_GUID) If USER_LANGUAGE <> "de-DE" Then CURRENT_DOCSEARCH_CAPTION = "view-wide search" Else CURRENT_DOCSEARCH_CAPTION = "Sicht-Suche" End If Dim myformThread = New Thread(Sub() Using frm As New frmDocSearchResult Application.Run(frm) End Using End Sub) myformThread.SetApartmentState(ApartmentState.STA) myformThread.Start() Else MsgBox("Please config the entity-search properly! " & vbNewLine & oSQL, vbOKOnly, "Information") End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error RUN_ENTITY_DOC_SEARCH", ex.Message, ex.StackTrace) End Try sw.Done() End Sub Async Function RUN_WDSEARCH_GRID(osplashscreen As Boolean) As Threading.Tasks.Task Dim oHandle As IOverlaySplashScreenHandle If osplashscreen Then oHandle = SplashScreenManager.ShowOverlayForm(Me) taskToken = New CancellationTokenSource() End If Dim sw As New SW("RUN_WDSEARCH_GRID") Try ' Thread.Sleep(5000) BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bsitmLoadEntity.Caption = "Documents loading..." If CURRENT_SEARCH_TYPE = "NODE_DOWN" Then Dim node As TreeNode = TreeViewMain.SelectedNode Dim NODE_GUID = ClassNodeNavigation.Return_NODEID_forTag(node.Tag) Dim sql = String.Format("DECLARE @return_value int " & vbNewLine & "EXEC @return_value = [dbo].[PRPMO_NODES_GET_CHILD_RECORDS] @USER_ID = {0}, @NODE_ID = {1} " & vbNewLine & "SELECT 'Return Value' = @return_value", USER_GUID, NODE_GUID) Dim DT_ASYNC As DataTable Try Dim async As New ClassAsyncSQL(sql) async.bw.RunWorkerAsync() While async.bw.IsBusy Application.DoEvents() End While DT_ASYNC = async.dt Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error Async DT_ASYNC", ex.Message, ex.StackTrace) End Try If Not IsNothing(DT_ASYNC) Then Dim result = DT_ASYNC.Rows(0).Item(0) If result <> 0 Then ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Getting SubNodes-Structure", "Check the logfile") End If End If End If Dim DT_RESULT As DataTable DT_RESULT = ClassDOC_SEARCH.Get_DOC_RESULTTABLE(DT_RESULTLIST_OPTIONS, DT_RESULTLIST_VARIABLE_VALUE, DT_WINDREAM_COLUMNS_GRID, ENTITY_ID, RECORD_ID, CBool(LOAD_ENTITY_SEARCH_AT_STARTUP)) If IsNothing(DT_RESULT) Then Dim msg = "wrong DocSearch-Configuration or unexpected Error in Get_DOC_RESULTTABLE - Check logfile and contact Digital Data" GridViewDoc_Search.ViewCaption = msg Else If DT_RESULT.Rows.Count > 0 Then 'Es gibt Suchergebnisse Dim selnode As TreeNode = TreeViewMain.SelectedNode Dim NODE_TEXT As String = selnode.Text Dim msg = "Dateien für Record: " & RECORD_ID If CURRENT_SEARCH_TYPE = "ENTITY" Then selnode = TreeViewMain.SelectedNode Dim Entitystring If selnode.Text.Contains(" (") Then Entitystring = selnode.Text.Substring(0, selnode.Text.IndexOf("(") - 1) Else Entitystring = selnode.Text End If msg = "Dateien für Sicht: " & Entitystring If USER_LANGUAGE <> "de-DE" Then msg = "files for view: " & Entitystring End If msg &= " (" & DT_RESULT.Rows.Count.ToString & ")" ElseIf CURRENT_SEARCH_TYPE = "RECORD" Then If NODE_NAVIGATION Then If NODE_TEXT.Contains(" (") Then NODE_TEXT = NODE_TEXT.Substring(0, NODE_TEXT.IndexOf("(") - 1) End If msg = String.Format("Dateien für Objekt '{0}' ", NODE_TEXT) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("Files for Object '{0}'", NODE_TEXT) End If msg &= " (" & DT_RESULT.Rows.Count.ToString & ")" Else msg = String.Format("Dateien für Record '{0}' ", RECORD_ID) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("Files for record '{0}'", RECORD_ID) End If msg &= " (" & DT_RESULT.Rows.Count.ToString & ")" End If ElseIf CURRENT_SEARCH_TYPE = "NODE_DOWN" Then selnode = TreeViewMain.SelectedNode msg = "Dateien für Knotenunterstruktur" If USER_LANGUAGE <> "de-DE" Then msg = "files found in Node-Substructure" End If msg &= " (" & DT_RESULT.Rows.Count.ToString & ")" Else msg = String.Format("Ergebnis der Volltextsuche") If USER_LANGUAGE <> "de-DE" Then msg = String.Format("Result of Fulltext-Search") End If msg &= " (" & DT_RESULT.Rows.Count.ToString & ")" End If GridViewDoc_Search.ViewCaption = msg If DT_RESULT.Rows.Count > 0 Then If CURRENT_SEARCH_TYPE = "FULLTEXT" Then If SplitContainerDetails.Collapsed = False And tsbtnPanel1Collapse.Visible = True Then Collapse_Details() End If grvwGrid.ShowFindPanel() grvwGrid.FindFilterText = CURRENT_FULLTEXT_PATTERN End If If DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count > 0 Then LOGGER.Info($"RUN_WDSEARCH_GRID - DT_DOCRESULT_DROPDOWN_ITEMS [{DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count}]!") End If ClassDocGrid.FillColumns( GridViewDoc_Search, DT_RESULT, DT_WINDREAM_COLUMNS_GRID, DT_DOCRESULT_DROPDOWN_ITEMS, AddressOf OnCBSelectedValueChanged, AddressOf OnDateSelectedValueChanged, AddressOf OnTextSelectedValueChanged, AddressOf OnCheckboxValueChanged, CURRENT_SEARCH_TYPE, RECORD_ID) End If BbtnitmDocSearch.Enabled = True Else Dim selnode As TreeNode = TreeViewMain.SelectedNode Dim NODE_TEXT As String = selnode.Text Dim msg = "Keine Dateien für '" If CURRENT_SEARCH_TYPE = "ENTITY" Then selnode = TreeViewMain.SelectedNode Dim Entitystring If selnode.Text.Contains(" (") Then Entitystring = selnode.Text.Substring(0, selnode.Text.IndexOf("(") - 1) Else Entitystring = selnode.Text End If msg = "Keine Dateien für Sicht: " & Entitystring & " gefunden" If USER_LANGUAGE <> "de-DE" Then msg = "No files found for View: " & Entitystring End If ElseIf CURRENT_SEARCH_TYPE = "RECORD" Then If NODE_NAVIGATION Then If NODE_TEXT.Contains(" (") Then NODE_TEXT = NODE_TEXT.Substring(0, NODE_TEXT.IndexOf("(") - 1) End If msg &= NODE_TEXT & "' gefunden" If USER_LANGUAGE <> "de-DE" Then msg = "No files found for object '" & NODE_TEXT & "'" End If Else msg &= "Record '" & RECORD_ID & "' gefunden" End If If USER_LANGUAGE <> "de-DE" Then msg = "No files found for record " & RECORD_ID End If ElseIf CURRENT_SEARCH_TYPE = "NODE_DOWN" Then msg = "Keine Dateien für Knotenunterstruktur gefunden" If USER_LANGUAGE <> "de-DE" Then msg = "No files found in Node-Substructure" End If Else msg = "Keine Dateien für Volltextsuche (" & CURRENT_FULLTEXT_PATTERN & ") gefunden" If USER_LANGUAGE <> "de-DE" Then msg = "No files found for fulltext-search (" & CURRENT_FULLTEXT_PATTERN & ")" End If End If GridViewDoc_Search.ViewCaption = msg GridControlDocSearch.DataSource = Nothing 'Clear_Windream_ResultList() End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Run WD-Search Database: ", ex.Message) Finally sw.Done() BarEditItem2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bsitmLoadEntity.Visibility = DevExpress.XtraBars.BarItemVisibility.Never If osplashscreen Then SplashScreenManager.CloseOverlayForm(oHandle) End If End Try End Function Private Sub OnCBSelectedValueChanged(sender As Object, e As EventArgs) Try Dim docId As Integer = ClassDocGrid.SELECTED_DOC_ID If docId = 0 Then MsgBox("Sorry no document was selected! Please try again!", MsgBoxStyle.Exclamation) Exit Sub End If Dim ComboBox As ComboBoxEdit = sender 'Dim ItemComboBox As RepositoryItemComboBox 'ItemComboBox = sender Dim item As ClassDocGrid.WindreamDocGridComboboxItem = ComboBox.SelectedItem Dim value As String = item.Value If value.ToUpper = "Not displayable in Group-Search".ToUpper Then Exit Sub End If Dim configId As Integer = item.ConfigID Dim user As String = USER_USERNAME Dim Sql As String = String.Format("EXEC PRPMO_DOC_VALUE_UPD_INS {0}, {1}, {2}, '{3}', '{4}'", docId, RECORD_ID, configId, value, user) If MYDB_ECM.ExecuteNonQuery(Sql) = False Then MsgBox("The Update-Command was not successful! Check the log!",, MsgBoxStyle.Critical) 'Else ' ClassProxy.PRPROXY_DOC_VALUES_UPD(docId, RECORD_ID) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in OnCBSelectedValueChanged: ", ex.Message) End Try End Sub Private Sub OnDateSelectedValueChanged(sender As Object, e As EventArgs) Try Dim DatePicker As DateEdit = sender Dim value As DateTime = DatePicker.EditValue Dim oldValue As Date Dim validDate As Boolean = False Try validDate = Date.TryParse(DatePicker.OldEditValue, oldValue) Catch ex As Exception oldValue = Date.MinValue End Try If Not validDate Then oldValue = Date.MinValue End If If oldValue = DatePicker.EditValue Then Exit Sub End If 'Dim colTitle = DirectCast(GridControlDocSearch.MainView, DevExpress.XtraGrid.Views.Grid.GridView).FocusedColumn.FieldName 'Dim configId As Integer = ClassWindreamDocGrid.RESULT_CONFIG_IDS.Item(colTitle) ' Config id über mainView -> detailView herausfinden Dim mainView As GridView = GridControlDocSearch.MainView Dim detailView As GridView = mainView.GetDetailView(mainView.FocusedRowHandle, mainView.GetRelationIndex(mainView.FocusedRowHandle, "docIdDetails")) Dim detailRow As DataRowView = detailView.GetRow(detailView.FocusedRowHandle) Dim configid = detailRow.Item("CONFIG_ID") Dim docId As Integer = ClassDocGrid.SELECTED_DOC_ID If docId = 0 Then MsgBox("Sorry no document was selected! Please try again!", MsgBoxStyle.Exclamation) Exit Sub End If Dim user As String = USER_USERNAME Dim dateString = value.ToString("yyyy-MM-dd") 'hh:mm:ss.fff Dim Sql As String = String.Format("EXEC PRPMO_DOC_VALUE_UPD_INS {0}, {1}, {2}, '{3}', '{4}'", docId, RECORD_ID, configid, dateString, user) If MYDB_ECM.ExecuteNonQuery(Sql) = False Then ClassHelper.MSGBOX_Handler("ERROR", "UnexpectedError:", "Error updating doc-metadata (date): " & vbNewLine & "Check the log for further information!") 'Else ' ClassProxy.PRPROXY_DOC_VALUES_UPD(docId, RECORD_ID) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in OnDateSelectedValueChanged: ", ex.Message) End Try End Sub Private Sub OnTextSelectedValueChanged(sender As Object, e As EventArgs) Try Dim TextBox As TextEdit = sender Dim value = TextBox.EditValue If value.ToUpper = "Not displayable in Group-Search".ToUpper Then Exit Sub End If 'Dim colTitle = DirectCast(GridControlDocSearch.MainView, DevExpress.XtraGrid.Views.Grid.GridView).FocusedColumn.FieldName 'Dim configId As Integer = ClassWindreamDocGrid.RESULT_CONFIG_IDS.Item(colTitle) ' Config id über mainView -> detailView herausfinden Dim mainView As GridView = GridControlDocSearch.MainView Dim detailView As GridView = mainView.GetDetailView(mainView.FocusedRowHandle, mainView.GetRelationIndex(mainView.FocusedRowHandle, "docIdDetails")) Dim detailRow As DataRowView = detailView.GetRow(detailView.FocusedRowHandle) Dim configid = detailRow.Item("CONFIG_ID") Dim docId As Integer = ClassDocGrid.SELECTED_DOC_ID If docId = 0 Then MsgBox("Sorry no document was selected! Please try again!", MsgBoxStyle.Exclamation) Exit Sub End If Dim user As String = USER_USERNAME Dim Sql As String = String.Format("EXEC PRPMO_DOC_VALUE_UPD_INS {0}, {1}, {2},'{3}','{4}'", docId, RECORD_ID, configid, value, user) If MYDB_ECM.ExecuteNonQuery(Sql) = False Then ClassHelper.MSGBOX_Handler("ERROR", "UnexpectedError:", "Error updating doc-metadata (textbox): " & vbNewLine & "Check the log for further information!") 'Else ' ClassProxy.PRPROXY_DOC_VALUES_UPD(docId, RECORD_ID) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in OnTextSelectedValueChanged: ", ex.Message) End Try End Sub Private Sub OnCheckboxValueChanged(sender As Object, e As EventArgs) 'TODO Save Checkboxvalue Try Dim CheckBox As CheckEdit = sender Dim value As Boolean = CheckBox.EditValue 'Config id über mainView -> detailView herausfinden Dim mainView As GridView = GridControlDocSearch.MainView Dim detailView As GridView = mainView.GetDetailView(mainView.FocusedRowHandle, mainView.GetRelationIndex(mainView.FocusedRowHandle, "docIdDetails")) Dim detailRow As DataRowView = detailView.GetRow(detailView.FocusedRowHandle) Dim configid = detailRow.Item("CONFIG_ID") Dim docId As Integer = ClassDocGrid.SELECTED_DOC_ID If docId = 0 Then MsgBox("Sorry no document was selected! Please try again!", MsgBoxStyle.Exclamation) Exit Sub End If Dim user As String = USER_USERNAME Dim Sql As String = String.Format("EXEC PRPMO_DOC_VALUE_UPD_INS {0}, {1}, {2},'{3}','{4}'", docId, RECORD_ID, configid, value, user) If MYDB_ECM.ExecuteNonQuery(Sql) = False Then ClassHelper.MSGBOX_Handler("ERROR", "UnexpectedError:", "Error updating doc-metadata (checkbox): " & vbNewLine & "Check the log for further information!") 'Else ' ClassProxy.PRPROXY_DOC_VALUES_UPD(docId, RECORD_ID) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in OnCheckboxValueChanged: ", ex.Message) End Try End Sub Public Class WDDoc_Combobox_Item Implements IConvertible Public ConfigID As Integer Public Value As String Public Overrides Function ToString() As String Return Me.Value End Function Public Function GetTypeCode() As TypeCode Implements IConvertible.GetTypeCode Throw New NotImplementedException End Function Public Function ToBoolean(provider As IFormatProvider) As Boolean Implements IConvertible.ToBoolean Throw New NotImplementedException End Function Public Function ToByte(provider As IFormatProvider) As Byte Implements IConvertible.ToByte Throw New NotImplementedException End Function Public Function ToChar(provider As IFormatProvider) As Char Implements IConvertible.ToChar Throw New NotImplementedException End Function Public Function ToDateTime(provider As IFormatProvider) As Date Implements IConvertible.ToDateTime Throw New NotImplementedException End Function Public Function ToDecimal(provider As IFormatProvider) As Decimal Implements IConvertible.ToDecimal Throw New NotImplementedException End Function Public Function ToDouble(provider As IFormatProvider) As Double Implements IConvertible.ToDouble Throw New NotImplementedException End Function Public Function ToInt16(provider As IFormatProvider) As Short Implements IConvertible.ToInt16 Throw New NotImplementedException End Function Public Function ToInt32(provider As IFormatProvider) As Integer Implements IConvertible.ToInt32 Throw New NotImplementedException End Function Public Function ToInt64(provider As IFormatProvider) As Long Implements IConvertible.ToInt64 Throw New NotImplementedException End Function Public Function ToSByte(provider As IFormatProvider) As SByte Implements IConvertible.ToSByte Throw New NotImplementedException End Function Public Function ToSingle(provider As IFormatProvider) As Single Implements IConvertible.ToSingle Throw New NotImplementedException End Function Public Function ToString1(provider As IFormatProvider) As String Implements IConvertible.ToString Return Me.Value End Function Public Function ToType(conversionType As Type, provider As IFormatProvider) As Object Implements IConvertible.ToType Throw New NotImplementedException End Function Public Function ToUInt16(provider As IFormatProvider) As UShort Implements IConvertible.ToUInt16 Throw New NotImplementedException End Function Public Function ToUInt32(provider As IFormatProvider) As UInteger Implements IConvertible.ToUInt32 Throw New NotImplementedException End Function Public Function ToUInt64(provider As IFormatProvider) As ULong Implements IConvertible.ToUInt64 Throw New NotImplementedException End Function End Class Private Sub GridViewDropDown_ValueChanged(sender As Object, e As DragEventArgs) Handles TCDetails.DragDrop Drag_Drop(e) 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("Undefined pattern '" & content & "' in windream-Search Config. Please inform Your system-administrator.", MsgBoxStyle.Exclamation) LOGGER.Warn("Undefined Search-pattern in windream-search config: " & content) End Select End Function 'Private Sub AxObjectListControl_ItemClicked(sender As Object, e As EventArgs) Handles AxObjectListControl.ItemClicked ' CheckDocView() 'End Sub Sub Clear_Windream_ResultList() Try Dim sw As New SW("Clear_Windream_ResultList") 'AxObjectListControl.RemoveAllColumnHeader() 'Me.AxObjectListControl.ClearResultList() Dim stg As String = "Dateien" If USER_LANGUAGE <> "de-DE" Then stg = "files" End If TabWindream.Text = stg sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Clear Result List: ", ex.Message) End Try 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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in ShowDocView: ", ex.Message) End Try End Sub Sub CloseWDDocview() Try If DocView Is Nothing = False Then DocView.CloseView(OpenedFileString, 0) End If Catch ex As Exception LOGGER.Warn(" ### Error in CloseDocView") LOGGER.Warn("### " & 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_Datafor_Entity(True) 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_Datafor_Entity(True) 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_Datafor_Entity(True) 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 MYDB_ECM.ExecuteNonQuery(upd) = True Then ' VIEW_ID Override zurücksetzen!! VIEW_ID_RUNTIME = -1 MsgBox("Standard-View was saved successfully!", MsgBoxStyle.Information) End If End Sub Private Sub ButtonResetView_Click(sender As Object, e As EventArgs) Handles ButtonResetView.Click Reset_View_layout() End Sub Sub Reset_View_layout() Try Dim XMLPath = Get_DocGrid_Layout_Filename() If File.Exists(XMLPath) Then Me.Cursor = Cursors.WaitCursor File.Delete(XMLPath) GridControlDocSearch.DataSource = Nothing GridViewDoc_Search.Columns.Clear() RUN_WDSEARCH_GRID(True) Else MsgBox("Set back of Layout not successfull - File not existing!", MsgBoxStyle.Information) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Reset Layout DocGrid: ", ex.Message) End Try Me.Cursor = Cursors.Default End Sub Private Sub AnsichtZurücksetzenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_ResetView.Click ' TODO: Ansicht zurücksetzen Reset_View_layout() 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, "") If TCDetails.SelectedTabPage.Name = "XtraTabPageVariant" Then XtraTabPageVariant_Open() End If Select Case TCDetails.SelectedTabPage.Name Case "TabDetails" If NODE_NAVIGATION = False Then Column_Row_Handler(RECORD_ID, False, True) End If '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 If DOC_SEARCH_TAB1 = True Then BACKGROUND_HELPER.PictureAlignment = ContentAlignment.BottomRight End If Case "TabWindream" 'Dateien BACKGROUND_HELPER.PictureAlignment = ContentAlignment.BottomRight If RECORD_ID = 0 Then Exit Sub Else RUN_WDSEARCH_GRID(True) End If Load_DocGrid_Layout() Case "TabFollowUp" Refresh_FollowUps() dtpFollowUp.Enabled = False lblWiedervorlage_Control.Text = "<< Waiting for Selection:" Case "TabPageVariant" Load_Variants() Case "TabPos" Dim stg As String If POS_ENABLED = True Then tslblPoslocked.Visible = False BindingNavigatorAddNewItem.Enabled = True BindingNavigatorDeleteItem.Enabled = True tsbtnWork.Enabled = True grvwGridPos.OptionsBehavior.ReadOnly = False If USER_LANGUAGE = "de-DE" Then stg = "Bearbeiten beenden" Else stg = "End Working" End If Else If USER_LANGUAGE = "de-DE" Then stg = "Positionen bearbeiten" Else stg = "Edit positions" End If tslblPoslocked.Visible = True BindingNavigatorAddNewItem.Enabled = False BindingNavigatorDeleteItem.Enabled = False tsbtnWork.Enabled = False grvwGridPos.OptionsBehavior.ReadOnly = True End If Me.tsbtnWork.Text = stg Load_Pos_Data() Load_POSGrid_Layout() End Select End Sub Sub XtraTabPageVariant_Open() Try Catch ex As Exception End Try 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 ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Refresh_FollowUps: ", ex.Message) 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) Try If ClassDragDrop.Drop_File(e) = False Then Exit Sub End If If USER_PERSONIFIED_TEST = True Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "You are using orgFLOW in personified mode! Adding files is not allowed!") Exit Sub End If If WMMOD.SessionLoggedin = False Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Check Your windream-connection and restart orgFLOW afterwards.", "Could not create a windream session!") Exit Sub End If If act_FormViewID <> 0 And (RIGHT_READ_ONLY_DOC = False And GridControlDocSearch.ContextMenuStrip.Name = "ContextMenuStripResultFiles") Or RIGHT_ADD_DOC = True Then Dim sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORMVIEW_ID = " & FORMVIEW_ID Dim count_DT = MYDB_ECM.GetScalarValue(sql) If count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID = 0 Then MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation) Exit Sub ElseIf count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID <> 0 Then sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORM_ID = " & CURRENT_ENTITY_REDUNDANT_ID count_DT = MYDB_ECM.GetScalarValue(sql) If count_DT = 0 Then MsgBox("No documenttypes for this entity configured! Indexing is not possible!" & vbNewLine & "Please check the configuration!", MsgBoxStyle.Exclamation) Exit Sub End If End If If RECORD_CHANGED = True Then If Save_Record() = False Then Exit Sub End If End If CURRENT_CONTROL_DOCTYPE_MATCH = 0 If CONTROL_DOCTYPE_MATCH <> 0 Then Try CURRENT_CONTROL_DOCTYPE_MATCH = "" CURRENT_CONTROL_DOCTYPE_MATCH = ClassControlValues.GetControlValuesREC_CONTROL(RECORD_ID, CONTROL_DOCTYPE_MATCH) Catch ex As Exception CURRENT_CONTROL_DOCTYPE_MATCH = 0 CURRENT_CONTROL_DOCTYPE_MATCH = "" End Try End If CURRENT_RECORD_ID = RECORD_ID CURRENT_ENTITY_ID = ENTITY_ID DROPPED_CHECKED = False If e.Data.GetDataPresent(DataFormats.StringFormat) Then Dim Wert As String = CType(e.Data.GetData(DataFormats.StringFormat), Object) Console.WriteLine("DragDrop-Wert: " & Wert) If Wert.Contains("SCAN") Then Dim split() = Wert.Split(";") If IsNumeric(split(1)) Then CURRENT_FILEID = split(1) CURRENT_PARENT_ENTITY_ID = PARENT_ENTITYID CURRENT_FORMVIEW_ID = FORMVIEW_ID ClassHelper.Create_USER_FILE_TABLE() If Not IsNothing(CURRENT_TBPMO_FILES_USER) Then If CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then frmWM_IndexFile.ShowDialog() End If End If 'RUN_WD_SEARCH(WD_Suche, "RECORD") End If ElseIf (e.Data.GetDataPresent("FileGroupDescriptor")) AndAlso (e.Data.GetDataPresent("FileContents")) Then If ClassDragDrop.Drop_File(e) = True Then Check_Dropped_Files() End If ElseIf e.Data.GetDataPresent("FileGroupDescriptor") Then If ClassDragDrop.Drop_File(e) = True Then Check_Dropped_Files() End If End If Else If ClassDragDrop.Drop_File(e) = True Then Check_Dropped_Files() End If End If 'Nur wenn neue Dateien abgelegt wurden muss die Prozedur zur aktualisierung der windream Dateien ausgeführt werden...ansonsten muss nichts passieren If NEW_FILES_ADDED = True Then Me.Cursor = Cursors.WaitCursor RUN_WDSEARCH_GRID(True) TimerClearResultfiles.Start() Else LOGGER.Debug("No new files were added or windream tab is not focused!") End If Me.Cursor = Cursors.Default Else 'If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then ' LOGGER.Warn("RIGHT_RECORD_AND_FILE_READ_ONLY is set! No DragDrop allowed") 'End If If RIGHT_READ_ONLY_DOC = True Then LOGGER.Warn("RIGHT_WD_FORBIDDEN is set! No DragDrop allowed") Else LOGGER.Warn("No DragDrop allowed - ELSE") End If End If Catch ex As Exception LOGGER.Warn("Unexpected Error in Drag_Drop: " & ex.Message) MsgBox("Unexpected Error in DragDrop - Please check the log for further information!", MsgBoxStyle.Exclamation) Finally End Try End Sub Private DROPPED_CHECKED As Boolean = False Sub Check_Dropped_Files() Try NEW_FILES_ADDED = False If RECORD_CHANGED = True Then If Save_Record() = False Then Exit Sub End If End If If RECORD_ID = 0 Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Input missing: ", "Please choose a record.") Exit Sub End If If DROPPED_CHECKED = False Then 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 LOGGER.Info("Check_Dropped_Files:" & Str.ToString) Dim CURRENT_WORKFILE = Str.Substring(Str.LastIndexOf("@") + 1) If CURRENT_WORKFILE.ToString.Contains("@") Then MsgBox("File contains invalid operator @!" & vbNewLine & "Please rename file and try again!", MsgBoxStyle.Exclamation) Continue For End If If CURRENT_WORKFILE.ToString.Contains("'") Then MsgBox("File contains invalid operator '!" & vbNewLine & "Please rename file and try again!", MsgBoxStyle.Exclamation) Continue For End If If ClassHelper.Insert_USER_File(CURRENT_WORKFILE, DropType) = False Then Exit Sub End If End If End If Next DROPPED_CHECKED = True End If Dim sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORMVIEW_ID = " & FORMVIEW_ID Dim count_DT = MYDB_ECM.GetScalarValue(sql) If count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID = 0 Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Configuration missing: ", "No documenttypes for this entity (" & FORMVIEW_ID.ToString & ") configured! Indexing is not possible! Please check the configuration.") Exit Sub ElseIf count_DT = 0 And CURRENT_ENTITY_REDUNDANT_ID <> 0 Then sql = "select count(*) from VWPMO_DOKUMENTTYPES where FORM_ID = " & CURRENT_ENTITY_REDUNDANT_ID count_DT = MYDB_ECM.GetScalarValue(sql) If count_DT = 0 Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Configuration missing: ", "No documenttypes for the redundant entity (" & CURRENT_ENTITY_REDUNDANT_ID.ToString & ") configured! Indexing is not possible! Please check the configuration.") Exit Sub End If End If ClassHelper.Create_USER_FILE_TABLE() If Not IsNothing(CURRENT_TBPMO_FILES_USER) Then If CURRENT_TBPMO_FILES_USER.Rows.Count > 0 Then For Each Filerow As DataRow In CURRENT_TBPMO_FILES_USER.Rows If CBool(Filerow.Item("WORKED")) = False Then 'Dim datei = Str.ToString.Replace("@DROPFROMFSYSTEM@", "") CURRENT_FILEID = Filerow.Item("GUID") CURRENT_PARENT_ENTITY_ID = PARENT_ENTITYID CURRENT_RECORD_ID = RECORD_ID CURRENT_ENTITY_ID = ENTITY_ID CURRENT_FORMVIEW_ID = FORMVIEW_ID frmWM_IndexFile.ShowDialog() Else End If Next End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Check_Dropped_Files: ", ex.Message) 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 Private Sub GridControlDocSearch_DragEnter(sender As Object, e As DragEventArgs) Handles GridControlDocSearch.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 = ClassHelper.Convert_Date(Now, CURRENT_DATE_FORMAT) End If FOLL_UP_RECORD_DEFINED = True Try dtpFollowUp.Value = ClassHelper.Convert_Date(datevalue, CURRENT_DATE_FORMAT) Catch ex As Exception dtpFollowUp.Value = ClassHelper.Convert_Date(Now, CURRENT_DATE_FORMAT) End Try Else dtpFollowUp.Value = ClassHelper.Convert_Date(Now, CURRENT_DATE_FORMAT) FOLL_UP_RECORD_DEFINED = False End If Dim caption = MYDB_ECM.GetScalarValue("SELECT COL_NAME FROM TBPMO_CONTROL WHERE GUID = " & DR.Item("DEPENDENT_DATE_CTRL_ID")) 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 = MYDB_ECM.GetScalarValue(SQL) If ctrl_screen_id > 0 Then SQL = String.Format("SELECT CAPTION FROM TBPMO_CONTROL_LANGUAGE WHERE CONTROL_SCREEN_ID = {0} AND LANGUAGE_TYPE = '{1}'", ctrl_screen_id, USER_LANGUAGE) Dim captionCheck = MYDB_ECM.GetScalarValue(SQL) 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 = MYDB_ECM.GetDatatable(sql) ListBoxUser2Profile.DataSource = DT ListBoxUser2Profile.DisplayMember = DT.Columns(1).ColumnName ListBoxUser2Profile.ValueMember = DT.Columns(0).ColumnName Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Load Follow Up User: ", ex.Message) End Try End Sub Private Sub dtpWV_ValueChanged(sender As Object, e As EventArgs) Handles dtpFollowUp.ValueChanged If ENTITY_LOADING_PROCESS = False = False Then Exit Sub End If If ClassControlCommandsUI.UpdateControlValue(FOLL_UP_DATE_CTRL_ID, RECORD_ID, dtpFollowUp.Value, CURRENT_ENTITY_ID) = 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_LOADING_PROCESS = False Then Exit Sub End If If ClassControlCommandsUI.UpdateControlValue(FOLL_UP_DONE_CTRL_ID, RECORD_ID, chkFollowUp.Checked.ToString, CURRENT_ENTITY_ID) = 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 sw As New SW("Check_FOLLOWUP_IsConfigured") 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 = MYDB_ECM.GetDatatable(sql) If DT_FU_ENTITY.Rows.Count > 0 Then 'Die Userauswahl füllen Dim DTUser As DataTable = MYDB_ECM.GetDatatable("select T.guid, T.username from TBDD_USER t INNER JOIN TBDD_USER_MODULES T1 ON T.GUID = T1.USER_ID INNER JOIN TBDD_MODULES T2 ON T1.MODULE_ID = T2.GUID WHERE T2.SHORT_NAME = 'ADDI' AND T.EMAIL IS NOT NULL 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 sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Check Follow Up: ", ex.Message) 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_ENTITY_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 ClassJumpRecord.JumpToRecord(2, RECORD_ID) JUMP_RECORD_ID = 0 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 Dim query = From table In CURRENT_VWPMO_WF_ACTIVE.AsEnumerable() Select table Where table.Item("ENTITY_ID") = ENTITY_ID Dim Entity_rows = query.ToList() If Entity_rows.Count > 0 Then If _MANUAL_WORKFLOW = True Then bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Always End If bsitmWFState.Visibility = DevExpress.XtraBars.BarItemVisibility.Always Else bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bsitmWFState.Visibility = DevExpress.XtraBars.BarItemVisibility.Never End If tsButtonShowTaskOverview.Visible = False For Each _row In Entity_rows If _row.Item("RECORD_ID") = RECORD_ID Then tsButtonShowTaskOverview.Visible = True CURRENT_TASK_ID = _row.Item("WF_TASK_ID") Dim text = "Task: " & _row.Item("WF_TITLE") text += " - " & _row.Item("STATE_TITLE") text += " - " & _row.Item("DUE_DATE") bsitmWFState.Caption = text 'Direkten Zugriff auf RecordView Workflow erlauben Dim Colorstring = _row.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 bsitmWFState.ItemAppearance.Normal.BackColor = ColorTranslator.FromWin32(CInt(Colorstring)) Select Case bsitmWFState.ItemAppearance.Normal.BackColor Case Color.Red bsitmWFState.ItemAppearance.Normal.ForeColor = Color.White End Select Else bsitmWFState.ItemAppearance.Normal.BackColor = Color.Transparent End If End If Next Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Show act WFTask: ", ex.Message) End Try End Sub #End Region Private Sub ResetEbenenAuswahlToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ResetEbenenAuswahlToolStripMenuItem.Click ACT_EBENE = 0 CURRENT_ACT_LEVEL = 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() 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 = ClassNodeNavigation.Return_ENTITY_FOR_TAG(SelectedNode.Tag) If FormId > 0 Then CURRENT_ENTITY_ID = FormId OpenFormLevelDesigner() End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error inOpen Designer: ", ex.Message) 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 Dim oOptions As XlsxExportOptionsEx = New XlsxExportOptionsEx oOptions.ShowGridLines = True oOptions.AllowSortingAndFiltering = DevExpress.Utils.DefaultBoolean.True oOptions.ExportType = DevExpress.Export.ExportType.DataAware oOptions.ExportMode = XlsxExportMode.SingleFile oOptions.AllowFixedColumnHeaderPanel = DevExpress.Utils.DefaultBoolean.True GridControlMain.MainView.ExportToXlsx(saveFileDialog1.FileName, oOptions) Dim result As MsgBoxResult Dim msg = String.Format("Datei wurde erstellt! Wollen Sie diese nun öffnen?") If USER_LANGUAGE <> "de-DE" Then msg = String.Format("File was created. Do You want to open excel?") End If result = MessageBox.Show(msg, "Exporting result:", 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 If ERROR_FORM_LOAD = True Then Me.Close() End If Dim sw As New SW("Form_Shown") Me.BringToFront() Load_Tree_View() ' LoadLayouts() Jump_Record() If NODE_NAVIGATION = False Then Load_Level1() End If sw.Done() FORM_SHOWN = True End Sub Sub Jump_Record() Try Dim sw As New SW("Jump_Record") If JUMP_RECORD_ID > 0 Then Dim sql = String.Format("SELECT FORM_ID FROM TBPMO_RECORD WHERE GUID = {0}", JUMP_RECORD_ID) Dim FormID = MYDB_ECM.GetScalarValue(sql) If FormID > 0 Then Dim n As TreeNode For Each n In TreeViewMain.Nodes CheckNode(n, FormID) Next End If End If ' wurde nicht zurückgesetzt, also ' wurde der record nicht gefunden If JUMP_RECORD_ID <> 0 Then ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Jump Record: ", "Record-ID " & JUMP_RECORD_ID & " konnte nicht gefunden werden") End If sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Jump-Record: ", ex.Message) End Try End Sub Private Sub CheckNode(ByVal n As TreeNode, FormID As Integer) Dim aNode As TreeNode If CInt(ClassNodeNavigation.Return_ENTITY_FOR_TAG(n.Tag)) = FormID Then 'Gefunden also selektieren TreeViewMain.SelectedNode = n 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 LocateRecordinGridById(JUMP_RECORD_ID) ' Jump Record-ID wieder zurücksetzen JUMP_RECORD_ID = 0 Exit Sub End If For Each aNode In n.Nodes If CInt(ClassNodeNavigation.Return_ENTITY_FOR_TAG(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 LocateRecordinGridById(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 LocateRecordinGridById(RecordId As Integer) Dim sw As New SW("LocateRecordinGridById") 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 sw.Done() 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 = MYDB_ECM.GetScalarValue("SELECT ENTITY_ID FROM VWPMO_TEMPLATE_ENTITY WHERE TEMPLATE_ID = " & TemplateID) Dim REC_ENTITY_ID = MYDB_ECM.GetScalarValue("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_WDSEARCH_GRID(True) ' RUN_WD_SEARCH(WD_Suche, "RECORD") Update_Status_Label(True, "Template file imported to windream", EditState.Insert) End If Cursor = Cursors.Default Else Dim msg = "Bitte wählen Sie nochmal einen Datensatz aus." If USER_LANGUAGE <> "de-DE" Then msg = "Please choose a record again." End If MsgBox(msg, MsgBoxStyle.Exclamation) End If End If Else Dim msg = "Bitte wählen Sie zuerst einen Datensatz aus." If USER_LANGUAGE <> "de-DE" Then msg = "Please choose a record first." End If MsgBox(msg, MsgBoxStyle.Exclamation) End If End Sub Sub Load_Level1() Try Dim sw As New SW("Load_Level1.0") ' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS Dim result = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable() Select form Order By form.Item("SEQUENCE") Where form.Item("PARENT_ID") = 0 sw.Done() sw = New SW("Load_Level1.1") If result.Count >= 1 Then Dim tn As TreeNode = TreeViewMain.Nodes(0) TreeViewMain.SelectedNode = tn TreeViewMain.Select() End If sw.Done() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Load_Level1: ", ex.Message) 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 DevExpress.XtraGrid.Views.Base.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 = MYDB_ECM.GetScalarValue(sql) 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 = MYDB_ECM.GetScalarValue(sql) If IsNothing(POS_RECORD_ID) Or IsDBNull(POS_RECORD_ID) Then Dim recordId = ClassRecordCommands.CreateRecordProcedure(POS_ENTITY) If recordId > 0 Then 'Die neue Record-ID setzen POS_RECORD_ID = recordId 'ClassProxy.PRPROXY_RECORD_UPD_INS(POS_ENTITY, POS_RECORD_ID) If ClassRecordCommands.ConnectRecord(PARENT_RECORDID, POS_RECORD_ID, "POS_LINK for Entity " & POS_ENTITY.ToString) = True Then 'ClassProxy.PRPROXY_RECORD_CONNECT(PARENT_RECORDID, POS_RECORD_ID) End If Else MsgBox("Unexpected Error in Creating POS", MsgBoxStyle.Exclamation) End If End If ' Wenn cId = 0, existiert noch kein wert für diese controlId/FormId Kombination If cId = 0 Then ClassControlCommandsUI.CreateControlProcedure(controlid, POS_RECORD_ID, e.Value, POS_ENTITY) Update_Status_Label(True, "Value was added!", EditState.Insert) Else ClassControlCommandsUI.UpdateControlValue(controlid, POS_RECORD_ID, e.Value, POS_ENTITY) Update_Status_Label(True, "Value was updated!", EditState.Update) End If Else Update_Status_Label(False) End If Load_Pos_Data() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in grvwGridPos_CellValueChanged: ", ex.Message) End Try End Sub Private Sub grvwGridPos_FocusedRowChanged(sender As Object, e As FocusedRowChangedEventArgs) Handles grvwGridPos.FocusedRowChanged Pos_COLROW_Changer() End Sub Sub Pos_COLROW_Changer() 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 End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in grvwGridPos_FocusedRowChanged: ", ex.Message) 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 = -1 Then Exit Sub End If 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 = -1 Then IsFilterMode = True Exit Sub End If If e.RowHandle = DevExpress.XtraGrid.GridControl.AutoFilterRowHandle Then IsFilterMode = True e.Appearance.BackColor = Color.Orange Else If GRID_TYPE = GridType.Grid Then IsFilterMode = False Try Dim rowCellValue = grvwGrid.GetRowCellValue(e.RowHandle, "ROW_COLOR") If rowCellValue <> "" Then Dim ColorRow As Color Try ColorRow = Color.FromName(rowCellValue) LOGGER.Debug("RowBackColor '" & rowCellValue & "' will be used for record: " & Get_Focused_Row_Cell_Value("Record-ID")) Catch ex As Exception LOGGER.Info("RowBackColor '" & rowCellValue & "'could not be converted from name!") Exit Sub End Try 'Dim c As Color = DirectCast(rowCellValue, Color) e.Appearance.BackColor = ColorRow e.HighPriority = True End If Catch ex As Exception LOGGER.Warn("Unexpected Error in RowStyle: " & ex.Message) End Try End If End If End Sub Private Sub grvwGrid_MouseDown(sender As Object, e As MouseEventArgs) Handles grvwGrid.MouseDown, grvwTiles.MouseDown, grvwCarousel.MouseDown Try Dim view As BaseView = CType(sender, BaseView) If e.Button = System.Windows.Forms.MouseButtons.Right Then GRIDRightMouse_Clicked = True Else GRIDRightMouse_Clicked = False End If Dim hitInfo As GridHitInfo = view.CalcHitInfo(New Point(e.X, e.Y)) If e.Button = System.Windows.Forms.MouseButtons.Left AndAlso hitInfo.InRow AndAlso hitInfo.HitTest <> GridHitTest.RowIndicator Then GRIDdownHitInfo = hitInfo End If Catch ex As Exception LOGGER.Warn("Unexpected Error in grvwGrid_MouseDown: " & ex.Message) End Try End Sub Private Sub grvwGrid_MouseMove(sender As Object, e As MouseEventArgs) Handles grvwGrid.MouseMove, grvwTiles.MouseMove, grvwCarousel.MouseMove Dim view As BaseView = CType(sender, BaseView) If e.Button = MouseButtons.Left And Not GRIDdownHitInfo Is Nothing Then Dim dragSize As Size = SystemInformation.DragSize Dim dragRect As Rectangle = New Rectangle(New Point(GRIDdownHitInfo.HitPoint.X - dragSize.Width / 2, GRIDdownHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize) If Not dragRect.Contains(New Point(e.X, e.Y)) Then view.GridControl.DoDragDrop(GetDragData(view), DragDropEffects.All) GRIDdownHitInfo = Nothing End If End If End Sub Private Function GetDragData(ByVal view As GridView) As String() Dim selection() As Integer = view.GetSelectedRows() If selection Is Nothing Then Return Nothing End If Dim count As Integer = selection.Length Dim result(count - 1) As String For i As Integer = 0 To count - 1 result(i) = view.GetRowCellDisplayText(selection(i), view.Columns("Record-ID")) Next i Return result End Function 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 & ", '" & USER_USERNAME & "')" If MYDB_ECM.ExecuteNonQuery(ins) = True Then Load_FUUser(FOLL_UP_ID) Update_Status_Label(True, "User added to Follow Up", EditState.Insert) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Add User2FollowUp_Record: ", ex.Message) 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 MYDB_ECM.ExecuteNonQuery(del) = True Then Update_Status_Label(True, "User removed from Follow Up", EditState.Update) Load_FUUser(FOLL_UP_ID) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Delete Userlink FollowUp: ", ex.Message) End Try End If End Sub Sub Show_Verknuepfungen() Dim result As MsgBoxResult Dim msg = "Möchten Sie den Parent-Datensatz für den aktuellen Datensatz wirklich aktualisieren?" If USER_LANGUAGE <> "de-DE" Then msg = "Would You like to change the parent-record?" End If result = MessageBox.Show(msg, "Change parent-record:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result <> MsgBoxResult.Yes Then Exit Sub End If Dim sql sql = "select * from VWPMO_ENTITY_TABLE" & PARENT_ENTITYID.ToString CURRENT_PARENT_DT = MYDB_ECM.GetDatatable(sql) frmChooseParentRecord.ShowDialog() If CURRENT_PARENT_RECORD_ID = 0 Then MsgBox("No Parent-Record selected. Changing Process will be terminated", MsgBoxStyle.Exclamation) Exit Sub End If Dim del = "DELETE FROM TBPMO_RECORD_CONNECT WHERE RECORD2_ID = " & RECORD_ID If MYDB_ECM.ExecuteNonQuery(del) = False Then MsgBox("Error in deleting old Record-Link. Check the logfile", MsgBoxStyle.Exclamation) Exit Sub End If If ClassRecordCommands.ConnectRecord(CURRENT_PARENT_RECORD_ID, RECORD_ID, "ReLInk ENTITY " & ENTITY_ID.ToString) = True Then 'Save_GridViewParentEntityLayout() msg = "Die Parent-Entität wurde erfolgreich aktualisiert!" If USER_LANGUAGE <> "de-DE" Then msg = "The Parent-Record was changed successful!" End If MsgBox(msg, MsgBoxStyle.Information) Load_Entity_Data_Only() End If End Sub Private Sub DatenNeuLadenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DatenNeuLadenToolStripMenuItem.Click Load_Datafor_Entity(True) End Sub Private Sub grvwGrid_ColumnFilterChanged(sender As Object, e As EventArgs) Handles grvwGrid.ColumnFilterChanged SET_ROWCOUNT_STRING() Save_Grid_Layout() End Sub Sub SET_ROWCOUNT_STRING() Dim sw As New SW("SET_ROWCOUNT_STRING") If NODE_NAVIGATION = False Then 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, grvwGrid.RowCount) Else selnode.Text = String.Format("{0} ({1})", selnode.Text, grvwGrid.RowCount) End If End If Dim msg = "Anzahl Datensätze: " If USER_LANGUAGE <> "de-DE" Then msg = "number of records: " End If bStaticItem1.Caption = msg & grvwGrid.RowCount sw.Done() End Sub Public Sub New() ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub 'Private Sub AxObjectListControl_CausesValidationChanged(sender As Object, e As EventArgs) Handles AxObjectListControl.CausesValidationChanged ' Console.WriteLine("CausesValidationChanged") 'End Sub 'Private Sub AxObjectListControl_SettingFlagChanged(sender As Object, e As EventArgs) Handles AxObjectListControl.SettingFlagChanged ' Console.WriteLine("SettingFlagChanged") 'End Sub 'Private Sub AxObjectListControl_Validated(sender As Object, e As EventArgs) Handles AxObjectListControl.Validated ' Console.WriteLine("Validated") 'End Sub Private Sub tslblLocked_VisibleChanged(sender As Object, e As EventArgs) Handles tslblLocked.VisibleChanged If tslblLocked.Visible = True Then Dim msg = "Datensatz - Nur lesenden Zugriff" If USER_LANGUAGE <> "de-DE" Then msg = "Record is read only" End If tslblLocked.Text = msg End If End Sub Private Sub tsmi_RecordDelete_Click(sender As Object, e As EventArgs) Handles tsmi_RecordDelete.Click Delete_Record() End Sub Private Sub KopierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_Copy.Click If ClassDocGrid.SELECTED_DOC_PATH <> "" Then Try Dim selectedfile(0) As String selectedfile(0) = ClassDocGrid.SELECTED_DOC_PATH selectedfile(0) = ClassHelper.FORMAT_WM_PATH(ClassDocGrid.SELECTED_DOC_PATH) Dim dataobj As New DataObject dataobj.SetData(DataFormats.FileDrop, True, selectedfile) Clipboard.Clear() Clipboard.SetDataObject(dataobj, True) Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Copy file:", ex.Message) End Try Cursor = Cursors.Default End If End Sub Private Sub GridViewDoc_Search_FocusedColumnChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedColumnChangedEventArgs) Handles GridViewDoc_Search.FocusedColumnChanged ClassDocGrid.GetDocItems(GridViewDoc_Search) Refresh_DocID() End Sub Private Sub GridViewDoc_Search_FocusedRowChanged(sender As Object, e As FocusedRowChangedEventArgs) Handles GridViewDoc_Search.FocusedRowChanged ClassDocGrid.GetDocItems(GridViewDoc_Search) Refresh_DocID() End Sub Sub Refresh_DocID() If ClassDocGrid.SELECTED_DOC_ID <> 0 Then Dim msg = "Doc-ID: " & ClassDocGrid.SELECTED_DOC_ID.ToString bsitmDocID.Caption = msg tslblDocIDTab1.Text = msg Else bsitmDocID.Caption = "DocRow not selected" tslblDocIDTab1.Text = "DocRow not selected" End If End Sub Private Sub GridViewDoc_Search_MasterRowExpanded(sender As Object, e As CustomMasterRowEventArgs) Handles GridViewDoc_Search.MasterRowExpanded Refresh_DocID() End Sub Private Sub GridViewDoc_Search_MasterRowExpanding(sender As Object, e As MasterRowCanExpandEventArgs) Handles GridViewDoc_Search.MasterRowExpanding Refresh_DocID() End Sub Private Sub LöschenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_RemoveLink.Click If RECORD_ID = 0 Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Missing Selection:", "Please select a record!") Exit Sub End If If IsNothing(ClassDocGrid.DT_RESULTFILES) Then Exit Sub End If If ClassDocGrid.DT_RESULTFILES.Rows.Count > 0 Then Dim msg = "Wollen Sie die Verknüpfung der gewählten Datei/en wirklich entfernen?" & vbNewLine & "Datei/en bleibt/bleiben im DMS/Archiv/Explorer erhalten!" If USER_LANGUAGE <> "de-DE" Then msg = "Would You like to delete only the references?" & vbNewLine & "File(s) will stay in ECM/Archive/Explorer!" End If Dim result As MsgBoxResult result = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Try For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows If ClassFileResult.Delete_ResultFile(row.Item("DOC_ID"), RECORD_ID, 0) = True Then ClassHelper.InsertEssential_Log(row.Item("DOC_ID"), "DOC-ID", "RECORD LINK REMOVED FROM DOC-SEARCH") Cursor = Cursors.WaitCursor RUN_WDSEARCH_GRID(True) End If Next Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Removing links from file:", ex.Message) End Try End If End If End Sub Private Sub EigenschaftenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_PropertiesFile.Click Show_File_Properties() End Sub Sub Show_File_Properties() If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters(4)!", MsgBoxStyle.Exclamation) Exit Sub End If For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows If row.Item("DOC_PATH") <> "" Then Dim oFileFullPath = ClassHelper.FORMAT_WM_PATH(row.Item("DOC_PATH")) Cursor = Cursors.WaitCursor Dim sei As New SHELLEXECUTEINFO sei.cbSize = Marshal.SizeOf(sei) sei.lpVerb = "properties" sei.lpFile = oFileFullPath sei.nShow = SW_SHOW sei.fMask = SEE_MASK_INVOKEIDLIST If Not ShellExecuteEx(sei) Then Dim ex As New System.ComponentModel.Win32Exception(System.Runtime.InteropServices.Marshal.GetLastWin32Error()) ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Open file propertys:", ex.Message) End If End If Cursor = Cursors.Default Next End Sub Private Sub DateiÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_Open.Click Open_File() End Sub Private Sub GridControlDocSearch_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch.DoubleClick Open_File() End Sub Private Sub TabWindream_Leave(sender As Object, e As EventArgs) Handles TabWindream.Leave Save_DocGrid_Layout() End Sub Private Sub GridControlDocSearch_DragDrop(sender As Object, e As DragEventArgs) Handles GridControlDocSearch.DragDrop Drag_Drop(e) End Sub Private Sub tslblFileslocked_VisibleChanged(sender As Object, e As EventArgs) Handles tslblFileslocked.VisibleChanged If tslblFileslocked.Visible = True Then Dim msg = "Dateizugriffsrechte eingeschränkt" If USER_LANGUAGE <> "de-DE" Then msg = "File-accessrights limited" End If tslblFileslocked.Text = msg End If End Sub Private Sub tsButtonCancel_Click(sender As Object, e As EventArgs) Handles tsButtonCancel.Click If CtrlCommandUI.IsInsert = True Then If ClassHelper.DeleteRecord(SELECTED_RECORD_ID, "DELETE DURING INSERT(Hit Cancel)") = False Then Dim msg = "Der Datensatz '" & SELECTED_RECORD_ID & "' konnte nicht gelöscht werden. Überprüfen Sie das log" If USER_LANGUAGE <> "de-DE" Then msg = "The record '" & SELECTED_RECORD_ID & "' could not be deleted. Check the log" End If MsgBox(msg, MsgBoxStyle.Exclamation) End If End If tsButtonCancel.Visible = False If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If CtrlCommandUI.IsInsert = False INSERT_IN_ACTION = False RECORD_CHANGED = False ' Den derzeitigen Record Neuladen Column_Row_Handler("tsButtonCancel_Click") End Sub Private Sub tsbtnRedo_Click(sender As Object, e As EventArgs) Handles tsbtnRedo.Click Me.Cursor = Cursors.WaitCursor Dim proc = String.Format("EXEC PRPMO_REDO_RECORD_CHANGES {0}", RECORD_ID) If MYDB_ECM.ExecuteNonQuery(proc) = True Then RECORD_ID = 0 Column_Row_Handler("tsbtnRedo_Click") Me.Cursor = Cursors.Default End If End Sub #Region "TrySave Funktionen" Public Function TrySave_RequiredControlsFilled() As Boolean Dim missingValues As New List(Of String) missingValues = ClassControlValues.CheckRequiredControlValues(CtrlBuilder.MasterPanel.Controls) If missingValues.Count > 0 Then Dim RequiredControlNames = String.Join(vbNewLine, missingValues) If (USER_LANGUAGE = "de-DE") Then Dim message = String.Format("Die folgenden Steuerelemente müssen ausgefüllt sein: {0}{1}", vbNewLine, RequiredControlNames) MessageBox.Show(message, "Muss-Felder ausfüllen", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Else Dim message = String.Format("The following controls must be filled with values: {0}{1}", vbNewLine, RequiredControlNames) MessageBox.Show(message, "Fill Required Controls", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If Focus_Control(missingValues.First()) ' Muss-Felder sind noch nicht ausgefüllt worden Return False Else ' Muss-Felder sind alle ausgefüllt Return True End If End Function ''' ''' Überprüft beim manuellen Speichern, ob Datensatz verändert wurde und ''' ob alle Muss-Felder ausgefüllt wurden ''' ''' ''' Gibt False zurück, wenn nicht alle Muss-Felder gefüllt wurde, ''' ansonsten True ''' Public Function TrySave_User() As Boolean Try 'EDIT_STATE = EditState.None 'Update_Status_Label(False) Dim RequiredControlsFilled As Boolean = TrySave_RequiredControlsFilled() If RECORD_CHANGED = False And RequiredControlsFilled = True Then ' Datensatz wurde nicht verändert Return True Else If RequiredControlsFilled = False Then Return False End If End If If RequiredControlsFilled = True Then TrySave_DoSave() Return True Else Return False End If Catch ex As Exception MessageBox.Show("Error in TrySave_User: " & vbNewLine & ex.Message) Return False End Try End Function Public Sub TrySave_DoSave() ERROR_WHILE_SAVING = False ' Record Speichern Dim ResultMessage = CtrlCommandUI.SaveRecord(SELECTED_RECORD_ID, ENTITY_ID) If ResultMessage <> "ERROR" Then ' Status anzeigen Update_Status_Label(True, ResultMessage) Else ERROR_WHILE_SAVING = True End If 'Jetzt die für die Entität notwendigen Prroceduren ausführen Customer_Run_Procedures() ' RECORD_CHANGED zurücksetzen RECORD_CHANGED = False 'Liste der geänderten Control Values leeren CtrlBuilder.ControlsChanged.Clear() End Sub ''' ''' Fragt den Benutzer beim Datensatzwechsel, ob Änderungen gespeichert werden sollen. Gibt False zurück, wenn Mussfelder ausgefüllt werden müssen, ansonsten True. ''' Public Function TrySave_Automatic() As Boolean Try EDIT_STATE = EditState.None 'Update_Status_Label(False) If RECORD_CHANGED = True Then Dim ShouldSave As DialogResult If USER_LANGUAGE = "de-DE" Then ShouldSave = MessageBox.Show("Sie haben ungespeicherte Änderungen. Wollen Sie diese speichern?", "Ungespeicherte Änderungen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) Else ShouldSave = MessageBox.Show("There are unsaved changes. Would You like to save?", "Unsaved changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) End If ' Änderungen sollen gespeichert werden If ShouldSave = DialogResult.Yes Then If CtrlCommandUI.IsInsert Then EDIT_STATE = EditState.None End If Dim RequiredControlsFilled As Boolean = TrySave_RequiredControlsFilled() If RequiredControlsFilled = True Then ' Änderungen sollen gespeichert werden, ' Muss-Felder sind alle ausgefüllt TrySave_DoSave() ' Hinzufügen Button wieder aktivieren If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If If CtrlCommandUI.IsInsert Then Lock_RecordControls(True) End If Return True Else ' Änderungen sollen gespeichert werden, ' aber Muss-Felder sind noch nicht ausgefüllt worden Return False End If Else ' Änderungen sollen nicht gespeichert werden ' Angelegten Record löschen If CtrlCommandUI.IsInsert Then If ClassHelper.DeleteRecord(SELECTED_RECORD_ID, "TrySave - UserdecidedNotToSave - ENTITY-ID: " & CURRENT_ENTITY_ID) = True Then CtrlCommandUI.IsInsert = False INSERT_IN_ACTION = False End If End If ' Änderungen sollen nicht gespeichert werden RECORD_CHANGED = False tsButtonCancel.Visible = False ' Hinzufügen Button wieder aktivieren If ADD_RECORDS_CONSTR = False Then tsButtonAdd.Enabled = False Else tsButtonAdd.Enabled = True End If Return True End If Else ' Datensatz wurde nicht verändert Return True End If Catch ex As Exception MessageBox.Show("Error in TrySave_Automatic: " & vbNewLine & ex.Message) Return False End Try End Function #End Region Private Sub SucheAnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SucheAnzeigenToolStripMenuItem.Click grvwGrid.ShowFindPanel() grvwGrid.FindFilterText = "" End Sub Private Sub MassenänderungToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles tsmiMassChanges.Click Try Dim list As New ArrayList Dim collist As New ArrayList For i = 0 To grvwGrid.RowCount Dim recid = grvwGrid.GetRowCellValue(i, "Record-ID") If Not IsNothing(recid) Then list.Add(recid) End If Next For Each col As DevExpress.XtraGrid.Columns.GridColumn In grvwGrid.VisibleColumns Dim name = col.Name If name.StartsWith("col") Then name = name.Substring(3) End If collist.Add(name) Next MASS_COLUMN_LIST = collist MASS_RECORD_IDs2CHANGE = list CURRENT_ENTITY_ID = ENTITY_ID Save_Grid_Layout() frmMass_Change.ShowDialog() If SUCCESSFULL = True Then Cursor = Cursors.WaitCursor Load_Datafor_Entity(True) Cursor = Cursors.Default End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in MassChange Collector:", ex.Message) End Try End Sub Private Sub GridViewDoc_Search_ColumnWidthChanged(sender As Object, e As ColumnEventArgs) Handles GridViewDoc_Search.ColumnWidthChanged Save_DocGrid_Layout() End Sub Private Sub UmbenennenToolStripMenuItem_MouseHover(sender As Object, e As EventArgs) Display_Filename() End Sub Sub Display_Filename() Try Dim RENAME_DOC_PATH Try RENAME_DOC_PATH = GridViewDoc_Search.GetFocusedRowCellValue(GridViewDoc_Search.Columns("FULLPATH")) Catch ex As Exception LOGGER.Warn("Attention: Could not set DocVariable RENAME_DOC_PATH: " & ex.Message) RENAME_DOC_PATH = Nothing End Try If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters!", MsgBoxStyle.Exclamation) Exit Sub End If If RENAME_DOC_PATH <> "" Then Dim FileToRename As String FileToRename = Path.GetFileNameWithoutExtension(RENAME_DOC_PATH) CMDoc_TextBoxRenameFile.Text = FileToRename CMDoc_TextBoxRenameFile.Enabled = True Else CMDoc_TextBoxRenameFile.Enabled = False End If Catch ex As Exception MsgBox("Unexpected Error in getting the filename: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub DateiMitDatensatzVerknüpfenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_linkRecord.Click Try ClassDocGrid.GetDocItems(GridViewDoc_Search) If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters (LinkRecord)!", MsgBoxStyle.Exclamation) Exit Sub End If Refresh_Selected_Table() Dim frm As New frmDocRecordLink frm.Show() Catch ex As Exception MsgBox("Unexpected Error in Linking Record: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub DetailAnsichtDatensatzToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DetailAnsichtDatensatzToolStripMenuItem.Click ClassJumpRecord.JumpToRecord(0, RECORD_ID) JUMP_RECORD_ID = 0 End Sub Private Sub GridViewDoc_Search_RowStyle(sender As Object, e As Views.Grid.RowStyleEventArgs) Handles GridViewDoc_Search.RowStyle If e.RowHandle = DevExpress.XtraGrid.GridControl.AutoFilterRowHandle Then e.Appearance.BackColor = Color.Yellow Else If e.RowHandle = -1 Then Exit Sub End If Try Dim rowCellValue = GridViewDoc_Search.GetRowCellValue(e.RowHandle, "in work?") If Not IsNothing(rowCellValue) Then Dim inwork = rowCellValue If inwork = True Then e.Appearance.BackColor = Color.Orchid e.HighPriority = True End If End If Catch ex As Exception LOGGER.Warn("Unexpected Error in Checking Value In Work: " & ex.Message) End Try Try Dim DROPDOWN_VALUE If Not IsNothing(DT_DOCRESULT_DROPDOWN_ITEMS) Then 'Den ColumnTitle aus ConfigTableholen If DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count > 0 Then For Each confrow As DataRow In DT_DOCRESULT_DROPDOWN_ITEMS.Rows Dim CAPTION = confrow.Item("HEADER_CAPTION") DROPDOWN_VALUE = GridViewDoc_Search.GetRowCellValue(e.RowHandle, CAPTION) If Not IsNothing(DROPDOWN_VALUE) Then Exit For End If Next If Not IsNothing(DROPDOWN_VALUE) Then Dim ColorRow As Color Dim expression As String = String.Format("VALUE = '{0}'", DROPDOWN_VALUE) Dim matchingRows() As DataRow = DT_DOCRESULT_DROPDOWN_ITEMS.Select(expression, "SEQUENCE") Dim rowcolorname As String = "" 'Die Color für den value auswählen For Each matchingRow As DataRow In matchingRows rowcolorname = "" If Not IsDBNull(matchingRow.Item("COLOR")) Then rowcolorname = matchingRow.Item("COLOR") End If If rowcolorname <> "" Then Exit For End If Next If rowcolorname <> "" Then ColorRow = Color.FromName(rowcolorname) e.Appearance.BackColor = ColorRow e.HighPriority = True End If 'Dim c As Color = DirectCast(rowCellValue, Color) End If End If End If Catch ex As Exception LOGGER.Warn("Unexpected Error in RowStyle-Color Dropdown: " & ex.Message) End Try End If End Sub Sub ContextMenu_Read() docCM_Open.Enabled = True docCM_Copy.Enabled = False docCM_RenameMain.Enabled = False docCM_InWork.Enabled = False docCM_linkRecord.Enabled = False docCM_Showlinks.Enabled = True docCM_CheckRights.Enabled = False docCM_DeleteFile.Enabled = False docCM_RemoveLink.Enabled = False WindreamToolStripMenuItem.Enabled = False End Sub Sub ContextMenu_Write() docCM_Open.Enabled = True docCM_Copy.Enabled = True docCM_RenameMain.Enabled = True docCM_InWork.Enabled = True docCM_linkRecord.Enabled = True docCM_Showlinks.Enabled = True docCM_CheckRights.Enabled = True docCM_DeleteFile.Enabled = True docCM_RemoveLink.Enabled = True WindreamToolStripMenuItem.Enabled = True End Sub Private Sub ContextMenuStripResultFiles_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStripResultFiles.Opening Try If WMMOD.SessionLoggedin Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Check Your windream-connection and restart orgFLOW afterwards.", "Could not create a windream session!") e.Cancel = True End If Me.Cursor = Cursors.WaitCursor ClassDocGrid.GetDocItems(GridViewDoc_Search) If IsNothing(ClassDocGrid.DT_RESULTFILES) Then e.Cancel = True End If Refresh_DocID() If ClassDocGrid.DT_RESULTFILES.Rows.Count = 1 Then If ClassDocGrid.DT_RESULTFILES.Rows(0).Item("DOC_ID") = 0 Then e.Cancel = True End If End If File_in_Work() Dim Result = ClassDOC_SEARCH.Get_File_Rights(ClassDocGrid.SELECTED_DOC_ID) If Not IsNothing(Result) Then ROW_READ_ONLY = False Select Case Result.ToString Case "R" ContextMenu_Read() Case "RW" ContextMenu_Write() Case "RWA" ContextMenu_Write() Case "" If USER_IS_ADMIN = False Then ContextMenu_Read() Else LOGGER.Warn("FileRight is '' but User is Admin!! - Check the configuration!") End If ROW_READ_ONLY = True End Select CURRENT_FILE_RIGHT = Result.ToString Else ContextMenu_Read() ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Getting rights - check the log") e.Cancel = True End If If ROW_READ_ONLY = False Then If RIGHT_READ_ONLY_DOC = True Then If USER_IS_ADMIN = False Then ContextMenu_Read() Else LOGGER.Warn("RIGHT_READ_ONLY_DOC = True but User is Admin!! - Check the configuration!") End If End If End If If ClassDocGrid.DT_RESULTFILES.Rows.Count = 1 Then If ClassDocGrid.DT_RESULTFILES.Rows(0).Item("DISPLAYNAME") <> "" Then DisplaynameUmbenennenToolStripMenuItem.Visible = True Set_Displayname() Else DisplaynameUmbenennenToolStripMenuItem.Visible = False End If Else DisplaynameUmbenennenToolStripMenuItem.Visible = False End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Opening DocContextMenu: ", ex.Message) e.Cancel = True Finally Me.Cursor = Cursors.Default End Try End Sub Sub File_in_Work() IW_USER = "" IW_COMMENT = "" INWORK_FILE = False docCM_InWork.Enabled = True Try Dim expression As String expression = "DocID = " & ClassDocGrid.SELECTED_DOC_ID Dim foundRowsLevel0() As DataRow ' Use the Select method to find all rows matching the filter. foundRowsLevel0 = CURRENT_DOC_RESULTS.Select(expression) Try Dim oSQLDRList = $"Select COALESCE(IN_WORK_USER,'') IN_WORK_USER, COALESCE(IN_WORK_COMMENT,'') IN_WORK_COMMENT,IN_WORK FROM TBPMO_DOCRESULT_LIST where DocID = {ClassDocGrid.SELECTED_DOC_ID}" Dim oDT As DataTable = MYDB_ECM.GetDatatable(oSQLDRList) If Not IsNothing(oDT) Then If oDT.Rows.Count = 1 Then IW_USER = oDT.Rows(0).Item("IN_WORK_USER") IW_COMMENT = oDT.Rows(0).Item("IN_WORK_COMMENT") INWORK_FILE = CBool(oDT.Rows(0).Item("IN_WORK")) End If End If Catch ex As Exception LOGGER.Error(ex) IW_USER = "" IW_COMMENT = "" End Try Dim displ As String If INWORK_FILE = True Then If IW_USER.ToUpper = USER_USERNAME.ToUpper Or USER_IS_ADMIN Then displ = "Datei wieder freigeben" If USER_LANGUAGE <> "de-DE" Then displ = "Set file free" End If Else displ = "Datei in Bearbeitung (zeige Info)" If USER_LANGUAGE <> "de-DE" Then displ = "File is in work (show details)" End If End If Else displ = "Datei in Bearbeitung nehmen" If USER_LANGUAGE <> "de-DE" Then displ = "Lock file for working" End If End If docCM_InWork.Text = displ Catch ex As Exception LOGGER.Warn("Unexpected Error in File-Work Info: " & ex.Message) docCM_InWork.Enabled = False End Try End Sub Private Sub TSMI_inWork_Click(sender As Object, e As EventArgs) Handles docCM_InWork.Click If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters (3)!", MsgBoxStyle.Exclamation) Exit Sub End If ClassFileResult.DocID = ClassDocGrid.SELECTED_DOC_ID If INWORK_FILE = True Then ' Datei ist in Bearbeitung Dim msglbl As String Dim msg1 As String If IW_USER.ToUpper = USER_USERNAME.ToUpper Or USER_IS_ADMIN Then If ClassFileResult.Set_InWork(0, "") = True Then RUN_WDSEARCH_GRID(True) End If Else msglbl = "In Bearbeitung durch User '" & IW_USER & "' - Kommentar:" msg1 = IW_COMMENT If USER_LANGUAGE <> "de-DE" Then msglbl = "File in Work through User '" & IW_USER & "' - Comment:" End If ClassHelper.MSGBOX_Handler("INFO", "Information file", msglbl, msg1) End If Else frmFileInWork.ShowDialog() ClassDocGrid.SELECTED_INWORK = ClassFileResult.InWork RUN_WDSEARCH_GRID(True) End If End Sub Sub Set_Displayname() Try If ClassDocGrid.DT_RESULTFILES.Rows.Count = 1 Then If ClassDocGrid.DT_RESULTFILES.Rows(0).Item("DISPLAYNAME") <> "" Then CMDoc_TextBoxRenameDisplay.Text = ClassDocGrid.DT_RESULTFILES.Rows(0).Item("DISPLAYNAME") CMDoc_TextBoxRenameDisplay.Enabled = True End If Else CMDoc_TextBoxRenameDisplay.Enabled = False End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Unexpected Error in getting the Displayname: ", ex.Message) End Try End Sub Private Sub TestToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_CheckRights.Click Dim msg = "Die Rechte wurden erfolgreich überprüft und aktualisiert!" CURRENT_RECORD_ID = RECORD_ID If IsNothing(ClassDocGrid.DT_RESULTFILES) Then ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Could not read file Parameters: ", "Could not read file Parameters (6)") Exit Sub End If Dim err As Boolean = False Cursor = Cursors.WaitCursor For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows Dim oWMObject As WINDREAMLib.WMObject Dim oReldocpath = ClassHelper.GetRelPath(row.Item("DOC_PATH")) LOGGER.Info("oReldocpath: " & oReldocpath) oWMObject = WMMOD.GetFileByPath(oReldocpath) If ClassDOC_SEARCH.SET_WD_RIGHTS(oWMObject, row.Item("DOC_ID"), row.Item("DOC_PATH"), True) = True Then Else err = True msg = String.Format("Datei '" & vbNewLine & "{0}'" & vbNewLine & "Bitte prüfen Sie die Logdatei!", row.Item("DOC_PATH")) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("file '" & vbNewLine & "{0}'" & vbNewLine & "Please check the logfile!", row.Item("DOC_PATH")) End If ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error Rights module", "Error while setting rights: (Scroll down) ", msg) End If 'Create Session um Fehler bei windows Session icht zu erzeugen FAU_AD_USER = "" Dim OConnect = WMMOD.SessionReconnect() Next Cursor = Cursors.Default If err = False Then If USER_LANGUAGE <> "de-DE" Then msg = "The rights were successfully renewed!" End If MsgBox(msg, MsgBoxStyle.Information) End If End Sub Public Sub ActivateAllTabs() ' Alle Tabs aktivieren For Each tab As DevExpress.XtraTab.XtraTabPage In TCDetails.TabPages If (tab.Name <> "TabDetails") Then tab.PageEnabled = True End If Next End Sub Public Sub DeactivateTabs() ' Alle Tab Pages außer Detailansicht deaktivieren ' Zur Detailansicht springen For Each tab As DevExpress.XtraTab.XtraTabPage In TCDetails.TabPages If (tab.Name <> "TabDetails") And tab.Name <> "TabWindream" And tab.Name <> "TabPos" Then tab.PageEnabled = False Else TCDetails.SelectedTabPage = tab End If Next End Sub Private Sub TCDetails_SelectedPageChanging(sender As Object, e As DevExpress.XtraTab.TabPageChangingEventArgs) Handles TCDetails.SelectedPageChanging If EDIT_STATE = EditState.Insert Or EDIT_STATE = EditState.Update Then If Save_Record() = False Then e.Cancel = True End If End If End Sub Private Sub ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles docCM_DeleteFile.Click If RECORD_ID = 0 And CURRENT_SEARCH_TYPE <> "ENTITY" Then MsgBox("Please select a record!", MsgBoxStyle.Exclamation) Exit Sub End If If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters (DELETE FILES)!", MsgBoxStyle.Exclamation) Exit Sub End If If ClassDocGrid.DT_RESULTFILES.Rows.Count = 0 Then MsgBox("Please choose a file!", MsgBoxStyle.Exclamation) Exit Sub End If Dim msg = "Sind Sie sicher, dass Sie die Datei(en) endgültig löschen wollen?" If USER_LANGUAGE <> "de-DE" Then msg = "Are You sure You want to permanently delete this file(s)?" End If Dim result1 As MsgBoxResult result1 = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result1 = MsgBoxResult.Yes Then For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows If row.Item("DOC_PATH") <> "" Then Try If Not IsNothing(row.Item("DOC_ID")) Then Dim Count As Integer = MYDB_ECM.GetScalarValue("SELECT COUNT(GUID) FROM TBPMO_DOC_RECORD_LINK WHERE DOC_ID = " & row.Item("DOC_ID")) If Count > 1 And CURRENT_SEARCH_TYPE = "RECORD" Then msg = "Diese Datei ist noch mit anderen Datensätzen verknüpft! Wollen Sie diese Verknüpfungen ebenfalls löschen?" If USER_LANGUAGE <> "de-DE" Then msg = "This file is also linked to other records! Would You like to delete these links also?" End If Dim result2 As MsgBoxResult result2 = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) Dim oDElWMFile As Boolean = False If result2 = MsgBoxResult.Yes Then oDElWMFile = True End If If ClassFileResult.Delete_ResultFile(row.Item("DOC_ID"), RECORD_ID, oDElWMFile) = True Then If oDElWMFile = True Then ClassHelper.InsertEssential_Log(row.Item("DOC_ID"), "DOC-ID", "FILE DELETED BY USER") Else ClassHelper.InsertEssential_Log(row.Item("DOC_ID"), "DOC-ID", "FILE LINK DELETED BY USER") End If End If Else If CURRENT_SEARCH_TYPE = "FULLTEXT" Or CURRENT_SEARCH_TYPE = "ENTITY" Then RECORD_ID = 0 End If If ClassFileResult.Delete_ResultFile(row.Item("DOC_ID"), RECORD_ID, 1) = True Then If WMMOD.RemoveFile(row.Item("DOC_PATH")) = True Then ClassHelper.InsertEssential_Log(row.Item("DOC_ID"), "DOC-ID", "FILE DELETED BY USER") End If Else msg = String.Format("Die Datei {0} konnte nicht gelöscht werden! Prüfen Sie die logfile!", row.Item("DOC_PATH")) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("The file {0} could not be deleted! Check the logfile!", row.Item("DOC_PATH")) End If MsgBox(msg, MsgBoxStyle.Critical, "Attention:") End If End If End If 'If LICENSE_PROXY = True And DD_LIB_Standards.clsDatabase.DB_PROXY_INITIALIZED Then ' Dim proc = String.Format("EXEC PRPROXY_DOC_CHECK_DELETE {0}", row.Item("DOC_ID")) ' MYDB_ECM.ExecuteNonQuery(proc) 'End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in delete file: ", ex.Message) End Try End If Next If CURRENT_SEARCH_TYPE = "ENTITY" Then CURRENT_DT_DOC_ENTITY_SEARCH = Nothing End If RUN_WDSEARCH_GRID(True) End If End Sub Private Sub TreeViewMain_DragDrop(sender As Object, e As DragEventArgs) Handles TreeViewMain.DragDrop Try If Not IsNothing(e.Data) Then Me.Cursor = Cursors.WaitCursor Dim pt As Point Dim DestinationNode As TreeNode pt = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y)) DestinationNode = CType(sender, TreeView).GetNodeAt(pt) Dim node_tag Dim ENTITY_STRING Dim sql If Not IsNothing(DestinationNode) Then node_tag = DestinationNode.Tag If Not IsNumeric(node_tag) Then MsgBox("Could not get a valid Entity!", MsgBoxStyle.Exclamation) Me.Cursor = Cursors.Default Exit Sub End If sql = String.Format("SELECT [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " & "FROM VWPMO_CONSTRUCTOR_FORMS WHERE FORM_ID = {2}", USER_LANGUAGE, CURRENT_SCREEN_ID, node_tag.ToString) ENTITY_STRING = MYDB_ECM.GetScalarValue(sql) sql = String.Format("select count(guid) from TBPMO_CONTROL_ENTITY_LINK where ORIGIN_CTRL_ID in (SELECT GUID FROM TBPMO_CONTROL where FORM_ID = {0}) " & "AND LINKED_CTRL_ID IN (SELECT GUID FROM TBPMO_CONTROL where FORM_ID = {1})", ENTITY_ID, node_tag) Dim count = MYDB_ECM.GetScalarValue(sql) If Not IsNothing(count) Then If count = 0 Then MsgBox("No configuration for changing entity-link!" & vbNewLine & "Please inform Your ADDi-Admin", MsgBoxStyle.Exclamation) Me.Cursor = Cursors.Default Exit Sub End If End If Dim msg As String = String.Format("Wollen Sie die ausgewählten Zeilen wirklich der Entität '{0}' zuordnen?", ENTITY_STRING.ToString) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("Do You really want to change the entity-link of the selected record to '{0}'?", ENTITY_STRING.ToString) End If Dim result As MsgBoxResult result = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Save_Grid_Layout() For Each _RECORD As String In e.Data.GetData(GetType(String())) 'hh ClassRightManagement.Check_Set_Rights(_RECORD, ENTITY_ID) If RIGHT_EDIT_R = False Then msg = String.Format("USER {0} WANTED TO CHANGE ENTITY OF RECORD {1} to {2} but was rejected due to rights", USER_USERNAME, _RECORD, ENTITY_STRING) ClassHelper.InsertEssential_Log(_RECORD, "RECORD-ID", msg) Continue For End If Dim sql1 = String.Format("SELECT [dbo].[FNPMO_CUST_ALLOW_ENTITY_RELINK] ({0},{1})", _RECORD, USER_GUID) If MYDB_ECM.GetScalarValue(sql1) = 0 Then msg = String.Format("Verschieben von Datensatz {0} nicht möglich. Kriterien nicht erfüllt!", _RECORD.ToString) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("Changing of entity-link for record {0}not possible - Criteria is invalid!", _RECORD.ToString) End If MsgBox(msg, MsgBoxStyle.Information) Continue For End If LOGGER.Info(String.Format("Relinking entity of record '{0}' to entity '{1}'?", _RECORD, ENTITY_STRING.ToString)) Dim upd = String.Format("UPDATE TBPMO_RECORD SET FORM_ID = {0} where GUID = {1}", node_tag, _RECORD) If MYDB_ECM.ExecuteNonQuery(upd) = True Then msg = String.Format("ENTITY WAS CHANGED TO {0}-{1} by User: {2}", ENTITY_STRING, node_tag, USER_USERNAME) ClassHelper.InsertEssential_Log(_RECORD, "RECORD-ID", msg) sql = "SELECT T.* FROM VWPMO_DOC_SEARCH T, TBPMO_DOC_RECORD_LINK T1 WHERE T.DocID = T1.DOC_ID AND T1.RECORD_ID = " & _RECORD Dim DT_DOCS As DataTable = MYDB_ECM.GetDatatable(sql) sql = String.Format("select ORIGIN_CTRL_ID,LINKED_CTRL_ID from TBPMO_CONTROL_ENTITY_LINK where ORIGIN_CTRL_ID in (SELECT GUID FROM TBPMO_CONTROL where FORM_ID = {0}) " & "AND LINKED_CTRL_ID IN (SELECT GUID FROM TBPMO_CONTROL where FORM_ID = {1})", ENTITY_ID, node_tag) Dim DT_CHANGE_CTR As DataTable = MYDB_ECM.GetDatatable(sql) For Each row As DataRow In DT_CHANGE_CTR.Rows upd = String.Format("UPDATE TBPMO_CONTROL_VALUE SET CONTROL_ID = {0}, CHANGED_WHO = '{3}' WHERE CONTROL_ID = {1} AND RECORD_ID = {2}", row.Item("LINKED_CTRL_ID"), row.Item("ORIGIN_CTRL_ID"), _RECORD, USER_USERNAME) MYDB_ECM.ExecuteNonQuery(upd) Next Dim execsql = String.Format("EXEC PRPMO_DELETE_RECORD_PMO_TABLE {0},{1}", ENTITY_ID, _RECORD) If MYDB_ECM.ExecuteNonQuery(execsql) = True Then End If execsql = String.Format("EXEC PRPMO_ENTITY_TABLE_RENEW_RECORD {0},{1}", node_tag, _RECORD) If MYDB_ECM.ExecuteNonQuery(execsql) = True Then MYDB_ECM.ExecuteNonQuery(execsql) End If End If Next msg = String.Format("Datensatz/-sätze erfolgreich auf die Entität {0} verlinked (wenn Kriterien erfüllt)!", ENTITY_STRING.ToString) If USER_LANGUAGE <> "de-DE" Then msg = String.Format("The record/s was/were successfully relinked with entity {0} (if criteria matched)", ENTITY_STRING.ToString) End If MsgBox(msg, MsgBoxStyle.Information) Load_Datafor_Entity(True) End If End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in DragDrop TreeView: ", ex.Message) End Try Me.Cursor = Cursors.Default End Sub Private Sub TreeViewMain_DragOver(sender As Object, e As DragEventArgs) Handles TreeViewMain.DragOver e.Effect = DragDropEffects.Copy End Sub Private Sub AuswertungAnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AuswertungAnzeigenToolStripMenuItem.Click Dim frm As New frmDiagrams() Me.Cursor = Cursors.WaitCursor 'frm.MdiParent = MAIN_FORM frm.Show() Me.Cursor = Cursors.Default End Sub Private Sub SucheAnzeigenToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles docCM_showGridSearch.Click GridViewDoc_Search.ShowFindPanel() End Sub Private Sub GridViewDoc_Search_ColumnFilterChanged(sender As Object, e As EventArgs) Handles GridViewDoc_Search.ColumnFilterChanged Try Dim origtext As String = GridViewDoc_Search.ViewCaption If origtext.Contains(" (") Then Dim existingstring = origtext.Substring(0, origtext.IndexOf("(") - 1) GridViewDoc_Search.ViewCaption = String.Format("{0} ({1})", existingstring, GridViewDoc_Search.RowCount) Else GridViewDoc_Search.ViewCaption = String.Format("{0} ({1})", GridViewDoc_Search.ViewCaption, GridViewDoc_Search.RowCount) End If Catch ex As Exception End Try End Sub Private Sub DateirechteFürUserToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_GetRights.Click Dim result = ClassDOC_SEARCH.Get_File_Rights(ClassDocGrid.SELECTED_DOC_ID) If Not IsNothing(result) Then Dim msg = "Das aktuelle Recht für Sie (" & USER_USERNAME & ") ist: " If USER_LANGUAGE <> "de-DE" Then msg = "Your (" & USER_USERNAME & ") current right is: " End If msg = msg & result.ToString msg = msg & vbNewLine & vbNewLine & "R:" & vbTab & "Read" & vbNewLine & "W:" & vbTab & "Write" & vbNewLine & "A:" & vbTab & "Admin" MsgBox(msg, MsgBoxStyle.Information) Else MsgBox("Could not read the rights for selected file! Check the log for further infomation!", MsgBoxStyle.Exclamation) End If End Sub Private Sub OfficeVorlagenToolStripMenuItem_Click(sender As Object, e As EventArgs) End Sub Private Sub NewVarianttsmi_Click(sender As Object, e As EventArgs) End Sub Private Sub RecordDeleteToolStripMenuItem_Click(sender As Object, e As EventArgs) Delete_Record() End Sub Private Sub docCMEntityWideSearch_Click(sender As Object, e As EventArgs) Handles docCMEntityWideSearch.Click CURRENT_SEARCH_TYPE = "ENTITY" RUN_ENTITY_DOC_SEARCH() End Sub Private Sub Load_Variants() Try Me.TBPMO_RECORD_VARIANTTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString Me.TBPMO_RECORD_VARIANTTableAdapter.Fill(Me.DD_DMSDataSet.TBPMO_RECORD_VARIANT, ENTITY_ID, RECORD_ID) Catch ex As System.Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error while loading variants: ", ex.Message) End Try End Sub Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click Load_Variants() End Sub Private Sub tsbtnVariantDetailView_Click(sender As Object, e As EventArgs) Handles tsbtnVariantDetailView.Click Load_Variant_Record() End Sub Sub Load_Variant_Record() Try Dim RECORD_ID = GridViewVariants.GetFocusedRowCellValue(GridViewVariants.Columns("RECORD_ID")) If Not IsNothing(RECORD_ID) Then ClassJumpRecord.JumpToRecord(0, RECORD_ID) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Show_Detail_Record: ", ex.Message) End Try JUMP_RECORD_ID = 0 End Sub Private Sub GridControl1_DoubleClick(sender As Object, e As EventArgs) Handles GridControl1.DoubleClick Load_Variant_Record() End Sub Private Sub ChangeHidepanelToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ChangeHidepanelToolStripMenuItem.Click If SplitContainerDetails.CollapsePanel = SplitCollapsePanel.Panel1 Then SplitContainerDetails.CollapsePanel = SplitCollapsePanel.Panel2 Else SplitContainerDetails.CollapsePanel = SplitCollapsePanel.Panel1 End If End Sub Private Sub tsbtnPanel1Collapse_Click(sender As Object, e As EventArgs) Handles tsbtnPanel1Collapse.Click Collapse_Details() End Sub Sub Collapse_Details() If SplitContainerDetails.Collapsed = False Then SplitContainerDetails.CollapsePanel = SplitCollapsePanel.Panel1 SplitContainerDetails.Collapsed = True Dim msg = "Detailbereich 'ausklappen'" If USER_LANGUAGE <> "de-DE" Then msg = "Maximize details" End If tsbtnPanel1Collapse.Text = msg tsbtnPanel1Collapse.Image = My.Resources.arrow_Forward_16xLG Else SplitContainerDetails.CollapsePanel = SplitCollapsePanel.Panel2 SplitContainerDetails.Collapsed = False Dim msg = "Detailbereich 'einklappen'" If USER_LANGUAGE <> "de-DE" Then msg = "Collapse details" End If tsbtnPanel1Collapse.Text = msg tsbtnPanel1Collapse.Image = My.Resources.arrow_left End If End Sub Private Sub cmsTreeView_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles cmsTreeView.Opening tsmiNodeDelete.Visible = False Dim control = Me.ActiveControl If Not IsNothing(control) Then If control.Name <> TreeViewMain.Name Then e.Cancel = True End If If CURRENT_NODE_CONFIGURABLE_ID <> 0 Then tsmiNodeNew.Visible = True Else tsmiNodeNew.Visible = False End If If Not IsNothing(TreeViewMain.SelectedNode) Then Dim oNODE_GUID = ClassNodeNavigation.Return_NODEID_forTag(TreeViewMain.SelectedNode.Tag.ToString) Try Dim oExpression As String oExpression = "GUID = " & oNODE_GUID Dim oRowNode() As DataRow = DT_TREEVIEW_NODES_ALL.Select(oExpression) If oRowNode.Length = 1 Then Dim oAllowRenameNode = oRowNode(0)("BOOL1") If oAllowRenameNode = True Then Me.tsmiNodeRename.Visible = True Else Me.tsmiNodeRename.Visible = False End If End If Catch ex As Exception End Try If TreeViewMain.SelectedNode.Tag.ToString.StartsWith("CONFIG_NODE") Then tsmiNodeDelete.Visible = True End If End If End If If USER_LANGUAGE <> "de-DE" Then Me.tstxtboxSearchNode.Text = "Search Node" Else Me.tstxtboxSearchNode.Text = "Suche Knoten" End If End Sub Private Function FindFocussedControl(ByVal ctr As Windows.Forms.Control) As Windows.Forms.Control Dim container As ContainerControl = TryCast(ctr, ContainerControl) Do While (container IsNot Nothing) ctr = container.ActiveControl container = TryCast(ctr, ContainerControl) Loop Return ctr End Function Private Sub DateiVersionierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiVersionierenToolStripMenuItem.Click Refresh_Selected_Table() frmWM_CreateVersion.ShowDialog() RUN_WDSEARCH_GRID(True) End Sub Sub Refresh_Selected_Table() Dim table As New DataTable table.TableName = "SelectedFiles" ' Create two columns, ID and Name. Dim idColumn As DataColumn = table.Columns.Add("ID", GetType(System.Int32)) idColumn.AutoIncrement = True idColumn.AutoIncrementSeed = 0 idColumn.AutoIncrementStep = 1 table.PrimaryKey = New DataColumn() {idColumn} table.Columns.Add("FILEPATH", GetType(System.String)) table.Columns.Add("DOC_ID", GetType(System.Int32)) table.Columns.Add("OBJECTTYPE", GetType(System.String)) For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows If row.Item("DOC_PATH") <> String.Empty Then 'Set the ID column as the primary key column. Dim newRow As DataRow = table.NewRow() newRow("FILEPATH") = row.Item("DOC_PATH") newRow("DOC_ID") = row.Item("DOC_ID") newRow("OBJECTTYPE") = row.Item("OBJECTTYPE") table.Rows.Add(newRow) End If Next table.AcceptChanges() CURRENT_DT_SELECTED_FILES = table End Sub Private Sub DokumentartÄndernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DokumentartÄndernToolStripMenuItem.Click CURRENT_FORMVIEW_ID = FORMVIEW_ID Refresh_Selected_Table() 'frmWM_ChangeDoctype.ShowDialog() RUN_WDSEARCH_GRID(True) End Sub Private Sub NeuToolStripMenuItem_MouseHover(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem.MouseHover Display_Filename() End Sub Private Sub CMDoc_TextBoxRenameFile_KeyUp(sender As Object, e As KeyEventArgs) Handles CMDoc_TextBoxRenameFile.KeyUp If e.KeyCode = Keys.Return Then Try If CMDoc_TextBoxRenameFile.Text <> "" Then Dim OldName, NewName, OnlyFilename As String OldName = ClassDocGrid.SELECTED_DOC_PATH ' Define file names. NewName = CMDoc_TextBoxRenameFile.Text OnlyFilename = NewName Dim oFullFilename = ClassHelper.FORMAT_WM_PATH(ClassDocGrid.SELECTED_DOC_PATH) Dim name1 = Path.Combine(Path.GetDirectoryName(oFullFilename), NewName) NewName = NewName & Path.GetExtension(oFullFilename) OnlyFilename &= Path.GetExtension(oFullFilename) ' Rename file. LOGGER.Info($"Renaming Old: [{OldName}]") LOGGER.Info($"Renaming New: [{NewName}]") My.Computer.FileSystem.RenameFile(OldName, NewName) LOGGER.Info($"Renaming FileSystem done!") Cursor = Cursors.WaitCursor Dim oEXEC As String = $"EXEC PROF_DOC_CREATE_UPDATE {ClassDocGrid.SELECTED_DOC_ID}, {CURRENT_RECORD_ID},'{USER_USERNAME}',''" If MYDB_ECM.ExecuteNonQuery(oEXEC) Then LOGGER.Info($"Exec PROF_DOC_CREATE_UPDATE done - rename abgeschlossen") End If Dim oRowHandle As Integer = GridViewDoc_Search.FocusedRowHandle Cursor = Cursors.Default RUN_WDSEARCH_GRID(True) If Not IsNothing(oRowHandle) Then GridViewDoc_Search.FocusedRowHandle = oRowHandle End If ContextMenuStripResultFiles.Close() End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Renaming files:", ex.Message) End Try End If End Sub Private Sub DisplaynameUmbenennenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DisplaynameUmbenennenToolStripMenuItem.Click Set_Displayname() End Sub Private Sub DisplaynameUmbenennenToolStripMenuItem_MouseHover(sender As Object, e As EventArgs) Handles DisplaynameUmbenennenToolStripMenuItem.MouseHover Set_Displayname() End Sub Private Sub SToolStripMenuItem_KeyUp(sender As Object, e As KeyEventArgs) Handles CMDoc_TextBoxRenameDisplay.KeyUp If e.KeyCode = Keys.Return Then Try ClassFileResult.DocID = ClassDocGrid.SELECTED_DOC_ID If CMDoc_TextBoxRenameDisplay.Text <> "" Then If ClassFileResult.Set_Displayname(CMDoc_TextBoxRenameDisplay.Text) Then Cursor = Cursors.WaitCursor Dim oRowHandle As Integer = GridViewDoc_Search.FocusedRowHandle Cursor = Cursors.Default RUN_WDSEARCH_GRID(True) If Not IsNothing(oRowHandle) Then GridViewDoc_Search.FocusedRowHandle = oRowHandle End If ContextMenuStripResultFiles.Close() End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Unexpected Error in Setting Displayname Click: ", ex.Message) End Try End If End Sub Private Sub DateienDiesemUndToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles tsmiNodedownSearch.Click CURRENT_SEARCH_TYPE = "NODE_DOWN" RUN_WDSEARCH_GRID(True) End Sub Private Sub EnitätssucheToolStripMenuItem_Click(sender As Object, e As EventArgs) CURRENT_SEARCH_TYPE = "ENTITY" RUN_ENTITY_DOC_SEARCH() End Sub Private Sub OberhalbToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OberhalbToolStripMenuItem.Click ADD_NODE("HERE") End Sub Private Sub ADD_NODE(where As String) Try If tsmINewText.Text = String.Empty Then MsgBox("Please type a nodetext!", MsgBoxStyle.Critical) tsmINewText.BackColor = Color.Red Exit Sub End If Dim PARENT_ID Dim expression As String expression = "ENTITY_ID = " & ENTITY_ID & " AND GUID = " & CURRENT_NODE_CONFIGURABLE_ID Dim foundRowsLevel0() As DataRow ' Use the Select method to find all rows matching the filter. foundRowsLevel0 = NODE_CONFIGURABLE_NODES_DT.Select(expression) Dim i As Integer Dim RECORD_CREATE As Boolean ' For each row create a Node For i = 0 To foundRowsLevel0.GetUpperBound(0) RECORD_CREATE = foundRowsLevel0(i)("CREATE_RECORD") Next If where = "HERE" Then PARENT_ID = ClassNodeNavigation.Return_NODEID_forTag(TreeViewMain.SelectedNode.Parent.Tag) ElseIf where = "BELOW" Then PARENT_ID = ClassNodeNavigation.Return_NODEID_forTag(TreeViewMain.SelectedNode.Tag) End If Dim NEWRECORD As Integer If RECORD_CREATE = True Then Dim recordId = ClassRecordCommands.CreateRecordProcedure(ENTITY_ID) If recordId = 0 Then LOGGER.Warn("Error in ADD_NODE: Could not create Record", True) ClassHelper.MSGBOX_Handler("ERROR", "Error in ADD_NODE", "Could not create Record") Exit Sub Else NEWRECORD = recordId End If End If 'Dim NEWRECORD As Integer = ClassControlCommandsUI.GetLastRecord(ENTITY_ID) Dim NEWNODE = New TreeNode(tsmINewText.Text) If Not IsNothing(NEWRECORD) Then 'ClassProxy.PRPROXY_RECORD_UPD_INS(ENTITY_ID, NEWRECORD) If Not IsNothing(CURRENT_NODE_CONFIGURABLE_ID) And CURRENT_NODE_CONFIGURABLE_ID > 0 Then Dim index As Integer = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = CURRENT_NODE_CONFIGURABLE_ID.ToString Then 'CURRENT_NODE_CONFIGURABLE_ID.ToString & "#" & ENTITY_ID Exit For End If index += 1 Next NEWNODE.ImageIndex = index NEWNODE.SelectedImageIndex = index End If 'Dim ins 'If RECORD_CREATE Then ' sdd ' ins = String.Format("INSERT INTO TBPMO_STRUCTURE_NODES (RECORD_ID,NODE_CONFIG_ID, NODE_CAPTION, ID1, PARENT_GUID, ADDED_WHO) VALUES (" & ' "{0},{1},'{2}','{3}','{4}','{5}')", NEWRECORD, CURRENT_NODE_CONFIGURABLE_ID, tsmINewText.Text, "CONFIG " & NEWRECORD & "-" & CURRENT_NODE_CONFIGURABLE_ID, PARENT_ID, USER_USERNAME) 'Else ' ins = String.Format("INSERT INTO TBPMO_STRUCTURE_NODES (NODE_CONFIG_ID, NODE_CAPTION, ID1, PARENT_GUID, ADDED_WHO) VALUES (" & ' "{0},'{1}','{2}','{3}','{4}')", CURRENT_NODE_CONFIGURABLE_ID, tsmINewText.Text, "CONFIG " & NEWRECORD & "-" & CURRENT_NODE_CONFIGURABLE_ID, PARENT_ID, USER_USERNAME) 'End If 'If MYDB_ECM.ExecuteNonQuery(ins) Then Dim NEW_GUID = ClassNodeNavigation.CreateNodeProcedure(NEWRECORD, CURRENT_NODE_CONFIGURABLE_ID, tsmINewText.Text, "CONFIG " & NEWRECORD & "-" & CURRENT_NODE_CONFIGURABLE_ID, PARENT_ID, USER_USERNAME) If NEW_GUID > 0 Then ClassNodeNavigation.Check_NODE_CONFIG_ID(ENTITY_ID, Nothing) NEWNODE.Tag = ClassNodeNavigation.CreateNODE_TAG(ENTITY_ID, NEW_GUID, NEWRECORD, CURRENT_NODE_CONFIGURABLE_ID) If where = "HERE" Then TreeViewMain.SelectedNode.Parent.Nodes.Add(NEWNODE) TreeViewMain.SelectedNode.Parent.Expand() Else TreeViewMain.SelectedNode.Nodes.Add(NEWNODE) TreeViewMain.SelectedNode.Expand() End If ' End If End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Unexpected Error in Adding ConfigNode: ", ex.Message) End Try End Sub Private Sub tsmiNodeDelete_Click(sender As Object, e As EventArgs) Handles tsmiNodeDelete.Click Try Dim _tag = TreeViewMain.SelectedNode.Tag Dim REC_Exists As Boolean = False If _tag.ToString.ToString.Contains("RECORD-ID") Then REC_Exists = True End If Dim NODE_GUID = ClassNodeNavigation.Return_NODEID_forTag(_tag) If IsNumeric(NODE_GUID) Then Dim msg = "Sind Sie sicher, dass Sie den Knoten '" & TreeViewMain.SelectedNode.Text & "' löschen wollen?" If USER_LANGUAGE <> "de-DE" Then msg = "Are You sure You want to delete the node'" & TreeViewMain.SelectedNode.Text & "'?" End If Dim result As MsgBoxResult result = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Dim oDelete = String.Format("EXEC PRPMO_DELETE_NODE {0},'{1}'", NODE_GUID, USER_USERNAME) If MYDB_ECM.ExecuteNonQuery(oDelete) Then TreeViewMain.Nodes.Remove(TreeViewMain.SelectedNode) Refresh_Entity_Data(True) End If End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Unexpected Error in Deleting ConfigNode: ", ex.Message) End Try End Sub Private Sub UnterhalbToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UnterhalbToolStripMenuItem.Click ADD_NODE("BELOW") End Sub Private Sub cmDoc1FileOpen_Click(sender As Object, e As EventArgs) Handles cmDoc1FileOpen.Click Open_File() End Sub Sub Open_File() Me.Cursor = Cursors.WaitCursor Dim allow_Open As Boolean = False ClassDocGrid.GetDocItems(GridViewDoc_Search) Dim Result = ClassDOC_SEARCH.Get_File_Rights(ClassDocGrid.SELECTED_DOC_ID) If Not IsNothing(Result) Then Select Case Result.ToString Case "R" allow_Open = True Case "RW" allow_Open = True Case "RWA" allow_Open = True End Select End If If allow_Open = True Then If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters(5)!", MsgBoxStyle.Exclamation) Exit Sub End If For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows If ClassHelper.File_open(row.Item("DOC_PATH"), row.Item("DOC_ID"), 0) = True Then TimerFileHandle.Enabled = True End If Next Else If WMMOD.TestFileExists(ClassDocGrid.SELECTED_DOC_PATH) = True Then ClassHelper.MSGBOX_Handler("ERROR", "Right-Management", "File is existing, but you do not have the rights to open this file! " & vbNewLine & "Please contact your admin!" & vbNewLine & "DOC-ID: " & ClassDocGrid.SELECTED_DOC_ID.ToString) Else ClassHelper.MSGBOX_Handler("ERROR", "", "File does not exist! Please contact your admin!") End If End If Me.Cursor = Cursors.Default End Sub Private Sub cmDoc1FileProperties_Click(sender As Object, e As EventArgs) Handles cmDoc1FileProperties.Click Show_File_Properties() End Sub Private Sub tsbtnWork_Click(sender As Object, e As EventArgs) Handles tsbtnWork.Click Dim stg If POS_ENABLED = False Then POS_ENABLED = True tslblPoslocked.Visible = False BindingNavigatorAddNewItem.Enabled = True BindingNavigatorDeleteItem.Enabled = True grvwGridPos.OptionsBehavior.ReadOnly = False If USER_LANGUAGE = "de-DE" Then stg = "Bearbeiten beenden" Else stg = "End Working" End If Me.tsbtnWork.Text = stg Else POS_ENABLED = False tslblPoslocked.Visible = True BindingNavigatorAddNewItem.Enabled = False BindingNavigatorDeleteItem.Enabled = False grvwGridPos.OptionsBehavior.ReadOnly = True If USER_LANGUAGE = "de-DE" Then stg = "Positionen bearbeiten" Else stg = "Edit positions" End If Me.tsbtnWork.Text = stg End If End Sub Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs) Handles BindingNavigatorDeleteItem.Click Try If POS_RECORD_ID > 0 Then Dim msg = "Sind Sie sicher, dass Sie diese Position löschen wollen?" If USER_LANGUAGE <> "de-DE" Then msg = "Are You sure You want to delete this position?" End If Dim result As MsgBoxResult result = MessageBox.Show(msg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then If ClassHelper.DeleteRecord(POS_RECORD_ID) = True Then Load_Pos_Data() Else End If End If End If Catch ex As Exception End Try End Sub Private Sub grvwGridPos_FocusedColumnChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedColumnChangedEventArgs) Handles grvwGridPos.FocusedColumnChanged Pos_COLROW_Changer() End Sub Private Sub tsmiFulltext_Click(sender As Object, e As EventArgs) Open_FulltextSearch() End Sub Sub Open_FulltextSearch() CURRENT_SELECTED_NODE = Nothing If NODE_NAVIGATION = True Then If IsNothing(TreeViewMain.SelectedNode) Then MsgBox("Please select a node!", MsgBoxStyle.Critical) Exit Sub End If CURRENT_NAVIGATION_TYPE = "NODE" CURRENT_SELECTED_NODE = TreeViewMain.SelectedNode Else CURRENT_NAVIGATION_TYPE = "DEFAULT" End If frmWM_FulltextChoice.ShowDialog() If CURRENT_FULLTEXT_PATTERN <> "" Then RUN_WDSEARCH_GRID(True) End If End Sub Private Sub cmsResultFilesBasic_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles cmsResultFilesBasic.Opening Try If WMMOD.SessionLoggedin = False Then ClassHelper.MSGBOX_Handler("INFO", "Attention", "Check Your windream-connection and restart orgFLOW afterwards.", "Could not create a windream session!") e.Cancel = True End If Me.Cursor = Cursors.WaitCursor Dim Result = ClassDOC_SEARCH.Get_File_Rights(ClassDocGrid.SELECTED_DOC_ID) If Not IsNothing(Result) Then Select Case Result.ToString Case "R" ContextMenu_Read() Case Else ContextMenu_Write() End Select Else ContextMenu_Read() End If Catch ex As Exception e.Cancel = True Finally Me.Cursor = Cursors.Default End Try End Sub Private Sub OrdnerÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OrdnerÖffnenToolStripMenuItem.Click If IsNothing(ClassDocGrid.DT_RESULTFILES) Then MsgBox("Could not read File Parameters(5)!", MsgBoxStyle.Exclamation) Exit Sub End If For Each row As DataRow In ClassDocGrid.DT_RESULTFILES.Rows ClassHelper.Open_Folder(row.Item("DOC_PATH"), row.Item("DOC_ID")) Next End Sub Private Sub ToolStripDropDownButton3_DropDownOpening(sender As Object, e As EventArgs) Try Me.Cursor = Cursors.WaitCursor Dim Record_Changes As String = "SELECT count(GUID) FROM VWPMO_RECORD_CHANGES WHERE RECORD_ID = " & RECORD_ID Dim RC = MYDB_ECM.GetScalarValue(Record_Changes, True) bbtniReclog.Visibility = DevExpress.XtraBars.BarItemVisibility.Never If Not RC Is Nothing Then If RC > 0 Then bbtniReclog.Visibility = DevExpress.XtraBars.BarItemVisibility.Always End If End If If RIGHT_RECORD_AND_FILE_READ_ONLY = True Or NODE_NAVIGATION = True Then bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Never bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Else bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Always bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Always End If Catch ex As Exception Finally Me.Cursor = Cursors.Default End Try End Sub Private Sub TimerClearResultfiles_Tick(sender As Object, e As EventArgs) Handles TimerClearResultfiles.Tick Try For Each row As DataRow In CURRENT_TBPMO_FILES_USER.Rows If row.Item("WORKED") = True Then If row.Item("DELETE_FILE") = True Then If File.Exists(row.Item("FILENAME2WORK")) Then File.Delete(row.Item("FILENAME2WORK")) ClassHelper.DELETE_PMO_FILE_USER(row.Item("GUID")) row.Delete() End If Else ClassHelper.DELETE_PMO_FILE_USER(row.Item("GUID")) row.Delete() End If End If Next CURRENT_TBPMO_FILES_USER.AcceptChanges() ClassFolderWatcher.Check_Scan_Files() Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "", "Unexpected Error in clearing User-Files: " & ex.Message, ex.StackTrace) Finally TimerClearResultfiles.Stop() End Try End Sub Private Sub tsbtnPos_Refresh_Click(sender As Object, e As EventArgs) Handles tsbtnPos_Refresh.Click Load_Pos_Data() End Sub Private Sub frmConstructor_Main_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp If e.KeyCode = Keys.Control And e.KeyCode = Keys.R Then Refresh_Entity_Data(True) ElseIf e.KeyCode = Keys.Control And e.KeyCode = Keys.S Then Save_Record() If ERROR_WHILE_SAVING = True Then Column_Row_Handler("StrgS") End If ElseIf e.KeyCode.Escape Then If IsNothing(taskToken) Then 'taskToken.Cancel() End If End If End Sub Private Sub tstxtboxSearchNode_KeyUp(sender As Object, e As KeyEventArgs) Handles tstxtboxSearchNode.KeyUp If e.KeyCode = Keys.Return Then Dim Result As List(Of TreeNode) = SearchTheTreeView(TreeViewMain, tstxtboxSearchNode.Text) If Result Is Nothing Then MessageBox.Show("No Match Found") Else If Result.Count = 1 Then TreeViewMain.SelectedNode = Result.First() Else Dim resultForm As New frmTreeSearchResult() resultForm.searchResultNodes = Result resultForm.constructorForm = Me resultForm.Show() End If End If End If End Sub Public Sub SetSelectedTreeViewNode(node As TreeNode) TreeViewMain.SelectedNode = node End Sub Private Sub tstxtboxSearchNode_Click(sender As Object, e As EventArgs) Handles tstxtboxSearchNode.Click, tstxtboxSearchNode.Enter tstxtboxSearchNode.Text = "" End Sub Private Sub frmConstructor_Main_HandleDestroyed(sender As Object, e As EventArgs) Handles Me.HandleDestroyed End Sub Private Sub tslblPoslocked_VisibleChanged(sender As Object, e As EventArgs) Handles tslblPoslocked.VisibleChanged If tslblPoslocked.Visible = True Then Dim msg = "Nur lesenden Zugriff" If USER_LANGUAGE <> "de-DE" Then msg = "Positions are read only" End If tslblPoslocked.Text = msg End If End Sub Private Sub TreeViewMain_BeforeExpand(sender As Object, e As TreeViewCancelEventArgs) Handles TreeViewMain.BeforeExpand End Sub Private Sub TreeList1_GetStateImage(sender As Object, e As DevExpress.XtraTreeList.GetStateImageEventArgs) Handles TreeListDevexpress.GetStateImage Dim Column_Config_ID As DevExpress.XtraTreeList.Columns.TreeListColumn = TreeListDevexpress.Columns("NODE_CONFIG_ID") Dim configid = e.Node.GetDisplayText(Column_Config_ID) e.Node.StateImageIndex = ImageCollection1.Images.Keys.IndexOf(configid) End Sub Private Sub TreeList1_ColumnFilterChanged(sender As Object, e As EventArgs) Handles TreeListDevexpress.ColumnFilterChanged Dim tree As TreeList = TryCast(sender, TreeList) Dim filteredColumns As List(Of TreeListColumn) = tree.Columns.Cast(Of TreeListColumn)().Where(Function(c) c.FilterInfo.AutoFilterRowValue IsNot Nothing).ToList() If filteredColumns.Count = 0 Then tree.CollapseAll() Return End If tree.BeginUpdate() For Each col As TreeListColumn In filteredColumns Dim op As New CollapseChildrenOperation(col.FilterInfo.AutoFilterRowValue.ToString(), col) tree.NodesIterator.DoOperation(op) Next col tree.EndUpdate() End Sub Public Class CollapseChildrenOperation Inherits TreeListOperation Private filterValue As String Private column As TreeListColumn Public Sub New(ByVal filter As String, ByVal col As TreeListColumn) filterValue = filter column = col End Sub Private Function IsNodeMatchFilter(ByVal node As TreeListNode, ByVal column As TreeListColumn) As Boolean Return node.GetDisplayText(column).Contains(filterValue) End Function Public Overrides Sub Execute(ByVal node As TreeListNode) If IsNodeMatchFilter(node, column) Then node.TreeList.MakeNodeVisible(node) CollapseChildren(node) End If End Sub Public Sub CollapseChildren(ByVal node As TreeListNode) 'node.Visible = true; For Each childNode As TreeListNode In node.Nodes CollapseChildren(childNode) Next childNode node.Expanded = False End Sub End Class Private Sub AusDieserEntitätToolStripMenuItem_Click(sender As Object, e As EventArgs) End Sub Private Sub tstxtRenameNode_KeyUp(sender As Object, e As KeyEventArgs) Handles tstxtRenameNode.KeyUp If e.KeyCode = Keys.Return Then Try Dim oTag = TreeViewMain.SelectedNode.Tag Dim oRecExists As Boolean = False If oTag.ToString.ToString.Contains("RECORD-ID") Then oRecExists = True End If Dim NODE_GUID = ClassNodeNavigation.Return_NODEID_forTag(oTag) If IsNumeric(NODE_GUID) Then Dim OMsg = "Sind Sie sicher, dass Sie den Knoten '" & TreeViewMain.SelectedNode.Text & "' umbenennen wollen?" If USER_LANGUAGE <> "de-DE" Then OMsg = "Are You sure You want to rename the node'" & TreeViewMain.SelectedNode.Text & "'?" End If Dim oResult As MsgBoxResult oResult = MessageBox.Show(OMsg, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If oResult = MsgBoxResult.Yes Then Dim oUpdate = String.Format("UPDATE TBPMO_STRUCTURE_NODES SET NODE_CAPTION = '{0}', CHANGED_WHO = '{1}' WHERE GUID = {2}", Me.tstxtRenameNode.Text, USER_USERNAME, NODE_GUID) If MYDB_ECM.ExecuteNonQuery(oUpdate) Then TreeViewMain.SelectedNode.Text = Me.tstxtRenameNode.Text cmsTreeView.Close() End If End If End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Unexpected Error in Renaming ConfigNode: ", ex.Message) End Try End If End Sub Private Sub tsmiNodeRename_MouseHover(sender As Object, e As EventArgs) Handles tsmiNodeRename.MouseHover If Not IsNothing(TreeViewMain.SelectedNode) Then Me.tstxtRenameNode.Text = TreeViewMain.SelectedNode.Text End If End Sub Private Sub ToolStripMenuItem1_Click_1(sender As Object, e As EventArgs) Handles ToolStripMenuItem1.Click Save_DocGrid_Layout() End Sub Private Sub TimerFileHandle_Tick(sender As Object, e As EventArgs) Handles TimerFileHandle.Tick Try Dim oSql = $"SELECT GUID FROM TBPMO_DOC_USER_REFRESH_VIEW WHERE USER_ID = {USER_GUID} AND REFRESHED_WHEN IS NULL" Dim oDTGUID As DataTable = MYDB_ECM.GetDatatable(oSql) If oDTGUID.Rows.Count = 1 Then Dim oupd = $"UPDATE TBPMO_DOC_USER_REFRESH_VIEW SET REFRESHED_WHEN = GETDATE() WHERE GUID = {oDTGUID.Rows(0).Item(0)}" If MYDB_ECM.ExecuteNonQuery(oupd) = True Then MsgBox("Attention: The docID of one document changed! The DocSearch will be refreshed!", MsgBoxStyle.Information) RUN_WDSEARCH_GRID(True) End If End If Catch ex As Exception LOGGER.Warn($"Unexpected error in TimerFileHandleTick [{ex.Message}]!!") End Try End Sub Private Sub VerknüpfungenAnzeigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles docCM_Showlinks.Click Try Dim oDocID = GridViewDoc_Search.GetRowCellValue(GridViewDoc_Search.FocusedRowHandle, "DocID") If IsNothing(oDocID) Then MsgBox("Could not get DocID!", MsgBoxStyle.Exclamation) Exit Sub End If CURRENT_DOC_ID = GridViewDoc_Search.GetRowCellValue(GridViewDoc_Search.FocusedRowHandle, "DocID") Dim frm As New frmDoc_Links frm.Show() frm.BringToFront() Catch ex As Exception MsgBox("Unexpected Error in Showing DocLinks: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub tsmiNodeNew_Click(sender As Object, e As EventArgs) Handles tsmiNodeNew.Click End Sub Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniRefresh.ItemClick Refresh_Entity_Data(True) End Sub Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniGeodaten.ItemClick 'ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Show_Detail_Record: ", "dsdfsdfdsfdsf") Dim frm As New frmGeodataNavigation(GridControlMain, CURRENT_ENTITY_ID) frm.Show() End Sub Private Sub BarButtonItem1_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniCopyRecord.ItemClick Dim msg As String If RIGHT_RECORD_AND_FILE_READ_ONLY = False Then Dim result As MsgBoxResult msg = "Möchten Sie den Datensatz wirklich kopieren?" If USER_LANGUAGE <> "de-DE" Then msg = "Would You like to copy the record?" End If result = MessageBox.Show(msg, "Copy Record:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Dim SQL = String.Format("EXEC PRPMO_COPY_RECORD {0}, '{1}'", RECORD_ID, USER_USERNAME) If MYDB_ECM.ExecuteNonQuery(SQL) = True Then Load_Entity_Data_CONTROLS_RECORDS() End If End If Else msg = "Sie dürfen diesen Datensatz nicht löschen! (Rechtekonzept)!" If USER_LANGUAGE <> "de-DE" Then msg = "Due to right-privileges You are not allowed to delete this record!" End If MessageBox.Show(msg, "Warning:", MessageBoxButtons.OK, MessageBoxIcon.Information) End If End Sub Private Sub bbtniNewVariant_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) End Sub Private Sub bbtniWFTask_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniWFTask.ItemClick Dim result As MsgBoxResult Dim stg, caption As String If USER_LANGUAGE = "de-DE" Then stg = "Wollen Sie die Workflowtasks für diesen Datensatz erzeugen? Alte Workflows werden gelöscht!" caption = "Bestätigung erforderlich:" Else stg = "Do You really want to create workflowtasks for this record? Existing workflows will be deleted!" caption = "Confirmation needed:" End If result = MessageBox.Show(stg, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Try CURRENT_ENTITY_ID = ENTITY_ID Dim sql = "EXEC PRPMO_CREATE_WF_TASKS " & CURRENT_ENTITY_ID & ", " & RECORD_ID If MYDB_ECM.ExecuteNonQuery(Sql) = True Then ClassWorkflow.Refresh_Workflows_Entity() Show_act_WFTask() If USER_LANGUAGE = "de-DE" Then stg = "Workflows erzeugt! Wollen Sie die Workflowübersicht nun anzeigen?" caption = "Erfolgreich:" Else stg = "Workflows created! Would You like to show the Workflow-Overview?" caption = "Success:" End If result = MessageBox.Show(stg, caption, MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then ClassJumpRecord.JumpToRecord(2, RECORD_ID) ClassWorkflow.Refresh_Workflows_Entity() JUMP_RECORD_ID = 0 End If Else If USER_LANGUAGE = "de-DE" Then stg = "Die Workflows konnten nicht erzeugt werden. Bitte prüfen Sie die Log-Datei!" Else stg = "Error in Creating Workflow-Tasks. Please check the logfile!" End If MsgBox(stg, MsgBoxStyle.Exclamation) End If Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error inCreate Workflowtasks Record: ", ex.Message) End Try End If End Sub Private Sub bbtniclearCache_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniclearCache.ItemClick Dim result As MsgBoxResult Dim msg = "Möchten Sie den Anwendungscache wirklich leeren?" & vbNewLine & "Die Sicht wird dann automatisch neugeladen!" If USER_LANGUAGE <> "de-DE" Then msg = "Would You like to clear the applications-cache?" & vbNewLine & "All data will be loaded new!" End If result = MessageBox.Show(msg, "Clear cache:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Try Cursor = Cursors.WaitCursor CURRENT_ENTITY_ID = ENTITY_ID ClassControlValueCache.ClearCache() DisableEditMode() Load_Entity_Data_CONTROLS_RECORDS() RECORD_CHANGED = False Catch ex As Exception ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Clear Cache: ", ex.Message) Finally Cursor = Cursors.Default End Try End If End Sub Private Sub BarButtonItem2_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniNewVariant2.ItemClick Dim msg As String If RIGHT_RECORD_AND_FILE_READ_ONLY = False Then CURRENT_ENTITY_ID = ENTITY_ID CURRENT_RECORD_ID = RECORD_ID Dim recid = CURRENT_RECORD_ID frmNewVariant.ShowDialog() If recid <> CURRENT_RECORD_ID Then Me.Cursor = Cursors.WaitCursor 'ClassProxy.PRPROXY_SYNC_DETAIL_OBJECT("TBPMO_RECORD_VARIANT") 'ClassProxy.PRPROXY_SYNC_DETAIL_OBJECT("TBPMO_RECORD") Me.Cursor = Cursors.Default Load_Datafor_Entity(True) LocateRecordinGridById(CURRENT_RECORD_ID) End If Else msg = "Sie dürfen diesen Datensatz nicht löschen! (Rechtekonzept)!" If USER_LANGUAGE <> "de-DE" Then msg = "Due to right-privileges You are not allowed to delete this record!" End If MessageBox.Show(msg, "Warning:", MessageBoxButtons.OK, MessageBoxIcon.Information) End If End Sub Private Sub bbtniParentLink_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniParentLink.ItemClick Show_Verknuepfungen() End Sub Private Sub bbtniReclog_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtniReclog.ItemClick CURRENT_RECORD_ID = RECORD_ID frmRecord_Changes.ShowDialog() End Sub Private Sub ExportNachExcelToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExportNachExcelToolStripMenuItem.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 Dim oOptions As XlsxExportOptionsEx = New XlsxExportOptionsEx oOptions.ShowGridLines = True oOptions.AllowSortingAndFiltering = DevExpress.Utils.DefaultBoolean.True oOptions.ExportType = DevExpress.Export.ExportType.DataAware oOptions.ExportMode = XlsxExportMode.SingleFile oOptions.AllowFixedColumnHeaderPanel = DevExpress.Utils.DefaultBoolean.True GridControlDocSearch.MainView.ExportToXlsx(saveFileDialog1.FileName, oOptions) Dim result As MsgBoxResult Dim msg = String.Format("Datei wurde erstellt! Wollen Sie diese nun öffnen?") If USER_LANGUAGE <> "de-DE" Then msg = String.Format("File was created. Do You want to open excel?") End If result = MessageBox.Show(msg, "Exporting result:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If result = MsgBoxResult.Yes Then Process.Start(saveFileDialog1.FileName) End If End If Cursor = Cursors.Default End Sub Private Sub EntitätsweiteSucheToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EntitätsweiteSucheToolStripMenuItem.Click CURRENT_SEARCH_TYPE = "ENTITY" RUN_ENTITY_DOC_SEARCH() End Sub Private Sub BarButtonItem1_ItemClick_2(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick CURRENT_SEARCH_TYPE = "ENTITY" RUN_ENTITY_DOC_SEARCH() End Sub Private Sub ButtonResetFilter_Click(sender As Object, e As EventArgs) Handles ButtonResetFilter.Click GridViewDoc_Search.ClearColumnsFilter() GridViewDoc_Search.ClearFindFilter() End Sub Private Sub BarButtonItem17_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem17.ItemClick Open_FulltextSearch() End Sub Private Sub BarButtonItem16_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BbtnitmDocSearch.ItemClick RUN_WDSEARCH_GRID(True) End Sub Private Sub BarButtonItem16_ItemClick_1(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem16.ItemClick CURRENT_SEARCH_TYPE = "ENTITY" RUN_ENTITY_DOC_SEARCH() End Sub Private Sub frmConstructor_Main_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed End Sub Private Sub NeuToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuToolStripMenuItem.Click End Sub End Class