Интерфейс IListConsumer
Примечание. Этот API устарел.
Определяет методы, которые можно реализовать в веб-части таким образом, чтобы он мог использовать весь список (набора строк) данных из другой веб-части, который реализует интерфейс IListProvider .
Пространство имен: Microsoft.SharePoint.WebPartPages.Communication
Сборка: Microsoft.SharePoint (в Microsoft.SharePoint.dll)
Синтаксис
'Декларация
<ObsoleteAttribute("Use System.Web.UI.WebControls.WebParts.IWebPartTable instead")> _
Public Interface IListConsumer
'Применение
Dim instance As IListConsumer
[ObsoleteAttribute("Use System.Web.UI.WebControls.WebParts.IWebPartTable instead")]
public interface IListConsumer
Замечания
Должен быть реализован интерфейс IListConsumer для веб-части, необходимо использовать набор данных, который можно охарактеризовать как список, например таблицу данных. Веб-часть, которая реализует интерфейс IListConsumer имеет возможность получения аргументов инициализации из части поставщика. Подключения к интерфейсу IListProviderIListConsumer является прямое подключение, отображается диалоговое окно без преобразователя. Соответствующим образом использовать переданные значения, много веб-частей может потребоваться разработан понимание данных, отправленных службой поставщика.
Примеры
В следующем примере кода используется простой серверных IListConsumer веб-части. Он может быть подключен другой веб-части, который реализует интерфейс IListProvider на сервере. Пользовательский интерфейс отображает список, который он получает от IListProvider веб-части.
Восемь шагов относятся к тому, что данная соединяемой веб-части. Эти шаги являются номерами и комментарии в коде.
Обзор Создание соединяемой веб-части Creating a Connectable Web Partсм.
' Common .NET required namespaces
Imports System
Imports System.ComponentModel
Imports System.Web.UI
' Web Part required namespaces
Imports Microsoft.SharePoint.WebPartPages
Imports System.Xml.Serialization
Imports System.Web.UI.WebControls
' Code Access Security namespaces
Imports System.Security
Imports Microsoft.SharePoint.Utilities
' DataGrid and user interface namespaces
Imports System.Data
Imports System.Drawing
'Step #1: Make a Reference to the Communication namespace.
Imports Microsoft.SharePoint.WebPartPages.Communication
Namespace ConnectionCodeSamples
' Step #2: Inherit from the WebPart base class and implement the
' IListConsumer interface.
Public Class ServerSideListConsumer
Inherits WebPart
Implements IListConsumer
' Declare variables for keeping track of connection state.
Private _connected As Boolean = False
Private _connectedWebPartTitle As String = String.Empty
Private _registrationErrorMsg As String = "An error has occurred trying to register your connection interfaces."
Private _registrationErrorOccurred As Boolean = False
Private _notConnectedMsg As String = "NOT CONNECTED. To use this Web Part connect it to a List Provider Web Part."
' Declare variables for Web Part user interface.
Private _connectedWebPartLabel As String = "Connected to Web Part"
Private _dataGrid As DataGrid
' Step #3: Override EnsureInterfaces method and call
' RegisterInterface method.
' EnsureInterfaces() is called by the Web Part infrastructure
' during the ASP.NET PreRender event
' and allows the part to register all of its connection
' interfaces.
Public Overrides Sub EnsureInterfaces()
' If your Web Part is installed in the bin directory and the
' Code Access Security (CAS) setting doesn't
' allow Web Part Connections, an exception will be thrown. To
' allow your Web Part to behave
' well and continue working, a try/catch block should be used
' when attempting to register interfaces.
' Web Part Connections will only work if the level attribute
' of the <trust> tag in the web.config file is set to
' WSS_Minimal, WSS_Medium, or Full. By default a new
' SharePoint site is installed with the trust level set to
' WSS_Minimal.
Try
' Register the IListConsumer interface
' <param name="interfaceName">Friendly name of the
' interface that is being implemented.</param>
' <param name="interfaceType">Specifies which interface is
' being implemented.</param>
' <param name="maxConnections">Defines how many times this
' interface can be connected.</param>
' <param name="runAtOptions">Determines where the interface
' can run.</param>
' <param name="interfaceObject">Reference to the object
' that is implementing this interface.</param>
' <param name="interfaceClientReference">Name used to
' reference the interface on the client.
' This is a server side example so the value is set to
' empty string.</param>
' <param name="menuLabel">Label for the interface that
' appears in the UI</param>
' <param name="description">Description of the interface
' that appears in the UI</param>
' <param name="allowCrossPageConnection">Specifies if the
' interface can connect to a Web Part
' on a different page. This is an optional parameter with a
' default of false. Note that only some
' server side interfaces are allowed to connect across
' pages by the Web Part infrastructure.
' The IListConsumer interface is not allowed to connect
' across pages.</param>
RegisterInterface("MyListConsumerInterface", InterfaceTypes.IListConsumer, WebPart.LimitOneConnection, ConnectionRunAt.Server, Me, "", "Consume List From", "Consumes a list from another Web Part.")
Catch se As SecurityException
_registrationErrorOccurred = True
End Try
End Sub
' Step #4: Override the CanRunAt method.
' The CanRunAt method is called by the Web Part infrastructure
' during the ASP.NET PreRender event
' to determine where the Web Part can run based on its current
' configuration.
Public Overrides Function CanRunAt() As ConnectionRunAt
' This Web Part can run on the server.
Return ConnectionRunAt.Server
End Function
' Step #5: Override the PartCommunicationConnect method.
' PartCommunicationConnect() is called by the Web Part
' infrastructure to notify the Web Part that it
' is connected during the ASP.NET PreRender event. Relevant
' information is passed to the part such as
' the interface it is connected over, the Web Part it is being
' connected to, and where the part will be running,
' either client or server side.
' <param name="interfaceName">Friendly name of the interface that
' is being connected</param>
' <param name="connectedPart">Reference to the other Web Part
' that is being connected to</param>
' <param name="connectedInterfaceName">Friendly name of the
' interface on the other Web Part</param>
' <param name="runAt">Where the interface should execute</param>
Public Overrides Sub PartCommunicationConnect(interfaceName As String, connectedPart As WebPart, connectedInterfaceName As String, runAt As ConnectionRunAt)
' Keep track of connection state.
If interfaceName = "MyListConsumerInterface" Then
_connected = True
_connectedWebPartTitle = SPEncode.HtmlEncode(connectedPart.Title)
End If
End Sub
' Step #6: Implement the ListProviderInit event handler.
' The connected provider part(s) will call this method during its
' PartCommunicationInit phase to pass initialization information
' to the consumer Web Part.
' <param name="sender">Reference to the Consumer Web Part</param>
' <param name="listProviderInitEventArgs">The args passed by the
' provider Web Part</param>
Public Sub ListProviderInit(sender As Object, listProviderInitEventArgs As ListProviderInitEventArgs) _
Implements IListConsumer.ListProviderInit
End Sub
' Because this class implements the IListConsumer interface, it
' must implement the interface member ListProviderInit. However,
' this example doesn't use any initialization data that is passed
' in here.
' Step #7: Implement the ListReady event handler.
' The connected provider part(s) will call this method during its
' PartCommunicationMain phase to pass their primary data to the
' consumer Web Part.
' <param name="sender">Reference to the provider Web Part</param>
' <param name="listReadyEventArgs">The args passed by the
' provider Web Part</param>
Public Sub ListReady(sender As Object, listReadyEventArgs As ListReadyEventArgs) _
Implements IListConsumer.ListReady
' Ensure that all of the Web Part's controls are created.
EnsureChildControls()
' Store the List that was passed by the provider Web Part.
If Not (listReadyEventArgs.List Is Nothing) Then
_dataGrid.DataSource = listReadyEventArgs.List
'Bind the data grid
_dataGrid.DataBind()
End If
End Sub
' Step #8: Implement the PartialListReady event handler.
' The connected provider part(s) will call this method during its
' PartCommunicationMain phase to pass partial amounts of their
' primary data to the consumer Web Part. This is useful in
' scenarios involving large datasets that need to be streamed.
' <param name="sender">Reference to the provider Web Part</param>
' <param name="partialListReadyEventArgs">The args passed by the
' provider Web Part</param>
Public Sub PartialListReady(sender As Object, partialListReadyEventArgs As PartialListReadyEventArgs) _
Implements IListConsumer.PartialListReady
End Sub
' Because this class implements the IListConsumer interface, it
' must implement the interface member PartialListReady. However,
' this example doesn't use any data that may be passed in here.
Protected Overrides Sub RenderWebPart(output As HtmlTextWriter)
' Check for connection interface registration error
If _registrationErrorOccurred Then
output.Write(_registrationErrorMsg)
Return
End If
' Ensure that all of the Web Part's controls are created.
EnsureChildControls()
' Check if connected.
If _connected Then
If Not (_dataGrid.DataSource Is Nothing) Then
' Line break.
output.RenderBeginTag(HtmlTextWriterTag.Br)
output.RenderEndTag()
' Render the DataGrid control.
_dataGrid.RenderControl(output)
' Line break.
output.RenderBeginTag(HtmlTextWriterTag.Br)
output.RenderEndTag()
End If
' Render connected Web Part title.
output.Write((_connectedWebPartLabel + ": "))
output.RenderBeginTag(HtmlTextWriterTag.I)
output.Write(_connectedWebPartTitle)
output.RenderEndTag()
output.Write("<br>")
Else
' The Web Part isn't connected.
output.Write(_notConnectedMsg)
End If
End Sub
' Create Web Part user interface controls.
Protected Overrides Sub CreateChildControls()
' Create the DataGrid
_dataGrid = New DataGrid()
_dataGrid.ID = "DataGrid"
' Format DataGrid.
_dataGrid.HeaderStyle.Font.Bold = True
_dataGrid.HeaderStyle.ForeColor = Color.DarkBlue
End Sub
End Class
End Namespace
// Common .NET required namespaces
using System;
using System.ComponentModel;
using System.Web.UI;
// Web Part required namespaces
using Microsoft.SharePoint.WebPartPages;
using System.Xml.Serialization;
using System.Web.UI.WebControls;
// Code Access Security namespaces
using System.Security;
using Microsoft.SharePoint.Utilities;
// DataGrid and user interface namespaces
using System.Data;
using System.Drawing;
//Step #1: Make a Reference to the Communication namespace.
using Microsoft.SharePoint.WebPartPages.Communication;
namespace ConnectionCodeSamples
{
//Step #2: Inherit from the WebPart base class and implement the
//IListConsumer interface.
public class ServerSideListConsumer : WebPart, IListConsumer
{
// Declare variables for keeping track of connection state.
private bool _connected = false;
private string _connectedWebPartTitle = string.Empty;
private string _registrationErrorMsg = "An error has occurred trying to register your connection interfaces.";
private bool _registrationErrorOccurred = false;
private string _notConnectedMsg = "NOT CONNECTED. To use this Web Part connect it to a List Provider Web Part.";
// Declare variables for Web Part user interface.
private string _connectedWebPartLabel = "Connected to Web Part";
private DataGrid _dataGrid;
// Step #3: Override EnsureInterfaces method and call
// RegisterInterface method.
// EnsureInterfaces() is called by the Web Part infrastructure
// during the ASP.NET PreRender event
// and allows the part to register all of its connection
// interfaces.
public override void EnsureInterfaces()
{
// If your Web Part is installed in the bin directory and
// the Code Access Security (CAS) setting doesn't
// allow Web Part Connections, an exception will be thrown.
// To allow your Web Part to behave
// well and continue working, a try/catch block should be
// used when attempting to register interfaces.
// Web Part Connections will only work if the level
// attribute of the <trust> tag in the
// web.config file is set to WSS_Minimal, WSS_Medium, or
// Full. By default a new SharePoint site
// is installed with the trust level set to WSS_Minimal.
try
{
// Register the IListConsumer interface
// <param name="interfaceName">Friendly name of the
// interface that is being implemented.</param>
// <param name="interfaceType">Specifies which
// interface is being implemented.</param>
// <param name="maxConnections">Defines how many times
// this interface can be connected.</param>
// <param name="runAtOptions">Determines where the
// interface can run.</param>
// <param name="interfaceObject">Reference to the
// object that is implementing this interface.</param>
// <param name="interfaceClientReference">Name used to
// reference the interface on the client.
// This is a server side example so the value is set to
// empty string.</param>
// <param name="menuLabel">Label for the interface
// that appears in the UI</param>
// <param name="description">Description of the
// interface that appears in the UI</param>
// <param name="allowCrossPageConnection">Specifies if
// the interface can connect to a Web Part
// on a different page. This is an optional parameter
// with a default of false. Note that only some
// server side interfaces are allowed to connect across
// pages by the Web Part infrastructure.
// The IListConsumer interface is not allowed to
// connect across pages.</param>
RegisterInterface("MyListConsumerInterface", //InterfaceName
InterfaceTypes.IListConsumer, //InterfaceType
WebPart.LimitOneConnection, //MaxConnections
ConnectionRunAt.Server, //RunAtOptions
this, //InterfaceObject
"", //InterfaceClientReference
"Consume List From", //MenuLabel
"Consumes a list from another Web Part."); //Description
}
catch(SecurityException se)
{
_registrationErrorOccurred = true;
}
}
// Step #4: Override the CanRunAt method.
// The CanRunAt method is called by the Web Part infrastructure
// during the ASP.NET PreRender event
// to determine where the Web Part can run based on its current
// configuration.
public override ConnectionRunAt CanRunAt()
{
// This Web Part can run on the server.
return ConnectionRunAt.Server;
}
// Step #5: Override the PartCommunicationConnect method.
// PartCommunicationConnect() is called by the Web Part
// infrastructure to notify the Web Part that it
// is connected during the ASP.NET PreRender event. Relevant
// information is passed to the part such as
// the interface it is connected over, the Web Part it is being
// connected to, and where the part will be running,
// either client or server side.
// <param name="interfaceName">Friendly name of the interface
// that is being connected</param>
// <param name="connectedPart">Reference to the other Web Part
// that is being connected to</param>
// <param name="connectedInterfaceName">Friendly name of the
// interface on the other Web Part</param>
// <param name="runAt">Where the interface should
// execute</param>
public override void PartCommunicationConnect(string interfaceName,
WebPart connectedPart,
string connectedInterfaceName,
ConnectionRunAt runAt)
{
// Keep track of connection state.
if (interfaceName == "MyListConsumerInterface")
{
_connected = true;
_connectedWebPartTitle = SPEncode.HtmlEncode(connectedPart.Title);
}
}
// Step #6: Implement the ListProviderInit event handler.
// The connected provider part(s) will call this method during
// its PartCommunicationInit phase
// to pass initialization information to the consumer Web Part.
// <param name="sender">Reference to the Consumer Web
// Part</param>
// <param name="listProviderInitEventArgs">The args passed by
// the provider Web Part</param>
public void ListProviderInit(object sender, ListProviderInitEventArgs listProviderInitEventArgs)
{
// Because this class implements the IListConsumer
// interface, it must implement the interface member
// ListProviderInit. However, this example
// doesn't use any initialization data that is passed in
// here.
}
// Step #7: Implement the ListReady event handler.
// The connected provider part(s) will call this method during
// its PartCommunicationMain phase
// to pass their primary data to the consumer Web Part.
// <param name="sender">Reference to the provider Web
// Part</param>
// <param name="listReadyEventArgs">The args passed by the provider Web Part</param>
public void ListReady(object sender, ListReadyEventArgs listReadyEventArgs)
{
// Ensure that all of the Web Part's controls are created.
EnsureChildControls();
// Store the List that was passed by the provider Web Part.
if(listReadyEventArgs.List != null)
{
_dataGrid.DataSource = listReadyEventArgs.List;
//Bind the data grid
_dataGrid.DataBind();
}
}
// Step #8: Implement the PartialListReady event handler.
// The connected provider part(s) will call this method during
// its PartCommunicationMain phase to pass partial amounts of
// their primary data to the consumer Web Part. This is useful
// in scenarios involving large datasets that need to be
// streamed.
// <param name="sender">Reference to the provider Web
// Part</param>
// <param name="partialListReadyEventArgs">The args passed by
// the provider Web Part</param>
public void PartialListReady(object sender, PartialListReadyEventArgs partialListReadyEventArgs)
{
// Because this class implements the IListConsumer
// interface, it must implement the interface member
// PartialListReady. However, this example
// doesn't use any data that may be passed in here.
}
protected override void RenderWebPart(HtmlTextWriter output)
{
// Check for connection interface registration error
if (_registrationErrorOccurred)
{
output.Write(_registrationErrorMsg);
return;
}
// Ensure that all of the Web Part's controls are created.
EnsureChildControls();
// Check if connected.
if(_connected)
{
if (_dataGrid.DataSource != null)
{
// Line break.
output.RenderBeginTag(HtmlTextWriterTag.Br);
output.RenderEndTag();
// Render the DataGrid control.
_dataGrid.RenderControl(output);
// Line break.
output.RenderBeginTag(HtmlTextWriterTag.Br);
output.RenderEndTag();
}
// Render connected Web Part title.
output.Write(_connectedWebPartLabel + ": ");
output.RenderBeginTag(HtmlTextWriterTag.I);
output.Write(_connectedWebPartTitle);
output.RenderEndTag();
output.Write("<br>");
}
else
{
// The Web Part isn't connected.
output.Write(_notConnectedMsg);
}
}
// Create Web Part user interface controls.
protected override void CreateChildControls()
{
// Create the DataGrid
_dataGrid = new DataGrid();
_dataGrid.ID = "DataGrid";
// Format DataGrid.
_dataGrid.HeaderStyle.Font.Bold = true;
_dataGrid.HeaderStyle.ForeColor = Color.DarkBlue;
}
}
}
См. также
Справочные материалы
Пространство имен Microsoft.SharePoint.WebPartPages.Communication