2014-01-18 28 views
-1

我想我已經構建了最簡單的場景。我只是想通過每個人的理智檢查。這裏的想法:從ColdFusion和Railo執行存儲過程的常見方法

GetErrorCodes.cfm執行以下操作:

<cfscript> 
response = new ErrorCodes().WhereXXX(); // ACF or Railo, doesn't matter 
</cfscript> 

ErrorCodes.cfc:

function WhereXXX() { 
return new sproc().exec('app.GetErrorCodes'); // All my functions will do this instead of executing the sproc themselves. 
} 

sproc.cfc:

component { 
function exec(procedure) { 
    local.result = {}; 
    if (server.ColdFusion.productname == 'Railo') { 
     return new Railo().exec(arguments.procedure); // Has to be outside of sproc.cfc because ColdFusion throws a syntax error otherwise. 
    } 
    local.svc = new storedProc(); 
    local.svc.setProcedure(arguments.procedure); 
    local.svc.addProcResult(name='qry'); 
    try { 
     local.obj = local.svc.execute(); 
     local.result.Prefix = local.obj.getPrefix(); 
     local.result.qry = local.obj.getProcResultSets().qry; 
    } catch(any Exception) { 
     request.msg = Exception.Detail; 
    } 
    return local.result; 
} 

Railo.cfc:

component { 
     function exec(procedure) { 
local.result = {}; 
      try { 
       storedproc procedure=arguments.procedure result="local.result.Prefix" returncode="yes" { 
        procresult name="local.result.qry"; 
       } 
      } catch(any Exception) { 
       request.msg = Exception.Message; 
      } 
      return local.result; 
     } 
     } 

因此,我一直在研究這一整天,但告訴我,如果要在ColdFusion服務器或Railo服務器上運行源代碼,保持源代碼是否相同,這是一種有效的方法嗎?

回答

4

嗯......只是使用<cfstoredproc>而不是嘗試使用兩種不同的CFScript方法,這兩種方法是互相獨立的CFML平臺。

+0

哦。我想我已經把我的腦袋擡起來了,以至於我不能回頭看......嗯...... 呃?我得看看那個。謝謝! –

+0

也許作爲安裝過程的一部分,我可以讓sproc.cfc成爲ACF版本或Railo版本,而不必在每次調用函數時都執行if/then操作。 –

+0

我認爲你是對的。那裏沒有什麼驚喜我需要回到使用標籤而不是腳本組件 - 至少對於存儲過程。 –