Variable window.IsUSD = true que introduce USD sobre el header

Una de las funcionalidades que más destaca del Unified Service Desk es la integración nativa con los formularios de CRM mediante la navegación a una URL de nuestra instancia. Además de esto, el USD nos permite por lo general navegar a cualquier otra dirección que deseemos mediante la UIIAction Navigate. Esto nos permitirá abrir aplicaciones web externas dentro de nuestro USD. ¿Es posible desde una aplicación web saber si la navegación se ha producido dentro de una pestaña del USD? La respuesta es sí: mediante la variable window.IsUSD.

El Unified Service Desk se toma la molestia de introducir en el Header de cada web que se carga un pequeño fragmento de código Javascript como el siguiente:

 

 

De modo que mediante el acceso a esta variable podremos saber si nuestra aplicación web -o nuestro Web Resource incrustado en un formulario de CRM- ha sido visitada desde un USD.

Variable IsUSD en el Header de Google

Variable IsUSD en el Header de Google

 

En el caso de que estemos navegando sobre un formulario de CRM, el USD también incluirá esta variable en el Header de los Iframes que contiene (Iframes normales o Webresources).

Variable IsUSD en el Header de Bing abierto en un Iframe de un formulario CRM

Variable IsUSD en el Header de Bing abierto en un IFrame de un formulario CRM

 

Variable IsUSD en el Header de un Web Resource de un formulario CRM

 

Pero, ¿en qué situaciones podríamos aprovecharnos de este hecho?

Las razones por las cuales necesites saber si un USD ha abierto tu aplicación web pueden ser muchas, pero existe un gran motivo por el cuál esa variable está ahí.

De modo nativo, el USD nos avisa de eventos generados en cualquier formulario. Un ejemplo sería un evento OnSave de un formulario. Este evento se envía al USD y éste lo recibe pudiendo generar con él una Action Call que derive en cualquier otra acción o ejecución de código. El método que utiliza CRM para “avisar” al USD de que en el formulario se ha producido un evento de guardado es mediante la ejecución de un comando Javascript del tipo:

 

Cuando el USD detecta que queremos navegar a una web del dominio event lo interpretará como que esa página web le está avisando de un evento y no realizará la navegación.

Y aquí está la clave de la variable IsUSD. Si incluimos una linea como la anterior en un Web Resource y abrimos el formulario desde un navegador y no desde el USD, el navegador ejecutará esa orden produciendo que la página navegue a esa “URL”. El resultado será que nuestro navegador nos abrirá una ventana de una página web totalmente ajena a nuestro proyecto y que por supuesto mostrará publicidad de cualquier tipo.

Esta aquí uno de los motivos por los cuales Microsoft ha incluido esta funcionalidad de inyectar sobre cualquier web una variable que nos avise de que la navegación se está produciendo desde USD y no desde otro navegador. Mediante la verificación de esta variable podremos ahorrarnos ejecutar esa orden de evento si la navegación está fuera del USD añadiendo a nuestro código la siguiente comprobación:

Con ello podremos controlar este hecho en nuestras aplicaciones web

Navegando en el mismo formulario con y sin USD

Navegando en el mismo formulario con y sin USD

 

4 Responses

  1. javi 6 julio, 2016 / 17:08

    Hola Daniel, tengo un problema en el USD y no sé como resolverlo.

    Tengo creado un Hosted Control con las siguientes características:

    Tipo de componente: Aplicación hospedad de CCA
    Tipo de aplicación hospedad: Aplicación hospedada externa.

    Quiero situarla en el RightPanel.
    El problema viene aquí, hay veces que se carga correctamente en el RightPanel y hay otras veces que se carga en modo ventana flotante y el RightPanel queda vacío.

    ¿Es un fallo de Microsoft a la hora de cargar el hosted control?
    Muchas gracias.

    View Comment
    • Daniel Diaz Granizo 8 julio, 2016 / 9:21

      Hola Javi. Cuando incrustas una aplicación externa en USD intervienen muchas variables como el tipo de aplicación, el comportamiento de la aplicación, y también la configuración del hosted control (que a su vez depende enormemente de la versión de soluciones que hayas importado en CRM). Con la información que me das no puedo ayudarte pero tenía pensado escribir un post sobre ese tema en las próximas semanas. Espero que te ayude.

      View Comment
      • javi 18 julio, 2016 / 16:54

        Hola Daniel y gracias por responder.
        Ya lo he solucionado, el fallo viene de que se carga antes el hosted control que el right panel, por tanto en la configuración del hosted control hay una entrada que pone Tiempo de espera de, he puesto por ejemplo 30000 milisegundos (30 segundos) y carga bien siempre dentro del right panel.

        View Comment
        • Daniel Diaz Granizo 18 julio, 2016 / 17:21

          Hola Javi
          Desconocía este comportamiento pero ahora que lo comentas tiene sentido. Puedes también hacer la prueba de cargar los hosted controls en orden, uno detrás del otro. Puedes poner en el Sort Order (un campo del hosted control) para el panel un order bajo (por ejemplo 5) y para el hosted control de la aplicación uno más salto (tipo 300). Esto produce que se cargue primero uno y después el otro lo que en principio te garantiza que estará el panel cuando cargue la aplicación

          View Comment

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *