Соединения веб-частей в определениях сайтов
У меня есть требование указать соединения веб-части в onet.xml. Поэтому, когда сайт создается с использованием этого определения сайта, указанные веб-части уже подключены и готовы к использованию. Какие свойства мне нужно указать для этой конкретной веб-части в onet.xml.
3 ответа
Я также врезался в стену этого в прошлом году! Похоже, что в веб-частях больше нельзя указывать соединения в новом формате.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");
}
}
}
Я бы сконфигурировал WebParts в SiteProvisioning-Feature, реализовав обработчик событий OnActivation. Таким образом, код будет выполняться при создании веб-сайта, и вы сможете обрабатывать ошибки так, как вам нравится (т.е. если веб-части недоступны при создании веб-сайта - по какой-либо причине)
Надеюсь, это поможет!
Вам нужно будет использовать тег