UiPath Documentation
studio
latest
false
Studio-Benutzerhandbuch
Wichtig :
Es kann 1–2 Wochen dauern, bis die Lokalisierung neu veröffentlichter Inhalte verfügbar ist.

Schreiben von Canvas-freundlichen codierten Workflows

Empfehlungen für die Strukturierung codierter Workflows, sodass der Low-Code-Viewer sie als saubere, lesbare Low-Code-Diagramme anzeigt.

Mit einer kleinen Struktur ist ein langer Weg zu einer sauberen Arbeitsfläche. Die folgenden Empfehlungen helfen der Low-Code-Anzeige, Ihren codierten Workflow als lesbare Low-Code-Blöcke anstelle von undurchsichtigen Codeblöcken anzuzeigen. Sie sind nach Auswirkungen geordnet, beginnend mit den Änderungen, die am wichtigsten sind.

UiPath-Dienste über manuell gelaufenen Code

Aufrufe der Dienste des Projekts – system.AddQueueItem(...), excel.ReadRange(...), mail.SendSmtp(...), uiAutomation.Click(...) – werden als Rich-Aktivitätskarten benutzerfreundlich: ein Anzeigename, das Dienstsymbol, bearbeitbare Eigenschaften und eine typisierte Ausgabevariable.

Derselbe Vorgang, der von Grund auf implementiert wurde – mit HttpClient, System.IO oder einer NuGet-Excel-Bibliothek – wird bestenfalls als Assign-Karte mit einem langen Ausdruck und im schlimmsten Fall als Codeblock gerendert. Wenn Sie zuerst nach den Aktivitätspaketen greifen und nur dann auf benutzerdefiniertes C# zurückgreifen, wenn keine Aktivität den Bedarf abdeckt, bleibt mehr vom Workflow sichtbar.

// Renders as a "Write Range" activity card with editable properties:
excel.WriteRange("C:\\out.xlsx", "Sheet1", "A1", table);

// Renders as an opaque code block:
using var writer = new StreamWriter("C:\\out.csv");
// Renders as a "Write Range" activity card with editable properties:
excel.WriteRange("C:\\out.xlsx", "Sheet1", "A1", table);

// Renders as an opaque code block:
using var writer = new StreamWriter("C:\\out.csv");

Die Eingabemethode als Orchestrierungsebene

Die Diagrammansicht zeichnet nur die Eingabemethode ([Workflow] oder Execute). Jeder Aufruf einer Ihrer eigenen Methoden wird zu einem einzigen beschrifteten Block, und seine Auswahl wird in den Helper integriert.

Wenn Sie die Verzweigungen, Schleifen und Fehlerbehandlung auf höchster Ebene in der Eingabemethode beibehalten und detaillierte Schritt-Sequences in gut benannte private Methoden verschieben, wird das Diagramm als sauberer Fluss auf hoher Ebene gelesen – ValidateInvoicePostToQueueNotifyFinance – anstelle einer Barriere von Karten auf niedriger Ebene. Jeder Helper erhält auch einen eigenen Abschnitt in der Workflow-Ansicht, sodass nichts ausgeblendet wird. Namen, die die Absicht offenlegen, sind hier doppelt wichtig: Der Methodenname ist die Blockbeschriftung.

Steuerelementfluss als Anweisungen, nicht als Ausdrücke

Die Arbeitsfläche kann nur Verzweigungen und Schleifen erstellen, die auf Anweisungsebene vorhanden sind. Logik, die in Ausdrücken stecken bleibt – Lambdas, linq-Kette (Language Integrated Query), verschachtelte Tesser oder switch -Ausdrücke – wird auf eine einzige Karte komprimiert, was den Zweck des Visualisierungsdrucks zunichte macht.

Die Unterscheidung switch ist erwähnenswert: Eine switch -Anweisung wird vollständig als Switch-Container mit einem Zweig pro Fall gerendert, während das Ausdrucksformular (var label = total switch { ... };) in einer einzigen Assign-Karte komprimiert bleibt. Die Anweisungsform ist die bessere Wahl, wenn die Verzweigung ein Prozessschritt ist, den ein Leser sehen sollte.

