【发布时间】:2011-03-06 10:17:04
【问题描述】:
我正在对在运行时动态连接 Web 部件的最佳方式进行原型设计。本质上,该应用程序将允许多个不同的应用程序组创建将在 SharePoint 前端使用的 Web 部件。所有 Web 部件都需要自动检测消费者和提供者以在运行时创建连接。
我们要做的是让 webparts 发现并自动连接到其他兼容的 webparts。当用户将两个兼容的部分添加到页面时,这些部分应该能够创建适当的连接。我们有一个定义明确的接口用于在部件之间传递数据,所以唯一的问题是如何管理连接。明确地说,我们不希望用户担心必须自己创建连接。
就我们而言,“最佳方式”是指最高效、最优雅和/或最标准的方式。我们希望尽可能遵循既定的共享点设计模式,但代码效率有些重要。
我已经能够起草一个概念证明,它使用基本 Web 部件类在每个子类 Web 部件的 oninit 事件期间执行此操作。 oninit 事件获取当前页面的 SPWebPartManager 并遍历每个部分,为从基类继承的每个 Web 部件创建使用者和提供者连接:
SPWebPartManager spManager = SPWebPartManager.GetCurrentWebPartManager(Page) as SPWebPartManager;
foreach (BaseWebPart provider in parts)
{
foreach (BaseWebPart consumer in parts)
{
if (provider != consumer)
{
string connectionId = string.Format("WebPartConnection{0}{1}", consumer.ID, provider.ID);
SPWebPartConnection conn = spManager.SPWebPartConnections[connectionId];
if (conn == null)
{
conn = new SPWebPartConnection()
{
ID = connectionId,
ConsumerID = consumer.ID,
ConsumerConnectionPointID = "WebPartConnectableConsumer",
ProviderID = provider.ID,
ProviderConnectionPointID = "WebPartConnectableProvider"
};
spManager.SPWebPartConnections.Add(conn);
}
}
}
}
【问题讨论】:
标签: c# sharepoint sharepoint-2007 web-parts wss-3.0