| Il existe plusieurs méthodes de récupération des données dans CRM 2011,
- L'utilisation de LinqToCrm,
- L'utilisation de QueryExpression
- L'utilisation de FetchXML
La méthode LinqToCrm vous permet d'écrire vos requêtes de données en utilisant le fournisseur Linq. Ce dernier se charge de convertir votre expression de requête en QueryExpression.
La méthode QueryExpression vous permet de décrire votre expression de recherche, en y précisant des conditions de filtre notamment.
La 3ième méthode, FetchXML, vous permet de décrire votre expression de recherche directement en XML, en y décrivant votre recherche.
De ces 3 méthodes, la méthode FetchXML est la seule qui vous permet de gérer le regroupement de vos données directement, mais également des fonctions d'agregat (Sum, Avg, Min, Max, Count).
Voici un exemple de code qui récupère à l'aide de FetchXML la liste des comptes de notre organisation et nous remonte l'identifiant unique du compte et le nom du compte.
Si par contre on regarde à l'aide du SQL Profiler la requête SQL qui est générée, on s'aperçoit qu'une clause TOP 5001 est rajoutée dans le SELECT, ce qui limite la taille maximum du jeu de données à 5001 clients maximum.
Cette limite de 5001 items est implémentée par défaut pour des raisons de performance.
Dans ce cas, 2 choix s'offrent à nous :
- Soit limiter encore plus le jeu de résultat en réduisant le nombre d'éléments maximum remonté,
- Soit supprimer directement la clause TOP de notre requête SELECT.
Dans ces 2 cas, cela passe par l'ajout d'une clé de registre, la procédure est expliquée ici dans la section plus d'information.
Concrètement, pour le 1er scénario à savoir réduire le nombre d'éléments retournés, il suffit de rajouter une clé DWORD MaxRowPerPage dans HKLM/Software/Microsoft/MSCRM, et de lui donner une valeur inférieure à 5000.
Dans mon cas de figure, j'ai passé la valeur à 1000 (en décimal) et voilà le résultat, un SELECT TOP 1001
Pour le 2ième scénario, à savoir remonter tous les éléments sans limite (et donc supprimer cette fameuse clause TOP) il suffit de rajouter une clé DWORD TurnOffFetchThrottling toujours dans HKLM/Software/Microsoft/MSCRM, et de lui donner une valeur différente de 0, 1 par exemple.
Cette fois-ci on constate bien que la clause TOP a totalement disparu. A noter que si les 2 valeurs sont présentes, c'est le TurnOffFetchThrottling qui sera appliqué.
|
| Microsoft Dynamic CRM 2011 vous propose la classe Entity comme classe de base de toutes vos entités.
A l'aide de cette classe, vous pouvez récupérer toutes les entités de votre organisation.
Par exemple, pour créer un nouveau compte, vous pourriez écrire :
Comme vous pouvez le constater, à chaque fois nous utilisons la classe Entity, et nous sommes obligés de hard-coder le nom de l'entité et le libellé de nos attributs, ce qui n'est pas terrible du tout…
Pour contourner ce problème, le SDK de CRM 2011 nous met à disposition l'outil CRMSvcUtil (qui se trouve dans le dossier bin du SDK…) qui nous permet de générer des classes fortement typées pour nos entités, standards et personnalisées.
CRMSvcUtil nous permet de générer un fichier de classe (en C# ou VB.Net…) qui contiendra des classes fortement typées sur les entités actuellement présentes dans notre organisation. Pour cela, il nous suffit de passer en ligne de commande, de se positionner dans le dossier bin du SDK et d'exécuter la commande ci-dessous, ou /l représente le langage, dans notre cas C#, /url représente l'url vers notre service Organization.svc, /o nous permet de nommer le fichier qui sera généré, /n de préciser quel sera le namespace des classes générées et enfin /serviceContextName est utilse si nous envisageons de faire tu LinqToCrm et nous permet de générer le contexte permettant de persister nos entités en base via LinqToCrm.
Une fois le fichier généré, il nous suffit de l'intégrer dans la couche Model de notre application (ou ailleurs) et de consommer les classes précédemment crées.
Désormais, nous pouvons remplacer la méthode Create précédente par celle-ci :
Cette fois, nous travaillons bien sur un objet fortement typé, Account, mais également tous les attributs de notre objet deviennent des propriétés fortement typées.
Parmi les avantages de l'utilisation du typage fort, on peut noter :
- Possibilité d'utiliser l'auto-complétion dans Visual Studio pour l'accélération des temps de développements et la réduction des erreurs liées à des fautes de frappe
- Possibilité d'utiliser nativement le databinding sur les métadonnées de nos entités (qui deviennent des propriétés… par défaut il n'est pas possible d'utiliser du databinding sur les métadonnées de la classe Entity).
Pami les inconvénients, on peut noter :
- Nécessité de passer par un outil pour générer nos classes fortement typées
- Nécessité de regénérer nos classes lors de la mise à jour des métadonnées de nos entités
- Petite perte de performance liée aux opérations de sérialisation/désérialisation durant le transfert de données
|
| Microsoft Dynamics CRM 2011 nous fournit un certain nombre de services avec lesquels nous pouvons travailler à la récupération de données dans le CRM, parmi lesquels :
- Le service Discovery.svc, qui nous permet de récupérer toutes les organisations CRM auxquelles l'utilisateur a accès.
- Le service Organization.svc, qui nous permet de récupérer toutes les données d'une organisation en particulier
- Et le service OrganizationData.svc, qui nous permet de réaliser principalement des opérations CRUD (Create, Read, Update, Delete) sur une organization en particulier.
Tous ces services sont visibles directement sur le serveur web CRM, au niveau d'un site CRM. Ils se trouvent au sein du site, dans le dossier XRMServices/2011, comme illustré ci-dessous.
De ces 3 services, le servcice Discovery.svc est le seul qui soit global à toutes les organisations d'un déploiement, et pour cause, il nous permet de découvrir toutes les organisations d'un déploiement ! Pour les autres services, il sont « Organization Specific », ce qui signifie que vous devrez instancier à chaque fois un service par organisation actuellement déployée. Mais chaque chose en son temps, revenons à l'objet de ce post et découvrons comment récupérer toutes les organisations auxquelles un utilisateur a accès !
Pour cela, nous allons donc travailler avec notre service Discovery.svc. Pour ce faire, j'ai créé une application WPF dans laquelle j'ai rajouté les dlls suivantes, les plus fréquemment utilisées lors de développement sur la plateforme CRM 2011 :
- Microsoft.xrm.sdk.dll (Provenance SDK CRM 2011)
- Microsoft.crm.sdk.proxy.dll (Provenance SDK CRM 2011)
- System.Runtime.Serialization
- System.ServiceModel
J'ai ensuite créé mon interface WPF (le code complet du projet se trouve ici).
Et j'ai implémenté un handler sur le clic du bouton Discover que voici (Attention ce code ne fonctionne qu'avec des déploiement avec une authentification windows. Pour les autres types de déploiement, il faudrait passer par la classe ServerConnection pou se faciliter le travail.) :
Et voici le résultat final à l'aide d'un bon vieux DataTemplate.
Pour récupérer le code source du projet, ça se passe ici. |
| Si vous avez déjà essayé de positionner des entêtes d'hôtes (Host Header) sur des sites web afin d'utiliser le meme port (80 pour http, 443 pour https) pour l'ensemble de vos sites web hébergés sur la même machine, vous avez déjà du constater que vous pouviez le faire sur le binding http.
Néanmoins, si vous essayez de le faire sur un binding https, IIS vous grise la case Host name.
Le problème qui se pose si vous n'affectez pas de bindings SSL à vos sites, c'est que vous devrez configurer des ports différents (autre que le 443) sur chacun de vos sites en https et vos utilisateurs devront alors utiliser une adresse du type https://mysite:4431 pour utiliser votre site en https.
Pour résoudre ce problème de bindings SSL, il vous faut utiliser les outils en ligne de commande de IIS et être administrateur de votre serveur web.
A mon sens, la procédure la plus facile est de passer par le script adsutil.vbs.
La première chose à faire est donc de se positionner dans le répertoire contenant ce script, c:\inetpub\AdminScripts
Ensuite, il faut exécuter la commande suivante : cscript adsutil.vbs set /w3svc/id_du_site/SecureBindings " :443 :host_header " où id_du_site représente l'identifiant de votre site, visible dans IIS comme ci-dessous
Et host_header représente l'entête d'hotes que vous souhaitez utiliser.
Par exemple dans mon cas, pour pouvoir accéder en https à mon site test via l'url suivante https://test.coforcert.com, voici le script que j'ai utilisé
cd c:\inetpub\AdminScripts
cscript adsutil.vbs set /w3svc/3/SecureBindings ":443:test.coforcert.com"
|
Et voila le résultat

