Я создаю прототип лучшего способа динамического подключения веб-частей во время выполнения. По сути, приложение позволит нескольким разнородным группам приложений создавать веб-части, которые будут использоваться в интерфейсе SharePoint. Все веб-части должны будут автоматически определять потребителей и поставщиков для создания соединений во время выполнения.
Нам нужно, чтобы веб-части обнаруживали и автоматически подключались к другим совместимым веб-частям. Когда пользователь добавляет две совместимые части на страницу, эти части должны иметь возможность создавать соответствующие соединения. У нас есть четко определенный интерфейс для передачи данных между частями, поэтому единственная проблема заключается в том, как управлять соединениями. Чтобы было ясно, мы не хотим, чтобы пользователь беспокоился о том, чтобы создавать соединения самостоятельно.
Для наших целей «лучший способ» означает наиболее эффективный, элегантный и / или стандартный. Мы хотели бы как можно больше следовать установленным шаблонам проектирования sharepoint, но эффективность кода несколько важна.
Мне удалось подготовить концептуальное подтверждение, которое использует базовый класс веб-частей для этого во время события oninit каждой подклассовой веб-части. Событие oninit получает объект SPWebPartManager для текущей страницы и выполняет итерацию по каждой части, создавая подключения потребителей и поставщиков для каждой веб-части, наследуемой от базового класса:
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);
}
}
}
}