dynamics-crm - RIP Tutorial · niveau de votre Microsoft Dynamics CRM 2016 Introduction Microsoft...

25
dynamics-crm #dynamics- crm

Transcript of dynamics-crm - RIP Tutorial · niveau de votre Microsoft Dynamics CRM 2016 Introduction Microsoft...

dynamics-crm

#dynamics-

crm

Table des matières

À propos 1

Chapitre 1: Se lancer dans la dynamique-crm 2

Remarques 2

Versions 2

Examples 2

Télécharger le SDK Microsoft CRM 2

Chapitre 2: Actions d'appel à l'aide de l'API Web 4

Introduction 4

Examples 4

Actions d'appel à l'aide de l'API Web 4

Chapitre 3: Bug - TurboForms Xrm.Page.data.save (). Then () Erreurs avec ErrorCode "Null", 7

Examples 7

onChange () Appels save (), depuis un champ non valide 7

Étapes pour reproduire (Turbo Forms, CRM 2015.1, -> CRM 2016.2) 7

Solutions de contournement connues: 8

Chapitre 4: CRM 2013: comment masquer les types d'activité indésirables dans la sous-grill 9

Introduction 9

Examples 9

Ajouter cette fonction à une ressource Web javascript 9

Chapitre 5: Quoi ne pas faire lors de la mise à niveau de votre Microsoft Dynamics CRM 201 12

Introduction 12

Examples 12

Examinons certains éléments obligatoires à cocher avant de plonger dans un processus de mi 12

Les avantages de la mise à niveau l'emporteront-ils sur les maux de tête? Est-ce qu'une mi 13

Chapitre 6: Utiliser l'API Web avec jQuery 18

Examples 18

Utiliser l'option verbeuse pour obtenir les valeurs des options et des recherches 18

Utiliser select pour réduire le nombre de champs 18

Utilisation de l'expansion pour obtenir les propriétés de recherche 18

Obtenir des comptes 19

Utiliser un filtre pour filtrer votre requête API 19

Chapitre 7: Web API envoie des exemples JSON 20

Remarques 20

Examples 20

Créer une note / une annotation avec pièce jointe 20

Créer un compte 20

Créer un contact avec un client parent 20

Création d'un détail de devis 21

Crédits 22

À propos

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 [email protected]

https://riptutorial.com/fr/home 1

Chapitre 1: Se lancer dans la dynamique-crm

Remarques

Microsoft Dynamics CRM SDK permet aux développeurs d'étendre le produit Microsoft Dynamics CRM, d'ajouter de nouvelles fonctionnalités et de répondre aux exigences.

Le kit de développement logiciel vous permet d’exploiter et de communiquer avec la plate-forme par programmation via des messages de service Web, ainsi que d’ajouter des composants de code personnalisés tels que des plug-ins, des flux de travail personnalisés et des actions personnalisées.

Microsoft Dynamics CRM fournit une bibliothèque JavaScript SDK appelée Xrm côté client, qui permet d'étendre l'interface utilisateur et l'expérience.

Versions

VersionVersion Sdk

Lien de téléchargement

Lien vers les notes de version

Date de sortie

1.0 1.0 2003-01-01

3.0 3.0 2005-12-01

4.0 4.0 Télécharger Remarques 2007-12-01

2011 5.0 Télécharger Remarques 2011-02-01

2013 6,0 Télécharger Remarques 2013-11-01

2015 7.0 Télécharger Remarques 2014-11-01

2016 (365)

8.0 Télécharger Remarques 2015-11-01

Examples

Télécharger le SDK Microsoft CRM

Le dernier SDK peut être téléchargé ici

Les dernières bibliothèques SDK sont également disponibles sur NuGet sous le compte officiel crmsdk de Microsoft.

Lire Se lancer dans la dynamique-crm en ligne: https://riptutorial.com/fr/dynamics-

https://riptutorial.com/fr/home 2

crm/topic/1112/se-lancer-dans-la-dynamique-crm

https://riptutorial.com/fr/home 3

Chapitre 2: Actions d'appel à l'aide de l'API Web

Introduction

Exemples sur la façon d'appeler des actions liées et non liées.

Notez que dans une fonction liée, le nom complet de la fonction inclut l'espace de noms Microsoft.Dynamics.CRM. Les fonctions qui ne sont pas liées ne doivent pas utiliser le nom complet.

Examples

Actions d'appel à l'aide de l'API Web

function exampleCloseIncident(id, status){ var parameters = {}; var incidentresolution = {}; incidentresolution["[email protected]"] = "/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/fr/home 4

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/fr/home 5

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/"; }

Lire Actions d'appel à l'aide de l'API Web en ligne: https://riptutorial.com/fr/dynamics-crm/topic/9607/actions-d-appel-a-l-aide-de-l-api-web

https://riptutorial.com/fr/home 6

Chapitre 3: Bug - TurboForms Xrm.Page.data.save (). Then () Erreurs avec ErrorCode "Null", Message "Undefined"

Examples

onChange () Appels save (), depuis un champ non valide

Étapes pour reproduire (Turbo Forms, CRM 2015.1, -> CRM 2016.2)

Le formulaire (avec ou sans autres champs obligatoires) comporte un champ vide et requis.1. Perdez-vous le focus sur le champ vide ("title" dans cet exemple), cela déclenche l'icône Notification de champ:

2.

Enroulez le gestionnaire de changement pour un champ vide à enregistrer:3.

function forceSaveOnChangeOfTitle(){ Xrm.Page.data.save().then( function () {},

https://riptutorial.com/fr/home 7

function (error, message) {console.error("Error: " + error + " Message: " + message);} ); }

Entrez une valeur dans un champ vide.4.

Résultat:

Enregistrer échoue. Appelle le rappel d'échec avec le numéro d'erreur "null" et le message "non défini".

La notification de champ disparaît, mais le message requis est toujours affiché en bas à

droite:

Solutions de contournement connues:

Définissez la valeur de l'attribut sur lui-même:

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);} ); }

Utilisez 1ms Timeout avec:

function forceSaveOnChangeOfTitle(){ setTimeout(function() { Xrm.Page.data.save().then( function () {}, function (error, message) {console.error("Error: " + error + " Message: " + message);} ); }, 1); }

Lire Bug - TurboForms Xrm.Page.data.save (). Then () Erreurs avec ErrorCode "Null", Message "Undefined" en ligne: https://riptutorial.com/fr/dynamics-crm/topic/4560/bug---turboforms-xrm-page-data-save-----then----erreurs-avec-errorcode--null---message--undefined-

https://riptutorial.com/fr/home 8

Chapitre 4: CRM 2013: comment masquer les types d'activité indésirables dans la sous-grille

Introduction

J'ai récemment dû modifier la sous-grille Activité pour supprimer certains types d'activité du menu Ajouter une activité.

Notez que cela peut ne pas être une méthode prise en charge, mais il n'y a pas de méthode documentée pour le faire, alors j'ai dû trouver une solution et cela a fonctionné, de toute façon, dans CRM 2013.

Examples

Ajouter cette fonction à une ressource 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; }

https://riptutorial.com/fr/home 9

console.log('removing menu item: ' + val); parentMenu.removeChild(menuItem); } else { console.log('menu not found: ' + val); } }); } } }, 2000); }

Ensuite, appelez la fonction depuis l'événement onload en ajoutant le nom de la grille comme paramètre

https://riptutorial.com/fr/home 10

Lire CRM 2013: comment masquer les types d'activité indésirables dans la sous-grille en ligne: https://riptutorial.com/fr/dynamics-crm/topic/9836/crm-2013--comment-masquer-les-types-d-activite-indesirables-dans-la-sous-grille

https://riptutorial.com/fr/home 11

Chapitre 5: Quoi ne pas faire lors de la mise à niveau de votre Microsoft Dynamics CRM 2016

Introduction

Microsoft Dynamics CRM a considérablement évolué au cours des dernières années. De nombreuses mises à jour et versions ont été publiées, avec une gamme de nouvelles fonctionnalités et améliorations à chaque étape du processus. Lors de la mise à niveau d'un environnement Dynamics CRM, quelques points sont à prendre en compte pour garantir un processus de mise à niveau sans tracas.

Examples

Examinons certains éléments obligatoires à cocher avant de plonger dans un processus de mise à niveau à grande échelle

Sauvegarde de la base de données

La sauvegarde de la base de données est indispensable avant de démarrer tout processus de mise à niveau Dynamics CRM. Ceci est obligatoire pour toujours avoir la possibilité de revenir en arrière en cas de blocage majeur.

Mauvaise estimation

NE PAS sous-estimer le travail impliqué dans un processus de mise à niveau CRM.

Auditez votre Microsoft Dynamics CRM actuel et identifiez les solutions tierces utilisées. Pour ces solutions tierces, vérifiez la compatibilité de leur site Web développeur avec la version de CRM que vous avez l'intention de mettre à niveau. Téléchargez la nouvelle solution et conservez-la prête à tester une fois le processus de migration terminé.

Organisation CRM

NE PAS mettre à jour le CRM à l'aveuglette.

Dans un premier temps, nous devons préparer l'organisation CRM à mettre à niveau Microsoft Dynamics CRM.

Quelques conseils pour préparer une organisation

Assurez-vous que votre environnement CRM répond aux exigences des composants logiciels et matériels

