/// <summary> /// Initializes a new instance of the <see cref="EntityBindingDetail"/> class. /// </summary> /// <param name="entityProperty">The entity property.</param> /// <param name="valueKey">The value key.</param> /// <param name="bindingType">Type of the binding.</param> /// <param name="valueWriter">Value writer for the associated value type</param> /// <param name="valueReader">Value reader for the associated value type</param> public EntityPropertyConversionDetail(PropertyInfo entityProperty, string valueKey, BindingType bindingType, IBaseValueWriter valueWriter, IBaseValueReader valueReader) { this.EntityProperty = entityProperty; this.ValueKey = valueKey; this.BindingType = bindingType; this.ValueWriter = valueWriter; this.ValueReader = valueReader; }
/// <summary> /// Updates the given SPListItem with the value passed. /// This method does not call Update or SystemUpdate. /// </summary> /// <param name="item">The SharePoint list item to update.</param> /// <param name="fieldValueInfo">The value information to be updated in the SPListItem.</param> public void WriteValueToListItem(SPListItem item, FieldValueInfo fieldValueInfo) { if (item == null) { throw new ArgumentNullException("item"); } if (fieldValueInfo == null || fieldValueInfo.FieldInfo == null) { throw new ArgumentNullException("fieldValueInfo"); } IBaseValueWriter valueWriter = this.GetWriter(fieldValueInfo); valueWriter.WriteValueToListItem(item, fieldValueInfo); }
/// <summary> /// Updates the specified SPFolder with new default field value /// </summary> /// <param name="folder">The SharePoint folder for which we want to update the metadata defaults.</param> /// <param name="defaultFieldValueInfo">The default value to be applied to items created within that folder.</param> public void WriteValuesToFolderDefault(SPFolder folder, FieldValueInfo defaultFieldValueInfo) { if (folder == null) { throw new ArgumentNullException("folder"); } if (defaultFieldValueInfo == null || defaultFieldValueInfo.FieldInfo == null) { throw new ArgumentNullException("defaultFieldValueInfo"); } IBaseValueWriter valueWriter = this.GetWriter(defaultFieldValueInfo); valueWriter.WriteValueToFolderDefault(folder, defaultFieldValueInfo); }
/// <summary> /// Updates the specified SPField definition with new DefaultValue /// </summary> /// <param name="parentFieldCollection">The SharePoint field collection containing the field to update.</param> /// <param name="defaultFieldValueInfo">The default value to be applied as the SPField' new default.</param> public void WriteValueToFieldDefault(SPFieldCollection parentFieldCollection, FieldValueInfo defaultFieldValueInfo) { if (parentFieldCollection == null) { throw new ArgumentNullException("parentFieldCollection"); } if (defaultFieldValueInfo == null || defaultFieldValueInfo.FieldInfo == null) { throw new ArgumentNullException("defaultFieldValueInfo"); } IBaseValueWriter valueWriter = this.GetWriter(defaultFieldValueInfo); valueWriter.WriteValueToFieldDefault(parentFieldCollection, defaultFieldValueInfo); }
private IBaseValueWriter GetWriter(FieldValueInfo fieldValueInfo) { var associatedValueType = fieldValueInfo.FieldInfo.AssociatedValueType; IBaseValueWriter valueWriter = null; if (this.writers.ContainsKey(associatedValueType)) { valueWriter = this.writers[associatedValueType]; } else { throw new ArgumentException(string.Format( CultureInfo.InvariantCulture, "Failed to find a value writer for your FieldInfo's AssociatedValueType (field={0}, valueType={1})", fieldValueInfo.FieldInfo.InternalName, associatedValueType.ToString())); } return(valueWriter); }
/// <summary> /// Extracts the values from the entity to fill the values. /// </summary> /// <typeparam name="T">The type of the entity.</typeparam> /// <param name="entity">The entity.</param> /// <param name="listItem">The list item.</param> public void FromEntity <T>(T entity, SPListItem listItem) { var schema = this.entitySchemaFactory.GetSchema(typeof(T)); var listItemFields = listItem.Fields; foreach (var binding in schema.PropertyConversionDetails.ToList().Where(x => x.BindingType == BindingType.Bidirectional || x.BindingType == BindingType.WriteOnly)) { var valueFromEntity = binding.EntityProperty.GetValue(entity, null); IBaseValueWriter writer = binding.ValueWriter; // Create a MinimalFieldInfo<TValueType> to feed into the FieldValueInfo needed to // interact with IBaseValueWriter var minimalFieldInfoType = typeof(MinimalFieldInfo <>).MakeGenericType(writer.AssociatedValueType); string fieldInternalName = binding.ValueKey; SPField itemField = listItemFields.GetFieldByInternalName(fieldInternalName); var minimalFieldInfo = (BaseFieldInfo)Activator.CreateInstance(minimalFieldInfoType, new object[] { fieldInternalName, itemField.Id }); var fieldValueInfo = new FieldValueInfo(minimalFieldInfo, valueFromEntity); // Update the list item through the IBaseValueWriter writer.WriteValueToListItem(listItem, fieldValueInfo); } }
private void AddToWritersDictionary(IBaseValueWriter writer) { this.writers.Add(writer.AssociatedValueType, writer); }