MOSS點滴(2):自定義Application Page

在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,下面是項目的結構:

1

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演示的是在一個列表庫的列表項的編輯菜單里出現一個鏈接,統計該列表的信息,如下圖:

2

要添加此菜單須在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();
??????}
????}
????
??}
}


結果如下圖:

3

ApplicationPage2.aspx中我們使用控件SPTreeView來顯示該站點的文件夾結構,我們將菜單添加到“網站操作“中,并且設置只有管理員權限才可以看到,如下圖:

4

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


效果如下圖:

5

如何調試:
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,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457292.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wpf使用webbrowser時提示當前頁面腳本發生錯誤_win7系統internet腳本錯誤的應對辦法...

最近有win7系統用戶反饋&#xff0c;上網時遇到ie瀏覽器總會提示internet腳本錯誤的問題&#xff0c;不知如何解決&#xff0c;為此非常苦惱&#xff0c;那么win7系統提示internet腳本錯誤怎么辦呢?就此問題&#xff0c;下面小編教你win7系統internet腳本錯誤的應對辦法。有不…

JDK的目錄結構及結構圖

-bin目錄: JDK開發工具的可執行文件 -lib目錄: 開發工具使用的歸檔包文件 -jre: Java 運行時環境的根目錄&#xff0c;包含Java虛擬機&#xff0c;運行時的類包和Java應用啟動器&#xff0c; 但不包含開發環境中的開發工具 -demo: 含有源代碼的程序示例 -include: 包含…

java9-1.類,抽象類,接口的綜合小練習

