普通子表使用Table展现数据,提供了对话框
,侧边栏
的打开方式查看数据,不能直接编辑。
提供了以下常用的方法用于JS开发
子表新增事件。
参数名 | 说明 |
---|---|
formItemDefId | 表单项子表定义ID,该参数可以在表单子表配置窗口查看(下同) |
获取子表选择的记录。
参数名 | 说明 |
---|---|
formItemDefId | 表单项子表定义ID,该参数可以在表单子表配置窗口查看 |
跳转到子表指定页的数据,如果展示第一页数据,相当于刷新整个子表数据。
参数名 | 说明 |
---|---|
formItemDefId | 表单项ID |
pageNum | 展示第几页内容 |
isRefreshPage | 是否需要刷新数据 |
callback | 一个回调函数,展示完数据之后调用 |
子表参考录入窗口。
参数名 | 说明 |
---|---|
boDefId | 对应子表存储模型定义ID |
boDefName | 对应子表存储模型的表名 |
dicName | 字典名称,完整的参考录入字典文件名 |
dicTitle | 字典标题 |
formItemDefId | 表单项子表定义ID,该参数可以在表单子表配置窗口查看 |
isSaveForm | 是否需要保存主表 |
打开一条子表数据。
参数名 | 说明 |
---|---|
formItemDefId | 表单项子表定义ID,该参数可以在表单子表配置窗口查看 |
boId | BO记录Id |
dlgWidth | 对话框宽度 |
dlgHeight | 对话框高度 |
openMode | 打开模式,仅提供对话框dialog 和侧边栏sidebar 两种打开方式 |
fieldTableBindId | 字段子表实例id(仅仅用在字段子表),可为空 |
isDetail | 是否明细信息(仅仅用在字段子表),可为空 |
fieldTableBoItemName | 字段子表字段名(仅仅用在字段子表),可为空 |
bindId | 流程实例Id,可为空 |
isSaveMainWhenAdded | 添加是是否保存主表,可为空 |
删除子表数据。
参数名 | 说明 |
---|---|
formItemDefId | 表单项子表定义ID,该参数可以在表单子表配置窗口查看 |
boId | BO记录Id |
平台提供了一种Grid,这个表格可实现直接编辑,保存,删除等,不必单独打开一个界面即可直接操作,非常方便。文档可参考: http://ip:port/portal/commons/awsui/index.html#component/grid
Ajax子表是用Grid组件实现的一个特殊的场景,所以上述页面中的相关API并不适用Ajax子表,因此Ajax子表封装了常用的API用来完成上述API的操作。不适用也不是绝对的,了解了整体结构之后,还是可以参考Grid的API文档处理进行调用的。
只要是在有Ajax子表的表单上,就可以用到AWSGrid
这个对象。
这个对象封装了针对Ajax子表的所有方法。
注意,这是一个属性,不是一个函数
一个数组,数组的内容是子表的BO表名,当表单中有多个子表时,可以使用该数组进行遍历
调用方法
var boArray = AWSGrid.list;
for(var i in boArray) {
var boDefName = boArray[i];
console.log(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中提供的方法,绑定相应的事件
返回一个API对象,封装了常用的方法,具体函数参考下面子节
调用方法
var bogridapi = AWSGrid.getGridAPI("BO表名");//传入具体的BO表名
参数名 | 说明 |
---|---|
boDefName | BO表名 |
获取grid中一行的字段的值
调用方法
var fieldVal = AWSGrid.getGridAPI("BO表名").getFieldValue(0, "字段名");//获取第一行指定字段名的值
参数名 | 说明 |
---|---|
rowIndx | 行索引,从0开始 |
fieldName | BO表的字段名 |
给指定行的字段设置一个新的值
调用方法**调用方法**
AWSGrid.getGridAPI("BO表名").setFieldValue(0, "字段名", newVal);
参数名 | 说明 |
---|---|
rowIndx | 行索引,从0开始 |
fieldName | BO表的字段名 |
value | 新的值 |
获取当前grid所选择行的数据(json数组形式,顺序按选中的顺序)
调用方法
var selectedData = AWSGrid.getGridAPI("BO表名").getSelectedRowDatas();
获取当前未选中的行的数据
调用方法
var unSelectedData = AWSGrid.getGridAPI("BO表名").getUnSelectedRowDatas();
获取当前grid所选择行的索引(数组形式,并与所选行的数据相对应,顺序按选中的顺序)
调用方法
var unSelectedRowIndxs = AWSGrid.getGridAPI("BO表名").getSelectedRowIndxs();
获取当前grid未选择行的索引(数组形式)
调用方法
var unSelectedRowIndxs = AWSGrid.getGridAPI("BO表名").getUnSelectedRowIndxs();
获取当前所选中的行的索引值,仅在选中一行时有效,如果选中多行,返回值和getSelectedRowIndxs
函数返回值一致
调用方法
var unSelectedRowIndxs = AWSGrid.getGridAPI("BO表名").getCurrentRowIndx();
调用方法
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子表的要求。
AF1
,AF2
这两个是BO表的字段,根据表结构不同会有变化BINDID
是当前流程实例ID,这个是必须的FORM_EDITGRID_DATA_ATTR_COLUMN
这个字段是结构中的一个特殊定义,用于该还记录的特殊控制ID
该行记录的唯一标识,一个UUIDPROCESSDEFID
流程定义IDrowIndx
行索引,从0开始selectedRow
是否选中行,默认为true形成上述json结构后,即可调用下面代码插入数据了。
AWSGrid.getGrid("BO表名").awsGrid("addRow", newRowData, 'bottom');
调用方法
AWSGrid.removeData("BO表定义ID", "BO表名", "表单项的子表定义ID");
删除子表一行数据,如果该行数据已经存储到数据库中,会提示是否删除,如果没有,则直接删除。删除后,会触发BO_XXX_rowremoved事件。
参数名 | 说明 |
---|---|
boDefId | BO表定义ID |
boDefName | BO表表名 |
formItemDefId | 表单项的子表定义ID,该参数可以在表单子表配置窗口查看 |
调用方法
AWSGrid.refreshData("BO表定义ID", "BO表名", true);
刷新Ajax子表的数据,将读取服务器的内容从新渲染数据。刷新后,会触发BO_XXX_refresh事件。
参数名 | 说明 |
---|---|
boDefId | BO表定义ID |
boDefName | BO表表名 |
showAlert | 是否显示提示消息 |
调用方法
AWSGrid.saveData("BO表定义ID", "BO表名", true, true);
保存修改过的Ajax子表数据,注意:不包括未修改的数据。工具栏保存
按钮直接调用该函数,如果有需要,可手动调用。
参数名 | 说明 |
---|---|
boDefId | BO表定义ID |
boDefName | BO表表名 |
isShowMsg | 是否显示提示消息,true:在成功后提示一个消息;false:不提示 |
isValidateForm | 是否校验数据(有效性校验),true:校验子表的数据;false:不校验 |
调用方法
var gridData = AWSGrid.getGridData("BO表名", true, true);
获取Ajax子表编辑后的数据,注意:不包括未修改的数据。如果校验参数传入true,将获取所有数据进行校验,包括未编辑的数据,然后返回编辑后的数据。
参数名 | 说明 |
---|---|
boDefName | BO表表名 |
isShowMsg | 是否显示提示消息,true:在成功后提示一个消息;false:不提示 |
isValidateForm | 是否校验数据(有效性校验),true:校验子表的数据;false:不校验 |
返回值 |
---|
返回Ajax子表编辑后的数据,注意:不包括未修改的数据。 |