- Primeros pasos
- Instalación y configuración
- Requisitos de hardware y software
- Acerca de las Licencias de Precios Unificados
- Acerca de las Licencias Flexibles
- Activar Studio
- Actualizar Studio
- Parámetros de la línea de comandos
- Aplicaciones y tecnologías compatibles
- Habilitación de Gmail para actividades de correo electrónico
- Deshabilitar la telemetría
- Studio Executables
- Proyectos de automatización
- Dependencias
- Tipos de flujos de trabajo
- Flujo de control
- Comparación de archivos
- Mejores prácticas de automatización
- Integración del control de código fuente
- Depuración
- Registro
- La herramienta de diagnóstico
- Analizador de flujo de trabajo
- Acerca del analizador de flujo de trabajo
- ST-NMG-001: convención sobre nombres de variables
- ST-NMG-002: convención de nombres de argumentos
- ST-NMG-004: duplicación de nombres de visualización
- ST-NMG-005: anulación de variables
- ST-NMG-006: argumentos de anulación de variables
- ST-NMG-008: longitud variable excedida
- ST-NMG-009: variables de datos prefijados
- ST-NMG-011: argumentos de prefijo Datatable
- ST-NMG-012: valores predeterminados de los argumentos
- ST-NMG-016: longitud del argumento excedida
- ST-NMG-017: el nombre de la clase coincide con el espacio de nombres predeterminado
- ST-DBP-002: recuento de Argumentos elevado
- ST-DBP-003: bloque de Catch vacío
- ST-DBP-007: múltiples capas de diagramas de flujo
- ST-DPB-010: varias instancias de [flujo de trabajo] o [caso de prueba]
- ST-DBP-020: propiedades de salida no definidas
- ST-DBP-021: tiempo de espera codificado
- ST-DBP-023: flujo de trabajo vacío
- ST-DBP-024: comprobación de actividad de persistencia
- ST-DBP-025: requisito previo para la serialización de variables
- ST-DBP-027: mejor práctica de persistencia
- ST-DBP-028: requisito de serialización de argumentos
- ST-USG-005 - Propiedades de la actividad codificadas
- ST-USG-009: variables no utilizadas
- ST-USG-010: dependencias sin utilizar
- ST-USG-014: restricciones de los paquetes
- ST-USG-017: modificador de parámetro no válido
- ST-USG-020: mensajes de registro mínimos
- ST-USG-024: guardado sin usar para más adelante
- ST-USG-025: uso incorrecto de los valores guardados
- ST-USG-026: restricciones de actividad
- ST-USG-027: paquetes necesarios
- ST-USG-028: Restringir la invocación de plantillas de archivo
- ST-USG-032 - Etiquetas obligatorias
- ST-USG-034 - URL Automation Hub
- Variables
- Argumentos
- Espacios de nombres importados
- Automatizaciones codificadas
- Introducción
- Registrar servicios personalizados
- Contextos Antes y Después
- Generando código
- Generar casos de prueba codificados a partir de casos de prueba manuales
- Integración de OpenAI con los flujos de trabajo codificados
- Solicita un préstamo con UiBank
- Generación de colas con flujos de trabajo codificados y API de Orchestrator
- Utilizar proyectos de biblioteca importados en automatizaciones codificadas
- Uso de la autenticación de dos factores dentro de automatizaciones codificadas
- Conectar a MongoDB Atlas con automatizaciones codificadas
- Solución de problemas
- Automatización atendida basada en desencadenadores
- Repo. de objetos
- La herramienta ScreenScrapeJavaSupport
- Extensiones
- Acerca de las extensiones
- Herramienta SetupExtensions
- UiPathRemoteRuntime.exe no se está ejecutando en la sesión remota
- UiPath Remote Runtime impide que la sesión de Citrix pueda cerrarse
- UiPath Remote Runtime provoca una fuga de memoria
- Las versiones del paquete UiPath.UIAutomation.Activities y UiPath Remote Runtime no coinciden
- La extensión de UiPath necesaria no está instalada en la máquina remota
- Configuración de la resolución de la pantalla
- Políticas de grupo
- No se puede comunicar con el navegador
- La extensión de Chrome se elimina automáticamente
- Es posible que la extensión se haya dañado
- Comprueba si la extensión para Chrome está instalada y habilitada
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Habilitar el acceso a las URL de archivos y el modo de incógnito
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- Lista de extensiones para Chrome
- Extensión de Chrome en Mac
- Políticas de grupo
- No se puede comunicar con el navegador
- La extensión de Edge se elimina automáticamente
- Es posible que la extensión se haya dañado
- Check if the Extension for Microsoft Edge is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and InPrivate mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- Lista de extensiones para Edge
- Extensión para Safari
- Extensión para VMware Horizon
- Extensión para Amazon WorkSpaces
- Complemento SAP Solution Manager
- Add-in de Excel
- Pruebas de Studio
- Solución de problemas
- Acerca de la resolución de problemas
- Errores de compilación del ensamblado
- Compatibilidad y limitaciones de Microsoft App-V
- Solución de problemas de Internet Explorer x64
- Problemas de Microsoft Office
- Identificación de elementos de la interfaz de usuario en PDF con opciones de accesibilidad
- Reparar Soporte Active Accessibility
- Validation of large Windows-legacy projects takes longer than expected

