博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OAF 汇总行的做法
阅读量:6613 次
发布时间:2019-06-24

本文共 5581 字,大约阅读时间需要 18 分钟。

1.如果你要做成固定的汇总行(自动汇总当前显示记录,不需要添加任何代码),可以使用普通的 “Table ”(当然也可以使用“AdvanceTable”,不过没必要,“AdvanceTable”创建比较麻烦)。设置方法就是把汇总的字段(汇总字段必须是Number类型)中的属性“Visual -> Total Value”改成“True”即可。

 
2.如果你要做成动态的汇总行,那你必须用到“AdvanceTable”。具体方法如下:
 
(1) 创建一个“AdvanceTable”,把相应的字段添加完毕。
 

 

a是字段列。
b是字段值。
c是字段显示名称。
 
(2) 确定要汇总的字段并设置相应属性。
注:选择(1)中描述的“a”可以看到上述属性。
 
a选择“True”表示改字段是汇总字段。
b是选择当前字段是以什么类型显示,有四种显示类型“iconButtonFormat”、“numberFormat”、“objectNameFormat”、“textFormat”请根据具体情况设定。
 
(3) 为“AdvanceTable”创建一个“footer”->“total”
 
 
(4) 实现全选和全部不选的功能。
i.在 “AdvanceTable”所用的“View Instance”中添加一个字段“Selected_Flag”,如下:
 
SELECT
'N'
as
selected_flag
       ,vendor_line_id
      ,header_id
      ,currency_code
      ,amount
FROM
   cux_po_cnt_vendors_all
order
by
vendor_line_id
 
ii.在“AdvanceTable”中添加一列“SelectedFlagCol”,“View Attribute”选择刚才创建的“SelectedFlag”,然后为其添加“Client Action” (添加此 Ation 是为了在点击的时候能刷新汇总行数值)
 
 
iii.为“AdvanceTable”添加一个“tableAtions”,此时修改自动创建的“flowLayout”为“rowLayout”(添加这个是为了显示“全选”和“全部不选”)。然后在“rowLayout”下创建两个“link”,填写“Visual -> Text”为“全选|”和“全部不选”。并且分别添加“Client Action” 为“SelectAll”和“NotSelectAll”,“Action Type”都选择“fireAction”.
 
 
iii.添加控制代码
 
在页面“AMImpl”中写如下代码:
    
public String[] totalLine() {
    String[] str = new String[2];
    CuxTestVOImpl vo = getCuxTestVO1();
    int fetchCount = vo.getRowCount();
    BigDecimal totalAmt = new BigDecimal(0);
    double totalId = 0;
    RowSetIterator totalIter = vo.createRowSetIterator("totalIter");
    // validate record line
    if (fetchCount > 0) {
        totalIter.setRangeStart(0);
        totalIter.setRangeSize(fetchCount);
        for (int i = 0; i < fetchCount; i++) {
            CuxTestVORowImpl row = (CuxTestVORowImpl)totalIter.next();
            if (row.getSelectedFlag() != null) {
                String selectFlag = row.getSelectedFlag();
                if (selectFlag.equals("Y")) {
                    if (row.getAmount() != null) {
                        System.out.println(String.valueOf(String.valueOf(row.getAmount())));
                        System.out.println(String.valueOf(String.valueOf(new Number(row.getAmount()))));
                        totalAmt =
                                totalAmt.add(new BigDecimal(String.valueOf(row.getAmount())));
                        //add(totalAmt, Double.valueOf(String.valueOf(row.getAmount())));
                        System.out.println(String.valueOf(totalAmt));
                    }
                    if (row.getHeaderId() != null)
                        totalId =
                                totalId + Double.valueOf(row.getHeaderId().toString());
                }
            }
        }
    }
    totalIter.closeRowSetIterator();
    //BigDecimal b1 = new BigDecimal(totalAmt);
    DecimalFormat df = new DecimalFormat("#,##0.00");
    str[0] = String.valueOf(df.format(totalAmt));
    //str[0] = String.valueOf(totalAmt);
    str[1] = String.valueOf(totalId);
    return str;
}
public void selectAll() {
    CuxTestVOImpl vo = getCuxTestVO1();
    int fetchCount = vo.getRowCount();
    RowSetIterator selectAllIter =
        vo.createRowSetIterator("selectAllIter");
    // validate record line
    if (fetchCount > 0) {
        selectAllIter.setRangeStart(0);
        selectAllIter.setRangeSize(fetchCount);
        for (int i = 0; i < fetchCount; i++) {
            CuxTestVORowImpl row = (CuxTestVORowImpl)selectAllIter.next();
            row.setSelectedFlag("Y");
        }
    }
    selectAllIter.closeRowSetIterator();
}
public void notSelectAll() {
    CuxTestVOImpl vo = getCuxTestVO1();
    int fetchCount = vo.getRowCount();
    RowSetIterator notSelectAllIter =
        vo.createRowSetIterator("notSelectAllIter");
    // validate record line
    if (fetchCount > 0) {
        notSelectAllIter.setRangeStart(0);
        notSelectAllIter.setRangeSize(fetchCount);
        for (int i = 0; i < fetchCount; i++) {
            CuxTestVORowImpl row =
                (CuxTestVORowImpl)notSelectAllIter.next();
            row.setSelectedFlag("N");
        }
    }
    notSelectAllIter.closeRowSetIterator();
}
 
 
在页面“CO”控制中添加一个函数
 
