Imports WINDREAMLib Imports DLLLicenseManager Imports DevExpress.LookAndFeel Imports System.Globalization Imports DevExpress.Utils Imports DevExpress.XtraGrid.Views.Grid.ViewInfo Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid Imports System.Collections.ObjectModel Imports DevExpress.XtraNavBar Imports DevExpress.XtraGrid.Columns Imports DevExpress.Images Imports DevExpress.XtraCharts Public Class frmMain Private _windreamPM As ClassPMWindream Private UserLoggedin As Integer = 0 Private PROFILE_COUNT As Integer = 0 Private CURR_DT_VWPM_PROFILE_ACTIVE As DataTable Private CURR_DT_PROFILEGRID As DataTable Private RedDocuments As Integer = 0 Private YellowDocuments As Integer = 0 Private GreenDocuments As Integer = 0 Private GridViewItem_Clicked = Nothing Private GridCursorLocation As Point Private GRID_LOAD_TYPE As String = "OVERVIEW" Private GRID_INV_COL_REMOVED As Boolean = False Private Sub frmProfiles_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Try ClassAllgemeineFunktionen.LoginOut("LOGOUT") ClassLogger.Add("## ProcessManager beendet - " & Now, False) ClassLogger.Add("", False) Catch ex As Exception ClassLogger.Add("### Fehler bei LogOut") ClassLogger.Add("### Fehler: " & ex.Message) End Try Try ' Position und Größe speichern My.Settings.frmMainSize = Me.Size My.Settings.frmMainPosition = Me.Location My.Settings.Save() Catch ex As Exception ClassLogger.Add("Error in Save FormLayout: " & ex.Message) End Try Try 'Dim XMLPath = GetXML_LayoutName() 'GridViewProfile.SaveLayoutToXml(XMLPath) SaveLayout() Catch ex As Exception End Try End Sub Private Sub frmProfiles_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp Select Case e.KeyCode Case Keys.F12 frmLicense.ShowDialog() End Select End Sub Private Sub frmProfiles_Load(sender As Object, e As System.EventArgs) Handles Me.Load If LogErrorsOnly = False Then ClassLogger.Add(" >> Initializing MainForm....", False) Try UserLookAndFeel.Default.SetSkinStyle("VS2010") Catch ex As Exception End Try tslblVersion.Text = String.Format("Version {0}", My.Application.Info.Version.ToString) If ERROR_STATE = "NO DB-CONNECTION" Or ERROR_STATE = "FAILED DBCONNECTION" Then MsgBox("Bitte hinterlegen Sie die Datenbankverbindung in der Konfiguration!", MsgBoxStyle.Critical, "Fehlende Konfiguration:") frmKonfig.ShowDialog() End If Try If CultureInfo.CurrentUICulture.ThreeLetterISOLanguageName = "eng" Then ClassLogger.Add("## CurrentUICulture.Name: " & CultureInfo.CurrentUICulture.Name, False) IDX_DMS_ERSTELLT = "DMS Created" IDX_DMS_ERSTELLT_ZEIT = "DMS Created Time" My.Settings.Save() End If Catch ex As Exception MessageBox.Show("Fehler bei Laden der CurrentUICulture-Info!", "Achtung:", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Try If Refresh_ConnectionString() = True Then Try tslblLicenses.Text = "Anzahl Lizenzen: " & LICENSE_COUNT If LogErrorsOnly = False Then ClassLogger.Add(" >> Initializing MainForm....", False) If ERROR_STATE = "NO USER" Then MsgBox("Achtung: Sie sind nicht für die Nutzung von ProcessManager freigegeben!" & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") Me.Close() Else ClassLogger.Add(">> Username: " & Environment.UserName, False) 'Wenn license abgelaufen und der User nicht admin ist! If LICENSE_EXPIRED = True Then If USER_IS_ADMIN = False Then MsgBox("Achtung: Lizenz ist abgelaufen oder ungültig!" & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:") Me.Close() End If End If If USER_IS_ADMIN = True Then tstrpbtn_Config.Visible = True Else tstrpbtn_Config.Visible = False End If 'Anzahl der eingeloggten User tslblUserLoggedin.Text = "Anzahl User eingeloggt: " & USERCOUNT_LOGGED_IN End If Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Fehler bei User Check:") End Try Try tsstlblUser.Text = Environment.UserName Decide_Load() Catch ex As System.Exception MsgBox("Fehler bei Laden des Formulars: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Achtung:") End Try If UniversalViewer = "" And Viewer = "uviewer" Then MsgBox("Definieren Sie wo UniversalViewer abgelegt wurde!", MsgBoxStyle.Critical, "Fehlende Konfiguration") frmKonfig.ShowDialog() End If If TimerRefresh.Enabled = False Then TimerRefresh.Start() End If Load_Profile_items() Check_Timer_Notification() Restore_Form_Position() If LogErrorsOnly = False Then ClassLogger.Add(" >> MainForm initialized!", False) End If End Sub Sub Check_Timer_Notification() Try If My.Settings.IntervallReminder <> 0 Then TimerReminder.Stop() TimerReminder.Interval = My.Settings.IntervallReminder * 60000 TimerReminder.Start() Else TimerReminder.Enabled = False TimerReminder.Stop() End If Catch ex As Exception End Try End Sub Sub Restore_Form_Position() Try ' Sind Werte hinterlegt? If My.Settings.frmMainPosition.IsEmpty = False Then If My.Settings.frmMainPosition.X > 0 And My.Settings.frmMainPosition.Y > 0 Then ' Gespeicherte Werte verwenden Me.Location = My.Settings.frmMainPosition End If End If ' Sind Werte hinterlegt? If Not My.Settings.frmMainSize.IsEmpty Then ' Gespeicherte Werte verwenden Me.Size = My.Settings.frmMainSize End If Catch ex As Exception ClassLogger.Add("Error in Load FormLayout: " & ex.Message) End Try End Sub Function Refresh_ConnectionString() Try TBPM_KONFIGURATIONTableAdapter.Connection.ConnectionString = MyConnectionString Me.TBPM_PROFILETableAdapter.Connection.ConnectionString = MyConnectionString Me.TBPM_USERTableAdapter.Connection.ConnectionString = MyConnectionString Me.VWPM_PROFILE_USERTableAdapter.Connection.ConnectionString = MyConnectionString Me.TBPM_PROFILE_FILESTableAdapter.Connection.ConnectionString = MyConnectionString Return True Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Fehler bei Refresh_ConnectionString:") Return False End Try End Function Private Function GetXML_LayoutName() Dim Filename As String = String.Format("GridViewProfiles_UserLayout_{0}.xml", GRID_LOAD_TYPE) Return System.IO.Path.Combine(Application.UserAppDataPath(), Filename) End Function Private Sub SaveLayout() Try Dim xml As String = GetXML_LayoutName() Dim xmlDefault = xml & ".default" If IO.File.Exists(xmlDefault) = False Then GridViewProfile.SaveLayoutToXml(xmlDefault, OptionsLayoutBase.FullLayout) End If GridViewProfile.SaveLayoutToXml(xml, OptionsLayoutBase.FullLayout) Catch ex As Exception ClassLogger.Add("Error while saving layout: " & ex.Message) End Try End Sub Private Sub RestoreLayout() Try Dim xml As String = GetXML_LayoutName() GridViewProfile.RestoreLayoutFromXml(xml, OptionsLayoutBase.FullLayout) Catch ex As Exception ClassLogger.Add("Error while restoring layout: " & ex.Message) End Try End Sub Private Sub ResetLayout() Try Dim xml As String = GetXML_LayoutName() Dim xmlDefault = xml & ".default" IO.File.Delete(xml) GridViewProfile.RestoreLayoutFromXml(xmlDefault, OptionsLayoutBase.FullLayout) Catch ex As Exception ClassLogger.Add("Error while resetting layout: " & ex.Message) End Try End Sub Sub Load_Profile_items() Cursor = Cursors.WaitCursor Try Dim CurrGroup As NavBarGroup = NavBarControl1.Groups(0) Try CurrGroup.ItemLinks.Clear() Catch ex As Exception ClassLogger.Add("CurrGroupClear - Error: " & ex.Message) End Try Load_Profiles_for_User() For Each profile As DataRow In CURR_DT_VWPM_PROFILE_ACTIVE.Rows Dim item1 As NavBarItem = NavBarControl1.Items.Add() item1.Caption = profile.Item("TITLE") item1.Tag = "itmProfile#" & profile.Item("GUID").ToString Dim _image As Image = Nothing _image = DevExpress.Images.ImageResourceCache.Default.GetImage("images/actions/add_16x16.png") item1.LargeImage = _image NavBarControl1.Groups(0).ItemLinks.Add(item1) AddHandler NavBarControl1.LinkClicked, AddressOf navBar_LinkClicked Next If GRID_LOAD_TYPE = "OVERVIEW" Then CurrGroup.Expanded = False End If Catch ex As Exception ClassLogger.Add("Load_Profile_items - Error: " & ex.Message) MsgBox("Unexpected Error in Load_Profile_items - Error: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try Cursor = Cursors.Default End Sub Private Sub navBar_LinkClicked(ByVal sender As Object, ByVal e As NavBarLinkEventArgs) ' Das aktuelle Layout speichern, bevor das neue geladen wird ' und GRID_LOAD_TYPE gesetzt wird. SaveLayout() Dim _tag = e.Link.Item.Tag If Not IsNothing(_tag) Then If _tag.ToString.Contains("itmProfile#") Then _tag = _tag.ToString.Replace("itmProfile#", "") If IsNumeric(_tag) Then If CURRENT_CLICKED_PROFILE_ID <> _tag Then CURRENT_CLICKED_PROFILE_ID = _tag CURRENT_CLICKED_PROFILE_TITLE = e.Link.Item.Caption GRID_LOAD_TYPE = "PROFILE#" & CURRENT_CLICKED_PROFILE_ID.ToString Load_single_Profile() End If End If End If End If End Sub Sub Item_LinkClicked(sender As Object, e As NavBarLinkEventArgs) Try Catch ex As Exception ClassLogger.Add("Item_LinkClicked - Error: " & ex.Message) MsgBox("Unexpected Error in Item_LinkClicked - Error: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Sub Load_Profiles_for_User() Try Dim sql = String.Format("SELECT T.* FROM VWPM_PROFILE_ACTIVE T, TBPM_PROFILE_USER T1, TBDD_USER T2 WHERE T.GUID = T1.PROFIL_ID AND T1.USER_ID = T2.GUID AND UPPER(T2.USERNAME) = UPPER('{0}')", Environment.UserName) CURR_DT_VWPM_PROFILE_ACTIVE = ClassDatabase.Return_Datatable(sql) Catch ex As Exception ClassLogger.Add("Load_Profiles_for_User - Error: " & ex.Message) End Try End Sub Sub Layout_Single_Profile() If GridControlProfile.Visible = False Then GridControlProfile.Visible = True SplitContainerDashboard.Visible = False End If End Sub Sub Layout_Dashboard() Try If GridControlProfile.Visible = True Then Dim groupCount As Integer Dim charts As List(Of ChartControl) GridControlProfile.Visible = False SplitContainerDashboard.Visible = True Dim DT_CHARTS As DataTable Dim sql = "SELECT * FROM TBPM_CHART" DT_CHARTS = ClassDatabase.Return_Datatable(sql, True) Dim Groups As DataRowCollection = DT_CHARTS.Rows groupCount = Groups.Count Configure_Split_Containers(groupCount) charts = New List(Of ChartControl) From {ChartTopLeft, ChartTopRight, ChartBottomLeft, ChartBottomRight} If groupCount > 1 Then For Each gRow As DataRow In Groups Dim groupIndex As Integer = Groups.IndexOf(gRow) Dim groupName As String = gRow.Item("GROUP_ID") Dim groupCharts = DT_CHARTS.Select(String.Format("GROUP_ID = '{0}'", groupName)) Dim chart As ChartControl For Each cRow As DataRow In groupCharts Dim type = cRow.Item("TYPE_CHART") Dim title = cRow.Item("TITLE") Dim guid = cRow.Item("GUID") Dim value = cRow.Item("VALUE") Dim argument = cRow.Item("ARGUMENT") Dim sqlchart = cRow.Item("SQL_COMMAND") sqlchart = sqlchart.ToString.ToUpper.Replace("@USER", USER_USERNAME) Dim DATA_DT As DataTable = ClassDatabase.Return_Datatable(sqlchart) Dim series As Series = Create_Series(title, type) ' Select Current Chart chart = Select_Chart(groupIndex) chart = charts.Item(groupIndex) Try chart.Series.Clear() Catch ex As Exception End Try ' Set DataSource chart.DataSource = DATA_DT ' Set shown Columns for Chart series.ArgumentDataMember = argument series.ValueDataMembers.AddRange(New String() {value}) 'set some options chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True ' Show Data chart.Series.Add(series) Next ' End Charts Next 'End Groups Else ' Create Charts For Each row As DataRow In DT_CHARTS.Rows Dim chart As ChartControl Dim chartIndex As Integer = DT_CHARTS.Rows.IndexOf(row) Dim type = row.Item("TYPE_CHART") Dim title = row.Item("TITLE") Dim guid = row.Item("GUID") Dim value = row.Item("VALUE") Dim argument = row.Item("ARGUMENT") Dim sqlchart = row.Item("SQL_COMMAND") sqlchart = sqlchart.ToString.ToUpper.Replace("@USER", USER_USERNAME) Dim DATA_DT As DataTable = ClassDatabase.Return_Datatable(sqlchart) ' Create Series based on type Dim series As Series = Create_Series(title, type) ' Select Current Chart chart = Select_Chart(chartIndex) Try chart.Series.Clear() Catch ex As Exception End Try ' Set DataSource chart.DataSource = DATA_DT ' Set shown Columns for Chart series.ArgumentDataMember = argument series.ValueDataMembers.AddRange(New String() {value}) 'set some options chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True chart.OptionsPrint.SizeMode = Printing.PrintSizeMode.Stretch ' Show Data chart.Series.Add(series) Next End If End If Catch ex As Exception ClassLogger.Add("Layout Dashboard - Error: " & ex.Message) MsgBox("Unexpected Error in Layout Dashboard - Error: " & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Function Create_Series(title As String, type As String) As Series Dim series As Series Select Case type Case "BAR" series = New Series(title, ViewType.Bar) Case "LINE" series = New Series(title, ViewType.Line) Case "AREA" series = New Series(title, ViewType.Area) Case "PIE" series = New Series(title, ViewType.Pie) series.Label.TextPattern = "{A}: {VP:p0}" Dim view As PieSeriesView = DirectCast(series.View, PieSeriesView) view.Titles.Add(New SeriesTitle()) view.Titles(0).Text = title Case Else series = New Series(title, ViewType.Bar) End Select Return series End Function Private Function Select_Chart(index As Integer) Select Case index Case 0 Return ChartTopLeft Case 1 Return ChartTopRight Case 2 Return ChartBottomLeft Case Else Return ChartBottomRight End Select End Function Private Sub Configure_Split_Containers(VisibleContainers As Integer) Select Case VisibleContainers Case 1 ' Show only ChartTopLeft SplitContainerTop.Panel2Collapsed = True ' Collapse SplitContainerBottom SplitContainerDashboard.Panel2Collapsed = True Case 2 ' Collapse SplitContainerBottom SplitContainerDashboard.Panel2Collapsed = True Case 3 ' Collapse ChartBottomRight SplitContainerBottom.Panel2Collapsed = True ' Show SplitContainerBottom SplitContainerDashboard.Panel2Collapsed = False Case 4 ' Show SplitContainerBottom SplitContainerDashboard.Panel2Collapsed = False End Select End Sub Sub Load_single_Profile() Try Load_Profiles_for_User() Layout_Single_Profile() Dim expression As String expression = "GUID = " & CURRENT_CLICKED_PROFILE_ID Dim TEMP_TABLE = CURR_DT_VWPM_PROFILE_ACTIVE Dim foundRows() As DataRow foundRows = TEMP_TABLE.Select(expression) Dim result = 0 For i = 0 To foundRows.GetUpperBound(0) result += 1 Next If result = 1 Then lblViewType.Text = "Detailansicht Profil: " & CURRENT_CLICKED_PROFILE_TITLE Dim sql = foundRows(0)("SQL_VIEW") sql = sql.Replace("@USER", Environment.UserName) sql = sql.Replace("@MACHINE_NAME", Environment.MachineName) sql = sql.Replace("@DATE", Now.ToShortDateString) CURR_DT_PROFILEGRID = ClassDatabase.Return_Datatable(sql, True) Create_Basic_View() Dim Columns_Removed = GridView_CheckInvalidColumns() RestoreLayout() End If Catch ex As Exception ClassLogger.Add("Load_single_Profile - Error: " & ex.Message) End Try End Sub Sub Create_Basic_View() GridControlProfile.DataSource = Nothing Try GridViewProfile.Columns.Clear() Catch ex As Exception End Try ' Spalte für Status Icon erstellen Dim columnStateIcon As New DataColumn() columnStateIcon.DataType = GetType(Image) columnStateIcon.ColumnName = "ICON" columnStateIcon.Caption = "" CURR_DT_PROFILEGRID.Columns.Add(columnStateIcon) RedDocuments = 0 YellowDocuments = 0 GreenDocuments = 0 For Each row As DataRow In CURR_DT_PROFILEGRID.Rows Dim State As Integer = row.Item("TL_STATE") Select Case State Case 1 RedDocuments += 1 row.Item("ICON") = My.Resources.ampel_rot Case 2 YellowDocuments += 1 row.Item("ICON") = My.Resources.ampel_gelb Case 3 GreenDocuments += 1 row.Item("ICON") = My.Resources.ampel_gruen End Select Next GridControlProfile.DataSource = CURR_DT_PROFILEGRID 'GridControlProfile.ForceInitialize() RestoreLayout() GridViewProfile.Columns.Item("PROFILE_ID").Visible = False GridViewProfile.Columns.Item("GUID").Visible = False GridViewProfile.Columns.Item("FULL_FILE_PATH").Visible = False GridViewProfile.Columns.Item("DOC_ID").Visible = False GridViewProfile.Columns.Item("TL_STATE").Visible = False GridViewProfile.Columns.Item("ICON").MaxWidth = 24 GridViewProfile.Columns.Item("ICON").MinWidth = 24 GridViewProfile.Columns.Item("ICON").AppearanceCell.BackColor = Color.White GridViewProfile.Columns.Item("ICON").Fixed = FixedStyle.Left GridViewProfile.Columns("Last edited").DisplayFormat.FormatType = FormatType.DateTime GridViewProfile.Columns("Last edited").DisplayFormat.FormatString = "dd.MM.yyyy HH:MM:ss" GridViewProfile.Columns.Item("PROFILE_GROUP_TEXT").Visible = False GridViewProfile.Columns.Item("PROFILE_GROUP_COLOR").Visible = False End Sub Private Function GridView_CheckInvalidColumns() As Boolean Dim Columns_Removed = False GRID_INV_COL_REMOVED = False Try For Each grid_column As GridColumn In GridViewProfile.Columns Dim GridDXCaption = grid_column.Caption Dim GridDXTextCaption = grid_column.GetTextCaption Dim GridDXColumnEditName = grid_column.ColumnEditName Dim GridDXFieldName = grid_column.FieldName Dim exists As Boolean = False For Each col As DataColumn In CURR_DT_PROFILEGRID.Columns If col.Caption = GridDXTextCaption Then exists = True Exit For End If Next If exists = False Then If grid_column.Visible = True Then Try grid_column.Dispose() Columns_Removed = True GRID_INV_COL_REMOVED = True Catch ex As Exception End Try End If End If Next Return Columns_Removed Catch ex As Exception ClassLogger.Add("Unexpected Error in GridView_CheckInvalidColumns: " & ex.Message) End Try End Function Sub LoadProfile_PM() Try If Me.Visible = True And frmProfileDesigner.Visible = False Then Load_Profiles_for_User() PROFILE_COUNT = 0 ClassInit.InitBasics() Dim sql = CURRENT_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW") sql = sql.Replace("@USER", Environment.UserName) sql = sql.Replace("@MACHINE_NAME", Environment.MachineName) sql = sql.Replace("@DATE", Now.ToShortDateString) 'String.Format("SELECT '1' TL_STATE,T.PROFIL_ID,T1.TITLE, T.DOC_ID, T.FILE_PATH, T.DMS_ERSTELLT_DATE,[dbo].[FNPM_LAST_WORKUSER_DOC] (T.PROFIL_ID,T.DOC_ID) AS 'Last User',[dbo].[FNPM_LAST_EDITED_DOC] (T.PROFIL_ID,T.DOC_ID) as 'Last edited' FROM TBPM_PROFILE_FILES T, VWPM_PROFILE_USER T1 " & ' "WHERE T.PROFIL_ID = T1.PROFIL_ID " & ' "AND T1.ACTIVE = 1 And (UPPER(T1.USERNAME) = UPPER('{0}')) Order By T1.PRIORITY", Environment.UserName) CURR_DT_PROFILEGRID = ClassDatabase.Return_Datatable(sql, True) If Not IsNothing(CURR_DT_PROFILEGRID) Then Create_Basic_View() Try GridViewProfile.Columns.Item("PROFILE_GROUP_TEXT").GroupIndex = 0 GridViewProfile.Columns.Item("PROFILE_GROUP_TEXT").Visible = False GridViewProfile.Columns.Item("PROFILE_GROUP_COLOR").Visible = False For I = 0 To GridViewProfile.GroupCount - 1 Dim v = GridViewProfile.GroupedColumns(I).ToString Dim ii = Nothing GridViewProfile.GroupedColumns(I).Tag = GridViewProfile.Columns.Item("PROFILE_ID") Next GridViewProfile.OptionsBehavior.AutoExpandAllGroups = True GridViewProfile.OptionsView.ShowGroupedColumns = False Catch ex As Exception ClassLogger.Add("Unexpected Error in Formatting Grid: " & ex.Message) End Try Dim Columns_Removed = GridView_CheckInvalidColumns() RestoreLayout() Else GridControlProfile.DataSource = Nothing Try GridViewProfile.Columns.Clear() Catch ex As Exception End Try End If End If Catch ex As Exception ClassLogger.Add("LoadProfile_PM - Fehler: " & ex.Message) MsgBox("Fehler LoadProfile_PM - Fehler: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Achtung:") End Try End Sub Private Function file_exists(ByVal _file As String) Try If System.IO.File.Exists(_file) Then Return True Else Return False End If Catch ex As Exception MsgBox("Fehler in Funktion bei file_exists - Fehler: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Achtung:") Return False End Try End Function Private Sub ListViewProfile_DoubleClick(sender As System.Object, e As System.EventArgs) End Sub Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click Try frmKonfig.ShowDialog() Refresh_ConnectionString() ' Load_Profil() Check_Timer_Notification() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler beim Laden Grundeinstellungen:") End Try End Sub Private Sub NotifyIcon1_MouseDoubleClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick Me.BringToFront() Me.Visible = True End Sub Private Sub Timer_Tick(sender As System.Object, e As System.EventArgs) Handles TimerRefresh.Tick Load_Profile_items() Decide_Load() tsslblLastSysnc.Text = "Letzte Synchronisation: " & Now.ToLongTimeString End Sub Private Sub NotifyIcon1_Click(sender As System.Object, e As System.EventArgs) Handles NotifyIcon1.Click Me.BringToFront() Me.Visible = True End Sub Private Sub Decide_Load() Try If TimerRefresh.Enabled = True Then TimerRefresh.Stop() End If If GRID_LOAD_TYPE = "OVERVIEW" Then Load_Grid_Overview() ElseIf GRID_LOAD_TYPE.StartsWith("PROFILE#") Then Load_single_Profile() End If Catch ex As Exception ClassLogger.Add("Unexpected error in Decide_load: " & ex.Message) End Try If TimerRefresh.Enabled = False Then TimerRefresh.Start() End If End Sub Private Sub ToolStripButton2_Click(sender As System.Object, e As System.EventArgs) Handles tstrpbtn_Config.Click Dim AdminSecurity As Boolean = False AdminSecurity = TBPM_KONFIGURATIONTableAdapter.cmdGetAdminSecurity() If AdminSecurity = True Then frmLoginAdmin.ShowDialog() Else frmProfileDesigner.ShowDialog() End If Decide_Load() End Sub Private Sub ToolStripButton2_Click_1(sender As Object, e As EventArgs) Handles tsbtnrefresh.Click Load_Profile_items() Decide_Load() End Sub Private Sub ToolStripButton2_Click_2(sender As Object, e As EventArgs) frmAdminPasswort.ShowDialog() End Sub Private Sub ToolStripButton2_Click_3(sender As Object, e As EventArgs) Handles ToolStripButton2.Click frmAbout.ShowDialog() End Sub Public Sub New() Dim splash As New frmSplash() splash.ShowDialog() ' Dieser Aufruf ist für den Designer erforderlich. Try InitializeComponent() Catch ex As Exception ClassLogger.Add("Unexpected Error in Initializing components: " & ex.Message) End Try ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Private Sub TimerReminder_Tick(sender As Object, e As EventArgs) Handles TimerReminder.Tick If PROFILE_COUNT > 0 Then NotifyIcon1.ShowBalloonTip(30000, "ProcessManager-Reminder", "Sie haben unerledigte Dokumente in Ihrem Verantwortungsbereich.", ToolTipIcon.Info) End Sub Private Sub frmMain_Shown(sender As Object, e As EventArgs) Handles Me.Shown End Sub Private Sub GridViewProfile_DoubleClick(sender As Object, e As EventArgs) Handles GridViewProfile.DoubleClick Item_Scope() End Sub Sub Load_Profil_from_Grid(ID As Integer) Try Me.Visible = False CURRENT_ProfilGUID = ID CURRENT_ProfilName = ClassDatabase.Execute_Scalar("SELECT NAME FROM TBPM_PROFILE WHERE GUID = " & CURRENT_ProfilGUID, MyConnectionString) My.Settings.Save() If TimerRefresh.Enabled Then TimerRefresh.Stop() End If frmValidator.ShowDialog() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) End Try Me.Visible = True Decide_Load() End Sub Private Sub GridViewProfile_CustomDrawGroupRow(sender As Object, e As DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs) Handles GridViewProfile.CustomDrawGroupRow Try Dim info As GridGroupRowInfo = TryCast(e.Info, GridGroupRowInfo) Dim view As GridView = sender Dim item As GridGroupSummaryItem = CType(view.GroupSummary(Tag), GridGroupSummaryItem) ' Dim value As Object = view.GetGroupSummaryValue(e.RowHandle, item) If info.Column.FieldName = "PROFILE_GROUP_TEXT" Then info.GroupText = info.GroupValueText Dim _color As String For Each row As DataRow In CURR_DT_VWPM_PROFILE_ACTIVE.Rows If row.Item("PROFILE_GROUP_TEXT") = info.GroupValueText Then _color = row.Item("PROFILE_GROUP_COLOR") End If Next Select Case _color Case "Red" info.Appearance.BackColor = Color.LightSalmon Case "Green" info.Appearance.BackColor = Color.LightGreen Case "Yellow" info.Appearance.BackColor = Color.LightYellow Case Else info.Appearance.BackColor = Color.LightGray End Select End If Catch ex As Exception End Try End Sub Private Sub GridViewProfile_RowStyle(sender As Object, e As RowStyleEventArgs) Handles GridViewProfile.RowStyle Dim view As GridView = TryCast(sender, GridView) Dim row As DataRow = view.GetDataRow(e.RowHandle) If IsNothing(row) Then Exit Sub End If Dim state = row.Item("TL_STATE") e.HighPriority = True Select Case state Case 1 e.Appearance.BackColor = Color.LightSalmon Case 2 e.Appearance.BackColor = Color.LightGoldenrodYellow Case 3 e.Appearance.BackColor = Color.LightGreen End Select End Sub Private Sub GridViewProfile_MouseDown(sender As Object, e As MouseEventArgs) Handles GridViewProfile.MouseDown Dim view As GridView = sender Dim hi As GridHitInfo = view.CalcHitInfo(e.Location) GridCursorLocation = e.Location ' wenn in eine Group Row Doppelt geklickt wurde.. If hi.InGroupRow Then ' Ein/Ausklappen verhindern DXMouseEventArgs.GetMouseArgs(e).Handled = True GridViewItem_Clicked = "GROUP" 'Dim info = hi.Column.FieldName 'Dim info1 = hi.ToString Dim msg = "" ElseIf hi.InDataRow Then GridViewItem_Clicked = "ROW" Else GridViewItem_Clicked = Nothing End If End Sub Private Sub ContextMenuGrid_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ContextMenuGrid.Opening CMFileStart.Enabled = False CMGroupStart.Enabled = False Select Case GridViewItem_Clicked Case "GROUP" CMGroupStart.Enabled = True Case "ROW" CMFileStart.Enabled = True End Select End Sub Private Sub CMFileStart_Click(sender As Object, e As EventArgs) Handles CMFileStart.Click Item_Scope() End Sub Private Sub Item_Scope() Try CURRENT_JUMP_DOC_GUID = 0 Dim hitInfo As GridHitInfo = GridViewProfile.CalcHitInfo(GridCursorLocation) Dim groupRowText Dim PROFIL_ID If hitInfo.InGroupRow Then GridViewItem_Clicked = "GROUP" groupRowText = GridViewProfile.GetGroupRowDisplayText(hitInfo.RowHandle) PROFIL_ID = GridViewProfile.GetRowCellValue(GridViewProfile.GetDataRowHandleByGroupRowHandle(hitInfo.RowHandle), GridViewProfile.Columns("PROFILE_ID")) ElseIf hitInfo.InDataRow Then GridViewItem_Clicked = "ROW" If GRID_LOAD_TYPE = "OVERVIEW" Then groupRowText = GridViewProfile.GetGroupRowDisplayText(GridViewProfile.GetParentRowHandle(hitInfo.RowHandle)) PROFIL_ID = GridViewProfile.GetRowCellValue(GridViewProfile.GetDataRowHandleByGroupRowHandle(GridViewProfile.GetParentRowHandle(hitInfo.RowHandle)), GridViewProfile.Columns("PROFILE_ID")) Else PROFIL_ID = CURRENT_CLICKED_PROFILE_ID End If Else Exit Sub End If Dim PROFIL_TITLE If GRID_LOAD_TYPE = "OVERVIEW" Then groupRowText = LTrim(RTrim(groupRowText.ToString.Replace("PROFILE_GROUP_TEXT: ", ""))) Dim _SPLIT As String() _SPLIT = groupRowText.Split("|") PROFIL_TITLE = LTrim(RTrim(_SPLIT(0).ToString)) Else End If If Not IsNothing(PROFIL_ID) And IsNumeric(PROFIL_ID) Then Dim expression As String expression = "PROFILE_ID = " & PROFIL_ID If hitInfo.InGroupRow Then CURRENT_JUMP_DOC_GUID = 0 CURRENT_DOC_GUID = 0 CURRENT_ProfilGUID = PROFIL_ID Load_Profil_from_Grid(PROFIL_ID) ElseIf hitInfo.InDataRow Then Dim DOC_GUID = GridViewProfile.GetFocusedRowCellValue(GridViewProfile.Columns("GUID")) Dim DOC_ID = GridViewProfile.GetFocusedRowCellValue(GridViewProfile.Columns("DOC_ID")) If IsNothing(DOC_ID) Then Exit Sub Dim DOC_PATH = GridViewProfile.GetFocusedRowCellValue(GridViewProfile.Columns("FULL_FILE_PATH")) 'Checking if table really contains one record with profile-id and docid expression = expression & " AND DOC_ID = " & DOC_ID Dim TEMP_TABLE = CURR_DT_PROFILEGRID Dim foundRows() As DataRow foundRows = TEMP_TABLE.Select(expression) Dim result = 0 For i = 0 To foundRows.GetUpperBound(0) result += 1 Next If result = 1 Then CURRENT_DOC_ID = DOC_ID CURRENT_JUMP_DOC_GUID = DOC_GUID CURRENT_DOC_GUID = CURRENT_JUMP_DOC_GUID CURRENT_DOC_PATH = DOC_PATH Load_Profil_from_Grid(PROFIL_ID) Else Exit Sub End If End If End If Catch ex As Exception MsgBox("Unexpected error in Item_Scope: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub CMGroupStart_Click(sender As Object, e As EventArgs) Handles CMGroupStart.Click Item_Scope() End Sub Private Sub NavBarItemOverview_LinkClicked(sender As Object, e As NavBarLinkEventArgs) Handles NavBarItemOverview.LinkClicked ' Das aktuelle Layout speichern, bevor das neue geladen wird ' und GRID_LOAD_TYPE gesetzt wird. SaveLayout() Load_Grid_Overview() End Sub Sub Load_Grid_Overview() SplitContainerDashboard.Visible = False Layout_Single_Profile() GRID_LOAD_TYPE = "OVERVIEW" CURRENT_CLICKED_PROFILE_ID = 0 lblViewType.Text = "Gesamtübersicht" Cursor = Cursors.WaitCursor Try Me.VWPM_PROFILE_USERTableAdapter.FillByActive(Me.DD_DMSLiteDataSet.VWPM_PROFILE_USER, Environment.UserName) Dim DT As DataTable = DD_DMSLiteDataSet.Tables("VWPM_PROFILE_USER") If DT.Rows.Count = 0 Then ClassLogger.Add(" >> no profiles for user: '" & Environment.UserName & "' configured!", False) MsgBox("Keine Profile für Ihren User: '" & Environment.UserName & "' hinterlegt", MsgBoxStyle.Exclamation, "Achtung:") Cursor = Cursors.Default Exit Sub End If Load_Profiles_for_User() PROFILE_COUNT = 0 ClassInit.InitBasics() Dim sql = CURRENT_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW") If Not IsDBNull(sql) Then MsgBox("SQL for Groups missing!", MsgBoxStyle.Critical, "Achtung:") Else sql = sql.Replace("@USER", Environment.UserName) sql = sql.Replace("@MACHINE_NAME", Environment.MachineName) sql = sql.Replace("@DATE", Now.ToShortDateString) CURR_DT_PROFILEGRID = ClassDatabase.Return_Datatable(sql, True) End If If Not IsNothing(CURR_DT_PROFILEGRID) Then If CURR_DT_PROFILEGRID.Rows.Count = 0 Then lblViewType.Text = "Aktuell keine Workflowdaten vorhanden!" 'MsgBox("Aktuell keine Workflowdaten vorhanden!", MsgBoxStyle.Information) GridControlProfile.DataSource = Nothing Try GridViewProfile.Columns.Clear() Catch ex As Exception End Try Cursor = Cursors.Default Exit Sub End If ' Spalte für Status Icon erstellen Dim columnStateIcon As New DataColumn() columnStateIcon.DataType = GetType(Image) columnStateIcon.ColumnName = "ICON" columnStateIcon.Caption = "" CURR_DT_PROFILEGRID.Columns.Add(columnStateIcon) RedDocuments = 0 YellowDocuments = 0 GreenDocuments = 0 For Each row As DataRow In CURR_DT_PROFILEGRID.Rows Dim State As Integer = row.Item("TL_STATE") Select Case State Case 1 RedDocuments += 1 row.Item("ICON") = My.Resources.ampel_rot Case 2 YellowDocuments += 1 row.Item("ICON") = My.Resources.ampel_gelb Case 3 GreenDocuments += 1 row.Item("ICON") = My.Resources.ampel_gruen End Select Next GridControlProfile.DataSource = CURR_DT_PROFILEGRID 'GridControlProfile.ForceInitialize() Dim Columns_Removed = GridView_CheckInvalidColumns() RestoreLayout() Try GridViewProfile.Columns.Item("PROFILE_GROUP_TEXT").GroupIndex = 0 GridViewProfile.Columns.Item("PROFILE_GROUP_TEXT").Visible = False GridViewProfile.Columns.Item("PROFILE_GROUP_COLOR").Visible = False For I = 0 To GridViewProfile.GroupCount - 1 Dim v = GridViewProfile.GroupedColumns(I).ToString Dim ii = Nothing GridViewProfile.GroupedColumns(I).Tag = GridViewProfile.Columns.Item("PROFILE_ID") Next GridViewProfile.Columns.Item("PROFILE_ID").Visible = False GridViewProfile.Columns.Item("GUID").Visible = False GridViewProfile.Columns.Item("FULL_FILE_PATH").Visible = False GridViewProfile.Columns.Item("DOC_ID").Visible = False GridViewProfile.Columns.Item("TL_STATE").Visible = False GridViewProfile.Columns.Item("ICON").MaxWidth = 24 GridViewProfile.Columns.Item("ICON").MinWidth = 24 GridViewProfile.Columns.Item("ICON").AppearanceCell.BackColor = Color.White GridViewProfile.Columns.Item("ICON").Fixed = DevExpress.XtraGrid.Columns.FixedStyle.Left GridViewProfile.Columns("Last edited").DisplayFormat.FormatType = FormatType.DateTime GridViewProfile.Columns("Last edited").DisplayFormat.FormatString = "dd.MM.yyyy HH:MM:ss" GridViewProfile.OptionsBehavior.AutoExpandAllGroups = True GridViewProfile.OptionsView.ShowGroupedColumns = False Catch ex As Exception ClassLogger.Add("Unexpected Error in Formatting Grid: " & ex.Message) End Try Try For Each grid_column As GridColumn In GridViewProfile.Columns Dim GridDXCaption = grid_column.Caption Dim GridDXTextCaption = grid_column.GetTextCaption Dim GridDXColumnEditName = grid_column.ColumnEditName Dim GridDXFieldName = grid_column.FieldName Dim exists As Boolean = False For Each col As DataColumn In CURR_DT_PROFILEGRID.Columns If col.Caption = GridDXTextCaption Then exists = True Exit For End If Next If exists = False Then If grid_column.Visible = True Then Try grid_column.Dispose() Catch ex As Exception End Try End If End If Next Catch ex As Exception ClassLogger.Add("Unexpected Error in Checking ColumnsGrid: " & ex.Message) End Try 'GridViewProfile.SaveLayoutToXml(GetXML_LayoutName()) SaveLayout() Else GridControlProfile.DataSource = Nothing Try GridViewProfile.Columns.Clear() Catch ex As Exception End Try End If Catch ex As Exception ClassLogger.Add("Load_Grid_Overview - Fehler: " & ex.Message) MsgBox("Fehler Load_Grid_Overview - Fehler: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Achtung:") End Try Cursor = Cursors.Default End Sub Private Sub tsmiValidationProfil_Click(sender As Object, e As EventArgs) Handles tsmiValidationProfil.Click If CURRENT_CLICKED_PROFILE_ID <> 0 Then Load_Profil_from_Grid(CURRENT_CLICKED_PROFILE_ID) Else MsgBox("Bitte wählen Sie zuerst ein Profil aus!", MsgBoxResult.Ok) End If End Sub Private Sub NavBarItemDashboard_LinkClicked(sender As Object, e As NavBarLinkEventArgs) Handles NavBarItemDashboard.LinkClicked If TimerRefresh.Enabled = True Then TimerRefresh.Stop() End If Layout_Dashboard() End Sub Private Sub TabellenlayoutZurücksetzenToolStripMenuItem_Click_1(sender As Object, e As EventArgs) Handles TabellenlayoutZurücksetzenToolStripMenuItem.Click ResetLayout() End Sub End Class