// Invisible logic — one code block, the filtering and branching are not drawn:
invoices.Where(i => i.Amount > 1000).ToList().ForEach(i => Approve(i));

// Visible logic — a loop containing a decision containing an Invoke block:
foreach (var invoice in invoices)
{
    if (invoice.Amount > 1000)
    {
        Approve(invoice);
    }
}
// Invisible logic — one code block, the filtering and branching are not drawn:
invoices.Where(i => i.Amount > 1000).ToList().ForEach(i => Approve(i));

// Visible logic — a loop containing a decision containing an Invoke block:
foreach (var invoice in invoices)
{
    if (invoice.Amount > 1000)
    {
        Approve(invoice);
    }
}

Ein linq-Einzeiler ist noch in Ordnung, wenn es sich um eine einfache Projektion handelt, deren Detail Sie gerne ausblenden möchten (var names = rows.Select(r => r.Name).ToList(); wird als eine Zuweisen-Karte gerendert). Als Fingerregel gilt: Wenn ein Leser des Diagramms die Verzweigung sehen sollte, schreiben Sie sie als if, switch oder foreach.

Renderbare Entsprechungen für Fallback-Konstrukte

Mehrere gängige Konstrukte greifen auf Codeblöcke zurück. Jeder hat ein renderbares Äquivalent, das stattdessen sichtbare Blöcke erzeugt.

AnstattSchreibenWeil
list.ForEach(x => ...)foreach (var x in list)Der Textkörper wird zu sichtbaren Blöcken
Lokale FunktionenPrivate MethodenPrivate Methoden werden als navigierbare Invoke-Blöcke gerendert
using var handle = excel.UseWorkbook(...);using (var handle = excel.UseWorkbook(...)) { ... }Das Blockformular wird als Scope-Frame gerendert und lässt Aufrufe von handle darin als Aktivitäten auflösen
int a = 1, b = 2;Eine Deklaration pro ZeileJede wird zu einer eigenen Zuweisen-Karte
string result;result = ...; späterEine Deklaration mit einem Initialisierungspunkt bei der ersten VerwendungEinfache Deklarationen greifen auf Codeblöcke zurück

Inline-Variablendeklarationen, eine pro Anweisung

Eine Deklaration mit einem Initialifizierer wird als Zuweisen-Karte (oder als Ausgabe einer Aktivitätskarte) gerendert und fügt den Variablenbereich pro Methode hinzu. Eine leere Deklaration wird als Codeblock gerendert. Wenn Sie jede Variable deklarieren, wo ihr Wert zuerst erzeugt wird, bleibt sie sichtbar.

var asset = system.GetAsset("Config");        // activity card, output: asset
int retryCount = 0;                            // Assign card, typed
var asset = system.GetAsset("Config");        // activity card, output: asset
int retryCount = 0;                            // Assign card, typed

Explizite Typen, für die der Betrachter sie nicht ableiten kann

Die Arbeitsfläche beschriftet jede Ausgabevariable mit dem besten Typ, den sie finden kann:

  • Bei erkannten Aktivitätsaufrufen stammt der Typ automatisch aus den Paketmetadaten. var asset = system.GetAsset(...) zeigt bereits den echten Rückgabetyp an, sodass var dort nichts kostet.
  • Für alles andere – einfache Zuweisungen, Aufrufe Ihrer eigenen Methoden und berechnete Ausdrücke – wird var wörtlich als var angezeigt. Ein expliziter Typ bringt den echten Typ auf die Karte und in den Panel Variablen.
var totals = ComputeTotals(rows);        // Variables panel shows: totals : var
DataTable totals = ComputeTotals(rows);  // Variables panel shows: totals : DataTable
var totals = ComputeTotals(rows);        // Variables panel shows: totals : var
DataTable totals = ComputeTotals(rows);  // Variables panel shows: totals : DataTable

Kommentare, die die Absicht beschreiben

Ein // -Kommentar, der direkt über einer Aktivität, einem Methodenaufruf, if, foreach, for, switch, try, return oder #region platziert wird, wird an diesen Block angehängt. Es wird zur Beschreibung der Karte in der Diagrammansicht, zum Zeilen-Tooltipp in der Workflowansicht und zum Feld Beschreibung im Eigenschaftenbereich. Aufeinanderfolgende Kommentarzeilen werden verbunden.

