Поделиться через


Практическое руководство. Работа с настраиваемыми действиями пользователя

Дата последнего изменения: 30 апреля 2011 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Добавление пользовательского настраиваемого действия для элементов списков
Изменение пользовательского настраиваемого действия
Добавление пользовательского настраиваемого действия к действиям сайта на веб-сайте

Доступно на сайте SharePoint Online

Клиентскую объектную модель можно использовать для добавления настраиваемых действий в пользовательский интерфейс. Свойство UserCustomActions возвращает коллекцию настраиваемых действий для семейства веб-сайтов, веб-сайта или списка. Для создания настраиваемого действия в одной из этих коллекций выполните вызов метода Add() (JavaScript: add()) класса UserCustomActionCollection (JavaScript: UserCustomActionCollection). Задайте свойства для нового действия в возвращенном объекте UserCustomAction (JavaScript: UserCustomAction), а затем вызовите метод Update() (JavaScript: update()) перед выполнением запроса с помощью вызова метода ExecuteQuery() или ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback)). Расположение пользовательского настраиваемого действия может определяться расположением его пространства имен, настраиваемой группой действий и порядком отношений с другими пользовательскими настраиваемыми действиями. Таблицу с указанием возможных значений для расположений и групп настраиваемых действий см. в статье Расположения и идентификаторы пользовательского действия по умолчанию.

Добавление пользовательского настраиваемого действия для элементов списков

В следующем примере пользовательское настраиваемое действие добавляется в раскрывающееся меню, отображаемое для элементов списка. Чтобы поместить новое действие в это меню, свойство Location (JavaScript: location) задает EditControlBlock, Sequence (JavaScript: sequence) задает порядок расположения по отношению к другим пользовательским настраиваемым действиям, а Url (JavaScript: url) задает абсолютный путь к странице, определяющей данное действие. В примере предполагается наличие файла ASPX, расположенного в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS.