https://riptutorial.com/fr/home 12

Lors de la mise à niveau de CRM 4, supprimez les enregistrements de la table répertoriée. (Le système essaiera de supprimer tous les enregistrements des tables ci-dessous lorsque nous migrerons vers CRM 2011, en cas d'échec, nous devrons supprimer manuellement les entrées de ces tables.) Les enregistrements des tables répertoriées ci-dessous entraîneront de mauvaises performances. du système.

AsyncOperationBase

WorkflowWaitSubscriptionBase

BulkDeleteFailureBase

WorkflowLogBase

DuplicateRecordBase

WorkflowWaitSubscriptionBase

Installez le dernier rollup avant de mettre à niveau CRM. Par exemple, pour effectuer une mise à niveau vers CRM 2013, le serveur CRM 2011 doit être dans le correctif cumulatif 6, le correctif cumulatif 14 ou un cumul ultérieur avant de pouvoir envisager une mise à niveau. Sinon, lors de la mise à niveau de l'environnement Dynamics CRM, une erreur sera générée.

Pour effectuer une mise à niveau vers MS CRM 2013, utilisez un outil de validation de code personnalisé pour rechercher les codes côté client (JavaScript) non pris en charge qui ne fonctionneront pas après la mise à niveau. Utilisez également l'outil de vérification des fonctionnalités héritées pour détecter les extensions de serveur qui utilisent les fonctionnalités du noeud final 2007 ou Microsoft Dynamics CRM 4.0.

Chaque nouvelle version de Microsoft Dynamics CRM présente des fonctionnalités plus puissantes, mais, parallèlement à l’attrait de la dernière version des logiciels, la question de savoir comment le processus de mise à niveau aura un impact sur votre entreprise.

Les avantages de la mise à niveau l'emporteront-ils sur les maux de tête? Est-ce qu'une mise à niveau en vaut la peine?

Maintenant, voici quelques pièges courants qui pourraient survenir lors de la mise à niveau de votre système Dynamics CRM.

La base de données d'organisation sélectionnée pour l'importation est une version différente de celle de la base de données d'organisation actuellement déployée

https://riptutorial.com/fr/home 13

Pour résoudre ce problème, nous devons installer UR6 ou version ultérieure dans l'environnement MS CRM 2011 lors de la mise à niveau vers MS CRM 2013. Après cela, la mise à niveau vers Dynamics CRM 2016 peut être effectuée sans problème

Organisation ne peut pas être mis à niveau.

https://riptutorial.com/fr/home 14

Pour résoudre ce problème, nous devons installer SP1 pour MS CRM 2013. Ensuite, la mise à niveau vers Dynamics CRM 2016 peut être effectuée sans problème.

Désinstallation du connecteur Microsoft Dynamics CRM pour les services de génération de rapports SQL Server

Pour résoudre ce problème, désinstallez les extensions de rapport Microsoft Dynamics CRM 2013 des programmes installés dans le Panneau de configuration avant de procéder à la mise à niveau vers Dynamics CRM 2016.

Le compte SQL Server Reporting Service est un utilisateur local et n'est pas pris en charge lors de

https://riptutorial.com/fr/home 15

la mise à niveau de CRM 2013 vers CRM 2015

Si Microsoft SQL Server 2012 Reporting Service a été installé via les paramètres par défaut (le compte de service est défini sur «ReportServer»), pour résoudre le problème, ouvrez le Gestionnaire de configuration de Reporting Services et mettez à jour le compte de service. . Suite à cela, nous ne rencontrerons aucun problème lors de la mise à niveau vers MS CRM 2016.

https://riptutorial.com/fr/home 16

Certains de nos apprentissages ont été simples et logiques, mais beaucoup pourraient les renoncer.

Lors de la mise à niveau, n'allez pas de pair avec la mise à niveau, il existe de nombreuses fonctionnalités pouvant répondre aux exigences actuelles de l'organisation et mises en œuvre par le biais de la personnalisation. Celles-ci peuvent être modélisées pour répondre aux exigences des versions ultérieures.

En outre, considérez les composants de communication / intégration avec lesquels le système existant ou tout système existant est connecté à Microsoft Dynamics CRM. Ce sont des liens importants qui ne devraient pas être affectés lors d'un processus de mise à niveau et, lorsqu'ils sont affectés, peuvent avoir un impact considérable sur la productivité.

Lire Quoi ne pas faire lors de la mise à niveau de votre Microsoft Dynamics CRM 2016 en ligne: https://riptutorial.com/fr/dynamics-crm/topic/9616/quoi-ne-pas-faire-lors-de-la-mise-a-niveau-de-votre-microsoft-dynamics-crm-2016

https://riptutorial.com/fr/home 17

Chapitre 6: Utiliser l'API Web avec jQuery

Examples

Utiliser l'option verbeuse pour obtenir les valeurs des options et des recherches

Par défaut, vous obtiendrez des codes et des identifiants pour les ensembles d'options et les recherches. Si vous souhaitez également obtenir l'étiquette, vous devez ajouter un en-tête supplémentaire à l'appel.

$.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['[email protected]']; var gendercodeValue = value.gendercode; }); });

