我想从(Provider)businessdata过滤器webpart向BDC List WebPart提供“查询值”。当我尝试连接时,我得到了fllowing错误。 “提供者连接点(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);
答案 0 :(得分:0)
看起来您正在比较两个不同的连接接口。您的提供者连接实现了ITransformableFilterValues,您的消费者连接实现了IWebPartParameters。
我对你在这里编写的代码知之甚少,因为我很少在代码中编写Web部件之间的连接。但关于连接的全部观点是消费者和提供者必须提供并期望相同的界面。
您是否尝试在浏览器界面中将这两个Web部件连接在一起?
答案 1 :(得分:0)
我对此问题的直接体验是将查询字符串过滤器Web部件作为提供程序,将报表查看器Web部件作为使用者,但问题是相同的。
IWebPartParameters接口无法使用ITransformableFilterValues接口。但是连接点集合中的每个项目都实现了不同的接口类型。
在调试器中,检查ConsumerConnectionPointCollection和ProviderConnectionPointConnection实现的其他接口类型。如果两个集合都具有实现相同接口类型的连接,请在要检查接口类型的foreaches中使用该接口类型。
如果没有直接匹配,您应该尝试找到正确的组合。
答案 2 :(得分:0)
您需要使用正确的转换器和覆盖方法,并将转换作为参数,以便两个接口可以连接/转换。从TransformableFilterValuesToParametersTransformer上的msdn文档:“允许实现Microsoft.SharePoint.WebPartPages.ITransformableFilterValues的标准过滤器连接到任何可以使用IWebPartParameters的Web部件”
var transformer = new TransformableFilterValuesToParametersTransformer();
transformer.ProviderFieldNames = new string[] { "DocumentIdForCurrentPage" };
transformer.ConsumerFieldNames = new string[] { "DocumentId" };
webPartManager.SPConnectWebParts( providerWebPart,providerConnection,consumerWebPart,consumerConnection,transformer);