爱网站长尾,厦门规划建设局网站,网站做淘宝客有什么要求,网页设计html代码翻译第一部分 服务器端上下文
一、HttpContext
这个……我想就不用再介绍了#xff0c;SharePoint运行在标准的ASP.NET框架下#xff08;2003用的不是标准的ASP.NET 1.1#xff0c;不过这年头还有人用2003么#xff09;#xff0c;所以这个对象的使用和ASP.NET没有任何区别。…第一部分 服务器端上下文
一、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 / ListItemServerRelativeUrlstring / string类型当前条目的显示名称如果是普通列表就是Title字段的值如果是文档库就是不带扩展名的文件名或者是文件夹名称以及Url。FileSPFile类型如果当前条目是一个文件的话这个属性可以直接得到文件对象。 相当于SPContext.Current.ListItem.FileRootFolderUrlstring类型当前视图对应的Url地址。 如果当前列表视图是处于列表的某个子文件夹中可以通过这个属性得到这个文件夹的地址否则的话就是当前列表的根文件夹地址。IsPopUIBoolean类型判断当前页面是否在对话框中。 仅限SharePoint 2010那种对话框不包括浏览器的那种模态对话框。FormContextSPFormContext类型当前列表表单上下文用于列表表单页面 一般可以使用这么几个属性 FormMode表单类型New / Edit / Display FieldControlCollection表单上字段控件的集合ViewContextSPViewContext类型当前视图上下文用于列表视图页面 一般可以使用这么几个属性 ViewSPView对象当前的视图 ViewId视图的GuidContextPageInfoSPContextPageInfo类型当前页面上下文用于页面库中的页面 一般可以使用这么几个属性 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列表视图的IdlistUrlDir列表的根路径相当于spList.RootFolder.ServerRelativeUrlHttpRoot当前网站的根路径绝对路径SiteTitle当前网站的标题ListTitle列表的标题这个才是标题listName不是CurrentUserId当前用户的Idwpq[*]渲染视图那个WebPart的ID比如WPQ2ListData[*]这个就厉害了这个属性指向一个数组而这个数组就是当前视图显示的那些列表条目包含各个字段的值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当前网站的语言LCIDwebUIVersion当前网站的UI风格2010/2013风格是4如果母板页是2007风格是3pageListId页面库的列表IdpageItemId如果当前页面是在页面库中的话当前页面作为列表条目的IdwebAbsoluteUrl[*]网站绝对路径“http://”或者“https://”开头siteAbsoluteUrl[*]网站集绝对路径“http://”或者“https://”开头layoutsUrl[*]layouts的相对服务器路径2013其实有两个layouts root路径一个是15一个是14webTitle[*]网站标题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.currentLanguageg_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(voffice.15)
二、SharePoint 开发
https://docs.microsoft.com/zh-cn/sharepoint/dev/
《SharePoint 漫谈》https://iiunknown.gitbooks.io/sharepoint-ramble-wechat/content/index.html