RecordOrganizer/app/DD-Record-Organizer/frmNodeNavigation.vb
2025-06-18 09:33:52 +02:00

3503 lines
150 KiB
VB.net

Imports System.IO
Imports System.Text
Imports System.Threading
Imports DD_Record_Organizer.ClassDocGrid
Imports DevExpress.Data
Imports DevExpress.Data.Filtering
Imports DevExpress.Utils
Imports DevExpress.XtraEditors
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraPrinting
Imports DevExpress.XtraRichEdit.API.Native
Imports DevExpress.XtraScheduler
Imports DevExpress.XtraSplashScreen
Imports DevExpress.XtraTreeList
Imports DevExpress.XtraTreeList.Columns
Imports DevExpress.XtraTreeList.Nodes
Imports DevExpress.XtraTreeList.Nodes.Operations
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Public Class frmNodeNavigation
#Region "Laufzeitvariablen & Konstanten"
Private NNLogger As Logger
Private Property DT_STRUCTURE_NODES As DataTable
Private Property DT_ADDING_USERS As DataTable
Private Property DT_VWPMO_CONSTRUCTOR_FORMS As DataTable
Private Property RunningTaskTokenSource As New CancellationTokenSource
Private Property _EntityId As Short
Private Property oConstructID As Short
Private Property CONSTRUCTORID As Integer
Private Property CONSTRUCTOR_DETAIL_ID As Short
Private Property _RowReadOnly As Boolean = False
Private Property ADD_RECORDS_CONSTR As Boolean = True
Private Property TV_Collapse_ExpandState As String = "Collapse"
Private _ActiveGrid As GridControl = Nothing
Private Property WindowsEx As WindowsEx
Private Property DT_CONTROLS_ENTITY As DataTable
Private Property DT_COLUMNS_GRID_ENTITY As DataTable
Private Property DT_DOCRESULT_DROPDOWN_ITEMS As DataTable
Private Property DT_RESULTLIST_OPTIONS As DataTable
Private Property DT_RESULTLIST_VARIABLE_VALUE As DataTable
Private Property DT_ENTITY_DATA As DataTable
Private Property ENTITY_TYPE As String = ""
Private Property DT_TBPMO_FORM_VIEW As DataTable
Private Property DT_CONSTRUCT_VIEW As DataTable
Private Property COUNT_RO_CONTROLS As Integer = 0
Private Property SELECTED_NODE_RECORD_ID As Integer
Private Property SELECTED_NODE_CAPTION As String
Private Property FORMVIEW_ID As Integer
Private Property FORM_LOADED As Boolean = False
Private Property FORM_SHOWN As Boolean = False
Private Property SAVE_ROUTINE_ACTIVE As Boolean = False
Private Property ENTITY_LOADING_PROCESS As Boolean = False
Private Property RECORD_ENABLED As Boolean = False
Private Property Node_AfterSelect As Boolean = False
Private Property EDIT_STATE As EditState = EditState.None
Private Property ERROR_WHILE_SAVING As Boolean = False
Private Property IW_USER As String
Private Property IW_COMMENT As String
Private Property INWORK_FILE As Boolean
Private Property INWORK_MULTIPLE_FILES_SET_FREE As Boolean
Private Property CONTROL_DOCTYPE_MATCH As Integer = 0
Private Property MyFocusedNode As TreeListNode
Private Property oCollapseInAction As Boolean = False
Private Property MyTreeListViewState As ClassTreeListViewState
Private Property AvailableConfigNodes As New List(Of frmNewNode.NodeConfig)
Private Property CurrentNodeConfigId As Integer = 0
Private Property mySelectedDocs As List(Of clsWMDoc)
Private Property Current_DocList As ClassDocGrid
Public CtrlBuilder As ClassControlBuilder
Public CtrlCommandUI As ClassControlCommandsUI
Public JumpKeyID As Long
Private Property ParentNodeChangeinAction As Boolean = False
Private Property ChildNodeGuid As Integer = 0
Private Property ClassNodeCommands As ClassNodeCommands
Private Property ViewerInit As Boolean = False
Private PA_NODE_GUID_STAMM As Integer = 0
Private PA_NODE_CONFIG_USER_STAMM As Integer = 0
Private Debug As Boolean = False
Public Enum EditState
None
Insert
Update
Delete
End Enum
#End Region
Public Sub New(pEntityID As Int16, pConstructID As Int16, pNodeKeyID As Integer)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
_EntityId = pEntityID
oConstructID = pConstructID
Dim oMyClassName = $"frmNodeNavigation_Entity{_EntityId}"
NNLogger = LOGCONFIG.GetLogger(oMyClassName)
NNLogger.Debug("Loading NodeNavigation for Entity [{0}]", pEntityID)
Current_DocList = New ClassDocGrid(GridViewDoc_Search)
WindowsEx = New WindowsEx(LOGCONFIG)
JumpKeyID = pNodeKeyID
ClassNodeCommands = New ClassNodeCommands(LOGCONFIG, MYDB_ECM)
End Sub
Sub Save_Splitter_Layout()
Try
CONFIG.Config.TreeListSplitterWidth = SplitContainerTreeList.SplitterPosition
CONFIG.Config.DocumentViewerSplitterWidth = SplitContainerDocView.SplitterPosition
CONFIG.Config.DocumentSearchSplitterWidth = SplitContainerDocumentSearch.SplitterPosition
CONFIG.Config.DocumentViewerShown = Not SplitContainerDocView.Collapsed
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Sub Load_Splitter_Layout()
Try
If CONFIG.Config.TreeListSplitterWidth > 0 Then
SplitContainerTreeList.SplitterPosition = CONFIG.Config.TreeListSplitterWidth
End If
If CONFIG.Config.DocumentViewerSplitterWidth > 0 Then
SplitContainerDocView.SplitterPosition = CONFIG.Config.DocumentViewerSplitterWidth
End If
If CONFIG.Config.DocumentSearchSplitterWidth > 0 Then
SplitContainerDocumentSearch.SplitterPosition = CONFIG.Config.DocumentSearchSplitterWidth
End If
If ViewerInit Then
SplitContainerDocView.Collapsed = Not CONFIG.Config.DocumentViewerShown
Else
SplitContainerDocView.Collapsed = True
End If
checkShowPreview.Checked = CONFIG.Config.DocumentViewerShown
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Private Async Function frmNodeNavigation_Load(sender As Object, e As EventArgs) As Task Handles Me.Load
NNLogger.Debug("Loading NodeNavigation")
CONSTRUCTORID = CURRENT_CONSTRUCTOR_ID
DT_VWPMO_CONSTRUCTOR_FORMS = ClassFormCommands.LoadConstructorForms(CURRENT_SCREEN_ID, oConstructID, USER_LANGUAGE)
'Dim Sql = String.Format("SELECT *, [dbo].[FNPMO_GETOBJECTCAPTION]('{0}','FORMVIEW_TITLE' + CONVERT(VARCHAR(5), FORM_VIEW_ID), {1}) AS 'CAPTION' " &
' "FROM VWPMO_CONSTRUCTOR_FORMS WHERE SCREEN_ID = {2} AND CONSTRUCT_ID = {3} ORDER BY SEQUENCE", USER_LANGUAGE, CURRENT_SCREEN_ID, CURRENT_SCREEN_ID, oConstructID)
'DT_VWPMO_CONSTRUCTOR_FORMS = MYDB_ECM.GetDatatable(Sql)
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))
Try
If DocumentViewer.Init(LOGCONFIG, MYGDPICTURE_LICENSE_KEY, New DigitalData.Controls.DocumentViewer.DocumentViewer.ToolbarSettings() With {
.ShowPrintButton = True,
.ShowRotateButton = True,
.ShowFlipButton = True,
.ShowSettingButton = True
}) = False Then
MsgBox("Viewer konnte nicht initialisiert werden. Bitte informieren Sie den Systembetreuer und prüfen Ihr Log.", MsgBoxStyle.Information)
SplitContainerDocView.Collapsed = True
DocumentViewer.Visible = False
Else
ViewerInit = True
End If
Catch ex As Exception
NNLogger.Warn($"Error while init DocumentViewer: {ex.Message}")
End Try
If USER_IS_ADMIN Then
TreeListDevexpress.ContextMenuStrip = CMSAdmin_Treeview
Else
TreeListDevexpress.ContextMenuStrip = Nothing
End If
' Hintergrund Bild initialisieren
'If (System.IO.File.Exists(Application.StartupPath + "\Resources\windream-portrait_col_RGB_Wordpress.png")) Then
' WM_LOGO = New Bitmap(Application.StartupPath + "\Resources\windream-portrait_col_RGB_Wordpress.png")
' BACKGROUND_HELPER = New ClassBackgroundHelper(GridViewDoc_Search, WM_LOGO) '
' ' MessageBox.Show("File: " & Application.StartupPath + "\Resources\Pic1.png" & " doesn't exist. Check file and try again.")
' End
'End If
ClassWindowLocation.LoadFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "NODE_NAVIGATION")
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)
If DT_CONSTRUCT_VIEW.Rows.Count = 1 Then
'Load Input Grid
Me.Text = DT_CONSTRUCT_VIEW.Rows(0).Item("FORM_TITLE")
'Die Standards ein/ausblenden
End If
Load_Datafor_Entity()
If WM_READ_ONLY Then
tsitmDMSReadOnly.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
Else
tsitmDMSReadOnly.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End If
FORM_LOADED = True
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Loading Form part 4")
End Try
Await Load_nodes()
End Function
Private Async Function Load_nodes() As Task
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
NNLogger.Debug("Loading nodes for entity [{0}]", CURRENT_ENTITY_ID)
Try
Dim oTable = Await ClassNodeCommands.LoadNodes(CURRENT_ENTITY_ID)
DT_STRUCTURE_NODES = oTable
Dim oNodeConfigSql = String.Format("select T.* from TBPMO_STRUCTURE_NODES_CONFIGURATION T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T.ENTITY_ID = {0}", CURRENT_ENTITY_ID)
Dim DT_TREEVIEW_CONFIGURATION = MYDB_ECM.GetDatatable(oNodeConfigSql)
For Each row As DataRow In DT_TREEVIEW_CONFIGURATION.Rows
Try
Dim bimage = row.ItemEx(Of Object)("NODE_IMAGE", Nothing)
If bimage Is Nothing Then
Continue For
End If
Dim oNodeImage = ByteArrayToBitmap(bimage)
ImageCollection1.AddImage(oNodeImage, row.Item("GUID"))
Catch ex As Exception
NNLogger.Error(ex)
End Try
Next
TreeListDevexpress.DataSource = DT_STRUCTURE_NODES
TreeListDevexpress.KeyFieldName = "GUID"
TreeListDevexpress.ParentFieldName = "PARENT_GUID"
TreeListDevexpress.Columns("SEQUENCE").SortOrder = SortOrder.Ascending
TreeListDevexpress.StateImageList = ImageCollection1
Dim oVisibleColumns = New List(Of String) From {"NODE_CAPTION"} ', "NAVIGATION_PATH"}
For Each oColumn In TreeListDevexpress.Columns
If oVisibleColumns.Contains(oColumn.FieldName) = False Then
oColumn.Visible = False
End If
Next
Catch ex As Exception
NNLogger.Error(ex)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Function
Private Sub TreeListDevexpress_ColumnFilterChanged(sender As Object, e As EventArgs)
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 Async Sub TreeListDevexpress_FocusedNodeChanged(sender As Object, e As FocusedNodeChangedEventArgs) Handles TreeListDevexpress.FocusedNodeChanged
CURRENT_NODE_GUID = 0
If FORM_SHOWN = False Or oCollapseInAction Then
Exit Sub
End If
MyFocusedNode = Nothing
If btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always Then
btnCreateNewNode.Enabled = False
End If
If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
Exit Sub
End If
If e.Node Is Nothing Then
Exit Sub
End If
'For Each treeListNode As TreeListNode In TreeListDevexpress.Selection
'FocusedNode = TreeListNode
MyFocusedNode = e.Node
RPGNodes.Enabled = True
Dim oNodeId = e.Node.Id
Console.Write($"Node ID: {oNodeId}")
Dim oRowObject = TreeListDevexpress.GetRow(oNodeId)
If TypeOf oRowObject IsNot DataRowView Then
Exit Sub
End If
'If oNodeId = 0 Then
' Exit Sub
'End If
Dim oRowView As DataRowView = oRowObject
Dim oRow As DataRow = oRowView.Row
Dim oGuid = oRow.Item("GUID")
Dim oNodeCaption = oRow.Item("NODE_CAPTION")
Dim oNodeConfigId = oRow.Item("NODE_CONFIG_ID")
Dim oRecordId = oRow.ItemEx("RECORD_ID", 0)
Dim oHasRecordId = (oRecordId > 0)
Dim oIsConfigNode = (oNodeConfigId = 1000)
Dim oParentNode = e.Node.ParentNode
Dim oLoadRecordData As Boolean = True
If ENTITY_TYPE = "Personal file" And oNodeConfigId <> PA_NODE_CONFIG_USER_STAMM Then
oLoadRecordData = False
End If
CURRENT_NODE_GUID = oNodeId
CURRENT_RECORD_ID = oRecordId
CURRENT_ENTITY_ID = _EntityId
SELECTED_NODE_CAPTION = oNodeCaption
' BEGIN NEW NODE
Dim oConfigNodeChildren = MyFocusedNode.Nodes.Where(Function(n) n.Item("TYPE_NODE") = 1000)
Dim oHasConfigNodeChildren = oConfigNodeChildren.Any()
Dim oConfigNodeChildrenList = oConfigNodeChildren.ToList()
CurrentNodeConfigId = oNodeConfigId
AvailableConfigNodes.Clear()
If btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always And
Not IsNothing(NODE_CONFIGURABLE_NODES_DT) Then
Dim oNodeConfigList = NODE_CONFIGURABLE_NODES_DT.Select($"PARENT_NODE = {oNodeConfigId}").
Cast(Of DataRow).
Select(Function(row) New frmNewNode.NodeConfig() With {
.Id = row.Item("GUID"),
.Name = row.Item("NAME")
}).ToList()
AvailableConfigNodes = oNodeConfigList
If AvailableConfigNodes.Count > 0 Then
btnCreateNewNode.Enabled = True
Else
btnCreateNewNode.Enabled = False
End If
End If
' END NEW NODE
CURRENT_NODEID = oGuid
If oHasRecordId Then
Update_Status_Label(True, $"NodeGUID {oGuid} - RecordID {CURRENT_RECORD_ID}", EditState.None)
Node_AfterSelect = True
ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID)
CURRENT_SEARCH_TYPE = "RECORD"
DisableEditMode()
' muss vor show selected record data kommen,
' sodass die datasource für die angehakten werte existiert (checked list box)
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesListWithPlaceholders(_EntityId, CURRENT_RECORD_ID, 0, CtrlBuilder.AllControls, _EntityId)
CtrlBuilder.WatchRecordChanges = True
Await Show_Selected_Record_Data(CURRENT_RECORD_ID, oLoadRecordData)
Show_SelectedDoc(True)
ClassRightManagement.Check_Set_Rights(CURRENT_RECORD_ID, _EntityId)
CONTROL_HANDLING()
If RIGHT_RECORD_AND_FILE_READ_ONLY = False And CtrlCommandUI.IsInsert = False Then
If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then
bbtnitmRecEdit.Enabled = False
bbtnitmRecSave.Enabled = False
Else
bbtnitmRecEdit.Enabled = True
In_Visible_Record_Group(True)
End If
End If
If RIGHT_RECORD_AND_FILE_READ_ONLY = True Or oLoadRecordData = False Then
bbtnitmRecEdit.Enabled = False
bbtnitmRecSave.Enabled = False
btnCreateNewNode.Enabled = False
Else
bbtnitmRecEdit.Enabled = True
In_Visible_Record_Group(True)
' btnCreateNewNode.Enabled = True
End If
If RIGHT_READ_ONLY_DOC = False Then
Doc_ReadOnlyHandler(True)
End If
'Liste der geänderten Control Values leeren
CtrlBuilder.ControlsChanged.Clear()
Load_DocGrid_Layout()
'Load_Grid_Layout()
'Load_Variants_Grid_Layout()
'swAll.Done()
Node_AfterSelect = False
Else
Update_Status_Label(True, $"NodeGUID {oGuid}", EditState.None)
ClassControlValues.ClearControlValues(pnlControls.Controls)
Await Show_Selected_Record_Data(0, oLoadRecordData)
End If
If ParentNodeChangeinAction = True And CURRENT_NODEID <> 0 Then
Dim result As DialogResult = Await ShowDialogAsync()
If result = DialogResult.Yes Then
Dim oSQL = $"UPDATE TBPMO_STRUCTURE_NODES SET PARENT_GUID = {CURRENT_NODEID} , CHANGED_WHO = '{USER_USERNAME}' WHERE GUID = {ChildNodeGuid}"
If MYDB_ECM.ExecuteNonQuery(oSQL) = True Then
ShowDialogAsync2()
Else
Console.WriteLine("Fehler")
End If
ParentNodeChangeinAction = False
Else
MessageBox.Show("Abgebrochen!", "Info")
End If
End If
End Sub
Public Async Function ShowDialogAsync() As Task(Of DialogResult)
Return Await Task.Run(Function()
Return MessageBox.Show("Der Parent-Node wird nun getauscht? Wollen Sie fortfahren?",
"Bestätigung erforderlich",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question)
End Function)
End Function
Public Async Sub ShowDialogAsync2()
Await Task.Run(Sub()
MsgBox("Der Parent-Node wurde erfolgreich getauscht. Aktualisieren Sie nun die Ansicht!", MsgBoxStyle.Information)
End Sub)
End Sub
Public Sub Update_Document_Label(pDocumentCount As Integer)
Dim oMessage
If pDocumentCount = 0 Then
oMessage = "Keine Dateien für '"
If CURRENT_SEARCH_TYPE = "ENTITY" Then
oMessage &= " Entität gefunden"
If USER_LANGUAGE <> "de-DE" Then
oMessage = "No files found for entity: "
End If
ElseIf CURRENT_SEARCH_TYPE = "RECORD" Then
oMessage &= SELECTED_NODE_CAPTION & "' gefunden"
If USER_LANGUAGE <> "de-DE" Then
oMessage = "No files found for object '" & SELECTED_NODE_CAPTION & "'"
End If
If USER_LANGUAGE <> "de-DE" Then
oMessage = "No files found for record " & SELECTED_NODE_RECORD_ID
End If
ElseIf CURRENT_SEARCH_TYPE = "NODE_DOWN" Then
oMessage = "Keine Dateien für Knotenunterstruktur gefunden"
If USER_LANGUAGE <> "de-DE" Then
oMessage = "No files found in Node-Substructure"
End If
Else
oMessage = "Keine Dateien für Volltextsuche (" & CURRENT_FULLTEXT_PATTERN & ") gefunden"
If USER_LANGUAGE <> "de-DE" Then
oMessage = "No files found for fulltext-search (" & CURRENT_FULLTEXT_PATTERN & ")"
End If
End If
Else
oMessage = "Dateien für Record: " & SELECTED_NODE_RECORD_ID
If CURRENT_SEARCH_TYPE = "ENTITY" Then
oMessage = "Dateien für Entität: "
If USER_LANGUAGE <> "de-DE" Then
oMessage = "files for entity: "
End If
oMessage &= " (" & pDocumentCount.ToString & ")"
ElseIf CURRENT_SEARCH_TYPE = "RECORD" Then
oMessage = String.Format("Dateien für Objekt '{0}' ", SELECTED_NODE_CAPTION)
If USER_LANGUAGE <> "de-DE" Then
oMessage = String.Format("Files for Object '{0}'", SELECTED_NODE_CAPTION)
End If
oMessage &= " (" & pDocumentCount.ToString & ")"
ElseIf CURRENT_SEARCH_TYPE = "NODE_DOWN" Then
oMessage = "Dateien für Knotenunterstruktur"
If USER_LANGUAGE <> "de-DE" Then
oMessage = "files found in Node-Substructure"
End If
oMessage &= " (" & pDocumentCount.ToString & ")"
Else
oMessage = String.Format("Ergebnis der Volltextsuche")
If USER_LANGUAGE <> "de-DE" Then
oMessage = String.Format("Result of Fulltext-Search")
End If
oMessage &= " (" & pDocumentCount.ToString & ")"
End If
End If
GridViewDoc_Search.ViewCaption = oMessage
End Sub
Public Sub Update_Status_Label(visible As Boolean, Optional text As String = "", Optional state As EditState = EditState.None)
bsiInfo.Caption = text
If visible = True Then
bsiInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
Else
bsiInfo.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End If
Select Case state
Case EditState.Insert
bsiInfo.ItemAppearance.Normal.BackColor = Color.Yellow
Case EditState.Update
bsiInfo.ItemAppearance.Normal.BackColor = Color.LightBlue
Case Else
bsiInfo.ItemAppearance.Normal.BackColor = Color.LightGray
End Select
End Sub
Public Sub Update_Notification_Label(visible As Boolean, pMessage As String, pColor As String)
bsiNotification.Caption = pMessage
If visible = True Then
bsiNotification.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
Else
bsiNotification.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End If
Select Case pColor
Case "Yellow"
bsiNotification.ItemAppearance.Normal.BackColor = Color.Yellow
Case "Blue"
bsiNotification.ItemAppearance.Normal.BackColor = Color.LightBlue
Case Else
bsiNotification.ItemAppearance.Normal.BackColor = Color.Transparent
End Select
End Sub
Public Sub Update_DocID_Label(visible As Boolean, Optional text As String = "", Optional state As EditState = EditState.None)
bsiDocID.Caption = text
If visible = True Then
bsiDocID.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
Else
bsiDocID.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End If
Select Case state
Case EditState.Insert
bsiDocID.ItemAppearance.Normal.BackColor = Color.Yellow
Case EditState.Update
bsiDocID.ItemAppearance.Normal.BackColor = Color.LightBlue
Case Else
bsiDocID.ItemAppearance.Normal.BackColor = Color.LightGray
End Select
End Sub
Private Sub TreeListDevexpress_GetStateImage(sender As Object, e As GetStateImageEventArgs) Handles TreeListDevexpress.GetStateImage
Dim Column_Config_ID As DevExpress.XtraTreeList.Columns.TreeListColumn = TreeListDevexpress.Columns("NODE_CONFIG_ID")
Dim configid = e.Node.GetDisplayText(Column_Config_ID)
e.Node.StateImageIndex = ImageCollection1.Images.Keys.IndexOf(configid)
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})", oConstructID)
DT_ADDING_USERS = MYDB_ECM.GetDatatable(oSql)
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Load_Adding_users")
End Try
End Sub
Private Sub Load_Configurable_Nodes()
Try
btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
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})", oConstructID)
NODE_CONFIGURABLE_NODES_DT = MYDB_ECM.GetDatatable(oSql)
If Not IsNothing(NODE_CONFIGURABLE_NODES_DT) Then
If NODE_CONFIGURABLE_NODES_DT.Rows.Count > 0 Then
btnCreateNewNode.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Error in Load_Configurable_Nodes")
End Try
End Sub
Sub Load_Datafor_Entity()
NNLogger.Debug("Loading Data for Entity [{0}]", _EntityId)
Try
If _EntityId <> CURRENT_ENTITY_ID Then
NNLogger.Info("Entity-Data needs to be reloaded...")
CURRENT_ENTITY_ID = _EntityId
CURRENT_CONSTRUCTOR_ID = oConstructID
Load_Adding_users()
Load_Configurable_Nodes()
End If
Dim sw As New SW("Load_Datafor_Entity")
Dim result = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable()
Select form
Where form.Item("FORM_ID") = _EntityId).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")
FAU_AD_DOMAIN = ""
FAU_AD_SERVER = ""
FAU_AD_USER = ""
FAU_AD_USER_PW = ""
If IsNothing(DT_ADDING_USERS) Then
Load_Adding_users()
End If
If DT_ADDING_USERS.Rows.Count > 0 Then
'Überprüfen ob für diese Entität ein spezifischer windream-User verwendet wird, wenn Dateien abgelegt werden?
Dim query1 = From _user In DT_ADDING_USERS.AsEnumerable()
Select _user Where _user.Item("ENTITY_ID") = _EntityId
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
NNLogger.Error(ex)
NNLogger.Warn("- the Password for FileAddingUser '" & FAU_AD_USER & "' could not be decrypted")
PWplainText = ""
End Try
FAU_AD_USER_PW = PWplainText
Next
End If
sw.Done()
Load_Entity_Data_CONTROLS_RECORDS()
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, "Load_Datafor_Entity: " & ex.StackTrace)
End Try
End Sub
Sub Load_Entity_Data_CONTROLS_RECORDS()
Try
NNLogger.Debug("START Load_Entity_Data")
Dim sw As New SW("Load_Entity_Data")
' Me.Cursor = Cursors.WaitCursor
RECORD_CHANGED = False
SELECTED_NODE_RECORD_ID = 0
Dim expression As String
Dim sql
'Dim sql = "SELECT CONTROL_ID, CONTROL_READ_ONLY FROM VWPMO_CONTROL_SCREEN WHERE CTRLTYPE_ID NOT IN (1) AND CONTROL_ENTITY_ID = " & oEntityID
DT_CONTROLS_ENTITY = ClassHelper.FILTER_DATATABLE(DT_VWPMO_CONTROL_SCREEN, "CTRLTYPE_ID NOT IN (1) AND CONTROL_ENTITY_ID = " & _EntityId, "")
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
bbtnitmRecEdit.Enabled = False
bbtnitmRecSave.Enabled = False
'tsButtonDelete.Enabled = False
Else
bbtnitmRecEdit.Enabled = True
bbtnitmRecSave.Enabled = True
' tsButtonDelete.Enabled = True
End If
Dim oRow = (From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable()
Select form
Where form.Item("FORM_ID") = _EntityId).Single()
CURRENT_CONSTRUCTOR_DETAIL_ID = oRow.Item("GUID")
CONTROL_DOCTYPE_MATCH = oRow.Item("CONTROL_DOCTYPE_MATCH")
SQL_RECORD_AND_FILE_READ_ONLY = oRow.Item("SQL_RIGHT_READ_AND_VIEW_ONLY")
SQL_DOC_READ_ONLY = oRow.Item("SQL_RIGHT_WINDREAM_VIEW")
ENTITY_TYPE = oRow.Item("FORM_TYPE")
Try
ADD_RECORDS_CONSTR = oRow.Item("ADD_RECORDS")
Catch ex As Exception
NNLogger.Error(ex)
ADD_RECORDS_CONSTR = True
End Try
If ENTITY_TYPE = "Personal file" Then
Dim oSQL = "SELECT CAT_STRING FROM TBDD_CATALOG WHERE CAT_TITLE = 'PA_NODE_GUID_STAMM'"
PA_NODE_GUID_STAMM = MYDB_ECM.GetScalarValue(oSQL)
oSQL = "SELECT CAT_STRING FROM TBDD_CATALOG WHERE CAT_TITLE = 'PA_NODE_CONFIG_USER_STAMM'"
PA_NODE_CONFIG_USER_STAMM = MYDB_ECM.GetScalarValue(oSQL)
End If
expression = String.Format("ENTITY_ID = {0} AND LANGUAGE = '{1}'", _EntityId, USER_LANGUAGE)
DT_COLUMNS_GRID_ENTITY = ClassHelper.FILTER_DATATABLE(DT_DOCSEARCH_RESULTLIST_CONFIG, expression, "SEQUENCE")
expression = String.Format("ENTITY_ID = {0} AND TYPE_ID = 10 AND LANGUAGE = '{1}'", _EntityId, USER_LANGUAGE)
DT_DOCRESULT_DROPDOWN_ITEMS = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_DOCRESULT_DROPDOWN_ITEMS, expression, "SEQUENCE")
NNLogger.Debug($"Found {DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count} DT_DOCRESULT_DROPDOWN_ITEMS!")
DT_RESULTLIST_OPTIONS = ClassHelper.FILTER_DATATABLE(CURRENT_VARIABLE_CONTROLS, "ENTITY_ID = " & _EntityId, "")
expression = String.Format("ENTITY_ID = {0} AND LANGUAGE = '{1}' AND COLUMN_VIEW LIKE 'VALUE%'", _EntityId, 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") = _EntityId).Single()
'sql = String.Format("select * from TBPMO_RIGHT_USER WHERE USER_ID = {0} AND oEntityID = {1}", USER_GUID, oEntityID)
DT_RIGHTS_USER = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_RIGHT_USER, "ENTITY_ID = " & _EntityId, "")
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})", _EntityId, USER_GUID)
DT_RIGHTS_GROUP = MYDB_ECM.GetDatatable(sql)
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, _EntityId, USER_GUID)
SELECTED_NODE_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") = _EntityId).Single()
CURRENT_PARENT_ENTITY_ID = 0
' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS
Dim query = From form In DT_VWPMO_CONSTRUCTOR_FORMS.AsEnumerable()
Select form
Where form.Item("FORM_ID") = _EntityId
Dim QuickViewSQL = query.Single().Item("SQL_QUICK_VIEW")
CURRENT_ENTITYSQL = Get_Grid_Sql_NODE_NAV(CONSTRUCTORID, _EntityId, CURRENT_CONSTRUCTOR_DETAIL_ID, USER_GUID)
ClassDOC_SEARCH.Get_DOC_RESULTTABLE(DT_RESULTLIST_OPTIONS, DT_RESULTLIST_VARIABLE_VALUE, DT_COLUMNS_GRID_ENTITY, _EntityId, SELECTED_NODE_RECORD_ID, True, True)
DT_TBPMO_FORM_VIEW = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_FORM_VIEW, "FORM_ID = " & _EntityId & " AND SCREEN_ID = " & CURRENT_SCREEN_ID, "")
CURRENT_ENTITYSTRING = DT_TBPMO_FORM_VIEW.Rows(0).Item("FORM_TITLE")
FORMVIEW_ID = DT_TBPMO_FORM_VIEW.Rows(0).Item("GUID")
Load_Controls(FORMVIEW_ID)
Try
Dim async As New ClassAsyncSQL(CURRENT_ENTITYSQL)
async.bw.RunWorkerAsync()
While async.bw.IsBusy
Application.DoEvents()
End While
CURRENT_DT_ENTITY_RECORDS = async.dt
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error Async EntitySQL", ex.Message, ex.StackTrace)
End Try
If IsNothing(CURRENT_DT_ENTITY_RECORDS) Then
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in getting Entity-Data - Check logfile")
Else
CURRENT_DT_ENTITY_RECORDS.TableName = "VWPMO_ENTITY_TABLE" & _EntityId
' Dim SQL_AutoValues = "SELECT GUID AS CONTROL_ID, CONNECTION_ID_1 AS CONNECTION_ID, SQL_COMMAND_1 AS SQL_COMMAND FROM TBPMO_CONTROL WHERE CONNECTION_ID_1 <> '' AND SQL_COMMAND_1 <> '' AND FORM_ID = " & oEntityID
Dim DT_AUTOVALUES = ClassHelper.FILTER_DATATABLE(CURRENT_TBPMO_CONTROL, "CONNECTION_ID_1 > 0 AND SQL_COMMAND_1 <> '' AND FORM_ID = " & _EntityId, "")
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
NNLogger.Error(ex)
NNLogger.Warn("Could not set the primary Key(Record-ID): " & ex.Message)
End Try
CtrlBuilder.WatchRecordChanges = False
ClassControlValues.LoadControlValuesList(_EntityId, CtrlBuilder.MasterPanel.Controls)
CtrlBuilder.WatchRecordChanges = True
'Zurücksetzen
ENTITY_LOADING_PROCESS = True
Dim RecLoaded As Boolean = False
End If
Load_Splitter_Layout()
sw.Done()
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Load_Entity_Data", ex.Message, ex.StackTrace)
Finally
'Me.Cursor = Cursors.Default
ENTITY_LOADING_PROCESS = True
End Try
End Sub
Sub Update_Record_Label(RecordId As Integer)
Try
Dim oSql 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 oTable As DataTable
oTable = MYDB_ECM.GetDatatable(oSql)
If Not IsNothing(oTable) Then
If oTable.Rows.Count = 0 Then
bsitmRecordID.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Exit Sub
End If
Dim oRow As DataRow = oTable.Rows(0)
bsitmRecordID.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
Dim oAddedWho = oRow.Item(0)
Dim oAddedWhen = oRow.Item(1)
Dim oChangedWho = oRow.Item(2)
Dim oChangedWhen = oRow.Item(3)
Dim CreateChangeString = String.Format("Added by '{0}', when: {1}", oAddedWho, oAddedWhen)
If CtrlCommandUI.IsInsert = False AndAlso (oRow.ItemEx(2, "") <> "") Then
CreateChangeString += String.Format(" - Changed by '{0}', when: {1}", oChangedWho, oChangedWhen)
End If
'bsitmRecordID.Caption = String.Format("Record ({0}) - {1}", RecordId, CreateChangeString.ToString)
bsitmRecordID.Caption = String.Format("{0}", CreateChangeString.ToString)
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Private Async Function Show_Selected_Record_Data(pRecordId As Integer, pLoadRecordData As Boolean) As Task
Dim oHandle = SplashScreenManager.ShowOverlayForm(Me)
Try
NNLogger.Debug("Show_Selected_Record_Data: " & pRecordId.ToString)
Dim ENTITY_ROW = (From form In DT_ENTITY_DATA.AsEnumerable()
Select form
Where form.Item("GUID") = _EntityId).Single()
'Update_Status_Label(False, "")
NNLogger.Debug("RECORD ID: " & pRecordId.ToString)
'Me.pnlControls.Visible = True
SELECTED_NODE_RECORD_ID = pRecordId
CURRENT_PARENT_RECORD_ID = 0
RIGHT_CONTROL_CHANGED = False
ENTITY_RELOAD_AFT_CONTROL_LOAD = False
CtrlBuilder.WatchRecordChanges = False
If pnlControls.Enabled = False Then pnlControls.Enabled = True
If pLoadRecordData = True Then
ClassControlValues.LoadControlValues(SELECTED_NODE_RECORD_ID, 0, _EntityId, CtrlBuilder.AllControls, _EntityId)
CtrlBuilder.WatchRecordChanges = True
End If
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_NODE_RECORD_ID)
Dim oDocumentsFound = Await RUN_WDSEARCH_GRID(True)
If ViewerInit Then
If oDocumentsFound = 0 Then
Close_Document_Viewer()
RibbonPageGroupDocResult.Enabled = False
SplitContainerDocView.Collapsed = True
Else
RibbonPageGroupDocResult.Enabled = True
SplitContainerDocView.Collapsed = False
End If
End If
Update_Document_Label(oDocumentsFound)
sw.Done()
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in SelectedRecord_ShowData: ", ex.Message)
Finally
SplashScreenManager.CloseOverlayForm(oHandle)
End Try
End Function
#Region "Controls"
Sub Load_Controls(frmview_id As Integer)
Dim sw As New SW("Load_Controls")
FORMVIEW_ID = frmview_id
_EntityId = DT_TBPMO_FORM_VIEW.Rows(0).Item("FORM_ID")
CURRENT_ENTITY_ID = _EntityId
CtrlBuilder = New ClassControlBuilder(pnlControls)
CtrlCommandUI = New ClassControlCommandsUI(CtrlBuilder,
ContextMenuDetails,
AddressOf NewEditAppointment)
CtrlCommandUI.LoadControls(_EntityId)
Lock_RecordControls(True)
AddHandler CtrlBuilder.OnRecordChanged, AddressOf OnRecordChanged
' AddHandler CtrlBuilder.OnMouseHover, AddressOf HandleToolTip
sw.Done()
End Sub
Private Sub OnRecordChanged(sender As Object, e As System.EventArgs)
If ENTITY_LOADING_PROCESS Then
RECORD_CHANGED = True
End If
End Sub
'Private Sub HandleToolTip(sender As Object, e As EventArgs)
' Dim control As Windows.Forms.Control = DirectCast(sender, Windows.Forms.Control)
' Dim id As Integer = DirectCast(control.Tag, ClassControlMetadata).Id
' Dim hint = ClassControlValueCache.LoadHint(id)
' If Not IsNothing(hint) Then
' 'show hint
' Console.WriteLine("Showing hint: " & hint)
' ToolTipController.ShowHint(hint.ToString, ToolTipLocation.RightCenter)
' Else
' ToolTipController.HideHint()
' End If
'End Sub
Sub Lock_RecordControls(state As Boolean)
Lock_Record_Controls_Recursive(state, pnlControls.Controls)
End Sub
Sub Lock_Record_Controls_Recursive(state As Boolean, controls As System.Windows.Forms.Control.ControlCollection)
For Each Control As System.Windows.Forms.Control In controls
Dim controlId As Integer = DirectCast(Control.Tag, ClassControlMetadata).Id
Select Case Control.GetType()
Case GetType(System.Windows.Forms.GroupBox)
Lock_Record_Controls_Recursive(state, DirectCast(Control, GroupBox).Controls)
Case GetType(System.Windows.Forms.TextBox)
Dim txt As System.Windows.Forms.TextBox = CType(Control, System.Windows.Forms.TextBox)
txt.ReadOnly = CHECK_CONTROL_CONFIGURED_RO(controlId, state)
Case Else
Control.Enabled = Not CHECK_CONTROL_CONFIGURED_RO(controlId, state) 'state
End Select
Next
End Sub
Private Function CHECK_CONTROL_CONFIGURED_RO(CONTROL_ID As Integer, state As Boolean)
Try
' LINQ für Zugriff auf DT_VWPMO_CONSTRUCTOR_FORMS
Dim result1 = (From form In DT_CONTROLS_ENTITY.AsEnumerable()
Select form
Where form.Item("CONTROL_ID") = CONTROL_ID).SingleOrDefault()
If Not IsNothing(result1) Then
Dim locked = result1.Item("CONTROL_READ_ONLY")
If state = False And locked = True Then
state = True
End If
End If
Return state
Catch ex As Exception
NNLogger.Error(ex)
Return state
End Try
End Function
Sub CONTROL_HANDLING()
Dim sw As New SW("CONTROL_HANDLING")
bbtnitmRecSave.Enabled = True
bbtnitmRecEdit.Enabled = True
'tsButtonDelete.Enabled = True
'tslblLocked.Visible = False
'tslblFileslocked.Visible = False
'pnlPositions.Enabled = True
If SQL_RECORD_AND_FILE_READ_ONLY <> "" Or SQL_DOC_READ_ONLY <> "" Then
If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
bbtnitmRecEdit.Enabled = False
bbtnitmRecSave.Enabled = False
'tsButtonDelete.Enabled = False
'tslblLocked.Visible = True
'TabFollowUp.PageEnabled = False
'tsmiMassChanges.Enabled = False
End If
If RIGHT_READ_ONLY_DOC = True Then
' tslblFileslocked.Visible = True
Doc_ReadOnlyHandler(False)
End If
Else
If DT_RIGHTS_GROUP.Rows.Count > 0 Or DT_RIGHTS_USER.Rows.Count > 0 Then
'DATENSATZ-RECHTE
If RIGHT_ADD_R = False Then
' tsButtonAdd.Enabled = False
End If
If RIGHT_EDIT_R = False Then
' tslblLocked.Visible = True
bbtnitmRecEdit.Enabled = False
bbtnitmRecSave.Enabled = False
' tsButtonDelete.Enabled = False
' tsmiMassChanges.Enabled = False
If RIGHT_ADD_R = False Then
bbtnitmRecSave.Enabled = False
End If
End If
If RIGHT_DELETE_R = False Then
' tsButtonDelete.Enabled = False
End If
'DATEI-RECHTE
If RIGHT_READ_ONLY_DOC = True Then
' tslblFileslocked.Visible = True
End If
End If
End If
sw.Done()
End Sub
#End Region
#Region "Appointments"
Sub NewEditAppointment(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Try
Dim ctrl As Windows.Forms.Control = sender
ClassFunctionCommandsUI.NewEditAppointment(ctrl.Name, _EntityId, SELECTED_NODE_RECORD_ID, pnlControls.Controls)
Catch ex As Exception
NNLogger.Error(ex)
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
NNLogger.Error(ex)
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_NODE_RECORD_ID
End Function
#End Region
Sub Doc_ReadOnlyHandler(state As Boolean)
Dim sw As New SW("Doc_ReadOnlyHandler")
If state = False Then
GridControlDocSearch.ContextMenuStrip = cmsResultFilesBasic
'tslblDocViewLocked.Visible = True
ElseIf state = True Then
GridControlDocSearch.ContextMenuStrip = cmsResultFileDetail
' tslblDocViewLocked.Visible = False
End If
sw.Done()
End Sub
Private LastFindFilterText As String = ""
Private Sub TreeListDevexpress_ColumnFilterChanged_1(sender As Object, e As EventArgs) Handles TreeListDevexpress.ColumnFilterChanged
'oFilterActive = True
'If TreeListDevexpress.FindFilterText <> "" Then
Dim oFilterText As String = TreeListDevexpress.FindFilterText
'Dim oNode = TreeListDevexpress.FocusedNode
If LastFindFilterText <> "" And oFilterText = "" Then
If Not IsNothing(MyFocusedNode) Then
oCollapseInAction = True
TreeListDevexpress.CollapseAll()
TreeListDevexpress.FocusedNode = MyFocusedNode
TreeListDevexpress.MakeNodeVisible(MyFocusedNode)
oCollapseInAction = False
End If
ElseIf oFilterText <> "" Then
TreeListDevexpress.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.ShowAlways
ElseIf oFilterText = "" Then
TreeListDevexpress.OptionsView.ShowFilterPanelMode = ShowFilterPanelMode.Never
End If
LastFindFilterText = oFilterText
' End If
End Sub
Private Sub TreeListDevexpress_ParseFindPanelText(sender As Object, e As ParseFindPanelTextEventArgs) Handles TreeListDevexpress.ParseFindPanelText
' Exit if the search text is empty
If String.IsNullOrWhiteSpace(e.FindPanelText) Then
Return
End If
Dim oInput As String = e.FindPanelText
' Split the search text into individual criteria
Dim criteriaStrings As String() = New String() {oInput} '.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
' Construct the filter string by searching in the desired fields
Dim filterConditions As IEnumerable(Of String) = criteriaStrings.Select(Function(str) _
$"Contains([NODE_CAPTION], '{str}') OR Contains([NAVIGATION_PATH], '{str}')")
' Join the conditions with OR
Dim filterString As String = String.Join(" OR ", filterConditions)
' Parse the filter string into a CriteriaOperator
Dim findCriteria As CriteriaOperator = CriteriaOperator.Parse(filterString)
' Set the find criteria for the TreeList
e.SetFindCriteria(findCriteria)
' TreeListDevexpress.ActiveFilterCriteria = findCriteria
' Mark the event as handled
e.Handled = True
End Sub
'Private Sub TreeListDevexpress_DoubleClick(sender As Object, e As EventArgs) Handles TreeListDevexpress.DoubleClick
' If TreeListDevexpress.FindFilterText <> "" Then
' TreeListDevexpress.FindFilterText = ""
' End If
' MyFocusedNode = Nothing
' Dim oMyTreeList As TreeList = sender
' Dim oTlHI As TreeListHitInfo = oMyTreeList.CalcHitInfo(oMyTreeList.PointToClient(MousePosition))
' If Not IsNothing(oTlHI.Node) Then
' MyFocusedNode = sender
' End If
'End Sub
'Private Async Sub LoadRecord(pRecord As Integer)
' Try
' CURRENT_RECORD_ID = pRecord
' CURRENT_SEARCH_TYPE = "RECORD"
' ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID)
' 'Wird jetzt bei BeforeRowChange überprüft
' DisableEditMode()
' ' muss vor show selected record data kommen,
' ' sodass die datasource für die angehakten werte existiert (checked list box)
' CtrlBuilder.WatchRecordChanges = False
' ClassControlValues.LoadControlValuesListWithPlaceholders(CURRENT_ENTITY_ID, CURRENT_RECORD_ID, 0, CtrlBuilder.AllControls, _EntityId)
' CtrlBuilder.WatchRecordChanges = True
' If CURRENT_RECORD_ID > 0 Then
' Await Show_Selected_Record_Data(CURRENT_RECORD_ID)
' End If
' ClassRightManagement.Check_Set_Rights(CURRENT_RECORD_ID, _EntityId)
' CONTROL_HANDLING()
' If CURRENT_RECORD_ID > 0 Then
' If RIGHT_RECORD_AND_FILE_READ_ONLY = False And CtrlCommandUI.IsInsert = False Then
' If DT_CONTROLS_ENTITY.Rows.Count = COUNT_RO_CONTROLS Then
' bbtnitmRecEdit.Enabled = False
' bbtnitmRecSave.Enabled = False
' 'tsButtonDelete.Enabled = False
' Else
' ' bbtnitmEditRec.Enabled = True
' End If
' End If
' If RIGHT_RECORD_AND_FILE_READ_ONLY = True Then
' ' bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' ' bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' ' bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' ' bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
' Else
' ' bbtniCopyRecord.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' ' bbtniNewVariant2.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' ' bbtniParentLink.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' ' bbtniWFTask.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
' End If
' 'tsButtonAdd.Enabled = False
' 'MsgBox(SplitContainerFORM.Collapsed)
' 'MsgBox(SplitContainerMain.Collapsed)
' 'MsgBox(SplitContainerTop.Collapsed)
' End If
' 'Liste der geänderten Control Values leeren
' CtrlBuilder.ControlsChanged.Clear()
' Catch ex As Exception
'NNLogger.Error(ex)
' ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error:", ex.Message & vbNewLine & ex.StackTrace)
' End Try
'End Sub
Private Sub DateiÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DateiÖffnenToolStripMenuItem.Click
Open_File()
End Sub
Private Sub frmNodeNavigation_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
If TrySave_Automatic() = False Then
e.Cancel = True
End If
Save_Splitter_Layout()
ClassWindowLocation.SaveFormLocationSize(Me, CONSTRUCTORID, CURRENT_SCREEN_ID, "NODE_NAVIGATION")
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
NNLogger.Error(ex)
End Try
End If
End Sub
Private Sub pnlControls_Enter(sender As Object, e As EventArgs) Handles pnlControls.Enter
In_Visible_Record_Group(True)
End Sub
Private Sub pnlControls_Leave(sender As Object, e As EventArgs) Handles pnlControls.Leave
In_Visible_Record_Group(False)
End Sub
Private Sub GridControlDocSearch_MouseDown(sender As Object, e As MouseEventArgs) Handles GridControlDocSearch.MouseDown
In_Visible_Record_Group(False)
End Sub
Sub In_Visible_Record_Group(oBool As Boolean)
RibbonPageGroupRecord.Visible = oBool
RibbonPageGroupRecord.Enabled = oBool
End Sub
Private Sub bbtnitmEditRec_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmRecEdit.ItemClick
If RECORD_ENABLED = False Then
EnableEditMode()
Else
If TrySave_Automatic() = True Then
DisableEditMode()
End If
End If
End Sub
Sub EnableEditMode()
Dim EditingUser = ClassRecordState.IsRecordLocked(SELECTED_NODE_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_NODE_RECORD_ID)
Exit Sub
End If
BarStaticItemLocked.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
Else
BarStaticItemLocked.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
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_NODE_RECORD_ID)
End If
' Alle Tabs außer Detailsicht deaktivieren
'DeactivateTabs()
CURRENT_CHANGE_STEP += 1
Lock_RecordControls(False)
Me.bbtnitmRecSave.Enabled = True
Dim stg As String
If USER_LANGUAGE = "de-DE" Then
stg = "Bearbeiten beenden"
Else
stg = "End Edit"
End If
bbtnitmRecEdit.Caption = stg
If RIGHT_RECORD_AND_FILE_READ_ONLY = False Then
' tsButtonDelete.Enabled = True
End If
CURRENT_RECORD_ID = SELECTED_NODE_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(_EntityId, SELECTED_NODE_RECORD_ID, 0, CtrlBuilder.AllControls, _EntityId)
CtrlBuilder.WatchRecordChanges = True
RECORD_ENABLED = True
CURRENT_RECORD_ENABLED = True
If RIGHT_READ_ONLY_DOC = False Then
Doc_ReadOnlyHandler(True)
End If
pnlControls.Focus()
'If RECORD_ENABLED = False Then
' ClassControlValues.LoadControlValuesList(SELECTED_RECORD_ID, ENTITY_ID, CtrlBuilder.AllControls)
'End If
End Sub
Sub DisableEditMode()
If SELECTED_NODE_RECORD_ID = 0 Then Exit Sub
Dim sw As New SW("DisableEditMode")
ClassRecordState.UnlockRecord(SELECTED_NODE_RECORD_ID)
Dim isinsert As Boolean
If IsNothing(CtrlCommandUI) Then
isinsert = 0
Else
isinsert = CtrlCommandUI.IsInsert
End If
ClassRecordCommands.CHECK_RECORD_FINAL(SELECTED_NODE_RECORD_ID, isinsert)
Lock_RecordControls(True)
RECORD_ENABLED = False
CURRENT_RECORD_ENABLED = False
'If ADD_RECORDS_CONSTR = False Then
' tsButtonAdd.Enabled = False
'Else
' tsButtonAdd.Enabled = True
'End If
Dim stg As String
If USER_LANGUAGE = "de-DE" Then
stg = "Bearbeiten"
Else
stg = "Edit"
End If
bbtnitmRecEdit.Caption = stg
bbtnitmRecSave.Enabled = False
If Not IsNothing(CtrlCommandUI) Then
'ActivateAllTabs()
End If
If RECORD_ENABLED = True Then
ClassControlValues.UnloadControlValuesList(SELECTED_NODE_RECORD_ID, _EntityId, 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
Doc_ReadOnlyHandler(True)
End If
sw.Done()
End Sub
#Region "Record Funktionen"
Sub Focus_Control(name As String)
Dim controls As Windows.Forms.Control.ControlCollection = pnlControls.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
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
''' <summary>
''' Überprüft beim manuellen Speichern, ob Datensatz verändert wurde und
''' ob alle Muss-Felder ausgefüllt wurden
''' </summary>
''' <returns>
''' Gibt False zurück, wenn nicht alle Muss-Felder gefüllt wurde,
''' ansonsten True
''' </returns>
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
NNLogger.Error(ex)
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_NODE_RECORD_ID, _EntityId)
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
''' <summary>
''' Fragt den Benutzer beim Datensatzwechsel, ob Änderungen gespeichert werden sollen. Gibt False zurück, wenn Mussfelder ausgefüllt werden müssen, ansonsten True.
''' </summary>
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_NODE_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
' 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
NNLogger.Error(ex)
MessageBox.Show("Error in TrySave_Automatic: " & vbNewLine & ex.Message)
Return False
End Try
End Function
#End Region
Private Sub Customer_Run_Procedures()
Try
Dim DT As DataTable = MYDB_ECM.GetDatatable("SELECT * FROM TBPMO_RUN_PROCEDURES WHERE FORM_ID = " & _EntityId)
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", _EntityId)
prsql = prsql.ToUpper.Replace("@ENTITY_ID", _EntityId)
prsql = prsql.ToUpper.Replace("@RECORD_ID", SELECTED_NODE_RECORD_ID)
MYDB_ECM.ExecuteNonQuery(prsql)
Next
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Customer_Run_Procedures: ", ex.Message)
End Try
End Sub
Private Async Function RUN_WDSEARCH_GRID(pShowSplashscreen As Boolean) As Task(Of Integer)
Dim oHandle As IOverlaySplashScreenHandle
If pShowSplashscreen Then
oHandle = SplashScreenManager.ShowOverlayForm(Me)
End If
Dim sw As New SW("RUN_WDSEARCH_GRID")
Dim oFilesFound As Integer = 0
Try
If CURRENT_RECORD_ID = 0 Then
GridControlDocSearch.DataSource = Nothing
Return 0
End If
bsitmtInfoDoc.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
If CURRENT_SEARCH_TYPE = "NODE_DOWN" Then
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, CURRENT_NODE_GUID)
Dim DT_ASYNC As DataTable = Await MYDB_ECM.GetDatatableAsync(sql)
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_COLUMNS_GRID_ENTITY, _EntityId, SELECTED_NODE_RECORD_ID, True)
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
oFilesFound = 0
Else
If DT_RESULT.Rows.Count > 0 Then 'Es gibt Suchergebnisse
If DT_RESULT.Rows.Count > 0 Then
If CURRENT_SEARCH_TYPE = "FULLTEXT" Then
GridViewDoc_Search.ShowFindPanel()
GridViewDoc_Search.FindFilterText = CURRENT_FULLTEXT_PATTERN
End If
If Not IsNothing(DT_DOCRESULT_DROPDOWN_ITEMS) Then
If DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count > 0 Then
NNLogger.Info($"RUN_WDSEARCH_GRID - DT_DOCRESULT_DROPDOWN_ITEMS [{DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count}]!")
End If
End If
ClassDocGrid.FillColumns(
GridViewDoc_Search,
DT_RESULT,
DT_COLUMNS_GRID_ENTITY,
DT_DOCRESULT_DROPDOWN_ITEMS,
AddressOf OnCBSelectedValueChanged,
AddressOf OnDateSelectedValueChanged,
AddressOf OnTextSelectedValueChanged,
AddressOf OnCheckboxValueChanged,
CURRENT_SEARCH_TYPE, SELECTED_NODE_RECORD_ID)
End If
'BbtnitmDocSearch.Enabled = TruefRe
oFilesFound = DT_RESULT.Rows.Count
Else
GridControlDocSearch.DataSource = Nothing
oFilesFound = 0
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Run WD-Search Database: ", ex.Message)
Finally
sw.Done()
bsitmtInfoDoc.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
If pShowSplashscreen Then
SplashScreenManager.CloseOverlayForm(oHandle)
End If
End Try
Return oFilesFound
End Function
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 = {_EntityId}"
CURRENT_DOCSEARCH_SQL = MYDB_ECM.GetScalarValue(oSQL)
If CURRENT_DOCSEARCH_SQL <> String.Empty Then
Dim oText = $"Die Entität-weite Suche wird im Hintergrund ausgeführt und in einem separaten Fenster angezeigt sobald sie fertig ist."
If USER_LANGUAGE <> "de-De" Then
oText = $"The entity-wide search will be started in background. The result will be displayed when ready."
End If
Update_Notification_Label(True, oText, "Yellow")
CURRENT_DOCSEARCH_SQL = CURRENT_DOCSEARCH_SQL.Replace("@ENTITY_ID", _EntityId)
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 = "Entity-wide search"
Else
CURRENT_DOCSEARCH_CAPTION = "Entitätssuche"
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()
myformThread.Join()
Update_Notification_Label(False, "", "")
Else
MsgBox("Please config the entity-search properly! " & vbNewLine & oSQL, vbOKOnly, "Information")
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error RUN_ENTITY_DOC_SEARCH", ex.Message, ex.StackTrace)
End Try
sw.Done()
End Sub
Private Sub OnCBSelectedValueChanged(sender As Object, e As EventArgs)
Try
Dim oDocuments = Current_DocList.SelectedDocuments
Dim docId As Integer = oDocuments.First.DocId
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, SELECTED_NODE_RECORD_ID, configId, value, user)
If MYDB_ECM.ExecuteNonQuery(Sql) = False Then
MsgBox("The Update-Command was not successful! Check the log!",, MsgBoxStyle.Critical)
End If
Catch ex As Exception
NNLogger.Error(ex)
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 oDocuments = Current_DocList.SelectedDocuments
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
NNLogger.Error(ex)
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 = oDocuments.First.DocId
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, SELECTED_NODE_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!")
End If
Catch ex As Exception
NNLogger.Error(ex)
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 oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 0 Then
Exit Sub
End If
Dim TextBox As TextEdit = sender
Dim value = TextBox.EditValue
Try
Dim oDocID As Integer = oDocuments.First.DocId
Catch ex As Exception
NNLogger.Info($"Error while gettin oDocuments.First.DocId - OnTextSelectedValueChanged: {ex.Message}")
Exit Sub
End Try
If value.ToUpper = "Not displayable in Group-Search".ToUpper Or IsNothing(oDocuments) 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
If Not IsNothing(mainView) Then
Dim detailView As GridView = mainView.GetDetailView(mainView.FocusedRowHandle, mainView.GetRelationIndex(mainView.FocusedRowHandle, "docIdDetails"))
Dim detailRow As DataRowView = detailView.GetRow(detailView.FocusedRowHandle)
Dim docId As Integer
Dim configid = detailRow.Item("CONFIG_ID")
Try
docId = oDocuments.First.DocId
If docId = 0 Then
MsgBox("Sorry no document was selected! Please try again!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Catch ex As Exception
NNLogger.Debug($"Error while gettin oDocuments.First.DocId - OnTextSelectedValueChanged: {ex.Message}")
Exit Sub
End Try
Dim user As String = USER_USERNAME
Dim Sql As String = String.Format("EXEC PRPMO_DOC_VALUE_UPD_INS {0}, {1}, {2},'{3}','{4}'", docId, SELECTED_NODE_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!")
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
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 oDocuments = Current_DocList.SelectedDocuments
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 = oDocuments.First.DocId
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, SELECTED_NODE_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!")
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in OnCheckboxValueChanged: ", ex.Message)
End Try
End Sub
#Region "GridViewEvents"
Private Sub GridViewDoc_Search_LayoutSave(sender As Object, e As EventArgs) Handles GridViewDoc_Search.ColumnFilterChanged, GridViewDoc_Search.ColumnWidthChanged, GridViewDoc_Search.ColumnPositionChanged
Save_DocGrid_Layout()
End Sub
Private Sub GridViewDoc_Search_FocusedColumnChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedColumnChangedEventArgs) Handles GridViewDoc_Search.FocusedColumnChanged
If FORM_SHOWN = True Then
Refresh_DocID()
End If
End Sub
Private Sub GridViewDoc_Search_FocusedRowChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs) Handles GridViewDoc_Search.FocusedRowChanged
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 GridViewDoc_Search_MasterRowExpanded(sender As Object, e As CustomMasterRowEventArgs) Handles GridViewDoc_Search.MasterRowExpanded
Refresh_DocID()
End Sub
Sub Refresh_DocID()
Dim oDocuments = Current_DocList.SelectedDocuments
If Not IsNothing(oDocuments) Then
If oDocuments.Count <> 0 Then
Dim omsg = "Doc-ID: " & oDocuments.First.DocId
Update_DocID_Label(True, omsg, EditState.Update)
Else
Update_DocID_Label(True, "DocRow not selected", EditState.None)
End If
Else
Update_DocID_Label(False)
End If
End Sub
Sub Save_DocGrid_Layout()
Try
If FORM_LOADED And Node_AfterSelect = False Then
Dim XMLPath = Get_DocGrid_Layout_Filename()
GridViewDoc_Search.SaveLayoutToXml(XMLPath)
Update_Notification_Label(True, "Grid Layout Saved", "")
Else
Update_Notification_Label(True, "Could not store layout", "Yellow")
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Sub Load_DocGrid_Layout()
Try
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
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", ex.Message, ex.StackTrace)
End Try
End Sub
Private Function Get_DocGrid_Layout_Filename()
Dim EntityRegex As New RegularExpressions.Regex("\s+\(\d+\)")
Dim Filename As String = String.Format("GridViewDoc_Search_{0}_{1}_UserLayout.xml", "Entity" & _EntityId, CONSTRUCTOR_DETAIL_ID)
LAYOUT_DOC_GRIDVIEW = System.IO.Path.Combine(Application.UserAppDataPath(), Filename)
Return LAYOUT_DOC_GRIDVIEW
End Function
#End Region
Function GetSafeFilename(filename As String)
Return String.Join("_", filename.Split(Path.GetInvalidFileNameChars()))
End Function
Private Async Function Reset_View_layout() As Task
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()
Await RUN_WDSEARCH_GRID(True)
Else
MsgBox("Resetting the layout was not successful - File not existing!", MsgBoxStyle.Information)
End If
Catch ex As Exception
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Resetting Layout DocGrid: ", ex.Message)
End Try
Me.Cursor = Cursors.Default
End Function
Private Async Sub bbtnitmDocResultLayoutReset_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmDocResultLayoutReset.ItemClick
Await Reset_View_layout()
End Sub
Private Sub bbtnitmDocResultLayoutSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmDocResultLayoutSave.ItemClick
Save_DocGrid_Layout()
End Sub
Private Sub GridControlDocSearch_DoubleClick(sender As Object, e As EventArgs) Handles GridControlDocSearch.DoubleClick
Open_File()
End Sub
#Region "Dropping Files"
Sub Drag_Enter(e As DragEventArgs)
If _EntityId <> 0 Then
If WM_READ_ONLY = False Then
ClassDragDrop.Drag_enter(e)
Else
Update_Notification_Label(True, "READ ONLY ACCESS", "")
End If
Else
Update_Notification_Label(True, "No entity selected", "Yellow")
End If
End Sub
Private Async Function Drag_Drop(e As DragEventArgs) As Task
Try
If ClassDragDrop.Drop_File(e) = False Then
Exit Function
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 Function
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 Function
End If
If _EntityId <> 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 Function
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 Function
End If
End If
If RECORD_CHANGED = True Then
If Save_Record() = False Then
Exit Function
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(CURRENT_RECORD_ID, CONTROL_DOCTYPE_MATCH)
Catch ex As Exception
NNLogger.Error(ex)
CURRENT_CONTROL_DOCTYPE_MATCH = 0
CURRENT_CONTROL_DOCTYPE_MATCH = ""
End Try
End If
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_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
Await RUN_WDSEARCH_GRID(True)
ClassHelper.GetDocrecordLinks(CURRENT_RECORD_ID)
TimerClearResultfiles.Start()
Else
NNLogger.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
' NNLogger.Warn("RIGHT_RECORD_AND_FILE_READ_ONLY is set! No DragDrop allowed")
'End If
If RIGHT_READ_ONLY_DOC = True Then
NNLogger.Warn("RIGHT_WD_FORBIDDEN is set! No DragDrop allowed")
Else
NNLogger.Warn("No DragDrop allowed - ELSE")
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
NNLogger.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 Function
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 CURRENT_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
NNLogger.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
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Check_Dropped_Files: ", ex.Message)
End Try
End Sub
Private Async Sub GridControlDocSearch_DragDrop(sender As Object, e As DragEventArgs) Handles GridControlDocSearch.DragDrop
Await Drag_Drop(e)
End Sub
Private Sub GridControlDocSearch_DragEnter(sender As Object, e As DragEventArgs) Handles GridControlDocSearch.DragEnter
Drag_Enter(e)
End Sub
Private Async Sub pnlControls_DragDrop(sender As Object, e As DragEventArgs) Handles pnlControls.DragDrop
Await Drag_Drop(e)
End Sub
Private Sub pnlControls_DragEnter(sender As Object, e As DragEventArgs) Handles pnlControls.DragEnter
Drag_Enter(e)
End Sub
Private Sub SplitContainer1_DragEnter(sender As Object, e As DragEventArgs)
Drag_Enter(e)
End Sub
Private Async Sub SplitContainer1_DragDrop(sender As Object, e As DragEventArgs)
Await Drag_Drop(e)
End Sub
#End Region
Function Save_Record()
Try
Me.Cursor = Cursors.WaitCursor
SAVE_ROUTINE_ACTIVE = True
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_Notification_Label(True, "NO CHANGES in Record.", "")
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
'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
If recid = 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
Dim exec = String.Format("EXEC PRPMO_CLIENT_AFTER_RECORD_INSERT {0}", CURRENT_RECORD_ID)
MYDB_ECM.ExecuteNonQuery(exec)
ElseIf EDIT_STATE = EditState.Update Then
'Weil es ein Insert war müssen noch die Daten gespeichert/erneuert werden
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_Notification_Label(True, "Record saved - " & Now, "")
Update_Record_Label(CURRENT_RECORD_ID)
Catch ex As Exception
NNLogger.Error(ex)
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
If CtrlCommandUI.IsInsert Then
bbtnitmRecSave.Enabled = False
'
End If
'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
Private Sub cmsResultFileDetail_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles cmsResultFileDetail.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
mySelectedDocs = ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
'Refresh_DocID()
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
e.Cancel = True
Exit Sub
End If
If mySelectedDocs.First.DocId = 0 Then
e.Cancel = True
Exit Sub
End If
tsmiFileInWorkMultiple_Free.Visible = False
tsmiFileInWorkMultiple_Lock.Visible = False
INWORK_MULTIPLE_FILES_SET_FREE = False
If mySelectedDocs.Count > 1 Then
ContextMenu_Multiplefiles()
For Each oDoc As ClassDocGrid.clsWMDoc In mySelectedDocs
If oDoc.InWork = True Then
If oDoc.InWorkUser = USER_USERNAME.ToUpper Or USER_IS_ADMIN Or USER_IS_SUPERVISOR Then
INWORK_MULTIPLE_FILES_SET_FREE = True
End If
End If
Next
End If
If INWORK_MULTIPLE_FILES_SET_FREE = True Then
tsmiFileInWorkMultiple_Free.Visible = True
End If
If mySelectedDocs.Count = 1 Then
File_in_Work()
If WM_READ_ONLY Then
ContextMenu_Read()
ElseIf WM_ADD_NO_DELETE Then
ContextMenu_ADD()
Else
Dim oSelectedDocument = mySelectedDocs.First
Dim Result = ClassDOC_SEARCH.Get_File_Rights(oSelectedDocument.DocId)
If Not IsNothing(Result) Then
_RowReadOnly = 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
NNLogger.Warn("FileRight is '' but User is Admin!! - Check the configuration!")
End If
_RowReadOnly = 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 _RowReadOnly = False Then
If RIGHT_READ_ONLY_DOC = True Then
If USER_IS_ADMIN = False Then
ContextMenu_Read()
Else
NNLogger.Warn("RIGHT_READ_ONLY_DOC = True but User is Admin!! - Check the configuration!")
End If
End If
End If
End If
If mySelectedDocs.First.DisplayName <> "" Then
tsmiFileRenameDisplayname.Visible = True
Else
tsmiFileRenameDisplayname.Visible = False
End If
Else
tsmiFileRenameDisplayname.Visible = False
End If
Catch ex As Exception
NNLogger.Error(ex)
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 ContextMenu_Multiplefiles()
tsmiFileProperties.Enabled = False
tsmiFileOpen.Enabled = False
tsmiFileFolderOpen.Enabled = False
tsmiFileInWork.Enabled = False
tsmiFileLink_Add.Enabled = True
tsmiFileLink_ShowAll.Enabled = True
tsmiFileLinkRemove.Enabled = True
tsmiFileRename.Enabled = False
tsmiFileVersion.Enabled = False
tsmiFileRightsShow.Enabled = False
tsmiFileDelete.Enabled = False
tsmiFileInWorkMultiple_Lock.Visible = True
End Sub
Sub ContextMenu_Read()
tsmiFileProperties.Enabled = True
tsmiFileOpen.Enabled = True
tsmiFileFolderOpen.Enabled = True
tsmiFileInWork.Enabled = False
tsmiFileLink_Add.Enabled = False
tsmiFileLink_ShowAll.Enabled = True
tsmiFileLinkRemove.Enabled = False
tsmiFileRename.Enabled = False
tsmiFileVersion.Enabled = True
tsmiFileRightsShow.Enabled = True
tsmiFileDelete.Enabled = False
End Sub
Sub ContextMenu_ADD()
tsmiFileProperties.Enabled = True
tsmiFileOpen.Enabled = True
tsmiFileFolderOpen.Enabled = True
tsmiFileInWork.Enabled = True
tsmiFileLink_Add.Enabled = True
tsmiFileLink_ShowAll.Enabled = True
tsmiFileLinkRemove.Enabled = True
tsmiFileRename.Enabled = False
tsmiFileVersion.Enabled = False
tsmiFileRightsShow.Enabled = True
tsmiFileDelete.Enabled = False
End Sub
Sub ContextMenu_Write()
tsmiFileProperties.Enabled = True
tsmiFileOpen.Enabled = True
tsmiFileFolderOpen.Enabled = True
tsmiFileInWork.Enabled = True
tsmiFileLink_Add.Enabled = True
tsmiFileLink_ShowAll.Enabled = True
tsmiFileLinkRemove.Enabled = True
tsmiFileRename.Enabled = True
tsmiFileVersion.Enabled = True
tsmiFileRightsShow.Enabled = True
tsmiFileDelete.Enabled = True
End Sub
Sub Open_File()
Me.Cursor = Cursors.WaitCursor
Dim allow_Open As Boolean = False
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 0 Then
Exit Sub
End If
Dim Result = ClassDOC_SEARCH.Get_File_Rights(oDocuments.First.DocId)
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(ClassWindreamDocGrid.DT_RESULTFILES) Then
' MsgBox("Could not read File Parameters(5)!", MsgBoxStyle.Exclamation)
' Exit Sub
'End If
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters(5)!", MsgBoxStyle.Exclamation)
Exit Sub
End If
'For Each row As DataRow In ClassWindreamDocGrid.DT_RESULTFILES.Rows
' If ClassHelper.File_open(row.Item("DOC_PATH"), row.Item("DOC_ID")) = True Then
' TimerFileHandle.Enabled = True
' End If
'Next
For Each oDoc As ClassDocGrid.clsWMDoc In ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
If ClassHelper.File_open(oDoc.DocPath, oDoc.DocId) = True Then
TimerFileHandle.Enabled = True
End If
Next
Else
If WMMOD.TestFileExists(oDocuments.First.DocPath) = 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: " & oDocuments.First.DocId.ToString)
Else
ClassHelper.MSGBOX_Handler("ERROR", "", "File does not exist! Please contact your admin!")
End If
End If
Me.Cursor = Cursors.Default
End Sub
Sub File_in_Work()
IW_USER = ""
IW_COMMENT = ""
INWORK_FILE = False
tsmiFileInWork.Enabled = True
Try
'Dim expression As String
'expression = "DocID = " & ClassWindreamDocGrid.SELECTED_DOC_ID
'Dim foundRowsLevel0() As DataRow
' Use the Select method to find all rows matching the filter.
'foundRowsLevel0 = CURRENT_DOC_RESULTS.Select(expression)
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 1 Then
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 = {oDocuments.First.DocId}"
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
NNLogger.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 Or USER_IS_SUPERVISOR 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
tsmiFileInWork.Text = displ
Else
MsgBox("Bitte nur eine Datei wählen!", MsgBoxStyle.Exclamation)
End If
Catch ex As Exception
NNLogger.Error(ex)
NNLogger.Warn("Unexpected Error in File-Work Info: " & ex.Message)
tsmiFileInWork.Enabled = False
End Try
End Sub
Private Async Sub tsmiFileInWork_Click(sender As Object, e As EventArgs) Handles tsmiFileInWork.Click
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters (3)!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count >= 1 Then
ClassFileResult.DocID = oDocuments.First.DocId
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 Or USER_IS_SUPERVISOR Then
If ClassFileResult.Set_InWork(0, "") = True Then
Await 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 being edited by user '" & IW_USER & "' - Comment:"
End If
ClassHelper.MSGBOX_Handler("INFO", "Information file", msglbl, msg1)
End If
Else
frmFileInWork.myDocuments = mySelectedDocs
frmFileInWork.ShowDialog()
ClassDocGrid.SELECTED_INWORK = ClassFileResult.InWork
Await RUN_WDSEARCH_GRID(True)
End If
End If
End Sub
Private Sub frmNodeNavigation_Shown(sender As Object, e As EventArgs) Handles Me.Shown
Me.BringToFront()
TreeListDevexpress.CollapseAll()
FORM_SHOWN = True
If JumpKeyID > 0 Then
JumptoNode()
End If
End Sub
Public Sub JumptoNode()
If JumpKeyID > 0 Then
TreeListDevexpress.FindNodeByKeyID(JumpKeyID)
End If
End Sub
Private Async Sub tsmiFileRenameDisplayname_Click(sender As Object, e As EventArgs) Handles tsmiFileRenameDisplayname.Click
Try
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 1 Then
ClassFileResult.DocID = oDocuments.First.DocId
ClassFileResult.DocumentPath = oDocuments.First.DocPath
ClassFileResult.OldDisplayName = oDocuments.First.DisplayName
If oDocuments.First.DisplayName <> "" And ClassFileResult.DocID > 0 Then
Dim oRowHandle As Integer = GridViewDoc_Search.FocusedRowHandle
Dim frm As New frmFileRename(ClassFileResult.DocID, oDocuments.First.DisplayName, "Displayname", ClassFileResult.DocumentPath)
frm.ShowDialog()
Await RUN_WDSEARCH_GRID(True)
If Not IsNothing(oRowHandle) Then
GridViewDoc_Search.FocusedRowHandle = oRowHandle
End If
Else
MsgBox("Bitte eine Datei auswählen!", MsgBoxStyle.Information)
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Unexpected Error in getting the Displayname: ", ex.Message)
End Try
End Sub
Private Async Sub tsmiFileRenameFilename_Click(sender As Object, e As EventArgs) Handles tsmiFileRenameFilename.Click
Try
Dim RENAME_DOC_PATH
Try
RENAME_DOC_PATH = GridViewDoc_Search.GetFocusedRowCellValue(GridViewDoc_Search.Columns("FULLPATH"))
Catch ex As Exception
NNLogger.Error(ex)
NNLogger.Warn("Attention: Could not set DocVariable RENAME_DOC_PATH: " & ex.Message)
RENAME_DOC_PATH = Nothing
End Try
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 1 Then
ClassFileResult.DocID = oDocuments.First.DocId
End If
If RENAME_DOC_PATH <> "" And ClassFileResult.DocID > 0 Then
Dim FileToRename As String
FileToRename = Path.GetFileNameWithoutExtension(RENAME_DOC_PATH)
Dim oRowHandle As Integer = GridViewDoc_Search.FocusedRowHandle
Dim frm As New frmFileRename(ClassFileResult.DocID, FileToRename, "Filename", RENAME_DOC_PATH)
frm.ShowDialog()
Await RUN_WDSEARCH_GRID(True)
If Not IsNothing(oRowHandle) Then
GridViewDoc_Search.FocusedRowHandle = oRowHandle
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
MsgBox("Unexpected Error in getting the filename: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Sub frmNodeNavigation_Click(sender As Object, e As EventArgs) Handles MyBase.Click
If CURRENT_ENTITY_ID <> _EntityId Then
CURRENT_ENTITY_ID = _EntityId
CURRENT_RECORD_ID = 0
End If
End Sub
Private Sub tsmiFileOpen_Click(sender As Object, e As EventArgs) Handles tsmiFileOpen.Click
Open_File()
End Sub
Private Sub tsmiFileFolderOpen_Click(sender As Object, e As EventArgs) Handles tsmiFileFolderOpen.Click
'If IsNothing(ClassWindreamDocGrid.DT_RESULTFILES) Then
' MsgBox("Could not read File Parameters(5)!", MsgBoxStyle.Exclamation)
' Exit Sub
'End If
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters(5)!", MsgBoxStyle.Exclamation)
Exit Sub
End If
'For Each row As DataRow In ClassWindreamDocGrid.DT_RESULTFILES.Rows
' ClassHelper.Open_Folder(row.Item("DOC_PATH"), row.Item("DOC_ID"))
'Next
For Each oDoc As ClassDocGrid.clsWMDoc In ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
ClassHelper.Open_Folder(oDoc.DocPath, oDoc.DocId)
Next
End Sub
Private Sub tsmiFileLink_Add_Click(sender As Object, e As EventArgs) Handles tsmiFileLink_Add.Click
Try
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 0 Or ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters (LinkRecord)!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Refresh_Selected_Table()
Dim oForm As New frmDocRecordLink With {.myDocuments = oDocuments}
oForm.Show()
Catch ex As Exception
NNLogger.Error(ex)
NNLogger.Error(ex)
MsgBox("Unexpected Error in Linking Record: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Sub Refresh_Selected_Table()
Dim table As New DataTable With {
.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 oDoc As ClassDocGrid.clsWMDoc In ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
If oDoc.DocPath <> String.Empty Then
'Set the ID column as the primary key column.
Dim newRow As DataRow = table.NewRow()
newRow("FILEPATH") = oDoc.DocPath
newRow("DOC_ID") = oDoc.DocId
newRow("OBJECTTYPE") = oDoc.DocType
table.Rows.Add(newRow)
End If
Next
table.AcceptChanges()
CURRENT_DT_SELECTED_FILES = table
End Sub
Private Sub tsmiFileLink_ShowAll_Click(sender As Object, e As EventArgs) Handles tsmiFileLink_ShowAll.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 oDocuments = Current_DocList.SelectedDocuments
Dim oForm As New frmDoc_Links With {.Documents = oDocuments}
oForm.Show()
oForm.BringToFront()
Catch ex As Exception
NNLogger.Error(ex)
MsgBox("Unexpected Error in Showing DocLinks: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
Private Async Sub tsmiFileLinkRemove_Click(sender As Object, e As EventArgs) Handles tsmiFileLinkRemove.Click
If CURRENT_RECORD_ID = 0 Then
ClassHelper.MSGBOX_Handler("INFO", "Attention", "Missing Selection:", "Please select a record!")
Exit Sub
End If
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
Exit Sub
End If
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 oDoc As ClassDocGrid.clsWMDoc In ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
If ClassFileResult.Delete_ResultFile(oDoc.DocId, CURRENT_RECORD_ID, 0) = True Then
ClassHelper.InsertEssential_Log(oDoc.DocId, "DOC-ID", "RECORD LINK REMOVED FROM DOC-SEARCH")
Cursor = Cursors.WaitCursor
Await RUN_WDSEARCH_GRID(True)
End If
Next
Catch ex As Exception
NNLogger.Error(ex)
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in Removing links from file:", ex.Message)
End Try
End If
End Sub
Private Async Sub tsmiFileVersion_Click(sender As Object, e As EventArgs) Handles tsmiFileVersion.Click
Refresh_Selected_Table()
Dim oDocuments = Current_DocList.SelectedDocuments
If oDocuments.Count = 1 Then
ClassFileResult.DocID = oDocuments.First.DocId
ClassFileResult.DocumentPath = oDocuments.First.DocPath
frmWM_CreateVersion.ShowDialog()
Await RUN_WDSEARCH_GRID(True)
Else
MsgBox("Please choose only one document!", MsgBoxStyle.Exclamation)
End If
End Sub
Private Sub tsmiFileRightsShow_Click(sender As Object, e As EventArgs) Handles tsmiFileRightsShow.Click
Dim oDocuments = Current_DocList.SelectedDocuments
Dim result = ClassDOC_SEARCH.Get_File_Rights(oDocuments.First.DocId)
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 tsmiFileProperties_Click(sender As Object, e As EventArgs) Handles tsmiFileProperties.Click
Show_File_Properties()
End Sub
Sub Show_File_Properties()
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters(4)!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Cursor = Cursors.WaitCursor
For Each oDoc As ClassDocGrid.clsWMDoc In ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
If oDoc.DocPath <> "" Then
Dim oFileFullPath = ClassHelper.FORMAT_WM_PATH(oDoc.DocPath)
Try
If Not WindowsEx.OpenFileProperties(oFileFullPath) 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
Catch ex As Exception
NNLogger.Error(ex)
NNLogger.Error(ex)
End Try
End If
Next
Cursor = Cursors.Default
End Sub
Private Sub EigenschaftenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EigenschaftenToolStripMenuItem.Click
Show_File_Properties()
End Sub
Private Async Sub bbtnitmDocResultRefresh_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmDocResultRefresh.ItemClick
Await RUN_WDSEARCH_GRID(True)
End Sub
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
CURRENT_SEARCH_TYPE = "ENTITY"
RUN_ENTITY_DOC_SEARCH()
End Sub
Private Async Function bbtnitmReloadView_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) As Task Handles bbtnitmReloadView.ItemClick
Await ReloadTreeView()
End Function
Async Function ReloadTreeView() As Task
TreeListDevexpress.Nodes.Clear()
Await Load_nodes()
End Function
Private Async Function UnterknotenNeuOrdnenToolStripMenuItem_Click(sender As Object, e As EventArgs) As Task
MyTreeListViewState = New ClassTreeListViewState(TreeListDevexpress)
Dim oQuestion = "Wollen Sie die gesamte Struktur unterhalb dieses Knotens neu ordnen lassen?" & vbNewLine & "Nein, wenn nur die direkten Unterknoten neu geordnet werden sollen!"
If USER_LANGUAGE <> "de-DE" Then
oQuestion = "Do you want to reorder the entire structure below this node?" & vbNewLine & "No, if only the direct subnodes are to be reordered!"
End If
Dim result As MsgBoxResult
result = MessageBox.Show(oQuestion, CAPTION_CONFIRMATION, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
Dim oSubnodes As String = "0"
If result = MsgBoxResult.Yes Then
oSubnodes = "1"
ElseIf result = MsgBoxResult.Cancel Then
Exit Function
End If
Cursor = Cursors.WaitCursor
Dim oSQL = $"EXEC PRCUST_REORDER_CHILD_NODES "
Dim oNodeGUID As Integer = 0
Dim oID = MyFocusedNode.Id
Dim PID = MyFocusedNode.ParentNode
Dim Column_pRecord As TreeListColumn = TreeListDevexpress.Columns("RECORD_ID")
Dim Column_Caption As TreeListColumn = TreeListDevexpress.Columns("NODE_CAPTION")
If oID > 0 Then
MyTreeListViewState.SaveState()
oNodeGUID = oID
oSQL += $" {oNodeGUID},{oSubnodes} "
MYDB_ECM.ExecuteNonQuery(oSQL)
Await ReloadTreeView()
MyTreeListViewState.LoadState()
TreeListDevexpress.FocusedNode = MyFocusedNode
End If
Cursor = Cursors.Default
End Function
'Private Sub TreeListDevexpress_MouseUp(sender As Object, e As MouseEventArgs) Handles TreeListDevexpress.MouseUp
' Dim tree As TreeList = TryCast(sender, TreeList)
' Dim oLocation = e.Location
' 'If e.Button = MouseButtons.Right AndAlso ModifierKeys = Keys.None AndAlso tree.State = TreeListState.Regular Then
' ' Dim info As TreeListHitInfo = tree.CalcHitInfo(e.Location)
' ' FocusedNode = tree.FocusedNode
' ' Dim SavedTopIndex As Integer = tree.TopVisibleNodeIndex
' ' tree.FocusedNode = info.Node
' ' cmsTreeView.Show(TreeListDevexpress, e.Location)
' 'End If
'End Sub
Private Sub GridViewDoc_Search_RowStyle(sender As Object, e As RowStyleEventArgs) Handles GridViewDoc_Search.RowStyle
If FORM_SHOWN = False Then
Exit Sub
End If
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
NNLogger.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
NNLogger.Error(ex)
NNLogger.Warn("Unexpected Error in RowStyle-Color Dropdown: " & ex.Message)
End Try
End If
End Sub
Private Async Function BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) As Task Handles BbtnitmNodeReorder.ItemClick
MyTreeListViewState = New ClassTreeListViewState(TreeListDevexpress)
Dim oQuestion = "Wollen Sie die gesamte Struktur unterhalb dieses Knotens neu ordnen lassen?" & vbNewLine & "Nein, wenn nur die direkten Unterknoten neu geordnet werden sollen!"
If USER_LANGUAGE <> "de-DE" Then
oQuestion = "Do you want to reorder the entire structure below this node?" & vbNewLine & "No, if only the direct subnodes are to be reordered!"
End If
Dim result As MsgBoxResult
result = MessageBox.Show(oQuestion, CAPTION_CONFIRMATION, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)
Dim oSubnodes As String = "0"
If result = MsgBoxResult.Yes Then
oSubnodes = "1"
ElseIf result = MsgBoxResult.Cancel Then
Exit Function
End If
Cursor = Cursors.WaitCursor
Dim oSQL = $"EXEC PRCUST_REORDER_CHILD_NODES "
Dim oNodeGUID As Integer = 0
Dim oID = MyFocusedNode.Id
Dim PID = MyFocusedNode.ParentNode
Dim Column_pRecord As TreeListColumn = TreeListDevexpress.Columns("RECORD_ID")
Dim Column_Caption As TreeListColumn = TreeListDevexpress.Columns("NODE_CAPTION")
If oID > 0 Then
MyTreeListViewState.SaveState()
oNodeGUID = oID
oSQL += $" {oNodeGUID},{oSubnodes} "
MYDB_ECM.ExecuteNonQuery(oSQL)
Await ReloadTreeView()
MyTreeListViewState.LoadState()
TreeListDevexpress.FocusedNode = MyFocusedNode
Update_Notification_Label(True, "Nodes reordered", "")
End If
Cursor = Cursors.Default
End Function
Private Sub bbtnItm_TV_Collape_Expand_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnItm_TV_Collape_Expand.ItemClick
If TV_Collapse_ExpandState = "Collapse" Then
TreeListDevexpress.CollapseAll()
TV_Collapse_ExpandState = "Expand"
Else
TreeListDevexpress.ExpandAll()
TV_Collapse_ExpandState = "Collapse"
End If
End Sub
Private Sub bbtnitmRecSave_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmRecSave.ItemClick
Save_Record()
End Sub
Private Sub checkShowPreview_CheckedChanged(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles checkShowPreview.CheckedChanged
If FORM_LOADED = False Then
Exit Sub
End If
If ViewerInit Then
SplitContainerDocView.Collapsed = Not checkShowPreview.Checked
Else
SplitContainerDocView.Collapsed = True
End If
End Sub
Private Sub GridViewDoc_Search_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles GridViewDoc_Search.SelectionChanged
Show_SelectedDoc(False)
End Sub
Private Sub Show_SelectedDoc(AfterNodeChange As Boolean)
Dim oSelectedDocs = ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search, AfterNodeChange)
If Not IsNothing(oSelectedDocs) Then
If ViewerInit Then
If oSelectedDocs.Count >= 1 Then
Refresh_DocID()
Close_Document_Viewer()
System.Threading.Thread.Sleep(400)
Dim oDocument As ClassDocGrid.clsWMDoc = oSelectedDocs.First()
Dim oPath = ClassHelper.FORMAT_WM_PATH(oDocument.DocPath)
DocumentViewer.LoadFile(oPath)
Else
NNLogger.Debug("Show_SelectedDoc - oSelectedDocs.Count not >= 1 ")
Close_Document_Viewer()
End If
Else
NNLogger.Info("DocumentViewer not inited. No Show_SelectedDoc")
End If
Else
NNLogger.Debug("Show_SelectedDoc - oSelectedDocs is nothing")
End If
End Sub
Private Sub Close_Document_Viewer()
Try
DocumentViewer.CloseDocument()
Catch ex As Exception
NNLogger.Error(ex)
End Try
End Sub
Private Async Sub btnCreateNewNode_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnCreateNewNode.ItemClick
Dim oForm As New frmNewNode() With {
.NodeConfigTypes = AvailableConfigNodes
}
If oForm.ShowDialog() <> DialogResult.OK Then
Exit Sub
End If
Dim oRow = NODE_CONFIGURABLE_NODES_DT.Select($"GUID = {oForm.Id}").First()
Dim oCreateRecord = oRow.Item("CREATE_RECORD")
Dim oParentNodeGuid As Integer = MyFocusedNode.Item("GUID")
Dim oIsExpanded As Boolean = MyFocusedNode.Expanded
Dim oNodeCreator = New ClassNodeCreator(LOGCONFIG, ImageCollection1)
Dim oSuccess = oNodeCreator.AddNode(_EntityId, oForm.Title, oParentNodeGuid, oForm.Id, oCreateRecord)
If oSuccess = True Then
Dim oMessage As String = "Der Knoten wurde erfolgreich angelegt! Wollen Sie die Sicht jetzt neu laden? Abhängig von der Anzahl der Knoten kann dies einige Sekunden dauern."
If MsgBox(oMessage, MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.Yes Then
Await ReloadTreeView()
Dim oNode = TreeListDevexpress.FindNodeByFieldValue("GUID", oParentNodeGuid)
Dim oNodeIndex = TreeListDevexpress.MakeNodeVisible(oNode)
TreeListDevexpress.SetFocusedNode(oNode)
If oIsExpanded Then
oNode.Expand()
End If
End If
Else
MsgBox("Fehler beim Anlegen des neuen Knotens!", MsgBoxStyle.Critical, Text)
End If
End Sub
Private Sub DokumentartÄndernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DokumentartÄndernToolStripMenuItem.Click
Try
Dim oSelectedDocs = ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
If oSelectedDocs.Count = 0 Then
Exit Sub
End If
Dim oTable = MYDB_ECM.GetDatatable($"SELECT DOKUMENTTYPE_ID AS ID, DOKUMENTTYPE AS NAME FROM VWPMO_DOKUMENTTYPES WHERE FORM_ID = {CURRENT_ENTITY_ID} ORDER BY DOKUMENTTYPE")
Dim oDocTypes = oTable.Rows.Cast(Of DataRow).Select(AddressOf ToDocType).ToList()
Dim oFileNames = oSelectedDocs.Select(Function(d) d.Filename).ToList()
Dim oForm As New frmChangeDocType With {.DocTypes = oDocTypes, .FileNames = oFileNames}
'For Each oDoc As ClassWindreamDocGrid.WindreamDoc In oSelectedDocs
' oForm.FileNames = Nothing
' If oDoc.DocPath <> "" Then
' oForm.FileNames.Add(oDoc.DocPath)
' End If
'Next
If oForm.ShowDialog() = DialogResult.OK Then
If Not IsNothing(oForm.SelectedDocType) Then
For Each oDoc As ClassDocGrid.clsWMDoc In oSelectedDocs
If oDoc.DocPath <> "" Then
Dim oWMObject As WINDREAMLib.WMObject
Dim oReldocpath = ClassHelper.GetRelPath(oDoc.DocPath)
NNLogger.Info("oReldocpath: " & oReldocpath)
oWMObject = WMMOD.GetFileByPath(oReldocpath)
If Not IsNothing(oWMObject) Then
WMMOD.SetFileIndex(oReldocpath, WMINDEX_DOCTYPE, oForm.SelectedDocType.ToString, WMOBJECTTYPE)
Dim oupd = $"UPDATE TBPMO_DOCRESULT_LIST SET DOCTYPE = '{oForm.SelectedDocType.ToString}', CHANGED_WHO = '{USER_USERNAME}',Change_DateTime = GETDATE(),CHANGED_WHEN = GETDATE() WHERE DocID = {oDoc.DocId}"
MYDB_ECM.ExecuteNonQuery(oupd)
End If
End If
Next
RUN_WDSEARCH_GRID(True)
End If
End If
Catch ex As Exception
NNLogger.Error(ex)
End Try
End Sub
Private Function ToDocType(pRow As DataRow) As frmChangeDocType.DocType
Return New frmChangeDocType.DocType() With {
.Id = pRow.ItemEx("ID", 0),
.Name = pRow.ItemEx("NAME", "")
}
End Function
Private Sub tsmiFileDelete_Click(sender As Object, e As EventArgs) Handles tsmiFileDelete.Click
If ClassDocGrid.HasNoSelectedDocuments(GridViewDoc_Search) Then
MsgBox("Could not read File Parameters (LinkRecord)!", MsgBoxStyle.Exclamation)
Exit Sub
End If
Refresh_Selected_Table()
Dim oDocuments = Current_DocList.SelectedDocuments
Dim oDocId As Integer = oDocuments.First.DocId
If oDocId = 0 Then
MsgBox("Sorry no document has been selected! Please try again!", 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 oDoc As ClassDocGrid.clsWMDoc In ClassDocGrid.GetSelectedDocuments(GridViewDoc_Search)
If oDoc.DocPath <> "" Then
Try
NNLogger.Info($"DocID {oDoc.DocPath} shall be deleted. User committed Delete-Start...")
Dim oDElWMFile As Boolean = False
Dim oCountLinks As Integer
If Not IsNothing(oDoc.DocId) Then
oCountLinks = MYDB_ECM.GetScalarValue("SELECT COUNT(GUID) FROM TBPMO_DOC_RECORD_LINK WHERE DOC_ID = " & oDoc.DocId)
If oCountLinks > 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)
If result2 = MsgBoxResult.Yes Then
NNLogger.Info($">> File has other Record-Links. User committed to delete all!")
oDElWMFile = True
Else
oDElWMFile = False
NNLogger.Info($">> File has other Record-Links. links shall be kept!")
End If
Else
oDElWMFile = True
End If
If ClassFileResult.Delete_ResultFile(oDoc.DocId, CURRENT_RECORD_ID, oDElWMFile) = True Then
If oDElWMFile = True Then
If WMMOD.RemoveFile(oDoc.DocPath) Then
Update_Notification_Label(True, Now.ToLongTimeString & " - File successfully deleted", "Yellow")
ClassHelper.InsertEssential_Log(oDoc.DocId, "DOC-ID", "FILE DELETED BY USER")
End If
Else
ClassHelper.InsertEssential_Log(oDoc.DocId, "DOC-ID", "FILE LINK DELETED BY USER")
Update_Notification_Label(True, Now.ToLongTimeString & " - File-links successfully deleted", "Yellow")
End If
Else
Update_Notification_Label(True, Now.ToLongTimeString & " - Error deleting file - Check log", "Yellow")
End If
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 GridViewDoc_Search_DoubleClick(sender As Object, e As EventArgs) Handles GridViewDoc_Search.DoubleClick
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
NNLogger.Warn($"Unexpected error in TimerFileHandleTick [{ex.Message}]!!")
End Try
End Sub
Private Function GetActiveGridControl() As GridControl
If _ActiveGrid Is Nothing Then
Return Nothing
End If
Return _ActiveGrid
End Function
Private Sub GridControlWK1_Enter(sender As Object, e As EventArgs) Handles GridControlDocSearch.Enter
_ActiveGrid = sender
End Sub
Private Sub bbtnitmDocResultExport_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmDocResultExport.ItemClick
Dim oActiveGrid = GetActiveGridControl()
If oActiveGrid IsNot Nothing Then
XtraSaveFileDialog1.FileName = oActiveGrid.Name & ".xlsx"
XtraSaveFileDialog1.DefaultExt = ".xlsx"
If XtraSaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim oOptions As New XlsxExportOptions() With {
.ExportMode = XlsxExportMode.SingleFile
}
oActiveGrid.ExportToXlsx(XtraSaveFileDialog1.FileName, oOptions)
End If
Else
MessageBox.Show("Please select a grid/table that you would like to export.", Text, MessageBoxButtons.OK)
End If
End Sub
Private Async Sub KnotenLöschenadminToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KnotenLöschenadminToolStripMenuItem.Click
If CURRENT_NODEID <> 0 Then
Dim result As DialogResult = MessageBox.Show("Wollen Sie fortfahren? Der Knoten wird in Folge mit den Unterknoten als gelöscht markiert!", "Bestätigung erforderlich", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = System.Windows.Forms.DialogResult.Yes Then
Dim oSQL = $"EXEC [dbo].[PRPMO_DELETE_NODE] {CURRENT_NODEID}, '{USER_USERNAME}', 1, 0"
If MYDB_ECM.ExecuteNonQuery(oSQL) = True Then
result = MessageBox.Show("Wollen Sie die Ansicht aktualisieren?", "Knoten wurde erfolgreich gelöscht!", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = System.Windows.Forms.DialogResult.Yes Then
Await ReloadTreeView()
End If
End If
End If
End If
End Sub
Private Sub KnotenVerschiebenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KnotenVerschiebenToolStripMenuItem.Click
If CURRENT_NODEID <> 0 Then
Dim result As DialogResult = MessageBox.Show("Wollen Sie diesen Knoten verschieben?", "Bestätigung erforderlich", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If result = System.Windows.Forms.DialogResult.Yes Then
MessageBox.Show("Dann wählen Sie nun bitte den Knoten aus, welcher als Parent für den zu verschiebenden Knoten agieren soll!", "Bestätigung erforderlich", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation)
ParentNodeChangeinAction = True
ChildNodeGuid = CURRENT_NODEID
End If
End If
End Sub
Private Sub frmNodeNavigation_DragDrop(sender As Object, e As DragEventArgs) Handles Me.DragDrop
End Sub
Private Async Sub tsmiFileInWorkMultiple_Free_Click(sender As Object, e As EventArgs) Handles tsmiFileInWorkMultiple_Free.Click
For Each oDoc As ClassDocGrid.clsWMDoc In mySelectedDocs
If oDoc.InWork = True Then
If oDoc.InWorkUser = USER_USERNAME.ToUpper Or USER_IS_ADMIN Or USER_IS_SUPERVISOR Then
ClassFileResult.DocID = oDoc.DocId
ClassFileResult.Set_InWork(0, "")
End If
End If
Next
Await RUN_WDSEARCH_GRID(True)
End Sub
Private Async Sub tsmiFileInWorkMultiple_Lock_Click(sender As Object, e As EventArgs) Handles tsmiFileInWorkMultiple_Lock.Click
frmFileInWork.myDocuments = mySelectedDocs
frmFileInWork.ShowDialog()
Await RUN_WDSEARCH_GRID(True)
End Sub
End Class