SlideShare una empresa de Scribd logo
1 de 24
dynamics-crm
#dynamics-
crm
Tabla de contenido
Acerca de 1
Capítulo 1: Empezando con la dinámica-crm 2
Observaciones 2
Versiones 2
Examples 2
Descargar Microsoft CRM SDK 2
Capítulo 2: Acciones de llamada utilizando la API web 3
Introducción 3
Examples 3
Acciones de llamada utilizando la API web 3
Capítulo 3: API web publica ejemplos de JSON 6
Observaciones 6
Examples 6
Creando una nota / anotación con adjunto 6
Creando una cuenta 6
Creando un contacto con un cliente padre 6
Creación de un detalle de cotización 7
Capítulo 4: CRM 2013: Cómo ocultar tipos de actividad no deseados de la subcuadrícula 8
Introducción 8
Examples 8
Añadir esta función a un recurso web javascript 8
Capítulo 5: Error: TurboForms Xrm.Page.data.save (). Then () Errores con ErrorCode "Null", 11
Examples 11
onChange () Llama a save (), desde un campo que no es válido 11
Pasos para reproducir (Turbo Forms, CRM 2015.1, -> CRM 2016.2) 11
Soluciones conocidas: 12
Capítulo 6: Qué no hacer al actualizar su Microsoft Dynamics CRM 2016 13
Introducción 13
Examples 13
Veamos algunos elementos obligatorios para marcar antes de sumergirse en un proceso de act 13
¿Los beneficios de la actualización superan los dolores de cabeza? ¿Vale la pena una actua 14
Capítulo 7: Usando la API web con jQuery 19
Examples 19
Usando la opción verbosa para obtener el conjunto de opciones y los valores de búsqueda 19
Usando select para reducir el número de campos 19
Usando expandir para obtener propiedades de búsqueda 19
Obteniendo cuentas 20
Usando el filtro para filtrar su consulta API 20
Creditos 21
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: dynamics-crm
It is an unofficial and free dynamics-crm ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official dynamics-crm.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@zzzprojects.com
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con la dinámica-crm
Observaciones
Microsoft Dynamics CRM SDK permite a los desarrolladores extender el producto Microsoft
Dynamics CRM, agregar nuevas funcionalidades y cumplir con los requisitos.
El SDK le permite operar y comunicarse con la plataforma mediante programación a través de
mensajes de servicio web, así como agregar componentes de código personalizados como
complementos, flujos de trabajo personalizados y acciones personalizadas.
Microsoft Dynamics CRM proporciona una biblioteca de SDK de JavaScript llamada Xrm en el
lado del cliente, que permite ampliar la experiencia y la interfaz del usuario.
Versiones
Versión
Versión
SDK
Enlace de
descarga
Notas de la versión de
enlace
Fecha de
lanzamiento
1.0 1.0 2003-01-01
3.0 3.0 2005-12-01
4.0 4.0 Descargar Notas 2007-12-01
2011 5.0 Descargar Notas 2011-02-01
2013 6.0 Descargar Notas 2013-11-01
2015 7.0 Descargar Notas 2014-11-01
2016
(365)
8.0 Descargar Notas 2015-11-01
Examples
Descargar Microsoft CRM SDK
El último SDK se puede descargar aquí
Las últimas bibliotecas de SDK también están disponibles en NuGet bajo la cuenta crmsdk oficial
de Microsoft
Lea Empezando con la dinámica-crm en línea: https://riptutorial.com/es/dynamics-
crm/topic/1112/empezando-con-la-dinamica-crm
https://riptutorial.com/es/home 2
Capítulo 2: Acciones de llamada utilizando la
API web
Introducción
Ejemplos de cómo llamar acciones unidas y no unidas.
Tenga en cuenta que en una función enlazada, el nombre completo de la función incluye el
espacio de nombres Microsoft.Dynamics.CRM. Las funciones que no están vinculadas no deben
usar el nombre completo.
Examples
Acciones de llamada utilizando la API web
function exampleCloseIncident(id, status){
var parameters = {};
var incidentresolution = {};
incidentresolution["incidentid@odata.bind"] = "/incidents(" + id + ")";
incidentresolution["@odata.type"] = "Microsoft.Dynamics.CRM.incidentresolution";
parameters.IncidentResolution = incidentresolution;
parameters.Status = status;
callUnboundAction("CloseIncident", parameters, true, function(result){
Xrm.Utility.alertDialog("Incident closed");
});
}
function exampleQualifyLead(id){
var payload = {
"CreateAccount": createAccount,
"CreateContact": createContact,
"CreateOpportunity": false,
"Status":3
};
callBoundAction("leads", id, "Microsoft.Dynamics.CRM.QualifyLead", payload, true,
function(result){
Xrm.Utility.alertDialog("Lead qualified");
});
}
function callUnboundAction(actionname, payload, async, successCallback, errorCallback) {
var req = new XMLHttpRequest();
req.open("POST", encodeURI(getWebAPIPath() + actionname), async);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
https://riptutorial.com/es/home 3
if (this.status == 200 || this.status == 204) {
if (this.status == 200) {
var result = JSON.parse(this.response);
}
if (successCallback) {
successCallback(result);
}
} else {
if(errorCallback) {
errorCallback(this);
}
else{
Xrm.Utility.alertDialog(this.statusText);
}
}
}
};
if (payload) {
req.send(JSON.stringify(payload));
}
else {
req.send();
}
}
function callBoundAction(entitysetname, id, actionname, payload, async, successCallback,
errorCallback) {
var req = new XMLHttpRequest();
req.open("POST", encodeURI(getWebAPIPath() + entitysetname + "(" + id + ")/" +
actionname), async);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status == 200 || this.status == 204) {
if (this.status == 200) {
var result = JSON.parse(this.response);
}
if (successCallback) {
successCallback(result);
}
} else {
if(errorCallback) {
errorCallback(this);
}
else{
Xrm.Utility.alertDialog(this.statusText);
}
}
}
};
if (payload) {
https://riptutorial.com/es/home 4
req.send(JSON.stringify(payload));
}
else {
req.send();
}
}
function getClientUrl() {
//Get the organization URL
if (typeof GetGlobalContext == "function" &&
typeof GetGlobalContext().getClientUrl == "function") {
return GetGlobalContext().getClientUrl();
}
else {
//If GetGlobalContext is not defined check for Xrm.Page.context;
if (typeof Xrm != "undefined" &&
typeof Xrm.Page != "undefined" &&
typeof Xrm.Page.context != "undefined" &&
typeof Xrm.Page.context.getClientUrl == "function") {
try {
return Xrm.Page.context.getClientUrl();
} catch (e) {
throw new Error("Xrm.Page.context.getClientUrl is not available.");
}
}
else { throw new Error("Context is not available."); }
}
}
function getWebAPIPath() {
return getClientUrl() + "/api/data/v8.2/";
}
Lea Acciones de llamada utilizando la API web en línea: https://riptutorial.com/es/dynamics-
crm/topic/9607/acciones-de-llamada-utilizando-la-api-web
https://riptutorial.com/es/home 5
Capítulo 3: API web publica ejemplos de
JSON
Observaciones
Asegúrese de agregar el siguiente encabezado a la solicitud posterior. De lo contrario la solicitud
fallará:
Content-Type: application/json
Examples
Creando una nota / anotación con adjunto
url: /api/data/v8.0/annotations
json:
{
"isdocument": true,
"mimetype": "text/plain",
"documentbody": "dGVzdA==",
"objectid_account@odata.bind" : "/accounts(c6da77b6-d53e-e611-80b9-0050568a6c2d)",
"filename": "test.txt"
}
Como el objectid puede ser casi todas las entidades en CRM, debe definir la entidad con el
nombre de la entidad después del objectid.
Creando una cuenta
url: /api/data/v8.0/accounts
json:
{
"name" : "New account"
}
Creando un contacto con un cliente padre
url: /api/data/v8.0/contacts
json:
https://riptutorial.com/es/home 6
{
"firstname" : "New",
"lastname" : "Contact",
"parentcustomerid_account@odata.bind" : "/accounts(c6da77b6-d53e-e611-80b9-0050568a6c2d)"
}
Como parentcustomerid puede ser una cuenta o contacto, debe definir el tipo de entidad que
desea establecer con _entityname después de parentcustomerid.
Creación de un detalle de cotización
url: /api/data/v8.0/quotedetails
json:
{
"productid@odata.bind": "/products(11c0dbad-91df-e311-b8e5-6c3be5a8b200)",
"quoteid@odata.bind" : "/quotes(69b5e1ae-037f-e611-80ed-fc15b428dcdc)",
"uomid@odata.bind" : "/uoms(73a5daea-6ddc-e311-a678-6c3be5a8c0e8)",
"quantity": 1
}
Lea API web publica ejemplos de JSON en línea: https://riptutorial.com/es/dynamics-
crm/topic/6367/api-web-publica-ejemplos-de-json
https://riptutorial.com/es/home 7
Capítulo 4: CRM 2013: Cómo ocultar tipos de
actividad no deseados de la subcuadrícula
Introducción
Hace poco tuve que modificar la subcuadrícula de actividad para eliminar ciertos tipos de
actividad del menú Agregar actividad.
Tenga en cuenta que esto puede no ser un método compatible sobre cómo hacer esto, pero no
hay una forma documentada de hacerlo, así que tuve que encontrar una solución y esto funcionó
en CRM 2013 de todos modos.
Examples
Añadir esta función a un recurso web javascript
var _activitiesGridName = '';
function SetupActivityGridOnload(gridName)
{
var btnsToHide =
[
'AddserviceappointmentButton',
'AddcampaignresponseButton',
'AddappointmentButton'
];
_activitiesGridName = gridName;
setTimeout(function ()
{ //setting timeout beacuse subgid take some time to load after the form is loaded
if (Xrm.Page != null && Xrm.Page != undefined)
{ //validating to check if the sub grid is present on the form
var grid = Xrm.Page.getControl(_activitiesGridName);
if (!grid)
{ // grid not loaded yet - call function again to recheck after timeout
console.log('grid not loaded yet');
SetupActivityGridOnload(_activitiesGridName);
}
else
{ // grid loaded now hide unwanted activity buttons
var menuItem = null;
var parentMenu = null;
$.each(btnsToHide, function (i, val)
{
menuItem = document.getElementByIdval);
if (menuItem)
{
if (parentMenu == null)
{ // load parent node - if not already loaded
parentMenu = menuItem.parentNode;
}
console.log('removing menu item: ' + val);
parentMenu.removeChild(menuItem);
}
https://riptutorial.com/es/home 8
else
{
console.log('menu not found: ' + val);
}
});
}
}
}, 2000);
}
Luego, llame a la función desde el evento onload agregando el nombre de la cuadrícula como un
parámetro similar.
https://riptutorial.com/es/home 9
Lea CRM 2013: Cómo ocultar tipos de actividad no deseados de la subcuadrícula en línea:
https://riptutorial.com/es/dynamics-crm/topic/9836/crm-2013--como-ocultar-tipos-de-actividad-no-
deseados-de-la-subcuadricula
https://riptutorial.com/es/home 10
Capítulo 5: Error: TurboForms
Xrm.Page.data.save (). Then () Errores con
ErrorCode "Null", Mensaje "Undefined"
Examples
onChange () Llama a save (), desde un campo que no es válido
Pasos para reproducir (Turbo Forms, CRM 2015.1, -> CRM
2016.2)
El formulario (con o sin otros campos obligatorios) tiene un campo que está vacío y es
obligatorio.
1.
Pierda el foco en el campo vacío ("título" en este ejemplo), esto activa el icono de
notificación de campo:
2.
Conecte el controlador de cambio en el campo vacío para guardar llamada:3.
function forceSaveOnChangeOfTitle(){
Xrm.Page.data.save().then(
https://riptutorial.com/es/home 11
function () {},
function (error, message) {console.error("Error: " + error + " Message: " + message);}
);
}
Introduzca un valor en el campo vacío.4.
Resultado:
Guardar falla Devuelve la llamada al fallo con el número de error "null" y el mensaje
"undefined".
•
La Notificación de campo desaparece, pero el mensaje requerido todavía se muestra en la
parte inferior derecha:
•
Soluciones conocidas:
Establecer el valor del atributo a sí mismo:
function forceSaveOnChangeOfTitle(){
var title = Xrm.Page.getAttribute("title");
title.setValue(title.getValue());
Xrm.Page.data.save().then(
function () {},
function (error, message) {console.error("Error: " + error + " Message: " + message);}
);
}
Use 1ms Timeout con:
function forceSaveOnChangeOfTitle(){
setTimeout(function() {
Xrm.Page.data.save().then(
function () {},
function (error, message) {console.error("Error: " + error + " Message: " +
message);}
);
}, 1);
}
Lea Error: TurboForms Xrm.Page.data.save (). Then () Errores con ErrorCode "Null", Mensaje
"Undefined" en línea: https://riptutorial.com/es/dynamics-crm/topic/4560/error--turboforms-xrm-
page-data-save-----then----errores-con-errorcode--null---mensaje--undefined-
https://riptutorial.com/es/home 12
Capítulo 6: Qué no hacer al actualizar su
Microsoft Dynamics CRM 2016
Introducción
Microsoft Dynamics CRM ha evolucionado drásticamente en los últimos años. Se han lanzado
muchas actualizaciones y versiones, con una serie de nuevas características y mejoras en cada
etapa del camino. Durante la actualización de un entorno Dynamics CRM, hay algunos puntos a
tener en cuenta para garantizar un proceso de actualización sin problemas.
Examples
Veamos algunos elementos obligatorios para marcar antes de sumergirse en
un proceso de actualización a gran escala
Copia de seguridad de base de datos
La copia de seguridad de la base de datos es una necesidad antes de iniciar cualquier proceso de
actualización de Dynamics CRM. Esto es obligatorio para tener siempre la opción de retroceder
en caso de cualquier obstáculo importante.
Estimación errónea
NO subestime el trabajo involucrado en un proceso de actualización de CRM.
Audite su actual Microsoft Dynamics CRM e identifique las soluciones de terceros en uso. Para
estas soluciones de terceros, consulte el sitio web de su desarrollador para ver si es compatible
con su versión de actualización de CRM prevista. Descargue la nueva solución y manténgala lista
para probar una vez que se haya completado el proceso de migración.
Organización de CRM
NO actualice el CRM a ciegas.
Como primer paso, debemos preparar la organización de CRM para actualizar Microsoft
Dynamics CRM.
Algunos consejos para preparar una organización.
Asegúrese de que su entorno CRM cumpla con los requisitos de componentes de software y
hardware
Mientras actualiza CRM 4, elimine los registros de la tabla de la lista. (El sistema intentará
eliminar todos los registros de las tablas siguientes cuando migramos a CRM 2011, en caso de
que falle, tendremos que eliminar manualmente las entradas de estas tablas). Los registros en las
https://riptutorial.com/es/home 13
tablas enumeradas a continuación darán como resultado un rendimiento deficiente. del sistema.
AsyncOperationBase
WorkflowWaitSubscriptionBase
BulkDeleteFailureBase
WorkflowLogBase
DuplicateRecordBase
WorkflowWaitSubscriptionBase
Instale el último paquete acumulativo antes de actualizar CRM. Por ejemplo, para actualizar a
CRM 2013, el servidor de CRM 2011 debe estar en el paquete acumulativo de actualizaciones 6,
el paquete acumulativo de actualizaciones 14 o un paquete acumulativo posterior antes de que se
pueda considerar una actualización. De lo contrario, al actualizar el entorno de Dynamics CRM,
se producirá un error.
Para actualizar a MS CRM 2013, use la herramienta de validación de código personalizado para
buscar códigos del lado del cliente no compatibles (JavaScript) que no funcionarán después de la
actualización. Además, use la herramienta de verificación de características heredadas para
detectar cualquier extensión de servidor que use el punto final de 2007 o las características de
Microsoft Dynamics CRM 4.0.
Cada nueva versión de Microsoft Dynamics CRM presenta funcionalidades más potentes, pero
junto con el atractivo de la última y mejor versión de software, surge la preocupación de cómo el
proceso de actualización afectará su negocio.
¿Los beneficios de la actualización superan los dolores de cabeza? ¿Vale la
pena una actualización?
Ahora, aquí hay algunos escollos comunes que pueden surgir al actualizar su sistema Dynamics
CRM.
La base de datos de la organización seleccionada para la importación es una versión diferente a
la base de datos de la organización que actualmente está implementada.
https://riptutorial.com/es/home 14
Para solucionar este problema, debemos instalar UR6 o una versión superior en el entorno MS
CRM 2011 al actualizar a MS CRM 2013. Después de esto, la actualización a Dynamics CRM
2016 se puede completar sin problemas
La organización no se puede actualizar.
https://riptutorial.com/es/home 15
Para solucionar este problema, necesitamos instalar SP1 para MS CRM 2013. A continuación, se
puede completar la actualización a Dynamics CRM 2016 sin problemas.
Desinstalación del conector de Microsoft Dynamics CRM para los servicios de informes de SQL
Server
Para solucionar este problema, desinstale las extensiones de informes de Microsoft Dynamics
CRM 2013 desde Programas instalados en el Panel de control antes de continuar con la
actualización a Dynamics CRM 2016.
La cuenta de SQL Server Reporting Service es un usuario local y no se admite al actualizar de
https://riptutorial.com/es/home 16
CRM 2013 a CRM 2015
Si el servicio de informes de Microsoft SQL Server 2012 se instaló a través de la configuración
predeterminada, entonces la cuenta de servicio está configurada en "ReportServer" - para
resolver el problema, abra el Administrador de configuración de Reporting Services y actualice la
cuenta de servicio a cualquier otra cosa, como "Sistema local" . Después de esto, no
enfrentaremos ninguna inquietud al actualizar a MS CRM 2016.
https://riptutorial.com/es/home 17
Parte de nuestro aprendizaje ha sido simple y lógico, pero muchos pueden renunciar a ellos.
Al actualizar, no se vaya con la actualización, hay muchas características que pueden satisfacer
los requisitos actuales de la organización que se implementan a través de la personalización.
Estos se pueden modelar de forma inmediata para que se ajusten a los requisitos con versiones
posteriores.
Además, tenga en cuenta los componentes de comunicación / integración con los que el sistema
heredado o cualquier sistema existente está conectado con Microsoft Dynamics CRM. Estos son
enlaces importantes que no deben verse afectados durante un proceso de actualización y,
cuando se ven afectados, pueden tener un gran impacto en la productividad.
Lea Qué no hacer al actualizar su Microsoft Dynamics CRM 2016 en línea:
https://riptutorial.com/es/dynamics-crm/topic/9616/que-no-hacer-al-actualizar-su-microsoft-
dynamics-crm-2016
https://riptutorial.com/es/home 18
Capítulo 7: Usando la API web con jQuery
Examples
Usando la opción verbosa para obtener el conjunto de opciones y los valores
de búsqueda
Por defecto, obtendrás códigos e id para conjuntos de opciones y búsquedas. Si también desea
obtener la etiqueta, debe agregar un encabezado adicional a la llamada.
$.ajax({
url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/contacts',
headers: {
'Accept': 'Application/json',
'Prefer': 'odata.include-annotations="OData.Community.Display.V1.FormattedValue"'
}
}).done(function (result) {
$.each(result.value, function (key, value) {
//sample to access a label
var gendercodeLabel = value['gendercode@OData.Community.Display.V1.FormattedValue'];
var gendercodeValue = value.gendercode;
});
});
Usando select para reducir el número de campos
Por motivos de rendimiento, debe minimizar el número de campos que solicita de la API. Puede
utilizar la propiedad de selección para hacerlo.
Este ejemplo obtiene la propiedad del nombre de todas las cuentas:
$.ajax({
url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts?$select=name',
headers: {
'Accept': 'Application/json'
}
}).done(function (result) {
$.each(result.value, function (key, value) {
var lastname = value.primarycontactid.lastname;
});
});
Usando expandir para obtener propiedades de búsqueda
Si obtiene un solo registro y cuando ese registro tiene una búsqueda, también puede obtener los
valores del valor de búsqueda utilizando la opción expandir. Esto reduce la cantidad de llamadas
que necesita hacer a la API.
La muestra obtiene todas las cuentas y el apellido del contacto principal:
https://riptutorial.com/es/home 19
$.ajax({
url: Xrm.Page.context.getClientUrl() +
'/api/data/v8.0/accounts?$select=name,primarycontactid&$expand=primarycontactid($select=lastname)',
headers: {
'Accept': 'Application/json'
}
}).done(function (result) {
$.each(result.value, function (key, value) {
var lastname = value.primarycontactid.lastname;
});
});
Obteniendo cuentas
Este ejemplo recupera cuentas utilizando un método jQuery ajax. Una cosa a tener en cuenta es
que necesita establecer el encabezado en la llamada para hacer el trabajo.
$.ajax({
url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts',
headers: {
'Accept': 'Application/json'
}
}).done(function (result) {
var accounts = result.value;
});
Usando el filtro para filtrar su consulta API
Puede utilizar la propiedad de filtro para recuperar un subconjunto de valores de CRM. En este
ejemplo, solo se devuelven las cuentas donde el nombre de la empresa es igual a
CompanyName.
$.ajax({
url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts?$filter=name eq
CompanyName',
headers: {
'Accept': 'Application/json'
}
}).done(function (result) {
var accounts = result.value;
});
Lea Usando la API web con jQuery en línea: https://riptutorial.com/es/dynamics-
crm/topic/2243/usando-la-api-web-con-jquery
https://riptutorial.com/es/home 20
Creditos
S.
No
Capítulos Contributors
1
Empezando con la
dinámica-crm
Arun Vinoth, Community, Daryl, Mehmet Seckin
2
Acciones de
llamada utilizando la
API web
Arun Vinoth, Pawel Gradecki
3
API web publica
ejemplos de JSON
Arun Vinoth, Martijn Eikelenboom, winterfruit
4
CRM 2013: Cómo
ocultar tipos de
actividad no
deseados de la
subcuadrícula
M Costa
5
Error: TurboForms
Xrm.Page.data.save
(). Then () Errores
con ErrorCode
"Null", Mensaje
"Undefined"
Daryl
6
Qué no hacer al
actualizar su
Microsoft Dynamics
CRM 2016
Yuvaraj
7
Usando la API web
con jQuery
Arun Vinoth, Daryl, jcjr, Martijn Eikelenboom
https://riptutorial.com/es/home 21

Más contenido relacionado

La actualidad más candente

Arquitectura en Aplicaciones Xamarin
Arquitectura en Aplicaciones XamarinArquitectura en Aplicaciones Xamarin
Arquitectura en Aplicaciones XamarinJavier Suárez Ruiz
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on railspelusa
 
Trucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsTrucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsJavier Suárez Ruiz
 
7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el diaFrancisco Aranda
 
Controles aspnet validacion
Controles aspnet validacionControles aspnet validacion
Controles aspnet validacionAround a Bit
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas
 
Integración Continua con Apps Xamarin
Integración Continua con Apps XamarinIntegración Continua con Apps Xamarin
Integración Continua con Apps XamarinJavier Suárez Ruiz
 
Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4Javier Suárez Ruiz
 
PHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajesPHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajesHéctor Garduño Real
 
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...Javier Suárez Ruiz
 
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)Software Guru
 
Aumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinAumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinJavier Suárez Ruiz
 
Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)
Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)
Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)Héctor Garduño Real
 
Programación Web - Introducción
Programación Web - IntroducciónProgramación Web - Introducción
Programación Web - IntroducciónYesith Valencia
 

La actualidad más candente (20)

Arquitectura en Aplicaciones Xamarin
Arquitectura en Aplicaciones XamarinArquitectura en Aplicaciones Xamarin
Arquitectura en Aplicaciones Xamarin
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Trucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsTrucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.Forms
 
