OAF—Entity Object 之 Delete Data
在FORM里面删除记录相当的容易,因为FORM可以根据你光标所在的行来删除当前记录,只要简单的在Trigger里面写上delete_record就可以了.
但在OAF中,目前我所知道的删除都有些麻烦(不排除有方便的方法,有待研究).
为什么麻烦呢?在OAF中,似乎不是根据你光标所在的行来删除对应的记录,而是根据记录指针来删除,而这个指针又与你的光标位置无关,
需要用代码来精确的定位.因此我们在删除记录时,需要编写一定的代码来实现.
User’s Guide中提供了一种标准的删除方法,通过在在当前记录集中用指针进行循环来定位需要删除的记录(例子提供的是只删一条).
我觉得挺麻烦,又找了找,总结了几种方法.
单记录删除: 不需要用循环处理,结合SPEL ("Simplest Possible Expression Language")语言即可实现.
批量记录删除:方法有好几种,觉得User’s Guide中的最麻烦(也许是最严谨的).
不管如何删除,总的实现思路如下:
首先给需要删除的记录做标记: 要么打勾选上,要么在行上放个图标按钮来点火,总之,方法很多.
其次根据标记来精确定位记录指针:单个删除一定性定位,多条记录需定位多次.
最好弹出确认,以便防止误删除.
执行删除并提交.
好,下面先来看看单记录的删除吧:
实现方法:
在PageLayout上建立一个FormParameter.名为” WantToDeleteId”.将要用来存放需要删除的行的主键ID.
在VO中建个伪列,值为Null,名称定为Deleteflag.用来生成删除按钮.
在记录行上加一个图标按钮,用来触发删除动作,并提取所要删除行的Primary Key.如下:
ID: DeleteFlag
Item Style.: Image
Image Url: deleteicon_enabled.gif (就是那个经典的小垃圾筒)
View Instance: <your VO name>
View Attribute: Deleteflag
Action Type: FireAction
Event: delete (名称自定)
Submit: True
Parameters:
Name: “ WantToDeleteId”
Value: ${oa.<your VO name> . <Primary Key name>} 例如: ${oa.OrderLineVO.LineId} 这就是SPEL语言
当点击这个图标时,OAF会提取Primary Key的值,并传给Form. parameter.
在AM中编写删除记录的代码,如下:
import oracle.jbo.Row;
...
public void removedata(String deleteId)
{
OAViewObjectImpl vo1 = this.getOrderLineVO1(); //实例化VO
int delid = Integer.parseInt(deleteId); //转换传入的主键ID为int型
Row row = vo1.getFirstFilteredRow("LineId",new Number(delid)); //获取根据ID所查询出的行.
row.remove(); //删除
getTransaction().commit(); //提交
}
请注意,一般主键都为Number型,而通过CO传过来的参数一般都为String,所以需要进行转换.
在CO中编写代码用来点火并调用AM的代码,如下:
import java.io.Serializable;
...
if ("delete".equals(pageContext.getParameter(EVENT_PARAM))) //识别事件名称
{
String aa =pageContext.getParameter("WantToDele
相关新闻>>
- 发表评论
-
- 最新评论 更多>>