Recherche…


Remarques

Contexte

Le modèle d'objet JavaScript a été introduit dans SharePoint 2010. Il expose côté client de nombreux objets auparavant uniquement accessibles via du code côté serveur ou des services Web dédiés.

Intégration de JavaScript dans les pages SharePoint

Dans SharePoint 2013, vous pouvez placer votre code JavaScript dans un composant WebPart Éditeur de scripts.

Dans SharePoint 2010, vous pouvez utiliser la propriété "lien de contenu" d'un composant WebPart Éditeur de contenu pour créer un lien vers un fichier HTML contenant votre script incorporé.

Référence d'objet

Les constructeurs, méthodes et propriétés de tous les objets trouvés dans l'espace de noms SP sont documentés dans la référence du modèle d'objet client SharePoint 2013 ici .

La référence du modèle d'objet client SharePoint 2010 JavaScript est disponible ici .

Modèle de programmation asynchrone de JSOM

Lorsque vous utilisez le modèle d'objet client JavaScript, le code utilise généralement le modèle suivant:

  1. Obtenir un objet ClientContext .
  2. Utilisez l'objet ClientContext pour récupérer des objets représentant des entités dans le modèle d'objet SharePoint, telles que des listes, des dossiers, des vues.
  3. Mettre en file d'attente les instructions à effectuer sur les objets. Ces instructions ne sont pas encore transmises au serveur.
  4. Utilisez la fonction de load pour indiquer à ClientContext les informations que vous souhaitez recevoir du serveur.
  5. Appelez la fonction executeQueryAsync l'objet ClientContext pour envoyer les instructions en file d'attente au serveur, en transmettant deux fonctions de rappel pour ClientContext s'exécutent en cas de succès ou d'échec.
  6. Dans la fonction de rappel, travaillez avec les résultats renvoyés par le serveur.

Des alternatives

Les alternatives côté client au JSOM incluent les services Web SharePoint, les noeuds finaux REST et le modèle d'objet client .NET .

Obtenir des types de contenu de bibliothèque à l'aide du nom de la bibliothèque

function getContentTypes(site_url,name_of_the_library){
    var ctx = new SP.ClientContext(site_url);
    var web = ctx.get_web();
    list = web.get_lists().getByTitle(name_of_the_library);

    // You can include any property of the SP.ContentType object (sp.js), for this example we are just getting the name
    ctx.load(list,'ContentTypes.Include(Name)');
    ctx.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}

