Sharepoint学习笔记—习题系列--70-573习题解析 -(Q111-Q114)

Question 111
You create a custom page layout that contains the following code segment. (Line numbers are included for reference only.)
01 Please enter a number:
02 <SharePointWebControls:InputFormTextBox ID="NumberTextBox" runat="server"/>
03
You need to prevent the page from being saved if NumberTextBox is empty.
Which code segment should you add at line 03?
A. <script type="javascript">if(document.getElementById('NumberTextBox').value = '') return false;</script>
B. <script type="javascript">if(document.getElementById('NumberTextBox').value = '') return true;</script>
C. <SharePointWebControls:InputFormCompareValidator ID="NumberValidator" runat="server" ControlToValidate="NumberTextBox"/>
D. <SharePointWebControls:InputFormRequiredFieldValidator ID="NumberValidator" runat="server" ControlToValidate="NumberTextBox"/>

解析:
  本题题意是指在一个页面上有一个输入文本框控件,要求你实现此输入文本框必须有值才能提交页面。
  根据题意自然想到校验控件,于是马上定位到选项B.C。如果对校验控件比较熟悉的马上进一步定位到选项D。因为选项C一般用于两个输入框,并校验其输入值的大小逻辑的。而选项C则是要求输入框必须录入值的。
  事实上,Sharepoint还提供了如下校验控件:
.InputFormRangeValidator: 判断录入值是否在一定的合理范围内。
.InputFormRegularExpressionValidator :通过正则表达式来校验录入的数据。
.InputFormCheckBoxListValidator :类似于InputFormRequiredFieldValidator,只不过针对的是CheckBox,要求必须作出选择。
.InputFormCustomValidator: 由用户自定义校验的逻辑,当然实现更灵活,更强大。
   至于选项A.B,都是试图通过常规的ASP.NET的方式去获取NumberTextBox控件,很显然会失败,因为在Sharepoint中,这些控件的ID绝不是你设计时的那样,Sharepoint加入了它自己的管理规范,你可以自己在呈现的页面上使用IE Developer Tool 来查看Sharepoint的控件命名就清楚了。
所以本题目正确选项应该是D
参考:
 http://karinebosch.wordpress.com/sharepoint-controls/sharepoint-validation-controls/


Question 112
You create a custom page layout that contains code-behind.
You need to identify whether the page is in Edit mode or in Display mode.
What should you use?
A. SPContext.Current.FormContext
B. SPContext.Current.ListItem.Properties
C. this.Form
D. this.Web.ASPXPageIndexMode

解析:
 本题是判断一个用户定义页面是呈编辑状态还是显示状态。
 分别分析备选项:
 选项A涉及到FormContext类
FormContext类有一个很好的方法:
1. SetFormMode 此方法用来设置当前的SPControlMode值如下
Invalid 控件处于无效状态
Display 控件处于显示状态
Edit     控件处于编辑状态
New     控件处于创建状态

FormContext 类有两个有用的属性
1. FieldControlCollection – 获取Field控件集
2. FormMode – 获取当前的SPControlMode值(可用来判断是显示模式还是编辑模式)
  所以选项A应该是本题答案。
再来看其它选项:
选项B. 是获取当前ListItem对象的属性集,与显示模式无关。
选项C. this.Form 获取当前Form
选项D. this.Web.ASPXPageIndexMode 获取或设置被WebSite使用的.aspx页的页索引状态值[是枚举值],它有3个值:
  1.Always:  如果值为1,则表示页面索引(page indexing)功能可以使用。
2.Automatic  如果值为0,则表示页面索引(page indexing)功能可以自动启用。
3.Never 如果值为2,则表示页面索引(page indexing)功能不能启用。
 
所以本题目正确选项应该是A
参考:
SPFormContext.FormMode Property
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spformcontext_properties.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.webcontrols.spcontrolmode.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spcontext_members.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.webaspxpageindexmode.aspx


Question 113
You create a custom field type and a CustomFieldControl.ascx user control.
You need to write the code-behind of the CustomFieldControl.acsx user control.
Which object should you override?
A. BaseFieldControl
B. SPFieldCalculated
C. SPFieldText
D. WebPart

解析:
  此题涉及到SharePoint 列表数据模型中的自定义字段类型的创建。
在 SharePoint Foundation 中存储业务信息时,您可能会遇到以下情况:重要的业务数据与 SharePoint Foundation 中包含的字段类型不相符,或者您希望进一步自定义这些常规字段类型。SharePoint Foundation 使您能够创建自定义字段类型。这些自定义字段可以包括自定义数据有效性和自定义字段呈现。当用户设置基于您的自定义字段类型的属性变量和新建列时,您还可以自定义处理和呈现该自定义字段类型的可变属性的方式。
下面我们大致了解一下如何创建自定义字段类型(即步骤):
1. 创建字段类型定义
字段类型定义是一个 XML 文件,其中包含 Microsoft SharePoint Foundation 对字段类型进行注册和正确呈现字段所需的信息。最重要的是,其中包含有关含有已编译字段类型的程序集的信息。
2. 创建字段类
字段类是一种类,其实例可以表示基于您的自定义字段类型的特殊字段。此类必须继承自 SPField 或 SharePoint Foundation 中派生自它的某一个类。
此类还可以包含字段类型的自定义数据验证。
3.(可选)创建自定义 XSLT 样式表
使用 XSLT 样式表是 SharePoint Foundation 在列表视图中呈现字段的标准方式。默认情况下,SharePoint Foundation 的内置样式表只以纯文本形式呈现字段的值。如果要在列表视图中显示各种不同的呈现形式,则系统呈现自定义字段所需的一个基本要素是自定义 XSLT 样式表。您可以根据 fldtypes_*.xsl 模式对其命名,并将其部署到 %ProgramFiles%Common FilesMicrosoft Sharedweb server extensions14TEMPLATELAYOUTSXSL。自定义样式表优先于默认样式表。
4. 创建呈现控件类【即本题所实施的步骤】
可以将呈现控件类与呈现模板一起使用,以便在“新建”模式、“编辑”模式或“显示”模式中呈现您的字段。此类必须从 BaseFieldControl 或从它派生的 SharePoint Foundation 中的类之一继承。可将此类编译为与字段类相同的程序集。
验证逻辑由字段呈现控件的 Validate、IsValid 和 ErrorMessage 成员以及基础字段类型的 GetValidatedString 方法实现。(CreateChildControls 可能会调用 Validate。)
5. 创建一个或多个呈现模板
每个字段呈现控件至少具有一个与之关联的字段呈现模板,以便在“新建”、“编辑”或“显示”模式中呈现字段。通过让字段呈现控件在它的一个属性中包含对字段呈现模板 ID 的引用,即可实现这种关联。在呈现时,SharePoint Foundation 通过搜索 %ProgramFiles%Common FilesMicrosoft Sharedweb server extensions14TEMPLATECONTROLTEMPLATES 中 .ascx 文件中声明的所有呈现模板的 ID 来查找所需模板(Web 应用程序启动时将加载所有这些模板)。 
6.(可选)创建字段值类型
如果要创建一个自定义字段类,该字段类要求字段数据采用特殊数据结构,则可以创建一个值类(或结构)来包含您的字段数据。
7.(可选)创建编辑控件
所有字段类型都需具有名称、数据类型、说明和其他常见属性;不过许多字段类型还具有仅与该特定类型的字段关联的属性。当用户创建基于字段类型的新列时,他们在用户界面 (UI) 中设置这些变量属性。通常,字段类型定义中的元素可确定如何呈现这些属性设置控件。但有时需要特殊编辑控件。此类控件在用户控件中进行定义;用户控件即 .ascx 文件,它通常有一个包含其逻辑的代码隐藏文件。如果需要执行自定义功能(例如,复杂的计算逻辑、从数据源中查找值或对用户在配置新列时可能选择的值进行自定义数据验证),则建议创建特殊编辑控件。
8. 部署元素
 由上面第4步的标注我们就知道了选项A是本题的正解。
 再来看其它选项:
选项B. SPFieldCalculated 代表计算字段。它不是派生自BaseFieldControl类,所以根据上面的步骤4中的描述,应该排除。
选项C. SPFieldText 代表单行文本字段,它也不是派生自BaseFieldControl类,所以根据上面的步骤4中的描述,应该排除。
选项D. WebPart 代表Web控件。
所以本题目正确选项应该是A
参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.basefieldcontrol.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.spfieldcalculated.aspx
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfieldtext.aspx


Question 114
You create a custom page layout that has a field control named Field1.
You need to ensure that Field1 is only visible when users modify the contents of the page.
Which parent control should you use for Field1?
A. EditModePanel
 B. PageLayoutValidator
C. PublishingContext
D. ValidatorAggregator

解析:
本题涉及到控制页面布局(Page Layout)中的字段控件(Field Control)的显示,本题只想让此字段控件在我们编辑页面布局时显示出来。
  分别分析各选项:
选项A. EditModePanel:当一个页面在浏览器中呈现时,它有两种显示模式:编辑(Edit)模式或显示(Display)模式。阅览者看到的只能是显示模式,而页面的作者或修改者则还可以看到编辑模式。你可以使用EditModePanel 控件来结合页面的当前显示模式以控制其它控件的显示与否。它就像一个容器,你可以把字段控件放在里面,通过控制此容器的相关属性来控制其内容的呈现。网上最常用的做法是当页面处于Display模式时隐藏某些控件,而处于Edit模式时则呈现某些控件,但实际上它的用法不只这种,你可以查问相关文档深入研究。
选项B. PageLayoutValidator:用来检验一个页面布局是否在Master Page Gallery中存在。
选项C. PublishingContext:用于在Publishing页面上创建一个录入字段,此控件用在页面发布的编辑模式。
选项D. ValidatorAggregator:代表一组针对某控件的校验器(Validator) 。
所以本题目正确选项应该是A


参考:
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.publishing.webcontrols.editmodepanel.aspx
http://msdn.microsoft.com/zh-cn/library/ms517332.aspx
http://msdn.microsoft.com/zh-cn/library/microsoft.sharepoint.publishing.webcontrols.pagelayoutvalidator(v=office.14).aspx

原文地址:https://www.cnblogs.com/wsdj-ITtech/p/3164253.html