转:http://www.devexpertise.com/2009/02/18/integrating-a-custom-aspnet-application-into-sharepoint-part-1/

除了所有很酷的东西,有关SharePoint伟大的事情之一是:您可以自由地添加功能。更重要的是,SharePoint可以提供一个在此基础上建立自己的应用程序的平台。在这个系列中,我会告诉你如何建立一个自定义的ASP.NET应用程序,使它无缝集成到SharePoint。                  




首先要明白的是,我们将部署我们的自定义项目的位置。由于应用程序将运行在SharePoint网站中,该文件将被部署到layouts文件夹内〜12目录。并不需要创建一个新的IIS网站或虚拟目录,因为它使用SharePoint网站作为Hoster。                  




现在,对一定的文件目录应该放去哪里有不同的看法。我真的不觉得它重要,仅仅是个人喜好。一种选择是坚持与SharePoint使用的文件夹结构,只是放置一个自定义文件夹中包含您的自定义项目的每个目的地。通常,这涉及到你的文件放在以下目录:                


                 



                                                

Type                                                    

Destination                                                    

Reference Path
                     

                                                

.aspx                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\                                                   


~/_layouts/<ProjectName>/Page.aspx                      

                                                

.ascx                                                   

12\TEMPLATE\CONTROLTEMPLATES\<ProjectName>\                                                   


~/_controltemplates/<ProjectName>/control.ascx                      

                                                

web.config                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\                                                   


(none)                      

                                                

.css                                                   

12\TEMPLATE\1033\Styles\<ProjectName>\                                                   


/_layouts/1033/styles/<ProjectName>/style.css                      

                                                

.js                                                   

12\TEMPLATE\LAYOUTS\1033\<ProjectName>\                                                   


/_layouts/1033/<ProjectName>/script.js                      

                                                

.dll                                                   

Either web app’s BIN directory or GAC                                                   


(none)                      

                                                

Resource DLLs                                                   

GAC                                                   

(none)                      

                                                

Images                                                   

12\TEMPLATE\IMAGES\<ProjectName>\                                                   


/_layouts/images/<ProjectName>/image.gif                      

                                                

Custom Folders                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\                                                   


~/_layouts/<ProjectName>/MyFolder/…                  

                 

其他选项(和我个人的偏好),是把LAYOUTS目录中的自定义文件夹内的一切,只有把这些文件将在各自的地方需要的其他变动。例如,由于需要在web.config中引用到SafeControls条目的用户控件,它是有道理的,以保持在该文件夹中的用户控件。你也可以把他们的一切放到layouts文件夹内,但然后,你必须创建另一个的SafeControls条目。                


                 

                 



                                                

Type                                                    

Destination                                                    

Reference Path                       

                                                

.
aspx                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\                                                   


Page.aspx                      

                                                

.ascx                                                   

12\TEMPLATE\CONTROLTEMPLATES\<ProjectName>\                                                   


~/_controltemplates/<ProjectName>/control.ascx                      

                                                

web.config                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\                                                   


(none)                      

                                                

.css                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\Styles\                                                   


Styles/style.css                      

                                                

.js                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\Scripts\                                                   


Scripts/script.js                      

                                                

.dll                                                   

Either web app’s BIN directory or  GAC                                                   


(none)                      

                                                

Resource DLLs                                                   

GAC                                                   

(none)                      

                                                

Images                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\Images                                                   


Images/image.gif                      

                                                

Custom Folders                                                   

12\TEMPLATE\LAYOUTS\<ProjectName>\                                                   


MyFolder/…                  

                 

现在,解决了文件位置,让我们开始如何开发网页。在以后的文章中,我会讨论到如何利用内置的SharePoint的控制,权限和一些迷人的东西,在刚开,将集中显示在SharePoint页面。你用的方法可能和我有所不同,但对我来说,以下方法已被证明非常有效。首先,我在Visual Studio中创建一个新的web应用程序,并创建一个文件夹结构,模仿SharePoint的12目录:                


                


                

为了提升速度,应该是可以建立一个SharePoint的开发模板的。                

您大概注意到两个web.config文件,一个是默认的,一个是为了部署到SPS的,在SPS~12目录下的文件内容结构是非常简单的:为了演示其作用,增加了一格APPsetting变量customKey.                


< ?xml version="1.0"?>                

< configuration>                

  <system.web/>                

  <appSettings>                

    <addkey="customKey" value="Sample Value"/>                

  </appSettings>                

< /configuration>                

接下来的部分可能是这整个过程中最重要的部分 - 建立正确的ASPX标记。由于这个页面将被集成到SharePoint的母版页MasterPage,适用相同的主页/内容页的原则。母版页包含的内容占位符定义页面内容将去,和自己定义的内容会在这些领域中的显示出来。 SharePoint母版页的内容预留地方很多,其中大部分我们不需要在应用程序自定义。那些是重要的是ContentHolder位置:                                                       
PlaceHolderAdditionalPageHead : The content area where custom scripts and styles will     be referenced.                                       
PlaceHolderPageTitle :     The title of the page.                                       
PlaceHolderPageTitleInTitleArea : The text that shows up right above the main content     area.                                       
PlaceHolderMain :     The main content area.                                       
PlaceHolderLeftNavBar :     If you want to define your own QuickLaunch or left navigation, you could     place it here.                


