domingo, 29 de enero de 2017

USD - Cómo cambiar el nombre y el logo

Cómo no, para estos menesteres ya hay que ir tocando algo de código, pero no demasiado ;)

Paso 1: Cambiar nombre
Para cambiar el nombre y/o apariencia de la denominada splash screen al abrir USD tenemos que agregar un fichero XAML a la carpeta donde tengamos instalado el cliente de USD.

Éste es el código:
1:  <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
2:            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
3:            xmlns:resx1="clr-namespace:Microsoft.Crm.UnifiedServiceDesk.Properties">  
4:   <Style x:Key="FormAppNameStyle" TargetType="TextBlock">  
5:    <Setter Property="Foreground" Value="Blue"></Setter>  
6:    <Setter Property="FontFamily" Value="Segoe UI"></Setter>  
7:    <Setter Property="FontSize" Value="40"></Setter>  
8:    <Setter Property="Background" Value="White"></Setter>  
9:    <Setter Property="Text" Value="[Nombre de la Compañía]"></Setter>  
10:   </Style>  
11:   <Style x:Key="SplashAppNameStyle" TargetType="Label">  
12:    <Setter Property="Foreground" Value="Blue"></Setter>  
13:    <Setter Property="FontFamily" Value="/UnifiedServiceDesk;component/Fonts/#Segoe UI"></Setter>  
14:    <Setter Property="FontSize" Value="40"></Setter>  
15:    <Setter Property="Content" Value="[Nombre de la Compañía]"></Setter>  
16:   </Style>  
17:   <Style x:Key="SplashScreenDefaultFontStyle" TargetType="TextBlock">  
18:    <Setter Property="FontSize" Value="14px"/>  
19:    <Setter Property="Foreground" Value="Black"/>  
20:    <Setter Property="TextWrapping" Value="Wrap"/>  
21:    <Setter Property="TextTrimming" Value="WordEllipsis"/>  
22:    <Setter Property="FontFamily" Value="Calibri"/>  
23:   </Style>  
24:   <Style x:Key="SplashGridBgColor" TargetType="Grid">  
25:    <Setter Property="Background" Value="Gray"></Setter>  
26:   </Style>  
27:  </ResourceDictionary>  

Fijaros bien en las líneas 9 y 15, son las que mostrarán el nombre de nuestra compañía, empresa, cliente, etc...

Lo guardamos con el nombre CustomerSplashStyles.xaml en la carpeta donde se instaló el cliente de USD y al abrir USD tendremos esto:



Paso 2: Cambiar el logo que se mostrará cuando USD se abra.

  • Lo primero de todo como imaginarás es tener el logo [de la compañía], yo me he creado una imagen PNG simplemente con el MsPaint de Windows de 160 x 25 pixels

  • Subir esta imagen como un webresource al entorno de Dynamics 365
  • Editar el Hosted Control "Custom Panel": Ir a Configuración, Unified Service Desk, Hosted Controls
  • Cambiar la línea 25
  • 25:  <Image Style="{DynamicResource USDLogo}" Grid.Column="0" ToolTip="Unified Service Desk" AutomationProperties.Name="Unified Service Desk" />  
    
    Por esta otra:
    25:  <Image Source="{Binding Source=new_logo, Converter={StaticResource CRMImageLoader}}" Style="{DynamicResource USDLogo}" Grid.Column="0" ToolTip="[Nombre de la Compañía] Service Desk" AutomationProperties.Name="Unified Service Desk" />  
    
    Importante recalcar que "new_logo" es el nombre que le hemos dado al WebResource que contiene el logo.
  • Comprobamos el cambio abriendo el cliente de USD

USD - Arrancando

Aunque podéis encontrar bastante documentación sobre Unified Service Desk, escribo este post para haceros más fácil entrar en el mundo del Contact Center, Customer Services o como lo queráis llamar.

Paso 1: Descarga del cliente y del instalador en el servidor
https://www.microsoft.com/en-US/download/details.aspx?id=50355

