【转】2.4SharePoint服务器端对象模型 之 访问网站和列表数据(Part 4)

(四)栏/字段

SharePoint中的字段(中文版中叫做“栏”)与传统的数据栏类似,也有不同类型的区别,不过SharePoint中内置的栏类型除了按照数据类型(如数字、日期和时间等)进行区分之外,更多的是从应用类型(货币、选项、查阅项等)进行分类。除内置的字段类型之外,SharePoint同样允许我们通过开发的方式实现自定义字段类型的扩展。在SharePoint中使用SPField表示字段,使用SPFieldCollection表示字段集合,内置的字段类型使用SPFieldType枚举表示。

 

1、字段相关类

在SharePoint中,SPField作为字段的基础类型,包括了字段的基本元素和基本属性。对于每一种特定的字段类型,在SharePoint中都有相应的类与之对应。这些类都是SPField直接或间接的字类,这些类的命名也都是以SPField开头。例如表示单行文本的SPFieldText、表示选项的SPFieldChoice、表示查阅项的SPFieldLookup等,完整的继承关系可以参看SDK中关于SPField的描述。不同的特定类中,包含了对相应字段类型的设置属性,例如针对数字字段类型的最大值、最小值属性,就包含在SPFieldNumber的MaximumValue和MinimumValue两个属性中。

对于一些普通字段类型,其值类型都是比较简单的数据,例如单行文本、多行文本字段是字符串类型(string)的值,数值字段是数值类型(double)的值,时间日期字段是时间日期类型(DateTime)的值。但是诸如超链接、查阅项、人员和组这些字段类型的值难以使用一个简单的类型表示,在SharePoint中,针对这些字段有专门的值类型,其名称为字段类+Value,例如表示超链接值的SPFieldUrlValue、表示查阅项值的SPFieldLookupValue等。

下面的程序展示了如何获取日期类型和人员和组类型的值,注意其区别(假设网站中存在一个叫做“Chapters”的列表,并且其中至少存在一个条目):

   1: using(SPSite site = new SPSite("http://sp2010/book"))
   2: {
   3:   using(SPWeb web = site.OpenWeb())
   4:   {
   5:     SPList list = web.Lists["Chapters"];
   6:     SPListItem item = list.Items[0];
   7:     foreach(SPField field in list.Fields)
   8:     {
   9:       if(field.Type == SPFieldType.DateTime)
  10:       {
  11:         DateTime dtValue = Convert.ToDateTime(item[field.Id]);
  12:         // use dtValue
  13:       }
  14:       else if(field.Type == SPFieldType.Url)
  15:       {
  16:         SPFieldUrlValue urlValue = new SPFieldUrlValue(
  17:           Convert.ToString(item[field.Id]));
  18:         string url = urlValue.Url;
  19:         // use url
  20:       }
  21:     }
  22:   }
  23: }

在上面的程序中,使用到了一些和列表条目相关的操作,虽然尚未介绍,但应当很容易理解其含义。

 

2、关于显示名称和内部名称

每一个SharePoint字段都有一个显示名称(SPField的Title属性)和一个内部名称(SPField的InternalName属性),这两个都是字符串类型的属性。

显示名称是在创建字段的时候,由用户指定的名称,没有特定的要求。通过网页创建字段的时候,显示名称是不允许重复的,但通过代码完全可以创建显示名称相同的多个字段,而实际上,每个列表中本身就包含了一些显示名称相同的字段(如自定义列表的“标题”字段、文档库的“名称”字段等),在Visual Studio的服务器资源管理器中,我们可以很直观地看到这些重名的字段(如下图)。

image

而内部名称则是由SharePoint根据用户输入的显示名称,按照一定的命名规律自动生成的(用户无法干预这个过程)。内部名称只能包含大小写英文字母、数字和下划线这三类字符,对于其他的字符,基本上以Unicode编码的形式表现(这里之所以说“基本上”,是因为其中还存在着许多例外情况,比如创建一个名叫“num1”的字段,内部名称会变成“_x006e_um1”。因此我们不能够以这种“基本上”的规则,去根据一个字段显示名称来“推测”出它的内部名称)。例如一个显示名称叫“My Field”的字段,其内部名称可能是“My_x0020_Field”,而一个显示名称为“中文”的字段,其内部名称可能是“_x4e2d__x6587_”。字段的内部名称在SharePoint网站中很少有机会被查看到,但是通过使用Visual Studio的服务器资源管理器,在编写程序的过程中就可以非常方便地查看到我们选定字段的内部名称(如下图所示)。

