博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MOSS点滴(2):自定义Application Page
阅读量:6717 次
发布时间:2019-06-25

本文共 5709 字,大约阅读时间需要 19 分钟。

在MOSS中后台管理的页面都是Application Page,比如网站设置的页面(settings.aspx)就是典型的Application Page,它不能被Sharepoint Desiger定制。如果我们要修改只能手动的使用其他工具来修改,我们也可以添加Application Page,必须放在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS目录下,它对应的虚拟路径为_layouts。所有的Application Page都使用application.master这个母版页,我们自定义的Application Page也是一样,可以使用内嵌代码也可以使用后置代码。自定义的application page继承自LayoutsPageBase类,下面我们就来做两个自定义的Application Page,下面是项目的结构:

Feature.xml中代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<Feature Id="86689158-7048-4421-AD21-E0DEF0D67C81" 
   Title="自定义ApplicationPage"
   Description="使用SPTreeViw演示自定义ApplicationPage"
   Version="1.0.0.0"
   Scope="Web"
   Hidden="FALSE"         
   ImageUrl="TPG\PithHelmet.gif"         
   xmlns="http://schemas.microsoft.com/sharepoint/">
<ElementManifests>
<ElementManifest Location="elements.xml" />
</ElementManifests>
</Feature>
ApplicationPage1.aspx和ApplicationPage2.aspx就是我们自定义的Application Page,ApplicationPage1.aspx演示的是在一个列表库的列表项的编辑菜单里出现一个链接,统计该列表的信息,如下图:

要添加此菜单须在Elements.xml中填加如下代码:

<!--
 出现在控件的编辑项中
-->
<
CustomAction 
Id
="CustomApplicationPage1"
RegistrationType
="List"
RegistrationId
="101"
ImageUrl
="/_layouts/images/GORTL.GIF"
Location
="EditControlBlock"
Sequence
="240"
Title
="此文档库信息"
 
>
<
UrlAction 
Url
="~site/_layouts/CustomApplicationPages/ApplicationPage1.aspx?ItemId={ItemId}&amp;ListId={ListId}"
/>
</
CustomAction
>

RegistrationType="List":代表注册的类型是列表.
Location="EditControlBlock":代表菜单将出现在控件编辑项当中.
UrlAction 是它的链接,URL中的ItemId 和ListId是通过 QueryString得到的。

