【转】SharePoint开发中可能用到的各种Context(上下文)

第一部分 服务器端上下文

一、HttpContext

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

 

二、SPContext

从名字就可以看出来,这个是SharePoint自己的上下文对象,它除了封装了HttpContext之外,提供了很多和SharePoint相关的上下文信息。

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

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

属性说明
SiteSPSite类型,次常用到的属性,当前的网站集
WebSPWeb类型,最常用到的属性,当前的网站。 
很多程序都是用SPContext.Current.Web来开头的……
List / ListIdSPList / Guid类型,当前列表。 
不论你是在列表的视图页面上、表单页面上还是设置页面上,都可以通过这个属性取得当前的列表。其实只要Url查询里面有一个有效的List参数,参数的值是列表的Guid就可以。
ListItem / ItemIdSPListItem / Int32类型,当前的列表条目。 
一般用于列表的查看和编辑表单(当然新建表单其实也可以,只不过没有ID),或者用于获取存放在页面库里的当前页面对应的条目。此外,如果当前的List属性有效的话,只要Url查询里面有一个有效的ID参数,就可以使用这个属性得到对应条目。
ListItemVersionSPListItemVersion类型,当前列表条目对应的版本。 
如果是从历史版本查看页面中,查看某个版本的条目时,在那个查看页面,可以用这个属性直接取到相应的版本。
ListItemDisplayName /
ListItemServerRelativeUrl
string / string类型,当前条目的显示名称(如果是普通列表,就是Title字段的值;如果是文档库,就是不带扩展名的文件名;或者是文件夹名称),以及Url。
FileSPFile类型,如果当前条目是一个文件的话,这个属性可以直接得到文件对象。 
相当于SPContext.Current.ListItem.File
RootFolderUrlstring类型,当前视图对应的Url地址。 
如果当前列表视图是处于列表的某个子文件夹中,可以通过这个属性得到这个文件夹的地址;否则的话,就是当前列表的根文件夹地址。
IsPopUIBoolean类型,判断当前页面是否在对话框中。 
仅限SharePoint 2010那种对话框,不包括浏览器的那种模态对话框。
FormContextSPFormContext类型,当前列表表单上下文(用于列表表单页面) 
一般可以使用这么几个属性: 
    FormMode:表单类型,New / Edit / Display 
    FieldControlCollection:表单上字段控件的集合
ViewContextSPViewContext类型,当前视图上下文(用于列表视图页面) 
一般可以使用这么几个属性: 
    View:SPView对象,当前的视图 
    ViewId:视图的Guid
ContextPageInfoSPContextPageInfo类型,当前页面上下文(用于页面库中的页面) 
一般可以使用这么几个属性: 
    ListId:页面所在文档库的Id 
    ItemId:当前页面作为列表条目的Id 
    BasePermissions:当前用户对当前页面的权限 
    IsWebWelcomePage:当前页面是否是网站的首页

第二部分 客户端 上下文

一、JavaScript中的“ctx”

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

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

