Microsoft Office SharePoint Server 2007的文件目录结构


所有与SharePoint相关的文件都放在本地目录C:\Program Files\Common Files\Microsoft Shared\web server extensions\12下面

 

下面介绍一些主要的文件目录。

1、 ISAPI目录
此目录下面存放的是SharePoint自带的Web Services,我们也可以自定义Web Services封装在SharePoint里面。自定义Web Services方法见:Writing Custom Web Services for SharePoint Products and Technologies

2、 Resources目录
SharePoint有两个资源文件夹,目录分别为C:\Program Files\Common Files\MicrosoftShared\web server extensions\12\CONFIG\Resources和C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\Resources,本地化工作主要是编写Resourses里的文件,网站如果显示的一些标题或描述不符合我们的要求,那么可以通过修改资源文件里的
<Data Name="修改元素">
<Value>网站显示的内容</Value>
</Data>
要引用资源文件里面的内容,一般通过$Resources:开头。
例如:<%$Resources:sps,LayoutPageZone_TopZone%>
其中:sps表示资源文件名,与sps.zh-CN.resx相对应。LayoutPageZone_TopZone表示sps.zh-CN.resx文件中的
<Data Name="LayoutPageZone_TopZone">
<Value>顶部区域</Value>
</Data>
节点。
注:一般不推荐修改所有C:\Program Files\Common Files\Microsoft Shared\web server extensions\12目录下的文件,因为这样将给版本升级带来问题。要加入我们自定义的内容通过增加文件到相应的目录下即可。比如这里我们可以增加一个资源文件,把我们要修改的元素放在里面。

3、 TEMPLATE目录
这是一个最主要的目录。子目录介绍如下:
(1)、SiteTemplates目录
放置各种网站定义模板。每个网站定义模板都会有一个ONET.XML文件,它位于 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\SiteTemplates\Site_Definition_Name\XML folder
ONET.XML有五个节:
1、NavBars:指定主页的顶部导航和左部导航
2、ListTemplates:指定该站点可创建的各种列表(自定义列表、文档库、图片库等)
3、DocumentTemplates:指定在创建文档库时可以创建的文档模板(Microsoft Office Word 文档、Microsoft Office FrontPage 网页、Microsoft Office Excel 电子表格等)
4、Configurations:指定站点在创建时默认生成的各种列表和模块
5、Modules:指定站点中默认包含的Web部件库
注意:修改ONET.XML后需要重新启动IIS,才可生效

实例:基于已有模板创建站点模板。
步骤:
1、打开C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates目录
2、复制粘贴一个SPS文件夹,改名为GASSPS
3、找到C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\2052\XML目录
4、在目录中创建一个名为WEBTEMPGASSPS.XML的文件,把下列XML粘贴到文件中
<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="2052" _version="12.0.4518" _dal="1" -->
<!-- _LocalBinding -->
<Templates xmlns:ows="Microsoft SharePoint">
<Template Name="GASSPS" ID="10001">
   <Configuration ID="0" Title="浙江天然气模板" Hidden="FALSE" ImageUrl=""
       Description="此模板用于初始化浙江天然气网站。" >
   </Configuration>
</Template>
</Templates>
5、重启IIS(iisreset)
6、打开创建站点页面,在“选择模板”节中多了一个“自定义”选项,下面就有我们刚添加的“浙江天然气模板”。

(2)、THEMES目录
放置各种网站主题。

实例:创建自定义的主题
步骤:
1、先找到 Theme 文件夹位置 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\THEMES
2、复制一个 Theme 的文件夹如 CLASSIC 更改成自己要的名字如 GASTHEME
3、在文件夹中,将CLASSIC.INF 改成与自己文件夹相同的名字如 GASTHEME.INF
4、打开 GASTHEME.INF 将 title 改成与自己文件夹和文件名相同的名字如GASTHEME
5、找到 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\2052\SPTHEMES.XML 文件,复制并粘贴一个<Templates>元素,修改里面的内容如下:
  <Templates>
             <TemplateID>GASTHEME</TemplateID>
              <DisplayName>天然气主题</DisplayName>
              <Description>天然气主题将被应用</Description>
              <Thumbnail>images/thwheat.gif</Thumbnail>
              <Preview>images/thwheat.gif</Preview>
</Templates>
上面两个图片是参考Wheat主题的图片,也可以改成自己的图片,图片存放位置 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\IMAGES文件夹下
6、打开“网站设置”中“网站主题”,就可以找到我们刚刚添加的GASTHEME主題了。

(3)、LAYOUTS目录
网站所有的页面功能(网址后面有 _layouts的页面)都集中于此目录下面(除了模板中的Default.aspx以及某类型List相关页面)。可以添加自己的功能页面,方法:

(4)、ADMIN目录
管理中心的页面功能集中此目录下面。

(5)、CONTROLTEMPLATES目录
放置各种服务器控件。

(6)、IMAGES目录
放置网站用到的主要图片,如网站Logo等。

(7)、FEATURES目录
放置各种Feature,在MOSS 2007中feature功能之强大超乎想象,可以说对一个已有的网站功能性的增强最后多数都要通过feature来实现。包括母版页、内容页以及文档库等都是通过Feature来实现的。

实例1:使用Feature自定义母版页。
步骤:
1、         打开Feature目录C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES
2、         新建一个GASMASTERPAGES文件夹
3、         在GASMASTERPAGES文件夹下,新建Feature.xml文件,将下列内容粘贴到文件中
<!-- _lcid="1033" _version="12.0.4518" _dal="1" -->
<!-- _LocalBinding -->
<Feature Id="cbdddc58-c0e1-4d64-99bc-071379a910f3"
          Title="Gas Master"
          Description=""
          Version="12.0.0.0"
          Scope="Site"
          Hidden="False"
          DefaultResourceFile="core"
          xmlns="http://schemas.microsoft.com/sharepoint/">
   <ElementManifests>
        <ElementManifest Location="ProvisionedFiles.xml"/>
   </ElementManifests>
