Zum Inhalt springen

Berichte automatisch ablegen


Empfohlene Beiträge

Ich möchte gerne Berichte automatisch in Ordnerstrukturen auf einem Netzlaufwerk ablegen.
Und nun überlege ich gerade, wie ich das am sinnvollsten anstelle.

Durch unser IT-Fort-Knox fallen die ganzen Webtools (Make, Zapier, PowerAutomateCloud,...) weg.
Was ich aber habe ist Power Automate Desktop. Da finde ich aber nicht mal den Trigger wie in dem Video von Moritz zu Power Automate besschrieben.
Ich könnte aber ,möglicherweise mit PA-Desktop aber auf den Exchange-Server intern zugreifen.

Das Smap-Setting sieht so aus:
Bericht "Tägliche Kontrolle Tanklager". Wird 2x am Tag gemacht pro Tanklager (5 Tanklager).
Die Ordnerstruktur wird vermutlich Tanklager/Smapname/Jahr/Monat sein.
Der Dateiname ist THB-04_JJMMDD_hhmm_Tanklager_Tanklagername.pdf

Wie macht Ihr das so?

  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Anforderung habe ich bei uns auch... 

Ich habe es so gelöst: ich lasse die smap-PDFs in einen Exchange Public Folder senden. 
Auf EXC-Server habe ich das Tool "Attachment Save for Exchange" in Exchange integriert, der mir das angehängte PDF in einen festgelegten Ordner ablegt. 

Dieser Ordner wird von unserem DMS-System überwacht und entsprechend strukturiert archiviert.

Bei euch könnte aber tatsächlich die PA-Tools helfen, da gibt es ja einige Ordner- und Dateiaktionen.

Hier eine Anleitung von ChatGTP: 😁
 

Selbstverständlich kann ich Ihnen dabei helfen, einen Power Automate-Flow zu erstellen, der Dateien basierend auf dem Dateinamen in die entsprechende Ordnerstruktur verschiebt. Hier ist eine Schritt-für-Schritt-Anleitung:

Schritt 1: Trigger einrichten
- Wählen Sie den passenden Auslöser für Ihren Flow. Zum Beispiel können Sie den "Ordner" oder "SharePoint"-Trigger verwenden, um neue Dateien in einem bestimmten Ordner zu überwachen.

Schritt 2: Dateinamen analysieren
- Fügen Sie einen Aktionsschritt hinzu, um den Dateinamen der neuen Datei zu analysieren. Verwenden Sie dazu den entsprechenden Ausdruck, um den Dateinamen aus den Metadaten der Datei zu extrahieren. Zum Beispiel, wenn Sie den "Ordner" Trigger verwenden, können Sie den Ausdruck `triggerOutputs()?['body/{DateiName}']` verwenden, um auf den Dateinamen zuzugreifen.

Schritt 3: Ordnerstruktur erstellen
- Basierend auf Ihrem gewünschten Regelsystem für die Ordnerstruktur können Sie Bedingungen erstellen und Aktionsschritte hinzufügen, um die erforderlichen Ordner zu erstellen. Verwenden Sie zum Erstellen von Ordnern den Aktionsschritt "Ordner erstellen" und geben Sie den Pfad des neuen Ordners an. Sie können dabei dynamische Inhalte und Ausdrücke verwenden, um den Ordnerpfad entsprechend dem Dateinamen anzupassen.

Schritt 4: Datei verschieben
- Fügen Sie einen weiteren Aktionsschritt hinzu, um die Datei in den entsprechenden Ordner zu verschieben. Verwenden Sie den Aktionsschritt "Datei verschieben" und geben Sie den Quellpfad der Datei sowie den Zielpfad (basierend auf der erstellten Ordnerstruktur) an.

Schritt 5: Abschluss des Flows
- Sie können weitere Aktionsschritte hinzufügen, um beispielsweise Benachrichtigungen zu senden oder andere Aufgaben auszuführen, die Sie in Ihrem Szenario benötigen.

