You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
789 lines
30 KiB
789 lines
30 KiB
Imports System.ServiceProcess
|
|
Imports System.Threading
|
|
Imports System.IO
|
|
|
|
Imports System.Collections.Generic
|
|
Imports Syncfusion.Pdf
|
|
Imports Syncfusion.Pdf.Parsing
|
|
Imports Syncfusion.Pdf.Graphics
|
|
Imports Syncfusion.Pdf.Grid
|
|
Imports System.Drawing
|
|
Imports Newtonsoft
|
|
Imports Microsoft.Office.Interop
|
|
Imports System.Text
|
|
Imports System.Net
|
|
Imports Newtonsoft.Json
|
|
Imports System.Runtime.InteropServices
|
|
Imports System.Diagnostics.Eventing.Reader
|
|
|
|
'''<summary></summary>
|
|
Public Class EDKB02DMSIL
|
|
Inherits System.ServiceProcess.ServiceBase
|
|
|
|
#Region " Vom Component Designer generierter Code "
|
|
|
|
Public Sub New()
|
|
MyBase.New()
|
|
|
|
' Dieser Aufruf wird vom Komponenten-Designer benötigt.
|
|
InitializeComponent()
|
|
|
|
|
|
' Fügen Sie Initialisierungscode hinter dem InitializeComponent()-Aufruf ein
|
|
|
|
End Sub
|
|
|
|
'UserService überschreibt den Löschvorgang zum Bereinigen der Komponentenliste.
|
|
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
|
|
If disposing Then
|
|
If Not (components Is Nothing) Then
|
|
components.Dispose()
|
|
End If
|
|
End If
|
|
MyBase.Dispose(disposing)
|
|
End Sub
|
|
|
|
' Der Haupteinstiegspunkt für den Vorgang
|
|
<MTAThread()>
|
|
Shared Sub Main()
|
|
|
|
#If CONFIG = "Release" Then
|
|
Dim ServicesToRun() As System.ServiceProcess.ServiceBase
|
|
ServicesToRun = New System.ServiceProcess.ServiceBase() {New EDKB02DMSIL()}
|
|
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
|
|
#Else
|
|
|
|
Dim myServ As New EDKB02DMSIL
|
|
myServ.OnStart({""})
|
|
While (True)
|
|
System.Threading.Thread.Sleep(2000)
|
|
End While
|
|
#End If
|
|
|
|
|
|
|
|
End Sub
|
|
|
|
' Für Komponenten-Designer erforderlich
|
|
Private components As System.ComponentModel.IContainer
|
|
|
|
' HINWEIS: Die folgende Prozedur wird vom Komponenten-Designer benötigt.
|
|
' Sie kann mit dem Komponenten-Designer modifiziert werden. Verwenden Sie nicht
|
|
' den Code-Editor zur Bearbeitung.
|
|
'Friend WithEvents ServiceIcon As System.Windows.Forms.NotifyIcon
|
|
|
|
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
|
|
Me.components = New System.ComponentModel.Container()
|
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(EDKB02DMSIL))
|
|
|
|
'
|
|
|
|
'
|
|
'EDKB02DMSIL
|
|
'
|
|
Me.ServiceName = "EDKB02DMSIL"
|
|
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "Deklarationen"
|
|
Private StopThread As Boolean = False
|
|
Dim WithEvents BCK_Timer As New Timers.Timer()
|
|
Dim WithEvents Dokument_Timer As New Timers.Timer
|
|
Dim Watch_Directory As String
|
|
Dim FileWatch As New FileSystemWatcher()
|
|
Dim EventStopped As Boolean = False
|
|
Dim db As New clsdb
|
|
Dim Base64_File As String
|
|
Dim JsonString As String
|
|
Dim mimetype As String
|
|
Dim OutputFile As String
|
|
Dim SendError As String = ""
|
|
|
|
Dim debug As Boolean = False
|
|
Dim logfile As String = ""
|
|
Dim sendtoonbase As Boolean = False
|
|
Dim updateedoka As Boolean = False
|
|
Dim OnBaseFiletype As String = ""
|
|
|
|
|
|
|
|
'Dim w As New Microsoft.Office.Interop.Word.Application
|
|
'Dim x As New Microsoft.Office.Interop.Excel.Application
|
|
|
|
Dim w As Microsoft.Office.Interop.Word.Application
|
|
Dim x As Microsoft.Office.Interop.Excel.Application
|
|
#End Region
|
|
|
|
#Region "Hauptverarbeitung"
|
|
|
|
Dim Parameters As New clsParams
|
|
|
|
Protected Overrides Sub OnStart(ByVal args() As String)
|
|
Try
|
|
Parameters.get_params()
|
|
Me.BCK_Timer.Interval = Parameters.BCK_TimerInterval * 1000
|
|
Me.Dokument_Timer.Interval = Parameters.Document_Timerinterval * 1000
|
|
Me.BCK_Timer.Enabled = True
|
|
Me.BCK_Timer.Start()
|
|
Me.Dokument_Timer.Enabled = True
|
|
Me.Dokument_Timer.Start()
|
|
Me.debug = Parameters.Debug = "1"
|
|
Me.logfile = Parameters.LogFilename
|
|
Me.sendtoonbase = Parameters.SendToOnBase = "1"
|
|
Me.updateedoka = Parameters.updateedoka = "1"
|
|
db.Connectionstring = Parameters.Connectionstring_EDOKA
|
|
db.Connectionstring_DokTypMapping = Parameters.Connectionstring_DokTypMapping
|
|
db.Debug = Parameters.Debug
|
|
db.Logfile = Parameters.LogFilename
|
|
|
|
|
|
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("OTU3NTQ3QDMyMzAyZTM0MmUzMFhyMnhJK1JNSCtETllyc1k5d0lyYzBBR1NQK2JDQlhpamFLdTN4UjNnenc9 ")
|
|
'Convert_Doc("1234")
|
|
' test_excel_csv()
|
|
Catch ex As Exception
|
|
End Try
|
|
End Sub
|
|
|
|
Protected Overrides Sub OnStop()
|
|
'w.Quit(SaveChanges:=False)
|
|
'w = Nothing
|
|
'x.Quit()
|
|
'x = Nothing
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "TimerHandling"
|
|
Public Sub BCKTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles BCK_Timer.Elapsed
|
|
If EventStopped = True Then Exit Sub
|
|
Parameters.Loglevel = My.Settings.LogLevel
|
|
Parameters.Debug = My.Settings.Debug
|
|
EventStopped = True
|
|
BCK_Verarbeitung()
|
|
EventStopped = False
|
|
End Sub
|
|
|
|
Public Sub DokumentTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Dokument_Timer.Elapsed
|
|
If EventStopped = True Then Exit Sub
|
|
Parameters.Loglevel = My.Settings.LogLevel
|
|
Parameters.Debug = My.Settings.Debug
|
|
EventStopped = True
|
|
Archivierung_Verarbeitung()
|
|
EventStopped = False
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "SendMail"
|
|
Public Function send_mail(ByVal ErrorText As String)
|
|
Dim s As String = My.Settings.SendMail_PS
|
|
s = s.Replace("&sender&", My.Settings.Sender)
|
|
s = s.Replace("&recipient&", My.Settings.Recipient)
|
|
s = s.Replace("&body&", ErrorText)
|
|
Dim write As IO.StreamWriter
|
|
write = New IO.StreamWriter(My.Settings.SendMailPath & "" & My.Settings.SendMailFile)
|
|
write.Write(s)
|
|
write.Close()
|
|
s = My.Settings.SendMailCmd
|
|
s = s + My.Settings.SendMailPath + "" + My.Settings.SendMailFile
|
|
|
|
PDebug("Mailversand: " + s, 1)
|
|
Process.Start("powershell.exe", s)
|
|
End Function
|
|
#End Region
|
|
|
|
#Region "FileWatcher"
|
|
|
|
#Region "Verarbeitungen"
|
|
Public Sub deleteTempFiles()
|
|
If Parameters.DeleteTempFiles = True Then
|
|
Dim directoryName As String = Parameters.TempDir
|
|
For Each deleteFile As String In Directory.GetFiles(directoryName, "*.*", SearchOption.TopDirectoryOnly)
|
|
Try
|
|
File.Delete(deleteFile)
|
|
Catch
|
|
End Try
|
|
|
|
Next
|
|
|
|
directoryName = Parameters.TempDirOffice
|
|
For Each deleteFile As String In Directory.GetFiles(directoryName, "*.*", SearchOption.TopDirectoryOnly)
|
|
Try
|
|
File.Delete(deleteFile)
|
|
Catch
|
|
End Try
|
|
Next
|
|
|
|
End If
|
|
|
|
End Sub
|
|
Public Sub BCK_Verarbeitung()
|
|
Try
|
|
PDebug("BCK verarbeiten", 1)
|
|
deleteTempFiles()
|
|
Dim dt As New DataTable
|
|
OnBaseFiletype = "PDF"
|
|
dt = db.Get_Pendente_BCK()
|
|
For Each r As DataRow In dt.Rows
|
|
OutputFile = Parameters.TempDir + "\" + r("dokumentid") + ".pdf"
|
|
PDebug("Generiertes PDF: " + OutputFile, 1)
|
|
If Create_BCK_Dummy(r("dokumentid"), r("barcodenr")) Then
|
|
PDebug("Base-64 Convert", 2)
|
|
Base64_File = ConvertFileToBase64(OutputFile)
|
|
JsonString = ""
|
|
PDebug("Create OnBase-Daten", 2)
|
|
Create_OnBase_Datastream(r("dokumentid"))
|
|
PDebug(JsonString, 3)
|
|
If JsonString <> "" Then
|
|
If Transfer_Onbase(r("dokumentid")) = True Then
|
|
Dim stnr As Integer
|
|
If updateedoka Then
|
|
PDebug("Update EDOKA-Datenbank", 2)
|
|
stnr = update_status(r("dokumentid"))
|
|
db.update_dokument(stnr, r("dokumentid"))
|
|
End If
|
|
Else
|
|
send_mail("Dokument nicht nach OnBase übergeben: " + r("dokumentid"))
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
PDebug("BCK verarbeiten ende", 1)
|
|
Catch ex As Exception
|
|
PDebug(ex.Message, 1)
|
|
send_mail(ex.Message)
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Public Sub Archivierung_Verarbeitung()
|
|
w = New Microsoft.Office.Interop.Word.Application
|
|
x = New Microsoft.Office.Interop.Excel.Application
|
|
' 2012-12-16 DisplayAlert ausschalten
|
|
w.DisplayAlerts = False
|
|
x.DisplayAlerts = False
|
|
'Ende 2012-12-16 DisplayAlert ausschalten
|
|
|
|
PDebug("Standard verarbeiten", 1)
|
|
deleteTempFiles()
|
|
Dim dt As New DataTable
|
|
Dim dd As New DataTable
|
|
dt = db.Get_Archivdokumente
|
|
|
|
For Each r As DataRow In dt.Rows
|
|
Try
|
|
Dim ofile As String
|
|
dd = db.Get_Dokument(r("dokumentid"))
|
|
If dd.Rows(0).Item("dokumenttypnr") = Parameters.ExcelDokTyp Then
|
|
Dim excellib As New clsexcel(Parameters.ExcelCSV)
|
|
excellib.Connectionstring = Parameters.Connectionstring_EDOKA
|
|
excellib.dokumenttypnr = Parameters.ExcelDokTyp
|
|
excellib.CSVPath = Parameters.ExcelCSV
|
|
mimetype = GetDocType(dd.Rows(0).Item("dokumentname"))
|
|
PDebug(mimetype, 2)
|
|
Dim filename As String
|
|
filename = Parameters.TempDirOffice + "\" + r("dokumentid") + "." + mimetype
|
|
If File.Exists(filename) Then
|
|
File.Delete(filename)
|
|
Thread.Sleep(500)
|
|
End If
|
|
db.Get_From_DB(r("dokumentid"), filename)
|
|
excellib.Excelfile = filename
|
|
excellib.Get_Excel_Values(r("dokumentid"))
|
|
End If
|
|
|
|
ofile = Convert_Doc(r("dokumentid"))
|
|
If ofile <> "" Then
|
|
PDebug("Base-64 Convert", 2)
|
|
Base64_File = ConvertFileToBase64(ofile)
|
|
|
|
JsonString = ""
|
|
PDebug("Create OnBase-Daten", 2)
|
|
Create_OnBase_Datastream(r("dokumentid"))
|
|
If JsonString <> "" Then
|
|
PDebug(JsonString, 3)
|
|
If Transfer_Onbase(r("dokumentid")) = True Then
|
|
Dim stnr As Integer
|
|
|
|
If updateedoka = True Then
|
|
PDebug("Update EDOKA-Datenbank", 2)
|
|
stnr = update_status(r("dokumentid"))
|
|
db.update_dokument(stnr, r("dokumentid"))
|
|
End If
|
|
Else
|
|
send_mail("Dokument nicht nach OnBase übergeben: " + r("dokumentid"))
|
|
End If
|
|
|
|
End If
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
send_mail(ex.Message)
|
|
End Try
|
|
|
|
Next
|
|
|
|
w.Quit(SaveChanges:=False)
|
|
'w = Nothing
|
|
x.Quit()
|
|
|
|
'2023-12-16 Anpassungen ReleaseComObject
|
|
Try
|
|
If w IsNot Nothing Then
|
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(2)
|
|
End If
|
|
w = Nothing
|
|
Catch ex As Exception
|
|
'PDebug("Word ReleasecomObjekt Fehler: " + ex.Message, 1)
|
|
End Try
|
|
|
|
Try
|
|
If x IsNot Nothing Then
|
|
System.Runtime.InteropServices.Marshal.ReleaseComObject(2)
|
|
End If
|
|
x = Nothing
|
|
Catch ex As Exception
|
|
'PDebug("Excel ReleasecomObjekt Fehler: " + ex.Message, 1)
|
|
End Try
|
|
|
|
Try
|
|
GC.Collect()
|
|
Catch ex As Exception
|
|
PDebug("GC.Collect: " + ex.Message, 1)
|
|
|
|
End Try
|
|
' 2023-16-16 ende
|
|
|
|
'2023-12-16 urpsürnglich
|
|
'Marshal.ReleaseComObject(w)
|
|
'Marshal.ReleaseComObject(x)
|
|
'x = Nothing
|
|
'w = Nothing
|
|
'2023-12-16 ursprünglich Ende
|
|
|
|
If Parameters.KillCmd <> "" Then
|
|
Process.Start(Parameters.KillCmd)
|
|
End If
|
|
|
|
PDebug("Standard verarbeiten ende", 1)
|
|
End Sub
|
|
|
|
Public Function Create_BCK_Dummy(ByVal Dokumentid As String, ByVal barcodenr As String) As Boolean
|
|
Try
|
|
Dim document As New PdfDocument()
|
|
Dim page As PdfPage = document.Pages.Add()
|
|
Dim graphics As PdfGraphics = page.Graphics
|
|
Dim font As PdfFont = New PdfStandardFont(PdfFontFamily.Helvetica, 20)
|
|
If barcodenr = "" Then
|
|
graphics.DrawString("Bedingt retournierbares-Dokument - nicht eingescannt", font, PdfBrushes.Black, New PointF(0, 0))
|
|
graphics.DrawString("Dokument-ID: " + Dokumentid, font, PdfBrushes.Black, New PointF(0, 50))
|
|
|
|
Else
|
|
graphics.DrawString("EDOKA-Barcode-Dokument - noch nicht eingescannt", font, PdfBrushes.Black, New PointF(0, 0))
|
|
graphics.DrawString("Dokument-ID: " + Dokumentid, font, PdfBrushes.Black, New PointF(0, 50))
|
|
graphics.DrawString("Barcode-Kleber: " + barcodenr, font, PdfBrushes.Black, New PointF(0, 75))
|
|
End If
|
|
|
|
document.Save(Parameters.TempDir + "\" + Dokumentid + ".pdf")
|
|
document.Close(True)
|
|
PDebug("Dummy-PDF erfolgreich erstellt: " + Parameters.TempDir + "\" + Dokumentid + ".pdf", 3)
|
|
Return True
|
|
Catch
|
|
PDebug("Dummy-PDF konnte nicht erstellt werden", 1)
|
|
Return False
|
|
End Try
|
|
|
|
|
|
End Function
|
|
|
|
Public Function update_status(ByVal dokumentid As String) As Integer
|
|
Dim da As New DataTable
|
|
da = db.Get_Status(dokumentid)
|
|
For i As Integer = 0 To da.Rows.Count - 1
|
|
If da.Rows(i).Item("status_bezeichnungnr") = 3 Then
|
|
For i1 As Integer = 0 To da.Rows.Count - 1
|
|
If da.Rows(i1).Item("status_bezeichnungnr") = 4 Or
|
|
da.Rows(i1).Item("status_bezeichnungnr") = 5 Then
|
|
db.insert_history_status(da.Rows(i1).Item("dokument_statusnr"), dokumentid)
|
|
Return da.Rows(i1).Item("dokument_statusnr")
|
|
End If
|
|
Next
|
|
End If
|
|
If da.Rows(i).Item("status_bezeichnungnr") = 11 Then
|
|
For i1 As Integer = 0 To da.Rows.Count - 1
|
|
If da.Rows(i1).Item("status_bezeichnungnr") = 6 Then
|
|
db.insert_history_status(da.Rows(i1).Item("dokument_statusnr"), dokumentid)
|
|
Return da.Rows(i1).Item("dokument_statusnr")
|
|
End If
|
|
Next
|
|
End If
|
|
Next
|
|
End Function
|
|
|
|
Private Sub Create_OnBase_Datastream(ByVal dokumentid As String)
|
|
Dim ds As New DataSet
|
|
ds = db.Get_OnBase_Datastream(dokumentid)
|
|
Dim od As New OnBaseDokument
|
|
od.dokumentTyp = ds.Tables(0).Rows(0).Item("Dokumenttyp")
|
|
od.bpNummer = ds.Tables(0).Rows(0).Item("BPNummer")
|
|
od.personNummer = ds.Tables(0).Rows(0).Item("PersonNummer")
|
|
od.dokumentDatei = Base64_File
|
|
od.dokumentDatum = ds.Tables(0).Rows(0).Item("Dokumentdatum")
|
|
od.dateiTyp = UCase(OnBaseFiletype)
|
|
|
|
Dim Attribute As New List(Of attribute)
|
|
For Each rw As DataRow In ds.Tables(1).Rows
|
|
Dim p As New attribute With
|
|
{
|
|
.fieldname = rw("fieldname"),
|
|
.fieldvalue = rw("fieldvalue")
|
|
}
|
|
Attribute.Add(p)
|
|
Next
|
|
od.attributes = Attribute
|
|
JsonString = ""
|
|
JsonString = Newtonsoft.Json.JsonConvert.SerializeObject(od, Newtonsoft.Json.Formatting.Indented)
|
|
End Sub
|
|
|
|
Public Function ConvertFileToBase64(ByVal fileName As String) As String
|
|
|
|
Dim ReturnValue As String = ""
|
|
|
|
If My.Computer.FileSystem.FileExists(fileName) Then
|
|
Using BinaryFile As FileStream = New FileStream(fileName, FileMode.Open)
|
|
Dim BinRead As BinaryReader = New BinaryReader(BinaryFile)
|
|
Dim BinBytes As Byte() = BinRead.ReadBytes(CInt(BinaryFile.Length))
|
|
ReturnValue = Convert.ToBase64String(BinBytes)
|
|
BinaryFile.Close()
|
|
End Using
|
|
End If
|
|
Return ReturnValue
|
|
End Function
|
|
|
|
Public Function Transfer_Onbase(ByVal dokumentid As String) As Boolean
|
|
Try
|
|
PDebug("Transfer OnBase", 2)
|
|
If sendtoonbase = True Then
|
|
PDebug("OnBase", 3)
|
|
Dim myUri As New Uri(Parameters.EntryPoint_IL)
|
|
Dim data = Encoding.UTF8.GetBytes(JsonString)
|
|
Dim response As String
|
|
response = SendRequest_A(myUri, data, "application/json", "POST")
|
|
PDebug("IL-Response", 3)
|
|
PDebug(response, 1)
|
|
'Dim db As New clsdb
|
|
PDebug("JSON-Datei: " + Parameters.TempDir & "\" + dokumentid + ".json", 2)
|
|
File.WriteAllText(Parameters.TempDir & "\" + dokumentid + ".json", JsonString)
|
|
PDebug("Status in EDOKA-Journal nachführen", 2)
|
|
db.Update_EDOKA_IL_Status(dokumentid, response, SendError)
|
|
If SendError = "1" Then Return False Else Return True
|
|
Else
|
|
PDebug("Kein OnBase-Transfer", 1)
|
|
PDebug("JSON-Datei: " + Parameters.TempDir & "\" + dokumentid + ".json", 1)
|
|
|
|
File.WriteAllText(Parameters.TempDir & "\" + dokumentid + ".json", JsonString)
|
|
db.Update_EDOKA_IL_Status(dokumentid, "DEMO:" + dokumentid, "0")
|
|
End If
|
|
PDebug("Ende Transfer OnBase", 1)
|
|
Catch
|
|
Return False
|
|
End Try
|
|
|
|
End Function
|
|
|
|
Private Function SendRequest_A(uri As Uri, jsonDataBytes As Byte(), contentType As String, method As String) As String
|
|
Dim response As String
|
|
Dim request As WebRequest
|
|
|
|
request = WebRequest.Create(uri)
|
|
request.ContentLength = jsonDataBytes.Length
|
|
request.ContentType = contentType
|
|
request.Method = method
|
|
Try
|
|
|
|
Using requestStream As Stream = request.GetRequestStream
|
|
requestStream.Write(jsonDataBytes, 0, jsonDataBytes.Length)
|
|
requestStream.Close()
|
|
|
|
Using responseStream As Stream = request.GetResponse.GetResponseStream
|
|
Using reader As New StreamReader(responseStream)
|
|
response = reader.ReadToEnd()
|
|
End Using
|
|
End Using
|
|
End Using
|
|
SendError = "0"
|
|
Return response
|
|
Catch ex As Exception
|
|
SendError = "1"
|
|
Return ex.Message
|
|
|
|
End Try
|
|
|
|
|
|
End Function
|
|
|
|
#End Region
|
|
|
|
'''<summary>Initialisierung des Filewacher-Objektes</summary>
|
|
'''<remarks>Das Filewacher-Objekt wird mit den entpsrechenden Pfad- sowie
|
|
'''Dateifilter-Angaben initialisiert.</remarks>
|
|
Private Function Init_Filewatcher() As Boolean
|
|
Try
|
|
FileWatch.Path = Watch_Directory
|
|
FileWatch.IncludeSubdirectories = False
|
|
FileWatch.Filter = "*.*"
|
|
Return True
|
|
Catch ex As Exception
|
|
'Printout("Fehler bei der Initialisierung des Filewacherobjekts auf " + Watch_Directory + ex.Message, EventLogEntryType.Error)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
'''<summary>Eventhandler des FileWatching-Objektes aktivieren</summary>
|
|
Private Function Start_Watching() As Boolean
|
|
Try
|
|
AddHandler FileWatch.Created, New FileSystemEventHandler(AddressOf OnFileEvent)
|
|
AddHandler FileWatch.Renamed, AddressOf OnFileEventRename
|
|
FileWatch.EnableRaisingEvents = True
|
|
'PrintOut("Filewatch Event-Handler initialisiert: " + Me.Watch_Directory)
|
|
Return True
|
|
Catch ex As Exception
|
|
'Printout("Fehler bei der Event-Initialisierung " + ex.Message, EventLogEntryType.Error)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
|
|
'''<summary>Aktivitäten im Inputverzeichnis verarbeiten</summary>
|
|
'''<remarks>Wird eine Datei mit der Endung .IND angeliefert, wird der Eventhandler
|
|
'''gestoppt und die anstehenden Dokumente verarbeitet.
|
|
'''
|
|
'''Nach abgeschlossener Verarbeitung wird der Eventhandler wieder
|
|
'''eingeschaltet</remarks>
|
|
'''<param name="source"></param>
|
|
'''<param name="e"></param>
|
|
Private Sub OnFileEvent(ByVal source As Object, ByVal e As FileSystemEventArgs)
|
|
If EventStopped = True Then Exit Sub
|
|
|
|
|
|
If UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".IND" Or UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".XML" Then
|
|
FileWatch.EnableRaisingEvents = False
|
|
EventStopped = True
|
|
|
|
'IntSleep(Params.WaitAfterFileevent)
|
|
'If UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".XML" Then
|
|
' IntSleep(Params.Wait_before_xmlind_ren)
|
|
' Rename(e.FullPath, e.FullPath + ".ind")
|
|
' PrintTempJournal("Fileevent Rename XML: " + e.FullPath + " -> " + e.FullPath + ".ind")
|
|
'End If
|
|
'PrintOut("Neue Datei " + e.FullPath)
|
|
|
|
FileWatch.EnableRaisingEvents = True
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub OnFileEventRename(ByVal source As Object, ByVal e As RenamedEventArgs)
|
|
'If Params.UseFileEventRename = False Then Exit Sub
|
|
'If EventStopped = True Then Exit Sub
|
|
'If UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".IND" Then
|
|
' FileWatch.EnableRaisingEvents = False
|
|
' EventStopped = True
|
|
' PrintOut("Neue Datei " + e.FullPath)
|
|
' '20130131 - Sleep von 1000 auf 3000 geändert, damit bei FinFox-Dokumente die Verarbeitung nicht aussteigt, sofern die Datei noch nicht angeliefert wurde
|
|
|
|
' FileWatch.EnableRaisingEvents = True
|
|
'End If
|
|
End Sub
|
|
|
|
|
|
|
|
#End Region
|
|
#Region "Converter"
|
|
Public Function Convert_Doc(ByVal dokumentid As String) As String
|
|
Try
|
|
PDebug("Start Convert Doc", 2)
|
|
Dim dok As New DataTable
|
|
dok = db.Get_Dokument(dokumentid)
|
|
PDebug("Dok Read OK", 2)
|
|
mimetype = GetDocType(dok.Rows(0).Item("dokumentname"))
|
|
'mimetype = UCase(mimetype)
|
|
|
|
|
|
PDebug(mimetype, 2)
|
|
Dim filename As String
|
|
filename = Parameters.TempDirOffice + "\" + dokumentid + "." + mimetype
|
|
If File.Exists(filename) Then
|
|
File.Delete(filename)
|
|
Thread.Sleep(500)
|
|
End If
|
|
db.Get_From_DB(dokumentid, filename)
|
|
OutputFile = ""
|
|
Select Case UCase(mimetype)
|
|
Case "DOC", "DOCX", "DOCM", "DOT", "DOTX", "DOTM"
|
|
OutputFile = Parameters.TempDir + "\" + dokumentid + ".pdf"
|
|
If Parameters.AsOffice.IndexOf(";" & dok.Rows(0).Item("dokumenttypnr").ToString & ";") > -1 Then
|
|
OutputFile = Parameters.TempDir + "\" + dokumentid + "." + mimetype
|
|
OnBaseFiletype = mimetype
|
|
FileCopy(filename, OutputFile)
|
|
PDebug("Datei kopieren: " + filename + " nach " + OutputFile, 2)
|
|
Return OutputFile
|
|
End If
|
|
'filename = "K:\EDOKA\__OnBase\dok1.docm"
|
|
PDebug("Word-Dokument konvertieren: " + filename + " nach " + OutputFile, 2)
|
|
OnBaseFiletype = "PDF"
|
|
If Convert_Word(filename, OutputFile) Then Return OutputFile Else Return ""
|
|
|
|
Case "XLS", "XLSX", "XLSM", "XLT", "XLTX", "XLTM"
|
|
OutputFile = Parameters.TempDir + "\" + dokumentid + ".pdf"
|
|
If Parameters.AsOffice.IndexOf(";" & dok.Rows(0).Item("dokumenttypnr").ToString & ";") > -1 Then
|
|
OutputFile = Parameters.TempDir + "\" + dokumentid + "." + mimetype
|
|
OnBaseFiletype = mimetype
|
|
FileCopy(filename, OutputFile)
|
|
PDebug("Datei kopieren: " + filename + " nach " + OutputFile, 2)
|
|
Return OutputFile
|
|
End If
|
|
PDebug("Excel-Dokument konvertieren: " + filename + " nach " + OutputFile, 2)
|
|
If Convert_Excel(filename, OutputFile) Then Return OutputFile Else Return ""
|
|
OnBaseFiletype = "PDF"
|
|
Case "PDF", "JPG", "TIF"
|
|
OutputFile = Parameters.TempDir + "\" + dokumentid + "." + mimetype
|
|
OnBaseFiletype = mimetype
|
|
FileCopy(filename, OutputFile)
|
|
PDebug("Datei kopieren: " + filename + " nach " + OutputFile, 2)
|
|
Return OutputFile
|
|
Case Else
|
|
OutputFile = Parameters.TempDir + "\" + dokumentid + "." + mimetype
|
|
OnBaseFiletype = mimetype
|
|
FileCopy(filename, OutputFile)
|
|
PDebug("Datei kopieren: " + filename + " nach " + OutputFile, 2)
|
|
Return OutputFile
|
|
End Select
|
|
|
|
|
|
Catch ex As Exception
|
|
PDebug(ex.Message, 1)
|
|
End Try
|
|
End Function
|
|
|
|
Dim WithEvents WordTimer As New Timers.Timer
|
|
Dim WithEvents ExcelTimer As New Timers.Timer
|
|
Public Function Convert_Word(ByVal filename As String, ByVal outputfile As String) As Boolean
|
|
|
|
WordTimer.Interval = 20000
|
|
WordTimer.Enabled = True
|
|
Try
|
|
If w.Documents.Count > 0 Then
|
|
For i As Integer = 1 To w.Documents.Count
|
|
w.Documents(i).Saved = True
|
|
w.Documents(i).Close(SaveChanges:=False)
|
|
Next
|
|
End If
|
|
Catch ex As Exception
|
|
w = Nothing
|
|
w = New Microsoft.Office.Interop.Word.Application
|
|
End Try
|
|
Try
|
|
w.Documents.Open(FileName:=filename.ToString, ReadOnly:=True)
|
|
w.ActiveDocument.ExportAsFixedFormat(outputfile.ToString, Word.WdExportFormat.wdExportFormatPDF, , Word.WdExportOptimizeFor.wdExportOptimizeForPrint, Word.WdExportRange.wdExportAllDocument, , , Word.WdExportItem.wdExportDocumentContent, True, True, Word.WdExportCreateBookmarks.wdExportCreateNoBookmarks, True, False, False)
|
|
w.ActiveDocument.Saved = True
|
|
w.ActiveDocument.Close(SaveChanges:=False)
|
|
WordTimer.Enabled = False
|
|
Thread.Sleep(100)
|
|
Return True
|
|
Catch ex As Exception
|
|
Try
|
|
w.Quit(SaveChanges:=False)
|
|
Catch
|
|
End Try
|
|
Try
|
|
w = Nothing
|
|
Catch
|
|
End Try
|
|
Try
|
|
w = New Microsoft.Office.Interop.Word.Application
|
|
Catch
|
|
End Try
|
|
Return False
|
|
End Try
|
|
WordTimer.Enabled = False
|
|
End Function
|
|
Public Sub WordTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles WordTimer.Elapsed
|
|
Dim processArray As Process() = Process.GetProcessesByName("winword")
|
|
For Each p As Process In processArray
|
|
p.Kill()
|
|
Next
|
|
WordTimer.Enabled = False
|
|
End Sub
|
|
Public Sub ExcelTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles WordTimer.Elapsed
|
|
Dim processArray As Process() = Process.GetProcessesByName("excel")
|
|
For Each p As Process In processArray
|
|
p.Kill()
|
|
Next
|
|
ExcelTimer.Enabled = False
|
|
End Sub
|
|
Public Function Convert_Excel(ByVal filename As String, ByVal outputfile As String) As Boolean
|
|
ExcelTimer.Interval = 40000
|
|
ExcelTimer.Enabled = True
|
|
Try
|
|
If x.Workbooks.Count > 0 Then
|
|
For i As Integer = 1 To x.Workbooks.Count
|
|
x.Workbooks(i).Close(SaveChanges:=False)
|
|
Next
|
|
End If
|
|
x.Workbooks.Open(filename.ToString)
|
|
x.ActiveWorkbook.ExportAsFixedFormat(Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF, outputfile.ToString, Microsoft.Office.Interop.Excel.XlFixedFormatQuality.xlQualityStandard)
|
|
x.ActiveWorkbook.Close(SaveChanges:=False)
|
|
ExcelTimer.Enabled = False
|
|
Thread.Sleep(1000)
|
|
Return True
|
|
Catch ex As Exception
|
|
PDebug("Fehler::Convert Excel: " + ex.Message, 1)
|
|
|
|
Try
|
|
x = Nothing
|
|
Catch
|
|
End Try
|
|
Try
|
|
x = New Microsoft.Office.Interop.Excel.Application
|
|
Catch
|
|
End Try
|
|
|
|
Return False
|
|
End Try
|
|
ExcelTimer.Enabled = False
|
|
End Function
|
|
|
|
Public Function GetDocType(ByVal Filename As String) As String
|
|
Dim NoDot() As String
|
|
NoDot = Split(Filename, ".")
|
|
GetDocType = NoDot(UBound(NoDot))
|
|
End Function
|
|
|
|
Public Sub PDebug(ByVal istring As String, ByVal loglevel As Integer)
|
|
Dim s As String
|
|
s = Now.ToString("u")
|
|
istring = s + " - " + istring
|
|
If debug = True Then
|
|
Console.WriteLine(istring)
|
|
If logfile <> "" Then
|
|
Try
|
|
If loglevel <= Parameters.Loglevel Then
|
|
FileOpen(1, logfile, OpenMode.Append)
|
|
WriteLine(1, istring)
|
|
FileClose(1)
|
|
End If
|
|
Catch
|
|
End Try
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
|
|
#End Region
|
|
|
|
|
|
|
|
End Class
|