我挑战这一要求:

客户端只想根据用户配置文件的值仅显示列表视图Web部件中的列表项,并保留列表视图Web部件的功能,如OOB排序和过滤。我做一些研究,这是我的发现:

  • 我尝试使用与列出的相同的方法这里。然而,这种方法有一个非常丑陋的缺点。它将基于最后一个用户用户配置文件属性重写每个页面上的视图,并在视图上离开查询 - 不可接受。 因此,我想为此Web部分生成像持续的视图,也可以在其上应用查询。我不想编辑列表上的原始视图。

    任何想法请?

有帮助吗?

解决方案

所以,我用我的同事帮助解决了它,在创建子控件上我遵循。从视图中拍摄架构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);
.

其他提示

您可以动态创建视图。 我不知道“客户想要只根据用户配置文件的值显示列表视图Web部件中的列表项”。 但是如果发现,可以检查名为“clientView”的假设“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;
    }
.

我不确定这是否满足您的要求,但您无法使用当前用户过滤器Web部件开箱即用。它公开了当前用户的用户配置文件数据,然后添加到列表的连接,它将过滤。

许可以下: CC-BY-SA归因
scroll top