Динамические соединения SharePoint 2007 WebPart - PullRequest
1 голос
/ 21 июня 2010

Я создаю прототип лучшего способа динамического подключения веб-частей во время выполнения. По сути, приложение позволит нескольким разнородным группам приложений создавать веб-части, которые будут использоваться в интерфейсе 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);
            }
        }
    }
}

1 Ответ

1 голос
/ 22 июня 2010

Я настоятельно рекомендую вам пересмотреть и затем отбросить эту идею.

Я знаю, что может быть трудно научить всех пользователей подключать веб-части, и вы можете получить свою функциональность.работать в ограниченных сценариях.

Но в более сложных сценариях вы просто напрашиваетесь на неприятности и ограничиваете возможности привилегированных пользователей.

  • Если вы реализуете (илинесколько) веб-часть, которая может потреблять и предоставлять один и тот же интерфейс.Затем поместите два из них на страницу => Бесконечный цикл
  • Если ваш пользователь размещает двух провайдеров и двух потребителей на одной странице, у вас нет возможности соединить их так, как этого хочет пользователь.
  • ...

Моя рекомендация заключается в том, чтобы вы разрабатывали свои веб-части, чтобы они могли работать как с подключениями, так и без них (возможно, скрывая часть пользовательского интерфейса, если они подключены), и учить своих пользователей использовать подключения

Или вы можете пойти наполовину, и, когда вы показываете свою веб-часть в режиме конструктора, перечислите веб-части, к которым она может быть подключена, в виде ссылок, по которым пользователь может щелкнуть для установления соединения.

...