317 lines
17 KiB
VB.net
317 lines
17 KiB
VB.net
Imports DigitalData.Modules.Logging
|
|
Imports DD_WMResulthandler
|
|
Public Class clsPMRefresh
|
|
Private Logger As Logger
|
|
Private Shared MyLogger As LogConfig
|
|
Private _database As clsDatabase
|
|
Private _windream As clsWindream_allgemein
|
|
|
|
Private oConfigschedule
|
|
Private oConfigIDXName_DocID
|
|
Private oConfigIDXName_Created
|
|
'Private oConfigWMDrive
|
|
Private oConfigLOG_DEBUG As Boolean
|
|
Sub New(theLogger As LogConfig)
|
|
MyLogger = theLogger
|
|
Logger = MyLogger.GetLogger()
|
|
End Sub
|
|
Public Function CheckRun() As Boolean
|
|
Try
|
|
_database = New clsDatabase(MyLogger)
|
|
_windream = New clsWindream_allgemein(MyLogger)
|
|
Logger.Debug("..in CheckRun..classes initialized")
|
|
If _windream.Init() = True Then
|
|
If My.Settings.SQLSERVER_CS_PMRefresh = "" Then
|
|
Logger.Info("SQLSERVER_CS_PMRefresh is empty!")
|
|
Return False
|
|
End If
|
|
If _database.Init(My.Settings.SQLSERVER_CS_PMRefresh, False) = True Then
|
|
Dim oDTPM_CONFIG As DataTable = _database.Return_Datatable("select * from TBPM_KONFIGURATION where GUID = 1", My.Settings.SQLSERVER_CS_PMRefresh)
|
|
If oDTPM_CONFIG.Rows.Count = 1 Then
|
|
oConfigschedule = oDTPM_CONFIG.Rows(0).Item("SERVICE_SCHEDULE").ToString
|
|
oConfigIDXName_DocID = oDTPM_CONFIG.Rows(0).Item("SERVICE_IDXNAME_DOCID").ToString
|
|
oConfigIDXName_Created = oDTPM_CONFIG.Rows(0).Item("SERVICE_IDXNAME_CREATED").ToString
|
|
'oConfigWMDrive = oDTPM_CONFIG.Rows(0).Item("SERVICE_WMDRIVE_LETTER").ToString
|
|
oConfigLOG_DEBUG = Not (oDTPM_CONFIG.Rows(0).Item("SERVICE_LOG_ERRORS_ONLY"))
|
|
Dim oSplit As String()
|
|
oSplit = oConfigschedule.Split(";")
|
|
Dim oTimespan = oSplit(0)
|
|
Dim oDays = oSplit(1)
|
|
If oConfigLOG_DEBUG = True Then
|
|
MyLogger.Debug = True
|
|
Logger.Info("Detaillog Service PMRefresh is ON!")
|
|
Else
|
|
MyLogger.Debug = False
|
|
End If
|
|
|
|
Dim oDayofweek As Integer = My.Computer.Clock.LocalTime.DayOfWeek
|
|
Dim oSubstringInteger As Integer = 0
|
|
Dim oRunToday As Integer = 0
|
|
Select Case oDayofweek
|
|
Case 6 'Saturday
|
|
Case 5 'Friday
|
|
Case 4 'Thursday
|
|
Case 3 'Wednesday
|
|
Case 2 'Tuesday
|
|
Case 1 'Monday
|
|
Case 0 'Sunday
|
|
End Select
|
|
Logger.Debug($"oDayofweek: {oDayofweek}...")
|
|
|
|
If oDayofweek = 0 Then
|
|
oSubstringInteger = 6
|
|
Else
|
|
oSubstringInteger = oDayofweek - 1
|
|
End If
|
|
Logger.Debug($"oSubstringInteger: {oSubstringInteger}...")
|
|
oRunToday = oDays.Substring(oSubstringInteger, 1)
|
|
Logger.Debug($"oRunToday: {oRunToday}...")
|
|
If oRunToday = 1 Then
|
|
Dim oHourSplit As String() = oTimespan.Split("-")
|
|
Dim oMinHour As Integer = oHourSplit(0)
|
|
Dim oMaxHour As Integer = oHourSplit(1)
|
|
If CInt(Now.Hour) >= oMinHour And CInt(Now.Hour) < oMaxHour Then
|
|
Logger.Debug($"Now running PM-Refresh ({oMinHour.ToString}#{oMaxHour.ToString})")
|
|
Return True
|
|
Else
|
|
Logger.Info($"No run of PMRefresh as hour is not in timespan ({CInt(Now.Hour)} >= {oMinHour} And {CInt(Now.Hour)} < {oMaxHour})")
|
|
Logger.Info($"Check TBPM_KONFIGURATION Column SERVICE_SCHEDULE")
|
|
|
|
End If
|
|
Else
|
|
Logger.Info($"No run of PMRefresh as today Is Not configured as RUN")
|
|
End If
|
|
Else
|
|
Logger.Warn("oDTPM_CONFIG.Rows.Count <> 1")
|
|
End If
|
|
Else
|
|
Logger.Warn($"Could not initialize the database of PMRefresh ConString: '{My.Settings.SQLSERVER_CS_PMRefresh}'")
|
|
End If
|
|
Else
|
|
Logger.Warn("Could not initialize windream in PMRefresh.")
|
|
End If
|
|
'Return false as no criteria matched to execute the run
|
|
Return False
|
|
Catch ex As Exception
|
|
Logger.Info("Unexpected Error in CheckRun")
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
|
|
End Function
|
|
Public Function GetSearchDocumentsDTviaSQL(ByVal pSQLCommand As String) As DataTable
|
|
Dim dtresult As New DataTable
|
|
dtresult.Columns.Add("DOC_ID", GetType(Integer))
|
|
dtresult.Columns.Add("PATH", GetType(String))
|
|
dtresult.Columns.Add("CREATED", GetType(String))
|
|
|
|
Try
|
|
Dim oSQLRESULT As DataTable = _database.Return_Datatable(pSQLCommand)
|
|
If IsNothing(oSQLRESULT) Then
|
|
Return dtresult
|
|
End If
|
|
'If returnDT = True Then
|
|
If oSQLRESULT.Rows.Count > 0 Then
|
|
|
|
For Each oDocRow As DataRow In oSQLRESULT.Rows
|
|
Dim oDOC_ID As Int64
|
|
Try
|
|
oDOC_ID = oDocRow.Item("IDB_OBJ_ID")
|
|
Catch ex As Exception
|
|
Try
|
|
oDOC_ID = oDocRow.Item("DocID")
|
|
Catch ex1 As Exception
|
|
Logger.Warn("Could not get DocID-Column: " & ex.Message)
|
|
Return dtresult
|
|
End Try
|
|
End Try
|
|
Dim oCreated
|
|
Try
|
|
oCreated = oDocRow.Item("ADDED_WHEN")
|
|
Catch ex As Exception
|
|
Try
|
|
oCreated = oDocRow.Item("AddedWhen")
|
|
Catch ex1 As Exception
|
|
Logger.Warn($"(GetSearchDocumentsDTviaSQL)Could not get AddedWhen-Column: [{ex.Message}] - SQL-Command: [{pSQLCommand}]")
|
|
Return dtresult
|
|
End Try
|
|
End Try
|
|
|
|
Dim oPath As String
|
|
Try
|
|
oPath = oDocRow.Item("DocRelativePath")
|
|
Catch ex As Exception
|
|
Try
|
|
oPath = oDocRow.Item("FULL_FILENAME")
|
|
Catch ex1 As Exception
|
|
Logger.Warn($"(GetSearchDocumentsDTviaSQL)Could not get FULL_FILENAME-Column: [{ex.Message}] - SQL-Command: [{pSQLCommand}]")
|
|
Return dtresult
|
|
End Try
|
|
End Try
|
|
Logger.Debug($"Adding DocInfo {oDOC_ID.ToString}|{oPath}|{oCreated}")
|
|
dtresult.Rows.Add(oDOC_ID, oPath, oCreated)
|
|
Next
|
|
dtresult.AcceptChanges()
|
|
End If
|
|
Return dtresult
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Logger.Warn($"Error Getting Docs via SLQ ({pSQLCommand})")
|
|
Return dtresult
|
|
End Try
|
|
End Function
|
|
|
|
Public Function Refresh_Data()
|
|
Dim oStep As String
|
|
Try
|
|
Logger.Debug("Check_Profiles gestartet", False)
|
|
Dim WD_Search As String
|
|
Dim oSQLCommand As String
|
|
oSQLCommand = "SELECT GUID,NAME,WD_OBJECTTYPE,WD_SEARCH FROM TBPM_PROFILE WHERE ACTIVE = 1"
|
|
oStep = 1
|
|
Dim oDTPROFILES As DataTable = _database.Return_Datatable(oSQLCommand, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
oStep = 2
|
|
'---------------------- Evtl alte nicht aktualisierte PROFILE-FILE Daten werden gelöscht ------------------------
|
|
Dim oDelete As String = "DELETE FROM TBPM_PROFILE_FILES WHERE ACTIVE = 0 AND IN_WORK = 0"
|
|
_database.Execute_non_Query(oDelete, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
|
|
oSQLCommand = "select * from TBPM_PROFILE_FILES"
|
|
Dim oDTPROFILE_FILES As DataTable = _database.Return_Datatable(oSQLCommand, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
If oDTPROFILE_FILES.Rows.Count = 0 Then
|
|
Logger.Info("TBPM_PROFILE_FILES is completely empty...")
|
|
End If
|
|
'delete = "DELETE FROM TBPM_PROFILE_FILES_TEMP"
|
|
'ClassDatabase.Execute_MSSQL(delete)
|
|
oStep = 3
|
|
|
|
If oDTPROFILES.Rows.Count > 0 Then
|
|
Dim Profile_Row As System.Data.DataRow
|
|
'---------------------- für jedes Profil die Dateien überprüfen ------------------------
|
|
For Each Profile_Row In oDTPROFILES.Rows
|
|
oStep = "4a"
|
|
Logger.Debug("Add info for profile '" & Profile_Row.Item("NAME") & "'")
|
|
Dim oPROFILE_ID As Integer = Profile_Row.Item("GUID")
|
|
WD_Search = Nothing
|
|
WD_Search = Profile_Row.Item("WD_SEARCH")
|
|
oStep = "4b"
|
|
If WD_Search Is Nothing = False Then
|
|
'---------------------- Die Dateien auslesen ------------------------
|
|
Dim oDTWM_Results As DataTable
|
|
oStep = "4c"
|
|
If WD_Search.Contains("wdf") Or WD_Search.Contains("wdfx") Then
|
|
oDTWM_Results = _windream.GetSearchDocumentsDT(WD_Search, oConfigIDXName_DocID, oConfigIDXName_Created, True)
|
|
Else
|
|
Logger.Debug("Search via SQL")
|
|
oDTWM_Results = GetSearchDocumentsDTviaSQL(WD_Search)
|
|
End If
|
|
|
|
oStep = "4d"
|
|
Dim oDocCount As Integer = 0
|
|
If IsNothing(oDTWM_Results) Then
|
|
Logger.Warn("ATTENTION: oDTWM_Results is NOTHING")
|
|
Continue For
|
|
End If
|
|
'Die aktuellen Files auf refreshed = 0 setzten
|
|
oSQLCommand = "UPDATE TBPM_PROFILE_FILES SET REFRESHED = 0 WHERE PROFIL_ID = " & oPROFILE_ID
|
|
If _database.Execute_non_Query(oSQLCommand, My.Settings.SQLSERVER_CS_PMRefresh) = True Then
|
|
If oDTWM_Results Is Nothing = False Then
|
|
If oDTWM_Results.Rows.Count > 0 Then
|
|
oStep = "4e"
|
|
'Ein Array mit Dateiinformationen anlegen
|
|
Dim Profil_Docs(oDTWM_Results.Rows.Count - 1, 2) As String
|
|
For Each oRow As DataRow In oDTWM_Results.Rows
|
|
Dim oDOC_ID = oRow.Item(0)
|
|
Dim oWMFilePath As String = oRow.Item(1)
|
|
Profil_Docs(oDocCount, 0) = oRow.Item(0)
|
|
Profil_Docs(oDocCount, 1) = oWMFilePath
|
|
'------DMS Erstell-Datum holen --------
|
|
Dim oDMSErstellt = oRow.Item(2)
|
|
|
|
|
|
'ClassLogger.Add(">> DMSErstellt: '" & DMSErstellt.ToString, False)
|
|
Dim date_EN As String
|
|
If oConfigIDXName_Created.EndsWith("reated") Then
|
|
Dim arr() = oDMSErstellt.ToString.Split(".")
|
|
If arr.Length = 3 Then
|
|
date_EN = arr(2).Replace(" 00:00:00", "") & "-" & arr(1) & "-" & arr(0)
|
|
Logger.Debug("date_EN: '" & date_EN)
|
|
oDMSErstellt = date_EN
|
|
End If
|
|
End If
|
|
'-------------------- Überprüfen ob das Dokument bereits enthalten ist? Kann nur passieren wenn das Dok gerade in Bearbeitung ist ----------
|
|
oSQLCommand = $"SELECT GUID FROM TBPM_PROFILE_FILES WHERE PROFIL_ID = {oPROFILE_ID} AND DOC_ID = {oDOC_ID}"
|
|
Dim oGUID = _database.Execute_Scalar(oSQLCommand, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
'---------------------- Das Dokument inserten ------------------------
|
|
Try
|
|
If oGUID Is Nothing Or oDTPROFILE_FILES.Rows.Count = 0 Then
|
|
Logger.Debug($"DocID {oDOC_ID} not existing...INSERT")
|
|
Dim oInsert As String = $"INSERT INTO TBPM_PROFILE_FILES (PROFIL_ID, FILE_PATH, ACTIVE, DMS_ERSTELLT_DATE,DOC_ID) VALUES ({oPROFILE_ID}, '{oWMFilePath}',1, CONVERT(DATE,'{oDMSErstellt}'),{oDOC_ID})"
|
|
If _database.Execute_non_Query(oInsert, My.Settings.SQLSERVER_CS_PMRefresh) = False Then
|
|
Logger.Info($"Unexpected Error while Inserting File-Record {oDOC_ID}")
|
|
End If
|
|
' aktuelles Dokument der Klasse mitteilen
|
|
Else
|
|
Logger.Debug($"DocID {oDOC_ID} existing...UPDATE")
|
|
If CInt(oGUID) > 0 Then
|
|
oSQLCommand = $"UPDATE TBPM_PROFILE_FILES SET REFRESHED = 1, REFRESHED_WHEN = GETDATE(), EDIT = 0 WHERE GUID = {oGUID}"
|
|
_database.Execute_non_Query(oSQLCommand, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
End If
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
End Try
|
|
|
|
oDocCount += 1
|
|
Next
|
|
|
|
Logger.Info($"Profile [{Profile_Row.Item("NAME")}] refreshed - FileCount [{oDocCount.ToString}]")
|
|
|
|
Else
|
|
oStep = "4g"
|
|
Logger.Debug($"No Data for profile '{Profile_Row.Item("NAME")}'!")
|
|
End If
|
|
Else
|
|
Logger.Warn("oDTWM_Results IS NOTHING")
|
|
End If
|
|
oStep = "Step: vor Delete Refreshed = 0"
|
|
Dim oSQLDEL As String = "DELETE FROM TBPM_PROFILE_FILES WHERE PROFIL_ID = " & oPROFILE_ID & " AND REFRESHED = 0"
|
|
_database.Execute_non_Query(oSQLDEL, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
'---------------------- Aktuelle Anzahl in Profiltabelle updaten ------------------------
|
|
oSQLCommand = $"UPDATE TBPM_PROFILE SET NO_OF_DOCUMENTS = {oDocCount} WHERE GUID = {oPROFILE_ID}"
|
|
oStep = "Step 4h AnzahlDocs: - " & oDocCount.ToString
|
|
_database.Execute_non_Query(oSQLCommand, My.Settings.SQLSERVER_CS_PMRefresh)
|
|
|
|
Else
|
|
Logger.Warn("ATTENTION: Refresh could not be executed " & oSQLCommand)
|
|
End If
|
|
Else
|
|
Logger.Warn("ATTENTION: WM-Search is nothing.. ")
|
|
End If
|
|
Next
|
|
oStep = "4i"
|
|
''------------------------------- Bearbeitete Daten löschen ------------------------
|
|
If _database.Execute_non_Query("DELETE FROM TBPM_PROFILE_FILES WHERE EDIT = 1", My.Settings.SQLSERVER_CS_PMRefresh) = True Then
|
|
' oStep = "i"
|
|
' Console.WriteLine(">> Alte PROFILE-FILE Daten geleert")
|
|
' '---------------------- DIE NEUEN DATEN AUF ACTIVE SETZEN ------------------------
|
|
' Dim update As String = "UPDATE TBPM_PROFILE_FILES SET ACTIVE = 1 WHERE ACTIVE = 0"
|
|
' ClassDatabase.Execute_MSSQL(update)
|
|
' oStep = "j"
|
|
' Console.WriteLine(">> Neue PROFILE-FILE Daten aktiv gesetzt")
|
|
End If
|
|
oStep = "4j"
|
|
_database.Execute_non_Query("EXEC PRPM_REMOVE_NE_FILES", My.Settings.SQLSERVER_CS_PMRefresh)
|
|
oStep = "4k"
|
|
Else
|
|
Logger.Info("PM Refresh - No active profiles")
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
Logger.Info("Unexpected Error in Refresh_Data")
|
|
Logger.Warn("Error in RunJob- laststep: " & oStep)
|
|
Logger.Error(ex)
|
|
End Try
|
|
End Function
|
|
End Class
|