jueves, 28 de noviembre de 2013

Conjunto de javascripts más comunes para Dynamics CRM 2011 (SNIPPETS PARA VISUAL STUDIO)

Hola Amigos lectores, el día de hoy les voy a publicar un conjunto de funciones Javascript que se utilizan día a día en CRM, Adicional a esto traigo un conjunto de snippet's que pueden ser utilizados desde Miscosoft Visual Studio .Net que nos servirán para brindarnos una serie de atajos a la hora de programar estos  javascripts (Dichos Snippet's los podrás encontrar al final del post).

Quiero agradecer a Juan Carlos Ortiz Cordoba (Ingeniero de desarrollo de Software) quien me ha brindado algunos snipet's y además la iniciativa de crear unos propios.

Todas estas funciones han ido surgiendo de acuerdo a las buenas prácticas que he ido encontrando en el camino y en las funciones que realizo a continuación; siempre valido que el campo al que accedo sea diferente de null con el fin de no obtener errores en los script.

Ahora si; luego de esta larga introducción voy a publicar algunas funciones comunes para CRM:

1. Obtener valor del campo

var campo = Xrm.Page.getAttribute("NombredelCampo");

if(campo != null)
{
  variable = campo.getValue();
}

2. Asignar el valor del campo

var campo = Xrm.Page.getAttribute("NombredelCampo");

if(campo != null)
{
  campo.setValue("ValorDeseado");
}

3. Hablilitar o deshabilitar un campo

var campo = Xrm.Page.getControl("NombredelCampo");

if(campo != null)
{
  // Cambiar true o false según el valor deseado.
  campo.setDisabled(false);
}

4. Mostrar u Ocultar un campo

var campo = Xrm.Page.getControl("NombredelCampo");

if(campo != null)
{
  // Cambiar true o false según el valor deseado.
  campo.setVisible(true);
}

5. Obtener el valor de la etiqueta de un option Set

var campo = Xrm.Page.getAttribute("NombredelCampo");

if(campo != null)
{
  // Cambiar true o false según el valor deseado.
  variable = campo.getSelectedOption().text;
}

6. Obtener el valor de la etiqueta de un option Set

var campo = Xrm.Page.getAttribute("NombredelCampo");

if(campo != null)
{
  // Cambiar true o false según el valor deseado none, recommended, required.
  variable = campo.setRequiredLevel(“none”);
}

7. Mostrar u Ocultar un Tab por nombre

        var tabs = Xrm.Page.ui.tabs.get();
        for (var i in tabs) {

            // Se asigna el objeto tab
            var tab = tabs[i];

            // Validamos si es la ficha de viabilidad técnica
            if (tab.getName() == "NombreDelTab") {
                // Cambiar de acuerdo a la necesidad.
                tab.setVisible(false);
            }
        }

A continuación presento un listado de snippets que he creado en conjunto con Juan; muchas de estos snippets facilitarán las labores del día a día a la hora de realizar métodos de extensión Javascript para Microsoft CRM Dynamics.



Para comenzar a usar los snippet en Visual Studio debemos descargar el siguiente elemento:


extraemos los archivos en la ruta de snippets de visual studio (En el archivo Acerca de contenido en el adjunto podrá visualizar la ruta) y una vez instalados estos snippets solo bastará con abrir un archivo o crear un archivo tipo javascript y escribir el atajo de nuestro snippet, en el código escribimos la palabra CRM y el intellisense nos sugiere los nuevos snippets instalados como podemos ver en la imagen:




Bastará com presionar dos veces la tecla TAB y se completará el código




Ya solo bastará completar el resto de código y como podemos observar se nos ha facilitado escribir algunas liniecillas de codigo.

Agradezco mucho a todos sus opiniones y sugerencias, no soy un blogger profesional pero estamos para mejorar y compartir lo más libre del mundo, el conocimiento.

A todos mis lectores muchas gracias y hasta la próxima publicación.

jueves, 21 de noviembre de 2013

State and Status Codes Microsoft Dynamics CRM 2011

Hola lectores, Actualmente me encuentro trabajando con proyectos de Microsoft Dynamics  CRM 2011.

A causa de esto me he encontrado con bastantes puntos de diseño en la parte de extensión que involucran el cambio de estado y razón para el estado en la entidad, es por esto que he decidido tener como base esta tabla, ya que me ha servido bastante y comparto con ustedes.




Entidad
Status (statecode)
Status Reason (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 Parial
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



Adicional a esto, en mis plugin de CRM utilizo esta función genérica para cambiar el state y status code en cierta entidad:


En los Using

using System;

using Microsoft.Crm.Sdk.Messages;

using Microsoft.Xrm.Sdk;

La variable que ejecuta el request

IOrganizationService service;

El Código

public void CambiarStateyStatusEntidad(string nombreEntidad, Guid idRegistro, int stateCode, int statusCode)

        {
            // Cambiar el estado
            var setStateRequest = new SetStateRequest
                                      {
                                          EntityMoniker =
                                              new EntityReference
                                                  {
                                                      Id = idRegistro,
                                                      LogicalName = nombreEntidad
                                                  },
                                          State = new OptionSetValue(stateCode),
                                          Status = new OptionSetValue(statusCode)
                                      };
            this.service.Execute(setStateRequest);
        }



La tabla la he encontrado en este Blog y agradezco enormemente al autor por realizar esta compilación.