evaluate() 的 Coldfusion 替代方案,用于动态从查询中返回值

Coldfusion alternative to evaluate() to return a value from a query dynamically

提问人:James 提问时间:9/30/2023 最后编辑:Adrian J. MorenoJames 更新时间:9/30/2023 访问量:76

问:

我被困在试图找出正确的符号以使用函数的 instad 时。让我试着解释一下:evaluate()

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

我有方法,返回变量是同名的(),在我有等效的方法,它的retun变量是同名的()。每个返回变量都是一个具有以下键的结构:countAllFunctionInstanceTaskscountAllFunctionInstanceTasksrisks.cfccountAllFunctionInstanceRiskscountAllFunctionInstanceRisks

totalRed
totalAmber
totalGreen
totalComplete
totalOpen

当我调用组件时,我会动态地执行以下操作:

<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"]#">

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

该位工作正常,它按预期重新调整了 respecive 值,例如,如果我在哪里:

<cfoutput>#countAllFunctionInstanceTasks.totalOpen#</cfoutput> 

我将从 tasks.cfc 和

<cfoutput>#countAllFunctionInstanceRisks.totalOpen#</cfoutput> 

我将从 .risks.cfc

到目前为止一切顺利,但是......我需要动态获取这些值,但我正在努力获得正确的表示法来动态返回相应的值。所以我可以做这样的事情:

<p>countAllFunctionInstance#session.myPermissions[i][j][k][l][m][n][o]["activityName"]#.totalOpen</p> 

这将返回字符串:

"countAllFunctionInstanceTasks.totalOpen"
"countAllFunctionInstanceRisks.totalOpen"

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

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

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

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

#["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"] & ".totalOpen"]#

我已经阅读了我可以找到的有关 evaluate() 替代品和数组表示法的其他帖子,但这些与我在这里的用例并不完全相同,经过几次尝试和内涵,没有任何效果,我完全被难住了!

谁能帮我?

谢谢

詹姆斯

冷融合

评论


答:

5赞 Adrian J. Moreno 9/30/2023 #1

您调用的字符串:evaluate()

#["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"] & ".totalOpen"]#

该变量应在请求范围内。因此,您应该能够像这样引用它:countAllFunctionInstancevariables

variables["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"]].totalOpen

variables["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"]]["totalOpen"]

x = variables["countAllFunctionInstance" & session.myPermissions[i][j][k][l][m][n][o]["activityName"]];
#x.totalOpen#