• SharePoint2013 Set a custom application page as site welcome page


    本文主要介绍如何添加一个custom application page as site welcome page

    1、首先创建一个sharepoint 2013 empty solution, add a custom application page(farm only)named MyHomePage.

    2、自定义这个MyHomePage,显示所需信息,包括后台代码的编辑。

    3、更改MyHomePage.aspx页面首页<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>为具体的assmebly info,例:

    <%@ Assembly Name="MyHomePage, Version=1.0.0.0, Culture=neutral, PublicKeyToken=77a2aedaefb0d45b" %>

    4、右键solution,添加一个module,named:HomePage, 替换module 下sample.txt为MyHomePage.aspx,同时修改里面的<%@ Page %>,

    <%@ Page Language="C#" AutoEventWireup="true" Inherits="MyHomePage.Layouts.MyHomePage.MyHomePage" MasterPageFile="../_catalogs/masterpage/seattle.master" %>

    指定具体的master file,不能DynamicMasterPageFile="~masterurl/default.master" ,同时去掉CodeBehind 标签,原因是copy这个页面没有后台。

    NOTE:这里我们替换default.aspx中的DynamicMasterPageFile="~masterurl/default.mater"为MasterPageFile="../_catalogs/masterpage/seattle.master",其实这种方式不太好,原因在与sharepoint 2013本来支持动态更改         master文件,但是这里我们确把materpage固定了,所以客户是无法改变的。

    SOLUTION:不指定DynamicMasterPageFileMasterPageFile,后台将default.aspx页继承的LayoutsPageBase更改为PublishingLayoutPage

    HTML:

    <%@ Page Language="C#" Inherits="EArchive.EArchiveHome" %>

    C#:

     public partial class EArchiveHome : PublishingLayoutPage
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    }

    module code:

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Module Name="HomePage" Url="Pages" >
        <File Path="HomePageMyHome.aspx" Type="GhostableInLibrary" Url="MyHome.aspx" IgnoreIfAlreadyExists="FALSE" ReplaceContent="TRUE">
          <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/BlankWebPartPage.aspx, Blank Web Part page" />
        </File>
      </Module>
    </Elements>

    说明:Module name:HomePage,Url为Pages,Pages 是site 开启publishing feature之后sharepoint自动添加的一个page library,主要用于manage home or error SharePoint default pages.

           重点需要说明的是<Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/BlankWebPartPage.aspx, Blank Web Part page" />这个property的作用是为这个MyHome.aspx页添加了一个PageLayout,

         方便以后对这个homepage的添加与修改。

    5、添加module的时候会默认在solution中add a feature,右键feature,添加feature EventReceiver,设置feature scope为site, 编辑FeatureActivated和FeatureDeactiving

    FeatureActivated code:

     public override void FeatureActivated(SPFeatureReceiverProperties properties)
            {
                SPSecurity.RunWithElevatedPrivileges(() =>
                {
                    SPSite site = properties.Feature.Parent as SPSite;
                    using (site)
                    {
                        SPWeb web = site.RootWeb;
                        web.AllowUnsafeUpdates = true;
                        if (PublishingWeb.IsPublishingWeb(web))
                        {
                            PublishingWeb pWeb = PublishingWeb.GetPublishingWeb(web);
                            SPFile file = web.GetFile(web.ServerRelativeUrl + "/Pages/MyHome.aspx");
                            pWeb.DefaultPage = file;
                            pWeb.Update();
                        }
                        else
                        {
                            web.RootFolder.WelcomePage = "Pages/MyHome.aspx";
                            web.RootFolder.Update();
                            web.Update();
                        }
                        web.AllowUnsafeUpdates = false;
                    }
                });
            }

    注意:set welcome page的时候,需要check 当前的site是否开启了publishing feature,具体情况如上面代码所示。

    FeatureDeactiving code:

     public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
            {
                SPSecurity.RunWithElevatedPrivileges(() =>
                {
                    SPSite site = properties.Feature.Parent as SPSite;
                    using (site)
                    {
                        SPWeb web = site.RootWeb;
                        web.AllowUnsafeUpdates = true;
                        if (PublishingWeb.IsPublishingWeb(web))
                        {
                            PublishingWeb pWeb = PublishingWeb.GetPublishingWeb(web);
                            SPFile file = web.GetFile(web.ServerRelativeUrl + "/Pages/Home.aspx");
                            pWeb.DefaultPage = file;
                            pWeb.Update();
                        }
                        else
                        {
                            web.RootFolder.WelcomePage = "Pages/Home.aspx";
                            web.RootFolder.Update();
                            web.Update();
                        }
                        web.AllowUnsafeUpdates = false;
                    }
                });
            }

    注意:deactive feature需要将site homepage设置成default page。

    6、OK,一个完整set SharePoint homePage 的应用completly。

    补充:如果我们create a custom application page,这个页默认继承LayoutsPageBase,这个class我们通过反射会发现里面有check permission的逻辑验证,所以说只有site 的 viewpage或者read权限才可以访问这个custom page。

             但是有些客户就是不想给我们任何权限,然后呢,还想能访问这个custom application page,怎么办呢?经过楼主不断的研究,发现了其中的奥妙,就在于页面后台代码继承的这个class:LayoutsPageBase,将这个class更改为Page,            那么任何权限的user就都可以访问这个custom application page。

  • 相关阅读:
    toad 快捷键大全
    validateRequest 相关的作用
    为何有着良好设计的系统代码反而不容易看懂?
    致命错误: zlib.h:没有那个文件或目录
    全局变量相互依赖和初始化顺序的解决办法
    解决“possibly undefined macro: AC_PROG_LIBTOOL”
    Rsync完全配置
    undefined reference to `clock_gettime'
    解决“configure: line 2747: g: command not found”
    openssl编程轻松入门(含完整示例)
  • 原文地址:https://www.cnblogs.com/qindy/p/6231869.html
Copyright © 2020-2023  润新知