Utiliser select pour réduire le nombre de champs

Pour des raisons de performances, vous devez minimiser le nombre de champs que vous demandez à l'API. Vous pouvez utiliser la propriété select pour le faire.

Cet exemple récupère la propriété name de tous les comptes:

$.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; }); });

Utilisation de l'expansion pour obtenir les propriétés de recherche

Si vous récupérez un seul enregistrement et que cet enregistrement contient une recherche, vous pouvez également récupérer les valeurs de la valeur de recherche à l'aide de l'option expand. Cela réduit le nombre d'appels à faire à l'API.

L'exemple obtient tous les comptes et le nom de famille du contact principal:

https://riptutorial.com/fr/home 18

$.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; }); });

Obtenir des comptes

Cet exemple récupère les comptes à l'aide d'une méthode jQuery ajax. La chose à noter est que vous devez définir l'en-tête dans l'appel pour faire le travail.

$.ajax({ url: Xrm.Page.context.getClientUrl() + '/api/data/v8.0/accounts', headers: { 'Accept': 'Application/json' } }).done(function (result) { var accounts = result.value; });

Utiliser un filtre pour filtrer votre requête API

Vous pouvez utiliser la propriété filter pour extraire un sous-ensemble de valeurs de CRM. Dans cet exemple, seuls les comptes dont le nom de société est égal à CompanyName sont renvoyés.

$.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; });

Lire Utiliser l'API Web avec jQuery en ligne: https://riptutorial.com/fr/dynamics-crm/topic/2243/utiliser-l-api-web-avec-jquery

https://riptutorial.com/fr/home 19

Chapitre 7: Web API envoie des exemples JSON

Remarques

Veillez à ajouter l'en-tête suivant à la demande de publication. Sinon, la demande échouera:

Content-Type: application/json

Examples

Créer une note / une annotation avec pièce jointe

URL: /api/data/v8.0/annotations

json:

{ "isdocument": true, "mimetype": "text/plain", "documentbody": "dGVzdA==", "[email protected]" : "/accounts(c6da77b6-d53e-e611-80b9-0050568a6c2d)", "filename": "test.txt" }

Comme l’objet peut être presque toutes les entités de CRM, vous devez définir l’entité avec le nom d’entité après objectid.

Créer un compte

URL: /api/data/v8.0/accounts

json:

{ "name" : "New account" }

Créer un contact avec un client parent

URL: /api/data/v8.0/contacts

json:

{ "firstname" : "New",

https://riptutorial.com/fr/home 20

"lastname" : "Contact", "[email protected]" : "/accounts(c6da77b6-d53e-e611-80b9-0050568a6c2d)" }

Comme le parentcustomerid peut être un compte ou un contact, vous devez définir le type d'entité que vous souhaitez définir avec _entityname après parentcustomerid.

Création d'un détail de devis

URL: /api/data/v8.0/quotedetails

json:

{ "[email protected]": "/products(11c0dbad-91df-e311-b8e5-6c3be5a8b200)", "[email protected]" : "/quotes(69b5e1ae-037f-e611-80ed-fc15b428dcdc)", "[email protected]" : "/uoms(73a5daea-6ddc-e311-a678-6c3be5a8c0e8)", "quantity": 1 }

Lire Web API envoie des exemples JSON en ligne: https://riptutorial.com/fr/dynamics-crm/topic/6367/web-api-envoie-des-exemples-json

https://riptutorial.com/fr/home 21

Crédits

S. No

Chapitres Contributeurs

1Se lancer dans la dynamique-crm

Arun Vinoth, Community, Daryl, Mehmet Seckin

2Actions d'appel à l'aide de l'API Web

Arun Vinoth, Pawel Gradecki

3

Bug - TurboForms Xrm.Page.data.save (). Then () Erreurs avec ErrorCode "Null", Message "Undefined"

Daryl

4

CRM 2013: comment masquer les types d'activité indésirables dans la sous-grille

M Costa

5

Quoi ne pas faire lors de la mise à niveau de votre Microsoft Dynamics CRM 2016

Yuvaraj

6Utiliser l'API Web avec jQuery

Arun Vinoth, Daryl, jcjr, Martijn Eikelenboom

7Web API envoie des exemples JSON

Arun Vinoth, Martijn Eikelenboom, winterfruit

https://riptutorial.com/fr/home 22