Domanda

Sto sfidando questo requisito:

Il client vuole mostrare solo gli elementi dell'elenco nella web part della vista elenco in base al valore dal profilo dell'utente e anche a preservare la funzionalità della web part della vista elenco come l'ordinamento dell'Oob e il filtro.Faccio qualche ricerca ed ecco la mia scoperta:

    .
  • Provo a usare lo stesso approccio come elencato qui .Tuttavia questo approccio ha uno sconveniente molto brutto.Riascrive la vista su ogni pagina Aggiorna e lascia la query sulla vista in base alla proprietà del profilo utente dell'ultimo utente - non accettabile.

    Pertanto vorrei generare come la vista sulla fly per questa parte web e applicare anche la query su di esso.Non vorrei modificare la vista originale sulla lista.

    Qualche idea per favore?

È stato utile?

Soluzione

Allora, l'ho risolto con il mio collega aiuto, per creare controlli figlio che seguo.Prendi lo schema XML dalla vista, sovrascrivere la query e passarla alla visualizzazione elenco.Nessuna nuova vista è stata creata e tutto funziona.

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

Altri suggerimenti

È possibile creare la visualizzazione dinamicamente. Non so di "Il client vuole mostrare solo elementi elenchi in elenco Visualizza web part basato sul valore dal profilo dell'utente". Ma è possibile verificare che supporti la visualizzazione denominata "clientView" nell'elenco se trovato cancellalo e crea una nuova vista con lo stesso nome per l'utente corrente.

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

Non sono sicuro se questo soddisfa le tue esigenze, ma non potresti farlo fuori dalla scatola con la parte web del filtro utente corrente.Esprime i dati del profilo utente per l'utente corrente, aggiungi una connessione all'elenco e filtrerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top