Spiga

Seguridad en las reglas de Workflow en Microsoft CRM 3.0

Hoy quería comentarles un problema que tuve hace un tiempo con con los Wokflows en Microsoft CRM 3.0.

Es una practica común abrir el Workflow Manager (Administrador de flujos de trabajo) para crear alguna regla de Workflow y hacerlo con el administrador de CRM... y acá empezó mi problema.

El problema básicamente era que tenía una regla sobre la entidad de cuenta creada con una cuenta de usuario con el rol de administrador de CRM. La regla era algo muy sencillo, "Al crear una cuenta enviar un e-mail a la misma dándole la bienvenida como cliente".

Por supuesto active la regla y al crear una cuenta... nada. No se disparaba la regla. Probé reiniciando el servicio de Workflow.. y nada tampoco.

En el visor de eventos encontraba el siguiente error:

Condition {7565170E-646D-DC11-9B9A-001320950F24} failed in step {7265170E-646D-DC11-9B9A-001320950F24} of process instance {6A65170E-646D-DC11-9B9A-001320950F24}. Please view the paused rule in the Microsoft.Crm.Workflow.Monitor for more information about the failure.

Y en el Monitor de flujos de trabajo??.. ni la regla aparecía, mas allá que el error logueado en el visor de eventos indicaba que para obtener mas información lo verifique allí.

Después de varias idas y vueltas encontré el problema. El usuario con el que creé la regla estaba en modo de acceso restringido. Esto era así por que el usuario cumplía el rol de administrador de CRM y no de usuario de la aplicación, y no tenia sentido utilizar una licencia con ese usuario.

La explicación del por que no funciona se basa en que las reglas automáticas (no manuales) se impersonan, es decir, se ejecutan bajo los permisos del usuario que creó la regla.

En este caso como el usuario estaba en modo de acceso restringido no podía realizar las acciones que pretendía la regla de Workflow realizar.

Aprovecho la oportunidad para comentarles algunas otras cosas a tener en cuenta sobre el usuario que crea las reglas de Workflow son:

  • Si el usuario que propietario de la regla pertenece a la unidad de negocios principal, la regla se aplica a la unidad de negocios principal y todas las unidades de negocios que dependen de ella.
  • Se desprende del hito anterior, que para crear reglas que sean disparadas para una unidad de negocio en particular y todas sus "hijas", el Workflow se debe crear con un usuario de dicha unidad de negocios.
  • La cuenta de usuario que crea la regla debe tener privilegios de acceso a nivel de organización sobre Procesos e Instancias de procesos.
  • La cuenta de usuario que crea la regla debe tener privilegios para realizar las acciones que en el Workflow se realizan.
Otro dato importante a tener en cuenta es que al reasignar registros del propietario del Workflow, este no se reasigna.

Como conclusión, verifiquen antes de crear una regla de Workflow, con que cuenta de usuario lo van a realizar!!.

Saludos

Instancias nombradas de SQL Server y Microsoft CRM 3.0

Hola a todos.
Hoy voy a escribir sobre algo que en un principio era una restricción para la implementación de Microsoft CRM 3.0.

Microsoft CRM 3.0 no se puede instalar sobre una instancia nombrada de SQL Server.

La realidad es que ya hace bastante tiempo que esto es soportado por el equipo de desarrollo de CRM, el problema es que el asistente de diagnostico de entorno que verifica los pre requisitos para la instalación, no nos permite comenzar con la instalación si encuentra que la instancia de SQL es nombrada.

El problema se da por que el equipo de desarrollo comenzó a soportar este tipo de instalación una vez liberado el release de Microsoft CRM 3.0, por lo tanto el control de pre instalación sigue verificando que la instancia no sea nombrada.

Me decidí a realizar este post, (aunque no sea una novedad), por el hecho de que todos comentan que esta soportado pero pocos explican como poder instalarlo en este entorno.

Vamos al grano, para poder realizar la instalación lo que debemos hacer es un bypass del asistente del diagnostico de entorno.

Para lograrlo hay que hacer lo siguiente:


