码迷,mamicode.com
首页 > 其他好文 > 详细

OAF_OAF EO系列增删改 - Delete详解和实现(案例)

时间:2014-06-18 21:42:31      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:des   cWeb   style   blog   code   tar   

2014-06-14 BaoXinjian

bubuko.com,布布扣一、摘要


在OAF中,似乎不是根据你光标所在的行来删除对应的记录,而是根据记录指针来删除,而这个指针又与你的光标位置无关
需要用代码来精确的定位.因此我们在删除记录时,需要编写一定的代码来实现.
User’s Guide中提供了一种标准的删除方法,通过在在当前记录集中用指针进行循环来定位需要删除的记录(例子提供的是只删一条).

不管如何删除,总的实现思路如下:

  • Step1. 首先给需要删除的记录做标记:  要么打勾选上,要么在行上放个图标按钮来点火,总之,方法很多.
  • Step2. 其次根据标记来精确定位记录指针: 单个删除一定性定位,多条记录需定位多次.
  • Step3. 最好弹出确认,以便防止误删除.
  • Step4. 执行删除并提交.

我觉得挺麻烦,又找了找,总结了几种方法.

  • 单记录删除:
    • 不需要用循环处理,结合SPEL ("Simplest Possible Expression Language")语言即可实现.
    • 具体实现方式

    Step1. 在PageLayout上建立一个FormParameter. 名为” WantToDeleteId”. 将要用来存放需要删除的行的主键ID.
               在VO中建个伪列, 值为Null, 名称定为Deleteflag. 用来生成删除按钮.
               在记录行上加一个图标按钮,用来触发删除动作,并提取所要删除行的Primary Key.如下:

Action Type:     FireAction

Event:              delete (名称自定)

Submit:             True

Parameters:  Name:   “ WantToDeleteId”

Value:  ${oa.<your VO name> . <Primary Key name>}  例如: ${oa.OrderLineVO.LineId}   这就是SPEL语言

Step2. 当点击这个图标时,OAF会提取Primary Key的值,并传给Form. parameter.

在AM中编写删除记录的代码,如下:
    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, 所以需要进行转换.

Step3. 在CO中编写代码用来点火并调用AM的代码, 如下:

if ("delete".equals(pageContext.getParameter(EVENT_PARAM)))  //识别事件名称{
         String aa =pageContext.getParameter("WantToDeleteId ");  //获取Form. parameter 的值
         Serializable[] parameters = {aa}; //定义参数
         am.invokeMethod("removedata",parameters);  //调用AM方法并传入参数
     }
执行效果就是当用户点击某行的删除图标,该行即被删除。

  • 批量记录删除: (Tony大神介绍了跟多的方法,在此引用了其中一种)

此方法利用记录数组来遍历. 伪码如下:
public void deletedata(){
OAViewObjectImpl vo1 =  this.getOrderLineVO1(); //实例化VO
    Row[] row = vo1.getFilteredRows("Deleteflag", new String(“Y”));  //生成要删除的记录集
    for (int i=1;i<=row.length;i++) //根据记录集的记录数进行循环
    {
      row[i].remove(); //删除
      getTransaction().commit(); //提交
    }
}
这个方法是根据删除标记来确定记录集,然后把这个集的所有记录删除,效果与上面差不多

 

bubuko.com,布布扣二、案例1. 单记录删除


案例:选中一条Expense Line,点击Delete,删除该条记录

1. 选中需删除的该记录

bubuko.com,布布扣

2. 调用CO中的方法

bubuko.com,布布扣

3. 调用AM中的方法,对Row进行操作,删除选中的记录

bubuko.com,布布扣

4.  删除该记录后,系统不再显示

bubuko.com,布布扣

 

bubuko.com,布布扣三、案例2 批量记录删除


案例:选中多条Expense Line,点击Delete,删除这多条条记录

1. 选中需删除的该记录

bubuko.com,布布扣

2. 调用CO中的方法

bubuko.com,布布扣

3. 调用AM中的方法,对Row进行操作,删除选中的记录

bubuko.com,布布扣

4.  删除该记录后,系统不再显示

bubuko.com,布布扣

 

参考: Tony Liu深入EO系列

 

Thanks and Regards

bubuko.com,布布扣 

OAF_OAF EO系列增删改 - Delete详解和实现(案例),布布扣,bubuko.com

OAF_OAF EO系列增删改 - Delete详解和实现(案例)

标签:des   cWeb   style   blog   code   tar   

原文地址:http://www.cnblogs.com/eastsea/p/3788577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!