Вопрос

Я бросаю вызов этому требованию: Клиент

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

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

    Любые идеи, пожалуйста?

Это было полезно?

Решение

Итак, я решил его с помощью моей коллеги, на создании дочерних элементов управления, которые я выполняю.Возьмите схему XML с вида, перезаписать запрос и пропустите его в список представления.Новое представление не создано и все работает.

var obtainedList = elevatedWeb.GetListFromWebPartPageUrl(FullUrl);

if (obtainedList == null)
{
   throw new Exception(string.Format(ListFromUrlNotObtained,FullUrl));
}

FullUrl = HttpUtility.UrlDecode(FullUrl);

var listViewWebPart = new ListViewWebPart();
listViewWebPart.WebId = elevatedWeb.ID;
listViewWebPart.ListId = obtainedList.ID;//.ToString("B").ToUpper();

var obtainedListView =obtainedList.Views.OfType<SPView>().FirstOrDefault<SPView>(lv => FullUrl.EndsWith(lv.Url));

if (obtainedListView == null)
{
   throw new Exception(string.Format(ViewFromUrlNotObtained,FullUrl));
}

var html = obtainedListView.HtmlSchemaXml;

var xml = XElement.Parse(obtainedListView.HtmlSchemaXml);
xml.Attribute("Url").Remove();
xml.Element(XName.Get("Query")).SetValue(WildcardProcessor.ProcessQuery(FilterQuery));
var updatedXml = xml.ToString();

listViewWebPart.ListViewXml = updatedXml;

Controls.Add(listViewWebPart);
.

Другие советы

Вы можете создавать просмотр динамически. Я не знаю, что «Клиент хочет показать только элементы списка в списке Веб-роль в зависимости от стоимости от профиля пользователя». Но вы можете проверить, чтобы вы могли бы предположить, чтобы представить названный «ClientView» в списке, если найдено его, и создать новый вид с тем же именем для текущего пользователя.

e.g.

SPList taskList = web.Lists[tasklistName];
                    string query = string.Empty;
                    if (taskList != null && taskList.ItemCount > 0)
                    {

                      query = "<OrderBy><FieldRef Name=\"Requirement_x0020_Details\" Ascending='TRUE'/></OrderBy><Where><Eq><FieldRef Name=\"Item_x0020_Type\"/><Value Type='Text'>Current</Value></Eq></Where>";

                    }
                    else
                    {
                        query = "<OrderBy><FieldRef Name=\"Requirement_x0020_Details\" Ascending='TRUE'/></OrderBy><Where><Eq><FieldRef Name=\"Task_x0020_Type\"/><Value Type='Text'>Current</Value></Eq></Where>";
                    }


                    StringCollection relevantColumns = CreateViewColumns();
                    SPView taskView = taskList.Views.Add("ClientView", relevantColumns, query, rowCount, true, false);

private StringCollection CreateViewColumns()
    {
        StringCollection viewFieldsCollection = new StringCollection();
        string tasksColumns = "Requirement_x0020_Details;DocIcon;LinkTitle;AssignedTo;Status;Priority;DueDate;PercentComplete";
        string[] columns = tasksColumns.Split(';');
        foreach (string column in columns)
        {
            viewFieldsCollection.Add(column);
        }
        return viewFieldsCollection;
    }
.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top