Rechercher dans ce blog

mardi 23 septembre 2014

Correctif cumulatif 1 pour Microsoft Dynamics CRM 2013 Service Pack 1

Version : 6.1.1.132

Fonctionnel
* Tri dans la vue de recherche de l'entité Site
* Liste Marketing
* Liste d'options
* Création d'enregistrements dupliqués
* Sélection du corps d'un courrier électronique fermé
* Navigation entre les pages avec le bouton Enregistrer et nouveau.
* Affichage des notes
* Sous-grille Sales-Team dans une opportunité
* Bouton Ajouter un concurrent
* Révision d'un devis
* Export d'une vue vers Excel
* Sous-grille avec une relation N:N

Administration
* Modèle de courrier électronique avec une pièce jointe

Client Outlook
* Formulaire dans CRM pour Outlook
* Courriers électronique créés en mode hors connexion
* Mise à jour d'une ressource web pour le client CRM pour Outlook
* Mise en forme d'une vue dans le client CRM pour Outlook
* Bouton Convertir en dans le client CRM pour Outlook

Personnalisation
* Barre de commande disparaît lors de l'appel d'une page personnalisée
* Groupe d'option sans étiquette
* Champ subjectid avec une contrainte obligatoire
* Désactivation de l'option CEIP
* Visibilité des onglets par programmation

CRM E-mail Router
* Suivi d'un courrier électronique.

MOCA
* Configuration pour iOS7
* Vues système désactivées

jeudi 11 septembre 2014

Mise à jour : Microsoft Dynamics Marketing Spring '14 Resources

Microsoft Dynamics Marketing - Analytic Workbooks: 16.2.62.0
Microsoft Dynamics Marketing - CRM Connector: 16.2.62.0
Microsoft Dynamics Marketing - Language Packs: 16.2.62.0

dimanche 7 septembre 2014

SDK 6.1.1 est disponible

Microsoft Dynamics CRM Software Development Kit (SDK) for CRM Online and CRM 2013 (on-premises)
* Mise à jour de des Assemblys pour le correctif cumulatif 1 de Microsoft Dynamics CRM 2013 SP1. Ces Assemblys sont aussi compatibles avec Microsoft Dynamics CRM Online Printemps'14.
* Mise à jour du programme CrmSvcUtil.exe pour se connecter à Microsoft Dynamics CRM Online en utilisant le fournisseur d'identité Office 365.
* Le maximum du nombre de boutons dans un formulaire passe de 5 à 7.
* Il n'est plus possible de créer un espace de noms Access Control Service (ACS) en utilisant le portail de gestion Microsoft Azure.
* Ajout des informations sur les 2 paramètres du nouveau contrôle Timer.
* Dans l'entité Incident, L'attribut PrimaryContactId doit être utilisé à la place de l'attribut ResponsibleContactId pour associer un incident à un enregistrement Contact.
* Modification de la description du type par défaut des calendriers
* Les formulaires optimisés pour la lecture seront supprimés dans la version supportée.
* Ajout d'un exemple d'utilisation de la méthode addCustomFilter.

Numérotation automatique par workflow : Différents paramétrages possibles

Suite de l'article : Numérotation automatique par workflow : Activité de workflow personnalisée

Rappel :
Dans l'article précédent, nous avons créé une activité de workflow personnalisée pour générer une numérotation automatique. Dans cette article, nous allons décrire les différents paramétrages possibles de numérotation.

1/ Préfixe-000001-Suffixe

Paramétrage :
 Résultat :

2/ 000001-Suffixe

Paramétrage :
 Résultat :

3/ Préfixe-000001

Paramétrage :
 Résultat :


4/ 000001

Paramétrage :
 Résultat :


5/ Modification de la taille du numéro incrémental

Paramétrage :

Résultat :

Paramétrage :
 Résultat :

Numérotation automatique par workflow : Activité de workflow personnalisée

Suite de l'article : Numérotation automatique par workflow temps réel vs Plugin

Rappel de l'article précédent :
La numérotation automatique par workflow est facilement paramétrable mais son impact sur la création d'enregistrement est plus important qu'un plugin (120 % en plus).

