На ум приходят два способа обработки логики перехвата ветвления, иметь 2 блока перехвата или проверить, что объект перехвата содержит нужные данные.
В моем первом примере я добавил блок catch исключительно для ошибок базы данных. Если тип ошибки - база данных, будет включен собственный код ошибки или он будет равен -1, если драйвер базы данных его не содержит. Для аргумента any я просто добавил строку возврата по умолчанию. Возможно, вы захотите иметь собственную логику, которая обрабатывает исключения, не относящиеся к типу базы данных.
<cftry>
// Stored procedure call
<cfcatch type="database">
<cfset local.fnResults = {status : "400", message : Application.functions.errorCatch(cfcatch.NativeErrorCode)}>
</cfcatch>
<cfcatch type="any">
//Non database related error
<cfset local.fnResults = "Error! Please contact your administrator.">
</cfcatch>
</cftry>
Во втором моем примере я только что обновил вашу функцию errorCatch, проверив, что NativeErrorCode существует, прежде чем мы попытаемся передать его.
<cfcatch type="any">
//Passing the default error code value, you may want custom logic here
<cfset local.fnResults = {
status : "400",
message : Application.functions.errorCatch( cfcatch.keyExists("NativeErrorCode")?cfcatch.NativeErrorCode:-1)
}>
</cfcatch>