</Feature>
在这个XML文件中,以下关于Featrue的metadata 包含在Featrue 元素中。(更详细的信息请参阅Feature.xml Files
ID: 一个GUID,用于唯一标识这个Feature,可以通过VS生成
Title:Feature 的名字,可以在网站内关于Site Featrues的页面中看到。
Description:对description的描述。
Version:Feature的版本;
Scope:其值可以是Web或Site,它指明了这个Feature是应用于整个的Site Collection还是仅仅用于单独的一个子站点。
Hidden:值可以是True或False.该设置指定了这个Feature是否在Site Feature页面上显示。
DefaultResourceFile: 资源文件名字,Feature依赖它提供其它附加的配置信息。
Feature.xml文件中的<ElementManifests>元素,这个元素包含了另一个XML文件的位置,而这个文件包含的<Elemnets>的内容是Feature要实现的。
<ElementManifest>元素指明了要使用一个名为ProvisionedFiles.xml的文件,以下是该文件的<Elements>元素内容。
4、         在GASMASTERPAGES文件夹下,新建ProvisionedFiles.xml文件,将下列内容粘贴到文件中
<!-- _lcid="1033" _version="12.0.4518" _dal="1" -->
<!-- _LocalBinding -->
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Module Name="OSGMasterPages" Url="_catalogs/masterpage" Path="MasterPages" RootWebOnly="TRUE">
        <File Url="Gasmaster.master" Type="GhostableInLibrary">
           <Property Name="ContentType" Value="" />
           <Property Name="PublishingPreviewImage" Value="~SiteCollection/_catalogs/masterpage/$Resources:core,Culture;/Preview Images/Gas.png, ~SiteCollection/_catalogs/masterpage/$Resources:core,Culture;/Preview Images/Gas.png" />
           <Property Name="MasterPageDescription" Value="" />
      </File>
 </Module>
 <Module Name="PublishingLayoutsPreviewImages" Url="_catalogs/masterpage" IncludeFolders="??-??" Path="" RootWebOnly="TRUE">
       <File Url="Gas.png" Name="Preview Images/Gas.png" Type="GhostableInLibrary">
       </File>
    </Module>
</Elements>
5、         新建MasterPages和zh-cn文件夹,在MasterPages文件夹中新建Gasmaster.master文件,在zh-cn文件夹中放入一张模板页的图片Gas.png
6、         重启IIS(iisreset)
7、         在SharePoint服务器上运行CMD.exe,
输入命令切换目录:cd C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN
安装Feature输入命令:stsadm -o installfeature -filename GASMASTERPAGES
激活Feature输入命令:stsadm -o activatefeature -filename GASMASTERPAGES\feature.xml -url http://portal:8000
8
、         打开“网站设置”中“母版页”,就可以看到我们刚刚添加的Gasmaster.master母版。
参考连接:Create a Feature: Add Custom Master Pages to your Site Collections

实例2:使用Feature定义站点中的菜单项
包括其中第一个CustomAction在“网站设置”页面中的“外观”标题下创建了一个自定义链接.第二个CustomAction在页面的“网站操作”菜单下增加了一个用户自定义菜单项.第三个CustomAction在文档库的“新建”下拉菜单下创建了一个自定义菜单项.第四个CustomAction在文档库的“操作”下拉菜单下创建了一个自定义菜单项。
步骤:
1、创建一个Feature.xml文件
在Features目录下创建一个目录例如MyMenu,在其中创建一个Feature.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<!-- _lcid="1033" _version="12.0.4017" _dal="1" -->
<!-- _LocalBinding -->
<Feature Id="6098EC11-8128-409A-8D2C-414E93F67DD4" 
            Title="$Resources:GasMenu,MenuTitle;" 
            Description="$Resources:GasMenu,MenuDescription;" 
            Version="12.0.0.0" 
            Scope="Web" 
           Hidden="FALSE" 
           DefaultResourceFile="customDocumentLibrary" 
            xmlns="http://schemas.microsoft.com/sharepoint/">
            <ElementManifests>
                <ElementManifest Location="LightUp.xml" /> 
            </ElementManifests>
</Feature>
2、在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\Resources文件夹中新建GasMenu.zh-CN.resx文件,输入以下内容
<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="2052" _version="12.0.4518.1016" _dal="1" -->
<!-- _LocalBinding -->
<root>
<Data Name="MenuTitle">
<Value>天然气菜单项</Value>
</Data>
<Data Name="MenuDescription">
<Value>添加了四个菜单项,分别为在“网站设置”页面中的“外观”标题下创建了一个自定义链接、在页面的“网站操作”菜单下增加了一个用户自定义菜单项、在文档库的“新建”下拉菜单下创建了一个自定义菜单项和在文档库的“操作”下拉菜单下创建了一个自定义菜单项。</Value>
</Data>
</root>
   3、创建Feature的描述文件LightUp.xml
文档的内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- create command link site setting page -->
<CustomAction Id="SiteSettings" GroupId="Customization" 
                Location="Microsoft.SharePoint.SiteSettings"
                            Sequence="106"
                            Title="Custom Site Setting Command">
                            <UrlAction Url=""/>
     </CustomAction>
     <!-- Add command to site action dropdow -->
        <CustomAction Id="SiteActionsToolbar"
                       GroupId="SiteActions"
                                   Location="Microsoft.SharePoint.StandardMenu"
                                   Sequence="1000"
                                   Title="Custom Action"
                                   Description="custom site action"
                                   ImageUrl="/_layouts/images/ACG16.GIF">
                                   <UrlAction Url=""/>
    </CustomAction>
       <!-- Document Library Toolbar New Menu DropDown -->
       <CustomAction Id="DocLibNewToolbar"
               RegistrationType="List"
                     RegistrationId="101"
                     GroupId="NewMenu"
                     Rights="ManagePermissions"
                     Location="Microsoft.SharePoint.StandardMenu"
                     Sequence="1000"
                     Title="Custom New Command"
                     Description="custom new command "
                     ImageUrl="/_layouts/images/ACG16.GIF">
                     <UrlAction Url=""/>
    </CustomAction>
       <!-- Document library Toolbar Actions Menu Dropdown -->
       <CustomAction Id="DocLibActionsToolbar"
               RegistrationType="List"
                     RegistrationId="101"
                     GroupId="ActionsMenu"
                     Rights="ManagePermissions"
                     Location="Microsoft.SharePoint.StandardMenu"
                     Sequence="1000"
                     Title="Command on Document Library"
                     Description=" command on document library"
                     ImageUrl="/_layouts/images/ACG16.GIF">
                     <UrlAction Url=""/>
         </CustomAction>
</Elements>
4、重启IIS(iisreset)
5、在SharePoint服务器上运行CMD.exe,
输入命令切换目录:cd C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN
安装Feature输入命令:stsadm -o installfeature -filename MyMenu
激活Feature输入命令:stsadm -o activatefeature -filename MyMenu\feature.xml -url http://portal:8000/
疑问:在Feature.xml中,虽然把编码方式改为encoding="GB2312",但是使用汉字都不能识别出来,可是在LightUp.xml文件中虽然编
方式为encoding="UTF-8",但是使用汉字都能识别出来,感觉很奇怪。

实例3:使用Feature创建用户控件。
请看KaneBoy的 DelegateControl:SharePoint Server 2007内置的一个“用户控件包装器”

实例4:使用Feature创建自定义的文档库。
请看宋振乾的 如何在MOSS2007中创建一个定制的 Document Library Feature

 

下面列出了sharepoint的母版页中定义的所有占位符:(详细位置请对照default.master)
1、<asp:ContentPlaceHolder ID="PlaceHolderGlobalNavigationSiteMap" runat="server" />
放置连接到顶级站点的超连接
2、<asp:ContentPlaceHolder ID="PlaceHolderGlobalNavigation" runat="server" />
放置顶部一行内容。
3、<asp:ContentPlaceHolder ID="PlaceHolderSiteName" runat="server" />
放置站点名称
4、<asp:ContentPlaceHolder ID="PlaceHolderSearchArea" runat="server" />
放置搜索框
5、<asp:ContentPlaceHolder ID="PlaceHolderHorizontalNav" runat="server" />
放置水平导航栏
6、<asp:ContentPlaceHolder ID="PlaceHolderTopNavBar" runat="server" />
放置水平导航栏一行内容。
7、<asp:ContentPlaceHolder ID="WSSDesignConsole" runat="server" />
页面编辑控件,当页面进入编辑页面模式时使用(当我们点 Site Actions, Edit Page后)
8、<asp:ContentPlaceHolder ID="SPNavigation" runat="server" />
在 Windows SharePoint Services中默认为空,用于附加的页面编辑控件
9、<asp:ContentPlaceHolder ID="PlaceHolderPageImage" runat="server" />
左侧的图片
10、<asp:ContentPlaceHolder ID="PlaceHolderTitleLeftBorder" runat="server" />
Title区左侧边框
11、<asp:ContentPlaceHolder ID="PlaceHolderTitleBreadcrumb" runat="server" />
TitleBreadcrumb页面导航区
12、<asp:ContentPlaceHolder ID="PlaceHolderPageTitleInTitleArea" runat="server" />
Breadcrumb区下面的标题
13、<asp:ContentPlaceHolder ID="PlaceHolderMiniConsole" runat="server" />
一个放置页面级命令的地方,比如在WIKI站点里的Edit Page, History, Incoming Links
14、<asp:ContentPlaceHolder ID="PlaceHolderTitleRightMargin" runat="server" />
Title区右侧空白
15、<asp:ContentPlaceHolder ID="PlaceHolderTitleAreaSeparator" runat="server" />
TitleAreaSeparator区
16、<asp:ContentPlaceHolder ID="PlaceHolderLeftNavBarDataSource" runat="server" />
左侧导航区数据源
17、<asp:ContentPlaceHolder ID="PlaceHolderCalendarNavigator" runat="server" />
在页面中有日历时为其显示一个日期选择框
18、<asp:ContentPlaceHolder ID="PlaceHolderLeftNavBarTop" runat="server" />
左侧导航区上面的导航区
19、<asp:ContentPlaceHolder ID="PlaceHolderLeftNavBar" runat="server" />
左侧导航区
20、<asp:ContentPlaceHolder ID="PlaceHolderLeftActions" runat="server" />
左侧导航区下面的动作区
21、<asp:ContentPlaceHolder ID="PlaceHolderNavSpacer" runat="server" />
左侧导航区的宽度
22、<asp:ContentPlaceHolder ID="PlaceHolderLeftNavBarBorder" runat="server" />
左侧导航区的边框元素
23、<asp:ContentPlaceHolder ID="PlaceHolderBodyLeftBorder" runat="server" />
页面body的边框元素
24、<asp:ContentPlaceHolder id="PlaceHolderPageDescription" runat="server" />
页面描述区
25、<asp:ContentPlaceHolder id="PlaceHolderMain" runat="server" />
页面主体
26、<asp:ContentPlaceHolder ID="PlaceHolderBodyRightMargin" runat="server" />
页面body的右边空白
27、<asp:ContentPlaceHolder ID="PlaceHolderFormDigest" runat="server"/>
这是页面中必备的 "form digest"安全组件。
28、<asp:ContentPlaceHolder ID="PlaceHolderUtilityContent" runat="server" />
页面底部需要的一块特殊内容
29、<asp:ContentPlaceHolder ID="PlaceHolderBodyAreaClass" runat="server" />
附加在页面顶部的body中的样式
30、<asp:ContentPlaceHolder ID="PlaceHolderTitleAreaClass" runat="server" />
TitleArea附加的样式
31、<asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server" />
提供给内容页添加所有可以放在<head>区域的内容,如CSS、JS等。

posted @ 2009-06-15 14:14 野狼的天空 阅读(159) 评论(0) 编辑

现在开始学习Sharepoint了,将学习的东西记录下来

(转:http://www.cnblogs.com/chinamoss/archive/2009/03/09/1407118.html

 

 本文主要包括以下几方面内容:

 

  1.页面布局和母版页

  2.页面布局模型

  3.页面模型

  4.字段控件和控件模板

  5.页面处理模型

  1.页面布局和母版页

  母版页和页面布局是MOSS2007中最基本的两个模板模型。母版页和页面布局共同构成了你在SharePoint网站上看得到的任何一个页面。母版页包括很多控件,比如导航栏、搜索或站点地图等。页面布局包括字段控件和WEB部件。下面的图表说明了,页面布局和母版页是如何应用于一个网页的布局的创建过程中的:

 

  

所有的母版页和页面布局都存储在这个文档库,就是网站集中的“母版页和页面布局”,这个库支持版本控制和工作流。默认情况下,每一个网站都共享MOSS2007创建的这个母版页库,你只能使用在顶级网站的母版页库中的页面布局来创建新的页面。另外,网站中所有页面布局都依附于一个母版页,这个母版页是基于网站SPWeb类的“CustomMasterUrl”属性来设定的。所有的页面布局共享一些控件叫做字段控件,他们与母版页的列表项的相关字段绑定。你可以使用默认的控件或者是构建自己的。字段控件使得页面内容可以编辑和展示。

  页面布局可以被所有的基于这个页面布局创建的页面实例使用。母版页可以被网站中所有的页面所用。基于一个页面布局的所有页面实例在不同的网站可以使用不同的母版。当你使用SPD编辑网页的时候会出现下面的提示,你不能使用SPD来编辑网页,只能编辑他的网页布局或其对应的母版页。 

 

  Content Type:内容类型,SharePoint Server中用内容类型来定义页面的类型,比如“新闻页面”、“纯文字内容页面”等。通过定义一组Column,它决定了在一个页面上可以显示哪些信息。

  Page Layouts:页面布局,定义页面如何将信息显示出来。每个Page Layouts都使用一个Master Page,同时与一个Content Type关联,这样,每个Page Layouts就可以定义出如何在页面上将Content Type中定义的信息显示出来,即Content Type中每个Column中的信息显示在页面上的哪个地方。通常,我们会在Page Layouts上面放一些Field Control,每个Field Control对应到一个Column。

  Page:页面,其实SharePoint Server里面的Page不是一个真正的页面文件。当我们创建新的Page时,会选择创建哪种Content Type的Page,然后,SharePoint会让我们从某个Page Layouts(当然这里可供选择的Page Layouts必需是和这个Content Type相关联的)中选择一个,最后,通过输入Content Type中定义的Column的值,一个Page就创建完成了。每个Page都只是一个保存在Pages列表里面的一个ListItem。

  页面输出的步骤:

  1、用户从客户端请求访问一个页面。

  2、SharePoint从Pages列表中找到这个请求页面对应的ListItem。

  3、根据ListItem的对应栏的值,SharePoint找到它相关联的Page Layouts,把Page Layouts上的信息取出来。

  4、根据Page Layouts的定义,把其使用的Master Page的信息取出来。

  5、运行页面。

  6、页面上的Field Control会从页面对应的ListItem的相应栏里面把值取出来,显示在Field Control里面。

  2.页面布局模型

  页面布局的作用是连接母版页与页面,并对页面的外观、视觉效果和内容进行控制,它也是一种模板模型。每一个页面布局都有一个相关的内容类型,这个内容类型定义了何种内容可以存储在基于内容类型创建的页面布局里。MOSS 2007提供了三种默认的发布内容类型:页面、文章页面和欢迎页面。

  每一种内容类型都包含若干“栏”,这些栏定义了用以显示在页面和Metadata页面标记的元素。内容类型同样也包含为每一种数据元素定义展示方式的一个特殊栏 。在创建内容类型的时候,你可以为你每一个想要的控件,往其中添加特定的栏,栏模板决定了关联在这个栏中默认的字段控件,比如一个单行文本框,一个超链接或是一个图片。

  页面内容,是作为列表项存储在SharePoint的“页面”文档库中。当使用者打开或是编辑这个页面的时候,内容就会被“拉”出SharePoint的列表,并显示在字段控件中。当你创建一个页面布局的时候,你可以通过使用页面布局的编辑器,比如Microsoft Office SharePoint Designer 2007或是手动编辑,加入字段控件。内建的页面内容类型包括描述页面MetaData的栏(字段),这些栏(字段)的详细情况请看下面的表格:

描述
计划开始日期 义页面从什么日期开始在网站中显示
计划结束日期 义页面从什么日期以后在网站中不被显示
联系人 创建页面的用户或是用户组
联系人电子邮件地址 页面创建人的电子邮件地址
联系人姓名 页面创建人的姓名
联系人图片 页面创建人的照片
页面布局 定义了页面创建时应用的页面布局
在导航显示 如果页面显示在导航请设置YES,否则设置为NO
      

  一个页面布局可以被基于它创建的所有页面共享。母版可以被一个网站所有的页面使用。在不同网站下面的页面,在应用同一种页面布局的同时也可以应用不同的母版。就如同使用SharePoint中其它文档库一样,你可以对页面布局使用版本控制、签入和签出、工作流和其它任何功能,这些功能对于母版页也同样适用。出于对母版页库安全的考虑,除了有设计或更高权限的用户,是不允许对其进行操作的。你可以在库里创建文件夹,以便更好地组织你自己的母版页,这样你就可以应用MOSS 2007新的“项目级权限”特性来单独设定这个文件夹的权限。

  3.页面模型

  虽然MOSS2007使用了ASP.NET 2.0的基础页面模型,SharePoint页面基本上也是基于标准的aspx技术来构建,但MOSS2007的页面模型仍然要比普通的ASP.NET应用复杂很多。对于一个SharePoint开发人员(和设计人员),了解SharePoint的页面模型是非常非常重要的。

  在SharePoint 2007中,将页面分为两种:Application Page和Site Page。Application Page是指SharePoint应用程序中用到的页面。比如,当我们进入到一个SharePoint站点的站点设置中后,几乎所有的站点设置页面都是Application Page。如果我们看到地址栏中的页面路径都是类似“http://sharepointsite/_layouts/xxx.aspx”这样的格式,也就是说,页面位于“_layouts”虚拟目录中,那么这个页面就是Applicatoin Page。Application Page在物理上被存放在SharePoint Web前端服务器的“Program FilesCommon FilesMicrosoft SharedWeb Server Extensions12TEMPLATELayouts”目录中,不能被用户进行定制。而Site Page是指位于一个SharePoint站点中的普通页面。比如,站点的首页:“http://sharepointsite/default.aspx”,或者位于一个文档库中的页面:“http://sharepointsite/pages/xxx.aspx”,都是Site Page。

  Application Page实际上和一个普通的ASP.NET页面没有任何区别。开发人员如果有需要,可以自己添加新的Application Page,你既可以在“Program FilesCommon FilesMicrosoft SharedWeb Server Extensions12TEMPLATELayouts”目录中添加新的页面,也可以在这个目录下创建新的子目录(或虚拟目录),来放置你的Application Page。在Application Page中,开发人员可以根据自己的需求,直接添加In-line code,这些code都会直接被执行,就像一个普通的ASP.NET应用程序一样(当然,对于Code-behind的模式,Application Page也是支持的)。比如:

<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
// 代码...
}
</script>

  对于Application Page,SharePoint 2007总是认为它们是安全的,因为,站点的管理员(非服务器管理员)和用户都没有办法直接修改Application Page,所以,SharePoint 2007会直接“执行”它们。

  如果你要创建自己的Application Page,尽量遵守这样的模式:

  1、让你的Application Page从“Microsoft.SharePoint.WebControls.LayoutsPageBase”继承下来;

  2、让你的Application Page使用位于Layouts目录中的“Application.master”这个Master Page;

  3、在Layouts目录中创建一个新的子目录(或虚拟目录)来放你的Application Page,不要和SharePoint自带的Application Page混杂在一起。

  Site Page比Application Page要更复杂一些。对于Site Page,我们通常根据它们是否已经被进行了定制(通过SharePoint Designer 2007),将Site Page分为Uncustomized Page和Customized Page。(在SPS2003中,使用的是Ghosted Page和Unghosted Page这两个术语。)

  当我们新建一个站点的时候,所有的页面都是Uncustomized Page,这些页面都是直接使用了存放在SharePoint Web前端服务器磁盘上的页面模板(位于“Program FilesCommon FilesMicrosoft SharedWeb Server Extensions12TEMPLATE”的各个子目录中),换言之,这个新站点的页面其实是“不存在的”,它们只是一个“标记”(这也就是在SPS2003中,它们被称为Ghosted Page的原因),如果用户访问一个页面,SharePoint会自动从磁盘上找到那个真正的页面模板文件,然后将其载入到内存中,解析它,并将其编译成一个独立的dll文件(为了性能,这个dll会缓存在磁盘上以避免下次重复编译),然后载入这个dll,运行,输出。

  但是,如果站点设计人员用SharePoint Designer 2007打开这个SharePoint站点,然后用SharePoint Designer打开某个Site Page文件,进行某些修改,保存,SharePoint会自动将修改后的文件内容保存到站点所用的内容数据库中,它就成了一个Customized Page。从此,这个Customized Page就和磁盘上的页面模板“脱离关系”了。当用户访问这个页面时,SharePoint会自动从内容数据库中读出这个文件的内容,然后对其进行解析,运行。注意!这次,SharePoint不会再将其编译成一个独立的dll文件了,实际上,SharePoint会在内存中载入这个页面的结构,运行,然后输出,然后将它从内存中卸载以节省内存。

  从Uncustomized Page和Customized Page的运行模式上,我们就能看出它们的运行效率存在着不小的差别。首先,Uncustomized Page是位于磁盘上的,它的读入速度会比较快,其次,Uncustomized Page会在第一次被访问时就被编译成一个dll,避免了重复编译。比如,两个不同SharePoint站点的首页“default.aspx”如果都是Uncustomized Page,而且使用的是同一个页面模板,它们只会被编译一次。而Customized Page位于内容数据库中,读入速度比不上磁盘文件,而且它不会被编译成dll,而是只会在内存中进行解析,运行。

  但是,有意思的是,Customized Page的解析运行方式虽然在速度上可能要慢,但却要更节省内存一些。因为在内存中载入一个页面的结构,进行解析运行后,是可以再释放掉的,而一个dll被载入后,是不能被释放掉的。这是因为.NET不支持载入程序集后再卸载程序集,呵呵。(但.NET支持创建AppDomain后再释放掉AppDomain。)

  除了存放位置和运行效率上的不同,在代码安全上,Uncustomized Page和Customized Page也存在很大的区别。类似于Applicaton Page,Uncustomized Page也是被SharePoint信任的页面,位于Uncustomized Page里面的ASP.NET In-line code会被直接运行。而Customized Page由于可以被站点设计者(可能他并非是服务器管理员)通过SharePoint Designer向其中加任意的In-line code,所以,默认的安全规则根本不会允许Customized Page中的服务器端代码被运行。

  类似的,如果Uncustomized Page上面被放置一个服务器端控件,是没有问题的,但是,如果要向Customized Page上放一个服务器端控件(包括Web Part),那么这个控件就必须在站点的web.config中被标识为“Safe Control”(也就是增加新的“<SafeControl>”节点来标识某个控件是安全的)。

  虽然SharePoint对Customized Page有这些安全上的限制,但是,服务器管理员通过修改web.config文件中的安全设置,是可以更改这样的默认安全限制的。比如,如果你希望站点的“MyPages”目录下的页面,即使它们是Customized Page,也允许被包含服务器端In-line code,可以在web.config中增加这样的内容:

<SharePoint>
<SafeMode ...>
<PageParserPaths>
<PageParserPath VirtualPath="/MyPages/*" CompilationMode="Always"
AllowServerSideScript="true" AllowUnsafeControl="true" IncludeSubFolders="true"/>
</PageParserPaths>

  “CompilationMode”节点的值可以是:Never、Always和Auto,将其设置为Always,就可以强制进行编译。“AllowServerSideScript”是指定是否允许服务器端的代码,“AllowUnsafeControl”是指定是否允许非安全(也就是没有在“SafeControls”区域指定为安全)的控件。

  最后要提醒的是,虽然通过修改web.config中的设置可以让所有的Site Page都能包含服务器端代码,但如非必要,尽量不要这样做。因为这将会使有权限对站点进行设计的人,通过使用SharePoint Designer,就可以在任何页面中添加In-line code,来进行任何操作。

  4.字段控件和控件模板

  除了Web部件,MOSS 2007中的页面还可以包含“字段控件”。字段控件可以是你创建的简单的基于ASP.NET 2.0的控件。在ASPX页面中有特定的标记去控制字段控件所呈现两种模式:一种只读模式,一种编辑模式。

  WSS 3.0和MOSS 2007提供了很多默认字段控件,你可以直接在页面中来使用。所有在MOSS 2007网站中的字段控件都是重写于WSS 3.0的一个叫FormComponent的基类。你可以根据你自己的需要来扩展任何WSS 3.0和MOSS 2007中的默认字段控件。比如,你可以写一个继承自类BaseRichField或是继承自其它默认字段控件的自定义字段控件。

  控件模板是ASP.NET 2.0的一个重要特性,实现了数据层与表现层的分离。模版定义了控件的外观,包含在网站里所有的字段控件使用模板来定义布局。对于开发人员,可以做如下开发:

  ★创建部署控件模板

  ★部署继承自默认控件模板的自定义模板

  ★编辑已部署的模板

  控件模板的定义与字段类型的定义很相似,它们有同样的可扩性和部署模型。所有自定义的模板,都会被加到NewTemplate.ascx这个文件,你可以以下面三个方式来自定义控件模板。

  ★使用对象模型中GetControlTemplate方法来设置控件模板

  ★在网页字段控件的实例中设置“TemplateName”或“AlternativeTemplateName”属性。

  ★除了自定义一个模板文件然后在控件中引用它外,还可以自定义控件的关于模板的相关XML标记。这种技术对于那些没有安装新的模板权限而又想改变控件外观和视觉效果的网页设计者来说最常用。

  当MOSS 2007被配置好,在运行过程中一个网站会以下面的顺序使用模板:标记,TemplateName属性,和GetControlTemplate方法。但是,模板设计者通过重载GetControlTemplate方法能修改这种方式。所有控件都是继承自FormComponent这个基类,这个基类的的GetControlTemplate方法可以被重载以定义控件使用什么模板。模板内建的逻辑会应用到每一个基于这个控件的实例中去。

  5.页面处理模型

  MOSS 2007 使用基于模板的渲染系统。其中关系页面渲染的两个最基本的模板就是母版页和页面布局。母版页应用于网站中所有的页面,而页面布局应用于基于这个布局创建的所有页面。页面布局是作为列表项存储在顶级网站的“母版页和页面布局”文档库中,所以你可以使用版本控制、签入和签出、工作流和其它任何基于SharePoint文档库的特性来进行扩展。

  MOSS 2007 是构建于WSS3.0和ASP.Net 2.0 之上,ASP.NET引擎负责编译和运行所有SharePoint页面请示。比如,假如一个用户从浏览器请求访问一个叫Welcome.aspx的页面。ASP.NET引擎就通过WSS3.0的FileProvider对象来调用与这个页面相关的页面布局和网站相关的母版页,然后再继续渲染页面上的字段控件和Web部件。下面的图表显示了MOSS 2007的页面处理过程模型.

 

  页面处理模型

  如下的列表说明了,在SharePoint网站页面渲染过程中,ASP.NET2.0和WSS3.0是如何互动的:

  1. 浏览器向IIS服务器发出页面浏览请求。

  2. IIS把这个请示传递给ASP.NET 2.0

  3. 用于这个请示的一个HttpAplication的管道被创建。

  4. ASP.NET 2.0 从WSS3.0的“文件提取器”来取页面文件。ASP.NET 把URL传递给“文件提取器”,然后这个“文件提取器”取得文件然后返回页面的“数据流”。WSS文件提取器负责进行缓存和对数据库的访问优化。

  5. ASP.NET 装载页面类,并分析页面数据,找出对页面布局的引用。

  6. ASP.NET 引擎编译页面数据流并把它存储在内存。

  7. ASP.NET 通过WSS的文件提取器来调用页面布局。

  8. ASP.NET 装载这个页面相关的页面布局的数据流。

  9. ASP.NET 编译页面布局并存储在内存中,如果系统需要内存,ASP.NET可以在稍后释放这部分内存。

  10. ASP.NET确认定这个页面所使用的母版页,同样通过WSS的文件提取器来取得这个文件。

  11. ASP.NET编译这个母版页并回写到磁盘上,所以除非你改动过这个母版页,这个编译只做一次。

  12. 页面布局运行每一个在页面内容上定义的控件。

  13. ASP.NET 更新所有必需的缓存。

  14. IIS 返回这个页面所有数据给浏览器。

  下次这个页面如果再次被同一个或名称不同但权限相同的用户访问到,页面处理过程就会更有效率:

  1. 浏览器向IIS发出一个页面访问请求。

  2. IIS把这个请示传递给ASP.NET 2.0

  3. 为处理请求,一个HTTPApplication管道被创建,用以来完成HandleRequest这个方法。

  4. ASP.NET 使用所有的内部缓存。

  5. ASP.NET渲染控件HTML代码。

  6. IIS把页面返回给浏览器。

  提示:如上每一步消耗极少的CPU时间。另外,除非你打开ASP.Net 2.0的页面输出缓存功能,默认情况下,ASP.NET每次都会对控件进行渲染。

 

 

posted @ 2009-06-15 13:57 野狼的天空 阅读(318) 评论(0) 编辑

 

Code

 

posted @ 2009-04-23 08:21 野狼的天空 阅读(67) 评论(0) 编辑

Automatic loading of .NET modules

Clearly it’s far from ideal to ask your users to load your application modules manually into AutoCAD whenever they need them, so over the years a variety of mechanisms have been put in place to enable automatic loading of applications – acad.lsp, acad.ads, acad.rx, the Startup Suite, to name but a few.

The most elegant way to auto-load both ObjectARX and .NET applications is the demand-loading mechanism. This mechanism is based on information stored in the Registry describing the conditions under which modules should be loaded and how to load them.

Demand loading is fairly straightforward and well documented in the ObjectARX Developer’s Guide (look under “demand loading applications”).

Essentially the information can be stored in one of two places: under HKEY_LOCAL_MACHINE or under HKEY_CURRENT_USER. The decision on where to place the information will depend on a few things – mainly whether the application is to be shared across all users but also whether your application installer has the privileges to write to HKEY_LOCAL_MACHINE or not.

It’s not really the place to talk about the pros and cons of these two locations – for the sake of simplicity the following examples show writing the information to HKEY_CURRENT_USER. Let’s start by looking at the root location for the demand-loading information:

HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications

Most of this location is logical enough (to humans), although the “ACAD-5001:409” piece needs a bit of explanation. This number has evolved over the releases, but right now 5001 means AutoCAD 2007 (it was 4001 for AutoCAD 2006, 301 for AutoCAD 2005 and 201 for AutoCAD 2004), and 409 is the “locale” corresponding to English.

A more complete description of the meaning of this key is available to ADN members at:

Registry values for ProductID and LocaleID for AutoCAD and the vertical products

There are two common times to load a .NET application: on AutoCAD startup and on command invocation. ObjectARX applications might also be loaded on object detection, but as described in a previous post this is not something that is currently available to .NET applications.

Let’s take the two common scenarios and show typical settings for the test application shown in this previous post.

Loading modules on AutoCAD startup

Under the root key (HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications) there is some basic information needed for our application. Firstly, you need to create a key just for our application: in this case I’ve used “MyTestApp” (as a rule it is recommended that professional software vendors prefix this string with their Registered Developer Symbol (RDS), which can be logged here, but for in-house development this is not necessary – just avoid beginning the key with “Acad” :-).

Under our application key (HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApp), we then create a number of values:

  • DESCRIPTION    A string value describing the purpose of the module
  • LOADCTRLS      A DWORD (numeric) value describing the reasons for loading the app
  • MANAGED         Another DWORD that should be set to "1" for .NET modules
  • LOADER            A string value containing the path to the module

The interesting piece is the LOADCTRLS value – the way to encode this is described in detail in the ObjectARX Developer’s Guide, but to save time I’ll cut to the chase: this needs to have a value of "2" for AutoCAD to load the module on startup.

Here's a sample .reg file:

Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApplication]

