Hallo Willkommen beim heutigen Tutorial, Projektorganisation In diesem Video lernen Sie, wie Sie Ihre Projekte am besten organisieren können, um die Effizienz zu maximieren: Ihre, ebenso wie die Ihrer Automationen Das Thema, Ihre Projekte zu organisieren, mag langweilig sein, aber es ist eine wichtige Rolle bei erfolgreichen Automatisierungsprojekten Was wir heute sehen werden, sind die Lektionen, die wir bei unserer Erfahrung gelernt haben, als wir große Projekte für einige der wichtigsten Unternehmen der Welt umgesetzt haben Wir haben diese Lektionen in eine Reihe von Best Practices zusammengefasst, die Ihre Automatisierungsprojekte zuverlässiger, effizienter, wartbar und erweiterbar macht Diese sind in den meisten Fällen willkommene Qualitäten, aber in größeren Unternehmens-Prozess-Automatisierungen werden sie zu Schlüsselanforderungen Verlässlichkeit ist eine gewünschte Eigenschaft bei allen Automatisierungen wünschen und im vorherigen Video, Ausnahmebehandlung, ausgiebig erörtert haben Sie lehrt ihre Automatisierun, verschiedene Fehler problemlos zu erkennen und wiederherzustellen, die intern oder extern auftreten können Denn wie wir alle wissen, werden sie es Bei der Effizienz geht es darum, die Entwicklungszeit durch verschiedene Methoden zu senken, aber auch, zu gewährleisten, dass die Automatisierung unter Produktionsbedingungen reibungslos läuft – Und ein leicht zu verwaltender Workflow ist für Firmenumgebungen, in denen Zusammenarbeit und Handover die normale Betriebsart sind, wichtig – Ebenso Erweiterbarkeit, denn es wird immer mehr Anwendungsfälle geben, die in bestehende Automatisierungen integriert werden können Dies sind nur die wichtigsten Vorteile der Anwendung v on Best-Practices auf Ihre Automatisierung, aber Ihnen werden wahrscheinlich weitere Vorteile begegnen Sehen wir uns also an, was diese weisen Lehren sind, die von einer Generation zur nächsten weitergegeben werden Zuerst einmal, wenn Sie ein Projekt beginnen, stellen Sie sicher, dass Sie sich einen Moment Zeit nehmen, um das passende Layout für jeden Workflow und seine Sub-Workflows zu wählen Sie können die meisten Aufgaben in UiPath in einer Sequenz oder einem Flussdiagramm erledigen, aber in der Praxis sind einige Dinge sind für Flussdiagramme und andere für Sequenzen besser geeignet Zum Beispiel funktioniert der Haupt-Workflow besser als ein Flussdiagramm aus ein paar Gründen: Es ist einfacher, einen Überblick über das gesamte Projekt zu bekommen, und es ist auch einfacher, einzelne Teile des Workflows zu testen, indem sie direkt mit dem Startknoten verknüpft werden Manchmal ist es eine gute Idee, eine Zustandsmaschine für Ihren Hauptworkflow zu benutzen Es funktioniert besonders gut, wenn Sie mehrere strenge Bedingungen dafür haben, wann Ihr Workflow von einem Zustand zum anderen übergehen kann Werfen wir einen Blick in einem separaten Video darauf Und in der Regel funktionieren übergeordnete Entscheidungen oder Unternehmen besser in Form eines Flussdiagramms UI-Interaktionen werden nacheinander durchgeführt, ohne viel Variation, also sind sie besser für eine Sequenz geeignet Und versuchen Sie, verschachtelte IF-Anweisungen zu vermeiden, weil sie ein bisschen unhandlich und schwer nachzuverfolgen werden könnten Wenn Sie eine komplexere Logik brauchen, macht die optische Natur von Flussdiagrammen dies viel einfacher verständlich und daher zu diesem Zweck viel besser geeignet Um zu verstehen, warum es wichtig ist, eine Automatisierung in kleinere Komponenten zu zerlegen, ist es wichtig, zu bedenken, dass viel von dem, was wir als Automatisierungsentwickler tun, aus Behandlung von Komplexität besteht Wir setzen sehr komplexe Anwendungen und Algorithmen und zerlegen sie in kleinere überschaubare Aufgaben Das bringt viele Vorteile: Es ist einfacher, die Funktionalität von unabhängigen Teilen zu entwickeln und zu testen Sie können sicherstellen, dass jedes Teil allein funktioniert und dann können Sie sie alle verbinden Es verkürzt die Entwicklungszeit durch die Wiederverwendung der gleichen Funktionalität in verschiedenen Teilen des Projekts Es ist einfacher, mit mehreren Personen am gleichen Projekt zusammenzuarbeiten, in einer lokalen oder Remote-Umgebung Neben Workflows und Sequenzen, ist eine noch bessere Möglichkeit, Stücke der Automatisierung zu isolieren, den Invoke-Befehl zu verwenden; später werden wir uns genauer ansehen, wie man es benutzt Ausnahmebehandlung sollte verwendet werden, Fehler zu erfassen und behandeln, oder sie zumindest für die spätere Analyse zu protokollieren Sie können problematische Sequenzen – wie, sagen wir, einige sensible UI Interaktionen – in einem TryCatch-Block ablegen Dadurch wird sichergestellt, dass Ihre Automatisierung nicht abstürzt und nicht vollständig anhält, weil ein kleinerer Fehler auftritt TryCatch sollte auch verwendet werden, wenn externe Workflow-Dateien aufgerufen werden Es unterstützt das Debugging und den Wiederherstellungsprozess Automatische Wiederherstellungssequenzen, die innerhalb von Catch-Blöcken platziert werden, können Ihre Automatisierung sehr zuverlässig machen Sie machen den Unterschied zwischen einer Automatisierung, die meistens funktioniert und einer, die wie Fels in der Brandung ist und fast nie versagt Also wann immer möglich, implementieren Sie eine Sequenz, die die Anwendung oder einen Prozess in einen nutzbaren Status zurücksetzt, wenn eine Ausnahme auftritt Wir haben in der vorherigen Episode erörtert, Ihre Projekte klar und lesbar zu halten Es ist wichtig für die effiziente Fehlersuche und auch in Teamprojekten, bei denen andere Personen Ihre Workflows verwenden müssen Wie Sie wahrscheinlich wissen, ist es unbedingt notwendig, allen Komponenten Namen zu vergeben und klärende Anmerkungen und Kommentare sind zwingend erforderlich Und vergessen Sie nicht, den Ausführungsstatus zu melden

