Le Post Infeeny

Les articles des consultants et experts Infeeny

Archives Mensuelles: juin 2015

Mise en oeuvre de l’API Exchange sur un compte Office 365

Introduction

Exchange Web Services (EWS) est une API multiplateforme qui permet aux applications d’accéder aux boites (emails, réunions, calendriers, contacts…) et de les gérer à partir d’Exchange Online dans le cadre Office 365 ou On Premise dans le cadre d’Exchange Server. De plus, cette API permet de stocker ou récupérer des données sur un compte Exchange, offrant une grande souplesse dans la gestion et la manipulation des éléments de messagerie Exchange pour un utilisateur, un groupe d’utilisateurs ou une organisation entière.

Architecture

Les applications EWS peuvent accéder aux éléments d’une boîte en envoyant au serveur Exchange (online ou on premise) une requête dans un message XML basé sur le protocole SOAP. Le message SOAP est incorporé dans un message HTTP lors d’un échange application/serveur Exchange. Capture

Prérequis

  • Un ordinateur exécutant Microsoft Exchange Server 2007 SP1 (ou version ultérieure) ou un accès à Exchange Hosted Services.
  • Framework .Net 3.5 (ou version ultérieure)
  • Assembly de l’API : Microsoft.Exchange.WebServices.dll
  • Visual studio 2008 (ou version ultérieure) avec les composants C#

Connexion au serveur Exchange

Pour établir une connexion à EWS, il faut créer un objet ExchangeService et se connecter au serveur d’accès client Exchange (CAS) en utilisant un compte avec un accès suffisant. Pour se connecter il est nécessaire de renseigner le nom du compte ainsi que son mot de passe. Une fois la connexion établie, toutes actions réalisées sur les éléments Exchange sont accessibles depuis l’objet ExchangeService.

ExchangeService _exchangeService = new ExchangeService(ExchangeVersion.Exchange2013)
{
    Credentials = new WebCredentials("userName", "password")
};

_exchangeService.AutodiscoverUrl("userName@domain.com", RedirectionUrlValidationCallback);

private bool RedirectionUrlValidationCallback(string redirectionUrl)
{
    Uri redirectionUri = new Uri(redirectionUrl);
    return redirectionUri.Scheme == "https";
}

Exchange Autodiscover

Le service Autodiscover d’Exchange fournit à l’application cliente un moyen facile pour configurer automatiquement une connexion avec une entrée utilisateur minimale : adresse de messagerie et mot de passe. Ce service est généralement utilisé pour trouver automatiquement l’URL d’un point de terminaison EWS.

Gérer des éléments Email

La gestion Email nécessite un objet ExchangeService connecté, et il y a six actions principales possibles avec un Email :

  • Création
  • Envoi
  • Transmission
  • Réponse
  • Suppression
  • Sauvegarde

Chacune de ces actions sont implémentées en utilisant un objet EmailMessage.

Création et envoi d’un email

Pour cette fonction, le principe est de créer un objet EmailMessage, remplir les champs, puis envoyer le courriel (avec sauvegarde du message dans le dossier « Eléments envoyés »). Le code C# ci-dessous montre comment créer l’objet EmailMessage et envoyer un email.

EmailMessage message = new EmailMessage(_service)
{
    Subject = "SubjectText",
    Body = "BodyText"
};

message.ToRecipients.Add("user@mcnext.com");
message.SendAndSaveCopy(WellKnownFolderName.SentItems);

Transmission d’un email

Cette fonction s’applique à un objet EmailMessage existant, soit un message reçu et acquis depuis le serveur Exchange, soit un objet préalablement créé. Pour cet exemple, nous utiliserons l’objet EmailMessage précédemment créé. Le code C # ci-dessous montre comment transmettre un message électronique.

string messageBodyPrefix = "This message was forwarded by using the EWS Managed API";
EmailAddress[] addresses = new EmailAddress[1];
addresses[0] = new EmailAddress("user1@netsoft-usa.com");
message.Forward(messageBodyPrefix, addresses);

Répondre à un email

Tout comme la transmission d’un message, la réponse à un message s’applique à un objet EmailMessage existant. Une fois de plus, pour l’exemple nous prendrons l’objet précédemment créé pour appeler la méthode de réponse.

string myReply = "This is the message body of the email reply.";
bool replyToAll = true;
message.Reply(myReply, replyToAll);

Suppression d’un email

Cette fonction s’applique à un objet EmailMessage existant. La méthode dispose de 3 modes de suppression :

  • SoftDelete : L’élément ou le dossier sera déplacé vers la corbeille. Articles et dossiers dans la corbeille peuvent être récupérés.
  • HardDelete : L’élément ou le dossier seront supprimés définitivement
  • MoveToDeletedItems : L’élément ou le dossier seront déplacés vers le dossier « Deleted Items » de la boîte aux lettres.

Dans l’exemple suivant, nous utiliserons le mode de suppression, MoveToDeletedItems.

message.Delete(DeleteMode.MoveToDeletedItems);

