我正在构建在运行时动态连接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);
}
}
}
}
答案 0 :(得分:1)
我强烈建议您重新考虑然后放弃这个想法。
我知道可能很难教导所有用户连接Web部件,并且您可能会在有限的情况下使用您的功能。
但是在更复杂的情况下,你只是在寻找麻烦而且你正在限制先进用户的可能性。
我的建议是你开发你的web部件,这样他们可以连接和不连接(如果连接可能隐藏部分UI)并教你的用户使用连接
或者你可以走到一半,当在设计模式下显示你的webpart时,列出它可以连接的网络部分作为链接,用户可以点击这些链接进行连接。