【问题标题】:What are the workarounds for missing transactions (rollback and commit) support on SharePoint Lists?SharePoint 列表上缺少事务(回滚和提交)支持的解决方法是什么?
【发布时间】:2011-05-21 05:09:54
【问题描述】:

SharePoint 不提供对列表数据操作的事务(回滚和提交)支持。实现事务行为的解决方法是什么。

用例 1: 当一个项目添加到列表中时,我想更新另一个列表项目。但如果更新失败,我想回滚添加到第一个列表中的项目。

用例 2: 以编程方式更新 10 个列表项。如果第 10 次更新失败,我想回滚之前的 9 次更新。

虽然 SharePoint 列表不是关系数据库,也不应该作为关系数据库,但开发人员越来越多地使用它来存储业务关键数据(需要数据完整性),并且不鼓励他们使用外部列表,因为它对普通列表中可用的功能。

【问题讨论】:

    标签: sharepoint sharepoint-2010 transactions


    【解决方案1】:

    由于 SPList 不提供对事务的固有支持,因此您必须自己处理回滚操作。

    在用例 1 和 2 中,模拟事务的最简单方法是在执行更新之前读取您正在更改的任何列表项的状态,然后在检测到故障时将该状态写回。这不是一个完美的解决方案,因为足够严重的错误也可能会阻止您的回滚更新。这就是您为没有数据存储支持事务而付出的代价。

    话虽如此,虽然许多客户确实会要求将业务关键数据存储在 SPLists 中,但我认为你的工作是让他们相信这不是一个好主意,通过 Web 服务访问的事务数据库是更安全的 SP 兼容方式来存储重要数据。

    【讨论】:

      【解决方案2】:

      我发现如果您使用支持版本控制的列表会更简单一些。 我使用中间类来访问列表项。当我在该类上调用 .Update() 时,我会存储我正在更新的任何项目的当前版本 ID。如果稍后在“事务”中出现任何问题,我只需恢复为该版本 ID。

      【讨论】:

      • 我认为这对于简单的用例来说是一个很好的工作解决方案。如果有工作流或事件接收器附加到 List 行操作,应用此方法太复杂或有时不可行。
      • 在其他数据库系统中,事务可以以声明方式完成(无需编写代码)。 List 的基本概念是 - 一个简单而强大的数据容器。仅仅为了实现转录行为,诉诸代码和破解之类的变通方法会破坏快速的生产力和简单性。
      • chuckle 我从来没有说过这是一个完美的解决方案。在某些情况下,版本方法有效,如果它不适合并且您仍希望将数据存储在 SharePoint 列表中,那么您将面临更长、更艰难的道路...
      猜你喜欢
      • 1970-01-01
      • 2014-03-16
      • 2016-01-06
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2013-11-22
      相关资源
      最近更新 更多