- Versionshinweise
- Erste Schritte
- Einstellung und Konfiguration (Setup and Configuration)
- Automationsprojekte
- Über die Veröffentlichung von Automatisierungsprojekten
- Entwerfen von Automatisierungen
- Verwalten von Aktivitätspaketen
- Konfigurieren von Aktivitätsprojekteinstellungen
- Signieren von Paketen
- Governance
- Importieren von Entitäten
- Verknüpfen eines Projekts mit einer Idee im Automation Hub
- Verwenden des Data Managers
- Abhängigkeiten
- Workflow-Typen
- Kontrollfluss
- Dateivergleich
- Beste Praktiken für die Automatisierung (Automation Best Practices)
- Integration der Quellenkontrolle
- Informationen zur Versionskontrolle
- Verwalten von Projekten mit TFS
- Verwalten von Projekten mit SVN
- Workflow Diff
- Debugging
- Protokollierung
- Das Diagnose-Tool
- Workflow-Analyse
- Über die Workflow-Analyse
- ST-NMG-001 – Namenskonvention für Variablen
- ST-NMG-002 – Namenskonvention für Argumente
- ST-NMG-004 – Duplizierung des Anzeigenamens
- ST-NMG-005 – Variable überschreibt Variable
- ST-NMG-006 – Variable überschreibt Argument
- ST-NMG-008 – Variablenlänge überschritten
- ST-NMG-009: Datentabellenvariablen mit Präfix versehen
- ST-NMG-011 – Datentabellenargumente mit Präfix versehen
- ST-NMG-012 – Standardwerte für Argumente
- ST-NMG-016 – Argumentlänge überschritten
- ST-NMG-017 – Der Klassenname stimmt mit dem Standard-Namespace überein
- ST-DBP-002 – Hohe Anzahl von Argumenten
- ST-DBP-003 – Leerer Catch-Block
- ST-DBP-007 – Mehrere Flussdiagrammebenen
- ST-DPB-010 – Mehrere Instanzen von [Workflow] oder [Testfall]
- ST-DBP-020 – Nicht definierte Ausgabeeigenschaften
- ST-DBP-021 – Hartcodiertes Timeout
- ST-DBP-023 – Leerer Workflow
- ST-DBP-024 – Prüfung der Persistenzaktivität
- ST-DBP-025 – Voraussetzung für Variablenserialisierung
- ST-DBP-026 – Verwendung der Verzögerungsaktivität
- ST-DBP-027 – Bewährte Methode für Persistenz
- ST-DBP-028 – Voraussetzung für Argumentenserialisierung
- ST-USG-005 – Hartcodierte Aktivitätsargumente
- ST-USG-009 – Nicht verwendete Variablen
- ST-USG-010 – Nicht verwendete Abhängigkeiten
- ST-USG-014 – Paketbeschränkungen
- ST-USG-017 – Ungültiger Parametermodifizierer
- ST-USG-020 – Minimale Protokollmeldungen
- ST-USG-024 – Nicht verwendet, gespeichert für später
- ST-USG-025 – Missbrauch gespeicherter Werte
- ST-USG-026 – Aktivitätseinschränkungen
- ST-USG-027 – Erforderliche Pakete
- ST-USG-028 – Aufruf von Dateivorlagen einschränken
- ST-USG-032 – Erforderliche Tags
- ST-USG-034 – Automation Hub-URL
- Variablen
- Argumente
- Importierte Namespaces
- Codierte Automatisierungen
- Einleitung
- Registrieren von benutzerdefinierten Diensten
- „Vor“- und „Nach“-Kontexte
- Generieren von Code
- Generieren eines codierten Testfalls aus manuellen Testfällen
- Integrieren von OpenAI in codierte Workflows
- Beantragen eines Kredits bei der UiBank
- Warteschlangengenerierung mit codierten Workflows und Orchestrator-APIs
- Verwenden importierter Bibliotheksprojekte in codierten Automatisierungen
- Verwenden der zweistufigen Authentifizierung in codierten Automatisierungen
- Triggerbasierte Attended-Automatisierung
- Objekt-Repository
- Das Tool ScreenScrapeJavaSupport
- Erweiterungen
- Über Erweiterungen
- SetupExtensions-Tool
- „UiPathRemoteRuntime.exe“ wird nicht in der Remotesitzung ausgeführt.
- UiPath Remote Runtime blockiert das Schließen der Citrix-Sitzung
- UiPath Remote Runtime verursacht Speicherverlust
- Versionen von UiPath.UIAutomation.Activities-Paket und UiPath Remote Runtime stimmen nicht überein
- Die erforderliche UiPath-Erweiterung ist auf der Remotemaschine nicht installiert
- Einstellungen für die Bildschirmauflösung
- Gruppenrichtlinien
- Kommunikation mit Browser nicht möglich
- Die Chrome-Erweiterung wird automatisch entfernt
- Möglicherweise ist die Erweiterung beschädigt
- Überprüfen Sie, ob die Erweiterung für Chrome installiert und aktiviert ist
- Überprüfen Sie, ob ChromeNativeMessaging.exe ausgeführt wird
- Überprüfen der korrekten Definition der ComSpec-Variablen
- Aktivieren Sie den Zugriff auf Datei-URLs und den Inkognito-Modus
- Mehrere Browser-Profile
- Group Policy conflict
- Spezifische bekannte Probleme für MV3-Erweiterungen
- Liste der Erweiterungen für Chrome
- Chrome-Erweiterung für Mac
- Gruppenrichtlinien
- Kommunikation mit Browser nicht möglich
- Die Edge-Erweiterung wird automatisch entfernt
- Möglicherweise ist die Erweiterung beschädigt
- Überprüfen, ob die Erweiterung für Microsoft Edge installiert und aktiviert ist
- Überprüfen Sie, ob ChromeNativeMessaging.exe ausgeführt wird
- Überprüfen der korrekten Definition der ComSpec-Variablen
- Aktivieren des Zugriffs auf Datei-URLs und den InPrivate-Modus
- Mehrere Browser-Profile
- Group Policy conflict
- Spezifische bekannte Probleme für MV3-Erweiterungen
- Liste der Erweiterungen für Edge
- Erweiterung für Safari
- Erweiterung für VMware Horizon
- Erweiterung für Amazon WorkSpaces
- SAP Solution Manager-Plugin
- Excel-Add-in
- Studio Testing
- Fehlersuche und ‑behebung
- Informationen zur Fehlerbehebung
- Fehler bei der Assembly-Kompilierung
- Microsoft App-V – Unterstützung und Einschränkungen
- Fehlerbehebung bei Internet Explorer x64
- Probleme in Microsoft Office
- Erkennen von UI-Elementen in PDF mit Zugriffsoptionen.
- Reparieren der Active Accessibility-Unterstützung
- Die Validierung großer Windows-Legacy-Projekte dauert länger als erwartet

