Поиск…


замечания

Фон

Объектная модель JavaScript была представлена ​​в SharePoint 2010. Она предоставляет на стороне клиента многие из объектов, которые ранее были доступны только через серверный код или через выделенные веб-службы.

Встраивание JavaScript в страницы SharePoint

В SharePoint 2013 вы можете разместить свой JavaScript в веб-части редактора сценариев.

В SharePoint 2010 вы можете использовать свойство «content link» веб-части Редактора контента для ссылки на HTML-файл, содержащий встроенный скрипт.

Ссылка на объект

Конструкторы, методы и свойства всех объектов, найденных в пространстве имен SP , описаны здесь в ссылке на объектную модель клиента SharePoint 2013.

Ссылка на объектную модель клиента JavaScript 2010 доступна здесь .

Шаблон асинхронного программирования JSOM

При использовании объектной модели клиента JavaScript код обычно принимает следующий шаблон:

  1. Получить объект ClientContext .
  2. Используйте объект ClientContext для извлечения объектов, представляющих объекты в объектной модели SharePoint, например списки, папку, представления.
  3. Инструкции об очередях, выполняемые против объектов. Эти инструкции еще не передаются на сервер.
  4. Используйте функцию load чтобы сообщить ClientContext какую информацию вы хотите получать с сервера.
  5. ClientContext функцию executeQueryAsync объекта ClientContext , чтобы отправить на сервер запрошенные очереди, передав две функции обратного вызова для успешного выполнения или отказа.
  6. В функции обратного вызова работайте с результатами, возвращаемыми с сервера.

альтернативы

Клиентские альтернативы JSOM включают веб-службы SharePoint, конечные точки REST и объектную модель .NET .

Получение типов содержимого библиотеки с использованием имени библиотеки

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

Удаление элемента в списке

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

Создание элементов или папок

Создание элементов списка

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

В приведенном выше примере показано, что элемент списка создается путем выполнения следующих действий:

  1. Вызовите метод addItem объекта списка, чтобы получить объект item
  2. Вызовите метод set_item в результирующем объекте элемента списка, чтобы задать каждое значение поля по желанию
  3. Вызовите метод update объекта объекта списка, чтобы указать, что изменения должны быть зафиксированы
  4. Вызовите executeQueryAsync объекта контекста клиента для выполнения заданий в очереди

Обратите внимание, что вам не нужно передавать объект нового объекта в метод load контекста клиента для создания элемента. Этот шаг необходим только в том случае, если вы хотите получить какие-либо значения поля этого элемента с сервера.

Создание папок

Создание папки аналогично добавлению элемента в список. Разница заключается в том, что сначала нужно создать ListItemCreationInformation объект и установить его underlyingObjectType свойство SP.FileSystemObjectType.folder и его leafName собственности на нужное имя новой папки.

Затем объект передается в качестве параметра в методе addItem в библиотеке для создания папки.

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

Чтобы зафиксировать изменение, вызовите executeQueryAsync объекта ClientContext через который была ClientContext доступ к библиотеке.

Полный пример ниже создает папку с именем, основанным на текущей временной отметке, затем открывает эту папку в модальном диалоговом окне.

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

Получить информацию о текущем пользователе

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

Получить элемент списка по идентификатору

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

Получить элементы списка по запросу CAML

Основной пример

Используйте set_viewXml метод объекта SP.CamlQuery указать CAML запрос для извлечения элементов.

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

Подкачка результатов запроса CAML

Вы можете использовать элемент RowLimit в запросе CAML для получения только одного подмножества результатов с каждым запросом.

Используйте метод get_listItemCollectionPosition коллекции элементов списка для извлечения текущей позиции, а затем используйте это значение в качестве параметра в объекте set_listItemCollectionPosition объекта set_listItemCollectionPosition для получения следующей партии результатов.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow