- Notas relacionadas
- Primeros pasos
- Para administradores
- Proyectos de flujo de trabajo de RPA
- Crear un flujo de trabajo RPA a partir de una idea
- Creación de un proyecto
- Cómo iniciar un flujo de trabajo de RPA
- Gestionar archivos y carpetas de proyecto
- Conectar flujos de trabajo de RPA a tus cuentas
- Configurar actividades
- Gestionar las actividades de un proyecto
- Transferir valores entre actividades
- Iterar a través de los elementos
- Gestionar los datos en un proyecto
- Configurar un proyecto para usar tus datos
- Usar recursos de archivos y carpetas
- Proyectos de aplicación
- Aplicaciones en Studio Web
- Diseñar proyectos de aplicación
- Plantillas de la aplicación
- Depuración de proyectos de aplicación
- Publicar, implementar y actualizar proyectos de aplicaciones
- Importar y exportar proyectos de aplicación
- Trabajar con entidades en un proyecto de aplicación
- Crear aplicaciones accesibles
- Añadir descriptores accesibles
- La etiqueta Accesible
- Uso del control Pestaña para la accesibilidad
- Diseñar listas y encabezados accesibles
- Diseño de aplicaciones receptivas
- Relación de contraste de color
- Estilos preestablecidos y asignaciones a nivel de aria para el control Encabezado
- Limitaciones conocidas
- Actividades de la aplicación
- Agentic processes
- Soluciones: vista previa

