当前位置:  开发笔记 > Android > 正文

PortalSiteMapProvider

如何解决《PortalSiteMapProvider》经验,为你挑选了1个好方法。

每次我实例化PortalSiteMapProvider实例时,它总是默认为Root Web Site Collection.

我希望能够从应用程序页面的不同集合中获取站点地图.

因此,上下文默认为根网站,因为此应用程序页面位于_layouts下,并且不在任何网站集下托管.

如何从应用程序页面获取除根网站之外的网站集的实例?

谢谢.



1> Rex M..:

您无法通过PortalSiteMapProvider读取其他网站集的层次结构.例如,如果您在站点集合A中,PSMP将仅遍历A的树,而不是B.您必须在B中遍历B.

我实现的解决方法是编写一个在网站集中运行的简单Web服务,并将路径作为参数.它读取自己的PSMP并从层次结构中的该点写入XML树.从SC-A中运行的代码调用生活在SC-B中的Web服务非常快,特别是因为PSMP可以如此快速地破坏B的结构.

编辑:

以下是在WSS3/MOSS中创建Web服务的说明.

以下是一些完全无功能的代码,可帮助您朝着正确的方向前进:

//method exposed through the web service
public XmlDocument GetTree(string path)
{
    PortalSiteMapProvider psmp = PortalSiteMapProvider.GlobalNavSiteMapProvider;
    SiteMapNode node = psmp.FindSiteMapNode(path);
    return BuildXmlFromNode(node);
}

private XmlNode BuildXmlFromNode(SiteMapNode node)
{
    XmlDocument xml = new XmlDocument();
    reutrn BuildXmlFromNode(node, xml);
}

//recurses down the sitemapnode children
private XmlNode BuildXmlFromNode(SiteMapNode node, XmlNode xml)
{
    XmlElement element = doc.CreateElement("Node")
    element.SetAttribute("title", node.Title);
    element.SetAttribute("url", node.Url);

    xml.AppendChild(element);

    foreach(SiteMapNode childNode in node.ChildNodes)
    {
        BuildXmlFromNode(childNode, element);
    }

    return xml;
}

请注意,如果您没有设置递归数量的限制,并且您的站点地图层次结构非常深和/或宽,这可能会产生一个巨大的xml文档.谨慎使用!

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有