Как программно добавить списки целей в новую веб-часть в Sharepoint (или как обрабатывать недокументированные пространства имен) - PullRequest
2 голосов
/ 13 января 2011

Из кода я автоматически создал множество похожих сайтов (SPWeb) в своем семействе сайтов из шаблона сайта (в Sharepoint Foundation). На каждом сайте есть домашняя страница, на которой я добавил веб-часть «Что нового» (находится в разделе «Социальная совместная работа»).

Даже если к веб-части добавлено несколько «списков целей» (я бы назвал это «списками источников») на сайте шаблона, это соединение теряется на сайтах, созданных из шаблона. Поэтому мне нужно программно найти все эти веб-части и добавить в них целевые списки. Зацикливание веб-частей не является проблемой - я делал это раньше - но я не могу найти в сети ни слова о том, как изменить эту конкретную веб-часть. Все, что у меня есть, это краткий смысл.

Я узнал, что это повторяется в

Microsoft.SharePoint.Applications.GroupBoard.WebPartPages 

пространство имен, но в списках, представленных в MSDN, это одно из очень немногих пространств имен, которое не имеет ссылки на справочную документацию.

У кого-нибудь есть опыт модификации этой веб-части из кода? Если нет, как бы вы узнали об этом? Я не могу найти способ для этого ..

Ответы [ 2 ]

3 голосов
/ 13 января 2011

Вот как я это сделал. Это сработало очень хорошо. У меня была функция, которая создала несколько экземпляров списка и подготовила веб-часть Что нового. В Feature Receiver я перебрал все экземпляры списка, проиндексировал поле Modified, а затем добавил список в веб-часть:

private void ConfigureLists(SPWeb web, SPFeatureReceiverProperties properties)
{
    List<Guid> ids = new List<Guid>();
    SPElementDefinitionCollection elements = 
        properties.Feature.Definition.GetElementDefinitions(new CultureInfo((int)web.Language, false));
    foreach (SPElementDefinition element in elements)
    {
        if ("ListInstance" == element.ElementType)
        {
            XmlNode node = element.XmlDefinition;
            SPList list = web.Lists[node.Attributes["Title"].Value];
            SPField field = list.Fields[SPBuiltInFieldId.Modified];
            if (!field.Indexed)
            {
                field.Indexed = true;
                field.Update();
            }
            ids.Add(list.ID);
        }
    }

    string targetConfig = string.Empty;
    foreach (Guid id in ids)
    {
        targetConfig += string.Format("'{0}',''\n", id);
    }
    SPFile file = web.GetFile("Pages/default.aspx");
    file.CheckOut();
    using (SPLimitedWebPartManager manager = file.GetLimitedWebPartManager(PersonalizationScope.Shared))
    {
        WhatsNewWebPart webpart = null;
        foreach (System.Web.UI.WebControls.WebParts.WebPart eachWebPart in manager.WebParts)
        {
            webpart = eachWebPart as WhatsNewWebPart;
            if (null != webpart)
            {
                break;
            }
        }
        if (null != webpart)
        {
            webpart.TargetConfig = targetConfig;
            manager.SaveChanges(webpart);
        }
    }
    file.CheckIn("ConfigureWebParts");
    file.Publish("ConfigureWebParts");
    file.Approve("ConfigureWebParts");
}
1 голос
/ 13 января 2011

Если вы не уверены в свойстве, экспортируйте веб-часть из браузера, затем откройте файл .webpart / .dwp в текстовом редакторе.Где-то в xml будет ссылка на исходный список.

*. Обычно веб-части легче модифицировать, просто установите свойство.

*. Dwps сложнее, потому что иногда приходится получатьсвойство (например, ViewXML), затем загрузите его в XmlDocument, затем замените свойство и запишите значение строки документа xml обратно в ViewXML.

...