[转]SharePoint开发中可能用到的各类Context(上下文)

SharePoint是一个B/S结构的产品,因此在开发过程当中会使用到各类各样的上下文(Context)信息,借此机会来总结一下。特别是Javascript的Ctx很是实用,这里记录一下!javascript

1、HttpContextjava

这个……我想就不用再介绍了,SharePoint运行在标准的ASP.NET框架下(2003用的不是标准的ASP.NET 1.1,不过这年头还有人用2003么),因此这个对象的使用和ASP.NET没有任何区别。web

 

2、SPContext数组

从名字就能够看出来,这个是SharePoint本身的上下文对象,它除了封装了HttpContext以外,提供了不少和SharePoint相关的上下文信息。浏览器

SPContext包含一个咱们最常用的静态属性:SPContext.Current,用于获取当前的上下文信息(和HttpContext.Current相似,若是程序是运行在Web上的,就可使用这个)。我见过很多初学SharePoint开发的人,在写WebPart的时候,还在使用new SPSite的方式来获取当前网站集,这即没有必要,也是对服务器资源的浪费(SPSite、SPWeb对象都包含非托管资源,而Current中的Site和Web是被SharePoint本身的运行时环境所管理的,能够快速取用)。服务器

下面看一下这个SPContext中包含哪些经常使用的属性,能够在开发过程当中使用(有些属性其实内部逻辑很复杂,这里简要介绍一些基本场景):框架

属性 说明
Site SPSite类型,次经常使用到的属性,当前的网站集
Web SPWeb类型,最经常使用到的属性,当前的网站。 
不少程序都是用SPContext.Current.Web来开头的……
List / ListId SPList / Guid类型,当前列表。 
不论你是在列表的视图页面上、表单页面上仍是设置页面上,均可以经过这个属性取得当前的列表。其实只要Url查询里面有一个有效的List参数,参数的值是列表的Guid就能够。
ListItem / ItemId SPListItem / Int32类型,当前的列表条目。 
通常用于列表的查看和编辑表单(固然新建表单其实也能够,只不过没有ID),或者用于获取存放在页面库里的当前页面对应的条目。此外,若是当前的List属性有效的话,只要Url查询里面有一个有效的ID参数,就可使用这个属性获得对应条目。
ListItemVersion SPListItemVersion类型,当前列表条目对应的版本。 
若是是从历史版本查看页面中,查看某个版本的条目时,在那个查看页面,能够用这个属性直接取到相应的版本。
ListItemDisplayName / 
ListItemServerRelativeUrl
string / string类型,当前条目的显示名称(若是是普通列表,就是Title字段的值;若是是文档库,就是不带扩展名的文件名;或者是文件夹名称),以及Url。
File SPFile类型,若是当前条目是一个文件的话,这个属性能够直接获得文件对象。 
至关于SPContext.Current.ListItem.File
RootFolderUrl string类型,当前视图对应的Url地址。 
若是当前列表视图是处于列表的某个子文件夹中,能够经过这个属性获得这个文件夹的地址;不然的话,就是当前列表的根文件夹地址。
IsPopUI Boolean类型,判断当前页面是否在对话框中。 
仅限SharePoint 2010那种对话框,不包括浏览器的那种模态对话框。
FormContext SPFormContext类型,当前列表表单上下文(用于列表表单页面) 
通常可使用这么几个属性: 
    FormMode:表单类型,New / Edit / Display 
    FieldControlCollection:表单上字段控件的集合
ViewContext SPViewContext类型,当前视图上下文(用于列表视图页面) 
通常可使用这么几个属性: 
    View:SPView对象,当前的视图 
    ViewId:视图的Guid
ContextPageInfo SPContextPageInfo类型,当前页面上下文(用于页面库中的页面) 
通常可使用这么几个属性: 
    ListId:页面所在文档库的Id 
    ItemId:当前页面做为列表条目的Id 
    BasePermissions:当前用户对当前页面的权限 
    IsWebWelcomePage:当前页面是不是网站的首页

 

3、JavaScript中的“ctx”网站

这个在微软的SDK里面是没有说起到的,在全部包含列表视图的Web部件页上,每一个列表视图都会对应一个ctx[blabla]的JavaScript变量,后面那个[blabla]是一个数字,这个数字也是这个变量的ctxId属性。这些ctx变量都放在一个全局JavaScript变量g_ctxDict这个对象中,其key就是变量名字符串,value就是这个变量,所以便利这个全局变量,就能经过JavaScript找到当前页面中的全部视图。ui

ctx变量名义上是一个叫ContextInfo的JavaScript“类”,它包含很是丰富的属性,经常使用的一些以下:spa

