Может ли SharePoint WebPart подключиться к пользовательской SharePoint WebPart - PullRequest
3 голосов
/ 07 марта 2011

Мне нужно использовать значение, переданное веб-частью фильтра sharepoint по умолчанию.Я не понимаю, как пользовательская веб-часть sharepoint может установить соединение и получить данные.Это вообще возможно?

Обновлено

Веб-часть поставщика является веб-частью фильтра списка SharePoint по умолчанию.Потребительская веб-часть - это пользовательская веб-часть

. Это код, который я придумал, но параметр "соединения" все еще отображается серым цветом на странице SharePoint.На этой странице у меня есть веб-часть фильтра списков SharePoint и моя веб-часть CustomPageViewer.

namespace PageViewerWithConnections.CustomPageViewer
{
    [ToolboxItemAttribute(false)]
    public class CustomPageViewer : System.Web.UI.WebControls.WebParts.WebPart
    {
        IFilterValues _filterVals;

        [ConnectionConsumer("Consumer connection", "Consumer param")]
        public void ConsumeFilter(IFilterValues filterValues)
        {
            _filterVals = filterValues;
        }

        Microsoft.SharePoint.WebPartPages.PageViewerWebPart objPageViewer;
        protected override void CreateChildControls()
        {

        }
    }
}

Причины такого подхода Моя цель - установить другой URL-адрес для веб-части средства просмотра страниц на основена значение, которое я получаю из веб-части фильтра списка SharePoint.Похоже, что веб-часть фильтра списков SharePoint не может отправить данные в веб-часть просмотра страниц.

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Вам потребуется создать потребительский метод в своей пользовательской веб-части, который принимает в качестве аргумента экземпляр IFilterValues и использует атрибут ConnectionConsumerAttribute.

private IFilterValues _filterVals;

[ConnectionConsumer("Filter Consumer", "FilterConsumer")]
public void ConsumeFilter(IFilterValues filterValues)
{
    _filterVals = filterValues;
}

Обратите внимание, чтопотребление значений фильтра происходит на этапе OnPreRender жизненного цикла страницы, поэтому вам необходимо переопределить метод OnRender, чтобы воздействовать на любые значения, полученные из соединения, или включить логику в методе приема.

Для получения дополнительной информации, проверьте эти ссылки:

http://msdn.microsoft.com/en-us/library/ms494838(v=office.12).aspx

http://msdn.microsoft.com/en-us/library/ms469765.aspx

1 голос
/ 14 сентября 2011

В CreateChildControls вы должны вызывать base.CreateChildControls ();

Вот рабочий код:


    List<IFilterValues> providers = new List<IFilterValues>();</p>

    protected override void CreateChildControls()
    {
        if (providers.Count > 0 && providers[0].ParameterValues != null)
        {
            this.FilterValue1 = providers[0].ParameterValues[0];
        }

        base.CreateChildControls();
    }

    [ConnectionConsumer("Provider WebPart", "IFilterValues", AllowsMultipleConnections = false)]
    public void SetConnectionInterface(IFilterValues provider) 
    {
        if (provider != null)
        {
            this.providers.Add(provider);
            List<ConsumerParameter> parameters = new List<ConsumerParameter>();

            parameters.Add(new ConsumerParameter("param1",
                  ConsumerParameterCapabilities.SupportsSingleValue | ConsumerParameterCapabilities.SupportsEmptyValue | ConsumerParameterCapabilities.SupportsAllValue));

           provider.SetConsumerParameters(new ReadOnlyCollection<ConsumerParameter>(parameters)); 
        } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...