Rechercher dans ce blog

Affichage des articles dont le libellé est Personnalisation. Afficher tous les articles
Affichage des articles dont le libellé est Personnalisation. Afficher tous les articles

mardi 26 avril 2011

Cacher les volets mise en route pour tous les utilisateurs

Voici la suite du message Cacher les volets mise en route.

Cette fois, les volets mise en route ne sera pas visible pour tous les utilisateurs.
 

Ouvrir dans la zone dans Paramètres, la section Administration et sélectionner Paramètres du système. Dans  l'onglet Général, mettre à non la section Activer l'option d'affichage pour les volets Mise en route.
 

mardi 19 avril 2011

Désactiver un champ Lookup

Lookup normal

Lookup en lecture seul et désactivé


La fonction a mettre dans le OnLoad d'une entité.
function DesactiveLookup(sNomAttribut){

crmForm.all[sNomAttribut].Disabled=true;

var loSpan = document.getElementById(sNomAttribut + '_d').getElementsByTagName('SPAN');
for (var liSpan = 0; liSpan < loSpan.length; liSpan++){
loSpan[liSpan].onclick = function(){};
loSpan[liSpan].style.textDecoration ='none';
loSpan[liSpan].style.color = '#000000';
}}
Pour l'utiliser, il suffit d'appeler la fonction avec en argument le nom de l'attribut Lookup.
DesactiveLookup('parentcustomerid');

Dynamics CRM intégré à Microsoft Office Word 2007

Préalablement le composant Visual Studio pour Office doit être installé.

Le complément créé recherche les contacts par rapport au Nom complet.
Après sélection du contact, l'adresse est insérée au niveau du pointeur dans le document Office Word.


Voici les deux fonctions principales utilisées :
Les fonctions utilisent LINQ pour CRM.

Fonction de recherche des contacts :
        private void prvLectureContacts()
        {
            var loCrm = new Xrm.XrmDataContext("CRM");

            // Setup the Authentication Token
            CrmAuthenticationToken loToken = new CrmAuthenticationToken();
            loToken.AuthenticationType = AuthenticationType.AD;  
            loToken.OrganizationName =  "entreprise";

            CrmService loCrmService = new CrmService();
            
            UriBuilder loBuilder = new UriBuilder("http://entreprise:5555/entreprise");
            loBuilder.Path = "//MSCRMServices//2007//CrmService.asmx";
            loCrmService.Url = loBuilder.Uri.ToString();
            loCrmService.CrmAuthenticationTokenValue = loToken;
            

            loCrmService.Credentials = System.Net.CredentialCache.DefaultCredentials;
            loCrmService.CrmAuthenticationTokenValue = loToken;

            WhoAmIRequest loRequest = new WhoAmIRequest();
            WhoAmIResponse loResponse = (WhoAmIResponse)loCrmService.Execute(loRequest); 

            var loRequetContact = from c in loCrm.contacts
                                  where c.ownerid.Value == loResponse.UserId
                                  && c.fullname == txtRecherche.Text  
                                select c;

            cbResultat.Items.AddRange(loRequetContact.ToArray());
            cbResultat.DisplayMember = "fullname"; 
        }

Fonction d'insertion de l'adresse du contact:
         private void buInsererAdresse_Click(object sender, EventArgs e)
        {
            poRange = Globals.ThisAddIn.Application.ActiveDocument.Content;

            try
            {
                String loAdresseSelectionnee = ((Xrm.contact)cbResultat.SelectedItem).fullname + "\n";
                loAdresseSelectionnee += ((Xrm.contact)cbResultat.SelectedItem).address1_line1 + "\n";
                loAdresseSelectionnee += ((Xrm.contact)cbResultat.SelectedItem).address1_postalcode + " ";
                loAdresseSelectionnee += ((Xrm.contact)cbResultat.SelectedItem).address1_city + "\n";
                poRange.InsertAfter(loAdresseSelectionnee);
            }
            catch
            {
                MessageBox.Show("L'adresse du contact ne peut pas être ajoutée au document.");  
            }
        }

Code source disponible : ContactAddIn_mscrm4

vendredi 15 avril 2011

Mettre en lecture seule tous les champs d'un formulaire

function LectureSeule(){
var iLen = crmForm.all.length;
for (i = 0; i < iLen; i++)
{
   o = crmForm.all[i]; 
   if (o.id != ""){o.Disabled=true;}  
}
}

mercredi 13 avril 2011

Modification de la couleur des rendez-vous du calendrier de service

Par défaut les couleurs des rendez-vous sont :
- Blanc pour le statut Libre,
- Bleu pour le statut Occupé,
- Gris pour le statut Absent.








Le mappage des couleurs se situe dans la personnalisation Configuration ISV entre les balises .
Le code du type de l'entité Appointment (Rendez-vous) est le 4201.














