在用户更新数据的时候,使用EventHandler更新用户无法更新的数据

  在实际项目开发过程中,大家可能会遇到这样一个简单的问题:在一个列表中有很多字段,其中有一个或是多个字段不能让用户操作。这一个或是多个字段需要用户在进行更新操作的时候进行相应的更新。例如,在我做的一个项目当中,有这么一个逻辑过程,用户对一条信息进行受理和处理(此条信息已经存在)。在受理和处理的时候(即更新这条数据的时候),需要自动把受理时间或是处理时间添加到相应的“栏”中。这个时候,就需要写一段EventHandler。

  我在写这个EventHandler过程中遇到一个大问题,可能对大家这种Sharepoint老手来说不是问题,而我只是刚刚上班的小菜鸟,而这就成了我的问题。我也是一步一步琢磨出来的。废话不多说,先贴代码:

 1  public override void ItemUpdating(SPItemEventProperties properties)
 2         {
 3             base.ItemUpdating(properties);
 4             try
 5             {
 6                 
 7                 //受理和处理时间的添加
 8                 SPItemEventDataCollection AfterData = properties.AfterProperties;
 9                 object slPeople = AfterData["shoulicaozuoren"];
10                 object clPeople = AfterData["chulicaozuoren"];
11                 string sp = slPeople.ToString();
12                 //SPWeb web = properties.OpenWeb();
13                 //SPList list = web.Lists[properties.ListId];
14                 //SPListItem item = list.GetItemById(properties.ListItemId);
15                 if (sp != "" && clPeople == null && properties.ListItem["申请状态"].ToString() == "已提交")
16                 {
17                     AfterData["shoulishijian"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ");
18                 }
19                 else if (clPeople != null && sp != "")
20                 {
21                     AfterData["chulishijian"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ");
22                 }
23                 else if (clPeople != null && sp == "")
24                 {
25                     AfterData["chulishijian"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ");
26                     AfterData["shoulishijian"] = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ");
27                     AfterData["shoulicaozuoren"] = "";
28                     AfterData["shouliyijian"] = "此申请没有经历受理阶段,直接进入处理阶段。";
29                 }
30                 else
31                 {
32                     return;
33                 }
34                 //item.Update();
35                 //base.DisableEventFiring();
36                 //properties.ListItem.Update();
37                 //base.EnableEventFiring();
38             }
39             catch
40             { }
41 
42         }

  大家可以看到我把这段代码写到了ItemUpdating方法中了,从我注释掉的代码中也可以看到,我进入了一个误区:想在此处更改数据后再次Update,我不用说大家也可以想象的到,如果这样写的话最后就有一个结果,那就是“死循环”。经过个人的思考和资料的查询,我发现其实没有想象的那么麻烦,使用properties.AfterProperties即可,因为是在数据还没有提交的状态下,所以可以把即将更新的数据某个栏更新一下。那么,列表最终更新栏的数据就是这两处更新的集合。根本不用再次使用Update。

  此篇博文只是为了提醒自己不要第2次进入误区,也希望能够帮助被此问题困扰的人。

posted on 2012-05-20 22:20 猛梦源 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/casperlong/archive/2012/05/20/2510920.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值