1. En el servidor de Microsoft CRM, click Inicio, click Ejecutar, y tipear regedit .
2. Abrir la siguiente clave del registro: HKEY_LOCAL_MACHINE\Software\Microsoft
3. Si la clave de registro MSCRM ya existe, ir al punto 6. Si la clave de registro MSCRM no existe ir al punto 4.
4. Click derecho sobre Microsofr, Nuevo, y hacer click en clave.
5. Tipear MSCRM como nombre de la clave del registro.
6. Click derecho sobre MSCRM, Nuevo, click sobre el calor DWORD.

7. Tipear IgnoreChecks como nombre, presionar ENTER.
8. Click derecho sobre IgnoreChecks, y luego click en modificar.
9. En la caja de texto tipear el valor 1 , click Aceptar.
10. En el asistente de diagnostico de entorno, click en Atras, y luego click en siguiente para volver a iniciar el chequeo del asistente de diagnostico de entorno. Notaremos que el error sigue apareciendo. Sin embargo, el boton de Siguiente ahora estará habilitado. Click Siguiente. Ignorar los mensajes de error.


Bueno eso es todo

Saludos y hasta la próxima!.

Personalizando todas las vistas en Microsoft CRM 3.0

Hola a todos!.
En la entrada de hoy les voy a contar como poder personalizar todas las vistas de Microsoft CRM..., si TODAS.

Para los que están familiarizados con CRM sabrán que existen ciertas entidades que no hay posibilidad de personalizarlas, sin embargo hay un pequeño truco para poder modificar las vistas de esas entidades.


Este tip viene de vieja data, para los que utilizaron la versión 1.2 de CRM les va a sonar, ya que de esta misma forma (o similar) se podía modificar las vistas de las actividades.

Lo que hay que hacer es lo siguiente:


  1. Abrimos el explorador de internet e introducimos la siguiente URL http://crmserver_name/tools/vieweditor/viewManager.aspx?id= (No le des Intro todavía!)

  2. Seguido de "?id=" debemos copiar el GUID de la vista.
  3. Ahora si, modificamos la vista y guardamos los cambios.

  4. Publicamos todas las personalizaciones.

Antes de decirte de donde sacamos el GUID de la vista te recuerdo de debes cambiar en la URL donde dice crmserver_name por el nombre o IP de tu servidor de CRM, claro esta.

Bien ahora si vamos al GUID.
En la tabla SavedQueryBase de la base de datos COMPANY_MSCRM (Company es el nombre de la compañía, varía según cada implementación). Encontramos todos los GUID de todas las vistas que existen en nuestro CRM (Sean de sistema o no).

Lo que queda es sencillo, simplemente se busca el GUID de la vista que queremos modificar y lo copiamos seguido de la URL.

Para facilitarles un poco el trabajo me encargué de subirles en un archivo txt con todos los GUID y la descripción de cada vista. Lo puede bajar de Aqui (ViewsId.txt).

Bueno eso es todo.

Saludos

Cómo ocultar áreas en la entidad Mapa de sitio en Microsoft CRM

Todos conocemos las facilidades que nos brinda Microsoft CRM para realizar distintas modificaciones, visuales y funcionales. En esta entrada me voy a centrar en una en particular... se trata de la entidad Mapa de Sitio (Site Map).
Pero que es el Site Map??.
Site Map es una entidad en CRM la cual nos permite definir la estructura del panel de navegación de nuestra aplicación. Es decir todo lo que se encuentra en el panel ubicado a la izquierda de nuestro CRM.

Para modificar el Site Map, lo que tenemos que hacer es simplemente exportar dicha entidad desde CRM, modificar el xml y volver a importarlo.

La estructura de los elementos del xml esta compuesta por:

SiteMap : Nodo principal
Area: Como su nombre lo indica representa un area.
Group: Representa un sub agrupamiento de los elementos principales (subarea).
SubArea: Elementos principales del panel de navegacion.
Privilege: Controla cuando un elemento principal del panel (SubArea) debe ser mostrado.

Por supuesto cada uno de estos elementos tienen sus atributos, pero no es mi intención definir cada uno de ellos, ni tampoco mostrar que efectos produce su molificación, simplemente me voy a centrar en contarles el elemento Privilege.


