2009-06-15 57 views
2

我想向(Provider)businessdata filter webpart的BDC List WebPart提供「查詢值」。我嘗試連接時遇到錯誤。 「提供程序連接點(BusinessDataFilterWebPart)和使用者連接點」BusinessDataListWebPart「不使用相同的連接接口。」BDC Web部件連接接口錯誤

以下是我的代碼片段。

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。

我對這裏寫的代碼瞭解不多,因爲我很少在代碼中編寫Web部件之間的連接。但關於連接的重點是消費者和提供者必須提供和期望相同的接口。

您是否嘗試過在瀏覽器界面中將這兩個Web部件連接在一起?

0

我對此問題的直接體驗是查詢字符串篩選器Web部件作爲提供者,報告查看器Web部件作爲使用者,但問題相同。

ITransformableFilterValues接口不能由IWebPartParameters接口使用。但是連接點集合中的每個項目都實現了不同的接口類型。

在調試器中,檢查由ConsumerConnectionPointCollection和ProviderConnectionPointConnection實現的其他接口類型。如果兩個集合都具有實現相同接口類型的連接,則在檢查接口類型的foreach中使用該接口類型。

如果沒有直接匹配,您應該嘗試找到正確的組合。

0

您需要使用正確的轉換器和覆蓋方法,將轉換作爲參數,以便兩個接口可以連接/轉換。從上TransformableFilterValuesToParametersTransformer MSDN文檔: 「允許標準過濾器,其實現Microsoft.SharePoint.WebPartPages.ITransformableFilterValues,連接到任何Web部件,它可以使用IWebPartParameters」

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

webPartManager.SPConnectWebParts( providerWebPart,providerConnection, consumerWebPart,consumerConnection,變壓器);