传递绑定变量以有条件地查看访问者

时间:2015-02-10 13:09:56

标签: groovy oracle-adf

我是Adf的新手,我有一个要求。我有一个VO(VO1),它有一个视图存取器(PVA),用于链接另一个VO(VO2)。

此VO2与flex字段有关(我不完全了解它)。但它与code_combinations表有关。

现在这个视图访问器有一个名为'Bind_ExtraWhereClause'的绑定变量,它的类型为'String',并在其中包含以下groovy表达式: "\${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'"

此表达式用于验证目的。

在运行此视图访问器时,我不知道运行时的确切点。现在我需要根据代码中的条件将上面的绑定变量groovy表达式更改为此"\${COMBINATION_TABLE}.SUMMARY_FLAG != 'Y' AND \${COMBINATION_TABLE}.DETAIL_POSTING_ALLOWED_FLAG = 'Y' AND \${COMBINATION_TABLE}.ENABLED_FLAG = 'Y'"

我如何实现这一目标?

我已经尝试过实现以下两种方法:

1)在VO1中创建了一个名为checkflag的类型字符串的瞬态属性,并在我的代码中将此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”时,它采用第一个条件,当它为“YES”时,它采用第二个条件。

2)我清除了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;
}

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

1 个答案:

答案 0 :(得分:0)

我不确定我100%理解你想要实现的目标,但看起来你需要一个动态的视图链接条件。

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

您需要开始以不同的方式思考它:不要使您的视图链接动态,而是在查询级别上移动动态逻辑 - 使用SQL计算属性。