No esta de mas decir que para obtener información de la estructura del Site Map, como la de todos sus elementos y atributos no tienen mas que buscarlo en el
SDK.

Bien comencemos entonces...


El elemento Privilege es uno de los mas interesantes por que gracias a el podemos definir si un elemento debe ser mostrado para un usuario (o rol) en particular o no. Cuando nosotros modificamos o creamos un nuevo rol de seguridad y en el definimos que no se tienen permisos sobre una determinada entidad, Microsoft CRM se encarga de "ocultar" los vínculos a esa entidad en el Site Map.

Pero que pasa si queremos ocultar un área por completo?... y esto nos pasa con el área de configuración. Mucha gente me ha consultado de como hacer para que esta área o sección no aparezca en el panel de navegación.

Pues bien lo que tenemos que hacer es utilizar el elemento Privilege, ya que cuando Microsoft CRM detecta que un rol no tiene permisos para visualizar todos los elementos SubArea de una Area, no muestra el área en cuestión.

En el SDK podemos encontrar el siguiente ejemplo:

<SubArea Id="nav_managekb" ResourceId="Homepage_KBManager" Icon="/_imgs/ico_18_126.gif" Url="/cs/home_managekb.aspx" Client="Web"> <Privilege Entity="kbarticle" Privilege="Read,Write,Create" /> lt;/SubArea>

En este caso podemos ver que el elemento Privilege afecta a la SubArea de la Kb del módulo de servicios, en el esta definiendo que el usuario para poder ver este elemento en el panel de navegación requiere de permisos para leer, escribir y crear sobre la entidad kbarticle.

Entonces si nosotros definimos que para poder ver todos los elementos SubArea de area de configuración el usuario .. por ejemplo.. debe tener permisos de creación de usuarios (los cuales generalmente tiene el administrador de la aplicación).. el área de configuración no se visualizará para quienes no lo posean.

Les dejo el codigo de como quedaría...

<Area Id="Settings" ResourceId="Area_Settings" Icon="/_imgs/settings_24x24.gif"> <Group Id="Settings"> <SubArea Id="nav_settings" ResourceId="Homepage_Settings" Icon="/_imgs/area/18_settings.gif" Url="/tools/home_tools.aspx" Client="Web" >
<Privilege Entity="systemuser" Privilege="Create" />
</SubArea> <SubArea Id="nav_syscust" ResourceId="Homepage_SystemCustomization" Icon="/_imgs/area/18_syscust.gif" Url="/tools/systemcustomization/systemcustomization.aspx" Client="Web" >
<Privilege Entity="systemuser" Privilege="Create" />
</SubArea> </Area>

Eso es todo, no duden en dejar sus comentarios o dudas sobre el artículo.

Saludos

Personalizando la entidad lista de precios y productos de la lista de precios (PriceList - ProductPriceList) 2da Parte

Continuando con la entrada anterior les voy a contar como hacer para poder crear un nuevo atributo en la entidad "Lista de precios" (PriceLevel).

Como les comenté anteriormente si intenta crear un nuevo campo se van a encontrar con el siguiente mensaje de error.


El problema es que cuando Microsoft CRM intenta crear el nuevo atributo en la base de datos no encuentra la tabla de extensión correspondiente a la entidad.

Para poder solucionar esto vamos a hacer lo siguiente:


  1. Entramos a Managmet Studio de SQL 2005 y buscamos la base de de datos de CRM (compañía_MSCRM).

  2. Creamos una nueva tabla la cual vamos a llamar "PriceLevelExtensionBase" (Sin comillas).

  3. A esta tabla le vamos a crear un único atributo de nombre "productpricelevelid" del tipo de dato uniqueidentifier, al cual lo vamos establecer como clave primaria de la tabla (Primary Key).

  4. Guardamos todos los cambios.


Bien!.. una ver hecho esto ya tenemos la tabla de extensión de nuestra entidad lista de precios... pero... como le indicamos a CRM que esa tabla es la tabla de extensión??.