"DESCRIPTION"="Kean's test application"

"LOADCTRLS"=dword:00000002

"MANAGED"=dword:00000001

"LOADER"="C:\\My Path\\MyTestApp.dll"

After merging it into the Registry, here's what happens when you launch AutoCAD:

Regenerating model.

Initializing - do something useful.

AutoCAD menu utilities loaded.

Command: tst

This is the TST command.

Command:

Loading modules on command invocation

To do this we need to add a little more information into the mix.

Firstly we need to change the value of LOADCTRLS to "12" (or "c" in hexadecimal), which is actually a combination of 4 (which means "on command invocation") and 8 (which means "on load request"). For people that want to know the other flags that can be used, check out rxdlinkr.h in the inc folder of the ObjectARX SDK.

Secondly we need to add a couple more keys, to contain information about our commands and command-groups.

Beneath a "Commands" key (HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApp\Commands), we'll create as many string values as we have commands, each with the name of the "global" command name, and the value of the "local" command name. As well as the "TST" command, I've added one more called "ANOTHER".

Beneath a "Groups" key (HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApp\Groups), we'll do the same for the command-groups we've registered our commands under (I used the default CommandMethod attribute that doesn't mention a group name, so this is somewhat irrelevant for our needs - I'll use "ASDK_CMDS" as an example, though).