Studio-Benutzerhandbuch
Registrieren von benutzerdefinierten Diensten
Um Ihre codierten Automatisierungen zu verbessern, sollten Sie benutzerdefinierte Dienste registrieren. Durch die Registrierung eines benutzerdefinierten Dienstes können Sie ihn global in Ihrem Projekt verwenden. So ist er nicht nur in einer einzelnen codierten Automatisierung, sondern in allen codierten Automatisierungen innerhalb Ihres Projekts zugänglich.
- Erstellen Sie eine Code-Quelldatei und definieren Sie eine öffentliche Oberfläche mit dem Namen des Dienstes, den Sie erstellen möchten. In dieser Oberfläche sollten die Methoden aufgeführt sein, die Sie mit Ihrem benutzerdefinierten Dienst verwenden möchten. Jede Methode muss in eine separate Klasse implementiert werden, welche die gleiche Datei erbt, in der Sie die Schnittstelle definieren.
In diesem Beispiel benennen Sie die Schnittstelle IMyService und rufen Sie die darin enthaltene Methode DoMyMethod auf.
{
public interface IMyService
{
void DoMyMethod();
}
}
{
public interface IMyService
{
void DoMyMethod();
}
}
- Gehen Sie zu einer anderen Code-Quelldatei und implementieren Sie die Methoden über die zuvor erstellte Oberfläche. Diese Klasse muss aus derselben Code-Quelle übernehmen, in der die öffentliche Oberfläche erstellt wurde.
In diesem Beispiel implementieren Sie die Methode DoMyMethod, um den Wert einer Variablen auszugeben.
public class MyService : IMyService
{
public void DoMyMethod()
{
var a = "hello world";
Console.WriteLine(a);
}
}
}
public class MyService : IMyService
{
public void DoMyMethod()
{
var a = "hello world";
Console.WriteLine(a);
}
}
}
- Erstellen Sie eine partielle Klasse, um Ihren benutzerdefinierten Dienst zu umschließen, sodass er von jedem codierten Workflow aus zugänglich ist, der diese Klasse erbt.
- Erstellen Sie eine weitere Codequelldatei und deklarieren Sie die öffentliche partielle Klasse mit dem Namen
Coded Workflow. Lassen Sie diese Klasse die KlasseCodedWorkflowBaseerben. - Erstellen Sie eine „get-only“-Eigenschaft (nur Abrufen) für Ihren erstellten benutzerdefinierten Dienst, die den Zugriff auf eine Instanz der Dienstschnittstelle ermöglicht.
- Erstellen Sie eine weitere Codequelldatei und deklarieren Sie die öffentliche partielle Klasse mit dem Namen
Die Instanz wird per Abhängigkeitsinjektion mit der Methode serviceContainer.Resolve<IMyService>() abgerufen. Dies bietet eine Möglichkeit, mit dem benutzerdefinierten Dienst in der partiellen Klasse zu interagieren.
```
public IMyService myService { get => serviceContainer.Resolve<IMyService>()};
```
```
public IMyService myService { get => serviceContainer.Resolve<IMyService>()};
```
3. Erweitern Sie Ihre Klasse weiter, indem Sie die RegisterServicesMethode hinzufügen. Durch das Aufrufen dieser Methode registrieren Sie Ihren benutzerdefinierten Dienst im UiPath-Dienstcontainer.
```
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
{
serviceLocator.RegisterType<IMyService, MyService>();
}
```
```
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
{
serviceLocator.RegisterType<IMyService, MyService>();
}
```
Sie können auch RegisterInstanceanstelle von RegisterType. Aktivieren Sie die folgenden Unterschiede zwischen den beiden Implementierungen und ihren Signaturmethoden: * RegisterType – Wenn Sie RegisterType, geben Sie den Container an, um bei jedem Aufruf eine neue Kopie oder Instanz Ihres Dienstes zu erstellen.RegisterType gibt eine Blaupause an, auf der jedes Mal ein neuer Dienst erstellt wird. + TService: Dies ist der Typ der Dienstoberfläche, der vom Dienst verwendet wird. Dies ist die Oberfläche, die Sie für Ihren Dienst erstellen. Für dieses Beispiel ist es IMyService. + TServiceImplementation: Dies ist die Klasse, die die TService Oberfläche implementiert. Es ist die Klasse, die erstellt wird, wenn ein Dienst vom Typ TServiceangefordert wird. + registrationType: Dies ist standardmäßig CodeServiceRegistrationType.Singleton. Es legt die Richtlinie für die Dienstregistrierung fest.
```
void RegisterType<TService, TServiceImplementation>(CodeServiceRegistrationType registrationType = CodeServiceRegistrationType.Singleton)
where TService : class
where TServiceImplementation : class, TService;
```
* `RegisterInstance` - When you use `RegisterInstance`, you offer the container a ready-made instance of that service, that you already created before. Every time you call the service, the container returns this exact pre-made service. `RegisterInstance` returns an exact copy of the service that you created.
+ `TServiceImplementation`: This is the ready-made instance of a class that you have already created. This instance is returned whenever a service of this type needs to be resolved. For this example, `MySecondService`.
+ `serviceTypes`: This is an array of types that the instance will be available as, when calling it.
```
void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes)
where TServiceImplementation : class;
```
```
void RegisterType<TService, TServiceImplementation>(CodeServiceRegistrationType registrationType = CodeServiceRegistrationType.Singleton)
where TService : class
where TServiceImplementation : class, TService;
```
* `RegisterInstance` - When you use `RegisterInstance`, you offer the container a ready-made instance of that service, that you already created before. Every time you call the service, the container returns this exact pre-made service. `RegisterInstance` returns an exact copy of the service that you created.
+ `TServiceImplementation`: This is the ready-made instance of a class that you have already created. This instance is returned whenever a service of this type needs to be resolved. For this example, `MySecondService`.
+ `serviceTypes`: This is an array of types that the instance will be available as, when calling it.
```
void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes)
where TServiceImplementation : class;
```
Das folgende Code-Snippet zeigt ein Beispiel dafür, wie die öffentliche partielle Klasse implementiert wurde:
public partial class CodedWorkflow : CodedWorkflowBase
{
public IMyService myService { get => serviceContainer.Resolve<IMyService>() ; }
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
{
// Implementation using 'RegisterType'
serviceLocator.RegisterType<IMyService, MyService>();
// Implementation using 'RegisterInstance'
var secondService = new MySecondService();
serviceLocator.RegisterInstance<MySecondService>(secondService);
}
public partial class CodedWorkflow : CodedWorkflowBase
{
public IMyService myService { get => serviceContainer.Resolve<IMyService>() ; }
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
{
// Implementation using 'RegisterType'
serviceLocator.RegisterType<IMyService, MyService>();
// Implementation using 'RegisterInstance'
var secondService = new MySecondService();
serviceLocator.RegisterInstance<MySecondService>(secondService);
}
Nächste Schritte
Um den von Ihnen erstellten benutzerdefinierten Dienst zu verwenden, verweisen Sie auf den Namespace dieses Dienstes in der Datei, an der Sie arbeiten, indem Sie die Anweisung using verwenden. Der Namespace des benutzerdefinierten Dienstes stellt den Namen des Projekts und den Namen der Ordner/Unterordner dar, in denen sich die .cs-Datei möglicherweise befindet. Das Format des Namespace ist wie folgt: <ProjectName>.<Folder>.<SubFolder>
Wenn Sie beispielsweise einen benutzerdefinierten Dienst innerhalb eines Projekts namens GeneralCustomServices im Ordner MyCustomService erstellen, dann lautet der Namespace dieses Dienstes: GeneralCustomServices.MyCustomService.