Récupération de messages depuis Exchange

Les actions présentées précédemment peuvent être appliquées à une collection d’objets EmailMessage obtenue depuis le serveur Exchange. Pour cela, il faut spécifier le dossier cible et le nombre d’éléments souhaité. L’exemple suivant illustre comment récupérer les mails depuis la boite de reception.

FindItemsResults results = _service.FindItems(WellKnownFolderName.Inbox,
                                                    new ItemView(int.MaxValue));
foreach (EmailMessage msg in results)
{
   // traitement sur chaque message
}

Gérer des éléments Contacts

Comme pour les emails, la gestion des contacts nécessite un objet ExchangeService connecté.

Récupération des contacts depuis Exchange

Pour récupérer les éléments de contact à partir d’Exchange, il faut spécifier le dossier Contacts en utilisant l’énumération WellKnownFolderName et le nombre de contacts à récupérer à partir d’Exchange. Le code C# ci-dessous montre comment récupérer les éléments de contact à partir d’Exchange. Dans ce cas on récupère tous les contacts d’Exchange (spécifier une valeur plus petite réduit le nombre d’articles retournés par le serveur).

FindItemsResults results = _service.FindItems(WellKnownFolderName.Contacts,
                                 new ItemView(int.MaxValue));
foreach (Contact ctc in results)
{
    // traitement sur chaque contact
}

Créer un contact

Le principe est le même que pour les emails, on crée un objet Contact, on remplit les champs puis on sauvegarde le contact.

Contact _contact = new Contact(_service);
_contact.DisplayName = "John Doe";
_contact.EmailAddresses[EmailAddressKey.EmailAddress1] = "johndoe@domain.com";
_contact.Save(WellKnownFolderName.Contacts);

Supprimer un contact

Cette fonction s’applique à un objet Contact existant. La méthode dispose de 3 modes de suppression :

  • SoftDelete : L’élément ou le dossier sera déplacé vers la corbeille. Articles et dossiers dans la corbeille peuvent être récupérés.
  • HardDelete : L’élément ou le dossier seront supprimés définitivement.
  • MoveToDeletedItems : L’élément ou le dossier seront déplacés vers le dossier « Deleted Items » de la boîte aux lettres.

Dans l’exemple suivant, nous utiliserons le mode de suppression, MoveToDeletedItems.

_contact.Delete(DeleteMode.MoveToDeletedItems);

Aller plus loin

Les actions présentées précédemment sont un échantillon des fonctionnalités disponibles dans un contexte Exchange. Il est possible par exemple de :

  • Naviguer entre les différents dossiers de la boite de messagerie et les manipuler
  • Manipuler le calendrier, créer et gérer des réunions ou RDV
  • Manipuler des pièces jointes
  • Gérer des conversations
  • Créer et gérer des alertes ou notifications

Un recueil d’exemples très complet est disponible via le lien suivant et présente une grande partie des fonctionnalités proposées par le service Exchange : https://code.msdn.microsoft.com/office/Exchange-2013-101-Code-3c38582c

Meilleur outils gratuit pour développeur MS BI

Il est possible de trouver de nombreux TOP 10 pour SQL Server sur le net mais la plus par d’entre eux s’adresse à des DBA. En tant que développeur/Consultant MS BI certains de ces outils seront également très utile car il faut toujours analyser et optimiser sa base pour un reporting optimal, par contre de nombreux autres outils plus spécifique à la BI sont également gratuit et très précieux. Voici donc mon TOP des meilleurs outils.

Cette liste me permettra également de retrouver facilement les outils lorsque j’arrive chez un nouveau client pour pouvoir préparer mon poste 😉

Note – Cette liste prend en compte d’avoir déjà une licence SQL Server ainsi qu’Excel, la base de la BI Microsoft.

BIDS Helper
Un add-in pour Visual Studio incluant de nombreuses fonctionnalités comme l’expression highlighter, le dimension usage, le déploiement simplifié…
http://bidshelper.codeplex.com/

MDX Studio
Permet d’écrire et formater des requêtes MDX et analyser les performances des requêtes.
http://www.sqlbi.com/tools/mdx-studio/

DAX Studio
Un add-in Excel et SSAS – Permet d’écrire et formater des requêtes DAX et analyser les performances des requêtes.
http://www.sqlbi.com/tools/dax-studio/

OLAP PivotTable Extensions
Un add-in Excel permettant d’ajouter des fonctionnalités à un TCD connecté à un cube SSAS
https://olappivottableextend.codeplex.com/

SSMS Add-In
Permet d’ajouter de nombreuses fonctionalitées à SSMS
SSMS Boost: http://www.ssmsboost.com/
SSMS Tool Pack: http://www.ssmstoolspack.com/
DbForge SQL: http://www.devart.com/dbforge/sql/sqlcomplete/

SSMS – SQL Execution Plan
Améliore grandement l’interface du plan d’exécution qui n’a pas beaucoup évolué dans le plan d’explorer SSMS
https://www.sqlsentry.com/products/plan-explorer/sql-server-query-view