ApplicationPage1.cs中代码如下:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace CustomApplicationPages 
{
  
public 
class ApplicationPage1 : LayoutsPageBase 
 {
    
protected Label lblSiteTitle;
    
protected Label lblSiteID;
    
protected Label lblSiteUrl;
    
protected Label lblListID;
    
protected Label lblListTile;
    
protected Label lblRootFolderUrl;
    
protected Label lblDocumentID;
    
protected Label lblDocumentName;
    
protected Label lblDocumentUrl;
    
protected Label lblDocumentTemplateUrl;
    
protected Label lblFileAuthor;
    
protected Label lblFileSize;
    
protected Label lblFileLastModified;
    
protected Label lblFileCheckOutStatus;
    
protected 
override 
void OnLoad(EventArgs e) 
   {
      SPSite siteCollection = 
this.Site;
      SPWeb site = 
this.Web;
      lblSiteTitle.Text = site.Title;
      lblSiteUrl.Text = site.Url.ToLower();      
      
string ListId = Request.QueryString[
"
ListId
"];
      lblListID.Text = ListId;
      SPList list = site.Lists[
new Guid(ListId)];
      lblListTile.Text = list.Title;
      lblRootFolderUrl.Text = list.RootFolder.Url;      
      
string ItemId = Request.QueryString[
"
ItemId
"];
      lblDocumentID.Text = ItemId;
      SPListItem item = list.Items.GetItemById(Convert.ToInt32(ItemId));
      lblDocumentName.Text = item.Name;
      lblDocumentUrl.Text = item.Url;
      
if (list 
is SPDocumentLibrary)
    {
        SPDocumentLibrary documentLibrary = (SPDocumentLibrary)list;
        lblDocumentTemplateUrl.Text = documentLibrary.DocumentTemplateUrl;
        SPFile file = site.GetFile(item.Url);
        lblFileAuthor.Text = file.Author.Name;
        lblFileSize.Text = file.TotalLength.ToString(
"
0,###
") + 
"
 bits
";
        lblFileLastModified.Text = 
"
By 
" + file.ModifiedBy.Name +
                                   
"
 on 
" + file.TimeLastModified.ToLocalTime().ToString();
        lblFileCheckOutStatus.Text = file.CheckOutStatus.ToString();
      }
    }
    
  }
}

结果如下图:

ApplicationPage2.aspx中我们使用控件SPTreeView来显示该站点的文件夹结构,我们将菜单添加到“网站操作“中,并且设置只有管理员权限才可以看到,如下图:

Elements.xml中填加如下代码:

<!--
 有管理员权限才可以察看 
-->
<
CustomAction 
Id
="CustomApplicationPage2"
GroupId
="SiteActions"
Location
="Microsoft.SharePoint.StandardMenu"
Sequence
="2006"
Title
="获取站点信息"
Description
="使用SPTreeView获取站点信息"
RequireSiteAdministrator
="True"
>
<
UrlAction 
Url
="~site/_layouts/CustomApplicationPages/ApplicationPage2.aspx"
/>
</
CustomAction
>

RequireSiteAdministrator="True":改属性说明该项操作只有拥有管理员权限的用户才可以操作
ApplicationPage2.cs中代码如下:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace CustomApplicationPages
{
  
public 
class ApplicationPage2 : LayoutsPageBase 
  {    
    
protected SPTreeView treeSitesFiles;
    
const 
string siteImg = 
@"
\_layouts\images\FPWEB16.GIF
";
    
const 
string foloerImg = 
@"
\_layouts\images\FOLDER16.GIF
";
    
const 
string ghostedFileImg = 
@"
\_layouts\images\NEWDOC.GIF
";
    
const 
string unGhostedFileImg = 
@"
\_layouts\images\RAT16.GIF
";
    
protected 
override 
void OnLoad(EventArgs e)
    {
      SPWeb site = SPContext.Current.Web;
      SPFolder rootFolder = site.RootFolder;
      TreeNode rootNode = 
new TreeNode(site.Url, site.Url, siteImg);
      LoadFolderNodes(rootFolder, rootNode);
      treeSitesFiles.Nodes.Add(rootNode);
      treeSitesFiles.ExpandDepth = 
1;
    }
    
protected 
void LoadFolderNodes(SPFolder folder, TreeNode folderNode)
    {
      
foreach (SPFolder childFolder 
in folder.SubFolders) 
      {
        TreeNode childFolderNode = 
new TreeNode(childFolder.Name, childFolder.Name, foloerImg);
        childFolderNode.NavigateUrl = Site.MakeFullUrl(childFolder.Url);
        LoadFolderNodes(childFolder, childFolderNode);        
        folderNode.ChildNodes.Add(childFolderNode);
      }
      
foreach (SPFile file 
in folder.Files) 
      {
        TreeNode fileNode;
        
if (file.CustomizedPageStatus == SPCustomizedPageStatus.Uncustomized) 
        {
            fileNode = 
new TreeNode(file.Name, file.Name, ghostedFileImg);          
        }
        
else 
        {
            fileNode = 
new TreeNode(file.Name, file.Name, unGhostedFileImg);
        }
        fileNode.NavigateUrl = Site.MakeFullUrl(file.Url);
        folderNode.ChildNodes.Add(fileNode);
      }
    } 
  }
}

效果如下图:

如何调试:
1.修改当前web应用程序的配置文件如下:
 
<
configuration
>
  
<
SharePoint
>
    
<
SafeMode 
CallStack
="true"
 
/>
   
</
SharePoint
>
  
<
system.web
>
    
<
customErrors 
mode
="Off"
 
/>
    
<
compilation 
debug
="true"
 
/>
  
</
system.web
>
</
configuration
>

2.然后附加w3wp进程,设置断点即可调试了。

本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/04/19/applicationpage.html,如需转载请自行联系原作者

你可能感兴趣的文章
成为阿里云大使的笔记
查看>>
《深入解析IPv6(第3版)》——2.10 参考文献
查看>>
《Adobe Illustrator CC经典教程》—第0课0.16节使用文字
查看>>
企业安全:从触觉时代到视觉时代
查看>>
Oracle Dataguard在阿里云ecs上的测试
查看>>
《Python数据科学实践指南》——0.3 为什么是Python
查看>>
《混合云计算》——2.4 检查云集成的需求
查看>>
《Axure RP8产品原型设计快速上手指南》一1.7 大纲面板
查看>>
《机器学习与R语言(原书第2版)》一第3章 懒惰学习——使用近邻分类
查看>>
《Python游戏编程快速上手》——2.4 本章小结
查看>>
《配置管理最佳实践》——2.13 结论
查看>>
《Python金融大数据分析》一导读
查看>>
数据挖掘与数据化运营实战. 3.3 运营群体的活跃度定义
查看>>
Storm-源码分析- hook (backtype.storm.hooks)
查看>>
BTrace使用简介
查看>>
ROS机器人程序设计(原书第2版)2.4.3 创建ROS功能包和综合功能包
查看>>
Akka笔记之消息传递
查看>>
《企业大数据系统构建实战:技术、架构、实施与应用》一1.3 本章小结
查看>>
为什么不能用memcached存储Session?
查看>>
《C++编程风格(修订版)》——2.2 明确定义的状态
查看>>