Dans cet article, nous allons créer une activité de workflow personnalisée pour réduire le temps de traitement du workflow tout en gardant la flexibilité de paramétrage du workflow.

1/ Créer une entité Counter avec les attributs :
  • Name : Chaîne de caractères
  • Prefix : Chaîne de caractères
  • Number : Décimal
  • Number Length : Décimal
  • Suffix : Chaîne de caractères

2/ Créer l'activité de Workflow personnalisé.

En paramètre d'entrée, l'enregistrement Counter correspondant à la numérotation d'une entité.
En paramètre de sortie, la numérotation générée.

namespace AutoNumberingWorkflowActivity
{
    using System;
    using System.Activities;
    using System.ServiceModel;
    using System.Text;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Messages;
    using Microsoft.Xrm.Sdk.Query;
    using Microsoft.Xrm.Sdk.Workflow;

    public sealed class AutoNumbering : CodeActivity
    {
        /// 
        /// Executes the workflow activity.
        /// 
        /// The execution context.
        protected override void Execute(CodeActivityContext executionContext)
        {
            // Create the tracing service
            ITracingService tracingService = executionContext.GetExtension();

            if (tracingService == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
            }

            tracingService.Trace("Entered Class1.Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
                executionContext.ActivityInstanceId,
                executionContext.WorkflowInstanceId);

            // Create the context
            IWorkflowContext context = executionContext.GetExtension();

            if (context == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
            }

            tracingService.Trace("Class1.Execute(), Correlation Id: {0}, Initiating User: {1}",
                context.CorrelationId,
                context.InitiatingUserId);

            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension();
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {

                //Create a request
                RetrieveRequest _retrieveRequest = new RetrieveRequest();
                _retrieveRequest.ColumnSet = new ColumnSet(new string[] { "new_prefix", "new_number","new_numberlength","new_suffix" });
                _retrieveRequest.Target = Counter.Get(executionContext);

                //Execute the request
                RetrieveResponse _retrieveResponse = (RetrieveResponse)service.Execute(_retrieveRequest);

                //Retrieve the Counter Entity
                Entity _counterRecord = _retrieveResponse.Entity as Entity;

                StringBuilder _sbuilder = new StringBuilder();
                if (_counterRecord.Contains("new_prefix"))
                {
                    _sbuilder.Append((String)_counterRecord["new_prefix"]);
                    _sbuilder.Append("-");
                }
                if (_counterRecord.Contains("new_numberlength"))
                {
                    _sbuilder.AppendFormat(String.Concat("{0:D", (int)(Decimal)_counterRecord["new_numberlength"], "}"), (int)(Decimal)_counterRecord["new_number"]);
                }
                else 
                {
                    _sbuilder.AppendFormat("{F0}",(Decimal)_counterRecord["new_number"]);
                }
                if (_counterRecord.Contains("new_suffix"))
                {
                    _sbuilder.Append("-");
                    _sbuilder.Append((String)_counterRecord["new_suffix"]);
                }

                //Set the variable
                Number.Set(executionContext, _sbuilder.ToString());

                //Increment
                decimal _value = (Decimal)_counterRecord["new_number"];

                Entity _updateCounter = new Entity("new_counter");
                _updateCounter.Id = _counterRecord.Id;
                _updateCounter["new_number"] = _value + 1;
                service.Update(_updateCounter);


            }
            catch (FaultException e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());

                // Handle the exception.
                throw;
            }

            tracingService.Trace("Exiting Class1.Execute(), Correlation Id: {0}", context.CorrelationId);
        }

        [RequiredArgument]
        [Input("Select Counter Record")]
        [ReferenceTarget("new_counter")]
        public InArgument Counter { get; set; }

        [Output("Number")]
        public OutArgument Number { get; set; }

    }
}

3/Importer cette assembly dans la solution.

4/Création du workflow.

La première étape permet de renseigner l'enregistrement pour la numérotation.
 La seconde étape modifie l'attribut sur l'enregistrement cible avec le champ retourné par l'activité de workflow.
