Question

I'm trying to query my list using PortalSiteMapProvider. Here is my Code:

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

I am able to get Title Column of a single list item. But I don't know how to get other fields in the list. Let's say I have a column named "age". where is it in a SiteMapNode ?

Any Idea?

Was it helpful?

Solution

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

OTHER TIPS

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!

Licensed under: CC-BY-SA with attribution
Not affiliated with sharepoint.stackexchange
scroll top