image

在字段创建之后,其内部名称是不会改变的,即使将该字段重命名之后,更改的也只是其显示名称,内部名称依然保留原有的名称。并且,在一个列表中,字段的内部名称是不可能重复的(读者可以自己做一些试验)。

虽然列表字段的内部名称在SharePoint使用过程中几乎体会不到,但是在SharePoint开发中,有很多场景必须要使用字段的内部名称来指定一个字段(比如列表查询),因此要熟悉内部名称的查看和使用方法。在实际项目中创建字段的时候,尽可能先使用英文创建字段(保证其内部名称看起来有意义而且容易记忆)再修改其显示名称为中文。

 

3、字段的获取

获取字段的方式一般都是先通过SPList的Fields属性获取到列表中所有字段的集合(SPFieldCollection类型),再使用如下方法获取其中某个特定的字段:

(1) Fields[idx]:int型索引器,使用下标获取字段,很少使用;

(2) Fields[displayName]:string型索引器,使用字段的显示名称获取;

(3) 使用Fields.GetField(string name)方法,使用字段的内部名称或显示名称获取(优先判断内部名称);

(4) 使用Fields.GetFieldByInternalName(string internalName)方法,使用字段的内部名称获取字段。

除此之外,我们还可以通过SPFieldCollection的ContainsField方法,根据字段的显示名称或内部名称,来判断某个特定名称的字段是否存在。

 

4、字段的常用属性

SPField的常用属性如下:

名称

类型

说明

InternalName

string

字段的内部名称

Title

string

字段的显示名称

Type

SPFieldType

字段的类型

Required

bool

字段是否为必填

SchemaXml

string

字段的通用属性描述

ShowInDisplayForm

Nullable<bool>

是否在列表条目的查看页面显示此字段

ShowInEditForm

Nullable<bool>

是否在列表条目的编辑页面显示此字段

ShowInNewForm

Nullable<bool>

是否在列表条目的新建页面显示此字段

SPField的ShowInDisplayForm / ShowInEditForm / ShowInNewForm三个属性在实际项目中面临的需求中可能经常会使用到。使用SharePoint列表搭建的应用,在有些情况下,一些字段可能会要求不显示在查看界面中(仅供后台程序使用),或者不显示在新建界面中(由程序指定初始值),或者不显示在编辑界面中(不允许用户修改)。通过这三个属性就可以实现这些需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】2.5SharePoint服务器端对象模型 之 访问网站和列表数据(Part 5)

&#xff08;五&#xff09;列表条目&#xff08;SPListItem&#xff09; SharePoint中数据的存储基本上都是通过列表条目来完成&#xff08;文档库中的文档也是一种特殊的列表条目&#xff09;&#xff0c;因此在SharePoint应用开发中&#xff0c;最终是要和列表条目打交道的…

【转】3.1SharePoint服务器端对象模型 之 访问文件和文件夹(Part 1)

本节中所阐述的内容&#xff0c;主要适用于SharePoint文档库中的文件和文件夹&#xff0c;以及列表中的文件夹。系统中的其他文件&#xff08;如_layouts中的文件、配置文件、程序文件等&#xff09;不在本章节的讨论范围之内。 &#xff08;一&#xff09;概述 SharePoint的文…

电影与爆米花(模拟)

题目大意&#xff1a; n个人是朋友&#xff0c;他们坐在一排去看电影&#xff0c;相邻的最多三个人可以吃同一桶爆米花。每个人都想迟到爆米花&#xff0c;问最少需要几桶爆米花&#xff1f; 输入&#xff1a;一个数组&#xff0c;代表这n个人每个人选择的座位号。 输出&…

【转】3.2SharePoint服务器端对象模型 之 访问文件和文件夹(Part 2)

4、添加文件夹 文件夹的创建方法在文档库和普通列表中稍有不同。 在文档库中&#xff0c;与一般的集合操作相同&#xff0c;直接使用SPFolderCollection的Add(string name)方法即可添加文件夹&#xff0c;例如下面的程序在文档库的根目录中添加一个名为“技术文档”的子文件夹…

【分治】01串

在第一行我们写上一个0。接下来的每一行&#xff0c;将前一行中的0替换为01&#xff0c;1替换为10。 给定行数N和序数K&#xff0c;返回第N行中第K个字符。&#xff08;K从1开始&#xff09; 输入格式: 输入在一行中给出2个整数N和K。 N的范围[1,30] K的范围[1,2(N−1)] 输出…