Here's the the updated .reg file:

Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApplication]

"DESCRIPTION"="Kean's test application"

"LOADCTRLS"=dword:0000000c

"MANAGED"=dword:00000001

"LOADER"="C:\\My Path\\MyTestApp.dll"


[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApp\Commands]

"TST"="TST"

"ANOTHER"="ANOTHER"


[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R17.0\ACAD-5001:409\Applications\MyTestApp\Groups]

"ASDK_CMDS"="ASDK_CMDS"

And here's what happens when we launch AutoCAD this time, and run the tst command. You see the module is only loaded once the command is invoked:

Regenerating model.

AutoCAD menu utilities loaded.

Command: tst

Initializing - do something useful.This is the TST command.

Command:

posted @ 2009-03-25 16:08 野狼的天空 阅读(150) 评论(0) 编辑
      
     在CAD中提供了Autodesk.AutoCAD.Runtime.IExtensionApplication界面执行初始化代码模块。我们现在要考虑如何利用Autodesk.AutoCAD.Runtime.IExtensionApplication接口,让我们的模块以,更快的加载到AutoCAD的。
 
  • 在AutoCAD中加载一个托管应用程序,查询应用程序集的ExtensionApplication自定义属性。如果此属性被发现, AutoCAD中设置属性的相关类型的应用程序的入口点。如果没有这样的属性发现,自动搜索所有类型的出口IExtensionApplication执行。如果没有执行发现, AutoCAD的只是跳过特定应用的初始化步骤。
  • 除了寻找一种IExtensionApplication执行, AutoCAD的查询应用程序的大会的一个或多个CommandClass属性。如果此属性的实例发现,自动搜索只及其相关类型的指挥方法。否则,搜索所有出口类型。
