zoukankan      html  css  js  c++  java
  • [转]SharePoint 2007 如何创建自定义字段类型

    引自:http://vspug.com/nicksevens/2007/08/31/create-custom-field-types-for-sharepoint/

    Create custom field types for SharePoint 2007

    In this example we are creating a custom field type which concatenates two text fields (first and last name).

    1. Create a new usercontrol file (customfieldcontrol.ascx). In this usercontrol, add a SharePoint:RenderingTemplate control, and insert whatever you want for your control template.

      <%@ Control Language="C#" %>

      <%@ Assembly Name="CustomControls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" %>

      <%@ Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.WebControls" %>

       

      <SharePoint:RenderingTemplate Id="CustomFieldRendering" runat="server">

          <Template>

              <asp:TextBox runat="server" ID="txtFirstName" /> <asp:TextBox runat="server" ID="txtLastName" />

          </Template>

      </SharePoint:RenderingTemplate>

    2. Secondly, create a new class file (customfieldcontrol.cs), which will take the role of codebehind file of the usercontrol. In this class, which will inherit from Microsoft.SharePoint.WebControls.BaseFieldControl, we will override some of the properties and methods to implement our own logic.

      using System;

      using System.Collections.Generic;

      using System.Text;

      using System.Web.UI.WebControls;

       

      using Microsoft.SharePoint;

      using Microsoft.SharePoint.WebControls;

       

      namespace CustomControl

      {

          public class customfieldcontrol : BaseFieldControl

          {

              protected TextBox txtFirstName;

              protected TextBox txtLastName;

       

              protected override string DefaultTemplateName

              {

                  get { return "CustomFieldRendering"; }

              }

              public override object Value

              {

                  get

                  {

                      EnsureChildControls();

                      return txtFirstName.Text + "%" + txtLastName.Text;

                  }

                  set

                  {

                      try

                      {

                          EnsureChildControls();

                          txtFirstName.Text = value.ToString().Split('%')[0];

                          txtLastName.Text = value.ToString().Split('%')[1];

                      }

                      catch { }

                  }

              }

              public override void Focus()

              {

                  EnsureChildControls();

                  txtFirstName.Focus();

              }

              protected override void CreateChildControls()

              {

                  if (Field == null) return;

                  base.CreateChildControls();

       

                  //Don't render the textbox if we are  just displaying the field

                  if (ControlMode == Microsoft.SharePoint.WebControls.SPControlMode.Display) return;

       

                  txtFirstName = (TextBox)TemplateContainer.FindControl("txtFirstName");

                  txtLastName = (TextBox)TemplateContainer.FindControl("txtLastName");

                  if (txtFirstName == null) throw new NullReferenceException("txtFirstName is null");

                  if (txtLastName == null) throw new NullReferenceException("txtLastName is null");

                  if (ControlMode == Microsoft.SharePoint.WebControls.SPControlMode.New)

                  {

                      txtFirstName.Text = "";

                      txtLastName.Text = "";

                  }

              }

          }

      }

      Actually, what this code does is:

      Define the ID of the renderingtemplate control in our usercontrol.
      Set the return value to the value we want it to return :) , in this case this will be something like Firstname%Lastname.
      Make sure that when you edit an item, the proper values are filled in into the textboxes again.

    3. Next thing to do is to create the Field type class (CustomField.cs) itself. In this class, which derives of one of the base control types from SharePoint (SPFieldText, SPFieldChoice, …), we will define which control has to be used as template, and which value has to be returned when displaying a list item.

      using Microsoft.SharePoint;

      using Microsoft.SharePoint.WebControls;

       

      namespace CustomControl

      {

          public class CustomField : SPFieldText

          {

              public CustomField(SPFieldCollection fields, string fieldName)

                  : base(fields, fieldName)

              { }

       

              public CustomField(SPFieldCollection fields, string typeName, string displayName)

                  : base(fields, typeName, displayName)

              { }

       

              public override BaseFieldControl FieldRenderingControl

              {

                  get

                  {

                      BaseFieldControl fieldControl = new customfieldcontrol();

                      fieldControl.FieldName = this.InternalName;

                      return fieldControl;

                  }

              }

       

              public override string GetValidatedString(object value)

              {

                  return value.ToString().Split('%')[1].ToUpper() + " " + value.ToString().Split('%')[0];

              }

          }

      }

      Main thing of this code is the GetValidatedString() function. This function defines what is to be displayed when you display an item (in a list view for example).
      In our case, which in our case will be something like LASTNAME Firstname.

    4. Last file to create is the XML File (fldtypes_custom.xml), which will add the custom field type to SharePoint.

      <?xml version="1.0" encoding="utf-8"?>

      <FieldTypes>

        <FieldType>

          <Field Name="TypeName">CustomField</Field>

          <Field Name="ParentType">Text</Field>

          <Field Name="TypeDisplayName">Custom Name Field</Field>

          <Field Name="TypeShortDescription">Custom Name Text Field</Field>

          <Field Name="UserCreatable">TRUE</Field>

          <Field Name="ShowOnListCreate">TRUE</Field>

          <Field Name="ShowOnSurveyCreate">TRUE</Field>

          <Field Name="ShowOnDocumentLibrary">TRUE</Field>

          <Field Name="ShowOnColumnTemplateCreate">TRUE</Field>

          <Field Name="Sortable">TRUE</Field>

          <Field Name="Filterable">TRUE</Field>

          <Field Name="FieldTypeClass">CustomControl.CustomField, CustomControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx</Field>

          <Field Name="SQLType">nvarchar</Field>

        </FieldType>

      </FieldTypes>

    5. So far so good with creating the files :) Now, all we have to do is put the right files in the right places …
      Compile your project (or at least both .cs classes) and make sure they are strong named.
      Then, install them in the GAC (%windir%assembly)

      Next, copy the .ascx file to C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\CONTROLTEMPLATES

      And the last file to copy: copy the .xml file to C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML

    6. That's it. Maybe do an IISRESET, and you can use your newly created Custom Field Type!
  • 相关阅读:
    Ubuntu 16.04在启动和关机时不显示启动和关机画面且显示详细的命令信息,没有进度条和Logo,或者只有紫色界面,或者没有开机画面等问题解决
    Ubuntu 16.04设置开机关机时显示命令详细信息不显示进度条Logo
    Ubuntu中LightDM是什么(转)
    Linux终止进程的工具kill/killall/pkill/xkill/skill用法区别(转)
    Ubuntu 16.04安装BleachBit清理系统垃圾文件
    Ubuntu 16.04禁用来宾账号(Guest User)
    Java反射 : Declared的作用 ( 例如 : getMethods和getDeclaredMethods )
    java isAssignableFrom instanceof 小结 专题
    java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法
    spring boot使用AbstractXlsView导出excel
  • 原文地址:https://www.cnblogs.com/jancco/p/2489113.html
Copyright © 2011-2022 走看看