문제

나는이 요구 사항에 도전하고있다 :

클라이언트는 사용자 프로필의 값을 기반으로 목록보기 웹 파트 목록에서 목록 항목 만 표시하고 OOB 정렬 및 필터링과 같은 목록보기 웹 파트의 기능을 보존하려고합니다.나는 약간의 연구를하고 여기서 내 발견 :

  • Listed 여기 그러나이 접근법은 매우 추한 단점이 있습니다.각 페이지의 뷰를 다시 작성하고 마지막 사용자 User Profile 속성을 기반으로 뷰에 쿼리를 남겨 둡니다.

    이 웹 파트에 대해 즉시 플라이 뷰처럼 생성하고 쿼리를 적용하고 싶습니다.목록에서 원래보기를 편집하고 싶지 않습니다.

    어떤 아이디어를 제시 하시겠습니까?

도움이 되었습니까?

해결책

그래서, 나는 다음과 같은 어린이 컨트롤을 만드는 것에 동료 도움말로 그것을 해결했습니다.뷰에서 스키마 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