设为首页 收藏本站
查看: 850|回复: 0

[经验分享] Sharepoint学习笔记—习题系列--70-573习题解析

[复制链接]

尚未签到

发表于 2015-9-27 09:25:07 | 显示全部楼层 |阅读模式
  Question 97
You have a list named Projects that contains a column named ClassificationMetadata.
You need to create a Web Part that updates the ClassificationMetadata value to NA for each item in the Projects list.
You write the following code segment. (Line numbers are included for reference only.)
01 foreach (SPListItem currentItem in SPContext.Current.Web.Lists["Projects"].Items)
02 {
03
04 }
Which code segment should you add at line 03?
A. currentItem["ClassificationMetadata"] = "NA";
B. currentItem.Fields["ClassificationMetadata"].DefaultFormula = "NA";
C. currentItem.Fields["ClassificationMetadata"].DefaultValue = "NA";
D. currentItem["Value"] = "ClassificationMetadata/NA";
  解析:
  本题想要达到的目的是通过代码去更新Projects列表中的ClassificationMetadata字段的值。采用的是遍历所有SPListItem的方法。对字段值的操作是基于获取的SPListItem对象进行的。
  直接分析各选项:
A. currentItem["ClassificationMetadata"] = "NA";//本题答案。修改Item的” ClassificationMetadata”字段的值为”NA”
B. currentItem.Fields["ClassificationMetadata"].DefaultFormula = "NA";//获取名为"ClassificationMetadata"的字段,并设置此字段的默认公式,此用法只适用于计算字段。
C. currentItem.Fields["ClassificationMetadata"].DefaultValue = "NA"; //获取名为"ClassificationMetadata"的字段,并设置此字段的默认值为”NA”。也就是说在新添加一个Item时,如果不给此字段赋值,则默认值为”NA”。
D. currentItem["Value"] = "ClassificationMetadata/NA"; //设置Item的”Value”字段的值为” ClassificationMetadata/NA”
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfield.aspx
  Question 98
You create a Web Part that queries a list.
The Web Part contains the following code segment. (Line numbers are included for reference only.)
01 protected override void Render(HtmlTextWriter writer)
02 {
03   SPUserToken spInToken = GetTheContext(SPContext.Current.Site);
04   using (SPSite aSite = new SPSite(curSiteCtx.ID, spInToken))
05   {
06     
07   }
08 }
09 private SPUserToken GetTheContext(SPSite nWeb)
10 {
11   nWeb.CatchAccessDeniedException = false;
12   SPUserToken spToken = null;
13   try
14   {
15     spToken = nWeb.SystemAccount.UserToken;
16   }
17   catch (UnauthorizedAccessException generatedExceptionName)
18   {
19     
20   }
21   return spToken;
22 }
You need to ensure that users without permissions to the list can view the contents of the list from the Web Part.
Which code segment should you add at line 19?
A. SPSecurity.RunWithElevatedPrivileges(delegate()
{
  using (SPSite eSite = new SPSite(nWeb.ID))
  {
    spToken = nWeb.SystemAccount.UserToken;
  }
}
B. SPSecurity.RunWithElevatedPrivileges(delegate()
{
  using (SPSite eSite = new SPSite(nWeb.ID))
  {
    spToken = SPContext.Current.Web.CurrentUser.UserToken;
  }
}
C. spToken = nWeb.RootWeb.AllUsers[SPContext.Current.Web.Name].UserToken; D. spToken = nWeb.RootWeb.AllUsers[WindowsIdentity.GetCurrent().Name].UserToken;
  解析:
本题想要实现在一个WebPart的后台代码中让没有访问权限的用户也能看到某列表的内容。
很显然属于提升权限的题目,也就自然关联到RunWithElevatedPrivileges。
选项A,B都使用了RunWithElevatedPrivileges方法,但是注意看



09 private SPUserToken GetTheContext(SPSite nWeb)
10 {
11   nWeb.CatchAccessDeniedException = false;
12   SPUserToken spToken = null;
13   try
14   {
15     spToken = nWeb.SystemAccount.UserToken;
16   }
17   catch (UnauthorizedAccessException generatedExceptionName)
18   {
19     
20   }
21   return spToken;
22 }
  此段代码是要返回SPUserToken,此SPUserToken决定了操作的权限。选项B返回的当前用户的SPUserToken,显然属于白忙一场。选项A获取了SystemAccount的SPUserToken真正达到了目的。所以选项A是本题的答案。
选项C. spToken = nWeb.RootWeb.AllUsers[SPContext.Current.Web.Name].UserToken; //取得的是用户名为当前Web的Name的用户的SPUserToken,逻辑有点离谱了。
  选项D. spToken = nWeb.RootWeb.AllUsers[WindowsIdentity.GetCurrent().Name].UserToken;
//取得的是用户名为当前 Windows 用户的 WindowsIdentity 对象的Name的SPUserToken,显然也不正确。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/zh-cn/library/sfs49sw0.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb_members.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsecurity.runwithelevatedprivileges.aspx
  
  Question 99
You create a Web Part that programmatically updates the description of the current SharePoint site.
The Web Part contains the following code segment. (Line numbers are included for reference only.)
01 SPSecurity.RunWithElevatedPrivileges(delegate()
02 {
03   SPSite currSite = SPContext.Current.Site;
04   SPWeb currWeb = SPContext.Current.Web;
05   using (SPSite eSite = new SPSite(currSite.ID))
06   {
07     using (SPWeb eWeb = eSite.OpenWeb(currWeb.ID))
08     {
09       eWeb.AllowUnsafeUpdates = true;
10       currWeb.Description = "Test";
11       currWeb.Update();
12       eWeb.AllowUnsafeUpdates = false;
13     }
14   }
15 });
Users report that they receive an Access Denied error message when they use the Web Part. You need to ensure that all users can use the Web Part to update the description of the current site.
What should you do?
A. Remove lines 09 and 12.
B. Remove lines 10 and 11.
C. Change lines 10 and 11 to use the eWeb variable.
D. Change lines 09 and 12 to use the currWeb variable.
  解析:
  本题是想要在一段代码实现更新当前Sharepoint Site的描述信息,结果收到了”Access Denied”报错。
  原因很简单,我们在如下代码



07     using (SPWeb eWeb = eSite.OpenWeb(currWeb.ID))
08     {
09       eWeb.AllowUnsafeUpdates = true;
10       currWeb.Description = "Test";
11       currWeb.Update();
12       eWeb.AllowUnsafeUpdates = false;
13     }
  中操作的都是eWeb对象,并在第09行打开了AllowUnsafeUpdates设置,以允许对eWeb对象的更新保存到数据库,但在第10,11行却跳回到了currWeb对象,所以选项C是正确的纠错方法。
有人会问,那么我直接使用currWeb来进行更新为什么不可呢?
我们知道RunWithElevatedPrivileges方法通过接受一个委托(delegate)参数, 来添加一个需权限提升后执行的方法的引用。 当我们通过调用RunWithElevatedPrivileges提升在SharePoint上下文中的权限后,我们必须接着创建一个SPSite和SPWeb类的实例。切记不能通过Microsoft.SharePoint.SPContext.Current属性来获取这些对象。因为这些对象都是通过当前用户的安全上下文创建的。本例题干部分的代码展示了一种很好的方法来在权限提升后得到这些对象。另外这样写还可以保证在Using语句外这些对象可以通过调用Dispose方法很好的被释放。
  所以本题目正确选项应该是C
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.allowunsafeupdates.aspx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-119327-1-1.html 上篇帖子: Sharepoint 列表 附件 小功能 下篇帖子: SharePoint 2010
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表