7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia7 Gemas de Ruby on Rails que podrían salvarte el dia
7 Gemas de Ruby on Rails que podrían salvarte el dia
 
Controles aspnet validacion
Controles aspnet validacionControles aspnet validacion
Controles aspnet validacion
 
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoRJose Rojas Desarrollo Rapido de Aplicaciones con RoR
Jose Rojas Desarrollo Rapido de Aplicaciones con RoR
 
Integración Continua con Apps Xamarin
Integración Continua con Apps XamarinIntegración Continua con Apps Xamarin
Integración Continua con Apps Xamarin
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4Reconnect(); Sevilla - Introducción a Xamarin 4
Reconnect(); Sevilla - Introducción a Xamarin 4
 
PHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajesPHP, casos de éxito y comparativas con otros lenguajes
PHP, casos de éxito y comparativas con otros lenguajes
 
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
Xamarin Hol - Módulo V: Mobile DevOps con Visual Studio Team Services y Hocke...
 
Web20
Web20Web20
Web20
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
 
Testing de Apps Xamarin
Testing de Apps XamarinTesting de Apps Xamarin
Testing de Apps Xamarin
 
Aumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas XamarinAumento de productividad, herramientas Xamarin
Aumento de productividad, herramientas Xamarin
 
Introducción a Xamarin.Forms
Introducción a Xamarin.FormsIntroducción a Xamarin.Forms
Introducción a Xamarin.Forms
 
