Rechercher dans ce blog

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

dimanche 17 avril 2011

Division dans Reporting Services

Le problème dans Reporting Services, c'est que l'expression comprenant une division suivant ne fonctionne pas :
= IIF(Fields!Second.Value = 0, 0, Fields!First.Value/ Fields!Second.Value))

Pour le corriger, il faut créer une fonction personnalisée pour la division
(Sélectionner le menu Rapport -> Propriété -> Code):
Public Function Divide(ByVal first As Double, ByVal second As Double) As Double
If second = 0 Then
Return 0
Else
Return first / second
End If
End Function

L'expression devient :
= Code.Divide(Fields!First.Value, Fields!Second.Value)

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

jeudi 7 avril 2011

Correctif cumulatif 1 pour Microsoft Dynamics CRM 2011

Version : 05.00.9688.1045
  • Service Asynchrone
  • Workflow
  • Création d'email
  • Mise à jour et l'import lors d'un déploiement
  • Export Excel au niveau de la grille des activités
  • Mode offline avec Microsoft Office 2007
  • Fichier XML du rubban
  • Création d'un incident
  • Chargement de JavaScript
  • Les vues de grille
  • Liste marketing
  • Ajout d'un contact à une liste d'attente en mode offline
  • Suppression de contact dans Microsoft Office Outlook
  • Chargement du rubban CRM dans Microsoft Office Outlook
  • Synchronisation Outlook
  • Gestion d'une ressource web Silverlight
  • Création d'un devis d'une opportunité
  • Ajout d'une connexion à un lead
  • disparition des boutons d'aide en mode offline
  • Import/Export de solution
  • Migration issue de CRM4.0
  • Fonctionnement avec Internet Explorer 9
  • Création de relation
  • Assembly
  • Export de données vers Microsoft Excel 2003
  • Recherche avancée

dimanche 3 avril 2011

Erreur : Une autre application a déjà inscrit cette URL auprès de HTTP.SYS.

Lors de l’exécution en débogue d'un service WCF. L'exception Une autre application a déjà inscrit cette URL auprès de HTTP.SYS. est levée.

Résolution :
Ouvrir les propriétés du projet Service.
Parcourir l'onglet Options WCF.
Décocher l'option Démarrer l'hôte de service WCF lors du débogage d'un autre projet dans la même solution.
Relancer le mode débogage de la solution.