SSMS – SQL Search
Permet entre autre de rechercher un objet ou du texte dans une base de donnée. Egalement de voir les dépendances d’un objet sous forme graphique et de renommer un objet ainsi que toutes ces dépendances.
ApecSQL Search: http://www.apexsql.com/sql_tools_search.aspx
Red Gate SQL Search: http://www.red-gate.com/products/sql-development/sql-search/

SSMS – SQL Server Management Data Warehouse
http://msdn.microsoft.com/en-us/library/dd939169(v=sql.100).aspx

Database Comparaison
Permet de comparer la structure de 2 bases de données très facilement
DBComparer: http://dbcomparer.com/Download/Default.aspx

Notepad++
Très pratique pour rechercher du texte comme un nom d’objet dans les packages SSIS, (la recherche dans SSDT n’étant pas intuitif)
Permet de bien formater en 1 clique une requêtes SQL ainsi que convertir la requête dans un autre langage comme VB.Net (pour l’inclure en expression dans SSRS par exemple)
http://notepad-plus-plus.org/fr

Maintenance Solutions
Maintenance des bases, Back up, intégrité, Statistique..
SQL Server Maintenance Solution: https://ola.hallengren.com/

Maintenance des Index et Defrag
http://www.brentozar.com/blitzindex/
http://sqlfool.com/2011/06/index-defrag-script-v4-1/

I/O capacity Benchmark
Microsoft SQLIO Disk Subsystem Benchmark Tool: http://www.microsoft.com/en-us/download/details.aspx?id=20163

Trace
Permet de gérer et visualiser plusieurs traces
http://www.scalesql.com/cleartrace/default.aspx

DMV – Data Management Views
Liste des DMV pour les Cubes SSAS: https://bennyaustin.wordpress.com/2011/03/01/ssas-dmv-queries-cube-metadata/

Documentation Cube Automatisée
Parce que la documentation c’est notre passion
http://www.purplefrogsystems.com/blog/2010/09/olap-cube-documentation-in-ssrs-part-1/
https://sqlbits.com/Sessions/Event8/Automating_SSAS_cube_documentation_using_SSRS_DMV_and_Spatial_Data
http://www.ssas-info.com/analysis-services-tools/1365-ssrs-reports-to-document-ssas-2008-db-structure-using-dmvs

Minimum install to execute SSIS Packages

A couple of days ago one of my client asked me what needs to be install on the ETL server in order to execute SSIS Packages. My first though was to install the SSIS instance but after some other thoughs i decided to look into it in more details.
Here is a summary of my research on the subject – the goal was to install the minimum of component as possible as we are in a PCI environnent which must be highly secure.

dtexec is the command prompt utility that needs to be install to run your SSIS packages.
dtexec is installed when you install SQL Server DB Engine. However this is *NOT* the full version of dtexec. It is only install in order to use:
– Import and export data wizard (within SQL Server)
– Support maintenance plans (Since SQL Server 2005 sp2 or SQL Server 2008 CU1/sp1, it is not necessary to install SSIS to create maintenance plans)
=> So You *cannot* run your own SSIS packages with this version of dtexec
In order to fully use dtexec you need to install « Integration services » feature. Installing this feature install the necessary binaries (and also the service) to run your own packages.

Note:
– dtexecui is not install when installing only Integration services (it’s a client component tool)
– You can stop the SSIS Service to run packages – the SSIS service only extends the functionality of SSMS
– You also might need to install the « client Tools connectivity » feature tools as well and any other components you might need to connect to your sources.
Client Tools includes components for communication between clients and servers, including network libraries for DB-Library, OLEDB for OLAP, ODBC, ADODB, and ADOMD+

64-Bit consideration
In a 64-Bit computer you need to install BIDS or SSMS in order to also get dtexec in 32-Bit
So when installing SSIS in a 64-bit computer to ensure a 32-bit installation is also required, you must install SSIS and BIDS. Installing SSIS and not BIDS will only install the 64-bit engine.
If you have a 64-Bit computer with both 32-Bit and 64-Bit dtexec installed:
– when using dtexecui it will use the 32-Bit version (it’s a 32-Bit tool)
– when using the dtexec it will use the 32-Bit by default (because the directory path for the 32-bit version appears in the PATH environment variable before the directory path for the 64-bit version)
– when using SQL Agent it will use the 64-Bit by default ( because SQL Server Agent uses the registry, not the PATH environment variable, to locate the correct executable for the utility)

Conclusion:
You do need to install the « Integration services » feature in order to run SSIS packages. This feature is enough to be installed on its own to run packages and you can even stop the related service. (you do not need the DB Engine services feature).
However, if you have a 64-Bit computer and you need to run packages in 32-Bit mode then you also need to install BIDS or SSMS (which install dtexec 32-Bit)
MS – SQL Server installation features: https://technet.microsoft.com/en-us/library/ms143786.aspx
MS – 64 bit Considerations for Integration Services: https://msdn.microsoft.com/en-us/library/ms141766.aspx