Introduction to xamarin
Introduction to xamarinIntroduction to xamarin
Introduction to xamarin
 
Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)
Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)
Práctica de Bases de Datos con MySQL (diseño, desarrollo y uso)
 
Programación Web - Introducción
Programación Web - IntroducciónProgramación Web - Introducción
Programación Web - Introducción
 

Similar a Dinámicas-CRM: Ocultar tipos de actividad en subcuadrícula

Dynamics saturday madrid 2019 web api
Dynamics saturday madrid 2019   web apiDynamics saturday madrid 2019   web api
Dynamics saturday madrid 2019 web apiDemian Raschkovan
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)lenny
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)INSIGNIA4U
 
Como crear Clientes/Servidores en COM-DCOM
Como crear Clientes/Servidores en COM-DCOMComo crear Clientes/Servidores en COM-DCOM
Como crear Clientes/Servidores en COM-DCOMEliana Ruiz
 
Clase 10 formularios
Clase 10   formulariosClase 10   formularios
Clase 10 formularioshydras_cs
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2Steven Gomez
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NETwilliamsm
 
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...Amazon Web Services LATAM
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007guestd24c393
 
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Sorey García
 

Similar a Dinámicas-CRM: Ocultar tipos de actividad en subcuadrícula (20)

Ebook tutorialspringbootheroku
Ebook tutorialspringbootherokuEbook tutorialspringbootheroku
Ebook tutorialspringbootheroku
 
Dynamics saturday madrid 2019 web api
Dynamics saturday madrid 2019   web apiDynamics saturday madrid 2019   web api
Dynamics saturday madrid 2019 web api
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Servicios web
Servicios webServicios web
Servicios web
 
Cien usos con serverless
Cien usos con serverlessCien usos con serverless
Cien usos con serverless
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Como crear Clientes/Servidores en COM-DCOM
Como crear Clientes/Servidores en COM-DCOMComo crear Clientes/Servidores en COM-DCOM
Como crear Clientes/Servidores en COM-DCOM
 
Clase 10 formularios
Clase 10   formulariosClase 10   formularios
Clase 10 formularios
 
Ajax
AjaxAjax
Ajax
 