Guía del usuario de Studio
Registrar servicios personalizados
Para mejorar tus automatizaciones codificadas, considera registrar servicios personalizados. Al registrar un servicio personalizado, puedes utilizarlo globalmente en tu proyecto. De esta manera, es accesible no solo en una sola automatización codificada, sino en todas las automatizaciones codificadas dentro de tu proyecto.
- Crea un archivo de código fuente y define una interfaz pública llamada como el servicio que deseas crear.
Esta interfaz debe enumerar los métodos que piensas utilizar con tu servicio personalizado. Cada método debe implementarse en una clase independiente que herede el mismo archivo donde se define la interfaz.
Para este ejemplo, nombra la interfaz como IMyService y llama al método que contiene DoMyMethod.
{
public interface IMyService
{
void DoMyMethod();
}
}
{
public interface IMyService
{
void DoMyMethod();
}
}
- Continúa con otro archivo de código fuente e implementa los métodos desde la interfaz creada anteriormente.
Esta clase debe heredar del mismo archivo de código fuente donde se creó la interfaz pública.
En este ejemplo, implementa el método DoMyMethod para generar el valor de una variable.
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);
}
}
}
- Crea una clase parcial para envolver tu servicio personalizado, haciéndolo accesible desde cualquier flujo de trabajo codificado que herede esta clase.
- Crea otro archivo de código fuente y declara la clase parcial pública llamada
Coded Workflow. Haz que esta clase herede la claseCodedWorkflowBase. - Crea una propiedad de solo obtener para el servicio personalizado que creaste, que permita el acceso a una instancia de la interfaz de servicio.
- Crea otro archivo de código fuente y declara la clase parcial pública llamada
La instancia se obtiene a través de la inyección de dependencias utilizando el método serviceContainer.Resolve<IMyService>(). Esto proporciona una forma de interactuar con el servicio personalizado dentro de la clase parcial.
```
public IMyService myService { get => serviceContainer.Resolve<IMyService>()};
```
```
public IMyService myService { get => serviceContainer.Resolve<IMyService>()};
```
3. Expandir tu clase más añadiendo el método RegisterServices.
Al invocar este método, registras tu servicio personalizado dentro del contenedor de servicio de UiPath.
```
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
{
serviceLocator.RegisterType<IMyService, MyService>();
}
```
```
protected override void RegisterServices(ICodedWorkflowsServiceLocator serviceLocator)
{
serviceLocator.RegisterType<IMyService, MyService>();
}
```
También puedes utilizar RegisterInstance en lugar de RegisterType. Comprueba las siguientes diferencias entre ambas implementaciones y sus métodos de firma: * RegisterType- Cuando utilizas RegisterType, especificas el contenedor para crear una nueva copia o instancia de tu servicio cada vez que lo llames. RegisterType ofrece un plan a seguir, basándose en el cual crear un nuevo servicio cada vez. + TService: este es el tipo de interfaz de servicio que consumirá el servicio. Es la interfaz que creas para tu servicio. Para este ejemplo, es IMyService. + TServiceImplementation: esta es la clase que implementa la interfaz TService. Es la clase que se crea cuando se solicita un servicio de tipo TService. + registrationType: este valor por defecto es CodeServiceRegistrationType.Singleton. Establece la política de registro del servicio. void RegisterType<TService, TServiceImplementation>(CodeServiceRegistrationType registrationType = CodeServiceRegistrationType.Singleton) where TService : class where TServiceImplementation : class, TService; * RegisterInstance: al utilizar RegisterInstance, ofreces al contenedor una instancia lista para usar de ese servicio, que ya creaste antes. Cada vez que llamas al servicio, el contenedor devuelve este servicio prefabricado exacto. RegisterInstance devuelve una copia exacta del servicio que creaste. + TServiceImplementation: esta es la instancia lista para usar de una clase que ya has creado. Esta instancia se devuelve cada vez que se debe resolver un servicio de este tipo. Para este ejemplo, MySecondService. + serviceTypes: este es un array de tipos, la instancia estará disponible como dicho array cuando se la llame. void RegisterInstance<TServiceImplementation>(TServiceImplementation instance, params Type[] serviceTypes) where TServiceImplementation : class;
El siguiente fragmento de código muestra un ejemplo de cómo se implementó la clase parcial pública:
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);
}
Próximos pasos
Para utilizar el servicio personalizado que has creado, haz referencia al espacio de nombres de ese servicio dentro del archivo en el que estás trabajando, utilizando la instrucción using. El espacio de nombres del servicio personalizado representa el nombre del proyecto y el nombre de las carpetas/subcarpetas en las que podría estar el archivo .cs. El formato del espacio de nombres es el siguiente: <ProjectName>.<Folder>.<SubFolder>
Por ejemplo, si creas un servicio personalizado dentro de un proyecto que se llama GeneralCustomServices, dentro de la carpeta MyCustomService, entonces el espacio de nombres de ese servicio es: GeneralCustomServices.MyCustomService.