您的位置:首页 > 其它

SharePoint Entity Framework 3 – 自定义转换逻辑

2014-04-10 17:30 597 查看
前两篇文章介绍了如何使用SharePoint Entity Framework来关联和转换SharePoint内置字段。此外,SharePoint Entity Framework还提供了几种扩展机制来帮助我们自定义转换逻辑、适配自定义字段以及自定义属性类型。

自定义转换逻辑

在第一篇文章中曾经提到过,Entity类包含一个Read方法和一个Write方法,分别用来读入列表项和写入列表项。实际上这是两个虚方法,我们在编写实体类的时候,可以根据需要重写这两个方法,加入自己的逻辑。

比如下面的这个实体类:

此SampleEntity类重写了基类的Read和Write方法,在其内部添加了处理Money字段的转换逻辑,将该字段与Price属性相互转换。需要注意的是Price属性并没有被FieldAttribute或其任何子类修饰,这是因为该属性并不需要被SharePoint Entity Framework的默认转换机制来处理。

而Property1则通过FieldAttribute关联到了Field1字段,所以该属性会通过SharePoint Entity Framework的默认转换机制来处理。需要注意的是如果重写了Read或Write方法,但却没有在其内部调用父类的相应方法的话,SharePoint Entity Framework的默认转换机制就会被屏蔽掉。

适配自定义字段

SharePoint Entity Framework支持绝大多数SharePoint内置字段类型,也提供了机制来关联和转换我们开发的自定义字段。

假设SampleEntity中包含这样一个属性:

 
CustomField是一个自定义字段,其实现如下所示:

 
如果想要SharePoint Entity Framework的默认转换机制能识别并自动处理此字段,就需要为其编写一个转换器。在SharePoint Entity Framework中,所有转换器都需要实现IValueConverter接口(位于WindStyle.SPEntity.Converters命名空间),如下面的代码所示:

 
IValueConverter接口包含的ToFieldValue和ToPropertyValue方法分别会被用来将属性值转换为字段值和将字段值转换为属性值,其value参数表示原始值,targetType参数表示要转换到的目标类型,context则提供了一些有助于精确转换的上下文信息,比如SPListItem、SPRegionalSettings和属性所应用的具体FieldAttribute,可以根据需要来使用。

接下来通过ConverterAttribute将自定义字段和转换器关联起来:

 
至此,SharePoint Entity Framework就可以正确识别并处理CustomField字段了。每次执行SampleEntity的Read或Write方法,SharePoint Entity Framework都会使用CustomFieldConverter来读入CustomField字段中的值(或将值写入到CustomField字段),就像它是一个SharePoint内置字段一样。

适配自定义属性类型

ConverterAttribute和IValueConverter这套机制除了可以适配自定义字段之外,还可以适配自定义属性类型,并且用法一模一样。

下面通过代码示例来演示一下使用方法,假设SampleEntity中包含这样一个属性:

 
CustomProperty是一个自定义类型,其实现如下所示:

 
关联到CustomProperty的转换器类型是CustomPropertyConverter,其实现如下面的代码所示:

 
唯一需要注意的是SharePoint Entity Framework在选择转换器时,会优先考虑属性类型所指定的转换器。当属性类型没有指定转换器时,才会去根据FieldAttribute找到属性所关联的字段类型,然后再根据它来找到合适的转换器。

SharePoint Entity Framework的主要功能至此就介绍完了。欢迎使用。别忘了,它是开源的,现在就去下载吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息