如何使用ExtensionApplication或CommandClass属性在您的代码中,因为它不是必须的。但是,如果你有一个大的。 NET模块加载到AutoCAD中,它可能需要一些时间来检查AutoCAD中的各种物体在应用程序上,找出是ExtensionApplication并在各CommandClasses 。

C#:

[assembly: ExtensionApplication(typeof(InitClass))]

[assembly: CommandClass(typeof(CmdClass))]

这些大会级别属性只是告诉AutoCAD的情况下寻找各种物体将其他需要查明的搜索。下面是一些详细信息的文件,在使用这些属性:
 
该ExtensionApplication属性可以附加只有一个类型。类型其所附着必须执行IExtensionApplication接口。
阿CommandClass属性可宣布的任何类型,定义AutoCAD的命令处理。如果应用程序使用CommandClass属性,它必须宣布一个实例此属性为每一类包含的AutoCAD命令处理方法。

C#:

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.EditorInput;

using System;

[assembly:

  ExtensionApplication(

    typeof(ManagedApplication.Initialization)

  )

]

[assembly:

  CommandClass(

    typeof(ManagedApplication.Commands)

  )

]

namespace ManagedApplication

{

  public class Initialization

    : Autodesk.AutoCAD.Runtime.IExtensionApplication

  {

    public void Initialize()

    {

      Editor ed =

        Application.DocumentManager.MdiActiveDocument.Editor;

      ed.WriteMessage("初始化.");

    }

    public void Terminate()

    {

      Console.WriteLine("清理");

    }

  }

