sharepoint 自定义表单开发

InfoPath的自定义表单,是轻松的事情,但是因为InfoPath表单的部署带来很多不便,所以在项目中,我们用到的是自定义表单的开发。

首先,我们了解一下sharepoint的表单工作原理

每个列表类型通常都有一组设置列表时设置的显示、编辑和新建表单 ASPX 页(DispForm.aspx、EditForm.aspx 和 NewForm.aspx)。这些 ASPX 页设置到“内容空间”中。换句话说,它们不位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS 中,且不通过 /_layouts 虚拟目录操作。对于文档库,这些页在列表中称为 forms 的隐藏子文件夹内设置。对于其他 SharePoint 列表,这些页在列表根文件夹下设置。这些 ASPX 页中的任一页都包含一个用于呈现表单的Microsoft.SharePoint.WebPartPages.ListFormWebPart 对象。

Microsoft SharePoint Foundation 2010 使用 Microsoft ASP.NET 显示表单。每个表单逻辑上由一组控件(例如,工具栏控件)组成。一个称为迭代器 (Microsoft.SharePoint.WebControls.ListFieldIterator) 的特殊控件用于循环访问列表字段集合,并将每个字段添加到表单中。

通过自定义表单模板,可以修改列表项表单的呈现方式。在列表定义的 Schema.xml 文件中,您可以通过Template 属性为每个列表类型指定用于呈现表单的控件模板的 ID。您必须为每个要在其中实现自定义模板的所有表单指定 Template 属性,自定义模板可以是同一模板,也可以是不同的模板。如果不为表单指定自定义模板,则 SharePoint Foundation 默认情况下将实现默认模板。自定义控件模板必须在位于 %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES 下的 .ascx 文件中定义。

常见的表单和字段控件

 