function onQuerySucceeded(sender, args) {
    // var list is the one that we used in function "getContentTypes"
    var contentTypesEnumerator = (list.get_contentTypes()).getEnumerator();

    while (contentTypesEnumerator.moveNext()) {
        var contentType = contentTypesEnumerator.get_current();
        alert(contentType.get_name());
    }
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Supprimer un élément dans une liste

SP.SOD.executeOrDelayUntilScriptLoaded( function(){ deleteItem(1); }, "sp.js");

function deleteItem(id){
    var clientContext = new SP.ClientContext();
    var list = clientContext.get_web().get_lists().getByTitle("List Title");
    var item = list.getItemById(id);
    item.deleteObject();
    clientContext.executeQueryAsync(function(){
        alert("Item #"+id+" deleted successfully!");
    },function(sender,args){alert(args.get_message());});
}

Création d'éléments ou de dossiers

Création d'éléments de liste

SP.SOD.executeOrDelayUntilScriptLoaded(createItem,"sp.js");

function createItem(){
    var clientContext = new SP.ClientContext();
    var list = clientContext.get_web().get_lists().getByTitle("List Title");
    var newItem = list.addItem();
    newItem.set_item("Title","Example Title");
    newItem.update();
    clientContext.load(newItem); // only needed to retrieve info from newly created item
    clientContext.executeQueryAsync(function(){
        var itemId = newItem.get_item("ID");
        alert("Item #"+itemId+" Created Successfully!");
    },function(sender,args){
        alert(args.get_message());
    });
}

L'exemple ci-dessus montre qu'un élément de liste est créé en procédant comme suit:

  1. Appelez la méthode addItem d'un objet liste pour obtenir un objet élément
  2. Appelez la méthode set_item sur l'objet d'élément de liste résultant pour définir chaque valeur de champ comme vous le souhaitez
  3. Appelez la méthode update sur l'objet d'élément de liste pour indiquer que les modifications doivent être validées
  4. Appelez la méthode executeQueryAsync de l'objet de contexte client pour exécuter les instructions en file d'attente

Notez que vous n'avez pas besoin de transmettre le nouvel objet d'élément à la méthode de load du contexte client pour créer l'élément. Cette étape n'est nécessaire que si vous souhaitez récupérer l'une des valeurs de champ de l'élément à partir du serveur.

Création de dossiers

La création d'un dossier est similaire à l'ajout d'un élément à une liste. La différence est qu'il faut d' abord créer un ListItemCreationInformation objet et définir sa underlyingObjectType propriété à SP.FileSystemObjectType.folder , et sa leafName propriété au nom de votre choix du nouveau dossier.

L'objet est ensuite transmis en tant que paramètre dans la méthode addItem de la bibliothèque pour créer le dossier.

// ...
var itemCreateInfo = new SP.ListItemCreationInformation();
itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
itemCreateInfo.set_leafName(folderName);
var newItem = list.addItem(itemCreateInfo);
// ...

Pour valider la modification, ClientContext la méthode executeQueryAsync de l'objet ClientContext via lequel la bibliothèque a été accédée.

L'exemple complet ci-dessous crée un dossier avec un nom basé sur l'horodatage actuel, puis ouvre ce dossier dans une boîte de dialogue modale.

SP.SOD.executeOrDelayUntilScriptLoaded(createFolder,"sp.js");

function createFolder(){
    var now = new Date();
    var timeStamp = now.getYear() + "-" + (now.getMonth()+1) + "-" + now.getDate() 
        + "T" + now.getHours()+"_"+now.getMinutes()+" "+now.getSeconds()+"_"+now.getMilliseconds();
    var clientContext = new SP.ClientContext();
    var list = clientContext.get_web().get_lists().getByTitle("Library Title");
    var itemCreateInfo = new SP.ListItemCreationInformation();
    itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
    itemCreateInfo.set_leafName(timeStamp);
    var newItem = list.addItem(itemCreateInfo);
    newItem.update();
    clientContext.load(newItem);
    var rootFolder = list.get_rootFolder(); // Note: use a list's root folder to determine its server relative URL
    clientContext.load(rootFolder);
    clientContext.executeQueryAsync(function(){
        var itemId = newItem.get_item("ID");
        var name = newItem.get_item("FileLeafRef");
        SP.UI.ModalDialog.showModalDialog(
            { 
                title: "Folder \""+name+"\" (#"+itemId+") Created Successfully!", 
                url: rootFolder.get_serverRelativeUrl() + "/" + name
            }
        ); 
    },function(sender,args){alert(args.get_message());});
}

Obtenir les informations d'utilisateur actuelles

SP.SOD.executeOrDelayUntilScriptLoaded(showUserInfo,"sp.js");

function showUserInfo(){
    var clientContext = new SP.ClientContext();
    var user = clientContext.get_web().get_currentUser();
    clientContext.load(user);
    clientContext.executeQueryAsync(function(){
            var details = "ID: "+user.get_id()+"\n"+
                "Title: "+user.get_title()+"\n"+
                "Login: "+user.get_loginName()+"\n"+
                "Email: "+user.get_email();
            alert(details);
        },function(sender,args){alert(args.get_message());})
}

Obtenir un élément de liste par ID

SP.SOD.executeOrDelayUntilScriptLoaded(myFunction,"sp.js");

function myFunction(){
    var clientContext = new SP.ClientContext();
    var list = clientContext.get_web().get_lists().getByTitle("List Title");
    var item = list.getItemById(1); // get item with ID == 1
    clientContext.load(item);
    clientContext.executeQueryAsync(
        function(){ // onSuccess
            var title = item.get_item("Title");
            alert(title);
        },
        function(sender,args){ // onError
            alert(args.get_message());
        }
    );
}

Obtenir des éléments de liste par la requête CAML

Exemple de base

Utilisez la méthode set_viewXml de l'objet SP.CamlQuery pour spécifier une requête CAML permettant de récupérer des éléments.

SP.SOD.executeOrDelayUntilScriptLoaded(showListItems,"core.js");

function showListItems(){
    var clientContext = new SP.ClientContext();
    var list = clientContext.get_web().get_lists().getByTitle("List Title");
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml(
        "<View><Query>" +
            "<Where>" +
                "<Eq><FieldRef Name=\"Title\"/><Value Type=\"Text\">Value</Value></Eq>" + 
            "</Where>" +
            "<OrderBy><FieldRef Name=\"Modified\" Ascending=\"FALSE\"/></OrderBy>" +
        "</Query>"+
        //"<RowLimit>5000</RowLimit>" +
        "</View>");
    var items = list.getItems(camlQuery);
    clientContext.load(items);
    clientContext.executeQueryAsync(function(){
        var itemArray = [];
        var itemEnumerator = items.getEnumerator();
        while(itemEnumerator.moveNext()){
            var item = itemEnumerator.get_current();
            var id = item.get_item("ID");
            var title = item.get_item("Title");
            itemArray.push(id + ": " + title);
        }
        alert("ID: Title\n"+itemArray.join("\n"));
    },function(sender,args){alert(args.get_message());});
}

Recherche des résultats d'une requête CAML

Vous pouvez tirer parti de l'élément RowLimit dans une requête CAML pour extraire uniquement un sous-ensemble de résultats avec chaque requête.

Utilisez la méthode get_listItemCollectionPosition d'une collection d'éléments de liste pour extraire la position actuelle, puis utilisez cette valeur comme paramètre dans la méthode set_listItemCollectionPosition un objet set_listItemCollectionPosition pour extraire le lot de résultats suivant.

SP.SOD.executeOrDelayUntilScriptLoaded(showListItems,"sp.js");

function showListItems(){
    var itemArray = [];
    var clientContext = new SP.ClientContext();
    var list = clientContext.get_web().get_lists().getByTitle("List Title");
    var viewXml = 
        "<View><Query>" +
            "<OrderBy><FieldRef Name=\"Modified\" Ascending=\"FALSE\"/></OrderBy>" +
        "</Query>"+
          "<RowLimit>1</RowLimit>" +
        "</View>";
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml(viewXml);            
    var items = list.getItems(camlQuery);
    clientContext.load(items);
    clientContext.executeQueryAsync(loadResults,showError);

    function loadResults(){
        var resultsFound = false;            
        var itemEnumerator = items.getEnumerator();
        while(itemEnumerator.moveNext()){
            var item = itemEnumerator.get_current();
            var id = item.get_item("ID");
            var title = item.get_item("Title");
            itemArray.push(id + ": " + title);
        }
        var pos = items.get_listItemCollectionPosition();// <- get position
        if(pos !== null){ // <-- position is null when no more results are returned
            if(confirm("Results so far: \nID: Title\n"+itemArray.join("\n"))){
                camlQuery = new SP.CamlQuery();
                camlQuery.set_listItemCollectionPosition(pos);// <- set position for next batch
                camlQuery.set_viewXml(viewXml);            
                items = list.getItems(camlQuery);
                clientContext.load(items);
                clientContext.executeQueryAsync(loadResults,showError);
            }
        }else{
            alert("Total Results: \nID: Title\n"+itemArray.join("\n")); // <- display when no more results
        }
    }
    function showError(sender,args){
        alert(args.get_message());
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow