RecordOrganizer/app/DD-Record-Organizer/ClassImport_Windream.vb

747 lines
46 KiB
VB.net

Imports System.IO
Imports System.Globalization
Imports WINDREAMLib
Imports DD_LIB_Standards
Public Class ClassImport_Windream
Public Shared Function Import_File(QuellDatei_Path As String, DOCTYPE_ID As Integer)
Try
Dim err As Boolean = False
CURRENT_FILENAME = QuellDatei_Path
Dim DT_DOCTYPE As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBDD_DOKUMENTART WHERE GUID = " & DOCTYPE_ID, True)
If Not IsNothing(DT_DOCTYPE) Then
Dim Targetpath As String = DT_DOCTYPE.Rows(0).Item("ZIEL_PFAD")
Dim Dokart As String = DT_DOCTYPE.Rows(0).Item("BEZEICHNUNG")
clsWindream.MY_WDOBJECTTYPE = DT_DOCTYPE.Rows(0).Item("OBJEKTTYP")
'Den Namen der Dokumentart generieren
If ClassImport_Windream.Name_Generieren(DOCTYPE_ID) = False Then
err = True
Return False
End If
'Die Datei nach windream importieren
Dim streamresult = clsWD_SET.Stream_File(QuellDatei_Path, Targetpath)
If streamresult = True Then
Dim sql As String = String.Format("SELECT DocID FROM VWPMO_DOC_SYNC WHERE UPPER(FULL_FILENAME) = UPPER('{0}') AND CONVERT(DATE,Change_DateTime) = CONVERT(DATE,GETDATE())", CURRENT_FILEIN_WD)
CURRENT_DOC_ID = ClassDatabase.Execute_Scalar(sql)
sql = $"SELECT * FROM TBDD_INDEX_AUTOM WHERE DOCTYPE_ID = {DOCTYPE_ID} AND ENTITY_ID = {CURRENT_ENTITY_ID}"
Dim dt As DataTable = ClassDatabase.Return_Datatable(sql)
Dim indexierung_erfolgreich As Boolean = False
If dt Is Nothing = False Then
If dt.Rows.Count > 0 Then
Dim Count As Integer = 0
For Each row As DataRow In dt.Rows
Dim indexname = row.Item("INDEXNAME").ToString
Dim idxvalue = row.Item("VALUE")
If idxvalue.ToString.StartsWith("@") Then
Select Case idxvalue.ToString.ToUpper
Case "@RECORD-ID"
idxvalue = idxvalue.ToString.Replace("@Record-ID", CURRENT_RECORD_ID)
Case "@DOKART"
idxvalue = idxvalue.ToString.Replace("@Dokart", Dokart)
End Select
End If
LOGGER.Debug("Indexvalue: " & idxvalue.ToString)
Count += 1
indexierung_erfolgreich = clsWD_SET.IndexFile(CURRENT_FILEIN_WD, indexname, idxvalue, clsWindream.MY_WDOBJECTTYPE)
If indexierung_erfolgreich = False Then
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error: ", "Unexpected Error in indexing '" & indexname & "') - Check logfile!")
err = True
Exit For
End If
'ByVal WD_File As String, ByVal _Indexname As String, ByVal _Value As String
Next
If err = True Then
Return False
End If
''den Entity-Key auslesen
'sql = "Select Top 1 * from TBPMO_WD_OBJECTTYPE where Upper(object_type) = Upper('" & clsWindream.MY_WDOBJECTTYPE & "')"
'dt = ClassDatabase.Return_Datatable(sql, True)
'If Not dt Is Nothing Then
' If dt.Rows.Count = 1 Then
' Dim indexname = dt.Rows(0).Item("IDXNAME_ENTITYID").ToString
' Dim idxvalue = CURRENT_ENTITY_ID
' LOGGER.Debug("Entity-ID: " & idxvalue.ToString)
' indexierung_erfolgreich = clsWD_SET.IndexFile(CURRENT_FILEIN_WD, indexname, idxvalue, clsWindream.MY_WDOBJECTTYPE)
' If indexierung_erfolgreich = False Then
' err = True
' ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error: ", "Unexpected Error in indexing Entity-ID '" & indexname & "') - Check logfile!")
' Return False
' End If
' indexname = dt.Rows(0).Item("IDXNAME_PARENTID").ToString
' idxvalue = CURRENT_PARENT_ENTITY_ID
' LOGGER.Debug("Parent-ID: " & idxvalue.ToString)
' indexierung_erfolgreich = clsWD_SET.IndexFile(CURRENT_FILEIN_WD, indexname, idxvalue, clsWindream.MY_WDOBJECTTYPE)
' If indexierung_erfolgreich = False Then
' err = True
' ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error: ", "Unexpected Error in indexing Parent-ID '" & indexname & "') - Check logfile!")
' Return False
' End If
' End If
'End If
If indexierung_erfolgreich = True Then
Return True
Else
MsgBox("Unexpected Error in Indexing file. Please chek log!", MsgBoxStyle.Exclamation, "Achtung:")
Return False
End If
End If
End If
End If
Else
Return False
End If
Catch ex As Exception
MsgBox("Unexpected error in Import_File ClassImport_windream: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
End Function
Public Shared Function Name_Generieren(DocTypeID As Integer)
Try
Dim FILE_DELIMITER, VERSION_DELIMITER, _WDOBJECTTYPE, _NewFileString As String
Dim sql As String = "select VERSION_DELIMITER, FILE_DELIMITER FROM TBDD_MODULES where UPPER(NAME) = UPPER('Global-Indexer')"
Dim DT1 As DataTable = ClassDatabase.Return_Datatable(sql)
FILE_DELIMITER = DT1.Rows(0).Item("FILE_DELIMITER")
VERSION_DELIMITER = DT1.Rows(0).Item("VERSION_DELIMITER")
Dim err As Boolean = False
Dim oWMTARGET_FOLDER As String
Dim oExtension As String = Path.GetExtension(CURRENT_FILENAME)
Dim oDT As DataTable = ClassDatabase.Return_Datatable("SELECT * FROM TBDD_DOKUMENTART WHERE GUID = " & DocTypeID, True)
'sql_history_INSERT_INTO = "INSERT INTO TBGI_HISTORY (FILENAME_ORIGINAL,FILENAME_NEW"
'sql_history_Index_Values = ""
Dim AnzahlIndexe As Integer = 1
_WDOBJECTTYPE = oDT.Rows(0).Item("OBJEKTTYP")
' Den Zielordner erstellen
oWMTARGET_FOLDER = oDT.Rows(0).Item("ZIEL_PFAD")
sql = $"SELECT * FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE FORMVIEW_ID = {CURRENT_FORMVIEW_ID} AND DOCTYPE_ID = {DocTypeID}"
Dim oDTFW_DOCTYPES As DataTable = ClassDatabase.Return_Datatable(sql)
Dim oDYNAMIC_FOLDER = oDTFW_DOCTYPES.Rows(0).Item("DYNAMIC_FOLDER")
Dim oNAME_CONVENTION = oDTFW_DOCTYPES.Rows(0).Item("NAME_CONVENTION")
Dim oROOTWM_FOLDER
Try
oROOTWM_FOLDER = oDTFW_DOCTYPES.Rows(0).Item("ROOT_FOLDER")
Catch ex As Exception
oROOTWM_FOLDER = ""
End Try
If oROOTWM_FOLDER <> String.Empty Then
LOGGER.Debug($"oROOTWM_FOLDER '{oROOTWM_FOLDER}' will be used")
oWMTARGET_FOLDER = oROOTWM_FOLDER
End If
'ClassDatabase.Execute_Scalar(sql)
If Not IsDBNull(oDYNAMIC_FOLDER) Then
If oDYNAMIC_FOLDER <> String.Empty Then
If CREATE_FOLDER_INDEX(oDYNAMIC_FOLDER, DocTypeID) = True And CURRENT_VARIABLE_FOLDER <> "" Then
LOGGER.Debug("After CREATE_FOLDER_INDEX - oWMTARGET_FOLDER: " & oWMTARGET_FOLDER)
LOGGER.Debug("After CREATE_FOLDER_INDEX - CURRENT_VARIABLE_FOLDER: " & CURRENT_VARIABLE_FOLDER)
If oWMTARGET_FOLDER <> CURRENT_VARIABLE_FOLDER Then
oWMTARGET_FOLDER = oWMTARGET_FOLDER & "\" & CURRENT_VARIABLE_FOLDER.Replace(oWMTARGET_FOLDER, "")
Else
oWMTARGET_FOLDER = CURRENT_VARIABLE_FOLDER
End If
'End If
Else
MsgBox("Unexpected Error in Creating Variable Folder - Check logfile!", MsgBoxStyle.Critical)
Return False
End If
End If
End If
LOGGER.Debug("oWMTARGET_FOLDER: " & oWMTARGET_FOLDER)
LOGGER.Debug("CURRENT_SUBFOLDER: " & CURRENT_SUBFOLDER)
'Untsserordner ja oder nein
If CURRENT_CHECK_SUBFOLDER = True And CURRENT_SUBFOLDER <> "" Then
oWMTARGET_FOLDER = oWMTARGET_FOLDER & "\" & CURRENT_SUBFOLDER
End If
oWMTARGET_FOLDER = oWMTARGET_FOLDER.Replace("\\", "\")
If oWMTARGET_FOLDER.Contains("/") Then
LOGGER.Info(String.Format("Targetpath contains /-sign. / will be replaced with _"))
oWMTARGET_FOLDER = oWMTARGET_FOLDER.Replace("/", "_")
End If
Try
Select Case clsWD_GET.WD_PATH_EXISTS(oWMTARGET_FOLDER.Substring(2))
Case False
LOGGER.Info(String.Format("Targetpath ({0}) is not existing or result of WD_PATH_EXISTS was false.", oWMTARGET_FOLDER.Substring(2)))
Dim split() As String = oWMTARGET_FOLDER.Split("\")
Dim Path_Combined As String = ""
For Each s As String In split
Path_Combined &= s & "\"
If Path_Combined <> "W:\" Then
Dim temppath = Path_Combined.Substring(2)
Try
temppath = Path_Combined.Substring(2).Substring(0, temppath.Length)
Select Case clsWD_GET.WD_PATH_EXISTS(temppath)
Case False
LOGGER.Debug("Trying to create folder-part: " & temppath)
clsWindream.MY_WDSESSION.GetNewWMObjectFS(2, temppath, 0) 'WMEntityFolder,WMObjectEditModeNoEdit)
Case -10
LOGGER.Warn("WD_PATH_EXISTS returned -10 for: " & temppath)
Return False
End Select
Catch ex As Exception
If Not ex.Message.Contains("Filename exists!") Then
LOGGER.Warn(String.Format("Could not create folder-part: {0} - Complete path is: ({1})", temppath, oWMTARGET_FOLDER.Substring(2)))
LOGGER.Warn(String.Format("ErrorMessage: {0}: ", ex.Message))
Return False
End If
End Try
End If
Next
Case -10
MsgBox("Attention: the folder of the doctype does not exist or there was an error while checking....", MsgBoxStyle.Critical)
Return False
End Select
Catch ex As Exception
If Not ex.Message.Contains("Filename exists!") Then
LOGGER.Warn(String.Format("Could not create folder ({0}): " & ex.Message, oWMTARGET_FOLDER.Substring(2)))
Return False
End If
End Try
'####
' Regulären Ausdruck zum Auslesen der Indexe definieren
Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
'Namenkonvention laden
'Dim NameConv = ClassDatabase.Execute_Scalar("SELECT TOP 1 NAME_CONVENTION FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & DocTypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID, True)
If IsDBNull(oNAME_CONVENTION) Then
LOGGER.Warn("Achtung: Namenskonvention is DBNull")
oNAME_CONVENTION = Path.GetFileNameWithoutExtension(CURRENT_FILENAME)
ElseIf oNAME_CONVENTION = String.Empty Then
LOGGER.Warn("Achtung: Namenskonvention is String empty")
oNAME_CONVENTION = Path.GetFileNameWithoutExtension(CURRENT_FILENAME)
End If
'schonmal den gesamten Pfad laden
Dim oNewWM_Filename As String = oWMTARGET_FOLDER & "\" & oNAME_CONVENTION
LOGGER.Debug("oNewWM_Filename: " & oNewWM_Filename)
' einen Regulären Ausdruck laden
Dim regulärerAusdruck As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(preg)
' die Vorkommen im SQL-String auslesen
Dim elemente As System.Text.RegularExpressions.MatchCollection = regulärerAusdruck.Matches(oNewWM_Filename)
'####
' alle Vorkommen innerhalbd er Namenkonvention durchlaufen
For Each element As System.Text.RegularExpressions.Match In elemente
LOGGER.Debug("element in RegeX: " & element.Value)
Select Case element.Value.Substring(2, 1).ToUpper
'Nur automatische Indizes auswerten
Case "A"
Dim APattern = element.Value.Substring(3, element.Value.Length - 4)
Dim value As String
Select Case APattern
'Laufzeitvariable Record-ID
Case "RECORD_ID"
value = CURRENT_RECORD_ID
Case "DOKART"
'Laufzeitvariable Dokumentartstring
value = CURRENT_DOKARTSTRING
Case Else
'Ein Index der nur für die Namenkonvention herangezogen wird
If APattern.StartsWith("NC_") And APattern.Contains("#") Then
Dim split() As String = APattern.Split("#")
If split.Length = 2 Then
'Die GUID des AutoIndex auslesen
Dim INDEX_ID = split(1)
If IsNumeric(INDEX_ID) Then
Dim sql_AUTOindexresult = ClassDatabase.Execute_Scalar("SELECT SQL_RESULT FROM TBDD_INDEX_AUTOM WHERE GUID = " & INDEX_ID, True)
If IsNothing(sql_AUTOindexresult) Then
LOGGER.Debug("unexpected: sql_AUTOindexresult is nothing!!")
value = ""
Else
If IsDBNull(sql_AUTOindexresult) Then
value = ""
Else
sql_AUTOindexresult = sql_AUTOindexresult.ToString.ToUpper.Replace("@RECORD-ID", CURRENT_RECORD_ID)
Dim AUTOindexresult = ClassDatabase.Execute_Scalar(sql_AUTOindexresult, True)
If IsNothing(AUTOindexresult) Then
LOGGER.Warn("ATTENTION: unexpected: AUTOindexresult is nothing!!")
LOGGER.Warn("" & sql_AUTOindexresult)
value = ""
Else
If IsDBNull(AUTOindexresult) Then
value = ""
Else
value = AUTOindexresult
End If
End If
End If
End If
Else
LOGGER.Warn("INDEX_ID is not numeric: " & INDEX_ID.ToString & "- APattern: " & APattern)
value = ""
End If
Else
LOGGER.Warn("split.Length <> 2 - APattern: " & APattern)
value = ""
End If
ElseIf APattern.Contains("#") Then
LOGGER.Debug("element [" & APattern & "] filled with Record-Data...: ")
Dim split() As String = APattern.Split("#")
If split.Length = 2 Then
Dim CONTROL_ID = split(1)
If IsNumeric(CONTROL_ID) Then
Dim CONTROLVALUE = ClassControlValues.Get_Control_Value_for_ID(CONTROL_ID, CURRENT_RECORD_ID)
If IsNothing(CONTROLVALUE) Then
Dim checktype = "SELECT CONTROL_TYPE_ID,SQL_COMMAND_1,CONNECTION_ID_1 FROM TBPMO_CONTROL WHERE GUID = " & CONTROL_ID
Dim DTtype As DataTable = ClassDatabase.Return_Datatable(checktype)
If DTtype.Rows.Count = 1 Then
Dim lblsql = DTtype.Rows(0).Item(1)
lblsql = lblsql.ToString.ToUpper.Replace("@RECORD_ID", CURRENT_RECORD_ID)
lblsql = lblsql.ToString.ToUpper.Replace("@RECORD-ID", CURRENT_RECORD_ID)
lblsql = lblsql.ToString.ToUpper.Replace("@ENTITY-ID", CURRENT_ENTITY_ID)
lblsql = lblsql.ToString.ToUpper.Replace("@ENTITY_ID", CURRENT_ENTITY_ID)
LOGGER.Debug("variable sql will be used for convention")
Dim result = ClassDatabase.Execute_ScalarWithConnection(DTtype.Rows(0).Item(2), lblsql)
If Not IsNothing(result) Then
value = result.ToString
Else
LOGGER.Warn("variable sqlresult is nothing - " & lblsql)
value = ""
End If
Else
LOGGER.Warn("NameConvention should be filled with value of Control-ID '" & CONTROL_ID & "', but result was nothing.")
LOGGER.Warn("SQL-Command: " & CURRENT_LAST_SQL)
value = ""
End If
Else
If IsDBNull(CONTROLVALUE) Then
LOGGER.Warn("NameConvention should be filled with value of Control-ID '" & CONTROL_ID & "', but result was DBNULL.")
LOGGER.Warn("SQL-Command: " & CURRENT_LAST_SQL)
value = ""
Else
Dim sql1 = "SELECT * FROM TBPMO_WD_NAMECONVENTION_FORMAT WHERE ID = (SELECT TOP 1 GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & DocTypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID & ")"
Dim DT_FORMAT As DataTable = ClassDatabase.Return_Datatable(sql1, True)
If Not IsNothing(DT_FORMAT) Then
If DT_FORMAT.Rows.Count > 0 Then
Dim result
Try
result = (From FormatRow In DT_FORMAT.AsEnumerable
Select FormatRow Where FormatRow.Item("PATTERN") = APattern).Single()
Catch ex As Exception
End Try
If Not IsNothing(result) Then
Dim _rule = result.Item("FORMAT_RULE")
If Not IsNothing(_rule) Then
If IsDate(CONTROLVALUE) Then
Dim _date As Date = CDate(CONTROLVALUE)
'Dim _date = CDate(Format(CONTROLVALUE, "dd-MM-yyyy"))
_rule = _rule.ToString.Replace("Y", "y")
_rule = _rule.ToString.Replace("D", "d")
_rule = _rule.ToString.Replace("m", "M")
Dim convertedvalue = _date.ToString(_rule, CultureInfo.InvariantCulture)
CONTROLVALUE = convertedvalue
End If
End If
End If
End If
End If
value = CONTROLVALUE
End If
End If
End If
End If
End If
End Select
If value <> String.Empty Then
oNewWM_Filename = oNewWM_Filename.Replace(element.Value, value)
_NewFileString = oNewWM_Filename
LOGGER.Debug("Actual NEWFILESTRING: " & _NewFileString)
' sql_history_INSERT_INTO = sql_history_INSERT_INTO & ", INDEX" & AnzahlIndexe.ToString
AnzahlIndexe += 1
' sql_history_Index_Values = sql_history_Index_Values & ", '" & value & "'"
Else
err = True
End If
Case "V"
Dim datetemp As String
Dim _Month As String = My.Computer.Clock.LocalTime.Month
If _Month.Length = 1 Then
_Month = "0" & _Month
End If
Dim _day As String = My.Computer.Clock.LocalTime.Day
If _day.Length = 1 Then
_day = "0" & _day
End If
Dim type = element.Value '.ToUpper.Replace("[v%", "")
type = type.Replace("[%v", "")
type = type.Replace("]", "")
Select Case type.ToUpper
Case "YY_MM_DD"
datetemp = My.Computer.Clock.LocalTime.Year.ToString.Substring(2) & "_" & _Month & "_" & _day
Case "YYMMDD"
datetemp = My.Computer.Clock.LocalTime.Year.ToString.Substring(2) & _Month & _day
Case "YY_MM"
datetemp = My.Computer.Clock.LocalTime.Year.ToString.Substring(2) & "_" & _Month
Case "YYYY_MM_DD"
datetemp = My.Computer.Clock.LocalTime.Year & "_" & _Month & "_" & _day
Case "YYYYMM"
datetemp = My.Computer.Clock.LocalTime.Year & _Month
Case "YYYYMMDD"
datetemp = My.Computer.Clock.LocalTime.Year & _Month & _day
Case "DD_MM_YY"
datetemp = _day & "_" & _Month & "_" & My.Computer.Clock.LocalTime.Year.ToString.Substring(2)
Case "DD_MM_YYYY"
datetemp = _day & "_" & _Month & "_" & My.Computer.Clock.LocalTime.Year.ToString
Case "DD.MM.YY"
datetemp = _day & "." & _Month & "." & My.Computer.Clock.LocalTime.Year.ToString.Substring(2)
Case "DDMMYY"
datetemp = _day & _Month & My.Computer.Clock.LocalTime.Year.ToString.Substring(2)
Case "DDMMYYYY"
datetemp = _day & _Month & My.Computer.Clock.LocalTime.Year
Case "DD.MM.YYYY"
datetemp = _day & "." & _Month & "." & My.Computer.Clock.LocalTime.Year
Case "YYYY_MM"
datetemp = My.Computer.Clock.LocalTime.Year & "_" & _Month
Case "MM_YYYY"
datetemp = _Month & "_" & My.Computer.Clock.LocalTime.Year
Case "OFilename".ToUpper
oNewWM_Filename = oNewWM_Filename.Replace(element.Value, Path.GetFileNameWithoutExtension(CURRENT_FILENAME))
Case "Username".ToUpper
oNewWM_Filename = oNewWM_Filename.Replace(element.Value, USER_USERNAME)
End Select
If datetemp <> "" Then
oNewWM_Filename = oNewWM_Filename.Replace(element.Value, datetemp)
End If
_NewFileString = oNewWM_Filename
Case Else
Dim msg As String
msg = "In der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & element.Value.ToUpper
If USER_LANGUAGE <> "de-DE" Then
msg = "In nameconvention an element was defined which could not be replaced." & vbNewLine & "elementname: " & element.Value.ToUpper
End If
LOGGER.Warn(msg)
MsgBox(msg, MsgBoxStyle.Exclamation, "Error in Name Convention:")
End Select
Next
Try
'ungültige Zeichen entfernen
oNewWM_Filename = ClassHelper.CleanFilename(oNewWM_Filename, "")
If oNewWM_Filename.Contains("/") Then
LOGGER.Info(String.Format("DATEINAME contains /-sign. / will be replaced with _"))
oNewWM_Filename = oNewWM_Filename.Replace("/", "_")
End If
Catch ex As Exception
LOGGER.Warn(" - Error in Versioning file - Error: " & vbNewLine & ex.Message)
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in Versioning file:")
err = True
End Try
CURRENT_NEWFILENAME = oNewWM_Filename & oExtension
'False oder True zurückgeben
If err = False Then
Return True
Else
Dim msg As String
msg = "Fehler während der Dateinamengenerierung. Evtl. wurden Mussfelder nicht ausgefüllt?"
If USER_LANGUAGE <> "de-DE" Then
msg = "Error in create variable filename. Reasons: unfilled control values. Check logfile."
End If
MsgBox(msg, MsgBoxStyle.Exclamation)
Return False
End If
Catch ex As Exception
LOGGER.Warn(" - Unexpected Error in FileName-Creating: " & vbNewLine & ex.Message)
MsgBox(" - Unexpected Error in FileName-Creating: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
Return False
End Try
End Function
Private Shared Function CREATE_FOLDER_INDEX(FolderConvention As String, DocTypeID As Integer)
Try
CURRENT_VARIABLE_FOLDER_OVERRIDE = False
'Dim RootFolder As String = Path.GetDirectoryName(CURRENT_NEWFILENAME)
CURRENT_VARIABLE_FOLDER = ""
'######
Dim p_reg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
' einen Regulären Ausdruck laden
Dim regularExpression As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(p_reg)
' die Vorkommen im Folder-String auslesen
Dim elemente As System.Text.RegularExpressions.MatchCollection = regularExpression.Matches(FolderConvention)
'####
' alle Vorkommen innerhalb des Ordnerstrings durchlaufen
For Each element As System.Text.RegularExpressions.Match In elemente
LOGGER.Debug("Elementname in FolderString: '" & element.ToString & "'")
Dim EL_SUBSTRING = element.Value.Substring(2, 1).ToUpper
LOGGER.Debug("EL_SUBSTRING is: '" & EL_SUBSTRING & "'")
Select Case EL_SUBSTRING
'Manueller Indexwert
Case "A"
Dim split() As String = element.Value.Substring(3, element.Value.Length - 4).Split("#")
If split.Length = 2 Then
'Die GUID des AutoIndex auslesen
Dim INDEX_ID = split(1)
If IsNumeric(INDEX_ID) Then
Dim sql = "SELECT SQL_RESULT FROM TBDD_INDEX_AUTOM WHERE GUID = " & INDEX_ID
Dim sql_command = ClassDatabase.Execute_Scalar(sql)
If IsNothing(sql_command) Then
LOGGER.Warn("unexpected: SQL_RESULT is nothing!!")
LOGGER.Warn("" & sql)
Else
If IsDBNull(sql_command) Then
LOGGER.Warn("unexpected: sql_command is DBNULL!!")
Else
sql_command = sql_command.ToString.ToUpper.Replace("@RECORD-ID", CURRENT_RECORD_ID)
sql_command = sql_command.ToString.ToUpper.Replace("@RECORD_ID", CURRENT_RECORD_ID)
sql_command = sql_command.ToString.ToUpper.Replace("@ENTITY-ID", CURRENT_ENTITY_ID)
sql_command = sql_command.ToString.ToUpper.Replace("@ENTITY_ID", CURRENT_ENTITY_ID)
Dim AUTOindexresult = ClassDatabase.Execute_Scalar(sql_command, True)
If IsNothing(AUTOindexresult) Then
LOGGER.Warn("unexpected: AUTOindexresult is nothing!!")
LOGGER.Warn("" & sql_command)
Else
If IsDBNull(AUTOindexresult) Then
LOGGER.Warn("unexpected: AUTOindexresult is DBNULL - " & sql_command)
Else
LOGGER.Debug("AUTOindexresult is: '" & AUTOindexresult & "'")
FolderConvention = FolderConvention.Replace(element.ToString, AUTOindexresult)
End If
End If
End If
End If
Else
LOGGER.Warn("INDEX_ID is not numeric: " & INDEX_ID.ToString & "- APattern: " & element.Value)
End If
Else
LOGGER.Warn("split.Length <> 2 - APattern: " & element.Value)
End If
Case "M"
LOGGER.Debug("Working on manual value......'")
Dim split() As String = element.Value.Substring(3, element.Value.Length - 4).Split("#")
If split.Length = 2 Then
'Die GUID des AutoIndex auslesen
Dim INDEX_ID = split(1)
If IsNumeric(INDEX_ID) Then
If element.Value.ToUpper.Contains("FOLDERSELECT") Then
LOGGER.Debug("FOLDERSELECT......'")
For Each row As DataRow In CURRENT_TBPMO_INDEX_MAN.Rows
If row.Item("GUID") = INDEX_ID Then
Dim manvalue = row.Item("MAN_VALUE")
If manvalue <> String.Empty Then
LOGGER.Debug("folder value is: '" & manvalue & "'")
CURRENT_VARIABLE_FOLDER_OVERRIDE = True
CURRENT_VARIABLE_FOLDER = manvalue
Return True
Else
LOGGER.Warn("Attention: manvalue (from Input indexing is empty!!")
End If
End If
Next
Else
For Each row As DataRow In CURRENT_TBPMO_INDEX_MAN.Rows
If row.Item("GUID") = INDEX_ID Then
Dim manvalue = row.Item("MAN_VALUE")
If manvalue <> String.Empty Then
LOGGER.Debug("manvalue is: '" & manvalue & "'")
FolderConvention = FolderConvention.Replace(element.ToString, manvalue)
FolderConvention = FolderConvention.Replace("\\", "")
Else
LOGGER.Warn("Attention: manvalue (from Input indexing is empty!!")
End If
End If
Next
End If
Else
LOGGER.Warn("INDEX_ID is not numeric: " & INDEX_ID.ToString & "- APattern: " & element.Value)
End If
Else
LOGGER.Warn("split.Length <> 2 - APattern: " & element.Value)
End If
Case "V"
Dim elmt = element.Value.Substring(3, element.Value.Length - 4).Split("#")
Dim split() As String = elmt
If split.Length = 2 Then
Dim VARTYPE = split(0)
LOGGER.Debug("VARTYPE is: '" & VARTYPE & "'")
Select Case VARTYPE
Case "ARDoctype"
FolderConvention = FolderConvention.Replace(element.ToString, CURRENT_DOKARTSTRING)
End Select
Else
Dim folder_temp As String
Dim _Month As String = My.Computer.Clock.LocalTime.Month
If _Month.Length = 1 Then
_Month = "0" & _Month
End If
Dim _day As String = My.Computer.Clock.LocalTime.Day
If _day.Length = 1 Then
_day = "0" & _day
End If
Dim type = element.Value.Substring(3, element.Value.Length - 4)
If type.StartsWith("_") Then
type = type.Replace("_", "")
End If
Select Case type
Case "YYYY/MM/DD"
folder_temp = My.Computer.Clock.LocalTime.Year & "\" & _Month & "\" & _day
Case "YYYY/MM"
folder_temp = My.Computer.Clock.LocalTime.Year & "\" & _Month
Case "YYYY"
folder_temp = My.Computer.Clock.LocalTime.Year
Case "YYYY-MM"
folder_temp = My.Computer.Clock.LocalTime.Year & "-" & _Month
End Select
FolderConvention = FolderConvention.Replace(element.ToString, folder_temp)
End If
Case "C"
'Füllen mit Controlwert
Dim elmt = element.Value.Substring(3, element.Value.Length - 4).Split("#")
Dim APattern = element.Value.Substring(3, element.Value.Length - 4)
Dim split() As String = elmt
If split.Length = 2 Then
Dim CONTROL_ID = split(1)
If IsNumeric(CONTROL_ID) Then
Dim CONTROLVALUE = ClassControlValues.Get_Control_Value_for_ID(CONTROL_ID, CURRENT_RECORD_ID)
If IsNothing(CONTROLVALUE) Then
Dim checktype = "SELECT CONTROL_TYPE_ID,SQL_COMMAND_1,CONNECTION_ID_1 FROM TBPMO_CONTROL WHERE SQL_COMMAND_1 is not null and SQL_COMMAND_1 <> '' AND GUID = " & CONTROL_ID
Dim DTtype As DataTable = ClassDatabase.Return_Datatable(checktype)
If DTtype.Rows.Count = 1 Then
Dim lblsql = DTtype.Rows(0).Item(1)
lblsql = lblsql.ToString.ToUpper.Replace("@RECORD_ID", CURRENT_RECORD_ID)
lblsql = lblsql.ToString.ToUpper.Replace("@RECORD-ID", CURRENT_RECORD_ID)
lblsql = lblsql.ToString.ToUpper.Replace("@ENTITY-ID", CURRENT_ENTITY_ID)
lblsql = lblsql.ToString.ToUpper.Replace("@ENTITY_ID", CURRENT_ENTITY_ID)
LOGGER.Debug("variable sql will be used for convention")
Dim result = ClassDatabase.Execute_ScalarWithConnection(DTtype.Rows(0).Item(2), lblsql)
If Not IsNothing(result) Then
FolderConvention = FolderConvention.Replace(element.ToString, result.ToString)
Else
LOGGER.Warn("variable sqlresult is nothing - " & lblsql)
End If
Else
LOGGER.Warn("Variable folder should be filled with value of Control-ID '" & CONTROL_ID & "', but result was nothing.")
LOGGER.Warn("SQL-Command: " & checktype)
End If
Else
If IsDBNull(CONTROLVALUE) Then
LOGGER.Warn("Variable folder should be filled with value of Control-ID '" & CONTROL_ID & "', but result was DBNULL.")
LOGGER.Warn("SQL-Command: " & CURRENT_LAST_SQL)
Else
Dim sql1 = "SELECT * FROM TBPMO_WD_NAMECONVENTION_FORMAT WHERE ID = (SELECT TOP 1 GUID FROM TBPMO_WD_FORMVIEW_DOKTYPES WHERE DOCTYPE_ID = " & DocTypeID & " AND FORMVIEW_ID = " & CURRENT_FORMVIEW_ID & ")"
Dim DT_FORMAT As DataTable = ClassDatabase.Return_Datatable(sql1, True)
If Not IsNothing(DT_FORMAT) Then
If DT_FORMAT.Rows.Count > 0 Then
Dim result
result = (From FormatRow In DT_FORMAT.AsEnumerable
Select FormatRow Where FormatRow.Item("PATTERN") = APattern).Single()
If Not IsNothing(result) Then
Dim _rule = result.Item("FORMAT_RULE")
If Not IsNothing(_rule) Then
If IsDate(CONTROLVALUE) Then
Dim _date As Date = CDate(CONTROLVALUE)
'Dim _date = CDate(Format(CONTROLVALUE, "dd-MM-yyyy"))
_rule = _rule.ToString.Replace("Y", "y")
_rule = _rule.ToString.Replace("D", "d")
_rule = _rule.ToString.Replace("m", "M")
Dim convertedvalue = _date.ToString(_rule, CultureInfo.InvariantCulture)
CONTROLVALUE = convertedvalue
End If
End If
End If
End If
End If
FolderConvention = FolderConvention.Replace(element.ToString, CONTROLVALUE.ToString)
End If
End If
End If
End If
Case "V"
Case Else
LOGGER.Warn(" -Undefined pattern found in folderconvention" & vbNewLine & "Elementname: " & element.Value.ToUpper)
MsgBox("Achtung - in der Namenkonvention wurde ein Element gefunden welches nicht zugeordnet werden kann!" & vbNewLine & "Elementname: " & element.Value.ToUpper, MsgBoxStyle.Exclamation, "Unexpected error in Name generieren:")
End Select
LOGGER.Debug($"FolderConvention so far is: '{FolderConvention}'")
Next
CURRENT_VARIABLE_FOLDER = FolderConvention
Return True
Catch ex As Exception
MsgBox("Unexpected Error in CreateFolderforIndex-Method:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
LOGGER.Warn("Fehler in CrFolderForIndex: " & ex.Message, True)
Return False
End Try
End Function
Public Shared Function Version_Ueberprüfen(Dateiname As String)
Dim extension
Dim _NewFileString
Try
Dim version As Integer = 2
Dim Stammname As String = Path.GetDirectoryName(Dateiname) & "\" & Path.GetFileNameWithoutExtension(Dateiname)
extension = Path.GetExtension(Dateiname)
Dim _neuername As String = Stammname
'Dim MoveFilename As String = DATEINAME.Replace(element.Value, "")
'Überprüfen ob File existiert
If File.Exists(_neuername & extension) = False Then
_NewFileString = _neuername
Else
Do While File.Exists(_neuername & extension)
version = version + 1
_neuername = Stammname & "~" & version
_NewFileString = _neuername
Loop
End If
CURRENT_NEWFILENAME = _NewFileString & extension
Return True
Catch ex As Exception
LOGGER.Warn(" - Error in versioning file - error: " & vbNewLine & ex.Message)
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in versioning file:")
Return False
End Try
End Function
End Class