// High-value invoices need manual approval before posting
system.AddQueueItem("InvoiceApproval", reference: invoice.Id);
// High-value invoices need manual approval before posting
system.AddQueueItem("InvoiceApproval", reference: invoice.Id);

Kommentare, die sich nicht über einer solchen Anweisung befinden, werden als ihre eigenen kleinen Codezeilen gerendert, sodass ein gezielter Kommentar pro Schritt besser lesbar ist als ein vereinzelter Kommentar.

Prozessphasen gruppiert nach Regionen

#region Name ... #endregion wird in beiden Ansichten als benannte, reduzierbare Gruppe gerendert, und Regionen können verschachtelt werden. Wenn Regionen nach Geschäftsphasen benannt werden – Login, Process invoices, Reporting – liest sich ein reduziertes Diagramm wie eine Prozesszusammenfassung, und das Erweitern einer Region zeigt die Schritte an.

Mindestens zwei aufeinanderfolgende Zuweisungen werden in einer einzigen Mehrfachzuweisungskarte zusammengefasst. Das Initialisieren zusammengehöriger Werte in einer ununterbrochenen Ausführung hält sie auf einer aufgeräumten Karte, anstatt sie über den gesamten Flow zu vereinzeln. Umgekehrt sollte sich eine Zuweisung, die eine eigene Karte sammelt, von anderen Zuweisungen abheben.

Ein Aufruf pro Anweisung

Wenn Aufrufe verkettet sind (row.GetValue("col").ToString().Trim()), kann der Betrachter die Kette nur als einzelne Zeile anzeigen und Ketten auf nicht erkannten Empfängern werden vollständig zurückgesetzt. Wenn Sie eine aussagekräftige Kette in Schritte mit benannten Zwischenvariablen aufteilen, erhält jeder Schritt einen eigenen Block. Bei Handle-APIs wie Excel-Arbeitsmappen und E-Mail-Ordnern kann der Betrachter auch das Handle nachverfolgen, sodass Folgeaufrufe als richtige Aktivitäten dargestellt werden.

Erkennbare Workflow-Aufrufe

  • workflows.MyOtherWorkflow(arg1, arg2) wird als dedizierte Invoke Workflow-Karte gerendert, wobei jedes Argument durch Richtung (In, Out oder InOut) und Navigation zur Workflow-Datei gekennzeichnet ist.
  • SharedHelpers.Method(...) ruft in eine andere .cs Datei des Projekts als navigierbare Invoke-Blöcke auf. Wenn Sie diese als einzigen Aufruf pro Anweisung halten, anstatt als Teil einer längeren Kette, können Sie diese auflösen.

Kurze Checkliste

  • Schritte verwenden Aktivitätsdienste (system., excel., mail. und ähnliche), keine manuellen Äquivalente.
  • Die [Workflow] -Methode ist kurz und orchestriert gut benannte private Methoden.
  • Verzweigungen und Schleifen sind Anweisungen (if, switch, foreach, for, while, try) ohne Logik, die in Lambdas oder linq-Pipelines ausgeblendet ist.
  • Variablen werden inline, eine pro Anweisung, mit einem Initialisierungsfaktor deklariert.
  • Explizite Typen werden verwendet, wenn der Betrachter keinen ableiten kann, z. B. Ergebnisse der Hilfsmethode und berechnete Werte.
  • Über jedem wichtigen Schritt befindet sich ein einzeiliger // -Kommentar.
  • Prozessphasen sind in #region eingebunden.
  • Jede Anweisung enthält einen Dienst- oder Hilfeaufruf ohne lange Ketten.
  • Andere Workflows werden durch workflows.X(...) aufgerufen.
  • Auf der Arbeitsfläche bleiben keine grauen Codeblockkarten – jede ist eine Stelle, an der die visuelle Ansicht sehen muss.

War diese Seite hilfreich?

Verbinden

Benötigen Sie Hilfe? Support

Möchten Sie lernen? UiPath Academy

Haben Sie Fragen? UiPath-Forum

Auf dem neuesten Stand bleiben