如何通过JavaScript向APEX交互式网格编程添加记录?
在APEX交互式网格中通过JavaScript添加新记录
嘿,你找对路子了!APEX的交互式网格(Interactive Grid)的Model对象确实提供了专门的方法来创建和添加新记录,正好能帮你完成把选中行插入另一个网格底层表的需求。我来一步步给你讲清楚怎么实现:
核心方法:createRecord()
你已经知道怎么获取网格的Model了,添加记录的关键就是调用Model的createRecord()函数——它可以根据你传入的字段数据创建一条新记录,之后会自动把这条记录纳入Model管理,最后你只需要同步到视图和数据库就行。
完整实现步骤
假设你已经拿到了源网格(grid1)中选中的记录,接下来只需要对目标网格(grid2)做以下操作:
获取目标网格的Model对象
和你获取源网格Model的方式一致,先拿到目标网格的jQuery对象,再提取Model:// 替换成你目标网格的实际ID var targetIg = $("#grid2").interactiveGrid("getViews", "grid"); var targetModel = targetIg.model;循环处理选中的源记录,创建新记录
遍历你已经获取的选中记录,提取需要的字段值,然后用createRecord()生成新记录:// 假设你已经拿到了源网格的选中记录集合 selectedRecords.forEach(function(sourceRecord) { // 构造新记录的字段数据,键名要和目标网格的底层表列名一致 var newRecordData = { // 替换成你的实际字段映射关系 EMP_ID: sourceRecord.getValue("SOURCE_EMP_ID"), EMP_NAME: sourceRecord.getValue("SOURCE_EMP_NAME"), DEPT_NAME: sourceRecord.getValue("SOURCE_DEPT_NAME") }; // 创建新记录,createRecord会自动把记录添加到Model中 var newRecord = targetModel.createRecord(newRecordData); // 如果你担心自动添加失效,可以显式调用add方法(可选) // targetModel.add(newRecord); });刷新目标网格视图
创建记录后,需要刷新网格视图才能看到新添加的内容:targetIg.viewModel.refresh();可选:提交到底层数据库
如果你希望立即把新记录保存到数据库,可以调用网格的save()方法:$("#grid2").interactiveGrid("save");
关键注意事项
- 字段名匹配:
newRecordData中的键名必须和目标网格底层表的列名完全一致,或者和Model中定义的字段名一致(通常就是列名)。 - 字段类型正确:确保传入的字段值类型和目标列匹配,比如日期字段要传
Date对象,数字字段传数值类型,避免字符串类型导致的保存错误。 - 必填字段处理:如果目标网格有必填字段,必须在
newRecordData中为这些字段赋值,否则创建记录或保存时会报错。 - 权限验证:确保当前用户有目标表的插入权限,否则保存操作会失败。
完整示例代码
把所有步骤整合起来,就是这样的:
// 1. 获取源网格的选中记录 var sourceIg = $("#grid1").interactiveGrid("getViews", "grid"); var selectedRecords = sourceIg.getSelectedRecords(); // 2. 获取目标网格的Model var targetIg = $("#grid2").interactiveGrid("getViews", "grid"); var targetModel = targetIg.model; // 3. 循环创建新记录 selectedRecords.forEach(function(sourceRecord) { var newRecordData = { // 替换为你的实际字段映射 EMPLOYEE_ID: sourceRecord.getValue("EMPLOYEE_ID"), FIRST_NAME: sourceRecord.getValue("FIRST_NAME"), LAST_NAME: sourceRecord.getValue("LAST_NAME"), EMAIL: sourceRecord.getValue("EMAIL") }; targetModel.createRecord(newRecordData); }); // 4. 刷新视图并保存(可选) targetIg.viewModel.refresh(); // $("#grid2").interactiveGrid("save");
内容的提问来源于stack exchange,提问作者Coding Duchess
相关产品推荐
相关产品推荐

