表单模型

普通子表API

普通子表使用Table展现数据,提供了对话框侧边栏的打开方式查看数据,不能直接编辑。

提供了以下常用的方法用于JS开发

调用示例

AWSCommonGrid.openRowData('d256fa53-a69a-42b1-9985-200a45d967e4', '', '800', '80%', 'dialog');

AWSCommonGrid.openRowData()

普通子表弹出新建对话框或者侧边栏界面。

参数名 说明
formItemDefId 表单项子表定义ID,该参数可以在表单子表配置窗口查看(下同)
boId 子表记录ID
dlgWidth 针对打开方式不同,参数值不同:
dialog时:传入对话框的宽度,支持数值和百分比;
side时:侧边栏的宽度,支持数值和百分比;
dlgHeight 针对打开方式不同,参数值不同:
dialog时:传入对话框的高度,支持数值和百分比;
side时:传入true遮罩;传入false不遮罩;
openMode 子表打开方式,提供dialog对话框和side侧边栏两种打开方式

AWSCommonGrid.getSelectedRows()

获取子表选择的记录。

参数名 说明
formItemDefId 表单项子表定义ID,该参数可以在表单子表配置窗口查看
返回值 BO表记录Id,多个使用英文半角逗号分隔

AWSCommonGrid.gotoPage()

跳转到子表指定页的数据,如果展示第一页数据,相当于刷新整个子表数据。

参数名 说明
formItemDefId 表单项ID
pageNum 展示第几页内容
isRefreshPage 是否需要刷新数据
callback 一个回调函数,展示完数据之后调用

AWSCommonGrid.insertRowData()

子表参考录入窗口。

参数名 说明
boDefId 对应子表存储模型定义ID
boDefName 对应子表存储模型的表名
dicName 字典名称,完整的参考录入字典文件名
dicTitle 字典标题
formItemDefId 表单项子表定义ID,该参数可以在表单子表配置窗口查看
isSaveForm 是否需要保存主表

AWSCommonGrid.openRowData()

打开一条子表数据。

参数名 说明
formItemDefId 表单项子表定义ID,该参数可以在表单子表配置窗口查看
boId BO记录Id
dlgWidth 对话框宽度
dlgHeight 对话框高度
openMode 打开模式,仅提供对话框dialog和侧边栏sidebar两种打开方式
fieldTableBindId 字段子表实例id(仅仅用在字段子表),可为空
isDetail 是否明细信息(仅仅用在字段子表),可为空
fieldTableBoItemName 字段子表字段名(仅仅用在字段子表),可为空
bindId 流程实例Id,可为空
isSaveMainWhenAdded 添加是是否保存主表,可为空

AWSCommonGrid.removeRowData()

删除子表数据。

参数名 说明
formItemDefId 表单项子表定义ID,该参数可以在表单子表配置窗口查看
boId BO记录Id

AWSCommonGrid.setGridTableWidth()

设置普通子表的动态宽度,宽度会根据子表所在容器进行100%计算。

参数名 说明
formItemDefId 表单项子表定义ID,该参数可以在表单子表配置窗口查看

Ajax子表API

平台提供了一种Grid,这个表格可实现直接编辑,保存,删除等,不必单独打开一个界面即可直接操作,非常方便。文档可参考: http://ip:port/portal/commons/awsui/index.html#component/grid

Ajax子表是用Grid组件实现的一个特殊的场景,所以上述页面中的相关API并不适用Ajax子表,因此Ajax子表封装了常用的API用来完成上述API的操作。不适用也不是绝对的,了解了整体结构之后,还是可以参考Grid的API文档处理进行调用的。

只要是在有Ajax子表的表单上,就可以用到AWSGrid这个对象。 这个对象封装了针对Ajax子表的所有方法。

AWSGrid.list

注意,这是一个属性,不是一个函数

一个数组,数组的内容是子表的BO表名,当表单中有多个子表时,可以使用该数组进行遍历

调用方法

var boArray = AWSGrid.list;
for(var i in boArray) {
    var boDefName = boArray[i];
    console.log(boDefName);
}

AWSGrid.getGrid(boDefName)

获取子表定义中的grid对象

调用方法

var bogrid = AWSGrid.getGrid("BO表名");//传入具体的BO表名
参数名 说明
boDefName BO表名