Nachdem Sie den Flow erstellt haben, können Sie ihn speichern und aktivieren, um zu überprüfen, ob er wie erwartet funktioniert. Stellen Sie sicher, dass Sie die erforderlichen Berechtigungen haben, um auf die Quell- und Zielordner zugreifen und Dateien verschieben zu können.

Bitte beachten Sie, dass dies nur eine allgemeine Anleitung ist und je nach Ihren spezifischen Anforderungen und der verwendeten Plattform (z. B. SharePoint, OneDrive, etc.) einige Anpassungen erforderlich sein können.

 

  • Like 1
  • Danke 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Bülent Erbas:

Ich habe es so gelöst: ich lasse die smap-PDFs in einen Exchange Public Folder senden. 
Auf EXC-Server habe ich das Tool "Attachment Save for Exchange" in Exchange integriert, der mir das angehängte PDF in einen festgelegten Ordner ablegt. 

Das sieht ganz chic aus, ist aber wieder ein Extra Tool, was auch wieder Geld kostet. Kann mir ohnehin nicht vorstellen, dass unsere IT auf einem Exchange ein Drittplugin installiert. 🙈

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Manuel Rühl:

Das sieht ganz chic aus, ist aber wieder ein Extra Tool, was auch wieder Geld kostet. Kann mir ohnehin nicht vorstellen, dass unsere IT auf einem Exchange ein Drittplugin installiert. 🙈

Da ich das Tool sehr intensiv nutze, haben auch einige Workflows damit am laufen, ist es das Geld wert.

Aber klar.. da muss die IT mitmachen.😜

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 23 Stunden schrieb Manuel Rühl:

Das würde ich tatsächlich mal nehmen, danke!

Hinweis an alle hier: Wir werden einige Power Shell-Scripte voraussichtlich auf github veröffentlichen, so dass sie für alle einseh- und nutzbar sind. @Manuel Rühl, dir habe ich die Dateien schonmal geschickt, wer sie vorab schon möchte, kurze Info an mich.

  • Like 2
  • Danke 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Vor diesem Problem standen wir auch vor kurzem und haben uns auch gegen ein addon entschieden. Wir haben es mit Powershell gelöst. 

@Moritz wenn du da eine kleine Sammlung bereitstellen würdest auf github, schaue ich sa gerne rein. 

Vorab sorry @Manuel Rühl...

Bei anderen Abläufen haben wir das  "Manuell" gegeben zur Bearbeitung. 

  • Like 2
  • Haha 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...
Am 18.7.2023 um 07:09 schrieb Manuel Rühl:

Durch unser IT-Fort-Knox fallen die ganzen Webtools (Make, Zapier, PowerAutomateCloud,...) weg.

Es gibt von Power Automate ein Gateway, welches wunderbar lokal installiert und mit einem Benutzerkontext versehen werden kann, welches nur die Schreib- und Leseberechtigungen hat, wie es deine IT vorschreibt, sprich die Kontrolle bleibt vollkommen bei der IT.

Link zum lokalen Datengateway

Hiermit wäre der WebHook wieder möglich und die Ablage erfolgt dann per Logik im Automatismus.
Funktioniert super mit der Ablage von Dateien, der Ausführung von nur intern erreichbaren APIs und auch Abfragen per SQL aus dem Intranet sind möglich.

Die Ablage könnte dann wie folgt aussehen:
image.png.73b697400a328f13ddd51c6ea1b61dbf.png

image.png.8fc6d1d92815b5293cf7c973a7e0feb2.png

image.png

  • Like 4
  • Danke 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Wir haben uns überlegt, die Ablagelogik über den E-Mail-Betreff zu steuern:

Betreff:
„Text, hier kann kommen was will.“ Pfad:Ordner1/Ordner2/Ordner3/Ordner4/….

Ich mache einen zweiten E-Mail-Baustein, der den Bericht an eine smapone@ELO-DMS-Adresse schickt und dann wird das PDF abgelegt,
völlig unabhängig vom Dateinamen. Damit haben wir maximale Flexibilität.

@Moritz Das PowerShell-Script fand ich auch charmant, aber das wollte die IT nicht so. 😉

Zitat

Powershell ist bis auf ganz wenige Ausnahmen im Unternehmen aus Sicherheitsgründen blockiert. Nur dort, wo es zwingend notwendig ist, werden signierte Scripte zugelassen. Powershell ist vermutlich das größte Sicherheitsproblem, was sich Microsoft in den letzten 20 Jahren hat einfallen lassen. Die Powershell ist leider "zu gut", was auch andere "Personen" mitbekommen haben. Die Scripte, die Du geschickt hast, sind nicht gültig von Microsoft signiert und gelten somit als 3rd Party Script. Damit fallen diese schlichtweg aus.

@Michael Klaus Das werde ich mir mal genauer anschauen, das kann ich sicher für andere Sachen gut verwenden. Danke!

 

@Steffen Haußmann Zum Glück hab ich den Joke noch nie in meinem Leben gehört. 😁
Ich weise aber dann immer auf die eigentliche Bedeutung hin:

von hebräisch עִמָּנוּ אֵל (immanu el): „Gott [ist] mit uns“.

Im Alten Testament ist Immanuel der durch den Propheten Jesaja vorhergesagte Name des kommenden Messias.

Seelenheil gibt es bei mir leider nicht, dafür erlöse ich nach Möglichkeit meine Kolleginnen und Kollegen von manuellen Tätigkeiten. 😇 

  • Like 3
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Manuel Rühl:

Ich mache einen zweiten E-Mail-Baustein, der den Bericht an eine smapone@ELO-DMS-Adresse schickt und dann wird das PDF abgelegt,
völlig unabhängig vom Dateinamen. Damit haben wir maximale Flexibilität.

Wenn ihr ELO im Einsatz habt (so wie wir), könnt ihr die PDFs doch darüber mit einer Ablagelogik versehen... 

  • Like 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 Monat später...

Hallo allerseits,

ich hatte die gleiche Anforderung und habe das über ein Outlook-Makro gelöst.

Das mag Oldschool sein, aber damit kenne ich mich aus und man muss die Makrofunktionalität nur in den Outlook-Sicherheitseinstellungen aktivieren.

Mit dem Makro, dass auf einem virtuellen Client zyklisch ausgeführt wird, kann ich nicht nur die Dateianhänge abspeichern, sondern auch noch weitere Aktionen (z.B. in anderen Ordnern Verknüpfungen auf die Datei erstellen oder Inhalte auslesen) automatisiert ausführen.
Wenn daran jemand Interesse hat, teile ich gerne. 😉 
Ich wäre aber durchaus auch an Lösungen über PowerShell interessiert, habe damit allerdings noch nicht gearbeitet.

Bearbeitet von Rolf Thielmann
  • Like 4
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo allerseits,

dann poste ich mal den relevanten Code.

Über die Windows Aufgabenplanung lasse ich einmal pro Stunde Outlook starten und nach 15 Minuten wieder beenden.

Im VisualBasic Editor von Outlook (aufrufbar über Alt+F11) wird unter ThisOutlookSession das Autostart-Makro eingetragen. Der eigentliche Code steht in einer Funktion, die ich in einem separaten Modul eingetragen habe. So kann ich das auch manuell starten bzw. als Datei exportieren/importieren.

So sieht das dann im VisualBasic-Editor aus:

image.png.8a7157a51f7fb717ee2ba194fdf6c045.png

image.png.2f24629100a518f372930cc395e291b0.png

Und hier der VBA-Code...

ThisOutlookSession
Private Sub Application_Startup()
    Call Funktion_Bereinigung_Posteingang
End Sub

Modul
Sub Bereinigung_Posteingang()
    Call Funktion_Bereinigung_Posteingan