Après activation du workflow, voici les tests.


Tableau de comparaison pour un chargement de 100 enregistrements par la méthode CreateRequete.

Type de compteurDurée en msRemarque
Workflow temps réel7583Impossible de définir la longueur du nombre incrémental
Plugin3450Trop spécifique à l'entité cible
Activité de workflow5060Paramétrable à souhait

L'utilisation d'une activité de workflow personnalisé permet de réduire le temps d'exécution de 30 %. De plus, le paramétrage du compteur est plus souple et permet d'ajouter une numérotation automatique sur n'importe quelle entité. Le prochain article décrira les différentes possibilités de numérotation.

samedi 6 septembre 2014

Numérotation automatique par workflow temps réel vs Plugin

Je me suis inspiré de l'article : Auto-Numbering with CRM Workflows: Real-Time vs. Asynchronous.

1/ Création d'une entité Compteur. On ajoute les attributs :
  • Entité : Chaîne de caractères
  • Préfixe : Chaîne de caractères
  • Numéro : Décimal
  • Suffixe : Chaîne de caractères
 
 Ce qui donne :

2/ Création d'une relation 1:N entre l'entité où l'on souhaite la numérotation (dans cet exemple, elle se nomme Maison) et l'entité compteur.

3/ Création du Workflow temps réel
La première étape permet de lier l'enregistrement à l'enregistrement Compteur.
 La seconde étape renseigne le numéro.
La dernière étape incrémente la valeur au niveau du compteur.
4/ Activer le workflow et regardons les résultats après des essais d'import de fichier.

 Comparons maintenant les performances d'intégration de données entre la numérotation automatique par workflow temps réel et par plugin avec un chargement de 100 enregistrements importés en utilisant la fonction CreateRequest.

Type de compteurDurée en msRemarque
Workflow temps réel7583Impossible de définir la longueur du nombre incrémental
Plugin3450Trop spécifique à l'entité cible

Pour réaliser un compteur générique qui possèdent à la fois un impact minimum sur le chargement de données et tout en ayant un paramétrage aisé, il faut donc utiliser une activité de workflow personnalisée appelée depuis un workflow temps réel. Ce sera le sujet du prochain article.

vendredi 5 septembre 2014

Dynamics CRM Online 2015 : la feuille de route révélée

JDN du 05/09/2014

D'ici la fin de l'année, une nouvelle version de l'outil de CRM sera dévoilée. Au programme : extension de l'API et ouverture sur de nouveaux terminaux. La mise à jour 2015 est aussi dévoilée.

Microsoft vient de dévoiler la feuille de route de Dynamics CRM pour les 12 mois à venir. Au quatrième trimestre 2014, l'éditeur prévoit de sortir une nouvelle version de son outil de gestion de la relation client (nom de code : Vega). Elle devrait être lancée à la fois en version SaaS et pour les serveurs internes d'entreprise (version on-premise). Vega étendra notamment la compatibilité de la solution à de nouveaux types de terminaux mobiles. Elle devrait aussi améliorer la prise en charge des scénarios de vente : la gestion des relations entre produits, des bundle de produits, ou encore des suggestions par exemple.
Autre évolution saillante, Microsoft annonce vouloir booster les fonctions de gestion de la relation étendue (ou eXtended Relationship Management), qui visent à couvrir la relation avec tous les interlocuteurs de l'entreprise (clients, mais également partenaires, actionnaires, contacts tiers, fournisseurs...). L'analytics est également au menu, via une meilleure intégration de l'outil de reporting Power BI, et la prise en charge du reporting transactionnel pour les apps Windows Mobile. Enfin, on relève l'extension des possibilités d'API client.
Quant à la version suivante de Dynamics CRM, sa sortie est annoncée pour le deuxième trimestre 2015. Ses améliorations se limiteront aux briques de la suite disponibles uniquement en mode cloud : Microsoft Social Listening (reporting social), Dynamics Marketing (gestion de campagnes marketing multicanales) et Parature (la technologie de help desk acquise par Microsoft en janvier dernier).