1 /*2 教練和運動員案例(學生分析然后講解)3 乒乓球運動員和籃球運動員。4 乒乓球教練和籃球教練。5 為了出國交流&#xff0c;跟乒乓球相關的人員都需要學習英語。6 請用所學知識&#xff1a;7 分析&#xff0c;這個案例中有哪些抽象類&#xff0c;哪些接…

java發送c語言結構體_C語言中結構體直接賦值?

在C語言中結構體變量之間可以進行賦值操作嗎&#xff1f;簡單結構體的賦值先說結論&#xff1a;一般來說&#xff0c;C語言中的結構體變量可以用另一個變量對其進行賦值或初始化。簡單結構體(不包含指針成員)直接賦值沒有問題。我們先下面一段代碼&#xff1a;#include #includ…

Cacti 使用安裝詳解-企業級實例

Cacti是一套基于PHP,MySQL,SNMP及RRDTool開發的網絡流量監測圖形分析工具。Cacti是通過 snmpget來獲取數據&#xff0c;使用 RRDtool繪畫圖形&#xff0c;它提供了非常強大的數據和用戶管理功能&#xff0c;可以指定每一個用戶能查看樹狀結構、host以及任何一張圖&#xff0c;還…

MySQL 插入數據時,中文亂碼???問題的解決

在終端&#xff0c;mysql -u root -p 登錄&#xff1b; show variables like character%; 來查看當前數據庫的相關編碼集。 client為客戶端使用的字符集。connection為連接數據庫的字符集設置類型&#xff0c;如果程序沒有指明連接數據庫使用的字符集類型則按照服務器端默認的字…

mysql時間間隔interval_MySQL DATEDIFF函數獲取兩個日期的時間間隔的方法

描述返回兩個日期之間的時間間隔。語法DateDiff(interval, date1, date2 [ ,firstdayofweek[ , firstweekofyear]] )DateDiff 函數的語法有以下參數&#xff1a;參數描述interval必選。字符串表達式&#xff0c;表示用于計算 date1 和 date2 之間的時間間隔。有關數值&#xff…

linux教程:配置Tomcat開機啟動

我們在linux下安裝好tomcat之后&#xff1b;經常是需要配置到開機啟動的&#xff1b; 這樣的話就不需要我們每次重啟linux服務器之后自己在登陸運行startup.sh文件啟動tomcat了 本次的演示環境是在centos7中完成的&#xff1b;也在centos6.5中測試過&#xff1b;理論上所有版本…

操作系統內存分配算法_操作系統基礎45-伙伴系統和slab內存分配

當在用戶模式下運行進程請求額外內存時&#xff0c;從內核維護的空閑頁幀列表上分配頁面。這個列表通常使用頁面置換算法來填充&#xff0c;如前所述&#xff0c;它很可能包含散布在物理內存中的空閑頁面。也要記住&#xff0c;如果用戶進程請求單個字節內存&#xff0c;那么就…

Sublime Text 3新建工程

1. 創建工程 Project > Add Folder to Project 這時在sidebar中將出現剛剛添加的文件目錄&#xff0c;如果還需要添加其他目錄&#xff0c;則重復這一操作即可。 2. 保存工程 Project > Save Project As 點擊保存后Sublime Text將自動生成兩個文件&#xff1a; 如圖&…

鐘國晨 160809323

助教老師好&#xff0c;我是計科三班鐘國晨&#xff0c;我對我們專業并不是很了解&#xff0c;至少從目前來看是這樣&#xff0c;不過雖然感覺我們專業內容比較復雜&#xff0c;我還是對我們所學的知識挺感興趣的&#xff0c;我性格比較開朗&#xff0c;希望以后能和老師您多多…

445端口 mysql_關于如何關閉window端口445的詳細介紹

首先&#xff0c;來查看下系統當前都開放了什么端口&#xff0c;怎樣查看呢&#xff1f;調出cmd命令行程序&#xff0c;輸入命令”netstat -na“&#xff0c;可以看到。接著&#xff0c;可以發現當前系統開放了135、445以及5357端口&#xff0c;而且從狀態看都處于監聽狀態”Li…

maven GroupId 和ArtifactId的含義

GroupID是項目組織唯一的標識符&#xff0c;實際對應Java的包的結構&#xff0c;是main目錄里java的目錄結構。 ArtifactID就是項目的唯一的標識符&#xff0c;實際對應項目的名稱&#xff0c;就是項目根目錄的名稱。

輸入圓的半徑,計算并輸出圓的周長和面積

轉載于:https://www.cnblogs.com/nicebaby/p/5866320.html

python解析xml數據_數據開發_Python解析XML文件

解析XML文件XML是可擴展標記語言&#xff0c;主要用于傳輸和存儲數據解析方式使用lxml解析主要注意&#xff1a; text tag attrib 使用方式 有 get() 以及迭代的情況數據示例a31代碼示例#!/usr/bin/env python# -*-coding:utf-8-*-# file parse_xml_exp.py# date 2020-10-**fro…

Mac下運行git報錯xcrun: error: invalid active developer path ..

錯誤&#xff1a;xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 如圖&#xff1a; 解決方法&#xff1a; 終端輸入&#xff1a; xcode-select --install 之后點擊…

CodeForces 15B Laser

題目鏈接&#xff1a;http://codeforces.com/problemset/problem/15/B題意&#xff1a;給出n*m的一塊巧克力&#xff0c;再給出兩個點&#xff0c;兩點只能同時移動&#xff0c;兩點所占位置巧克力會融化&#xff0c;問所有能走位置走遍之后還剩下幾塊巧克力。思路&#xff1a;…

datetime-時間日期模塊

import datetime例1&#xff1a;把nginx的日志格式轉化為易懂的格式time 10/Aug/2016:03:20:09 0800a datetime.datetime.strptime(time,%d/%b/%Y:%H:%M:%S %z)a.strftime(%Y%m%d%H%m)轉載于:https://blog.51cto.com/liuzhengwei521/1892274

tensorflow獨熱編碼方法_吳恩達課后作業學習2-week3-tensorflow learning-1-基本概念

參考&#xff1a;https://blog.csdn.net/u013733326/article/details/79971488希望大家直接到上面的網址去查看代碼&#xff0c;下面是本人的筆記到目前為止&#xff0c;我們一直在使用numpy來自己編寫神經網絡。現在我們將一步步的使用深度學習的框架來很容易的構建屬于自己的…

python運維開發之第八天(socket)

什么是 Socket? Socket又稱"套接字"&#xff0c;應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求&#xff0c;使主機間或者一臺計算機上的進程間可以通訊。 socket()函數 Python 中&#xff0c;我們用 socket&#xff08;&#xff09;函數來創建…