  public class Commands

  {

    [CommandMethod("TST")]

    public void Test()

    {

      Editor ed =

        Application.DocumentManager.MdiActiveDocument.Editor;

      ed.WriteMessage("这是一个 TST 命令.");

    }

  }

}

 

 
posted @ 2009-03-25 16:07 野狼的天空 阅读(221) 评论(0) 编辑

在AutoCAD中是通过颜色索引(ACI)的形式来指定颜色。此外AutoCAD还提供了255种颜色(包括9种标准颜色和6种灰度颜色)供用户使用。

在AutoCAD中是通过颜色索引(ACI)的形式来指定颜色。同线型和线宽一样,颜色也具有“ByLayer(随层)”和“ByBlock(随块)”两种逻辑颜色,此外AutoCAD还提供了255种颜色(包括9种标准颜色和6种灰度颜色)供用户使用。在AutoCAD的示例文件中有一个名为“colorwh.dwg”的图形文件,以“颜色轮(Color Wheel)形式给出了全部255种颜色的定义。

用户可通过“color”命令来设置当前颜色或对象颜色,该命令的调用方式为:
    工具栏:“Object Properties(对象特性)”→
    菜单:【Format(格式)】→【Color…(颜色)】
    命令行:color(或别名col、colour、ddcolor)
    调用该命令后,系统将弹出“Select Color(选择颜色)”对话框
    该对话框中提供各种颜色选择:
   

posted @ 2009-03-25 15:35 野狼的天空 阅读(284) 评论(1) 编辑



 1
         int DataCount = dtLoadLog1.Rows.Count;
 2     if(DataCount==0)
 3     {
 4        dg_log.CurrentPageIndex=0;
 5     }

 6     else
 7    {
 8        int i=DataCount % dg_log.PageSize;
 9         if(i==0)
10         {
11        dg_log.CurrentPageIndex=dg_log.PageCount-2;
12                
13        }

14            
15     }

   

posted @ 2006-03-01 16:28 野狼的天空 阅读(31) 评论(0) 编辑
欢迎大家的到来!
posted @ 2006-03-01 16:07 野狼的天空 阅读(46) 评论(5) 编辑

公告

昵称:野狼的天空
园龄:5年11个月
粉丝:0
关注:0
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

搜索

 
 

最新评论

阅读排行榜

评论排行榜

推荐排行榜