|
| Pour créer un nouveau projet dans Project 2010, comme dans tout document office, il faut passer par le bouton Office, puis Nouveau.
Jusque-là, rien de bien compliqué ! Cependant, ensuite, il faut affecter un certain nombre de paramètres à notre nouveau projet, comme son nom, sa date de démarrage ou encore sa durée. C'est donc là tout l'intérêt de ce billet.
Une fois votre projet créé, pour lui affecter un nom, cliquez sur le bouton office, puis sélectionnez Project Information > Advanced Properties
Dans l'onglet Summary, renseignez ensuite les informations sur votre projet, puis validez.
Nous venons donc de renseigner des informations sur notre projet. A présent, il ne nous reste plus qu'à préciser la date de démarrage ou de fin de notre projet, mais pas les 2 en même temps. Pour déterminer l'autre date, Project la calculera en utilisant les informations sur la durée des taches que nous renseignerons dans le WBS du projet. Pour cela, cliquez sur l'onglet Project, puis Project Information. Dans la boite de dialogue, sélectionnez dans le menu déroulant Schedule from, soit la date de démarrage du projet soit la date de fin du projet, puis en fonction de ce choix, renseignez la date.

|
| Les milestones permettent de suivre des événements ponctuels importants dans votre planning de projet.
Les milestones peuvent par exemple pour permettre des représenter des étapes de validation d'un projet, ou encore des deadlines.
Techniquement parlant, un milestone n'est « rien de plus » qu'une tache dont la durée est de 0.
Pour créer un milestone, il vous suffit donc de créer une nouvelle tâche et lui affecter une valeur de 0, ou alors, de passer par l'onglet Task, puis de sélectionner milestone dans le groupe Insert
Une tache d'une durée de 0 (jour) est donc créée ; il vous suffit de lui affecter des propriétés comme son nom, ses prédécesseurs ou sa date de démarrage, etc…

