cftransaction и cfinclude - PullRequest
       20

cftransaction и cfinclude

2 голосов
/ 29 ноября 2011

У меня вопрос по поводу тега cftransaction. У меня есть файл, как следует ... давайте назовем его act_update:

<cfif request.before>
    <cfinclude template="act_before.cfm">
</cfif>

<!--- Here I have a lot of thing to update the core table --->

<cfif request.after>
    <cfinclude template="act_after.cfm">
</cfif>

Я могу не трогать этот файл, потому что он используется и другими приложениями, но у меня есть руки на два включает ... В первую включенную (ранее) я положил:

<cftransaction action="begin" />

Во втором включении (после) я положил остаток транзакции:

<cftry>
    <!--- Update here for another table --->
    <cfcatch>
        <cftransaction action="rollback" />
    </cfcatch>
</cftry>
<cftransaction action="commit">

Я сделал ошибку в обновлении последней таблицы, чтобы проверить это, и я вижу, что откат не выполняется: (

Есть ли решение для этого? Заранее спасибо,

Michel

1 Ответ

4 голосов
/ 29 ноября 2011

Ты не можешь делать то, что пытаешься сделать. CFTRANSACTION имеет две разные функции.

Во-первых, чтобы сделать некоторый код БД транзакционным, нужно поместить его в блок транзакций. Это «оборачивает» код, который является транзакционным, например:

<cftransaction>
    <!--- your DB code here --->
</cftransaction>

Чтобы сделать что-то транзакционное, НУЖНО это сделать.

Как только это произойдет, можно выполнить такие действия над транзакцией, как фиксация, откат и установка точек сохранения. Однако они должны быть в основном блоке CFTRANSACTION.

Что вам нужно будет сделать, это обернуть ваш вызов act_update.cfm в теги CFTRANSACTION и выполнить контроль транзакций на этом уровне.

Это, между прочим, все в документах: http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7c6b.html

Примеры не так ясны или полны, как следовало бы, но если вы прочитаете все это целиком, то оно охватывается.

...