• 开发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

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/TNSSTAR/p/3232752.html
Copyright © 2020-2023  润新知