У меня есть определение настраиваемого поля, которое я создал в SharePoint 2010.
Я в основном следовал шаблону, изложенному в этом пошаговом руководстве по MS. - затем я изменил их пользовательский пример 'Field', который наследуется от 'SPFieldText', вместо этого наследуется от SPFieldNumber, а мой FieldControl наследуется от NumberField.
Кроме того, вот мое определение поля XML:
<?xml version="1.0" encoding="utf-8" ?>
<FieldTypes>
<FieldType>
<Field Name="TypeName">Wps</Field>
<Field Name="SQLType">int</Field>
<Field Name="InternalType">Integer</Field>
<Field Name="ParentType">Number</Field>
<Field Name="TypeDisplayName">Client WPS integer</Field>
<Field Name="TypeShortDescription">Client WPS number</Field>
<Field Name="UserCreatable">TRUE</Field>
<Field Name="ShowOnListCreate">TRUE</Field>
<Field Name="ShowOnSurveyCreate">TRUE</Field>
<Field Name="ShowOnDocumentLibraryCreate">TRUE</Field>
<Field Name="ShowOnColumnTemplateCreate">TRUE</Field>
<Field Name="FieldTypeClass">MyCompany.SharePoint.WpsField, $SharePoint.Project.AssemblyFullName$</Field>
</FieldType>
</FieldTypes>
Как и Карел, я все достаточно хорошо определил, чтобы все запятые были сжаты ... за исключением формы редактирования.
Я закончил тем, что добавил некоторый JavaScript в пользовательский .ascx, который является частью моего определения пользовательского поля.
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="VB" %>
<SharePoint:RenderingTemplate ID="WpsFieldControl" runat="server">
<Template>
<span id="commaField">
<asp:TextBox ID="TextField" runat="server" Width="120px" />
</span>
<script type="text/javascript">// <![CDATA[
var numFld = document.getElementById("commaField").childNodes[0];
numFld.value = numFld.value.replace(",", "");
// ]]>
</script>
</Template>
</SharePoint:RenderingTemplate>
Обратите внимание, что я завернул свой ASP.NET TextBox в простой SPAN с идентификатором, который я мог легко найти поле, используя getElementById в моем JS. В моем сценарии это было приемлемо, потому что природа нашего бизнеса требовала только одного экземпляра моего типа поля в данной записи списка SharePoint.
Это, казалось, решило все для меня! Может быть, не самый красивый, но мне нравится, что мне не нужно забивать определения моего списка вычисляемыми столбцами.