Domanda

Ho una funzione nel file di CFC, che sarà chiamato da file .cfm come qui di seguito

 <cffunction name="cftest" access="public" returntype="query" output="true" hint="Function returns Records">

      <cfquery name="qryTest" datasource="DBTest">
                select * from emp_tab;
       </cfquery>

    <cfreturn selectRecordsResultSet />

 </cffunction>

Come posso gestire DB Eccezione utilizzando cftry? in quanto questo sta tornando Query, E 'possibile intercettare l'eccezione DB e passare i dettagli per l'altra pagina da dove è chiamato?

Grazie

È stato utile?

Soluzione

Ecco un esempio di mio solito attuazione del presente:

<cffunction name="getCurrentRecordsCount" access="public" output="false" returntype="any" hint="Get total history records count">
    <cfargument name="filters" type="struct" required="false" default="#StructNew()#" hint="Filtering rules">
    <cfset var qGetRecordCount = "" />
    <cftry>

        <cfquery datasource="#variables.dsn#" name="qGetRecordCount">
            SELECT COUNT(*) AS cnt FROM ....
        </cfquery>

        <cfreturn qGetRecordCount.cnt />

    <cfcatch type="any">
        <cfreturn error(cfcatch.message, cfcatch.detail) />
    </cfcatch>
    </cftry>
</cffunction>

Se si desidera gestire gli errori solo database, tipo di modifica al di database .

gestione e di segnalazione effettuata utilizzando questi tre metodi errori:

<cffunction name="error" access="private" output="false" returntype="boolean" hint="Set error status and message">
    <cfargument name="message" type="string" required="true" hint="Error message text" />
    <cfargument name="detail" type="string" required="false" default="" hint="Error detail text" />
    <cfset variables.fError = true />
    <cfset variables.fErrorText = arguments.message />
    <cfif Len(arguments.detail)>
        <cfset variables.fErrorText = variables.fErrorText & " [" & arguments.detail & "]" />
    </cfif>
    <cfreturn false />
</cffunction>

<cffunction name="gotError" access="public" output="false" returntype="boolean" hint="Return latest error flag state">
    <cfreturn variables.fError />
</cffunction>

<cffunction name="getError" access="public" output="false" returntype="string" hint="Return latest error text and reset the flag">
    <cfset var txt = variables.fErrorText />
    <cfset variables.fError = false />
    <cfset variables.fErrorText = "" />
    <cfreturn txt />
</cffunction>

Si prega di notare che per i metodi con returnType = "vuoto" Io uso cfset invece di cfreturn:

<cfset error(cfcatch.message, cfcatch.detail) />

Quindi, in codice posso fare quanto segue (cfscript):

// calculate filtered records count
totalLogCount = request.loggingService.getCurrentRecordsCount(filters);

// check if error was thrown
if (request.loggingService.gotError()) {
   // report the error details somehow
   WriteOutput(request.loggingService.getError());
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top