Les valeurs des statuts sont définies dans l'aide du SDK.











Pour les trois exemples de statut : 
- Blanc pour le statut Libre - valeur : 1 - CssClass : gantBlockAppointmentStatus1,

- Bleu pour le statut Occupé - valeur : 5 - CssClass : gantBlockAppointmentStatus5,
- Gris pour le statut Absent - valeur : 6 - CssClass : gantBlockAppointmentStatus6.

La définition des CssClass se trouve dans le fichier :
../Microsoft Dynamics CRM\CRMWeb\SM\Gantt\style\GanttControl.css.aspx




 
Nous allons modifier la couleur des trois statuts, en s'appuyant sur le site http://www.color-hex.com/color/ pour définir les nouvelles valeurs hexadécimales des couleurs.  

Le fichier de définition des  CssClass devient :
































Résultat :

Après le redémarrage de IIS et le vidage du cache IE, le calendrier de service devient :

dimanche 10 avril 2011

LINQ pour Microsoft Dynamics CRM 4.0

LINQ (Language Integrated Query) est un ensemble de fonctionnalités introduites dans Visual Studio 2008 qui étend les fonctions de requête puissantes à la syntaxe des langages C# et Visual Basic.
LINQ introduit des modèles standard et facilement assimilables pour l'interrogation et la mise à jour de données.

Connexion au CRM.
var crm = new Xrm.XrmDataContext("CRM");

Voici deux exemples d'interrogation avec LINQ.

Le premier exemple implémente une condition.
System.Console.WriteLine("Liste des comptes situés à PARIS");
 System.Console.WriteLine("=========================================================");
var queryAccounts = from a in crm.accounts
                                where a.address1_city == "PARIS"
                                select a;

foreach (var a in queryAccounts)
{
    System.Console.WriteLine(a.name);
}
System.Console.ReadLine();

Le deuxième exemple implémente une condition sur une jointure.
System.Console.WriteLine("Liste des comptes qui ont au moins un contact à PARIS");
System.Console.WriteLine("====================================================");

var queryAccounts = from a in crm.accounts
                                join c in crm.contacts
                                    on a.accountid equals c.parentcustomerid.Value
                                where c.address1_city == "PARIS" 
                                select a;

foreach (var a in queryAccounts)
{
 System.Console.WriteLine(a.name);
 }
System.Console.ReadLine();

samedi 2 avril 2011

Mettre en surbrillance un champ

Comme exemple, nous allons mettre en surbrillance le champ Téléphone principal de l'entité Compte.

Dans la personnalisation du formulaire de l'entité compte, insérer dans le OnLoad le code:
document.all.telephone1_c.style.backgroundColor = 'yellow';
document.all.telephone1_d.style.backgroundColor = 'yellow';
Enregistrer et publier l'entité Compte.

Nous obtenons le formulaire pour l'entité Compte.

dimanche 20 mars 2011

Pilotage de la valeur d'un attribut par un composant Silverlight

1. Création du composant Silverlight

Pour créer un composant Silverlight, l'utilisation de Visual Studio Express 2010 avec Silverlight Tools est suffisant.


Appeler le projet CRMSilverlightSlider.

Sélectionner le fichier MainPage.xaml pour modifier la couleur de fond de la zone d'affichage. Choisir la propriété Background pour l'initialiser à #FFF6F8FA.

Glisser le contrôle Slider dans la zone d'affichage.

Modifier les propriétés du Slider avec Margin à 0 et Width à 300.

Dans le fichier MainPage.xaml.cs, copier le code suivant :

using System.Windows.Browser;
 
namespace CRMSilverlightSlider
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs e)
        {
            dynamic xrm = (ScriptObject)HtmlPage.Window.GetProperty("Xrm");
            var fieldName = Application.Current.Resources["InitParm_data"];
            var numAttr = xrm.Page.data.entity.attributes.get(fieldName);
            numAttr.setValue(Math.Round(slider1.Value, 0));
        }
    }
}

Dans le fichier App.xaml.cs, Ajouter le code suivant :
public void CaptureInitValues(IDictionary values)
{
foreach (var val in values)
{
if (!Application.Current.Resources.Contains("InitParm_" + val.Key))
{
 Application.Current.Resources.Add("InitParm_" + val.Key, val.Value);
}
}
}

private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
CaptureInitValues(e.InitParams);
}

Compiler le projet pour obtenir le fichier CRMSilverlightSlider.xap.

2. Installation dans CRM2011.
Créer une ressource Web pour enregistrer le fichier Silverlight.
Ajouter la ressource Web dans le formulaire principal de l'entité Compte.



Modifier les propriétés d'affichage de la ressource Web, en n'oubliant pas d'indiquer le paramètre numberofemployees.


