Ошибка интерфейса подключения веб-части BDC - PullRequest
2 голосов
/ 15 июня 2009

Я хочу предоставить «Значение запроса» для веб-части BDC List из веб-части фильтра бизнес-данных (поставщик). Я получаю ошибку, когда пытаюсь подключиться. «Точка подключения поставщика (BusinessDataFilterWebPart) и точка подключения потребителя« BusinessDataListWebPart »не используют один и тот же интерфейс подключения."

Ниже приведен мой фрагмент кода.

System.Web.UI.WebControls.WebParts.WebPart providerWebPart =
                webPartManager.WebParts[filterWebPart.ID];
            ProviderConnectionPointCollection providerConnections =
                webPartManager.GetProviderConnectionPoints(providerWebPart);
            ProviderConnectionPoint providerConnection = null;
            foreach (ProviderConnectionPoint ppoint in providerConnections)
            {
                if (ppoint.InterfaceType == typeof(ITransformableFilterValues))
                    providerConnection = ppoint;

            }
            System.Web.UI.WebControls.WebParts.WebPart consumerWebPart =
                webPartManager.WebParts[consumer.ID];
            ConsumerConnectionPointCollection consumerConnections =
                webPartManager.GetConsumerConnectionPoints(consumerWebPart);
            ConsumerConnectionPoint consumerConnection = null;

            foreach (ConsumerConnectionPoint cpoint in consumerConnections)
            {
               if (cpoint.InterfaceType == typeof(IWebPartParameters))
                   consumerConnection = cpoint;
            }

 SPWebPartConnection newConnection = webPartManager.SPConnectWebParts(
                providerWebPart, providerConnection, consumerWebPart, consumerConnection);

Ответы [ 3 ]

0 голосов
/ 12 февраля 2010

Мой прямой опыт решения этой проблемы связан с веб-частью фильтра строки запроса в качестве поставщика и веб-частью средства просмотра отчетов в качестве потребителя, но проблема была той же.

Интерфейс ITransformableFilterValues ​​не используется интерфейсом IWebPartParameters. Но каждый элемент в коллекции точек подключения реализует свой тип интерфейса.

В вашем отладчике проверьте другие типы интерфейса, реализованные как ConsumerConnectionPointCollection, так и ProviderConnectionPointConnection. Если в обеих коллекциях есть соединения, в которых реализован один и тот же тип интерфейса, используйте этот тип интерфейса в foreaches, где вы проверяете тип интерфейса.

Если прямого совпадения нет, вам следует поэкспериментировать, чтобы найти правильную комбинацию.

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

Необходимо использовать правильный преобразователь и метод переопределения с преобразованием в качестве параметра, чтобы два интерфейса могли соединяться / преобразовываться. Из документации msdn для TransformableFilterValuesToParametersTransformer: «Разрешает стандартным фильтрам, которые реализуют Microsoft.SharePoint.WebPartPages.ITransformableFilterValues, подключаться к любой веб-части, которая может использовать IWebPartParameters»

var transformer = new TransformableFilterValuesToParametersTransformer();
               transformer.ProviderFieldNames = new string[] { "DocumentIdForCurrentPage" };
               transformer.ConsumerFieldNames = new string[] { "DocumentId" };

webPartManager.SPConnectWebParts ( providerWebPart, providerConnection, consumerWebPart, consumerConnection, преобразователь);

0 голосов
/ 16 июня 2009

Похоже, вы сравниваете два разных интерфейса подключения. Подключение вашего провайдера реализует ITransformableFilterValues, а подключение вашего потребителя реализует IWebPartParameters.

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

Вы пытались соединить эти две веб-части вместе в интерфейсе браузера?

...