这些概念作为一个ASP.NETWeb开发人员,对页面如何划分应该是非常了解的。OK.让我们来看点真实的:

<%@ Page Language="C#" AutoEventWireup="true"CodeBehind="Home.aspx.cs"         Inherits="DevExpertise.LayoutsApp.Home, DevExpertise.LayoutsApp,                   Version=1.0.0.0,Culture=neutral, PublicKeyToken=d39eedb6cff9b1c8" %><asp:Content contentplaceholderid="PlaceHolderAdditionalPageHead" runat="server">    <linkrel="Stylesheet"type="text/css"href="Styles/style.css" />    <scriptsrc="Scripts/script.js"type="text/javascript"/></asp:Content><asp:Content ContentPlaceHolderID="PlaceHolderPageTitle" runat="Server">    Page Title- Custom Application</asp:Content><asp:Content ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server">    Title Area- Custom Application</asp:Content> <asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">    <h1>This is a custom application!</h1>    <asp:TextBox id="txtValue" runat="server" />    <asp:Button id="btnSetValue" runat="server" Text="Click Me!" OnClick="btnSetValue_Click"/></asp:Content>

我们使用了4个区域,采用了自己定义的CSS/script,在Web开发中css&scriptis kingJ.在主区域,我们实现了与业务逻辑地交互:                


                 

由于此代码将SharePoint上下文下执行,受到Web部件和定制的Web服务相同的代码访问安全性限制。你基本上有3种选择:将程序集添加到Web应用程序的BIN目录并且在web.config中设置信任级别至少为WSS_Medium中;为您的应用程序创建一个自定义代码访问安全政策,最后一个方法就是添加到GAC目录。有大量的关于每种方法有优点和缺点的资料,您可以自己去搜索了解下。为简单起见,我加入到GAC。                  




下一步,我部署我的文件到SharePoint12目录。因为我在做开发/测试环境,我创建了一个的方便copy.bat脚本,使用XCOPY的文件复制到各自的目录。只要这个项目是准备部署,我会通过WSPBuilder运行我的解决方案,并会生成可部署的解决方案包(WSP)的。                


当程序文件部署完成后,通过简单的URL访问就可以测试了,URL的语法如下                   http://server/site/_layouts/<                     ProjectFolder
> /<PageName>.aspx
                

访问您的应用程序页时,URL是非常重要的,您的应用程序在URL中指定的SharePoint网站中运行。这是什么意思?好吧,如果你访问http://server/_layouts/MyProject/MyPage.aspx的网页,然后它运行在网站集的根网站中,访问SPContext.Current.Web将返回该网站。如果你访问您在http://                  
server/sites /it/blog/_layouts/MyProject/MyPage.aspx页,那么它运行在IT网站集合中的博客网站,SPContext.Current.Web将反映这一点。为什么这很重要吗?好吧,因为应用程序的页面在Farm的~12目录,他们是全局可访问的,并不仅限于一个单一网站集合或网站。你甚至可以通过http://CentralAdminUrl/_layouts/MyProject/MyPage.aspx到您的应用程序,并将于中央管理的上下文(central
Admin’s Context)下运行。现在你看到了URL的重要性?我会在以后的文章告诉你如何实施访问保障措施,以减轻某些问题,但现在您得知道,您目前的网页是大家可以任意访问的,而且可能是在不同的SiteContext中的。                


作为开发测试,我会使用以下的URl访问定义的Page作测试http://server/sites/devexpertise/_layouts/DevExpertise.LayoutsApp/Home.aspx                


                                   


Wow,出错了,检查之前的Content Page,没有声明Master Page的;除了在Decalration里面,也可以在后台Code完成。                


<%@ Page Language="C#" AutoEventWireup="true"CodeBehind="Home.aspx.cs"                


         Inherits="DevExpertise.LayoutsApp.Home, DevExpertise.LayoutsApp,                


                   Version=1.0.0.0,Culture=neutral, PublicKeyToken=d39eedb6cff9b1c8" %>                


为方便所有的后续Page,我们实现一个base page:

namespace DevExpertise.LayoutsApp{

   public partial class Home :System.Web.UI.Page  {

        protected voidPage_Load(object sender, EventArgs e) {

        }

        protected voidbtnSetValue_Click(object sender, EventArgs e) {

            txtValue.Text = WebConfigurationManager.AppSettings["customKey"].ToString();

        }

   }

}

namespace DevExpertise.LayoutsApp{                

   public class LayoutsAppPage: Microsoft.SharePoint.WebControls.                  
LayoutsPageBase {                

                 

        protectedoverride void OnPreInit(EventArgs e){                

            base.OnPreInit(e);                

                 

            try {                

                                  this.MasterPageFile = SPContext.Current.Web.MasterUrl;  //设置完成
                

            }                

            catch {}                

        }   }}                

你会发现,我继承从LayoutsPageBase类 - 这是在为我们提供了用于创建这些类型的网页的功能Microsoft.SharePoint.WebControls命名空间中定义一个公共基类。这是这第一篇文章的范围之外,但我会在一系列接触后。接下来,我继承我的定制LayoutsAppPage基类从我的每一个应用程序的页面:                


这时候,我们部署后再访问下URL,效果如下:                                   

                


非常漂亮,非常熟悉,呵呵?请继续关注本系列中的下一个Post,我们来看看如何确保我们的应用程序,并利用现有的SharePoint控件提供了丰富的和熟悉的用户界面。

Custom ASP.NET Application into SharePoint --整合ASP.NET应用程序到SharePoint的更多相关文章

  1. 【SharePoint学习笔记】第4章 SharePoint UI 定制

    第4章 SharePoint UI 定制   SharePoint 与 ASP.NET     好的​Asp.Net人员很快就能成为好的SharePoint开发人员     Web应用程序    Mi ...

  2. ASP.NET Application Life Cycle

    The table in this topic details the steps performed while an XAF ASP.NET application is running. Not ...

  3. Custom Roles Based Access Control (RBAC) in ASP.NET MVC Applications - Part 1 (Framework Introduction)

    https://www.codeproject.com/Articles/875547/Custom-Roles-Based-Access-Control-RBAC-in-ASP-NET Introd ...

  4. ASP.NET MVC Spring.NET 整合

    请注明转载地址:http://www.cnblogs.com/arhat 在整合这三个技术之前,首先得说明一下整合的步骤,俗话说汗要一口一口吃,事要一件一件做.同理这个三个技术也是.那么在整合之前,需 ...

  5. [转]ASP.net Application 生命周期事件

    生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global. ...

  6. ASP.NET Application and Page Life Cycle

    ASP.NET Application Life Cycle Overview for IIS 7.0 https://msdn.microsoft.com/en-us/library/bb47025 ...

  7. How to increase timeout for your ASP.NET Application ?

    How to increase timeout for your ASP.NET Application ? 原文链接:https://www.techcartnow.com/increase-tim ...

  8. Debug your ASP.NET Application while Hosted on IIS

    转摘:http://www.codeproject.com/Articles/37182/Debug-your-ASP-NET-Application-while-Hosted-on-IIS This ...

  9. ASP.NET MVC 随想录——开始使用ASP.NET Identity,初级篇

    在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identity,因为它已经对OWIN 有了良好的集成. 在这篇文章中,我主要关注ASP. ...

随机推荐

  1. 安装flash 插件scaleform出现错误:Scaleform Launch Panel.Launcher.handleDataLoaderIOError(): Loading XML Failedscaleform

    经排查发现是Scaleform Launcher.swf报的错 (C:\Users\Administrator\AppData\Local\Adobe\Flash CC\zh_CN\Configura ...

  2. JAVA学习-JAVA环境准备

    dir:列出当前目录下的文件以及文件夹md:  创建目录rd:  删除目录cd: 进入指定的目录,打开文件夹cd..:退回到上一级目录cd/或cd\:退回到根目录del:删除文件d: : 切换到D盘根 ...

  3. JS数值输入控制

    在html文本框录入数值时,可用如下方法进行控制判断. 整数:<input type="text" name="aaa" onkeypress=" ...

  4. PAT_1026 程序运行时间

    问题描述: 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock ti ...

  5. CF Round#240题解

    第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...

  6. windows phone 扫描二维码

    在网上找了找扫描二维码的例子,利用ZXing库实现(下载),提供的Silverlight版本的下载,在网上搜了一下已经有wp的dll可用了,不过网上实现的条码扫描的例子还都是用的Silverlight ...

  7. centOS 6.4 vsftpd 安装配置

    参考  http://blog.csdn.net/wocjj/article/details/7418944   配置说明 http://www.cnblogs.com/redhatlinux/arc ...

  8. problem 1 -- Two sum

    很简单.没什么好说的.但是在阿里实习的第四面的时候居然问到了. 大意是给出一组无序数列和目标数Z,在无序数列中找到X和Y,使得X+Y=Z. 有两种方法: 一种是排序后,同时首尾搜索.时间复杂度为O(n ...

  9. yii学习随感

    最近我们公司信易网络在用yii开发一个项目自己临时学习了一下yii 把学习感悟和大家一起分享一下 Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供 ...

  10. 64位AutoItLibrary的安装

    安装AutoItLibrary,除了要先已经安装好Robotframework之外,先要安装一个叫pywin32的工具 第一步:pywin32的安装 pywin32的下载地址: http://sour ...