Coldfusion 替代评估()以动态从查询返回值

0 coldfusion

我一直在尝试找出正确的符号来使用该evaluate()函数。让我尝试解释一下:

我有几个组件:tasks.cfcrisks.cfc...等,每个组件都有各自的功能。命名约定类似,例如在tasks.cfc 中

我有该方法countAllFunctionInstanceTasks,返回变量具有相同的名称(countAllFunctionInstanceTasks),并且在risks.cfc我有等效的方法countAllFunctionInstanceRisks,并且其返回变量具有相同的名称(countAllFunctionInstanceRisks)。每个返回变量都是一个具有以下键的结构:

totalRed
totalAmber
totalGreen
totalComplete
totalOpen
Run Code Online (Sandbox Code Playgroud)

当我调用该组件时,我动态执行此操作:

<cfinvoke component="components.#session.myPermissions[i][j][k][l][m][n][o]["activityName"]#" 
    method="countAllFunctionInstance#session.myPermissions[i][j][k][l][m][n][o]["activityName"]#" 
    returnvariable="countAllFunctionInstance#session.myPermissions[i][j][k][l][m][n][o]["activityName"]#">
Run Code Online (Sandbox Code Playgroud)

所做的[i][j][k][l][m][n][o]["activityName"]就是从一组嵌套结构中提取一个值,并将重新调整该值(保持上面的示例)“任务”或“风险”。

这一点工作正常,它会按预期重新调整相应的值,例如,如果我在哪里:

<cfoutput>#countAllFunctionInstanceTasks.totalOpen#</cfoutput> 
Run Code Online (Sandbox Code Playgroud)

我将从tasks.cfc 中获得正确的值并且

<cfoutput>#countAllFunctionInstanceRisks.totalOpen#</cfoutput> 
Run Code Online (Sandbox Code Playgroud)

我将从中获得正确的值risks.cfc

到目前为止一切都很好,但是......我需要动态获取这些值,但我正在努力获取正确的符号来动态返回相应的值。所以我可以做类似的事情:

<p>countAllFunctionInstance#session.myPermissions[i][j][k][l][m][n][o]["activityName"]#.totalOpen</p> 
Run Code Online (Sandbox Code Playgroud)

这将返回字符串:

"countAllFunctionInstanceTasks.totalOpen"
"countAllFunctionInstanceRisks.totalOpen"
Run Code Online (Sandbox Code Playgroud)

但我想做的是动态生成已经存在并已从相应 cfc 重新调整的变量名称。

到目前为止,我所能做的就是:

<cfset totalOpen = "countAllFunctionInstance#session.myPermissions[i][j][k][l][m][n][o]["activityName"]#.totalOpen" />
<cfoutput>#evaluate(totalOpen)#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

我知道使用该evaluate()函数不是一个好习惯,我试图找到一种替代符号,例如:

#["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"] & ".totalOpen"]#
Run Code Online (Sandbox Code Playgroud)

我已经阅读了我可以找到的关于评估()替代方案和数组表示法的其他帖子,但这些与我在这里的用例不太一样,经过多次尝试和内涵,没有任何效果,我完全被难住了!

有人可以帮我吗?

谢谢你,

詹姆士

Adr*_*eno 5

您调用的字符串evaluate()

#["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"] & ".totalOpen"]#
Run Code Online (Sandbox Code Playgroud)

该变量countAllFunctionInstance应该在variables请求的范围内。所以你应该能够像这样引用它:

variables["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"]].totalOpen
Run Code Online (Sandbox Code Playgroud)

或者

variables["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"]]["totalOpen"]
Run Code Online (Sandbox Code Playgroud)

或者

x = variables["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"]];
#x.totalOpen#
Run Code Online (Sandbox Code Playgroud)