using System;
using Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class CreateUserCustomActionList
    {
        static void Main()
        {
            string urlWebsite = "http://MyServer/sites/MySiteCollection";
            ClientContext clientContext = new ClientContext(urlWebsite);
            Web oWebsite = clientContext.Web;

            List oList = oWebsite.Lists.GetByTitle("My List");
            UserCustomActionCollection collUserCustomAction = oList.UserCustomActions;

            UserCustomAction oUserCustomAction = collUserCustomAction.Add();
            oUserCustomAction.Location = "EditControlBlock";
            oUserCustomAction.Sequence = 100;
            oUserCustomAction.Title = "My First User Custom Action";
            oUserCustomAction.Url = urlWebsite + @"/_layouts/MyPage.aspx";
            oUserCustomAction.Update();

            clientContext.Load(oList,
                list => list.UserCustomActions);

            clientContext.ExecuteQuery();
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class CreateUserCustomActionList

        Shared Sub Main()
            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
            Dim clientContext As New ClientContext(siteUrl)

            Dim oWebsite As Web = clientContext.Web

            Dim oList As List = oWebsite.Lists.GetByTitle("My List")
            Dim collUserCustomAction As UserCustomActionCollection = oList.UserCustomActions

            Dim oUserCustomAction As UserCustomAction = collUserCustomAction.Add()
            oUserCustomAction.Location = "EditControlBlock"
            oUserCustomAction.Sequence = 100
            oUserCustomAction.Title = "My First User Custom Action"
            oUserCustomAction.Url = siteUrl + "/_layouts/MyPage.aspx"
            oUserCustomAction.Update()

            clientContext.Load(oList, Function(list) list.UserCustomActions)

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
siteUrl = '/sites/MySiteCollection';

function createUserCustomActionList() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.oList = oWebsite.get_lists().getByTitle('My List');
    var collUserCustomAction = oList.get_userCustomActions();
        
    var oUserCustomAction = collUserCustomAction.add();
    oUserCustomAction.set_location('EditControlBlock');
    oUserCustomAction.set_sequence(100);
    oUserCustomAction.set_title('My First User Custom Action');
    oUserCustomAction.set_url(siteUrl + '/_layouts/MyPage.aspx');
    oUserCustomAction.update();
        
    clientContext.load(oList, 'Title' ,'UserCustomActions');
    
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    alert('Custom action created for ' + this.oList.get_title());}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Изменение пользовательского настраиваемого действия

В следующем примере выполняется извлечение действия из коллекции пользовательских настраиваемых действий для раскрывающегося меню элементов списка и обновление этого настраиваемого действия для включения в него значка, обозначающего действие в меню. В примере предполагается, что файл изображения значка, расположен в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\IMAGES.

using System;
using Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class ModifyUserCustomAction
    {
        static void Main()
        {
            string urlWebsite = "http://MyServer/sites/SiteCollection";
            ClientContext clientContext = new ClientContext(urlWebsite);
            Web oWebsite = clientContext.Web;

            List oList = oWebsite.Lists.GetByTitle("My List");
            UserCustomActionCollection collUserCustomAction = oList.UserCustomActions;

            clientContext.Load(collUserCustomAction,
                userCustomActions => userCustomActions.Include(
                    userCustomAction => userCustomAction.Title));

            clientContext.ExecuteQuery();

            foreach (UserCustomAction oUserCustomAction in collUserCustomAction)
            {
                if (oUserCustomAction.Title == "My First User Custom Action")
                {
                    oUserCustomAction.ImageUrl = "http://MyServer/_layouts/images/MyIcon.png";
                    oUserCustomAction.Update();

                    clientContext.ExecuteQuery();
                }
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class ModifyUserCustomAction

        Shared Sub Main()
            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web

            Dim oList As List = oWebsite.Lists.GetByTitle("My List")
            Dim collUserCustomAction As UserCustomActionCollection = oList.UserCustomActions

            clientContext.Load(collUserCustomAction, _
                               Function(userCustomActions) userCustomActions.Include( _
                                   Function(userCustomAction) userCustomAction.Title))

            clientContext.ExecuteQuery()

            Dim oUserCustomAction As UserCustomAction
            For Each oUserCustomAction In collUserCustomAction
                If oUserCustomAction.Title = "My First User Custom Action" Then
                    oUserCustomAction.ImageUrl = "http://MyServer/_layouts/images/MyIcon.png"
                    oUserCustomAction.Update()

                    clientContext.ExecuteQuery()
                End If
            Next oUserCustomAction

        End Sub
    End Class
End Namespace
siteUrl = '/sites/MySiteCollection';

function modifyUserCustomAction() {

    this.clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.oList = oWebsite.get_lists().getByTitle('My List');
    this.collUserCustomAction = oList.get_userCustomActions();
        
    clientContext.load(oList,'UserCustomActions','Title');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.SetImage), Function.createDelegate(this, this.onQueryFailed));
}

function SetImage() {

    var customActionEnumerator = collUserCustomAction.getEnumerator();

    while (customActionEnumerator.moveNext()) 
    {
        var oUserCustomAction = customActionEnumerator.get_current();
            
        if (oUserCustomAction.get_title() == 'My First User Custom Action') 
        {
            oUserCustomAction.set_imageUrl('http://MyServer/_layouts/images/MyIcon.png');
            oUserCustomAction.update();
                
            clientContext.load(oUserCustomAction);

            clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
        }
    }
}

function onQuerySucceeded() {

    alert('Custom action changed for ' + this.oList.get_title());
}

function onQueryFailed(sender, args) {

        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Добавление пользовательского настраиваемого действия к действиям сайта на веб-сайте

Создание пользовательского настраиваемого действия в меню Действия сайта веб-сайта похоже на создание действия для элементов списка. Выполняется вызов метода Add() (JavaScript: add()), задаются свойства для действия, а затем вызывается Update() (JavaScript: update()). Для помещения нового действия в меню Действия сайта в следующем примере задается значение Microsoft.SharePoint.StandardMenu для Location (JavaScript: location) и значение SiteActions для Group (JavaScript: group). Для Sequence (JavaScript: sequence) задается значение 101, чтобы действие отображалось под действием с порядковым номером 100. В примере предполагается наличие файла ASPX, расположенного в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS.

using System;
using Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class CreateUserCustomActionSite
    {
        static void Main()
        {
            string urlWebsite = "http://MyServer/sites/MySiteCollection";
            ClientContext clientContext = new ClientContext(urlWebsite);

            Web oWebsite = clientContext.Web;
            UserCustomActionCollection collUserCustomAction = oWebsite.UserCustomActions;

            UserCustomAction oUserCustomAction = collUserCustomAction.Add();

            oUserCustomAction.Location = "Microsoft.SharePoint.StandardMenu";
            oUserCustomAction.Group = "SiteActions";
            oUserCustomAction.Sequence = 101;
            oUserCustomAction.Title = "Website User Custom Action";
            oUserCustomAction.Description = "This description appears on the Site Actions menu.";
            oUserCustomAction.Url = urlWebsite + @"/_layouts/MyPage.aspx";

            oUserCustomAction.Update();

            clientContext.Load(oWebsite,
                webSite => webSite.UserCustomActions);

            clientContext.ExecuteQuery();
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class ModifyUserCustomAction

        Shared Sub Main()
            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web

            Dim collUserCustomAction As UserCustomActionCollection = oWebsite.UserCustomActions

            Dim oUserCustomAction As UserCustomAction = collUserCustomAction.Add()

            oUserCustomAction.Location = "Microsoft.SharePoint.StandardMenu"
            oUserCustomAction.Group = "SiteActions"
            oUserCustomAction.Sequence = 101
            oUserCustomAction.Title = "Website User Custom Action"
            oUserCustomAction.Description = "This description appears on the Site Actions menu."
            oUserCustomAction.Url = siteUrl + "/_layouts/MyPage.aspx"

            oUserCustomAction.Update()

            clientContext.Load(oWebsite, Function(webSite) webSite.UserCustomActions)

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
siteUrl = '/sites/MySiteCollection';

function createUserCustomActionSite() {

    var clientContext = new SP.ClientContext(siteUrl);
    this.oWebsite = clientContext.get_web();
    var collUserCustomAction = oWebsite.get_userCustomActions();
        
    var oUserCustomAction = collUserCustomAction.add();
    oUserCustomAction.set_location('Microsoft.SharePoint.StandardMenu');
    oUserCustomAction.set_group('SiteActions');
    oUserCustomAction.set_sequence(101);
    oUserCustomAction.set_title('ECMA Website User Custom Action ECMA');
    oUserCustomAction.set_description('This description appears on the Site Actions menu.');
    oUserCustomAction.set_url(siteUrl + '/_layouts/jstest2.aspx');
    oUserCustomAction.update();
        
    clientContext.load(oWebsite, 'Title', 'UserCustomActions');
    
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {

    alert('Custom action created for ' + this.oWebsite.get_title());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Дополнительные сведения и примеры работы с клиентскими объектами в контексте объектной модели Microsoft SharePoint Foundation 2010 Silverlight см. в статье Использование объектной модели Silverlight.

См. также

Концепции

Расположения и идентификаторы пользовательского действия по умолчанию

Обзор извлечения данных

Создание клиентского объекта

Инструкции по использованию клиентской объектной модели

Общие задачи программирования

Навигация по веб-сайту

Другие ресурсы

Библиотека классов для клиента

Библиотека классов ECMAScript