Dies hält Sie in auf dem Laufenden von dem, was los ist, und hilft, Fehler schneller zu lokalisieren Ein weiterer nützlicher Trick beim Einsatz großer Projekte ist es, die Einstellungen Ihres Workflows in einer separaten Datei zu speichern Wir empfehlen eine JSON**-Datei, aber Sie können eine CSV oder Excel oder Textdatei verwenden, wenn Sie es vorziehen Es ist eine einfache Methode, die das Ändern der Parameter Ihres Roboters vereinfacht, auch ohne UiPath zu starten Dies ist unentbehrlich: Wenn Sie nicht aufräumen, indem Sie unbenutzte Anwendungen schließen und Fenster, nach einigen Iterationen gibt es unzählige Fälle, die sich verlangsamen werden und schließlich den Rechner zum Abstürzen bringen Richtig, das sind die 5 “Gebote” der UiPath-Automatisierung, wenn Sie wollen Kehren Sie dahin zurück, wenn Sie Ihr Gedächtnis auffrischen müssen, wenn Sie ein neues Projekt beginnen In jedem Fall, vorerst genügt es mit der Theorie, gehen wir nun auf praktischere Aspekte ein Wir kommen gleich wieder auf übergeordnete, organisatorische Probleme zurück, aber vorher möchte ich Ihnen schnell ein paar weitere Details über den Aufrufbefehl zeigen, den wir bereits erwähnt haben, und im vorherigen Video auch Es ist eines der Hauptwerkzeuge für das Aufspalten eines Projektes in kleinere Komponenten und sehr leistungsstark darin Es ist als Aktivität für Drag & Drop verfügbar – wie jede andere – aber die meiste Zeit werden Sie es anders verwenden: Sie können einfach auf eine beliebige Sequenz klicken oder ein Flussdiagramm oder jeden anderen Container oder Aktivität und dies als Workflow extrahieren UiPath ersetzt die Auswahl automatisch durch eine Invoke-Aktivität Alles, was Sie tun müssen, ist, einen geeigneten Namen für den extrahierten Workflow zu wählen Im Wesentlichen müssen Sie nur diese Workflows in Funktionen eingliedern, die in anderen Teilen des Projekts wiederverwendet oder durch andere gepflegt und verbessert werden können, weil sie einfache Dateien sind Und was noch wichtiger ist, jedes Stück kann unabhängig getestet werden Richtig, so ist das ziemlich einfach: mit der rechten Maustaste extrahieren Sie den Workflow Aber die wirkliche Leistungsfähigkeit dieser Technik stammt aus den Daten, die zurück und vorwärts gegeben werden können – als Parameter oder Argumente – zwischen dem Hauptworkflow und seinen aufgerufenen Nachkömmlingen Zum Beispiel haben wir diesen Workflow, der Daten in eine myCRM-App eingibt. Mit Daten aus diesen vier Variablen, global deklariert im Flussdiagramm, nicht der aktuellen Sequenz Und es gibt auch eine lokale Timeout-Variable Wenn wir den Workflow extrahieren, werden alle 4 globalen Variablen zu Argumenten und die lokal deklarierte Timeout-Variable bleibt unverändert Und im ursprünglichen übergeordneten Workflow haben wir die Invoke-Aktivität Es gibt keine Argumente standardmäßig, aber das Klicken auf Import beschafft alle, die deklariert sind Dies ist alles, was Sie tun müssen, zu entscheiden, mit welchen Daten Sie diese Argumente bevölkern Oder in unserem Fall, welche Daten in das CRM-app eingegeben werden Offensichtlich können Sie Rohwerte verwenden, und das ist nützlich, aber in den meisten Fällen werden Sie Variablen verwenden Grundsätzlich führen Sie den Prozess mit unterschiedlichen Daten aus Sie verstehen die Idee In der Adressspalte können Sie wählen, ob Sie die Daten in den untergeordneten Workflow übergeben wollen, wie hier, oder die Daten aus ihm heraus erhalten, wenn der aufgerufene Workflow einige Daten generiert, die von der übergeordneten Datei aus zugänglich sein müssen Oder beides, in diesem Fall werden die Daten in beide Richtungen weitergegeben Für diese Instanz müssen wir Daten in den Prozess übergeben, also lassen wir sie alle auf In gesetzt Testen wir es Großartig, es hat die Dummy-Daten eingegeben, die wir als Argumente übergeben haben Manchmal müssen Sie jedoch GET-Daten aus einem untergeordneten Prozess in den aktuellen Workflow erhalten Wie diese GetUser-Sequenz, die die Datenschutzwebsite FakeNameGenerator.com benutzt, um fiktive Benutzerdaten zu erstellen Diese Get-Aktionen extrahieren Daten aus der Webseite und speichern sie in diesen global deklarierten Variablen: getName getAdress und getEmail Dies ist das Ergebnis Der Unterschied zum anderen Workflow ist, dass nun, nachdem wir diesen Workflow extrahiert haben, die importierten Argumente auf OUT gesetzt werden sollten, weil wir Daten aus dem aufgerufenen Workflow erhalten wollen UiPath setzt sie automatisch auf IN und OUT, was ebenfalls gut funktioniert Wir brauchen diese neue Variable nicht als Argument, daher löschen wir sie Jetzt können wir in den übergeordneten Workflow gehen und die GetUserData-Argumente importieren Für ausgehende Variablen werden die erzeugten Daten in dem Wert gespeichert Wir setzen jeden in die lokale entsprechende Variable, die nach dem Extrakt-Workflow verbleibt Also haben wir jetzt im übergeordneten Workflow diese 2 aufzurufenden Blöcke: einen, der Daten von einer Website bezieht, und einen, der Daten in eine andere

App eingibt Sie sind unabhängig voneinander und können verwendet und wieder verwendet werden, je nach Bedarf Um sie zusammen zu verwenden, verbinden Sie die beiden, dann gehen Sie zum EnterUserData Invoke Block, und sein Argumentenfenster, übergeben Sie ihm die lokalen Variablen, diejenigen, die zum Speichern der extrahierten Daten vom ersten Aufruf – GetUserData verwendet werden Sehen wir uns an, wie es funktioniert Der Name und die Adresse könnten ein bisschen Bearbeitung gebrauchen, wie sie aufzuspalten, aber wir sehen uns dies später an Wenn es geschieht, sind diese 2 Invoke-Befehle eine großartige Einführung für den nächsten Abschnitt, Projektorganisation Wir bauen ein volles Projekt von diesen beiden Unter-Workflows aus, um Ihnen ein echtes Beispiel für Projektorganisation zu zeigen Sagen wir also, wir wollen einen Roboter machen, der 10 Benutzer erstellt und sie in myCRM eingibt Ähnlich wie bei deM Workflow, den wir gerade erstellt haben, aber für mehrere Benutzer, müssen wir ein Protokoll aller Operationen und ihres Status führen – fehlgeschlagen oder erfolgreich, weil es unbeaufsichtigt ausgeführt wird Und weil es in einer Unternehmens-Umgebung ausgeführt wird, es sollte zuverlässig, effizient, wartbar und erweiterbar sein Also sollten wir dies ein bisschen planen Wir müssen Benutzerdaten aus einer Quelle extrahieren und diese Daten in eine Ziel-App laden; So können wir den workflow in 2 zerlegen Um die Benutzer zu bekommen, müssen wir die Website öffnen, eine Anzahl von Benutzern mit dem Workflow generieren, den wir zuvor erstellt haben, und dann den Browser schließen Und für Zuverlässigkeit setzen wir alles in einen tryCatch Block Ziemlich einfach Die andere Hälfte der Automatisierung beginnt ähnlich: Öffnen Sie die App, geben Sie X Benutzer ein, und schließen Sie sie Weil wir für jeden Benutzer individuelle Statusberichte benötigen, wird der TryCatch-Block innerhalb der Insert-X-Users-Schleife liegen Und auch hier können wir den anderen Workflow verwenden, den wir früher erstellt haben, EnterUser Und im Catch-Bereich protokollieren wir den Erfolg oder Misserfolg der Operation in einer separaten Excel-Datei und initiieren dann Recovery-Methoden Wie Sie sehen können, gibt uns diese “Skizze” bereits eine gute Vorstellung davon, was wir tun müssen, also versuchen wir es Wir handeln die Details schneller als üblich ab, da wir Ihnen eine allgemeine Übersicht über Prozesses bieten möchten, ohne uns in technischen Einzelheiten zu verlieren Und Sie werden ohnehin mit den meisten einfachen Aspekten vertraut sein Wir beginnen mit einem leeren Flussdiagramm namens “Zero Main” und erstellen die zwei Sub-Workflows: GetUsers und InsertUsers Wir machen sie zu getrennten Workflows, damit sie einfacher zu testen sind, und wir benennen sie mit Zahlen Dies gewährleistet, dass sie in der korrekten Reihenfolge in der Projektansicht verbleiben und maximiert die Lesbarkeit Diese Einrichtung gibt uns eine Struktur, auf der wir aufbauen können Für GetUsers starten wir mit einem TryCatch-Block, der alle Aktionen ausführt: für Anfänger, ein OpenBrowser Nun, da haben wir das haben, fügen wir den wichtigsten Teil hinzu: die Schleife, die eine Anzahl von Benutzern erzeugt Die Schleife ist nur eine einfache DoWhile mit einem Zähler; der wichtigste Teil ist dies: Wir gehen auf den zuvor erstellten Workflow und bringen die Invoke-Aktion hinein, die einen einzelnen Benutzer generiert Die Argumente wurden kopiert, aber die lokalen Variablen gibt es hier nicht; Wir werden einfach neue erstellen, mit dem größten Umfang Als nächstes müssen wir die Ergebnisse des GetUserData-Sub-Workflows irgendwie speichern Wir tun dies mit einer einfachen dataTable, eine Zeile pro Benutzer: wir erstellen diese, bevor wir den Browser öffnen und schreiben es auf die Festplatte, nachdem die Browser-Datenextraktion geendet hat in der Aktivität BuildDataTable müssen wir alle Spalten für die Benutzerdaten einrichten; also, was wir aus der Website extrahieren, und eine zusätzliche für den Transaktionsstatus Und in der Schleife füllen wir die dataTable aus, indem wir jeden Namen addieren, den wir generieren als neue Zeile in der dataTable Die GetUserData Ergebnisse verwenden wir einfach, um jede Zeile zu erstellen Schließlich werden wir die DataTable auf die Festplatte schreiben und auch zur Überprüfung ausdrucken Das sollte also alles sein

Sehen wir uns an, wie es funktioniert Hier generiert es jeden Benutzer, und dies sind die Ergebnisse: die 3 individuellen Benutzer, die vom aufgerufenen GetUserData-Workflow gedruckt wurden, eine Warnung, die wir ignorieren können, und die gespeicherte dataTable, welche die 3 Benutzer enthält Also, wir sind mit dieser Extraktion fertig Als nächstes kopieren wir alle diese Benutzer aus der Excel-Datei, die wir gespeichert haben, in unsere benutzerdefinierte CRM-App Diesmal beginnen wir im InsertUsers-Workflow durch Laden und Einrichten der Daten Nach dem Lesen der Datei, die wir zuvor gespeichert, gibt es einen schwierigen Teil Wir sagten, dass wir in der Excel-Datei auch den Status des Kopiervorgangs behalten werden, als erfolgreich oder fehlgeschlagen Weil wir Konflikte innerhalb der CRM App vermeiden wollen, werden wir nur die Benutzer filtern, die überhaupt nicht eingegeben wurden AKA die mit einem leeren Statusfeld Wir verwenden eine Assign-Aktivität Die gefilterte DataTable wird in einer Zeilen-Variablen vom Typ Zeilen-Array gespeichert Und der Wert, den wir ihr zuweisen, ist unsere DataTable, alle Zeilen mit einem leeren Status; oder NULL So einfach Select ist ein sehr nützliches Werkzeug, vor allem, wenn Sie mit Daten arbeiten; Sie können so mehr über die Syntax einer Websearch für “DataTable Select” herausfinden Ok, wir sind hier fertig Auf einer Ebene fügen wir einfach eine OpenApplication für unsere CRM App hinzu Also die Verarbeitung Wir wollen eine Flussdiagramm-Schleife erstellen, um Benutzer nacheinander hinzuzufügen, hoffentlich mit den EnterUser Workflow, den wir zuvor erstellt haben Grundsätzlich fragen wir “gibt es hinzuzufügende Benutzer?”, und wenn ja, geben Sie die Schleife ein und versuchen Sie, den ersten zu verarbeiten Wenn dies gelingt, geht es weiter und verarbeitet den nächsten, und so weiter, bis alle Zeilen verarbeitet sind Wenn keine weitere Benutzer mehr hinzugefügt werden können, schließen Sie die App und der Workflow ist fertig Schauen wir sie uns nacheinander an Um zu wissen, ob es hinzuzufügende Benutzer gibt, benötigen wir einen Zähler, wir richten einen ein und initialisieren ihn mit null Als Bedingung haben wir “Zähler… ist kleiner als… Gesamtanzahl der Zeilen” Wenn der Zähler kleiner als die Anzahl der Zeilen ist, bedeutet es, dass wir das Ende der Benutzerliste nicht erreicht haben und damit beginnen können, den nächsten Benutzer hinzuzufügen Im AddUser Block liegt das “Fleisch” dieser Aktion Zunächst einmal ist es keine Sequenz, sondern ein TryCatch-Block Auf diese Weise sind wir, wenn ein Fehler auftritt, in der Lage, ihn einzufangen und den entsprechenden Status in die Exceldatei zu schreiben; und dann mit dem nächsten Benutzer fortzufahren Wir beginnen mit einer Log-Meldung, die uns eine Echtzeit-Ausführungsverfolgung des Prozesses gibt Wenn ein Fehler auftritt, werden wir so wissen, was in dem Moment passiert ist, damit können wir das Problem lokalisieren und schneller lösen Als nächstes brauchen wir den wichtigsten Teil, der Benutzer in die CRM-App einfügt Wir bringen die Invoke-Aktivität hinein, die den zuvor erstellten Workflow aufruft: Kopie, von hier… hierher Wir müssen nur die Benutzerdaten übergeben, um in die CRM App zu gelangen Sehen wir also.. in der LoadUsers-Sequenz laden wir die Daten aus einer Excel-Datei und dann markieren Sie die Zeilen, die einen leeren Status haben; und speichern sie alle in der Zeilen-Variable, die ein Array von Zeilen ist Wobei der aktuelle Benutzer in der eingerichteten Zählvariable gespeichert wird Also sehen die Argumente in unserer Invoke-Command wie folgt aus; Wir beginnen mit der Adresse: die aktuelle Zeile ist Zeilen an der Position Zähler Dies ist die ganze Zeile, aber wir brauchen nur die Adresse Das ist der Spaltenname, den wir in der Build DataTable-Aktion eingerichtet haben Und wir werden ihn zu String umwandeln Die anderen sind sehr ähnlich: Zeilen an der Position Zähler und der entsprechende Spaltenname zu String Allerdings gibt es ein kleines Problem: die CRM-Anwendung erfordert Vor- und Nachname, aber die generierten Benutzer haben nur ein vollständiges Namensfeld Wir müssen es mit Leerzeichen in 2 aufteilen Das Ergebnis des Teilungsvorgangs ist ein Array von Zeichenfolgen, also für den Vornamen erhalten wir das erste Element und für den Nachnamen den zweiten; Null und eins ist das erste und zweite Element in nullbasierter Nummerierung Diese Methode ist nicht 100 % genau für alle Arten von Namen, aber in unserem Beispiel funktioniert sie Wie Sie vielleicht erraten haben, muss man manchmal ein bisschen probieren, um diese richtige Formel zu finden, und hier hat ein Aufspalten des Prozesses, wie wir es getan haben, riesige Vorteile Denn sonst müssten wir den ganzen Prozess jedes Mal laufen lassen, wenn wir ihn testen wollen, auch den Teil, der Benutzer generiert Und das wollen wir natürlich nicht: es geht viel schneller, nur diesen Workflow auszuführen OK, das sollte genügen Als Nächstes richten wir eine Variable ein – wir nennen sie HaveError – um nachzuverfolgen, wie die Operation abgeschlossen wird – erfolgreich oder nicht Dass der Prozess bis hierher gelangt ist, bedeutet, dass er erfolgreich war, weswegen wir es auf False setzen Dann werden wir für Debugging und Fortschrittsverfolgung die erfolgreiche Operation melden

