2010-05-24 7 views
1

Я создал несколько веб-узлов мастера/деталей, которые необходимо подключить. У нас есть требование, чтобы веб-сайты самостоятельно открывали и подключались к другим подключаемым веб-страницам на странице. Я дружнее это в стандартной странице ASP.NET с помощью следующего кода:SharePoint/WSS3.0: Создание статических подключений веб-страниц во время выполнения

protected override void OnLoad(EventArgs e) 
{  
    WebPartManager manager = WebPartManager.GetCurrentWebPartManager(Page); 
    manager.StaticConnections.Add(new WebPartConnection() 
    { 
     ID = string.Format("WebPartConnection{0}{1}", this.ID, provider.ID), 
     ConsumerID = this.ID, 
     ConsumerConnectionPointID = "WebPartConnectableConsumer", 
     ProviderID = provider.ID, 
     ProviderConnectionPointID = "WebPartConnectableProvider" 
    }); 
} 

Этот подход, однако, не работает в SharePoint. Использование версии SharePoint этих объектов приводит к общей ошибке Sharepoint:

protected override void OnLoad(EventArgs e) 
{  
    SPWebPartManager spManager = SPWebPartManager.GetCurrentWebPartManager(Page) as SPWebPartManager; 
    spManager.StaticConnections.Add(new WebPartConnection() 
    { 
     ID = string.Format("WebPartConnection{0}{1}", this.ID, provider.ID), 
     ConsumerID = this.ID, 
     ConsumerConnectionPointID = "WebPartConnectableConsumer", 
     ProviderID = provider.ID, 
     ProviderConnectionPointID = "WebPartConnectableProvider" 
    }); 
} 

Следующий подход работает, но и создает соединение как часть персонализации пользователя:

protected override void OnLoad(EventArgs e) 
{ 
    SPWebPartConnection connection = (from SPWebPartConnection c in spManager.SPWebPartConnections where c != null && c.Consumer == this && c.ConsumerConnectionPointID == "WebPartConnectableConsumer" && c.Provider == provider select c).FirstOrDefault(); 
    if (connection == null) 
    { 
     try 
     { 
      ProviderConnectionPointCollection providerCollections = spManager.GetProviderConnectionPoints(provider); 
      ConsumerConnectionPointCollection consumerConnections = spManager.GetConsumerConnectionPoints(this); 
      connection = spManager.SPConnectWebParts(provider, providerCollections["WebPartConnectableProvider"], this, consumerConnections["WebPartConnectableConsumer"]); 
     } 
     catch { } 
    } 
} 
+1

Вы можете проверить файлы журналов SharePoint или просмотра событий, чтобы увидеть, если есть более подробная информация об ошибках, которые могут помочь в устранении неполадок? –

+0

Спасибо за предложение журнала. Я несколько новичок в разработке SharePoint, и я все еще привык к модели разработки. Я совершенно честно забыл включить подробный журнал. – etc

ответ

0

Скрытые в журналах был что свойство StaticConnections не может использоваться в средах SharePoint/WSS. Вместо этого необходимо использовать свойство SPWebPartConnections. Кроме того, соединения должны быть добавлены до события загрузки (например, OnInit).

Рабочий код:

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    SetUpProviderConnection(); 
} 

private bool SetUpProviderConnection() 
{ 
    bool connectionCreated = false; 

    WebPartManager manager = WebPartManager.GetCurrentWebPartManager(Page); 
    foreach (System.Web.UI.WebControls.WebParts.WebPart webPart in manager.WebParts) 
    { 
     BaseWebPart provider = webPart as BaseWebPart; 
     if (provider != null && (provider != this)) 
     { 
      if (manager is Microsoft.SharePoint.WebPartPages.SPWebPartManager) 
      { 
       SPWebPartManager spManager = SPWebPartManager.GetCurrentWebPartManager(Page) as SPWebPartManager; 

       spManager.SPWebPartConnections.Add(new SPWebPartConnection() 
       { 
        ID = string.Format("WebPartConnection{0}{1}", this.ID, provider.ID), 
        ConsumerID = this.ID, 
        ConsumerConnectionPointID = "WebPartConnectableConsumer", 
        ProviderID = provider.ID, 
        ProviderConnectionPointID = "WebPartConnectableProvider" 
       }); 
      } 
      else 
      { 
       manager.StaticConnections.Add(new WebPartConnection() 
       { 
        ID = string.Format("WebPartConnection{0}{1}", this.ID, provider.ID), 
        ConsumerID = this.ID, 
        ConsumerConnectionPointID = "WebPartConnectableConsumer", 
        ProviderID = provider.ID, 
        ProviderConnectionPointID = "WebPartConnectableProvider" 
       }); 
      } 
      connectionCreated = true; 
     } 
    } 
    return connectionCreated; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^