Практическое руководство. Работа с настраиваемыми действиями пользователя
Дата последнего изменения: 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.
См. также
Концепции
Расположения и идентификаторы пользовательского действия по умолчанию
Инструкции по использованию клиентской объектной модели