在GridAPI(http://ip:port/portal/commons/awsui-library/index.html#form/grid) 一节中, 示例1 - 标准网格中,有如下代码:

var $grid = $("#grid1").awsGrid(obj);
$grid.find(".pq-pager").awsGridPager("option", $.awsgrid.awsGridPager.regional["zh"]);

该函数的返回值,即相当于上述代码中的$grid变量,通过这个变量,可以访问文档中提供的属性,调用API中提供的方法,绑定相应的事件

AWSGrid.getGridAPI

返回一个API对象,封装了常用的方法,具体函数参考下面子节

调用方法

var bogridapi = AWSGrid.getGridAPI("BO表名");//传入具体的BO表名
参数名 说明
boDefName BO表名

AWSGrid.getGridAPI("BO表名").getFieldValue(rowIndx, fieldName)

获取grid中一行的字段的值

调用方法

var fieldVal = AWSGrid.getGridAPI("BO表名").getFieldValue(0, "字段名");//获取第一行指定字段名的值
参数名 说明
rowIndx 行索引,从0开始
fieldName BO表的字段名

AWSGrid.getGridAPI("BO表名").setFieldValue(rowIndx, fieldName, value)

给指定行的字段设置一个新的值

调用方法**调用方法**

AWSGrid.getGridAPI("BO表名").setFieldValue(0, "字段名", newVal);
参数名 说明
rowIndx 行索引,从0开始
fieldName BO表的字段名
value 新的值

AWSGrid.getGridAPI("BO表名").getSelectedRowDatas()

获取当前grid所选择行的数据(json数组形式,顺序按选中的顺序)

调用方法

var selectedData = AWSGrid.getGridAPI("BO表名").getSelectedRowDatas();

AWSGrid.getGridAPI("BO表名").getUnSelectedRowDatas()

获取当前未选中的行的数据

调用方法

var unSelectedData = AWSGrid.getGridAPI("BO表名").getUnSelectedRowDatas();

AWSGrid.getGridAPI("BO表名").getSelectedRowIndxs()

获取当前grid所选择行的索引(数组形式,并与所选行的数据相对应,顺序按选中的顺序)

调用方法

var unSelectedRowIndxs = AWSGrid.getGridAPI("BO表名").getSelectedRowIndxs();

AWSGrid.getGridAPI("BO表名").getUnSelectedRowIndxs()

获取当前grid未选择行的索引(数组形式)

调用方法

var unSelectedRowIndxs = AWSGrid.getGridAPI("BO表名").getUnSelectedRowIndxs();

AWSGrid.getGridAPI("BO表名").getCurrentRowIndx()

获取当前所选中的行的索引值,仅在选中一行时有效,如果选中多行,返回值和getSelectedRowIndxs函数返回值一致

调用方法

var unSelectedRowIndxs = AWSGrid.getGridAPI("BO表名").getCurrentRowIndx();

AWSGrid.addRow(boDefId, boDefName)

调用方法

AWSGrid.addRow("BO表定义ID", "BO表名");

子表插入一行数据,调用后,会根据BO表字段设置的默认值,自动插入一条数据。插入后,会触发BO_XXX_rowsinserted事件

参数名 说明
boDefId BO表定义ID
boDefName BO表表名

另外如果想自行定义插入数据的内容,就需要特别处理。

awsui.ajax.request({
    url : './jd',
    type : 'POST',
    dataType : 'json',
    alert : false,
    data : {
        sid : $("#sid").val(),
        cmd : 'CLIENT_BPM_FORM_EDITGRID_GET_DEFAULT_ROWDATA',
        processInstId : $("#processInstId").val(),
        taskInstId : $("#taskInstId").val(),
        boDefId : boDefId
    },
    success : function(r) {
        if (r.result == "ok") {
            var newRowData = r.data;
            console.log(newRowData)
            AWSGrid.getGrid(boDefName).awsGrid("addRowToBottom", newRowData);
            var rowIndx = AWSGrid.getGrid(boDefName).awsGrid("option").dataModel.data.length - 1;
            // 注意以下代码是平台默认需要处理的内容,如果不需要可以在自己调用的时候删除掉
            //插入后事件
            if (checkGridFnEventExist(boDefName, "_rowsinserted")) {
                eval(boDefName + "_rowsinserted(rowIndx, newRowData)");
            }
            //执行表单规则
            if (dynamicRule) {
                dynamicRule.executeFormulaByFirstCreate(boDefName, rowIndx);
                dynamicRule.executeFormulaByGridAdd(boDefName);
            }
        } else if (r.result == "error") {
            $.simpleAlert(r.msg, "error");
        }
    }
});

上述代码是平台封装的插入一行数据的源码,其中newRowData,是服务器封装好的一个json结构,格式如下:

var newRowData = {
    AF1: "",
    AF2: "",
    BINDID: "3733dd08-7804-4b94-9368-b858a6e0be78",
    FORM_EDITGRID_DATA_ATTR_COLUMN: {
        "isCreate":true
    },
    ID: "0507b4ae-fae6-42dc-b030-c20d3c74b8aa",
    PROCESSDEFID: "obj_c0c7c110f0cf462483222af886535144",
    rowIndx: 1,
    selectedRow: true
};

这个结构是增加了特殊字段的,这样才能符合Ajax子表的要求。

  • AF1AF2这两个是BO表的字段,根据表结构不同会有变化
  • BINDID是当前流程实例ID,这个是必须的
  • FORM_EDITGRID_DATA_ATTR_COLUMN 这个字段是结构中的一个特殊定义,用于该还记录的特殊控制
  • ID 该行记录的唯一标识,一个UUID
  • PROCESSDEFID 流程定义ID
  • rowIndx 行索引,从0开始
  • selectedRow 是否选中行,默认为true

形成上述json结构后,即可调用下面代码插入数据了。

AWSGrid.getGrid("BO表名").awsGrid("addRow", newRowData, 'bottom');

AWSGrid.removeData(boDefId, boDefName, formItemDefId)

调用方法

AWSGrid.removeData("BO表定义ID", "BO表名", "表单项的子表定义ID");

删除子表一行数据,如果该行数据已经存储到数据库中,会提示是否删除,如果没有,则直接删除。删除后,会触发BO_XXX_rowremoved事件。

参数名 说明
boDefId BO表定义ID
boDefName BO表表名
formItemDefId 表单项的子表定义ID,该参数可以在表单子表配置窗口查看

AWSGrid.refreshData(boDefId, boDefName, showAlert)

调用方法

AWSGrid.refreshData("BO表定义ID", "BO表名", true);

刷新Ajax子表的数据,将读取服务器的内容从新渲染数据。刷新后,会触发BO_XXX_refresh事件。

参数名 说明
boDefId BO表定义ID
boDefName BO表表名
showAlert 是否显示提示消息

AWSGrid.saveData(boDefId, boDefName, isShowMsg, isValidateForm)

调用方法

AWSGrid.saveData("BO表定义ID", "BO表名", true, true);

保存修改过的Ajax子表数据,注意:不包括未修改的数据。工具栏保存按钮直接调用该函数,如果有需要,可手动调用。

参数名 说明
boDefId BO表定义ID
boDefName BO表表名
isShowMsg 是否显示提示消息,true:在成功后提示一个消息;false:不提示
isValidateForm 是否校验数据(有效性校验),true:校验子表的数据;false:不校验

AWSGrid.getGridData(boDefName, isShowMsg, isValidateForm)

调用方法

var gridData = AWSGrid.getGridData("BO表名", true, true);

获取Ajax子表编辑后的数据,注意:不包括未修改的数据。如果校验参数传入true,将获取所有数据进行校验,包括未编辑的数据,然后返回编辑后的数据。

参数名 说明
boDefName BO表表名
isShowMsg 是否显示提示消息,true:在成功后提示一个消息;false:不提示
isValidateForm 是否校验数据(有效性校验),true:校验子表的数据;false:不校验
返回值
返回Ajax子表编辑后的数据,注意:不包括未修改的数据。

AWSGrid.setEditGridWidth(boDefName)

调用方法

var gridData = AWSGrid.setEditGridWidth("BO表名");

设置Ajax子表的宽度,会根据子表所在容器计算100%的宽度。

参数名 说明
boDefName BO表表名
isShowMsg 是否显示提示消息,true:在成功后提示一个消息;false:不提示
isValidateForm 是否校验数据(有效性校验),true:校验子表的数据;false:不校验
返回值
返回Ajax子表编辑后的数据,注意:不包括未修改的数据。


Seven
 010-62962343-690
 liujx@actionsoft.com.cn
感谢您对该文档的关注!如果您对当前页面内容有疑问或好的建议,请与我联系。如果您需要解答相关技术问题请登录AWS客户成功社区