Question

Je suis stimulant cette exigence:

Le client souhaite afficher uniquement les éléments de liste dans la liste des éléments de la liste en fonction de la valeur du profil utilisateur et conservez également la fonctionnalité de la liste de la liste des éléments de la liste tels que le tri et le filtrage de la liste.Je fais des recherches et voici ma conclusion:

  • J'essaie d'utiliser la même approche que celle indiquée ici .Cependant, cette approche a un inconvénient très laid.Il réécrit la vue sur chaque page actualisée et laisse la requête sur la vue en fonction de la propriété Profil de dernière utilisateur - non acceptable.

    Par conséquent, je voudrais générer comme une vue sur la volée pour cette partie Web et appliquer également la requête sur elle.Je ne voudrais pas modifier la vue originale sur la liste.

    Des idées s'il vous plaît?

Était-ce utile?

La solution

Donc, je l'ai résolu avec mon aide de collègue, sur la création de contrôles d'enfants que je suivez.Prenez le schéma XML de la vue, écrasez-vous la requête et transmettez-la à la liste de la liste.Aucune nouvelle vue n'est créée et tout fonctionne.

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);

Autres conseils

Vous pouvez créer une vue de manière dynamique. Je ne sais pas "Le client souhaite montrer uniquement des éléments de liste dans la liste des éléments de liste en fonction de la valeur du profil utilisateur". Mais vous pouvez vérifier supposé que Suppoose ait nommé «clientView» dans la liste si vous l'avez trouvé la supprimer et créer une nouvelle vue avec le même nom pour l'utilisateur actuel.

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;
    }

Je ne sais pas si cela répond à vos exigences, mais que vous ne pouvez pas le faire hors de la boîte avec la partie Web du filtre utilisateur actuel.Il expose les données de profil utilisateur pour l'utilisateur actuel, puis ajoutez une connexion à votre liste et celle-ci filtrera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top