MS Logging, Import windream, Hash-wert
This commit is contained in:
@@ -516,7 +516,7 @@ Public Class ClassDOC_SEARCH
|
||||
|
||||
Public Shared Function CREATE_DOC_RELATED_LINKS(DOC_ID As Integer, RECORD_ID As Integer)
|
||||
Try
|
||||
Dim execute = String.Format("EXEC [dbo].[PRPMO_DOC_CREATE_NEW_DOC] {0},{1},'{2}'", DOC_ID, RECORD_ID, USER_USERNAME)
|
||||
Dim execute = String.Format("EXEC PROF_DOC_CREATE_UPDATE {0},{1},'{2}','{3}'", DOC_ID, RECORD_ID, USER_USERNAME, CURRENT_FILE_HASH)
|
||||
If MYDB_ECM.ExecuteNonQuery(execute) = True Then
|
||||
Return True
|
||||
Else
|
||||
|
||||
@@ -8,7 +8,7 @@ Public Class ClassDragDrop
|
||||
LOGGER.Debug("In Drop_File....")
|
||||
files_dropped = Nothing
|
||||
|
||||
Dim sql As String = "DELETE FROM TBPMO_FILES_USER WHERE HANDLE_TYPE <> 'SCAN' AND USER_WORK = '" & USER_USERNAME & "'"
|
||||
Dim Sql As String = "DELETE FROM TBPMO_FILES_USER WHERE HANDLE_TYPE <> 'SCAN' AND USER_WORK = '" & USER_USERNAME & "'"
|
||||
MYDB_ECM.ExecuteNonQuery(sql)
|
||||
|
||||
|
||||
|
||||
@@ -87,7 +87,9 @@ Public Class ClassFolderWatcher
|
||||
'Die Datei übergeben
|
||||
LOGGER.Debug("OnCreated-File:" & e.FullPath)
|
||||
If FileExistsinDropTable(CURRENT_FILENAME) = False Then
|
||||
ClassHelper.Insert_USER_File(e.FullPath, handleType)
|
||||
If ClassHelper.Insert_USER_File(e.FullPath, handleType) = False Then
|
||||
Exit Sub
|
||||
End If
|
||||
Else
|
||||
Console.WriteLine("File existiert bereits")
|
||||
End If
|
||||
|
||||
@@ -446,13 +446,42 @@ Public Class ClassHelper
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
Public Shared Function Insert_USER_File(filename As String, handleType As String)
|
||||
Public Shared Function Insert_USER_File(pFilename As String, handleType As String)
|
||||
Try
|
||||
Dim filename_only As String = Path.GetFileName(filename)
|
||||
Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK,HANDLE_TYPE,FILENAME_ONLY) VALUES ('{0}','{1}','{2}','{3}')", filename, USER_USERNAME, handleType, filename_only)
|
||||
Dim filename_only As String = Path.GetFileName(pFilename)
|
||||
CURRENT_FILE_HASH = ""
|
||||
|
||||
If File.Exists(pFilename) Then
|
||||
If (pFilename.ToUpper.EndsWith(".MSG") Or pFilename.ToUpper.EndsWith(".EML")) And (handleType = "|OUTLOOK_MESSAGE|" Or handleType = "|MSGONLY|") Then
|
||||
CURRENT_FILE_HASH = FILESYSTEM.GetChecksumFromString(pFilename)
|
||||
Else
|
||||
CURRENT_FILE_HASH = FILESYSTEM.GetChecksum(pFilename)
|
||||
End If
|
||||
End If
|
||||
Dim oSQL = $"SELECT ADDED_WHO, FORMAT(ADDED_WHEN, 'dd-MM-yyyy HH:mm') AS ADDED_WHEN_STRING FROM TBPMO_DOCRESULT_LIST WHERE FILE_HASH = '{CURRENT_FILE_HASH}' ORDER BY ADDED_WHEN DESC"
|
||||
LOGGER.Debug($"Inserting File - hash is [{CURRENT_FILE_HASH}]")
|
||||
Dim oDTCHECK As DataTable = MYDB_ECM.GetDatatable(oSQL)
|
||||
If Not IsNothing(oDTCHECK) Then
|
||||
If oDTCHECK.Rows.Count >= 1 Then
|
||||
LOGGER.Info($"We got a file with the same hash [{CURRENT_FILE_HASH}]")
|
||||
Dim oUSER = oDTCHECK.Rows(0).Item(0)
|
||||
Dim oADDED_WHEN = oDTCHECK.Rows(0).Item(1)
|
||||
Dim oMSG = $"Achtung:" & vbNewLine & "Die Datei wurde bereits nach orgFLOW importiert. Anzahl: " & oDTCHECK.Rows.Count.ToString & vbNewLine &
|
||||
$"Importiert wann: {oADDED_WHEN}" & vbNewLine &
|
||||
$"Importiert wer: {oUSER}" & vbNewLine &
|
||||
"Wollen Sie die Datei dennoch importieren?"
|
||||
Dim result As MsgBoxResult
|
||||
result = MessageBox.Show(oMSG, CAPTION_CONFIRMATION, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
||||
If result = MsgBoxResult.No Then
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
|
||||
Dim ins As String = String.Format("INSERT INTO TBPMO_FILES_USER (FILENAME2WORK, USER_WORK,HANDLE_TYPE,FILENAME_ONLY) VALUES ('{0}','{1}','{2}','{3}')", pFilename, USER_USERNAME, handleType, filename_only)
|
||||
Return MYDB_ECM.ExecuteNonQuery(ins)
|
||||
Catch ex As Exception
|
||||
MsgBox("Unexpected Error in Insert Scan-File: " & ex.Message, MsgBoxStyle.Critical)
|
||||
MsgBox("Unexpected Error in Insert file for user (TBPMO_FILES_USER): " & ex.Message, MsgBoxStyle.Critical)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
|
||||
@@ -103,8 +103,10 @@ Public Class ClassImport_Windream
|
||||
End Function
|
||||
|
||||
Public Shared Function Name_Generieren(DocTypeID As Integer)
|
||||
|
||||
Dim myLogger As New DigitalData.Modules.Logging.Logger
|
||||
Try
|
||||
|
||||
myLogger = LOGCONFIG.GetLogger()
|
||||
Dim FILE_DELIMITER, VERSION_DELIMITER, _WDOBJECTTYPE, _NewFileString As String
|
||||
Dim sql As String = "select VERSION_DELIMITER, FILE_DELIMITER FROM TBDD_MODULES where NAME = 'Global-Indexer'"
|
||||
Dim DT1 As DataTable = MYDB_ECM.GetDatatable(sql)
|
||||
@@ -124,6 +126,7 @@ Public Class ClassImport_Windream
|
||||
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}"
|
||||
myLogger.Debug(sql)
|
||||
Dim oDTFW_DOCTYPES As DataTable = MYDB_ECM.GetDatatable(sql)
|
||||
Dim oDYNAMIC_FOLDER = oDTFW_DOCTYPES.Rows(0).Item("DYNAMIC_FOLDER")
|
||||
Dim oNAME_CONVENTION = oDTFW_DOCTYPES.Rows(0).Item("NAME_CONVENTION")
|
||||
@@ -144,8 +147,8 @@ Public Class ClassImport_Windream
|
||||
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)
|
||||
myLogger.Debug("After CREATE_FOLDER_INDEX - oWMTARGET_FOLDER: " & oWMTARGET_FOLDER)
|
||||
myLogger.Debug("After CREATE_FOLDER_INDEX - CURRENT_VARIABLE_FOLDER: " & CURRENT_VARIABLE_FOLDER)
|
||||
|
||||
If oWMTARGET_FOLDER <> CURRENT_VARIABLE_FOLDER Then
|
||||
If CURRENT_VARIABLE_FOLDER.StartsWith("\") Then
|
||||
@@ -165,8 +168,8 @@ Public Class ClassImport_Windream
|
||||
End If
|
||||
End If
|
||||
|
||||
LOGGER.Debug("oWMTARGET_FOLDER: " & oWMTARGET_FOLDER)
|
||||
LOGGER.Debug("CURRENT_SUBFOLDER: " & CURRENT_SUBFOLDER)
|
||||
myLogger.Debug("oWMTARGET_FOLDER: " & oWMTARGET_FOLDER)
|
||||
myLogger.Debug("CURRENT_SUBFOLDER: " & CURRENT_SUBFOLDER)
|
||||
|
||||
|
||||
'Untsserordner ja oder nein
|
||||
@@ -174,7 +177,7 @@ Public Class ClassImport_Windream
|
||||
oWMTARGET_FOLDER = oWMTARGET_FOLDER & "\" & CURRENT_SUBFOLDER
|
||||
End If
|
||||
If oWMTARGET_FOLDER.Contains("/") Then
|
||||
LOGGER.Info(String.Format("Targetpath contains /-sign. / will be replaced with _"))
|
||||
myLogger.Info(String.Format("Targetpath contains /-sign. / will be replaced with _"))
|
||||
oWMTARGET_FOLDER = oWMTARGET_FOLDER.Replace("/", "_")
|
||||
End If
|
||||
|
||||
@@ -183,17 +186,17 @@ Public Class ClassImport_Windream
|
||||
If WMMOD.TestFolderExists(oWMTARGET_FOLDER) = False Then
|
||||
oWMTARGET_FOLDER = oWMTARGET_FOLDER.Replace("W:", "\\windream\objects")
|
||||
oWMTARGET_FOLDER = WMMOD.GetNormalizedPath(oWMTARGET_FOLDER, 0)
|
||||
LOGGER.Info(String.Format("Targetpath ({0}) is not existing or result of WD_PATH_EXISTS was false.", oWMTARGET_FOLDER.Substring(2)))
|
||||
myLogger.Info(String.Format("Targetpath ({0}) is not existing or result of WD_PATH_EXISTS was false.", oWMTARGET_FOLDER.Substring(2)))
|
||||
|
||||
If WMMOD.NewFolder(oWMTARGET_FOLDER) = False Then
|
||||
LOGGER.Warn(String.Format("Could not create folder-part: {0} - Complete path is: ({1})", oWMTARGET_FOLDER, oWMTARGET_FOLDER.Substring(2)))
|
||||
myLogger.Warn(String.Format("Could not create folder-part: {0} - Complete path is: ({1})", oWMTARGET_FOLDER, oWMTARGET_FOLDER.Substring(2)))
|
||||
Return False
|
||||
End If
|
||||
End If
|
||||
|
||||
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))
|
||||
myLogger.Warn(String.Format("Could not create folder ({0}): " & ex.Message, oWMTARGET_FOLDER))
|
||||
Return False
|
||||
End If
|
||||
End Try
|
||||
@@ -202,15 +205,15 @@ Public Class ClassImport_Windream
|
||||
Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}"
|
||||
'Namenkonvention laden
|
||||
If IsDBNull(oNAME_CONVENTION) Then
|
||||
LOGGER.Warn("Achtung: Namenskonvention is DBNull")
|
||||
myLogger.Warn("Achtung: Namenskonvention is DBNull")
|
||||
oNAME_CONVENTION = Path.GetFileNameWithoutExtension(CURRENT_FILENAME)
|
||||
ElseIf oNAME_CONVENTION = String.Empty Then
|
||||
LOGGER.Warn("Achtung: Namenskonvention is String empty")
|
||||
myLogger.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)
|
||||
myLogger.Debug("oNewWM_Filename: " & oNewWM_Filename)
|
||||
|
||||
' einen Regulären Ausdruck laden
|
||||
Dim regulärerAusdruck As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(preg)
|
||||
@@ -220,7 +223,7 @@ Public Class ClassImport_Windream
|
||||
' alle Vorkommen innerhalbd er Namenkonvention durchlaufen
|
||||
For Each element As System.Text.RegularExpressions.Match In elemente
|
||||
|
||||
LOGGER.Debug("element in RegeX: " & element.Value)
|
||||
myLogger.Debug("element in RegeX: " & element.Value)
|
||||
Dim oSubstring = element.Value.Substring(2, 1).ToUpper
|
||||
'%CTRL
|
||||
Dim oSubstr = element.Value.Substring(2, 4)
|
||||
@@ -247,7 +250,7 @@ Public Class ClassImport_Windream
|
||||
If IsNumeric(INDEX_ID) Then
|
||||
Dim sql_AUTOindexresult = MYDB_ECM.GetScalarValue("SELECT SQL_RESULT FROM TBDD_INDEX_AUTOM WHERE GUID = " & INDEX_ID)
|
||||
If IsNothing(sql_AUTOindexresult) Then
|
||||
LOGGER.Debug("unexpected: sql_AUTOindexresult is nothing!!")
|
||||
myLogger.Debug("unexpected: sql_AUTOindexresult is nothing!!")
|
||||
oPatternvalue = ""
|
||||
Else
|
||||
If IsDBNull(sql_AUTOindexresult) Then
|
||||
@@ -256,8 +259,8 @@ Public Class ClassImport_Windream
|
||||
sql_AUTOindexresult = sql_AUTOindexresult.ToString.ToUpper.Replace("@RECORD-ID", CURRENT_RECORD_ID)
|
||||
Dim AUTOindexresult = MYDB_ECM.GetScalarValue(sql_AUTOindexresult)
|
||||
If IsNothing(AUTOindexresult) Then
|
||||
LOGGER.Warn("ATTENTION: unexpected: AUTOindexresult is nothing!!")
|
||||
LOGGER.Warn("" & sql_AUTOindexresult)
|
||||
myLogger.Warn("ATTENTION: unexpected: AUTOindexresult is nothing!!")
|
||||
myLogger.Warn("" & sql_AUTOindexresult)
|
||||
oPatternvalue = ""
|
||||
Else
|
||||
If IsDBNull(AUTOindexresult) Then
|
||||
@@ -270,16 +273,16 @@ Public Class ClassImport_Windream
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
LOGGER.Warn("INDEX_ID is not numeric: " & INDEX_ID.ToString & "- APattern: " & APattern)
|
||||
myLogger.Warn("INDEX_ID is not numeric: " & INDEX_ID.ToString & "- APattern: " & APattern)
|
||||
oPatternvalue = ""
|
||||
End If
|
||||
Else
|
||||
LOGGER.Warn("split.Length <> 2 - APattern: " & APattern)
|
||||
myLogger.Warn("split.Length <> 2 - APattern: " & APattern)
|
||||
oPatternvalue = ""
|
||||
End If
|
||||
|
||||
ElseIf APattern.Contains("#") Then
|
||||
LOGGER.Debug("element [" & APattern & "] filled with Record-Data...: ")
|
||||
myLogger.Debug("element [" & APattern & "] filled with Record-Data...: ")
|
||||
|
||||
Dim split() As String = APattern.Split("#")
|
||||
If split.Length = 2 Then
|
||||
@@ -294,7 +297,7 @@ Public Class ClassImport_Windream
|
||||
If oPatternvalue <> String.Empty Then
|
||||
oNewWM_Filename = oNewWM_Filename.Replace(element.Value, oPatternvalue)
|
||||
_NewFileString = oNewWM_Filename
|
||||
LOGGER.Debug("Actual NEWFILESTRING: " & _NewFileString)
|
||||
myLogger.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 & "'"
|
||||
@@ -357,7 +360,7 @@ Public Class ClassImport_Windream
|
||||
Case Else
|
||||
If element.Value.Substring(2, 4).ToUpper = "CTRL" Then
|
||||
Dim APattern = element.Value.Substring(3, element.Value.Length - 4)
|
||||
LOGGER.Debug("element [" & element.Value & "] with Control-Data...: ")
|
||||
myLogger.Debug("element [" & element.Value & "] with Control-Data...: ")
|
||||
Dim split() As String = APattern.Split("#")
|
||||
If split.Length = 2 Then
|
||||
Dim CONTROL_ID = split(1)
|
||||
@@ -370,7 +373,7 @@ Public Class ClassImport_Windream
|
||||
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)
|
||||
myLogger.Warn(msg)
|
||||
MsgBox(msg, MsgBoxStyle.Exclamation, "Error in Name Convention:")
|
||||
End If
|
||||
|
||||
@@ -383,13 +386,13 @@ Public Class ClassImport_Windream
|
||||
'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 _"))
|
||||
myLogger.Info(String.Format("DATEINAME contains /-sign. / will be replaced with _"))
|
||||
oNewWM_Filename = oNewWM_Filename.Replace("/", "_")
|
||||
End If
|
||||
oNewWM_Filename = oNewWM_Filename.Replace("\\", "\")
|
||||
|
||||
Catch ex As Exception
|
||||
LOGGER.Warn(" - Error in Versioning file - Error: " & vbNewLine & ex.Message)
|
||||
myLogger.Warn(" - Error in Versioning file - Error: " & vbNewLine & ex.Message)
|
||||
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in Versioning file:")
|
||||
err = True
|
||||
End Try
|
||||
@@ -410,7 +413,7 @@ Public Class ClassImport_Windream
|
||||
End If
|
||||
|
||||
Catch ex As Exception
|
||||
LOGGER.Warn(" - Unexpected Error in FileName-Creating: " & vbNewLine & ex.Message)
|
||||
myLogger.Warn(" - Unexpected Error in FileName-Creating: " & vbNewLine & ex.Message)
|
||||
MsgBox(" - Unexpected Error in FileName-Creating: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||||
Return False
|
||||
End Try
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
Imports System.IO
|
||||
Imports DigitalData.Modules.Base
|
||||
Imports DigitalData.Modules.Config
|
||||
Imports DigitalData.Modules.Database
|
||||
Imports DigitalData.Modules.Logging
|
||||
@@ -221,13 +222,13 @@ Public Class ClassInit
|
||||
|
||||
oSql = "SELECT * FROM TBPMO_CONTROL"
|
||||
CURRENT_TBPMO_CONTROL = MYDB_ECM.GetDatatable(oSql)
|
||||
oSql = String.Format("SELECT * FROM TBPMO_DOCSEARCH_RESULTLIST_CONFIG WHERE VISIBLE = 1")
|
||||
oSql = "SELECT * FROM TBPMO_DOCSEARCH_RESULTLIST_CONFIG WHERE VISIBLE = 1"
|
||||
DT_DOCSEARCH_RESULTLIST_CONFIG = MYDB_ECM.GetDatatable(oSql)
|
||||
oSql = String.Format("SELECT * FROM TBPMO_DOCSEARCH_VARIABLE_CONTROLS")
|
||||
oSql = "SELECT * FROM TBPMO_DOCSEARCH_VARIABLE_CONTROLS"
|
||||
CURRENT_VARIABLE_CONTROLS = MYDB_ECM.GetDatatable(oSql)
|
||||
oSql = String.Format("SELECT * FROM TBPMO_FORM_VIEW")
|
||||
oSql = "SELECT * FROM TBPMO_FORM_VIEW"
|
||||
CURRENT_TBPMO_FORM_VIEW = MYDB_ECM.GetDatatable(oSql)
|
||||
oSql = String.Format("select T.*, T1.HEADER_CAPTION,T1.TYPE_ID ,T1.ENTITY_ID,T1.LANGUAGE from TBPMO_DOCRESULT_DROPDOWN_ITEMS T, TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WHERE T.CONFIG_ID = T1.GUID")
|
||||
oSql = "select T.*, T1.HEADER_CAPTION,T1.TYPE_ID ,T1.ENTITY_ID,T1.LANGUAGE from TBPMO_DOCRESULT_DROPDOWN_ITEMS T, TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WHERE T.CONFIG_ID = T1.GUID"
|
||||
CURRENT_TBPMO_DOCRESULT_DROPDOWN_ITEMS = MYDB_ECM.GetDatatable(oSql)
|
||||
'clsCURRENT.LOG_ERRORS_ONLY = DEBUG
|
||||
|
||||
@@ -245,6 +246,8 @@ Public Class ClassInit
|
||||
End If
|
||||
MYGDPICTURE_LICENSE_KEY = MYDB_ECM.GetGDPictureString()
|
||||
|
||||
FILESYSTEM = New FilesystemEx(LOGCONFIG)
|
||||
|
||||
|
||||
Catch ex As Exception
|
||||
LOGGER.Error(ex)
|
||||
|
||||
@@ -86,9 +86,9 @@ Public Class ClassWDRights
|
||||
|
||||
If Not IsNothing(oSession) Then
|
||||
LOGGER.Debug("Session created.")
|
||||
Dim oSql = String.Format("SELECT * FROM [dbo].[FNPMO_GET_RIGHTS_FOR_DOC] ({0},{1}) where USER_OR_GROUP = 'USER'", doc_id, CURRENT_ENTITY_ID)
|
||||
Dim oSql = String.Format("SELECT * FROM [dbo].[FNOF_GET_RIGHTS_FOR_DOC] ({0}) where USER_OR_GROUP = 'USER'", doc_id)
|
||||
DT_USER_RIGHT = MYDB_ECM.GetDatatable(oSql)
|
||||
oSql = String.Format("SELECT * FROM [dbo].[FNPMO_GET_RIGHTS_FOR_DOC] ({0},{1}) where USER_OR_GROUP = 'GROUP'", doc_id, CURRENT_ENTITY_ID)
|
||||
oSql = String.Format("SELECT * FROM [dbo].[FNOF_GET_RIGHTS_FOR_DOC] ({0}) where USER_OR_GROUP = 'GROUP'", doc_id)
|
||||
DT_GROUP_RIGHT = MYDB_ECM.GetDatatable(oSql)
|
||||
If IsNothing(DT_USER_RIGHT) Then
|
||||
Dim msg = "Error while receiving rights for DocID"
|
||||
|
||||
Reference in New Issue
Block a user