zoukankan      html  css  js  c++  java
  • 开发MOSS自定义字段类型

    前段时间,由于刚好项目定制的需要,笔者就开发了几个自定义字段类型。在这抽空做个详细笔记,方便初学者学习。这方面的资料也很多,如果自身觉得不大明白可以参考下SDK和网上的相关文章。本章的目的主要是给新手起个抛砖引玉的作用。至于字段类型要实现什么功能,还是以自己的实际开发需求来做引导。接下来就介绍该如何实现。。。。
    其实实现一个字段类型的开发很简单,无非就是由3部分组成:1继承于SPField的字段类,2继承于BaseRenderControl的字段呈现空间类,3编写一个配置文件,配置文件必须以fldtypes_开头。(如果是采用模版,那就再编写一个.ascx模版页)。
    1.BaseRenderControl的常用属性和方法有【
        Value:此属性自动被系统调用,可以利用此属性跟字段进行交互。
        Field:利用此属性获取跟控件相关联的字段类。
        FieldName:获取或设置字段名。ControlMode:获取空间当前所出的模式。
        List:获取关联的列表。ItemFieldValue:获取对应列表项的值】。
    2.SPField的常用属性和方法有【
        ShowInDisplayForm:此属性控制字段是否显示在呈现页面
       ShowInEditForm:此属性控制字段是否显示在编辑页面
       ShowInNewForm:此属性控制字段是否显示在新建页面
       FieldValueType:字段类型值
       FieldRenderingControl:返回字段呈现空间实例
       GetValidatedString:此方法返回通过验证的值,若验证失败则抛出SPFieldValidationException
       GetFieldValue:获得字段的值
       GetFieldValueForEdit:用于显示在编辑的页面上
       OnAdded:字段被添加之后调用
       OnUpdated:字段被更新之后调用
       OnDeleting:字段被删除之后调用】
    3.至于配置文件:大家可以直接参考SDK相关资料。。。。。。。。这里就不在详细简述了。
    下面直接就把相关的代码文件附上:(该字段类型实现获取当前网站的所有调查列表的名称。至于中间用到的一些方法,大伙如果不明白,可以直接看代码中的注释。新建一个类库项目,两个类文件分别命GetallSurveyListTitleFielControl,GetallSurveyListTitleField,然后引用Microsoft.Sharepoint.dll,项目记得设置强名称。。。。。。。。。。。。。)
    GetallSurveyListTitleFielControl.cs

    复制代码
      1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4using Microsoft.SharePoint;
      5using Microsoft.SharePoint.WebControls;
      6using System.Web;
      7using System.Web.UI.WebControls;
      8using System.IO;
      9namespace GetallSurveyListTitle
     10{
     11    class GetallSurveyListTitleFielControl:BaseFieldControl
     12    {
     13        private DropDownList drp_SurveyListTitle;
     14        private Label lb_SurveyListTitle;
     15        protected override void CreateChildControls()
     16        {
     17             base.CreateChildControls();
     18            //为显示模式下
     19            if (this.ControlMode == SPControlMode.Display)
     20             {
     21
     22                 this.TemplateName = this.DisplayTemplateName;
     23                 //此处的"txt_SurveyListTitle"和"Drp_SurveyListTitle"将在呆会创建的自定义字段模板中用到。
     24                 lb_SurveyListTitle = (Label)TemplateContainer.FindControl("lb_SurveyListTitle");
     25                 if (lb_SurveyListTitle == null)
     26                 {
     27                     throw new SPException("模板中必须存在ID为lb_SurveyListTitle的TextBox控件");
     28                 }

     29                 else
     30                 {  
     31                     lb_SurveyListTitle.Text=""+this.ItemFieldValue;
     32                     return;
     33                 }

     34             }

     35               //编辑或新增模式下
     36             else 
     37             {
     38                 drp_SurveyListTitle = (DropDownList)TemplateContainer.FindControl("Drp_SurveyListTitle");
     39                 if (drp_SurveyListTitle == null)
     40                 {
     41                     throw new SPException("模板中必须存在ID为Drp_SurveyListTitle的DropDownList控件");
     42
     43                 }

     44                
     45             }

     46
     47
     48             if (!Page.IsPostBack)
     49             {
     50                 SPWeb mysite = SPContext.Current.Web;
     51                 SPListCollection ListCollection = mysite.Lists;
     52                 foreach (SPList list in ListCollection)
     53                 {
     54                     if (list.BaseTemplate.ToString() == "Survey")
     55                     {
     56                         string surveytitle = list.Title;
     57                         //绑定到下拉框
     58                         this.drp_SurveyListTitle.Items.Add(new ListItem(surveytitle, surveytitle));
     59
     60                     }

     61
     62                 }

     63             }

     64            
     65            
     66          
     67        }

     68
     69        //在显示模式下使用的模板
     70        public override string DisplayTemplateName
     71        {
     72            get
     73            {   //TempalteID
     74                return "SurveyListTitleDisplay";
     75            }

     76
     77        }

     78
     79        //默认模式下使用的模板
     80
     81        protected override string DefaultTemplateName
     82        {
     83            get
     84            {
     85                return "SurveyListTitleFieldControl";
     86            }

     87        }

     88        //重写Value
     89        public override object Value
     90        {
     91            get
     92            {
     93                this.EnsureChildControls();
     94                if (this.drp_SurveyListTitle != null)
     95                {
     96
     97                    return drp_SurveyListTitle.SelectedValue.ToString();
     98                }

     99                else 
    100                {
    101                    return null;
    102                }

    103            }

    104            set
    105            {
    106                this.EnsureChildControls();
    107                if (this.drp_SurveyListTitle != null)
    108                {
    109
    110                    this.drp_SurveyListTitle.SelectedValue =(string)this.ItemFieldValue;
    111                }

    112                
    113            }

    114        }

    115        //重写控件焦点
    116        public override void Focus()
    117        {
    118            this.EnsureChildControls();
    119            this.drp_SurveyListTitle.Focus();
    120
    121        }

    122    
    123    
    124    
    125    }

    126}

    127
    复制代码

     

    GetallSurveyListTitleField.cs

    复制代码
     1using System;
     2using System.Collections.Generic;
     3using System.Text;
     4using Microsoft.SharePoint;
     5using Microsoft.SharePoint.WebControls;
     6namespace GetallSurveyListTitle
     7{
     8    //直接继承SPFieldChoice,重写BaseFieldControl
     9    public class GetallSurveyListTitleField:SPFieldChoice
    10    {
    11
    12        public GetallSurveyListTitleField(SPFieldCollection fields, string fieldname)
    13            : base(fields, fieldname)
    14        
    15        
    16        }

    17
    18        public GetallSurveyListTitleField(SPFieldCollection fields, string typename,string displayname)
    19            : base(fields,typename,displayname)
    20        {
    21
    22        }

    23       //返回呈现控件(重写FielRenderingControl)
    24        public override BaseFieldControl FieldRenderingControl
    25        {
    26           
    27            get
    28            {
    29                BaseFieldControl ctl = new GetallSurveyListTitleFielControl();
    30                ctl.FieldName = this.InternalName;
    31                return ctl;
    32            }

    33        }

    34    
    35    }

    36}

    37
    复制代码

    fldtypes_GetallSurveyListTitle.xml

    复制代码
     1<?xml version="1.0" encoding="utf-8"?>
     2<FieldTypes>
     3  <FieldType>
     4    <Field Name="TypeName">GetallSurveyListTitle</Field>
     5    <Field Name="ParentType">Choice</Field>
     6    <Field Name="TypeDisplayName">获取调查列表标题</Field>
     7    <Field Name="TypeShortDescription">获取调查列表标题</Field>
     8    <Field Name="UserCreatable">TRUE</Field>
     9    <Field Name="ShowInListCreate">TRUE</Field>
    10    <Field Name="ShowInSurveyCreate">TRUE</Field>
    11    <Field Name="ShowInDocumentLibraryCreate">TRUE</Field>
    12    <Field Name="ShowInColumnTemplateCreate">TRUE</Field>
    13    <Field Name="FieldTypeClass">GetallSurveyListTitle.GetallSurveyListTitleField,GetallSurveyListTitle,Version=1.0.0.0, Culture=neutral, PublicKeyToken=d983c60297f46343</Field>
    14  </FieldType>
    15</FieldTypes>
    16
    17
    复制代码

    GetallSurveyListTitleFielControl.ascx

    复制代码
     1<%@ Control Language="C#"   AutoEventWireup="false" %>
     2<%@Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
     3<%@Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.WebControls"%>
     4<SharePoint:RenderingTemplate ID="SurveyListTitleFieldControl" runat="server">
     5    <Template>
     6    <asp:DropDownList runat="server" ID="Drp_SurveyListTitle" />
     7    </Template>
     8</SharePoint:RenderingTemplate>
     9<SharePoint:RenderingTemplate ID="SurveyListTitleDisplay" runat="server">
    10    <Template>
    11    <asp:Label runat="server" ID="lb_SurveyListTitle" />
    12    </Template>
    13</SharePoint:RenderingTemplate>
    复制代码

    到此一个字段类型开发完毕。
    部署:1.把项目生成的.dll文件放入GAC。
             2.把配置文件放入12TemplateXML
             3.把字段模版文件放入12TemplateControlTemplate
             4.IISRESET

  • 相关阅读:
    ssh事务配置
    使用注解实现事务处理
    c3p0、dbcp<转>
    添加业务层和事务机制
    使用spring集成hibernate
    使用Adivisor配置增强处理
    aop注解
    Spring IoC实现解耦合
    python console的命令执行
    python格式化输出
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/3232752.html
Copyright © 2011-2022 走看看