zoukankan      html  css  js  c++  java
  • MOSS字段编辑权限控制方案(3)重写表单字段呈现逻辑

    重写表单字段呈现逻辑,添加编辑权限控制----这是这个方案实现的核心了。

    wss有一套模板的机制,系统的一些控件,包括一些webpart,如果UI比较复杂,都会采用模板来实现,详细请参考:
    WSS3.0开发--页面定制(1)--修改列表的表单页面

    列表的表单页面,包括查看dispform.aspx,editform.aspx,newform.aspx都采用了一个模板:ListForm,
    这个模板嵌入了一个控件--Microsoft.SharePoint.WebControls.ListFieldIterator,这个控件枚举列表的所有字段,生成编辑页面。
    那么我们的工作核心就是重写这个ListFieldIterator控件。

    通过Reflector查看ListFieldIterator的代码,幸运的是,它不是internal的,那么我们可以继承这个控件实现新的逻辑。不过不幸得是,
    ListFieldIterator内部引用了TemplateContainer控件,这个控件的某些重要属性是internal的,我们的代码没法直接设置,
    不过我们还有一招:采用反射。

    下面是ListFieldIterator原始的CreateControl方法代码:
    [SharePointPermission(SecurityAction.Demand, ObjectModel=true)]
    protected override void CreateChildControls()
    {
        
    this.Controls.Clear();
        
    if (this.ControlTemplate == null)
        
    {
            
    throw new ArgumentException("Could not find ListFieldIterator control template.");
        }

        
    for (int i = 0; i < base.Fields.Count; i++)
        
    {
            SPField field 
    = base.Fields[i];
            
    if (!this.IsFieldExcluded(field))
            
    {
                TemplateContainer child 
    = new TemplateContainer();
                
    this.Controls.Add(child);
                child.ControlMode 
    = base.ControlMode;
                child.FieldName 
    = field.InternalName;
                
    this.ControlTemplate.InstantiateIn(child);
            }

        }

    }
    下面是重写后的ListFieldIterator:
    EditControlListFieldIterator
    对比以上两个类的CreateControl方法,相信大家应该了解这个解决方案的核心了。

    然后,编写新的模板文件:
    CodeArt_Templates.ascx

    OK,我们已经给系统“所有”表单添加了了新的呈现逻辑--只有编辑权限的用户才能可以看到编辑控件。

    本系列的所有文章:
    CodeArt WSS3.0(MOSS)字段编辑权限控制解决方案(v1.0)
    CodeArt WSS3.0(MOSS)字段编辑权限控制解决方案的实现 -- 概要
    MOSS字段编辑权限控制方案的实现(1)-管理页面的开发和配置信息的持久化
    WSS页面定制系列(2)---定制单个列表的表单页面
    WSS页面定制系列(3)---重写表单的保存逻辑
    MOSS字段编辑权限控制方案(4)-打包解决方案






  • 相关阅读:
    连续子数组的最大和
    孩子们的游戏(圆圈中最后剩下的数)
    左旋转字符串
    业界难题-“跨库分页”的四种方案
    InnoDB意向锁的作用
    Linux下Fork与Exec使用
    minixml的安装教程
    main()函数的形参
    结构体数组初始化
    fork函数详解
  • 原文地址:https://www.cnblogs.com/jianyi0115/p/1089363.html
Copyright © 2011-2022 走看看