Groovy 有条件地将绑定变量传递给视图访问器

Groovy 有条件地将绑定变量传递给视图访问器,groovy,oracle-adf,Groovy,Oracle Adf,我是Adf的新手,我有一个要求。我有一个VOVO1,它有一个视图AccessorPVA,用于链接另一个VO2 本VO2与flex Fields有关。我不完全了解。但它与代码组合表有关 现在,该视图访问器有一个名为“bind_extrawhere子句”的绑定变量,该变量的类型为“String”,其中包含以下groovy表达式: \${COMBINATION\u TABLE}.ACCOUNT\u TYPE='L'和\${COMBINATION\u TABLE}.SUMMARY\u FLAG!='Y'

我是Adf的新手,我有一个要求。我有一个VOVO1,它有一个视图AccessorPVA,用于链接另一个VO2

本VO2与flex Fields有关。我不完全了解。但它与代码组合表有关

现在,该视图访问器有一个名为“bind_extrawhere子句”的绑定变量,该变量的类型为“String”,其中包含以下groovy表达式: \${COMBINATION\u TABLE}.ACCOUNT\u TYPE='L'和\${COMBINATION\u TABLE}.SUMMARY\u FLAG!='Y'和\${COMBINATION\u TABLE}。详细信息\允许的\标志='Y'和\${COMBINATION\u TABLE}。启用的\标志='Y'

此表达式用于验证目的

我不知道运行时执行此视图访问器的确切时间点。现在我需要将上面的绑定变量groovy表达式更改为\${COMBINATION\u TABLE}.SUMMARY\u FLAG!='Y'和\${COMBINATION\u TABLE}。详细信息\允许\标志='Y'和\${COMBINATION\u TABLE}。根据代码中的条件启用\标志='Y'

我怎样才能做到这一点

我已经尝试了以下两种方法:

我在VO1中创建了一个名为checkflag的瞬态属性,该属性的类型为string,并在代码中将该checkflag设置为以下值之一YES或NO。然后我编辑了绑定变量groovy表达式,如下所示:

checkflag!="YES"?return "\${COMBINATION_TABLE}.ACCOUNT_TYPE = 'L' AND \${COMBINATION_TABLE}.SUMMARY_FLAG != 'Y' AND \${COMBINATION_TABLE}.DETAIL_POSTING_ALLOWED_FLAG = 'Y' AND \${COMBINATION_TABLE}.ENABLED_FLAG = 'Y'":return "\${COMBINATION_TABLE}.SUMMARY_FLAG != 'Y' AND \${COMBINATION_TABLE}.DETAIL_POSTING_ALLOWED_FLAG = 'Y' AND \${COMBINATION_TABLE}.ENABLED_FLAG = 'Y'"
所以当checkflag为NO时,它接受第一个条件,当checkflag为YES时,它接受第二个条件

2I从VA中清除了Bind_ExtraWhereClause值,并尝试在getPVA方法中从VOROWIMPL填充该值,如下所示:

public RowSet getPVA(){
RowSet rs = (RowSet)getAttributeInternal(PVA);
if("NO".equals(checkflag)){   rs.setNameWhereClauseParam("Bind_ExtraWhereClause","\${COMBINATION_TABLE}.ACCOUT_TYPE = 'L' AND \${COMBINATION_TABLE}.SUMMARY_FLAG != 'Y' AND \${COMBINATION_TABLE}.DETAIL_POSTING_ALLOWED_FLAG = 'Y' AND \${COMBINATION_TABLE}.ENABLED_FLAG = 'Y'");}
else{rs.setNameWhereClauseParam("Bind_ExtraWhereClause","\${COMBINATION_TABLE}.SUMMARY_FLAG != 'Y' AND \${COMBINATION_TABLE}.DETAIL_POSTING_ALLOWED_FLAG = 'Y' AND \${COMBINATION_TABLE}.ENABLED_FLAG = 'Y'");}
rs.executeQuery();
return rs;
}

不幸的是,这两种方法对我都没有帮助。

我不确定自己是否100%理解您想要实现的目标,但看起来您需要动态视图链接条件

不要试图更改视图链接表达式,而是在VO1中使用临时字段,但这次使用SQL表达式作为默认值

您需要从不同的角度来考虑:不要让视图链接成为动态的,而是使用SQL计算属性在查询级别移动动态逻辑