属性说明
ctxId一个标识此变量的数字,比如185,那么这个变量就是ctx185。使用的时候可以用ctx185或者g_ctxDict[‘ctx185’]来找到这个变量(某些情况下有种更简便的方法,后面再说)。需要注意的是,每次刷新页面的时候,这个标识可能是会变的,具体原理我暂时木有去深究。
listBaseType列表的基础类型,相当于SPList的BaseType属性
listTemplate列表的模版Id(比如文档库是101、通知是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,还可以完成各种比较邪恶的事情,请大家自行发挥想象。

 

二、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新增的属性。

  如果想在JavaScript或者JQuery里使用的话,直接如下方法使用就可以了;

  var siteUrl = _spPageContextInfo.webAbsoluteUrl;

_spPageContextInfo 完整对象如下图,需要什么属性,可以自己获取,然后在代码中使用了。

_spPageContextInfo {
    [functions]: ,
       alertsEnabled: false,
        allowSilverlightPrompt: "True",
        clientServerTimeDelta: -447,
        crossDomainPhotosEnabled: false,
        currentCultureName: "en-US",
        currentLanguage: 2052,
        currentUICultureName: "zh-CN",
        isAppWeb: false,
        isSiteAdmin: true,
        layoutsUrl: "_layouts/15",
        pageItemId: 1,
        pageListId: "{20b11cdc-7008-4c2f-89d6-d7c2ad57cca0}",
        pagePersonalizationScope: 1,
        ProfileUrl: "http://moss:80/my/Person.aspx",
        serverRequestPath: "/SitePages/主页.aspx",
        siteAbsoluteUrl: "http://moss",
        siteClientTag: "13$$16.0.4327.1000",
        siteServerRelativeUrl: "/",
        systemUserKey: "S-1-0-0",
        tenantAppVersion: "0",
        updateFormDigestPageLoaded: [date] Fri Feb 1 15: 59: 00 UTC + 0800 2019,
        userId: 1073741823,
        userLoginName: "SHAREPOINT\system",
        webAbsoluteUrl: "http://moss",
        webLanguage: 2052,
        webLogoUrl: "_layouts/15/images/siteicon.png",
        webPermMasks: {},
        webServerRelativeUrl: "/",
        webTemplate: "1",
        webTitle: "开发网站",
        webUIVersion: 15
}

 

 

 

三、其他JavaScript全局变量

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

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

第三部分 MS的官方参考

一、SharePoint 命名空间

https://docs.microsoft.com/zh-cn/previous-versions/office/sharepoint-csom/ee544361%28v%3doffice.15%29

https://docs.microsoft.com/zh-cn/previous-versions/office/sharepoint-csom/ee544361(v=office.15)

二、SharePoint 开发

https://docs.microsoft.com/zh-cn/sharepoint/dev/

《SharePoint 漫谈》https://iiunknown.gitbooks.io/sharepoint-ramble-wechat/content/index.html

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 字符串前面加u,r,b,f的含义

1、字符串前加 u 例:u"我是含有中文字符组成的字符串。" 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。 2、字符串前加 r 例&a…

【转】aspx,ascx和ashx使用小结

做asp.net开发的对.aspx,.ascx和.ashx都不会陌生。关于它们,网上有很多文章介绍。“纸上得来终觉浅,绝知此事要躬行”,下面自己总结一下做个笔记。1、.aspx Web窗体设计页面。Web窗体页由两部分组成:视觉元素(html、服…

【转】执行Import-SPWeb报错Import-SPWeb : Requested value 'PublishingPages' was not found

Import-SPWeb : Requested value PublishingPages was not found. 【解决办法】 1.找到CPM文件 2.把cpm文件后缀名改为cab,如果有多个cmp需要把所有文件改为cab 3.使用cmd全部解压,然后找到Manifest.xml 4.找到“PublishingPages”,替换为…

【Gym - 101775J】Straight Master(差分,思维)

题干: A straight is a poker hand containing five cards of sequential rank, not necessarily to be the same suit. For example, a hand containing 7 club, 6 spade, 5 spade, 4 heart and 3 diamond forms a straight. In this problem, we extend the defi…

【转】Azure DevOps —— Azure Board 之 长篇故事、特性、用户情景(故事)的用法应用场景

前提 我以前在之前的文章里大概介绍了 Azure Board 的基本使用,可以回看《Azure Board 的基本使用》。如果你想使用 Azure Board 来安排工作的话,请提前了解《敏捷开发》的相关知识。 作者将使用 “Agile” 作为项目的模板,不明白的先阅读《…

【VIJOS - P1037】搭建双塔(dp)

题干: 描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难。为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔。 Mr. F有N块水晶,每块水晶有一个高度&#xff0…

【转】10分钟精通SharePoint - VS开发模板

Visual Studio是SharePoint开发的最锋利的利器(没有之一哦),是必不可少的开发工具。VS一直为SharePoint开发保驾护航。 提供了以下功能开发模板: WebPart :服务器端控件 SharePoint中最常用的展示控件之一&#xff…

【Tyvj - 1305】最大子序和(单调队列优化dp)

题干: 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大。 例如 1,-3,5,1,-2,3 当m4时,S51-237 当m2或m3时,S516 输入格式 第一行两个数n,m 第二行有n个数&…

【转】SharePoint 2010 用户自定义编辑Meta标签的OOB方法

今天遇到一个小问题&#xff0c;客户想要动态定制页面的<Head>标签里Meta, 而且需要使用OOB. 考虑了一下&#xff0c;Meta 标签肯定是用来让Server Crawl的, 那JS的方法首先排除&#xff0c;那就只能用服务器控件了, 在做了一些测试后&#xff0c;Field Control 可以帮我…

【计蒜客 - 程序设计竞赛】商业信息共享(Tarjan缩点)

题干&#xff1a; 商业信息共享 有 N 个公司&#xff0c;从每个公司都能单向地向另外一个公司分享最新商业信息&#xff0c;因为他们之间有着某种合作&#xff0c;你需要解决两个问题&#xff1a; 现在有一个最新的商业信息&#xff0c;至少需要告诉多少个公司&#xff0c;使…

【转】SharePoint 编程指南

网站相关的对象模型 作为一个应用原型系统&#xff0c;SharePoint提供了很多强大的应用及管理功能&#xff0c;但是&#xff0c;在实际的应用中&#xff0c;这些原有的功能很难满足用户的需求。因此&#xff0c;SharePoint也提供了一套非常完整的对象模型作为底层接口&#xf…

Mr. Kitayuta‘s Technology CodeForces - 505D(并查集+拓扑排序或dfs找环) 题解

题目 Shuseki Kingdom is the world’s leading nation for innovation and technology. There are n cities in the kingdom, numbered from 1 to n. Thanks to Mr. Kitayuta’s research, it has finally become possible to construct teleportation pipes between two ci…

二进制枚举子集 CS Maxor 或运算,DP(SOS)

https://blog.csdn.net/noone0/article/details/78289517 目前没有题目链接。 题意:长度为n的序列a,选出两个元素,其或运算结果的最大值为多少,并求出a[i]|a[j]mx的方案数? n<1e5,0<a[i]<2^17,m<17. 假如最大值为mx,若x|ymx 则x和y肯定为mx的子集.否则或运算结果…

【转】SharePoint 中的编程模型

可以通过多种方式开发针对 SharePoint 平台的应用程序。可以基于以下各项将这些应用程序划分下列组中&#xff1a;用于创建应用程序的工具、用于开发应用程序的编程模型、打包和部署应用程序的方法、将应用程序投入市场的方式以及运行应用程序的设备。 SharePoint 框架 ShareP…

【转】SharePoint 术语表

术语表 术语定义访问控制条目 安全对象的自由访问控制列表 (DACL) 或对象的系统访问控制列表 (SACL) 中的一项。在 DACL 中&#xff0c;该项向用户或组授予权限或者拒绝向用户或组授予权限。在 SACL 中&#xff0c;该项指定审核特定用户或组的哪些安全事件或者控制对象的 Wind…

【HDU - 5890】Eighty seven(bitset优化背包)

题干&#xff1a; Mr. Fib is a mathematics teacher of a primary school. In the next lesson, he is planning to teach children how to add numbers up. Before the class, he will prepare NN cards with numbers. The number on the ii-th card is aiai. In class, eac…

【HDU - 1937 】Finding Seats(二维前缀和+尺取法)

题干&#xff1a; A group of K friends is going to see a movie. However, they are too late to get good tickets, so they are looking for a good way to sit all nearby. Since they are all science students, they decided to come up with an optimization problem …

【POJ - 1459】Power Network(网络流最大流,建图)

题干&#xff1a; A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied with an amount s(u) > 0 of power, may produce an amount 0 < p(u) < p max(u) of power, may …

【转】React Vue MVC MVVM MVP

首先&#xff0c;在谈这个话题之前&#xff0c; 我们有必要了解一下库和框架的区别。 我们先来看react官网以及vue官网对他们的定位&#xff1a; react: vue: react我们不说了&#xff0c;官网上明明白白说了&#xff0c;人家是一个library&#xff0c;用于构建用户界面。 v…

**【POJ - 3122】 Pie(二分寻值)

题干&#xff1a; My birthday is coming up and traditionally Im serving pie. Not just one pie, no, I have a number N of them, of various tastes and of various sizes. F of my friends are coming to my party and each of them gets a piece of pie. This should b…