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

[经验分享] sharepoint 2010 表单样式直接修改DefaultTemplates的ListForm

[复制链接]

尚未签到

发表于 2015-9-28 09:50:18 | 显示全部楼层 |阅读模式
  用smartform其实已经很方便了,无奈总得学几招吧
  1建立一个工程***.EIP.Form,映射CONTROLTEMPLATES文件夹,在这个文件夹下添加新建项:一个sharepoint2010的用户控件:如: GrapeCityDefaultTemplates.ascx 然后把GrapeCityDefaultTemplates.ascx.cs文件删除掉。在ascx页面里的代码也全部删除,直接去看DefaultTemplates.ascx,把上面的引用和ListForm复制过来,改ListForm为***ListForm。
  <%@ 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" %>
  <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" border="0" cellpadding="0" cellspacing="0" width="100%">
   <SharePoint:ChangeContentType runat="server"/>
   <SharePoint:FolderFormFields runat="server"/>
  下面的地方ListFieldIterator为列表项的展示
   <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%"><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>
  用SharePoint Manager 2010 修改表单关联的ListForm改为***ListForm:
  (SharePoint_Config->ContentService->Web Applications->SharePoint - ****端口号->Site Collection->http://*******机器名:****端口号->网站集的名字->Webs->子网站的名字->Lists->列表的名字->ContentTypes->项目->看右边的列表properties->修改NewFormTemplateName,EditFormTemplateName,DisplayFormTemplateName后面的属性名字为***ListForm->通过菜单的File选择保存->iisrest(敲命令行,重启IIS))
  2在 GrapeCityDefaultTemplates.ascx里引用其他用户控件:比如Log,附件,按钮等等。
  在CONTROLTEMPLATES文件夹下建立一个文件夹:GrapeCityUserContrl,在这个文件夹下新建UserContrl(HeadPlacePart.ascx),比如对一些字段(单据编号,申请人)设置为只读,隐藏,换个样子等操作。则可以直接用下面的代码。
  <tr runat="server" id="trCode">
    <td class="ms-formlabel">
        <SharePoint:FieldLabel ID="FieldLabel8" runat="server" FieldName="单据编号">
        </SharePoint:FieldLabel>
    </td>
    <td class="ms-formbody">
        <SharePoint:FormField ID="ffCode" runat="server" FieldName="单据编号" ControlMode="Display">
        </SharePoint:FormField>
    </td>
</tr>
  <tr>
    <td class="ms-formlabel">
        <SharePoint:FieldLabel ID="FieldLabel6" runat="server" FieldName="申请人">
        </SharePoint:FieldLabel>
    </td>
    <td class="ms-formbody">
        <asp:Label runat="server" ID="lbUser"></asp:Label>
        <SharePoint:FormField ID="ffUser" runat="server" FieldName="申请人" ControlMode="Display">
        </SharePoint:FormField>
    </td>
</tr>   
  protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
  if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.New)
            {
  trCode.Visible = false;
  lbUser.Text = SPContext.Current.Web.CurrentUser.Name;
                ffUser.Visible = false;
  }
  if (SPContext.Current.FormContext.FormMode == SPControlMode.Edit)
            {
                lbUser.Visible = false;
  }
          }
  编译通过后引用到GrapeCityDefaultTemplates.ascx的<SharePoint:ListFieldIterator runat="server"/>的上面。
  //引用:
  <%@ Register Src="~/_controltemplates/FormUserControl/HeadPlacePart.ascx" TagName="HeadPlacePart"  TagPrefix="uc1" %>
  //嵌套在GrapeCityDefaultTemplates.ascx里
  <SharePoint:FolderFormFields ID="FolderFormFields1" runat="server" />
//下面的地方放置了usercontrl
  <uc1:HeadPlacePart ID="HeadPlacePart1" runat="server" />
<SharePoint:ListFieldIterator ID="ListFieldIterator1" runat="server" />
  3既然设置了某些字段只读,那么就得让这字段隐藏,我写了个webpart。其实想想在上面的用户控件里也可以做到。
  
  protected override void OnLoad(EventArgs e)
  {
            base.OnLoad(e);           
            SPField sptest = null;
            if (SPContext.Current.List.Fields.ContainsField("Title"))
            {
                sptest = SPContext.Current.Fields.GetFieldByInternalName("Title") as SPField;
                sptest.Hidden = true;
            }
  }
  这样一个自定义的表单就可以了。
  在我的项目里这个表单做了几个事情:
  1在新建的时候是没有单据编号的,所以这个字段隐藏,
  2申请人用了sharepoint自己的创建人改了名字,用一个lable显示了当前登录的用户的域名。隐藏了编辑和查看时候再显示的FormField。
  3新建了申请时间:ApplyTime,当前时间,设置为了只读。
  4新建了单据状态,下拉菜单:草稿;已提交;....直属领导审批通过,等待财务审批;....已完成。只读。
  5这些“只读”的字段可以和新建的字段“无缝拼接”上。
  6重写了上传附件的部分,增加了工作流日志的表格放在最下面:处理人,处理时间,处理结果,处理意见。  
  7重写了保存按钮,增加了提交按钮,发起工作流按钮。
  这样,算是像个样子了。
  后来想想,写UserControl的时候,再丰富些不就是那位写smartform仁兄的思路了吗。所以在中国这个每个页面都要改来改去的国情下,觉得用smartform就挺好的。
DSC0000.png

运维网声明 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-119823-1-1.html 上篇帖子: 常见的Microsoft SharePoint Server 2010的安装问题和解决 下篇帖子: SharePoint 2007 Edit in Datasheet时遇到"The selected cells are read-only."问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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