End Sub
Function Funktion_Bereinigung_Posteingang()

    Dim aktuelle_eMail As MailItem
    Dim Quellordner As Object
    Dim ShellObjekt As Object
    Dim Verknüpfung As Object
    
    Projektmanagementordner = "S:\DATEN\PUBLIC\Projektmanagement\Aufträge\"
    Fertigungsordner = "S:\DATEN\Fertigung\"
    Eingangsrechnungsordner = "S:\DATEN\Rechnungen\Eingangsrechnungen\"
    
    On Error GoTo Projektmanagementordner_nicht_vorhanden:
    ChDir Projektmanagementordner
    On Error GoTo Fertigungsordner_nicht_vorhanden:
    ChDir Fertigungsordner & "Qualitätssicherung"
    On Error GoTo 0
    
    Set olNsp = Application.Application.GetNamespace("MAPI")
    Set ShellObjekt = CreateObject("WScript.Shell")
    
    If Format(Environ("USERNAME"), "<") = "Sync" Then
        Set Quellordner = olNsp.Folders.Item("Sync@test.de").Folders.Item("Posteingang")
    Else
        Set Quellordner = olNsp.Folders.Item("ich@test.de").Folders.Item("Digitalisierung").Folders.Item("Test")
    End If
    Anzahl_smapOne_eMails = 1
    While Anzahl_smapOne_eMails > 0 And Quellordner.Items.Count > 0
        Anzahl_smapOne_eMails = 0
        For Each aktuelle_eMail In Quellordner.Items
            If aktuelle_eMail.SenderEmailAddress = "no-reply@smapone.com" Then
                Anzahl_smapOne_eMails = Anzahl_smapOne_eMails + 1
                Auftragsnummer = Mid(aktuelle_eMail.Subject, InStr(aktuelle_eMail.Subject, "Auftrag ") + 8, 7)
                If Left(aktuelle_eMail.Subject, 19) = "Fertigungskontrolle" Then
                    Zielordner = Projektmanagementordner & Auftragsnummer & "\"
                    Zieldatei = Replace(aktuelle_eMail.Subject, " > ", "-") & " " & Format(aktuelle_eMail.ReceivedTime, "YYYY-MM-DD  hh-mm-ss") & ".PDF"
                    QS_Ordner = "Fertigungskontrolle"
                End If
                If Left(aktuelle_eMail.Subject, 11) = "Reklamation" Then
                    Zielordner = Projektmanagementordner & Auftragsnummer & "\"
                    Zieldatei = Replace(aktuelle_eMail.Subject, " > ", "-") & " " & Format(aktuelle_eMail.ReceivedTime, "YYYY-MM-DD  hh-mm-ss") & ".PDF"
                    Zieldatei = Replace(Zieldatei, "Physikalische ", "")
                    Zieldatei = Replace(Zieldatei, "Ungewöhnliche ", "")
                    Zieldatei = Replace(Zieldatei, "Fehlende ", "")
                    Zieldatei = Replace(Zieldatei, "/-informationen", "")
                    Zieldatei = Replace(Zieldatei, "Fehlende/s ", "")
                    Zieldatei = Replace(Zieldatei, "/Beistellungen/Normteile", "")
                    QS_Ordner = "Reklamation"
                End If
                If Left(aktuelle_eMail.Subject, 7) = "Versand" Then
                    Zielordner = Projektmanagementordner & Auftragsnummer & "\"
                    Zieldatei = Replace(aktuelle_eMail.Subject, " > ", "-") & " " & Format(aktuelle_eMail.ReceivedTime, "YYYY-MM-DD  hh-mm-ss") & ".PDF"
                    Zieldatei = Replace(Zieldatei, " Maschine", "")
                    QS_Ordner = "Endmontage"
                End If
                If QS_Ordner <> "" Then
                    On Error Resume Next
                    MkDir Zielordner
                    MkDir Zielordner & "Dokumentation"
                    MkDir Zielordner & "Dokumentation\Qualitätssicherung"
                    MkDir Fertigungsordner & "Qualitätssicherung\" & QS_Ordner
                    On Error GoTo 0
                    For Each Dateianhang In aktuelle_eMail.Attachments
                        If Right(Format(Dateianhang.FileName, ">"), 3) = "PDF" Then
                            Dateianhang.SaveAsFile Zielordner & "Dokumentation\Qualitätssicherung\" & Zieldatei
                            Set Verknüpfung = ShellObjekt.CreateShortcut(Fertigungsordner & "Qualitätssicherung\" & QS_Ordner & "\" & Left(Zieldatei, Len(Zieldatei) - 4) & ".lnk")
                            Verknüpfung.WorkingDirectory = Zielordner & "Dokumentation\Qualitätssicherung"
                            Verknüpfung.TargetPath = Zielordner & "Dokumentation\Qualitätssicherung\" & Zieldatei
                            Verknüpfung.Save
                        End If
                    Next
                    QS_Ordner = ""
                Else
                    If Left(aktuelle_eMail.Subject, 14) = "Servicebericht" Then
                        Zieldatei = aktuelle_eMail.Subject
                        While InStr(Zieldatei, ">") > 0
                            Zieldatei = Trim(Right(Zieldatei, Len(Zieldatei) - InStr(Zieldatei, ">")))
                        Wend
                        Zieldatei = "Auftrag " & Auftragsnummer & " " & Zieldatei & " " & Format(aktuelle_eMail.ReceivedTime, "YYYY-MM-DD  hh-mm-ss") & " ( LB ).PDF"
                        Call Funktion_Dateiname_bereinigen(Modus, Aktualität, Zieldatei)
                        For Each Dateianhang In aktuelle_eMail.Attachments
                            If Right(Format(Dateianhang.FileName, ">"), 3) = "PDF" Then Dateianhang.SaveAsFile Eingangsrechnungsordner & Zieldatei
                        Next
                    End If
                End If
                aktuelle_eMail.Delete
            End If
        Next
        If Format(Environ("USERNAME"), "<") <> "Sync" Then Shell "explorer.exe /e, " & Projektmanagementordner & ", vbNormalFocus"
    Wend
Exit Function
Projektmanagementordner_nicht_vorhanden:
    If Format(Environ("USERNAME"), "<") <> "Sync" Then Hinweis = MsgBox("Der Projektmanagementordner ist nicht vorhanden!" & Chr(10) & Chr(10) & Projektmanagementordner, 0, "Überprüfung Ordner")
    Funktion_übergeordneter_Ordner (Projektmanagementordner)
    Exit Function
Fertigungsordner_nicht_vorhanden:
    If Format(Environ("USERNAME"), "<") <> "Sync" Then Hinweis = MsgBox("Der Fertigungsordner ist nicht vorhanden!" & Chr(10) & Chr(10) & Fertigungsordner, 0, "Überprüfung Ordner")
    Funktion_übergeordneter_Ordner (Fertigungsordner)
    Exit Function
End Function

Function Funktion_übergeordneter_Ordner(Testordner)
    On Error GoTo Testordner_nicht_vorhanden:
    ChDir Testordner
    On Error GoTo 0
    Shell "explorer.exe /e, " & Testordner, vbNormalFocus
Exit Function
Testordner_nicht_vorhanden:
    While Right(Testordner, 1) <> "\"
        Testordner = Left(Testordner, Len(Testordner) - 1)
    Wend
    Testordner = Left(Testordner, Len(Testordner) - 1)
    MsgBox Testordner
    Resume
End Function

 

  • Danke 4
Link zu diesem Kommentar
Auf anderen Seiten teilen

Für alle, die auch an der Powershell-Lösung interessiert sind, ich habe gerade ein Repo dafür angelegt und das Script dort hochgeladen.

Zu finden ist dieses unter https://github.com/smapOne/PowershellScripts/blob/main/Download Records.ps1

Wenn ich dazu komme, schreibe ich morgen noch einen eigenen Beitrag dazu, um die Nutzung zu erklären.

  • Like 1
  • Danke 2
Link zu diesem Kommentar
Auf anderen Seiten teilen

Bitte melde Dich an, um einen Kommentar zu hinterlassen

Du kannst nach der Anmeldung einen Kommentar hinterlassen



Jetzt anmelden
×
×
  • Neu erstellen...