/**
* 设置界面汇总字段值
* @param pageContext the current OA page context
* @param webBean the web bean corresponding to the region
*/
public void setTotalFieldValue(OAPageContext pageContext,
                               OAWebBean webBean){
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    String[] str = new String[1];
    /* 获取汇总字段值 */
    str = (String[])am.invokeMethod("totalLine");
    /* 获得页面Bean */
    OAAdvancedTableBean advtableBean =
        (OAAdvancedTableBean)webBean.findIndexedChildRecursive("region4");
    OAMessageTextInputBean amountBean =
        (OAMessageTextInputBean)advtableBean.findChildRecursive("Amount");
    // compute the total
    amountBean.setAttributeValue(TABULAR_FUNCTION_VALUE_ATTR, str[0]);
}
 
分别在 processRequest 和 processFormRequest 中写入如下代码
 
/**
* Layout and page setup logic for a region.
* @param pageContext the current OA page context
* @param webBean the web bean corresponding to the region
*/
public void processRequest(OAPageContext pageContext, OAWebBean webBean) {
    super.processRequest(pageContext, webBean);
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    OAViewObject vo = (OAViewObject)am.findViewObject("CuxTestVO1");
    if (vo != null) {
        vo.setWhereClause(null);
        vo.setWhereClauseParams(null);
        //执行查询
        vo.executeQuery();
    }
    /* 设置界面汇总字段值 */
    setTotalFieldValue(pageContext, webBean);
}
/**
* Procedure to handle form submissions for form elements in
* a region.
* @param pageContext the current OA page context
* @param webBean the web bean corresponding to the region
*/
public void processFormRequest(OAPageContext pageContext,
                               OAWebBean webBean) {
    super.processFormRequest(pageContext, webBean);
    OAApplicationModule am = pageContext.getApplicationModule(webBean);
    if (pageContext.getParameter(EVENT_PARAM).equals("SelectAll")) {
        /* 勾上所有选中的Checkbox */  
        am.invokeMethod("selectAll");
        /* 设置界面汇总字段值 */ 
        setTotalFieldValue(pageContext, webBean);
    } else if (pageContext.getParameter(EVENT_PARAM).equals("NotSelectAll")) {
        /* 去掉所有选中的Checkbox */ 
        am.invokeMethod("notSelectAll");
        /* 设置界面汇总字段值 */ 
        setTotalFieldValue(pageContext, webBean);
    } else if (pageContext.getParameter(EVENT_PARAM).equals("SelectRecord")) {
        /* 设置界面汇总字段值 */ 
        setTotalFieldValue(pageContext, webBean);
    }
}
 
(5) 测试页面
 

 

转载于:https://www.cnblogs.com/objmodel/p/7641226.html

你可能感兴趣的文章
Devstack — screen 调试工具的使用
查看>>
壮士断腕!WordPress宣布停止使用React
查看>>
WCF版的PetShop之二:模块中的层次划分[提供源代码下载]
查看>>
RabbitMQ常用命令
查看>>
阿里云中间件技术 促进互联网高速发展
查看>>
Fusion-io: 全闪存超大规模数据中心时代的到来
查看>>
LSI针对富士通服务器推出高密度SAS存储设备
查看>>
XtremIO推第二代设备 在块存储上增加文件特性
查看>>
什么是高可用性(HA)?HA是什么
查看>>
82岁成都“极客”老人将族谱“上云” 还想去杭州云栖大会见马云
查看>>
智能时代悄然到来 物联网称王将引爆传感器产业
查看>>
Palo Alto Networks推出云应用框架
查看>>
物理隔离计算机被USB蜜蜂刺破 数据通过无线信号泄露
查看>>
大数据安全分析成未来方向 360市场份额第一
查看>>
利用一点机器学习来加速你的网站
查看>>
安天研究报告:白象的舞步——来自南亚次大陆的网络攻击
查看>>
中国域名现状:应用水平较低,安全仍存隐患
查看>>
Java中HashMap的原理分析
查看>>
React Native入门项目与解析
查看>>
云计算:大势所趋 你准备好了么?
查看>>