Aber noch wichtiger ist, wir wollen den Status des Vorgangs in die Exceldatei schreiben Wir fügen also eine Excel ApplicationScope hinzu und lassen sie die gleiche “Benutzerdatei” öffnen, die wir im Startwerte-Workflow gespeichert haben Fügen Sie dann eine WriteCell-Aktion hinzu, um den OK-Status zu schreiben Die tatsächliche Position der Zelle ist ein wenig ausgeklügelt, so funktioniert es: Wenn wir einen Blick auf die Excel-Datei werfen, wollen wir in die D-Zelle schreiben, so sollte unser Standort D sein, sowie die Zeile des aktuellen Benutzers, derjenige, den wir gerade in MyCRM App eingegeben haben Der aktuelle Index des Benutzers wird im Zähler gespeichert, aber basiert auf dem Array von Zeilen, die wir mit dem Select-Befehl erstellt haben Also suchen wir den aktuellen Benutzer in der DataTable, die alle Benutzer enthält, unter Verwendung des IndexOf-Befehls Wenn einer gefunden wird, wird der Index dieser Zeile ausgebeben; oder für uns des Nutzers Aber um genau zu sein, wir müssen auch 2 hinzufügen: eines wegen der nullbasierten Nummerierung und 1 für die Zeile mit Headers, die wir in der Excel-Datei haben Uns so finden wir den richtigen Speicherort in der Exceldatei Wiederum war ein bisschen Versuch und Irrtum beteiligt So ist dieser Workflow bereits funktionsfähig, so dass Sie ihn ausprobieren können, aber wir gehen weiter und richten den Catch-Abschnitt ein Oder auch, was passiert, wenn es ein Fehler auftritt Wie üblich beginnen wir mit der Protokollierung des Fehlers der Transaktion mit der vollständigen Nachricht und Quelle des Fehlers Dann setzen wir den Fehler-Flag auf True Dies ist wichtig, weil später wir dieses Flag zur Wiederherstellung von Fehlern verwenden Wir müssen nun, wenn ein Fehler aufgetreten ist, diesen Fehler in der Exceldatei protokollieren Also kopieren wir nur den Excel-Abschnitt aus dem Try-Block und fügen ihn hier ein, wobei wir nur die Meldung von OK zu FAIL ändern; der Ort bleibt der Gleiche Wieder in der Wurzel-Ebene des Workflows haben wir eine weitere Aktivität einzurichten: das Feld für die Entscheidung über Erfolg oder Fehler Wir haben bereits die Bedingung: Es ist die Fehler-Flag, die wir in der AddUser-Sequenz erstellt haben; Da sie ein boolescher Wert ist, ist dies alles, worum es dabei geht Um einen Absturz zu simulieren, werden wir die App manuell beenden, während der Workflow läuft, damit das Recovery-Verfahren einfach die CRM-App erneut öffnet Dies erfolgt durch Verbinden der wahren Schnittstelle der Entscheidung mit der Öffnen-Anwendungs- Aktion Je nach Art des Fehlers, den Sie wiederherstellen möchten, kann es komplexere Wiederherstellungsmethoden geben, aber in unserem Fall wird dies ausreichen Und schließlich ist es Zeit, zu sehen, wie dieser Workflow, der die zweite Hälfte des Projekts, darstellt, eigentlich funktioniert Wir öffnen die Benutzer-Excel-Datei, damit wir die Echtzeit-Rückmeldung der Operationen sehen können Hier gibt sie den ersten Benutzer aus der Excel-Datei ein und schreibt den OK-Status Und den zweiten… auch erfolgreich Wir schließen für das dritte die App, um einen Absturz nachzuahmen, und hier ist ihr Fehler-Status, und dann stellt die App sich wieder her und fährt fort, den nächsten Benutzer zu verarbeiten Wenn wir sie wieder abstürzen lassen… dasselbe Wir lassen sie sich beenden, wir wollen nicht, dass sie wütend wird 🙂 Wir sind fast fertig mit diesem Workflow, räumen wir nur noch ein wenig auf, um es besser lesbar und flexibler zu machen Erstens können wir im Projektordner, den übergeordneten aufrufenden Workflow entfernen, da wir ihn nicht mehr brauchen Und wir werden diese GetUserData-Datei umbenennen, um zu verdeutlichen, dass sie durch ihre übergeordnete Datei, GetUsers, aufgerufen wurde Viel besser Und um es flexibler zu gestalten, erstellen wir eine neue Datei, um alle Einstellungen darin zu speichern Sie können Excel-Dateien oder CSV verwenden, aber wir verwenden das Json-Format, da es das am einfachsten zu bearbeitende ist, das man in UiPath verwenden kann Also erstellen wir eine neue Datei im Projektordner, nennen wir ihn Config; und mit der grundlegenden Json Sysntax erstellen wir 2 Parameter: den Dateipfad für die Benutzer-Excel-Datei, weil sie sich sicherlich für jeden Einsatz ändern wird, und die Anzahl der Benutzer, die zu einem Zeitpunkt zu extrahieren sind Und speichern Um diese Variablen in den Workflows zu verwenden, brauchen wir zwei Aktionen Wir legen sie in der Load Users-Sequenz ab, da diese sich zu Beginn des Prozesses befindet Die erste ist Read Text File, die unsere Config-Datei lesen wird Die zweite Aktion, “Deserialize Json” ist die interessantere: sie nimmt die Informationen aus der Textdatei und gibt ein Objekt mit unseren Variablen aus der Config Datei weiter, zugänglich wie folgt: der Name des Json-Objekts, in unserem Fall – GlobalParameters, und den Namen der Variablen, die wir brauchen, UsersFilePath Das ist alles Dann kopieren wir diese 2 Aktionen und fügen Sie sie in den anderen Workflow, GetUsers, ein, irgendwo am Anfang, und erstellen die fehlenden Variablen Hier haben wir die Variable NumberOfUsers, die die Chargengröße steuert Wir geben ihr einfach den Wert aus der Konfigurationsdatei, in gleicher Weise, außer

dass wir sie jetzt in Int statt String umwandeln Und in der Write-Excel-Aktion geben wir ihr den gleichen globalen Parameter, UserFilePath Jetzt können Sie die Config-Datei bearbeiten, um den vollständigen Pfad der Excel-Datei zu ändern, oder die Anzahl der jeweils kopierten Benutzer, und der Workflow passt sich entsprechend an Das ist alles für das heutige Video Es war länger und enthielt mehr Theorie als üblich, weil es wichtige Lektionen enthielt, die Ihnen helfen, effiziente und zuverlässige Automatisierungen in jeder Umgebung zu entwickeln Bis zum nächsten Mal, auf Wiedersehen!