动态SharePoint 2007 Web部件连接

时间:2010-06-21 17:00:15

标签: c# sharepoint sharepoint-2007 web-parts wss-3.0

我正在构建在运行时动态连接Web部件的最佳方式。 Essentailly,该应用程序将允许多个不同的应用程序组创建将在SharePoint前端使用的Web部件。所有Web部件都需要自动检测使用者和提供者以在运行时创建连接。

我们要做的是让webparts发现并自动连接到其他兼容的webparts。当用户将两个兼容部件添加到页面时,部件应该能够创建适当的连接。我们有一个定义良好的接口,用于在各部分之间传递数据,因此唯一的问题是如何管理连接。为了清楚起见,我们不希望用户担心必须自己创建连接。

出于我们的目的,“最佳方式”意味着最高效,优雅和/或标准。我们希望尽可能地遵循既定的sharepoint设计模式,但代码效率有点重要。

我已经能够起草一个概念验证,它使用基本Web部件类在每个子类webpart的oninit事件中执行此操作。 oninit事件获取当前页面的SPWebPartManager,并迭代遍历每个部分,为从基类继承的每个webpart创建消费者和提供者连接:

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

1 个答案:

答案 0 :(得分:1)

我强烈建议您重新考虑然后放弃这个想法。

我知道可能很难教导所有用户连接Web部件,并且您可能会在有限的情况下使用您的功能。

但是在更复杂的情况下,你只是在寻找麻烦而且你正在限制先进用户的可能性。

  • 如果您实现(或多个)Web部件,它可以使用并提供相同的接口。然后将其中两个放在页面上=>无尽的循环
  • 如果您的用户在同一页面上放置了两个提供商和两个消费者,则无法根据用户的需要对其进行配对。
  • ...

我的建议是你开发你的web部件,这样他们可以连接和不连接(如果连接可能隐藏部分UI)并教你的用户使用连接

或者你可以走到一半,当在设计模式下显示你的webpart时,列出它可以连接的网络部分作为链接,用户可以点击这些链接进行连接。