Rest-API WIKI, Mitarbeiter kopieren Rechte übernehmen

This commit is contained in:
2023-06-28 16:55:54 +02:00
parent 4466dc259e
commit 6ce26b0614
6 changed files with 255 additions and 18 deletions

View File

@@ -87,6 +87,9 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\GrapeCity\ActiveReports 15\Tools\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="ChilkatDotNet47">
<HintPath>\\ylps023046.verag.ost.dmn\D$\Andreas\Programmierung\VB\ADMIN\ADMIN\cNCTSPartnerWorker\bin\Debug\ChilkatDotNet47.dll</HintPath>
</Reference>
<Reference Include="ClosedXML, Version=0.95.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ClosedXML.0.95.4\lib\net46\ClosedXML.dll</HintPath>
</Reference>

View File

@@ -388,18 +388,23 @@ Public Class frmMitarbDetails
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
Dim newMid As Integer = 0
If txtVname.Text = "" And txtNname.Text = "" Then MsgBox("Bitte geben Sie einen Namen ein!") : Exit Sub
getMitarbeiter()
If isUpdate Then
mitarbeiter.mit_id = mid
If UID.updateMitarbeiter(mitarbeiter) Then saveBerechtigungen() : Me.Close()
If UID.updateMitarbeiter(mitarbeiter) Then saveBerechtigungen(newMid) : Me.Close()
Else
If UID.insertMitarbeiter(mitarbeiter) Then saveBerechtigungen() : Me.Close()
If UID.insertMitarbeiter(mitarbeiter, newMid) Then saveBerechtigungen(newMid) : Me.Close()
End If
End Sub
Private Sub saveBerechtigungen()
Private Sub saveBerechtigungen(newMitId As Integer)
If newMitId > 0 Then
mid = newMitId
End If
Dim ber_admin As String = ""
Dim ber_dispo As String = ""
Dim ber_uid As String = ""

View File

@@ -25,6 +25,8 @@ Partial Class usrCntlMitarbeiter
Me.components = New System.ComponentModel.Container()
Me.Button6 = New System.Windows.Forms.Button()
Me.Panel2 = New System.Windows.Forms.Panel()
Me.Button8 = New System.Windows.Forms.Button()
Me.Button7 = New System.Windows.Forms.Button()
Me.Button5 = New System.Windows.Forms.Button()
Me.Button4 = New System.Windows.Forms.Button()
Me.Button3 = New System.Windows.Forms.Button()
@@ -84,6 +86,8 @@ Partial Class usrCntlMitarbeiter
'
'Panel2
'
Me.Panel2.Controls.Add(Me.Button8)
Me.Panel2.Controls.Add(Me.Button7)
Me.Panel2.Controls.Add(Me.Button6)
Me.Panel2.Controls.Add(Me.Button5)
Me.Panel2.Controls.Add(Me.Button4)
@@ -94,6 +98,24 @@ Partial Class usrCntlMitarbeiter
Me.Panel2.Size = New System.Drawing.Size(92, 684)
Me.Panel2.TabIndex = 24
'
'Button8
'
Me.Button8.Location = New System.Drawing.Point(10, 285)
Me.Button8.Name = "Button8"
Me.Button8.Size = New System.Drawing.Size(75, 43)
Me.Button8.TabIndex = 20
Me.Button8.Text = "Upload WIKI"
Me.Button8.UseVisualStyleBackColor = True
'
'Button7
'
Me.Button7.Location = New System.Drawing.Point(10, 236)
Me.Button7.Name = "Button7"
Me.Button7.Size = New System.Drawing.Size(75, 43)
Me.Button7.TabIndex = 19
Me.Button7.Text = "Clipboard WIKI"
Me.Button7.UseVisualStyleBackColor = True
'
'Button5
'
Me.Button5.Image = Global.ADMIN.My.Resources.Resources.del
@@ -369,7 +391,7 @@ Partial Class usrCntlMitarbeiter
'UserKopierenToolStripMenuItem
'
Me.UserKopierenToolStripMenuItem.Name = "UserKopierenToolStripMenuItem"
Me.UserKopierenToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
Me.UserKopierenToolStripMenuItem.Size = New System.Drawing.Size(146, 22)
Me.UserKopierenToolStripMenuItem.Text = "User kopieren"
'
'usrCntlMitarbeiter
@@ -434,4 +456,6 @@ Partial Class usrCntlMitarbeiter
Friend WithEvents dgvVERIMEX As VERAG_PROG_ALLGEMEIN.MyDatagridview
Friend WithEvents ContextMenuStrip1 As ContextMenuStrip
Friend WithEvents UserKopierenToolStripMenuItem As ToolStripMenuItem
Friend WithEvents Button7 As Button
Friend WithEvents Button8 As Button
End Class

