Mika A.

Blog Simple :)

Catégorie : Web Page 2 of 5

Mes premiers pas avec AngularJS

Après avoir chanté avec la famille Flatlanders (vidéo ci-dessus), je commence mon initiation à AngularJS, le framework du moment :).

AngularJS a fait son apparition dans le monde du web depuis maintenant quelques temps et il est de plus en plus utilisé dans les applications web, particulierement celles dites Single-Page (construites sur une seule page).

J’ai ainsi décidé de commencer à m’initier à ce framework et mieux comprendre sa si grande popularité. Le web regorge de milliers de ressources pour cela mais j’ai commencé par le cours Shaping Up With AngularJS sur CodeShcool (en anglais). Il permet d’apprendre AngularJS de manière simple et pratique : l’instructeur explique brièvement un concept et on passe directement aux exercices en restant dans le navigateur.

Ce cours permet d’avoir des bases solides pour progresser avec AngularJS et je le conseil vraiment à quiconque veut découvrir ce framework.

Bon apprentissage 😉

SharePoint – Construire une requête CAML facilement avec U2U CAML Query Builder

Je travaille actuellement sur une application SharePoint 2013 pour un de nos clients et l’application manipule plusieurs données déjà existantes sur le site afin de construire un tableau de bord des données.

A la différence des applications web « traditionnelles », les applications pour SharePoint n’utilisent pas SQL pour accéder aux données depuis le site hôte. C’est plutôt le langage CAML qui est préconisé pour former les requêtes vers SharePoint. Ce langage utilise des balises pour les éléments de la requête. Voici un exemple d’une requête CAML sur une liste de SharePoint :

<Query>
   <Where>
      <And>
         <Eq>
            <FieldRef Name='ContentType' />
            <Value Type='Computed'>Custom Type</Value>
         </Eq>
         <Or>
            <IsNull>
               <FieldRef Name='Etat' />
            </IsNull>
            <Eq>
               <FieldRef Name='Etat' />
               <Value Type='Choice'>Nouveau</Value>
            </Eq>
         </Or>
      </And>
   </Where>
</Query>

Nous pouvons y voir les balises comme Where, Eq, IsNull, etc… qui permettent de décrire ce que nous voulons avoir comme résultat.

Cependant, il peut être difficile de créer « à la main » ces requêtes, surtout quand il faut récupérer différents champs personnalisés et quand les conditions deviennent plus complexes.  Il existe plusieurs outils pour remédier à cela. J’ai testé U2U CAML Query Builder qui permet de se connecter à un site SharePoint, d’y trouver la liste sur laquelle on souhaite récupérer les données et construire la requête depuis des listes de sélections.

Le logiciel est très simple d’utilisation. Il faut commencer par se connecter à un site SharePoint sur l’interface de démarrage :

u2u3

La liste des listes du sites s’affiche ensuite et il faut en sélectionner une pour créer un nouvelle requête. Les éléments de la listes sont alors chargées et il suffit de les sélectionner pour former une requête. Un bouton permet ensuite de lancer la requête pour vérifier qu’on récupère les bons résultats.

u2u1

Pour couronner le tout, un onglet permet de copier le bout de code à insérer dans l’application pour exécuter la requête. En résumé, c’est un outil vraiment utile et pratique pour tout développeur d’application SharePoint!

N’hésitez pas à laisser un commentaire pour partager vos expériences avec d’autres outils du même genre.

Sharepoint – Récupérer des informations sur le site hôte depuis une application

J’ai récemment créer une petite application Sharepoint qui servira de tableau de bord sur un site hôte. J’ai donc besoin d’accéder à plusieurs informations du site dans mon application comme la liste des sous-sites, la liste des documents, etc..

Pour cela, mon application utilise l’API Javascript qui fait un appel à distance vers Sharepoint.  Plusieurs exemples sont déjà disponibles en ligne pour apprendre à créer son application avec Javascript. Le point qui a été un peu complexe à trouver dans mon cas est de faire des appels vers l’hôte Sharepoint en « Cross-domain ».

En effet, à la base, mon application est assez indépendant du site Sharepoint hôte et je n’ai pas accès à toutes les données dès le départ. Dans mon exemple, j’essaie de récupérer les sous-sites du site hôte avec un code très simple :

    // Charge les sous-sites 
    web = appContextSite.get_web(); 
    subsites = web.getSubwebsForCurrentUser(null); 
    context.load(subsites) 
    context.executeQueryAsync(ExecuteOnSubSitesSuccess, ExecuteOnSubSitesFailure);

C’est la fonction getSubwebsForCurrentUser qui fait le gros du travail pour récupérer la liste des sous-sites. Le problème que j’ai rencontré est que même si le site hôte a bien plusieurs sous-site, cette fonction retourne une liste vide.

Il m’a fallu un peu de temps pour comprendre qu’en fait, dans ce cas simple, ce code va retourner la liste des sous-sites de mon application et non de ceux du site hôte!

Pour pouvoir lire ces informations du site hôte, il y a quelques modification à faire dans le script et il faut charger un fichier JS qui va permettre de faire des requêtes à distance sur le site hôte. Je charge donc le fichier SP.RequestExecutor.js avant de lancer la requête:

ExecuteOrDelayUntilScriptLoaded(LoadHostConfiguration, "sp.js"); 
//Get host configuration 
function LoadHostConfiguration() { 
    //Récupération des URL de l'hote et de l'appli 
    hostweburl = 
        decodeURIComponent( 
            getQueryStringParameter("SPHostUrl") 
    ); 
    appweburl = 
        decodeURIComponent( 
            getQueryStringParameter("SPAppWebUrl") 
    ); 
 
    // Get file from ressources path:  
    // web_url/_layouts/15/resource  
    var scriptbase = hostweburl + "/_layouts/15/"; 
 
    // Load js file for cross-domain request 
    $.getScript(scriptbase + "SP.RequestExecutor.js", GetSubSites); 
}

Enfin, je crée la fonction qui permet de récupérer les sous-sites une fois le fichier SP.RequestExecutor.js chargé : 

function GetSubSites() { 
    context = new SP.ClientContext(appweburl); 
    var factory = SP.ProxyWebRequestExecutorFactory(appweburl); 
    context.set_webRequestExecutorFactory(factory); 
    var appContextSite = new SP.AppContextSite(context, hostweburl); 
    web = appContextSite.get_web(); 
    subsites = web.getSubwebsForCurrentUser(null); 
    context.load(subsites) 
    context.executeQueryAsync(ExecuteOnSubSitesSuccess, ExecuteOnSubSitesFailure); 
}

J’ai encore beaucoup à apprendre sur les best-practices des applications Sharepoint et j’ai publié un sample sur Office Dev Center afin d’avoir des retours de la communauté et continuer à améliorer ce code.

Fièrement propulsé par WordPress & Thème par Anders Norén