Соединения веб-частей в определениях сайтов - PullRequest
6 голосов
/ 26 июня 2009

У меня есть требование указать соединения веб-части в onet.xml. Поэтому, когда сайт создается с использованием этого определения сайта, указанные веб-части уже подключены и готовы к использованию. Какие свойства мне нужно указать для этих конкретных веб-частей в файле onet.xml.

Ответы [ 3 ]

3 голосов
/ 27 июня 2009

Я тоже врезался в эту стену где-то в прошлом году! Похоже, что в веб-частях больше нельзя указывать соединения в новом формате .webpart, как в старом формате .dwp. В итоге я включил пользовательскую функцию в определение сайта, как предлагает kpinhack. Мой код для подключения веб-частей приведен ниже. Этот метод предназначен только для соединения двух веб-частей разных типов - он не поддерживает несколько веб-частей одного типа на одной странице. Но я уверен, что вы поймете общую идею.

private void ConnectWebParts(SPWeb web, string pageName, Type providerType, Type consumerType)
{
  SPFile file = web.GetFile(pageName);
  SPList list = null;
  if (file.InDocumentLibrary)
  {
    list = file.Item.ParentList;
    if (list.ForceCheckout) file.CheckOut();
  }

  SPLimitedWebPartManager webPartManager = 
    web.GetLimitedWebPartManager(
      pageName,
      System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);

  WebPart provider = null;
  foreach (WebPart wp in webPartManager.WebParts)
  {
    if (wp.GetType() == providerType)
    {
      provider = wp;
      break;
    }
  }

  foreach (WebPart consumer in webPartManager.WebParts)
  {
    if (consumer.GetType() != consumerType) continue;

    ProviderConnectionPointCollection providerConnections = webPartManager.GetProviderConnectionPoints(provider);
    ProviderConnectionPoint providerConnection = providerConnections[0];

    ConsumerConnectionPointCollection consumerConnections = webPartManager.GetConsumerConnectionPoints(consumer);
    ConsumerConnectionPoint consumerConnection = consumerConnections[0];

    SPWebPartConnection con = webPartManager.SPConnectWebParts(provider, providerConnection, consumer, consumerConnection);
    webPartManager.SPWebPartConnections.Add(con);
  }

  if (list != null)
  {
    if (list.ForceCheckout)
    {
      file.CheckIn("Added Web Part Connections");
    }

    if (list.EnableVersioning && list.EnableMinorVersions)
    {
      file.Publish("Added Web Part Connections");
    }
  }
}
0 голосов
/ 27 июня 2009

вам потребуется использовать тег , чтобы объявить ваши веб-части, а затем объявить ваши соединения внутри вложенных элементов .

пример

0 голосов
/ 26 июня 2009

Я бы сконфигурировал WebParts в SiteProvisioning-Feature, реализовав обработчик событий OnActivation. Таким образом, код будет выполняться при создании веб-сайта, и вы сможете обрабатывать ошибки так, как вам нравится (например, если веб-части недоступны при создании веб-сайта - по любой причине)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...