Reportes En J Developer Parte 1 Y 2
Reportes En J Developer   Parte 1 Y 2Reportes En J Developer   Parte 1 Y 2
Reportes En J Developer Parte 1 Y 2
 
Symfony parte 6
Symfony parte 6Symfony parte 6
Symfony parte 6
 
Web API ASP. NET XAMARIN - Luis Fernando Aguas
Web API ASP. NET XAMARIN - Luis Fernando AguasWeb API ASP. NET XAMARIN - Luis Fernando Aguas
Web API ASP. NET XAMARIN - Luis Fernando Aguas
 
Intro a ASP.NET
Intro a ASP.NETIntro a ASP.NET
Intro a ASP.NET
 
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007
 
Mi app-asp-net-mvc2
Mi app-asp-net-mvc2Mi app-asp-net-mvc2
Mi app-asp-net-mvc2
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Diseño web
Diseño webDiseño web
Diseño web
 
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
 

Último

REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfREPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfIrapuatoCmovamos
 
2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf
2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf
2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdfAnaBelindaArmellonHi
 
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdfCritica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdfRodrigoBenitez38
 
triptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescenciatriptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescenciaferg6120
 
obras-hidraulicas.docxfffffffffffffffffff
obras-hidraulicas.docxfffffffffffffffffffobras-hidraulicas.docxfffffffffffffffffff
obras-hidraulicas.docxfffffffffffffffffffJefersonBazalloCarri1
 
bases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria debases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria deCalet Cáceres Vergara
 
LA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derechoLA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derechojuliosabino1
 
La importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresaLa importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresamerca6
 
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdfPREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdfluisccollana
 
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdfREPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdfIrapuatoCmovamos
 
Unidad 3 Elementos y compuestos. Física y química
Unidad 3 Elementos y compuestos. Física y químicaUnidad 3 Elementos y compuestos. Física y química
Unidad 3 Elementos y compuestos. Física y químicaSilvia García
 
tipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicacióntipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicaciónJonathanAntonioMaldo
 
Las mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfLas mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfJC Díaz Herrera
 
Los artistas mexicanos con más ventas de discos en la historia (2024).pdf
Los artistas mexicanos con más ventas de discos en la historia (2024).pdfLos artistas mexicanos con más ventas de discos en la historia (2024).pdf
Los artistas mexicanos con más ventas de discos en la historia (2024).pdfJC Díaz Herrera
 
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,juberrodasflores
 
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior UniversitariaSUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior Universitariachayananazcosimeon
 
El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)estebancitoherrera
 
Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...israel garcia
 
Qué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaQué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaJoellyAlejandraRodrg
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticJamithGarcia1
 

Último (20)

REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdfREPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
REPORTE DE INCIDENCIA DELICTIVA MARZO 2024.pdf
 
2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf
2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf
2 PROCESO ESTADISTICO PARA LA INVESTIGACION.pdf
 
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdfCritica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
Critica 1 Grupo 10 RodrigoBenitez_GinaGadea_AlexisGonzález.pdf
 
triptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescenciatriptico-de-las-drogas en la adolescencia
triptico-de-las-drogas en la adolescencia
 
obras-hidraulicas.docxfffffffffffffffffff
obras-hidraulicas.docxfffffffffffffffffffobras-hidraulicas.docxfffffffffffffffffff
obras-hidraulicas.docxfffffffffffffffffff
 
bases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria debases-cye-2024(2) una sola descarga en base de feria de
bases-cye-2024(2) una sola descarga en base de feria de
 
LA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derechoLA LEY DE LAS XII TABLAS en el curso de derecho
LA LEY DE LAS XII TABLAS en el curso de derecho
 
La importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresaLa importancia de las pruebas de producto para tu empresa
La importancia de las pruebas de producto para tu empresa
 
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdfPREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
PREGRADO-PRESENCIAL-FASE-C-202401 (1).pdf
 
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdfREPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
REPORTE-HEMEROGRÁFICO-MARZO-2024-IRAPUATO-¿CÓMO VAMOS?.pdf
 
Unidad 3 Elementos y compuestos. Física y química
Unidad 3 Elementos y compuestos. Física y químicaUnidad 3 Elementos y compuestos. Física y química
Unidad 3 Elementos y compuestos. Física y química
 
tipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicacióntipos de organización y sus objetivos y aplicación
tipos de organización y sus objetivos y aplicación
 
Las mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdfLas mujeres más ricas del mundo (2024).pdf
Las mujeres más ricas del mundo (2024).pdf
 
Los artistas mexicanos con más ventas de discos en la historia (2024).pdf
Los artistas mexicanos con más ventas de discos en la historia (2024).pdfLos artistas mexicanos con más ventas de discos en la historia (2024).pdf
Los artistas mexicanos con más ventas de discos en la historia (2024).pdf
 
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
Ivu- taller de diseño arquitectonico l , adicion y sustraccion de cubos,
 
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior UniversitariaSUNEDU - Superintendencia Nacional de Educación superior Universitaria
SUNEDU - Superintendencia Nacional de Educación superior Universitaria
 
El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)El Teatro musical (qué es, cuál es su historia y trayectoria...)
El Teatro musical (qué es, cuál es su historia y trayectoria...)
 
Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...Cuáles son las características biológicas que están marcadas en tu individual...
Cuáles son las características biológicas que están marcadas en tu individual...
 
Qué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problemaQué es un Histograma estadístico teoria y problema
Qué es un Histograma estadístico teoria y problema
 
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de CyclisticAnálisis de datos en acción: Optimizando el crecimiento de Cyclistic
Análisis de datos en acción: Optimizando el crecimiento de Cyclistic
 