Paso 2: Instalación
La instalación del cliente es muy sencilla, la típica "next, next, finish"
Para la instalación en el servidor, deberíamos disponer previamente de un entorno de Dynamics 365, si aún no lo tienes ve a este link donde podrás conseguir una trial gratuita de 30 días.
Ahora vamos a instalar USD en nuestro entorno de Dynamics:
  • Ejecuta el Dynamics USD Package Deployer
  • Selecciona un directorio en tu equipo para extraer todos los ficheros y cuando llegues a esta ventana:
    Selecciona la primera opción para hacer una instalación en limpio. Básicamente instala dos soluciones UiiForMicrosoftDynamicsCRM201 DynamicsUnifiedServiceDesk con lo mínimo para abrir un USD conectado a ese entorno. El resto de opciones instalan además datos de configuración de ejemplo.
Paso 3: Abrir nuestro nuevo USD
  • Ejecuta el acceso directo al cliente de USD que te creó el instalador.
  • Cambia las credenciales, apuntando a tu entorno de Dynamics 365
y listo! 

jueves, 29 de enero de 2015

Cómo depurar plugins en CRM 2013 / 2015 / 2016 Online


Vamos a depurar código de nuestro plugin de una forma muy sencilla y en breves pasos:

Requisitos previos:
Descargar la SDK de CRM2013

Paso 1
Una vez instalada/descomprimida la SDK ir a la carpeta Tools y ejecutar PluginRegistration.exe
Tendremos que indicar la conexión, usuario, etc... para conectar con el entorno de desarrollo y obtendremos una ventana parecida a esta:


Paso 2
Hay que seleccionar el step que vamos a depurar y después pulsar en el botón Start Profiling.


No es necesario modificar el popup de la configuración del profiler, pulsa directamente OK.


Paso 3
Abrir el registro que vayamos a depurar, realizar la acción que hayamos programado, en este caso es al activar una oferta. (Recordar registrar el evento en el constructor de la clase del plugin)
base.RegisteredEvents.Add(new Tuple>(40, "SetStateDynamicEntity", "quote", new Action(PostActivate)));

Nos saldrá el siguiente popup:


Paso 4
Descargamos el fichero de texto y lo adjuntaremos al Plugin Registration, para ello hay que pulsar el botón Debug en la barra del Plugin Registration, aparece la siguiente ventana, deberéis rellenar los campos y adjuntar en VS2012 el Pluginregistratrion process para depurar.


Finalmente sólo hay que pulsar el botón "Start Execution" para que arranque la depuración, acordaos de poner algún breakpoint porque sino... pasará de corrido.



NOTA: si os fallara al poner el fichero en la ventana "Replay Plug-in Execution" es posible que tengáis desactualizado el Profiler, para ello desinstalarlo (hay un botón Uninstall en la barra) e instalarlo de nuevo, se descargará la ultima versión.

lunes, 5 de enero de 2015

Microsoft jubila a su navegador IExplorer


A partir del día 21 de Enero de 2015 estará disponible el nuevo navegador de Windows: Spartan (aún no está confirmado este nombre) con Windows 10.
El soporte a IExplorer seguirá pero dejará de ser el navegador por defecto del sistema.
Mas info: ZDNet

lunes, 30 de abril de 2012

Valores de los Picklist en tus consultas SQL

Si te dedicas a personalizar el CRM de tu compañía lo más probable es que ya le hayas metido mano "por debajo" al entramado de SQL. Y este código que os paso aquí es bastante útil a la hora de obtener el literal de un picklist para una consulta o report.

Es tan sencillo como crearos una función en la BD del CRM, tal que así:

