• OAF 汇总行的做法


    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) 测试页面
     
  • 相关阅读:
    Linux下监视GPU、CPU的使用情况
    2014多校第一场 E 题 || HDU 4865 Peter's Hobby (DP)
    2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
    2014多校第一场D题 || HDU 4864 Task (贪心)
    2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
    2014多校第一场A题 || HDU 4861 Couple doubi
    POJ 2948 Martian Mining(DP)
    POJ 2029 Get Many Persimmon Trees(DP||二维树状数组)
    POJ 3280 Cheapest Palindrome(DP)
    POJ 4044 Score Sequence
  • 原文地址:https://www.cnblogs.com/objmodel/p/7641226.html
Copyright © 2020-2023  润新知