View File

@@ -1,7 +1,10 @@
Imports System.ComponentModel
Imports GrapeCity.Viewer.Common.Model
Imports VERAG_PROG_ALLGEMEIN
Imports VERAG_PROG_ALLGEMEIN.TESTJSON
Imports System.Net
Imports System.Text
Imports System.Windows.Controls
Imports VERAG_PROG_ALLGEMEIN.cChilkat_Helper
Public Class usrCntlMitarbeiter
@@ -13,6 +16,7 @@ Public Class usrCntlMitarbeiter
Private Anzahl As Integer
Private locZeilen As Integer = -1
Public mid As Integer = -1
Dim FUNC = New cProgramFunctions
Private Sub uctrlMitarbeiter_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ConnStr = frmMain.ConnStr
@@ -54,7 +58,7 @@ Public Class usrCntlMitarbeiter
Dim sql As String = "SELECT mit_id,mit_username,mit_vname, mit_nname ,mit_niederlassung,mit_abteilung,mit_email,mit_durchwahl,mit_gekuendigt FROM tblMitarbeiter WHERE (mit_firma='" & firma & "' OR (mit_firma='ALL' AND mit_FirmaHaupt='" & firma & "' )) "
Dim sql As String = "SELECT mit_id,mit_username,mit_vname, mit_nname ,mit_niederlassung,mit_abteilung,mit_email,mit_durchwahl,mit_gekuendigt, isnull(mit_foto_DocId,'') as mit_foto_DocId FROM tblMitarbeiter WHERE (mit_firma='" & firma & "' OR (mit_firma='ALL' AND mit_FirmaHaupt='" & firma & "' )) "
If txtSuche.Text <> "" Then
sql &= " AND (mit_username LIKE '%" & txtSuche.Text & "%' OR mit_nname LIKE '%" & txtSuche.Text & "%' OR mit_vname LIKE '%" & txtSuche.Text & "%') "
@@ -223,6 +227,8 @@ Public Class usrCntlMitarbeiter
.Columns(8).Width = 80
.Columns(8).HeaderText = "Gekündigt"
'.Columns(9).Visible = False
End With
End Sub
@@ -466,13 +472,202 @@ Public Class usrCntlMitarbeiter
Me.Cursor = Cursors.WaitCursor
Dim frmMitarbDetails As New frmMitarbDetails()
frmMitarbDetails.mid = id
frmMitarbDetails.Show(Me)
frmMitarbDetails.isUpdate = False
frmMitarbDetails.txtVname.Text = "Kopie von" & frmMitarbDetails.txtVname.Text
frmMitarbDetails.Label1.Text = "Mitarbeiterkopie"
frmMitarbDetails.txtPwd.Text = ""
frmMitarbDetails.txtCSPW.Text = ""
frmMitarbDetails.txtVname.Text = "Kopie von " & frmMitarbDetails.txtVname.Text
frmMitarbDetails.Label48.Text = "00"
Me.Cursor = Cursors.Default
End Sub
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
Try
Me.Cursor = Cursors.WaitCursor
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Dim sqlstr As String = "SELECT '|' + mit_vname + '|' + mit_nname + '|' + isnull(mit_niederlassung,'-') + '|' + isnull(mit_abteilung,'-') + '|' + isnull(mit_email,'-') + '|' + isnull(mit_durchwahl,'-') + '|' + CASE WHEN mit_firma='ALL' THEN mit_firmaHaupt ELSE mit_firma + '|' END as Firma FROM tblMitarbeiter WHERE mit_gekuendigt=0 AND [mit_TESTonly]=0 AND [mit_pseudoUser]=0 And isnull(mit_niederlassung,'')<>'' and isnull(mit_abteilung,'')<>'' and isnull(mit_nname,'') <>'' And isnull(mit_vname,'') <>'' Order by mit_id"
Dim sqlstrpic As String = "SELECT isnull(mit_foto_DocId,0) as MAfoto FROM tblMitarbeiter WHERE mit_gekuendigt=0 AND [mit_TESTonly]=0 AND [mit_pseudoUser]=0 And isnull(mit_niederlassung,'') <>'' and isnull(mit_abteilung,'')<>'' and isnull(mit_nname,'') <>'' And isnull(mit_vname,'') <>'' Order by mit_id"
Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "ADMIN")
Dim dt2 As DataTable = SQL.loadDgvBySql_Param(sqlstrpic, "ADMIN")
dt2.Columns.Add("path", GetType(String))
For Each row As DataRow In dt2.Rows
Dim filename As String
If row.Item("MAfoto") > 0 Then
Dim filePath = New StringBuilder()
Dim file = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(row(0))
Dim filenameFull = New IO.FileInfo(file).Name.ToLower
filePath.Append("|![")
filePath.Append(filenameFull)
filePath.Append("](/mitarbeiterfotos/")
filePath.Append(filenameFull)
filePath.Append(" =150x150)") 'Bildgröße
filename = filePath.ToString
Else
filename = "|-"
End If
row.Item("path") = filename
Next
Dim content = New StringBuilder()
content.Append("|Foto|Name|Nachname|Niederlassung|Abteilung|EMail|Telefonnummer|Firma|" & vbNewLine)
content.Append("|-|-|-|-|-|-|-|-|" & vbNewLine)
For Each row As DataRow In dt.Rows
Dim index = dt.Rows.IndexOf(row)
content.Append(dt2.Rows(index).Item("path"))
content.Append(row(0))
content.Append(vbNewLine)
Next
content.Append("{.interactive-table}")
Dim data As New DataObject()
data.SetData(DataFormats.Text, content)
Clipboard.SetDataObject(data)
Me.Cursor = Cursors.Default
MsgBox("Daten in Zwischenablage gespeichert")
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
Me.Cursor = Cursors.Default
End Try
End Sub
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
Me.Cursor = Cursors.WaitCursor
Dim token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGkiOjEsImdycCI6MSwiaWF0IjoxNjg3OTMzNDU3LCJleHAiOjE3MTk0OTEwNTcsImF1ZCI6InVybjp3aWtpLmpzIiwiaXNzIjoidXJuOndpa2kuanMifQ.ul2loFYVHdco2Ia2LcS4nme4PdgcuU6QKrunucECebX5LhcsSyuEg-lKiP2X3JXW57Ym4oCBjamDd5-5uqbQd9hOQ5CDO6yqK2r8TPNxivK29oAl2wfcHaKOe7QNti0yRlMpomJjc_5qaegeeLjN5w-lYbbqtSz_6y8GkPPr0P3l4coIk5IzngGazj8XLYGGN6y5qT4s8IR0sNhfz0hJAlIeVTeFKl8KFZMpFKvBnOjkL0GYOYjrHzPLSUAhe8hCGVcA7rWsweVjjvOclFDDFwZ0SwOY0TZqvz-LOsZ3V7ucQaT3flAjuHiEhODGJguQRBs67U8lVO2cxbJJyR3FUA"
Dim dgv As New DataGridView
If TabControl1.SelectedIndex = 0 Then
dgv = dgvVERAG
ElseIf TabControl1.SelectedIndex = 1 Then
dgv = dgvATILLA
ElseIf TabControl1.SelectedIndex = 2 Then
dgv = dgvIMEX
ElseIf TabControl1.SelectedIndex = 3 Then
dgv = dgvUNISPED
ElseIf TabControl1.SelectedIndex = 4 Then
dgv = dgvAMBAR
ElseIf TabControl1.SelectedIndex = 5 Then
dgv = dgvFRONTOFFICE
ElseIf TabControl1.SelectedIndex = 5 Then
dgv = dgvVERIMEX
End If
For Each row As DataGridViewRow In dgv.Rows
Dim test As Boolean = False
If row.Cells("mit_foto_DocId").Value > 0 Then
Dim file = VERAG_PROG_ALLGEMEIN.cDATENSERVER.GET_PDFPath_BY_DocID(row.Cells("mit_foto_DocId").Value)
Dim succeess = uploadPictureToWiki(token, 4, file)
test = True
End If
Next
Me.Cursor = Cursors.Default
Try
Catch ex As Exception
Me.Cursor = Cursors.Default
MsgBox(ex.Message & ex.StackTrace)
End Try
End Sub
Private Function uploadPictureToWiki(authenticationToken As String, folderIDx As Integer, image As String) As String
Try
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
Dim API_STRING = "https://wiki.verag.ag"
Dim rest As New Chilkat.Rest
Dim success As Boolean
Dim failureDesc As String
rest.VerboseLogging = True
Dim bTls As Boolean = True
Dim port As Integer = 443
Dim bAutoReconnect As Boolean = True
success = rest.Connect(API_STRING, port, bTls, bAutoReconnect)
If (success <> True) Then
Debug.WriteLine("ConnectFailReason: " & rest.ConnectFailReason)
Debug.WriteLine(rest.LastErrorText)
failureDesc = rest.LastErrorText
Return failureDesc
End If
API_STRING &= "/u"
rest.AddHeader("Authorization", "Bearer " & authenticationToken)
rest.AddHeader("Content-Type", "multipart/form-data")
Dim filename = New IO.FileInfo(image).Name
Dim fileStream As New Chilkat.Stream
fileStream.SourceFile = image
rest.PartSelector = "1"
rest.AddHeader("Content-Disposition", "form-data; name=""mediaUpload""")
rest.AddHeader("Content-Type", "text")
Dim json As New Chilkat.JsonObject
success = json.AddIntAt(-1, "folderId", folderIDx)
Debug.WriteLine(json.Emit())
success = rest.SetMultipartBodyString(json.Emit())
rest.PartSelector = "2"
rest.AddHeader("Content-Disposition", "form-data; name=""mediaUpload""; filename=""" & filename & """")
rest.AddHeader("Content-Type", "image/jpeg")
success = rest.SetMultipartBodyStream(fileStream)
Dim responseBody As String = rest.FullRequestMultipart("POST", API_STRING)
If (rest.LastMethodSuccess <> True) Then
Debug.WriteLine(rest.LastErrorText)
Return rest.LastErrorText
End If
If (rest.ResponseStatusCode <> 200) Then
Debug.WriteLine(rest.ResponseHeader)
Return rest.ResponseStatusCode & " " & rest.ResponseStatusText
Else
Debug.WriteLine("File uploaded")
End If
rest.ClearAllHeaders()
rest.ClearAllParts()
rest.PartSelector = ""
Catch ex As WebException
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End Function
End Class

View File

@@ -1124,7 +1124,7 @@ Public Class cProgramFunctions
End Try
End Sub
Public Function CalendarWeek(ByVal nWeek As Integer, _
Public Function CalendarWeek(ByVal nWeek As Integer,
ByVal nYear As Integer) As Date
' Wochentag des 4. Januar des Jahres ermitteln
@@ -1137,9 +1137,18 @@ Public Class cProgramFunctions
' Gesuchte KW ermitteln
Return dFirst.AddDays((nWeek - 1) * 7)
End Function
Public Function MessageTimeOut(sMessage As String, sTitle As String, iSeconds As Integer) As Boolean
Dim Shell = CreateObject("WScript.Shell")
Shell.Run("mshta.exe vbscript:close(CreateObject(""WScript.shell"").Popup(""" & sMessage & """," & iSeconds & ",""" & sTitle & """))")
MessageTimeOut = True
End Function
End Class
Public Class SQLVariable
Private TextSQLName As String
Private ValueSQLVALUE As Object

View File

@@ -4,7 +4,7 @@ Imports ADMIN.cMeineFunktionen
Imports System.Data.SqlClient
Imports System.Globalization
Imports System.Text.RegularExpressions
Imports GrapeCity.Enterprise.Data.Expressions.Evaluation
Public Class cSqlDb
Public Shared Function GetNewOpenConnection() As SqlConnection
@@ -44,7 +44,7 @@ Public Class sqlConn
' Specify a connection string. Replace the given value with a
' valid connection string for a Northwind SQL Server sample
' database accessible to your system.
Dim connectionString As String = _
Dim connectionString As String =
"Data Source=DEVELOPER\DEVSQL;Initial Catalog=ADMIN;Integrated Security=false;User ID=sa;Password=BmWr501956;"
' Create a new data adapter based on the specified query.
@@ -657,7 +657,7 @@ Public Class cBrgDb
d.brg_at_woche_zolaris = dr.Item("brg_at_woche_zolaris")
d.brg_de_tag_atlas = dr.Item("brg_de_tag_atlas")
d.brg_de_woche_atlas = dr.Item("brg_de_woche_atlas")
d.brg_de2_tag = dr.Item("brg_de2_tag")
d.brg_de2_woche = dr.Item("brg_de2_woche")
d.brg_de2_tag_atlas = dr.Item("brg_de2_tag_atlas")
@@ -1545,12 +1545,12 @@ Public Class cMitarbeiter
End Function
Public Function insertMitarbeiter(ByVal m As VERAG_PROG_ALLGEMEIN.cMitarbeiter) As Boolean
Public Function insertMitarbeiter(ByVal m As VERAG_PROG_ALLGEMEIN.cMitarbeiter, ByRef mid As Integer) As Boolean
Dim hAuswahl As String = ""
'Änderung
Dim sql = "INSERT INTO tblMitarbeiter " &
"(mit_username,mit_abweichenderAnzeigename, mit_pwd, mit_geschlecht, mit_affix, mit_vname, mit_nname, mit_gebdat, mit_strasse,mit_hausnr,mit_land,mit_plz,mit_ort,mit_niederlassung, mit_abteilung, mit_position, mit_durchwahl, mit_email, mit_mobiltel, mit_allowAnruf,mit_info, mit_einstiegsdatum, mit_gekuendigt, mit_kuendigungsdatum, mit_foto,mit_firma,mit_firmaFMZoll,mit_FMZollPersID,mit_FMZollPersIDKasseIsnotSpedBuch,mit_FMZollPersIDSpedBuch,mit_standartFiliale,mit_DpUserStandardDP,mit_EZOLL_SB,mit_ATLAS_SB,mit_FirmenDatenAnzeige,mit_DAKOSY_SB,mit_DAKOSY_SBFull,mit_DpUserStandardFirma,mit_DpUserStandardFirma2,mit_TESTonly,mit_PasswortChanged,mit_TELOTEC_SB,mit_AliasAD_Domain,mit_AliasAD_Username,mit_AliasAD_Domain2,mit_AliasAD_Username2,mit_teamId,mit_ChatBenutzer,mit_FirmaHaupt,mit_ChatEasteregg,mit_MAVerzeichnis_SettingsTstmp,mit_MAVerzeichnis_allowGebDat,mit_MAVerzeichnis_allowWohnadresse,mit_MAVerzeichnis_allowGebDatOhneJahr,mit_MAVerzeichnis_Spitzname,mit_foto_DocId,mit_MAVerzeichnis_Motto,mit_sprache,mit_fakturierungsgruppe, mit_CSuser, mit_CSpwd ) VALUES " &
"(mit_username,mit_abweichenderAnzeigename, mit_pwd, mit_geschlecht, mit_affix, mit_vname, mit_nname, mit_gebdat, mit_strasse,mit_hausnr,mit_land,mit_plz,mit_ort,mit_niederlassung, mit_abteilung, mit_position, mit_durchwahl, mit_email, mit_mobiltel, mit_allowAnruf,mit_info, mit_einstiegsdatum, mit_gekuendigt, mit_kuendigungsdatum, mit_foto,mit_firma,mit_firmaFMZoll,mit_FMZollPersID,mit_FMZollPersIDKasseIsnotSpedBuch,mit_FMZollPersIDSpedBuch,mit_standartFiliale,mit_DpUserStandardDP,mit_EZOLL_SB,mit_ATLAS_SB,mit_FirmenDatenAnzeige,mit_DAKOSY_SB,mit_DAKOSY_SBFull,mit_DpUserStandardFirma,mit_DpUserStandardFirma2,mit_TESTonly,mit_PasswortChanged,mit_TELOTEC_SB,mit_AliasAD_Domain,mit_AliasAD_Username,mit_AliasAD_Domain2,mit_AliasAD_Username2,mit_teamId,mit_ChatBenutzer,mit_FirmaHaupt,mit_ChatEasteregg,mit_MAVerzeichnis_SettingsTstmp,mit_MAVerzeichnis_allowGebDat,mit_MAVerzeichnis_allowWohnadresse,mit_MAVerzeichnis_allowGebDatOhneJahr,mit_MAVerzeichnis_Spitzname,mit_foto_DocId,mit_MAVerzeichnis_Motto,mit_sprache,mit_fakturierungsgruppe, mit_CSuser, mit_CSpwd ) OUTPUT INSERTED.mit_id VALUES " &
"(@mit_username,@mit_abweichenderAnzeigename,@mit_pwd,@mit_geschlecht,@mit_affix,@mit_vname,@mit_nname,@mit_gebdat,@mit_strasse,@mit_hausnr,@mit_land,@mit_plz,@mit_ort,@mit_niederlassung,@mit_abteilung,@mit_position,@mit_durchwahl,@mit_email,@mit_mobiltel,@mit_allowAnruf,@mit_info,@mit_einstiegsdatum,@mit_gekuendigt,@mit_kuendigungsdatum,@mit_foto,@mit_firma,@mit_firmaFMZoll,@mit_FMZollPersID,@mit_FMZollPersIDKasseIsnotSpedBuch,@mit_FMZollPersIDSpedBuch,@mit_standartFiliale,@mit_DpUserStandardDP,@mit_EZOLL_SB,@mit_ATLAS_SB,@mit_FirmenDatenAnzeige,@mit_DAKOSY_SB,@mit_DAKOSY_SBFull,@mit_DpUserStandardFirma,@mit_DpUserStandardFirma2,@mit_TESTonly,@mit_PasswortChanged,@mit_TELOTEC_SB,@mit_AliasAD_Domain,@mit_AliasAD_Username,@mit_AliasAD_Domain2,@mit_AliasAD_Username2,@mit_teamId,@mit_ChatBenutzer,@mit_FirmaHaupt,@mit_ChatEasteregg,@mit_MAVerzeichnis_SettingsTstmp,@mit_MAVerzeichnis_allowGebDat,@mit_MAVerzeichnis_allowWohnadresse,@mit_MAVerzeichnis_allowGebDatOhneJahr,@mit_MAVerzeichnis_Spitzname,@mit_foto_DocId,@mit_MAVerzeichnis_Motto ,@mit_sprache,@mit_fakturierungsgruppe, @mit_CSuser, @mit_CSpwd )"
@@ -1623,10 +1623,11 @@ Public Class cMitarbeiter
cmd.Parameters.AddWithValue("@mit_fakturierungsgruppe", m.mit_fakturierungsgruppe)
cmd.Parameters.AddWithValue("@mit_CSuser", If(m.mit_CSuser, DBNull.Value))
cmd.Parameters.AddWithValue("@mit_CSpwd", If(m.mit_CSpwd, DBNull.Value))
cmd.Parameters.AddWithValue("@mit_id", DBNull.Value)
Try
cmd.ExecuteNonQuery()
mid = cmd.ExecuteScalar()
Return True
Catch ex As SqlException
MsgBox(System.Reflection.MethodInfo.GetCurrentMethod.Name & ": Datensatz kann nicht gespeichert werden!" & vbCrLf & vbCrLf & ex.Message, vbExclamation, "Fehler beim Speichern Data")