From e09488a06b470cb6b12600036846bac84b8ab4be Mon Sep 17 00:00:00 2001 From: Digital Data - Marlon Schreiber Date: Wed, 8 Nov 2017 15:02:30 +0100 Subject: [PATCH] MS --- .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 6 + .vs/slnx.sqlite | Bin 19456 -> 278528 bytes app/ZSG_Import/CURRENT.vb | 3 + app/ZSG_Import/ClassEncryption.vb | 68 ++++ app/ZSG_Import/ClassWDRights.vb | 252 ++++++++++++++ app/ZSG_Import/MyService.vb | 309 +++++++++++++++--- app/ZSG_Import/ZSG_Import.vbproj | 13 + app/ZSG_Import/clsLogger.vb | 12 +- app/ZSG_Import/clsWindream.vb | 526 ++++++++++++++++++------------ 10 files changed, 938 insertions(+), 254 deletions(-) create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 app/ZSG_Import/ClassEncryption.vb create mode 100644 app/ZSG_Import/ClassWDRights.vb diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/VSWorkspaceState.json b/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..6b61141 --- /dev/null +++ b/.vs/VSWorkspaceState.json @@ -0,0 +1,6 @@ +{ + "ExpandedNodes": [ + "" + ], + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite index 5800bc2d3cd1dbd8d01240bcb3c3d30ebbb55779..306167fa3fd430a9893c0fbee2d264b5bc0c6160 100644 GIT binary patch literal 278528 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 D(OV35 delta 672 zcma)2&ubGw6n-yncPG0$+iVish!xznNU1iBby0h;v_b1dFA|XI$tbG^nikR}P){kO z591r~%L73tBVpcg%QDYQilMOt!D56;vU;?05g%{Mde$2VWCmaIL);llN6 zr7-aB%~i_9(DOk9M40qE0B~faWgITPJnZ*6klnO&d8N~qdPvhRYSRz;PFu}~yi5b~ zF2yCdwghfTh%*UHQ|*wpfwr4{?pNyXK@A2og}V=ea`8q`nJ>-Fj*j>vqkr@Efc9kG zH|n;Kdd)%*hNap2svXh}P&0XElf=$McMLR{_LB@%cED4LYfuF`7u$$cB&mohzpa6; zv1ax66XJv>#BSkxG*K6QZrg}6wm8PbOZE;8aWlSR4(KeC&EnF6Xva^Y5hXdMMb3N^ zU3G9mX#9AzV&k#sbr&YYbL*6$lpRXxsK-7a8}QAmKhqt#&}q~ zGZS1X%>;#o`7kJ7E{4T_Pf6AMX!Od&T{S`ZW<-XKpRIjm&;n>lJ2vQ%>#R*1=+YlN C0+K8M diff --git a/app/ZSG_Import/CURRENT.vb b/app/ZSG_Import/CURRENT.vb index 5902eff..6d10704 100644 --- a/app/ZSG_Import/CURRENT.vb +++ b/app/ZSG_Import/CURRENT.vb @@ -1,4 +1,7 @@ Module CURRENT Public LOG_ERRORS_ONLY As Boolean = True Public CURRENT_FILEIN_WD As String + Public CURRENT_IMPORT_ID As Integer + Public CURRENT_DOC_ID As Integer + Public AD_DOMAIN, AD_USER, AD_SERVER, AD_USER_PW As String End Module diff --git a/app/ZSG_Import/ClassEncryption.vb b/app/ZSG_Import/ClassEncryption.vb new file mode 100644 index 0000000..b0bfa39 --- /dev/null +++ b/app/ZSG_Import/ClassEncryption.vb @@ -0,0 +1,68 @@ +Imports System.Security.Cryptography +Public Class ClassEncryption + Private TripleDes As New TripleDESCryptoServiceProvider + Sub New(ByVal key As String) + ' Initialize the crypto provider. + TripleDes.Key = TruncateHash(key, TripleDes.KeySize \ 8) + TripleDes.IV = TruncateHash("", TripleDes.BlockSize \ 8) + End Sub + + Private Function TruncateHash( + ByVal key As String, + ByVal length As Integer) As Byte() + + Dim sha1 As New SHA1CryptoServiceProvider + + ' Hash the key. + Dim keyBytes() As Byte = + System.Text.Encoding.Unicode.GetBytes(key) + Dim hash() As Byte = sha1.ComputeHash(keyBytes) + + ' Truncate or pad the hash. + ReDim Preserve hash(length - 1) + Return hash + End Function + Public Function EncryptData( + ByVal plaintext As String) As String + + ' Convert the plaintext string to a byte array. + Dim plaintextBytes() As Byte = + System.Text.Encoding.Unicode.GetBytes("!Didalog35452Heuchelheim=" & plaintext) + + ' Create the stream. + Dim ms As New System.IO.MemoryStream + ' Create the encoder to write to the stream. + Dim encStream As New CryptoStream(ms, + TripleDes.CreateEncryptor(), + System.Security.Cryptography.CryptoStreamMode.Write) + + ' Use the crypto stream to write the byte array to the stream. + encStream.Write(plaintextBytes, 0, plaintextBytes.Length) + encStream.FlushFinalBlock() + + ' Convert the encrypted stream to a printable string. + Return Convert.ToBase64String(ms.ToArray) + End Function + 'Entschlüsselt die Zeichenfolge + Public Function DecryptData( + ByVal encryptedtext As String) As String + + ' Convert the encrypted text string to a byte array. + Dim encryptedBytes() As Byte = Convert.FromBase64String(encryptedtext) + + ' Create the stream. + Dim ms As New System.IO.MemoryStream + ' Create the decoder to write to the stream. + Dim decStream As New CryptoStream(ms, + TripleDes.CreateDecryptor(), + System.Security.Cryptography.CryptoStreamMode.Write) + + ' Use the crypto stream to write the byte array to the stream. + decStream.Write(encryptedBytes, 0, encryptedBytes.Length) + decStream.FlushFinalBlock() + Dim result = System.Text.Encoding.Unicode.GetString(ms.ToArray) + result = result.Replace("!Didalog35452Heuchelheim=", "") + ' Convert the plaintext stream to a string. + Return result + End Function +End Class diff --git a/app/ZSG_Import/ClassWDRights.vb b/app/ZSG_Import/ClassWDRights.vb new file mode 100644 index 0000000..e300760 --- /dev/null +++ b/app/ZSG_Import/ClassWDRights.vb @@ -0,0 +1,252 @@ +Imports WINDREAMLib +Imports DD_LIB_Standards +Public Class ClassWDRights +#Region "+++++ Konstanten +++++" + Const REL_Document_AccessRight = "AccessRight" + Const COL_AccessRight_AccessRightID = "dwAccessRightID" + Const COL_AccessRight_AccessRight = "dwAccessRight" + Const REL_AccessRight_UserOrGroup = "AccessRightUserOrGroup" + + + Const WMAccessRightUndefined = 0 + Const WMAccessRightRead = 1 + Const WMAccessRightWrite = 2 + Const WMAccessRightReadWrite = 3 + Const WMAccessRightAdmin = 4 + Const WMAccessRightAllRights = 7 ' doc+folder: read, write and admin access + + Const WMUserTypeMain = 1 + Const WMUserTypeNormal = 4 + Const WMUserTypeInactive = 8 + + Const WMGroupTypeAdmin = 2 + + Const WMEntityGroups = 13 + Const WMEntityUser = 18 + Const WMGroupTypeAll = 127 + +#End Region +#Region "+++++ Variables +++++" + Public Shared AD_DOMAIN As String + Public Shared AD_USER As String + Public Shared AD_USER_PW As String + Public Shared AD_SERVER As String + Public Shared WD_RIGHT_ADMIN As Integer + Public Shared MSG_RESULT = "" +#End Region + Public Shared Function Init() + Try + MSG_RESULT = "" + Dim DT_KONFIG As DataTable = clsDatabase.Return_Datatable("SELECT * FROM TBPMO_SERVICE_RIGHT_CONFIG WHERE GUID = 1") + AD_DOMAIN = DT_KONFIG.Rows(0).Item("AD_DOMAIN") + AD_USER = DT_KONFIG.Rows(0).Item("AD_USER") + WD_RIGHT_ADMIN = DT_KONFIG.Rows(0).Item("WD_RIGHT") + AD_SERVER = DT_KONFIG.Rows(0).Item("AD_SERVER") + + + Dim PWplainText As String + Dim wrapper As New ClassEncryption("!35452didalog=") + ' DecryptData throws if the wrong password is used. + Try + PWplainText = wrapper.DecryptData(DT_KONFIG.Rows(0).Item("AD_USER_PW")) + Catch ex As Exception + clsLogger.Add("The Userpassword could not be decrypted", False) + PWplainText = "" + End Try + AD_USER_PW = PWplainText + + Return True + Catch ex As Exception + clsLogger.Add("Unexpected Error in ClassRights Init: " & vbNewLine & ex.Message, True) + + Return False + End Try + End Function + '''Renews all rights of the passed doc-file + ''' + ''' Returns Boolean True when successfull + ''' + Public Shared Function Doc_Renew_Rights() As Boolean + Try + + Dim DT_USER_RIGHT As DataTable + + Dim UserGroupRelation + Dim UserOrGroup + Dim oUSer + + + Dim sql = String.Format("SELECT * FROM [dbo].[FNPMO_GET_RIGHTS_FOR_DOC] ({0})", CURRENT_DOC_ID) + DT_USER_RIGHT = clsDatabase.Return_Datatable(sql) + If IsNothing(DT_USER_RIGHT) Then + Dim msg = "Error while receiving rights for DocID" + clsLogger.Add(msg, True) + + Return False + End If + + Dim lret + Try + ' Objekt muss zur Rechteänderung gelockt werden + lret = clsWindream.aktWMObject.LockRights() + Catch ex As Exception + Dim msg = "Error while locking file" & ex.Message + clsLogger.Add(msg, True) + + Return False + End Try + + If CBool(lret) = False Then + Dim msg = "Error in setting lock .LockRights - Err.Number: " & Err.Number & vbCrLf & Err.Description + clsLogger.Add(msg, True) + + Return False + End If + + ' Rechteträger-Liste holen + Dim AccessRights + AccessRights = clsWindream.aktWMObject.GetWMObjectRelationByName(REL_Document_AccessRight) + 'Bei Fehler in Rechteauswertung + If Err.Number <> 0 Then + Dim msg = "Error in setting REL_Document_AccessRight - Err.Number: " & Err.Number & vbCrLf & Err.Description + clsLogger.Add(msg, True) + + Return False + End If + '############################# Rechte löschen ################################################################################ + '############################################################################################################################# + + 'Erst einmal alle anderen Rechte löschen + Dim i As Integer = 1 + ' und nun jeden Rechteträger verarbeiten + For Each aRightRelation In AccessRights + + ' Auflistung der Rechteträger-Informationen holen + UserGroupRelation = aRightRelation.GetWMObjectRelationByName(REL_AccessRight_UserOrGroup) + If Err.Number <> 0 Then + Dim msg = "Error in setting REL_AccessRight_UserOrGroup - Err.Number: " & Err.Number & vbCrLf & Err.Description + clsLogger.Add(msg, True) + + Return False + End If + + ' Zugriff auf das Benutzer/Gruppen-Objekt + UserOrGroup = UserGroupRelation.item(0) + Dim _msg As String + + If (UserOrGroup.aWMEntity = WMEntityGroups) Then + _msg = "Right for Group '" & UserOrGroup.aName & "'""" + Else + _msg = "Right for User: '" & UserOrGroup.aName & "'""" + End If + + If Err.Number <> 0 Then + Dim msg = "Error in setting UserGroupRelation - Err.Number: " & Err.Number & vbCrLf & Err.Description + clsLogger.Add(msg, True) + + Return False + End If + + 'einem Rechteträger ALLE Rechte zu entziehen + 'entfernt ihn gleichzeitig aus der Auflistung der Rechteträger + Try + AccessRights.Delete2(UserOrGroup, WMAccessRightAllRights) + Catch ex As Exception + Dim msg = "Error in AccessRights.Delete2: " & ex.Message + clsLogger.Add(msg, True) + Continue For + End Try + i += 1 + _msg = _msg.Replace("'", "") + + Next + + + Err.Clear() + ' Wenn ALLE Rechteträger entfernt werden (FOR EACH), + ' dann muss mindestens EIN Rechteträger mit dem Recht zur Rechteänderung + ' wieder zugefügt werden!!!!! Dies ist der ADDI-Right User! + 'Für jeden User das Recht einzeln hinzufügen + For Each User_Row As DataRow In DT_USER_RIGHT.Rows + Dim fileright 'Recht als Integer + Dim StringUserRight + Try + StringUserRight = AD_DOMAIN & "\" & User_Row.Item("USR_NAME") + fileright = User_Row.Item("USR_RIGHT") + + Try + ' User holen + oUSer = clsWindream.oSession.GetWMObjectByName(WMEntityUser, StringUserRight) + + Catch ex As Exception + Dim msg = String.Format(">> Could not create windream-Usersession for user '{0}' - check whether user is part of windream-group!", StringUserRight) + clsLogger.Add(msg, False) + + MSG_RESULT &= msg & vbNewLine + Continue For + End Try + If Not IsNothing(oUSer) Then + Try + AccessRights.Insert2(oUSer, fileright) 'WMAccessRightAllRights) + + Catch ex As Exception + Dim msg = String.Format(">> Could not set right for user {0} - AccessRights.Insert2: {1}", StringUserRight, ex.Message) + clsLogger.Add(msg, True) + + Continue For + End Try + End If + + Catch ex As Exception + Dim _right + Select Case fileright + Case WMAccessRightRead + _right = "READ" + Case WMAccessRightWrite + _right = "WRITE" + Case WMAccessRightAdmin + _right = "ADMIN" + Case WMAccessRightAllRights + _right = "ALL RIGHTS" + Case WMAccessRightReadWrite + _right = "READ WRITE" + End Select + MSG_RESULT &= String.Format("Error while working on RightChange:" & vbNewLine & "Fileright: {0}" & vbNewLine & "User: {1} " & vbNewLine & "File: {2}", _right, StringUserRight, CURRENT_FILEIN_WD) & vbNewLine + clsLogger.Add(ex.Message, True) + + End Try + Next + Try + 'Speichern nicht vergessen + clsWindream.aktWMObject.Save() + Catch ex As Exception + Dim msg = String.Format("Error at Object2Change.Save - DocID ({0}): {1}", CURRENT_DOC_ID, ex.Message) + clsLogger.Add(msg, True) + If clsWindream.aktWMObject.aLocked = True Then + clsWindream.aktWMObject.unlock() + End If + Return False + End Try + + 'und der Vollständigkeit halber auch ein Unlock + If clsWindream.aktWMObject.aLocked = True Then + Try + clsWindream.aktWMObject.unlock() + Catch ex As Exception + Dim msg = "Fehler bei Unlock - Error: " & ex.Message + clsLogger.Add(msg, True) + Return False + End Try + End If + 'jetzt True zurückgeben + Return True + + Catch ex As Exception + clsLogger.Add(String.Format("Unexpected Error while Doc_Renew_Rightss DocID: {0}", CURRENT_DOC_ID), True) + Dim msg = "ErrorMessage: " & vbNewLine & ex.Message + clsLogger.Add(msg, False) + Return False + End Try + End Function + +End Class diff --git a/app/ZSG_Import/MyService.vb b/app/ZSG_Import/MyService.vb index 4fb956a..949f53a 100644 --- a/app/ZSG_Import/MyService.vb +++ b/app/ZSG_Import/MyService.vb @@ -1,9 +1,24 @@ Imports System.ComponentModel Imports System.IO - Public Class MyService 'Variablen Public Shared threadRunner As BackgroundWorker + Public Shared Function GetLnkTarget(lnkPath As String) As String + Try + Dim shl = New Shell32.Shell() + ' Move this to class scope + lnkPath = System.IO.Path.GetFullPath(lnkPath) + Dim dir = shl.[NameSpace](System.IO.Path.GetDirectoryName(lnkPath)) + Dim itm = dir.Items().Item(System.IO.Path.GetFileName(lnkPath)) + Dim lnk = DirectCast(itm.GetLink, Shell32.ShellLinkObject) + Return lnk.Target.Path + Catch ex As Exception + clsLogger.AddError(ex.Message, "GetLnkTarget") + clsLogger.WriteLog() + Return Nothing + End Try + + End Function Protected Overrides Sub OnStart(ByVal args() As String) ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge ' ausführen, damit der Dienst gestartet werden kann. @@ -20,7 +35,9 @@ Public Class MyService clsLogger.Add("ATTENTION: No Connection was established '" & My.Settings.MyConnectionString & "'!", True) Else LOG_ERRORS_ONLY = My.Settings.LOG_ERRORS_ONLY - + If LOG_ERRORS_ONLY = False Then + clsLogger.Add("DETAIL-LOG IS ACTIVE", False) + End If '### Thread für das nachträgliche Setzen von Rechten generieren MyService.threadRunner = New BackgroundWorker() MyService.threadRunner.WorkerReportsProgress = True @@ -39,78 +56,282 @@ Public Class MyService End Try End Sub Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) + Dim step_ As String Try + Dim DT_KONFIG As DataTable = clsDatabase.Return_Datatable("SELECT * FROM TBPMO_SERVICE_RIGHT_CONFIG WHERE GUID = 1") + AD_DOMAIN = DT_KONFIG.Rows(0).Item("AD_DOMAIN") + AD_USER = DT_KONFIG.Rows(0).Item("AD_USER") + AD_SERVER = DT_KONFIG.Rows(0).Item("AD_SERVER") + Dim PWplainText As String + Dim wrapper As New ClassEncryption("!35452didalog=") + ' DecryptData throws if the wrong password is used. + Try + PWplainText = wrapper.DecryptData(DT_KONFIG.Rows(0).Item("AD_USER_PW")) + Catch ex As Exception + clsLogger.Add("The Userpassword could not be decrypted", False) + PWplainText = "" + End Try + AD_USER_PW = PWplainText + Dim logcount As Integer = 0 'erst einmal die Technischen Plätze bestimmen die noch nciht importiert wurden - Dim DT_TP As DataTable = clsDatabase.Return_Datatable("SELECT DISTINCT [UNIQUE_STR] FROM [EXPORT_COMOS] where dokumentart is not null and imported = 0 and [UNIQUE_STR] LIKE '472%' order by [UNIQUE_STR]") + Dim DTIMPORT_COMOS As DataTable = clsDatabase.Return_Datatable("SELECT * FROM VWPMO_TEMP_IMPORT_COMOS_FILES") + 'SELECT DISTINCT [UNIQUE_STR] FROM [EXPORT_COMOS] where dokumentart is not null and imported = 0 and [UNIQUE_STR] LIKE '472%' order by [UNIQUE_STR] Try - If Not IsNothing(DT_TP) Then - If DT_TP.Rows.Count > 0 Then - clsLogger.Add(String.Format(">> {0} TPs need to be worked - {1}", DT_TP.Rows.Count.ToString, Now), False) - 'Jeden Technischen Platz einzeln durchlaufen weil für diesen ein Record existiert - For Each TP As DataRow In DT_TP.Rows - Dim _TP As String = TP.Item(0) - clsLogger.AddDetailLog(String.Format(">> Working on technical place: '{0}'", _TP)) - Dim selrecid = String.Format("SELECT [Record-ID] FROM VWTEMP_PMO_FORM3 where UPPER(TPLNR) = UPPER('{0}')", _TP) - Dim _RECORD_ID = clsDatabase.Execute_Scalar(selrecid) - If Not IsNothing(_RECORD_ID) Then - 'Jede Datei einzeln durchlaufen - Dim sel = String.Format("SELECT * FROM [EXPORT_COMOS] WHERE IMPORTED = 0 AND [UNIQUE_STR] = '{0}'", TP.Item("UNIQUE_STR")) - Dim DT_TP_DOCS As DataTable = clsDatabase.Return_Datatable(sel) - If Not IsNothing(DT_TP_DOCS) Then - If DT_TP_DOCS.Rows.Count > 0 Then - For Each _docRow As DataRow In DT_TP_DOCS.Rows - Dim GUID = _docRow.Item("GUID") - Dim filename = _docRow.Item("Link") + Dim selrecid + If Not IsNothing(DTIMPORT_COMOS) Then + If DTIMPORT_COMOS.Rows.Count > 0 Then + clsLogger.Add(String.Format("{0} FILES need to be worked", DTIMPORT_COMOS.Rows.Count.ToString), False) + Dim DTTBPMO_WD_OBJECTTYPE As DataTable + Dim Sql = "Select Top 1 * from TBPMO_WD_OBJECTTYPE where Upper(object_type) = Upper('ZSG - Geschäftsprozess')" + clsWindream._WDObjekttyp = "ZSG - Geschäftsprozess" + DTTBPMO_WD_OBJECTTYPE = clsDatabase.Return_Datatable(Sql) + Dim WD_Session = clsWindream.GetWMSessionAsUser(AD_DOMAIN, AD_SERVER, AD_USER, AD_USER_PW) + If Not IsNothing(WD_Session) Then + If DTTBPMO_WD_OBJECTTYPE.Rows.Count = 1 Then + If ClassWDRights.Init = True Then + Dim filecount = 1 + 'Jeden Technischen Platz einzeln durchlaufen weil für diesen ein Record existiert + For Each FILE_ROW As DataRow In DTIMPORT_COMOS.Rows + clsLogger.Add(String.Format("Working on File {0}/{1} - ID: {2}", filecount, DTIMPORT_COMOS.Rows.Count, FILE_ROW.Item("GUID")), False) + filecount += 1 + Dim MYOBJECT As String = FILE_ROW.Item("OBJEKT") + clsLogger.AddDetailLog(String.Format("Working on OBJEKT: '{0}'", MYOBJECT)) + + CURRENT_IMPORT_ID = 0 + step_ = "" + logcount += 1 + Dim filename = FILE_ROW.Item("Link") + filename = filename.ToString.Replace("U:", "E:") + filename = filename.ToString.Replace("\\", "\") + selrecid = String.Format("SELECT GUID FROM TBPMO_RECORD where GUID = {0}", FILE_ROW.Item("RECORD_ID")) + Dim _RECORD_ID = clsDatabase.Execute_Scalar(selrecid) + If Not IsNothing(_RECORD_ID) Then + 'Jede Datei einzeln durchlaufen + step_ = "" + Dim _DISPLAYNAME = FILE_ROW.Item("DISPLAYNAME") + Dim docsql As String + CURRENT_IMPORT_ID = FILE_ROW.Item("GUID") + UpdateWORKED_GUID() + If filename.ToString.EndsWith(".lnk") Then + clsLogger.Add("FILE IS A LINK", False) + If filename = GetLnkTarget(filename) = Nothing Then + Continue For + End If + End If If File.Exists(filename) Then + Dim sql2 = String.Format("SELECT * FROM [dbo].[FN_GET_PATH_AND_CO] ('{0}')", filename) + clsLogger.AddDetailLog("sqlFN_GET_PATH_AND_CO: " & sql2) + Dim DT_PATH_RESULTS As DataTable = clsDatabase.Return_Datatable(sql2) + If DT_PATH_RESULTS.Rows.Count = 1 Then + step_ = "DT_PATH_RESULTS.Rows.Count = 1" + Dim WD_PATH = DT_PATH_RESULTS.Rows(0).Item(0) + clsLogger.AddDetailLog("WD_PATH: " & WD_PATH) + Dim Department = DT_PATH_RESULTS.Rows(0).Item(1) + Dim DoctypeSIDtring = DT_PATH_RESULTS.Rows(0).Item(2) + docsql = String.Format("select GUID from TBDD_DOKUMENTART where substring(BEZEICHNUNG,1,2) = substring('{0}',1,2)", DoctypeSIDtring) + Dim DOCTYPE_ID = clsDatabase.Execute_Scalar(docsql) + clsLogger.AddDetailLog("DOCTYPE_ID: " & DOCTYPE_ID) + Dim DOCTYPE_STRING = clsDatabase.Execute_Scalar(String.Format("SELECT [dbo].[FNPMO_GETOBJECTCAPTION] ('de-DE','DOCTYPE_TITLE' + CONVERT(VARCHAR(4),{0}),1)", DOCTYPE_ID)) + If IsNothing(DOCTYPE_STRING) Then + DOCTYPE_STRING = "NO DOCTYPE" + Update_COMMENT_GUID("NO DOCTYPE: " & DoctypeSIDtring) + End If + clsLogger.AddDetailLog("DOCTYPE_STRING: " & DOCTYPE_STRING) + 'Prüfen ob Datei schon referenziert wurde + docsql = String.Format("SELECT DocID, FULL_FILENAME FROM VWPMO_DOC_SYNC where UPPER(FULL_FILENAME) = UPPER('{0}')", WD_PATH) + Dim DT_FILE_EXISTS As DataTable = clsDatabase.Return_Datatable(docsql) + Dim DOC_ID + If DT_FILE_EXISTS.Rows.Count = 0 Then + Dim streamresult = clsWindream.Stream_File(filename, WD_PATH, WD_Session) + If streamresult = True Then + step_ = "streamresult = True" + If DTTBPMO_WD_OBJECTTYPE.Rows.Count = 1 Then + If clsWindream.WMFILE_existed = False Then + Dim indexname + Dim indexierung_erfolgreich = False + indexname = DTTBPMO_WD_OBJECTTYPE.Rows(0).Item("IDXNAME_DOCTYPE").ToString + 'Indexierung des Dokumententyps + indexierung_erfolgreich = clsWindream.IndexaktFile(indexname, DOCTYPE_STRING) + If indexierung_erfolgreich = False Then + clsLogger.WriteLog() + Continue For + End If + + indexname = DTTBPMO_WD_OBJECTTYPE.Rows(0).Item("IDXNAME_RELATION").ToString + indexierung_erfolgreich = clsWindream.IndexaktFile(indexname, "ADDI-RELATION") + If indexierung_erfolgreich = False Then + clsLogger.AddDetailLog("EXIT ON indexierung_erfolgreich ADDI-RELATION=False...") + clsLogger.WriteLog() + Continue For + End If + Else + clsLogger.WriteLog() + End If + End If + Else + step_ = " streamresult = False " + clsLogger.WriteLog() + + Continue For + End If + Else + clsLogger.AddDetailLog("FILE ALREADY EXISTING IN WINDREAM...") + 'Datei existiert bereits in windream + If clsWindream.Create_aktWDObjekt(WD_PATH) = False Then + clsLogger.Add(String.Format("Could not create aktWDObjekt"), False) + clsLogger.WriteLog() + Continue For + End If + End If + DOC_ID = clsWindream.aktWMObject.GetVariableValue("Dokument-ID") + CURRENT_DOC_ID = 0 + If IsNumeric(DOC_ID) And DOC_ID <> 0 Then + docsql = String.Format("SELECT COUNT(DocID) FROM VWPMO_DOC_SYNC WHERE DocID = {0}", DOC_ID) + If clsDatabase.Execute_Scalar(docsql) = 1 Then + CURRENT_DOC_ID = DOC_ID + UpdateIMPORTED_GUID() + Dim execute = String.Format("EXEC [dbo].[PRPMO_DOC_CREATE_NEW_DOC] {0},{1},'{2}'", DOC_ID, _RECORD_ID, "windream") + If clsDatabase.Execute_non_Query(execute) = True Then + If Not IsDBNull(_DISPLAYNAME) Then + Dim upd1 = String.Format("UPDATE TBPMO_DOCRESULT_LIST SET DISPLAY_NAME = '{0}' WHERE DocID = {1}", _DISPLAYNAME, CURRENT_DOC_ID) + clsDatabase.Execute_Scalar(upd1) + End If + + SET_WD_RIGHTS() + Else + clsLogger.Add(String.Format("DOC-Links could not be created!"), False) + End If + Else + clsLogger.Add(String.Format("DOC-ID not in VWPMO_DOC_SYNC"), False) + End If + Else + clsLogger.Add(String.Format("COULD NOT GET A DOC-ID"), False) + End If + Else + clsLogger.Add(String.Format("DT_PATH_RESULTS is nothing"), False) + End If Else - clsLogger.Add(String.Format(">> File not found: {0}", filename), False) - Update_COMMENT_GUID(GUID, "FILE NOT FOUND") + clsLogger.Add(String.Format("File not found: {0}", filename), False) + Update_COMMENT_GUID("FILE NOT FOUND") End If + Else + clsLogger.Add(String.Format("No Record found for OBJECT: {0} " & selrecid, MYOBJECT), False) + Update_COMMENT_GUID("No Record found (IMPORT)") + End If + If logcount = 10 Then + clsLogger.WriteLog() + logcount = 0 + End If + + Next + clsLogger.Add("CREATE COMOSLinks FINISHED", False) + clsLogger.WriteLog() - Next - End If + Else + clsLogger.AddError("Could not initialize right-module...") End If Else - clsLogger.Add(String.Format(">> No Record found for TP: {0}", _TP), False) - Update_COMMENT(_TP, "NO RECORD-ID FOUND") + clsLogger.Add(String.Format(">>WDOBJEKTTYPE IS NOTHING"), False) End If + Else + clsLogger.Add("COULD NOT CREATE A SESSION", True) - Next - - - 'DD_Rights.clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "") - 'If DD_Rights.ClassRights.Init_Service(LOG_ERRORS_ONLY, DT_RIGHTS_2b_WORKED.Rows.Count) Then - ' If DD_Rights.ClassRights.WORK_RIGHT2B_CHANGED(DT_RIGHTS_2b_WORKED) = True Then - ' clsLogger.Add(">> All rights were worked - " & Now, False) - ' End If - 'End If + End If End If End If - Catch ex As Exception - clsLogger.AddError("Uncexpected Error in working rights: " & ex.Message, "DT_RIGHTS_2b_WORKED") + clsLogger.AddError("Uncexpected Error in working Objekts: " & ex.Message & " LAST STEP: " & step_) + clsLogger.WriteLog() End Try + 'Try + ' Dim DT_DELETE As DataTable = clsDatabase.Return_Datatable("SELECT DISTINCT UPPER(LINK) FROM IMPORT_2017_Links WHERE IMPORTED = 1 AND FILE_DELETED = 0 AND DOC_ID > 0") + ' If Not IsNothing(DT_DELETE) Then + ' step_ = "FOR EACH DELETE ROW" + ' For Each row_link As DataRow In DT_DELETE.Rows + ' Dim _filename = row_link.Item(0) + ' _filename = _filename.ToString.Replace("U:", "E:") + ' Dim sqlex = String.Format("SELECT COUNT(*) FROM IMPORT_2017_Links WHERE UPPER(LINK) = UPPER('{0}') AND (IMPORTED = 0 OR WORKED = 0)", _filename) + ' Dim DT_REST As DataTable = clsDatabase.Return_Datatable(sqlex) + ' If DT_REST.Rows.Count = 0 Then + ' If File.Exists(_filename) Then + ' Try + ' File.Delete(_filename) + ' _filename = _filename.ToString.Replace("E:", "U:") + ' Dim upd = String.Format("UPDATE IMPORT_2017_Links SET FILE_DELETED = 1 WHERE UPPER(LINK) = UPPER('{0}')", _filename) + ' clsDatabase.Execute_non_Query(upd) + ' Catch ex As Exception + ' clsLogger.Add(String.Format("COULD NOT DELETE FILE: {0} - ERRO: " & ex.Message, _filename), False) + ' End Try + ' 'Else + ' ' _filename = _filename.ToString.Replace("E:", "U:") + ' ' Dim upd = String.Format("UPDATE IMPORT_2017_Links SET FILE_DELETED = 1 WHERE UPPER(LINK) = UPPER('{0}')", _filename) + ' ' clsDatabase.Execute_non_Query(upd) + ' End If + ' End If + + + ' Next + ' End If + 'Catch ex As Exception + ' clsLogger.AddError("Uncexpected Error in Delete Docs: " & ex.Message & " LAST STEP: " & step_) + ' clsLogger.WriteLog() + 'End Try + clsLogger.WriteLog() Catch ex As Exception clsLogger.AddError("Uncexpected Error: " & ex.Message, "RUN_THREAD") + clsLogger.WriteLog() End Try End Sub - Private Shared Sub Update_COMMENT(UNIQUE_STR As String, comment As String) + Public Shared Function SET_WD_RIGHTS() Try - Dim upd = String.Format("UPDATE EXPORT_COMOS_472 SET COMMENT = '{0}' where UPPER(UNIQUE_STR) = UPPER('{1}') AND IMPORTED = 0") + If ClassWDRights.Doc_Renew_Rights() Then + If ClassWDRights.MSG_RESULT <> "" Then + clsLogger.Add("Attention: some rights could Not be set: " & ClassWDRights.MSG_RESULT.MSG_RESULT, True) + Return True + End If + Else + clsLogger.Add("Error in Doc_Renew_Rights.. ", True) + Return False + End If + Catch ex As Exception + clsLogger.AddError("Uncexpected Error in SET_WD_RIGHTS: " & ex.Message) + clsLogger.WriteLog() + Return False + End Try + End Function + 'Private Shared Sub Update_COMMENT(UNIQUE_STR As String, comment As String) + ' Try + ' Dim upd = String.Format("UPDATE [IMPORT_2017_Links] SET COMMENT_IMPORT = '{0}' where UPPER(OBJEKT) = UPPER('{1}') AND IMPORTED = 0", comment, UNIQUE_STR) + ' clsDatabase.Execute_non_Query(upd) + ' Catch ex As Exception + ' clsLogger.AddError("Uncexpected Error in Update_COMMENT: " & ex.Message) + ' End Try + 'End Sub + Private Shared Sub Update_COMMENT_GUID(comment As String) + Try + Dim upd = String.Format("UPDATE IMPORT_2017_Links SET COMMENT_IMPORT = '{0}' where GUID = {1}", comment, CURRENT_IMPORT_ID) clsDatabase.Execute_non_Query(upd) Catch ex As Exception - clsLogger.AddError("Uncexpected Error in Update_COMMENT: " & ex.Message) + clsLogger.AddError("Uncexpected Error in Update_COMMENT_GUID: " & ex.Message) End Try End Sub - Private Shared Sub Update_COMMENT_GUID(GUID As Integer, comment As String) + Private Shared Sub UpdateIMPORTED_GUID() Try - Dim upd = String.Format("UPDATE EXPORT_COMOS_472 SET COMMENT = '{0}' where GUID = {1}") + Dim upd = String.Format("UPDATE IMPORT_2017_Links SET IMPORTED = 1, DOC_ID = {1} where GUID = {0}", CURRENT_IMPORT_ID, CURRENT_DOC_ID) clsDatabase.Execute_non_Query(upd) Catch ex As Exception - clsLogger.AddError("Uncexpected Error in Update_COMMENT_GUID: " & ex.Message) + clsLogger.AddError("Uncexpected Error in UpdateIMPORTED_GUID: " & ex.Message) + End Try + End Sub + Private Shared Sub UpdateWORKED_GUID() + Try + Dim upd = String.Format("UPDATE IMPORT_2017_Links SET WORKED = 1 where GUID = {0}", CURRENT_IMPORT_ID) + clsDatabase.Execute_non_Query(upd) + Catch ex As Exception + clsLogger.AddError("Uncexpected Error in UpdateIMPORTED_GUID: " & ex.Message) End Try End Sub Protected Overrides Sub OnStop() diff --git a/app/ZSG_Import/ZSG_Import.vbproj b/app/ZSG_Import/ZSG_Import.vbproj index 416aaaf..d7ae245 100644 --- a/app/ZSG_Import/ZSG_Import.vbproj +++ b/app/ZSG_Import/ZSG_Import.vbproj @@ -80,6 +80,8 @@ + + @@ -126,6 +128,17 @@ + + + {50A7E9B0-70EF-11D1-B75A-00A0C90564FE} + 1 + 0 + 0 + tlbimp + False + True + +