ListView Web Partのダイナミック・ビューを作成します
-
10-12-2019 - |
質問
この要件に挑戦しています:
クライアントは、ユーザプロファイルからの値に基づいてリストビューWeb部品のリスト項目のみを表示し、OOBの並べ替えやフィルタリングのようなリストビューのWeb部分の機能を保持したいと考えています。私はいくつかの研究をし、ここで私の発見は:
- リストされたこちら。しかしながら、このアプローチは非常に醜い欠点を有する。それは各ページの更新のビューを書き換え、最後のユーザユーザプロファイルプロパティ - 許容不可に基づいてビューに照会を残す。
そのため、この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」という名前のビューをチェックし、現在のユーザーに同じ名前で新しいビューを作成してください。
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;
}
. これがあなたの要件を満たすかどうかわからないが、現在のユーザフィルタウェブ部品を使ってボックスからこれを行うことができなかった。現在のユーザーのユーザープロファイルデータを公開してから、リストに接続を追加してフィルタリングします。
所属していません sharepoint.stackexchange