如何开发自定表单模板:

    1. 启动 Microsoft Visual Studio 2012
    2. 在“文件”菜单上,指向“新建”,然后单击“项目”
    3. 在“项目类型”的“Visual Basic”或“C#”下,选择“空白 SharePoint 项目”
    4. 键入 UserDefinitionFormTemplateSolution作为项目的名称。单击“确定”。
    5. 在“SharePoint 自定义向导”中选择“部署为场解决方案”。单击“完成”。
    6. 在“解决方案资源管理器”中,右键单击“UserDefinitionFormTemplateSolution”项目,依次选择“添加”和“新建项”。
    7. 在“添加新项”对话框中,选择“列表”模板,并键入 “OrderList” 作为名称。单击“添加”。
    8. 选中“默认(自定义列表)”选项,然后单击“完成”。
    9. 接下来,打开已创建的“Schema.xml”文件。
    10. 在 Fields元素中,添加Field的定义
    11. <Field ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}"
                   Type="Text"
                   Name="Title"
                   DisplayName="名称"
                   Indexed="TRUE"
                   Required="FALSE"
                   AllowDuplicateValues="FALSE"
                   EnforceUniqueValues="TRUE"  />
            <Field ID="{F21741F5-0B59-48F1-A4CD-2BA84D26CF34}"
                   Name="draftPeople"
                   StaticName="draftPeople"
                   Required="FALSE"
                   Type="Text"
                   DisplayName="拟稿人">
            </Field>
       
    12. 在ContenTypes的元素中,删除已有的ContentType的应用,添加新的ContentType的定义
    13. <ContentType ID="0x0100af3f58d8ef214b2ebcad2089e721da9a" Name="测试">
              <FieldRefs>
                <FieldRef ID="fa564e0f-0c70-4ab9-b863-0177e6ddd247" Name="Title" />
                <FieldRef ID="F21741F5-0B59-48F1-A4CD-2BA84D26CF34" Name="draftPeople"  />
                <FieldRef ID="F70053CF-3FBF-4F1E-B5D6-C9742D1EF005" Name="Urgent" />
                <FieldRef ID="F1817829-6C7E-41E9-ACAD-8BB8AD28EEE1" Name="Category"  />
                <FieldRef ID="4E974D9A-DEE4-44BE-B035-BF705E79F1C1" Name="PUnit"  />
                <FieldRef ID="13464616-322F-47DA-AC6D-30992AFA66DC" Name="Documents"  />
                <FieldRef ID="FB4F8F35-88F0-404D-AA61-D20F0CA51FE4" Name="SecurityClassification"  />
                <FieldRef ID="B4D5CDE9-D403-41E3-940A-EE6CA63A2188" Name="MainUnits"  />
                <FieldRef ID="B18E9ACC-DD65-49C5-ABD3-9FCC518237F1" Name="FilesNumber" />
                <FieldRef ID="EBCD850E-293D-49FA-88A3-B363FF28520C" Name="FileGUID" />
              </FieldRefs
      </ContentType>
    14. 在“解决方案资源管理器”中,右键单击“UserDefinitionFormTemplateSolution”项目,依次选择“添加”和“新建项”
    15. 在“添加新项”对话框中,选择”用户控件”模版,键入” UserTemplateDefinition”作为用户控件名称,点击确定。
    16. 将UserTemplateDefinition 移动至ControlTemplates的目录下,删除UserDefinitionFormTemplateSolution的文件夹。
    17. 删除UserTemplateDefinition.cs的文件,只保留ascx文件。
    18. 打开%ProgramFiles%\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\CONTROLTEMPLATES下的DefaultTemplates.ascx的文件。
    19. 在DefaultTemplates.ascx的文件中,复制如下行
    20. <%@ Control Language="C#"   AutoEventWireup="false" %>
      <%@Assembly Name="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
      <%@Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.WebControls"%>
      <%@Register TagPrefix="ApplicationPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.ApplicationPages.WebControls"%>
      <%@Register TagPrefix="SPHttpUtility" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.Utilities"%>
      <%@ Register TagPrefix="wssuc" TagName="ToolBar" src="~/_controltemplates/ToolBar.ascx" %>
      <%@ Register TagPrefix="wssuc" TagName="ToolBarButton" src="~/_controltemplates/ToolBarButton.ascx" %>
    21. 打开UserTemplateDefinition.ascx文件,将复制内容替换UserTemplateDefinition.ascx中所有内容
    22. 在DefaultTemplates.ascx的文件中,找到ID为ListForm的SharePoint:RenderingTemplate元素,复制SharePoint:RenderingTemplate元素的内容,粘贴到UserTemplateDefinition.ascx文件中
    23. <SharePoint:RenderingTemplate id="ListForm" runat="server">
          <Template>
              <span id='part1'>
                  <SharePoint:InformationBar runat="server"/>
                  <div id="listFormToolBarTop">
                  <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbltop" RightButtonSeparator="&amp;#160;" runat="server">
                          <Template_RightButtons>
                              <SharePoint:NextPageButton runat="server"/>
                              <SharePoint:SaveButton runat="server"/>
                              <SharePoint:GoBackButton runat="server"/>
                          </Template_RightButtons>
                  </wssuc:ToolBar>
                  </div>
                  <SharePoint:FormToolBar runat="server"/>
                  <SharePoint:ItemValidationFailedMessage runat="server"/>
                  <table class="ms-formtable" style="margin-top: 8px;" border="0" cellpadding="0" cellspacing="0" width="100%">
                  <SharePoint:ChangeContentType runat="server"/>
                  <SharePoint:FolderFormFields runat="server"/>
                  <SharePoint:ListFieldIterator runat="server"/>
                  <SharePoint:ApprovalStatus runat="server"/>
                  <SharePoint:FormComponent TemplateName="AttachmentRows" runat="server"/>
                  </table>
                  <table cellpadding="0" cellspacing="0" width="100%"><tr><td class="ms-formline"><img src="/_layouts/images/blank.gif" width='1' height='1' alt="" /></td></tr></table>
                  <table cellpadding="0" cellspacing="0" width="100%" style="padding-top: 7px"><tr><td width="100%">
                  <SharePoint:ItemHiddenVersion runat="server"/>
                  <SharePoint:ParentInformationField runat="server"/>
                  <SharePoint:InitContentType runat="server"/>
                  <wssuc:ToolBar CssClass="ms-formtoolbar" id="toolBarTbl" RightButtonSeparator="&amp;#160;" runat="server">
                          <Template_Buttons>
                              <SharePoint:CreatedModifiedInfo runat="server"/>
                          </Template_Buttons>
                          <Template_RightButtons>
                              <SharePoint:SaveButton runat="server"/>
                              <SharePoint:GoBackButton runat="server"/>
                          </Template_RightButtons>
                  </wssuc:ToolBar>
                  </td></tr></table>
              </span>
              <SharePoint:AttachmentUpload runat="server"/>
          </Template>
      </SharePoint:RenderingTemplate>
    24. 在UserTemplateDefinition.ascx的文件中,把SharePoint:RenderingTemplate中ID修改为UserDifinitionDisplayForm
    25. 在UserTemplateDefinition.ascx的文件中,重新复制一个SharePoint:RenderingTemplate的元素,将ID修改为 UserDifinitionEditForm
    26. 打开列表定义中的schema.xml文件,找到Forms的元素,在子元素Type=Display的form元素中,添加Template="UserDifinitionDisplayForm"
    27. 在子元素Type= EditForm ,和Type= NewForm的form元素中,添加Template=" UserDifinitionEditForm"
    28. <Forms>
            <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" Template="UserDifinitionDisplayForm" UseLegacyForm="true" />
            <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" Template="UserDifinitionEditForm" />
            <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
          </Forms>
    29. 在“解决方案资源管理器”中,右键单击“UserDefinitionFormTemplateSolution”项目,依次选择“添加”和“新建项”。
    30. 在“添加新项”对话框中,选择”用户控件”模版,键入” ListDisplayFormControl”作为用户控件名称,点击确定。
    31. 重复上述步骤,添加名为” ListEditFormControl”的用户控件。
    32. 在ListDisplayFormControl和ListEditFormControl用户控件中,可以自行添加自己的样式和布局
    33. 用<SharePoint:FieldLabel> 控件来显示字段的显示名称,将字段的定义名称绑定到控件的FieldName属性
    34. 用<SharePoint:FormField> 控件来显示字段的值,将字段的定义名称帮顶到控件的FieldName的属性
    35. <table id="main">
                  <caption>
                      拟印发文</caption>
                  <tr>
                      <th id="divline" colspan="4"></th>
                  </tr>
                  <tr>
                      <th class="red">
                          <SharePoint:FieldLabel ID="lblTitle" runat="server" FieldName="Title" />
                      </th>
                      <td>
                          <SharePoint:FormField ID="txtTitle" runat="server" FieldName="Title" />
                      </td>
      <th>
                          <SharePoint:FieldLabel ID="lbDraftPeople" runat="server" FieldName="draftPeople" />
                      </th>
                      <td>
                          <SharePoint:FormField ID="txtDraftPeople" runat="server" FieldName="draftPeople" />
                      </td>
      </tr> 
      </table>

       在这里我们就克自助定义表单的显示。

    36. 打开UserTemplateDefinition.ascx文件,在该用户控件中,注册ListEditFormControl和ListEditFormControl
    37. <%@ Register TagPrefix="uc" TagName="Edit" Src="~/_controltemplates/15/FormControl/ListEditFormControl.ascx" %>
      <%@ Register TagPrefix="uc" TagName="Display" Src="~/_controltemplates/15/FormControl/ListDisplayFormControl.ascx" %>
    38. 在ID为UserDifinitionDisplayForm的SharePoint:RenderingTemplate元素中找到<SharePoint:ListFieldIterator>控件,将该控件删除,添加自定义用户控件<uc:Display runat="server" />
    39. <%--<SharePoint:ListFieldIterator ID="ListFieldIterator1" runat="server" />--%>
                                  <uc:Display runat="server" />
    40. 在ID为UserDifinitionEditForm的SharePoint:RenderingTemplate元素中找到<SharePoint:ListFieldIterator>控件,将该控件删除,添加自定义用户控件<uc:Edit runat="server" />
    41. <%--<SharePoint:ListFieldIterator ID="ListFieldIterator2" runat="server" />--%>
                                  <uc:Edit runat="server" />

转载于:https://www.cnblogs.com/anglexxyy/articles/3117347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值