23 julio 2013

Relación de todas las entidades con su StateCode y StatusCode

Entidad
statecode
statuscode
Account (account)
0 Active
1 Active
1 Inactive
2 Inactive
Activity (activitypointer)
0 Open
1 Open
1 Completed
2 Completed
2 Canceled
3 Canceled
3 Scheduled
4 Scheduled
Appointment (appointment)
0 Open
1 Free
2 Tentative
1 Completed
3 Completed
2 Canceled
4 Canceled
3 Scheduled
5 Busy
6 Out of Office
Article (kbarticle)
1 Draft
1 Draft
2 Unapproved
2 Unapproved
3 Published
3 Published
Campaign (campaign)
0 Active
0 Proposed
1 Ready To Launch
2 Launched
3 Completed
4 Canceled
5 Suspended
Campaign Activity (campaignactivity)
0 Open
0 In Progress
1 Proposed
4 Pending
5 System Aborted
6 Completed
1 Closed
2 Closed
2 Canceled
3 Canceled
Campaign Response (campaignresponse)
0 Open
1 Open
1 Closed
2 Closed
2 Canceled
3 Canceled
Case (incident)
0 Active
1 In Progress
2 On Hold
3 Waiting for Details
4 Researching
1 Resolved
5 Problem Solved
2 Canceled
6 Canceled
Case Resolution (incidentresolution, notcustomizable)
0 Open
1 Open
1 Completed
2 Closed
2 Canceled
3 Canceled
Contact (contact)
0 Active
1 Active
1 Inactive
2 Inactive
Contract (contract)
0 Draft
1 Draft
1 Invoiced
2 Invoiced
2 Active
3 Active
3 On Hold
4 On Hold
4 Canceled
5 Canceled
5 Expired
6 Expired
Contract Line (contractdetail)
0 Existing
1 New
1 Renewed
2 Renewed
2 Canceled
3 Canceled
3 Expired
4 Expired
Currency (transactioncurrency)
0 Active
0 Active
1 Inactive
1 Inactive
Discount (discounttype)
0 Active
100001 Active
1 Inactive
100002 Inactive
E-mail (email)
0 Open
0 Draft
8 Failed
1 Completed
2 Completed
3 Sent
4 Received
6 Pending Send
7 Sending
2 Canceled
5 Canceled
Fax (fax)
0 Open
0 Open
1 Completed
2 Completed
3 Sent
4 Received
2 Canceled
5 Canceled
Invoice (invoice)
0 Active
1 New
2 Partially Shipped
4 Billed
5 Booked (applies to services)
6 Installed (applies to services)
1 Closed (deprecated)
3 Canceled (deprecated)
7 Paid in Full (deprecated
2 Paid
100001 Complete
100002 Partial
3 Canceled
100003 Canceled
Lead (lead)
0 Open
1 New
2 Contacted
1 Qualified
3 Qualified
2 Disqualified
4 Lost
5 Cannot Contact
6 No Longer Interested
7 Canceled
Letter (letter)
0 Open
1 Open
2 Draft
1 Completed
3 Received
4 Sent
2 Canceled
5 Canceled
Marketing List (list)
0 Active
0 Active
1 Inactive
1 Inactive
Opportunity (opportunity)
0 Open
1 In Progress
2 On Hold
1 Won
3 Won
2 Lost
4 Canceled
5 Out-Sold
Order (salesorder)
0 Active
1 New
2 Pending
1 Submitted
3 In Progress
2 Canceled
4 No Money
3 Fulfilled
100001 Complete
100002 Partial
4 Invoiced
10003 Invoiced
Phone Call (phonecall)
0 Open
1 Open
1 Completed
2 Made
4 Received
2 Canceled
3 Canceled
Price List (pricelevel)
0 Active
100001 Active
1 Inactive
10002 Inactive
Product (product)
0 Active
1 Active
1 Inactive
2 Inactive
Quote (quote)
0 Draft
1 In Progress
1 Active
2 In Progress
3 Open
2 Won
4 Won
5 Out-Sold
3 Closed
5 Lost
6 Canceled
7 Revised
Service Activity (serviceappointment)
0 Open
1 Requested
2 Tentative
1 Closed
8 Completed
2 Canceled
9 Canceled
10 No Show
3 Scheduled
3 Pending
4 Reserved
6 In Progress
7 Arrived
Task (task)
0 Open
2 Not Started
3 In Progress
4 Waiting on someone else
7 Deferred
1 Completed
5 Completed
2 Canceled
6 Canceled

09 julio 2013

Nuevos precios Dynamics CRM Online

Buenas a todos,
 
Al parecer ( la noticia es muy reciente , del día de  ayer 8 de julio )   , pero Microsoft ha anunciado cambios en los precios y modelo de licenciamiento para CRM ONLINE.
 
A diferencia de la versión OnPremise , la versión Online hasta el momento tiene 1 sólo modelo de licenciamiento full por 44.16 €  usuario / mes ( precio final IVA incluído).
 


Los modelos que al parecer se homologarán son los siguientes.
 
  • Profesional ($ 65 *) Para los usuarios de CRM principales, que necesitan todas las capacidades de Microsoft Dynamics CRM, incluyendo la automatización de fuerza de ventas, así como el marketing y atención al cliente. Creemos que la mayoría de los usuarios encontrarán esta licencia se ajusta mejor a sus necesidades.

  • Basic ($ 30 *) Para las ventas, el servicio y los usuarios de marketing que necesitan para manejar cuentas, contactos, clientes potenciales, los casos y acceder a las aplicaciones personalizadas, así como para los analistas de negocios que necesitan funciones de elaboración de informes.

  • Essential ($ 15 *) Para los usuarios ligeros que necesitan acceder a las aplicaciones personalizadas desarrolladas en casa o por nuestra amplia red de colaboradores.
 
Probablemente la licencia actual de 44.16 € pueda corresponderse con la Licencia Professional  ( es precio similar ) pero se crea la ventaja de poder obtener una  licencia más barata ( Basic ) para aquellos usuarios que no requieren toda la funcionalidad , lo que hace al producto más competente respecto a otras soluciones que hay en el mercado.
 

Nota original

http://community.dynamics.com/crm/b/crmconnection/archive/2013/07/08/introducing-a-more-flexible-and-personal-way-to-buy-microsoft-dynamics-crm-online.aspx#.Udrls_nvs9Z

Os comentaremos cuando esté oficializado también por esta vía.
 
Carolina Martínez

04 junio 2013

Cambiar FetchXml de Subgrid

- Las subgrids en formulario sirven para mostrar una lista de registros relacionados con el registro actual, o todos los tipos de registros, según la configuración establecida para la subgrid

- Para filtrar sus registros de forma personalizada podemos implementar la siguiente funcionalidad mediante código js en el formulario

- En este ejemplo tenemos una subgrid que muestra los registros de la entidad Account y queremos customizar la consulta que contiene, para que muestre los registros filtrados por su campo name, para ello modificaremos la propiedad FetchXml de la subgrid mediante los métodos expuestos por el control del componente grid

- La customización es la siguiente, y filtrará la grid mostrando sus campos en el que el valor del campo name de Account contenga la búsqueda introducida



- La función jscript que llamará el botón es la siguiente:

function changeQuery() {

    var value = Xrm.Page.getAttribute("new_search").getValue();

    var fetchXml =
        '' +
          '' +
            '' +
            '' +
            '' +
            '' +
            '' +
            '' +
              '' +
            '' +
          '' +
          '';

    var grid = document.getElementById("Accounts");

    grid.control.SetParameter("FetchXml", fetchXml);
    grid.control.refresh();
}


- El resultado es mostrado a continuación:



- El método de control utilizado para establecer el FetchXml de la subgrid es "SetParameter", para Rollup 12+, para sistemas con Rollups anteriores al 12, debe utilizar el método "setParameter"

Desde Innovar Tecnologías esperamos que este documento les sea de ayuda en su desarrollo

09 mayo 2013

Profile SQL de Consultas CRM

- Cuando implementamos aplicaciones que realizan operaciones sobre CRM, debemos tener en cuenta todas las capas que intervienen en cada operación, desde la consulta mediante SDK, al web service de CRM que procesa la petición, hasta la capa de datos SQL

- En este ejemplo vamos a lanzar una consulta de Actividades cuyo campo Referente a sea una entidad de tipo Account, y comprobaremos la consulta efectiva mediante SQL Profiler

- Comprobar y medir estos tiempos de respuesta puede ser decisivo para perfilar la implementación de la consulta desde SDK

- El código de consulta es el siguiente

QueryExpression qe = new QueryExpression(ActivityPointer.EntityLogicalName)
{
    Distinct = true,
    ColumnSet = new ColumnSet(new string[] { "subject", "actualstart", "actualend" }),
    LinkEntities = { new LinkEntity() 
    {
        LinkFromEntityName = ActivityPointer.EntityLogicalName,
        LinkToEntityName = Account.EntityLogicalName,
        LinkFromAttributeName = "regardingobjectid",
        LinkToAttributeName = "accountid"
    }}
};

EntityCollection ec = orgService.RetrieveMultiple(qe);

foreach (ActivityPointer ap in ec.Entities)          
    Console.WriteLine(ap.Subject);



- Para comprobar el proceso de consulta interno en SQL iniciaremos la tool SQL Profiler de nuestro servidor SQL de CRM y comenzaremos una nueva traza



- En la selección de eventos de profile marcaremos las opciones de traceo, en nuestro caso son las secciones SQL:BatchCompleted y SQL:BatchStarting las que capturarán la sentencia SQL generada por la consulta desde SDK



- El resultado cuando la consulta ha completado es el siguiente:

- En el resultado del informe podemos distinguir columnas como ApplicationName, NTUserName, y LoginName, distintivas de la aplicación SDK y la autenticación provista, y la duración de proceso de la consulta





Innovar Tecnologías

04 mayo 2013

Dynamics CRM: la curva Social

- La adquisición por parte de Microsoft de la empresa sueca de análisis de redes sociales NetBreeze, supondrá la llegada de nuevas implementaciones en próximos releases de Dynamics CRM

- En la Convergence 2013 fue presentado un avance de las próximas novedades, la demo presentada incluye las siguientes capacidades

- Gráficas de los posts según lenguaje, producto, fuente social, y total de posts

- Análisis de los productos de interés

- Análisis de las fuentes según canal

- Estadísticas de opiniones a lo largo del tiempo

- Respuesta de posts individuales desde el sistema



- El acceso a estos add ons será parte base de Dynamics CRM, sin adquisición de licencia adicional

- Las fechas de disponibilidad de estas nuevas implementaciones se esperan con la llegada de próximas releases, "Gemini", "Leo", o "Vega"

- Desde la Comunidad CRM estaremos atentos a próximas noticias sobre la llegada de Social CRM

- Saludos desde Innovar Tecnologías ©

25 abril 2013

Convertir QueryExpression a FetchXml

- Cuando realizamos consultas mediante RetrieveMultiple en CRM 2011, resulta más óptimo enviar como parámetro la consulta construida en FetchXml que en QueryExpression, podemos comprobar estos resultados comparando los tiempos de respuesta mediante StopWatch

- Una ventaja significativa de utilizar FetchXml en nuestras consultas es además el soporte a funciones de agrupación y agregados, por ejemplo 'AVG' o 'SUM'

- En caso de tener la consulta ya construida en QueryExpression, podemos hacer uso del mensaje QueryExpressionToFetchXmlRequest para recuperar la consulta enviada en QueryBase en forma de FetchXml

- En este ejemplo tenemos la siguiente consulta en QueryExpression:

QueryExpression query_exp = new QueryExpression();
query_exp.EntityName = ServiceAppointment.EntityLogicalName;
query_exp.ColumnSet = new ColumnSet(new string[] { "actualstart", "subject" });

ConditionExpression c_owner = new ConditionExpression("ownerid", 
    ConditionOperator.EqualUserId);

ConditionExpression c_state_Open = new ConditionExpression("statecode", 
    ConditionOperator.Equal, (int)ServiceAppointmentState.Open);
ConditionExpression c_state_Scheduled = new ConditionExpression("statecode", 
    ConditionOperator.Equal, (int)ServiceAppointmentState.Scheduled);

FilterExpression f_sa_state = new FilterExpression(LogicalOperator.Or);
f_sa_state.Conditions.AddRange(new ConditionExpression[] 
    { c_state_Open, c_state_Scheduled });

ConditionExpression c_actualend = new ConditionExpression("actualend", 
ConditionOperator.Between, new object[] { new DateTime(2012, 6, 1), 
    new DateTime(2013, 6, 1) });

FilterExpression f_sa = new FilterExpression(LogicalOperator.And);
f_sa.AddCondition(c_actualend);
f_sa.AddFilter(f_sa_state);

ConditionExpression c_state_Active = new ConditionExpression("statecode", 
    ConditionOperator.Equal, (int)AccountState.Active);
FilterExpression f_account = new FilterExpression(LogicalOperator.And);
f_account.AddCondition(c_state_Active);

LinkEntity link_activity_pointer = new LinkEntity();
link_activity_pointer.LinkFromEntityName = ServiceAppointment.EntityLogicalName;
link_activity_pointer.LinkFromAttributeName = "activityid";
link_activity_pointer.LinkToEntityName = ActivityParty.EntityLogicalName;
link_activity_pointer.LinkToAttributeName = "activityid";

LinkEntity link_account = new LinkEntity();
link_account.LinkFromEntityName = ActivityParty.EntityLogicalName;
link_account.LinkFromAttributeName = "partyid";
link_account.LinkToEntityName = Account.EntityLogicalName;
link_account.LinkToAttributeName = "accountid";
link_account.LinkCriteria = f_account;

link_activity_pointer.LinkEntities.Add(link_account);

query_exp.Criteria = f_sa;

query_exp.LinkEntities.Add(link_activity_pointer);

EntityCollection svcApps = CrmSvc.RetrieveMultiple(query_exp);


- Para obtener el equivalente a la consulta en FetchXml añadiremos las siguientes líneas de código al programa:

QueryExpressionToFetchXmlRequest convert_request = new QueryExpressionToFetchXmlRequest();
convert_request.Query = query_exp;
QueryExpressionToFetchXmlResponse convert_response = 
    (QueryExpressionToFetchXmlResponse)CrmSvc.Execute(convert_request);
Console.WriteLine(convert_response.FetchXml);


- El resultado indentado de la cadena devuelta por la respuesta es el siguiente




Desde Innovar Tecnologías esperamos que este documento les sea de ayuda en su desarrollo