使用CFTransaction,CFThrow和CFDump中止回滚

时间:2018-04-02 18:18:07

标签: coldfusion rollback

我已阅读有关cftransaction的文档,但无法弄清回到<cfdump var="#myVar#" abort><cftransaction action="rollback" /><cfthrow message="Error">

之间的区别

假设var a已预设用于示例目的。 cftransaction标记内的所有查询仅在使用cfdump abort时进行回滚。使用正确的rollback actioncfthrow标记,他们回滚。

我是CF2016的新手。有人可以向我解释回滚与之间的差异吗?

<cftransaction action="begin">
  ...somecode with querys...
  <cfif a eq 1>
    <cftransaction action="rollback" />
  <cfelseif a eq 2>
    <cfthrow message="Error">
  <cfelse>
    <cfdump var="Error" abort>
  </cfif>
</cftransaction>

1 个答案:

答案 0 :(得分:1)

尝试在执行回滚操作之前设置一个保存点...我不是100%确定是否需要在实际执行回滚之前明确设置

由于<cfabort>停止处理页面,<cftransaction>标记中的所有查询都会被撤销,无论使用<cftransaction action="rollback" />进行保存,您都可以将其重置为查询集中的特定点。

例如,考虑以下流程

<cftransaction> 
 <Query 1 > 
 <Query 2 > 
 <cftransaction action = "setsavepoint" savepoint = "#point#"/> 
  <Query 3 > 
 </cftransaction>

如果查询3与<cftransaction action="rollback" savepoint="#point#" />失败,您可以回滚到不必重做<Query 1 > <Query 2 >的地方,只需担心<Query 3 >不会重复这些查询而节省一些开销。通过CFDUMP中的CFABORT,它将中止整个事务

此页面上的最后一个撤消示例显示了保存点的使用 https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-t/cftransaction.html

相关问题