Guía del usuario de Studio Web
HTML personalizado
El control HTML personalizado está dirigido a usuarios avanzados y ofrece la flexibilidad de los lenguajes de programación HTML, CSS y JavaScript para crear controles personalizados e interactivos según lo requieran sus necesidades empresariales. El control incluye editores dedicados para código HTML, CSS y JavaScript, con la ventaja añadida de incorporar archivos CSS y JavaScript alojados externamente a través de URL.
-
Abrir editor de código : abre un editor de tres paneles para añadir el código HTML, CSS y JavaScript.
-
Etiqueta accesible : la descripción del control. Los lectores de pantalla utilizan esta propiedad para mejorar la accesibilidad.
-
Oculto: si es verdadero, oculta el control en tiempo de ejecución.
-
Deshabilitado : si es verdadero, hace que el control esté inactivo en tiempo de ejecución. El contenido HTML, CSS y JavaScript se carga, pero no responde a las acciones del usuario, como hacer clic.
-
Alineación de control: por defecto, hereda la alineación principal. Se puede establecer una alineación diferente a la principal. Para volver a la alineación principal, anula la selección de las opciones anuladas.
Nota: la alineación depende del diseño seleccionado para el elemento principal (Vertical vs Horizontal). - Borde : el borde del control. Se puede configurar el grosor del borde y el radio .
-
Margen: el margen del control. De forma predeterminada, se establece un margen de 4px. Se combinan las propiedades de los márgenes superiores/inferiores e izquierdos/derechos. Estas propiedades se pueden separar utilizando el botón Enlace situado a la derecha de la sección Margen.
-
Tamaño: el ancho y la altura del control. El tamaño está establecido como
auto
de forma predeterminada. Para establecer valores mínimos o máximos, haz clic en el icono de tres puntos (...).
El editor de código del control HTML personalizado proporciona tres paneles para introducir código en los lenguajes de programación HTML, CSS y JavaScript. Cada editor es compatible con IntelliSense, o la finalización automática de código, y el resaltado de sintaxis.
El código de los paneles se compila en un proyecto y se renderiza en Apps Studio para su vista previa. Para observar la funcionalidad del control, previsualiza la aplicación.
-
Cada editor tiene un tamaño máximo de contenido de 5 MB. Cuando el contenido supera este tamaño, ya no se pueden guardar los cambios.
-
IntelliSense no funciona para los códigos CSS y JavaScript escritos en el editor HTML.
Si ya tienes estilos o scripts definidos, puedes hacer referencia a ellos en el control, sin necesidad de escribir el código en los paneles CSS o JavaScript correspondientes.
.css
o .js
existentes:
-
En el Editor de código del control HTML personalizado, cambia a la pestaña Recursos externos .
-
En la sección CSS, añade un archivo CSS externo. El archivo debe estar alojado en una URL accesible por red para garantizar la compatibilidad y la disponibilidad donde se ejecuta la aplicación.
-
En la sección JavaScript, añade un archivo de script externo. El archivo debe estar alojado en una URL accesible por red para garantizar la compatibilidad y la disponibilidad donde se ejecuta la aplicación.
-
Cuando hayas terminado de añadir todos los recursos externos, haz clic en Guardar.
De forma predeterminada, la tecla Tab añade un espacio de tabulación dentro del editor actual. Para personalizar el comportamiento de la tecla Tab, utiliza los siguientes atajos:
SO |
Atajo |
Comportamiento |
---|---|---|
Ventanas |
CTRL+M |
Indica a la tecla Tabulador que navegue entre los paneles y cambie el enfoque en los botones visibles del editor. Presiona CTRL+M de nuevo para volver al comportamiento predeterminado de la pestaña. |
MacOS |
CTRL+Mayús+M | Indica a la tecla Tabulador que navegue entre los paneles y cambie el enfoque en los botones visibles del editor. Presiona CTRL+Shift+M de nuevo para volver al comportamiento de pestaña predeterminado. |
<body></body>
de un bloque de código HTML.
Por ejemplo, para añadir el elemento contenedor para un gráfico circular interactivo en tu aplicación, utilizarías el siguiente fragmento de código HTML:
<canvas id="myChart" class="chart-container" style="width:100%;max-width:600px"></canvas>
<canvas id="myChart" class="chart-container" style="width:100%;max-width:600px"></canvas>
Donde:
-
id="myChart"
hace referencia al elemento JavaScript "myChart" que genera el gráfico circular interactivo dentro del elemento HTML. Para obtener más información, consulta El editor de JavaScript. -
class="chart-container"
se refiere a la clase CSS "chart-container" que añade el estilo para el gráfico circular dentro del elemento HTML. Para obtener más información, consulta El editor de CSS.
En este panel puedes introducir el estilo de tu control y los elementos que contiene.
Por ejemplo, para añadir colores y un borde al gráfico circular, utilizarías el siguiente fragmento de CSS:
.chart-container {
background-color: #f3f7e9;
border: 1px solid #cccccc;
}
.chart-container {
background-color: #f3f7e9;
border: 1px solid #cccccc;
}
En este panel puedes crear la parte interactiva de tu control, como actualizaciones de contenido oportunas, mapas o gráficos animados en 2D/3D.
Por ejemplo, para crear un gráfico circular para las ventas de productos Apple en todo el mundo, y diseñarlo para que muestre los valores del sector seleccionado, harías lo siguiente:
-
Añade el siguiente recurso externo de JavaScript:
https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js
https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js -
Utiliza el siguiente fragmento de JavaScript:
const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'pie', data: { labels: ['iPhone', 'iPad', 'MacBook', 'Apple Watch', 'AirPods'], datasets: [{ label: 'Sales', data: [120000, 80000, 50000, 40000, 30000], backgroundColor: [ '#5CB85C', // Green '#F0AD4E', // Orange '#D9534F', // Red '#5BC0DE', // Light blue '#999', // Gray ], borderColor: '#fff', borderWidth: 2, }], }, options: { plugins: { legend: { position: 'top', }, title: { display: true, text: 'Apple Products Sales', }, }, }, });
const ctx = document.getElementById('myChart').getContext('2d'); const myChart = new Chart(ctx, { type: 'pie', data: { labels: ['iPhone', 'iPad', 'MacBook', 'Apple Watch', 'AirPods'], datasets: [{ label: 'Sales', data: [120000, 80000, 50000, 40000, 30000], backgroundColor: [ '#5CB85C', // Green '#F0AD4E', // Orange '#D9534F', // Red '#5BC0DE', // Light blue '#999', // Gray ], borderColor: '#fff', borderWidth: 2, }], }, options: { plugins: { legend: { position: 'top', }, title: { display: true, text: 'Apple Products Sales', }, }, }, });
setVariable()
, getVariable()
y onVariableChange()
.
getVariable()
En el editor de JavaScript, utiliza esta función para obtener el valor de una variable existente.
internalValue
, usarías el siguiente fragmento de JavaScript:
async function init() {
let internalValue = await App.getVariable('<app_variable_name>');
}
init();
async function init() {
let internalValue = await App.getVariable('<app_variable_name>');
}
init();
-
La función
getVariable()
es asíncrona, lo que requiere que utilicesawait
. -
Si llamas a
getVariable()
dentro de una función, haz que esa función seaasync
. En el ejemplo proporcionado, creamos la funcióninit()
y la invocamos inmediatamente. -
Si llamas a
getVariable()
en un nivel superior, insértalo dentro de una funciónasync
.
async function init() {
try {
const value = await App.getVariable("test");
} catch (e) {
console.log("Error in evaluating app variable:", e);
}
}
init();
async function init() {
try {
const value = await App.getVariable("test");
} catch (e) {
console.log("Error in evaluating app variable:", e);
}
}
init();
setVariable()
En el editor de JavaScript, utiliza esta función para establecer un valor en una variable existente. El primer argumento es el nombre de la variable, y el segundo argumento es el valor que quieres establecer.
async function setValue() {
await App.setVariable('<app_variable_name>', <app_variable_value>);
}
setValue();
async function setValue() {
await App.setVariable('<app_variable_name>', <app_variable_value>);
}
setValue();
await
.
try {
App.setVariable('<app_variable_name>', <app_variable_value>);
} catch (e) {
console.log("Error in setting app variable:", e);
}
try {
App.setVariable('<app_variable_name>', <app_variable_value>);
} catch (e) {
console.log("Error in setting app variable:", e);
}
onVariableChange()
En el editor de JavaScript, utiliza esta función para escuchar los cambios de un valor de variable existente y acceder al último valor de variable.
App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
onVariableChange()
a la variable deregister
. A continuación, si quieres dejar de escuchar los cambios de variables, puedes invocar la función deregister()
:
const deregister = App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
// To stop listening for value changes, the deregister function can be invoked like below
deregister();
const deregister = App.onVariableChange('<app_variable_name>', value => {
console.log("Latest value: ", value);
});
// To stop listening for value changes, the deregister function can be invoked like below
deregister();
-
El listener se inicia después de que el control HTML personalizado se represente por completo. Si el valor de una variable cambia antes de que se inicialice el control HTML personalizado, el valor actualizado no se captura.
Para obtener el último valor de la variable, llama agetVariable()
antes de llamar aonVariableChange()
. -
El control HTML y las funciones que contiene se inicializan después de que el control se muestre en tiempo de ejecución.
Tipos de variables
Tipo de variable de aplicación |
Ejemplo de respuesta de funciones variables |
---|---|
Text (String) |
"Hello world" |
UInt64 (Int) |
100 |
Decimal number |
50.25 |
True/False (Boolean) |
Verdadero |
DateOnly |
2024-01-02 (Formato: AAAA-MM-DD) |
DateTimeOffset |
2024-01-06T09:54:41.9170000Z (Formato JS equivalente: cadena ISO de objeto de fecha) |
AppsFile: valor de un control de selector de archivos | Objeto de archivo JS
|
AppsFile: valor creado a partir de la URL
Por ejemplo:
|
Objeto de archivo:
|
GUID |
"5637F7DB-391D-4C8B-805D-0A918531CA3E" |
List(Of string) | ["Banana", "Kiwi", "Apple", "Lemon"] |
ListSource(Of <Entity>) |
|
<Entity> (Single entity row) |
|
ListSource(Of <Choiceset>) |
|
Datatable |
|
-
No incluyas datos confidenciales en el control HTML personalizado debido a su acceso del lado del cliente.
-
No utilices las etiquetas
<html>
y<head>
dentro del editor HTML, ya que el código se añade automáticamente dentro de las etiquetas<body>
. -
Añade las URL de CDN de recursos externos como Bootstrap, jQuery u otros SDK de JavaScript en la pestaña Recursos externos .
-
Si quieres dejar de escuchar el cambio de variable, utiliza la función
deregister()
. -
Evita grandes bucles de datos para evitar ralentizar la aplicación y mantener el control receptivo.
-
Minimiza el uso de elementos DOM tanto como sea posible: crea elementos DOM solo cuando sea necesario y elimínalos cuando se vuelvan obsoletos.
-
Utiliza el desplazamiento infinito o virtual para grandes conjuntos de datos en lugar del desplazamiento estándar.
-
Cree y mantenga un código limpio, optimizado y sin redundancia.
-
Para conectar el control a Apps, debes utilizar las funciones variables:
getVariable()
,setVariable()
,onVariableChange()
. -
Las dimensiones del control HTML no se ajustan dinámicamente para mostrar ventanas emergentes o menús desplegables. Debes establecer manualmente el tamaño del control HTML para que se ajuste a estos menús.
-
No se puede interactuar con el control HTML durante el tiempo de diseño.
-
Las funciones
setVariable()
,getVariable()
yonVariableChange()
solo funcionan en tiempo de ejecución. -
Los cambios en los nombres de las variables o las eliminaciones de variables no se reflejan automáticamente en los editores de código. Debes actualizar manualmente el código con las variables actuales.
-
Las transferencias de datos de imagen desde el control HTML a un depósito de almacenamiento, o a una entidad que utiliza una URL de datos, no deben superar 1 MB de tamaño de archivo. Los archivos que superan este tamaño pueden causar problemas de rendimiento.
-
El control puede comunicarse con otros componentes de UiPath® , como Procesos, Colas o Depósitos de almacenamiento, solo mediante el uso de variables.
-
El código CSS preprocesado, que utiliza LESS o SCSS, es incompatible con el control HTML.
-
Las siguientes API fallan silenciosamente cuando se utilizan, debido a problemas de seguridad:
-
Descargando utilizando el atributo
download
. -
Abrir modales usando
Window.alert()
,Window.confirm()
,Window.print()
,Window.prompt()
. -
Puntero y bloqueo de orientación.
-
Navegar por el contexto del navegador de nivel superior.
-
Entrar en pantalla completa usando
requestFullscreen()
. -
Captura de pantalla usando
MediaDevices.getDisplayMedia()
. -
Acceder a la cámara o al micrófono mediante
MediaDevices.getUserMedia()
. -
Solicitar pagos.
-
Acceder a la ubicación mediante
navigator.geolocation()
. -
Compartir datos mediante
navigator.share()
.
-
- Añade un
console.log()
en el editor de JavaScript. - Abre la consola del navegador pulsando F12 y, a continuación, selecciona la pestaña Consola .
- En la configuración de la consola, marca la casilla Solo contexto seleccionado .
- En el menú desplegable de contexto de JavaScript en la parte superior de la página de la consola, selecciona la opción
html-control-base.html
para el control HTML deseado.
Los registros del control seleccionado se muestran en la consola.
Consulta el vídeo para obtener más información:
- Añade un
console.log()
en el editor de JavaScript. - Abre la consola del navegador pulsando F12 y, a continuación, selecciona la pestaña Consola .
- En la parte derecha del registro, haz clic en el mensaje de la VM.
Se abre el depurador. Selecciona tu punto de interrupción haciendo clic en el número de línea deseado.
Consulta el vídeo para obtener más información:
Propiedad VB |
Tipo de datos |
Descripción |
---|---|---|
| Cadena |
La descripción del control, utilizada por las tecnologías de accesibilidad como los lectores de pantalla. |
Hidden | Booleano | Determina la visibilidad del control HTML personalizado . Si es verdadero, oculta el control en tiempo de ejecución. |
Disabled | Booleano | Determina si el control HTML personalizado está deshabilitado. Si es verdadero, deshabilita la interacción con el control en tiempo de ejecución. El contenido HTML, CSS y JavaScript se carga, pero no responde a las acciones del usuario. |
- General
- Events
- Estilo
- Editor de código para HTML personalizado
- Añadir recursos externos
- Atajos de accesibilidad para la tecla Tabulador
- El editor HTML
- El editor de CSS
- El editor JavaScript
- Uso de variables en HTML personalizado
- Mejores prácticas para HTML personalizado
- Limitaciones funcionales
- Depurar el código de un control HTML personalizado
- Añadir y filtrar registros de consola de un control HTML personalizado
- Añadir puntos de interrupción
- Propiedades VB