Как автоматически включить подключения к веб-частям при создании страницы публикации на основе пользовательского макета страницы в SharePoint 2010 - PullRequest
0 голосов
/ 14 апреля 2011

Я создал простой настраиваемый макет страницы в SharePoint Designer, добавил пару зон веб-частей и настраиваемую веб-часть в каждую зону.

Эти веб-части имеют настраиваемый набор интерфейсов поставщик-потребитель,Я настроил соединение между веб-частями в SharePoint Designer (с помощью мастера добавления соединений) и сохранил макет страницы.

После этого я зарегистрировался в макете и утвердил его в веб-интерфейсе SP.

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

Это ожидаемое поведение?Если да, есть ли способ настроить соединение автоматически, программно или декларативно?

Есть ли пропущенный шаг?

1 Ответ

0 голосов
/ 10 мая 2011

Возможно установить соединения в SharePoint, но не так просто. Ниже приведен код из моего проекта. Сначала нам понадобится метод для создания преобразователя для поля потребителей и поля поставщика:

private TransformableFilterValuesToParametersTransformer CreateTransformer(String consumerFieldName, String providerFieldName)
        {
            TransformableFilterValuesToParametersTransformer filterToParameterTransformer =
                new TransformableFilterValuesToParametersTransformer();
            // The private fields '_consumerFieldNames' and '_providerFieldNames' must be set for the web part connection to work.
            // Having reflected the TransformableFilterValuesToParametersTransformer it seems that the only place this is set is within a
            // nested wizard class (this seems to be the wizard that runs when the connection is created via the SharePoint UI) so although
            // this is not pretty it looks to be the only way...

            try
            {
                string[] _consumerFieldNames = new string[1];
                _consumerFieldNames[0] = consumerFieldName;
                FieldInfo conFld = typeof(TransformableFilterValuesToParametersTransformer).GetField("_consumerFieldNames", BindingFlags.Instance | BindingFlags.NonPublic);
                conFld.SetValue(filterToParameterTransformer, _consumerFieldNames);
                string[] _providerFieldNames = new string[1];
                _providerFieldNames[0] = providerFieldName;
                FieldInfo prvFld = typeof(TransformableFilterValuesToParametersTransformer).GetField("_providerFieldNames", BindingFlags.Instance | BindingFlags.NonPublic);
                prvFld.SetValue(filterToParameterTransformer, _providerFieldNames);
            }
            catch
            {
                throw new Exception("Unexpected internal definition for 'TransformableFilterValuesToParametersTransformer'. Please amend private member access code.");
            }
            return filterToParameterTransformer;
        }

Теперь создайте соединение:

TransformableFilterValuesToParametersTransformer transformer = CreateTransformer("ConsumerFieldInternalName", "ProviderFieldInternalName");

            ProviderConnectionPointCollection pcpc = mgr.GetProviderConnectionPoints(providerWebPart);
            ConsumerConnectionPointCollection ccpc = mgr.GetConsumerConnectionPoints(consumerWebPart);
            mgr.SPConnectWebParts(
               providerWebPart, pcpc[0],
                consumerWebPart,
                ccpc[0],
                transformer
                );

mgr - это экземпляр SPLimitedWebPartManager для конкретной страницы просмотра.

Вы можете найти больше примеров здесь:

http://social.msdn.microsoft.com/Forums/en/sharepointdevelopment/thread/3f960d66-af45-42ca-82d7-114de773213f

http://jsiegmund.wordpress.com/2010/05/28/sp2010-programmatically-creating-a-web-part-page-with-connected-webparts/

...