任何阻止旧版CF的新代码的方法

时间:2013-04-19 18:24:54

标签: coldfusion

我已经为一些安全补丁编写了一个库。在该库中有许多CF8和up函数,属性等。

我真的不想削减功能,因为adobe无法将它们整合在一起并将这些基本功能融入到CF7中,因此我希望在每个功能中编写单独的行。问题是当CF最初读取它发现的代码时,如果它发现它无法识别的东西,无论它是否将被调用。

例如在cfdirectory中,CF7不支持'type'属性。当'type'属性存在时,我有一个在CF7中失败的find目录函数,并且取出它会使搜索时间增加10倍。

<cftry> 
<cfdirectory action="list" directory="#arguments.start#" name="LOCAL.dirquery" type="dir" /><!---//GET QUERY OF DIRECTORIES IN START DIRECTORY--->
<cfcatch>
    <cfsetting requesttimeout="600">
    <cfdirectory action="list" directory="#arguments.start#" name="LOCAL.dirquery" /><!---//GET QUERY OF DIRECTORIES IN START DIRECTORY--->
</cfcatch>

此代码不起作用,条件块也不起作用。我猜测读者无法用任何语言解析,因此失败了。

1 个答案:

答案 0 :(得分:5)

代码可能在编译时失败,而不是在运行时(需要查看您收到的错误以确定)。如果是编译器错误,则需要在CF8 +功能的单独组件中分解CF7功能。然后在运行时检查CF版本以确定要调用的组件/功能。

这是您可以在应用程序启动时使用的一些伪代码,以将正确的版本功能加载到内存中。这样,您就可以在代码中的任何位置调用函数。

伪代码:

onApplicationStart(){

    if (server.coldfusion.productversion == 7){
        application.cffunctions = CF7FunctionsComponent;
    } else {
        application.cffunctions = CF8FunctionsComponent;
    }

}

在其他任何地方,无论当前运行的CF版本如何,都可以调用相同的函数:

application.cffunctions.doSomething();