Pergunta

Eu estou a desafiar este requisito:

Cliente quer mostrar apenas a lista de itens na peça web vista de lista com base no valor a partir do perfil do usuário e também preservar a funcionalidade da peça web vista de lista, como OOB classificação e filtragem.Eu faço uma pesquisa e aqui está a minha conclusão é a seguinte:

  • eu tento usar a mesma abordagem, conforme listado aqui.No entanto, esta abordagem tem uma muito feio desvantagem.Ele regrava o modo de exibição em cada atualização da página e deixa a consulta no modo de exibição com base no último usuário propriedade de perfil de usuário - não aceitável.

Portanto, eu gostaria de gerar como on-the-fly vista para esta web part e também aplicar-se a consulta sobre ele.Eu não gostaria de editar o modo de exibição original na lista.

Alguma idéia por favor?

Foi útil?

Solução

então, eu resolvido com a minha colega de ajuda, em criar controles de filho eu faço o seguinte.Tomar esquema xml a partir do vista, substituir a consulta e passar para o modo de exibição de lista.Nenhum novo modo de exibição é criado e tudo funciona.

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

Outras dicas

Você pode criar visualizar dinamicamente.Eu não sei sobre "o Cliente quer mostrar apenas a lista de itens na peça web vista de lista com base no valor de perfil de usuário".Mas você pode verificar suponha modo de exibição chamado "ClientView" na lista se encontrado eliminar e criar novo modo de exibição com o mesmo nome do usuário corrente.

exemplo:

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

Não tenho certeza se isso atende às suas necessidades, mas não pôde fazer isso fora da caixa com a trilha de filtro de usuário atual.Ele expõe os dados do perfil do usuário para o usuário atual e adicione uma conexão à sua lista e ela será filtrada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top