从CFMODULE获取返回值

时间:2014-02-26 19:01:21

标签: coldfusion

我正在使用一些我们既无法控制又无法查看来源的供应商代码。

为了便于解释,我假设我有三个文件。

Test.cfm
VendorModule.cfm
Custom.cfm

在Test.cfm中:我正在调用cfmodule:

<CFMODULE template="VendorModule.cfm">

我对供应商模块一无所知;不是它执行的代码或它调用的其他模块等,除了它会在某个时候调用我的文件:Custom.cfm

在Custom.cfm中:是否有一些逻辑和打印是或否(显然变量“某些东西”在我省略的代码中定义)

<cfif something is true>
    <cfoutput>Yes</cfoutput>
<cfelse>
    <cfoutput>No</cfoutput>
</cfif>

当我运行Test.cfm时,我会在页面上按预期获得“是”或“否”输出。

我想要做的是让Custom.cfm设置一个变量,然后由Test.cfm读取。

所以Custom.cfm看起来像:

<cfif something is true>
    <cfset ??? = "Yes">
<cfelse>
    <cfset ??? = "No">
</cfif>

Test.cfm看起来像:

<CFMODULE template="VendorModule.cfm">
<!--- Do something here based on value of ??? set in Custom.cfm --->

这可以做到我可以得到的东西吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

这绝对不是一个理想的情况,但鉴于您无法看到vendormodule.cfm代码,更不用说更改它了,您的选择是有限的。

如果vendormodule.cfmcustom.cfmcfinclude中调用了您的cfmodule,您可以修改此后的范围,甚至建议它,但它应该完成你所追求的目标。

<cfif something is true>
  <cfset caller.caller.result = "Yes">
<cfelse>
  <cfset caller.caller.result = "No">
</cfif>

上述代码必须根据调用custom.cfm级别进行修改。例如,如果custom.cfm深度为六级,那么它会引用variables范围内的test.cfm范围,如下所示:

caller.caller.caller.caller.caller.caller.result

您唯一的其他选择是修改custom.cfm test.cfm可以看到的{{1}}内的其他共享范围。

希望有所帮助。

答案 1 :(得分:0)

通常,cfmodule会使用Caller范围返回值,该范围是cfmodule的调用方,即Test.cfm。因此,可能在调用cfmodule之前和之后,转储Variables范围,并查看cfmodule是否设置了任何其他变量。

某些cfmodule也可能会返回其他范围内的变量,例如: Request范围。因此,如果您未在Variables范围内看到任何新设置,请尝试所有其他范围。