3. Résultat 
Le champ Nombre d'employés est maintenant piloté par le curseur Nbre d'employés.

dimanche 13 mars 2011

Piloter la contrainte d'un champ en fonction d'une case à cocher

Voici le code pour CRM 2011.

Créer un fichier jscript nommé DisplayFunction qui contient la fonction suivante :
function newPrimeOnClick()
{
document.getElementById("new_prime").attachEvent("onclick", function () {
if (document.getElementById("new_prime").DataValue){
Xrm.Page.getAttribute("new_valeur").setRequiredLevel("required");}
else{Xrm.Page.getAttribute("new_valeur").setRequiredLevel("none");}
});
}

Ajouter ce fichier comme Ressources Web.

Créer un champ de type Deux options nommé new_prime et un champ de type Une seule ligne de texte nommé new_valeur.

Ajouter sur l'événement OnLoad du formulaire la fonction newPrimeOnClick.


Case à cocher non sélectionnée

Case à cocher sélectionnée

mardi 8 mars 2011

Dynamics CRM 2011 Developer Training Kit

Ce Training Kit contient beaucoup de labs.
Version 1.0

Self Guided Exploration New
Self Guided Exploration CRM 2011
Solution Packaging
Extending the Application Experience
Visualizations and Dashboards
WCF Web Service
LINQ
Working with Plug-ins
Dialogs
Workflow
Role Based UI, Field Level Security and Using JQuery with OData
Silverlight
Azure
Dynamics Marketplace

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=78498c29-28ac-440b-9c20-ec5da6ee6e98

dimanche 27 février 2011

Afficher les comptes dans Bing Map

1. Création d'une page HTML.

2. Création d'une ressource Web de type Page Web en indiquant la page HTML.

3. Création d'un tableau de bord comprenant une zone pour la ressource Web et une zone pour la liste des comptes.

4. Publication

5. Résultat

Cacher les volets mise en route

Par défaut, un volet mise en route est affiché en au de chaque liste.

Pour ne plus cacher ce volet, il faut décocher l'option Afficher les volets Mise en route sur toutes les listes située dans l'onglet Général des options.

Après une actualisation de la page, le volet n'est plus affiché.

lundi 21 février 2011

Afficher une adresse dans Bing Map

1. Créer une ressource externe nommée new_Map de type JavaScript, pour mettre le code suivant:

function ShowBingMap()
{
var lsLine1 ='address1_line1';
var lsCity ='address1_city';
var lsIframe ='IFRAME_MAP';

if (Xrm.Page.getAttribute(lsLine1).getValue()!= null)
{
var lsUrl = ('http://www.bing.com/maps/default.aspx?where1=' + 
Xrm.Page.getAttribute(lsLine1).getValue() + ',' + 
Xrm.Page.getAttribute(lsCity).getValue());
Xrm.Page.getControl(lsIframe).setSrc(lsUrl);
}
else
{
Xrm.Page.getControl(lsIframe).setSrc('about:blank');
}
}

2.Ajouter une IFRAME dans le formulaire de l'entité Compte.

3.Ajouter dans l'événement OnLoad du formulaire de l'entité Compte l'utilisation de la fonction ShowBingMap :

4. Enregistrer et publier.

5. Résultat à l'ouverture d'un compte avec les champs adresse renseignés :

jeudi 17 février 2011

Supprimer la section "Centre ressources"


1. Faire une solution en incluant le composant Plan de site.

2. Exporter la solution en non gérer.

3. Ouvrir le fichier customizations.xml.

4. Modifier l'élément Area ResourceCenter, en copiant les trois lignes de privilèges suivantes :

5. Importer la solution modifié et publier.

6. Pour les utilisateurs non administrateurs, la section Centre resources n'est plus visible.

samedi 29 janvier 2011

Afficher un bouton dans un groupe existant au niveau d'une entité

1.Préparation de la solution
Créer une solution en ajoutant l'entité que l'on souhaite modifier, puis en créant des "Web Resources" avec les images TIcon16x16.png et TIcon32x32.png et un fichier javascript Montrer.js.

Les deux images sont :



Le fichier Montrer.js contient le code suivant :
function Montrer(sTexte)
{
alert("Action du bouton "+sTexte+" .");
}

Exporter la solution.

2.Modification de la solution
Extraire le contenu de la solution pour ouvrire le fichier customization.xml.















Remplacer l'élément CustomActions par :

Remplacer l'élément CommandDefinitions par :

Remplacer l'élément DisplayRules par :

Remplacer l'élément EnablesRules par :

Remplacer l'élément LocLabels par :

3.Recompresser la solution et l'importer sans oublier de publier.

4.Résultat

Avant:

Aprés:

Message sur la sélection du bouton personnalisé: