转: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. Core Data(数据持久化)

    Core Data可能是OS X和iOS中最容易被误解的框架之一了.为了帮助大家理解,我们将快速研究Core Data,来看一下它是关于什么的.为了正确使用Core Data, 有必要理解其概念.几乎 ...

  2. 初识CoreText

    一.基本知识介绍 1.字符(Character)和字形(Glyphs) 排版系统中文本显示的一个重要的过程就是字符到字形的转换,字符是信息本身的元素,而字形是字符的图形表征,字符还会有其它表征比如发音 ...

  3. Xcode中实现ARC和MRC混编

    1.在Xcode中打开项目文件 2.选中项目名称 3.在右侧选择build phass 选项卡 4.选择 complite source 选项 5.选择要支持MRC编译的.m文件,双击 6.在弹出的框 ...

  4. autorelease 的基本使用

    5-autorelease 的基本使用 0,引入 Person *p = [Persom new];[p release]; [p run]; [p run]; // 希望不立即释放,待 run执行完 ...

  5. 导入外部jar包的方法

    注:使用的编译平台为eclipse <算法>一书中需要引入外部jar包(algs4.jar),因此特地去学了下导入外部jar包的方法.步骤如下: 1.先将algs4.jar拷到j如下路径: ...

  6. 第14章高级IO总结

    1 低速系统调用 可能使进程永远阻塞的一类系统调用,包括: 1)读某些文件类型(管道.终端.网络设备)的数据 2)写某些文件类型(管道.终端.网络设备),但数据不能被立即接受(管道中无空间.流量控制等 ...

  7. nodejs 实现机制

    最近在学习nodejs,作为一个从未学过javascript的程序员,把自己学习的过程贴出来,当做记录和总结吧. 1. nodejs的原理: nodejs完全是基于事件轮询机制的一个javascrip ...

  8. 关于web开发的一点理解

    对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端   服务端通过解析报文并处理报文最后把处理的结果 ...

  9. linux 文件操作编程

    Linux中所有的设备和文件的操作都使用文件描述符来进行. 文件描述符是一个非负的整数,它是一个索引值,指向内核中每个进程打开的记录表. 当打开一个文件或者创建一个新文件时,内核就向进程返回一个文件描 ...

  10. sql server 数据库正在使用该文件的解决办法

    今天在帮朋友还原数据库时遇到了一个问题.朋友用的是sql server 2008数据库,本身有一个数据库,他在修改程序的时候,想修改数据库的内容.但是又不想在原数据库中修改.想备份还原出一个数据库然后 ...