CREATE FUNCTION ObtenerValor (  @entidad varchar(50),
@atributo varchar(50),
@id int
)
RETURNS varchar(500)
BEGIN
DECLARE  @return varchar(500)
SET @return = (

SELECT StringMap.Value AS DisplayValue
FROM StringMap 
 INNER JOIN MetadataSchema.Entity 
 ON StringMap.ObjectTypeCode = etadataSchema.Entity.ObjectTypeCode
WHERE (MetadataSchema.Entity.Name Like @entidad)
AND (StringMap.AttributeName Like @atributo)  
AND (StringMap.AttributeValue = @id)

)
return @return
END

y después la llamáis en vuestra consulta:

SELECT 
 dbo.ObtenerValor('new_candidato', 'New_Departamento', c.New_Departamento) AS DEPARTAMENTO
FROM New_candidatoExtensionBase

Acordaos de darle permisos de ejecución de la función al usuario que lance la query.


martes, 17 de abril de 2012

Windows 2008 R2 bootable con Windows 7 instalado

¿Estás empezando en esto de la virtualización o crear una nube (y no de café)?
Pues aquí os dejo este post para preparar un equipo con una maquina virtual (que será Windows Server 2008 R2). La idea es 'cacharrear' con el PC/Portatil procurando incidir lo menos posible en la configuración ya existente (Windows 7 instalado).

Es sencillo:
  1. Iniciar el equipo con el DVD de Windows 20008 y 'siguiente, siguiente...' hasta llegar a la pantalla donde tienes que seleccionar la unidad en la que vas a instalar.
  2. Pulsar Mayusculas + F10 para que aparezca la ventana de comandos. Vereis que directamente sale la ruta X:\Source>
  3. Hay que averiguar la letra de la unidad donde está instalado el sistema. Para ello basta con probar en la linea de comandos DIR C:\  ó DIR D:\ ó DIR E:\ etc....
  4. Ahora teclead el comando DISKPART. Es una utilidad de windows para hacer particiones, crear discos virtuales, etc...
  5. Creamos el disco virtual con el comando:
    CREATE VDISK FILE="D:\nombre_deldisco.vhd" TYPE=EXPANDABLE MAXIMUM=40000
  6. Adjuntamos el disco virtual con el comando:
    ATTACH VDISK
  7. Salimos del DISKPART con el comando EXIT.
Ahora lo único que tenéis que hacer es darle al botón "Refrescar" de la ventana donde aparecían las unidades para instalar el sistema y os aparecerá un disco nuevo con el espacio que le hemos dado (en este ejemplo 40GB). Seleccionáis ese disco y despues pulsáis en el botón "Opciones de unidad" aplicamos el tamaño que nos indica que será el disco completo y continuar la instalación como haríamos normalmente en un disco en limpio (siguiente, siguiente...)

Eso es todo, os dejo un tutorial donde se explica este proceso en Youtube:




jueves, 30 de junio de 2011

Cómo incluir ficheros .JS externos en nuestro CRM 4.0

Desarrollar introduciendo javascript en los eventos de los formularios es un verdadero coñazo porque tienes que grabar, publicar, probar, etc... Existe un método más sencillo y es, referenciar en el evento del formulario un fichero .js publicado en un sitio externo pudiendo ser incluso en una parte del site de nuestro CRM. De este modo solo tenemos que edita el .js con Visual Studio y probarlo directamente una vez subidos los cambios.


Cread un .js que contenga al menos una función llamada ejecutarOnLoad() y dentro de ella todo el código que querais que ejecute el evento en el formulario. Publicadlo y después escribid este código en el evento OnLoad()
var scriptEntidad = document.createElement('script');
scriptEntidad.language = 'javascript';
scriptEntidad.src = 'http://servidor/sitioweb/JS/vacacionesOnLoad.js';
scriptEntidad.onreadystatechange = OnScriptReadyState;
document.getElementsByTagName('head')[0].appendChild(scriptEntidad);
function OnScriptReadyState() {
    if (event.srcElement.readyState == "loaded" || event.srcElement.readyState == "complete") {
        ejecutarOnLoad();
    }
}

Publicar la entidad y listo!