Entorno:
- Versión de ArcGIS Enterprise: 12.1
- Versión de Experience Builder: 1.20.0
- Navegador/SO: Chrome
Resumen:Un widget personalizado registrado como un recurso remoto (isRemote: true) en Portal funciona correctamente mientras se configura una Experience, pero después de guardar la Experience, el context.isRemote del widget cambia a false y context.folderUrl se convierte en una ruta malformada que contiene la cadena literal undefined, en lugar de conservar la URL remota original del widget.
Pasos para reproducir:
- Registrar un widget personalizado en Portal como una app/widget de Experience Builder alojado en un servidor externo
- Crear una nueva Experience y arrastrar el widget al lienzo
- En esta etapa, inspeccionar this.props.context dentro del widget muestra:
{
"isRemote": true,
"folderUrl": "https://myserver/xwd/customwidget/"
}
- Guardar la Experience
- Después de guardar (o recargar la app publicada), el mismo contexto muestra:
{
"isRemote": false,
"folderUrl": "https://portalURL/apps/experiencebuilder/experience/../cdn/359/undefined"
}
Comportamiento esperado:context.folderUrl debería continuar apuntando a la URL remota original del widget (o resolver a una ruta válida y accesible), tanto antes como después de guardar la Experience.
Comportamiento real:El widget intenta cargar sus propios recursos estáticos (en nuestro caso, un iframe apuntando a ${context.folderUrl}dist/runtime/assets/some.html) desde una URL inválida:
https://portalURL/portal/apps/experiencebuilder/experience/../cdn/359/undefineddist/runtime/assets/some.html
lo que resulta en un error 404 y el widget no logra renderizar su contenido en la app publicada.
Impacto:El widget personalizado no funciona en la app de producción publicada, aunque funciona correctamente durante la configuración/vista previa en Builder.
Este error también afecta al favicon, por lo que el resultado es que no hay icono para el widget.
Código relevante (extracto):
<iframe
id="myWidget"
src={`${this.props.context.folderUrl}dist/runtime/assets/some.html`}
width="100%"
height="90%"
/>