<Field ID="{fa564e0f-0c70-4ab9-b863-0177e6ddd247}" Name="Title" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Title" Group="_Hidden" Type="Text" DisplayName="" Required="TRUE" FromBaseType="TRUE" />
class RegExpField : SPFieldText { public RegExpField(SPFieldCollection fields, string fieldName) : base(fields, fieldName) { } public RegExpField(SPFieldCollection fields, string typeName, string displayName) : base(fields, typeName, displayName) { } }
// private void SetFieldAttribute(string attribute, string value) { Type baseType; BindingFlags flags; MethodInfo mi; baseType = typeof(RegExpField); flags = BindingFlags.Instance | BindingFlags.NonPublic; mi = baseType.GetMethod("SetFieldAttributeValue", flags); mi.Invoke(this, new object[] { attribute, value }); } // private string GetFieldAttribute(string attribute) { Type baseType; BindingFlags flags; MethodInfo mi; baseType = typeof(RegExpField); flags = BindingFlags.Instance | BindingFlags.NonPublic; mi = baseType.GetMethod("GetFieldAttributeValue", flags, null, new Type[] { typeof(String) }, null); object obj = mi.Invoke(this, new object[] { attribute }); if (obj == null) return ""; else return obj.ToString(); }
public string ValidRegExp { get { return GetFieldAttribute("ValidRegExp"); } set { SetFieldAttribute("ValidRegExp", value); } } public string ErrorMessage { get { return GetFieldAttribute("ErrorMessage"); } set { SetFieldAttribute("ErrorMessage", value); } }
public bool DisplayAsNewSection { get { return true; } } // public void InitializeWithField(SPField field) { if (!IsPostBack) { if (field is RegExpField) { var Validfield = field as RegExpField; RegExp.Text = Validfield.ValidRegExp; ErrorMessage.Text = Validfield.ErrorMessage; } } } // public void OnSaveChange(SPField field, bool isNewField) { if (field is RegExpField) { var Validfield = field as RegExpField; Validfield.ValidRegExp = RegExp.Text; Validfield.ErrorMessage = ErrorMessage.Text; } }
<FieldTypes> <FieldType> <Field Name="TypeName">RegExpField</Field> <Field Name="ParentType">Text</Field> <Field Name="TypeDisplayName"> </Field> <Field Name="TypeShortDescription"> </Field> <Field Name="FieldTypeClass">RegExpField.RegExpField, $SharePoint.Project.AssemblyFullName$</Field> <Field Name="FieldEditorUserControl">/_controltemplates/15/RegExpFieldEdit.ascx</Field> </FieldType> </FieldTypes>
public override string JSLink { get { return "/_layouts/15/RegExpField/RegExpField.js"; } }
public override Dictionary<string, object> GetJsonClientFormFieldSchema(SPControlMode mode) { var formtctx = base.GetJsonClientFormFieldSchema(mode); formtctx["ValidRegExp"] = ValidRegExp; formtctx["ErrorMessage"] = ErrorMessage; return formtctx; }
RegExpFieldTemplate = function RegExpFieldTemplate () { } RegExpFieldTemplate.$$cctor = function RegExpFieldTemplate $$$cctor() { if (typeof (SPClientTemplates) != "undefined") SPClientTemplates.TemplateManager.RegisterTemplateOverrides(RegExpFieldTemplate.createRenderContextOverride()); // } RegExpFieldTemplate.createRenderContextOverride = function () { var RegExpFieldTemplateContext = {}; RegExpFieldTemplateContext.Templates = {}; RegExpFieldTemplateContext.Templates['Fields'] = { RegExpField: { View: RegExpFieldTemplate.renderViewControl, DisplayForm: RegExpFieldTemplate.renderDisplayControl, NewForm: RegExpFieldTemplate.renderEditControl, EditForm: RegExpFieldTemplate.renderEditControl, }// , }; return RegExpFieldTemplateContext; } function RegExpField_init() { RegExpFieldTemplate.$$cctor(); }; RegExpField_init();
RegExpFieldTemplate.renderViewControl = function (renderCtx, field, item, list) { if (renderCtx.inGridMode === true) { field.AllowGridEditing = false; // GridView } return STSHtmlEncode(item[field.Name]);// item. Encode Html }
RegExpFieldTemplate.renderDisplayControl = function (renderCtx) { return STSHtmlEncode(renderCtx.CurrentFieldValue);// Encode Html }
// RegExpFieldTemplate.ValidatorValue = function (stringRegExp, errorMessage) { // 1 RegExpFieldTemplate.ValidatorValue.prototype.Validate = function (value) { // if (value && stringRegExp) { var reg = new RegExp(stringRegExp); // if (!reg.test(value)) { // , // , return new SPClientFormsInclude.ClientValidation.ValidationResult(true, errorMessage);// } } return new SPClientForms.ClientValidation.ValidationResult(false); }; } RegExpFieldTemplate.renderEditControl = function (rCtx) { if (rCtx == null) return ''; var frmData = SPClientTemplates.Utility.GetFormContextForCurrentField(rCtx);// , // if (frmData == null || frmData.fieldSchema == null) return ''; var _inputElt; var _value = frmData.fieldValue != null ? frmData.fieldValue : '';// var _inputId = frmData.fieldName + '_' + '_$RegExp' + rCtx.FormUniqueId;// Id input' var validators = new Eos.Fields.ClientControls.ClientValidation.ValidatorSet();// , if (frmData.fieldSchema.Required) {// // validators.RegisterValidator(new Eos.Fields.ClientControls.ClientValidation.RequiredValidator()); } // validators.RegisterValidator(new RegExpFieldTemplate.ValidatorValue(rCtx.CurrentFieldSchema.ValidRegExp,rCtx.CurrentFieldSchema.ErrorMessage)); // frmData.registerClientValidator(frmData.fieldName, validators); // HTML DOM frmData.registerInitCallback(frmData.fieldName, InitControl); // , // frmData.registerFocusCallback(frmData.fieldName, function () { if (_inputElt != null) { _inputElt.focus(); if (browseris.ie8standard) { var range = _inputElt.createTextRange(); range.collapse(true); range.moveStart('character', 0); range.moveEnd('character', 0); range.select(); } } }); // frmData.registerValidationErrorCallback(frmData.fieldName, function (errorResult) { // , span'a SPFormControl_AppendValidationErrorMessage(_inputId, errorResult); }); // frmData.registerGetValueCallback(frmData.fieldName, function () { return _inputElt == null ? '' : _inputElt.value; }); // hidden ( , ) frmData.updateControlValue(frmData.fieldName, _value); // var result = '<span dir="' + STSHtmlEncode(frmData.fieldSchema.Direction) + '">'; result += '<input type="text" value="' + STSHtmlEncode(_value) + '" maxlength="' + STSHtmlEncode(frmData.fieldSchema.MaxLength) + '" '; result += 'id="' + STSHtmlEncode(_inputId) + '" title="' + STSHtmlEncode(frmData.fieldSchema.Title); result += '" class="ms-long ms-spellcheck-true ' + (rCtx.CurrentFieldSchema.DoubleWidth ? 'InputDoubleWidth' : '') + ' " />'; result += '<br /></span>';// return result; // DOM function InitControl() { // Input _inputElt = document.getElementById(_inputId); if (_inputElt != null) // AddEvtHandler(_inputElt, "onchange", OnValueChanged); } // input function OnValueChanged() { if (_inputElt != null) // hidden ( , ) frmData.updateControlValue(frmData.fieldName, _inputElt.value); } }
Source: https://habr.com/ru/post/262187/
All Articles