有时候客户有特殊需求需要将SharePoint List中的数据同步到关系型数据库中,而SharePoint数据实际上是保存在站点的Content Database中的,不能直接从Content Database取数据。
下面有三种同步SP List数据通关系数据库中的方式:
1. 使用SharePoint Object Model通过程序取SharePoint数据,需要现熟悉MS的SharePoint Object Model,方式简单但效率可能不好。(具体没有试过,不敢乱说)
2. 分析Content Database
MS将SharePoint Lists的所有数据都保存在一张表里(AllUserData),分析这张表就会发现,为了表的可扩展性,所有字段的命名都没有规则。分析这些字段和实际list字段的对应关系式一件很tough的事情,通过进一步分析你会发现其实List 的 每个Field都在Content 数据库中有对应的字段
<Field Type="UserMulti" DisplayName="Employees" List="UserInfo" Required="TRUE" ShowField="ImnName" UserSelectionMode="PeopleOnly" UserSelectionScope="0" Mult="TRUE" Sortable="FALSE" ID="{2a8b9114-6948-46da-82fa-2797277e1f1e}" SourceID="{e71ce982-fd64-4c2f-98a8-787ac13c443b}" StaticName="Employees" Name="Employees" ColName="int1" RowOrdinal="0"/>
这样一切都变得简单了,mapping对应的column 和 filed就可以开始数据同步了。
3. 通过SharePoint WebServices。
可以在http://<Site>/_vti_bin/Lists.asmx找到所有SP提供的WebSerivces,GetListItems 可以返回指定List的所有数据,而GetListItemChangesSinceToken更加神奇,传递一个时间戳,它会返回给你在此时间戳之后所有更新了的数据,当然包括添加、删除和修改了的数据。
第二种效率最好,如果能有个支持增量同步的方案,这是个不错的选择。