读书人

做list更新时只需要遍历那些在时间下

发布时间: 2013-01-07 10:02:24 作者: rapoo

做list更新时,只需要遍历那些在时间上比在上一次做数据同步操作的时间晚的那些数据。Timer job
有一个sharepoint list.取名为list1. list1 中目前有数据(items)千条左右, list1 上有个button 是用来做数据同步和更新的, 是把list2 上的数据同步到list1上来的。如果list2 上有新增或修改的数据,通过button 点击就可以把这些在list1上不存在的list2 上的数据添加或者更新到list1 上来。 ---(这部分功能已经实现)

问题1: 每当我在list1上做同步数据的操作(点击button)时,程序都会遍历list1 上所有的items,因为数据量庞大,导致性能和速度不高。 我希望能做一个时间标记。 比如:我做数据同步操作时,只需要遍历那些 在时间上 比在上一次做数据同步操作的时间晚的那些数据,这样一来,在做更新的过程中性能就要好很多。

问题2: 如果要设置一个定时器 (Timer job)实现数据的自动更新呢, 这个要如何去实现呢?


希望各位高手们多多指教,小弟在此感谢!(尽量详细解答,有代码示例更好)
[解决办法]
我这有一个思路,希望对你有帮助。

其实我的想法也很简单:
1. 在list2中添加一列,名为status。来记载该条记录是不是新政的,如果是,给个值(例如status是Boolean类型的,那么如果是新增的就给赋值1。)
2. 写一个Timejob,来caml出来其中状态为1的所有Item。然后把它们添加到list1种,并且把list2
中的已经添加到list1种的所有数据状态修改为0。

思路是这样。不知道是否可以帮到你。如果有其他疑问,请继续!
[解决办法]
转一个看到的

[/size]


[解决办法]
引用:
引用:
我这有一个思路,希望对你有帮助。

其实我的想法也很简单:
1. 在list2中添加一列,名为status。来记载该条记录是不是新政的,如果是,给个值(例如status是Boolean类型的,那么如果是新增的就给赋值1。)
2. 写一个Timejob,来caml出来其中状态为1的所有Item。然后把它们添加到list1种,并且把lis……


就是写到你的按钮事件里就可以了呀 上面不是说的很清楚了吗

还有另外一个思路就是通过时间还进行判断 在查询list2中Item 的创建时间 通过caml 查询 就能够得到哪些是新增的了 功能用在time Job 中最适合了 这种方法的缺点就是一定要把每次更新的时间记的准确 还要有固定位置长期存储
[解决办法]
引用:
hi, 5楼朋友:我看了你这个思路: “还有另外一个思路就是通过时间还进行判断 在查询list2中Item 的创建时间 通过caml 查询 就能够得到哪些是新增的了 功能用在time Job 中最适合了 这种方法的缺点就是一定要把每次更新的时间记的准确 还要有固定位置长期存储 ”

对于上面的思路我的理解是:在list2中通过查询,那些在创建时间上大于 在list1上 上一次做更新的时间,……


不是这样的 那个时间是记录list2每次同步到list1中的时间 比如:list2在2011年1月1日同步了一次 那么那个时间就是2011年1月1日 下次在同步的时候就是从2011年1月2日开始同步 我觉得是这样
每次只记录list2中最后同步的时间
[解决办法]
刚才我又看了下你的描述 应该和你说的意思差不多 因为不清楚你list1中的记录是否有别的来源 所以有点区别
[解决办法]
引用:
引用:
刚才我又看了下你的描述 应该和你说的意思差不多 因为不清楚你list1中的记录是否有别的来源 所以有点区别

list1 中本身也存在一些数据,在lsit1上通过button 做同步,就是把list2上那些与list1上本身存在的数据不同的数据添加到list1上来, (这个虽已实现)。 我的问题是:
 比如,list1 在9月20日通过butto……


就是这个意思
具体怎么写Time Job 你可以去msdn上看看 不是很复杂
然后通过Caml 把 list2上符合条件的ListItem 读取出来 在用你写的同步的方法就可以了

CAML的写法
<Leq>
<FieldRef Name='StartTime'/>
<Value Type='DateTime' IncludeTimeValue='TRUE'>DateTime</Value>
</Leq>

红色的部分就是更新的时间点

读书人网 >行业软件

热点推荐