【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

&#xff08;三&#xff09;遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库、列表的文件夹和列表条目。遍历主要有三种方式&#xff1a;&#xff08;1&#xff09;直接使用文件系统对象模型进行遍历&#xff1b;&#xff08;2&#xff09;使用SPDocumentLibrary进行遍…

【思维构造】跳跃游戏

题干&#xff1a; 有一种跳跃游戏&#xff1a;假设初始位置在数轴的原点处&#xff0c;每一次可以选择两种操作&#xff1a; 向前k步或向后一步&#xff08;k为当前的移动次数&#xff0c;即第k次跳跃k步&#xff09;。给定一个终点D&#xff08;D>0&#xff09;&#xff0…

【LeetCode-581】最短无序连续子数组

给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 示例 1&#xff1a; 输入&#xff1a;nums [2,6,4,8,10…

【转】3.4SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)

&#xff08;四&#xff09;列表附件 列表的附件也是文件系统的一部分&#xff0c;它依附于普通列表的列表条目之上&#xff08;文档库没有附件&#xff09;&#xff0c;它的操作在一些地方和文档库中文档的操作非常类似。 1、附件的读取 一个列表条目的附件可以使用SPListIt…

【LeetCode160】相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后…

【转】4.SharePoint服务器端对象模型 之 使用CAML进行数据查询

&#xff08;一&#xff09;概述 在SharePoint的开发应用中&#xff0c;查询是非常常用的一种手段&#xff0c;根据某些筛选、排序条件&#xff0c;获得某个列表或者某一些列表中相应的列表条目的集合。 除去列表上的查询之外&#xff0c;在SharePoint中还大量存在着各种各样…

【LeetCode240、剑指offer04】二维数组中的查找(线性做法)

在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示例: 现有矩阵 matrix 如下&#x…

【转】4.2SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 2)

&#xff08;三&#xff09;使用SPQuery进行列表查询 1、概述 列表查询主要是指在一个指定的列表&#xff08;或文档库&#xff09;中按照某些筛选、排序条件进行查询。列表查询主要使用SPQuery对象&#xff0c;以及SPList的GetItems方法&#xff0c;将SPQuery作为参数传递&a…

剑指 Offer 51. 数组中的逆序对(归并排序做法)

在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff1a; 0 < 数组长度 < 50000 来源&#xff1a;力扣…

【转】4.3SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)

&#xff08;四&#xff09;使用SPSiteDataQuery进行多列表查询 1、概述 前面介绍的列表查询有很多优势&#xff0c;但是它的一个缺点就是一次只能在一个列表中进行查询&#xff0c;在SharePoint中&#xff0c;提供了一个跨网站、跨列表查询的机制。通过使用SPSiteDataQuery对…

【LeetCode1046】最后一块石头的重量(堆heap)

题干&#xff1a; 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出两块 最重的 石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么…

一步步编写操作系统 49 加载内核2

内核文件kernel.bin是elf格式的二进制可执行文件&#xff0c;初始化内核就是根据elf规范将内核文件中的段&#xff08;segment&#xff09;展开到&#xff08;复制到&#xff09;内存中的相应位置。在分页模式下&#xff0c;程序是靠虚拟地址来运行的&#xff0c;无论是内核还是…

【牛客 - NC93】设计LRU缓存结构(模拟)

设计LRU缓存结构_牛客题霸_牛客网 描述 设计LRU(最近最少使用)缓存结构&#xff0c;该结构在构造时确定大小&#xff0c;假设大小为 k &#xff0c;并有如下两个功能 1. set(key, value)&#xff1a;将记录(key, value)插入该结构 2. get(key)&#xff1a;返回key对应的val…

【转】理解SQL Server的安全对象和权限

理解安全对象(Securable) 安全对象&#xff0c;是SQL Server 数据库引擎授权系统控制对其进行访问的资源。通俗点说&#xff0c;就是在SQL Server权限体系下控制的对象&#xff0c;因为所有的对象(从服务器&#xff0c;到表&#xff0c;到视图触发器等)都在SQL Server的权限体系…

【LeetCode 986】 区间列表的交集(区间交集)

给定两个由一些 闭区间 组成的列表&#xff0c;firstList 和 secondList &#xff0c;其中 firstList[i] [starti, endi] 而 secondList[j] [startj, endj] 。每个区间列表都是成对 不相交 的&#xff0c;并且 已经排序 。 返回这 两个区间列表的交集 。 形式上&#xff0c…