|
| Dans Project, vous avez la possibilité d'affecter une durée à une tache.
Par défaut, ces durées sont saisies en jours
Néanmoins, vous pouvez avoir envie de créer des taches qui durent quelques heures ou même plusieurs mois.
Plutôt que de sortir vos calculettes pour convertir ces taches en jours, Project vous autorise à préciser l'unité de temps souhaité. Le tableau suivant vous liste les unités de temps disponibles :
Vous pouvez saisir… |
… Project le traduira en … |
3m |
3 minutes (3min affiché à l'écran) |
3h |
3 heures (3hr affiché à l'écran) |
3d |
3 jours (3days affiché à l'écran) |
3w |
3 semaines (3wk affiché à l'écran) |
3mo |
3 mois (3mon affiché à l'écran) |
|
| Par défaut dans Project, lorsque je définis une tâche sur 2j et la fais commencer le vendredi, elle s'étale du vendredi au lundi, donnant ainsi au project manager que la tâche est d'une durée de 4j.
Pour éviter cela, nous pouvons masquer la tache sur les périodes chômées. Il nous suffit alors de double-cliquer sur la timescale et d'aller sur l'onglet Non-working time correspondant aux périodes chômées. Il ne nous reste plus qu'à choisir l'option dessiner les périodes chômées au-dessus des barres de tâches.
Et voilà le résultat !

|
| Par défaut, lorsque vous créez un nouveau projet, ce champ est masqué. Cette tache vous permet de remontrer d'un cran dans l'arborescence de votre projet et donc de commencer votre arborescence par le nom du projet.
Pour l'afficher, cliquez sur File > Options, puis sur Advanced et enfin activez la case à cocher Show project summary task
Autre option, depuis une vue Gantt, passez par l'onglet Format, puis dans la section Show/Hide, Activez/Désactivez le Project Summary Task.

|
| Tout comme dans les applications Office, vous avez la possibilité de masquer temporairement le ruban sur une page SharePoint.
Pour ce faire, il vous suffit de double-cliquer sur l'onglet actif pour masquer le ruban !
Et voilà le résultat !

|
Gérer les abonnements /_layouts/images/ReportServer/Manage_Subscription.gif /dntamack/_layouts/ReportServer/ManageSubscriptions.aspx?list={ListId}&ID={ItemId} 0x80 0x0 FileType rdl 350 Gérer les sources de données /dntamack/_layouts/ReportServer/DataSourceList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType rdl 351 Gérer les datasets partagés /dntamack/_layouts/ReportServer/DatasetList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType rdl 352 Gérer les paramètres /dntamack/_layouts/ReportServer/ParameterList.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 353 Gérer les options de traitement /dntamack/_layouts/ReportServer/ReportExecution.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 354 Gérer les plans d'actualisation du cache /dntamack/_layouts/ReportServer/CacheRefreshPlanList.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 355 Afficher l'historique du rapport /dntamack/_layouts/ReportServer/ReportHistory.aspx?list={ListId}&ID={ItemId} 0x0 0x40 FileType rdl 356 Afficher les éléments dépendants /dntamack/_layouts/ReportServer/DependentItems.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsds 350 Modifier la définition de la source de données /dntamack/_layouts/ReportServer/SharedDataSource.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsds 351 Afficher les éléments dépendants /dntamack/_layouts/ReportServer/DependentItems.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType smdl 350 Gérer les rapports consultables à l'aide de clics /dntamack/_layouts/ReportServer/ModelClickThrough.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType smdl 352 Gérer la sécurité des éléments de modèles /dntamack/_layouts/ReportServer/ModelItemSecurity.aspx?list={ListId}&ID={ItemId} 0x0 0x2000000 FileType smdl 353 Régénérer le modèle /dntamack/_layouts/ReportServer/GenerateModel.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType smdl 354 Gérer les sources de données /dntamack/_layouts/ReportServer/DataSourceList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType smdl 351 Charger dans le Générateur de rapports /dntamack/_layouts/ReportServer/RSAction.aspx?RSAction=ReportBuilderModelContext&list={ListId}&ID={ItemId} 0x0 0x2 FileType smdl 250 Modifier dans le Générateur de rapports /_layouts/images/ReportServer/EditReport.gif /dntamack/_layouts/ReportServer/RSAction.aspx?RSAction=ReportBuilderReportContext&list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 250 Modifier dans le Générateur de rapports /dntamack/_layouts/ReportServer/RSAction.aspx?RSAction=ReportBuilderDatasetContext&list={ListId}&ID={ItemId} 0x0 0x4 FileType rsd 250 Gérer les options de mise en cache /dntamack/_layouts/ReportServer/DatasetCachingOptions.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsd 350 Gérer les plans d'actualisation du cache /dntamack/_layouts/ReportServer/CacheRefreshPlanList.aspx?list={ListId}&ID={ItemId}&IsDataset=true 0x0 0x4 FileType rsd 351 Gérer les sources de données /dntamack/_layouts/ReportServer/DataSourceList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType rsd 352 Afficher les éléments dépendants /dntamack/_layouts/ReportServer/DependentItems.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsd 353 |
|
|
|
|
|
| Bienvenue dans les blogs SharePoint. Utilisez cet espace pour fournir un message bref concernant ce blog ou ses auteurs. Pour modifier ce contenu, cliquez sur « Modifier la page » dans le menu « Actions du site ». |
|
|
Gérer les abonnements /_layouts/images/ReportServer/Manage_Subscription.gif /dntamack/_layouts/ReportServer/ManageSubscriptions.aspx?list={ListId}&ID={ItemId} 0x80 0x0 FileType rdl 350 Gérer les sources de données /dntamack/_layouts/ReportServer/DataSourceList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType rdl 351 Gérer les datasets partagés /dntamack/_layouts/ReportServer/DatasetList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType rdl 352 Gérer les paramètres /dntamack/_layouts/ReportServer/ParameterList.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 353 Gérer les options de traitement /dntamack/_layouts/ReportServer/ReportExecution.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 354 Gérer les plans d'actualisation du cache /dntamack/_layouts/ReportServer/CacheRefreshPlanList.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 355 Afficher l'historique du rapport /dntamack/_layouts/ReportServer/ReportHistory.aspx?list={ListId}&ID={ItemId} 0x0 0x40 FileType rdl 356 Afficher les éléments dépendants /dntamack/_layouts/ReportServer/DependentItems.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsds 350 Modifier la définition de la source de données /dntamack/_layouts/ReportServer/SharedDataSource.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsds 351 Afficher les éléments dépendants /dntamack/_layouts/ReportServer/DependentItems.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType smdl 350 Gérer les rapports consultables à l'aide de clics /dntamack/_layouts/ReportServer/ModelClickThrough.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType smdl 352 Gérer la sécurité des éléments de modèles /dntamack/_layouts/ReportServer/ModelItemSecurity.aspx?list={ListId}&ID={ItemId} 0x0 0x2000000 FileType smdl 353 Régénérer le modèle /dntamack/_layouts/ReportServer/GenerateModel.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType smdl 354 Gérer les sources de données /dntamack/_layouts/ReportServer/DataSourceList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType smdl 351 Charger dans le Générateur de rapports /dntamack/_layouts/ReportServer/RSAction.aspx?RSAction=ReportBuilderModelContext&list={ListId}&ID={ItemId} 0x0 0x2 FileType smdl 250 Modifier dans le Générateur de rapports /_layouts/images/ReportServer/EditReport.gif /dntamack/_layouts/ReportServer/RSAction.aspx?RSAction=ReportBuilderReportContext&list={ListId}&ID={ItemId} 0x0 0x4 FileType rdl 250 Modifier dans le Générateur de rapports /dntamack/_layouts/ReportServer/RSAction.aspx?RSAction=ReportBuilderDatasetContext&list={ListId}&ID={ItemId} 0x0 0x4 FileType rsd 250 Gérer les options de mise en cache /dntamack/_layouts/ReportServer/DatasetCachingOptions.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsd 350 Gérer les plans d'actualisation du cache /dntamack/_layouts/ReportServer/CacheRefreshPlanList.aspx?list={ListId}&ID={ItemId}&IsDataset=true 0x0 0x4 FileType rsd 351 Gérer les sources de données /dntamack/_layouts/ReportServer/DataSourceList.aspx?list={ListId}&ID={ItemId} 0x0 0x20 FileType rsd 352 Afficher les éléments dépendants /dntamack/_layouts/ReportServer/DependentItems.aspx?list={ListId}&ID={ItemId} 0x0 0x4 FileType rsd 353 |
|
|