如何构建一个 WSS 自定义列表项 ID 字段





5.00/5 (4投票s)
介绍如何在 SharePoint 列表中创建一个键列。
引言
本文介绍如何在 SharePoint 列表中创建一个键列。
背景
在 WSS 3.0 中,每个列表项都有一个只读的 ID 字段。然而,SharePoint 开发人员可能会发现很难在自定义列表项中利用 ID 字段。他们需要一个唯一的键字段,该字段是只读的,并且其值可以与 ID 字段同步。此外,最好使其值可自定义,例如 项目 ID 1001, 1002 或 销售订单 70001, 70002...
Using the Code
实现此唯一键字段的逻辑包括两部分:一个自定义字段类型,它是一个整数并且是只读的,以及一个事件处理程序功能,该功能自动将新项目的值加 1。
让我们首先查看自定义字段类型中的代码
public class CodeProjectNumberField : NumberField
{
protected override void Render(System.Web.UI.HtmlTextWriter output)
{
try
{
if (Controls.Count > 0)
{
((TemplateBasedControl)Controls[0]).TemplateName =
"~/_controltemplates/CustomTemplates.ascx";
base.Render(output);
output.Write("Read Only Field");
}
else
base.Render(output);
}
catch (Exception ex)
{
PwCPMOExceptionLogging.Error(ex);
}
}
}
在项目自定义字段类型中,我们自定义了数字字段控件的模板为 customTemplate.ascx。在这个自定义模板文件中,我们可以轻松地将数字字段控件设置为只读。请检查自定义模板文件,并将其与 HIV12\TEMPLATE\CONTROLTEMPLATES\DefaultTemplates.ascx 进行比较。
现在,让我介绍事件处理程序功能。我们将在 ItemAdded
时设置键字段的值并对其进行格式化。
public class ReceiverHandler : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
string CodeProjectCustomFieldName =
ConfigurationSettings.AppSettings["ProjectChangeTrackingNumberFieldName"];
string CodeProjectCustomFieldSeed =
ConfigurationSettings.AppSettings["ProjectChangeTrackingNumberFieldSeed"];
if (!properties.ListItem.Fields.ContainsField(CodeProjectCustomFieldName))
return;
int intCodeProjectCustomFieldSeed = 1000;
Int32.TryParse(CodeProjectCustomFieldSeed, out intCodeProjectCustomFieldSeed);
properties.ListItem[CodeProjectCustomFieldName] =
(properties.ListItem.ID + intCodeProjectCustomFieldSeed).ToString();
properties.ListItem.SystemUpdate();
}
}
我们在 web.config 文件中设置 FieldName
和 ListName
,以强制此事件处理程序仅影响我们定义的字段。我们还必须定义字段种子以自定义值格式。然后,我们根据项目 ID 值计算新的字段值...
有一点很重要,在创建并部署所有事件处理程序和自定义字段类型后,我们必须自定义 HIV12\Template\XML 文件夹下的 FLDTYPES.XML,以使新的字段类型在创建新的列表列时出现。(我建议创建一个新的 FLDTYPES.XML,例如 fldtypes_codeproject.xml,而不是使用现有的一个。原因是 WSS 更新时可能会覆盖它。)
关注点
在弄清楚这个解决方案的过程中,我感到 Microsoft SharePoint 团队一直在努力改进他们的产品,以满足最终用户的需求,我相信我们将在下一个版本中看到 Microsoft 对此问题的实现。
历史
我会继续更新,因为我深入研究 SharePoint 世界。事实上,像这样的大量问题。我认为如果 Microsoft 在发布下一个版本之前获得更多时间,他们可以使 WSS 3.0 更好。