JDeveloper 11.1.1.2.0
Oracle 10g (hr schema)
某应用开发中碰到需要根据行状态决定页面元素的显示状态的要求。具体要求如下:
存在页面page1与page2,数据表table1与table2,table1与table2为Master-Detail关系,使用taskflow控制页面跳转。
page1选择新建按钮跳转到page2,此时page2页面指定按钮refresh按钮不允许点击。当用户在page2完成对table1的创建/修改
操作并保存后,页面refresh按钮允许点击;当用户从page1通过修改按钮跳转至page2后,若不对table1的记录进行修改,则
refresh按钮允许点击,否则refresh按钮不允许点击。
按照通常做法,需配置taskflow级别变量用于记录table1中某行状态,在页面跳转及记录值变动时修改该行状态,并根据该行状态变量决定refresh按钮的可用性。这种做法的缺点在于需要定义变量,并在多处操作时对该变量值进行维护。
故直接取EntityObject行状态作为标志位进行判断。下例以hr schema中regions及countries作为示例。
分别创建View页面和Update页面,View页面放置regions表,并允许进行新增和修改的操作。
若通过新增按钮跳转至Update页面,或通过修改跳转至Update页面并对region信息作出修改,则refresh按钮不允许点击,否则refresh按钮允许点击,通过判断当前regions EntityObject的状态完成。
EntityObject在生命周期中具有五种状态
STATUS_UNMODIFIED - Entity Object源于数据库,且没有被修改过,或者修改已经被提交至数据库。 STATUS_MODIFIED - Entity Object源于数据库,当前已经被修改且在当前事务中修改没有提交至数据库。
STATUS_NEW - Entity Object为当前事务中新建的。 STATUS_DELETED - Entity Object在当前事务中被删除。
STATUS_DEAD - Entity Object为当前事务中新建的,且没有提交至数据库即被删除。
而各状态对应static值现下表
public static final byte
STATUS_NEW
0
Oracle 10g (hr schema)
某应用开发中碰到需要根据行状态决定页面元素的显示状态的要求。具体要求如下:
存在页面page1与page2,数据表table1与table2,table1与table2为Master-Detail关系,使用taskflow控制页面跳转。
page1选择新建按钮跳转到page2,此时page2页面指定按钮refresh按钮不允许点击。当用户在page2完成对table1的创建/修改
操作并保存后,页面refresh按钮允许点击;当用户从page1通过修改按钮跳转至page2后,若不对table1的记录进行修改,则
refresh按钮允许点击,否则refresh按钮不允许点击。
按照通常做法,需配置taskflow级别变量用于记录table1中某行状态,在页面跳转及记录值变动时修改该行状态,并根据该行状态变量决定refresh按钮的可用性。这种做法的缺点在于需要定义变量,并在多处操作时对该变量值进行维护。
故直接取EntityObject行状态作为标志位进行判断。下例以hr schema中regions及countries作为示例。
分别创建View页面和Update页面,View页面放置regions表,并允许进行新增和修改的操作。
若通过新增按钮跳转至Update页面,或通过修改跳转至Update页面并对region信息作出修改,则refresh按钮不允许点击,否则refresh按钮允许点击,通过判断当前regions EntityObject的状态完成。
EntityObject在生命周期中具有五种状态
STATUS_UNMODIFIED - Entity Object源于数据库,且没有被修改过,或者修改已经被提交至数据库。 STATUS_MODIFIED - Entity Object源于数据库,当前已经被修改且在当前事务中修改没有提交至数据库。
STATUS_NEW - Entity Object为当前事务中新建的。 STATUS_DELETED - Entity Object在当前事务中被删除。
STATUS_DEAD - Entity Object为当前事务中新建的,且没有提交至数据库即被删除。
而各状态对应static值现下表
oracle.jbo.server.Entity | ||
public static final byte | STATUS_DEAD | 4 |
public static final byte | STATUS_DELETED | 3 |
public static final byte | STATUS_MODIFIED | 2 |
public static final byte | STATUS_UNMODIFIED | 1 |
*oracle.jbo.Row |
故只需修改Update页面的refresh按钮Disabled属性,通过EL表达式进行行状态判断,进而返回true/false即可。
ADF
中ViewController通过EL表达式绑定取得Model中属性的值,当前IDE只提供了很少数的语法提示,那么根据Java命名规则,在
Model层通过getAbc()取得的值,在ViewController中该Abc作为对象abc存在,则可通过EL表达式#
{bindings.XXX.abc}取得Model层XXX.getAbc()取得的值。
故通过查阅Fusion Middleware API,可知EL表达式应写作
#{bindings.RegionsView1Iterator.currentRow.entities[‘0’].entityState == ‘1’ ? false : true}