Bueno.. para eso hacemos lo siguiente:

  1. Entramos a Managmet Studio de SQL 2005 pero esta vez vamos a la base metadata.

  2. Entramos a la tabla Entity y buscamos la fila correspondiente a PriceList.
  3. Buscamos la columna ExtensionTableName y la modificamos con el valor "PriceLevelExtensionBase".
  4. Guardamos todo.


Una vez terminado volvemos al CRM a intentar crear nuevamente nuestro nuevo atributo... a ver que pasa esta vez... :)

Ahí lo tienen un nuevo atributo en la lista de precios!!!..

Una vez terminado de personalizar el formulario les recomiendo que vuelvan a la tabla Entity y modifiquen nuevamente el atributo IsCustomEntity en 0. (Sólo ese).

Algunas cosas a tener en cuenta:

  1. Recuerden que esta práctica no esta soportada por Microsoft!!
  2. Tengan cuidado cuando tengan que exportar e importar la personalizacion en un nuevo entorno.
  3. Este mismo procedimiento se puede realizar también para la entidad Productos de la lista de precios (ProductPriceLevel).
  4. Esta práctica NO funciona para todas las entidades. Solo les puedo decir que lo prueben en cada caso.
  5. No esta de mas decir que hagan esto en un ambiente de prueba.

Finalmente solo me queda decir que funciona y bien. Pero como siempre tengan en cuenta que al no estar soportado nadie les asegura que ante la aplicaron de un parche o cambio de versión esto deje de funcionar. (He instalado el Rollup 1 sobre una implementación con esta práctica y no sufrió cambios).

Bueno eso es todo espero que les sea de utilidad.

Hasta la próxima!

Personalizando la entidad lista de precios y productos de la lista de precios (PriceList - ProductPriceList) 1ra Parte


Como muchos ya saben Microsoft CRM 3.0 permite modificar las distintas entidades del sistema. Ya sea modificando o creando vistas, campos del formulario, etc.

Hace ya un tiempo me surgió la necesidad de agregar un campo en la entidad lista de precios (PriceLevel).


Como simpre abrí el CRM ,me fui a personalizacion, busque la entidad lista de precios, abrí el formulario para agregar un nuevo atributo y...... y???.. nada. Nada de nada, no podía modificar ni el nombre de la entidad. Pero si la entidad es personalizable por que no puedo modificar nada???.

Buena pregunta..., y no tengo respuesta, pero lo que si se es como solucionarlo.

Antes que nada les aclaro que esta customización que les explico NO esta en lo mas mínimo soportada por Microsoft, así que toda la responsabilidad de lo que pueda pasar queda en sus manos..je.


Para resolver esto lo que hay que hacer es lo siguiente


1) Ir a la base de datos y abrir la base de datos de metadata.
2) Abrir la tabla "Entity".
3) Buscar la fila que corresponde a la entidad PriceLevel y modificar el atributo "IsCustomEntity" y "IsCustomizable" con el valor 1.

Al volver a la personalización de la entidad.. Voilà!!!


Ahora puedo modificar el formulario de la entidad cambiando las vistas, campos, agregando javascript, etc.

y agregar un nuevo atributo??...mmm. se van encontrar con un lindo error cuando CRM intente crearlo, pero no se desesperen tiene solución y se las voy a explicar en la próxima entrada!!.

Saludos y hasta entonces... :P

El comienzo...

Les doy la bienvenida a todos a mi Blog!!.
Antes que nada me gustaría presentarme y contarles un poco del motivo de este blog.
Soy de Argentina y hace un poco menos de 4 años comencé a conocer Microsoft CRM y a trabajar con él.

Desde la versión 1.0 (prefiero olvidarla) hasta hoy, realice varias implementaciones del producto, viviendo distintas experiencias, alguna buenas y otras no tanto.
Actualmente en lo que ocupo la mayor parte del tiempo es en desarrollar nuevos módulos, integraciones con distintos ERP y personalizaciones sobre CRM.
El propósito principal de este blog es poder compartir experiencias del producto con los distintos usuarios, consultores y toda aquella persona que tenga interes en la aplicación o simplemente curiosidad.

De antemano le doy las gracias a todos los que se interesen en mi blog!!..