Dinámicas-CRM: Ocultar tipos de actividad en subcuadrícula

  • 2. Tabla de contenido Acerca de 1 Capítulo 1: Empezando con la dinámica-crm 2 Observaciones 2 Versiones 2 Examples 2 Descargar Microsoft CRM SDK 2 Capítulo 2: Acciones de llamada utilizando la API web 3 Introducción 3 Examples 3 Acciones de llamada utilizando la API web 3 Capítulo 3: API web publica ejemplos de JSON 6 Observaciones 6 Examples 6 Creando una nota / anotación con adjunto 6 Creando una cuenta 6 Creando un contacto con un cliente padre 6 Creación de un detalle de cotización 7 Capítulo 4: CRM 2013: Cómo ocultar tipos de actividad no deseados de la subcuadrícula 8 Introducción 8 Examples 8 Añadir esta función a un recurso web javascript 8 Capítulo 5: Error: TurboForms Xrm.Page.data.save (). Then () Errores con ErrorCode "Null", 11 Examples 11 onChange () Llama a save (), desde un campo que no es válido 11 Pasos para reproducir (Turbo Forms, CRM 2015.1, -> CRM 2016.2) 11 Soluciones conocidas: 12 Capítulo 6: Qué no hacer al actualizar su Microsoft Dynamics CRM 2016 13 Introducción 13 Examples 13 Veamos algunos elementos obligatorios para marcar antes de sumergirse en un proceso de act 13
  • 3. ¿Los beneficios de la actualización superan los dolores de cabeza? ¿Vale la pena una actua 14 Capítulo 7: Usando la API web con jQuery 19 Examples 19 Usando la opción verbosa para obtener el conjunto de opciones y los valores de búsqueda 19 Usando select para reducir el número de campos 19 Usando expandir para obtener propiedades de búsqueda 19 Obteniendo cuentas 20 Usando el filtro para filtrar su consulta API 20 Creditos 21
  • 4. Acerca de You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: dynamics-crm It is an unofficial and free dynamics-crm ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official dynamics-crm. The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners. Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to info@zzzprojects.com https://riptutorial.com/es/home 1
  • 5. Capítulo 1: Empezando con la dinámica-crm Observaciones Microsoft Dynamics CRM SDK permite a los desarrolladores extender el producto Microsoft Dynamics CRM, agregar nuevas funcionalidades y cumplir con los requisitos. El SDK le permite operar y comunicarse con la plataforma mediante programación a través de mensajes de servicio web, así como agregar componentes de código personalizados como complementos, flujos de trabajo personalizados y acciones personalizadas. Microsoft Dynamics CRM proporciona una biblioteca de SDK de JavaScript llamada Xrm en el lado del cliente, que permite ampliar la experiencia y la interfaz del usuario. Versiones Versión Versión SDK Enlace de descarga Notas de la versión de enlace Fecha de lanzamiento 1.0 1.0 2003-01-01 3.0 3.0 2005-12-01 4.0 4.0 Descargar Notas 2007-12-01 2011 5.0 Descargar Notas 2011-02-01 2013 6.0 Descargar Notas 2013-11-01 2015 7.0 Descargar Notas 2014-11-01 2016 (365) 8.0 Descargar Notas 2015-11-01 Examples Descargar Microsoft CRM SDK El último SDK se puede descargar aquí Las últimas bibliotecas de SDK también están disponibles en NuGet bajo la cuenta crmsdk oficial de Microsoft Lea Empezando con la dinámica-crm en línea: https://riptutorial.com/es/dynamics- crm/topic/1112/empezando-con-la-dinamica-crm https://riptutorial.com/es/home 2
  • 6. Capítulo 2: Acciones de llamada utilizando la API web Introducción Ejemplos de cómo llamar acciones unidas y no unidas. Tenga en cuenta que en una función enlazada, el nombre completo de la función incluye el espacio de nombres Microsoft.Dynamics.CRM. Las funciones que no están vinculadas no deben usar el nombre completo. Examples Acciones de llamada utilizando la API web function exampleCloseIncident(id, status){ var parameters = {}; var incidentresolution = {}; incidentresolution["incidentid@odata.bind"] = "/incidents(" + id + ")"; incidentresolution["@odata.type"] = "Microsoft.Dynamics.CRM.incidentresolution"; parameters.IncidentResolution = incidentresolution; parameters.Status = status; callUnboundAction("CloseIncident", parameters, true, function(result){ Xrm.Utility.alertDialog("Incident closed"); }); } function exampleQualifyLead(id){ var payload = { "CreateAccount": createAccount, "CreateContact": createContact, "CreateOpportunity": false, "Status":3 }; callBoundAction("leads", id, "Microsoft.Dynamics.CRM.QualifyLead", payload, true, function(result){ Xrm.Utility.alertDialog("Lead qualified"); }); } function callUnboundAction(actionname, payload, async, successCallback, errorCallback) { var req = new XMLHttpRequest(); req.open("POST", encodeURI(getWebAPIPath() + actionname), async); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.onreadystatechange = function () { if (this.readyState === 4) { req.onreadystatechange = null; https://riptutorial.com/es/home 3
  • 7. if (this.status == 200 || this.status == 204) { if (this.status == 200) { var result = JSON.parse(this.response); } if (successCallback) { successCallback(result); } } else { if(errorCallback) { errorCallback(this); } else{ Xrm.Utility.alertDialog(this.statusText); } } } }; if (payload) { req.send(JSON.stringify(payload)); } else { req.send(); } } function callBoundAction(entitysetname, id, actionname, payload, async, successCallback, errorCallback) { var req = new XMLHttpRequest(); req.open("POST", encodeURI(getWebAPIPath() + entitysetname + "(" + id + ")/" + actionname), async); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.onreadystatechange = function () { if (this.readyState === 4) { req.onreadystatechange = null; if (this.status == 200 || this.status == 204) { if (this.status == 200) { var result = JSON.parse(this.response); } if (successCallback) { successCallback(result); } } else { if(errorCallback) { errorCallback(this); } else{ Xrm.Utility.alertDialog(this.statusText); } } } }; if (payload) { https://riptutorial.com/es/home 4
  • 8. req.send(JSON.stringify(payload)); } else { req.send(); } } function getClientUrl() { //Get the organization URL if (typeof GetGlobalContext == "function" && typeof GetGlobalContext().getClientUrl == "function") { return GetGlobalContext().getClientUrl(); } else { //If GetGlobalContext is not defined check for Xrm.Page.context; if (typeof Xrm != "undefined" && typeof Xrm.Page != "undefined" && typeof Xrm.Page.context != "undefined" && typeof Xrm.Page.context.getClientUrl == "function") { try { return Xrm.Page.context.getClientUrl(); } catch (e) { throw new Error("Xrm.Page.context.getClientUrl is not available."); } } else { throw new Error("Context is not available."); } } } function getWebAPIPath() { return getClientUrl() + "/api/data/v8.2/"; } Lea Acciones de llamada utilizando la API web en línea: https://riptutorial.com/es/dynamics- crm/topic/9607/acciones-de-llamada-utilizando-la-api-web https://riptutorial.com/es/home 5
  • 9. Capítulo 3: API web publica ejemplos de JSON Observaciones Asegúrese de agregar el siguiente encabezado a la solicitud posterior. De lo contrario la solicitud fallará: Content-Type: application/json Examples Creando una nota / anotación con adjunto url: /api/data/v8.0/annotations json: { "isdocument": true, "mimetype": "text/plain", "documentbody": "dGVzdA==", "objectid_account@odata.bind" : "/accounts(c6da77b6-d53e-e611-80b9-0050568a6c2d)", "filename": "test.txt" } Como el objectid puede ser casi todas las entidades en CRM, debe definir la entidad con el nombre de la entidad después del objectid. Creando una cuenta url: /api/data/v8.0/accounts json: { "name" : "New account" } Creando un contacto con un cliente padre url: /api/data/v8.0/contacts json: https://riptutorial.com/es/home 6
  • 10. { "firstname" : "New", "lastname" : "Contact", "parentcustomerid_account@odata.bind" : "/accounts(c6da77b6-d53e-e611-80b9-0050568a6c2d)" } Como parentcustomerid puede ser una cuenta o contacto, debe definir el tipo de entidad que desea establecer con _entityname después de parentcustomerid. Creación de un detalle de cotización url: /api/data/v8.0/quotedetails json: { "productid@odata.bind": "/products(11c0dbad-91df-e311-b8e5-6c3be5a8b200)", "quoteid@odata.bind" : "/quotes(69b5e1ae-037f-e611-80ed-fc15b428dcdc)", "uomid@odata.bind" : "/uoms(73a5daea-6ddc-e311-a678-6c3be5a8c0e8)", "quantity": 1 } Lea API web publica ejemplos de JSON en línea: https://riptutorial.com/es/dynamics- crm/topic/6367/api-web-publica-ejemplos-de-json https://riptutorial.com/es/home 7
  • 11. Capítulo 4: CRM 2013: Cómo ocultar tipos de actividad no deseados de la subcuadrícula Introducción Hace poco tuve que modificar la subcuadrícula de actividad para eliminar ciertos tipos de actividad del menú Agregar actividad. Tenga en cuenta que esto puede no ser un método compatible sobre cómo hacer esto, pero no hay una forma documentada de hacerlo, así que tuve que encontrar una solución y esto funcionó en CRM 2013 de todos modos. Examples Añadir esta función a un recurso web javascript var _activitiesGridName = ''; function SetupActivityGridOnload(gridName) { var btnsToHide = [ 'AddserviceappointmentButton', 'AddcampaignresponseButton', 'AddappointmentButton' ]; _activitiesGridName = gridName; setTimeout(function () { //setting timeout beacuse subgid take some time to load after the form is loaded if (Xrm.Page != null && Xrm.Page != undefined) { //validating to check if the sub grid is present on the form var grid = Xrm.Page.getControl(_activitiesGridName); if (!grid) { // grid not loaded yet - call function again to recheck after timeout console.log('grid not loaded yet'); SetupActivityGridOnload(_activitiesGridName); } else { // grid loaded now hide unwanted activity buttons var menuItem = null; var parentMenu = null; $.each(btnsToHide, function (i, val) { menuItem = document.getElementByIdval); if (menuItem) { if (parentMenu == null) { // load parent node - if not already loaded parentMenu = menuItem.parentNode; } console.log('removing menu item: ' + val); parentMenu.removeChild(menuItem); } https://riptutorial.com/es/home 8
  • 12. else { console.log('menu not found: ' + val); } }); } } }, 2000); } Luego, llame a la función desde el evento onload agregando el nombre de la cuadrícula como un parámetro similar. https://riptutorial.com/es/home 9
  • 13. Lea CRM 2013: Cómo ocultar tipos de actividad no deseados de la subcuadrícula en línea: https://riptutorial.com/es/dynamics-crm/topic/9836/crm-2013--como-ocultar-tipos-de-actividad-no- deseados-de-la-subcuadricula https://riptutorial.com/es/home 10
  • 14. Capítulo 5: Error: TurboForms Xrm.Page.data.save (). Then () Errores con ErrorCode "Null", Mensaje "Undefined" Examples onChange () Llama a save (), desde un campo que no es válido Pasos para reproducir (Turbo Forms, CRM 2015.1, -> CRM 2016.2) El formulario (con o sin otros campos obligatorios) tiene un campo que está vacío y es obligatorio. 1. Pierda el foco en el campo vacío ("título" en este ejemplo), esto activa el icono de notificación de campo: 2. Conecte el controlador de cambio en el campo vacío para guardar llamada:3. function forceSaveOnChangeOfTitle(){ Xrm.Page.data.save().then( https://riptutorial.com/es/home 11
  • 15. function () {}, function (error, message) {console.error("Error: " + error + " Message: " + message);} ); } Introduzca un valor en el campo vacío.4. Resultado: Guardar falla Devuelve la llamada al fallo con el número de error "null" y el mensaje "undefined". • La Notificación de campo desaparece, pero el mensaje requerido todavía se muestra en la parte inferior derecha: • Soluciones conocidas: Establecer el valor del atributo a sí mismo: function forceSaveOnChangeOfTitle(){ var title = Xrm.Page.getAttribute("title"); title.setValue(title.getValue()); Xrm.Page.data.save().then( function () {}, function (error, message) {console.error("Error: " + error + " Message: " + message);} ); } Use 1ms Timeout con: function forceSaveOnChangeOfTitle(){ setTimeout(function() { Xrm.Page.data.save().then( function () {}, function (error, message) {console.error("Error: " + error + " Message: " + message);} ); }, 1); } Lea Error: TurboForms Xrm.Page.data.save (). Then () Errores con ErrorCode "Null", Mensaje "Undefined" en línea: https://riptutorial.com/es/dynamics-crm/topic/4560/error--turboforms-xrm- page-data-save-----then----errores-con-errorcode--null---mensaje--undefined- https://riptutorial.com/es/home 12
  • 16. Capítulo 6: Qué no hacer al actualizar su Microsoft Dynamics CRM 2016 Introducción Microsoft Dynamics CRM ha evolucionado drásticamente en los últimos años. Se han lanzado muchas actualizaciones y versiones, con una serie de nuevas características y mejoras en cada etapa del camino. Durante la actualización de un entorno Dynamics CRM, hay algunos puntos a tener en cuenta para garantizar un proceso de actualización sin problemas. Examples Veamos algunos elementos obligatorios para marcar antes de sumergirse en un proceso de actualización a gran escala Copia de seguridad de base de datos La copia de seguridad de la base de datos es una necesidad antes de iniciar cualquier proceso de actualización de Dynamics CRM. Esto es obligatorio para tener siempre la opción de retroceder en caso de cualquier obstáculo importante. Estimación errónea NO subestime el trabajo involucrado en un proceso de actualización de CRM. Audite su actual Microsoft Dynamics CRM e identifique las soluciones de terceros en uso. Para estas soluciones de terceros, consulte el sitio web de su desarrollador para ver si es compatible con su versión de actualización de CRM prevista. Descargue la nueva solución y manténgala lista para probar una vez que se haya completado el proceso de migración. Organización de CRM NO actualice el CRM a ciegas. Como primer paso, debemos preparar la organización de CRM para actualizar Microsoft Dynamics CRM. Algunos consejos para preparar una organización. Asegúrese de que su entorno CRM cumpla con los requisitos de componentes de software y hardware Mientras actualiza CRM 4, elimine los registros de la tabla de la lista. (El sistema intentará eliminar todos los registros de las tablas siguientes cuando migramos a CRM 2011, en caso de que falle, tendremos que eliminar manualmente las entradas de estas tablas). Los registros en las https://riptutorial.com/es/home 13
  • 17. tablas enumeradas a continuación darán como resultado un rendimiento deficiente. del sistema. AsyncOperationBase WorkflowWaitSubscriptionBase BulkDeleteFailureBase WorkflowLogBase DuplicateRecordBase WorkflowWaitSubscriptionBase Instale el último paquete acumulativo antes de actualizar CRM. Por ejemplo, para actualizar a CRM 2013, el servidor de CRM 2011 debe estar en el paquete acumulativo de actualizaciones 6, el paquete acumulativo de actualizaciones 14 o un paquete acumulativo posterior antes de que se pueda considerar una actualización. De lo contrario, al actualizar el entorno de Dynamics CRM, se producirá un error. Para actualizar a MS CRM 2013, use la herramienta de validación de código personalizado para buscar códigos del lado del cliente no compatibles (JavaScript) que no funcionarán después de la actualización. Además, use la herramienta de verificación de características heredadas para detectar cualquier extensión de servidor que use el punto final de 2007 o las características de Microsoft Dynamics CRM 4.0. Cada nueva versión de Microsoft Dynamics CRM presenta funcionalidades más potentes, pero junto con el atractivo de la última y mejor versión de software, surge la preocupación de cómo el proceso de actualización afectará su negocio. ¿Los beneficios de la actualización superan los dolores de cabeza? ¿Vale la pena una actualización? Ahora, aquí hay algunos escollos comunes que pueden surgir al actualizar su sistema Dynamics CRM. La base de datos de la organización seleccionada para la importación es una versión diferente a la base de datos de la organización que actualmente está implementada. https://riptutorial.com/es/home 14
  • 18. Para solucionar este problema, debemos instalar UR6 o una versión superior en el entorno MS CRM 2011 al actualizar a MS CRM 2013. Después de esto, la actualización a Dynamics CRM 2016 se puede completar sin problemas La organización no se puede actualizar. https://riptutorial.com/es/home 15
  • 19. Para solucionar este problema, necesitamos instalar SP1 para MS CRM 2013. A continuación, se puede completar la actualización a Dynamics CRM 2016 sin problemas. Desinstalación del conector de Microsoft Dynamics CRM para los servicios de informes de SQL Server Para solucionar este problema, desinstale las extensiones de informes de Microsoft Dynamics CRM 2013 desde Programas instalados en el Panel de control antes de continuar con la actualización a Dynamics CRM 2016. La cuenta de SQL Server Reporting Service es un usuario local y no se admite al actualizar de https://riptutorial.com/es/home 16
  • 20. CRM 2013 a CRM 2015 Si el servicio de informes de Microsoft SQL Server 2012 se instaló a través de la configuración predeterminada, entonces la cuenta de servicio está configurada en "ReportServer" - para resolver el problema, abra el Administrador de configuración de Reporting Services y actualice la cuenta de servicio a cualquier otra cosa, como "Sistema local" . Después de esto, no enfrentaremos ninguna inquietud al actualizar a MS CRM 2016. https://riptutorial.com/es/home 17
  • 21. Parte de nuestro aprendizaje ha sido simple y lógico, pero muchos pueden renunciar a ellos. Al actualizar, no se vaya con la actualización, hay muchas características que pueden satisfacer los requisitos actuales de la organización que se implementan a través de la personalización. Estos se pueden modelar de forma inmediata para que se ajusten a los requisitos con versiones posteriores. Además, tenga en cuenta los componentes de comunicación / integración con los que el sistema heredado o cualquier sistema existente está conectado con Microsoft Dynamics CRM. Estos son enlaces importantes que no deben verse afectados durante un proceso de actualización y, cuando se ven afectados, pueden tener un gran impacto en la productividad. Lea Qué no hacer al actualizar su Microsoft Dynamics CRM 2016 en línea: https://riptutorial.com/es/dynamics-crm/topic/9616/que-no-hacer-al-actualizar-su-microsoft- dynamics-crm-2016 https://riptutorial.com/es/home 18
  • 22. Capítulo 7: Usando la API web con jQuery Examples Usando la opción verbosa para obtener el conjunto de opciones y los valores de búsqueda Por defecto, obtendrás códigos e id para conjuntos de opciones y búsquedas. Si también desea obtener la etiqueta, debe agregar un encabezado adicional a la llamada. $.ajax({ url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/contacts', headers: { 'Accept': 'Application/json', 'Prefer': 'odata.include-annotations="OData.Community.Display.V1.FormattedValue"' } }).done(function (result) { $.each(result.value, function (key, value) { //sample to access a label var gendercodeLabel = value['gendercode@OData.Community.Display.V1.FormattedValue']; var gendercodeValue = value.gendercode; }); }); Usando select para reducir el número de campos Por motivos de rendimiento, debe minimizar el número de campos que solicita de la API. Puede utilizar la propiedad de selección para hacerlo. Este ejemplo obtiene la propiedad del nombre de todas las cuentas: $.ajax({ url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts?$select=name', headers: { 'Accept': 'Application/json' } }).done(function (result) { $.each(result.value, function (key, value) { var lastname = value.primarycontactid.lastname; }); }); Usando expandir para obtener propiedades de búsqueda Si obtiene un solo registro y cuando ese registro tiene una búsqueda, también puede obtener los valores del valor de búsqueda utilizando la opción expandir. Esto reduce la cantidad de llamadas que necesita hacer a la API. La muestra obtiene todas las cuentas y el apellido del contacto principal: https://riptutorial.com/es/home 19
  • 23. $.ajax({ url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts?$select=name,primarycontactid&$expand=primarycontactid($select=lastname)', headers: { 'Accept': 'Application/json' } }).done(function (result) { $.each(result.value, function (key, value) { var lastname = value.primarycontactid.lastname; }); }); Obteniendo cuentas Este ejemplo recupera cuentas utilizando un método jQuery ajax. Una cosa a tener en cuenta es que necesita establecer el encabezado en la llamada para hacer el trabajo. $.ajax({ url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts', headers: { 'Accept': 'Application/json' } }).done(function (result) { var accounts = result.value; }); Usando el filtro para filtrar su consulta API Puede utilizar la propiedad de filtro para recuperar un subconjunto de valores de CRM. En este ejemplo, solo se devuelven las cuentas donde el nombre de la empresa es igual a CompanyName. $.ajax({ url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts?$filter=name eq CompanyName', headers: { 'Accept': 'Application/json' } }).done(function (result) { var accounts = result.value; }); Lea Usando la API web con jQuery en línea: https://riptutorial.com/es/dynamics- crm/topic/2243/usando-la-api-web-con-jquery https://riptutorial.com/es/home 20
  • 24. Creditos S. No Capítulos Contributors 1 Empezando con la dinámica-crm Arun Vinoth, Community, Daryl, Mehmet Seckin 2 Acciones de llamada utilizando la API web Arun Vinoth, Pawel Gradecki 3 API web publica ejemplos de JSON Arun Vinoth, Martijn Eikelenboom, winterfruit 4 CRM 2013: Cómo ocultar tipos de actividad no deseados de la subcuadrícula M Costa 5 Error: TurboForms Xrm.Page.data.save (). Then () Errores con ErrorCode "Null", Mensaje "Undefined" Daryl 6 Qué no hacer al actualizar su Microsoft Dynamics CRM 2016 Yuvaraj 7 Usando la API web con jQuery Arun Vinoth, Daryl, jcjr, Martijn Eikelenboom https://riptutorial.com/es/home 21