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) 测试页面
 
原文地址:https://www.cnblogs.com/objmodel/p/7641226.html