Pregunta

Estoy tratando de consultar mi lista con PortalsItemApprovider.Aquí está mi código:

public List<string> GetChachedItems(string webUrl, SPQuery query)
    {
        SiteMapNodeCollection nodeCollection = new SiteMapNodeCollection();
        PortalSiteMapProvider portalProvider = PortalSiteMapProvider.CurrentNavSiteMapProviderNoEncode;
        PortalWebSiteMapNode webNode = portalProvider.FindSiteMapNode(webUrl) as PortalWebSiteMapNode;
        if (webNode != null)
        {
            nodeCollection = portalProvider.GetCachedListItemsByQuery(
                webNode, "test", query, SPContext.Current.Web);
        }
        List<string> itemCollection = new List<string>();
        foreach(SiteMapNode node in nodeCollection)
        {
            itemCollection.Add(node.Title);
        }
        return itemCollection;
    }

Soy capaz de obtener la columna de título de un elemento de una sola lista.Pero no sé cómo obtener otros campos en la lista.Digamos que tengo una columna llamada "Edad".¿Dónde está en un sitio Sitemapnode?

¿Alguna idea?

¿Fue útil?

Solución

I saw a Demo in CodePlex at : http://spquerydemo.codeplex.com . It presents an extensive sample code for many ways of querying SharePoint.

I've found the solution.

This Code Works like a BOOM. Instead of "SiteMapNode" object you need "PortalListItemSiteMapNode" for indexer to work.

public List<string> GetChachedItems(string webUrl, SPQuery query)
    {
        SiteMapNodeCollection nodeCollection = new SiteMapNodeCollection();
        PortalSiteMapProvider portalProvider = PortalSiteMapProvider.WebSiteMapProvider;
        PortalWebSiteMapNode webNode = ((PortalSiteMapNode)portalProvider.CurrentNode).WebNode;
        if (webNode != null)
        {
            nodeCollection = portalProvider.GetCachedListItemsByQuery(
                webNode, "test", query, SPContext.Current.Web);
        }
        List<string> itemCollection = new List<string>();

        var listItemNodes = portalProvider.GetCachedListItemsByQuery(
                    webNode,
                    "Test", query, SPContext.Current.Web);

        foreach (PortalListItemSiteMapNode node in nodeCollection)
        {
            itemCollection.Add(node.Title + " " + node["age"]);
        }
        return itemCollection;
    }

Otros consejos

You can use Item property of SiteMapNode to gets or sets a custom attribute from the Attributes collection or a resource string based on the specified key!

Licenciado bajo: CC-BY-SA con atribución
scroll top