2009-06-15 3 views
2

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

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

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); 

ответ

0

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

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

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

0

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

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

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

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

0

Вам необходимо использовать правильный трансформатор и метод переопределения с преобразованием в качестве параметра, чтобы два интерфейса могли подключаться/преобразовываться. Из документации 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, трансформатор);

Смежные вопросы