属性 说明
ctxId 一个标识此变量的数字,好比185,那么这个变量就是ctx185。使用的时候能够用ctx185或者g_ctxDict[‘ctx185’]来找到这个变量(某些状况下有种更简便的方法,后面再说)。须要注意的是,每次刷新页面的时候,这个标识多是会变的,具体原理我暂时木有去深究。
listBaseType 列表的基础类型,至关于SPList的BaseType属性
listTemplate 列表的模版Id(好比文档库是10一、通知是104),至关于SPList的BaseTemplate属性
listName 列表的Id,不要被变量名混淆了
view 列表视图的Id
listUrlDir 列表的根路径,至关于spList.RootFolder.ServerRelativeUrl
HttpRoot 当前网站的根路径(绝对路径)
SiteTitle 当前网站的标题
ListTitle 列表的标题(这个才是标题,listName不是)
CurrentUserId 当前用户的Id
wpq[*] 渲染视图那个WebPart的ID,好比WPQ2
ListData[*] 这个就厉害了,这个属性指向一个数组,而这个数组就是当前视图显示的那些列表条目,包含各个字段的值,JSON格式。
ListSchema[*] 列表各个字段的定义(包含字段名称、字段类型等等),JSON格式。
BasePermissions[*] 当前用户对这个列表的基本权限,形以下面这种样子: 
{ManageLists: true, ManagePersonalViews: true, OpenItems: true}

后面加[*]的那几个是SharePoint 2013新增的属性。

其实在包含列表视图的页面中,还有一个名字就叫“ctx”的变量,它指向这个页面中最后一个ctx[blabla]变量,所以若是页面中只有一个列表视图的话,就能够直接使用ctx。好比在某个列表视图页面中,你想看一下这个列表模版的Id是多少,就能够直接在浏览器地址栏里输入:javascript:alert(ctx.listTemplate) ,嗯。

ctx变量最主要的做用,就是生成列表项的那个下拉菜单(ECB – Edit Control Block),若是你去翻那个corev4.js的话,就能够看到在建立那个下拉菜单的时候,ctx是做为参数传进去的。若是须要自定义列表项菜单的话,除了使用Feature的方式、或者2010新增的那个经过SPD添加Custom Action的方式,还可使用从2007时代延续下来的JavaScript方式:在页面中添加Custom_AddListMenuItems方法或者Custom_AddDocLibMenuItems方法(具体使用请自行搜索),而ctx就是这两个方法的参数之一。

除此以外,做为列表视图中重要的JavaScript变量,经过在页面中嵌入的一些脚本中使用ctx,还能够完成各类比较邪恶的事情,请你们自行发挥想象。

 

4、JavaScript中的_spPageContextInfo变量

一样是一个没有文档的JavaScript变量,虽然名字和前面提到的某个服务器端类型差很少,可是这个JavaScript变量里面所包含的内容,要比SPContextPageInfo多不少,它包含以下一些经常使用属性:

属性 说明
webServerRelativeUrl 网站的相对服务器路径(“/”开头)
currentLanguage 当前网站的语言LCID
webUIVersion 当前网站的UI风格(2010/2013风格是4,若是母板页是2007风格是3)
pageListId 页面库的列表Id
pageItemId 若是当前页面是在页面库中的话,当前页面做为列表条目的Id
webAbsoluteUrl[*] 网站绝对路径(“http://”或者“https://”开头)
siteAbsoluteUrl[*] 网站集绝对路径(“http://”或者“https://”开头)
layoutsUrl[*] layouts的相对服务器路径(2013其实有两个layouts root路径,一个是15,一个是14)
webTitle[*] 网站标题
webPermMasks[*] 当前用户对当前网站的权限,形如:{High:2147483647,Low:4294967295} 
(由于JavaScript不支持64位整数,因此把高位和地位拆开了)
siteServerRelativeUrl[*] 网站集的相对服务器路径(“/”开头)

后面加[*]的那几个是SharePoint 2013新增的属性。

_spPageContextInfo变量主要的使用场景,就是在JavaScript中获取当前页面的一些基本信息,尤为在发布页面中,会有比较多的使用价值。

 

5、其余JavaScript全局变量

页面中其实还有一些全局的JavaScript变量,也能够获取到当前的一些上下文信息:

 

变量 说明
g_wsaLCID 当前的语言,至关于_spPageContextInfo.currentLanguage
g_wsaSiteTemplateId 当前网站所使用的站点模版,好比“STS#1”表示工做组网站
_spUserId 当前用户的Id,这个JavaScript变量实际上是右上角那个欢迎菜单渲染出来的
_spWebPermMasks 当前用户对当前网站的权限,至关于_spPageContextInfo.webPermMasks
相关文章
相关标签/搜索