Получение клиентского контекста SharePoint через CSOM / JSOM в надстройке SharePoint Online

Я везде искал решение этой проблемы и не нашел. Если бы кто-нибудь мог подсказать мне трюк, я был бы великолепен.

Область действия: я создаю надстройку SharePoint для SharePoint Online. В appweb я пытаюсь использовать веб-часть для получения ClientContext объекта ListItem через CSOM или JSOM. Я не могу использовать песочницу.

Основная цель: мне нужен ClientContext, чтобы я мог получить тело ListItem, использовать GetBytes и, скажем, zip или UTF8 закодировать тело. Мне также нужно использовать SP.ListOperation.Selected.getSelectedItems (clientContext), чтобы выбрать несколько ListItems, которые были выбраны пользователем.

Пример кода (неполный):

 <script>
        SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);

        function helloWorldTest() {
            alert("Function helloWorldTest Active");
            var listURL = '/sites/dev/';
            var clientContext = new SP.ClientContext(listURL);
            var olist = clientContext.get_web().get_lists().getByTitle('Secure List')

            var currentLib = web.get_lists().getById(currentlibid); //Gets the current Library
            var selectedItems = SP.ListOperation.Selection.getSelectedItems(clientContext);
            for (var i in selectedItems) {
                var currentItem = currentLib.getItemById(selectedItems[i].id);
                context.load(currentItem);
                for (i in items) {
                    selItems += '|' + selectedItems[i].id;
                }


            }
        }


                /*
                var itemCreateInfo = new SP.ListItemCreationInformation();
                this.oListItem = oList.addItem(itemCreateInfo);

                oListItem.set_item('Title', 'Test');
                oListItem.set_item('Body', 'Hello World!');

                oListItem.update();

                clientContext.load(oListItem);

                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
                alert("fuction complete");
            }

            function onQuerySucceeded() {

                alert('Item created: ' + oListItem.get_id());
            }

            function onQueryFailed(sender, args) {

                alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
            }
        }
        */
    </script>

Я был бы очень признателен за помощь. Спасибо.


person Nick Martin    schedule 21.10.2015    source источник


Ответы (1)


Если вы пытаетесь получить контекст клиента для текущего сайта, вы можете просто использовать:

SP.ClientContext.get_current()

Если вы пытаетесь создать клиентский контекст для доступа к хост-сети из сети приложения, вам необходимо использовать полный URL-адрес хост-сети. В приведенном выше коде похоже, что вы создаете клиентский контекст следующим образом:

var listURL = '/sites/dev/';
var clientContext = new SP.ClientContext(listURL);

Это относительный URL-адрес, и он не будет работать при создании клиентского контекста. Обычно URL-адрес хоста доступен как параметр строки запроса с именем SPHostUrl, поэтому вам, возможно, придется взять его оттуда. И знайте, что это должен быть только URL-адрес сайта, например. http://server/sites/dev/, а не что-то вроде http://server/sites/dev/default.aspx или другой URL для ресурс на сайте.

person Damon    schedule 29.10.2015