Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态SharePoint 2007 Web部件连接_C#_Sharepoint_Sharepoint 2007_Web Parts_Wss 3.0 - Fatal编程技术网

C# 动态SharePoint 2007 Web部件连接

C# 动态SharePoint 2007 Web部件连接,c#,sharepoint,sharepoint-2007,web-parts,wss-3.0,C#,Sharepoint,Sharepoint 2007,Web Parts,Wss 3.0,我正在设计运行时动态连接web部件的最佳方法。本质上,该应用程序将允许多个不同的应用程序组创建将在SharePoint前端中使用的web部件。所有web部件都需要自动检测使用者和提供者,以便在运行时创建连接 我们希望做的是让Web部件发现并自动连接到其他兼容的Web部件。当用户将两个兼容的部分添加到页面时,这些部分应该能够创建适当的连接。我们有一个定义良好的接口,用于在部件之间传递数据,因此唯一的问题是如何管理连接。明确地说,我们不希望用户担心必须自己创建连接 就我们而言,“最佳方式”是指最高效

我正在设计运行时动态连接web部件的最佳方法。本质上,该应用程序将允许多个不同的应用程序组创建将在SharePoint前端中使用的web部件。所有web部件都需要自动检测使用者和提供者,以便在运行时创建连接

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

就我们而言,“最佳方式”是指最高效、最优雅和/或最标准的方式。我们希望尽可能遵循已建立的sharepoint设计模式,但代码效率有些重要

我已经能够起草一个概念证明,在每个子类webpart的oninit事件期间使用一个基本web部件类来完成这项工作。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);
            }
        }
    }
}

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

我知道可能很难教所有用户连接web部件,而且您可能会在有限的场景中使用您的功能

但在更复杂的情况下,你只是自找麻烦,你限制了Advanced用户的可能性

  • 如果您实现了一个(或多个)web部件,它可以使用并提供相同的接口。然后将其中两个放在一个page=>无限循环中
  • 如果您的用户将两个提供者和两个使用者放在同一页面上,则您无法根据用户的需要将它们配对
我的建议是,您开发web部件,以便它们可以在有连接和无连接的情况下工作(如果连接,可能会隐藏UI的一部分),并教会用户使用连接


或者你可以半途而废,在设计模式下显示你的web部件时,列出它可以连接到的web部件作为链接,用户可以点击链接。

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

我知道可能很难教所有用户连接web部件,而且您可能会在有限的场景中使用您的功能

但在更复杂的情况下,你只是自找麻烦,你限制了Advanced用户的可能性

  • 如果您实现了一个(或多个)web部件,它可以使用并提供相同的接口。然后将其中两个放在一个page=>无限循环中
  • 如果您的用户将两个提供者和两个使用者放在同一页面上,则您无法根据用户的需要将它们配对
我的建议是,您开发web部件,以便它们可以在有连接和无连接的情况下工作(如果连接,可能会隐藏UI的一部分),并教会用户使用连接


或者你可以半途而废,在设计模式下显示你的web部件时,列出它可以连接到的web部件作为链接,用户可以单击这些链接进行连接。

谢谢,这就是我问的原因!我有一些相同的想法,对总体共识感到好奇。在设计模式中将潜在的Web部件连接显示为链接的建议很有趣。你能给我举个例子吗?谢谢,这就是我为什么要问的原因!我有一些相同的想法,对总体共识感到好奇。在设计模式中将潜在的Web部件连接显示为链接的建议很有趣。你能给我举个例子吗?